diff --git a/.vix-scripts/main/.vix-config.sig b/.vix-scripts/main/.vix-config.sig new file mode 100644 index 000000000..7760aa109 --- /dev/null +++ b/.vix-scripts/main/.vix-config.sig @@ -0,0 +1 @@ +useVix=0;san=1;mode=asan_ubsan;flags= \ No newline at end of file diff --git a/.vix-scripts/main/CMakeLists.txt b/.vix-scripts/main/CMakeLists.txt new file mode 100644 index 000000000..e985cc4c4 --- /dev/null +++ b/.vix-scripts/main/CMakeLists.txt @@ -0,0 +1,79 @@ +cmake_minimum_required(VERSION 3.20) +project(main LANGUAGES CXX) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_RULE_MESSAGES OFF) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE) +endif() + +option(VIX_ENABLE_SANITIZERS "Enable sanitizers (dev only)" OFF) +set(VIX_SANITIZER_MODE "asan_ubsan" CACHE STRING "Sanitizer mode: asan_ubsan or ubsan") +set_property(CACHE VIX_SANITIZER_MODE PROPERTY STRINGS asan_ubsan ubsan) +option(VIX_ENABLE_LIBCXX_ASSERTS "Enable libstdc++ debug mode (_GLIBCXX_ASSERTIONS/_GLIBCXX_DEBUG)" OFF) +option(VIX_ENABLE_HARDENING "Enable extra hardening flags (non-MSVC)" OFF) +option(VIX_USE_ORM "Enable Vix ORM (requires vix::orm)" OFF) +add_executable(main "/home/softadastra/vixcpp/vixcpp.github.io/main.cpp") + +if (MSVC) + target_compile_options(main PRIVATE /W4 /permissive- /EHsc) + target_compile_definitions(main PRIVATE _CRT_SECURE_NO_WARNINGS) +else() + target_compile_options(main PRIVATE + -Wall -Wextra -Wpedantic + -Wshadow -Wconversion -Wsign-conversion + -Wformat=2 -Wnull-dereference + ) +endif() + +if (NOT MSVC) + target_compile_options(main PRIVATE -fno-omit-frame-pointer) + if (UNIX AND NOT APPLE) + target_link_options(main PRIVATE -rdynamic) + endif() +endif() + +if (VIX_ENABLE_LIBCXX_ASSERTS AND NOT MSVC) + target_compile_definitions(main PRIVATE _GLIBCXX_ASSERTIONS) +endif() + +if (VIX_ENABLE_HARDENING AND NOT MSVC) + target_compile_options(main PRIVATE -D_FORTIFY_SOURCE=2) + target_link_options(main PRIVATE -Wl,-z,relro -Wl,-z,now) +endif() + +if (UNIX AND NOT APPLE) + target_link_libraries(main PRIVATE pthread dl) +endif() + +if (VIX_ENABLE_SANITIZERS AND NOT MSVC) + if (VIX_SANITIZER_MODE STREQUAL "ubsan") + message(STATUS "Sanitizers: UBSan enabled") + target_compile_options(main PRIVATE + -O0 -g3 + -fno-omit-frame-pointer + -fsanitize=undefined + -fno-sanitize-recover=all + ) + target_link_options(main PRIVATE -fsanitize=undefined) + else() + message(STATUS "Sanitizers: ASan+UBSan enabled") + target_compile_options(main PRIVATE + -O1 -g3 + -fno-omit-frame-pointer + -fsanitize=address,undefined + -fno-sanitize-recover=all + ) + target_link_options(main PRIVATE -fsanitize=address,undefined) + target_compile_definitions(main PRIVATE VIX_ASAN_QUIET=1) + endif() +endif() + +if (UNIX AND NOT APPLE) + target_compile_options(main PRIVATE -g) +endif() diff --git a/.vix-scripts/main/build-ninja/.ninja_deps b/.vix-scripts/main/build-ninja/.ninja_deps new file mode 100644 index 000000000..8d2fd4d8f Binary files /dev/null and b/.vix-scripts/main/build-ninja/.ninja_deps differ diff --git a/.vix-scripts/main/build-ninja/.ninja_log b/.vix-scripts/main/build-ninja/.ninja_log new file mode 100644 index 000000000..78478af0d --- /dev/null +++ b/.vix-scripts/main/build-ninja/.ninja_log @@ -0,0 +1,6 @@ +# ninja log v5 +518 603 1770915918352695384 main 721ae6031b1cd498 +2 518 1770915918264145607 CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o bf24702f8d5e89a7 +1 32 1770915938012122188 build.ninja ee792a88bfb4f67b +1 586 1770915938608279264 CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o a76013ab13ff90d0 +586 681 1770915938709737797 main b6cd160cdd662c7e diff --git a/.vix-scripts/main/build-ninja/CMakeCache.txt b/.vix-scripts/main/build-ninja/CMakeCache.txt new file mode 100644 index 000000000..49c443ffc --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeCache.txt @@ -0,0 +1,354 @@ +# This is the CMakeCache file. +# For build in directory: /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Build type +CMAKE_BUILD_TYPE:STRING=Debug + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13 + +//No help, variable specified on the command line. +CMAKE_CXX_COMPILER_LAUNCHER:UNINITIALIZED=ccache + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//No help, variable specified on the command line. +CMAKE_C_COMPILER_LAUNCHER:UNINITIALIZED=ccache + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=main + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Enable extra hardening flags (non-MSVC) +VIX_ENABLE_HARDENING:BOOL=OFF + +//Enable libstdc++ debug mode (_GLIBCXX_ASSERTIONS/_GLIBCXX_DEBUG) +VIX_ENABLE_LIBCXX_ASSERTS:BOOL=OFF + +//Enable sanitizers (dev only) +VIX_ENABLE_SANITIZERS:BOOL=ON + +//Sanitizer mode: asan_ubsan or ubsan +VIX_SANITIZER_MODE:STRING=asan_ubsan + +//Enable Vix ORM (requires vix::orm) +VIX_USE_ORM:BOOL=OFF + +//Value Computed by CMake +main_BINARY_DIR:STATIC=/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja + +//Value Computed by CMake +main_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +main_SOURCE_DIR:STATIC=/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Ninja +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.28 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//STRINGS property for variable: VIX_SANITIZER_MODE +VIX_SANITIZER_MODE-STRINGS:INTERNAL=asan_ubsan;ubsan +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE + diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..28bae20fc --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake @@ -0,0 +1,85 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "13.3.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-13") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/local/include;/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/local/lib/x86_64-linux-gnu;/usr/local/lib;/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 000000000..e90f3f71d Binary files /dev/null and b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeSystem.cmake b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeSystem.cmake new file mode 100644 index 000000000..d9bb08fea --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.17.0-14-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.17.0-14-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.17.0-14-generic") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.17.0-14-generic") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..9c9c90eaf --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,869 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/CMakeConfigureLog.yaml b/.vix-scripts/main/build-ninja/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 000000000..7d6d6b880 --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,294 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:233 (message)" + - "CMakeLists.txt:2 (project)" + message: | + The system is: Linux - 6.17.0-14-generic - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/3.28.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/CMakeScratch/TryCompile-8TtIIA" + binary: "/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/CMakeScratch/TryCompile-8TtIIA" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/CMakeScratch/TryCompile-8TtIIA' + + Run Build Command(s): /usr/bin/ninja -v cmTC_eced0 + [1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_eced0.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccrLTyAn.s + GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/local/include" + ignoring duplicate directory "/usr/local/include" + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring duplicate directory "/usr/local/include" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/local/include + . + /usr/include/c++/13 + /usr/include/x86_64-linux-gnu/c++/13 + /usr/include/c++/13/backward + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + Compiler executable checksum: c81c05345ce537099dafd5580045814a + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/' + as -v --64 -o CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccrLTyAn.s + GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/local/lib/:/usr/local/lib/:/usr/local/lib/:./:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/c++ -v CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_eced0 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/local/lib/:/usr/local/lib/:/usr/local/lib/:./:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_eced0' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_eced0.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGjhWJR.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_eced0 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -L. -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_eced0' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_eced0.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/local/include] + add: [.] + add: [/usr/include/c++/13] + add: [/usr/include/x86_64-linux-gnu/c++/13] + add: [/usr/include/c++/13/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/13/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/local/include] ==> [/usr/local/include] + skipping relative include dir [.] + collapse include dir [/usr/include/c++/13] ==> [/usr/include/c++/13] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/13] ==> [/usr/include/x86_64-linux-gnu/c++/13] + collapse include dir [/usr/include/c++/13/backward] ==> [/usr/include/c++/13/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/local/include;/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/CMakeScratch/TryCompile-8TtIIA'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_eced0] + ignore line: [[1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_eced0.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccrLTyAn.s] + ignore line: [GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/local/include"] + ignore line: [ignoring duplicate directory "/usr/local/include"] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring duplicate directory "/usr/local/include"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/local/include] + ignore line: [ .] + ignore line: [ /usr/include/c++/13] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/13] + ignore line: [ /usr/include/c++/13/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: c81c05345ce537099dafd5580045814a] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccrLTyAn.s] + ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/local/lib/:/usr/local/lib/:/usr/local/lib/:./:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/c++ -v CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_eced0 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/local/lib/:/usr/local/lib/:/usr/local/lib/:./:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_eced0' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_eced0.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGjhWJR.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_eced0 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/local/lib/x86_64-linux-gnu -L/usr/local/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -L. -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccGjhWJR.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_eced0] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] + arg [-L/usr/local/lib/x86_64-linux-gnu] ==> dir [/usr/local/lib/x86_64-linux-gnu] + arg [-L/usr/local/lib/../lib] ==> dir [/usr/local/lib/../lib] + arg [-L/usr/local/lib/x86_64-linux-gnu] ==> dir [/usr/local/lib/x86_64-linux-gnu] + arg [-L/usr/local/lib/../lib] ==> dir [/usr/local/lib/../lib] + arg [-L/usr/local/lib/x86_64-linux-gnu] ==> dir [/usr/local/lib/x86_64-linux-gnu] + arg [-L/usr/local/lib/../lib] ==> dir [/usr/local/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/local/lib] ==> dir [/usr/local/lib] + arg [-L/usr/local/lib] ==> dir [/usr/local/lib] + arg [-L/usr/local/lib] ==> dir [/usr/local/lib] + arg [-L.] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] + arg [CMakeFiles/cmTC_eced0.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/local/lib/x86_64-linux-gnu] ==> [/usr/local/lib/x86_64-linux-gnu] + collapse library dir [/usr/local/lib/../lib] ==> [/usr/local/lib] + collapse library dir [/usr/local/lib/x86_64-linux-gnu] ==> [/usr/local/lib/x86_64-linux-gnu] + collapse library dir [/usr/local/lib/../lib] ==> [/usr/local/lib] + collapse library dir [/usr/local/lib/x86_64-linux-gnu] ==> [/usr/local/lib/x86_64-linux-gnu] + collapse library dir [/usr/local/lib/../lib] ==> [/usr/local/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/local/lib] ==> [/usr/local/lib] + collapse library dir [/usr/local/lib] ==> [/usr/local/lib] + collapse library dir [/usr/local/lib] ==> [/usr/local/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/local/lib/x86_64-linux-gnu;/usr/local/lib;/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +... diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/TargetDirectories.txt b/.vix-scripts/main/build-ninja/CMakeFiles/TargetDirectories.txt new file mode 100644 index 000000000..21c94db42 --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,3 @@ +/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/main.dir +/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/edit_cache.dir +/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/CMakeFiles/rebuild_cache.dir diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/cmake.check_cache b/.vix-scripts/main/build-ninja/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/.vix-scripts/main/build-ninja/CMakeFiles/rules.ninja b/.vix-scripts/main/build-ninja/CMakeFiles/rules.ninja new file mode 100644 index 000000000..7b5ffddc9 --- /dev/null +++ b/.vix-scripts/main/build-ninja/CMakeFiles/rules.ninja @@ -0,0 +1,64 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.28 + +# This file contains all the rules used to get the outputs files +# built from the input files. +# It is included in the main 'build.ninja'. + +# ============================================================================= +# Project: main +# Configurations: Debug +# ============================================================================= +# ============================================================================= + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__main_unscanned_Debug + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__main_Debug + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for running custom commands. + +rule CUSTOM_COMMAND + command = $COMMAND + description = $DESC + + +############################################# +# Rule for re-running cmake. + +rule RERUN_CMAKE + command = /usr/bin/cmake --regenerate-during-build -S/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main -B/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja + description = Re-running CMake... + generator = 1 + + +############################################# +# Rule for cleaning all built files. + +rule CLEAN + command = /usr/bin/ninja $FILE_ARG -t clean $TARGETS + description = Cleaning all built files... + + +############################################# +# Rule for printing all primary targets available. + +rule HELP + command = /usr/bin/ninja -t targets + description = All primary targets available: + diff --git a/.vix-scripts/main/build-ninja/build.ninja b/.vix-scripts/main/build-ninja/build.ninja new file mode 100644 index 000000000..e15028690 --- /dev/null +++ b/.vix-scripts/main/build-ninja/build.ninja @@ -0,0 +1,146 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.28 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: main +# Configurations: Debug +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + + +############################################# +# Set configuration variable for custom commands. + +CONFIGURATION = Debug +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles/rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/ +# ============================================================================= +# Object build statements for EXECUTABLE target main + + +############################################# +# Order-only phony target for main + +build cmake_object_order_depends_target_main: phony || CMakeFiles/main.dir + +build CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o: CXX_COMPILER__main_unscanned_Debug /home/softadastra/vixcpp/vixcpp.github.io/main.cpp || cmake_object_order_depends_target_main + DEFINES = -DVIX_ASAN_QUIET=1 + DEP_FILE = CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o.d + FLAGS = -g -std=c++20 -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion -Wformat=2 -Wnull-dereference -fno-omit-frame-pointer -O1 -g3 -fsanitize=address,undefined -fno-sanitize-recover=all -g + LAUNCHER = ccache + OBJECT_DIR = CMakeFiles/main.dir + OBJECT_FILE_DIR = CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io + + +# ============================================================================= +# Link build statements for EXECUTABLE target main + + +############################################# +# Link the executable main + +build main: CXX_EXECUTABLE_LINKER__main_Debug CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o + FLAGS = -g + LINK_FLAGS = -rdynamic -fsanitize=address,undefined + LINK_LIBRARIES = -lpthread -ldl + OBJECT_DIR = CMakeFiles/main.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = main + TARGET_PDB = main.dbg + + +############################################# +# Utility command for edit_cache + +build CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja && /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. + DESC = No interactive CMake dialog available... + restat = 1 + +build edit_cache: phony CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja && /usr/bin/cmake --regenerate-during-build -S/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main -B/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles/rebuild_cache.util + +# ============================================================================= +# Target aliases. + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja + +build all: phony main + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/CMakeLists.txt /usr/share/cmake-3.28/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.28/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.28/Modules/Compiler/GNU.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake-3.28/Modules/Platform/Linux.cmake /usr/share/cmake-3.28/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.28.3/CMakeCXXCompiler.cmake CMakeFiles/3.28.3/CMakeSystem.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/CMakeLists.txt /usr/share/cmake-3.28/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.28/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.28/Modules/Compiler/GNU.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.28/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake-3.28/Modules/Platform/Linux.cmake /usr/share/cmake-3.28/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.28.3/CMakeCXXCompiler.cmake CMakeFiles/3.28.3/CMakeSystem.cmake: phony + + +############################################# +# Clean all the built files. + +build clean: CLEAN + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/.vix-scripts/main/build-ninja/cmake_install.cmake b/.vix-scripts/main/build-ninja/cmake_install.cmake new file mode 100644 index 000000000..02a89042c --- /dev/null +++ b/.vix-scripts/main/build-ninja/cmake_install.cmake @@ -0,0 +1,54 @@ +# Install script for directory: /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/.vix-scripts/main/build-ninja/main b/.vix-scripts/main/build-ninja/main new file mode 100755 index 000000000..59e0b3dcb Binary files /dev/null and b/.vix-scripts/main/build-ninja/main differ diff --git a/.vix-scripts/main/build.log b/.vix-scripts/main/build.log new file mode 100644 index 000000000..1f3feb357 --- /dev/null +++ b/.vix-scripts/main/build.log @@ -0,0 +1,14 @@ +[1/2] Building CXX object CMakeFiles/main.dir/home/softadastra/vixcpp/vixcpp.github.io/main.cpp.o +In file included from /usr/include/string.h:548, + from /usr/include/c++/13/cstring:42, + from /home/softadastra/vixcpp/vixcpp.github.io/main.cpp:2: +In function ‘char* strcpy(char*, const char*)’, + inlined from ‘int main()’ at /home/softadastra/vixcpp/vixcpp.github.io/main.cpp:8:14: +/usr/include/x86_64-linux-gnu/bits/string_fortified.h:79:33: warning: ‘void* __builtin___memcpy_chk(void*, const void*, long unsigned int, long unsigned int)’ forming offset [8, 11] is out of the bounds [0, 8] of object ‘buf’ with type ‘char [8]’ [-Warray-bounds=] + 79 | return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest)); + | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/home/softadastra/vixcpp/vixcpp.github.io/main.cpp: In function ‘int main()’: +/home/softadastra/vixcpp/vixcpp.github.io/main.cpp:6:8: note: ‘buf’ declared here + 6 | char buf[8] = {}; + | ^~~ +[2/2] Linking CXX executable main diff --git a/.vix-scripts/main/configure.log b/.vix-scripts/main/configure.log new file mode 100644 index 000000000..170c51b1b --- /dev/null +++ b/.vix-scripts/main/configure.log @@ -0,0 +1,4 @@ +-- Sanitizers: ASan+UBSan enabled +-- Configuring done (0.0s) +-- Generating done (0.0s) +-- Build files have been written to: /home/softadastra/vixcpp/vixcpp.github.io/.vix-scripts/main/build-ninja diff --git a/assets/index-Dx6zWjVB.js b/assets/index-Bhp5MtLg.js similarity index 88% rename from assets/index-Dx6zWjVB.js rename to assets/index-Bhp5MtLg.js index 552b695ef..9c1c372aa 100644 --- a/assets/index-Dx6zWjVB.js +++ b/assets/index-Bhp5MtLg.js @@ -1,5 +1,5 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/angular-html-CU67Zn6k.js","assets/html-GMplVEZG.js","assets/javascript-wDzz0qaB.js","assets/css-DPfMkruS.js","assets/angular-ts-BwZT4LLn.js","assets/scss-OYdSNvt2.js","assets/apl-dKokRX4l.js","assets/xml-sdJ4AIDG.js","assets/java-CylS5w8V.js","assets/json-Cp-IABpG.js","assets/astro-CbQHKStN.js","assets/typescript-BPQ3VLAy.js","assets/postcss-CXtECtnM.js","assets/tsx-COt5Ahok.js","assets/blade-D4QpJJKB.js","assets/html-derivative-BFtXZ54Q.js","assets/sql-BLtJtn59.js","assets/bsl-BO_Y6i37.js","assets/sdbl-DVxCFoDh.js","assets/cairo-KRGpt6FW.js","assets/python-B6aJPvgy.js","assets/cobol-nwyudZeR.js","assets/coffee-Ch7k5sss.js","assets/cpp-CofmeUqb.js","assets/regexp-CDVJQ6XC.js","assets/glsl-DplSGwfg.js","assets/c-BIGW1oBm.js","assets/crystal-tKQVLTB8.js","assets/shellscript-Yzrsuije.js","assets/edge-BkV0erSs.js","assets/elixir-CDX3lj18.js","assets/elm-DbKCFpqz.js","assets/erb-CgJxNhIT.js","assets/ruby-Cw6WdidG.js","assets/haml-B8DHNrY2.js","assets/graphql-ChdNCCLP.js","assets/jsx-g9-lgVsj.js","assets/lua-BaeVxFsk.js","assets/yaml-Buea-lGh.js","assets/erlang-DsQrWhSR.js","assets/markdown-Cvjx9yec.js","assets/fortran-fixed-form-CkoXwp7k.js","assets/fortran-free-form-BxgE0vQu.js","assets/fsharp-CXgrBDvD.js","assets/gdresource-BOOCDP_w.js","assets/gdshader-DkwncUOv.js","assets/gdscript-C5YyOfLZ.js","assets/git-commit-F4YmCXRG.js","assets/diff-D97Zzqfu.js","assets/git-rebase-r7XF79zn.js","assets/glimmer-js-Rg0-pVw9.js","assets/glimmer-ts-U6CK756n.js","assets/hack-CaT9iCJl.js","assets/handlebars-BL8al0AC.js","assets/http-jrhK8wxY.js","assets/hurl-irOxFIW8.js","assets/csv-fuZLfV_i.js","assets/hxml-Bvhsp5Yf.js","assets/haxe-CzTSHFRz.js","assets/jinja-4LBKfQ-Z.js","assets/jison-wvAkD_A8.js","assets/julia-CxzCAyBv.js","assets/r-Dspwwk_N.js","assets/latex-DGMBWnxU.js","assets/tex-CvyZ59Mk.js","assets/liquid-DYVedYrR.js","assets/marko-DZsq8hO1.js","assets/less-B1dDrJ26.js","assets/mdc-DUICxH0z.js","assets/nginx-BpAMiNFr.js","assets/nim-CVrawwO9.js","assets/perl-C0TMdlhV.js","assets/php-Dhbhpdrm.js","assets/pug-CGlum2m_.js","assets/qml-3beO22l8.js","assets/razor-Uh8Bk_45.js","assets/csharp-COcwbKMJ.js","assets/rst-D5oM4XIm.js","assets/cmake-D1j8_8rp.js","assets/sas-cz2c8ADy.js","assets/shaderlab-Dg9Lc6iA.js","assets/hlsl-D3lLCCz7.js","assets/shellsession-BADoaaVG.js","assets/soy-Brmx7dQM.js","assets/sparql-rVzFXLq3.js","assets/turtle-BsS91CYL.js","assets/stata-BH5u7GGu.js","assets/surrealql-Bq5Q-fJD.js","assets/svelte-zxCyuUbr.js","assets/templ-P3uqSqPl.js","assets/go-CxLEBnE3.js","assets/ts-tags-zn1MmPIZ.js","assets/twig-ChbOoGGc.js","assets/vue-DN_0RTcg.js","assets/vue-html-AaS7Mt5G.js","assets/vue-vine-CQOfvN7w.js","assets/stylus-BEDo0Tqx.js","assets/xsl-CtQFsRM5.js"])))=>i.map(i=>d[i]); -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();function $o(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ne={},es=[],en=()=>{},Ec=()=>!1,ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Mo=e=>e.startsWith("onUpdate:"),ct=Object.assign,Vo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},up=Object.prototype.hasOwnProperty,Oe=(e,t)=>up.call(e,t),ge=Array.isArray,ts=e=>tr(e)==="[object Map]",ti=e=>tr(e)==="[object Set]",Ma=e=>tr(e)==="[object Date]",_e=e=>typeof e=="function",We=e=>typeof e=="string",Ht=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",xc=e=>($e(e)||_e(e))&&_e(e.then)&&_e(e.catch),Sc=Object.prototype.toString,tr=e=>Sc.call(e),dp=e=>tr(e).slice(8,-1),Tc=e=>tr(e)==="[object Object]",Bo=e=>We(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ds=$o(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ni=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},pp=/-\w/g,Mt=ni(e=>e.replace(pp,t=>t.slice(1).toUpperCase())),fp=/\B([A-Z])/g,Rn=ni(e=>e.replace(fp,"-$1").toLowerCase()),si=ni(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ti=ni(e=>e?`on${si(e)}`:""),Sn=(e,t)=>!Object.is(e,t),kr=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ri=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Va;const ii=()=>Va||(Va=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function oi(e){if(ge(e)){const t={};for(let n=0;n{if(n){const s=n.split(mp);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function De(e){let t="";if(We(e))t=e;else if(ge(e))for(let n=0;nai(n,t))}const Cc=e=>!!(e&&e.__v_isRef===!0),H=e=>We(e)?e:e==null?"":ge(e)||$e(e)&&(e.toString===Sc||!_e(e.toString))?Cc(e)?H(e.value):JSON.stringify(e,Ic,2):String(e),Ic=(e,t)=>Cc(t)?Ic(e,t.value):ts(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Ai(s,i)+" =>"]=r,n),{})}:ti(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ai(n))}:Ht(t)?Ai(t):$e(t)&&!ge(t)&&!Tc(t)?String(t):t,Ai=(e,t="")=>{var n;return Ht(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let At;class kp{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=At,!t&&At&&(this.index=(At.scopes||(At.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(At=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if($s){let t=$s;for($s=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ns;){let t=Ns;for(Ns=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Dc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Nc(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Uo(s),xp(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function eo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&($c(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function $c(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Fs)||(e.globalVersion=Fs,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!eo(e))))return;e.flags|=2;const t=e.dep,n=Be,s=Ut;Be=e,Ut=!0;try{Dc(e);const r=e.fn(e._value);(t.version===0||Sn(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Be=n,Ut=s,Nc(e),e.flags&=-3}}function Uo(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Uo(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function xp(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ut=!0;const Mc=[];function pn(){Mc.push(Ut),Ut=!1}function fn(){const e=Mc.pop();Ut=e===void 0?!0:e}function Ba(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Be;Be=void 0;try{t()}finally{Be=n}}}let Fs=0;class Sp{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ho{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Be||!Ut||Be===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Be)n=this.activeLink=new Sp(Be,this),Be.deps?(n.prevDep=Be.depsTail,Be.depsTail.nextDep=n,Be.depsTail=n):Be.deps=Be.depsTail=n,Vc(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Be.depsTail,n.nextDep=void 0,Be.depsTail.nextDep=n,Be.depsTail=n,Be.deps===n&&(Be.deps=s)}return n}trigger(t){this.version++,Fs++,this.notify(t)}notify(t){jo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Go()}}}function Vc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Vc(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const to=new WeakMap,Gn=Symbol(""),no=Symbol(""),zs=Symbol("");function pt(e,t,n){if(Ut&&Be){let s=to.get(e);s||to.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ho),r.map=s,r.key=n),r.track()}}function un(e,t,n,s,r,i){const o=to.get(e);if(!o){Fs++;return}const l=a=>{a&&a.trigger()};if(jo(),t==="clear")o.forEach(l);else{const a=ge(e),c=a&&Bo(n);if(a&&n==="length"){const u=Number(s);o.forEach((d,f)=>{(f==="length"||f===zs||!Ht(f)&&f>=u)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),c&&l(o.get(zs)),t){case"add":a?c&&l(o.get("length")):(l(o.get(Gn)),ts(e)&&l(o.get(no)));break;case"delete":a||(l(o.get(Gn)),ts(e)&&l(o.get(no)));break;case"set":ts(e)&&l(o.get(Gn));break}}Go()}function Xn(e){const t=Pe(e);return t===e?t:(pt(t,"iterate",zs),Nt(e)?t:t.map(Ft))}function li(e){return pt(e=Pe(e),"iterate",zs),e}function bn(e,t){return hn(e)?cs(Un(e)?Ft(t):t):Ft(t)}const Tp={__proto__:null,[Symbol.iterator](){return Ci(this,Symbol.iterator,e=>bn(this,e))},concat(...e){return Xn(this).concat(...e.map(t=>ge(t)?Xn(t):t))},entries(){return Ci(this,"entries",e=>(e[1]=bn(this,e[1]),e))},every(e,t){return on(this,"every",e,t,void 0,arguments)},filter(e,t){return on(this,"filter",e,t,n=>n.map(s=>bn(this,s)),arguments)},find(e,t){return on(this,"find",e,t,n=>bn(this,n),arguments)},findIndex(e,t){return on(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return on(this,"findLast",e,t,n=>bn(this,n),arguments)},findLastIndex(e,t){return on(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return on(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ii(this,"includes",e)},indexOf(...e){return Ii(this,"indexOf",e)},join(e){return Xn(this).join(e)},lastIndexOf(...e){return Ii(this,"lastIndexOf",e)},map(e,t){return on(this,"map",e,t,void 0,arguments)},pop(){return ys(this,"pop")},push(...e){return ys(this,"push",e)},reduce(e,...t){return ja(this,"reduce",e,t)},reduceRight(e,...t){return ja(this,"reduceRight",e,t)},shift(){return ys(this,"shift")},some(e,t){return on(this,"some",e,t,void 0,arguments)},splice(...e){return ys(this,"splice",e)},toReversed(){return Xn(this).toReversed()},toSorted(e){return Xn(this).toSorted(e)},toSpliced(...e){return Xn(this).toSpliced(...e)},unshift(...e){return ys(this,"unshift",e)},values(){return Ci(this,"values",e=>bn(this,e))}};function Ci(e,t,n){const s=li(e),r=s[t]();return s!==e&&!Nt(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Ap=Array.prototype;function on(e,t,n,s,r,i){const o=li(e),l=o!==e&&!Nt(e),a=o[t];if(a!==Ap[t]){const d=a.apply(e,i);return l?Ft(d):d}let c=n;o!==e&&(l?c=function(d,f){return n.call(this,bn(e,d),f,e)}:n.length>2&&(c=function(d,f){return n.call(this,d,f,e)}));const u=a.call(o,c,s);return l&&r?r(u):u}function ja(e,t,n,s){const r=li(e);let i=n;return r!==e&&(Nt(e)?n.length>3&&(i=function(o,l,a){return n.call(this,o,l,a,e)}):i=function(o,l,a){return n.call(this,o,bn(e,l),a,e)}),r[t](i,...s)}function Ii(e,t,n){const s=Pe(e);pt(s,"iterate",zs);const r=s[t](...n);return(r===-1||r===!1)&&Wo(n[0])?(n[0]=Pe(n[0]),s[t](...n)):r}function ys(e,t,n=[]){pn(),jo();const s=Pe(e)[t].apply(e,n);return Go(),fn(),s}const Rp=$o("__proto__,__v_isRef,__isVue"),Bc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ht));function Cp(e){Ht(e)||(e=String(e));const t=Pe(this);return pt(t,"has",e),t.hasOwnProperty(e)}class jc{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Bp:Fc:i?Hc:Uc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=ge(t);if(!r){let a;if(o&&(a=Tp[n]))return a;if(n==="hasOwnProperty")return Cp}const l=Reflect.get(t,n,gt(t)?t:s);if((Ht(n)?Bc.has(n):Rp(n))||(r||pt(t,"get",n),i))return l;if(gt(l)){const a=o&&Bo(n)?l:l.value;return r&&$e(a)?ro(a):a}return $e(l)?r?ro(l):ls(l):l}}class Gc extends jc{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=ge(t)&&Bo(n);if(!this._isShallow){const c=hn(i);if(!Nt(s)&&!hn(s)&&(i=Pe(i),s=Pe(s)),!o&>(i)&&!gt(s))return c||(i.value=s),!0}const l=o?Number(n)e,ur=e=>Reflect.getPrototypeOf(e);function Dp(e,t,n){return function(...s){const r=this.__v_raw,i=Pe(r),o=ts(i),l=e==="entries"||e===Symbol.iterator&&o,a=e==="keys"&&o,c=r[e](...s),u=n?so:t?cs:Ft;return!t&&pt(i,"iterate",a?no:Gn),ct(Object.create(c),{next(){const{value:d,done:f}=c.next();return f?{value:d,done:f}:{value:l?[u(d[0]),u(d[1])]:u(d),done:f}}})}}function dr(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Np(e,t){const n={get(r){const i=this.__v_raw,o=Pe(i),l=Pe(r);e||(Sn(r,l)&&pt(o,"get",r),pt(o,"get",l));const{has:a}=ur(o),c=t?so:e?cs:Ft;if(a.call(o,r))return c(i.get(r));if(a.call(o,l))return c(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&pt(Pe(r),"iterate",Gn),r.size},has(r){const i=this.__v_raw,o=Pe(i),l=Pe(r);return e||(Sn(r,l)&&pt(o,"has",r),pt(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,a=Pe(l),c=t?so:e?cs:Ft;return!e&&pt(a,"iterate",Gn),l.forEach((u,d)=>r.call(i,c(u),c(d),o))}};return ct(n,e?{add:dr("add"),set:dr("set"),delete:dr("delete"),clear:dr("clear")}:{add(r){!t&&!Nt(r)&&!hn(r)&&(r=Pe(r));const i=Pe(this);return ur(i).has.call(i,r)||(i.add(r),un(i,"add",r,r)),this},set(r,i){!t&&!Nt(i)&&!hn(i)&&(i=Pe(i));const o=Pe(this),{has:l,get:a}=ur(o);let c=l.call(o,r);c||(r=Pe(r),c=l.call(o,r));const u=a.call(o,r);return o.set(r,i),c?Sn(i,u)&&un(o,"set",r,i):un(o,"add",r,i),this},delete(r){const i=Pe(this),{has:o,get:l}=ur(i);let a=o.call(i,r);a||(r=Pe(r),a=o.call(i,r)),l&&l.call(i,r);const c=i.delete(r);return a&&un(i,"delete",r,void 0),c},clear(){const r=Pe(this),i=r.size!==0,o=r.clear();return i&&un(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Dp(r,e,t)}),n}function Fo(e,t){const n=Np(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Oe(n,r)&&r in s?n:s,r,i)}const $p={get:Fo(!1,!1)},Mp={get:Fo(!1,!0)},Vp={get:Fo(!0,!1)};const Uc=new WeakMap,Hc=new WeakMap,Fc=new WeakMap,Bp=new WeakMap;function jp(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Gp(e){return e.__v_skip||!Object.isExtensible(e)?0:jp(dp(e))}function ls(e){return hn(e)?e:zo(e,!1,Lp,$p,Uc)}function zc(e){return zo(e,!1,Op,Mp,Hc)}function ro(e){return zo(e,!0,Pp,Vp,Fc)}function zo(e,t,n,s,r){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Gp(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function Un(e){return hn(e)?Un(e.__v_raw):!!(e&&e.__v_isReactive)}function hn(e){return!!(e&&e.__v_isReadonly)}function Nt(e){return!!(e&&e.__v_isShallow)}function Wo(e){return e?!!e.__v_raw:!1}function Pe(e){const t=e&&e.__v_raw;return t?Pe(t):e}function Up(e){return!Oe(e,"__v_skip")&&Object.isExtensible(e)&&Ac(e,"__v_skip",!0),e}const Ft=e=>$e(e)?ls(e):e,cs=e=>$e(e)?ro(e):e;function gt(e){return e?e.__v_isRef===!0:!1}function de(e){return Wc(e,!1)}function Hp(e){return Wc(e,!0)}function Wc(e,t){return gt(e)?e:new Fp(e,t)}class Fp{constructor(t,n){this.dep=new Ho,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Pe(t),this._value=n?t:Ft(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Nt(t)||hn(t);t=s?t:Pe(t),Sn(t,n)&&(this._rawValue=t,this._value=s?t:Ft(t),this.dep.trigger())}}function me(e){return gt(e)?e.value:e}const zp={get:(e,t,n)=>t==="__v_raw"?e:me(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return gt(r)&&!gt(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function qc(e){return Un(e)?e:new Proxy(e,zp)}class Wp{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ho(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Fs-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Be!==this)return Oc(this,!0),!0}get value(){const t=this.dep.track();return $c(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function qp(e,t,n=!1){let s,r;return _e(e)?s=e:(s=e.get,r=e.set),new Wp(s,r,n)}const pr={},Lr=new WeakMap;let $n;function Kp(e,t=!1,n=$n){if(n){let s=Lr.get(n);s||Lr.set(n,s=[]),s.push(e)}}function Yp(e,t,n=Ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:a}=n,c=v=>r?v:Nt(v)||r===!1||r===0?dn(v,1):dn(v);let u,d,f,h,y=!1,w=!1;if(gt(e)?(d=()=>e.value,y=Nt(e)):Un(e)?(d=()=>c(e),y=!0):ge(e)?(w=!0,y=e.some(v=>Un(v)||Nt(v)),d=()=>e.map(v=>{if(gt(v))return v.value;if(Un(v))return c(v);if(_e(v))return a?a(v,2):v()})):_e(e)?t?d=a?()=>a(e,2):e:d=()=>{if(f){pn();try{f()}finally{fn()}}const v=$n;$n=u;try{return a?a(e,3,[h]):e(h)}finally{$n=v}}:d=en,t&&r){const v=d,V=r===!0?1/0:r;d=()=>dn(v(),V)}const T=Ep(),S=()=>{u.stop(),T&&T.active&&Vo(T.effects,u)};if(i&&t){const v=t;t=(...V)=>{v(...V),S()}}let L=w?new Array(e.length).fill(pr):pr;const g=v=>{if(!(!(u.flags&1)||!u.dirty&&!v))if(t){const V=u.run();if(r||y||(w?V.some((Y,ne)=>Sn(Y,L[ne])):Sn(V,L))){f&&f();const Y=$n;$n=u;try{const ne=[V,L===pr?void 0:w&&L[0]===pr?[]:L,h];L=V,a?a(t,3,ne):t(...ne)}finally{$n=Y}}}else u.run()};return l&&l(g),u=new Lc(d),u.scheduler=o?()=>o(g,!1):g,h=v=>Kp(v,!1,u),f=u.onStop=()=>{const v=Lr.get(u);if(v){if(a)a(v,4);else for(const V of v)V();Lr.delete(u)}},t?s?g(!0):L=u.run():o?o(g.bind(null,!0),!0):u.run(),S.pause=u.pause.bind(u),S.resume=u.resume.bind(u),S.stop=S,S}function dn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,gt(e))dn(e.value,t,n);else if(ge(e))for(let s=0;s{dn(s,t,n)});else if(Tc(e)){for(const s in e)dn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&dn(e[s],t,n)}return e}function nr(e,t,n,s){try{return s?e(...s):e()}catch(r){ci(r,t,n)}}function nn(e,t,n,s){if(_e(e)){const r=nr(e,t,n,s);return r&&xc(r)&&r.catch(i=>{ci(i,t,n)}),r}if(ge(e)){const r=[];for(let i=0;i>>1,r=wt[s],i=Ws(r);i=Ws(n)?wt.push(e):wt.splice(Jp(t),0,e),e.flags|=1,Yc()}}function Yc(){Pr||(Pr=Kc.then(Jc))}function Qp(e){ge(e)?ns.push(...e):wn&&e.id===-1?wn.splice(Jn+1,0,e):e.flags&1||(ns.push(e),e.flags|=1),Yc()}function Ga(e,t,n=Qt+1){for(;nWs(n)-Ws(s));if(ns.length=0,wn){wn.push(...t);return}for(wn=t,Jn=0;Jne.id==null?e.flags&2?-1:1/0:e.id;function Jc(e){try{for(Qt=0;Qt{s._d&&$r(-1);const i=Or(t);let o;try{o=e(...r)}finally{Or(i),s._d&&$r(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Fe(e,t){if(lt===null)return e;const n=fi(lt),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Zp=Symbol.for("v-scx"),ef=()=>$t(Zp);function tn(e,t,n){return Zc(e,t,n)}function Zc(e,t,n=Ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=ct({},n),a=t&&s||!t&&i!=="post";let c;if(Ys){if(i==="sync"){const h=ef();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=en,h.resume=en,h.pause=en,h}}const u=ft;l.call=(h,y,w)=>nn(h,u,y,w);let d=!1;i==="post"?l.scheduler=h=>{yt(h,u&&u.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(h,y)=>{y?h():Ko(h)}),l.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const f=Yp(e,t,l);return Ys&&(c?c.push(f):a&&f()),f}function tf(e,t,n){const s=this.proxy,r=We(e)?e.includes(".")?eu(s,e):()=>s[e]:e.bind(s,s);let i;_e(t)?i=t:(i=t.handler,n=t);const o=sr(this),l=Zc(r,i.bind(s),n);return o(),l}function eu(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Ms=e=>e&&(e.disabled||e.disabled===""),Ua=e=>e&&(e.defer||e.defer===""),Ha=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Fa=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,io=(e,t)=>{const n=e&&e.to;return We(n)?t?t(n):null:n},nu={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,a,c){const{mc:u,pc:d,pbc:f,o:{insert:h,querySelector:y,createText:w,createComment:T}}=c,S=Ms(t.props);let{shapeFlag:L,children:g,dynamicChildren:v}=t;if(e==null){const V=t.el=w(""),Y=t.anchor=w("");h(V,n,s),h(Y,n,s);const ne=(j,he)=>{L&16&&u(g,j,he,r,i,o,l,a)},z=()=>{const j=t.target=io(t.props,y),he=ru(j,t,w,h);j&&(o!=="svg"&&Ha(j)?o="svg":o!=="mathml"&&Fa(j)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(j),S||(ne(j,he),xr(t,!1)))};S&&(ne(n,Y),xr(t,!0)),Ua(t.props)?(t.el.__isMounted=!1,yt(()=>{z(),delete t.el.__isMounted},i)):z()}else{if(Ua(t.props)&&e.el.__isMounted===!1){yt(()=>{nu.process(e,t,n,s,r,i,o,l,a,c)},i);return}t.el=e.el,t.targetStart=e.targetStart;const V=t.anchor=e.anchor,Y=t.target=e.target,ne=t.targetAnchor=e.targetAnchor,z=Ms(e.props),j=z?n:Y,he=z?V:ne;if(o==="svg"||Ha(Y)?o="svg":(o==="mathml"||Fa(Y))&&(o="mathml"),v?(f(e.dynamicChildren,v,j,r,i,o,l),Qo(e,t,!0)):a||d(e,t,j,he,r,i,o,l,!1),S)z?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):fr(t,n,V,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=io(t.props,y);J&&fr(t,J,null,c,0)}else z&&fr(t,Y,ne,c,1);xr(t,S)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:a,targetStart:c,targetAnchor:u,target:d,props:f}=e;if(d&&(r(c),r(u)),i&&r(a),o&16){const h=i||!Ms(f);for(let y=0;yVs(y,t&&(ge(t)?t[w]:t),n,s,r));return}if(ss(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Vs(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?fi(s.component):s.el,o=r?null:i,{i:l,r:a}=e,c=t&&t.r,u=l.refs===Ne?l.refs={}:l.refs,d=l.setupState,f=Pe(d),h=d===Ne?Ec:y=>Oe(f,y);if(c!=null&&c!==a){if(za(t),We(c))u[c]=null,h(c)&&(d[c]=null);else if(gt(c)){c.value=null;const y=t;y.k&&(u[y.k]=null)}}if(_e(a))nr(a,l,12,[o,u]);else{const y=We(a),w=gt(a);if(y||w){const T=()=>{if(e.f){const S=y?h(a)?d[a]:u[a]:a.value;if(r)ge(S)&&Vo(S,i);else if(ge(S))S.includes(i)||S.push(i);else if(y)u[a]=[i],h(a)&&(d[a]=u[a]);else{const L=[i];a.value=L,e.k&&(u[e.k]=L)}}else y?(u[a]=o,h(a)&&(d[a]=o)):w&&(a.value=o,e.k&&(u[e.k]=o))};if(o){const S=()=>{T(),Dr.delete(e)};S.id=-1,Dr.set(e,S),yt(S,n)}else za(e),T()}}}function za(e){const t=Dr.get(e);t&&(t.flags|=8,Dr.delete(e))}ii().requestIdleCallback;ii().cancelIdleCallback;const ss=e=>!!e.type.__asyncLoader,au=e=>e.type.__isKeepAlive;function of(e,t){lu(e,"a",t)}function af(e,t){lu(e,"da",t)}function lu(e,t,n=ft){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(ui(t,s,n),n){let r=n.parent;for(;r&&r.parent;)au(r.parent.vnode)&&lf(s,t,n,r),r=r.parent}}function lf(e,t,n,s){const r=ui(t,e,s,!0);cu(()=>{Vo(s[t],r)},n)}function ui(e,t,n=ft,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{pn();const l=sr(n),a=nn(t,n,e,o);return l(),fn(),a});return s?r.unshift(i):r.push(i),i}}const gn=e=>(t,n=ft)=>{(!Ys||e==="sp")&&ui(e,(...s)=>t(...s),n)},cf=gn("bm"),_n=gn("m"),uf=gn("bu"),df=gn("u"),An=gn("bum"),cu=gn("um"),pf=gn("sp"),ff=gn("rtg"),hf=gn("rtc");function mf(e,t=ft){ui("ec",e,t)}const gf="components";function Cn(e,t){return vf(gf,e,!0,t)||e}const _f=Symbol.for("v-ndc");function vf(e,t,n=!0,s=!1){const r=lt||ft;if(r){const i=r.type;{const l=rh(i,!1);if(l&&(l===t||l===Mt(t)||l===si(Mt(t))))return i}const o=Wa(r[e]||i[e],t)||Wa(r.appContext[e],t);return!o&&s?i:o}}function Wa(e,t){return e&&(e[t]||e[Mt(t)]||e[si(Mt(t))])}function ze(e,t,n,s){let r;const i=n,o=ge(e);if(o||We(e)){const l=o&&Un(e);let a=!1,c=!1;l&&(a=!Nt(e),c=hn(e),e=li(e)),r=new Array(e.length);for(let u=0,d=e.length;ut(l,a,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return A(),mt(we,null,[Se("slot",n,s)],c?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),A();const o=i&&uu(i(n)),l=n.key||o&&o.key,a=mt(we,{key:(l&&!Ht(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||[],o&&e._===1?64:-2);return i&&i._c&&(i._d=!0),a}function uu(e){return e.some(t=>Ks(t)?!(t.type===mn||t.type===we&&!uu(t.children)):!0)?e:null}const oo=e=>e?Ru(e)?fi(e):oo(e.parent):null,Bs=ct(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>oo(e.parent),$root:e=>oo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>pu(e),$forceUpdate:e=>e.f||(e.f=()=>{Ko(e.update)}),$nextTick:e=>e.n||(e.n=qo.bind(e.proxy)),$watch:e=>tf.bind(e)}),Li=(e,t)=>e!==Ne&&!e.__isScriptSetup&&Oe(e,t),bf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:a}=e;if(t[0]!=="$"){const f=o[t];if(f!==void 0)switch(f){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Li(s,t))return o[t]=1,s[t];if(r!==Ne&&Oe(r,t))return o[t]=2,r[t];if(Oe(i,t))return o[t]=3,i[t];if(n!==Ne&&Oe(n,t))return o[t]=4,n[t];ao&&(o[t]=0)}}const c=Bs[t];let u,d;if(c)return t==="$attrs"&&pt(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==Ne&&Oe(n,t))return o[t]=4,n[t];if(d=a.config.globalProperties,Oe(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Li(r,t)?(r[t]=n,!0):s!==Ne&&Oe(s,t)?(s[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let a;return!!(n[l]||e!==Ne&&l[0]!=="$"&&Oe(e,l)||Li(t,l)||Oe(i,l)||Oe(s,l)||Oe(Bs,l)||Oe(r.config.globalProperties,l)||(a=o.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qa(e){return ge(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ao=!0;function wf(e){const t=pu(e),n=e.proxy,s=e.ctx;ao=!1,t.beforeCreate&&Ka(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:a,inject:c,created:u,beforeMount:d,mounted:f,beforeUpdate:h,updated:y,activated:w,deactivated:T,beforeDestroy:S,beforeUnmount:L,destroyed:g,unmounted:v,render:V,renderTracked:Y,renderTriggered:ne,errorCaptured:z,serverPrefetch:j,expose:he,inheritAttrs:J,components:G,directives:x,filters:D}=t;if(c&&kf(c,s,null),o)for(const U in o){const q=o[U];_e(q)&&(s[U]=q.bind(n))}if(r){const U=r.call(n,n);$e(U)&&(e.data=ls(U))}if(ao=!0,i)for(const U in i){const q=i[U],Q=_e(q)?q.bind(n,n):_e(q.get)?q.get.bind(n,n):en,le=!_e(q)&&_e(q.set)?q.set.bind(n):en,ve=ue({get:Q,set:le});Object.defineProperty(s,U,{enumerable:!0,configurable:!0,get:()=>ve.value,set:Ie=>ve.value=Ie})}if(l)for(const U in l)du(l[U],s,n,U);if(a){const U=_e(a)?a.call(n):a;Reflect.ownKeys(U).forEach(q=>{Er(q,U[q])})}u&&Ka(u,e,"c");function N(U,q){ge(q)?q.forEach(Q=>U(Q.bind(n))):q&&U(q.bind(n))}if(N(cf,d),N(_n,f),N(uf,h),N(df,y),N(of,w),N(af,T),N(mf,z),N(hf,Y),N(ff,ne),N(An,L),N(cu,v),N(pf,j),ge(he))if(he.length){const U=e.exposed||(e.exposed={});he.forEach(q=>{Object.defineProperty(U,q,{get:()=>n[q],set:Q=>n[q]=Q,enumerable:!0})})}else e.exposed||(e.exposed={});V&&e.render===en&&(e.render=V),J!=null&&(e.inheritAttrs=J),G&&(e.components=G),x&&(e.directives=x),j&&ou(e)}function kf(e,t,n=en){ge(e)&&(e=lo(e));for(const s in e){const r=e[s];let i;$e(r)?"default"in r?i=$t(r.from||s,r.default,!0):i=$t(r.from||s):i=$t(r),gt(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ka(e,t,n){nn(ge(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function du(e,t,n,s){let r=s.includes(".")?eu(n,s):()=>n[s];if(We(e)){const i=t[e];_e(i)&&tn(r,i)}else if(_e(e))tn(r,e.bind(n));else if($e(e))if(ge(e))e.forEach(i=>du(i,t,n,s));else{const i=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(i)&&tn(r,i,e)}}function pu(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>Nr(a,c,o,!0)),Nr(a,t,o)),$e(t)&&i.set(t,a),a}function Nr(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nr(e,i,n,!0),r&&r.forEach(o=>Nr(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Ef[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Ef={data:Ya,props:Xa,emits:Xa,methods:Ls,computed:Ls,beforeCreate:vt,created:vt,beforeMount:vt,mounted:vt,beforeUpdate:vt,updated:vt,beforeDestroy:vt,beforeUnmount:vt,destroyed:vt,unmounted:vt,activated:vt,deactivated:vt,errorCaptured:vt,serverPrefetch:vt,components:Ls,directives:Ls,watch:Sf,provide:Ya,inject:xf};function Ya(e,t){return t?e?function(){return ct(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function xf(e,t){return Ls(lo(e),lo(t))}function lo(e){if(ge(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Mt(t)}Modifiers`]||e[`${Rn(t)}Modifiers`];function Cf(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Ne;let r=n;const i=t.startsWith("update:"),o=i&&Rf(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>We(u)?u.trim():u)),o.number&&(r=n.map(ri)));let l,a=s[l=Ti(t)]||s[l=Ti(Mt(t))];!a&&i&&(a=s[l=Ti(Rn(t))]),a&&nn(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nn(c,e,6,r)}}const If=new WeakMap;function hu(e,t,n=!1){const s=n?If:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!_e(e)){const a=c=>{const u=hu(c,t,!0);u&&(l=!0,ct(o,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!l?($e(e)&&s.set(e,null),null):(ge(i)?i.forEach(a=>o[a]=null):ct(o,i),$e(e)&&s.set(e,o),o)}function di(e,t){return!e||!ei(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Rn(t))||Oe(e,t))}function Ja(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:a,render:c,renderCache:u,props:d,data:f,setupState:h,ctx:y,inheritAttrs:w}=e,T=Or(e);let S,L;try{if(n.shapeFlag&4){const v=r||s,V=v;S=Zt(c.call(V,v,u,d,h,f,y)),L=l}else{const v=t;S=Zt(v.length>1?v(d,{attrs:l,slots:o,emit:a}):v(d,null)),L=t.props?l:Lf(l)}}catch(v){js.length=0,ci(v,e,1),S=Se(mn)}let g=S;if(L&&w!==!1){const v=Object.keys(L),{shapeFlag:V}=g;v.length&&V&7&&(i&&v.some(Mo)&&(L=Pf(L,i)),g=us(g,L,!1,!0))}return n.dirs&&(g=us(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Yo(g,n.transition),S=g,Or(T),S}const Lf=e=>{let t;for(const n in e)(n==="class"||n==="style"||ei(n))&&((t||(t={}))[n]=e[n]);return t},Pf=(e,t)=>{const n={};for(const s in e)(!Mo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Of(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:a}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?Qa(s,o,c):!!o;if(a&8){const u=t.dynamicProps;for(let d=0;dObject.create(mu),_u=e=>Object.getPrototypeOf(e)===mu;function Nf(e,t,n,s=!1){const r={},i=gu();e.propsDefaults=Object.create(null),vu(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:zc(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function $f(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=Pe(r),[a]=e.propsOptions;let c=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let d=0;d{a=!0;const[f,h]=yu(d,t,!0);ct(o,f),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!a)return $e(e)&&s.set(e,es),es;if(ge(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",Jo=e=>ge(e)?e.map(Zt):[Zt(e)],Vf=(e,t,n)=>{if(t._n)return t;const s=Je((...r)=>Jo(t(...r)),n);return s._c=!1,s},bu=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Xo(r))continue;const i=e[r];if(_e(i))t[r]=Vf(r,i,s);else if(i!=null){const o=Jo(i);t[r]=()=>o}}},wu=(e,t)=>{const n=Jo(t);e.slots.default=()=>n},ku=(e,t,n)=>{for(const s in t)(n||!Xo(s))&&(e[s]=t[s])},Bf=(e,t,n)=>{const s=e.slots=gu();if(e.vnode.shapeFlag&32){const r=t._;r?(ku(s,t,n),n&&Ac(s,"_",r,!0)):bu(t,s)}else t&&wu(e,t)},jf=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ku(r,t,n):(i=!t.$stable,bu(t,r)),o=t}else t&&(wu(e,t),o={default:1});if(i)for(const l in r)!Xo(l)&&o[l]==null&&delete r[l]},yt=zf;function Gf(e){return Uf(e)}function Uf(e,t){const n=ii();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:a,setText:c,setElementText:u,parentNode:d,nextSibling:f,setScopeId:h=en,insertStaticContent:y}=e,w=(_,b,C,R=null,k=null,P=null,M=void 0,W=null,F=!!b.dynamicChildren)=>{if(_===b)return;_&&!bs(_,b)&&(R=$(_),Ie(_,k,P,!0),_=null),b.patchFlag===-2&&(F=!1,b.dynamicChildren=null);const{type:B,ref:oe,shapeFlag:te}=b;switch(B){case pi:T(_,b,C,R);break;case mn:S(_,b,C,R);break;case Sr:_==null&&L(b,C,R,M);break;case we:G(_,b,C,R,k,P,M,W,F);break;default:te&1?V(_,b,C,R,k,P,M,W,F):te&6?x(_,b,C,R,k,P,M,W,F):(te&64||te&128)&&B.process(_,b,C,R,k,P,M,W,F,re)}oe!=null&&k?Vs(oe,_&&_.ref,P,b||_,!b):oe==null&&_&&_.ref!=null&&Vs(_.ref,null,P,_,!0)},T=(_,b,C,R)=>{if(_==null)s(b.el=l(b.children),C,R);else{const k=b.el=_.el;b.children!==_.children&&c(k,b.children)}},S=(_,b,C,R)=>{_==null?s(b.el=a(b.children||""),C,R):b.el=_.el},L=(_,b,C,R)=>{[_.el,_.anchor]=y(_.children,b,C,R,_.el,_.anchor)},g=({el:_,anchor:b},C,R)=>{let k;for(;_&&_!==b;)k=f(_),s(_,C,R),_=k;s(b,C,R)},v=({el:_,anchor:b})=>{let C;for(;_&&_!==b;)C=f(_),r(_),_=C;r(b)},V=(_,b,C,R,k,P,M,W,F)=>{if(b.type==="svg"?M="svg":b.type==="math"&&(M="mathml"),_==null)Y(b,C,R,k,P,M,W,F);else{const B=_.el&&_.el._isVueCE?_.el:null;try{B&&B._beginPatch(),j(_,b,k,P,M,W,F)}finally{B&&B._endPatch()}}},Y=(_,b,C,R,k,P,M,W)=>{let F,B;const{props:oe,shapeFlag:te,transition:ae,dirs:fe}=_;if(F=_.el=o(_.type,P,oe&&oe.is,oe),te&8?u(F,_.children):te&16&&z(_.children,F,null,R,k,Pi(_,P),M,W),fe&&On(_,null,R,"created"),ne(F,_,_.scopeId,M,R),oe){for(const xe in oe)xe!=="value"&&!Ds(xe)&&i(F,xe,null,oe[xe],P,R);"value"in oe&&i(F,"value",null,oe.value,P),(B=oe.onVnodeBeforeMount)&&Kt(B,R,_)}fe&&On(_,null,R,"beforeMount");const ye=Hf(k,ae);ye&&ae.beforeEnter(F),s(F,b,C),((B=oe&&oe.onVnodeMounted)||ye||fe)&&yt(()=>{B&&Kt(B,R,_),ye&&ae.enter(F),fe&&On(_,null,R,"mounted")},k)},ne=(_,b,C,R,k)=>{if(C&&h(_,C),R)for(let P=0;P{for(let B=F;B<_.length;B++){const oe=_[B]=W?kn(_[B]):Zt(_[B]);w(null,oe,b,C,R,k,P,M,W)}},j=(_,b,C,R,k,P,M)=>{const W=b.el=_.el;let{patchFlag:F,dynamicChildren:B,dirs:oe}=b;F|=_.patchFlag&16;const te=_.props||Ne,ae=b.props||Ne;let fe;if(C&&Dn(C,!1),(fe=ae.onVnodeBeforeUpdate)&&Kt(fe,C,b,_),oe&&On(b,_,C,"beforeUpdate"),C&&Dn(C,!0),(te.innerHTML&&ae.innerHTML==null||te.textContent&&ae.textContent==null)&&u(W,""),B?he(_.dynamicChildren,B,W,C,R,Pi(b,k),P):M||q(_,b,W,null,C,R,Pi(b,k),P,!1),F>0){if(F&16)J(W,te,ae,C,k);else if(F&2&&te.class!==ae.class&&i(W,"class",null,ae.class,k),F&4&&i(W,"style",te.style,ae.style,k),F&8){const ye=b.dynamicProps;for(let xe=0;xe{fe&&Kt(fe,C,b,_),oe&&On(b,_,C,"updated")},R)},he=(_,b,C,R,k,P,M)=>{for(let W=0;W{if(b!==C){if(b!==Ne)for(const P in b)!Ds(P)&&!(P in C)&&i(_,P,b[P],null,k,R);for(const P in C){if(Ds(P))continue;const M=C[P],W=b[P];M!==W&&P!=="value"&&i(_,P,W,M,k,R)}"value"in C&&i(_,"value",b.value,C.value,k)}},G=(_,b,C,R,k,P,M,W,F)=>{const B=b.el=_?_.el:l(""),oe=b.anchor=_?_.anchor:l("");let{patchFlag:te,dynamicChildren:ae,slotScopeIds:fe}=b;fe&&(W=W?W.concat(fe):fe),_==null?(s(B,C,R),s(oe,C,R),z(b.children||[],C,oe,k,P,M,W,F)):te>0&&te&64&&ae&&_.dynamicChildren&&_.dynamicChildren.length===ae.length?(he(_.dynamicChildren,ae,C,k,P,M,W),(b.key!=null||k&&b===k.subTree)&&Qo(_,b,!0)):q(_,b,C,oe,k,P,M,W,F)},x=(_,b,C,R,k,P,M,W,F)=>{b.slotScopeIds=W,_==null?b.shapeFlag&512?k.ctx.activate(b,C,R,M,F):D(b,C,R,k,P,M,F):I(_,b,F)},D=(_,b,C,R,k,P,M)=>{const W=_.component=Qf(_,R,k);if(au(_)&&(W.ctx.renderer=re),eh(W,!1,M),W.asyncDep){if(k&&k.registerDep(W,N,M),!_.el){const F=W.subTree=Se(mn);S(null,F,b,C),_.placeholder=F.el}}else N(W,_,b,C,k,P,M)},I=(_,b,C)=>{const R=b.component=_.component;if(Of(_,b,C))if(R.asyncDep&&!R.asyncResolved){U(R,b,C);return}else R.next=b,R.update();else b.el=_.el,R.vnode=b},N=(_,b,C,R,k,P,M)=>{const W=()=>{if(_.isMounted){let{next:te,bu:ae,u:fe,parent:ye,vnode:xe}=_;{const Ct=Eu(_);if(Ct){te&&(te.el=xe.el,U(_,te,M)),Ct.asyncDep.then(()=>{_.isUnmounted||W()});return}}let Ae=te,rt;Dn(_,!1),te?(te.el=xe.el,U(_,te,M)):te=xe,ae&&kr(ae),(rt=te.props&&te.props.onVnodeBeforeUpdate)&&Kt(rt,ye,te,xe),Dn(_,!0);const it=Ja(_),St=_.subTree;_.subTree=it,w(St,it,d(St.el),$(St),_,k,P),te.el=it.el,Ae===null&&Df(_,it.el),fe&&yt(fe,k),(rt=te.props&&te.props.onVnodeUpdated)&&yt(()=>Kt(rt,ye,te,xe),k)}else{let te;const{el:ae,props:fe}=b,{bm:ye,m:xe,parent:Ae,root:rt,type:it}=_,St=ss(b);Dn(_,!1),ye&&kr(ye),!St&&(te=fe&&fe.onVnodeBeforeMount)&&Kt(te,Ae,b),Dn(_,!0);{rt.ce&&rt.ce._def.shadowRoot!==!1&&rt.ce._injectChildStyle(it);const Ct=_.subTree=Ja(_);w(null,Ct,C,R,_,k,P),b.el=Ct.el}if(xe&&yt(xe,k),!St&&(te=fe&&fe.onVnodeMounted)){const Ct=b;yt(()=>Kt(te,Ae,Ct),k)}(b.shapeFlag&256||Ae&&ss(Ae.vnode)&&Ae.vnode.shapeFlag&256)&&_.a&&yt(_.a,k),_.isMounted=!0,b=C=R=null}};_.scope.on();const F=_.effect=new Lc(W);_.scope.off();const B=_.update=F.run.bind(F),oe=_.job=F.runIfDirty.bind(F);oe.i=_,oe.id=_.uid,F.scheduler=()=>Ko(oe),Dn(_,!0),B()},U=(_,b,C)=>{b.component=_;const R=_.vnode.props;_.vnode=b,_.next=null,$f(_,b.props,R,C),jf(_,b.children,C),pn(),Ga(_),fn()},q=(_,b,C,R,k,P,M,W,F=!1)=>{const B=_&&_.children,oe=_?_.shapeFlag:0,te=b.children,{patchFlag:ae,shapeFlag:fe}=b;if(ae>0){if(ae&128){le(B,te,C,R,k,P,M,W,F);return}else if(ae&256){Q(B,te,C,R,k,P,M,W,F);return}}fe&8?(oe&16&&qe(B,k,P),te!==B&&u(C,te)):oe&16?fe&16?le(B,te,C,R,k,P,M,W,F):qe(B,k,P,!0):(oe&8&&u(C,""),fe&16&&z(te,C,R,k,P,M,W,F))},Q=(_,b,C,R,k,P,M,W,F)=>{_=_||es,b=b||es;const B=_.length,oe=b.length,te=Math.min(B,oe);let ae;for(ae=0;aeoe?qe(_,k,P,!0,!1,te):z(b,C,R,k,P,M,W,F,te)},le=(_,b,C,R,k,P,M,W,F)=>{let B=0;const oe=b.length;let te=_.length-1,ae=oe-1;for(;B<=te&&B<=ae;){const fe=_[B],ye=b[B]=F?kn(b[B]):Zt(b[B]);if(bs(fe,ye))w(fe,ye,C,null,k,P,M,W,F);else break;B++}for(;B<=te&&B<=ae;){const fe=_[te],ye=b[ae]=F?kn(b[ae]):Zt(b[ae]);if(bs(fe,ye))w(fe,ye,C,null,k,P,M,W,F);else break;te--,ae--}if(B>te){if(B<=ae){const fe=ae+1,ye=feae)for(;B<=te;)Ie(_[B],k,P,!0),B++;else{const fe=B,ye=B,xe=new Map;for(B=ye;B<=ae;B++){const Ge=b[B]=F?kn(b[B]):Zt(b[B]);Ge.key!=null&&xe.set(Ge.key,B)}let Ae,rt=0;const it=ae-ye+1;let St=!1,Ct=0;const Wt=new Array(it);for(B=0;B=it){Ie(Ge,k,P,!0);continue}let ot;if(Ge.key!=null)ot=xe.get(Ge.key);else for(Ae=ye;Ae<=ae;Ae++)if(Wt[Ae-ye]===0&&bs(Ge,b[Ae])){ot=Ae;break}ot===void 0?Ie(Ge,k,P,!0):(Wt[ot-ye]=B+1,ot>=Ct?Ct=ot:St=!0,w(Ge,b[ot],C,null,k,P,M,W,F),rt++)}const Ln=St?Ff(Wt):es;for(Ae=Ln.length-1,B=it-1;B>=0;B--){const Ge=ye+B,ot=b[Ge],Wn=b[Ge+1],qn=Ge+1{const{el:P,type:M,transition:W,children:F,shapeFlag:B}=_;if(B&6){ve(_.component.subTree,b,C,R);return}if(B&128){_.suspense.move(b,C,R);return}if(B&64){M.move(_,b,C,re);return}if(M===we){s(P,b,C);for(let te=0;teW.enter(P),k);else{const{leave:te,delayLeave:ae,afterLeave:fe}=W,ye=()=>{_.ctx.isUnmounted?r(P):s(P,b,C)},xe=()=>{P._isLeaving&&P[rf](!0),te(P,()=>{ye(),fe&&fe()})};ae?ae(P,ye,xe):xe()}else s(P,b,C)},Ie=(_,b,C,R=!1,k=!1)=>{const{type:P,props:M,ref:W,children:F,dynamicChildren:B,shapeFlag:oe,patchFlag:te,dirs:ae,cacheIndex:fe}=_;if(te===-2&&(k=!1),W!=null&&(pn(),Vs(W,null,C,_,!0),fn()),fe!=null&&(b.renderCache[fe]=void 0),oe&256){b.ctx.deactivate(_);return}const ye=oe&1&&ae,xe=!ss(_);let Ae;if(xe&&(Ae=M&&M.onVnodeBeforeUnmount)&&Kt(Ae,b,_),oe&6)Te(_.component,C,R);else{if(oe&128){_.suspense.unmount(C,R);return}ye&&On(_,null,b,"beforeUnmount"),oe&64?_.type.remove(_,b,C,re,R):B&&!B.hasOnce&&(P!==we||te>0&&te&64)?qe(B,b,C,!1,!0):(P===we&&te&384||!k&&oe&16)&&qe(F,b,C),R&&pe(_)}(xe&&(Ae=M&&M.onVnodeUnmounted)||ye)&&yt(()=>{Ae&&Kt(Ae,b,_),ye&&On(_,null,b,"unmounted")},C)},pe=_=>{const{type:b,el:C,anchor:R,transition:k}=_;if(b===we){Pt(C,R);return}if(b===Sr){v(_);return}const P=()=>{r(C),k&&!k.persisted&&k.afterLeave&&k.afterLeave()};if(_.shapeFlag&1&&k&&!k.persisted){const{leave:M,delayLeave:W}=k,F=()=>M(C,P);W?W(_.el,P,F):F()}else P()},Pt=(_,b)=>{let C;for(;_!==b;)C=f(_),r(_),_=C;r(b)},Te=(_,b,C)=>{const{bum:R,scope:k,job:P,subTree:M,um:W,m:F,a:B}=_;el(F),el(B),R&&kr(R),k.stop(),P&&(P.flags|=8,Ie(M,_,b,C)),W&&yt(W,b),yt(()=>{_.isUnmounted=!0},b)},qe=(_,b,C,R=!1,k=!1,P=0)=>{for(let M=P;M<_.length;M++)Ie(_[M],b,C,R,k)},$=_=>{if(_.shapeFlag&6)return $(_.component.subTree);if(_.shapeFlag&128)return _.suspense.next();const b=f(_.anchor||_.el),C=b&&b[tu];return C?f(C):b};let ee=!1;const Z=(_,b,C)=>{let R;_==null?b._vnode&&(Ie(b._vnode,null,null,!0),R=b._vnode.component):w(b._vnode||null,_,b,null,null,null,C),b._vnode=_,ee||(ee=!0,Ga(R),Xc(),ee=!1)},re={p:w,um:Ie,m:ve,r:pe,mt:D,mc:z,pc:q,pbc:he,n:$,o:e};return{render:Z,hydrate:void 0,createApp:Af(Z)}}function Pi({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Dn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Hf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Qo(e,t,n=!1){const s=e.children,r=t.children;if(ge(s)&&ge(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Eu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Eu(t)}function el(e){if(e)for(let t=0;te.__isSuspense;function zf(e,t){t&&t.pendingBranch?ge(e)?t.effects.push(...e):t.effects.push(e):Qp(e)}const we=Symbol.for("v-fgt"),pi=Symbol.for("v-txt"),mn=Symbol.for("v-cmt"),Sr=Symbol.for("v-stc"),js=[];let Lt=null;function A(e=!1){js.push(Lt=e?null:[])}function Wf(){js.pop(),Lt=js[js.length-1]||null}let qs=1;function $r(e,t=!1){qs+=e,e<0&&Lt&&t&&(Lt.hasOnce=!0)}function Tu(e){return e.dynamicChildren=qs>0?Lt||es:null,Wf(),qs>0&&Lt&&Lt.push(e),e}function O(e,t,n,s,r,i){return Tu(p(e,t,n,s,r,i,!0))}function mt(e,t,n,s,r){return Tu(Se(e,t,n,s,r,!0))}function Ks(e){return e?e.__v_isVNode===!0:!1}function bs(e,t){return e.type===t.type&&e.key===t.key}const Au=({key:e})=>e??null,Tr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||gt(e)||_e(e)?{i:lt,r:e,k:t,f:!!n}:e:null);function p(e,t=null,n=null,s=0,r=null,i=e===we?0:1,o=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Au(t),ref:t&&Tr(t),scopeId:Qc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:lt};return l?(Zo(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=We(n)?8:16),qs>0&&!o&&Lt&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&Lt.push(a),a}const Se=qf;function qf(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===_f)&&(e=mn),Ks(e)){const l=us(e,t,!0);return n&&Zo(l,n),qs>0&&!i&&Lt&&(l.shapeFlag&6?Lt[Lt.indexOf(e)]=l:Lt.push(l)),l.patchFlag=-2,l}if(ih(e)&&(e=e.__vccOpts),t){t=Kf(t);let{class:l,style:a}=t;l&&!We(l)&&(t.class=De(l)),$e(a)&&(Wo(a)&&!ge(a)&&(a=ct({},a)),t.style=oi(a))}const o=We(e)?1:Su(e)?128:nf(e)?64:$e(e)?4:_e(e)?2:0;return p(e,t,n,s,r,o,i,!0)}function Kf(e){return e?Wo(e)||_u(e)?ct({},e):e:null}function us(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:a}=e,c=t?Yf(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Au(c),ref:t&&t.ref?n&&i?ge(i)?i.concat(Tr(t)):[i,Tr(t)]:Tr(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&us(e.ssContent),ssFallback:e.ssFallback&&us(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Yo(u,a.clone(u)),u}function Ue(e=" ",t=0){return Se(pi,null,e,t)}function In(e,t){const n=Se(Sr,null,e);return n.staticCount=t,n}function se(e="",t=!1){return t?(A(),mt(mn,null,e)):Se(mn,null,e)}function Zt(e){return e==null||typeof e=="boolean"?Se(mn):ge(e)?Se(we,null,e.slice()):Ks(e)?kn(e):Se(pi,null,String(e))}function kn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:us(e)}function Zo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ge(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Zo(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!_u(t)?t._ctx=lt:r===3&<&&(lt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else _e(t)?(t={default:t,_ctx:lt},n=32):(t=String(t),s&64?(n=16,t=[Ue(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yf(...e){const t={};for(let n=0;nft||lt;let Mr,uo;{const e=ii(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Mr=t("__VUE_INSTANCE_SETTERS__",n=>ft=n),uo=t("__VUE_SSR_SETTERS__",n=>Ys=n)}const sr=e=>{const t=ft;return Mr(e),e.scope.on(),()=>{e.scope.off(),Mr(t)}},tl=()=>{ft&&ft.scope.off(),Mr(null)};function Ru(e){return e.vnode.shapeFlag&4}let Ys=!1;function eh(e,t=!1,n=!1){t&&uo(t);const{props:s,children:r}=e.vnode,i=Ru(e);Nf(e,s,i,t),Bf(e,r,n||t);const o=i?th(e,t):void 0;return t&&uo(!1),o}function th(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bf);const{setup:s}=n;if(s){pn();const r=e.setupContext=s.length>1?sh(e):null,i=sr(e),o=nr(s,e,0,[e.props,r]),l=xc(o);if(fn(),i(),(l||e.sp)&&!ss(e)&&ou(e),l){if(o.then(tl,tl),t)return o.then(a=>{nl(e,a)}).catch(a=>{ci(a,e,0)});e.asyncDep=o}else nl(e,o)}else Cu(e)}function nl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=qc(t)),Cu(e)}function Cu(e,t,n){const s=e.type;e.render||(e.render=s.render||en);{const r=sr(e);pn();try{wf(e)}finally{fn(),r()}}}const nh={get(e,t){return pt(e,"get",""),e[t]}};function sh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,nh),slots:e.slots,emit:e.emit,expose:t}}function fi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(qc(Up(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Bs)return Bs[n](e)},has(t,n){return n in t||n in Bs}})):e.proxy}function rh(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function ih(e){return _e(e)&&"__vccOpts"in e}const ue=(e,t)=>qp(e,t,Ys);function Iu(e,t,n){try{$r(-1);const s=arguments.length;return s===2?$e(t)&&!ge(t)?Ks(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ks(n)&&(n=[n]),Se(e,t,n))}finally{$r(1)}}const oh="3.5.27";let po;const sl=typeof window<"u"&&window.trustedTypes;if(sl)try{po=sl.createPolicy("vue",{createHTML:e=>e})}catch{}const Lu=po?e=>po.createHTML(e):e=>e,ah="http://www.w3.org/2000/svg",lh="http://www.w3.org/1998/Math/MathML",cn=typeof document<"u"?document:null,rl=cn&&cn.createElement("template"),ch={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?cn.createElementNS(ah,e):t==="mathml"?cn.createElementNS(lh,e):n?cn.createElement(e,{is:n}):cn.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>cn.createTextNode(e),createComment:e=>cn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>cn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{rl.innerHTML=Lu(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=rl.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},uh=Symbol("_vtc");function dh(e,t,n){const s=e[uh];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Vr=Symbol("_vod"),Pu=Symbol("_vsh"),ph={name:"show",beforeMount(e,{value:t},{transition:n}){e[Vr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ws(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),ws(e,!0),s.enter(e)):s.leave(e,()=>{ws(e,!1)}):ws(e,t))},beforeUnmount(e,{value:t}){ws(e,t)}};function ws(e,t){e.style.display=t?e[Vr]:"none",e[Pu]=!t}const fh=Symbol(""),hh=/(?:^|;)\s*display\s*:/;function mh(e,t,n){const s=e.style,r=We(n);let i=!1;if(n&&!r){if(t)if(We(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ar(s,l,"")}else for(const o in t)n[o]==null&&Ar(s,o,"");for(const o in n)o==="display"&&(i=!0),Ar(s,o,n[o])}else if(r){if(t!==n){const o=s[fh];o&&(n+=";"+o),s.cssText=n,i=hh.test(n)}}else t&&e.removeAttribute("style");Vr in e&&(e[Vr]=i?s.display:"",e[Pu]&&(s.display="none"))}const il=/\s*!important$/;function Ar(e,t,n){if(ge(n))n.forEach(s=>Ar(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=gh(e,t);il.test(n)?e.setProperty(Rn(s),n.replace(il,""),"important"):e[s]=n}}const ol=["Webkit","Moz","ms"],Oi={};function gh(e,t){const n=Oi[t];if(n)return n;let s=Mt(t);if(s!=="filter"&&s in e)return Oi[t]=s;s=si(s);for(let r=0;rDi||(bh.then(()=>Di=0),Di=Date.now());function kh(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;nn(Eh(s,n.value),t,5,[s])};return n.value=e,n.attached=wh(),n}function Eh(e,t){if(ge(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const pl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,xh=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?dh(e,s,o):t==="style"?mh(e,n,s):ei(t)?Mo(t)||vh(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Sh(e,t,s,o))?(cl(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ll(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!We(s))?cl(e,Mt(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ll(e,t,s,o))};function Sh(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&pl(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return pl(t)&&We(n)?!1:t in e}const Br=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ge(t)?n=>kr(t,n):t};function Th(e){e.target.composing=!0}function fl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const is=Symbol("_assign");function hl(e,t,n){return t&&(e=e.trim()),n&&(e=ri(e)),e}const et={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[is]=Br(r);const i=s||r.props&&r.props.type==="number";Vn(e,t?"change":"input",o=>{o.target.composing||e[is](hl(e.value,n,i))}),(n||i)&&Vn(e,"change",()=>{e.value=hl(e.value,n,i)}),t||(Vn(e,"compositionstart",Th),Vn(e,"compositionend",fl),Vn(e,"change",fl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[is]=Br(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?ri(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a))}},Ah={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=ti(t);Vn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?ri(jr(o)):jr(o));e[is](e.multiple?r?new Set(i):i:i[0]),e._assigning=!0,qo(()=>{e._assigning=!1})}),e[is]=Br(s)},mounted(e,{value:t}){ml(e,t)},beforeUpdate(e,t,n){e[is]=Br(n)},updated(e,{value:t}){e._assigning||ml(e,t)}};function ml(e,t){const n=e.multiple,s=ge(t);if(!(n&&!s&&!ti(t))){for(let r=0,i=e.options.length;rString(c)===String(l)):o.selected=wp(t,l)>-1}else o.selected=t.has(l);else if(ai(jr(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function jr(e){return"_value"in e?e._value:e.value}const Rh=["ctrl","shift","alt","meta"],Ch={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Rh.some(n=>e[`${n}Key`]&&!t.includes(n))},xn=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const i=Rn(r.key);if(t.some(o=>o===i||Ih[o]===i))return e(r)}))},Lh=ct({patchProp:xh},ch);let gl;function Ph(){return gl||(gl=Gf(Lh))}const Oh=((...e)=>{const t=Ph().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Nh(s);if(!r)return;const i=t._component;!_e(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Dh(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t});function Dh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Nh(e){return We(e)?document.querySelector(e):e}const Qn=typeof document<"u";function Ou(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function $h(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Ou(e.default)}const Le=Object.assign;function Ni(e,t){const n={};for(const s in t){const r=t[s];n[s]=zt(r)?r.map(e):e(r)}return n}const Gs=()=>{},zt=Array.isArray;function _l(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Du=/#/g,Mh=/&/g,Vh=/\//g,Bh=/=/g,jh=/\?/g,Nu=/\+/g,Gh=/%5B/g,Uh=/%5D/g,$u=/%5E/g,Hh=/%60/g,Mu=/%7B/g,Fh=/%7C/g,Vu=/%7D/g,zh=/%20/g;function ea(e){return e==null?"":encodeURI(""+e).replace(Fh,"|").replace(Gh,"[").replace(Uh,"]")}function Wh(e){return ea(e).replace(Mu,"{").replace(Vu,"}").replace($u,"^")}function ho(e){return ea(e).replace(Nu,"%2B").replace(zh,"+").replace(Du,"%23").replace(Mh,"%26").replace(Hh,"`").replace(Mu,"{").replace(Vu,"}").replace($u,"^")}function qh(e){return ho(e).replace(Bh,"%3D")}function Kh(e){return ea(e).replace(Du,"%23").replace(jh,"%3F")}function Yh(e){return Kh(e).replace(Vh,"%2F")}function Xs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Xh=/\/$/,Jh=e=>e.replace(Xh,"");function $i(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),i=t.slice(a,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=tm(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:Xs(o)}}function Qh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function vl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Zh(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&ds(t.matched[s],n.matched[r])&&Bu(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ds(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Bu(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!em(e[n],t[n]))return!1;return!0}function em(e,t){return zt(e)?yl(e,t):zt(t)?yl(t,e):e?.valueOf()===t?.valueOf()}function yl(e,t){return zt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function tm(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const vn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let mo=(function(e){return e.pop="pop",e.push="push",e})({}),Mi=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function nm(e){if(!e)if(Qn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Jh(e)}const sm=/^[^#]+#/;function rm(e,t){return e.replace(sm,"#")+t}function im(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const hi=()=>({left:window.scrollX,top:window.scrollY});function om(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=im(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function bl(e,t){return(history.state?history.state.position-t:-1)+e}const go=new Map;function am(e,t){go.set(e,t)}function lm(e){const t=go.get(e);return go.delete(e),t}function cm(e){return typeof e=="string"||e&&typeof e=="object"}function ju(e){return typeof e=="string"||typeof e=="symbol"}let He=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Gu=Symbol("");He.MATCHER_NOT_FOUND+"",He.NAVIGATION_GUARD_REDIRECT+"",He.NAVIGATION_ABORTED+"",He.NAVIGATION_CANCELLED+"",He.NAVIGATION_DUPLICATED+"";function ps(e,t){return Le(new Error,{type:e,[Gu]:!0},t)}function an(e,t){return e instanceof Error&&Gu in e&&(t==null||!!(e.type&t))}const um=["params","query","hash"];function dm(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of um)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function pm(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&ho(r)):[s&&ho(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function fm(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=zt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const hm=Symbol(""),kl=Symbol(""),mi=Symbol(""),ta=Symbol(""),_o=Symbol("");function ks(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function En(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=f=>{f===!1?a(ps(He.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?a(f):cm(f)?a(ps(He.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(o&&s.enterCallbacks[r]===o&&typeof f=="function"&&o.push(f),l())},u=i(()=>e.call(s&&s.instances[r],t,n,c));let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch(f=>a(f))})}function Vi(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let a=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(Ou(a)){const c=(a.__vccOpts||a)[t];c&&i.push(En(c,n,s,o,l,r))}else{let c=a();i.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const d=$h(u)?u.default:u;o.mods[l]=u,o.components[l]=d;const f=(d.__vccOpts||d)[t];return f&&En(f,n,s,o,l,r)()}))}}return i}function mm(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;ods(c,l))?s.push(l):n.push(l));const a=e.matched[o];a&&(t.matched.find(c=>ds(c,a))||r.push(a))}return[n,s,r]}let gm=()=>location.protocol+"//"+location.host;function Uu(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),vl(l,"")}return vl(n,e)+s+r}function _m(e,t,n,s){let r=[],i=[],o=null;const l=({state:f})=>{const h=Uu(e,location),y=n.value,w=t.value;let T=0;if(f){if(n.value=h,t.value=f,o&&o===y){o=null;return}T=w?f.position-w.position:0}else s(h);r.forEach(S=>{S(n.value,y,{delta:T,type:mo.pop,direction:T?T>0?Mi.forward:Mi.back:Mi.unknown})})};function a(){o=n.value}function c(f){r.push(f);const h=()=>{const y=r.indexOf(f);y>-1&&r.splice(y,1)};return i.push(h),h}function u(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(Le({},f.state,{scroll:hi()}),"")}}function d(){for(const f of i)f();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:d}}function El(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?hi():null}}function vm(e){const{history:t,location:n}=window,s={value:Uu(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(a,c,u){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:gm()+e+a;try{t[u?"replaceState":"pushState"](c,"",f),r.value=c}catch(h){console.error(h),n[u?"replace":"assign"](f)}}function o(a,c){i(a,Le({},t.state,El(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=Le({},r.value,t.state,{forward:a,scroll:hi()});i(u.current,u,!0),i(a,Le({},El(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:o}}function ym(e){e=nm(e);const t=vm(e),n=_m(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=Le({location:"",base:e,go:s,createHref:rm.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Bn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Ze=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Ze||{});const bm={type:Bn.Static,value:""},wm=/[a-zA-Z0-9_]/;function km(e){if(!e)return[[]];if(e==="/")return[[bm]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=Ze.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,a,c="",u="";function d(){c&&(n===Ze.Static?i.push({type:Bn.Static,value:c}):n===Ze.Param||n===Ze.ParamRegExp||n===Ze.ParamRegExpEnd?(i.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Bn.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=a}for(;lt.length?t.length===1&&t[0]===bt.Static+bt.Segment?1:-1:0}function Hu(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Am={strict:!1,end:!0,sensitive:!1};function Rm(e,t,n){const s=Sm(km(e.path),n),r=Le(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Cm(e,t){const n=[],s=new Map;t=_l(Am,t);function r(d){return s.get(d)}function i(d,f,h){const y=!h,w=Al(d);w.aliasOf=h&&h.record;const T=_l(t,d),S=[w];if("alias"in d){const v=typeof d.alias=="string"?[d.alias]:d.alias;for(const V of v)S.push(Al(Le({},w,{components:h?h.record.components:w.components,path:V,aliasOf:h?h.record:w})))}let L,g;for(const v of S){const{path:V}=v;if(f&&V[0]!=="/"){const Y=f.record.path,ne=Y[Y.length-1]==="/"?"":"/";v.path=f.record.path+(V&&ne+V)}if(L=Rm(v,f,T),h?h.alias.push(L):(g=g||L,g!==L&&g.alias.push(L),y&&d.name&&!Rl(L)&&o(d.name)),Fu(L)&&a(L),w.children){const Y=w.children;for(let ne=0;ne{o(g)}:Gs}function o(d){if(ju(d)){const f=s.get(d);f&&(s.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(o),f.alias.forEach(o))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&s.delete(d.record.name),d.children.forEach(o),d.alias.forEach(o))}}function l(){return n}function a(d){const f=Pm(d,n);n.splice(f,0,d),d.record.name&&!Rl(d)&&s.set(d.record.name,d)}function c(d,f){let h,y={},w,T;if("name"in d&&d.name){if(h=s.get(d.name),!h)throw ps(He.MATCHER_NOT_FOUND,{location:d});T=h.record.name,y=Le(Tl(f.params,h.keys.filter(g=>!g.optional).concat(h.parent?h.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),d.params&&Tl(d.params,h.keys.map(g=>g.name))),w=h.stringify(y)}else if(d.path!=null)w=d.path,h=n.find(g=>g.re.test(w)),h&&(y=h.parse(w),T=h.record.name);else{if(h=f.name?s.get(f.name):n.find(g=>g.re.test(f.path)),!h)throw ps(He.MATCHER_NOT_FOUND,{location:d,currentLocation:f});T=h.record.name,y=Le({},f.params,d.params),w=h.stringify(y)}const S=[];let L=h;for(;L;)S.unshift(L.record),L=L.parent;return{name:T,path:w,params:y,matched:S,meta:Lm(S)}}e.forEach(d=>i(d));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:c,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Tl(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Al(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Im(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Im(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Rl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Lm(e){return e.reduce((t,n)=>Le(t,n.meta),{})}function Pm(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Hu(e,t[i])<0?s=i:n=i+1}const r=Om(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function Om(e){let t=e;for(;t=t.parent;)if(Fu(t)&&Hu(e,t)===0)return t}function Fu({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Cl(e){const t=$t(mi),n=$t(ta),s=ue(()=>{const a=me(e.to);return t.resolve(a)}),r=ue(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],d=n.matched;if(!u||!d.length)return-1;const f=d.findIndex(ds.bind(null,u));if(f>-1)return f;const h=Il(a[c-2]);return c>1&&Il(u)===h&&d[d.length-1].path!==h?d.findIndex(ds.bind(null,a[c-2])):f}),i=ue(()=>r.value>-1&&Vm(n.params,s.value.params)),o=ue(()=>r.value>-1&&r.value===n.matched.length-1&&Bu(n.params,s.value.params));function l(a={}){if(Mm(a)){const c=t[me(e.replace)?"replace":"push"](me(e.to)).catch(Gs);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:ue(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function Dm(e){return e.length===1?e[0]:e}const Nm=iu({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Cl,setup(e,{slots:t}){const n=ls(Cl(e)),{options:s}=$t(mi),r=ue(()=>({[Ll(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Ll(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&Dm(t.default(n));return e.custom?i:Iu("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),$m=Nm;function Mm(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Vm(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!zt(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function Il(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ll=(e,t,n)=>e??t??n,Bm=iu({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=$t(_o),r=ue(()=>e.route||s.value),i=$t(kl,0),o=ue(()=>{let c=me(i);const{matched:u}=r.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),l=ue(()=>r.value.matched[o.value]);Er(kl,ue(()=>o.value+1)),Er(hm,l),Er(_o,r);const a=de();return tn(()=>[a.value,l.value,e.name],([c,u,d],[f,h,y])=>{u&&(u.instances[d]=c,h&&h!==u&&c&&c===f&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),c&&u&&(!h||!ds(u,h)||!f)&&(u.enterCallbacks[d]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,d=l.value,f=d&&d.components[u];if(!f)return Pl(n.default,{Component:f,route:c});const h=d.props[u],y=h?h===!0?c.params:typeof h=="function"?h(c):h:null,T=Iu(f,Le({},y,t,{onVnodeUnmounted:S=>{S.component.isUnmounted&&(d.instances[u]=null)},ref:a}));return Pl(n.default,{Component:T,route:c})||T}}});function Pl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const jm=Bm;function Gm(e){const t=Cm(e.routes,e),n=e.parseQuery||pm,s=e.stringifyQuery||wl,r=e.history,i=ks(),o=ks(),l=ks(),a=Hp(vn);let c=vn;Qn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ni.bind(null,$=>""+$),d=Ni.bind(null,Yh),f=Ni.bind(null,Xs);function h($,ee){let Z,re;return ju($)?(Z=t.getRecordMatcher($),re=ee):re=$,t.addRoute(re,Z)}function y($){const ee=t.getRecordMatcher($);ee&&t.removeRoute(ee)}function w(){return t.getRoutes().map($=>$.record)}function T($){return!!t.getRecordMatcher($)}function S($,ee){if(ee=Le({},ee||a.value),typeof $=="string"){const C=$i(n,$,ee.path),R=t.resolve({path:C.path},ee),k=r.createHref(C.fullPath);return Le(C,R,{params:f(R.params),hash:Xs(C.hash),redirectedFrom:void 0,href:k})}let Z;if($.path!=null)Z=Le({},$,{path:$i(n,$.path,ee.path).path});else{const C=Le({},$.params);for(const R in C)C[R]==null&&delete C[R];Z=Le({},$,{params:d(C)}),ee.params=d(ee.params)}const re=t.resolve(Z,ee),ke=$.hash||"";re.params=u(f(re.params));const _=Qh(s,Le({},$,{hash:Wh(ke),path:re.path})),b=r.createHref(_);return Le({fullPath:_,hash:ke,query:s===wl?fm($.query):$.query||{}},re,{redirectedFrom:void 0,href:b})}function L($){return typeof $=="string"?$i(n,$,a.value.path):Le({},$)}function g($,ee){if(c!==$)return ps(He.NAVIGATION_CANCELLED,{from:ee,to:$})}function v($){return ne($)}function V($){return v(Le(L($),{replace:!0}))}function Y($,ee){const Z=$.matched[$.matched.length-1];if(Z&&Z.redirect){const{redirect:re}=Z;let ke=typeof re=="function"?re($,ee):re;return typeof ke=="string"&&(ke=ke.includes("?")||ke.includes("#")?ke=L(ke):{path:ke},ke.params={}),Le({query:$.query,hash:$.hash,params:ke.path!=null?{}:$.params},ke)}}function ne($,ee){const Z=c=S($),re=a.value,ke=$.state,_=$.force,b=$.replace===!0,C=Y(Z,re);if(C)return ne(Le(L(C),{state:typeof C=="object"?Le({},ke,C.state):ke,force:_,replace:b}),ee||Z);const R=Z;R.redirectedFrom=ee;let k;return!_&&Zh(s,re,Z)&&(k=ps(He.NAVIGATION_DUPLICATED,{to:R,from:re}),ve(re,re,!0,!1)),(k?Promise.resolve(k):he(R,re)).catch(P=>an(P)?an(P,He.NAVIGATION_GUARD_REDIRECT)?P:le(P):q(P,R,re)).then(P=>{if(P){if(an(P,He.NAVIGATION_GUARD_REDIRECT))return ne(Le({replace:b},L(P.to),{state:typeof P.to=="object"?Le({},ke,P.to.state):ke,force:_}),ee||R)}else P=G(R,re,!0,b,ke);return J(R,re,P),P})}function z($,ee){const Z=g($,ee);return Z?Promise.reject(Z):Promise.resolve()}function j($){const ee=Pt.values().next().value;return ee&&typeof ee.runWithContext=="function"?ee.runWithContext($):$()}function he($,ee){let Z;const[re,ke,_]=mm($,ee);Z=Vi(re.reverse(),"beforeRouteLeave",$,ee);for(const C of re)C.leaveGuards.forEach(R=>{Z.push(En(R,$,ee))});const b=z.bind(null,$,ee);return Z.push(b),qe(Z).then(()=>{Z=[];for(const C of i.list())Z.push(En(C,$,ee));return Z.push(b),qe(Z)}).then(()=>{Z=Vi(ke,"beforeRouteUpdate",$,ee);for(const C of ke)C.updateGuards.forEach(R=>{Z.push(En(R,$,ee))});return Z.push(b),qe(Z)}).then(()=>{Z=[];for(const C of _)if(C.beforeEnter)if(zt(C.beforeEnter))for(const R of C.beforeEnter)Z.push(En(R,$,ee));else Z.push(En(C.beforeEnter,$,ee));return Z.push(b),qe(Z)}).then(()=>($.matched.forEach(C=>C.enterCallbacks={}),Z=Vi(_,"beforeRouteEnter",$,ee,j),Z.push(b),qe(Z))).then(()=>{Z=[];for(const C of o.list())Z.push(En(C,$,ee));return Z.push(b),qe(Z)}).catch(C=>an(C,He.NAVIGATION_CANCELLED)?C:Promise.reject(C))}function J($,ee,Z){l.list().forEach(re=>j(()=>re($,ee,Z)))}function G($,ee,Z,re,ke){const _=g($,ee);if(_)return _;const b=ee===vn,C=Qn?history.state:{};Z&&(re||b?r.replace($.fullPath,Le({scroll:b&&C&&C.scroll},ke)):r.push($.fullPath,ke)),a.value=$,ve($,ee,Z,b),le()}let x;function D(){x||(x=r.listen(($,ee,Z)=>{if(!Te.listening)return;const re=S($),ke=Y(re,Te.currentRoute.value);if(ke){ne(Le(ke,{replace:!0,force:!0}),re).catch(Gs);return}c=re;const _=a.value;Qn&&am(bl(_.fullPath,Z.delta),hi()),he(re,_).catch(b=>an(b,He.NAVIGATION_ABORTED|He.NAVIGATION_CANCELLED)?b:an(b,He.NAVIGATION_GUARD_REDIRECT)?(ne(Le(L(b.to),{force:!0}),re).then(C=>{an(C,He.NAVIGATION_ABORTED|He.NAVIGATION_DUPLICATED)&&!Z.delta&&Z.type===mo.pop&&r.go(-1,!1)}).catch(Gs),Promise.reject()):(Z.delta&&r.go(-Z.delta,!1),q(b,re,_))).then(b=>{b=b||G(re,_,!1),b&&(Z.delta&&!an(b,He.NAVIGATION_CANCELLED)?r.go(-Z.delta,!1):Z.type===mo.pop&&an(b,He.NAVIGATION_ABORTED|He.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),J(re,_,b)}).catch(Gs)}))}let I=ks(),N=ks(),U;function q($,ee,Z){le($);const re=N.list();return re.length?re.forEach(ke=>ke($,ee,Z)):console.error($),Promise.reject($)}function Q(){return U&&a.value!==vn?Promise.resolve():new Promise(($,ee)=>{I.add([$,ee])})}function le($){return U||(U=!$,D(),I.list().forEach(([ee,Z])=>$?Z($):ee()),I.reset()),$}function ve($,ee,Z,re){const{scrollBehavior:ke}=e;if(!Qn||!ke)return Promise.resolve();const _=!Z&&lm(bl($.fullPath,0))||(re||!Z)&&history.state&&history.state.scroll||null;return qo().then(()=>ke($,ee,_)).then(b=>b&&om(b)).catch(b=>q(b,$,ee))}const Ie=$=>r.go($);let pe;const Pt=new Set,Te={currentRoute:a,listening:!0,addRoute:h,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:T,getRoutes:w,resolve:S,options:e,push:v,replace:V,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:N.add,isReady:Q,install($){$.component("RouterLink",$m),$.component("RouterView",jm),$.config.globalProperties.$router=Te,Object.defineProperty($.config.globalProperties,"$route",{enumerable:!0,get:()=>me(a)}),Qn&&!pe&&a.value===vn&&(pe=!0,v(r.location).catch(re=>{}));const ee={};for(const re in vn)Object.defineProperty(ee,re,{get:()=>a.value[re],enumerable:!0});$.provide(mi,Te),$.provide(ta,zc(ee)),$.provide(_o,a);const Z=$.unmount;Pt.add($),$.unmount=function(){Pt.delete($),Pt.size<1&&(c=vn,x&&x(),x=null,a.value=vn,pe=!1,U=!1),Z()}}};function qe($){return $.reduce((ee,Z)=>ee.then(()=>j(Z)),Promise.resolve())}return Te}function zu(){return $t(mi)}function rr(e){return $t(ta)}const Um=[{label:"Install",to:"/install",match:"/install"},{label:"Docs",href:"/docs/",external:!0,match:"/docs"},{label:"Registry",to:"/registry",match:"/registry"},{label:"About",match:"/about",items:[{label:"Community Guide",to:"/about/community-guide"},{label:"Releases",to:"/about/releases"},{label:"Team",to:"/about/team"},{label:"FAQ",to:"/about/faq"},{label:"The Documentary",to:"/about/documentary"}]}],Me=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Hm={class:"hdr"},Fm={class:"wrap"},zm={class:"nav","aria-label":"Primary"},Wm=["onMouseenter","onMouseleave"],qm=["onClick","aria-expanded"],Km=["href","target"],Ym=["href","target"],Xm=["disabled"],Jm={key:0,class:"mnav"},Qm=["disabled"],Zm={key:0,class:"mdd"},eg=["onClick","aria-expanded"],tg={key:0,class:"mdd-menu"},ng=["href","target"],sg=["href","target"],rg={__name:"SiteHeader",setup(e){const t=rr(),n=ue(()=>Um);function s(G){return!!G?.external||!!G?.href}function r(G){if(!G)return"";const x=G.indexOf("?"),D=G.indexOf("#"),I=Math.min(x===-1?G.length:x,D===-1?G.length:D);return G.slice(0,I)}function i(G){const x=G?.match||"";if(!x)return!1;const D=r(t.path);return D===x||D.startsWith(x+"/")}function o(G){if(G?.to)return r(t.path).startsWith(r(G.to));if(G?.href&&l(G.href)){const x=r(new URL(G.href,window.location.origin).pathname),D=r(t.path);return D===x||D.startsWith(x+"/")}return!1}function l(G){if(!G)return!1;if(G.startsWith("/"))return!0;try{return new URL(G,window.location.origin).origin===window.location.origin}catch{return!1}}function a(G){return G.items?.length?`dd:${G.label}`:s(G)?`href:${G.href}`:`to:${G.to}`}function c(G){return s(G)?`href:${G.href}`:`to:${G.to}`}const u=de("");function d(G){return u.value===G}function f(G){u.value=G}function h(G){u.value===G&&(u.value="")}function y(G){u.value=u.value===G?"":G}function w(){u.value=""}function T(G){const x=G.target;x instanceof Element&&(x.closest(".hdr")||w())}function S(G){G.key==="Escape"&&w()}_n(()=>{document.addEventListener("click",T,{passive:!0}),document.addEventListener("keydown",S)}),An(()=>{document.removeEventListener("click",T),document.removeEventListener("keydown",S)});const L=de(!1),g=de(new Set);function v(){L.value=!L.value,L.value||(g.value=new Set),document.documentElement.classList.toggle("nav-open",L.value)}function V(){L.value=!1,g.value=new Set,document.documentElement.classList.remove("nav-open")}function Y(G){const x=new Set(g.value);x.has(G)?x.delete(G):x.add(G),g.value=x}function ne(G){return g.value.has(G)}An(()=>{document.documentElement.classList.remove("nav-open")});const z=de(""),j=de("");function he(G){G==="mobile"?j.value="":z.value=""}function J(G){const x=(G==="mobile"?j.value:z.value).trim();x&&(w(),V(),window.location.href=`/docs/?q=${encodeURIComponent(x)}`)}return(G,x)=>{const D=Cn("RouterLink");return A(),O("header",Hm,[p("div",Fm,[Se(D,{class:"brand",to:"/",onClick:x[0]||(x[0]=I=>V())},{default:Je(()=>[...x[16]||(x[16]=[p("span",{class:"logo"},"Vix.cpp",-1)])]),_:1}),p("nav",zm,[(A(!0),O(we,null,ze(n.value,I=>(A(),O(we,{key:a(I)},[Array.isArray(I.items)&&I.items.length?(A(),O("div",{key:0,class:"dd",onMouseenter:N=>f(I.label),onMouseleave:N=>h(I.label)},[p("button",{type:"button",class:De(["link dd-btn",{"is-open":d(I.label),"is-active":i(I)||I.items.some(o)}]),onClick:N=>y(I.label),"aria-haspopup":"menu","aria-expanded":String(d(I.label))},[Ue(H(I.label)+" ",1),x[17]||(x[17]=p("span",{class:"chev","aria-hidden":"true"},"▾",-1))],10,qm),p("div",{class:De(["dd-menu",{open:d(I.label)}]),role:"menu"},[(A(!0),O(we,null,ze(I.items,N=>(A(),O(we,{key:c(N)},[s(N)?(A(),O("a",{key:0,class:De(["dd-item",{"is-active":o(N)}]),href:N.href,target:N.target||(l(N.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[1]||(x[1]=U=>w())},H(N.label),11,Km)):(A(),mt(D,{key:1,class:De(["dd-item",{"is-active":o(N)}]),to:N.to,onClick:x[2]||(x[2]=U=>w())},{default:Je(()=>[Ue(H(N.label),1)]),_:2},1032,["class","to"]))],64))),128))],2)],40,Wm)):s(I)?(A(),O("a",{key:1,class:De(["link",{"is-active":i(I)}]),href:I.href,target:I.target||(l(I.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[3]||(x[3]=N=>w())},H(I.label),11,Ym)):(A(),mt(D,{key:2,class:De(["link",{"is-active":i(I)}]),to:I.to,onClick:x[4]||(x[4]=N=>w())},{default:Je(()=>[Ue(H(I.label),1)]),_:2},1032,["class","to"]))],64))),128)),x[19]||(x[19]=p("div",{class:"spacer"},null,-1)),p("form",{class:"search",role:"search",onSubmit:x[7]||(x[7]=xn(I=>J("desktop"),["prevent"]))},[x[18]||(x[18]=p("span",{class:"s-ico","aria-hidden":"true"},"⌕",-1)),Fe(p("input",{"onUpdate:modelValue":x[5]||(x[5]=I=>z.value=I),class:"s-in",type:"search",placeholder:"Search docs…",autocomplete:"off",onKeydown:x[6]||(x[6]=fo(xn(I=>he("desktop"),["prevent"]),["esc"]))},null,544),[[et,z.value,void 0,{trim:!0}]]),p("button",{class:"s-btn",type:"submit",disabled:!z.value},"Search",8,Xm)],32)]),p("button",{type:"button",class:De(["burger",{open:L.value}]),"aria-label":"Toggle navigation",onClick:x[8]||(x[8]=I=>v())},[...x[20]||(x[20]=[p("span",null,null,-1),p("span",null,null,-1),p("span",null,null,-1)])],2)]),L.value?(A(),O("div",Jm,[p("form",{class:"msearch",role:"search",onSubmit:x[11]||(x[11]=xn(I=>J("mobile"),["prevent"]))},[x[21]||(x[21]=p("span",{class:"s-ico","aria-hidden":"true"},"⌕",-1)),Fe(p("input",{"onUpdate:modelValue":x[9]||(x[9]=I=>j.value=I),class:"s-in",type:"search",placeholder:"Search docs…",autocomplete:"off",onKeydown:x[10]||(x[10]=fo(xn(I=>he("mobile"),["prevent"]),["esc"]))},null,544),[[et,j.value,void 0,{trim:!0}]]),p("button",{class:"s-btn",type:"submit",disabled:!j.value},"Search",8,Qm)],32),(A(!0),O(we,null,ze(n.value,I=>(A(),O(we,{key:"m-"+a(I)},[Array.isArray(I.items)&&I.items.length?(A(),O("div",Zm,[p("button",{type:"button",class:De(["mlink mdd-btn",{"is-active":i(I)||I.items.some(o)}]),onClick:N=>Y(I.label),"aria-expanded":String(ne(I.label))},[p("span",null,H(I.label),1),x[22]||(x[22]=p("span",{class:"chev","aria-hidden":"true"},"▾",-1))],10,eg),ne(I.label)?(A(),O("div",tg,[(A(!0),O(we,null,ze(I.items,N=>(A(),O(we,{key:"m-"+c(N)},[s(N)?(A(),O("a",{key:0,class:De(["mdd-item",{"is-active":o(N)}]),href:N.href,target:N.target||(l(N.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[12]||(x[12]=U=>V())},H(N.label),11,ng)):(A(),mt(D,{key:1,class:De(["mdd-item",{"is-active":o(N)}]),to:N.to,onClick:x[13]||(x[13]=U=>V())},{default:Je(()=>[Ue(H(N.label),1)]),_:2},1032,["class","to"]))],64))),128))])):se("",!0)])):s(I)?(A(),O("a",{key:1,class:De(["mlink",{"is-active":i(I)}]),href:I.href,target:I.target||(l(I.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[14]||(x[14]=N=>V())},H(I.label),11,sg)):(A(),mt(D,{key:2,class:De(["mlink",{"is-active":i(I)}]),to:I.to,onClick:x[15]||(x[15]=N=>V())},{default:Je(()=>[Ue(H(I.label),1)]),_:2},1032,["class","to"]))],64))),128))])):se("",!0)])}}},ig=Me(rg,[["__scopeId","data-v-5a063dfd"]]),og={class:"ft"},ag={class:"wrap"},lg={class:"left"},cg={class:"muted"},ug={class:"version"},dg={__name:"SiteFooter",setup(e){const t="1.22.0";return(n,s)=>(A(),O("footer",og,[p("div",ag,[p("div",lg,[s[1]||(s[1]=p("div",{class:"brand"},"Vix.cpp",-1)),p("div",cg,[s[0]||(s[0]=Ue(" Modern C++ backend runtime ",-1)),p("span",ug,"v"+H(me(t)),1)])]),s[2]||(s[2]=p("div",{class:"right"},[p("a",{class:"link",href:"https://github.com/vixcpp/vix",target:"_blank",rel:"noreferrer"}," GitHub "),p("a",{class:"link",href:"https://github.com/vixcpp/vix/releases",target:"_blank",rel:"noreferrer"}," Releases "),p("a",{class:"link",href:"https://github.com/vixcpp/vix/issues",target:"_blank",rel:"noreferrer"}," Issues ")],-1))])]))}},pg=Me(dg,[["__scopeId","data-v-3124d47e"]]),fg={key:0,class:"pwa-toast-wrap",role:"status","aria-live":"polite"},hg={class:"pwa-toast"},mg={class:"pwa-toast-left"},gg={class:"pwa-toast-text"},_g={class:"pwa-toast-title"},vg={class:"pwa-toast-sub"},yg={key:0,class:"pwa-toast-version"},bg={class:"pwa-toast-actions"},Wu={__name:"PwaUpdateToast",props:{show:{type:Boolean,default:!1},message:{type:String,default:"New version available."},detail:{type:String,default:"Refresh to load the latest build."},version:{type:String,default:""}},emits:["refresh","dismiss"],setup(e,{emit:t}){const n=t;return(s,r)=>(A(),mt(su,{to:"body"},[e.show?(A(),O("div",fg,[p("div",hg,[r[3]||(r[3]=p("div",{class:"pwa-toast-glow","aria-hidden":"true"},null,-1)),p("div",mg,[r[2]||(r[2]=p("div",{class:"pwa-toast-icon","aria-hidden":"true"},[p("span",{class:"pwa-dot pwa-dot-red"}),p("span",{class:"pwa-dot pwa-dot-yellow"}),p("span",{class:"pwa-dot pwa-dot-green"})],-1)),p("div",gg,[p("div",_g,H(e.message),1),p("div",vg,[Ue(H(e.detail)+" ",1),e.version?(A(),O("span",yg,"v"+H(e.version),1)):se("",!0)])])]),p("div",bg,[p("button",{class:"pwa-btn pwa-btn-ghost",type:"button",onClick:r[0]||(r[0]=i=>n("dismiss"))}," Later "),p("button",{class:"pwa-btn pwa-btn-primary",type:"button",onClick:r[1]||(r[1]=i=>n("refresh"))}," Refresh ")])])])):se("",!0)]))}},wg={key:0,class:"pwa-toast-wrap",role:"status","aria-live":"polite"},kg={class:"pwa-toast"},Eg={class:"pwa-toast-left"},xg={class:"pwa-toast-text"},Sg={class:"pwa-toast-title"},Tg={class:"pwa-toast-sub"},Ag={class:"pwa-toast-actions"},Rg=["disabled"],Cg={__name:"PwaInstallToast",props:{show:{type:Boolean,default:!1},message:{type:String,default:"Install Vix.cpp?"},detail:{type:String,default:"Get an app-like experience: offline support, faster launch."},canInstall:{type:Boolean,default:!0}},emits:["install","dismiss"],setup(e,{emit:t}){const n=e,s=t,r=ue(()=>!n.canInstall);return(i,o)=>(A(),mt(su,{to:"body"},[e.show?(A(),O("div",wg,[p("div",kg,[o[3]||(o[3]=p("div",{class:"pwa-toast-glow","aria-hidden":"true"},null,-1)),p("div",Eg,[o[2]||(o[2]=p("div",{class:"pwa-toast-icon","aria-hidden":"true"},[p("span",{class:"pwa-dot pwa-dot-red"}),p("span",{class:"pwa-dot pwa-dot-yellow"}),p("span",{class:"pwa-dot pwa-dot-green"})],-1)),p("div",xg,[p("div",Sg,H(e.message),1),p("div",Tg,H(e.detail),1)])]),p("div",Ag,[p("button",{class:"pwa-btn pwa-btn-ghost",type:"button",onClick:o[0]||(o[0]=l=>s("dismiss"))}," Not now "),p("button",{class:"pwa-btn pwa-btn-primary",type:"button",disabled:r.value,onClick:o[1]||(o[1]=l=>s("install"))}," Install ",8,Rg)])])])):se("",!0)]))}},Ig={class:"main"},Ol="vix_pwa_install_dismiss_until",Lg={__name:"App",setup(e){const t=rr(),n=ue(()=>t.path==="/registry"||t.path.startsWith("/registry/"));tn(n,L=>{document.documentElement.classList.toggle("is-registry",L)},{immediate:!0});const s=$t("pwaToast"),r=ue(()=>s?.show?.value===!0),i="1.22.0";function o(){window.__vix_pwa_refresh__?.()}function l(){window.__vix_pwa_dismiss__?.()}const a=de(!1),c=de(!1);let u=null;function d(){return Date.now()}function f(){const L=Number(localStorage.getItem(Ol)||"0");return d()>L}function h(L=7){const g=d()+L*24*60*60*1e3;localStorage.setItem(Ol,String(g))}function y(){h(7),a.value=!1}async function w(){if(u)try{u.prompt();const L=await u.userChoice;u=null,c.value=!1,a.value=!1,L?.outcome!=="accepted"&&h(7)}catch{u=null,c.value=!1,a.value=!1,h(7)}}function T(L){L.preventDefault(),u=L,c.value=!0,f()&&setTimeout(()=>{u&&c.value&&(a.value=!0)},900)}function S(){u=null,c.value=!1,a.value=!1,h(365)}return _n(()=>{window.addEventListener("beforeinstallprompt",T),window.addEventListener("appinstalled",S)}),An(()=>{window.removeEventListener("beforeinstallprompt",T),window.removeEventListener("appinstalled",S),document.documentElement.classList.remove("is-registry")}),(L,g)=>{const v=Cn("router-view");return A(),O("div",{class:De(["app",{"app--registry":n.value}])},[n.value?se("",!0):(A(),mt(ig,{key:0})),p("main",Ig,[Se(v)]),n.value?se("",!0):(A(),mt(pg,{key:1})),Se(Cg,{show:a.value,canInstall:c.value,message:"Install Vix.cpp?",detail:"Pin it like an app. Offline support, faster launch.",onInstall:w,onDismiss:y},null,8,["show","canInstall"]),Se(Wu,{show:r.value,version:me(i),onRefresh:o,onDismiss:l},null,8,["show","version"])],2)}}},Pg=Me(Lg,[["__scopeId","data-v-f0763650"]]),hr={hero:{title:"Offline-first C++ runtime.",subtitle:"A modern C++ runtime and serious alternative to Node.js, Deno, and Bun, designed for unreliable networks and native performance.",ctas:[{label:"Get Vix.cpp",to:"/install",kind:"primary"},{label:"Get started",href:"/docs/",kind:"secondary",external:!0}],badges:[],support:{title:"Production ready",meta:["Native C++ binaries","MIT licensed"]},examples:[{key:"http",label:"HTTP",lang:"cpp",file:"server.cpp",code:`#include +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();function $o(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ne={},es=[],en=()=>{},Ec=()=>!1,ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Mo=e=>e.startsWith("onUpdate:"),ct=Object.assign,Vo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},up=Object.prototype.hasOwnProperty,Oe=(e,t)=>up.call(e,t),ge=Array.isArray,ts=e=>tr(e)==="[object Map]",ti=e=>tr(e)==="[object Set]",Ma=e=>tr(e)==="[object Date]",_e=e=>typeof e=="function",We=e=>typeof e=="string",Ht=e=>typeof e=="symbol",$e=e=>e!==null&&typeof e=="object",xc=e=>($e(e)||_e(e))&&_e(e.then)&&_e(e.catch),Sc=Object.prototype.toString,tr=e=>Sc.call(e),dp=e=>tr(e).slice(8,-1),Ac=e=>tr(e)==="[object Object]",Bo=e=>We(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ds=$o(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ni=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},pp=/-\w/g,Mt=ni(e=>e.replace(pp,t=>t.slice(1).toUpperCase())),fp=/\B([A-Z])/g,Rn=ni(e=>e.replace(fp,"-$1").toLowerCase()),si=ni(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ai=ni(e=>e?`on${si(e)}`:""),Sn=(e,t)=>!Object.is(e,t),kr=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ri=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Va;const ii=()=>Va||(Va=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function oi(e){if(ge(e)){const t={};for(let n=0;n{if(n){const s=n.split(mp);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function De(e){let t="";if(We(e))t=e;else if(ge(e))for(let n=0;nai(n,t))}const Cc=e=>!!(e&&e.__v_isRef===!0),H=e=>We(e)?e:e==null?"":ge(e)||$e(e)&&(e.toString===Sc||!_e(e.toString))?Cc(e)?H(e.value):JSON.stringify(e,Ic,2):String(e),Ic=(e,t)=>Cc(t)?Ic(e,t.value):ts(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Ti(s,i)+" =>"]=r,n),{})}:ti(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ti(n))}:Ht(t)?Ti(t):$e(t)&&!ge(t)&&!Ac(t)?String(t):t,Ti=(e,t="")=>{var n;return Ht(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Tt;class kp{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Tt,!t&&Tt&&(this.index=(Tt.scopes||(Tt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Tt=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if($s){let t=$s;for($s=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ns;){let t=Ns;for(Ns=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Dc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Nc(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Uo(s),xp(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function eo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&($c(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function $c(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Fs)||(e.globalVersion=Fs,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!eo(e))))return;e.flags|=2;const t=e.dep,n=Be,s=Ut;Be=e,Ut=!0;try{Dc(e);const r=e.fn(e._value);(t.version===0||Sn(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Be=n,Ut=s,Nc(e),e.flags&=-3}}function Uo(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Uo(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function xp(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ut=!0;const Mc=[];function pn(){Mc.push(Ut),Ut=!1}function fn(){const e=Mc.pop();Ut=e===void 0?!0:e}function Ba(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Be;Be=void 0;try{t()}finally{Be=n}}}let Fs=0;class Sp{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ho{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Be||!Ut||Be===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Be)n=this.activeLink=new Sp(Be,this),Be.deps?(n.prevDep=Be.depsTail,Be.depsTail.nextDep=n,Be.depsTail=n):Be.deps=Be.depsTail=n,Vc(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Be.depsTail,n.nextDep=void 0,Be.depsTail.nextDep=n,Be.depsTail=n,Be.deps===n&&(Be.deps=s)}return n}trigger(t){this.version++,Fs++,this.notify(t)}notify(t){jo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Go()}}}function Vc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Vc(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const to=new WeakMap,Gn=Symbol(""),no=Symbol(""),zs=Symbol("");function pt(e,t,n){if(Ut&&Be){let s=to.get(e);s||to.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ho),r.map=s,r.key=n),r.track()}}function un(e,t,n,s,r,i){const o=to.get(e);if(!o){Fs++;return}const l=a=>{a&&a.trigger()};if(jo(),t==="clear")o.forEach(l);else{const a=ge(e),c=a&&Bo(n);if(a&&n==="length"){const u=Number(s);o.forEach((d,f)=>{(f==="length"||f===zs||!Ht(f)&&f>=u)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),c&&l(o.get(zs)),t){case"add":a?c&&l(o.get("length")):(l(o.get(Gn)),ts(e)&&l(o.get(no)));break;case"delete":a||(l(o.get(Gn)),ts(e)&&l(o.get(no)));break;case"set":ts(e)&&l(o.get(Gn));break}}Go()}function Xn(e){const t=Pe(e);return t===e?t:(pt(t,"iterate",zs),Nt(e)?t:t.map(Ft))}function li(e){return pt(e=Pe(e),"iterate",zs),e}function bn(e,t){return hn(e)?cs(Un(e)?Ft(t):t):Ft(t)}const Ap={__proto__:null,[Symbol.iterator](){return Ci(this,Symbol.iterator,e=>bn(this,e))},concat(...e){return Xn(this).concat(...e.map(t=>ge(t)?Xn(t):t))},entries(){return Ci(this,"entries",e=>(e[1]=bn(this,e[1]),e))},every(e,t){return on(this,"every",e,t,void 0,arguments)},filter(e,t){return on(this,"filter",e,t,n=>n.map(s=>bn(this,s)),arguments)},find(e,t){return on(this,"find",e,t,n=>bn(this,n),arguments)},findIndex(e,t){return on(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return on(this,"findLast",e,t,n=>bn(this,n),arguments)},findLastIndex(e,t){return on(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return on(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ii(this,"includes",e)},indexOf(...e){return Ii(this,"indexOf",e)},join(e){return Xn(this).join(e)},lastIndexOf(...e){return Ii(this,"lastIndexOf",e)},map(e,t){return on(this,"map",e,t,void 0,arguments)},pop(){return ys(this,"pop")},push(...e){return ys(this,"push",e)},reduce(e,...t){return ja(this,"reduce",e,t)},reduceRight(e,...t){return ja(this,"reduceRight",e,t)},shift(){return ys(this,"shift")},some(e,t){return on(this,"some",e,t,void 0,arguments)},splice(...e){return ys(this,"splice",e)},toReversed(){return Xn(this).toReversed()},toSorted(e){return Xn(this).toSorted(e)},toSpliced(...e){return Xn(this).toSpliced(...e)},unshift(...e){return ys(this,"unshift",e)},values(){return Ci(this,"values",e=>bn(this,e))}};function Ci(e,t,n){const s=li(e),r=s[t]();return s!==e&&!Nt(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Tp=Array.prototype;function on(e,t,n,s,r,i){const o=li(e),l=o!==e&&!Nt(e),a=o[t];if(a!==Tp[t]){const d=a.apply(e,i);return l?Ft(d):d}let c=n;o!==e&&(l?c=function(d,f){return n.call(this,bn(e,d),f,e)}:n.length>2&&(c=function(d,f){return n.call(this,d,f,e)}));const u=a.call(o,c,s);return l&&r?r(u):u}function ja(e,t,n,s){const r=li(e);let i=n;return r!==e&&(Nt(e)?n.length>3&&(i=function(o,l,a){return n.call(this,o,l,a,e)}):i=function(o,l,a){return n.call(this,o,bn(e,l),a,e)}),r[t](i,...s)}function Ii(e,t,n){const s=Pe(e);pt(s,"iterate",zs);const r=s[t](...n);return(r===-1||r===!1)&&Wo(n[0])?(n[0]=Pe(n[0]),s[t](...n)):r}function ys(e,t,n=[]){pn(),jo();const s=Pe(e)[t].apply(e,n);return Go(),fn(),s}const Rp=$o("__proto__,__v_isRef,__isVue"),Bc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ht));function Cp(e){Ht(e)||(e=String(e));const t=Pe(this);return pt(t,"has",e),t.hasOwnProperty(e)}class jc{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Bp:Fc:i?Hc:Uc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=ge(t);if(!r){let a;if(o&&(a=Ap[n]))return a;if(n==="hasOwnProperty")return Cp}const l=Reflect.get(t,n,gt(t)?t:s);if((Ht(n)?Bc.has(n):Rp(n))||(r||pt(t,"get",n),i))return l;if(gt(l)){const a=o&&Bo(n)?l:l.value;return r&&$e(a)?ro(a):a}return $e(l)?r?ro(l):ls(l):l}}class Gc extends jc{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=ge(t)&&Bo(n);if(!this._isShallow){const c=hn(i);if(!Nt(s)&&!hn(s)&&(i=Pe(i),s=Pe(s)),!o&>(i)&&!gt(s))return c||(i.value=s),!0}const l=o?Number(n)e,ur=e=>Reflect.getPrototypeOf(e);function Dp(e,t,n){return function(...s){const r=this.__v_raw,i=Pe(r),o=ts(i),l=e==="entries"||e===Symbol.iterator&&o,a=e==="keys"&&o,c=r[e](...s),u=n?so:t?cs:Ft;return!t&&pt(i,"iterate",a?no:Gn),ct(Object.create(c),{next(){const{value:d,done:f}=c.next();return f?{value:d,done:f}:{value:l?[u(d[0]),u(d[1])]:u(d),done:f}}})}}function dr(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Np(e,t){const n={get(r){const i=this.__v_raw,o=Pe(i),l=Pe(r);e||(Sn(r,l)&&pt(o,"get",r),pt(o,"get",l));const{has:a}=ur(o),c=t?so:e?cs:Ft;if(a.call(o,r))return c(i.get(r));if(a.call(o,l))return c(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&pt(Pe(r),"iterate",Gn),r.size},has(r){const i=this.__v_raw,o=Pe(i),l=Pe(r);return e||(Sn(r,l)&&pt(o,"has",r),pt(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,a=Pe(l),c=t?so:e?cs:Ft;return!e&&pt(a,"iterate",Gn),l.forEach((u,d)=>r.call(i,c(u),c(d),o))}};return ct(n,e?{add:dr("add"),set:dr("set"),delete:dr("delete"),clear:dr("clear")}:{add(r){!t&&!Nt(r)&&!hn(r)&&(r=Pe(r));const i=Pe(this);return ur(i).has.call(i,r)||(i.add(r),un(i,"add",r,r)),this},set(r,i){!t&&!Nt(i)&&!hn(i)&&(i=Pe(i));const o=Pe(this),{has:l,get:a}=ur(o);let c=l.call(o,r);c||(r=Pe(r),c=l.call(o,r));const u=a.call(o,r);return o.set(r,i),c?Sn(i,u)&&un(o,"set",r,i):un(o,"add",r,i),this},delete(r){const i=Pe(this),{has:o,get:l}=ur(i);let a=o.call(i,r);a||(r=Pe(r),a=o.call(i,r)),l&&l.call(i,r);const c=i.delete(r);return a&&un(i,"delete",r,void 0),c},clear(){const r=Pe(this),i=r.size!==0,o=r.clear();return i&&un(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Dp(r,e,t)}),n}function Fo(e,t){const n=Np(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Oe(n,r)&&r in s?n:s,r,i)}const $p={get:Fo(!1,!1)},Mp={get:Fo(!1,!0)},Vp={get:Fo(!0,!1)};const Uc=new WeakMap,Hc=new WeakMap,Fc=new WeakMap,Bp=new WeakMap;function jp(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Gp(e){return e.__v_skip||!Object.isExtensible(e)?0:jp(dp(e))}function ls(e){return hn(e)?e:zo(e,!1,Lp,$p,Uc)}function zc(e){return zo(e,!1,Op,Mp,Hc)}function ro(e){return zo(e,!0,Pp,Vp,Fc)}function zo(e,t,n,s,r){if(!$e(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Gp(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function Un(e){return hn(e)?Un(e.__v_raw):!!(e&&e.__v_isReactive)}function hn(e){return!!(e&&e.__v_isReadonly)}function Nt(e){return!!(e&&e.__v_isShallow)}function Wo(e){return e?!!e.__v_raw:!1}function Pe(e){const t=e&&e.__v_raw;return t?Pe(t):e}function Up(e){return!Oe(e,"__v_skip")&&Object.isExtensible(e)&&Tc(e,"__v_skip",!0),e}const Ft=e=>$e(e)?ls(e):e,cs=e=>$e(e)?ro(e):e;function gt(e){return e?e.__v_isRef===!0:!1}function de(e){return Wc(e,!1)}function Hp(e){return Wc(e,!0)}function Wc(e,t){return gt(e)?e:new Fp(e,t)}class Fp{constructor(t,n){this.dep=new Ho,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Pe(t),this._value=n?t:Ft(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Nt(t)||hn(t);t=s?t:Pe(t),Sn(t,n)&&(this._rawValue=t,this._value=s?t:Ft(t),this.dep.trigger())}}function me(e){return gt(e)?e.value:e}const zp={get:(e,t,n)=>t==="__v_raw"?e:me(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return gt(r)&&!gt(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function qc(e){return Un(e)?e:new Proxy(e,zp)}class Wp{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ho(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Fs-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Be!==this)return Oc(this,!0),!0}get value(){const t=this.dep.track();return $c(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function qp(e,t,n=!1){let s,r;return _e(e)?s=e:(s=e.get,r=e.set),new Wp(s,r,n)}const pr={},Lr=new WeakMap;let $n;function Kp(e,t=!1,n=$n){if(n){let s=Lr.get(n);s||Lr.set(n,s=[]),s.push(e)}}function Yp(e,t,n=Ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:a}=n,c=v=>r?v:Nt(v)||r===!1||r===0?dn(v,1):dn(v);let u,d,f,h,y=!1,w=!1;if(gt(e)?(d=()=>e.value,y=Nt(e)):Un(e)?(d=()=>c(e),y=!0):ge(e)?(w=!0,y=e.some(v=>Un(v)||Nt(v)),d=()=>e.map(v=>{if(gt(v))return v.value;if(Un(v))return c(v);if(_e(v))return a?a(v,2):v()})):_e(e)?t?d=a?()=>a(e,2):e:d=()=>{if(f){pn();try{f()}finally{fn()}}const v=$n;$n=u;try{return a?a(e,3,[h]):e(h)}finally{$n=v}}:d=en,t&&r){const v=d,V=r===!0?1/0:r;d=()=>dn(v(),V)}const A=Ep(),S=()=>{u.stop(),A&&A.active&&Vo(A.effects,u)};if(i&&t){const v=t;t=(...V)=>{v(...V),S()}}let L=w?new Array(e.length).fill(pr):pr;const g=v=>{if(!(!(u.flags&1)||!u.dirty&&!v))if(t){const V=u.run();if(r||y||(w?V.some((Y,ne)=>Sn(Y,L[ne])):Sn(V,L))){f&&f();const Y=$n;$n=u;try{const ne=[V,L===pr?void 0:w&&L[0]===pr?[]:L,h];L=V,a?a(t,3,ne):t(...ne)}finally{$n=Y}}}else u.run()};return l&&l(g),u=new Lc(d),u.scheduler=o?()=>o(g,!1):g,h=v=>Kp(v,!1,u),f=u.onStop=()=>{const v=Lr.get(u);if(v){if(a)a(v,4);else for(const V of v)V();Lr.delete(u)}},t?s?g(!0):L=u.run():o?o(g.bind(null,!0),!0):u.run(),S.pause=u.pause.bind(u),S.resume=u.resume.bind(u),S.stop=S,S}function dn(e,t=1/0,n){if(t<=0||!$e(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,gt(e))dn(e.value,t,n);else if(ge(e))for(let s=0;s{dn(s,t,n)});else if(Ac(e)){for(const s in e)dn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&dn(e[s],t,n)}return e}function nr(e,t,n,s){try{return s?e(...s):e()}catch(r){ci(r,t,n)}}function nn(e,t,n,s){if(_e(e)){const r=nr(e,t,n,s);return r&&xc(r)&&r.catch(i=>{ci(i,t,n)}),r}if(ge(e)){const r=[];for(let i=0;i>>1,r=wt[s],i=Ws(r);i=Ws(n)?wt.push(e):wt.splice(Jp(t),0,e),e.flags|=1,Yc()}}function Yc(){Pr||(Pr=Kc.then(Jc))}function Zp(e){ge(e)?ns.push(...e):wn&&e.id===-1?wn.splice(Jn+1,0,e):e.flags&1||(ns.push(e),e.flags|=1),Yc()}function Ga(e,t,n=Zt+1){for(;nWs(n)-Ws(s));if(ns.length=0,wn){wn.push(...t);return}for(wn=t,Jn=0;Jne.id==null?e.flags&2?-1:1/0:e.id;function Jc(e){try{for(Zt=0;Zt{s._d&&$r(-1);const i=Or(t);let o;try{o=e(...r)}finally{Or(i),s._d&&$r(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Fe(e,t){if(lt===null)return e;const n=fi(lt),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Qp=Symbol.for("v-scx"),ef=()=>$t(Qp);function tn(e,t,n){return Qc(e,t,n)}function Qc(e,t,n=Ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=ct({},n),a=t&&s||!t&&i!=="post";let c;if(Ys){if(i==="sync"){const h=ef();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=en,h.resume=en,h.pause=en,h}}const u=ft;l.call=(h,y,w)=>nn(h,u,y,w);let d=!1;i==="post"?l.scheduler=h=>{yt(h,u&&u.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(h,y)=>{y?h():Ko(h)}),l.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const f=Yp(e,t,l);return Ys&&(c?c.push(f):a&&f()),f}function tf(e,t,n){const s=this.proxy,r=We(e)?e.includes(".")?eu(s,e):()=>s[e]:e.bind(s,s);let i;_e(t)?i=t:(i=t.handler,n=t);const o=sr(this),l=Qc(r,i.bind(s),n);return o(),l}function eu(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Ms=e=>e&&(e.disabled||e.disabled===""),Ua=e=>e&&(e.defer||e.defer===""),Ha=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Fa=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,io=(e,t)=>{const n=e&&e.to;return We(n)?t?t(n):null:n},nu={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,a,c){const{mc:u,pc:d,pbc:f,o:{insert:h,querySelector:y,createText:w,createComment:A}}=c,S=Ms(t.props);let{shapeFlag:L,children:g,dynamicChildren:v}=t;if(e==null){const V=t.el=w(""),Y=t.anchor=w("");h(V,n,s),h(Y,n,s);const ne=(j,he)=>{L&16&&u(g,j,he,r,i,o,l,a)},z=()=>{const j=t.target=io(t.props,y),he=ru(j,t,w,h);j&&(o!=="svg"&&Ha(j)?o="svg":o!=="mathml"&&Fa(j)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(j),S||(ne(j,he),xr(t,!1)))};S&&(ne(n,Y),xr(t,!0)),Ua(t.props)?(t.el.__isMounted=!1,yt(()=>{z(),delete t.el.__isMounted},i)):z()}else{if(Ua(t.props)&&e.el.__isMounted===!1){yt(()=>{nu.process(e,t,n,s,r,i,o,l,a,c)},i);return}t.el=e.el,t.targetStart=e.targetStart;const V=t.anchor=e.anchor,Y=t.target=e.target,ne=t.targetAnchor=e.targetAnchor,z=Ms(e.props),j=z?n:Y,he=z?V:ne;if(o==="svg"||Ha(Y)?o="svg":(o==="mathml"||Fa(Y))&&(o="mathml"),v?(f(e.dynamicChildren,v,j,r,i,o,l),Zo(e,t,!0)):a||d(e,t,j,he,r,i,o,l,!1),S)z?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):fr(t,n,V,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=io(t.props,y);J&&fr(t,J,null,c,0)}else z&&fr(t,Y,ne,c,1);xr(t,S)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:a,targetStart:c,targetAnchor:u,target:d,props:f}=e;if(d&&(r(c),r(u)),i&&r(a),o&16){const h=i||!Ms(f);for(let y=0;yVs(y,t&&(ge(t)?t[w]:t),n,s,r));return}if(ss(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Vs(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?fi(s.component):s.el,o=r?null:i,{i:l,r:a}=e,c=t&&t.r,u=l.refs===Ne?l.refs={}:l.refs,d=l.setupState,f=Pe(d),h=d===Ne?Ec:y=>Oe(f,y);if(c!=null&&c!==a){if(za(t),We(c))u[c]=null,h(c)&&(d[c]=null);else if(gt(c)){c.value=null;const y=t;y.k&&(u[y.k]=null)}}if(_e(a))nr(a,l,12,[o,u]);else{const y=We(a),w=gt(a);if(y||w){const A=()=>{if(e.f){const S=y?h(a)?d[a]:u[a]:a.value;if(r)ge(S)&&Vo(S,i);else if(ge(S))S.includes(i)||S.push(i);else if(y)u[a]=[i],h(a)&&(d[a]=u[a]);else{const L=[i];a.value=L,e.k&&(u[e.k]=L)}}else y?(u[a]=o,h(a)&&(d[a]=o)):w&&(a.value=o,e.k&&(u[e.k]=o))};if(o){const S=()=>{A(),Dr.delete(e)};S.id=-1,Dr.set(e,S),yt(S,n)}else za(e),A()}}}function za(e){const t=Dr.get(e);t&&(t.flags|=8,Dr.delete(e))}ii().requestIdleCallback;ii().cancelIdleCallback;const ss=e=>!!e.type.__asyncLoader,au=e=>e.type.__isKeepAlive;function of(e,t){lu(e,"a",t)}function af(e,t){lu(e,"da",t)}function lu(e,t,n=ft){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(ui(t,s,n),n){let r=n.parent;for(;r&&r.parent;)au(r.parent.vnode)&&lf(s,t,n,r),r=r.parent}}function lf(e,t,n,s){const r=ui(t,e,s,!0);cu(()=>{Vo(s[t],r)},n)}function ui(e,t,n=ft,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{pn();const l=sr(n),a=nn(t,n,e,o);return l(),fn(),a});return s?r.unshift(i):r.push(i),i}}const gn=e=>(t,n=ft)=>{(!Ys||e==="sp")&&ui(e,(...s)=>t(...s),n)},cf=gn("bm"),_n=gn("m"),uf=gn("bu"),df=gn("u"),Tn=gn("bum"),cu=gn("um"),pf=gn("sp"),ff=gn("rtg"),hf=gn("rtc");function mf(e,t=ft){ui("ec",e,t)}const gf="components";function Cn(e,t){return vf(gf,e,!0,t)||e}const _f=Symbol.for("v-ndc");function vf(e,t,n=!0,s=!1){const r=lt||ft;if(r){const i=r.type;{const l=rh(i,!1);if(l&&(l===t||l===Mt(t)||l===si(Mt(t))))return i}const o=Wa(r[e]||i[e],t)||Wa(r.appContext[e],t);return!o&&s?i:o}}function Wa(e,t){return e&&(e[t]||e[Mt(t)]||e[si(Mt(t))])}function ze(e,t,n,s){let r;const i=n,o=ge(e);if(o||We(e)){const l=o&&Un(e);let a=!1,c=!1;l&&(a=!Nt(e),c=hn(e),e=li(e)),r=new Array(e.length);for(let u=0,d=e.length;ut(l,a,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return T(),mt(we,null,[Se("slot",n,s)],c?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),T();const o=i&&uu(i(n)),l=n.key||o&&o.key,a=mt(we,{key:(l&&!Ht(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||[],o&&e._===1?64:-2);return i&&i._c&&(i._d=!0),a}function uu(e){return e.some(t=>Ks(t)?!(t.type===mn||t.type===we&&!uu(t.children)):!0)?e:null}const oo=e=>e?Ru(e)?fi(e):oo(e.parent):null,Bs=ct(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>oo(e.parent),$root:e=>oo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>pu(e),$forceUpdate:e=>e.f||(e.f=()=>{Ko(e.update)}),$nextTick:e=>e.n||(e.n=qo.bind(e.proxy)),$watch:e=>tf.bind(e)}),Li=(e,t)=>e!==Ne&&!e.__isScriptSetup&&Oe(e,t),bf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:a}=e;if(t[0]!=="$"){const f=o[t];if(f!==void 0)switch(f){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Li(s,t))return o[t]=1,s[t];if(r!==Ne&&Oe(r,t))return o[t]=2,r[t];if(Oe(i,t))return o[t]=3,i[t];if(n!==Ne&&Oe(n,t))return o[t]=4,n[t];ao&&(o[t]=0)}}const c=Bs[t];let u,d;if(c)return t==="$attrs"&&pt(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==Ne&&Oe(n,t))return o[t]=4,n[t];if(d=a.config.globalProperties,Oe(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Li(r,t)?(r[t]=n,!0):s!==Ne&&Oe(s,t)?(s[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let a;return!!(n[l]||e!==Ne&&l[0]!=="$"&&Oe(e,l)||Li(t,l)||Oe(i,l)||Oe(s,l)||Oe(Bs,l)||Oe(r.config.globalProperties,l)||(a=o.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qa(e){return ge(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ao=!0;function wf(e){const t=pu(e),n=e.proxy,s=e.ctx;ao=!1,t.beforeCreate&&Ka(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:a,inject:c,created:u,beforeMount:d,mounted:f,beforeUpdate:h,updated:y,activated:w,deactivated:A,beforeDestroy:S,beforeUnmount:L,destroyed:g,unmounted:v,render:V,renderTracked:Y,renderTriggered:ne,errorCaptured:z,serverPrefetch:j,expose:he,inheritAttrs:J,components:G,directives:x,filters:D}=t;if(c&&kf(c,s,null),o)for(const U in o){const q=o[U];_e(q)&&(s[U]=q.bind(n))}if(r){const U=r.call(n,n);$e(U)&&(e.data=ls(U))}if(ao=!0,i)for(const U in i){const q=i[U],Z=_e(q)?q.bind(n,n):_e(q.get)?q.get.bind(n,n):en,le=!_e(q)&&_e(q.set)?q.set.bind(n):en,ve=ue({get:Z,set:le});Object.defineProperty(s,U,{enumerable:!0,configurable:!0,get:()=>ve.value,set:Ie=>ve.value=Ie})}if(l)for(const U in l)du(l[U],s,n,U);if(a){const U=_e(a)?a.call(n):a;Reflect.ownKeys(U).forEach(q=>{Er(q,U[q])})}u&&Ka(u,e,"c");function N(U,q){ge(q)?q.forEach(Z=>U(Z.bind(n))):q&&U(q.bind(n))}if(N(cf,d),N(_n,f),N(uf,h),N(df,y),N(of,w),N(af,A),N(mf,z),N(hf,Y),N(ff,ne),N(Tn,L),N(cu,v),N(pf,j),ge(he))if(he.length){const U=e.exposed||(e.exposed={});he.forEach(q=>{Object.defineProperty(U,q,{get:()=>n[q],set:Z=>n[q]=Z,enumerable:!0})})}else e.exposed||(e.exposed={});V&&e.render===en&&(e.render=V),J!=null&&(e.inheritAttrs=J),G&&(e.components=G),x&&(e.directives=x),j&&ou(e)}function kf(e,t,n=en){ge(e)&&(e=lo(e));for(const s in e){const r=e[s];let i;$e(r)?"default"in r?i=$t(r.from||s,r.default,!0):i=$t(r.from||s):i=$t(r),gt(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ka(e,t,n){nn(ge(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function du(e,t,n,s){let r=s.includes(".")?eu(n,s):()=>n[s];if(We(e)){const i=t[e];_e(i)&&tn(r,i)}else if(_e(e))tn(r,e.bind(n));else if($e(e))if(ge(e))e.forEach(i=>du(i,t,n,s));else{const i=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(i)&&tn(r,i,e)}}function pu(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>Nr(a,c,o,!0)),Nr(a,t,o)),$e(t)&&i.set(t,a),a}function Nr(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nr(e,i,n,!0),r&&r.forEach(o=>Nr(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Ef[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Ef={data:Ya,props:Xa,emits:Xa,methods:Ls,computed:Ls,beforeCreate:vt,created:vt,beforeMount:vt,mounted:vt,beforeUpdate:vt,updated:vt,beforeDestroy:vt,beforeUnmount:vt,destroyed:vt,unmounted:vt,activated:vt,deactivated:vt,errorCaptured:vt,serverPrefetch:vt,components:Ls,directives:Ls,watch:Sf,provide:Ya,inject:xf};function Ya(e,t){return t?e?function(){return ct(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function xf(e,t){return Ls(lo(e),lo(t))}function lo(e){if(ge(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Mt(t)}Modifiers`]||e[`${Rn(t)}Modifiers`];function Cf(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Ne;let r=n;const i=t.startsWith("update:"),o=i&&Rf(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>We(u)?u.trim():u)),o.number&&(r=n.map(ri)));let l,a=s[l=Ai(t)]||s[l=Ai(Mt(t))];!a&&i&&(a=s[l=Ai(Rn(t))]),a&&nn(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nn(c,e,6,r)}}const If=new WeakMap;function hu(e,t,n=!1){const s=n?If:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!_e(e)){const a=c=>{const u=hu(c,t,!0);u&&(l=!0,ct(o,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!l?($e(e)&&s.set(e,null),null):(ge(i)?i.forEach(a=>o[a]=null):ct(o,i),$e(e)&&s.set(e,o),o)}function di(e,t){return!e||!ei(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Rn(t))||Oe(e,t))}function Ja(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:a,render:c,renderCache:u,props:d,data:f,setupState:h,ctx:y,inheritAttrs:w}=e,A=Or(e);let S,L;try{if(n.shapeFlag&4){const v=r||s,V=v;S=Qt(c.call(V,v,u,d,h,f,y)),L=l}else{const v=t;S=Qt(v.length>1?v(d,{attrs:l,slots:o,emit:a}):v(d,null)),L=t.props?l:Lf(l)}}catch(v){js.length=0,ci(v,e,1),S=Se(mn)}let g=S;if(L&&w!==!1){const v=Object.keys(L),{shapeFlag:V}=g;v.length&&V&7&&(i&&v.some(Mo)&&(L=Pf(L,i)),g=us(g,L,!1,!0))}return n.dirs&&(g=us(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Yo(g,n.transition),S=g,Or(A),S}const Lf=e=>{let t;for(const n in e)(n==="class"||n==="style"||ei(n))&&((t||(t={}))[n]=e[n]);return t},Pf=(e,t)=>{const n={};for(const s in e)(!Mo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Of(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:a}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?Za(s,o,c):!!o;if(a&8){const u=t.dynamicProps;for(let d=0;dObject.create(mu),_u=e=>Object.getPrototypeOf(e)===mu;function Nf(e,t,n,s=!1){const r={},i=gu();e.propsDefaults=Object.create(null),vu(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:zc(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function $f(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=Pe(r),[a]=e.propsOptions;let c=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let d=0;d{a=!0;const[f,h]=yu(d,t,!0);ct(o,f),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!a)return $e(e)&&s.set(e,es),es;if(ge(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",Jo=e=>ge(e)?e.map(Qt):[Qt(e)],Vf=(e,t,n)=>{if(t._n)return t;const s=Je((...r)=>Jo(t(...r)),n);return s._c=!1,s},bu=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Xo(r))continue;const i=e[r];if(_e(i))t[r]=Vf(r,i,s);else if(i!=null){const o=Jo(i);t[r]=()=>o}}},wu=(e,t)=>{const n=Jo(t);e.slots.default=()=>n},ku=(e,t,n)=>{for(const s in t)(n||!Xo(s))&&(e[s]=t[s])},Bf=(e,t,n)=>{const s=e.slots=gu();if(e.vnode.shapeFlag&32){const r=t._;r?(ku(s,t,n),n&&Tc(s,"_",r,!0)):bu(t,s)}else t&&wu(e,t)},jf=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ku(r,t,n):(i=!t.$stable,bu(t,r)),o=t}else t&&(wu(e,t),o={default:1});if(i)for(const l in r)!Xo(l)&&o[l]==null&&delete r[l]},yt=zf;function Gf(e){return Uf(e)}function Uf(e,t){const n=ii();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:a,setText:c,setElementText:u,parentNode:d,nextSibling:f,setScopeId:h=en,insertStaticContent:y}=e,w=(_,b,C,R=null,k=null,P=null,M=void 0,W=null,F=!!b.dynamicChildren)=>{if(_===b)return;_&&!bs(_,b)&&(R=$(_),Ie(_,k,P,!0),_=null),b.patchFlag===-2&&(F=!1,b.dynamicChildren=null);const{type:B,ref:oe,shapeFlag:te}=b;switch(B){case pi:A(_,b,C,R);break;case mn:S(_,b,C,R);break;case Sr:_==null&&L(b,C,R,M);break;case we:G(_,b,C,R,k,P,M,W,F);break;default:te&1?V(_,b,C,R,k,P,M,W,F):te&6?x(_,b,C,R,k,P,M,W,F):(te&64||te&128)&&B.process(_,b,C,R,k,P,M,W,F,re)}oe!=null&&k?Vs(oe,_&&_.ref,P,b||_,!b):oe==null&&_&&_.ref!=null&&Vs(_.ref,null,P,_,!0)},A=(_,b,C,R)=>{if(_==null)s(b.el=l(b.children),C,R);else{const k=b.el=_.el;b.children!==_.children&&c(k,b.children)}},S=(_,b,C,R)=>{_==null?s(b.el=a(b.children||""),C,R):b.el=_.el},L=(_,b,C,R)=>{[_.el,_.anchor]=y(_.children,b,C,R,_.el,_.anchor)},g=({el:_,anchor:b},C,R)=>{let k;for(;_&&_!==b;)k=f(_),s(_,C,R),_=k;s(b,C,R)},v=({el:_,anchor:b})=>{let C;for(;_&&_!==b;)C=f(_),r(_),_=C;r(b)},V=(_,b,C,R,k,P,M,W,F)=>{if(b.type==="svg"?M="svg":b.type==="math"&&(M="mathml"),_==null)Y(b,C,R,k,P,M,W,F);else{const B=_.el&&_.el._isVueCE?_.el:null;try{B&&B._beginPatch(),j(_,b,k,P,M,W,F)}finally{B&&B._endPatch()}}},Y=(_,b,C,R,k,P,M,W)=>{let F,B;const{props:oe,shapeFlag:te,transition:ae,dirs:fe}=_;if(F=_.el=o(_.type,P,oe&&oe.is,oe),te&8?u(F,_.children):te&16&&z(_.children,F,null,R,k,Pi(_,P),M,W),fe&&On(_,null,R,"created"),ne(F,_,_.scopeId,M,R),oe){for(const xe in oe)xe!=="value"&&!Ds(xe)&&i(F,xe,null,oe[xe],P,R);"value"in oe&&i(F,"value",null,oe.value,P),(B=oe.onVnodeBeforeMount)&&Kt(B,R,_)}fe&&On(_,null,R,"beforeMount");const ye=Hf(k,ae);ye&&ae.beforeEnter(F),s(F,b,C),((B=oe&&oe.onVnodeMounted)||ye||fe)&&yt(()=>{B&&Kt(B,R,_),ye&&ae.enter(F),fe&&On(_,null,R,"mounted")},k)},ne=(_,b,C,R,k)=>{if(C&&h(_,C),R)for(let P=0;P{for(let B=F;B<_.length;B++){const oe=_[B]=W?kn(_[B]):Qt(_[B]);w(null,oe,b,C,R,k,P,M,W)}},j=(_,b,C,R,k,P,M)=>{const W=b.el=_.el;let{patchFlag:F,dynamicChildren:B,dirs:oe}=b;F|=_.patchFlag&16;const te=_.props||Ne,ae=b.props||Ne;let fe;if(C&&Dn(C,!1),(fe=ae.onVnodeBeforeUpdate)&&Kt(fe,C,b,_),oe&&On(b,_,C,"beforeUpdate"),C&&Dn(C,!0),(te.innerHTML&&ae.innerHTML==null||te.textContent&&ae.textContent==null)&&u(W,""),B?he(_.dynamicChildren,B,W,C,R,Pi(b,k),P):M||q(_,b,W,null,C,R,Pi(b,k),P,!1),F>0){if(F&16)J(W,te,ae,C,k);else if(F&2&&te.class!==ae.class&&i(W,"class",null,ae.class,k),F&4&&i(W,"style",te.style,ae.style,k),F&8){const ye=b.dynamicProps;for(let xe=0;xe{fe&&Kt(fe,C,b,_),oe&&On(b,_,C,"updated")},R)},he=(_,b,C,R,k,P,M)=>{for(let W=0;W{if(b!==C){if(b!==Ne)for(const P in b)!Ds(P)&&!(P in C)&&i(_,P,b[P],null,k,R);for(const P in C){if(Ds(P))continue;const M=C[P],W=b[P];M!==W&&P!=="value"&&i(_,P,W,M,k,R)}"value"in C&&i(_,"value",b.value,C.value,k)}},G=(_,b,C,R,k,P,M,W,F)=>{const B=b.el=_?_.el:l(""),oe=b.anchor=_?_.anchor:l("");let{patchFlag:te,dynamicChildren:ae,slotScopeIds:fe}=b;fe&&(W=W?W.concat(fe):fe),_==null?(s(B,C,R),s(oe,C,R),z(b.children||[],C,oe,k,P,M,W,F)):te>0&&te&64&&ae&&_.dynamicChildren&&_.dynamicChildren.length===ae.length?(he(_.dynamicChildren,ae,C,k,P,M,W),(b.key!=null||k&&b===k.subTree)&&Zo(_,b,!0)):q(_,b,C,oe,k,P,M,W,F)},x=(_,b,C,R,k,P,M,W,F)=>{b.slotScopeIds=W,_==null?b.shapeFlag&512?k.ctx.activate(b,C,R,M,F):D(b,C,R,k,P,M,F):I(_,b,F)},D=(_,b,C,R,k,P,M)=>{const W=_.component=Zf(_,R,k);if(au(_)&&(W.ctx.renderer=re),eh(W,!1,M),W.asyncDep){if(k&&k.registerDep(W,N,M),!_.el){const F=W.subTree=Se(mn);S(null,F,b,C),_.placeholder=F.el}}else N(W,_,b,C,k,P,M)},I=(_,b,C)=>{const R=b.component=_.component;if(Of(_,b,C))if(R.asyncDep&&!R.asyncResolved){U(R,b,C);return}else R.next=b,R.update();else b.el=_.el,R.vnode=b},N=(_,b,C,R,k,P,M)=>{const W=()=>{if(_.isMounted){let{next:te,bu:ae,u:fe,parent:ye,vnode:xe}=_;{const Ct=Eu(_);if(Ct){te&&(te.el=xe.el,U(_,te,M)),Ct.asyncDep.then(()=>{_.isUnmounted||W()});return}}let Te=te,rt;Dn(_,!1),te?(te.el=xe.el,U(_,te,M)):te=xe,ae&&kr(ae),(rt=te.props&&te.props.onVnodeBeforeUpdate)&&Kt(rt,ye,te,xe),Dn(_,!0);const it=Ja(_),St=_.subTree;_.subTree=it,w(St,it,d(St.el),$(St),_,k,P),te.el=it.el,Te===null&&Df(_,it.el),fe&&yt(fe,k),(rt=te.props&&te.props.onVnodeUpdated)&&yt(()=>Kt(rt,ye,te,xe),k)}else{let te;const{el:ae,props:fe}=b,{bm:ye,m:xe,parent:Te,root:rt,type:it}=_,St=ss(b);Dn(_,!1),ye&&kr(ye),!St&&(te=fe&&fe.onVnodeBeforeMount)&&Kt(te,Te,b),Dn(_,!0);{rt.ce&&rt.ce._def.shadowRoot!==!1&&rt.ce._injectChildStyle(it);const Ct=_.subTree=Ja(_);w(null,Ct,C,R,_,k,P),b.el=Ct.el}if(xe&&yt(xe,k),!St&&(te=fe&&fe.onVnodeMounted)){const Ct=b;yt(()=>Kt(te,Te,Ct),k)}(b.shapeFlag&256||Te&&ss(Te.vnode)&&Te.vnode.shapeFlag&256)&&_.a&&yt(_.a,k),_.isMounted=!0,b=C=R=null}};_.scope.on();const F=_.effect=new Lc(W);_.scope.off();const B=_.update=F.run.bind(F),oe=_.job=F.runIfDirty.bind(F);oe.i=_,oe.id=_.uid,F.scheduler=()=>Ko(oe),Dn(_,!0),B()},U=(_,b,C)=>{b.component=_;const R=_.vnode.props;_.vnode=b,_.next=null,$f(_,b.props,R,C),jf(_,b.children,C),pn(),Ga(_),fn()},q=(_,b,C,R,k,P,M,W,F=!1)=>{const B=_&&_.children,oe=_?_.shapeFlag:0,te=b.children,{patchFlag:ae,shapeFlag:fe}=b;if(ae>0){if(ae&128){le(B,te,C,R,k,P,M,W,F);return}else if(ae&256){Z(B,te,C,R,k,P,M,W,F);return}}fe&8?(oe&16&&qe(B,k,P),te!==B&&u(C,te)):oe&16?fe&16?le(B,te,C,R,k,P,M,W,F):qe(B,k,P,!0):(oe&8&&u(C,""),fe&16&&z(te,C,R,k,P,M,W,F))},Z=(_,b,C,R,k,P,M,W,F)=>{_=_||es,b=b||es;const B=_.length,oe=b.length,te=Math.min(B,oe);let ae;for(ae=0;aeoe?qe(_,k,P,!0,!1,te):z(b,C,R,k,P,M,W,F,te)},le=(_,b,C,R,k,P,M,W,F)=>{let B=0;const oe=b.length;let te=_.length-1,ae=oe-1;for(;B<=te&&B<=ae;){const fe=_[B],ye=b[B]=F?kn(b[B]):Qt(b[B]);if(bs(fe,ye))w(fe,ye,C,null,k,P,M,W,F);else break;B++}for(;B<=te&&B<=ae;){const fe=_[te],ye=b[ae]=F?kn(b[ae]):Qt(b[ae]);if(bs(fe,ye))w(fe,ye,C,null,k,P,M,W,F);else break;te--,ae--}if(B>te){if(B<=ae){const fe=ae+1,ye=feae)for(;B<=te;)Ie(_[B],k,P,!0),B++;else{const fe=B,ye=B,xe=new Map;for(B=ye;B<=ae;B++){const Ge=b[B]=F?kn(b[B]):Qt(b[B]);Ge.key!=null&&xe.set(Ge.key,B)}let Te,rt=0;const it=ae-ye+1;let St=!1,Ct=0;const Wt=new Array(it);for(B=0;B=it){Ie(Ge,k,P,!0);continue}let ot;if(Ge.key!=null)ot=xe.get(Ge.key);else for(Te=ye;Te<=ae;Te++)if(Wt[Te-ye]===0&&bs(Ge,b[Te])){ot=Te;break}ot===void 0?Ie(Ge,k,P,!0):(Wt[ot-ye]=B+1,ot>=Ct?Ct=ot:St=!0,w(Ge,b[ot],C,null,k,P,M,W,F),rt++)}const Ln=St?Ff(Wt):es;for(Te=Ln.length-1,B=it-1;B>=0;B--){const Ge=ye+B,ot=b[Ge],Wn=b[Ge+1],qn=Ge+1{const{el:P,type:M,transition:W,children:F,shapeFlag:B}=_;if(B&6){ve(_.component.subTree,b,C,R);return}if(B&128){_.suspense.move(b,C,R);return}if(B&64){M.move(_,b,C,re);return}if(M===we){s(P,b,C);for(let te=0;teW.enter(P),k);else{const{leave:te,delayLeave:ae,afterLeave:fe}=W,ye=()=>{_.ctx.isUnmounted?r(P):s(P,b,C)},xe=()=>{P._isLeaving&&P[rf](!0),te(P,()=>{ye(),fe&&fe()})};ae?ae(P,ye,xe):xe()}else s(P,b,C)},Ie=(_,b,C,R=!1,k=!1)=>{const{type:P,props:M,ref:W,children:F,dynamicChildren:B,shapeFlag:oe,patchFlag:te,dirs:ae,cacheIndex:fe}=_;if(te===-2&&(k=!1),W!=null&&(pn(),Vs(W,null,C,_,!0),fn()),fe!=null&&(b.renderCache[fe]=void 0),oe&256){b.ctx.deactivate(_);return}const ye=oe&1&&ae,xe=!ss(_);let Te;if(xe&&(Te=M&&M.onVnodeBeforeUnmount)&&Kt(Te,b,_),oe&6)Ae(_.component,C,R);else{if(oe&128){_.suspense.unmount(C,R);return}ye&&On(_,null,b,"beforeUnmount"),oe&64?_.type.remove(_,b,C,re,R):B&&!B.hasOnce&&(P!==we||te>0&&te&64)?qe(B,b,C,!1,!0):(P===we&&te&384||!k&&oe&16)&&qe(F,b,C),R&&pe(_)}(xe&&(Te=M&&M.onVnodeUnmounted)||ye)&&yt(()=>{Te&&Kt(Te,b,_),ye&&On(_,null,b,"unmounted")},C)},pe=_=>{const{type:b,el:C,anchor:R,transition:k}=_;if(b===we){Pt(C,R);return}if(b===Sr){v(_);return}const P=()=>{r(C),k&&!k.persisted&&k.afterLeave&&k.afterLeave()};if(_.shapeFlag&1&&k&&!k.persisted){const{leave:M,delayLeave:W}=k,F=()=>M(C,P);W?W(_.el,P,F):F()}else P()},Pt=(_,b)=>{let C;for(;_!==b;)C=f(_),r(_),_=C;r(b)},Ae=(_,b,C)=>{const{bum:R,scope:k,job:P,subTree:M,um:W,m:F,a:B}=_;el(F),el(B),R&&kr(R),k.stop(),P&&(P.flags|=8,Ie(M,_,b,C)),W&&yt(W,b),yt(()=>{_.isUnmounted=!0},b)},qe=(_,b,C,R=!1,k=!1,P=0)=>{for(let M=P;M<_.length;M++)Ie(_[M],b,C,R,k)},$=_=>{if(_.shapeFlag&6)return $(_.component.subTree);if(_.shapeFlag&128)return _.suspense.next();const b=f(_.anchor||_.el),C=b&&b[tu];return C?f(C):b};let ee=!1;const Q=(_,b,C)=>{let R;_==null?b._vnode&&(Ie(b._vnode,null,null,!0),R=b._vnode.component):w(b._vnode||null,_,b,null,null,null,C),b._vnode=_,ee||(ee=!0,Ga(R),Xc(),ee=!1)},re={p:w,um:Ie,m:ve,r:pe,mt:D,mc:z,pc:q,pbc:he,n:$,o:e};return{render:Q,hydrate:void 0,createApp:Tf(Q)}}function Pi({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Dn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Hf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Zo(e,t,n=!1){const s=e.children,r=t.children;if(ge(s)&&ge(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Eu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Eu(t)}function el(e){if(e)for(let t=0;te.__isSuspense;function zf(e,t){t&&t.pendingBranch?ge(e)?t.effects.push(...e):t.effects.push(e):Zp(e)}const we=Symbol.for("v-fgt"),pi=Symbol.for("v-txt"),mn=Symbol.for("v-cmt"),Sr=Symbol.for("v-stc"),js=[];let Lt=null;function T(e=!1){js.push(Lt=e?null:[])}function Wf(){js.pop(),Lt=js[js.length-1]||null}let qs=1;function $r(e,t=!1){qs+=e,e<0&&Lt&&t&&(Lt.hasOnce=!0)}function Au(e){return e.dynamicChildren=qs>0?Lt||es:null,Wf(),qs>0&&Lt&&Lt.push(e),e}function O(e,t,n,s,r,i){return Au(p(e,t,n,s,r,i,!0))}function mt(e,t,n,s,r){return Au(Se(e,t,n,s,r,!0))}function Ks(e){return e?e.__v_isVNode===!0:!1}function bs(e,t){return e.type===t.type&&e.key===t.key}const Tu=({key:e})=>e??null,Ar=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||gt(e)||_e(e)?{i:lt,r:e,k:t,f:!!n}:e:null);function p(e,t=null,n=null,s=0,r=null,i=e===we?0:1,o=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Tu(t),ref:t&&Ar(t),scopeId:Zc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:lt};return l?(Qo(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=We(n)?8:16),qs>0&&!o&&Lt&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&Lt.push(a),a}const Se=qf;function qf(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===_f)&&(e=mn),Ks(e)){const l=us(e,t,!0);return n&&Qo(l,n),qs>0&&!i&&Lt&&(l.shapeFlag&6?Lt[Lt.indexOf(e)]=l:Lt.push(l)),l.patchFlag=-2,l}if(ih(e)&&(e=e.__vccOpts),t){t=Kf(t);let{class:l,style:a}=t;l&&!We(l)&&(t.class=De(l)),$e(a)&&(Wo(a)&&!ge(a)&&(a=ct({},a)),t.style=oi(a))}const o=We(e)?1:Su(e)?128:nf(e)?64:$e(e)?4:_e(e)?2:0;return p(e,t,n,s,r,o,i,!0)}function Kf(e){return e?Wo(e)||_u(e)?ct({},e):e:null}function us(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:a}=e,c=t?Yf(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Tu(c),ref:t&&t.ref?n&&i?ge(i)?i.concat(Ar(t)):[i,Ar(t)]:Ar(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&us(e.ssContent),ssFallback:e.ssFallback&&us(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Yo(u,a.clone(u)),u}function Ue(e=" ",t=0){return Se(pi,null,e,t)}function In(e,t){const n=Se(Sr,null,e);return n.staticCount=t,n}function se(e="",t=!1){return t?(T(),mt(mn,null,e)):Se(mn,null,e)}function Qt(e){return e==null||typeof e=="boolean"?Se(mn):ge(e)?Se(we,null,e.slice()):Ks(e)?kn(e):Se(pi,null,String(e))}function kn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:us(e)}function Qo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ge(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Qo(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!_u(t)?t._ctx=lt:r===3&<&&(lt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else _e(t)?(t={default:t,_ctx:lt},n=32):(t=String(t),s&64?(n=16,t=[Ue(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yf(...e){const t={};for(let n=0;nft||lt;let Mr,uo;{const e=ii(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Mr=t("__VUE_INSTANCE_SETTERS__",n=>ft=n),uo=t("__VUE_SSR_SETTERS__",n=>Ys=n)}const sr=e=>{const t=ft;return Mr(e),e.scope.on(),()=>{e.scope.off(),Mr(t)}},tl=()=>{ft&&ft.scope.off(),Mr(null)};function Ru(e){return e.vnode.shapeFlag&4}let Ys=!1;function eh(e,t=!1,n=!1){t&&uo(t);const{props:s,children:r}=e.vnode,i=Ru(e);Nf(e,s,i,t),Bf(e,r,n||t);const o=i?th(e,t):void 0;return t&&uo(!1),o}function th(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bf);const{setup:s}=n;if(s){pn();const r=e.setupContext=s.length>1?sh(e):null,i=sr(e),o=nr(s,e,0,[e.props,r]),l=xc(o);if(fn(),i(),(l||e.sp)&&!ss(e)&&ou(e),l){if(o.then(tl,tl),t)return o.then(a=>{nl(e,a)}).catch(a=>{ci(a,e,0)});e.asyncDep=o}else nl(e,o)}else Cu(e)}function nl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:$e(t)&&(e.setupState=qc(t)),Cu(e)}function Cu(e,t,n){const s=e.type;e.render||(e.render=s.render||en);{const r=sr(e);pn();try{wf(e)}finally{fn(),r()}}}const nh={get(e,t){return pt(e,"get",""),e[t]}};function sh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,nh),slots:e.slots,emit:e.emit,expose:t}}function fi(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(qc(Up(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Bs)return Bs[n](e)},has(t,n){return n in t||n in Bs}})):e.proxy}function rh(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function ih(e){return _e(e)&&"__vccOpts"in e}const ue=(e,t)=>qp(e,t,Ys);function Iu(e,t,n){try{$r(-1);const s=arguments.length;return s===2?$e(t)&&!ge(t)?Ks(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ks(n)&&(n=[n]),Se(e,t,n))}finally{$r(1)}}const oh="3.5.27";let po;const sl=typeof window<"u"&&window.trustedTypes;if(sl)try{po=sl.createPolicy("vue",{createHTML:e=>e})}catch{}const Lu=po?e=>po.createHTML(e):e=>e,ah="http://www.w3.org/2000/svg",lh="http://www.w3.org/1998/Math/MathML",cn=typeof document<"u"?document:null,rl=cn&&cn.createElement("template"),ch={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?cn.createElementNS(ah,e):t==="mathml"?cn.createElementNS(lh,e):n?cn.createElement(e,{is:n}):cn.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>cn.createTextNode(e),createComment:e=>cn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>cn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{rl.innerHTML=Lu(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=rl.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},uh=Symbol("_vtc");function dh(e,t,n){const s=e[uh];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Vr=Symbol("_vod"),Pu=Symbol("_vsh"),ph={name:"show",beforeMount(e,{value:t},{transition:n}){e[Vr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ws(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),ws(e,!0),s.enter(e)):s.leave(e,()=>{ws(e,!1)}):ws(e,t))},beforeUnmount(e,{value:t}){ws(e,t)}};function ws(e,t){e.style.display=t?e[Vr]:"none",e[Pu]=!t}const fh=Symbol(""),hh=/(?:^|;)\s*display\s*:/;function mh(e,t,n){const s=e.style,r=We(n);let i=!1;if(n&&!r){if(t)if(We(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Tr(s,l,"")}else for(const o in t)n[o]==null&&Tr(s,o,"");for(const o in n)o==="display"&&(i=!0),Tr(s,o,n[o])}else if(r){if(t!==n){const o=s[fh];o&&(n+=";"+o),s.cssText=n,i=hh.test(n)}}else t&&e.removeAttribute("style");Vr in e&&(e[Vr]=i?s.display:"",e[Pu]&&(s.display="none"))}const il=/\s*!important$/;function Tr(e,t,n){if(ge(n))n.forEach(s=>Tr(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=gh(e,t);il.test(n)?e.setProperty(Rn(s),n.replace(il,""),"important"):e[s]=n}}const ol=["Webkit","Moz","ms"],Oi={};function gh(e,t){const n=Oi[t];if(n)return n;let s=Mt(t);if(s!=="filter"&&s in e)return Oi[t]=s;s=si(s);for(let r=0;rDi||(bh.then(()=>Di=0),Di=Date.now());function kh(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;nn(Eh(s,n.value),t,5,[s])};return n.value=e,n.attached=wh(),n}function Eh(e,t){if(ge(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const pl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,xh=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?dh(e,s,o):t==="style"?mh(e,n,s):ei(t)?Mo(t)||vh(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Sh(e,t,s,o))?(cl(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ll(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!We(s))?cl(e,Mt(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ll(e,t,s,o))};function Sh(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&pl(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return pl(t)&&We(n)?!1:t in e}const Br=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ge(t)?n=>kr(t,n):t};function Ah(e){e.target.composing=!0}function fl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const is=Symbol("_assign");function hl(e,t,n){return t&&(e=e.trim()),n&&(e=ri(e)),e}const et={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[is]=Br(r);const i=s||r.props&&r.props.type==="number";Vn(e,t?"change":"input",o=>{o.target.composing||e[is](hl(e.value,n,i))}),(n||i)&&Vn(e,"change",()=>{e.value=hl(e.value,n,i)}),t||(Vn(e,"compositionstart",Ah),Vn(e,"compositionend",fl),Vn(e,"change",fl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[is]=Br(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?ri(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a))}},Th={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=ti(t);Vn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?ri(jr(o)):jr(o));e[is](e.multiple?r?new Set(i):i:i[0]),e._assigning=!0,qo(()=>{e._assigning=!1})}),e[is]=Br(s)},mounted(e,{value:t}){ml(e,t)},beforeUpdate(e,t,n){e[is]=Br(n)},updated(e,{value:t}){e._assigning||ml(e,t)}};function ml(e,t){const n=e.multiple,s=ge(t);if(!(n&&!s&&!ti(t))){for(let r=0,i=e.options.length;rString(c)===String(l)):o.selected=wp(t,l)>-1}else o.selected=t.has(l);else if(ai(jr(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function jr(e){return"_value"in e?e._value:e.value}const Rh=["ctrl","shift","alt","meta"],Ch={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Rh.some(n=>e[`${n}Key`]&&!t.includes(n))},xn=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const i=Rn(r.key);if(t.some(o=>o===i||Ih[o]===i))return e(r)}))},Lh=ct({patchProp:xh},ch);let gl;function Ph(){return gl||(gl=Gf(Lh))}const Oh=((...e)=>{const t=Ph().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Nh(s);if(!r)return;const i=t._component;!_e(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Dh(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t});function Dh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Nh(e){return We(e)?document.querySelector(e):e}const Zn=typeof document<"u";function Ou(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function $h(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Ou(e.default)}const Le=Object.assign;function Ni(e,t){const n={};for(const s in t){const r=t[s];n[s]=zt(r)?r.map(e):e(r)}return n}const Gs=()=>{},zt=Array.isArray;function _l(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Du=/#/g,Mh=/&/g,Vh=/\//g,Bh=/=/g,jh=/\?/g,Nu=/\+/g,Gh=/%5B/g,Uh=/%5D/g,$u=/%5E/g,Hh=/%60/g,Mu=/%7B/g,Fh=/%7C/g,Vu=/%7D/g,zh=/%20/g;function ea(e){return e==null?"":encodeURI(""+e).replace(Fh,"|").replace(Gh,"[").replace(Uh,"]")}function Wh(e){return ea(e).replace(Mu,"{").replace(Vu,"}").replace($u,"^")}function ho(e){return ea(e).replace(Nu,"%2B").replace(zh,"+").replace(Du,"%23").replace(Mh,"%26").replace(Hh,"`").replace(Mu,"{").replace(Vu,"}").replace($u,"^")}function qh(e){return ho(e).replace(Bh,"%3D")}function Kh(e){return ea(e).replace(Du,"%23").replace(jh,"%3F")}function Yh(e){return Kh(e).replace(Vh,"%2F")}function Xs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Xh=/\/$/,Jh=e=>e.replace(Xh,"");function $i(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),i=t.slice(a,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=tm(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:Xs(o)}}function Zh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function vl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Qh(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&ds(t.matched[s],n.matched[r])&&Bu(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ds(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Bu(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!em(e[n],t[n]))return!1;return!0}function em(e,t){return zt(e)?yl(e,t):zt(t)?yl(t,e):e?.valueOf()===t?.valueOf()}function yl(e,t){return zt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function tm(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const vn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let mo=(function(e){return e.pop="pop",e.push="push",e})({}),Mi=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function nm(e){if(!e)if(Zn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Jh(e)}const sm=/^[^#]+#/;function rm(e,t){return e.replace(sm,"#")+t}function im(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const hi=()=>({left:window.scrollX,top:window.scrollY});function om(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=im(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function bl(e,t){return(history.state?history.state.position-t:-1)+e}const go=new Map;function am(e,t){go.set(e,t)}function lm(e){const t=go.get(e);return go.delete(e),t}function cm(e){return typeof e=="string"||e&&typeof e=="object"}function ju(e){return typeof e=="string"||typeof e=="symbol"}let He=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Gu=Symbol("");He.MATCHER_NOT_FOUND+"",He.NAVIGATION_GUARD_REDIRECT+"",He.NAVIGATION_ABORTED+"",He.NAVIGATION_CANCELLED+"",He.NAVIGATION_DUPLICATED+"";function ps(e,t){return Le(new Error,{type:e,[Gu]:!0},t)}function an(e,t){return e instanceof Error&&Gu in e&&(t==null||!!(e.type&t))}const um=["params","query","hash"];function dm(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of um)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function pm(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&ho(r)):[s&&ho(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function fm(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=zt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const hm=Symbol(""),kl=Symbol(""),mi=Symbol(""),ta=Symbol(""),_o=Symbol("");function ks(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function En(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=f=>{f===!1?a(ps(He.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?a(f):cm(f)?a(ps(He.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(o&&s.enterCallbacks[r]===o&&typeof f=="function"&&o.push(f),l())},u=i(()=>e.call(s&&s.instances[r],t,n,c));let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch(f=>a(f))})}function Vi(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let a=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(Ou(a)){const c=(a.__vccOpts||a)[t];c&&i.push(En(c,n,s,o,l,r))}else{let c=a();i.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const d=$h(u)?u.default:u;o.mods[l]=u,o.components[l]=d;const f=(d.__vccOpts||d)[t];return f&&En(f,n,s,o,l,r)()}))}}return i}function mm(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;ods(c,l))?s.push(l):n.push(l));const a=e.matched[o];a&&(t.matched.find(c=>ds(c,a))||r.push(a))}return[n,s,r]}let gm=()=>location.protocol+"//"+location.host;function Uu(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),vl(l,"")}return vl(n,e)+s+r}function _m(e,t,n,s){let r=[],i=[],o=null;const l=({state:f})=>{const h=Uu(e,location),y=n.value,w=t.value;let A=0;if(f){if(n.value=h,t.value=f,o&&o===y){o=null;return}A=w?f.position-w.position:0}else s(h);r.forEach(S=>{S(n.value,y,{delta:A,type:mo.pop,direction:A?A>0?Mi.forward:Mi.back:Mi.unknown})})};function a(){o=n.value}function c(f){r.push(f);const h=()=>{const y=r.indexOf(f);y>-1&&r.splice(y,1)};return i.push(h),h}function u(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(Le({},f.state,{scroll:hi()}),"")}}function d(){for(const f of i)f();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:d}}function El(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?hi():null}}function vm(e){const{history:t,location:n}=window,s={value:Uu(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(a,c,u){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:gm()+e+a;try{t[u?"replaceState":"pushState"](c,"",f),r.value=c}catch(h){console.error(h),n[u?"replace":"assign"](f)}}function o(a,c){i(a,Le({},t.state,El(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=Le({},r.value,t.state,{forward:a,scroll:hi()});i(u.current,u,!0),i(a,Le({},El(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:o}}function ym(e){e=nm(e);const t=vm(e),n=_m(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=Le({location:"",base:e,go:s,createHref:rm.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Bn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Qe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Qe||{});const bm={type:Bn.Static,value:""},wm=/[a-zA-Z0-9_]/;function km(e){if(!e)return[[]];if(e==="/")return[[bm]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=Qe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,a,c="",u="";function d(){c&&(n===Qe.Static?i.push({type:Bn.Static,value:c}):n===Qe.Param||n===Qe.ParamRegExp||n===Qe.ParamRegExpEnd?(i.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Bn.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=a}for(;lt.length?t.length===1&&t[0]===bt.Static+bt.Segment?1:-1:0}function Hu(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Tm={strict:!1,end:!0,sensitive:!1};function Rm(e,t,n){const s=Sm(km(e.path),n),r=Le(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Cm(e,t){const n=[],s=new Map;t=_l(Tm,t);function r(d){return s.get(d)}function i(d,f,h){const y=!h,w=Tl(d);w.aliasOf=h&&h.record;const A=_l(t,d),S=[w];if("alias"in d){const v=typeof d.alias=="string"?[d.alias]:d.alias;for(const V of v)S.push(Tl(Le({},w,{components:h?h.record.components:w.components,path:V,aliasOf:h?h.record:w})))}let L,g;for(const v of S){const{path:V}=v;if(f&&V[0]!=="/"){const Y=f.record.path,ne=Y[Y.length-1]==="/"?"":"/";v.path=f.record.path+(V&&ne+V)}if(L=Rm(v,f,A),h?h.alias.push(L):(g=g||L,g!==L&&g.alias.push(L),y&&d.name&&!Rl(L)&&o(d.name)),Fu(L)&&a(L),w.children){const Y=w.children;for(let ne=0;ne{o(g)}:Gs}function o(d){if(ju(d)){const f=s.get(d);f&&(s.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(o),f.alias.forEach(o))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&s.delete(d.record.name),d.children.forEach(o),d.alias.forEach(o))}}function l(){return n}function a(d){const f=Pm(d,n);n.splice(f,0,d),d.record.name&&!Rl(d)&&s.set(d.record.name,d)}function c(d,f){let h,y={},w,A;if("name"in d&&d.name){if(h=s.get(d.name),!h)throw ps(He.MATCHER_NOT_FOUND,{location:d});A=h.record.name,y=Le(Al(f.params,h.keys.filter(g=>!g.optional).concat(h.parent?h.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),d.params&&Al(d.params,h.keys.map(g=>g.name))),w=h.stringify(y)}else if(d.path!=null)w=d.path,h=n.find(g=>g.re.test(w)),h&&(y=h.parse(w),A=h.record.name);else{if(h=f.name?s.get(f.name):n.find(g=>g.re.test(f.path)),!h)throw ps(He.MATCHER_NOT_FOUND,{location:d,currentLocation:f});A=h.record.name,y=Le({},f.params,d.params),w=h.stringify(y)}const S=[];let L=h;for(;L;)S.unshift(L.record),L=L.parent;return{name:A,path:w,params:y,matched:S,meta:Lm(S)}}e.forEach(d=>i(d));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:c,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Al(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Tl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Im(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Im(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Rl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Lm(e){return e.reduce((t,n)=>Le(t,n.meta),{})}function Pm(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Hu(e,t[i])<0?s=i:n=i+1}const r=Om(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function Om(e){let t=e;for(;t=t.parent;)if(Fu(t)&&Hu(e,t)===0)return t}function Fu({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Cl(e){const t=$t(mi),n=$t(ta),s=ue(()=>{const a=me(e.to);return t.resolve(a)}),r=ue(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],d=n.matched;if(!u||!d.length)return-1;const f=d.findIndex(ds.bind(null,u));if(f>-1)return f;const h=Il(a[c-2]);return c>1&&Il(u)===h&&d[d.length-1].path!==h?d.findIndex(ds.bind(null,a[c-2])):f}),i=ue(()=>r.value>-1&&Vm(n.params,s.value.params)),o=ue(()=>r.value>-1&&r.value===n.matched.length-1&&Bu(n.params,s.value.params));function l(a={}){if(Mm(a)){const c=t[me(e.replace)?"replace":"push"](me(e.to)).catch(Gs);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:ue(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function Dm(e){return e.length===1?e[0]:e}const Nm=iu({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Cl,setup(e,{slots:t}){const n=ls(Cl(e)),{options:s}=$t(mi),r=ue(()=>({[Ll(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Ll(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&Dm(t.default(n));return e.custom?i:Iu("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),$m=Nm;function Mm(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Vm(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!zt(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function Il(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ll=(e,t,n)=>e??t??n,Bm=iu({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=$t(_o),r=ue(()=>e.route||s.value),i=$t(kl,0),o=ue(()=>{let c=me(i);const{matched:u}=r.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),l=ue(()=>r.value.matched[o.value]);Er(kl,ue(()=>o.value+1)),Er(hm,l),Er(_o,r);const a=de();return tn(()=>[a.value,l.value,e.name],([c,u,d],[f,h,y])=>{u&&(u.instances[d]=c,h&&h!==u&&c&&c===f&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),c&&u&&(!h||!ds(u,h)||!f)&&(u.enterCallbacks[d]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,d=l.value,f=d&&d.components[u];if(!f)return Pl(n.default,{Component:f,route:c});const h=d.props[u],y=h?h===!0?c.params:typeof h=="function"?h(c):h:null,A=Iu(f,Le({},y,t,{onVnodeUnmounted:S=>{S.component.isUnmounted&&(d.instances[u]=null)},ref:a}));return Pl(n.default,{Component:A,route:c})||A}}});function Pl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const jm=Bm;function Gm(e){const t=Cm(e.routes,e),n=e.parseQuery||pm,s=e.stringifyQuery||wl,r=e.history,i=ks(),o=ks(),l=ks(),a=Hp(vn);let c=vn;Zn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ni.bind(null,$=>""+$),d=Ni.bind(null,Yh),f=Ni.bind(null,Xs);function h($,ee){let Q,re;return ju($)?(Q=t.getRecordMatcher($),re=ee):re=$,t.addRoute(re,Q)}function y($){const ee=t.getRecordMatcher($);ee&&t.removeRoute(ee)}function w(){return t.getRoutes().map($=>$.record)}function A($){return!!t.getRecordMatcher($)}function S($,ee){if(ee=Le({},ee||a.value),typeof $=="string"){const C=$i(n,$,ee.path),R=t.resolve({path:C.path},ee),k=r.createHref(C.fullPath);return Le(C,R,{params:f(R.params),hash:Xs(C.hash),redirectedFrom:void 0,href:k})}let Q;if($.path!=null)Q=Le({},$,{path:$i(n,$.path,ee.path).path});else{const C=Le({},$.params);for(const R in C)C[R]==null&&delete C[R];Q=Le({},$,{params:d(C)}),ee.params=d(ee.params)}const re=t.resolve(Q,ee),ke=$.hash||"";re.params=u(f(re.params));const _=Zh(s,Le({},$,{hash:Wh(ke),path:re.path})),b=r.createHref(_);return Le({fullPath:_,hash:ke,query:s===wl?fm($.query):$.query||{}},re,{redirectedFrom:void 0,href:b})}function L($){return typeof $=="string"?$i(n,$,a.value.path):Le({},$)}function g($,ee){if(c!==$)return ps(He.NAVIGATION_CANCELLED,{from:ee,to:$})}function v($){return ne($)}function V($){return v(Le(L($),{replace:!0}))}function Y($,ee){const Q=$.matched[$.matched.length-1];if(Q&&Q.redirect){const{redirect:re}=Q;let ke=typeof re=="function"?re($,ee):re;return typeof ke=="string"&&(ke=ke.includes("?")||ke.includes("#")?ke=L(ke):{path:ke},ke.params={}),Le({query:$.query,hash:$.hash,params:ke.path!=null?{}:$.params},ke)}}function ne($,ee){const Q=c=S($),re=a.value,ke=$.state,_=$.force,b=$.replace===!0,C=Y(Q,re);if(C)return ne(Le(L(C),{state:typeof C=="object"?Le({},ke,C.state):ke,force:_,replace:b}),ee||Q);const R=Q;R.redirectedFrom=ee;let k;return!_&&Qh(s,re,Q)&&(k=ps(He.NAVIGATION_DUPLICATED,{to:R,from:re}),ve(re,re,!0,!1)),(k?Promise.resolve(k):he(R,re)).catch(P=>an(P)?an(P,He.NAVIGATION_GUARD_REDIRECT)?P:le(P):q(P,R,re)).then(P=>{if(P){if(an(P,He.NAVIGATION_GUARD_REDIRECT))return ne(Le({replace:b},L(P.to),{state:typeof P.to=="object"?Le({},ke,P.to.state):ke,force:_}),ee||R)}else P=G(R,re,!0,b,ke);return J(R,re,P),P})}function z($,ee){const Q=g($,ee);return Q?Promise.reject(Q):Promise.resolve()}function j($){const ee=Pt.values().next().value;return ee&&typeof ee.runWithContext=="function"?ee.runWithContext($):$()}function he($,ee){let Q;const[re,ke,_]=mm($,ee);Q=Vi(re.reverse(),"beforeRouteLeave",$,ee);for(const C of re)C.leaveGuards.forEach(R=>{Q.push(En(R,$,ee))});const b=z.bind(null,$,ee);return Q.push(b),qe(Q).then(()=>{Q=[];for(const C of i.list())Q.push(En(C,$,ee));return Q.push(b),qe(Q)}).then(()=>{Q=Vi(ke,"beforeRouteUpdate",$,ee);for(const C of ke)C.updateGuards.forEach(R=>{Q.push(En(R,$,ee))});return Q.push(b),qe(Q)}).then(()=>{Q=[];for(const C of _)if(C.beforeEnter)if(zt(C.beforeEnter))for(const R of C.beforeEnter)Q.push(En(R,$,ee));else Q.push(En(C.beforeEnter,$,ee));return Q.push(b),qe(Q)}).then(()=>($.matched.forEach(C=>C.enterCallbacks={}),Q=Vi(_,"beforeRouteEnter",$,ee,j),Q.push(b),qe(Q))).then(()=>{Q=[];for(const C of o.list())Q.push(En(C,$,ee));return Q.push(b),qe(Q)}).catch(C=>an(C,He.NAVIGATION_CANCELLED)?C:Promise.reject(C))}function J($,ee,Q){l.list().forEach(re=>j(()=>re($,ee,Q)))}function G($,ee,Q,re,ke){const _=g($,ee);if(_)return _;const b=ee===vn,C=Zn?history.state:{};Q&&(re||b?r.replace($.fullPath,Le({scroll:b&&C&&C.scroll},ke)):r.push($.fullPath,ke)),a.value=$,ve($,ee,Q,b),le()}let x;function D(){x||(x=r.listen(($,ee,Q)=>{if(!Ae.listening)return;const re=S($),ke=Y(re,Ae.currentRoute.value);if(ke){ne(Le(ke,{replace:!0,force:!0}),re).catch(Gs);return}c=re;const _=a.value;Zn&&am(bl(_.fullPath,Q.delta),hi()),he(re,_).catch(b=>an(b,He.NAVIGATION_ABORTED|He.NAVIGATION_CANCELLED)?b:an(b,He.NAVIGATION_GUARD_REDIRECT)?(ne(Le(L(b.to),{force:!0}),re).then(C=>{an(C,He.NAVIGATION_ABORTED|He.NAVIGATION_DUPLICATED)&&!Q.delta&&Q.type===mo.pop&&r.go(-1,!1)}).catch(Gs),Promise.reject()):(Q.delta&&r.go(-Q.delta,!1),q(b,re,_))).then(b=>{b=b||G(re,_,!1),b&&(Q.delta&&!an(b,He.NAVIGATION_CANCELLED)?r.go(-Q.delta,!1):Q.type===mo.pop&&an(b,He.NAVIGATION_ABORTED|He.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),J(re,_,b)}).catch(Gs)}))}let I=ks(),N=ks(),U;function q($,ee,Q){le($);const re=N.list();return re.length?re.forEach(ke=>ke($,ee,Q)):console.error($),Promise.reject($)}function Z(){return U&&a.value!==vn?Promise.resolve():new Promise(($,ee)=>{I.add([$,ee])})}function le($){return U||(U=!$,D(),I.list().forEach(([ee,Q])=>$?Q($):ee()),I.reset()),$}function ve($,ee,Q,re){const{scrollBehavior:ke}=e;if(!Zn||!ke)return Promise.resolve();const _=!Q&&lm(bl($.fullPath,0))||(re||!Q)&&history.state&&history.state.scroll||null;return qo().then(()=>ke($,ee,_)).then(b=>b&&om(b)).catch(b=>q(b,$,ee))}const Ie=$=>r.go($);let pe;const Pt=new Set,Ae={currentRoute:a,listening:!0,addRoute:h,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:A,getRoutes:w,resolve:S,options:e,push:v,replace:V,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:N.add,isReady:Z,install($){$.component("RouterLink",$m),$.component("RouterView",jm),$.config.globalProperties.$router=Ae,Object.defineProperty($.config.globalProperties,"$route",{enumerable:!0,get:()=>me(a)}),Zn&&!pe&&a.value===vn&&(pe=!0,v(r.location).catch(re=>{}));const ee={};for(const re in vn)Object.defineProperty(ee,re,{get:()=>a.value[re],enumerable:!0});$.provide(mi,Ae),$.provide(ta,zc(ee)),$.provide(_o,a);const Q=$.unmount;Pt.add($),$.unmount=function(){Pt.delete($),Pt.size<1&&(c=vn,x&&x(),x=null,a.value=vn,pe=!1,U=!1),Q()}}};function qe($){return $.reduce((ee,Q)=>ee.then(()=>j(Q)),Promise.resolve())}return Ae}function zu(){return $t(mi)}function rr(e){return $t(ta)}const Um=[{label:"Install",to:"/install",match:"/install"},{label:"Docs",href:"/docs/",external:!0,match:"/docs"},{label:"Registry",to:"/registry",match:"/registry"},{label:"About",match:"/about",items:[{label:"Community Guide",to:"/about/community-guide"},{label:"Releases",to:"/about/releases"},{label:"Team",to:"/about/team"},{label:"FAQ",to:"/about/faq"},{label:"The Documentary",to:"/about/documentary"}]}],Me=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Hm={class:"hdr"},Fm={class:"wrap"},zm={class:"nav","aria-label":"Primary"},Wm=["onMouseenter","onMouseleave"],qm=["onClick","aria-expanded"],Km=["href","target"],Ym=["href","target"],Xm=["disabled"],Jm={key:0,class:"mnav"},Zm=["disabled"],Qm={key:0,class:"mdd"},eg=["onClick","aria-expanded"],tg={key:0,class:"mdd-menu"},ng=["href","target"],sg=["href","target"],rg={__name:"SiteHeader",setup(e){const t=rr(),n=ue(()=>Um);function s(G){return!!G?.external||!!G?.href}function r(G){if(!G)return"";const x=G.indexOf("?"),D=G.indexOf("#"),I=Math.min(x===-1?G.length:x,D===-1?G.length:D);return G.slice(0,I)}function i(G){const x=G?.match||"";if(!x)return!1;const D=r(t.path);return D===x||D.startsWith(x+"/")}function o(G){if(G?.to)return r(t.path).startsWith(r(G.to));if(G?.href&&l(G.href)){const x=r(new URL(G.href,window.location.origin).pathname),D=r(t.path);return D===x||D.startsWith(x+"/")}return!1}function l(G){if(!G)return!1;if(G.startsWith("/"))return!0;try{return new URL(G,window.location.origin).origin===window.location.origin}catch{return!1}}function a(G){return G.items?.length?`dd:${G.label}`:s(G)?`href:${G.href}`:`to:${G.to}`}function c(G){return s(G)?`href:${G.href}`:`to:${G.to}`}const u=de("");function d(G){return u.value===G}function f(G){u.value=G}function h(G){u.value===G&&(u.value="")}function y(G){u.value=u.value===G?"":G}function w(){u.value=""}function A(G){const x=G.target;x instanceof Element&&(x.closest(".hdr")||w())}function S(G){G.key==="Escape"&&w()}_n(()=>{document.addEventListener("click",A,{passive:!0}),document.addEventListener("keydown",S)}),Tn(()=>{document.removeEventListener("click",A),document.removeEventListener("keydown",S)});const L=de(!1),g=de(new Set);function v(){L.value=!L.value,L.value||(g.value=new Set),document.documentElement.classList.toggle("nav-open",L.value)}function V(){L.value=!1,g.value=new Set,document.documentElement.classList.remove("nav-open")}function Y(G){const x=new Set(g.value);x.has(G)?x.delete(G):x.add(G),g.value=x}function ne(G){return g.value.has(G)}Tn(()=>{document.documentElement.classList.remove("nav-open")});const z=de(""),j=de("");function he(G){G==="mobile"?j.value="":z.value=""}function J(G){const x=(G==="mobile"?j.value:z.value).trim();x&&(w(),V(),window.location.href=`/docs/?q=${encodeURIComponent(x)}`)}return(G,x)=>{const D=Cn("RouterLink");return T(),O("header",Hm,[p("div",Fm,[Se(D,{class:"brand",to:"/",onClick:x[0]||(x[0]=I=>V())},{default:Je(()=>[...x[16]||(x[16]=[p("span",{class:"logo"},"Vix.cpp",-1)])]),_:1}),p("nav",zm,[(T(!0),O(we,null,ze(n.value,I=>(T(),O(we,{key:a(I)},[Array.isArray(I.items)&&I.items.length?(T(),O("div",{key:0,class:"dd",onMouseenter:N=>f(I.label),onMouseleave:N=>h(I.label)},[p("button",{type:"button",class:De(["link dd-btn",{"is-open":d(I.label),"is-active":i(I)||I.items.some(o)}]),onClick:N=>y(I.label),"aria-haspopup":"menu","aria-expanded":String(d(I.label))},[Ue(H(I.label)+" ",1),x[17]||(x[17]=p("span",{class:"chev","aria-hidden":"true"},"▾",-1))],10,qm),p("div",{class:De(["dd-menu",{open:d(I.label)}]),role:"menu"},[(T(!0),O(we,null,ze(I.items,N=>(T(),O(we,{key:c(N)},[s(N)?(T(),O("a",{key:0,class:De(["dd-item",{"is-active":o(N)}]),href:N.href,target:N.target||(l(N.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[1]||(x[1]=U=>w())},H(N.label),11,Km)):(T(),mt(D,{key:1,class:De(["dd-item",{"is-active":o(N)}]),to:N.to,onClick:x[2]||(x[2]=U=>w())},{default:Je(()=>[Ue(H(N.label),1)]),_:2},1032,["class","to"]))],64))),128))],2)],40,Wm)):s(I)?(T(),O("a",{key:1,class:De(["link",{"is-active":i(I)}]),href:I.href,target:I.target||(l(I.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[3]||(x[3]=N=>w())},H(I.label),11,Ym)):(T(),mt(D,{key:2,class:De(["link",{"is-active":i(I)}]),to:I.to,onClick:x[4]||(x[4]=N=>w())},{default:Je(()=>[Ue(H(I.label),1)]),_:2},1032,["class","to"]))],64))),128)),x[19]||(x[19]=p("div",{class:"spacer"},null,-1)),p("form",{class:"search",role:"search",onSubmit:x[7]||(x[7]=xn(I=>J("desktop"),["prevent"]))},[x[18]||(x[18]=p("span",{class:"s-ico","aria-hidden":"true"},"⌕",-1)),Fe(p("input",{"onUpdate:modelValue":x[5]||(x[5]=I=>z.value=I),class:"s-in",type:"search",placeholder:"Search docs…",autocomplete:"off",onKeydown:x[6]||(x[6]=fo(xn(I=>he("desktop"),["prevent"]),["esc"]))},null,544),[[et,z.value,void 0,{trim:!0}]]),p("button",{class:"s-btn",type:"submit",disabled:!z.value},"Search",8,Xm)],32)]),p("button",{type:"button",class:De(["burger",{open:L.value}]),"aria-label":"Toggle navigation",onClick:x[8]||(x[8]=I=>v())},[...x[20]||(x[20]=[p("span",null,null,-1),p("span",null,null,-1),p("span",null,null,-1)])],2)]),L.value?(T(),O("div",Jm,[p("form",{class:"msearch",role:"search",onSubmit:x[11]||(x[11]=xn(I=>J("mobile"),["prevent"]))},[x[21]||(x[21]=p("span",{class:"s-ico","aria-hidden":"true"},"⌕",-1)),Fe(p("input",{"onUpdate:modelValue":x[9]||(x[9]=I=>j.value=I),class:"s-in",type:"search",placeholder:"Search docs…",autocomplete:"off",onKeydown:x[10]||(x[10]=fo(xn(I=>he("mobile"),["prevent"]),["esc"]))},null,544),[[et,j.value,void 0,{trim:!0}]]),p("button",{class:"s-btn",type:"submit",disabled:!j.value},"Search",8,Zm)],32),(T(!0),O(we,null,ze(n.value,I=>(T(),O(we,{key:"m-"+a(I)},[Array.isArray(I.items)&&I.items.length?(T(),O("div",Qm,[p("button",{type:"button",class:De(["mlink mdd-btn",{"is-active":i(I)||I.items.some(o)}]),onClick:N=>Y(I.label),"aria-expanded":String(ne(I.label))},[p("span",null,H(I.label),1),x[22]||(x[22]=p("span",{class:"chev","aria-hidden":"true"},"▾",-1))],10,eg),ne(I.label)?(T(),O("div",tg,[(T(!0),O(we,null,ze(I.items,N=>(T(),O(we,{key:"m-"+c(N)},[s(N)?(T(),O("a",{key:0,class:De(["mdd-item",{"is-active":o(N)}]),href:N.href,target:N.target||(l(N.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[12]||(x[12]=U=>V())},H(N.label),11,ng)):(T(),mt(D,{key:1,class:De(["mdd-item",{"is-active":o(N)}]),to:N.to,onClick:x[13]||(x[13]=U=>V())},{default:Je(()=>[Ue(H(N.label),1)]),_:2},1032,["class","to"]))],64))),128))])):se("",!0)])):s(I)?(T(),O("a",{key:1,class:De(["mlink",{"is-active":i(I)}]),href:I.href,target:I.target||(l(I.href)?"_self":"_blank"),rel:"noreferrer",onClick:x[14]||(x[14]=N=>V())},H(I.label),11,sg)):(T(),mt(D,{key:2,class:De(["mlink",{"is-active":i(I)}]),to:I.to,onClick:x[15]||(x[15]=N=>V())},{default:Je(()=>[Ue(H(I.label),1)]),_:2},1032,["class","to"]))],64))),128))])):se("",!0)])}}},ig=Me(rg,[["__scopeId","data-v-5a063dfd"]]),og={class:"ft"},ag={class:"wrap"},lg={class:"left"},cg={class:"muted"},ug={class:"version"},dg={__name:"SiteFooter",setup(e){const t="1.22.0";return(n,s)=>(T(),O("footer",og,[p("div",ag,[p("div",lg,[s[1]||(s[1]=p("div",{class:"brand"},"Vix.cpp",-1)),p("div",cg,[s[0]||(s[0]=Ue(" Modern C++ backend runtime ",-1)),p("span",ug,"v"+H(me(t)),1)])]),s[2]||(s[2]=p("div",{class:"right"},[p("a",{class:"link",href:"https://github.com/vixcpp/vix",target:"_blank",rel:"noreferrer"}," GitHub "),p("a",{class:"link",href:"https://github.com/vixcpp/vix/releases",target:"_blank",rel:"noreferrer"}," Releases "),p("a",{class:"link",href:"https://github.com/vixcpp/vix/issues",target:"_blank",rel:"noreferrer"}," Issues ")],-1))])]))}},pg=Me(dg,[["__scopeId","data-v-3124d47e"]]),fg={key:0,class:"pwa-toast-wrap",role:"status","aria-live":"polite"},hg={class:"pwa-toast"},mg={class:"pwa-toast-left"},gg={class:"pwa-toast-text"},_g={class:"pwa-toast-title"},vg={class:"pwa-toast-sub"},yg={key:0,class:"pwa-toast-version"},bg={class:"pwa-toast-actions"},Wu={__name:"PwaUpdateToast",props:{show:{type:Boolean,default:!1},message:{type:String,default:"New version available."},detail:{type:String,default:"Refresh to load the latest build."},version:{type:String,default:""}},emits:["refresh","dismiss"],setup(e,{emit:t}){const n=t;return(s,r)=>(T(),mt(su,{to:"body"},[e.show?(T(),O("div",fg,[p("div",hg,[r[3]||(r[3]=p("div",{class:"pwa-toast-glow","aria-hidden":"true"},null,-1)),p("div",mg,[r[2]||(r[2]=p("div",{class:"pwa-toast-icon","aria-hidden":"true"},[p("span",{class:"pwa-dot pwa-dot-red"}),p("span",{class:"pwa-dot pwa-dot-yellow"}),p("span",{class:"pwa-dot pwa-dot-green"})],-1)),p("div",gg,[p("div",_g,H(e.message),1),p("div",vg,[Ue(H(e.detail)+" ",1),e.version?(T(),O("span",yg,"v"+H(e.version),1)):se("",!0)])])]),p("div",bg,[p("button",{class:"pwa-btn pwa-btn-ghost",type:"button",onClick:r[0]||(r[0]=i=>n("dismiss"))}," Later "),p("button",{class:"pwa-btn pwa-btn-primary",type:"button",onClick:r[1]||(r[1]=i=>n("refresh"))}," Refresh ")])])])):se("",!0)]))}},wg={key:0,class:"pwa-toast-wrap",role:"status","aria-live":"polite"},kg={class:"pwa-toast"},Eg={class:"pwa-toast-left"},xg={class:"pwa-toast-text"},Sg={class:"pwa-toast-title"},Ag={class:"pwa-toast-sub"},Tg={class:"pwa-toast-actions"},Rg=["disabled"],Cg={__name:"PwaInstallToast",props:{show:{type:Boolean,default:!1},message:{type:String,default:"Install Vix.cpp?"},detail:{type:String,default:"Get an app-like experience: offline support, faster launch."},canInstall:{type:Boolean,default:!0}},emits:["install","dismiss"],setup(e,{emit:t}){const n=e,s=t,r=ue(()=>!n.canInstall);return(i,o)=>(T(),mt(su,{to:"body"},[e.show?(T(),O("div",wg,[p("div",kg,[o[3]||(o[3]=p("div",{class:"pwa-toast-glow","aria-hidden":"true"},null,-1)),p("div",Eg,[o[2]||(o[2]=p("div",{class:"pwa-toast-icon","aria-hidden":"true"},[p("span",{class:"pwa-dot pwa-dot-red"}),p("span",{class:"pwa-dot pwa-dot-yellow"}),p("span",{class:"pwa-dot pwa-dot-green"})],-1)),p("div",xg,[p("div",Sg,H(e.message),1),p("div",Ag,H(e.detail),1)])]),p("div",Tg,[p("button",{class:"pwa-btn pwa-btn-ghost",type:"button",onClick:o[0]||(o[0]=l=>s("dismiss"))}," Not now "),p("button",{class:"pwa-btn pwa-btn-primary",type:"button",disabled:r.value,onClick:o[1]||(o[1]=l=>s("install"))}," Install ",8,Rg)])])])):se("",!0)]))}},Ig={class:"main"},Ol="vix_pwa_install_dismiss_until",Lg={__name:"App",setup(e){const t=rr(),n=ue(()=>t.path==="/registry"||t.path.startsWith("/registry/"));tn(n,L=>{document.documentElement.classList.toggle("is-registry",L)},{immediate:!0});const s=$t("pwaToast"),r=ue(()=>s?.show?.value===!0),i="1.22.0";function o(){window.__vix_pwa_refresh__?.()}function l(){window.__vix_pwa_dismiss__?.()}const a=de(!1),c=de(!1);let u=null;function d(){return Date.now()}function f(){const L=Number(localStorage.getItem(Ol)||"0");return d()>L}function h(L=7){const g=d()+L*24*60*60*1e3;localStorage.setItem(Ol,String(g))}function y(){h(7),a.value=!1}async function w(){if(u)try{u.prompt();const L=await u.userChoice;u=null,c.value=!1,a.value=!1,L?.outcome!=="accepted"&&h(7)}catch{u=null,c.value=!1,a.value=!1,h(7)}}function A(L){L.preventDefault(),u=L,c.value=!0,f()&&setTimeout(()=>{u&&c.value&&(a.value=!0)},900)}function S(){u=null,c.value=!1,a.value=!1,h(365)}return _n(()=>{window.addEventListener("beforeinstallprompt",A),window.addEventListener("appinstalled",S)}),Tn(()=>{window.removeEventListener("beforeinstallprompt",A),window.removeEventListener("appinstalled",S),document.documentElement.classList.remove("is-registry")}),(L,g)=>{const v=Cn("router-view");return T(),O("div",{class:De(["app",{"app--registry":n.value}])},[n.value?se("",!0):(T(),mt(ig,{key:0})),p("main",Ig,[Se(v)]),n.value?se("",!0):(T(),mt(pg,{key:1})),Se(Cg,{show:a.value,canInstall:c.value,message:"Install Vix.cpp?",detail:"Pin it like an app. Offline support, faster launch.",onInstall:w,onDismiss:y},null,8,["show","canInstall"]),Se(Wu,{show:r.value,version:me(i),onRefresh:o,onDismiss:l},null,8,["show","version"])],2)}}},Pg=Me(Lg,[["__scopeId","data-v-f0763650"]]),hr={hero:{title:"Offline-first C++ runtime.",subtitle:"A modern C++ runtime and serious alternative to Node.js, Deno, and Bun, designed for unreliable networks and native performance.",ctas:[{label:"Get Vix.cpp",to:"/install",kind:"primary"},{label:"Get started",href:"/docs/",kind:"secondary",external:!0}],badges:[],support:{title:"Production ready",meta:["Native C++ binaries","MIT licensed"]},examples:[{key:"http",label:"HTTP",lang:"cpp",file:"server.cpp",code:`#include using namespace vix; int main() @@ -51,24 +51,24 @@ i Hint: Ctrl+C to stop`}]},registry:{title:"Registry built for unreliable netwo $ vix search websocket $ vix deps $ cat vix.lock`}},signals:{title:"Open-source project signals",subtitle:`Vix.cpp is an open-source project developed in the open. -These signals reflect real community activity and ongoing maintenance.`,items:[{title:"Stars",kind:"github",field:"stars",meta:["Stars on GitHub"]},{title:"Forks",kind:"github",field:"forks",meta:["Community forks"]},{title:"Open issues",kind:"github",field:"open_issues",meta:["Active issues"]}]},batteries:{title:"Batteries included",subtitle:"Vix ships a complete CLI workflow to create, build, develop, package, and verify C++ backend projects.",items:[{title:"Project workflow",text:"Create projects and iterate fast with dev mode and one-command runs.",href:"/docs/cli",preview:{title:"project",lines:["$ vix new api","$ cd api && vix dev","$ vix run server.cpp"]}},{title:"Packaging & verification",text:"Package builds and verify artifacts with a security-focused workflow.",href:"/docs/packaging",preview:{title:"pack + verify",lines:["$ vix pack --version 1.0.0","$ vix verify"]}},{title:"Modules system",text:"Opt-in modules to keep projects minimal and explicit.",href:"/docs/modules",preview:{title:"modules",lines:["$ vix modules init","$ vix modules add websocket"]}},{title:"Offline registry",text:"Sync once, search locally, and pin dependencies via vix.lock.",href:"/docs/registry",preview:{title:"registry",lines:["$ vix registry sync","$ vix search websocket","$ vix deps"]}}]},getStarted:{title:"Get started in under a minute",subtitle:"Create a project, start dev mode, and iterate with hot-reload.",code:`vix new api +These signals reflect real community activity and ongoing maintenance.`,items:[{title:"Stars",kind:"github",field:"stars",meta:["Stars on GitHub"]},{title:"Forks",kind:"github",field:"forks",meta:["Community forks"]},{title:"Open issues",kind:"github",field:"open_issues",meta:["Active issues"]}]},batteries:{title:"Batteries included",subtitle:"Vix ships a complete CLI workflow to create, build, develop, package, and verify C++ backend projects.",items:[{title:"Project workflow",text:"Create projects and iterate fast with dev mode and one-command runs.",href:"/docs/modules/cli/new",preview:{title:"project",lines:["$ vix new api","$ cd api && vix dev","$ vix run server.cpp"]}},{title:"Packaging & verification",text:"Package builds and verify artifacts with a security-focused workflow.",href:"/docs/modules/cli/pack",preview:{title:"pack + verify",lines:["$ vix pack --version 1.0.0","$ vix verify"]}},{title:"Modules system",text:"Opt-in modules to keep projects minimal and explicit.",href:"/docs/modules/cli/modules",preview:{title:"modules",lines:["$ vix modules init","$ vix modules add websocket"]}},{title:"Offline registry",text:"Sync once, search locally, and pin dependencies via vix.lock.",href:"/docs/modules/cli/registry",preview:{title:"registry",lines:["$ vix registry sync","$ vix search websocket","$ vix deps"]}}]},getStarted:{title:"Get started in under a minute",subtitle:"Create a project, start dev mode, and iterate with hot-reload.",code:`vix new api cd api -vix dev`,note:"Start with dev hot-reload, then switch to run or package when ready.",ctas:[{label:"Install Vix.cpp",to:"/install",kind:"primary"},{label:"View on GitHub",href:"https://github.com/vixcpp/vix",kind:"secondary",external:!0}]}},Og={class:"hero"},Dg={class:"container hero-inner"},Ng={class:"hero-copy"},$g={class:"hero-title"},Mg={class:"hero-subtitle"},Vg={key:0,class:"hero-ctas"},Bg=["href"],jg={key:1,class:"hero-support"},Gg={class:"hero-support-title"},Ug={class:"hero-support-text"},Hg={key:0,class:"hero-support-meta"},Fg={key:0,class:"sep"},zg={key:2,class:"hero-badges"},Wg={key:0,class:"hero-side"},qg={class:"code-head"},Kg={class:"head-scroll"},Yg={class:"head-left"},Xg={class:"head-title"},Jg={key:0,class:"tabs",role:"tablist","aria-label":"Hero examples"},Qg=["aria-selected","onClick"],Zg=["title"],e_={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},t_={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},n_={class:"code-body",role:"region","aria-label":"Hero code example"},s_={class:"code-pre"},r_=["innerHTML"],i_={__name:"Hero",props:{title:{type:String,required:!0},subtitle:{type:String,required:!0},ctas:{type:Array,default:()=>[]},badges:{type:Array,default:()=>[]},support:{type:Object,default:null},examples:{type:Array,default:()=>[]},defaultTab:{type:String,default:""}},setup(e){const t=e,n=de(!1),s=de(!1),r=de("");function i(g){return!!(g?.external||g?.href)}function o(g){return g?.href||g?.to||"#"}function l(g){return g==="primary"?"btn cta-main":"btn cta-secondary"}const a=ue(()=>(t.examples||[]).filter(g=>g&&g.key&&g.label&&typeof g.code=="string").map(g=>({key:g.key,label:g.label,lang:g.lang||"cpp",file:g.file||"",code:g.code||""})));tn(()=>a.value.map(g=>g.key).join(","),()=>{const g=a.value[0]?.key||"",v=t.defaultTab||g;r.value=a.value.some(V=>V.key===v)?v:g},{immediate:!0});const c=ue(()=>a.value.find(g=>g.key===r.value)||a.value[0]||null),u=ue(()=>c.value?.code||""),d=ue(()=>c.value?.lang||"cpp"),f=ue(()=>{const g=c.value;if(!g)return"";const v=g.file?` ${g.file}`:"";return`${g.label}${v}`});function h(g){return String(g??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function y(g){return String(g??"").split(` +vix dev`,note:"Start with dev hot-reload, then switch to run or package when ready.",ctas:[{label:"Install Vix.cpp",to:"/install",kind:"primary"},{label:"View on GitHub",href:"https://github.com/vixcpp/vix",kind:"secondary",external:!0}]}},Og={class:"hero"},Dg={class:"container hero-inner"},Ng={class:"hero-copy"},$g={class:"hero-title"},Mg={class:"hero-subtitle"},Vg={key:0,class:"hero-ctas"},Bg=["href"],jg={key:1,class:"hero-support"},Gg={class:"hero-support-title"},Ug={class:"hero-support-text"},Hg={key:0,class:"hero-support-meta"},Fg={key:0,class:"sep"},zg={key:2,class:"hero-badges"},Wg={key:0,class:"hero-side"},qg={class:"code-head"},Kg={class:"head-scroll"},Yg={class:"head-left"},Xg={class:"head-title"},Jg={key:0,class:"tabs",role:"tablist","aria-label":"Hero examples"},Zg=["aria-selected","onClick"],Qg=["title"],e_={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},t_={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},n_={class:"code-body",role:"region","aria-label":"Hero code example"},s_={class:"code-pre"},r_=["innerHTML"],i_={__name:"Hero",props:{title:{type:String,required:!0},subtitle:{type:String,required:!0},ctas:{type:Array,default:()=>[]},badges:{type:Array,default:()=>[]},support:{type:Object,default:null},examples:{type:Array,default:()=>[]},defaultTab:{type:String,default:""}},setup(e){const t=e,n=de(!1),s=de(!1),r=de("");function i(g){return!!(g?.external||g?.href)}function o(g){return g?.href||g?.to||"#"}function l(g){return g==="primary"?"btn cta-main":"btn cta-secondary"}const a=ue(()=>(t.examples||[]).filter(g=>g&&g.key&&g.label&&typeof g.code=="string").map(g=>({key:g.key,label:g.label,lang:g.lang||"cpp",file:g.file||"",code:g.code||""})));tn(()=>a.value.map(g=>g.key).join(","),()=>{const g=a.value[0]?.key||"",v=t.defaultTab||g;r.value=a.value.some(V=>V.key===v)?v:g},{immediate:!0});const c=ue(()=>a.value.find(g=>g.key===r.value)||a.value[0]||null),u=ue(()=>c.value?.code||""),d=ue(()=>c.value?.lang||"cpp"),f=ue(()=>{const g=c.value;if(!g)return"";const v=g.file?` ${g.file}`:"";return`${g.label}${v}`});function h(g){return String(g??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function y(g){return String(g??"").split(` `).map(V=>V.replace(/^\s*>\s?/,"")).join(` `)}function w(g){const V=String(g??"").split(` -`),Y=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),ne=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),z=new Set(["std","vix","asio","net","http","ws"]);function j(x,D){return`${h(D)}`}function he(x){let D=!1,I=!1;for(let N=0;N\n]*>)(.*)$/);if(q)return U+=h(q[1]),U+=j("cpp-include",q[2]),U+=G(q[3]||""),U;const Q=N.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return Q?(U+=h(Q[1]),U+=j("cpp-include",Q[2]),U+=G(Q[4]||""),U):(U+=G(N),U)}function G(x){let D="",I=0;const N=q=>/[A-Za-z_]/.test(q),U=q=>/[A-Za-z0-9_]/.test(q);for(;I{for(let pe=I-1;pe>=0;pe--)if(x[pe]!==" "&&x[pe]!==" ")return x[pe];return""})(),Ie=(()=>{for(let pe=Q;pe"?D+=j("cpp-member",le):D+=j("cpp-ident",le),I=Q;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(q)){if(x.startsWith("::",I)){D+=j("cpp-op","::"),I+=2;continue}if(x.startsWith("->",I)){D+=j("cpp-op","->"),I+=2;continue}D+=j("cpp-op",q),I++;continue}D+=h(q),I++}return D=D.replace(/(https?:\/\/[^\s<]+)/g,'$1'),D}return V.map(x=>{const{code:D,comment:I}=he(x),U=J(D)??G(D),q=I?`${h(I)}`:"";return U+q}).join(` -`)}function T(g){let v=h(y(g));return v=v.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),v=v.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),v=v.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),v=v.replace(/(https?:\/\/[^\s]+)/g,'$1'),v=v.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),v=v.replace(/(:\d{2,5}\b)/g,'$1'),v=v.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),v=v.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),v}const S=ue(()=>{const g=u.value||"";return d.value==="shell"?T(g):w(g)});async function L(g){try{await navigator.clipboard.writeText(g),s.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>s.value=!1,900)}catch{const v=document.createElement("textarea");v.value=g,v.style.position="fixed",v.style.opacity="0",document.body.appendChild(v),v.focus(),v.select();try{document.execCommand("copy"),s.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>s.value=!1,900)}finally{document.body.removeChild(v)}}}return(g,v)=>{const V=Cn("RouterLink");return A(),O("section",Og,[p("div",Dg,[p("div",Ng,[p("h1",$g,H(e.title),1),p("p",Mg,H(e.subtitle),1),e.ctas?.length?(A(),O("div",Vg,[(A(!0),O(we,null,ze(e.ctas,Y=>(A(),O(we,{key:Y.label},[Y.to&&!i(Y)?(A(),mt(V,{key:0,to:Y.to,class:De(l(Y.kind))},{default:Je(()=>[Ue(H(Y.label),1)]),_:2},1032,["to","class"])):(A(),O("a",{key:1,href:o(Y),class:De(l(Y.kind)),target:"_blank",rel:"noreferrer"},H(Y.label),11,Bg))],64))),128))])):se("",!0),t.support?(A(),O("div",jg,[p("div",Gg,H(t.support.title),1),p("div",Ug,H(t.support.text),1),t.support.meta?.length?(A(),O("div",Hg,[v[3]||(v[3]=p("span",{class:"meta-dot"},null,-1)),(A(!0),O(we,null,ze(t.support.meta,(Y,ne)=>(A(),O(we,{key:ne},[p("span",null,H(Y),1),ne(A(),O("span",{key:Y,class:"pill"},H(Y),1))),128))])):se("",!0)]),a.value.length?(A(),O("div",Wg,[p("div",{class:"code-card",onMouseenter:v[1]||(v[1]=Y=>n.value=!0),onMouseleave:v[2]||(v[2]=Y=>n.value=!1)},[p("div",qg,[p("div",Kg,[p("div",Yg,[v[4]||(v[4]=p("span",{class:"dot dot-red"},null,-1)),v[5]||(v[5]=p("span",{class:"dot dot-yellow"},null,-1)),v[6]||(v[6]=p("span",{class:"dot dot-green"},null,-1)),p("span",Xg,H(f.value),1)]),a.value.length>1?(A(),O("div",Jg,[(A(!0),O(we,null,ze(a.value,Y=>(A(),O("button",{key:Y.key,type:"button",class:De(["tab",{active:r.value===Y.key}]),role:"tab","aria-selected":r.value===Y.key,onClick:ne=>r.value=Y.key},H(Y.label),11,Qg))),128))])):se("",!0)]),u.value?(A(),O("button",{key:0,type:"button",class:"copy-btn",onClick:v[0]||(v[0]=Y=>L(u.value)),title:s.value?"Copied":"Copy","aria-label":"Copy"},[s.value?(A(),O("svg",t_,[...v[8]||(v[8]=[p("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(A(),O("svg",e_,[...v[7]||(v[7]=[p("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),p("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,Zg)):se("",!0)]),p("div",n_,[p("pre",s_,[p("code",{class:"code-code",innerHTML:S.value},null,8,r_)])])],32)])):se("",!0)])])}}},o_=Me(i_,[["__scopeId","data-v-362c406f"]]),a_=["id"],l_={class:"container"},c_={class:"section-head"},u_={class:"section-title"},d_={key:0,class:"section-subtitle"},p_={class:"section-body"},f_={__name:"Section",props:{title:{type:String,required:!0},subtitle:{type:String,default:""},alt:{type:Boolean,default:!1},id:{type:String,default:""},tight:{type:Boolean,default:!1}},setup(e){return(t,n)=>(A(),O("section",{class:De(["section",{alt:e.alt,tight:e.tight}]),id:e.id||null},[p("div",l_,[p("header",c_,[p("h2",u_,H(e.title),1),e.subtitle?(A(),O("p",d_,H(e.subtitle),1)):se("",!0)]),p("div",p_,[yf(t.$slots,"default",{},void 0)])])],10,a_))}},h_=Me(f_,[["__scopeId","data-v-b068929b"]]),m_={class:"code-head"},g_={class:"head-left"},__={class:"head-title"},v_={key:0,class:"chips"},y_={class:"head-right"},b_={key:0,class:"tabs"},w_=["onClick"],k_=["title"],E_={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},x_={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},S_={class:"code-pre"},T_=["innerHTML"],A_={key:0,class:"code-foot"},R_={class:"code-note"},C_={__name:"CodeBlock",props:{title:{type:String,default:""},code:{type:String,default:""},run:{type:String,default:""},out:{type:String,default:""},note:{type:String,default:""},lang:{type:String,default:""},chips:{type:Array,default:()=>[]},maxHeight:{type:[Number,String],default:380}},setup(e){const t=e,n=de(!1),s=de("code"),r=de(!1),i=ue(()=>{const g=[];return t.code?.trim()&&g.push({key:"code",label:"Code",text:t.code,lang:f("code")}),t.run?.trim()&&g.push({key:"run",label:"Run",text:t.run,lang:"shell"}),t.out?.trim()&&g.push({key:"out",label:"Output",text:t.out,lang:"shell"}),g});tn(()=>i.value.map(g=>g.key).join(","),()=>{i.value.find(g=>g.key===s.value)||(s.value=i.value[0]?.key||"code")},{immediate:!0});const o=ue(()=>i.value.find(g=>g.key===s.value)||i.value[0]),l=ue(()=>o.value?.text||""),a=ue(()=>o.value?.lang||f(s.value)),c=ue(()=>s.value==="run"?"Run":s.value==="out"?"Output":a.value==="shell"?"Shell":"C++"),u=ue(()=>(t.chips||[]).filter(Boolean)),d=ue(()=>{const g=t.maxHeight;return typeof g=="number"?`${g}px`:typeof g=="string"&&g.trim()?g:"380px"});function f(g){if(t.lang)return t.lang;if(g==="run"||g==="out")return"shell";const v=(t.code||"").trim();return v.includes("#include")||v.includes("int main")||v.includes("std::")?"cpp":v.startsWith("~$")||v.includes(" vix ")||v.includes("$ ")?"shell":"cpp"}function h(g){return String(g).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function y(g){return String(g??"").split(` +`),Y=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),ne=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),z=new Set(["std","vix","asio","net","http","ws"]);function j(x,D){return`${h(D)}`}function he(x){let D=!1,I=!1;for(let N=0;N\n]*>)(.*)$/);if(q)return U+=h(q[1]),U+=j("cpp-include",q[2]),U+=G(q[3]||""),U;const Z=N.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return Z?(U+=h(Z[1]),U+=j("cpp-include",Z[2]),U+=G(Z[4]||""),U):(U+=G(N),U)}function G(x){let D="",I=0;const N=q=>/[A-Za-z_]/.test(q),U=q=>/[A-Za-z0-9_]/.test(q);for(;I{for(let pe=I-1;pe>=0;pe--)if(x[pe]!==" "&&x[pe]!==" ")return x[pe];return""})(),Ie=(()=>{for(let pe=Z;pe"?D+=j("cpp-member",le):D+=j("cpp-ident",le),I=Z;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(q)){if(x.startsWith("::",I)){D+=j("cpp-op","::"),I+=2;continue}if(x.startsWith("->",I)){D+=j("cpp-op","->"),I+=2;continue}D+=j("cpp-op",q),I++;continue}D+=h(q),I++}return D=D.replace(/(https?:\/\/[^\s<]+)/g,'$1'),D}return V.map(x=>{const{code:D,comment:I}=he(x),U=J(D)??G(D),q=I?`${h(I)}`:"";return U+q}).join(` +`)}function A(g){let v=h(y(g));return v=v.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),v=v.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),v=v.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),v=v.replace(/(https?:\/\/[^\s]+)/g,'$1'),v=v.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),v=v.replace(/(:\d{2,5}\b)/g,'$1'),v=v.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),v=v.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),v}const S=ue(()=>{const g=u.value||"";return d.value==="shell"?A(g):w(g)});async function L(g){try{await navigator.clipboard.writeText(g),s.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>s.value=!1,900)}catch{const v=document.createElement("textarea");v.value=g,v.style.position="fixed",v.style.opacity="0",document.body.appendChild(v),v.focus(),v.select();try{document.execCommand("copy"),s.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>s.value=!1,900)}finally{document.body.removeChild(v)}}}return(g,v)=>{const V=Cn("RouterLink");return T(),O("section",Og,[p("div",Dg,[p("div",Ng,[p("h1",$g,H(e.title),1),p("p",Mg,H(e.subtitle),1),e.ctas?.length?(T(),O("div",Vg,[(T(!0),O(we,null,ze(e.ctas,Y=>(T(),O(we,{key:Y.label},[Y.to&&!i(Y)?(T(),mt(V,{key:0,to:Y.to,class:De(l(Y.kind))},{default:Je(()=>[Ue(H(Y.label),1)]),_:2},1032,["to","class"])):(T(),O("a",{key:1,href:o(Y),class:De(l(Y.kind)),target:"_blank",rel:"noreferrer"},H(Y.label),11,Bg))],64))),128))])):se("",!0),t.support?(T(),O("div",jg,[p("div",Gg,H(t.support.title),1),p("div",Ug,H(t.support.text),1),t.support.meta?.length?(T(),O("div",Hg,[v[3]||(v[3]=p("span",{class:"meta-dot"},null,-1)),(T(!0),O(we,null,ze(t.support.meta,(Y,ne)=>(T(),O(we,{key:ne},[p("span",null,H(Y),1),ne(T(),O("span",{key:Y,class:"pill"},H(Y),1))),128))])):se("",!0)]),a.value.length?(T(),O("div",Wg,[p("div",{class:"code-card",onMouseenter:v[1]||(v[1]=Y=>n.value=!0),onMouseleave:v[2]||(v[2]=Y=>n.value=!1)},[p("div",qg,[p("div",Kg,[p("div",Yg,[v[4]||(v[4]=p("span",{class:"dot dot-red"},null,-1)),v[5]||(v[5]=p("span",{class:"dot dot-yellow"},null,-1)),v[6]||(v[6]=p("span",{class:"dot dot-green"},null,-1)),p("span",Xg,H(f.value),1)]),a.value.length>1?(T(),O("div",Jg,[(T(!0),O(we,null,ze(a.value,Y=>(T(),O("button",{key:Y.key,type:"button",class:De(["tab",{active:r.value===Y.key}]),role:"tab","aria-selected":r.value===Y.key,onClick:ne=>r.value=Y.key},H(Y.label),11,Zg))),128))])):se("",!0)]),u.value?(T(),O("button",{key:0,type:"button",class:"copy-btn",onClick:v[0]||(v[0]=Y=>L(u.value)),title:s.value?"Copied":"Copy","aria-label":"Copy"},[s.value?(T(),O("svg",t_,[...v[8]||(v[8]=[p("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(T(),O("svg",e_,[...v[7]||(v[7]=[p("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),p("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,Qg)):se("",!0)]),p("div",n_,[p("pre",s_,[p("code",{class:"code-code",innerHTML:S.value},null,8,r_)])])],32)])):se("",!0)])])}}},o_=Me(i_,[["__scopeId","data-v-362c406f"]]),a_=["id"],l_={class:"container"},c_={class:"section-head"},u_={class:"section-title"},d_={key:0,class:"section-subtitle"},p_={class:"section-body"},f_={__name:"Section",props:{title:{type:String,required:!0},subtitle:{type:String,default:""},alt:{type:Boolean,default:!1},id:{type:String,default:""},tight:{type:Boolean,default:!1}},setup(e){return(t,n)=>(T(),O("section",{class:De(["section",{alt:e.alt,tight:e.tight}]),id:e.id||null},[p("div",l_,[p("header",c_,[p("h2",u_,H(e.title),1),e.subtitle?(T(),O("p",d_,H(e.subtitle),1)):se("",!0)]),p("div",p_,[yf(t.$slots,"default",{},void 0)])])],10,a_))}},h_=Me(f_,[["__scopeId","data-v-b068929b"]]),m_={class:"code-head"},g_={class:"head-left"},__={class:"head-title"},v_={key:0,class:"chips"},y_={class:"head-right"},b_={key:0,class:"tabs"},w_=["onClick"],k_=["title"],E_={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},x_={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},S_={class:"code-pre"},A_=["innerHTML"],T_={key:0,class:"code-foot"},R_={class:"code-note"},C_={__name:"CodeBlock",props:{title:{type:String,default:""},code:{type:String,default:""},run:{type:String,default:""},out:{type:String,default:""},note:{type:String,default:""},lang:{type:String,default:""},chips:{type:Array,default:()=>[]},maxHeight:{type:[Number,String],default:380}},setup(e){const t=e,n=de(!1),s=de("code"),r=de(!1),i=ue(()=>{const g=[];return t.code?.trim()&&g.push({key:"code",label:"Code",text:t.code,lang:f("code")}),t.run?.trim()&&g.push({key:"run",label:"Run",text:t.run,lang:"shell"}),t.out?.trim()&&g.push({key:"out",label:"Output",text:t.out,lang:"shell"}),g});tn(()=>i.value.map(g=>g.key).join(","),()=>{i.value.find(g=>g.key===s.value)||(s.value=i.value[0]?.key||"code")},{immediate:!0});const o=ue(()=>i.value.find(g=>g.key===s.value)||i.value[0]),l=ue(()=>o.value?.text||""),a=ue(()=>o.value?.lang||f(s.value)),c=ue(()=>s.value==="run"?"Run":s.value==="out"?"Output":a.value==="shell"?"Shell":"C++"),u=ue(()=>(t.chips||[]).filter(Boolean)),d=ue(()=>{const g=t.maxHeight;return typeof g=="number"?`${g}px`:typeof g=="string"&&g.trim()?g:"380px"});function f(g){if(t.lang)return t.lang;if(g==="run"||g==="out")return"shell";const v=(t.code||"").trim();return v.includes("#include")||v.includes("int main")||v.includes("std::")?"cpp":v.startsWith("~$")||v.includes(" vix ")||v.includes("$ ")?"shell":"cpp"}function h(g){return String(g).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function y(g){return String(g??"").split(` `).map(V=>{let Y=V.replace(/^\s*>\s?/,"");return Y=Y.replace(/\s*>\s*:(\d{2,5})/g," :$1"),Y}).join(` `)}function w(g){const V=String(g??"").split(` -`),Y=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),ne=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),z=new Set(["std","vix","asio","net","http","ws"]);function j(x,D){return`${h(D)}`}function he(x){let D=!1,I=!1;for(let N=0;N\n]*>)(.*)$/);if(q)return U+=h(q[1]),U+=j("cpp-include",q[2]),U+=G(q[3]||""),U;const Q=N.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return Q?(U+=h(Q[1]),U+=j("cpp-include",Q[2]),U+=G(Q[4]||""),U):(U+=G(N),U)}function G(x){let D="",I=0;const N=q=>/[A-Za-z_]/.test(q),U=q=>/[A-Za-z0-9_]/.test(q);for(;I{for(let pe=I-1;pe>=0;pe--)if(x[pe]!==" "&&x[pe]!==" ")return x[pe];return""})(),Ie=(()=>{for(let pe=Q;pe"?D+=j("cpp-member",le):D+=j("cpp-ident",le),I=Q;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(q)){if(x.startsWith("::",I)){D+=j("cpp-op","::"),I+=2;continue}if(x.startsWith("->",I)){D+=j("cpp-op","->"),I+=2;continue}D+=j("cpp-op",q),I++;continue}D+=h(q),I++}return D=D.replace(/(https?:\/\/[^\s<]+)/g,'$1'),D}return V.map(x=>{const{code:D,comment:I}=he(x),U=J(D)??G(D),q=I?`${h(I)}`:"";return U+q}).join(` -`)}function T(g){let v=h(y(g));return v=v.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),v=v.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),v=v.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),v=v.replace(/(https?:\/\/[^\s]+)/g,'$1'),v=v.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),v=v.replace(/(:\d{2,5}\b)/g,'$1'),v=v.replace(/(\s\|\|\s|\s\|\s)/g,'$1'),v=v.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),v=v.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),v}const S=ue(()=>{const g=l.value||"";return a.value==="shell"?T(g):w(g)});async function L(g){try{await navigator.clipboard.writeText(g),n.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>n.value=!1,900)}catch{const v=document.createElement("textarea");v.value=g,v.style.position="fixed",v.style.opacity="0",document.body.appendChild(v),v.focus(),v.select();try{document.execCommand("copy"),n.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>n.value=!1,900)}finally{document.body.removeChild(v)}}}return(g,v)=>(A(),O("div",{class:"code-card",onMouseenter:v[1]||(v[1]=V=>r.value=!0),onMouseleave:v[2]||(v[2]=V=>r.value=!1)},[p("div",m_,[p("div",g_,[v[3]||(v[3]=p("span",{class:"dot dot-red"},null,-1)),v[4]||(v[4]=p("span",{class:"dot dot-yellow"},null,-1)),v[5]||(v[5]=p("span",{class:"dot dot-green"},null,-1)),p("span",__,H(e.title||c.value),1),u.value.length?(A(),O("div",v_,[(A(!0),O(we,null,ze(u.value,V=>(A(),O("span",{key:V,class:"chip"},H(V),1))),128))])):se("",!0)]),p("div",y_,[i.value.length>1?(A(),O("div",b_,[(A(!0),O(we,null,ze(i.value,V=>(A(),O("button",{key:V.key,type:"button",class:De(["tab",{active:s.value===V.key}]),onClick:Y=>s.value=V.key},H(V.label),11,w_))),128))])):se("",!0),l.value?(A(),O("button",{key:1,type:"button",class:"copy-btn",onClick:v[0]||(v[0]=V=>L(l.value)),title:n.value?"Copied":"Copy","aria-label":"Copy"},[n.value?(A(),O("svg",x_,[...v[7]||(v[7]=[p("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(A(),O("svg",E_,[...v[6]||(v[6]=[p("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),p("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,k_)):se("",!0)])]),p("div",{class:"code-body",style:oi({maxHeight:d.value}),role:"region","aria-label":"Code block"},[p("pre",S_,[p("code",{class:"code-code",innerHTML:S.value},null,8,T_)])],4),e.note?(A(),O("div",A_,[p("p",R_,H(e.note),1)])):se("",!0)],32))}},qu=Me(C_,[["__scopeId","data-v-4a7f74a5"]]),I_={class:"signals"},L_={class:"pill"},P_={class:"value"},O_={key:0,class:"sub"},D_={__name:"SignalsGrid",props:{items:{type:Array,default:()=>[]},github:{type:Object,default:null}},setup(e){function t(r){const i=Number(r);return Number.isFinite(i)?i.toLocaleString():""}function n(r,i){return r?.kind==="github"&&i&&r?.field?t(i[r.field]):r?.value??""}function s(r){return Array.isArray(r?.meta)&&r.meta.length?r.meta[0]:""}return(r,i)=>(A(),O("div",I_,[(A(!0),O(we,null,ze(Array.isArray(e.items)?e.items:[],(o,l)=>(A(),O("div",{key:o.field||o.title||l,class:"signal"},[p("span",L_,H(o.title),1),p("div",P_,H(n(o,e.github)),1),s(o)?(A(),O("div",O_,H(s(o)),1)):se("",!0)]))),128))]))}},N_=Me(D_,[["__scopeId","data-v-91543e28"]]),$_={class:"batteries"},M_={class:"container"},V_={class:"head"},B_={class:"title"},j_={key:0,class:"subtitle"},G_={class:"grid"},U_={class:"card-top"},H_={class:"card-title"},F_={key:0,class:"card-text"},z_=["href","target","rel"],W_={key:0,class:"preview"},q_={class:"preview-head"},K_={key:0,class:"preview-title"},Y_={class:"preview-body"},X_={class:"preview-pre"},J_={class:"preview-code"},Q_={__name:"BatteriesIncluded",props:{title:{type:String,default:""},subtitle:{type:String,default:""},items:{type:Array,default:()=>[]}},setup(e){function t(i){return i?.href||i?.to||""}function n(i){return!!(i?.preview?.code||i?.preview?.lines?.length)}function s(i){if(Array.isArray(i?.preview?.lines))return i.preview.lines;const o=i?.preview?.code;return typeof o=="string"&&o.trim()?o.split(` +`),Y=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),ne=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),z=new Set(["std","vix","asio","net","http","ws"]);function j(x,D){return`${h(D)}`}function he(x){let D=!1,I=!1;for(let N=0;N\n]*>)(.*)$/);if(q)return U+=h(q[1]),U+=j("cpp-include",q[2]),U+=G(q[3]||""),U;const Z=N.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return Z?(U+=h(Z[1]),U+=j("cpp-include",Z[2]),U+=G(Z[4]||""),U):(U+=G(N),U)}function G(x){let D="",I=0;const N=q=>/[A-Za-z_]/.test(q),U=q=>/[A-Za-z0-9_]/.test(q);for(;I{for(let pe=I-1;pe>=0;pe--)if(x[pe]!==" "&&x[pe]!==" ")return x[pe];return""})(),Ie=(()=>{for(let pe=Z;pe"?D+=j("cpp-member",le):D+=j("cpp-ident",le),I=Z;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(q)){if(x.startsWith("::",I)){D+=j("cpp-op","::"),I+=2;continue}if(x.startsWith("->",I)){D+=j("cpp-op","->"),I+=2;continue}D+=j("cpp-op",q),I++;continue}D+=h(q),I++}return D=D.replace(/(https?:\/\/[^\s<]+)/g,'$1'),D}return V.map(x=>{const{code:D,comment:I}=he(x),U=J(D)??G(D),q=I?`${h(I)}`:"";return U+q}).join(` +`)}function A(g){let v=h(y(g));return v=v.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),v=v.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),v=v.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),v=v.replace(/(https?:\/\/[^\s]+)/g,'$1'),v=v.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),v=v.replace(/(:\d{2,5}\b)/g,'$1'),v=v.replace(/(\s\|\|\s|\s\|\s)/g,'$1'),v=v.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),v=v.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),v}const S=ue(()=>{const g=l.value||"";return a.value==="shell"?A(g):w(g)});async function L(g){try{await navigator.clipboard.writeText(g),n.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>n.value=!1,900)}catch{const v=document.createElement("textarea");v.value=g,v.style.position="fixed",v.style.opacity="0",document.body.appendChild(v),v.focus(),v.select();try{document.execCommand("copy"),n.value=!0,window.clearTimeout(L._t),L._t=window.setTimeout(()=>n.value=!1,900)}finally{document.body.removeChild(v)}}}return(g,v)=>(T(),O("div",{class:"code-card",onMouseenter:v[1]||(v[1]=V=>r.value=!0),onMouseleave:v[2]||(v[2]=V=>r.value=!1)},[p("div",m_,[p("div",g_,[v[3]||(v[3]=p("span",{class:"dot dot-red"},null,-1)),v[4]||(v[4]=p("span",{class:"dot dot-yellow"},null,-1)),v[5]||(v[5]=p("span",{class:"dot dot-green"},null,-1)),p("span",__,H(e.title||c.value),1),u.value.length?(T(),O("div",v_,[(T(!0),O(we,null,ze(u.value,V=>(T(),O("span",{key:V,class:"chip"},H(V),1))),128))])):se("",!0)]),p("div",y_,[i.value.length>1?(T(),O("div",b_,[(T(!0),O(we,null,ze(i.value,V=>(T(),O("button",{key:V.key,type:"button",class:De(["tab",{active:s.value===V.key}]),onClick:Y=>s.value=V.key},H(V.label),11,w_))),128))])):se("",!0),l.value?(T(),O("button",{key:1,type:"button",class:"copy-btn",onClick:v[0]||(v[0]=V=>L(l.value)),title:n.value?"Copied":"Copy","aria-label":"Copy"},[n.value?(T(),O("svg",x_,[...v[7]||(v[7]=[p("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(T(),O("svg",E_,[...v[6]||(v[6]=[p("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),p("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,k_)):se("",!0)])]),p("div",{class:"code-body",style:oi({maxHeight:d.value}),role:"region","aria-label":"Code block"},[p("pre",S_,[p("code",{class:"code-code",innerHTML:S.value},null,8,A_)])],4),e.note?(T(),O("div",T_,[p("p",R_,H(e.note),1)])):se("",!0)],32))}},qu=Me(C_,[["__scopeId","data-v-4a7f74a5"]]),I_={class:"signals"},L_={class:"pill"},P_={class:"value"},O_={key:0,class:"sub"},D_={__name:"SignalsGrid",props:{items:{type:Array,default:()=>[]},github:{type:Object,default:null}},setup(e){function t(r){const i=Number(r);return Number.isFinite(i)?i.toLocaleString():""}function n(r,i){return r?.kind==="github"&&i&&r?.field?t(i[r.field]):r?.value??""}function s(r){return Array.isArray(r?.meta)&&r.meta.length?r.meta[0]:""}return(r,i)=>(T(),O("div",I_,[(T(!0),O(we,null,ze(Array.isArray(e.items)?e.items:[],(o,l)=>(T(),O("div",{key:o.field||o.title||l,class:"signal"},[p("span",L_,H(o.title),1),p("div",P_,H(n(o,e.github)),1),s(o)?(T(),O("div",O_,H(s(o)),1)):se("",!0)]))),128))]))}},N_=Me(D_,[["__scopeId","data-v-91543e28"]]),$_={class:"batteries"},M_={class:"container"},V_={class:"head"},B_={class:"title"},j_={key:0,class:"subtitle"},G_={class:"grid"},U_={class:"card-top"},H_={class:"card-title"},F_={key:0,class:"card-text"},z_=["href","target","rel"],W_={key:0,class:"preview"},q_={class:"preview-head"},K_={key:0,class:"preview-title"},Y_={class:"preview-body"},X_={class:"preview-pre"},J_={class:"preview-code"},Z_={__name:"BatteriesIncluded",props:{title:{type:String,default:""},subtitle:{type:String,default:""},items:{type:Array,default:()=>[]}},setup(e){function t(i){return i?.href||i?.to||""}function n(i){return!!(i?.preview?.code||i?.preview?.lines?.length)}function s(i){if(Array.isArray(i?.preview?.lines))return i.preview.lines;const o=i?.preview?.code;return typeof o=="string"&&o.trim()?o.split(` `):[]}function r(i){const o=s(i);return(Array.isArray(o)?o.join(` -`):"").replaceAll("\r","")}return(i,o)=>(A(),O("section",$_,[p("div",M_,[p("header",V_,[p("h2",B_,H(e.title),1),e.subtitle?(A(),O("p",j_,H(e.subtitle),1)):se("",!0)]),p("div",G_,[(A(!0),O(we,null,ze(Array.isArray(e.items)?e.items:[],(l,a)=>(A(),O("article",{key:l.title||a,class:"card"},[p("div",U_,[p("h3",H_,H(l.title),1),l.text?(A(),O("p",F_,H(l.text),1)):se("",!0),t(l)?(A(),O("a",{key:1,class:"learn",href:t(l),target:l.external?"_blank":null,rel:l.external?"noreferrer":null},[...o[0]||(o[0]=[Ue(" Learn more ",-1),p("span",{class:"arrow"},"›",-1)])],8,z_)):se("",!0)]),n(l)?(A(),O("div",W_,[p("div",q_,[o[1]||(o[1]=p("span",{class:"dot dot-red"},null,-1)),o[2]||(o[2]=p("span",{class:"dot dot-yellow"},null,-1)),o[3]||(o[3]=p("span",{class:"dot dot-green"},null,-1)),l.preview?.title?(A(),O("span",K_,H(l.preview.title),1)):se("",!0)]),p("div",Y_,[p("pre",X_,[p("code",J_,H(r(l)),1)])])])):se("",!0)]))),128))])])]))}},Z_=Me(Q_,[["__scopeId","data-v-7f0be1df"]]),gi="vixcpp/vix",ev=`https://api.github.com/repos/${gi}`,Ku=`vix_github_stats_${gi}`,tv=360*60*1e3;function nv(e){if(!e)return!1;const t=new Date(e).getTime();return Number.isFinite(t)&&Date.now()-tt.abort(),e);try{const s=await fetch(ev,{signal:t.signal,headers:{Accept:"application/vnd.github+json"}});if(!s.ok)return null;const r=await s.json(),i={repo:gi,fetched_at:new Date().toISOString(),stars:r.stargazers_count??0,forks:r.forks_count??0,open_issues:r.open_issues_count??0,watchers:r.subscribers_count??0};return rv(i),i}catch{return null}finally{clearTimeout(n)}}const lv={class:"page"},cv={key:0,class:"container loading"},uv={key:2,class:"registry"},dv={class:"container registry-layout"},pv={class:"registry-left"},fv={class:"registry-title"},hv={class:"registry-subtitle"},mv={key:0,class:"registry-cta"},gv=["href","target","rel"],_v={class:"registry-right"},vv={class:"registry-card"},yv={class:"registry-head"},bv={class:"registry-head-title"},wv={class:"registry-body"},kv={class:"registry-pre"},Ev={class:"registry-code"},xv={key:0,class:"registry-note"},Sv={key:3,class:"signals"},Tv={class:"container signals-layout"},Av={class:"signals-left"},Rv={class:"signals-title"},Cv={class:"signals-subtitle"},Iv={class:"signals-right"},Lv={key:0,class:"cta-row"},Pv=["href","target","rel"],Ov={__name:"Home",setup(e){const t=hr??hr??hr?.HOME??hr?.default??null,n=de(null);return _n(async()=>{n.value=await ov();const s=await av({timeoutMs:1200});s&&(n.value=s)}),(s,r)=>(A(),O("div",lv,[me(t)?se("",!0):(A(),O("div",cv,[...r[0]||(r[0]=[p("h2",{class:"loading-title"},"Loading…",-1),p("p",{class:"loading-sub"},[Ue(" HOME is null. Check export in "),p("code",null,"@/data/home"),Ue(". ")],-1)])])),me(t)?.hero?(A(),mt(o_,{key:1,title:me(t).hero.title,subtitle:me(t).hero.subtitle,ctas:me(t).hero.ctas,badges:me(t).hero.badges,examples:me(t).hero.examples,support:me(t).hero.support},null,8,["title","subtitle","ctas","badges","examples","support"])):se("",!0),r[4]||(r[4]=p("div",{class:"section-sep"},null,-1)),me(t)?.registry?(A(),O("section",uv,[p("div",dv,[p("div",pv,[p("h2",fv,H(me(t).registry.title),1),p("p",hv,H(me(t).registry.subtitle),1),me(t).registry.ctas?.length?(A(),O("div",mv,[(A(!0),O(we,null,ze(me(t).registry.ctas,i=>(A(),O("a",{key:i.label,href:i.href||i.to,class:De(["btn",i.kind]),target:i.external?"_blank":null,rel:i.external?"noreferrer":null},H(i.label),11,gv))),128))])):se("",!0)]),p("div",_v,[p("div",vv,[p("div",yv,[r[1]||(r[1]=p("span",{class:"dot dot-red"},null,-1)),r[2]||(r[2]=p("span",{class:"dot dot-yellow"},null,-1)),r[3]||(r[3]=p("span",{class:"dot dot-green"},null,-1)),p("span",bv,H(me(t).registry.preview?.title||"registry"),1)]),p("div",wv,[p("pre",kv,[p("code",Ev,H(me(t).registry.preview?.code||""),1)]),me(t).registry.note?(A(),O("p",xv,H(me(t).registry.note),1)):se("",!0)])])])])])):se("",!0),r[5]||(r[5]=p("div",{class:"section-sep"},null,-1)),me(t)?.signals?(A(),O("section",Sv,[p("div",Tv,[p("div",Av,[p("h2",Rv,H(me(t).signals.title),1),p("p",Cv,H(me(t).signals.subtitle),1)]),p("div",Iv,[Se(N_,{items:me(t).signals.items||[],github:n.value},null,8,["items","github"])])])])):se("",!0),r[6]||(r[6]=p("div",{class:"section-sep"},null,-1)),me(t)?.batteries?(A(),mt(Z_,{key:4,title:me(t).batteries.title,subtitle:me(t).batteries.subtitle,items:me(t).batteries.items||[]},null,8,["title","subtitle","items"])):se("",!0),r[7]||(r[7]=p("div",{class:"section-sep"},null,-1)),me(t)?.getStarted?(A(),mt(h_,{key:5,title:me(t).getStarted.title,subtitle:me(t).getStarted.subtitle,alt:""},{default:Je(()=>[Se(qu,{code:me(t).getStarted.code||"",note:me(t).getStarted.note||""},null,8,["code","note"]),me(t).getStarted.ctas?.length?(A(),O("div",Lv,[(A(!0),O(we,null,ze(me(t).getStarted.ctas,i=>(A(),O("a",{key:i.label,href:i.href||i.to,class:De(["btn",i.kind]),target:i.external?"_blank":null,rel:i.external?"noreferrer":null},H(i.label),11,Pv))),128))])):se("",!0)]),_:1},8,["title","subtitle"])):se("",!0)]))}},Dv=Me(Ov,[["__scopeId","data-v-4bc7196c"]]),Nn={title:"Install Vix.cpp",subtitle:"Install the Vix.cpp CLI in minutes. Simple, explicit, and reproducible.",sections:[{id:"linux",title:"Linux (recommended)",desc:"Install using the official installer. This downloads a prebuilt, signed binary and installs it in a standard user location.",code:"curl -fsSL https://vixcpp.com/install.sh | bash",note:"The installer is idempotent and safe to re-run. By default, Vix is installed to ~/.local/bin/vix. No system files are modified."},{id:"mac",title:"macOS",desc:"Install using the official installer. This downloads a signed macOS binary and installs it locally.",code:"curl -fsSL https://vixcpp.com/install.sh | bash",note:"macOS uses the same installer as Linux. Homebrew is intentionally not supported to keep installs explicit and reproducible."},{id:"windows",title:"Windows",desc:"Install using the official PowerShell installer. This downloads a signed binary and installs it for the current user.",code:"irm https://vixcpp.com/install.ps1 | iex",note:"The installer does not require administrator privileges. The binary is typically installed under %LOCALAPPDATA%\\Vix."},{id:"verify",title:"Verify installation",desc:"Confirm that Vix.cpp is installed correctly and available in your shell.",code:`vix -h +`):"").replaceAll("\r","")}return(i,o)=>(T(),O("section",$_,[p("div",M_,[p("header",V_,[p("h2",B_,H(e.title),1),e.subtitle?(T(),O("p",j_,H(e.subtitle),1)):se("",!0)]),p("div",G_,[(T(!0),O(we,null,ze(Array.isArray(e.items)?e.items:[],(l,a)=>(T(),O("article",{key:l.title||a,class:"card"},[p("div",U_,[p("h3",H_,H(l.title),1),l.text?(T(),O("p",F_,H(l.text),1)):se("",!0),t(l)?(T(),O("a",{key:1,class:"learn",href:t(l),target:l.external?"_blank":null,rel:l.external?"noreferrer":null},[...o[0]||(o[0]=[Ue(" Learn more ",-1),p("span",{class:"arrow"},"›",-1)])],8,z_)):se("",!0)]),n(l)?(T(),O("div",W_,[p("div",q_,[o[1]||(o[1]=p("span",{class:"dot dot-red"},null,-1)),o[2]||(o[2]=p("span",{class:"dot dot-yellow"},null,-1)),o[3]||(o[3]=p("span",{class:"dot dot-green"},null,-1)),l.preview?.title?(T(),O("span",K_,H(l.preview.title),1)):se("",!0)]),p("div",Y_,[p("pre",X_,[p("code",J_,H(r(l)),1)])])])):se("",!0)]))),128))])])]))}},Q_=Me(Z_,[["__scopeId","data-v-7f0be1df"]]),gi="vixcpp/vix",ev=`https://api.github.com/repos/${gi}`,Ku=`vix_github_stats_${gi}`,tv=360*60*1e3;function nv(e){if(!e)return!1;const t=new Date(e).getTime();return Number.isFinite(t)&&Date.now()-tt.abort(),e);try{const s=await fetch(ev,{signal:t.signal,headers:{Accept:"application/vnd.github+json"}});if(!s.ok)return null;const r=await s.json(),i={repo:gi,fetched_at:new Date().toISOString(),stars:r.stargazers_count??0,forks:r.forks_count??0,open_issues:r.open_issues_count??0,watchers:r.subscribers_count??0};return rv(i),i}catch{return null}finally{clearTimeout(n)}}const lv={class:"page"},cv={key:0,class:"container loading"},uv={key:2,class:"registry"},dv={class:"container registry-layout"},pv={class:"registry-left"},fv={class:"registry-title"},hv={class:"registry-subtitle"},mv={key:0,class:"registry-cta"},gv=["href","target","rel"],_v={class:"registry-right"},vv={class:"registry-card"},yv={class:"registry-head"},bv={class:"registry-head-title"},wv={class:"registry-body"},kv={class:"registry-pre"},Ev={class:"registry-code"},xv={key:0,class:"registry-note"},Sv={key:3,class:"signals"},Av={class:"container signals-layout"},Tv={class:"signals-left"},Rv={class:"signals-title"},Cv={class:"signals-subtitle"},Iv={class:"signals-right"},Lv={key:0,class:"cta-row"},Pv=["href","target","rel"],Ov={__name:"Home",setup(e){const t=hr??hr??hr?.HOME??hr?.default??null,n=de(null);return _n(async()=>{n.value=await ov();const s=await av({timeoutMs:1200});s&&(n.value=s)}),(s,r)=>(T(),O("div",lv,[me(t)?se("",!0):(T(),O("div",cv,[...r[0]||(r[0]=[p("h2",{class:"loading-title"},"Loading…",-1),p("p",{class:"loading-sub"},[Ue(" HOME is null. Check export in "),p("code",null,"@/data/home"),Ue(". ")],-1)])])),me(t)?.hero?(T(),mt(o_,{key:1,title:me(t).hero.title,subtitle:me(t).hero.subtitle,ctas:me(t).hero.ctas,badges:me(t).hero.badges,examples:me(t).hero.examples,support:me(t).hero.support},null,8,["title","subtitle","ctas","badges","examples","support"])):se("",!0),r[4]||(r[4]=p("div",{class:"section-sep"},null,-1)),me(t)?.registry?(T(),O("section",uv,[p("div",dv,[p("div",pv,[p("h2",fv,H(me(t).registry.title),1),p("p",hv,H(me(t).registry.subtitle),1),me(t).registry.ctas?.length?(T(),O("div",mv,[(T(!0),O(we,null,ze(me(t).registry.ctas,i=>(T(),O("a",{key:i.label,href:i.href||i.to,class:De(["btn",i.kind]),target:i.external?"_blank":null,rel:i.external?"noreferrer":null},H(i.label),11,gv))),128))])):se("",!0)]),p("div",_v,[p("div",vv,[p("div",yv,[r[1]||(r[1]=p("span",{class:"dot dot-red"},null,-1)),r[2]||(r[2]=p("span",{class:"dot dot-yellow"},null,-1)),r[3]||(r[3]=p("span",{class:"dot dot-green"},null,-1)),p("span",bv,H(me(t).registry.preview?.title||"registry"),1)]),p("div",wv,[p("pre",kv,[p("code",Ev,H(me(t).registry.preview?.code||""),1)]),me(t).registry.note?(T(),O("p",xv,H(me(t).registry.note),1)):se("",!0)])])])])])):se("",!0),r[5]||(r[5]=p("div",{class:"section-sep"},null,-1)),me(t)?.signals?(T(),O("section",Sv,[p("div",Av,[p("div",Tv,[p("h2",Rv,H(me(t).signals.title),1),p("p",Cv,H(me(t).signals.subtitle),1)]),p("div",Iv,[Se(N_,{items:me(t).signals.items||[],github:n.value},null,8,["items","github"])])])])):se("",!0),r[6]||(r[6]=p("div",{class:"section-sep"},null,-1)),me(t)?.batteries?(T(),mt(Q_,{key:4,title:me(t).batteries.title,subtitle:me(t).batteries.subtitle,items:me(t).batteries.items||[]},null,8,["title","subtitle","items"])):se("",!0),r[7]||(r[7]=p("div",{class:"section-sep"},null,-1)),me(t)?.getStarted?(T(),mt(h_,{key:5,title:me(t).getStarted.title,subtitle:me(t).getStarted.subtitle,alt:""},{default:Je(()=>[Se(qu,{code:me(t).getStarted.code||"",note:me(t).getStarted.note||""},null,8,["code","note"]),me(t).getStarted.ctas?.length?(T(),O("div",Lv,[(T(!0),O(we,null,ze(me(t).getStarted.ctas,i=>(T(),O("a",{key:i.label,href:i.href||i.to,class:De(["btn",i.kind]),target:i.external?"_blank":null,rel:i.external?"noreferrer":null},H(i.label),11,Pv))),128))])):se("",!0)]),_:1},8,["title","subtitle"])):se("",!0)]))}},Dv=Me(Ov,[["__scopeId","data-v-4bc7196c"]]),Nn={title:"Install Vix.cpp",subtitle:"Install the Vix.cpp CLI in minutes. Simple, explicit, and reproducible.",sections:[{id:"linux",title:"Linux (recommended)",desc:"Install using the official installer. This downloads a prebuilt, signed binary and installs it in a standard user location.",code:"curl -fsSL https://vixcpp.com/install.sh | bash",note:"The installer is idempotent and safe to re-run. By default, Vix is installed to ~/.local/bin/vix. No system files are modified."},{id:"mac",title:"macOS",desc:"Install using the official installer. This downloads a signed macOS binary and installs it locally.",code:"curl -fsSL https://vixcpp.com/install.sh | bash",note:"macOS uses the same installer as Linux. Homebrew is intentionally not supported to keep installs explicit and reproducible."},{id:"windows",title:"Windows",desc:"Install using the official PowerShell installer. This downloads a signed binary and installs it for the current user.",code:"irm https://vixcpp.com/install.ps1 | iex",note:"The installer does not require administrator privileges. The binary is typically installed under %LOCALAPPDATA%\\Vix."},{id:"verify",title:"Verify installation",desc:"Confirm that Vix.cpp is installed correctly and available in your shell.",code:`vix -h vix --version`,note:"If both commands succeed and a version is displayed, the installation is complete."},{id:"update",title:"Update",desc:"Update Vix.cpp to the latest release using the same installer.",code:"curl -fsSL https://vixcpp.com/install.sh | bash",note:"Updates are safe and repeatable. Existing projects, caches, and configuration are preserved."},{id:"uninstall",title:"Uninstall",desc:"Remove Vix.cpp from your system.",code:`# Linux / macOS (default install location) rm -f ~/.local/bin/vix # optional: remove local cache, registry, and state -rm -rf ~/.vix`,note:"Paths may differ if you installed the binary manually or changed the install prefix."}],external:{releasesLabel:"GitHub Releases",releasesHref:"https://github.com/vixcpp/vix/releases",sourceLabel:"Source code",sourceHref:"https://github.com/vixcpp/vix"}},Nv={class:"wrap"},$v={class:"top"},Mv={class:"h1"},Vv={class:"p"},Bv={class:"links"},jv=["href"],Gv=["href"],Uv={class:"h2"},Hv={class:"muted"},Fv={key:0,class:"note"},zv={__name:"Install",setup(e){return(t,n)=>(A(),O("div",Nv,[p("header",$v,[p("h1",Mv,H(me(Nn).title),1),p("p",Vv,H(me(Nn).subtitle),1),p("div",Bv,[p("a",{class:"btn",href:me(Nn).external.releasesHref,target:"_blank",rel:"noreferrer"},H(me(Nn).external.releasesLabel),9,jv),p("a",{class:"btn",href:me(Nn).external.sourceHref,target:"_blank",rel:"noreferrer"},H(me(Nn).external.sourceLabel),9,Gv)])]),(A(!0),O(we,null,ze(me(Nn).sections,s=>(A(),O("section",{key:s.id,class:"sec"},[p("h2",Uv,H(s.title),1),p("p",Hv,H(s.desc),1),Se(qu,{code:s.code},null,8,["code"]),s.note?(A(),O("p",Fv,H(s.note),1)):se("",!0)]))),128))]))}},Wv=Me(zv,[["__scopeId","data-v-fb1fc97e"]]),qv={},Kv={class:"wrap"};function Yv(e,t){return A(),O("div",Kv,[...t[0]||(t[0]=[In('

Community

Vix.cpp is built in the open. If you like performance, clean DX, and practical tooling, you’ll feel at home here.

Open-sourcePerformance-firstDX-focused

Links

Official places to follow, report issues, and contribute.

Best place for bugsGitHub Issues
Best place for PRsvixcpp/vix

How to contribute

Small, focused PRs are the fastest to merge.

  1. 1
    Pick a small issue
    Start with docs, examples, or one CLI hint.
  2. 2
    One idea per PR
    Keep it tight: easier review, faster merge.
  3. 3
    Add a minimal test/example
    When relevant, include expected output.
  4. 4
    Explain what & why
    Clear title + short reasoning in the PR body.

Tip: the best contributions are tiny, precise, and easy to review.

Good first contributions

If you’re new to the codebase, these are high-impact and low-risk entry points.

Docs
Add one example with expected output.
Low risk
CLI
Improve help text or one error hint.
High leverage
Website
Add one section/page without redesigning everything.
Fast feedback
',3)])])}const Xv=Me(qv,[["render",Yv],["__scopeId","data-v-8484eeed"]]),Jv={},Qv={class:"page"};function Zv(e,t){return A(),O("section",Qv,[...t[0]||(t[0]=[p("h1",null,"Blog",-1),p("p",{class:"intro"}," Updates, design notes and technical insights about Vix.cpp. ",-1),p("div",{class:"post"},[p("h3",null,"Why Vix.cpp exists"),p("p",null," Most backend runtimes assume perfect networks. Vix.cpp starts from the opposite assumption. ")],-1),p("div",{class:"post"},[p("h3",null,"Offline-first as a systems principle"),p("p",null," Offline-first is not a UX trick. It is a correctness requirement. ")],-1)])])}const ey=Me(Jv,[["render",Zv],["__scopeId","data-v-09160c59"]]),ty={class:"wrap"},ny={key:0,class:"notfound"},sy={class:"row"},ry={key:1,class:"post"},iy={class:"header"},oy={class:"h1"},ay={class:"meta"},ly={key:0},cy={key:0,class:"excerpt"},uy={class:"content"},dy={class:"footer"},py={__name:"Post",setup(e){const n=rr().params.slug,s=de(null);return _n(async()=>{try{const r=await fetch("/posts.json");if(!r.ok){s.value=null;return}const i=await r.json();s.value=i.find(o=>o.slug===n)||null}catch{s.value=null}}),(r,i)=>{const o=Cn("router-link");return A(),O("div",ty,[s.value?(A(),O("article",ry,[p("header",iy,[p("h1",oy,H(s.value.title),1),p("p",ay,[p("span",null,H(s.value.date),1),s.value.tag?(A(),O("span",ly,"· "+H(s.value.tag),1)):se("",!0)]),s.value.excerpt?(A(),O("p",cy,H(s.value.excerpt),1)):se("",!0)]),p("section",uy,[(A(!0),O(we,null,ze(s.value.content,(l,a)=>(A(),O("p",{key:a,class:"paragraph"},H(l),1))),128))]),p("footer",dy,[Se(o,{class:"btn",to:"/blog"},{default:Je(()=>[...i[4]||(i[4]=[Ue("← Back to blog",-1)])]),_:1})])])):(A(),O("div",ny,[i[2]||(i[2]=p("h1",{class:"h1"},"Post not found",-1)),i[3]||(i[3]=p("p",{class:"p"}," The requested article does not exist or has been removed. ",-1)),p("div",sy,[Se(o,{class:"btn",to:"/"},{default:Je(()=>[...i[0]||(i[0]=[Ue("Home",-1)])]),_:1}),Se(o,{class:"btn",to:"/blog"},{default:Je(()=>[...i[1]||(i[1]=[Ue("Blog",-1)])]),_:1})])]))])}}},fy=Me(py,[["__scopeId","data-v-b313d2d0"]]),hy={},my={class:"wrap"},gy={class:"row"};function _y(e,t){const n=Cn("router-link");return A(),O("div",my,[t[3]||(t[3]=p("h1",{class:"h1"},"404",-1)),t[4]||(t[4]=p("p",{class:"p"},"This page doesn’t exist.",-1)),p("div",gy,[Se(n,{class:"btn",to:"/"},{default:Je(()=>[...t[0]||(t[0]=[Ue("Go home",-1)])]),_:1}),Se(n,{class:"btn",to:"/docs/examples"},{default:Je(()=>[...t[1]||(t[1]=[Ue("Examples",-1)])]),_:1}),Se(n,{class:"btn",to:"/install"},{default:Je(()=>[...t[2]||(t[2]=[Ue("Install",-1)])]),_:1})])])}const vy=Me(hy,[["render",_y],["__scopeId","data-v-280b74d2"]]),yy={},by={class:"wrap"};function wy(e,t){return A(),O("div",by,[...t[0]||(t[0]=[In('

Community Guide

Contributing should be predictable. One idea per PR. Clear why. Clean diffs. Fast reviews.

The PR contract

1) What changed

State the concrete change. No story, just facts.

2) Why it matters

What real problem it fixes (DX, perf, correctness).

3) The fix

Explain the approach in 2–4 lines. Keep it local.

4) Why it solves it

Result: clearer output, fewer edge cases, stable behavior.

This structure matches Vix.cpp communication: concrete → problem → action → benefit.

Good first PRs

  • Docs: add one example with expected output.
  • CLI: improve one error hint or one help section.
  • Website: add one small section without redesigning everything.

Review expectations

  • Keep diffs small and scoped.
  • No behavior changes without an example/test when possible.
  • Prefer explicit naming over cleverness.
  • Don’t break stable outputs used in docs/screenshots.
',4)])])}const ky=Me(yy,[["render",wy],["__scopeId","data-v-27c9f54c"]]),Ey={},xy={class:"wrap"};function Sy(e,t){return A(),O("div",xy,[...t[0]||(t[0]=[In('

Releases

Vix.cpp ships fast, but predictable. Releases are about stable behavior, not surprise.

Versioning

  • Patch: bugfixes, output stability, docs, internal refactors.
  • Minor: new features that keep existing behavior stable.
  • Major: breaking changes with migration notes.

Stability rules

  • CLI outputs shown in docs should stay stable.
  • New flags must not change defaults silently.
  • Error messages: clearer is good, shape changes are controlled.

If a change breaks docs/screenshots, it needs an explicit reason and updated examples.

',3)])])}const Ty=Me(Ey,[["render",Sy],["__scopeId","data-v-933a9e79"]]),Ay={},Ry={class:"wrap"};function Cy(e,t){return A(),O("div",Ry,[...t[0]||(t[0]=[In('

Team

Vix.cpp is built by people who care about correctness, performance, and developer experience.

Maintainers

This page can list maintainers once roles are finalized. For now, the canonical contact is GitHub Issues.

Collaboration

  • Propose a small scoped PR first.
  • Prefer measurable improvements (perf, DX, correctness).
  • Keep discussions concrete and reproducible.
',3)])])}const Iy=Me(Ay,[["render",Cy],["__scopeId","data-v-887b3690"]]),Ly={},Py={class:"wrap"};function Oy(e,t){return A(),O("div",Py,[...t[0]||(t[0]=[In('

FAQ

Short answers. Concrete scope. No fluff.

Is Vix.cpp only for backend?

Vix.cpp targets backend runtimes: HTTP, WebSocket, middleware, and tooling. It’s built for server processes.

Can I serve HTML files?

Yes. You can serve static content (HTML/CSS/JS) like any HTTP server. Docs/examples will include a minimal static-file sample.

What about package management?

Vix Registry focuses on discoverability + clean reuse. It’s complementary to vcpkg/Conan depending on your workflow.

What’s the philosophy?

Performance-first, but predictable. Good DX. Clear outputs. No magic.

',5)])])}const Dy=Me(Ly,[["render",Oy],["__scopeId","data-v-62147ac1"]]),Ny={},$y={class:"wrap"};function My(e,t){return A(),O("div",$y,[...t[0]||(t[0]=[In('

The Documentary

The story is simple: real systems need clarity, speed, and predictable tools under real constraints.

Why it exists

C++ can be insanely fast, but the “runtime experience” often feels fragmented: hard onboarding, unclear errors, integration friction, and too much glue code.

What changed

Vix.cpp focuses on a consistent runtime workflow: build/run/dev, predictable logs, clean middleware, and examples that match real output.

What’s next

More real examples, more stable contracts, and better developer experience without sacrificing performance.

',4)])])}const Vy=Me(Ny,[["render",My],["__scopeId","data-v-e6de332b"]]),By={};function jy(e,t){const n=Cn("router-view");return A(),mt(n)}const Gy=Me(By,[["render",jy]]),Dl=42,Uy={__name:"RegistryNetBg",setup(e){const t=de(null);let n=0,s=null,r=0,i=0,o=1;const l=[],a={x:0,y:0,active:!1,down:!1,lastSpawnX:0,lastSpawnY:0};function c(z,j){return z+Math.random()*(j-z)}function u(z,j,he){return Math.max(j,Math.min(he,z))}function d(){const z=t.value;if(!z)return;const j=z.getBoundingClientRect();o=Math.max(1,Math.min(2,window.devicePixelRatio||1)),r=Math.floor(j.width),i=Math.floor(j.height),z.width=Math.floor(r*o),z.height=Math.floor(i*o),s=z.getContext("2d"),s.setTransform(o,0,0,o,0,0),f()}function f(){const z=Dl+Math.floor(r*i/7e4);for(;l.lengthz;)l.pop()}function h(z,j,he=!1){const J={x:z,y:j,vx:he?c(-.15,.15):c(-.45,.45),vy:he?c(-.15,.15):c(-.45,.45),s:Math.random()<.12?8:6,a:c(.22,.62),tone:y()};l.push(J)}function y(){const z=Math.random();return z<.72?"teal":z<.9?"slate":"yellow"}function w(z,j){return z==="yellow"?`rgba(250, 204, 21, ${j})`:z==="slate"?`rgba(148, 163, 184, ${j})`:`rgba(94, 234, 212, ${j})`}function T(z){return`rgba(94, 234, 212, ${z})`}function S(){if(n=requestAnimationFrame(S),!s)return;s.clearRect(0,0,r,i);const z=Math.min(220,Math.max(140,r*.18)),j=z*z;for(const J of l){if(a.active){const G=a.x-J.x,x=a.y-J.y,D=G*G+x*x,I=220;if(Dr&&(J.x=r,J.vx=-Math.abs(J.vx)),J.y<0&&(J.y=0,J.vy=Math.abs(J.vy)),J.y>i&&(J.y=i,J.vy=-Math.abs(J.vy))}s.lineWidth=1.15;for(let J=0;Jj)continue;let Q=(1-Math.sqrt(U)/z)*.42;if(a.active){const le=(G.x+D.x)*.5-a.x,ve=(G.y+D.y)*.5-a.y;le*le+ve*ve<57600&&(Q*=1.45)}Q=u(Q,.02,.55),s.strokeStyle=T(Q),s.beginPath(),s.moveTo(G.x,G.y),s.lineTo(D.x,D.y),s.stroke()}}for(const J of l){const G=J.s,x=a.active?J.a*1.05:J.a;s.fillStyle=w(J.tone,u(x,.12,.92)),s.fillRect(J.x-G/2,J.y-G/2,G,G)}const he=s.createRadialGradient(r*.5,i*.55,0,r*.5,i*.55,Math.max(r,i)*.65);he.addColorStop(0,"rgba(0,0,0,0)"),he.addColorStop(1,"rgba(0,0,0,0.38)"),s.fillStyle=he,s.fillRect(0,0,r,i)}function L(z){const j=t.value.getBoundingClientRect();return{x:z.clientX-j.left,y:z.clientY-j.top}}function g(z,j){const he=z-a.lastSpawnX,J=j-a.lastSpawnY;if(he*he+J*J<324)return;a.lastSpawnX=z,a.lastSpawnY=j;const x=Math.random()<.35?2:1;for(let D=0;D{const z=t.value;if(!z)return;if(d(),l.length===0){for(let he=0;hed());j.observe(z),n=requestAnimationFrame(S),An(()=>{cancelAnimationFrame(n),z.removeEventListener("pointermove",v),z.removeEventListener("pointerdown",V),window.removeEventListener("pointerup",Y),z.removeEventListener("pointerleave",ne),j.disconnect()})}),(z,j)=>(A(),O("canvas",{ref_key:"cv",ref:t,class:"net","aria-hidden":"true"},null,512))}},Hy=Me(Uy,[["__scopeId","data-v-c117a2a9"]]),Fy={class:"reg-hero"},zy={class:"reg-top"},Wy={class:"reg-top-inner"},qy={class:"reg-top-right"},Ky={class:"reg-bg","aria-hidden":"true"},Yy={class:"reg-inner"},Xy={class:"reg-links"},Jy=["disabled"],Qy={__name:"RegistryHome",setup(e){const t=zu(),n=de("");function s(){const r=n.value.trim();r&&t.push({path:"/registry/browse",query:{q:r}})}return(r,i)=>{const o=Cn("RouterLink");return A(),O("section",Fy,[p("header",zy,[p("div",Wy,[p("nav",qy,[Se(o,{class:"reg-top-link",to:"/registry/browse"},{default:Je(()=>[...i[1]||(i[1]=[Ue("Browse packages",-1)])]),_:1}),i[2]||(i[2]=p("a",{class:"reg-top-link",href:"/docs/",target:"_self",rel:"noreferrer"},"Docs",-1))])])]),p("div",Ky,[Se(Hy)]),p("div",Yy,[i[10]||(i[10]=In(`

The open-source package registry
for Vix.cpp

`,2)),p("div",Xy,[i[4]||(i[4]=p("a",{class:"reg-mini-link",href:"/docs/",target:"_self",rel:"noreferrer"},"Docs",-1)),i[5]||(i[5]=p("span",{class:"reg-mini-sep"},"|",-1)),Se(o,{class:"reg-mini-link",to:"/registry/docs"},{default:Je(()=>[...i[3]||(i[3]=[Ue("Why Vix Registry?",-1)])]),_:1}),i[6]||(i[6]=p("span",{class:"reg-mini-sep"},"|",-1)),i[7]||(i[7]=p("a",{class:"reg-mini-link",href:"https://discord.gg/XXXX",target:"_blank",rel:"noreferrer"},"Discord",-1))]),p("form",{class:"reg-search",onSubmit:xn(s,["prevent"]),role:"search"},[Fe(p("input",{"onUpdate:modelValue":i[0]||(i[0]=l=>n.value=l),class:"reg-in",type:"search",placeholder:"Search for packages (Ctrl+K)",autocomplete:"off"},null,512),[[et,n.value,void 0,{trim:!0}]]),p("button",{class:"reg-go",type:"submit",disabled:!n.value,"aria-label":"Search"},[...i[8]||(i[8]=[p("span",{"aria-hidden":"true"},"⌕",-1)])],8,Jy)],32),Se(o,{class:"reg-publish",to:"/registry/publish"},{default:Je(()=>[...i[9]||(i[9]=[p("span",{class:"plus","aria-hidden":"true"},"+",-1),Ue(" Publish a package ",-1)])]),_:1})])])}}},Qy=Me(Zy,[["__scopeId","data-v-d3e11cba"]]),eb="vix_registry_cache",tb=1,fs="meta",hs="blobs";function Yu(){return new Promise((e,t)=>{const n=indexedDB.open(eb,tb);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(fs)||s.createObjectStore(fs,{keyPath:"key"}),s.objectStoreNames.contains(hs)||s.createObjectStore(hs,{keyPath:"key"})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function Nl(e,t){return new Promise((n,s)=>{const r=e.get(t);r.onsuccess=()=>n(r.result||null),r.onerror=()=>s(r.error)})}function $l(e,t){return new Promise((n,s)=>{const r=e.put(t);r.onsuccess=()=>n(!0),r.onerror=()=>s(r.error)})}async function nb(){const e=await Yu(),t=e.transaction([fs,hs],"readonly"),n=t.objectStore(fs),s=t.objectStore(hs),r=await Nl(n,"registry_meta"),i=await Nl(s,"registry_all_json");return e.close(),!r||!i||!i.json?null:{meta:r.value||null,data:i.json}}async function Xu(e,t){const n=await Yu(),s=n.transaction([fs,hs],"readwrite"),r=s.objectStore(fs),i=s.objectStore(hs);return await $l(r,{key:"registry_meta",value:e}),await $l(i,{key:"registry_all_json",json:t}),n.close(),!0}const Ju="/registry/index/all.min.json";async function Zu(e,t=2500){const n=new AbortController,s=setTimeout(()=>n.abort(),t);try{const r=await fetch(e,{cache:"no-cache",signal:n.signal});if(!r.ok)throw new Error(`http_${r.status}`);return await r.json()}finally{clearTimeout(s)}}async function na(){const e=await nb();if(e?.data)return sb(e.meta?.generatedAt||""),{source:"cache",data:e.data};const t=await Zu(Ju,6e3);return await Xu(t.meta||null,t),{source:"network",data:t}}async function sb(e){try{const t=await Zu(Ju,2500),n=t?.meta?.generatedAt||"";n&&n!==e&&await Xu(t.meta||null,t)}catch{}}function Qu(e){return new Worker("/assets/registrySearch.worker-DxPxH8t-.js",{name:e?.name})}const rb={class:"reg-page"},ib={class:"reg-top"},ob={class:"reg-top-inner"},ab=["disabled"],lb={class:"nav"},cb={class:"wrap"},ub={class:"panel"},db={class:"panel-head"},pb={class:"panel-title"},fb={class:"panel-sub"},hb={key:0},mb={key:1,class:"sep"},gb={key:2},_b={class:"panel-right"},vb={key:0,class:"count"},yb={key:0,class:"state muted"},bb={key:1,class:"state muted"},wb={key:2},kb={key:0,class:"state muted"},Eb={key:1,class:"list"},xb={class:"row"},Sb={class:"left"},Ab={key:0,class:"desc"},Tb={class:"right"},Rb={class:"ver"},Cb=["href"],Ib={key:2,class:"foot muted"},Lb={__name:"RegistryBrowse",setup(e){const t=rr(),n=zu(),s=de((t.query.q||"").toString()),r=de([]),i=de(0),o=de(!0),l=de(""),a=de(""),c=de(null),u=new Qu;function d(){const y=!s.value||!s.value.trim();u.postMessage({type:"search",query:y?"":s.value.trim(),limit:y?50:30,sort:y?"latest":"score"})}function f(y){const w=(y??s.value??"").toString().trim();if(!w){n.push({path:"/registry/browse",query:{}});return}n.push({path:"/registry/browse",query:{q:w}})}function h(){c.value&&c.value.focus()}return _n(async()=>{u.onmessage=w=>{const A=w.data||{};if(A.type==="loaded"){l.value=A.version||"",o.value=!1,d();return}if(A.type==="searchResult"){r.value=A.hits||[],i.value=A.total||0,l.value=A.version||l.value;return}A.type==="error"&&(a.value=A.error||"worker_error",o.value=!1)};const y=w=>{(w.ctrlKey||w.metaKey)&&(w.key==="k"||w.key==="K")&&(w.preventDefault(),h())};window.addEventListener("keydown",y);try{const{data:w}=await na();u.postMessage({type:"load",data:w})}catch{o.value=!1,a.value="cannot_load_registry"}Tn(()=>{window.removeEventListener("keydown",y)})}),Tn(()=>{u.terminate()}),tn(()=>t.query.q,y=>{s.value=(y||"").toString(),!o.value&&!a.value&&d()}),(y,w)=>{const A=Cn("RouterLink");return T(),O("section",rb,[p("header",ib,[p("div",ob,[Se(A,{class:"brand",to:"/registry"},{default:Je(()=>[...w[4]||(w[4]=[p("span",{class:"logo","aria-hidden":"true"},null,-1),p("span",{class:"brand-text"},"Vix Registry",-1)])]),_:1}),p("form",{class:"search",onSubmit:w[2]||(w[2]=xn(S=>f(),["prevent"]))},[Fe(p("input",{ref_key:"searchEl",ref:c,"onUpdate:modelValue":w[0]||(w[0]=S=>s.value=S),class:"search-in",type:"search",placeholder:"Search for packages (Ctrl+K)",autocomplete:"off",onKeydown:w[1]||(w[1]=fo(xn(S=>f(),["prevent"]),["enter"]))},null,544),[[et,s.value,void 0,{trim:!0}]]),p("button",{class:"search-btn",type:"submit",disabled:o.value,"aria-label":"Search"},[...w[5]||(w[5]=[p("span",{"aria-hidden":"true"},"⌕",-1)])],8,ab)],32),p("nav",lb,[w[7]||(w[7]=p("a",{class:"nav-link",href:"/docs/",target:"_self",rel:"noreferrer"},"Docs",-1)),w[8]||(w[8]=p("a",{class:"nav-link",href:"https://github.com/vixcpp/registry",target:"_blank",rel:"noreferrer"}," GitHub ",-1)),Se(A,{class:"nav-link",to:"/registry/publish"},{default:Je(()=>[...w[6]||(w[6]=[Ue("Publish",-1)])]),_:1})])])]),p("div",cb,[p("div",ub,[p("div",db,[p("div",null,[p("div",pb,H(s.value?"Search results":"Explore packages"),1),p("div",fb,[l.value?(T(),O("span",hb,"Index: "+H(l.value),1)):se("",!0),s.value?(T(),O("span",mb,"|")):se("",!0),s.value?(T(),O("span",gb,'Query: "'+H(s.value)+'"',1)):se("",!0)])]),p("div",_b,[!o.value&&!a.value?(T(),O("span",vb,H(i.value)+" result(s) ",1)):se("",!0),s.value?(T(),O("button",{key:1,class:"clear",type:"button",onClick:w[3]||(w[3]=S=>f(""))}," Clear ")):se("",!0)])]),o.value?(T(),O("div",yb,"Loading registry…")):a.value?(T(),O("div",bb,"Error: "+H(a.value),1)):(T(),O("div",wb,[s.value&&i.value===0?(T(),O("div",kb,' No results for "'+H(s.value)+'". ',1)):(T(),O("ul",Eb,[(T(!0),O(we,null,ze(r.value,S=>(T(),O("li",{key:S.id,class:"item"},[p("div",xb,[p("div",Sb,[Se(A,{class:"id id-link",to:`/registry/pkg/${S.namespace}/${S.name}`},{default:Je(()=>[Ue(H(S.id),1)]),_:2},1032,["to"]),S.description?(T(),O("div",Ab,H(S.description),1)):se("",!0)]),p("div",Tb,[p("div",Rb,H(S.latest),1),S.repo?(T(),O("a",{key:0,class:"repo",href:S.repo,target:"_blank",rel:"noreferrer"}," repo ",8,Cb)):se("",!0)])])]))),128))])),s.value?se("",!0):(T(),O("div",Ib," Tip: use Ctrl+K to focus search "))]))])])])}}},Pb=Me(Lb,[["__scopeId","data-v-6aa07732"]]),Ob={};function Db(e,t){return T(),O("h1",null,"Registry Docs")}const Nb=Me(Ob,[["render",Db]]),$b={class:"cl"},Mb={class:"cl-head"},Vb={class:"cl-summary"},Bb={class:"chip ok"},jb={class:"chip bad"},Gb={class:"chip warn"},Ub={class:"chip manual"},Hb={key:0,class:"copied"},Fb=["onClick"],zb={class:"sec-left"},Wb={class:"sec-title"},qb={class:"sec-right"},Kb={key:0,class:"mini"},Yb={key:1,class:"mini w"},Xb={key:2,class:"mini m"},Jb=["onClick"],Zb={class:"sec-body"},Qb={class:"items"},e0={key:0},t0={key:1},n0={key:2},s0={key:3},r0={class:"body"},i0={key:0,class:"tip"},o0={key:0,class:"cmds"},a0={class:"pre"},l0={__name:"PublishChecklist",props:{repoUrl:{type:String,default:""},namespace:{type:String,default:""},name:{type:String,default:""},version:{type:String,default:""},commit:{type:String,default:""},license:{type:String,default:""},type:{type:String,default:""},manifestPath:{type:String,default:""},displayName:{type:String,default:""},description:{type:String,default:""},keywords:{type:String,default:""},homepage:{type:String,default:""},maintainerName:{type:String,default:""},maintainerGithub:{type:String,default:""},existingEntry:{type:Object,default:null}},setup(e){const t=e;function n(D){return(D||"").toLowerCase().trim()}const s=ue(()=>n(t.namespace)),r=ue(()=>n(t.name)),i=ue(()=>{const D=(t.version||"").trim();return D?`v${D}`:""}),o=ue(()=>!t.existingEntry);function l(D){return(D||"").split(",").map(I=>I.trim()).filter(Boolean)}async function a(D){const I=(D||"").trim();if(!I)return!1;try{return await navigator.clipboard.writeText(I),!0}catch{try{const N=document.createElement("textarea");return N.value=I,document.body.appendChild(N),N.select(),document.execCommand("copy"),document.body.removeChild(N),!0}catch{return!1}}}const c=/^[a-z0-9][a-z0-9._-]{0,63}$/,u=/^[a-z0-9][a-z0-9-]{0,63}$/,d=/^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/,f=/^[0-9a-f]{7,40}$/i;function h(D){try{const I=new URL((D||"").trim());return I.protocol==="http:"||I.protocol==="https:"}catch{return!1}}function y(){const D=l(t.keywords).length;return D>=4&&D<=8}function w(){const D=(t.description||"").trim();return!(!D||D.length<15||D.length>180)}function A(){return!!(t.maintainerName.trim()&&t.maintainerGithub.trim())}function S(){return["header-only","cmake","vix-module"].includes(t.type)}function L(){return!!t.manifestPath.trim()}const g=ue(()=>({namePattern:c.test(r.value),namespacePattern:u.test(s.value),versionSemver:d.test((t.version||"").trim()),commitHex:f.test((t.commit||"").trim()),repoUrlValid:h(t.repoUrl),homepageValid:!t.homepage.trim()||h(t.homepage),typeValid:S(),manifestValid:L()}));function v(D){let I=0,N=0,U=0;for(const q of D)q.status==="bad"?I++:q.status==="warn"?N++:q.status==="manual"&&U++;return I?"bad":N?"warn":U?"manual":"ok"}function V(D){let I=0,N=0,U=0,q=0,Z=0;for(const le of D)le.status==="ok"?I++:le.status==="bad"?N++:le.status==="warn"?U++:le.status==="manual"?q++:le.status==="skip"&&Z++;return{ok:I,bad:N,warn:U,manual:q,skip:Z}}const Y=ue(()=>{const D=l(t.keywords),I=[{text:"vix.json exists and contains at least name and namespace",status:"manual",tip:'Check vix.json has { "name": "...", "namespace": "..." }'},{text:"Repo is clean (no uncommitted files)",status:"manual",tip:"git status --porcelain (should be empty)"},{text:`Version tag exists: ${i.value||"v"}`,status:"manual",tip:"git tag -l | grep v"},{text:"Tag points to the correct commit you want to freeze",status:"manual",tip:"git rev-list -n 1 v"},{text:"Tag is pushed to remote",status:"manual",tip:"git push --tags"},{text:"Package builds and examples/tests pass",status:"manual",tip:"Run your build + tests locally"}],N=[{text:"namespace and name (defines ID and file name)",status:g.value.namespacePattern&&g.value.namePattern?"ok":"bad",tip:"Must match schema patterns"},{text:"version (SemVer key)",status:g.value.versionSemver?"ok":"bad",tip:"Format: x.y.z or x.y.z-alpha.1"},{text:`tag (auto): ${i.value||"v"}`,status:g.value.versionSemver?"ok":"bad",tip:"Tag is derived from version"},{text:"commit (required, pinning, reproducible installs)",status:g.value.commitHex?"ok":"bad",tip:"hex 7..40. From: git rev-list -n 1 v"},{text:"repo.url (clonable URL)",status:g.value.repoUrlValid?"ok":"bad",tip:"Must be a valid https URL"},{text:"license",status:t.license.trim()?"ok":"bad",tip:"Example: MIT, Apache-2.0"},{text:"type and manifestPath",status:g.value.typeValid&&g.value.manifestValid?"ok":"bad",tip:"type in header-only | cmake | vix-module and manifestPath not empty"}],U=[{text:"displayName filled if the name is cryptic",status:t.displayName.trim()?"ok":"warn",tip:"Recommended for readable listings"},{text:"description is short and useful (one sentence)",status:w()?"ok":"warn",tip:"Aim for 1 sentence, 15..180 chars"},{text:"4 to 8 precise keywords",status:y()?"ok":"warn",tip:`Current: ${D.length}. Recommended: 4..8`},{text:"homepage set if different from repo",status:!t.homepage.trim()||g.value.homepageValid?"ok":"bad",tip:"Optional, but must be a valid URL if provided"},{text:"maintainers has at least github + name",status:A()?"ok":"warn",tip:"Add maintainer name and GitHub handle"}],q=[{text:"name matches: [a-z0-9][a-z0-9._-]{0,63}",status:g.value.namePattern?"ok":"bad",tip:"Allowed: letters, digits, dot, underscore, dash"},{text:"namespace matches: [a-z0-9][a-z0-9-]{0,63}",status:g.value.namespacePattern?"ok":"bad",tip:"Allowed: letters, digits, dash"},{text:"versions key matches semver: x.y.z with optional suffix",status:g.value.versionSemver?"ok":"bad",tip:"Examples: 1.2.3, 1.2.3-alpha.1"},{text:"commit is hex 7..40",status:g.value.commitHex?"ok":"bad",tip:"Example: 18363babf297b4050d2585596238012faee65d52"},{text:"repo.url and homepage are valid URIs",status:g.value.repoUrlValid&&g.value.homepageValid?"ok":"bad",tip:"Must be http/https"},{text:"type is header-only | cmake | vix-module",status:g.value.typeValid?"ok":"bad",tip:"Pick one integration type"}],Z=[{text:"New package: Open GitHub new file",status:o.value?"ok":"skip",tip:"Creates index/..json"},{text:"Commit on branch: publish---",status:"manual",tip:"Use that branch naming in GitHub UI or locally"},{text:"Open PR to vixcpp/registry:main",status:"manual",tip:"PR should target main"},{text:"Existing package: Edit existing entry",status:o.value?"skip":"ok",tip:"Add versions[version] and update latest if needed"}];return[{id:"sec2",title:"Checklist 2: Required data",defaultOpen:!0,items:N},{id:"sec5",title:"Checklist 5: GitHub publish flow",defaultOpen:!1,items:Z},{id:"sec1",title:"Checklist 1: Before publishing",defaultOpen:!1,items:I,commands:["git status --porcelain","git rev-list -n 1 v","git push --tags"]},{id:"sec3",title:"Checklist 3: Search quality",defaultOpen:!1,items:U},{id:"sec4",title:"Checklist 4: Schema rules",defaultOpen:!1,items:q},{id:"sec6",title:"Checklist 6: After merge",defaultOpen:!1,items:[{text:"Wait for registry site refresh or rebuild",status:"manual",tip:"Depends on deployment"},{text:"Test: vix registry sync",status:"manual",tip:"Pull latest index locally"},{text:"Test: vix search ",status:"manual",tip:"Ensure it is discoverable"},{text:"Test: vix add / (or your install flow)",status:"manual",tip:"End-to-end install"}]}].map(Ie=>({...Ie,severity:v(Ie.items),counts:V(Ie.items)}))}),ne=ls({});function z(D){return ne[D.id]===void 0?!!D.defaultOpen:!!ne[D.id]}function j(D){ne[D.id]=!z(D)}function he(D){let I=0,N=0,U=0,q=0;for(const Z of D)I+=Z.counts.ok,N+=Z.counts.bad,U+=Z.counts.warn,q+=Z.counts.manual;return{ok:I,bad:N,warn:U,manual:q}}const J=ue(()=>he(Y.value)),G=ls({text:""});async function x(D){const I=Array.isArray(D.commands)?D.commands:[];!I.length||!await a(I.join(` `)+` -`)||(G.text="Copied commands",window.setTimeout(()=>{G.text=""},1200))}return(D,I)=>(A(),O("div",$b,[p("div",Mb,[I[0]||(I[0]=p("div",{class:"cl-title"},"Publishing checklist",-1)),p("div",Vb,[p("span",Bb,"OK "+H(J.value.ok),1),p("span",jb,"Blockers "+H(J.value.bad),1),p("span",Gb,"Warnings "+H(J.value.warn),1),p("span",Ub,"Manual "+H(J.value.manual),1)])]),G.text?(A(),O("div",Hb,H(G.text),1)):se("",!0),(A(!0),O(we,null,ze(Y.value,N=>(A(),O("div",{key:N.id,class:De(["sec",N.severity])},[p("button",{class:"sec-head",type:"button",onClick:U=>j(N)},[p("div",zb,[p("span",{class:De(["chev",{open:z(N)}])},"›",2),p("span",Wb,H(N.title),1)]),p("div",qb,[N.counts.bad?(A(),O("span",Kb,"! "+H(N.counts.bad),1)):se("",!0),N.counts.warn?(A(),O("span",Yb,"i "+H(N.counts.warn),1)):se("",!0),N.counts.manual?(A(),O("span",Xb,"• "+H(N.counts.manual),1)):se("",!0),N.commands&&N.commands.length?(A(),O("button",{key:3,class:"copy-btn",type:"button",onClick:xn(U=>x(N),["stop"])}," Copy commands ",8,Jb)):se("",!0)])],8,Fb),Fe(p("div",Qb,[p("ul",Zb,[(A(!0),O(we,null,ze(N.items,U=>(A(),O("li",{key:U.text,class:"item"},[p("span",{class:De(["mark",U.status])},[U.status==="ok"?(A(),O("span",e0,"✓")):U.status==="bad"?(A(),O("span",t0,"!")):U.status==="warn"?(A(),O("span",n0,"i")):U.status==="manual"?(A(),O("span",s0,"•")):se("",!0)],2),p("div",r0,[p("div",{class:De(["text",{muted:U.status==="skip"}])},H(U.text),3),U.tip?(A(),O("div",i0,H(U.tip),1)):se("",!0)])]))),128))]),N.commands&&N.commands.length?(A(),O("div",o0,[I[1]||(I[1]=p("div",{class:"cmd-title"},"Commands",-1)),p("pre",a0,[p("code",null,H(N.commands.join(` -`)),1)])])):se("",!0)],512),[[ph,z(N)]])],2))),128))]))}},c0=Me(l0,[["__scopeId","data-v-836c96c6"]]),u0={class:"pub"},d0={key:0,class:"muted"},p0={key:1,class:"muted"},f0={key:2,class:"layout"},h0={class:"side"},m0={class:"main"},g0={class:"card"},_0={class:"row2"},v0={class:"field"},y0={class:"field"},b0={class:"row2"},w0={class:"field"},k0={class:"field"},E0={class:"row2"},x0={class:"field"},S0={class:"field"},T0=["value"],A0={class:"row2"},R0={class:"field"},C0={class:"field"},I0={class:"row2"},L0={class:"field"},P0={class:"field"},O0={class:"field"},D0={class:"field"},N0={class:"field"},$0={class:"field"},M0={class:"row2"},V0={class:"field"},B0={class:"field"},j0={class:"field"},G0={class:"status"},U0={key:0,class:"muted"},H0={key:0,class:"err"},F0={key:1,class:"err"},z0={key:2,class:"err"},W0={key:3,class:"hint"},q0={class:"hint-row"},K0=["href"],Y0=["href"],X0=["disabled"],J0={class:"card"},Q0={key:0,class:"pre"},Z0={key:1,class:"muted"},ew={class:"actions"},tw=["disabled"],nw=["disabled"],sw=["href"],rw=["href"],iw={key:2,class:"copied"},Bi="https://github.com/vixcpp/registry",ow={__name:"RegistryPublish",setup(e){const t=de(!0),n=de(""),s=de(null),r=de(new Map),i=de(""),o=de(""),l=de(""),a=de(""),c=de(""),u=de("MIT"),d=de("header-only"),f=de("vix.json"),h=de("main"),y=de(""),w=de(""),T=de(""),S=de(""),L=de(""),g=de(""),v=de(""),V=de("");function Y(R){return(R||"").toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9._-]/g,"")}const ne=ue(()=>Y(o.value)),z=ue(()=>Y(l.value)),j=ue(()=>{const R=(a.value||"").trim();return R?`v${R}`:""}),he=ue(()=>/[\\/]/.test(o.value)||/[\\/]/.test(l.value)),J=ue(()=>!ne.value||!z.value?"":`${ne.value}/${z.value}`),G=ue(()=>!ne.value||!z.value?"":`${ne.value}.${z.value}.json`),x=ue(()=>{const R=G.value;return R?`index/${R}`:""}),D=ue(()=>{const R=J.value;return R&&r.value.get(R)||null}),I=ue(()=>{const R=D.value,k=a.value.trim();return!R||!k?!1:!!(R.versions&&typeof R.versions=="object"&&R.versions[k])});function N(R){const k=[];let P="";for(let M=0;M="0"&&W<="9"){P+=W;continue}if(W==="."){P&&(k.push(parseInt(P,10)),P="");continue}break}for(P&&k.push(parseInt(P,10));k.length<3;)k.push(0);return k}function U(R,k){const P=N(R),M=N(k),W=Math.max(P.length,M.length);for(let F=0;Foe)return 1}return 0}function q(R){return(R||"").split(",").map(k=>k.trim()).filter(Boolean)}function Q(){return new Date().toISOString()}const le=ue(()=>D.value?`${Bi}/blob/main/${x.value}`:""),ve=ue(()=>D.value?`${Bi}/edit/main/${x.value}`:"");async function Ie(R){try{await navigator.clipboard.writeText(R)}catch{const k=document.createElement("textarea");k.value=R,document.body.appendChild(k),k.select(),document.execCommand("copy"),document.body.removeChild(k)}}async function pe(R){V.value=R,window.setTimeout(()=>{V.value===R&&(V.value="")},1400)}function Pt(){return a.value.trim()?{tag:j.value,commit:v.value.trim(),...c.value.trim()?{notes:c.value.trim()}:{},publishedAt:Q()}:null}const Te=ue(()=>{const R=Pt();return R?JSON.stringify(R,null,2)+` -`:""});function qe(){const R=ne.value,k=z.value,P=a.value.trim(),M=D.value?JSON.parse(JSON.stringify(D.value)):{name:k,namespace:R,displayName:k,description:"",keywords:[],license:"MIT",repo:{url:i.value.trim(),defaultBranch:h.value.trim()||"main"},type:"header-only",manifestPath:"vix.json",homepage:i.value.trim(),maintainers:[{name:"",github:""}],versions:{}};M.name=k,M.namespace=R,M.displayName=(S.value.trim()||M.displayName||k).toString(),M.description=(w.value.trim()||M.description||"").toString();const W=q(T.value);W.length&&(M.keywords=W),M.license=(u.value.trim()||M.license||"MIT").toString(),M.type=d.value,M.manifestPath=(f.value.trim()||M.manifestPath||"vix.json").toString();const F=i.value.trim()||M.repo&&M.repo.url||"";M.repo={url:F,defaultBranch:(h.value.trim()||M.repo&&M.repo.defaultBranch||"main").toString()},M.homepage=(y.value.trim()||F).toString();const B=L.value.trim(),oe=g.value.trim();if((B||oe)&&(M.maintainers=[{name:B||"",github:oe||""}]),(!M.versions||typeof M.versions!="object")&&(M.versions={}),P){M.versions[P]=Pt();const te=typeof M.latest=="string"?M.latest:"";(!te||U(P,te)>0)&&(M.latest=P)}return M}const $=ue(()=>!ne.value||!z.value||!a.value.trim()?"":JSON.stringify(qe(),null,2)+` -`),ee=ue(()=>{const R=[];return i.value.trim()||R.push("repoUrl"),ne.value||R.push("namespace"),z.value||R.push("name"),a.value.trim()||R.push("version"),v.value.trim()||R.push("commit"),R}),Z=ue(()=>!(!$.value||ee.value.length||I.value||he.value)),re=ue(()=>!D.value),ke=ue(()=>{if(!Z.value)return"";const R=encodeURIComponent($.value);return`${Bi}/new/main/${x.value}?value=${R}`});async function _(){$.value&&(await Ie($.value),await pe("Copied entry JSON"))}async function b(){x.value&&(await Ie(x.value),await pe("Copied file path"))}async function C(){Te.value&&(await Ie(Te.value),await pe("Copied versions[version] block"))}return _n(async()=>{try{const{data:R}=await na();s.value=R;const k=new Map,P=Array.isArray(R?.entries)?R.entries:[];for(const M of P){const W=M?.namespace||"",F=M?.name||"";!W||!F||k.set(`${W}/${F}`,M)}r.value=k}catch{n.value="cannot_load_registry"}finally{t.value=!1}}),(R,k)=>(A(),O("section",u0,[k[37]||(k[37]=In(`

Publish a package

With Vix CLI, publishing is simple and offline-first. You create your library, tag a version, then publish.

    vix new tree --lib
+`)||(G.text="Copied commands",window.setTimeout(()=>{G.text=""},1200))}return(D,I)=>(T(),O("div",$b,[p("div",Mb,[I[0]||(I[0]=p("div",{class:"cl-title"},"Publishing checklist",-1)),p("div",Vb,[p("span",Bb,"OK "+H(J.value.ok),1),p("span",jb,"Blockers "+H(J.value.bad),1),p("span",Gb,"Warnings "+H(J.value.warn),1),p("span",Ub,"Manual "+H(J.value.manual),1)])]),G.text?(T(),O("div",Hb,H(G.text),1)):se("",!0),(T(!0),O(we,null,ze(Y.value,N=>(T(),O("div",{key:N.id,class:De(["sec",N.severity])},[p("button",{class:"sec-head",type:"button",onClick:U=>j(N)},[p("div",zb,[p("span",{class:De(["chev",{open:z(N)}])},"›",2),p("span",Wb,H(N.title),1)]),p("div",qb,[N.counts.bad?(T(),O("span",Kb,"! "+H(N.counts.bad),1)):se("",!0),N.counts.warn?(T(),O("span",Yb,"i "+H(N.counts.warn),1)):se("",!0),N.counts.manual?(T(),O("span",Xb,"• "+H(N.counts.manual),1)):se("",!0),N.commands&&N.commands.length?(T(),O("button",{key:3,class:"copy-btn",type:"button",onClick:xn(U=>x(N),["stop"])}," Copy commands ",8,Jb)):se("",!0)])],8,Fb),Fe(p("div",Zb,[p("ul",Qb,[(T(!0),O(we,null,ze(N.items,U=>(T(),O("li",{key:U.text,class:"item"},[p("span",{class:De(["mark",U.status])},[U.status==="ok"?(T(),O("span",e0,"✓")):U.status==="bad"?(T(),O("span",t0,"!")):U.status==="warn"?(T(),O("span",n0,"i")):U.status==="manual"?(T(),O("span",s0,"•")):se("",!0)],2),p("div",r0,[p("div",{class:De(["text",{muted:U.status==="skip"}])},H(U.text),3),U.tip?(T(),O("div",i0,H(U.tip),1)):se("",!0)])]))),128))]),N.commands&&N.commands.length?(T(),O("div",o0,[I[1]||(I[1]=p("div",{class:"cmd-title"},"Commands",-1)),p("pre",a0,[p("code",null,H(N.commands.join(`
+`)),1)])])):se("",!0)],512),[[ph,z(N)]])],2))),128))]))}},c0=Me(l0,[["__scopeId","data-v-836c96c6"]]),u0={class:"pub"},d0={key:0,class:"muted"},p0={key:1,class:"muted"},f0={key:2,class:"layout"},h0={class:"side"},m0={class:"main"},g0={class:"card"},_0={class:"row2"},v0={class:"field"},y0={class:"field"},b0={class:"row2"},w0={class:"field"},k0={class:"field"},E0={class:"row2"},x0={class:"field"},S0={class:"field"},A0=["value"],T0={class:"row2"},R0={class:"field"},C0={class:"field"},I0={class:"row2"},L0={class:"field"},P0={class:"field"},O0={class:"field"},D0={class:"field"},N0={class:"field"},$0={class:"field"},M0={class:"row2"},V0={class:"field"},B0={class:"field"},j0={class:"field"},G0={class:"status"},U0={key:0,class:"muted"},H0={key:0,class:"err"},F0={key:1,class:"err"},z0={key:2,class:"err"},W0={key:3,class:"hint"},q0={class:"hint-row"},K0=["href"],Y0=["href"],X0=["disabled"],J0={class:"card"},Z0={key:0,class:"pre"},Q0={key:1,class:"muted"},ew={class:"actions"},tw=["disabled"],nw=["disabled"],sw=["href"],rw=["href"],iw={key:2,class:"copied"},Bi="https://github.com/vixcpp/registry",ow={__name:"RegistryPublish",setup(e){const t=de(!0),n=de(""),s=de(null),r=de(new Map),i=de(""),o=de(""),l=de(""),a=de(""),c=de(""),u=de("MIT"),d=de("header-only"),f=de("vix.json"),h=de("main"),y=de(""),w=de(""),A=de(""),S=de(""),L=de(""),g=de(""),v=de(""),V=de("");function Y(R){return(R||"").toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9._-]/g,"")}const ne=ue(()=>Y(o.value)),z=ue(()=>Y(l.value)),j=ue(()=>{const R=(a.value||"").trim();return R?`v${R}`:""}),he=ue(()=>/[\\/]/.test(o.value)||/[\\/]/.test(l.value)),J=ue(()=>!ne.value||!z.value?"":`${ne.value}/${z.value}`),G=ue(()=>!ne.value||!z.value?"":`${ne.value}.${z.value}.json`),x=ue(()=>{const R=G.value;return R?`index/${R}`:""}),D=ue(()=>{const R=J.value;return R&&r.value.get(R)||null}),I=ue(()=>{const R=D.value,k=a.value.trim();return!R||!k?!1:!!(R.versions&&typeof R.versions=="object"&&R.versions[k])});function N(R){const k=[];let P="";for(let M=0;M="0"&&W<="9"){P+=W;continue}if(W==="."){P&&(k.push(parseInt(P,10)),P="");continue}break}for(P&&k.push(parseInt(P,10));k.length<3;)k.push(0);return k}function U(R,k){const P=N(R),M=N(k),W=Math.max(P.length,M.length);for(let F=0;Foe)return 1}return 0}function q(R){return(R||"").split(",").map(k=>k.trim()).filter(Boolean)}function Z(){return new Date().toISOString()}const le=ue(()=>D.value?`${Bi}/blob/main/${x.value}`:""),ve=ue(()=>D.value?`${Bi}/edit/main/${x.value}`:"");async function Ie(R){try{await navigator.clipboard.writeText(R)}catch{const k=document.createElement("textarea");k.value=R,document.body.appendChild(k),k.select(),document.execCommand("copy"),document.body.removeChild(k)}}async function pe(R){V.value=R,window.setTimeout(()=>{V.value===R&&(V.value="")},1400)}function Pt(){return a.value.trim()?{tag:j.value,commit:v.value.trim(),...c.value.trim()?{notes:c.value.trim()}:{},publishedAt:Z()}:null}const Ae=ue(()=>{const R=Pt();return R?JSON.stringify(R,null,2)+`
+`:""});function qe(){const R=ne.value,k=z.value,P=a.value.trim(),M=D.value?JSON.parse(JSON.stringify(D.value)):{name:k,namespace:R,displayName:k,description:"",keywords:[],license:"MIT",repo:{url:i.value.trim(),defaultBranch:h.value.trim()||"main"},type:"header-only",manifestPath:"vix.json",homepage:i.value.trim(),maintainers:[{name:"",github:""}],versions:{}};M.name=k,M.namespace=R,M.displayName=(S.value.trim()||M.displayName||k).toString(),M.description=(w.value.trim()||M.description||"").toString();const W=q(A.value);W.length&&(M.keywords=W),M.license=(u.value.trim()||M.license||"MIT").toString(),M.type=d.value,M.manifestPath=(f.value.trim()||M.manifestPath||"vix.json").toString();const F=i.value.trim()||M.repo&&M.repo.url||"";M.repo={url:F,defaultBranch:(h.value.trim()||M.repo&&M.repo.defaultBranch||"main").toString()},M.homepage=(y.value.trim()||F).toString();const B=L.value.trim(),oe=g.value.trim();if((B||oe)&&(M.maintainers=[{name:B||"",github:oe||""}]),(!M.versions||typeof M.versions!="object")&&(M.versions={}),P){M.versions[P]=Pt();const te=typeof M.latest=="string"?M.latest:"";(!te||U(P,te)>0)&&(M.latest=P)}return M}const $=ue(()=>!ne.value||!z.value||!a.value.trim()?"":JSON.stringify(qe(),null,2)+`
+`),ee=ue(()=>{const R=[];return i.value.trim()||R.push("repoUrl"),ne.value||R.push("namespace"),z.value||R.push("name"),a.value.trim()||R.push("version"),v.value.trim()||R.push("commit"),R}),Q=ue(()=>!(!$.value||ee.value.length||I.value||he.value)),re=ue(()=>!D.value),ke=ue(()=>{if(!Q.value)return"";const R=encodeURIComponent($.value);return`${Bi}/new/main/${x.value}?value=${R}`});async function _(){$.value&&(await Ie($.value),await pe("Copied entry JSON"))}async function b(){x.value&&(await Ie(x.value),await pe("Copied file path"))}async function C(){Ae.value&&(await Ie(Ae.value),await pe("Copied versions[version] block"))}return _n(async()=>{try{const{data:R}=await na();s.value=R;const k=new Map,P=Array.isArray(R?.entries)?R.entries:[];for(const M of P){const W=M?.namespace||"",F=M?.name||"";!W||!F||k.set(`${W}/${F}`,M)}r.value=k}catch{n.value="cannot_load_registry"}finally{t.value=!1}}),(R,k)=>(T(),O("section",u0,[k[37]||(k[37]=In(`

Publish a package

With Vix CLI, publishing is simple and offline-first. You create your library, tag a version, then publish.

    vix new tree --lib
     vix publish 0.2.0 --notes ""
-      
Prefer the CLI? Read vix publish documentation →
`,1)),t.value?(A(),O("div",d0,"Loading registry…")):n.value?(A(),O("div",p0,"Error: "+H(n.value),1)):(A(),O("div",f0,[p("aside",h0,[Se(c0,{"repo-url":i.value,namespace:o.value,name:l.value,version:a.value,commit:v.value,license:u.value,type:d.value,"manifest-path":f.value,"display-name":S.value,description:w.value,keywords:T.value,homepage:y.value,"maintainer-name":L.value,"maintainer-github":g.value,"existing-entry":D.value},null,8,["repo-url","namespace","name","version","commit","license","type","manifest-path","display-name","description","keywords","homepage","maintainer-name","maintainer-github","existing-entry"])]),p("main",m0,[p("div",g0,[k[34]||(k[34]=p("h2",{class:"h2"},"Package info",-1)),p("div",_0,[p("label",v0,[k[16]||(k[16]=p("span",{class:"label"},"Repo URL (https)",-1)),Fe(p("input",{"onUpdate:modelValue":k[0]||(k[0]=P=>i.value=P),class:"in",placeholder:"https://github.com/user/repo"},null,512),[[et,i.value,void 0,{trim:!0}]])]),p("label",y0,[k[17]||(k[17]=p("span",{class:"label"},"Default branch",-1)),Fe(p("input",{"onUpdate:modelValue":k[1]||(k[1]=P=>h.value=P),class:"in",placeholder:"main"},null,512),[[et,h.value,void 0,{trim:!0}]])])]),p("div",b0,[p("label",w0,[k[18]||(k[18]=p("span",{class:"label"},"Namespace",-1)),Fe(p("input",{"onUpdate:modelValue":k[2]||(k[2]=P=>o.value=P),class:"in",placeholder:"gaspardkirira"},null,512),[[et,o.value,void 0,{trim:!0}]])]),p("label",k0,[k[19]||(k[19]=p("span",{class:"label"},"Name",-1)),Fe(p("input",{"onUpdate:modelValue":k[3]||(k[3]=P=>l.value=P),class:"in",placeholder:"tree"},null,512),[[et,l.value,void 0,{trim:!0}]])])]),p("div",E0,[p("label",x0,[k[20]||(k[20]=p("span",{class:"label"},"Version",-1)),Fe(p("input",{"onUpdate:modelValue":k[4]||(k[4]=P=>a.value=P),class:"in",placeholder:"0.7.0"},null,512),[[et,a.value,void 0,{trim:!0}]])]),p("label",S0,[k[21]||(k[21]=p("span",{class:"label"},"Tag",-1)),p("input",{value:j.value,class:"in",disabled:""},null,8,T0)])]),p("div",A0,[p("label",R0,[k[22]||(k[22]=p("span",{class:"label"},"Commit (required)",-1)),Fe(p("input",{"onUpdate:modelValue":k[5]||(k[5]=P=>v.value=P),class:"in",placeholder:"18363babf297b4050d2585596238012faee65d52"},null,512),[[et,v.value,void 0,{trim:!0}]])]),p("label",C0,[k[23]||(k[23]=p("span",{class:"label"},"License",-1)),Fe(p("input",{"onUpdate:modelValue":k[6]||(k[6]=P=>u.value=P),class:"in",placeholder:"MIT"},null,512),[[et,u.value,void 0,{trim:!0}]])])]),p("div",I0,[p("label",L0,[k[25]||(k[25]=p("span",{class:"label"},"Type",-1)),Fe(p("select",{"onUpdate:modelValue":k[7]||(k[7]=P=>d.value=P),class:"in"},[...k[24]||(k[24]=[p("option",{value:"header-only"},"header-only",-1),p("option",{value:"cmake"},"cmake",-1),p("option",{value:"vix-module"},"vix-module",-1)])],512),[[Ah,d.value]])]),p("label",P0,[k[26]||(k[26]=p("span",{class:"label"},"manifestPath",-1)),Fe(p("input",{"onUpdate:modelValue":k[8]||(k[8]=P=>f.value=P),class:"in",placeholder:"vix.json"},null,512),[[et,f.value,void 0,{trim:!0}]])])]),p("label",O0,[k[27]||(k[27]=p("span",{class:"label"},"Display name (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[9]||(k[9]=P=>S.value=P),class:"in",placeholder:"tree"},null,512),[[et,S.value,void 0,{trim:!0}]])]),p("label",D0,[k[28]||(k[28]=p("span",{class:"label"},"Description (optional)",-1)),Fe(p("textarea",{"onUpdate:modelValue":k[10]||(k[10]=P=>w.value=P),class:"in ta",placeholder:"One sentence description"},null,512),[[et,w.value,void 0,{trim:!0}]])]),p("label",N0,[k[29]||(k[29]=p("span",{class:"label"},"Keywords (comma separated)",-1)),Fe(p("input",{"onUpdate:modelValue":k[11]||(k[11]=P=>T.value=P),class:"in",placeholder:"c++, header-only, demo, registry"},null,512),[[et,T.value,void 0,{trim:!0}]])]),p("label",$0,[k[30]||(k[30]=p("span",{class:"label"},"Homepage (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[12]||(k[12]=P=>y.value=P),class:"in",placeholder:"https://example.com"},null,512),[[et,y.value,void 0,{trim:!0}]])]),p("div",M0,[p("label",V0,[k[31]||(k[31]=p("span",{class:"label"},"Maintainer name (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[13]||(k[13]=P=>L.value=P),class:"in",placeholder:"Gaspard Kirira"},null,512),[[et,L.value,void 0,{trim:!0}]])]),p("label",B0,[k[32]||(k[32]=p("span",{class:"label"},"Maintainer GitHub (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[14]||(k[14]=P=>g.value=P),class:"in",placeholder:"GaspardKirira"},null,512),[[et,g.value,void 0,{trim:!0}]])])]),p("label",j0,[k[33]||(k[33]=p("span",{class:"label"},"Release notes (optional)",-1)),Fe(p("textarea",{"onUpdate:modelValue":k[15]||(k[15]=P=>c.value=P),class:"in ta",placeholder:"Add count_leaves helper"},null,512),[[et,c.value,void 0,{trim:!0}]])]),p("div",G0,[p("div",{class:De(["pill",re.value?"pill-new":"pill-exists"])},H(re.value?"New package":"Existing package"),3),D.value?.latest?(A(),O("div",U0," Latest: "+H(D.value.latest),1)):se("",!0)]),ee.value.length?(A(),O("div",H0," Missing: "+H(ee.value.join(", ")),1)):se("",!0),I.value?(A(),O("div",F0," This version already exists in the registry entry. ")):se("",!0),he.value?(A(),O("div",z0,' Namespace and name must not contain "/" ')):se("",!0),D.value?(A(),O("div",W0,[p("div",q0,[p("a",{class:"link",href:le.value,target:"_blank",rel:"noreferrer"}," Open existing entry on GitHub ",8,K0),p("a",{class:"link",href:ve.value,target:"_blank",rel:"noreferrer"}," Edit existing entry on GitHub ",8,Y0),p("button",{class:"btn",disabled:!Te.value,onClick:C}," Copy versions["+H(a.value||"version")+"] block ",9,X0)])])):se("",!0)]),p("div",J0,[k[35]||(k[35]=p("h2",{class:"h2"},"Dry run preview",-1)),$.value?(A(),O("pre",Q0,[p("code",null,H($.value),1)])):(A(),O("div",Z0,"Fill namespace, name, and version to preview.")),p("div",ew,[p("button",{class:"btn",disabled:!$.value,onClick:_},"Copy entry JSON",8,tw),p("button",{class:"btn",disabled:!x.value,onClick:b},"Copy file path",8,nw),re.value?(A(),O("a",{key:0,class:De(["btn primary",{disabled:!Z.value}]),href:Z.value?ke.value:null,target:"_blank",rel:"noreferrer"}," Open GitHub new file ",10,sw)):(A(),O("a",{key:1,class:De(["btn primary",{disabled:!Z.value}]),href:Z.value?ve.value:null,target:"_blank",rel:"noreferrer"}," Open GitHub edit file ",10,rw))]),V.value?(A(),O("div",iw,H(V.value),1)):se("",!0),k[36]||(k[36]=p("p",{class:"muted small"}," Tip: for existing packages, open edit page and paste the copied versions block. ",-1))])])]))]))}},aw=Me(ow,[["__scopeId","data-v-e9e5b3c3"]]);function sa(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Fn=sa();function ed(e){Fn=e}var Us={exec:()=>null};function Re(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(r,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(kt.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,t)};return s}var lw=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},cw=/^(?:[ \t]*(?:\n|$))+/,uw=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,dw=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ir=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,pw=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ra=/(?:[*+-]|\d{1,9}[.)])/,td=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,nd=Re(td).replace(/bull/g,ra).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),fw=Re(td).replace(/bull/g,ra).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ia=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,hw=/^[^\n]+/,oa=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,mw=Re(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",oa).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),gw=Re(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ra).getRegex(),_i="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",aa=/|$))/,_w=Re("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",aa).replace("tag",_i).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),sd=Re(ia).replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex(),vw=Re(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",sd).getRegex(),la={blockquote:vw,code:uw,def:mw,fences:dw,heading:pw,hr:ir,html:_w,lheading:nd,list:gw,newline:cw,paragraph:sd,table:Us,text:hw},Ml=Re("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex(),yw={...la,lheading:fw,table:Ml,paragraph:Re(ia).replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ml).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex()},bw={...la,html:Re(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",aa).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Us,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Re(ia).replace("hr",ir).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",nd).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ww=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,kw=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,rd=/^( {2,}|\\)\n(?!\s*$)/,Ew=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",lw?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),ad=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Rw=Re(ad,"u").replace(/punct/g,vi).getRegex(),Cw=Re(ad,"u").replace(/punct/g,od).getRegex(),ld="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Iw=Re(ld,"gu").replace(/notPunctSpace/g,id).replace(/punctSpace/g,ca).replace(/punct/g,vi).getRegex(),Lw=Re(ld,"gu").replace(/notPunctSpace/g,Tw).replace(/punctSpace/g,Sw).replace(/punct/g,od).getRegex(),Pw=Re("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,id).replace(/punctSpace/g,ca).replace(/punct/g,vi).getRegex(),Ow=Re(/\\(punct)/,"gu").replace(/punct/g,vi).getRegex(),Dw=Re(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Nw=Re(aa).replace("(?:-->|$)","-->").getRegex(),$w=Re("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Nw).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Gr=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,Mw=Re(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",Gr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),cd=Re(/^!?\[(label)\]\[(ref)\]/).replace("label",Gr).replace("ref",oa).getRegex(),ud=Re(/^!?\[(ref)\](?:\[\])?/).replace("ref",oa).getRegex(),Vw=Re("reflink|nolink(?!\\()","g").replace("reflink",cd).replace("nolink",ud).getRegex(),Vl=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ua={_backpedal:Us,anyPunctuation:Ow,autolink:Dw,blockSkip:Aw,br:rd,code:kw,del:Us,emStrongLDelim:Rw,emStrongRDelimAst:Iw,emStrongRDelimUnd:Pw,escape:ww,link:Mw,nolink:ud,punctuation:xw,reflink:cd,reflinkSearch:Vw,tag:$w,text:Ew,url:Us},Bw={...ua,link:Re(/^!?\[(label)\]\((.*?)\)/).replace("label",Gr).getRegex(),reflink:Re(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Gr).getRegex()},vo={...ua,emStrongRDelimAst:Lw,emStrongLDelim:Cw,url:Re(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Vl).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Re(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Bl=e=>Gw[e];function ln(e,t){if(t){if(kt.escapeTest.test(e))return e.replace(kt.escapeReplace,Bl)}else if(kt.escapeTestNoEncode.test(e))return e.replace(kt.escapeReplaceNoEncode,Bl);return e}function jl(e){try{e=encodeURI(e).replace(kt.percentDecode,"%")}catch{return null}return e}function Gl(e,t){let n=e.replace(kt.findPipe,(i,o,l)=>{let a=!1,c=o;for(;--c>=0&&l[c]==="\\";)a=!a;return a?"|":" |"}),s=n.split(kt.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function Ul(e,t,n,s,r){let i=t.href,o=t.title||null,l=e[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let a={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,a}function Hw(e,t,n){let s=e.match(n.other.indentCodeCompensation);if(s===null)return t;let r=s[1];return t.split(` +
Prefer the CLI? Read vix publish documentation →
`,1)),t.value?(T(),O("div",d0,"Loading registry…")):n.value?(T(),O("div",p0,"Error: "+H(n.value),1)):(T(),O("div",f0,[p("aside",h0,[Se(c0,{"repo-url":i.value,namespace:o.value,name:l.value,version:a.value,commit:v.value,license:u.value,type:d.value,"manifest-path":f.value,"display-name":S.value,description:w.value,keywords:A.value,homepage:y.value,"maintainer-name":L.value,"maintainer-github":g.value,"existing-entry":D.value},null,8,["repo-url","namespace","name","version","commit","license","type","manifest-path","display-name","description","keywords","homepage","maintainer-name","maintainer-github","existing-entry"])]),p("main",m0,[p("div",g0,[k[34]||(k[34]=p("h2",{class:"h2"},"Package info",-1)),p("div",_0,[p("label",v0,[k[16]||(k[16]=p("span",{class:"label"},"Repo URL (https)",-1)),Fe(p("input",{"onUpdate:modelValue":k[0]||(k[0]=P=>i.value=P),class:"in",placeholder:"https://github.com/user/repo"},null,512),[[et,i.value,void 0,{trim:!0}]])]),p("label",y0,[k[17]||(k[17]=p("span",{class:"label"},"Default branch",-1)),Fe(p("input",{"onUpdate:modelValue":k[1]||(k[1]=P=>h.value=P),class:"in",placeholder:"main"},null,512),[[et,h.value,void 0,{trim:!0}]])])]),p("div",b0,[p("label",w0,[k[18]||(k[18]=p("span",{class:"label"},"Namespace",-1)),Fe(p("input",{"onUpdate:modelValue":k[2]||(k[2]=P=>o.value=P),class:"in",placeholder:"gaspardkirira"},null,512),[[et,o.value,void 0,{trim:!0}]])]),p("label",k0,[k[19]||(k[19]=p("span",{class:"label"},"Name",-1)),Fe(p("input",{"onUpdate:modelValue":k[3]||(k[3]=P=>l.value=P),class:"in",placeholder:"tree"},null,512),[[et,l.value,void 0,{trim:!0}]])])]),p("div",E0,[p("label",x0,[k[20]||(k[20]=p("span",{class:"label"},"Version",-1)),Fe(p("input",{"onUpdate:modelValue":k[4]||(k[4]=P=>a.value=P),class:"in",placeholder:"0.7.0"},null,512),[[et,a.value,void 0,{trim:!0}]])]),p("label",S0,[k[21]||(k[21]=p("span",{class:"label"},"Tag",-1)),p("input",{value:j.value,class:"in",disabled:""},null,8,A0)])]),p("div",T0,[p("label",R0,[k[22]||(k[22]=p("span",{class:"label"},"Commit (required)",-1)),Fe(p("input",{"onUpdate:modelValue":k[5]||(k[5]=P=>v.value=P),class:"in",placeholder:"18363babf297b4050d2585596238012faee65d52"},null,512),[[et,v.value,void 0,{trim:!0}]])]),p("label",C0,[k[23]||(k[23]=p("span",{class:"label"},"License",-1)),Fe(p("input",{"onUpdate:modelValue":k[6]||(k[6]=P=>u.value=P),class:"in",placeholder:"MIT"},null,512),[[et,u.value,void 0,{trim:!0}]])])]),p("div",I0,[p("label",L0,[k[25]||(k[25]=p("span",{class:"label"},"Type",-1)),Fe(p("select",{"onUpdate:modelValue":k[7]||(k[7]=P=>d.value=P),class:"in"},[...k[24]||(k[24]=[p("option",{value:"header-only"},"header-only",-1),p("option",{value:"cmake"},"cmake",-1),p("option",{value:"vix-module"},"vix-module",-1)])],512),[[Th,d.value]])]),p("label",P0,[k[26]||(k[26]=p("span",{class:"label"},"manifestPath",-1)),Fe(p("input",{"onUpdate:modelValue":k[8]||(k[8]=P=>f.value=P),class:"in",placeholder:"vix.json"},null,512),[[et,f.value,void 0,{trim:!0}]])])]),p("label",O0,[k[27]||(k[27]=p("span",{class:"label"},"Display name (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[9]||(k[9]=P=>S.value=P),class:"in",placeholder:"tree"},null,512),[[et,S.value,void 0,{trim:!0}]])]),p("label",D0,[k[28]||(k[28]=p("span",{class:"label"},"Description (optional)",-1)),Fe(p("textarea",{"onUpdate:modelValue":k[10]||(k[10]=P=>w.value=P),class:"in ta",placeholder:"One sentence description"},null,512),[[et,w.value,void 0,{trim:!0}]])]),p("label",N0,[k[29]||(k[29]=p("span",{class:"label"},"Keywords (comma separated)",-1)),Fe(p("input",{"onUpdate:modelValue":k[11]||(k[11]=P=>A.value=P),class:"in",placeholder:"c++, header-only, demo, registry"},null,512),[[et,A.value,void 0,{trim:!0}]])]),p("label",$0,[k[30]||(k[30]=p("span",{class:"label"},"Homepage (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[12]||(k[12]=P=>y.value=P),class:"in",placeholder:"https://example.com"},null,512),[[et,y.value,void 0,{trim:!0}]])]),p("div",M0,[p("label",V0,[k[31]||(k[31]=p("span",{class:"label"},"Maintainer name (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[13]||(k[13]=P=>L.value=P),class:"in",placeholder:"Gaspard Kirira"},null,512),[[et,L.value,void 0,{trim:!0}]])]),p("label",B0,[k[32]||(k[32]=p("span",{class:"label"},"Maintainer GitHub (optional)",-1)),Fe(p("input",{"onUpdate:modelValue":k[14]||(k[14]=P=>g.value=P),class:"in",placeholder:"GaspardKirira"},null,512),[[et,g.value,void 0,{trim:!0}]])])]),p("label",j0,[k[33]||(k[33]=p("span",{class:"label"},"Release notes (optional)",-1)),Fe(p("textarea",{"onUpdate:modelValue":k[15]||(k[15]=P=>c.value=P),class:"in ta",placeholder:"Add count_leaves helper"},null,512),[[et,c.value,void 0,{trim:!0}]])]),p("div",G0,[p("div",{class:De(["pill",re.value?"pill-new":"pill-exists"])},H(re.value?"New package":"Existing package"),3),D.value?.latest?(T(),O("div",U0," Latest: "+H(D.value.latest),1)):se("",!0)]),ee.value.length?(T(),O("div",H0," Missing: "+H(ee.value.join(", ")),1)):se("",!0),I.value?(T(),O("div",F0," This version already exists in the registry entry. ")):se("",!0),he.value?(T(),O("div",z0,' Namespace and name must not contain "/" ')):se("",!0),D.value?(T(),O("div",W0,[p("div",q0,[p("a",{class:"link",href:le.value,target:"_blank",rel:"noreferrer"}," Open existing entry on GitHub ",8,K0),p("a",{class:"link",href:ve.value,target:"_blank",rel:"noreferrer"}," Edit existing entry on GitHub ",8,Y0),p("button",{class:"btn",disabled:!Ae.value,onClick:C}," Copy versions["+H(a.value||"version")+"] block ",9,X0)])])):se("",!0)]),p("div",J0,[k[35]||(k[35]=p("h2",{class:"h2"},"Dry run preview",-1)),$.value?(T(),O("pre",Z0,[p("code",null,H($.value),1)])):(T(),O("div",Q0,"Fill namespace, name, and version to preview.")),p("div",ew,[p("button",{class:"btn",disabled:!$.value,onClick:_},"Copy entry JSON",8,tw),p("button",{class:"btn",disabled:!x.value,onClick:b},"Copy file path",8,nw),re.value?(T(),O("a",{key:0,class:De(["btn primary",{disabled:!Q.value}]),href:Q.value?ke.value:null,target:"_blank",rel:"noreferrer"}," Open GitHub new file ",10,sw)):(T(),O("a",{key:1,class:De(["btn primary",{disabled:!Q.value}]),href:Q.value?ve.value:null,target:"_blank",rel:"noreferrer"}," Open GitHub edit file ",10,rw))]),V.value?(T(),O("div",iw,H(V.value),1)):se("",!0),k[36]||(k[36]=p("p",{class:"muted small"}," Tip: for existing packages, open edit page and paste the copied versions block. ",-1))])])]))]))}},aw=Me(ow,[["__scopeId","data-v-e9e5b3c3"]]);function sa(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Fn=sa();function ed(e){Fn=e}var Us={exec:()=>null};function Re(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(r,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(kt.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,t)};return s}var lw=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},cw=/^(?:[ \t]*(?:\n|$))+/,uw=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,dw=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ir=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,pw=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ra=/(?:[*+-]|\d{1,9}[.)])/,td=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,nd=Re(td).replace(/bull/g,ra).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),fw=Re(td).replace(/bull/g,ra).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ia=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,hw=/^[^\n]+/,oa=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,mw=Re(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",oa).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),gw=Re(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ra).getRegex(),_i="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",aa=/|$))/,_w=Re("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",aa).replace("tag",_i).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),sd=Re(ia).replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex(),vw=Re(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",sd).getRegex(),la={blockquote:vw,code:uw,def:mw,fences:dw,heading:pw,hr:ir,html:_w,lheading:nd,list:gw,newline:cw,paragraph:sd,table:Us,text:hw},Ml=Re("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex(),yw={...la,lheading:fw,table:Ml,paragraph:Re(ia).replace("hr",ir).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ml).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",_i).getRegex()},bw={...la,html:Re(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",aa).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Us,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Re(ia).replace("hr",ir).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",nd).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ww=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,kw=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,rd=/^( {2,}|\\)\n(?!\s*$)/,Ew=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",lw?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),ad=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Rw=Re(ad,"u").replace(/punct/g,vi).getRegex(),Cw=Re(ad,"u").replace(/punct/g,od).getRegex(),ld="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Iw=Re(ld,"gu").replace(/notPunctSpace/g,id).replace(/punctSpace/g,ca).replace(/punct/g,vi).getRegex(),Lw=Re(ld,"gu").replace(/notPunctSpace/g,Aw).replace(/punctSpace/g,Sw).replace(/punct/g,od).getRegex(),Pw=Re("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,id).replace(/punctSpace/g,ca).replace(/punct/g,vi).getRegex(),Ow=Re(/\\(punct)/,"gu").replace(/punct/g,vi).getRegex(),Dw=Re(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Nw=Re(aa).replace("(?:-->|$)","-->").getRegex(),$w=Re("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Nw).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Gr=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,Mw=Re(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",Gr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),cd=Re(/^!?\[(label)\]\[(ref)\]/).replace("label",Gr).replace("ref",oa).getRegex(),ud=Re(/^!?\[(ref)\](?:\[\])?/).replace("ref",oa).getRegex(),Vw=Re("reflink|nolink(?!\\()","g").replace("reflink",cd).replace("nolink",ud).getRegex(),Vl=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ua={_backpedal:Us,anyPunctuation:Ow,autolink:Dw,blockSkip:Tw,br:rd,code:kw,del:Us,emStrongLDelim:Rw,emStrongRDelimAst:Iw,emStrongRDelimUnd:Pw,escape:ww,link:Mw,nolink:ud,punctuation:xw,reflink:cd,reflinkSearch:Vw,tag:$w,text:Ew,url:Us},Bw={...ua,link:Re(/^!?\[(label)\]\((.*?)\)/).replace("label",Gr).getRegex(),reflink:Re(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Gr).getRegex()},vo={...ua,emStrongRDelimAst:Lw,emStrongLDelim:Cw,url:Re(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Vl).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Re(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Bl=e=>Gw[e];function ln(e,t){if(t){if(kt.escapeTest.test(e))return e.replace(kt.escapeReplace,Bl)}else if(kt.escapeTestNoEncode.test(e))return e.replace(kt.escapeReplaceNoEncode,Bl);return e}function jl(e){try{e=encodeURI(e).replace(kt.percentDecode,"%")}catch{return null}return e}function Gl(e,t){let n=e.replace(kt.findPipe,(i,o,l)=>{let a=!1,c=o;for(;--c>=0&&l[c]==="\\";)a=!a;return a?"|":" |"}),s=n.split(kt.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function Ul(e,t,n,s,r){let i=t.href,o=t.title||null,l=e[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let a={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,a}function Hw(e,t,n){let s=e.match(n.other.indentCodeCompensation);if(s===null)return t;let r=s[1];return t.split(` `).map(i=>{let o=i.match(n.other.beginningSpace);if(o===null)return i;let[l]=o;return l.length>=r.length?i.slice(r.length):i}).join(` `)}var Ur=class{options;rules;lexer;constructor(e){this.options=e||Fn}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:xs(n,` `)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=Hw(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=xs(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:xs(t[0],` @@ -106,9 +106,9 @@ ${u}`:u;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo `);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),o=!1;for(;e;){let a=!1,c="",u="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let d=t[2].split(` `,1)[0].replace(this.rules.other.listReplaceTabs,w=>" ".repeat(3*w.length)),f=e.split(` `,1)[0],h=!d.trim(),y=0;if(this.options.pedantic?(y=2,u=d.trimStart()):h?y=t[1].length+1:(y=t[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,u=d.slice(y),y+=t[1].length),h&&this.rules.other.blankLine.test(f)&&(c+=f+` -`,e=e.substring(f.length+1),a=!0),!a){let w=this.rules.other.nextBulletRegex(y),T=this.rules.other.hrRegex(y),S=this.rules.other.fencesBeginRegex(y),L=this.rules.other.headingBeginRegex(y),g=this.rules.other.htmlBeginRegex(y);for(;e;){let v=e.split(` -`,1)[0],V;if(f=v,this.options.pedantic?(f=f.replace(this.rules.other.listReplaceNesting," "),V=f):V=f.replace(this.rules.other.tabCharGlobal," "),S.test(f)||L.test(f)||g.test(f)||w.test(f)||T.test(f))break;if(V.search(this.rules.other.nonSpaceChar)>=y||!f.trim())u+=` -`+V.slice(y);else{if(h||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(d)||L.test(d)||T.test(d))break;u+=` +`,e=e.substring(f.length+1),a=!0),!a){let w=this.rules.other.nextBulletRegex(y),A=this.rules.other.hrRegex(y),S=this.rules.other.fencesBeginRegex(y),L=this.rules.other.headingBeginRegex(y),g=this.rules.other.htmlBeginRegex(y);for(;e;){let v=e.split(` +`,1)[0],V;if(f=v,this.options.pedantic?(f=f.replace(this.rules.other.listReplaceNesting," "),V=f):V=f.replace(this.rules.other.tabCharGlobal," "),S.test(f)||L.test(f)||g.test(f)||w.test(f)||A.test(f))break;if(V.search(this.rules.other.nonSpaceChar)>=y||!f.trim())u+=` +`+V.slice(y);else{if(h||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(d)||L.test(d)||A.test(d))break;u+=` `+f}!h&&!f.trim()&&(h=!0),c+=v+` `,e=e.substring(v.length+1),d=V.slice(y)}}r.loose||(o?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(u),loose:!1,text:u,tokens:[]}),r.raw+=c}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items){if(this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]),a.task){if(a.text=a.text.replace(this.rules.other.listReplaceTask,""),a.tokens[0]?.type==="text"||a.tokens[0]?.type==="paragraph"){a.tokens[0].raw=a.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),a.tokens[0].text=a.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}}let c=this.rules.other.listTaskCheckbox.exec(a.raw);if(c){let u={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};a.checked=u.checked,r.loose?a.tokens[0]&&["paragraph","text"].includes(a.tokens[0].type)&&"tokens"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=u.raw+a.tokens[0].raw,a.tokens[0].text=u.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(u)):a.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):a.tokens.unshift(u)}}if(!r.loose){let c=a.tokens.filter(d=>d.type==="space"),u=c.length>0&&c.some(d=>this.rules.other.anyLine.test(d.raw));r.loose=u}}if(r.loose)for(let a of r.items){a.loose=!0;for(let c of a.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Gl(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(` `):[],i={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push("right"):this.rules.other.tableAlignCenter.test(o)?i.align.push("center"):this.rules.other.tableAlignLeft.test(o)?i.align.push("left"):i.align.push(null);for(let o=0;o({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[a]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` @@ -145,10 +145,10 @@ ${this.parser.parse(e)} ${e} `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` `}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${ln(e,!0)}`}br(e){return"
"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=jl(e);if(r===null)return s;e=r;let i='
",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=jl(e);if(r===null)return ln(n);e=r;let i=`${n}{let o=r[i].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let l=r.renderer.apply(this,o);return l===!1&&(l=i.apply(this,o)),l}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new Hr(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,l=n.renderer[o],a=r[o];r[o]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=a.apply(r,c)),u||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Ur(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,l=n.tokenizer[o],a=r[o];r[o]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=a.apply(r,c)),u}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Ps;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,l=n.hooks[o],a=r[o];Ps.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&Ps.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await l.call(r,c);return a.call(r,d)})();let u=l.call(r,c);return a.call(r,u)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let d=await l.apply(r,c);return d===!1&&(d=await a.apply(r,c)),d})();let u=l.apply(r,c);return u===!1&&(u=a.apply(r,c)),u}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let l=[];return l.push(i.call(this,o)),r&&(l=l.concat(r.call(this,o))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return jt.lex(e,t??this.defaults)}parser(e,t){return Gt.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let o=r.hooks?await r.hooks.preprocess(t):t,l=await(r.hooks?await r.hooks.provideLexer():e?jt.lex:jt.lexInline)(o,r),a=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(a,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser():e?Gt.parse:Gt.parseInline)(a,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(t=r.hooks.preprocess(t));let o=(r.hooks?r.hooks.provideLexer():e?jt.lex:jt.lexInline)(t,r);r.hooks&&(o=r.hooks.processAllTokens(o)),r.walkTokens&&this.walkTokens(o,r.walkTokens);let l=(r.hooks?r.hooks.provideParser():e?Gt.parse:Gt.parseInline)(o,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(o){return i(o)}}}onError(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let s="

An error occurred:

"+ln(n.message+"",!0)+"
";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},Hn=new Fw;function Ce(e,t){return Hn.parse(e,t)}Ce.options=Ce.setOptions=function(e){return Hn.setOptions(e),Ce.defaults=Hn.defaults,ed(Ce.defaults),Ce};Ce.getDefaults=sa;Ce.defaults=Fn;Ce.use=function(...e){return Hn.use(...e),Ce.defaults=Hn.defaults,ed(Ce.defaults),Ce};Ce.walkTokens=function(e,t){return Hn.walkTokens(e,t)};Ce.parseInline=Hn.parseInline;Ce.Parser=Gt;Ce.parser=Gt.parse;Ce.Renderer=Hr;Ce.TextRenderer=da;Ce.Lexer=jt;Ce.lexer=jt.lex;Ce.Tokenizer=Ur;Ce.Hooks=Ps;Ce.parse=Ce;Ce.options;Ce.setOptions;Ce.use;Ce.walkTokens;Ce.parseInline;Gt.parse;jt.lex;const{entries:dd,setPrototypeOf:Hl,isFrozen:zw,getPrototypeOf:Ww,getOwnPropertyDescriptor:qw}=Object;let{freeze:Et,seal:Vt,create:wo}=Object,{apply:ko,construct:Eo}=typeof Reflect<"u"&&Reflect;Et||(Et=function(t){return t});Vt||(Vt=function(t){return t});ko||(ko=function(t,n){for(var s=arguments.length,r=new Array(s>2?s-2:0),i=2;i1?n-1:0),r=1;r1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:Rr;Hl&&Hl(e,null);let s=t.length;for(;s--;){let r=t[s];if(typeof r=="string"){const i=n(r);i!==r&&(zw(t)||(t[s]=i),r=i)}e[r]=!0}return e}function Zw(e){for(let t=0;t/gm),rk=Vt(/\$\{[\w\W]*/gm),ik=Vt(/^data-[\-\w.\u00B7-\uFFFF]+$/),ok=Vt(/^aria-[\-\w]+$/),pd=Vt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ak=Vt(/^(?:\w+script|data):/i),lk=Vt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),fd=Vt(/^html$/i),ck=Vt(/^[a-z][.\w]*(-[.\w]+)+$/i);var Yl=Object.freeze({__proto__:null,ARIA_ATTR:ok,ATTR_WHITESPACE:lk,CUSTOM_ELEMENT:ck,DATA_ATTR:ik,DOCTYPE_NAME:fd,ERB_EXPR:sk,IS_ALLOWED_URI:pd,IS_SCRIPT_OR_DATA:ak,MUSTACHE_EXPR:nk,TMPLIT_EXPR:rk});const Cs={element:1,text:3,progressingInstruction:7,comment:8,document:9},uk=function(){return typeof window>"u"?null:window},dk=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(s=n.getAttribute(r));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Xl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function hd(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:uk();const t=ce=>hd(ce);if(t.version="3.3.1",t.removed=[],!e||!e.document||e.document.nodeType!==Cs.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e;const s=n,r=s.currentScript,{DocumentFragment:i,HTMLTemplateElement:o,Node:l,Element:a,NodeFilter:c,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:d,DOMParser:f,trustedTypes:h}=e,y=a.prototype,w=Rs(y,"cloneNode"),T=Rs(y,"remove"),S=Rs(y,"nextSibling"),L=Rs(y,"childNodes"),g=Rs(y,"parentNode");if(typeof o=="function"){const ce=n.createElement("template");ce.content&&ce.content.ownerDocument&&(n=ce.content.ownerDocument)}let v,V="";const{implementation:Y,createNodeIterator:ne,createDocumentFragment:z,getElementsByTagName:j}=n,{importNode:he}=s;let J=Xl();t.isSupported=typeof dd=="function"&&typeof g=="function"&&Y&&Y.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:G,ERB_EXPR:x,TMPLIT_EXPR:D,DATA_ATTR:I,ARIA_ATTR:N,IS_SCRIPT_OR_DATA:U,ATTR_WHITESPACE:q,CUSTOM_ELEMENT:Q}=Yl;let{IS_ALLOWED_URI:le}=Yl,ve=null;const Ie=Ee({},[...zl,...Ui,...Hi,...Fi,...Wl]);let pe=null;const Pt=Ee({},[...ql,...zi,...Kl,..._r]);let Te=Object.seal(wo(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),qe=null,$=null;const ee=Object.seal(wo(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Z=!0,re=!0,ke=!1,_=!0,b=!1,C=!0,R=!1,k=!1,P=!1,M=!1,W=!1,F=!1,B=!0,oe=!1;const te="user-content-";let ae=!0,fe=!1,ye={},xe=null;const Ae=Ee({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let rt=null;const it=Ee({},["audio","video","img","source","image","track"]);let St=null;const Ct=Ee({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wt="http://www.w3.org/1998/Math/MathML",Ln="http://www.w3.org/2000/svg",Ge="http://www.w3.org/1999/xhtml";let ot=Ge,Wn=!1,qn=null;const sp=Ee({},[Wt,Ln,Ge],ji);let lr=Ee({},["mi","mo","mn","ms","mtext"]),cr=Ee({},["annotation-xml"]);const rp=Ee({},["title","style","font","a","script"]);let vs=null;const ip=["application/xhtml+xml","text/html"],op="text/html";let Qe=null,Kn=null;const ap=n.createElement("form"),Sa=function(E){return E instanceof RegExp||E instanceof Function},Ei=function(){let E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Kn&&Kn===E)){if((!E||typeof E!="object")&&(E={}),E=Yt(E),vs=ip.indexOf(E.PARSER_MEDIA_TYPE)===-1?op:E.PARSER_MEDIA_TYPE,Qe=vs==="application/xhtml+xml"?ji:Rr,ve=Bt(E,"ALLOWED_TAGS")?Ee({},E.ALLOWED_TAGS,Qe):Ie,pe=Bt(E,"ALLOWED_ATTR")?Ee({},E.ALLOWED_ATTR,Qe):Pt,qn=Bt(E,"ALLOWED_NAMESPACES")?Ee({},E.ALLOWED_NAMESPACES,ji):sp,St=Bt(E,"ADD_URI_SAFE_ATTR")?Ee(Yt(Ct),E.ADD_URI_SAFE_ATTR,Qe):Ct,rt=Bt(E,"ADD_DATA_URI_TAGS")?Ee(Yt(it),E.ADD_DATA_URI_TAGS,Qe):it,xe=Bt(E,"FORBID_CONTENTS")?Ee({},E.FORBID_CONTENTS,Qe):Ae,qe=Bt(E,"FORBID_TAGS")?Ee({},E.FORBID_TAGS,Qe):Yt({}),$=Bt(E,"FORBID_ATTR")?Ee({},E.FORBID_ATTR,Qe):Yt({}),ye=Bt(E,"USE_PROFILES")?E.USE_PROFILES:!1,Z=E.ALLOW_ARIA_ATTR!==!1,re=E.ALLOW_DATA_ATTR!==!1,ke=E.ALLOW_UNKNOWN_PROTOCOLS||!1,_=E.ALLOW_SELF_CLOSE_IN_ATTR!==!1,b=E.SAFE_FOR_TEMPLATES||!1,C=E.SAFE_FOR_XML!==!1,R=E.WHOLE_DOCUMENT||!1,M=E.RETURN_DOM||!1,W=E.RETURN_DOM_FRAGMENT||!1,F=E.RETURN_TRUSTED_TYPE||!1,P=E.FORCE_BODY||!1,B=E.SANITIZE_DOM!==!1,oe=E.SANITIZE_NAMED_PROPS||!1,ae=E.KEEP_CONTENT!==!1,fe=E.IN_PLACE||!1,le=E.ALLOWED_URI_REGEXP||pd,ot=E.NAMESPACE||Ge,lr=E.MATHML_TEXT_INTEGRATION_POINTS||lr,cr=E.HTML_INTEGRATION_POINTS||cr,Te=E.CUSTOM_ELEMENT_HANDLING||{},E.CUSTOM_ELEMENT_HANDLING&&Sa(E.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Te.tagNameCheck=E.CUSTOM_ELEMENT_HANDLING.tagNameCheck),E.CUSTOM_ELEMENT_HANDLING&&Sa(E.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Te.attributeNameCheck=E.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),E.CUSTOM_ELEMENT_HANDLING&&typeof E.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Te.allowCustomizedBuiltInElements=E.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),b&&(re=!1),W&&(M=!0),ye&&(ve=Ee({},Wl),pe=[],ye.html===!0&&(Ee(ve,zl),Ee(pe,ql)),ye.svg===!0&&(Ee(ve,Ui),Ee(pe,zi),Ee(pe,_r)),ye.svgFilters===!0&&(Ee(ve,Hi),Ee(pe,zi),Ee(pe,_r)),ye.mathMl===!0&&(Ee(ve,Fi),Ee(pe,Kl),Ee(pe,_r))),E.ADD_TAGS&&(typeof E.ADD_TAGS=="function"?ee.tagCheck=E.ADD_TAGS:(ve===Ie&&(ve=Yt(ve)),Ee(ve,E.ADD_TAGS,Qe))),E.ADD_ATTR&&(typeof E.ADD_ATTR=="function"?ee.attributeCheck=E.ADD_ATTR:(pe===Pt&&(pe=Yt(pe)),Ee(pe,E.ADD_ATTR,Qe))),E.ADD_URI_SAFE_ATTR&&Ee(St,E.ADD_URI_SAFE_ATTR,Qe),E.FORBID_CONTENTS&&(xe===Ae&&(xe=Yt(xe)),Ee(xe,E.FORBID_CONTENTS,Qe)),E.ADD_FORBID_CONTENTS&&(xe===Ae&&(xe=Yt(xe)),Ee(xe,E.ADD_FORBID_CONTENTS,Qe)),ae&&(ve["#text"]=!0),R&&Ee(ve,["html","head","body"]),ve.table&&(Ee(ve,["tbody"]),delete qe.tbody),E.TRUSTED_TYPES_POLICY){if(typeof E.TRUSTED_TYPES_POLICY.createHTML!="function")throw As('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof E.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw As('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');v=E.TRUSTED_TYPES_POLICY,V=v.createHTML("")}else v===void 0&&(v=dk(h,r)),v!==null&&typeof V=="string"&&(V=v.createHTML(""));Et&&Et(E),Kn=E}},Ta=Ee({},[...Ui,...Hi,...ek]),Aa=Ee({},[...Fi,...tk]),lp=function(E){let X=g(E);(!X||!X.tagName)&&(X={namespaceURI:ot,tagName:"template"});const ie=Rr(E.tagName),je=Rr(X.tagName);return qn[E.namespaceURI]?E.namespaceURI===Ln?X.namespaceURI===Ge?ie==="svg":X.namespaceURI===Wt?ie==="svg"&&(je==="annotation-xml"||lr[je]):!!Ta[ie]:E.namespaceURI===Wt?X.namespaceURI===Ge?ie==="math":X.namespaceURI===Ln?ie==="math"&&cr[je]:!!Aa[ie]:E.namespaceURI===Ge?X.namespaceURI===Ln&&!cr[je]||X.namespaceURI===Wt&&!lr[je]?!1:!Aa[ie]&&(rp[ie]||!Ta[ie]):!!(vs==="application/xhtml+xml"&&qn[E.namespaceURI]):!1},qt=function(E){Ss(t.removed,{element:E});try{g(E).removeChild(E)}catch{T(E)}},Pn=function(E,X){try{Ss(t.removed,{attribute:X.getAttributeNode(E),from:X})}catch{Ss(t.removed,{attribute:null,from:X})}if(X.removeAttribute(E),E==="is")if(M||W)try{qt(X)}catch{}else try{X.setAttribute(E,"")}catch{}},Ra=function(E){let X=null,ie=null;if(P)E=""+E;else{const Ke=Gi(E,/^[\r\n\t ]+/);ie=Ke&&Ke[0]}vs==="application/xhtml+xml"&&ot===Ge&&(E=''+E+"");const je=v?v.createHTML(E):E;if(ot===Ge)try{X=new f().parseFromString(je,vs)}catch{}if(!X||!X.documentElement){X=Y.createDocument(ot,"template",null);try{X.documentElement.innerHTML=Wn?V:je}catch{}}const ut=X.body||X.documentElement;return E&&ie&&ut.insertBefore(n.createTextNode(ie),ut.childNodes[0]||null),ot===Ge?j.call(X,R?"html":"body")[0]:R?X.documentElement:ut},Ca=function(E){return ne.call(E.ownerDocument||E,E,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},xi=function(E){return E instanceof d&&(typeof E.nodeName!="string"||typeof E.textContent!="string"||typeof E.removeChild!="function"||!(E.attributes instanceof u)||typeof E.removeAttribute!="function"||typeof E.setAttribute!="function"||typeof E.namespaceURI!="string"||typeof E.insertBefore!="function"||typeof E.hasChildNodes!="function")},Ia=function(E){return typeof l=="function"&&E instanceof l};function sn(ce,E,X){gr(ce,ie=>{ie.call(t,E,X,Kn)})}const La=function(E){let X=null;if(sn(J.beforeSanitizeElements,E,null),xi(E))return qt(E),!0;const ie=Qe(E.nodeName);if(sn(J.uponSanitizeElement,E,{tagName:ie,allowedTags:ve}),C&&E.hasChildNodes()&&!Ia(E.firstElementChild)&&_t(/<[/\w!]/g,E.innerHTML)&&_t(/<[/\w!]/g,E.textContent)||E.nodeType===Cs.progressingInstruction||C&&E.nodeType===Cs.comment&&_t(/<[/\w]/g,E.data))return qt(E),!0;if(!(ee.tagCheck instanceof Function&&ee.tagCheck(ie))&&(!ve[ie]||qe[ie])){if(!qe[ie]&&Oa(ie)&&(Te.tagNameCheck instanceof RegExp&&_t(Te.tagNameCheck,ie)||Te.tagNameCheck instanceof Function&&Te.tagNameCheck(ie)))return!1;if(ae&&!xe[ie]){const je=g(E)||E.parentNode,ut=L(E)||E.childNodes;if(ut&&je){const Ke=ut.length;for(let Tt=Ke-1;Tt>=0;--Tt){const rn=w(ut[Tt],!0);rn.__removalCount=(E.__removalCount||0)+1,je.insertBefore(rn,S(E))}}}return qt(E),!0}return E instanceof a&&!lp(E)||(ie==="noscript"||ie==="noembed"||ie==="noframes")&&_t(/<\/no(script|embed|frames)/i,E.innerHTML)?(qt(E),!0):(b&&E.nodeType===Cs.text&&(X=E.textContent,gr([G,x,D],je=>{X=Ts(X,je," ")}),E.textContent!==X&&(Ss(t.removed,{element:E.cloneNode()}),E.textContent=X)),sn(J.afterSanitizeElements,E,null),!1)},Pa=function(E,X,ie){if(B&&(X==="id"||X==="name")&&(ie in n||ie in ap))return!1;if(!(re&&!$[X]&&_t(I,X))){if(!(Z&&_t(N,X))){if(!(ee.attributeCheck instanceof Function&&ee.attributeCheck(X,E))){if(!pe[X]||$[X]){if(!(Oa(E)&&(Te.tagNameCheck instanceof RegExp&&_t(Te.tagNameCheck,E)||Te.tagNameCheck instanceof Function&&Te.tagNameCheck(E))&&(Te.attributeNameCheck instanceof RegExp&&_t(Te.attributeNameCheck,X)||Te.attributeNameCheck instanceof Function&&Te.attributeNameCheck(X,E))||X==="is"&&Te.allowCustomizedBuiltInElements&&(Te.tagNameCheck instanceof RegExp&&_t(Te.tagNameCheck,ie)||Te.tagNameCheck instanceof Function&&Te.tagNameCheck(ie))))return!1}else if(!St[X]){if(!_t(le,Ts(ie,q,""))){if(!((X==="src"||X==="xlink:href"||X==="href")&&E!=="script"&&Xw(ie,"data:")===0&&rt[E])){if(!(ke&&!_t(U,Ts(ie,q,"")))){if(ie)return!1}}}}}}}return!0},Oa=function(E){return E!=="annotation-xml"&&Gi(E,Q)},Da=function(E){sn(J.beforeSanitizeAttributes,E,null);const{attributes:X}=E;if(!X||xi(E))return;const ie={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:pe,forceKeepAttr:void 0};let je=X.length;for(;je--;){const ut=X[je],{name:Ke,namespaceURI:Tt,value:rn}=ut,Yn=Qe(Ke),Si=rn;let at=Ke==="value"?Si:Jw(Si);if(ie.attrName=Yn,ie.attrValue=at,ie.keepAttr=!0,ie.forceKeepAttr=void 0,sn(J.uponSanitizeAttribute,E,ie),at=ie.attrValue,oe&&(Yn==="id"||Yn==="name")&&(Pn(Ke,E),at=te+at),C&&_t(/((--!?|])>)|<\/(style|title|textarea)/i,at)){Pn(Ke,E);continue}if(Yn==="attributename"&&Gi(at,"href")){Pn(Ke,E);continue}if(ie.forceKeepAttr)continue;if(!ie.keepAttr){Pn(Ke,E);continue}if(!_&&_t(/\/>/i,at)){Pn(Ke,E);continue}b&&gr([G,x,D],$a=>{at=Ts(at,$a," ")});const Na=Qe(E.nodeName);if(!Pa(Na,Yn,at)){Pn(Ke,E);continue}if(v&&typeof h=="object"&&typeof h.getAttributeType=="function"&&!Tt)switch(h.getAttributeType(Na,Yn)){case"TrustedHTML":{at=v.createHTML(at);break}case"TrustedScriptURL":{at=v.createScriptURL(at);break}}if(at!==Si)try{Tt?E.setAttributeNS(Tt,Ke,at):E.setAttribute(Ke,at),xi(E)?qt(E):Fl(t.removed)}catch{Pn(Ke,E)}}sn(J.afterSanitizeAttributes,E,null)},cp=function ce(E){let X=null;const ie=Ca(E);for(sn(J.beforeSanitizeShadowDOM,E,null);X=ie.nextNode();)sn(J.uponSanitizeShadowNode,X,null),La(X),Da(X),X.content instanceof i&&ce(X.content);sn(J.afterSanitizeShadowDOM,E,null)};return t.sanitize=function(ce){let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},X=null,ie=null,je=null,ut=null;if(Wn=!ce,Wn&&(ce=""),typeof ce!="string"&&!Ia(ce))if(typeof ce.toString=="function"){if(ce=ce.toString(),typeof ce!="string")throw As("dirty is not a string, aborting")}else throw As("toString is not a function");if(!t.isSupported)return ce;if(k||Ei(E),t.removed=[],typeof ce=="string"&&(fe=!1),fe){if(ce.nodeName){const rn=Qe(ce.nodeName);if(!ve[rn]||qe[rn])throw As("root node is forbidden and cannot be sanitized in-place")}}else if(ce instanceof l)X=Ra(""),ie=X.ownerDocument.importNode(ce,!0),ie.nodeType===Cs.element&&ie.nodeName==="BODY"||ie.nodeName==="HTML"?X=ie:X.appendChild(ie);else{if(!M&&!b&&!R&&ce.indexOf("<")===-1)return v&&F?v.createHTML(ce):ce;if(X=Ra(ce),!X)return M?null:F?V:""}X&&P&&qt(X.firstChild);const Ke=Ca(fe?ce:X);for(;je=Ke.nextNode();)La(je),Da(je),je.content instanceof i&&cp(je.content);if(fe)return ce;if(M){if(W)for(ut=z.call(X.ownerDocument);X.firstChild;)ut.appendChild(X.firstChild);else ut=X;return(pe.shadowroot||pe.shadowrootmode)&&(ut=he.call(s,ut,!0)),ut}let Tt=R?X.outerHTML:X.innerHTML;return R&&ve["!doctype"]&&X.ownerDocument&&X.ownerDocument.doctype&&X.ownerDocument.doctype.name&&_t(fd,X.ownerDocument.doctype.name)&&(Tt=" -`+Tt),b&&gr([G,x,D],rn=>{Tt=Ts(Tt,rn," ")}),v&&F?v.createHTML(Tt):Tt},t.setConfig=function(){let ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ei(ce),k=!0},t.clearConfig=function(){Kn=null,k=!1},t.isValidAttribute=function(ce,E,X){Kn||Ei({});const ie=Qe(ce),je=Qe(E);return Pa(ie,je,X)},t.addHook=function(ce,E){typeof E=="function"&&Ss(J[ce],E)},t.removeHook=function(ce,E){if(E!==void 0){const X=Kw(J[ce],E);return X===-1?void 0:Yw(J[ce],X,1)[0]}return Fl(J[ce])},t.removeHooks=function(ce){J[ce]=[]},t.removeAllHooks=function(){J=Xl()},t}var pk=hd();const fk="modulepreload",hk=function(e){return"/"+e},Jl={},m=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let a=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=o?.nonce||o?.getAttribute("nonce");r=a(n.map(c=>{if(c=hk(c),c in Jl)return;Jl[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":fk,u||(f.as="script"),f.crossOrigin="",f.href=c,l&&f.setAttribute("nonce",l),document.head.appendChild(f),u)return new Promise((h,y)=>{f.addEventListener("load",h),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})};let Xe=class extends Error{constructor(t){super(t),this.name="ShikiError"}};function mk(e){return pa(e)}function pa(e){return Array.isArray(e)?gk(e):e instanceof RegExp?e:typeof e=="object"?_k(e):e}function gk(e){let t=[];for(let n=0,s=e.length;n{for(let s in n)e[s]=n[s]}),e}function gd(e){const t=~e.lastIndexOf("/")||~e.lastIndexOf("\\");return t===0?e:~t===e.length-1?gd(e.substring(0,e.length-1)):e.substr(~t+1)}var Wi=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,vr=class{static hasCaptures(e){return e===null?!1:(Wi.lastIndex=0,Wi.test(e))}static replaceCaptures(e,t,n){return e.replace(Wi,(s,r,i,o)=>{let l=n[parseInt(r||i,10)];if(l){let a=t.substring(l.start,l.end);for(;a[0]===".";)a=a.substring(1);switch(o){case"downcase":return a.toLowerCase();case"upcase":return a.toUpperCase();default:return a}}else return s})}};function _d(e,t){return et?1:0}function vd(e,t){if(e===null&&t===null)return 0;if(!e)return-1;if(!t)return 1;let n=e.length,s=t.length;if(n===s){for(let r=0;rthis._root.match(e));getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;const t=e.scopeName,s=this._cachedMatchRoot.get(t).find(r=>vk(e.parent,r.parentScopes));return s?new wd(s.fontStyle,s.foreground,s.background):null}},qi=class Cr{constructor(t,n){this.parent=t,this.scopeName=n}static push(t,n){for(const s of n)t=new Cr(t,s);return t}static from(...t){let n=null;for(let s=0;s"){if(n===t.length-1)return!1;s=t[++n],r=!0}for(;e&&!yk(e.scopeName,s);){if(r)return!1;e=e.parent}if(!e)return!1;e=e.parent}return!0}function yk(e,t){return t===e||e.startsWith(t)&&e[t.length]==="."}var wd=class{constructor(e,t,n){this.fontStyle=e,this.foregroundId=t,this.backgroundId=n}};function bk(e){if(!e)return[];if(!e.settings||!Array.isArray(e.settings))return[];let t=e.settings,n=[],s=0;for(let r=0,i=t.length;r1&&(T=y.slice(0,y.length-1),T.reverse()),n[s++]=new wk(w,T,r,a,c,u)}}return n}var wk=class{constructor(e,t,n,s,r,i){this.scope=e,this.parentScopes=t,this.index=n,this.fontStyle=s,this.foreground=r,this.background=i}},ht=(e=>(e[e.NotSet=-1]="NotSet",e[e.None=0]="None",e[e.Italic=1]="Italic",e[e.Bold=2]="Bold",e[e.Underline=4]="Underline",e[e.Strikethrough=8]="Strikethrough",e))(ht||{});function kk(e,t){e.sort((a,c)=>{let u=_d(a.scope,c.scope);return u!==0||(u=vd(a.parentScopes,c.parentScopes),u!==0)?u:a.index-c.index});let n=0,s="#000000",r="#ffffff";for(;e.length>=1&&e[0].scope==="";){let a=e.shift();a.fontStyle!==-1&&(n=a.fontStyle),a.foreground!==null&&(s=a.foreground),a.background!==null&&(r=a.background)}let i=new Ek(t),o=new wd(n,i.getId(s),i.getId(r)),l=new Sk(new xo(0,null,-1,0,0),[]);for(let a=0,c=e.length;at?console.log("how did this happen?"):this.scopeDepth=t,n!==-1&&(this.fontStyle=n),s!==0&&(this.foreground=s),r!==0&&(this.background=r)}},Sk=class So{constructor(t,n=[],s={}){this._mainRule=t,this._children=s,this._rulesWithParentScopes=n}_rulesWithParentScopes;static _cmpBySpecificity(t,n){if(t.scopeDepth!==n.scopeDepth)return n.scopeDepth-t.scopeDepth;let s=0,r=0;for(;t.parentScopes[s]===">"&&s++,n.parentScopes[r]===">"&&r++,!(s>=t.parentScopes.length||r>=n.parentScopes.length);){const i=n.parentScopes[r].length-t.parentScopes[s].length;if(i!==0)return i;s++,r++}return n.parentScopes.length-t.parentScopes.length}match(t){if(t!==""){let s=t.indexOf("."),r,i;if(s===-1?(r=t,i=""):(r=t.substring(0,s),i=t.substring(s+1)),this._children.hasOwnProperty(r))return this._children[r].match(i)}const n=this._rulesWithParentScopes.concat(this._mainRule);return n.sort(So._cmpBySpecificity),n}insert(t,n,s,r,i,o){if(n===""){this._doInsertHere(t,s,r,i,o);return}let l=n.indexOf("."),a,c;l===-1?(a=n,c=""):(a=n.substring(0,l),c=n.substring(l+1));let u;this._children.hasOwnProperty(a)?u=this._children[a]:(u=new So(this._mainRule.clone(),xo.cloneArr(this._rulesWithParentScopes)),this._children[a]=u),u.insert(t+1,c,s,r,i,o)}_doInsertHere(t,n,s,r,i){if(n===null){this._mainRule.acceptOverwrite(t,s,r,i);return}for(let o=0,l=this._rulesWithParentScopes.length;o>>0}static getTokenType(t){return(t&768)>>>8}static containsBalancedBrackets(t){return(t&1024)!==0}static getFontStyle(t){return(t&30720)>>>11}static getForeground(t){return(t&16744448)>>>15}static getBackground(t){return(t&4278190080)>>>24}static set(t,n,s,r,i,o,l){let a=Dt.getLanguageId(t),c=Dt.getTokenType(t),u=Dt.containsBalancedBrackets(t)?1:0,d=Dt.getFontStyle(t),f=Dt.getForeground(t),h=Dt.getBackground(t);return n!==0&&(a=n),s!==8&&(c=s),r!==null&&(u=r?1:0),i!==-1&&(d=i),o!==0&&(f=o),l!==0&&(h=l),(a<<0|c<<8|u<<10|d<<11|f<<15|h<<24)>>>0}};function zr(e,t){const n=[],s=Tk(e);let r=s.next();for(;r!==null;){let a=0;if(r.length===2&&r.charAt(1)===":"){switch(r.charAt(0)){case"R":a=1;break;case"L":a=-1;break;default:console.log(`Unknown priority ${r} in scope selector`)}r=s.next()}let c=o();if(n.push({matcher:c,priority:a}),r!==",")break;r=s.next()}return n;function i(){if(r==="-"){r=s.next();const a=i();return c=>!!a&&!a(c)}if(r==="("){r=s.next();const a=l();return r===")"&&(r=s.next()),a}if(Zl(r)){const a=[];do a.push(r),r=s.next();while(Zl(r));return c=>t(a,c)}return null}function o(){const a=[];let c=i();for(;c;)a.push(c),c=i();return u=>a.every(d=>d(u))}function l(){const a=[];let c=o();for(;c&&(a.push(c),r==="|"||r===",");){do r=s.next();while(r==="|"||r===",");c=o()}return u=>a.some(d=>d(u))}}function Zl(e){return!!e&&!!e.match(/[\w\.:]+/)}function Tk(e){let t=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,n=t.exec(e);return{next:()=>{if(!n)return null;const s=n[0];return n=t.exec(e),s}}}function Ed(e){typeof e.dispose=="function"&&e.dispose()}var Js=class{constructor(e){this.scopeName=e}toKey(){return this.scopeName}},Ak=class{constructor(e,t){this.scopeName=e,this.ruleName=t}toKey(){return`${this.scopeName}#${this.ruleName}`}},Rk=class{_references=[];_seenReferenceKeys=new Set;get references(){return this._references}visitedRule=new Set;add(e){const t=e.toKey();this._seenReferenceKeys.has(t)||(this._seenReferenceKeys.add(t),this._references.push(e))}},Ck=class{constructor(e,t){this.repo=e,this.initialScopeName=t,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new Js(this.initialScopeName)]}seenFullScopeRequests=new Set;seenPartialScopeRequests=new Set;Q;processQueue(){const e=this.Q;this.Q=[];const t=new Rk;for(const n of e)Ik(n,this.initialScopeName,this.repo,t);for(const n of t.references)if(n instanceof Js){if(this.seenFullScopeRequests.has(n.scopeName))continue;this.seenFullScopeRequests.add(n.scopeName),this.Q.push(n)}else{if(this.seenFullScopeRequests.has(n.scopeName)||this.seenPartialScopeRequests.has(n.toKey()))continue;this.seenPartialScopeRequests.add(n.toKey()),this.Q.push(n)}}};function Ik(e,t,n,s){const r=n.lookup(e.scopeName);if(!r){if(e.scopeName===t)throw new Error(`No grammar provided for <${t}>`);return}const i=n.lookup(t);e instanceof Js?Ir({baseGrammar:i,selfGrammar:r},s):To(e.ruleName,{baseGrammar:i,selfGrammar:r,repository:r.repository},s);const o=n.injections(e.scopeName);if(o)for(const l of o)s.add(new Js(l))}function To(e,t,n){if(t.repository&&t.repository[e]){const s=t.repository[e];Wr([s],t,n)}}function Ir(e,t){e.selfGrammar.patterns&&Array.isArray(e.selfGrammar.patterns)&&Wr(e.selfGrammar.patterns,{...e,repository:e.selfGrammar.repository},t),e.selfGrammar.injections&&Wr(Object.values(e.selfGrammar.injections),{...e,repository:e.selfGrammar.repository},t)}function Wr(e,t,n){for(const s of e){if(n.visitedRule.has(s))continue;n.visitedRule.add(s);const r=s.repository?md({},t.repository,s.repository):t.repository;Array.isArray(s.patterns)&&Wr(s.patterns,{...t,repository:r},n);const i=s.include;if(!i)continue;const o=xd(i);switch(o.kind){case 0:Ir({...t,selfGrammar:t.baseGrammar},n);break;case 1:Ir(t,n);break;case 2:To(o.ruleName,{...t,repository:r},n);break;case 3:case 4:const l=o.scopeName===t.selfGrammar.scopeName?t.selfGrammar:o.scopeName===t.baseGrammar.scopeName?t.baseGrammar:void 0;if(l){const a={baseGrammar:t.baseGrammar,selfGrammar:l,repository:r};o.kind===4?To(o.ruleName,a,n):Ir(a,n)}else o.kind===4?n.add(new Ak(o.scopeName,o.ruleName)):n.add(new Js(o.scopeName));break}}}var Lk=class{kind=0},Pk=class{kind=1},Ok=class{constructor(e){this.ruleName=e}kind=2},Dk=class{constructor(e){this.scopeName=e}kind=3},Nk=class{constructor(e,t){this.scopeName=e,this.ruleName=t}kind=4};function xd(e){if(e==="$base")return new Lk;if(e==="$self")return new Pk;const t=e.indexOf("#");if(t===-1)return new Dk(e);if(t===0)return new Ok(e.substring(1));{const n=e.substring(0,t),s=e.substring(t+1);return new Nk(n,s)}}var $k=/\\(\d+)/,ec=/\\(\d+)/g,Mk=-1,Sd=-2;var or=class{$location;id;_nameIsCapturing;_name;_contentNameIsCapturing;_contentName;constructor(e,t,n,s){this.$location=e,this.id=t,this._name=n||null,this._nameIsCapturing=vr.hasCaptures(this._name),this._contentName=s||null,this._contentNameIsCapturing=vr.hasCaptures(this._contentName)}get debugName(){const e=this.$location?`${gd(this.$location.filename)}:${this.$location.line}`:"unknown";return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,t){return!this._nameIsCapturing||this._name===null||e===null||t===null?this._name:vr.replaceCaptures(this._name,e,t)}getContentName(e,t){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:vr.replaceCaptures(this._contentName,e,t)}},Vk=class extends or{retokenizeCapturedWithRuleId;constructor(e,t,n,s,r){super(e,t,n,s),this.retokenizeCapturedWithRuleId=r}dispose(){}collectPatterns(e,t){throw new Error("Not supported!")}compile(e,t){throw new Error("Not supported!")}compileAG(e,t,n,s){throw new Error("Not supported!")}},Bk=class extends or{_match;captures;_cachedCompiledPatterns;constructor(e,t,n,s,r){super(e,t,n,null),this._match=new Qs(s,this.id),this.captures=r,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,t){t.push(this._match)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Zs,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},tc=class extends or{hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,s,r){super(e,t,n,s),this.patterns=r.patterns,this.hasMissingPatterns=r.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}collectPatterns(e,t){for(const n of this.patterns)e.getRule(n).collectPatterns(e,t)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Zs,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},Ao=class extends or{_begin;beginCaptures;_end;endHasBackReferences;endCaptures;applyEndPatternLast;hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,s,r,i,o,l,a,c){super(e,t,n,s),this._begin=new Qs(r,this.id),this.beginCaptures=i,this._end=new Qs(o||"￿",-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=l,this.applyEndPatternLast=a||!1,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,t){return this._end.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e,t).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e,t).compileAG(e,n,s)}_getCachedCompiledPatterns(e,t){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Zs;for(const n of this.patterns)e.getRule(n).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,t):this._cachedCompiledPatterns.setSource(0,t)),this._cachedCompiledPatterns}},qr=class extends or{_begin;beginCaptures;whileCaptures;_while;whileHasBackReferences;hasMissingPatterns;patterns;_cachedCompiledPatterns;_cachedCompiledWhilePatterns;constructor(e,t,n,s,r,i,o,l,a){super(e,t,n,s),this._begin=new Qs(r,this.id),this.beginCaptures=i,this.whileCaptures=l,this._while=new Qs(o,Sd),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=a.patterns,this.hasMissingPatterns=a.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null),this._cachedCompiledWhilePatterns&&(this._cachedCompiledWhilePatterns.dispose(),this._cachedCompiledWhilePatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,t){return this._while.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Zs;for(const t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,t){return this._getCachedCompiledWhilePatterns(e,t).compile(e)}compileWhileAG(e,t,n,s){return this._getCachedCompiledWhilePatterns(e,t).compileAG(e,n,s)}_getCachedCompiledWhilePatterns(e,t){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new Zs,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,t||"￿"),this._cachedCompiledWhilePatterns}},Td=class dt{static createCaptureRule(t,n,s,r,i){return t.registerRule(o=>new Vk(n,o,s,r,i))}static getCompiledRuleId(t,n,s){return t.id||n.registerRule(r=>{if(t.id=r,t.match)return new Bk(t.$vscodeTextmateLocation,t.id,t.name,t.match,dt._compileCaptures(t.captures,n,s));if(typeof t.begin>"u"){t.repository&&(s=md({},s,t.repository));let i=t.patterns;return typeof i>"u"&&t.include&&(i=[{include:t.include}]),new tc(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,dt._compilePatterns(i,n,s))}return t.while?new qr(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,dt._compileCaptures(t.beginCaptures||t.captures,n,s),t.while,dt._compileCaptures(t.whileCaptures||t.captures,n,s),dt._compilePatterns(t.patterns,n,s)):new Ao(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,dt._compileCaptures(t.beginCaptures||t.captures,n,s),t.end,dt._compileCaptures(t.endCaptures||t.captures,n,s),t.applyEndPatternLast,dt._compilePatterns(t.patterns,n,s))}),t.id}static _compileCaptures(t,n,s){let r=[];if(t){let i=0;for(const o in t){if(o==="$vscodeTextmateLocation")continue;const l=parseInt(o,10);l>i&&(i=l)}for(let o=0;o<=i;o++)r[o]=null;for(const o in t){if(o==="$vscodeTextmateLocation")continue;const l=parseInt(o,10);let a=0;t[o].patterns&&(a=dt.getCompiledRuleId(t[o],n,s)),r[l]=dt.createCaptureRule(n,t[o].$vscodeTextmateLocation,t[o].name,t[o].contentName,a)}}return r}static _compilePatterns(t,n,s){let r=[];if(t)for(let i=0,o=t.length;it.substring(r.start,r.end));return ec.lastIndex=0,this.source.replace(ec,(r,i)=>yd(s[parseInt(i,10)]||""))}_buildAnchorCache(){if(typeof this.source!="string")throw new Error("This method should only be called if the source is a string");let t=[],n=[],s=[],r=[],i,o,l,a;for(i=0,o=this.source.length;in.source);this._cached=new nc(e,t,this._items.map(n=>n.ruleId))}return this._cached}compileAG(e,t,n){return this._hasAnchors?t?n?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G0):n?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G0):this.compile(e)}_resolveAnchors(e,t,n){let s=this._items.map(r=>r.resolveAnchors(t,n));return new nc(e,s,this._items.map(r=>r.ruleId))}},nc=class{constructor(e,t,n){this.regExps=t,this.rules=n,this.scanner=e.createOnigScanner(t)}scanner;dispose(){typeof this.scanner.dispose=="function"&&this.scanner.dispose()}toString(){const e=[];for(let t=0,n=this.rules.length;t{const n=this._scopeToLanguage(t),s=this._toStandardTokenType(t);return new Ki(n,s)});_scopeToLanguage(t){return this._embeddedLanguagesMatcher.match(t)||0}_toStandardTokenType(t){const n=t.match(Ro.STANDARD_TOKEN_TYPE_REGEXP);if(!n)return 8;switch(n[1]){case"comment":return 1;case"string":return 2;case"regex":return 3;case"meta.embedded":return 0}throw new Error("Unexpected match for standard token type!")}static STANDARD_TOKEN_TYPE_REGEXP=/\b(comment|string|regex|meta\.embedded)\b/},Gk=class{values;scopesRegExp;constructor(e){if(e.length===0)this.values=null,this.scopesRegExp=null;else{this.values=new Map(e);const t=e.map(([n,s])=>yd(n));t.sort(),t.reverse(),this.scopesRegExp=new RegExp(`^((${t.join(")|(")}))($|\\.)`,"")}}match(e){if(!this.scopesRegExp)return;const t=e.match(this.scopesRegExp);if(t)return this.values.get(t[1])}},sc=class{constructor(e,t){this.stack=e,this.stoppedEarly=t}};function Rd(e,t,n,s,r,i,o,l){const a=t.content.length;let c=!1,u=-1;if(o){const h=Uk(e,t,n,s,r,i);r=h.stack,s=h.linePos,n=h.isFirstLine,u=h.anchorPosition}const d=Date.now();for(;!c;){if(l!==0&&Date.now()-d>l)return new sc(r,!0);f()}return new sc(r,!1);function f(){const h=Hk(e,t,n,s,r,u);if(!h){i.produce(r,a),c=!0;return}const y=h.captureIndices,w=h.matchedRuleId,T=y&&y.length>0?y[0].end>s:!1;if(w===Mk){const S=r.getRule(e);i.produce(r,y[0].start),r=r.withContentNameScopesList(r.nameScopesList),Os(e,t,n,r,i,S.endCaptures,y),i.produce(r,y[0].end);const L=r;if(r=r.parent,u=L.getAnchorPos(),!T&&L.getEnterPos()===s){r=L,i.produce(r,a),c=!0;return}}else{const S=e.getRule(w);i.produce(r,y[0].start);const L=r,g=S.getName(t.content,y),v=r.contentNameScopesList.pushAttributed(g,e);if(r=r.push(w,s,u,y[0].end===a,null,v,v),S instanceof Ao){const V=S;Os(e,t,n,r,i,V.beginCaptures,y),i.produce(r,y[0].end),u=y[0].end;const Y=V.getContentName(t.content,y),ne=v.pushAttributed(Y,e);if(r=r.withContentNameScopesList(ne),V.endHasBackReferences&&(r=r.withEndRule(V.getEndWithResolvedBackReferences(t.content,y))),!T&&L.hasSameRuleAs(r)){r=r.pop(),i.produce(r,a),c=!0;return}}else if(S instanceof qr){const V=S;Os(e,t,n,r,i,V.beginCaptures,y),i.produce(r,y[0].end),u=y[0].end;const Y=V.getContentName(t.content,y),ne=v.pushAttributed(Y,e);if(r=r.withContentNameScopesList(ne),V.whileHasBackReferences&&(r=r.withEndRule(V.getWhileWithResolvedBackReferences(t.content,y))),!T&&L.hasSameRuleAs(r)){r=r.pop(),i.produce(r,a),c=!0;return}}else if(Os(e,t,n,r,i,S.captures,y),i.produce(r,y[0].end),r=r.pop(),!T){r=r.safePop(),i.produce(r,a),c=!0;return}}y[0].end>s&&(s=y[0].end,n=!1)}}function Uk(e,t,n,s,r,i){let o=r.beginRuleCapturedEOL?0:-1;const l=[];for(let a=r;a;a=a.pop()){const c=a.getRule(e);c instanceof qr&&l.push({rule:c,stack:a})}for(let a=l.pop();a;a=l.pop()){const{ruleScanner:c,findOptions:u}=Wk(a.rule,e,a.stack.endRule,n,s===o),d=c.findNextMatchSync(t,s,u);if(d){if(d.ruleId!==Sd){r=a.stack.pop();break}d.captureIndices&&d.captureIndices.length&&(i.produce(a.stack,d.captureIndices[0].start),Os(e,t,n,a.stack,i,a.rule.whileCaptures,d.captureIndices),i.produce(a.stack,d.captureIndices[0].end),o=d.captureIndices[0].end,d.captureIndices[0].end>s&&(s=d.captureIndices[0].end,n=!1))}else{r=a.stack.pop();break}}return{stack:r,linePos:s,anchorPosition:o,isFirstLine:n}}function Hk(e,t,n,s,r,i){const o=Fk(e,t,n,s,r,i),l=e.getInjections();if(l.length===0)return o;const a=zk(l,e,t,n,s,r,i);if(!a)return o;if(!o)return a;const c=o.captureIndices[0].start,u=a.captureIndices[0].start;return u=l)&&(l=g,a=L.captureIndices,c=L.ruleId,u=y.priority,l===r))break}return a?{priorityMatch:u===-1,captureIndices:a,matchedRuleId:c}:null}function Cd(e,t,n,s,r){return{ruleScanner:e.compileAG(t,n,s,r),findOptions:0}}function Wk(e,t,n,s,r){return{ruleScanner:e.compileWhileAG(t,n,s,r),findOptions:0}}function Os(e,t,n,s,r,i,o){if(i.length===0)return;const l=t.content,a=Math.min(i.length,o.length),c=[],u=o[0].end;for(let d=0;du)break;for(;c.length>0&&c[c.length-1].endPos<=h.start;)r.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop();if(c.length>0?r.produceFromScopes(c[c.length-1].scopes,h.start):r.produce(s,h.start),f.retokenizeCapturedWithRuleId){const w=f.getName(l,o),T=s.contentNameScopesList.pushAttributed(w,e),S=f.getContentName(l,o),L=T.pushAttributed(S,e),g=s.push(f.retokenizeCapturedWithRuleId,h.start,-1,!1,null,T,L),v=e.createOnigString(l.substring(0,h.end));Rd(e,v,n&&h.start===0,h.start,g,r,!1,0),Ed(v);continue}const y=f.getName(l,o);if(y!==null){const T=(c.length>0?c[c.length-1].scopes:s.contentNameScopesList).pushAttributed(y,e);c.push(new qk(T,h.end))}}for(;c.length>0;)r.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop()}var qk=class{scopes;endPos;constructor(e,t){this.scopes=e,this.endPos=t}};function Kk(e,t,n,s,r,i,o,l){return new Xk(e,t,n,s,r,i,o,l)}function rc(e,t,n,s,r){const i=zr(t,Kr),o=Td.getCompiledRuleId(n,s,r.repository);for(const l of i)e.push({debugSelector:t,matcher:l.matcher,ruleId:o,grammar:r,priority:l.priority})}function Kr(e,t){if(t.length{for(let r=n;rn&&e.substr(0,n)===t&&e[n]==="."}var Xk=class{constructor(e,t,n,s,r,i,o,l){if(this._rootScopeName=e,this.balancedBracketSelectors=i,this._onigLib=l,this._basicScopeAttributesProvider=new jk(n,s),this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=o,this._grammar=ic(t,null),this._injections=null,this._tokenTypeMatchers=[],r)for(const a of Object.keys(r)){const c=zr(a,Kr);for(const u of c)this._tokenTypeMatchers.push({matcher:u.matcher,type:r[a]})}}_rootId;_lastRuleId;_ruleId2desc;_includedGrammars;_grammarRepository;_grammar;_injections;_basicScopeAttributesProvider;_tokenTypeMatchers;get themeProvider(){return this._grammarRepository}dispose(){for(const e of this._ruleId2desc)e&&e.dispose()}createOnigScanner(e){return this._onigLib.createOnigScanner(e)}createOnigString(e){return this._onigLib.createOnigString(e)}getMetadataForScope(e){return this._basicScopeAttributesProvider.getBasicScopeAttributes(e)}_collectInjections(){const e={lookup:r=>r===this._rootScopeName?this._grammar:this.getExternalGrammar(r),injections:r=>this._grammarRepository.injections(r)},t=[],n=this._rootScopeName,s=e.lookup(n);if(s){const r=s.injections;if(r)for(let o in r)rc(t,o,r[o],this,s);const i=this._grammarRepository.injections(n);i&&i.forEach(o=>{const l=this.getExternalGrammar(o);if(l){const a=l.injectionSelector;a&&rc(t,a,l,this,l)}})}return t.sort((r,i)=>r.priority-i.priority),t}getInjections(){return this._injections===null&&(this._injections=this._collectInjections()),this._injections}registerRule(e){const t=++this._lastRuleId,n=e(t);return this._ruleId2desc[t]=n,n}getRule(e){return this._ruleId2desc[e]}getExternalGrammar(e,t){if(this._includedGrammars[e])return this._includedGrammars[e];if(this._grammarRepository){const n=this._grammarRepository.lookup(e);if(n)return this._includedGrammars[e]=ic(n,t&&t.$base),this._includedGrammars[e]}}tokenizeLine(e,t,n=0){const s=this._tokenize(e,t,!1,n);return{tokens:s.lineTokens.getResult(s.ruleStack,s.lineLength),ruleStack:s.ruleStack,stoppedEarly:s.stoppedEarly}}tokenizeLine2(e,t,n=0){const s=this._tokenize(e,t,!0,n);return{tokens:s.lineTokens.getBinaryResult(s.ruleStack,s.lineLength),ruleStack:s.ruleStack,stoppedEarly:s.stoppedEarly}}_tokenize(e,t,n,s){this._rootId===-1&&(this._rootId=Td.getCompiledRuleId(this._grammar.repository.$self,this,this._grammar.repository),this.getInjections());let r;if(!t||t===Co.NULL){r=!0;const c=this._basicScopeAttributesProvider.getDefaultAttributes(),u=this.themeProvider.getDefaults(),d=ms.set(0,c.languageId,c.tokenType,null,u.fontStyle,u.foregroundId,u.backgroundId),f=this.getRule(this._rootId).getName(null,null);let h;f?h=Hs.createRootAndLookUpScopeName(f,d,this):h=Hs.createRoot("unknown",d),t=new Co(null,this._rootId,-1,-1,!1,null,h,h)}else r=!1,t.reset();e=e+` -`;const i=this.createOnigString(e),o=i.content.length,l=new Qk(n,e,this._tokenTypeMatchers,this.balancedBracketSelectors),a=Rd(this,i,r,0,t,l,!0,s);return Ed(i),{lineLength:o,lineTokens:l,ruleStack:a.stack,stoppedEarly:a.stoppedEarly}}};function ic(e,t){return e=mk(e),e.repository=e.repository||{},e.repository.$self={$vscodeTextmateLocation:e.$vscodeTextmateLocation,patterns:e.patterns,name:e.scopeName},e.repository.$base=t||e.repository.$self,e}var Hs=class Xt{constructor(t,n,s){this.parent=t,this.scopePath=n,this.tokenAttributes=s}static fromExtension(t,n){let s=t,r=t?.scopePath??null;for(const i of n)r=qi.push(r,i.scopeNames),s=new Xt(s,r,i.encodedTokenAttributes);return s}static createRoot(t,n){return new Xt(null,new qi(null,t),n)}static createRootAndLookUpScopeName(t,n,s){const r=s.getMetadataForScope(t),i=new qi(null,t),o=s.themeProvider.themeMatch(i),l=Xt.mergeAttributes(n,r,o);return new Xt(null,i,l)}get scopeName(){return this.scopePath.scopeName}toString(){return this.getScopeNames().join(" ")}equals(t){return Xt.equals(this,t)}static equals(t,n){do{if(t===n||!t&&!n)return!0;if(!t||!n||t.scopeName!==n.scopeName||t.tokenAttributes!==n.tokenAttributes)return!1;t=t.parent,n=n.parent}while(!0)}static mergeAttributes(t,n,s){let r=-1,i=0,o=0;return s!==null&&(r=s.fontStyle,i=s.foregroundId,o=s.backgroundId),ms.set(t,n.languageId,n.tokenType,null,r,i,o)}pushAttributed(t,n){if(t===null)return this;if(t.indexOf(" ")===-1)return Xt._pushAttributed(this,t,n);const s=t.split(/ /g);let r=this;for(const i of s)r=Xt._pushAttributed(r,i,n);return r}static _pushAttributed(t,n,s){const r=s.getMetadataForScope(n),i=t.scopePath.push(n),o=s.themeProvider.themeMatch(i),l=Xt.mergeAttributes(t.tokenAttributes,r,o);return new Xt(t,i,l)}getScopeNames(){return this.scopePath.getSegments()}getExtensionIfDefined(t){const n=[];let s=this;for(;s&&s!==t;)n.push({encodedTokenAttributes:s.tokenAttributes,scopeNames:s.scopePath.getExtensionIfDefined(s.parent?.scopePath??null)}),s=s.parent;return s===t?n.reverse():void 0}},Co=class Mn{constructor(t,n,s,r,i,o,l,a){this.parent=t,this.ruleId=n,this.beginRuleCapturedEOL=i,this.endRule=o,this.nameScopesList=l,this.contentNameScopesList=a,this.depth=this.parent?this.parent.depth+1:1,this._enterPos=s,this._anchorPos=r}_stackElementBrand=void 0;static NULL=new Mn(null,0,0,0,!1,null,null,null);_enterPos;_anchorPos;depth;equals(t){return t===null?!1:Mn._equals(this,t)}static _equals(t,n){return t===n?!0:this._structuralEquals(t,n)?Hs.equals(t.contentNameScopesList,n.contentNameScopesList):!1}static _structuralEquals(t,n){do{if(t===n||!t&&!n)return!0;if(!t||!n||t.depth!==n.depth||t.ruleId!==n.ruleId||t.endRule!==n.endRule)return!1;t=t.parent,n=n.parent}while(!0)}clone(){return this}static _reset(t){for(;t;)t._enterPos=-1,t._anchorPos=-1,t=t.parent}reset(){Mn._reset(this)}pop(){return this.parent}safePop(){return this.parent?this.parent:this}push(t,n,s,r,i,o,l){return new Mn(this,t,n,s,r,i,o,l)}getEnterPos(){return this._enterPos}getAnchorPos(){return this._anchorPos}getRule(t){return t.getRule(this.ruleId)}toString(){const t=[];return this._writeString(t,0),"["+t.join(",")+"]"}_writeString(t,n){return this.parent&&(n=this.parent._writeString(t,n)),t[n++]=`(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`,n}withContentNameScopesList(t){return this.contentNameScopesList===t?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,t)}withEndRule(t){return this.endRule===t?this:new Mn(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,t,this.nameScopesList,this.contentNameScopesList)}hasSameRuleAs(t){let n=this;for(;n&&n._enterPos===t._enterPos;){if(n.ruleId===t.ruleId)return!0;n=n.parent}return!1}toStateStackFrame(){return{ruleId:this.ruleId,beginRuleCapturedEOL:this.beginRuleCapturedEOL,endRule:this.endRule,nameScopesList:this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList??null)??[],contentNameScopesList:this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList)??[]}}static pushFrame(t,n){const s=Hs.fromExtension(t?.nameScopesList??null,n.nameScopesList);return new Mn(t,n.ruleId,n.enterPos??-1,n.anchorPos??-1,n.beginRuleCapturedEOL,n.endRule,s,Hs.fromExtension(s,n.contentNameScopesList))}},Jk=class{balancedBracketScopes;unbalancedBracketScopes;allowAny=!1;constructor(e,t){this.balancedBracketScopes=e.flatMap(n=>n==="*"?(this.allowAny=!0,[]):zr(n,Kr).map(s=>s.matcher)),this.unbalancedBracketScopes=t.flatMap(n=>zr(n,Kr).map(s=>s.matcher))}get matchesAlways(){return this.allowAny&&this.unbalancedBracketScopes.length===0}get matchesNever(){return this.balancedBracketScopes.length===0&&!this.allowAny}match(e){for(const t of this.unbalancedBracketScopes)if(t(e))return!1;for(const t of this.balancedBracketScopes)if(t(e))return!0;return this.allowAny}},Qk=class{constructor(e,t,n,s){this.balancedBracketSelectors=s,this._emitBinaryTokens=e,this._tokenTypeOverrides=n,this._lineText=null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}_emitBinaryTokens;_lineText;_tokens;_binaryTokens;_lastTokenEndIndex;_tokenTypeOverrides;produce(e,t){this.produceFromScopes(e.contentNameScopesList,t)}produceFromScopes(e,t){if(this._lastTokenEndIndex>=t)return;if(this._emitBinaryTokens){let s=e?.tokenAttributes??0,r=!1;if(this.balancedBracketSelectors?.matchesAlways&&(r=!0),this._tokenTypeOverrides.length>0||this.balancedBracketSelectors&&!this.balancedBracketSelectors.matchesAlways&&!this.balancedBracketSelectors.matchesNever){const i=e?.getScopeNames()??[];for(const o of this._tokenTypeOverrides)o.matcher(i)&&(s=ms.set(s,0,o.type,null,-1,0,0));this.balancedBracketSelectors&&(r=this.balancedBracketSelectors.match(i))}if(r&&(s=ms.set(s,0,8,r,-1,0,0)),this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-1]===s){this._lastTokenEndIndex=t;return}this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(s),this._lastTokenEndIndex=t;return}const n=e?.getScopeNames()??[];this._tokens.push({startIndex:this._lastTokenEndIndex,endIndex:t,scopes:n}),this._lastTokenEndIndex=t}getResult(e,t){return this._tokens.length>0&&this._tokens[this._tokens.length-1].startIndex===t-1&&this._tokens.pop(),this._tokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._tokens[this._tokens.length-1].startIndex=0),this._tokens}getBinaryResult(e,t){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===t-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),this._binaryTokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._binaryTokens[this._binaryTokens.length-2]=0);const n=new Uint32Array(this._binaryTokens.length);for(let s=0,r=this._binaryTokens.length;s0;)o.Q.map(l=>this._loadSingleGrammar(l.scopeName)),o.processQueue();return this._grammarForScopeName(t,n,s,r,i)}_loadSingleGrammar(t){this._ensureGrammarCache.has(t)||(this._doLoadSingleGrammar(t),this._ensureGrammarCache.set(t,!0))}_doLoadSingleGrammar(t){const n=this._options.loadGrammar(t);if(n){const s=typeof this._options.getInjections=="function"?this._options.getInjections(t):void 0;this._syncRegistry.addGrammar(n,s)}}addGrammar(t,n=[],s=0,r=null){return this._syncRegistry.addGrammar(t,n),this._grammarForScopeName(t.scopeName,s,r)}_grammarForScopeName(t,n=0,s=null,r=null,i=null){return this._syncRegistry.grammarForScopeName(t,n,s,r,i)}},Io=Co.NULL;const tE=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"];class ar{constructor(t,n,s){this.normal=n,this.property=t,s&&(this.space=s)}}ar.prototype.normal={};ar.prototype.property={};ar.prototype.space=void 0;function Id(e,t){const n={},s={};for(const r of e)Object.assign(n,r.property),Object.assign(s,r.normal);return new ar(n,s,t)}function Lo(e){return e.toLowerCase()}class Rt{constructor(t,n){this.attribute=n,this.property=t}}Rt.prototype.attribute="";Rt.prototype.booleanish=!1;Rt.prototype.boolean=!1;Rt.prototype.commaOrSpaceSeparated=!1;Rt.prototype.commaSeparated=!1;Rt.prototype.defined=!1;Rt.prototype.mustUseProperty=!1;Rt.prototype.number=!1;Rt.prototype.overloadedBoolean=!1;Rt.prototype.property="";Rt.prototype.spaceSeparated=!1;Rt.prototype.space=void 0;let nE=0;const be=zn(),Ye=zn(),Po=zn(),K=zn(),Ve=zn(),os=zn(),It=zn();function zn(){return 2**++nE}const Oo=Object.freeze(Object.defineProperty({__proto__:null,boolean:be,booleanish:Ye,commaOrSpaceSeparated:It,commaSeparated:os,number:K,overloadedBoolean:Po,spaceSeparated:Ve},Symbol.toStringTag,{value:"Module"})),Yi=Object.keys(Oo);class fa extends Rt{constructor(t,n,s,r){let i=-1;if(super(t,n),oc(this,"space",r),typeof s=="number")for(;++i4&&n.slice(0,4)==="data"&&oE.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(ac,cE);s="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!ac.test(i)){let o=i.replace(iE,lE);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}r=fa}return new r(s,t)}function lE(e){return"-"+e.toLowerCase()}function cE(e){return e.charAt(1).toUpperCase()}const uE=Id([Ld,sE,Dd,Nd,$d],"html"),Md=Id([Ld,rE,Dd,Nd,$d],"svg"),lc={}.hasOwnProperty;function dE(e,t){const n=t||{};function s(r,...i){let o=s.invalid;const l=s.handlers;if(r&&lc.call(r,e)){const a=String(r[e]);o=lc.call(l,a)?l[a]:s.unknown}if(o)return o.call(this,r,...i)}return s.handlers=n.handlers||{},s.invalid=n.invalid,s.unknown=n.unknown,s}const pE=/["&'<>`]/g,fE=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,hE=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,mE=/[|\\{}()[\]^$+*?.]/g,cc=new WeakMap;function gE(e,t){if(e=e.replace(t.subset?_E(t.subset):pE,s),t.subset||t.escapeOnly)return e;return e.replace(fE,n).replace(hE,s);function n(r,i,o){return t.format((r.charCodeAt(0)-55296)*1024+r.charCodeAt(1)-56320+65536,o.charCodeAt(i+2),t)}function s(r,i,o){return t.format(r.charCodeAt(0),o.charCodeAt(i+1),t)}}function _E(e){let t=cc.get(e);return t||(t=vE(e),cc.set(e,t)),t}function vE(e){const t=[];let n=-1;for(;++n",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›",euro:"€"},xE=["cent","copy","divide","gt","lt","not","para","times"],Vd={}.hasOwnProperty,Do={};let yr;for(yr in Xi)Vd.call(Xi,yr)&&(Do[Xi[yr]]=yr);const SE=/[^\dA-Za-z]/;function TE(e,t,n,s){const r=String.fromCharCode(e);if(Vd.call(Do,r)){const i=Do[r],o="&"+i;return n&&EE.includes(i)&&!xE.includes(i)&&(!s||t&&t!==61&&SE.test(String.fromCharCode(t)))?o:o+";"}return""}function AE(e,t,n){let s=bE(e,t,n.omitOptionalSemicolons),r;if((n.useNamedReferences||n.useShortestReferences)&&(r=TE(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!r)&&n.useShortestReferences){const i=kE(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|"],IE=["<",">"];function LE(e,t,n,s){return s.settings.bogusComments?"":"";function r(i){return as(i,Object.assign({},s.settings.characterReferences,{subset:IE}))}}function PE(e,t,n,s){return""}function uc(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let s=0,r=n.indexOf(t);for(;r!==-1;)s++,r=n.indexOf(t,r+t.length);return s}function OE(e,t){const n=t||{};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}function DE(e){return e.join(" ").trim()}const NE=/[ \t\n\f\r]/g;function ha(e){return typeof e=="object"?e.type==="text"?dc(e.value):!1:dc(e)}function dc(e){return e.replace(NE,"")===""}const nt=jd(1),Bd=jd(-1),$E=[];function jd(e){return t;function t(n,s,r){const i=n?n.children:$E;let o=(s||0)+e,l=i[o];if(!r)for(;l&&ha(l);)o+=e,l=i[o];return l}}const ME={}.hasOwnProperty;function Gd(e){return t;function t(n,s,r){return ME.call(e,n.tagName)&&e[n.tagName](n,s,r)}}const ma=Gd({body:BE,caption:Ji,colgroup:Ji,dd:HE,dt:UE,head:Ji,html:VE,li:GE,optgroup:FE,option:zE,p:jE,rp:pc,rt:pc,tbody:qE,td:fc,tfoot:KE,th:fc,thead:WE,tr:YE});function Ji(e,t,n){const s=nt(n,t,!0);return!s||s.type!=="comment"&&!(s.type==="text"&&ha(s.value.charAt(0)))}function VE(e,t,n){const s=nt(n,t);return!s||s.type!=="comment"}function BE(e,t,n){const s=nt(n,t);return!s||s.type!=="comment"}function jE(e,t,n){const s=nt(n,t);return s?s.type==="element"&&(s.tagName==="address"||s.tagName==="article"||s.tagName==="aside"||s.tagName==="blockquote"||s.tagName==="details"||s.tagName==="div"||s.tagName==="dl"||s.tagName==="fieldset"||s.tagName==="figcaption"||s.tagName==="figure"||s.tagName==="footer"||s.tagName==="form"||s.tagName==="h1"||s.tagName==="h2"||s.tagName==="h3"||s.tagName==="h4"||s.tagName==="h5"||s.tagName==="h6"||s.tagName==="header"||s.tagName==="hgroup"||s.tagName==="hr"||s.tagName==="main"||s.tagName==="menu"||s.tagName==="nav"||s.tagName==="ol"||s.tagName==="p"||s.tagName==="pre"||s.tagName==="section"||s.tagName==="table"||s.tagName==="ul"):!n||!(n.type==="element"&&(n.tagName==="a"||n.tagName==="audio"||n.tagName==="del"||n.tagName==="ins"||n.tagName==="map"||n.tagName==="noscript"||n.tagName==="video"))}function GE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="li"}function UE(e,t,n){const s=nt(n,t);return!!(s&&s.type==="element"&&(s.tagName==="dt"||s.tagName==="dd"))}function HE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="dt"||s.tagName==="dd")}function pc(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="rp"||s.tagName==="rt")}function FE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="optgroup"}function zE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="option"||s.tagName==="optgroup")}function WE(e,t,n){const s=nt(n,t);return!!(s&&s.type==="element"&&(s.tagName==="tbody"||s.tagName==="tfoot"))}function qE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="tbody"||s.tagName==="tfoot")}function KE(e,t,n){return!nt(n,t)}function YE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="tr"}function fc(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="td"||s.tagName==="th")}const XE=Gd({body:ZE,colgroup:ex,head:QE,html:JE,tbody:tx});function JE(e){const t=nt(e,-1);return!t||t.type!=="comment"}function QE(e){const t=new Set;for(const s of e.children)if(s.type==="element"&&(s.tagName==="base"||s.tagName==="title")){if(t.has(s.tagName))return!1;t.add(s.tagName)}const n=e.children[0];return!n||n.type==="element"}function ZE(e){const t=nt(e,-1,!0);return!t||t.type!=="comment"&&!(t.type==="text"&&ha(t.value.charAt(0)))&&!(t.type==="element"&&(t.tagName==="meta"||t.tagName==="link"||t.tagName==="script"||t.tagName==="style"||t.tagName==="template"))}function ex(e,t,n){const s=Bd(n,t),r=nt(e,-1,!0);return n&&s&&s.type==="element"&&s.tagName==="colgroup"&&ma(s,n.children.indexOf(s),n)?!1:!!(r&&r.type==="element"&&r.tagName==="col")}function tx(e,t,n){const s=Bd(n,t),r=nt(e,-1);return n&&s&&s.type==="element"&&(s.tagName==="thead"||s.tagName==="tbody")&&ma(s,n.children.indexOf(s),n)?!1:!!(r&&r.type==="element"&&r.tagName==="tr")}const br={name:[[` +Please report this to https://github.com/markedjs/marked.`,e){let s="

An error occurred:

"+ln(n.message+"",!0)+"
";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},Hn=new Fw;function Ce(e,t){return Hn.parse(e,t)}Ce.options=Ce.setOptions=function(e){return Hn.setOptions(e),Ce.defaults=Hn.defaults,ed(Ce.defaults),Ce};Ce.getDefaults=sa;Ce.defaults=Fn;Ce.use=function(...e){return Hn.use(...e),Ce.defaults=Hn.defaults,ed(Ce.defaults),Ce};Ce.walkTokens=function(e,t){return Hn.walkTokens(e,t)};Ce.parseInline=Hn.parseInline;Ce.Parser=Gt;Ce.parser=Gt.parse;Ce.Renderer=Hr;Ce.TextRenderer=da;Ce.Lexer=jt;Ce.lexer=jt.lex;Ce.Tokenizer=Ur;Ce.Hooks=Ps;Ce.parse=Ce;Ce.options;Ce.setOptions;Ce.use;Ce.walkTokens;Ce.parseInline;Gt.parse;jt.lex;const{entries:dd,setPrototypeOf:Hl,isFrozen:zw,getPrototypeOf:Ww,getOwnPropertyDescriptor:qw}=Object;let{freeze:Et,seal:Vt,create:wo}=Object,{apply:ko,construct:Eo}=typeof Reflect<"u"&&Reflect;Et||(Et=function(t){return t});Vt||(Vt=function(t){return t});ko||(ko=function(t,n){for(var s=arguments.length,r=new Array(s>2?s-2:0),i=2;i1?n-1:0),r=1;r1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:Rr;Hl&&Hl(e,null);let s=t.length;for(;s--;){let r=t[s];if(typeof r=="string"){const i=n(r);i!==r&&(zw(t)||(t[s]=i),r=i)}e[r]=!0}return e}function Qw(e){for(let t=0;t/gm),rk=Vt(/\$\{[\w\W]*/gm),ik=Vt(/^data-[\-\w.\u00B7-\uFFFF]+$/),ok=Vt(/^aria-[\-\w]+$/),pd=Vt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ak=Vt(/^(?:\w+script|data):/i),lk=Vt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),fd=Vt(/^html$/i),ck=Vt(/^[a-z][.\w]*(-[.\w]+)+$/i);var Yl=Object.freeze({__proto__:null,ARIA_ATTR:ok,ATTR_WHITESPACE:lk,CUSTOM_ELEMENT:ck,DATA_ATTR:ik,DOCTYPE_NAME:fd,ERB_EXPR:sk,IS_ALLOWED_URI:pd,IS_SCRIPT_OR_DATA:ak,MUSTACHE_EXPR:nk,TMPLIT_EXPR:rk});const Cs={element:1,text:3,progressingInstruction:7,comment:8,document:9},uk=function(){return typeof window>"u"?null:window},dk=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(s=n.getAttribute(r));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Xl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function hd(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:uk();const t=ce=>hd(ce);if(t.version="3.3.1",t.removed=[],!e||!e.document||e.document.nodeType!==Cs.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e;const s=n,r=s.currentScript,{DocumentFragment:i,HTMLTemplateElement:o,Node:l,Element:a,NodeFilter:c,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:d,DOMParser:f,trustedTypes:h}=e,y=a.prototype,w=Rs(y,"cloneNode"),A=Rs(y,"remove"),S=Rs(y,"nextSibling"),L=Rs(y,"childNodes"),g=Rs(y,"parentNode");if(typeof o=="function"){const ce=n.createElement("template");ce.content&&ce.content.ownerDocument&&(n=ce.content.ownerDocument)}let v,V="";const{implementation:Y,createNodeIterator:ne,createDocumentFragment:z,getElementsByTagName:j}=n,{importNode:he}=s;let J=Xl();t.isSupported=typeof dd=="function"&&typeof g=="function"&&Y&&Y.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:G,ERB_EXPR:x,TMPLIT_EXPR:D,DATA_ATTR:I,ARIA_ATTR:N,IS_SCRIPT_OR_DATA:U,ATTR_WHITESPACE:q,CUSTOM_ELEMENT:Z}=Yl;let{IS_ALLOWED_URI:le}=Yl,ve=null;const Ie=Ee({},[...zl,...Ui,...Hi,...Fi,...Wl]);let pe=null;const Pt=Ee({},[...ql,...zi,...Kl,..._r]);let Ae=Object.seal(wo(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),qe=null,$=null;const ee=Object.seal(wo(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Q=!0,re=!0,ke=!1,_=!0,b=!1,C=!0,R=!1,k=!1,P=!1,M=!1,W=!1,F=!1,B=!0,oe=!1;const te="user-content-";let ae=!0,fe=!1,ye={},xe=null;const Te=Ee({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let rt=null;const it=Ee({},["audio","video","img","source","image","track"]);let St=null;const Ct=Ee({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wt="http://www.w3.org/1998/Math/MathML",Ln="http://www.w3.org/2000/svg",Ge="http://www.w3.org/1999/xhtml";let ot=Ge,Wn=!1,qn=null;const sp=Ee({},[Wt,Ln,Ge],ji);let lr=Ee({},["mi","mo","mn","ms","mtext"]),cr=Ee({},["annotation-xml"]);const rp=Ee({},["title","style","font","a","script"]);let vs=null;const ip=["application/xhtml+xml","text/html"],op="text/html";let Ze=null,Kn=null;const ap=n.createElement("form"),Sa=function(E){return E instanceof RegExp||E instanceof Function},Ei=function(){let E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Kn&&Kn===E)){if((!E||typeof E!="object")&&(E={}),E=Yt(E),vs=ip.indexOf(E.PARSER_MEDIA_TYPE)===-1?op:E.PARSER_MEDIA_TYPE,Ze=vs==="application/xhtml+xml"?ji:Rr,ve=Bt(E,"ALLOWED_TAGS")?Ee({},E.ALLOWED_TAGS,Ze):Ie,pe=Bt(E,"ALLOWED_ATTR")?Ee({},E.ALLOWED_ATTR,Ze):Pt,qn=Bt(E,"ALLOWED_NAMESPACES")?Ee({},E.ALLOWED_NAMESPACES,ji):sp,St=Bt(E,"ADD_URI_SAFE_ATTR")?Ee(Yt(Ct),E.ADD_URI_SAFE_ATTR,Ze):Ct,rt=Bt(E,"ADD_DATA_URI_TAGS")?Ee(Yt(it),E.ADD_DATA_URI_TAGS,Ze):it,xe=Bt(E,"FORBID_CONTENTS")?Ee({},E.FORBID_CONTENTS,Ze):Te,qe=Bt(E,"FORBID_TAGS")?Ee({},E.FORBID_TAGS,Ze):Yt({}),$=Bt(E,"FORBID_ATTR")?Ee({},E.FORBID_ATTR,Ze):Yt({}),ye=Bt(E,"USE_PROFILES")?E.USE_PROFILES:!1,Q=E.ALLOW_ARIA_ATTR!==!1,re=E.ALLOW_DATA_ATTR!==!1,ke=E.ALLOW_UNKNOWN_PROTOCOLS||!1,_=E.ALLOW_SELF_CLOSE_IN_ATTR!==!1,b=E.SAFE_FOR_TEMPLATES||!1,C=E.SAFE_FOR_XML!==!1,R=E.WHOLE_DOCUMENT||!1,M=E.RETURN_DOM||!1,W=E.RETURN_DOM_FRAGMENT||!1,F=E.RETURN_TRUSTED_TYPE||!1,P=E.FORCE_BODY||!1,B=E.SANITIZE_DOM!==!1,oe=E.SANITIZE_NAMED_PROPS||!1,ae=E.KEEP_CONTENT!==!1,fe=E.IN_PLACE||!1,le=E.ALLOWED_URI_REGEXP||pd,ot=E.NAMESPACE||Ge,lr=E.MATHML_TEXT_INTEGRATION_POINTS||lr,cr=E.HTML_INTEGRATION_POINTS||cr,Ae=E.CUSTOM_ELEMENT_HANDLING||{},E.CUSTOM_ELEMENT_HANDLING&&Sa(E.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ae.tagNameCheck=E.CUSTOM_ELEMENT_HANDLING.tagNameCheck),E.CUSTOM_ELEMENT_HANDLING&&Sa(E.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ae.attributeNameCheck=E.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),E.CUSTOM_ELEMENT_HANDLING&&typeof E.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Ae.allowCustomizedBuiltInElements=E.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),b&&(re=!1),W&&(M=!0),ye&&(ve=Ee({},Wl),pe=[],ye.html===!0&&(Ee(ve,zl),Ee(pe,ql)),ye.svg===!0&&(Ee(ve,Ui),Ee(pe,zi),Ee(pe,_r)),ye.svgFilters===!0&&(Ee(ve,Hi),Ee(pe,zi),Ee(pe,_r)),ye.mathMl===!0&&(Ee(ve,Fi),Ee(pe,Kl),Ee(pe,_r))),E.ADD_TAGS&&(typeof E.ADD_TAGS=="function"?ee.tagCheck=E.ADD_TAGS:(ve===Ie&&(ve=Yt(ve)),Ee(ve,E.ADD_TAGS,Ze))),E.ADD_ATTR&&(typeof E.ADD_ATTR=="function"?ee.attributeCheck=E.ADD_ATTR:(pe===Pt&&(pe=Yt(pe)),Ee(pe,E.ADD_ATTR,Ze))),E.ADD_URI_SAFE_ATTR&&Ee(St,E.ADD_URI_SAFE_ATTR,Ze),E.FORBID_CONTENTS&&(xe===Te&&(xe=Yt(xe)),Ee(xe,E.FORBID_CONTENTS,Ze)),E.ADD_FORBID_CONTENTS&&(xe===Te&&(xe=Yt(xe)),Ee(xe,E.ADD_FORBID_CONTENTS,Ze)),ae&&(ve["#text"]=!0),R&&Ee(ve,["html","head","body"]),ve.table&&(Ee(ve,["tbody"]),delete qe.tbody),E.TRUSTED_TYPES_POLICY){if(typeof E.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ts('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof E.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ts('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');v=E.TRUSTED_TYPES_POLICY,V=v.createHTML("")}else v===void 0&&(v=dk(h,r)),v!==null&&typeof V=="string"&&(V=v.createHTML(""));Et&&Et(E),Kn=E}},Aa=Ee({},[...Ui,...Hi,...ek]),Ta=Ee({},[...Fi,...tk]),lp=function(E){let X=g(E);(!X||!X.tagName)&&(X={namespaceURI:ot,tagName:"template"});const ie=Rr(E.tagName),je=Rr(X.tagName);return qn[E.namespaceURI]?E.namespaceURI===Ln?X.namespaceURI===Ge?ie==="svg":X.namespaceURI===Wt?ie==="svg"&&(je==="annotation-xml"||lr[je]):!!Aa[ie]:E.namespaceURI===Wt?X.namespaceURI===Ge?ie==="math":X.namespaceURI===Ln?ie==="math"&&cr[je]:!!Ta[ie]:E.namespaceURI===Ge?X.namespaceURI===Ln&&!cr[je]||X.namespaceURI===Wt&&!lr[je]?!1:!Ta[ie]&&(rp[ie]||!Aa[ie]):!!(vs==="application/xhtml+xml"&&qn[E.namespaceURI]):!1},qt=function(E){Ss(t.removed,{element:E});try{g(E).removeChild(E)}catch{A(E)}},Pn=function(E,X){try{Ss(t.removed,{attribute:X.getAttributeNode(E),from:X})}catch{Ss(t.removed,{attribute:null,from:X})}if(X.removeAttribute(E),E==="is")if(M||W)try{qt(X)}catch{}else try{X.setAttribute(E,"")}catch{}},Ra=function(E){let X=null,ie=null;if(P)E=""+E;else{const Ke=Gi(E,/^[\r\n\t ]+/);ie=Ke&&Ke[0]}vs==="application/xhtml+xml"&&ot===Ge&&(E=''+E+"");const je=v?v.createHTML(E):E;if(ot===Ge)try{X=new f().parseFromString(je,vs)}catch{}if(!X||!X.documentElement){X=Y.createDocument(ot,"template",null);try{X.documentElement.innerHTML=Wn?V:je}catch{}}const ut=X.body||X.documentElement;return E&&ie&&ut.insertBefore(n.createTextNode(ie),ut.childNodes[0]||null),ot===Ge?j.call(X,R?"html":"body")[0]:R?X.documentElement:ut},Ca=function(E){return ne.call(E.ownerDocument||E,E,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},xi=function(E){return E instanceof d&&(typeof E.nodeName!="string"||typeof E.textContent!="string"||typeof E.removeChild!="function"||!(E.attributes instanceof u)||typeof E.removeAttribute!="function"||typeof E.setAttribute!="function"||typeof E.namespaceURI!="string"||typeof E.insertBefore!="function"||typeof E.hasChildNodes!="function")},Ia=function(E){return typeof l=="function"&&E instanceof l};function sn(ce,E,X){gr(ce,ie=>{ie.call(t,E,X,Kn)})}const La=function(E){let X=null;if(sn(J.beforeSanitizeElements,E,null),xi(E))return qt(E),!0;const ie=Ze(E.nodeName);if(sn(J.uponSanitizeElement,E,{tagName:ie,allowedTags:ve}),C&&E.hasChildNodes()&&!Ia(E.firstElementChild)&&_t(/<[/\w!]/g,E.innerHTML)&&_t(/<[/\w!]/g,E.textContent)||E.nodeType===Cs.progressingInstruction||C&&E.nodeType===Cs.comment&&_t(/<[/\w]/g,E.data))return qt(E),!0;if(!(ee.tagCheck instanceof Function&&ee.tagCheck(ie))&&(!ve[ie]||qe[ie])){if(!qe[ie]&&Oa(ie)&&(Ae.tagNameCheck instanceof RegExp&&_t(Ae.tagNameCheck,ie)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(ie)))return!1;if(ae&&!xe[ie]){const je=g(E)||E.parentNode,ut=L(E)||E.childNodes;if(ut&&je){const Ke=ut.length;for(let At=Ke-1;At>=0;--At){const rn=w(ut[At],!0);rn.__removalCount=(E.__removalCount||0)+1,je.insertBefore(rn,S(E))}}}return qt(E),!0}return E instanceof a&&!lp(E)||(ie==="noscript"||ie==="noembed"||ie==="noframes")&&_t(/<\/no(script|embed|frames)/i,E.innerHTML)?(qt(E),!0):(b&&E.nodeType===Cs.text&&(X=E.textContent,gr([G,x,D],je=>{X=As(X,je," ")}),E.textContent!==X&&(Ss(t.removed,{element:E.cloneNode()}),E.textContent=X)),sn(J.afterSanitizeElements,E,null),!1)},Pa=function(E,X,ie){if(B&&(X==="id"||X==="name")&&(ie in n||ie in ap))return!1;if(!(re&&!$[X]&&_t(I,X))){if(!(Q&&_t(N,X))){if(!(ee.attributeCheck instanceof Function&&ee.attributeCheck(X,E))){if(!pe[X]||$[X]){if(!(Oa(E)&&(Ae.tagNameCheck instanceof RegExp&&_t(Ae.tagNameCheck,E)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(E))&&(Ae.attributeNameCheck instanceof RegExp&&_t(Ae.attributeNameCheck,X)||Ae.attributeNameCheck instanceof Function&&Ae.attributeNameCheck(X,E))||X==="is"&&Ae.allowCustomizedBuiltInElements&&(Ae.tagNameCheck instanceof RegExp&&_t(Ae.tagNameCheck,ie)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(ie))))return!1}else if(!St[X]){if(!_t(le,As(ie,q,""))){if(!((X==="src"||X==="xlink:href"||X==="href")&&E!=="script"&&Xw(ie,"data:")===0&&rt[E])){if(!(ke&&!_t(U,As(ie,q,"")))){if(ie)return!1}}}}}}}return!0},Oa=function(E){return E!=="annotation-xml"&&Gi(E,Z)},Da=function(E){sn(J.beforeSanitizeAttributes,E,null);const{attributes:X}=E;if(!X||xi(E))return;const ie={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:pe,forceKeepAttr:void 0};let je=X.length;for(;je--;){const ut=X[je],{name:Ke,namespaceURI:At,value:rn}=ut,Yn=Ze(Ke),Si=rn;let at=Ke==="value"?Si:Jw(Si);if(ie.attrName=Yn,ie.attrValue=at,ie.keepAttr=!0,ie.forceKeepAttr=void 0,sn(J.uponSanitizeAttribute,E,ie),at=ie.attrValue,oe&&(Yn==="id"||Yn==="name")&&(Pn(Ke,E),at=te+at),C&&_t(/((--!?|])>)|<\/(style|title|textarea)/i,at)){Pn(Ke,E);continue}if(Yn==="attributename"&&Gi(at,"href")){Pn(Ke,E);continue}if(ie.forceKeepAttr)continue;if(!ie.keepAttr){Pn(Ke,E);continue}if(!_&&_t(/\/>/i,at)){Pn(Ke,E);continue}b&&gr([G,x,D],$a=>{at=As(at,$a," ")});const Na=Ze(E.nodeName);if(!Pa(Na,Yn,at)){Pn(Ke,E);continue}if(v&&typeof h=="object"&&typeof h.getAttributeType=="function"&&!At)switch(h.getAttributeType(Na,Yn)){case"TrustedHTML":{at=v.createHTML(at);break}case"TrustedScriptURL":{at=v.createScriptURL(at);break}}if(at!==Si)try{At?E.setAttributeNS(At,Ke,at):E.setAttribute(Ke,at),xi(E)?qt(E):Fl(t.removed)}catch{Pn(Ke,E)}}sn(J.afterSanitizeAttributes,E,null)},cp=function ce(E){let X=null;const ie=Ca(E);for(sn(J.beforeSanitizeShadowDOM,E,null);X=ie.nextNode();)sn(J.uponSanitizeShadowNode,X,null),La(X),Da(X),X.content instanceof i&&ce(X.content);sn(J.afterSanitizeShadowDOM,E,null)};return t.sanitize=function(ce){let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},X=null,ie=null,je=null,ut=null;if(Wn=!ce,Wn&&(ce=""),typeof ce!="string"&&!Ia(ce))if(typeof ce.toString=="function"){if(ce=ce.toString(),typeof ce!="string")throw Ts("dirty is not a string, aborting")}else throw Ts("toString is not a function");if(!t.isSupported)return ce;if(k||Ei(E),t.removed=[],typeof ce=="string"&&(fe=!1),fe){if(ce.nodeName){const rn=Ze(ce.nodeName);if(!ve[rn]||qe[rn])throw Ts("root node is forbidden and cannot be sanitized in-place")}}else if(ce instanceof l)X=Ra(""),ie=X.ownerDocument.importNode(ce,!0),ie.nodeType===Cs.element&&ie.nodeName==="BODY"||ie.nodeName==="HTML"?X=ie:X.appendChild(ie);else{if(!M&&!b&&!R&&ce.indexOf("<")===-1)return v&&F?v.createHTML(ce):ce;if(X=Ra(ce),!X)return M?null:F?V:""}X&&P&&qt(X.firstChild);const Ke=Ca(fe?ce:X);for(;je=Ke.nextNode();)La(je),Da(je),je.content instanceof i&&cp(je.content);if(fe)return ce;if(M){if(W)for(ut=z.call(X.ownerDocument);X.firstChild;)ut.appendChild(X.firstChild);else ut=X;return(pe.shadowroot||pe.shadowrootmode)&&(ut=he.call(s,ut,!0)),ut}let At=R?X.outerHTML:X.innerHTML;return R&&ve["!doctype"]&&X.ownerDocument&&X.ownerDocument.doctype&&X.ownerDocument.doctype.name&&_t(fd,X.ownerDocument.doctype.name)&&(At=" +`+At),b&&gr([G,x,D],rn=>{At=As(At,rn," ")}),v&&F?v.createHTML(At):At},t.setConfig=function(){let ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ei(ce),k=!0},t.clearConfig=function(){Kn=null,k=!1},t.isValidAttribute=function(ce,E,X){Kn||Ei({});const ie=Ze(ce),je=Ze(E);return Pa(ie,je,X)},t.addHook=function(ce,E){typeof E=="function"&&Ss(J[ce],E)},t.removeHook=function(ce,E){if(E!==void 0){const X=Kw(J[ce],E);return X===-1?void 0:Yw(J[ce],X,1)[0]}return Fl(J[ce])},t.removeHooks=function(ce){J[ce]=[]},t.removeAllHooks=function(){J=Xl()},t}var pk=hd();const fk="modulepreload",hk=function(e){return"/"+e},Jl={},m=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let a=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=o?.nonce||o?.getAttribute("nonce");r=a(n.map(c=>{if(c=hk(c),c in Jl)return;Jl[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":fk,u||(f.as="script"),f.crossOrigin="",f.href=c,l&&f.setAttribute("nonce",l),document.head.appendChild(f),u)return new Promise((h,y)=>{f.addEventListener("load",h),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})};let Xe=class extends Error{constructor(t){super(t),this.name="ShikiError"}};function mk(e){return pa(e)}function pa(e){return Array.isArray(e)?gk(e):e instanceof RegExp?e:typeof e=="object"?_k(e):e}function gk(e){let t=[];for(let n=0,s=e.length;n{for(let s in n)e[s]=n[s]}),e}function gd(e){const t=~e.lastIndexOf("/")||~e.lastIndexOf("\\");return t===0?e:~t===e.length-1?gd(e.substring(0,e.length-1)):e.substr(~t+1)}var Wi=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,vr=class{static hasCaptures(e){return e===null?!1:(Wi.lastIndex=0,Wi.test(e))}static replaceCaptures(e,t,n){return e.replace(Wi,(s,r,i,o)=>{let l=n[parseInt(r||i,10)];if(l){let a=t.substring(l.start,l.end);for(;a[0]===".";)a=a.substring(1);switch(o){case"downcase":return a.toLowerCase();case"upcase":return a.toUpperCase();default:return a}}else return s})}};function _d(e,t){return et?1:0}function vd(e,t){if(e===null&&t===null)return 0;if(!e)return-1;if(!t)return 1;let n=e.length,s=t.length;if(n===s){for(let r=0;rthis._root.match(e));getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;const t=e.scopeName,s=this._cachedMatchRoot.get(t).find(r=>vk(e.parent,r.parentScopes));return s?new wd(s.fontStyle,s.foreground,s.background):null}},qi=class Cr{constructor(t,n){this.parent=t,this.scopeName=n}static push(t,n){for(const s of n)t=new Cr(t,s);return t}static from(...t){let n=null;for(let s=0;s"){if(n===t.length-1)return!1;s=t[++n],r=!0}for(;e&&!yk(e.scopeName,s);){if(r)return!1;e=e.parent}if(!e)return!1;e=e.parent}return!0}function yk(e,t){return t===e||e.startsWith(t)&&e[t.length]==="."}var wd=class{constructor(e,t,n){this.fontStyle=e,this.foregroundId=t,this.backgroundId=n}};function bk(e){if(!e)return[];if(!e.settings||!Array.isArray(e.settings))return[];let t=e.settings,n=[],s=0;for(let r=0,i=t.length;r1&&(A=y.slice(0,y.length-1),A.reverse()),n[s++]=new wk(w,A,r,a,c,u)}}return n}var wk=class{constructor(e,t,n,s,r,i){this.scope=e,this.parentScopes=t,this.index=n,this.fontStyle=s,this.foreground=r,this.background=i}},ht=(e=>(e[e.NotSet=-1]="NotSet",e[e.None=0]="None",e[e.Italic=1]="Italic",e[e.Bold=2]="Bold",e[e.Underline=4]="Underline",e[e.Strikethrough=8]="Strikethrough",e))(ht||{});function kk(e,t){e.sort((a,c)=>{let u=_d(a.scope,c.scope);return u!==0||(u=vd(a.parentScopes,c.parentScopes),u!==0)?u:a.index-c.index});let n=0,s="#000000",r="#ffffff";for(;e.length>=1&&e[0].scope==="";){let a=e.shift();a.fontStyle!==-1&&(n=a.fontStyle),a.foreground!==null&&(s=a.foreground),a.background!==null&&(r=a.background)}let i=new Ek(t),o=new wd(n,i.getId(s),i.getId(r)),l=new Sk(new xo(0,null,-1,0,0),[]);for(let a=0,c=e.length;at?console.log("how did this happen?"):this.scopeDepth=t,n!==-1&&(this.fontStyle=n),s!==0&&(this.foreground=s),r!==0&&(this.background=r)}},Sk=class So{constructor(t,n=[],s={}){this._mainRule=t,this._children=s,this._rulesWithParentScopes=n}_rulesWithParentScopes;static _cmpBySpecificity(t,n){if(t.scopeDepth!==n.scopeDepth)return n.scopeDepth-t.scopeDepth;let s=0,r=0;for(;t.parentScopes[s]===">"&&s++,n.parentScopes[r]===">"&&r++,!(s>=t.parentScopes.length||r>=n.parentScopes.length);){const i=n.parentScopes[r].length-t.parentScopes[s].length;if(i!==0)return i;s++,r++}return n.parentScopes.length-t.parentScopes.length}match(t){if(t!==""){let s=t.indexOf("."),r,i;if(s===-1?(r=t,i=""):(r=t.substring(0,s),i=t.substring(s+1)),this._children.hasOwnProperty(r))return this._children[r].match(i)}const n=this._rulesWithParentScopes.concat(this._mainRule);return n.sort(So._cmpBySpecificity),n}insert(t,n,s,r,i,o){if(n===""){this._doInsertHere(t,s,r,i,o);return}let l=n.indexOf("."),a,c;l===-1?(a=n,c=""):(a=n.substring(0,l),c=n.substring(l+1));let u;this._children.hasOwnProperty(a)?u=this._children[a]:(u=new So(this._mainRule.clone(),xo.cloneArr(this._rulesWithParentScopes)),this._children[a]=u),u.insert(t+1,c,s,r,i,o)}_doInsertHere(t,n,s,r,i){if(n===null){this._mainRule.acceptOverwrite(t,s,r,i);return}for(let o=0,l=this._rulesWithParentScopes.length;o>>0}static getTokenType(t){return(t&768)>>>8}static containsBalancedBrackets(t){return(t&1024)!==0}static getFontStyle(t){return(t&30720)>>>11}static getForeground(t){return(t&16744448)>>>15}static getBackground(t){return(t&4278190080)>>>24}static set(t,n,s,r,i,o,l){let a=Dt.getLanguageId(t),c=Dt.getTokenType(t),u=Dt.containsBalancedBrackets(t)?1:0,d=Dt.getFontStyle(t),f=Dt.getForeground(t),h=Dt.getBackground(t);return n!==0&&(a=n),s!==8&&(c=s),r!==null&&(u=r?1:0),i!==-1&&(d=i),o!==0&&(f=o),l!==0&&(h=l),(a<<0|c<<8|u<<10|d<<11|f<<15|h<<24)>>>0}};function zr(e,t){const n=[],s=Ak(e);let r=s.next();for(;r!==null;){let a=0;if(r.length===2&&r.charAt(1)===":"){switch(r.charAt(0)){case"R":a=1;break;case"L":a=-1;break;default:console.log(`Unknown priority ${r} in scope selector`)}r=s.next()}let c=o();if(n.push({matcher:c,priority:a}),r!==",")break;r=s.next()}return n;function i(){if(r==="-"){r=s.next();const a=i();return c=>!!a&&!a(c)}if(r==="("){r=s.next();const a=l();return r===")"&&(r=s.next()),a}if(Ql(r)){const a=[];do a.push(r),r=s.next();while(Ql(r));return c=>t(a,c)}return null}function o(){const a=[];let c=i();for(;c;)a.push(c),c=i();return u=>a.every(d=>d(u))}function l(){const a=[];let c=o();for(;c&&(a.push(c),r==="|"||r===",");){do r=s.next();while(r==="|"||r===",");c=o()}return u=>a.some(d=>d(u))}}function Ql(e){return!!e&&!!e.match(/[\w\.:]+/)}function Ak(e){let t=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,n=t.exec(e);return{next:()=>{if(!n)return null;const s=n[0];return n=t.exec(e),s}}}function Ed(e){typeof e.dispose=="function"&&e.dispose()}var Js=class{constructor(e){this.scopeName=e}toKey(){return this.scopeName}},Tk=class{constructor(e,t){this.scopeName=e,this.ruleName=t}toKey(){return`${this.scopeName}#${this.ruleName}`}},Rk=class{_references=[];_seenReferenceKeys=new Set;get references(){return this._references}visitedRule=new Set;add(e){const t=e.toKey();this._seenReferenceKeys.has(t)||(this._seenReferenceKeys.add(t),this._references.push(e))}},Ck=class{constructor(e,t){this.repo=e,this.initialScopeName=t,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new Js(this.initialScopeName)]}seenFullScopeRequests=new Set;seenPartialScopeRequests=new Set;Q;processQueue(){const e=this.Q;this.Q=[];const t=new Rk;for(const n of e)Ik(n,this.initialScopeName,this.repo,t);for(const n of t.references)if(n instanceof Js){if(this.seenFullScopeRequests.has(n.scopeName))continue;this.seenFullScopeRequests.add(n.scopeName),this.Q.push(n)}else{if(this.seenFullScopeRequests.has(n.scopeName)||this.seenPartialScopeRequests.has(n.toKey()))continue;this.seenPartialScopeRequests.add(n.toKey()),this.Q.push(n)}}};function Ik(e,t,n,s){const r=n.lookup(e.scopeName);if(!r){if(e.scopeName===t)throw new Error(`No grammar provided for <${t}>`);return}const i=n.lookup(t);e instanceof Js?Ir({baseGrammar:i,selfGrammar:r},s):Ao(e.ruleName,{baseGrammar:i,selfGrammar:r,repository:r.repository},s);const o=n.injections(e.scopeName);if(o)for(const l of o)s.add(new Js(l))}function Ao(e,t,n){if(t.repository&&t.repository[e]){const s=t.repository[e];Wr([s],t,n)}}function Ir(e,t){e.selfGrammar.patterns&&Array.isArray(e.selfGrammar.patterns)&&Wr(e.selfGrammar.patterns,{...e,repository:e.selfGrammar.repository},t),e.selfGrammar.injections&&Wr(Object.values(e.selfGrammar.injections),{...e,repository:e.selfGrammar.repository},t)}function Wr(e,t,n){for(const s of e){if(n.visitedRule.has(s))continue;n.visitedRule.add(s);const r=s.repository?md({},t.repository,s.repository):t.repository;Array.isArray(s.patterns)&&Wr(s.patterns,{...t,repository:r},n);const i=s.include;if(!i)continue;const o=xd(i);switch(o.kind){case 0:Ir({...t,selfGrammar:t.baseGrammar},n);break;case 1:Ir(t,n);break;case 2:Ao(o.ruleName,{...t,repository:r},n);break;case 3:case 4:const l=o.scopeName===t.selfGrammar.scopeName?t.selfGrammar:o.scopeName===t.baseGrammar.scopeName?t.baseGrammar:void 0;if(l){const a={baseGrammar:t.baseGrammar,selfGrammar:l,repository:r};o.kind===4?Ao(o.ruleName,a,n):Ir(a,n)}else o.kind===4?n.add(new Tk(o.scopeName,o.ruleName)):n.add(new Js(o.scopeName));break}}}var Lk=class{kind=0},Pk=class{kind=1},Ok=class{constructor(e){this.ruleName=e}kind=2},Dk=class{constructor(e){this.scopeName=e}kind=3},Nk=class{constructor(e,t){this.scopeName=e,this.ruleName=t}kind=4};function xd(e){if(e==="$base")return new Lk;if(e==="$self")return new Pk;const t=e.indexOf("#");if(t===-1)return new Dk(e);if(t===0)return new Ok(e.substring(1));{const n=e.substring(0,t),s=e.substring(t+1);return new Nk(n,s)}}var $k=/\\(\d+)/,ec=/\\(\d+)/g,Mk=-1,Sd=-2;var or=class{$location;id;_nameIsCapturing;_name;_contentNameIsCapturing;_contentName;constructor(e,t,n,s){this.$location=e,this.id=t,this._name=n||null,this._nameIsCapturing=vr.hasCaptures(this._name),this._contentName=s||null,this._contentNameIsCapturing=vr.hasCaptures(this._contentName)}get debugName(){const e=this.$location?`${gd(this.$location.filename)}:${this.$location.line}`:"unknown";return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,t){return!this._nameIsCapturing||this._name===null||e===null||t===null?this._name:vr.replaceCaptures(this._name,e,t)}getContentName(e,t){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:vr.replaceCaptures(this._contentName,e,t)}},Vk=class extends or{retokenizeCapturedWithRuleId;constructor(e,t,n,s,r){super(e,t,n,s),this.retokenizeCapturedWithRuleId=r}dispose(){}collectPatterns(e,t){throw new Error("Not supported!")}compile(e,t){throw new Error("Not supported!")}compileAG(e,t,n,s){throw new Error("Not supported!")}},Bk=class extends or{_match;captures;_cachedCompiledPatterns;constructor(e,t,n,s,r){super(e,t,n,null),this._match=new Zs(s,this.id),this.captures=r,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,t){t.push(this._match)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Qs,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},tc=class extends or{hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,s,r){super(e,t,n,s),this.patterns=r.patterns,this.hasMissingPatterns=r.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}collectPatterns(e,t){for(const n of this.patterns)e.getRule(n).collectPatterns(e,t)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Qs,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},To=class extends or{_begin;beginCaptures;_end;endHasBackReferences;endCaptures;applyEndPatternLast;hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,s,r,i,o,l,a,c){super(e,t,n,s),this._begin=new Zs(r,this.id),this.beginCaptures=i,this._end=new Zs(o||"￿",-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=l,this.applyEndPatternLast=a||!1,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,t){return this._end.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e,t).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e,t).compileAG(e,n,s)}_getCachedCompiledPatterns(e,t){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Qs;for(const n of this.patterns)e.getRule(n).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,t):this._cachedCompiledPatterns.setSource(0,t)),this._cachedCompiledPatterns}},qr=class extends or{_begin;beginCaptures;whileCaptures;_while;whileHasBackReferences;hasMissingPatterns;patterns;_cachedCompiledPatterns;_cachedCompiledWhilePatterns;constructor(e,t,n,s,r,i,o,l,a){super(e,t,n,s),this._begin=new Zs(r,this.id),this.beginCaptures=i,this.whileCaptures=l,this._while=new Zs(o,Sd),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=a.patterns,this.hasMissingPatterns=a.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&(this._cachedCompiledPatterns.dispose(),this._cachedCompiledPatterns=null),this._cachedCompiledWhilePatterns&&(this._cachedCompiledWhilePatterns.dispose(),this._cachedCompiledWhilePatterns=null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,t){return this._while.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,s){return this._getCachedCompiledPatterns(e).compileAG(e,n,s)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Qs;for(const t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,t){return this._getCachedCompiledWhilePatterns(e,t).compile(e)}compileWhileAG(e,t,n,s){return this._getCachedCompiledWhilePatterns(e,t).compileAG(e,n,s)}_getCachedCompiledWhilePatterns(e,t){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new Qs,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,t||"￿"),this._cachedCompiledWhilePatterns}},Ad=class dt{static createCaptureRule(t,n,s,r,i){return t.registerRule(o=>new Vk(n,o,s,r,i))}static getCompiledRuleId(t,n,s){return t.id||n.registerRule(r=>{if(t.id=r,t.match)return new Bk(t.$vscodeTextmateLocation,t.id,t.name,t.match,dt._compileCaptures(t.captures,n,s));if(typeof t.begin>"u"){t.repository&&(s=md({},s,t.repository));let i=t.patterns;return typeof i>"u"&&t.include&&(i=[{include:t.include}]),new tc(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,dt._compilePatterns(i,n,s))}return t.while?new qr(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,dt._compileCaptures(t.beginCaptures||t.captures,n,s),t.while,dt._compileCaptures(t.whileCaptures||t.captures,n,s),dt._compilePatterns(t.patterns,n,s)):new To(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,dt._compileCaptures(t.beginCaptures||t.captures,n,s),t.end,dt._compileCaptures(t.endCaptures||t.captures,n,s),t.applyEndPatternLast,dt._compilePatterns(t.patterns,n,s))}),t.id}static _compileCaptures(t,n,s){let r=[];if(t){let i=0;for(const o in t){if(o==="$vscodeTextmateLocation")continue;const l=parseInt(o,10);l>i&&(i=l)}for(let o=0;o<=i;o++)r[o]=null;for(const o in t){if(o==="$vscodeTextmateLocation")continue;const l=parseInt(o,10);let a=0;t[o].patterns&&(a=dt.getCompiledRuleId(t[o],n,s)),r[l]=dt.createCaptureRule(n,t[o].$vscodeTextmateLocation,t[o].name,t[o].contentName,a)}}return r}static _compilePatterns(t,n,s){let r=[];if(t)for(let i=0,o=t.length;it.substring(r.start,r.end));return ec.lastIndex=0,this.source.replace(ec,(r,i)=>yd(s[parseInt(i,10)]||""))}_buildAnchorCache(){if(typeof this.source!="string")throw new Error("This method should only be called if the source is a string");let t=[],n=[],s=[],r=[],i,o,l,a;for(i=0,o=this.source.length;in.source);this._cached=new nc(e,t,this._items.map(n=>n.ruleId))}return this._cached}compileAG(e,t,n){return this._hasAnchors?t?n?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G0):n?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G0):this.compile(e)}_resolveAnchors(e,t,n){let s=this._items.map(r=>r.resolveAnchors(t,n));return new nc(e,s,this._items.map(r=>r.ruleId))}},nc=class{constructor(e,t,n){this.regExps=t,this.rules=n,this.scanner=e.createOnigScanner(t)}scanner;dispose(){typeof this.scanner.dispose=="function"&&this.scanner.dispose()}toString(){const e=[];for(let t=0,n=this.rules.length;t{const n=this._scopeToLanguage(t),s=this._toStandardTokenType(t);return new Ki(n,s)});_scopeToLanguage(t){return this._embeddedLanguagesMatcher.match(t)||0}_toStandardTokenType(t){const n=t.match(Ro.STANDARD_TOKEN_TYPE_REGEXP);if(!n)return 8;switch(n[1]){case"comment":return 1;case"string":return 2;case"regex":return 3;case"meta.embedded":return 0}throw new Error("Unexpected match for standard token type!")}static STANDARD_TOKEN_TYPE_REGEXP=/\b(comment|string|regex|meta\.embedded)\b/},Gk=class{values;scopesRegExp;constructor(e){if(e.length===0)this.values=null,this.scopesRegExp=null;else{this.values=new Map(e);const t=e.map(([n,s])=>yd(n));t.sort(),t.reverse(),this.scopesRegExp=new RegExp(`^((${t.join(")|(")}))($|\\.)`,"")}}match(e){if(!this.scopesRegExp)return;const t=e.match(this.scopesRegExp);if(t)return this.values.get(t[1])}},sc=class{constructor(e,t){this.stack=e,this.stoppedEarly=t}};function Rd(e,t,n,s,r,i,o,l){const a=t.content.length;let c=!1,u=-1;if(o){const h=Uk(e,t,n,s,r,i);r=h.stack,s=h.linePos,n=h.isFirstLine,u=h.anchorPosition}const d=Date.now();for(;!c;){if(l!==0&&Date.now()-d>l)return new sc(r,!0);f()}return new sc(r,!1);function f(){const h=Hk(e,t,n,s,r,u);if(!h){i.produce(r,a),c=!0;return}const y=h.captureIndices,w=h.matchedRuleId,A=y&&y.length>0?y[0].end>s:!1;if(w===Mk){const S=r.getRule(e);i.produce(r,y[0].start),r=r.withContentNameScopesList(r.nameScopesList),Os(e,t,n,r,i,S.endCaptures,y),i.produce(r,y[0].end);const L=r;if(r=r.parent,u=L.getAnchorPos(),!A&&L.getEnterPos()===s){r=L,i.produce(r,a),c=!0;return}}else{const S=e.getRule(w);i.produce(r,y[0].start);const L=r,g=S.getName(t.content,y),v=r.contentNameScopesList.pushAttributed(g,e);if(r=r.push(w,s,u,y[0].end===a,null,v,v),S instanceof To){const V=S;Os(e,t,n,r,i,V.beginCaptures,y),i.produce(r,y[0].end),u=y[0].end;const Y=V.getContentName(t.content,y),ne=v.pushAttributed(Y,e);if(r=r.withContentNameScopesList(ne),V.endHasBackReferences&&(r=r.withEndRule(V.getEndWithResolvedBackReferences(t.content,y))),!A&&L.hasSameRuleAs(r)){r=r.pop(),i.produce(r,a),c=!0;return}}else if(S instanceof qr){const V=S;Os(e,t,n,r,i,V.beginCaptures,y),i.produce(r,y[0].end),u=y[0].end;const Y=V.getContentName(t.content,y),ne=v.pushAttributed(Y,e);if(r=r.withContentNameScopesList(ne),V.whileHasBackReferences&&(r=r.withEndRule(V.getWhileWithResolvedBackReferences(t.content,y))),!A&&L.hasSameRuleAs(r)){r=r.pop(),i.produce(r,a),c=!0;return}}else if(Os(e,t,n,r,i,S.captures,y),i.produce(r,y[0].end),r=r.pop(),!A){r=r.safePop(),i.produce(r,a),c=!0;return}}y[0].end>s&&(s=y[0].end,n=!1)}}function Uk(e,t,n,s,r,i){let o=r.beginRuleCapturedEOL?0:-1;const l=[];for(let a=r;a;a=a.pop()){const c=a.getRule(e);c instanceof qr&&l.push({rule:c,stack:a})}for(let a=l.pop();a;a=l.pop()){const{ruleScanner:c,findOptions:u}=Wk(a.rule,e,a.stack.endRule,n,s===o),d=c.findNextMatchSync(t,s,u);if(d){if(d.ruleId!==Sd){r=a.stack.pop();break}d.captureIndices&&d.captureIndices.length&&(i.produce(a.stack,d.captureIndices[0].start),Os(e,t,n,a.stack,i,a.rule.whileCaptures,d.captureIndices),i.produce(a.stack,d.captureIndices[0].end),o=d.captureIndices[0].end,d.captureIndices[0].end>s&&(s=d.captureIndices[0].end,n=!1))}else{r=a.stack.pop();break}}return{stack:r,linePos:s,anchorPosition:o,isFirstLine:n}}function Hk(e,t,n,s,r,i){const o=Fk(e,t,n,s,r,i),l=e.getInjections();if(l.length===0)return o;const a=zk(l,e,t,n,s,r,i);if(!a)return o;if(!o)return a;const c=o.captureIndices[0].start,u=a.captureIndices[0].start;return u=l)&&(l=g,a=L.captureIndices,c=L.ruleId,u=y.priority,l===r))break}return a?{priorityMatch:u===-1,captureIndices:a,matchedRuleId:c}:null}function Cd(e,t,n,s,r){return{ruleScanner:e.compileAG(t,n,s,r),findOptions:0}}function Wk(e,t,n,s,r){return{ruleScanner:e.compileWhileAG(t,n,s,r),findOptions:0}}function Os(e,t,n,s,r,i,o){if(i.length===0)return;const l=t.content,a=Math.min(i.length,o.length),c=[],u=o[0].end;for(let d=0;du)break;for(;c.length>0&&c[c.length-1].endPos<=h.start;)r.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop();if(c.length>0?r.produceFromScopes(c[c.length-1].scopes,h.start):r.produce(s,h.start),f.retokenizeCapturedWithRuleId){const w=f.getName(l,o),A=s.contentNameScopesList.pushAttributed(w,e),S=f.getContentName(l,o),L=A.pushAttributed(S,e),g=s.push(f.retokenizeCapturedWithRuleId,h.start,-1,!1,null,A,L),v=e.createOnigString(l.substring(0,h.end));Rd(e,v,n&&h.start===0,h.start,g,r,!1,0),Ed(v);continue}const y=f.getName(l,o);if(y!==null){const A=(c.length>0?c[c.length-1].scopes:s.contentNameScopesList).pushAttributed(y,e);c.push(new qk(A,h.end))}}for(;c.length>0;)r.produceFromScopes(c[c.length-1].scopes,c[c.length-1].endPos),c.pop()}var qk=class{scopes;endPos;constructor(e,t){this.scopes=e,this.endPos=t}};function Kk(e,t,n,s,r,i,o,l){return new Xk(e,t,n,s,r,i,o,l)}function rc(e,t,n,s,r){const i=zr(t,Kr),o=Ad.getCompiledRuleId(n,s,r.repository);for(const l of i)e.push({debugSelector:t,matcher:l.matcher,ruleId:o,grammar:r,priority:l.priority})}function Kr(e,t){if(t.length{for(let r=n;rn&&e.substr(0,n)===t&&e[n]==="."}var Xk=class{constructor(e,t,n,s,r,i,o,l){if(this._rootScopeName=e,this.balancedBracketSelectors=i,this._onigLib=l,this._basicScopeAttributesProvider=new jk(n,s),this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=o,this._grammar=ic(t,null),this._injections=null,this._tokenTypeMatchers=[],r)for(const a of Object.keys(r)){const c=zr(a,Kr);for(const u of c)this._tokenTypeMatchers.push({matcher:u.matcher,type:r[a]})}}_rootId;_lastRuleId;_ruleId2desc;_includedGrammars;_grammarRepository;_grammar;_injections;_basicScopeAttributesProvider;_tokenTypeMatchers;get themeProvider(){return this._grammarRepository}dispose(){for(const e of this._ruleId2desc)e&&e.dispose()}createOnigScanner(e){return this._onigLib.createOnigScanner(e)}createOnigString(e){return this._onigLib.createOnigString(e)}getMetadataForScope(e){return this._basicScopeAttributesProvider.getBasicScopeAttributes(e)}_collectInjections(){const e={lookup:r=>r===this._rootScopeName?this._grammar:this.getExternalGrammar(r),injections:r=>this._grammarRepository.injections(r)},t=[],n=this._rootScopeName,s=e.lookup(n);if(s){const r=s.injections;if(r)for(let o in r)rc(t,o,r[o],this,s);const i=this._grammarRepository.injections(n);i&&i.forEach(o=>{const l=this.getExternalGrammar(o);if(l){const a=l.injectionSelector;a&&rc(t,a,l,this,l)}})}return t.sort((r,i)=>r.priority-i.priority),t}getInjections(){return this._injections===null&&(this._injections=this._collectInjections()),this._injections}registerRule(e){const t=++this._lastRuleId,n=e(t);return this._ruleId2desc[t]=n,n}getRule(e){return this._ruleId2desc[e]}getExternalGrammar(e,t){if(this._includedGrammars[e])return this._includedGrammars[e];if(this._grammarRepository){const n=this._grammarRepository.lookup(e);if(n)return this._includedGrammars[e]=ic(n,t&&t.$base),this._includedGrammars[e]}}tokenizeLine(e,t,n=0){const s=this._tokenize(e,t,!1,n);return{tokens:s.lineTokens.getResult(s.ruleStack,s.lineLength),ruleStack:s.ruleStack,stoppedEarly:s.stoppedEarly}}tokenizeLine2(e,t,n=0){const s=this._tokenize(e,t,!0,n);return{tokens:s.lineTokens.getBinaryResult(s.ruleStack,s.lineLength),ruleStack:s.ruleStack,stoppedEarly:s.stoppedEarly}}_tokenize(e,t,n,s){this._rootId===-1&&(this._rootId=Ad.getCompiledRuleId(this._grammar.repository.$self,this,this._grammar.repository),this.getInjections());let r;if(!t||t===Co.NULL){r=!0;const c=this._basicScopeAttributesProvider.getDefaultAttributes(),u=this.themeProvider.getDefaults(),d=ms.set(0,c.languageId,c.tokenType,null,u.fontStyle,u.foregroundId,u.backgroundId),f=this.getRule(this._rootId).getName(null,null);let h;f?h=Hs.createRootAndLookUpScopeName(f,d,this):h=Hs.createRoot("unknown",d),t=new Co(null,this._rootId,-1,-1,!1,null,h,h)}else r=!1,t.reset();e=e+` +`;const i=this.createOnigString(e),o=i.content.length,l=new Zk(n,e,this._tokenTypeMatchers,this.balancedBracketSelectors),a=Rd(this,i,r,0,t,l,!0,s);return Ed(i),{lineLength:o,lineTokens:l,ruleStack:a.stack,stoppedEarly:a.stoppedEarly}}};function ic(e,t){return e=mk(e),e.repository=e.repository||{},e.repository.$self={$vscodeTextmateLocation:e.$vscodeTextmateLocation,patterns:e.patterns,name:e.scopeName},e.repository.$base=t||e.repository.$self,e}var Hs=class Xt{constructor(t,n,s){this.parent=t,this.scopePath=n,this.tokenAttributes=s}static fromExtension(t,n){let s=t,r=t?.scopePath??null;for(const i of n)r=qi.push(r,i.scopeNames),s=new Xt(s,r,i.encodedTokenAttributes);return s}static createRoot(t,n){return new Xt(null,new qi(null,t),n)}static createRootAndLookUpScopeName(t,n,s){const r=s.getMetadataForScope(t),i=new qi(null,t),o=s.themeProvider.themeMatch(i),l=Xt.mergeAttributes(n,r,o);return new Xt(null,i,l)}get scopeName(){return this.scopePath.scopeName}toString(){return this.getScopeNames().join(" ")}equals(t){return Xt.equals(this,t)}static equals(t,n){do{if(t===n||!t&&!n)return!0;if(!t||!n||t.scopeName!==n.scopeName||t.tokenAttributes!==n.tokenAttributes)return!1;t=t.parent,n=n.parent}while(!0)}static mergeAttributes(t,n,s){let r=-1,i=0,o=0;return s!==null&&(r=s.fontStyle,i=s.foregroundId,o=s.backgroundId),ms.set(t,n.languageId,n.tokenType,null,r,i,o)}pushAttributed(t,n){if(t===null)return this;if(t.indexOf(" ")===-1)return Xt._pushAttributed(this,t,n);const s=t.split(/ /g);let r=this;for(const i of s)r=Xt._pushAttributed(r,i,n);return r}static _pushAttributed(t,n,s){const r=s.getMetadataForScope(n),i=t.scopePath.push(n),o=s.themeProvider.themeMatch(i),l=Xt.mergeAttributes(t.tokenAttributes,r,o);return new Xt(t,i,l)}getScopeNames(){return this.scopePath.getSegments()}getExtensionIfDefined(t){const n=[];let s=this;for(;s&&s!==t;)n.push({encodedTokenAttributes:s.tokenAttributes,scopeNames:s.scopePath.getExtensionIfDefined(s.parent?.scopePath??null)}),s=s.parent;return s===t?n.reverse():void 0}},Co=class Mn{constructor(t,n,s,r,i,o,l,a){this.parent=t,this.ruleId=n,this.beginRuleCapturedEOL=i,this.endRule=o,this.nameScopesList=l,this.contentNameScopesList=a,this.depth=this.parent?this.parent.depth+1:1,this._enterPos=s,this._anchorPos=r}_stackElementBrand=void 0;static NULL=new Mn(null,0,0,0,!1,null,null,null);_enterPos;_anchorPos;depth;equals(t){return t===null?!1:Mn._equals(this,t)}static _equals(t,n){return t===n?!0:this._structuralEquals(t,n)?Hs.equals(t.contentNameScopesList,n.contentNameScopesList):!1}static _structuralEquals(t,n){do{if(t===n||!t&&!n)return!0;if(!t||!n||t.depth!==n.depth||t.ruleId!==n.ruleId||t.endRule!==n.endRule)return!1;t=t.parent,n=n.parent}while(!0)}clone(){return this}static _reset(t){for(;t;)t._enterPos=-1,t._anchorPos=-1,t=t.parent}reset(){Mn._reset(this)}pop(){return this.parent}safePop(){return this.parent?this.parent:this}push(t,n,s,r,i,o,l){return new Mn(this,t,n,s,r,i,o,l)}getEnterPos(){return this._enterPos}getAnchorPos(){return this._anchorPos}getRule(t){return t.getRule(this.ruleId)}toString(){const t=[];return this._writeString(t,0),"["+t.join(",")+"]"}_writeString(t,n){return this.parent&&(n=this.parent._writeString(t,n)),t[n++]=`(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`,n}withContentNameScopesList(t){return this.contentNameScopesList===t?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,t)}withEndRule(t){return this.endRule===t?this:new Mn(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,t,this.nameScopesList,this.contentNameScopesList)}hasSameRuleAs(t){let n=this;for(;n&&n._enterPos===t._enterPos;){if(n.ruleId===t.ruleId)return!0;n=n.parent}return!1}toStateStackFrame(){return{ruleId:this.ruleId,beginRuleCapturedEOL:this.beginRuleCapturedEOL,endRule:this.endRule,nameScopesList:this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList??null)??[],contentNameScopesList:this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList)??[]}}static pushFrame(t,n){const s=Hs.fromExtension(t?.nameScopesList??null,n.nameScopesList);return new Mn(t,n.ruleId,n.enterPos??-1,n.anchorPos??-1,n.beginRuleCapturedEOL,n.endRule,s,Hs.fromExtension(s,n.contentNameScopesList))}},Jk=class{balancedBracketScopes;unbalancedBracketScopes;allowAny=!1;constructor(e,t){this.balancedBracketScopes=e.flatMap(n=>n==="*"?(this.allowAny=!0,[]):zr(n,Kr).map(s=>s.matcher)),this.unbalancedBracketScopes=t.flatMap(n=>zr(n,Kr).map(s=>s.matcher))}get matchesAlways(){return this.allowAny&&this.unbalancedBracketScopes.length===0}get matchesNever(){return this.balancedBracketScopes.length===0&&!this.allowAny}match(e){for(const t of this.unbalancedBracketScopes)if(t(e))return!1;for(const t of this.balancedBracketScopes)if(t(e))return!0;return this.allowAny}},Zk=class{constructor(e,t,n,s){this.balancedBracketSelectors=s,this._emitBinaryTokens=e,this._tokenTypeOverrides=n,this._lineText=null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}_emitBinaryTokens;_lineText;_tokens;_binaryTokens;_lastTokenEndIndex;_tokenTypeOverrides;produce(e,t){this.produceFromScopes(e.contentNameScopesList,t)}produceFromScopes(e,t){if(this._lastTokenEndIndex>=t)return;if(this._emitBinaryTokens){let s=e?.tokenAttributes??0,r=!1;if(this.balancedBracketSelectors?.matchesAlways&&(r=!0),this._tokenTypeOverrides.length>0||this.balancedBracketSelectors&&!this.balancedBracketSelectors.matchesAlways&&!this.balancedBracketSelectors.matchesNever){const i=e?.getScopeNames()??[];for(const o of this._tokenTypeOverrides)o.matcher(i)&&(s=ms.set(s,0,o.type,null,-1,0,0));this.balancedBracketSelectors&&(r=this.balancedBracketSelectors.match(i))}if(r&&(s=ms.set(s,0,8,r,-1,0,0)),this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-1]===s){this._lastTokenEndIndex=t;return}this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(s),this._lastTokenEndIndex=t;return}const n=e?.getScopeNames()??[];this._tokens.push({startIndex:this._lastTokenEndIndex,endIndex:t,scopes:n}),this._lastTokenEndIndex=t}getResult(e,t){return this._tokens.length>0&&this._tokens[this._tokens.length-1].startIndex===t-1&&this._tokens.pop(),this._tokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._tokens[this._tokens.length-1].startIndex=0),this._tokens}getBinaryResult(e,t){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===t-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),this._binaryTokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._binaryTokens[this._binaryTokens.length-2]=0);const n=new Uint32Array(this._binaryTokens.length);for(let s=0,r=this._binaryTokens.length;s0;)o.Q.map(l=>this._loadSingleGrammar(l.scopeName)),o.processQueue();return this._grammarForScopeName(t,n,s,r,i)}_loadSingleGrammar(t){this._ensureGrammarCache.has(t)||(this._doLoadSingleGrammar(t),this._ensureGrammarCache.set(t,!0))}_doLoadSingleGrammar(t){const n=this._options.loadGrammar(t);if(n){const s=typeof this._options.getInjections=="function"?this._options.getInjections(t):void 0;this._syncRegistry.addGrammar(n,s)}}addGrammar(t,n=[],s=0,r=null){return this._syncRegistry.addGrammar(t,n),this._grammarForScopeName(t.scopeName,s,r)}_grammarForScopeName(t,n=0,s=null,r=null,i=null){return this._syncRegistry.grammarForScopeName(t,n,s,r,i)}},Io=Co.NULL;const tE=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"];class ar{constructor(t,n,s){this.normal=n,this.property=t,s&&(this.space=s)}}ar.prototype.normal={};ar.prototype.property={};ar.prototype.space=void 0;function Id(e,t){const n={},s={};for(const r of e)Object.assign(n,r.property),Object.assign(s,r.normal);return new ar(n,s,t)}function Lo(e){return e.toLowerCase()}class Rt{constructor(t,n){this.attribute=n,this.property=t}}Rt.prototype.attribute="";Rt.prototype.booleanish=!1;Rt.prototype.boolean=!1;Rt.prototype.commaOrSpaceSeparated=!1;Rt.prototype.commaSeparated=!1;Rt.prototype.defined=!1;Rt.prototype.mustUseProperty=!1;Rt.prototype.number=!1;Rt.prototype.overloadedBoolean=!1;Rt.prototype.property="";Rt.prototype.spaceSeparated=!1;Rt.prototype.space=void 0;let nE=0;const be=zn(),Ye=zn(),Po=zn(),K=zn(),Ve=zn(),os=zn(),It=zn();function zn(){return 2**++nE}const Oo=Object.freeze(Object.defineProperty({__proto__:null,boolean:be,booleanish:Ye,commaOrSpaceSeparated:It,commaSeparated:os,number:K,overloadedBoolean:Po,spaceSeparated:Ve},Symbol.toStringTag,{value:"Module"})),Yi=Object.keys(Oo);class fa extends Rt{constructor(t,n,s,r){let i=-1;if(super(t,n),oc(this,"space",r),typeof s=="number")for(;++i4&&n.slice(0,4)==="data"&&oE.test(t)){if(t.charAt(4)==="-"){const i=t.slice(5).replace(ac,cE);s="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=t.slice(4);if(!ac.test(i)){let o=i.replace(iE,lE);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}r=fa}return new r(s,t)}function lE(e){return"-"+e.toLowerCase()}function cE(e){return e.charAt(1).toUpperCase()}const uE=Id([Ld,sE,Dd,Nd,$d],"html"),Md=Id([Ld,rE,Dd,Nd,$d],"svg"),lc={}.hasOwnProperty;function dE(e,t){const n=t||{};function s(r,...i){let o=s.invalid;const l=s.handlers;if(r&&lc.call(r,e)){const a=String(r[e]);o=lc.call(l,a)?l[a]:s.unknown}if(o)return o.call(this,r,...i)}return s.handlers=n.handlers||{},s.invalid=n.invalid,s.unknown=n.unknown,s}const pE=/["&'<>`]/g,fE=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,hE=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,mE=/[|\\{}()[\]^$+*?.]/g,cc=new WeakMap;function gE(e,t){if(e=e.replace(t.subset?_E(t.subset):pE,s),t.subset||t.escapeOnly)return e;return e.replace(fE,n).replace(hE,s);function n(r,i,o){return t.format((r.charCodeAt(0)-55296)*1024+r.charCodeAt(1)-56320+65536,o.charCodeAt(i+2),t)}function s(r,i,o){return t.format(r.charCodeAt(0),o.charCodeAt(i+1),t)}}function _E(e){let t=cc.get(e);return t||(t=vE(e),cc.set(e,t)),t}function vE(e){const t=[];let n=-1;for(;++n",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›",euro:"€"},xE=["cent","copy","divide","gt","lt","not","para","times"],Vd={}.hasOwnProperty,Do={};let yr;for(yr in Xi)Vd.call(Xi,yr)&&(Do[Xi[yr]]=yr);const SE=/[^\dA-Za-z]/;function AE(e,t,n,s){const r=String.fromCharCode(e);if(Vd.call(Do,r)){const i=Do[r],o="&"+i;return n&&EE.includes(i)&&!xE.includes(i)&&(!s||t&&t!==61&&SE.test(String.fromCharCode(t)))?o:o+";"}return""}function TE(e,t,n){let s=bE(e,t,n.omitOptionalSemicolons),r;if((n.useNamedReferences||n.useShortestReferences)&&(r=AE(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!r)&&n.useShortestReferences){const i=kE(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|"],IE=["<",">"];function LE(e,t,n,s){return s.settings.bogusComments?"":"";function r(i){return as(i,Object.assign({},s.settings.characterReferences,{subset:IE}))}}function PE(e,t,n,s){return""}function uc(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let s=0,r=n.indexOf(t);for(;r!==-1;)s++,r=n.indexOf(t,r+t.length);return s}function OE(e,t){const n=t||{};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}function DE(e){return e.join(" ").trim()}const NE=/[ \t\n\f\r]/g;function ha(e){return typeof e=="object"?e.type==="text"?dc(e.value):!1:dc(e)}function dc(e){return e.replace(NE,"")===""}const nt=jd(1),Bd=jd(-1),$E=[];function jd(e){return t;function t(n,s,r){const i=n?n.children:$E;let o=(s||0)+e,l=i[o];if(!r)for(;l&&ha(l);)o+=e,l=i[o];return l}}const ME={}.hasOwnProperty;function Gd(e){return t;function t(n,s,r){return ME.call(e,n.tagName)&&e[n.tagName](n,s,r)}}const ma=Gd({body:BE,caption:Ji,colgroup:Ji,dd:HE,dt:UE,head:Ji,html:VE,li:GE,optgroup:FE,option:zE,p:jE,rp:pc,rt:pc,tbody:qE,td:fc,tfoot:KE,th:fc,thead:WE,tr:YE});function Ji(e,t,n){const s=nt(n,t,!0);return!s||s.type!=="comment"&&!(s.type==="text"&&ha(s.value.charAt(0)))}function VE(e,t,n){const s=nt(n,t);return!s||s.type!=="comment"}function BE(e,t,n){const s=nt(n,t);return!s||s.type!=="comment"}function jE(e,t,n){const s=nt(n,t);return s?s.type==="element"&&(s.tagName==="address"||s.tagName==="article"||s.tagName==="aside"||s.tagName==="blockquote"||s.tagName==="details"||s.tagName==="div"||s.tagName==="dl"||s.tagName==="fieldset"||s.tagName==="figcaption"||s.tagName==="figure"||s.tagName==="footer"||s.tagName==="form"||s.tagName==="h1"||s.tagName==="h2"||s.tagName==="h3"||s.tagName==="h4"||s.tagName==="h5"||s.tagName==="h6"||s.tagName==="header"||s.tagName==="hgroup"||s.tagName==="hr"||s.tagName==="main"||s.tagName==="menu"||s.tagName==="nav"||s.tagName==="ol"||s.tagName==="p"||s.tagName==="pre"||s.tagName==="section"||s.tagName==="table"||s.tagName==="ul"):!n||!(n.type==="element"&&(n.tagName==="a"||n.tagName==="audio"||n.tagName==="del"||n.tagName==="ins"||n.tagName==="map"||n.tagName==="noscript"||n.tagName==="video"))}function GE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="li"}function UE(e,t,n){const s=nt(n,t);return!!(s&&s.type==="element"&&(s.tagName==="dt"||s.tagName==="dd"))}function HE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="dt"||s.tagName==="dd")}function pc(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="rp"||s.tagName==="rt")}function FE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="optgroup"}function zE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="option"||s.tagName==="optgroup")}function WE(e,t,n){const s=nt(n,t);return!!(s&&s.type==="element"&&(s.tagName==="tbody"||s.tagName==="tfoot"))}function qE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="tbody"||s.tagName==="tfoot")}function KE(e,t,n){return!nt(n,t)}function YE(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&s.tagName==="tr"}function fc(e,t,n){const s=nt(n,t);return!s||s.type==="element"&&(s.tagName==="td"||s.tagName==="th")}const XE=Gd({body:QE,colgroup:ex,head:ZE,html:JE,tbody:tx});function JE(e){const t=nt(e,-1);return!t||t.type!=="comment"}function ZE(e){const t=new Set;for(const s of e.children)if(s.type==="element"&&(s.tagName==="base"||s.tagName==="title")){if(t.has(s.tagName))return!1;t.add(s.tagName)}const n=e.children[0];return!n||n.type==="element"}function QE(e){const t=nt(e,-1,!0);return!t||t.type!=="comment"&&!(t.type==="text"&&ha(t.value.charAt(0)))&&!(t.type==="element"&&(t.tagName==="meta"||t.tagName==="link"||t.tagName==="script"||t.tagName==="style"||t.tagName==="template"))}function ex(e,t,n){const s=Bd(n,t),r=nt(e,-1,!0);return n&&s&&s.type==="element"&&s.tagName==="colgroup"&&ma(s,n.children.indexOf(s),n)?!1:!!(r&&r.type==="element"&&r.tagName==="col")}function tx(e,t,n){const s=Bd(n,t),r=nt(e,-1);return n&&s&&s.type==="element"&&(s.tagName==="thead"||s.tagName==="tbody")&&ma(s,n.children.indexOf(s),n)?!1:!!(r&&r.type==="element"&&r.tagName==="tr")}const br={name:[[` \f\r &/=>`.split(""),` \f\r "&'/=>\``.split("")],[`\0 \f\r "&'/<=>`.split(""),`\0 @@ -156,5 +156,5 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="

An error \f\r &>`.split(""),`\0 \f\r "&'<=>\``.split("")],[`\0 \f\r "&'<=>\``.split(""),`\0 -\f\r "&'<=>\``.split("")]],single:[["&'".split(""),"\"&'`".split("")],["\0&'".split(""),"\0\"&'`".split("")]],double:[['"&'.split(""),"\"&'`".split("")],['\0"&'.split(""),"\0\"&'`".split("")]]};function nx(e,t,n,s){const r=s.schema,i=r.space==="svg"?!1:s.settings.omitOptionalTags;let o=r.space==="svg"?s.settings.closeEmptyElements:s.settings.voids.includes(e.tagName.toLowerCase());const l=[];let a;r.space==="html"&&e.tagName==="svg"&&(s.schema=Md);const c=sx(s,e.properties),u=s.all(r.space==="html"&&e.tagName==="template"?e.content:e);return s.schema=r,u&&(o=!1),(c||!i||!XE(e,t,n))&&(l.push("<",e.tagName,c?" "+c:""),o&&(r.space==="svg"||s.settings.closeSelfClosing)&&(a=c.charAt(c.length-1),(!s.settings.tightSelfClosing||a==="/"||a&&a!=='"'&&a!=="'")&&l.push(" "),l.push("/")),l.push(">")),l.push(u),!o&&(!i||!ma(e,t,n))&&l.push(""),l.join("")}function sx(e,t){const n=[];let s=-1,r;if(t){for(r in t)if(t[r]!==null&&t[r]!==void 0){const i=rx(e,r,t[r]);i&&n.push(i)}}for(;++suc(n,e.alternative)&&(o=e.alternative),l=o+as(n,Object.assign({},e.settings.characterReferences,{subset:(o==="'"?br.single:br.double)[r][i],attribute:!0}))+o),a+(l&&"="+l))}const ix=["<","&"];function Ud(e,t,n,s){return n&&n.type==="element"&&(n.tagName==="script"||n.tagName==="style")?e.value:as(e.value,Object.assign({},s.settings.characterReferences,{subset:ix}))}function ox(e,t,n,s){return s.settings.allowDangerousHtml?e.value:Ud(e,t,n,s)}function ax(e,t,n,s){return s.all(e)}const lx=dE("type",{invalid:cx,unknown:ux,handlers:{comment:LE,doctype:PE,element:nx,raw:ox,root:ax,text:Ud}});function cx(e){throw new Error("Expected node, not `"+e+"`")}function ux(e){const t=e;throw new Error("Cannot compile unknown node `"+t.type+"`")}const dx={},px={},fx=[];function hx(e,t){const n=t||dx,s=n.quote||'"',r=s==='"'?"'":'"';if(s!=='"'&&s!=="'")throw new Error("Invalid quote `"+s+"`, expected `'` or `\"`");return{one:mx,all:gx,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||tE,characterReferences:n.characterReferences||px,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space==="svg"?Md:uE,quote:s,alternative:r}.one(Array.isArray(e)?{type:"root",children:e}:e,void 0,void 0)}function mx(e,t,n){return lx(e,t,n,this)}function gx(e){const t=[],n=e&&e.children||fx;let s=-1;for(;++st.default||t)}function ga(e){return!e||["plaintext","txt","text","plain"].includes(e)}function Fd(e){return e==="ansi"||ga(e)}function _a(e){return e==="none"}function zd(e){return _a(e)}function Wd(e,t){if(!t)return e;e.properties||={},e.properties.class||=[],typeof e.properties.class=="string"&&(e.properties.class=e.properties.class.split(/\s+/g)),Array.isArray(e.properties.class)||(e.properties.class=[]);const n=Array.isArray(t)?t:t.split(/\s+/g);for(const s of n)s&&!e.properties.class.includes(s)&&e.properties.class.push(s);return e}function yi(e,t=!1){if(e.length===0)return[["",0]];const n=e.split(/(\r?\n)/g);let s=0;const r=[];for(let i=0;ir);function n(r){if(r===e.length)return{line:t.length-1,character:t[t.length-1].length};let i=r,o=0;for(const l of t){if(in&&s.push({...e,content:e.content.slice(n,r),offset:e.offset+n}),n=r;return ns-r);return n.length?e.map(s=>s.flatMap(r=>{const i=n.filter(o=>r.offseto-r.offset).sort((o,l)=>o-l);return i.length?bx(r,i):r})):e}function kx(e,t,n,s,r="css-vars"){const i={content:e.content,explanation:e.explanation,offset:e.offset},o=t.map(u=>Xr(e.variants[u])),l=new Set(o.flatMap(u=>Object.keys(u))),a={},c=(u,d)=>{const f=d==="color"?"":d==="background-color"?"-bg":`-${d}`;return n+t[u]+(d==="color"?"":f)};return o.forEach((u,d)=>{for(const f of l){const h=u[f]||"inherit";if(d===0&&s&&yx.includes(f))if(s===va&&o.length>1){const y=t.findIndex(L=>L==="light"),w=t.findIndex(L=>L==="dark");if(y===-1||w===-1)throw new Xe('When using `defaultColor: "light-dark()"`, you must provide both `light` and `dark` themes');const T=o[y][f]||"inherit",S=o[w][f]||"inherit";a[f]=`light-dark(${T}, ${S})`,r==="css-vars"&&(a[c(d,f)]=h)}else a[f]=h;else r==="css-vars"&&(a[c(d,f)]=h)}}),i.htmlStyle=a,i}function Xr(e){const t={};if(e.color&&(t.color=e.color),e.bgColor&&(t["background-color"]=e.bgColor),e.fontStyle){e.fontStyle&ht.Italic&&(t["font-style"]="italic"),e.fontStyle&ht.Bold&&(t["font-weight"]="bold");const n=[];e.fontStyle&ht.Underline&&n.push("underline"),e.fontStyle&ht.Strikethrough&&n.push("line-through"),n.length&&(t["text-decoration"]=n.join(" "))}return t}function No(e){return typeof e=="string"?e:Object.entries(e).map(([t,n])=>`${t}:${n}`).join(";")}const qd=new WeakMap;function bi(e,t){qd.set(e,t)}function er(e){return qd.get(e)}class _s{_stacks={};lang;get themes(){return Object.keys(this._stacks)}get theme(){return this.themes[0]}get _stack(){return this._stacks[this.theme]}static initial(t,n){return new _s(Object.fromEntries(_x(n).map(s=>[s,Io])),t)}constructor(...t){if(t.length===2){const[n,s]=t;this.lang=s,this._stacks=n}else{const[n,s,r]=t;this.lang=s,this._stacks={[r]:n}}}getInternalStack(t=this.theme){return this._stacks[t]}getScopes(t=this.theme){return Ex(this._stacks[t])}toJSON(){return{lang:this.lang,theme:this.theme,themes:this.themes,scopes:this.getScopes()}}}function Ex(e){const t=[],n=new Set;function s(r){if(n.has(r))return;n.add(r);const i=r?.nameScopesList?.scopeName;i&&t.push(i),r.parent&&s(r.parent)}return s(e),t}function xx(e,t){if(!(e instanceof _s))throw new Xe("Invalid grammar state");return e.getInternalStack(t)}function Sx(){const e=new WeakMap;function t(n){if(!e.has(n.meta)){let s=function(o){if(typeof o=="number"){if(o<0||o>n.source.length)throw new Xe(`Invalid decoration offset: ${o}. Code length: ${n.source.length}`);return{...r.indexToPos(o),offset:o}}else{const l=r.lines[o.line];if(l===void 0)throw new Xe(`Invalid decoration position ${JSON.stringify(o)}. Lines length: ${r.lines.length}`);let a=o.character;if(a<0&&(a=l.length+a),a<0||a>l.length)throw new Xe(`Invalid decoration position ${JSON.stringify(o)}. Line ${o.line} length: ${l.length}`);return{...o,character:a,offset:r.posToIndex(o.line,a)}}};const r=vx(n.source),i=(n.options.decorations||[]).map(o=>({...o,start:s(o.start),end:s(o.end)}));Tx(i),e.set(n.meta,{decorations:i,converter:r,source:n.source})}return e.get(n.meta)}return{name:"shiki:decorations",tokens(n){if(!this.options.decorations?.length)return;const r=t(this).decorations.flatMap(o=>[o.start.offset,o.end.offset]);return wx(n,r)},code(n){if(!this.options.decorations?.length)return;const s=t(this),r=Array.from(n.children).filter(u=>u.type==="element"&&u.tagName==="span");if(r.length!==s.converter.lines.length)throw new Xe(`Number of lines in code element (${r.length}) does not match the number of lines in the source (${s.converter.lines.length}). Failed to apply decorations.`);function i(u,d,f,h){const y=r[u];let w="",T=-1,S=-1;if(d===0&&(T=0),f===0&&(S=0),f===Number.POSITIVE_INFINITY&&(S=y.children.length),T===-1||S===-1)for(let g=0;gw);return u.tagName=d.tagName||"span",u.properties={...u.properties,...h,class:u.properties.class},d.properties?.class&&Wd(u,d.properties.class),u=y(u,f)||u,u}const a=[],c=s.decorations.sort((u,d)=>d.start.offset-u.start.offset||u.end.offset-d.end.offset);for(const u of c){const{start:d,end:f}=u;if(d.line===f.line)i(d.line,d.character,f.character,u);else if(d.lineo(h,u));i(f.line,0,f.character,u)}}a.forEach(u=>u())}}}function Tx(e){for(let t=0;tn.end.offset)throw new Xe(`Invalid decoration range: ${JSON.stringify(n.start)} - ${JSON.stringify(n.end)}`);for(let s=t+1;sNumber.parseInt(s));return n.length!==3||n.some(s=>Number.isNaN(s))?void 0:{type:"rgb",rgb:n}}else if(t==="5"){const n=e.shift();if(n)return{type:"table",index:Number(n)}}}function Ix(e){const t=[];for(;e.length>0;){const n=e.shift();if(!n)continue;const s=Number.parseInt(n);if(!Number.isNaN(s))if(s===0)t.push({type:"resetAll"});else if(s<=9)Qi[s]&&t.push({type:"setDecoration",value:Qi[s]});else if(s<=29){const r=Qi[s-20];r&&(t.push({type:"resetDecoration",value:r}),r==="dim"&&t.push({type:"resetDecoration",value:"bold"}))}else if(s<=37)t.push({type:"setForegroundColor",value:{type:"named",name:jn[s-30]}});else if(s===38){const r=hc(e);r&&t.push({type:"setForegroundColor",value:r})}else if(s===39)t.push({type:"resetForegroundColor"});else if(s<=47)t.push({type:"setBackgroundColor",value:{type:"named",name:jn[s-40]}});else if(s===48){const r=hc(e);r&&t.push({type:"setBackgroundColor",value:r})}else s===49?t.push({type:"resetBackgroundColor"}):s===53?t.push({type:"setDecoration",value:"overline"}):s===55?t.push({type:"resetDecoration",value:"overline"}):s>=90&&s<=97?t.push({type:"setForegroundColor",value:{type:"named",name:jn[s-90+8]}}):s>=100&&s<=107&&t.push({type:"setBackgroundColor",value:{type:"named",name:jn[s-100+8]}})}return t}function Lx(){let e=null,t=null,n=new Set;return{parse(s){const r=[];let i=0;do{const o=Cx(s,i),l=o.sequence?s.substring(i,o.startPosition):s.substring(i);if(l.length>0&&r.push({value:l,foreground:e,background:t,decorations:new Set(n)}),o.sequence){const a=Ix(o.sequence);for(const c of a)c.type==="resetAll"?(e=null,t=null,n.clear()):c.type==="resetForegroundColor"?e=null:c.type==="resetBackgroundColor"?t=null:c.type==="resetDecoration"&&n.delete(c.value);for(const c of a)c.type==="setForegroundColor"?e=c.value:c.type==="setBackgroundColor"?t=c.value:c.type==="setDecoration"&&n.add(c.value)}i=o.position}while(iMath.max(0,Math.min(a,255)).toString(16).padStart(2,"0")).join("")}`}let s;function r(){if(s)return s;s=[];for(let c=0;c{const c=`terminal.ansi${a[0].toUpperCase()}${a.substring(1)}`,u=e.colors?.[c];return[a,u||Dx[a]]})),o=Ox(i),l=Lx();return r.map(a=>l.parse(a[0]).map(c=>{let u,d;c.decorations.has("reverse")?(u=c.background?o.value(c.background):e.bg,d=c.foreground?o.value(c.foreground):e.fg):(u=c.foreground?o.value(c.foreground):e.fg,d=c.background?o.value(c.background):void 0),u=Tn(u,s),d=Tn(d,s),c.decorations.has("dim")&&(u=$x(u));let f=ht.None;return c.decorations.has("bold")&&(f|=ht.Bold),c.decorations.has("italic")&&(f|=ht.Italic),c.decorations.has("underline")&&(f|=ht.Underline),c.decorations.has("strikethrough")&&(f|=ht.Strikethrough),{content:c.value,offset:a[1],color:u,bgColor:d,fontStyle:f}}))}function $x(e){const t=e.match(/#([0-9a-f]{3,8})/i);if(t){const s=t[1];if(s.length===8){const r=Math.round(Number.parseInt(s.slice(6,8),16)/2).toString(16).padStart(2,"0");return`#${s.slice(0,6)}${r}`}else{if(s.length===6)return`#${s}80`;if(s.length===4){const r=s[0],i=s[1],o=s[2],l=s[3],a=Math.round(Number.parseInt(`${l}${l}`,16)/2).toString(16).padStart(2,"0");return`#${r}${r}${i}${i}${o}${o}${a}`}else if(s.length===3){const r=s[0],i=s[1],o=s[2];return`#${r}${r}${i}${i}${o}${o}80`}}}const n=e.match(/var\((--[\w-]+-ansi-[\w-]+)\)/);return n?`var(${n[1]}-dim)`:e}function ya(e,t,n={}){const{theme:s=e.getLoadedThemes()[0]}=n,r=e.resolveLangAlias(n.lang||"text");if(ga(r)||_a(s))return yi(t).map(a=>[{content:a[0],offset:a[1]}]);const{theme:i,colorMap:o}=e.setTheme(s);if(r==="ansi")return Nx(i,t,n);const l=e.getLanguage(n.lang||"text");if(n.grammarState){if(n.grammarState.lang!==l.name)throw new Xe(`Grammar state language "${n.grammarState.lang}" does not match highlight language "${l.name}"`);if(!n.grammarState.themes.includes(i.name))throw new Xe(`Grammar state themes "${n.grammarState.themes}" do not contain highlight theme "${i.name}"`)}return Vx(t,l,i,o,n)}function Mx(...e){if(e.length===2)return er(e[1]);const[t,n,s={}]=e,{lang:r="text",theme:i=t.getLoadedThemes()[0]}=s;if(ga(r)||_a(i))throw new Xe("Plain language does not have grammar state");if(r==="ansi")throw new Xe("ANSI language does not have grammar state");const{theme:o,colorMap:l}=t.setTheme(i),a=t.getLanguage(r);return new _s(ba(n,a,o,l,s).stateStack,a.name,o.name)}function Vx(e,t,n,s,r){const i=ba(e,t,n,s,r),o=new _s(i.stateStack,t.name,n.name);return bi(i.tokens,o),i.tokens}function ba(e,t,n,s,r){const i=Yr(n,r),{tokenizeMaxLineLength:o=0,tokenizeTimeLimit:l=500}=r,a=yi(e);let c=r.grammarState?xx(r.grammarState,n.name)??Io:r.grammarContextCode!=null?ba(r.grammarContextCode,t,n,s,{...r,grammarState:void 0,grammarContextCode:void 0}).stateStack:Io,u=[];const d=[];for(let f=0,h=a.length;f0&&y.length>=o){u=[],d.push([{content:y,offset:w,color:"",fontStyle:0}]);continue}let T,S,L;r.includeExplanation&&(T=t.tokenizeLine(y,c,l),S=T.tokens,L=0);const g=t.tokenizeLine2(y,c,l),v=g.tokens.length/2;for(let V=0;VN.trim());break;case"object":I=D.scope;break;default:continue}G.push({settings:D,selectors:I.map(N=>N.split(/ /))})}J.explanation=[];let x=0;for(;Y+x({scopeName:t}))}function jx(e,t){const n=[];for(let s=0,r=t.length;s=0&&r>=0;)mc(e[s],n[r])&&(s-=1),r-=1;return s===-1}function Ux(e,t,n){const s=[];for(const{selectors:r,settings:i}of e)for(const o of r)if(Gx(o,t,n)){s.push(i);break}return s}function Yd(e,t,n){const s=Object.entries(n.themes).filter(a=>a[1]).map(a=>({color:a[0],theme:a[1]})),r=s.map(a=>{const c=ya(e,t,{...n,theme:a.theme}),u=er(c),d=typeof a.theme=="string"?a.theme:a.theme.name;return{tokens:c,state:u,theme:d}}),i=Hx(...r.map(a=>a.tokens)),o=i[0].map((a,c)=>a.map((u,d)=>{const f={content:u.content,variants:{},offset:u.offset};return"includeExplanation"in n&&n.includeExplanation&&(f.explanation=u.explanation),i.forEach((h,y)=>{const{content:w,explanation:T,offset:S,...L}=h[c][d];f.variants[s[y].color]=L}),f})),l=r[0].state?new _s(Object.fromEntries(r.map(a=>[a.theme,a.state?.getInternalStack(a.theme)])),r[0].state.lang):void 0;return l&&bi(o,l),o}function Hx(...e){const t=e.map(()=>[]),n=e.length;for(let s=0;sa[s]),i=t.map(()=>[]);t.forEach((a,c)=>a.push(i[c]));const o=r.map(()=>0),l=r.map(a=>a[0]);for(;l.every(a=>a);){const a=Math.min(...l.map(c=>c.content.length));for(let c=0;cS[1]).map(S=>({color:S[0],theme:S[1]})).sort((S,L)=>S.color===c?-1:L.color===c?1:0);if(f.length===0)throw new Xe("`themes` option must not be empty");const h=Yd(e,t,n);if(a=er(h),c&&va!==c&&!f.find(S=>S.color===c))throw new Xe(`\`themes\` option must contain the defaultColor key \`${c}\``);const y=f.map(S=>e.getTheme(S.theme)),w=f.map(S=>S.color);i=h.map(S=>S.map(L=>kx(L,w,u,c,d))),a&&bi(i,a);const T=f.map(S=>Yr(S.theme,n));r=gc(f,y,T,u,c,"fg",d),s=gc(f,y,T,u,c,"bg",d),o=`shiki-themes ${y.map(S=>S.name).join(" ")}`,l=c?void 0:[r,s].join(";")}else if("theme"in n){const c=Yr(n.theme,n);i=ya(e,t,n);const u=e.getTheme(n.theme);s=Tn(u.bg,c),r=Tn(u.fg,c),o=u.name,a=er(i)}else throw new Xe("Invalid options, either `theme` or `themes` must be provided");return{tokens:i,fg:r,bg:s,themeName:o,rootStyle:l,grammarState:a}}function gc(e,t,n,s,r,i,o){return e.map((l,a)=>{const c=Tn(t[a][i],n[a])||"inherit",u=`${s+l.color}${i==="bg"?"-bg":""}:${c}`;if(a===0&&r){if(r===va&&e.length>1){const d=e.findIndex(w=>w.color==="light"),f=e.findIndex(w=>w.color==="dark");if(d===-1||f===-1)throw new Xe('When using `defaultColor: "light-dark()"`, you must provide both `light` and `dark` themes');const h=Tn(t[d][i],n[d])||"inherit",y=Tn(t[f][i],n[f])||"inherit";return`light-dark(${h}, ${y});${u}`}return c}return o==="css-vars"?u:null}).filter(l=>!!l).join(";")}function Zr(e,t,n,s={meta:{},options:n,codeToHast:(r,i)=>Zr(e,r,i),codeToTokens:(r,i)=>Qr(e,r,i)}){let r=t;for(const y of Jr(n))r=y.preprocess?.call(s,r,n)||r;let{tokens:i,fg:o,bg:l,themeName:a,rootStyle:c,grammarState:u}=Qr(e,r,n);const{mergeWhitespaces:d=!0,mergeSameStyleTokens:f=!1}=n;d===!0?i=zx(i):d==="never"&&(i=Wx(i)),f&&(i=qx(i));const h={...s,get source(){return r}};for(const y of Jr(n))i=y.tokens?.call(h,i)||i;return Fx(i,{...n,fg:o,bg:l,themeName:a,rootStyle:n.rootStyle===!1?!1:n.rootStyle??c},h,u)}function Fx(e,t,n,s=er(e)){const r=Jr(t),i=[],o={type:"root",children:[]},{structure:l="classic",tabindex:a="0"}=t,c={class:`shiki ${t.themeName||""}`};t.rootStyle!==!1&&(t.rootStyle!=null?c.style=t.rootStyle:c.style=`background-color:${t.bg};color:${t.fg}`),a!==!1&&a!=null&&(c.tabindex=a.toString());for(const[w,T]of Object.entries(t.meta||{}))w.startsWith("_")||(c[w]=T);let u={type:"element",tagName:"pre",properties:c,children:[],data:t.data},d={type:"element",tagName:"code",properties:{},children:i};const f=[],h={...n,structure:l,addClassToHast:Wd,get source(){return n.source},get tokens(){return e},get options(){return t},get root(){return o},get pre(){return u},get code(){return d},get lines(){return f}};if(e.forEach((w,T)=>{T&&(l==="inline"?o.children.push({type:"element",tagName:"br",properties:{},children:[]}):l==="classic"&&i.push({type:"text",value:` -`}));let S={type:"element",tagName:"span",properties:{class:"line"},children:[]},L=0;for(const g of w){let v={type:"element",tagName:"span",properties:{...g.htmlAttrs},children:[{type:"text",value:g.content}]};const V=No(g.htmlStyle||Xr(g));V&&(v.properties.style=V);for(const Y of r)v=Y?.span?.call(h,v,T+1,L,S,g)||v;l==="inline"?o.children.push(v):l==="classic"&&S.children.push(v),L+=g.content.length}if(l==="classic"){for(const g of r)S=g?.line?.call(h,S,T+1)||S;f.push(S),i.push(S)}else l==="inline"&&f.push(S)}),l==="classic"){for(const w of r)d=w?.code?.call(h,d)||d;u.children.push(d);for(const w of r)u=w?.pre?.call(h,u)||u;o.children.push(u)}else if(l==="inline"){const w=[];let T={type:"element",tagName:"span",properties:{class:"line"},children:[]};for(const g of o.children)g.type==="element"&&g.tagName==="br"?(w.push(T),T={type:"element",tagName:"span",properties:{class:"line"},children:[]}):(g.type==="element"||g.type==="text")&&T.children.push(g);w.push(T);let L={type:"element",tagName:"code",properties:{},children:w};for(const g of r)L=g?.code?.call(h,L)||L;o.children=[];for(let g=0;g0&&o.children.push({type:"element",tagName:"br",properties:{},children:[]});const v=L.children[g];v.type==="element"&&o.children.push(...v.children)}}let y=o;for(const w of r)y=w?.root?.call(h,y)||y;return s&&bi(y,s),y}function zx(e){return e.map(t=>{const n=[];let s="",r;return t.forEach((i,o)=>{const a=!(i.fontStyle&&(i.fontStyle&ht.Underline||i.fontStyle&ht.Strikethrough));a&&i.content.match(/^\s+$/)&&t[o+1]?(r===void 0&&(r=i.offset),s+=i.content):s?(a?n.push({...i,offset:r,content:s+i.content}):n.push({content:s,offset:r},i),r=void 0,s=""):n.push(i)}),n})}function Wx(e){return e.map(t=>t.flatMap(n=>{if(n.content.match(/^\s+$/))return n;const s=n.content.match(/^(\s*)(.*?)(\s*)$/);if(!s)return n;const[,r,i,o]=s;if(!r&&!o)return n;const l=[{...n,offset:n.offset+r.length,content:i}];return r&&l.unshift({content:r,offset:n.offset}),o&&l.push({content:o,offset:n.offset+r.length+i.length}),l}))}function qx(e){return e.map(t=>{const n=[];for(const s of t){if(n.length===0){n.push({...s});continue}const r=n[n.length-1],i=No(r.htmlStyle||Xr(r)),o=No(s.htmlStyle||Xr(s)),l=r.fontStyle&&(r.fontStyle&ht.Underline||r.fontStyle&ht.Strikethrough),a=s.fontStyle&&(s.fontStyle&ht.Underline||s.fontStyle&ht.Strikethrough);!l&&!a&&i===o?r.content+=s.content:n.push({...s})}return n})}const Kx=hx;function Yx(e,t,n){const s={meta:{},options:n,codeToHast:(i,o)=>Zr(e,i,o),codeToTokens:(i,o)=>Qr(e,i,o)};let r=Kx(Zr(e,t,n,s));for(const i of Jr(n))r=i.postprocess?.call(s,r,n)||r;return r}const _c={light:"#333333",dark:"#bbbbbb"},vc={light:"#fffffe",dark:"#1e1e1e"},yc="__shiki_resolved";function wa(e){if(e?.[yc])return e;const t={...e};t.tokenColors&&!t.settings&&(t.settings=t.tokenColors,delete t.tokenColors),t.type||="dark",t.colorReplacements={...t.colorReplacements},t.settings||=[];let{bg:n,fg:s}=t;if(!n||!s){const l=t.settings?t.settings.find(a=>!a.name&&!a.scope):void 0;l?.settings?.foreground&&(s=l.settings.foreground),l?.settings?.background&&(n=l.settings.background),!s&&t?.colors?.["editor.foreground"]&&(s=t.colors["editor.foreground"]),!n&&t?.colors?.["editor.background"]&&(n=t.colors["editor.background"]),s||(s=t.type==="light"?_c.light:_c.dark),n||(n=t.type==="light"?vc.light:vc.dark),t.fg=s,t.bg=n}t.settings[0]&&t.settings[0].settings&&!t.settings[0].scope||t.settings.unshift({settings:{foreground:t.fg,background:t.bg}});let r=0;const i=new Map;function o(l){if(i.has(l))return i.get(l);r+=1;const a=`#${r.toString(16).padStart(8,"0").toLowerCase()}`;return t.colorReplacements?.[`#${a}`]?o(l):(i.set(l,a),a)}t.settings=t.settings.map(l=>{const a=l.settings?.foreground&&!l.settings.foreground.startsWith("#"),c=l.settings?.background&&!l.settings.background.startsWith("#");if(!a&&!c)return l;const u={...l,settings:{...l.settings}};if(a){const d=o(l.settings.foreground);t.colorReplacements[d]=l.settings.foreground,u.settings.foreground=d}if(c){const d=o(l.settings.background);t.colorReplacements[d]=l.settings.background,u.settings.background=d}return u});for(const l of Object.keys(t.colors||{}))if((l==="editor.foreground"||l==="editor.background"||l.startsWith("terminal.ansi"))&&!t.colors[l]?.startsWith("#")){const a=o(t.colors[l]);t.colorReplacements[a]=t.colors[l],t.colors[l]=a}return Object.defineProperty(t,yc,{enumerable:!1,writable:!1,value:!0}),t}async function Xd(e){return Array.from(new Set((await Promise.all(e.filter(t=>!Fd(t)).map(async t=>await Hd(t).then(n=>Array.isArray(n)?n:[n])))).flat()))}async function Jd(e){return(await Promise.all(e.map(async n=>zd(n)?null:wa(await Hd(n))))).filter(n=>!!n)}let Xx=3;function Jx(e,t=3){t>Xx||console.trace(`[SHIKI DEPRECATE]: ${e}`)}let Zn=class extends Error{constructor(t){super(t),this.name="ShikiError"}};function Qd(e,t){if(!t)return e;if(t[e]){const n=new Set([e]);for(;t[e];){if(e=t[e],n.has(e))throw new Zn(`Circular alias \`${Array.from(n).join(" -> ")} -> ${e}\``);n.add(e)}}return e}class Qx extends eE{constructor(t,n,s,r={}){super(t),this._resolver=t,this._themes=n,this._langs=s,this._alias=r,this._themes.map(i=>this.loadTheme(i)),this.loadLanguages(this._langs)}_resolvedThemes=new Map;_resolvedGrammars=new Map;_langMap=new Map;_langGraph=new Map;_textmateThemeCache=new WeakMap;_loadedThemesCache=null;_loadedLanguagesCache=null;getTheme(t){return typeof t=="string"?this._resolvedThemes.get(t):this.loadTheme(t)}loadTheme(t){const n=wa(t);return n.name&&(this._resolvedThemes.set(n.name,n),this._loadedThemesCache=null),n}getLoadedThemes(){return this._loadedThemesCache||(this._loadedThemesCache=[...this._resolvedThemes.keys()]),this._loadedThemesCache}setTheme(t){let n=this._textmateThemeCache.get(t);n||(n=Fr.createFromRawTheme(t),this._textmateThemeCache.set(t,n)),this._syncRegistry.setTheme(n)}getGrammar(t){return t=Qd(t,this._alias),this._resolvedGrammars.get(t)}loadLanguage(t){if(this.getGrammar(t.name))return;const n=new Set([...this._langMap.values()].filter(i=>i.embeddedLangsLazy?.includes(t.name)));this._resolver.addLanguage(t);const s={balancedBracketSelectors:t.balancedBracketSelectors||["*"],unbalancedBracketSelectors:t.unbalancedBracketSelectors||[]};this._syncRegistry._rawGrammars.set(t.scopeName,t);const r=this.loadGrammarWithConfiguration(t.scopeName,1,s);if(r.name=t.name,this._resolvedGrammars.set(t.name,r),t.aliases&&t.aliases.forEach(i=>{this._alias[i]=t.name}),this._loadedLanguagesCache=null,n.size)for(const i of n)this._resolvedGrammars.delete(i.name),this._loadedLanguagesCache=null,this._syncRegistry?._injectionGrammars?.delete(i.scopeName),this._syncRegistry?._grammars?.delete(i.scopeName),this.loadLanguage(this._langMap.get(i.name))}dispose(){super.dispose(),this._resolvedThemes.clear(),this._resolvedGrammars.clear(),this._langMap.clear(),this._langGraph.clear(),this._loadedThemesCache=null}loadLanguages(t){for(const r of t)this.resolveEmbeddedLanguages(r);const n=Array.from(this._langGraph.entries()),s=n.filter(([r,i])=>!i);if(s.length){const r=n.filter(([i,o])=>o?(o.embeddedLanguages||o.embeddedLangs)?.some(a=>s.map(([c])=>c).includes(a)):!1).filter(i=>!s.includes(i));throw new Zn(`Missing languages ${s.map(([i])=>`\`${i}\``).join(", ")}, required by ${r.map(([i])=>`\`${i}\``).join(", ")}`)}for(const[r,i]of n)this._resolver.addLanguage(i);for(const[r,i]of n)this.loadLanguage(i)}getLoadedLanguages(){return this._loadedLanguagesCache||(this._loadedLanguagesCache=[...new Set([...this._resolvedGrammars.keys(),...Object.keys(this._alias)])]),this._loadedLanguagesCache}resolveEmbeddedLanguages(t){this._langMap.set(t.name,t),this._langGraph.set(t.name,t);const n=t.embeddedLanguages??t.embeddedLangs;if(n)for(const s of n)this._langGraph.set(s,this._langMap.get(s))}}class Zx{_langs=new Map;_scopeToLang=new Map;_injections=new Map;_onigLib;constructor(t,n){this._onigLib={createOnigScanner:s=>t.createScanner(s),createOnigString:s=>t.createString(s)},n.forEach(s=>this.addLanguage(s))}get onigLib(){return this._onigLib}getLangRegistration(t){return this._langs.get(t)}loadGrammar(t){return this._scopeToLang.get(t)}addLanguage(t){this._langs.set(t.name,t),t.aliases&&t.aliases.forEach(n=>{this._langs.set(n,t)}),this._scopeToLang.set(t.scopeName,t),t.injectTo&&t.injectTo.forEach(n=>{this._injections.get(n)||this._injections.set(n,[]),this._injections.get(n).push(t.scopeName)})}getInjections(t){const n=t.split(".");let s=[];for(let r=1;r<=n.length;r++){const i=n.slice(0,r).join(".");s=[...s,...this._injections.get(i)||[]]}return s}}let Is=0;function e1(e){Is+=1,e.warnings!==!1&&Is>=10&&Is%10===0&&console.warn(`[Shiki] ${Is} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \`highlighter.dispose()\` to release unused instances.`);let t=!1;if(!e.engine)throw new Zn("`engine` option is required for synchronous mode");const n=(e.langs||[]).flat(1),s=(e.themes||[]).flat(1).map(wa),r=new Zx(e.engine,n),i=new Qx(r,s,n,e.langAlias);let o;function l(g){return Qd(g,e.langAlias)}function a(g){S();const v=i.getGrammar(typeof g=="string"?g:g.name);if(!v)throw new Zn(`Language \`${g}\` not found, you may need to load it first`);return v}function c(g){if(g==="none")return{bg:"",fg:"",name:"none",settings:[],type:"dark"};S();const v=i.getTheme(g);if(!v)throw new Zn(`Theme \`${g}\` not found, you may need to load it first`);return v}function u(g){S();const v=c(g);o!==g&&(i.setTheme(v),o=g);const V=i.getColorMap();return{theme:v,colorMap:V}}function d(){return S(),i.getLoadedThemes()}function f(){return S(),i.getLoadedLanguages()}function h(...g){S(),i.loadLanguages(g.flat(1))}async function y(...g){return h(await Xd(g))}function w(...g){S();for(const v of g.flat(1))i.loadTheme(v)}async function T(...g){return S(),w(await Jd(g))}function S(){if(t)throw new Zn("Shiki instance has been disposed")}function L(){t||(t=!0,i.dispose(),Is-=1)}return{setTheme:u,getTheme:c,getLanguage:a,getLoadedThemes:d,getLoadedLanguages:f,resolveLangAlias:l,loadLanguage:y,loadLanguageSync:h,loadTheme:T,loadThemeSync:w,dispose:L,[Symbol.dispose]:L}}async function t1(e){e.engine||Jx("`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.");const[t,n,s]=await Promise.all([Jd(e.themes||[]),Xd(e.langs||[]),e.engine]);return e1({...e,themes:t,langs:n,engine:s})}async function n1(e){const t=await t1(e);return{getLastGrammarState:(...n)=>Mx(t,...n),codeToTokensBase:(n,s)=>ya(t,n,s),codeToTokensWithThemes:(n,s)=>Yd(t,n,s),codeToTokens:(n,s)=>Qr(t,n,s),codeToHast:(n,s)=>Zr(t,n,s),codeToHtml:(n,s)=>Yx(t,n,s),getBundledLanguages:()=>({}),getBundledThemes:()=>({}),...t,getInternalContext:()=>t}}function s1(e){const t=e.langs,n=e.themes,s=e.engine;async function r(i){function o(d){if(typeof d=="string"){if(d=i.langAlias?.[d]||d,Fd(d))return[];const f=t[d];if(!f)throw new Xe(`Language \`${d}\` is not included in this bundle. You may want to load it from external source.`);return f}return d}function l(d){if(zd(d))return"none";if(typeof d=="string"){const f=n[d];if(!f)throw new Xe(`Theme \`${d}\` is not included in this bundle. You may want to load it from external source.`);return f}return d}const a=(i.themes??[]).map(d=>l(d)),c=(i.langs??[]).map(d=>o(d)),u=await n1({engine:i.engine??s(),...i,themes:a,langs:c});return{...u,loadLanguage(...d){return u.loadLanguage(...d.map(o))},loadTheme(...d){return u.loadTheme(...d.map(l))},getBundledLanguages(){return t},getBundledThemes(){return n}}}return r}const Zd=[{id:"abap",name:"ABAP",import:(()=>m(()=>import("./abap-BdImnpbu.js"),[]))},{id:"actionscript-3",name:"ActionScript",import:(()=>m(()=>import("./actionscript-3-CoDkCxhg.js"),[]))},{id:"ada",name:"Ada",import:(()=>m(()=>import("./ada-bCR0ucgS.js"),[]))},{id:"angular-html",name:"Angular HTML",import:(()=>m(()=>import("./angular-html-CU67Zn6k.js").then(e=>e.f),__vite__mapDeps([0,1,2,3])))},{id:"angular-ts",name:"Angular TypeScript",import:(()=>m(()=>import("./angular-ts-BwZT4LLn.js"),__vite__mapDeps([4,0,1,2,3,5])))},{id:"apache",name:"Apache Conf",import:(()=>m(()=>import("./apache-Pmp26Uib.js"),[]))},{id:"apex",name:"Apex",import:(()=>m(()=>import("./apex-D8_7TLub.js"),[]))},{id:"apl",name:"APL",import:(()=>m(()=>import("./apl-dKokRX4l.js"),__vite__mapDeps([6,1,2,3,7,8,9])))},{id:"applescript",name:"AppleScript",import:(()=>m(()=>import("./applescript-Co6uUVPk.js"),[]))},{id:"ara",name:"Ara",import:(()=>m(()=>import("./ara-BRHolxvo.js"),[]))},{id:"asciidoc",name:"AsciiDoc",aliases:["adoc"],import:(()=>m(()=>import("./asciidoc-Dv7Oe6Be.js"),[]))},{id:"asm",name:"Assembly",import:(()=>m(()=>import("./asm-D_Q5rh1f.js"),[]))},{id:"astro",name:"Astro",import:(()=>m(()=>import("./astro-CbQHKStN.js"),__vite__mapDeps([10,9,2,11,3,12,13])))},{id:"awk",name:"AWK",import:(()=>m(()=>import("./awk-DMzUqQB5.js"),[]))},{id:"ballerina",name:"Ballerina",import:(()=>m(()=>import("./ballerina-BFfxhgS-.js"),[]))},{id:"bat",name:"Batch File",aliases:["batch"],import:(()=>m(()=>import("./bat-BkioyH1T.js"),[]))},{id:"beancount",name:"Beancount",import:(()=>m(()=>import("./beancount-k_qm7-4y.js"),[]))},{id:"berry",name:"Berry",aliases:["be"],import:(()=>m(()=>import("./berry-uYugtg8r.js"),[]))},{id:"bibtex",name:"BibTeX",import:(()=>m(()=>import("./bibtex-CHM0blh-.js"),[]))},{id:"bicep",name:"Bicep",import:(()=>m(()=>import("./bicep-Bmn6On1c.js"),[]))},{id:"blade",name:"Blade",import:(()=>m(()=>import("./blade-D4QpJJKB.js"),__vite__mapDeps([14,15,1,2,3,7,8,16,9])))},{id:"bsl",name:"1C (Enterprise)",aliases:["1c"],import:(()=>m(()=>import("./bsl-BO_Y6i37.js"),__vite__mapDeps([17,18])))},{id:"c",name:"C",import:(()=>m(()=>import("./c-BIGW1oBm.js"),[]))},{id:"c3",name:"C3",import:(()=>m(()=>import("./c3-VCDPK7BO.js"),[]))},{id:"cadence",name:"Cadence",aliases:["cdc"],import:(()=>m(()=>import("./cadence-Bv_4Rxtq.js"),[]))},{id:"cairo",name:"Cairo",import:(()=>m(()=>import("./cairo-KRGpt6FW.js"),__vite__mapDeps([19,20])))},{id:"clarity",name:"Clarity",import:(()=>m(()=>import("./clarity-D53aC0YG.js"),[]))},{id:"clojure",name:"Clojure",aliases:["clj"],import:(()=>m(()=>import("./clojure-P80f7IUj.js"),[]))},{id:"cmake",name:"CMake",import:(()=>m(()=>import("./cmake-D1j8_8rp.js"),[]))},{id:"cobol",name:"COBOL",import:(()=>m(()=>import("./cobol-nwyudZeR.js"),__vite__mapDeps([21,1,2,3,8])))},{id:"codeowners",name:"CODEOWNERS",import:(()=>m(()=>import("./codeowners-Bp6g37R7.js"),[]))},{id:"codeql",name:"CodeQL",aliases:["ql"],import:(()=>m(()=>import("./codeql-DsOJ9woJ.js"),[]))},{id:"coffee",name:"CoffeeScript",aliases:["coffeescript"],import:(()=>m(()=>import("./coffee-Ch7k5sss.js"),__vite__mapDeps([22,2])))},{id:"common-lisp",name:"Common Lisp",aliases:["lisp"],import:(()=>m(()=>import("./common-lisp-Cg-RD9OK.js"),[]))},{id:"coq",name:"Coq",import:(()=>m(()=>import("./coq-DkFqJrB1.js"),[]))},{id:"cpp",name:"C++",aliases:["c++"],import:(()=>m(()=>import("./cpp-CofmeUqb.js"),__vite__mapDeps([23,24,25,26,16])))},{id:"crystal",name:"Crystal",import:(()=>m(()=>import("./crystal-tKQVLTB8.js"),__vite__mapDeps([27,1,2,3,16,26,28])))},{id:"csharp",name:"C#",aliases:["c#","cs"],import:(()=>m(()=>import("./csharp-COcwbKMJ.js"),[]))},{id:"css",name:"CSS",import:(()=>m(()=>import("./css-DPfMkruS.js"),[]))},{id:"csv",name:"CSV",import:(()=>m(()=>import("./csv-fuZLfV_i.js"),[]))},{id:"cue",name:"CUE",import:(()=>m(()=>import("./cue-D82EKSYY.js"),[]))},{id:"cypher",name:"Cypher",aliases:["cql"],import:(()=>m(()=>import("./cypher-COkxafJQ.js"),[]))},{id:"d",name:"D",import:(()=>m(()=>import("./d-85-TOEBH.js"),[]))},{id:"dart",name:"Dart",import:(()=>m(()=>import("./dart-CF10PKvl.js"),[]))},{id:"dax",name:"DAX",import:(()=>m(()=>import("./dax-CEL-wOlO.js"),[]))},{id:"desktop",name:"Desktop",import:(()=>m(()=>import("./desktop-BmXAJ9_W.js"),[]))},{id:"diff",name:"Diff",import:(()=>m(()=>import("./diff-D97Zzqfu.js"),[]))},{id:"docker",name:"Dockerfile",aliases:["dockerfile"],import:(()=>m(()=>import("./docker-BcOcwvcX.js"),[]))},{id:"dotenv",name:"dotEnv",import:(()=>m(()=>import("./dotenv-Da5cRb03.js"),[]))},{id:"dream-maker",name:"Dream Maker",import:(()=>m(()=>import("./dream-maker-BtqSS_iP.js"),[]))},{id:"edge",name:"Edge",import:(()=>m(()=>import("./edge-BkV0erSs.js"),__vite__mapDeps([29,11,1,2,3,15])))},{id:"elixir",name:"Elixir",import:(()=>m(()=>import("./elixir-CDX3lj18.js"),__vite__mapDeps([30,1,2,3])))},{id:"elm",name:"Elm",import:(()=>m(()=>import("./elm-DbKCFpqz.js"),__vite__mapDeps([31,25,26])))},{id:"emacs-lisp",name:"Emacs Lisp",aliases:["elisp"],import:(()=>m(()=>import("./emacs-lisp-C9XAeP06.js"),[]))},{id:"erb",name:"ERB",import:(()=>m(()=>import("./erb-CgJxNhIT.js"),__vite__mapDeps([32,1,2,3,33,34,7,8,16,35,11,36,13,23,24,25,26,28,37,38])))},{id:"erlang",name:"Erlang",aliases:["erl"],import:(()=>m(()=>import("./erlang-DsQrWhSR.js"),__vite__mapDeps([39,40])))},{id:"fennel",name:"Fennel",import:(()=>m(()=>import("./fennel-BYunw83y.js"),[]))},{id:"fish",name:"Fish",import:(()=>m(()=>import("./fish-BvzEVeQv.js"),[]))},{id:"fluent",name:"Fluent",aliases:["ftl"],import:(()=>m(()=>import("./fluent-C4IJs8-o.js"),[]))},{id:"fortran-fixed-form",name:"Fortran (Fixed Form)",aliases:["f","for","f77"],import:(()=>m(()=>import("./fortran-fixed-form-CkoXwp7k.js"),__vite__mapDeps([41,42])))},{id:"fortran-free-form",name:"Fortran (Free Form)",aliases:["f90","f95","f03","f08","f18"],import:(()=>m(()=>import("./fortran-free-form-BxgE0vQu.js"),[]))},{id:"fsharp",name:"F#",aliases:["f#","fs"],import:(()=>m(()=>import("./fsharp-CXgrBDvD.js"),__vite__mapDeps([43,40])))},{id:"gdresource",name:"GDResource",aliases:["tscn","tres"],import:(()=>m(()=>import("./gdresource-BOOCDP_w.js"),__vite__mapDeps([44,45,46])))},{id:"gdscript",name:"GDScript",aliases:["gd"],import:(()=>m(()=>import("./gdscript-C5YyOfLZ.js"),[]))},{id:"gdshader",name:"GDShader",import:(()=>m(()=>import("./gdshader-DkwncUOv.js"),[]))},{id:"genie",name:"Genie",import:(()=>m(()=>import("./genie-D0YGMca9.js"),[]))},{id:"gherkin",name:"Gherkin",import:(()=>m(()=>import("./gherkin-DyxjwDmM.js"),[]))},{id:"git-commit",name:"Git Commit Message",import:(()=>m(()=>import("./git-commit-F4YmCXRG.js"),__vite__mapDeps([47,48])))},{id:"git-rebase",name:"Git Rebase Message",import:(()=>m(()=>import("./git-rebase-r7XF79zn.js"),__vite__mapDeps([49,28])))},{id:"gleam",name:"Gleam",import:(()=>m(()=>import("./gleam-BspZqrRM.js"),[]))},{id:"glimmer-js",name:"Glimmer JS",aliases:["gjs"],import:(()=>m(()=>import("./glimmer-js-Rg0-pVw9.js"),__vite__mapDeps([50,2,11,3,1])))},{id:"glimmer-ts",name:"Glimmer TS",aliases:["gts"],import:(()=>m(()=>import("./glimmer-ts-U6CK756n.js"),__vite__mapDeps([51,11,3,2,1])))},{id:"glsl",name:"GLSL",import:(()=>m(()=>import("./glsl-DplSGwfg.js"),__vite__mapDeps([25,26])))},{id:"gn",name:"GN",import:(()=>m(()=>import("./gn-n2N0HUVH.js"),[]))},{id:"gnuplot",name:"Gnuplot",import:(()=>m(()=>import("./gnuplot-DdkO51Og.js"),[]))},{id:"go",name:"Go",import:(()=>m(()=>import("./go-CxLEBnE3.js"),[]))},{id:"graphql",name:"GraphQL",aliases:["gql"],import:(()=>m(()=>import("./graphql-ChdNCCLP.js"),__vite__mapDeps([35,2,11,36,13])))},{id:"groovy",name:"Groovy",import:(()=>m(()=>import("./groovy-gcz8RCvz.js"),[]))},{id:"hack",name:"Hack",import:(()=>m(()=>import("./hack-CaT9iCJl.js"),__vite__mapDeps([52,1,2,3,16])))},{id:"haml",name:"Ruby Haml",import:(()=>m(()=>import("./haml-B8DHNrY2.js"),__vite__mapDeps([34,2,3])))},{id:"handlebars",name:"Handlebars",aliases:["hbs"],import:(()=>m(()=>import("./handlebars-BL8al0AC.js"),__vite__mapDeps([53,1,2,3,38])))},{id:"haskell",name:"Haskell",aliases:["hs"],import:(()=>m(()=>import("./haskell-Df6bDoY_.js"),[]))},{id:"haxe",name:"Haxe",import:(()=>m(()=>import("./haxe-CzTSHFRz.js"),[]))},{id:"hcl",name:"HashiCorp HCL",import:(()=>m(()=>import("./hcl-BWvSN4gD.js"),[]))},{id:"hjson",name:"Hjson",import:(()=>m(()=>import("./hjson-D5-asLiD.js"),[]))},{id:"hlsl",name:"HLSL",import:(()=>m(()=>import("./hlsl-D3lLCCz7.js"),[]))},{id:"html",name:"HTML",import:(()=>m(()=>import("./html-GMplVEZG.js"),__vite__mapDeps([1,2,3])))},{id:"html-derivative",name:"HTML (Derivative)",import:(()=>m(()=>import("./html-derivative-BFtXZ54Q.js"),__vite__mapDeps([15,1,2,3])))},{id:"http",name:"HTTP",import:(()=>m(()=>import("./http-jrhK8wxY.js"),__vite__mapDeps([54,28,9,7,8,35,2,11,36,13])))},{id:"hurl",name:"Hurl",import:(()=>m(()=>import("./hurl-irOxFIW8.js"),__vite__mapDeps([55,35,2,11,36,13,7,8,56])))},{id:"hxml",name:"HXML",import:(()=>m(()=>import("./hxml-Bvhsp5Yf.js"),__vite__mapDeps([57,58])))},{id:"hy",name:"Hy",import:(()=>m(()=>import("./hy-DFXneXwc.js"),[]))},{id:"imba",name:"Imba",import:(()=>m(()=>import("./imba-DGztddWO.js"),[]))},{id:"ini",name:"INI",aliases:["properties"],import:(()=>m(()=>import("./ini-BEwlwnbL.js"),[]))},{id:"java",name:"Java",import:(()=>m(()=>import("./java-CylS5w8V.js"),[]))},{id:"javascript",name:"JavaScript",aliases:["js","cjs","mjs"],import:(()=>m(()=>import("./javascript-wDzz0qaB.js"),[]))},{id:"jinja",name:"Jinja",import:(()=>m(()=>import("./jinja-4LBKfQ-Z.js"),__vite__mapDeps([59,1,2,3])))},{id:"jison",name:"Jison",import:(()=>m(()=>import("./jison-wvAkD_A8.js"),__vite__mapDeps([60,2])))},{id:"json",name:"JSON",import:(()=>m(()=>import("./json-Cp-IABpG.js"),[]))},{id:"json5",name:"JSON5",import:(()=>m(()=>import("./json5-C9tS-k6U.js"),[]))},{id:"jsonc",name:"JSON with Comments",import:(()=>m(()=>import("./jsonc-Des-eS-w.js"),[]))},{id:"jsonl",name:"JSON Lines",import:(()=>m(()=>import("./jsonl-DcaNXYhu.js"),[]))},{id:"jsonnet",name:"Jsonnet",import:(()=>m(()=>import("./jsonnet-DFQXde-d.js"),[]))},{id:"jssm",name:"JSSM",aliases:["fsl"],import:(()=>m(()=>import("./jssm-C2t-YnRu.js"),[]))},{id:"jsx",name:"JSX",import:(()=>m(()=>import("./jsx-g9-lgVsj.js"),[]))},{id:"julia",name:"Julia",aliases:["jl"],import:(()=>m(()=>import("./julia-CxzCAyBv.js"),__vite__mapDeps([61,23,24,25,26,16,20,2,62])))},{id:"kdl",name:"KDL",import:(()=>m(()=>import("./kdl-DV7GczEv.js"),[]))},{id:"kotlin",name:"Kotlin",aliases:["kt","kts"],import:(()=>m(()=>import("./kotlin-BdnUsdx6.js"),[]))},{id:"kusto",name:"Kusto",aliases:["kql"],import:(()=>m(()=>import("./kusto-DZf3V79B.js"),[]))},{id:"latex",name:"LaTeX",import:(()=>m(()=>import("./latex-DGMBWnxU.js"),__vite__mapDeps([63,64,62])))},{id:"lean",name:"Lean 4",aliases:["lean4"],import:(()=>m(()=>import("./lean-BZvkOJ9d.js"),[]))},{id:"less",name:"Less",import:(()=>m(()=>import("./less-B1dDrJ26.js"),[]))},{id:"liquid",name:"Liquid",import:(()=>m(()=>import("./liquid-DYVedYrR.js"),__vite__mapDeps([65,1,2,3,9])))},{id:"llvm",name:"LLVM IR",import:(()=>m(()=>import("./llvm-BtvRca6l.js"),[]))},{id:"log",name:"Log file",import:(()=>m(()=>import("./log-2UxHyX5q.js"),[]))},{id:"logo",name:"Logo",import:(()=>m(()=>import("./logo-BtOb2qkB.js"),[]))},{id:"lua",name:"Lua",import:(()=>m(()=>import("./lua-BaeVxFsk.js"),__vite__mapDeps([37,26])))},{id:"luau",name:"Luau",import:(()=>m(()=>import("./luau-C-HG3fhB.js"),[]))},{id:"make",name:"Makefile",aliases:["makefile"],import:(()=>m(()=>import("./make-CHLpvVh8.js"),[]))},{id:"markdown",name:"Markdown",aliases:["md"],import:(()=>m(()=>import("./markdown-Cvjx9yec.js"),[]))},{id:"marko",name:"Marko",import:(()=>m(()=>import("./marko-DZsq8hO1.js"),__vite__mapDeps([66,3,67,5,11])))},{id:"matlab",name:"MATLAB",import:(()=>m(()=>import("./matlab-D7o27uSR.js"),[]))},{id:"mdc",name:"MDC",import:(()=>m(()=>import("./mdc-DUICxH0z.js"),__vite__mapDeps([68,40,38,15,1,2,3])))},{id:"mdx",name:"MDX",import:(()=>m(()=>import("./mdx-Cmh6b_Ma.js"),[]))},{id:"mermaid",name:"Mermaid",aliases:["mmd"],import:(()=>m(()=>import("./mermaid-mWjccvbQ.js"),[]))},{id:"mipsasm",name:"MIPS Assembly",aliases:["mips"],import:(()=>m(()=>import("./mipsasm-CKIfxQSi.js"),[]))},{id:"mojo",name:"Mojo",import:(()=>m(()=>import("./mojo-B93PlW-d.js"),[]))},{id:"moonbit",name:"MoonBit",aliases:["mbt","mbti"],import:(()=>m(()=>import("./moonbit-Ba13S78F.js"),[]))},{id:"move",name:"Move",import:(()=>m(()=>import("./move-IF9eRakj.js"),[]))},{id:"narrat",name:"Narrat Language",aliases:["nar"],import:(()=>m(()=>import("./narrat-DRg8JJMk.js"),[]))},{id:"nextflow",name:"Nextflow",aliases:["nf"],import:(()=>m(()=>import("./nextflow-BrzmwbiE.js"),[]))},{id:"nginx",name:"Nginx",import:(()=>m(()=>import("./nginx-BpAMiNFr.js"),__vite__mapDeps([69,37,26])))},{id:"nim",name:"Nim",import:(()=>m(()=>import("./nim-CVrawwO9.js"),__vite__mapDeps([70,26,1,2,3,7,8,25,40])))},{id:"nix",name:"Nix",import:(()=>m(()=>import("./nix-CwoSXNpI.js"),[]))},{id:"nushell",name:"nushell",aliases:["nu"],import:(()=>m(()=>import("./nushell-C-sUppwS.js"),[]))},{id:"objective-c",name:"Objective-C",aliases:["objc"],import:(()=>m(()=>import("./objective-c-DXmwc3jG.js"),[]))},{id:"objective-cpp",name:"Objective-C++",import:(()=>m(()=>import("./objective-cpp-CLxacb5B.js"),[]))},{id:"ocaml",name:"OCaml",import:(()=>m(()=>import("./ocaml-C0hk2d4L.js"),[]))},{id:"odin",name:"Odin",import:(()=>m(()=>import("./odin-BBf5iR-q.js"),[]))},{id:"openscad",name:"OpenSCAD",aliases:["scad"],import:(()=>m(()=>import("./openscad-C4EeE6gA.js"),[]))},{id:"pascal",name:"Pascal",import:(()=>m(()=>import("./pascal-D93ZcfNL.js"),[]))},{id:"perl",name:"Perl",import:(()=>m(()=>import("./perl-C0TMdlhV.js"),__vite__mapDeps([71,1,2,3,7,8,16])))},{id:"php",name:"PHP",import:(()=>m(()=>import("./php-Dhbhpdrm.js"),__vite__mapDeps([72,1,2,3,7,8,16,9])))},{id:"pkl",name:"Pkl",import:(()=>m(()=>import("./pkl-u5AG7uiY.js"),[]))},{id:"plsql",name:"PL/SQL",import:(()=>m(()=>import("./plsql-ChMvpjG-.js"),[]))},{id:"po",name:"Gettext PO",aliases:["pot","potx"],import:(()=>m(()=>import("./po-BTJTHyun.js"),[]))},{id:"polar",name:"Polar",import:(()=>m(()=>import("./polar-C0HS_06l.js"),[]))},{id:"postcss",name:"PostCSS",import:(()=>m(()=>import("./postcss-CXtECtnM.js"),[]))},{id:"powerquery",name:"PowerQuery",import:(()=>m(()=>import("./powerquery-CEu0bR-o.js"),[]))},{id:"powershell",name:"PowerShell",aliases:["ps","ps1"],import:(()=>m(()=>import("./powershell-Dpen1YoG.js"),[]))},{id:"prisma",name:"Prisma",import:(()=>m(()=>import("./prisma-Dd19v3D-.js"),[]))},{id:"prolog",name:"Prolog",import:(()=>m(()=>import("./prolog-CbFg5uaA.js"),[]))},{id:"proto",name:"Protocol Buffer 3",aliases:["protobuf"],import:(()=>m(()=>import("./proto-C7zT0LnQ.js"),[]))},{id:"pug",name:"Pug",aliases:["jade"],import:(()=>m(()=>import("./pug-CGlum2m_.js"),__vite__mapDeps([73,2,3,1])))},{id:"puppet",name:"Puppet",import:(()=>m(()=>import("./puppet-BMWR74SV.js"),[]))},{id:"purescript",name:"PureScript",import:(()=>m(()=>import("./purescript-CklMAg4u.js"),[]))},{id:"python",name:"Python",aliases:["py"],import:(()=>m(()=>import("./python-B6aJPvgy.js"),[]))},{id:"qml",name:"QML",import:(()=>m(()=>import("./qml-3beO22l8.js"),__vite__mapDeps([74,2])))},{id:"qmldir",name:"QML Directory",import:(()=>m(()=>import("./qmldir-C8lEn-DE.js"),[]))},{id:"qss",name:"Qt Style Sheets",import:(()=>m(()=>import("./qss-IeuSbFQv.js"),[]))},{id:"r",name:"R",import:(()=>m(()=>import("./r-Dspwwk_N.js"),[]))},{id:"racket",name:"Racket",import:(()=>m(()=>import("./racket-BqYA7rlc.js"),[]))},{id:"raku",name:"Raku",aliases:["perl6"],import:(()=>m(()=>import("./raku-DXvB9xmW.js"),[]))},{id:"razor",name:"ASP.NET Razor",import:(()=>m(()=>import("./razor-Uh8Bk_45.js"),__vite__mapDeps([75,1,2,3,76])))},{id:"reg",name:"Windows Registry Script",import:(()=>m(()=>import("./reg-C-SQnVFl.js"),[]))},{id:"regexp",name:"RegExp",aliases:["regex"],import:(()=>m(()=>import("./regexp-CDVJQ6XC.js"),[]))},{id:"rel",name:"Rel",import:(()=>m(()=>import("./rel-C3B-1QV4.js"),[]))},{id:"riscv",name:"RISC-V",import:(()=>m(()=>import("./riscv-BM1_JUlF.js"),[]))},{id:"ron",name:"RON",import:(()=>m(()=>import("./ron-BhRPY-oY.js"),[]))},{id:"rosmsg",name:"ROS Interface",import:(()=>m(()=>import("./rosmsg-BJDFO7_C.js"),[]))},{id:"rst",name:"reStructuredText",import:(()=>m(()=>import("./rst-D5oM4XIm.js"),__vite__mapDeps([77,15,1,2,3,23,24,25,26,16,20,28,38,78,33,34,7,8,35,11,36,13,37])))},{id:"ruby",name:"Ruby",aliases:["rb"],import:(()=>m(()=>import("./ruby-Cw6WdidG.js"),__vite__mapDeps([33,1,2,3,34,7,8,16,35,11,36,13,23,24,25,26,28,37,38])))},{id:"rust",name:"Rust",aliases:["rs"],import:(()=>m(()=>import("./rust-B1yitclQ.js"),[]))},{id:"sas",name:"SAS",import:(()=>m(()=>import("./sas-cz2c8ADy.js"),__vite__mapDeps([79,16])))},{id:"sass",name:"Sass",import:(()=>m(()=>import("./sass-Cj5Yp3dK.js"),[]))},{id:"scala",name:"Scala",import:(()=>m(()=>import("./scala-C151Ov-r.js"),[]))},{id:"scheme",name:"Scheme",import:(()=>m(()=>import("./scheme-C98Dy4si.js"),[]))},{id:"scss",name:"SCSS",import:(()=>m(()=>import("./scss-OYdSNvt2.js"),__vite__mapDeps([5,3])))},{id:"sdbl",name:"1C (Query)",aliases:["1c-query"],import:(()=>m(()=>import("./sdbl-DVxCFoDh.js"),[]))},{id:"shaderlab",name:"ShaderLab",aliases:["shader"],import:(()=>m(()=>import("./shaderlab-Dg9Lc6iA.js"),__vite__mapDeps([80,81])))},{id:"shellscript",name:"Shell",aliases:["bash","sh","shell","zsh"],import:(()=>m(()=>import("./shellscript-Yzrsuije.js"),[]))},{id:"shellsession",name:"Shell Session",aliases:["console"],import:(()=>m(()=>import("./shellsession-BADoaaVG.js"),__vite__mapDeps([82,28])))},{id:"smalltalk",name:"Smalltalk",import:(()=>m(()=>import("./smalltalk-BERRCDM3.js"),[]))},{id:"solidity",name:"Solidity",import:(()=>m(()=>import("./solidity-rGO070M0.js"),[]))},{id:"soy",name:"Closure Templates",aliases:["closure-templates"],import:(()=>m(()=>import("./soy-Brmx7dQM.js"),__vite__mapDeps([83,1,2,3])))},{id:"sparql",name:"SPARQL",import:(()=>m(()=>import("./sparql-rVzFXLq3.js"),__vite__mapDeps([84,85])))},{id:"splunk",name:"Splunk Query Language",aliases:["spl"],import:(()=>m(()=>import("./splunk-BtCnVYZw.js"),[]))},{id:"sql",name:"SQL",import:(()=>m(()=>import("./sql-BLtJtn59.js"),[]))},{id:"ssh-config",name:"SSH Config",import:(()=>m(()=>import("./ssh-config-_ykCGR6B.js"),[]))},{id:"stata",name:"Stata",import:(()=>m(()=>import("./stata-BH5u7GGu.js"),__vite__mapDeps([86,16])))},{id:"stylus",name:"Stylus",aliases:["styl"],import:(()=>m(()=>import("./stylus-BEDo0Tqx.js"),[]))},{id:"surrealql",name:"SurrealQL",aliases:["surql"],import:(()=>m(()=>import("./surrealql-Bq5Q-fJD.js"),__vite__mapDeps([87,2])))},{id:"svelte",name:"Svelte",import:(()=>m(()=>import("./svelte-zxCyuUbr.js"),__vite__mapDeps([88,2,11,3,12])))},{id:"swift",name:"Swift",import:(()=>m(()=>import("./swift-Dg5xB15N.js"),[]))},{id:"system-verilog",name:"SystemVerilog",import:(()=>m(()=>import("./system-verilog-CnnmHF94.js"),[]))},{id:"systemd",name:"Systemd Units",import:(()=>m(()=>import("./systemd-4A_iFExJ.js"),[]))},{id:"talonscript",name:"TalonScript",aliases:["talon"],import:(()=>m(()=>import("./talonscript-CkByrt1z.js"),[]))},{id:"tasl",name:"Tasl",import:(()=>m(()=>import("./tasl-QIJgUcNo.js"),[]))},{id:"tcl",name:"Tcl",import:(()=>m(()=>import("./tcl-dwOrl1Do.js"),[]))},{id:"templ",name:"Templ",import:(()=>m(()=>import("./templ-P3uqSqPl.js"),__vite__mapDeps([89,90,2,3])))},{id:"terraform",name:"Terraform",aliases:["tf","tfvars"],import:(()=>m(()=>import("./terraform-BETggiCN.js"),[]))},{id:"tex",name:"TeX",import:(()=>m(()=>import("./tex-CvyZ59Mk.js"),__vite__mapDeps([64,62])))},{id:"toml",name:"TOML",import:(()=>m(()=>import("./toml-vGWfd6FD.js"),[]))},{id:"ts-tags",name:"TypeScript with Tags",aliases:["lit"],import:(()=>m(()=>import("./ts-tags-zn1MmPIZ.js"),__vite__mapDeps([91,11,3,2,25,26,1,16,7,8])))},{id:"tsv",name:"TSV",import:(()=>m(()=>import("./tsv-B_m7g4N7.js"),[]))},{id:"tsx",name:"TSX",import:(()=>m(()=>import("./tsx-COt5Ahok.js"),[]))},{id:"turtle",name:"Turtle",import:(()=>m(()=>import("./turtle-BsS91CYL.js"),[]))},{id:"twig",name:"Twig",import:(()=>m(()=>import("./twig-ChbOoGGc.js"),__vite__mapDeps([92,3,2,5,72,1,7,8,16,9,20,33,34,35,11,36,13,23,24,25,26,28,37,38])))},{id:"typescript",name:"TypeScript",aliases:["ts","cts","mts"],import:(()=>m(()=>import("./typescript-BPQ3VLAy.js"),[]))},{id:"typespec",name:"TypeSpec",aliases:["tsp"],import:(()=>m(()=>import("./typespec-BGHnOYBU.js"),[]))},{id:"typst",name:"Typst",aliases:["typ"],import:(()=>m(()=>import("./typst-DHCkPAjA.js"),[]))},{id:"v",name:"V",import:(()=>m(()=>import("./v-BcVCzyr7.js"),[]))},{id:"vala",name:"Vala",import:(()=>m(()=>import("./vala-CsfeWuGM.js"),[]))},{id:"vb",name:"Visual Basic",aliases:["cmd"],import:(()=>m(()=>import("./vb-D17OF-Vu.js"),[]))},{id:"verilog",name:"Verilog",import:(()=>m(()=>import("./verilog-BQ8w6xss.js"),[]))},{id:"vhdl",name:"VHDL",import:(()=>m(()=>import("./vhdl-CeAyd5Ju.js"),[]))},{id:"viml",name:"Vim Script",aliases:["vim","vimscript"],import:(()=>m(()=>import("./viml-CJc9bBzg.js"),[]))},{id:"vue",name:"Vue",import:(()=>m(()=>import("./vue-DN_0RTcg.js"),__vite__mapDeps([93,3,2,11,9,1,15])))},{id:"vue-html",name:"Vue HTML",import:(()=>m(()=>import("./vue-html-AaS7Mt5G.js"),__vite__mapDeps([94,2])))},{id:"vue-vine",name:"Vue Vine",import:(()=>m(()=>import("./vue-vine-CQOfvN7w.js"),__vite__mapDeps([95,3,5,67,96,12,2])))},{id:"vyper",name:"Vyper",aliases:["vy"],import:(()=>m(()=>import("./vyper-CDx5xZoG.js"),[]))},{id:"wasm",name:"WebAssembly",import:(()=>m(()=>import("./wasm-MzD3tlZU.js"),[]))},{id:"wenyan",name:"Wenyan",aliases:["文言"],import:(()=>m(()=>import("./wenyan-BV7otONQ.js"),[]))},{id:"wgsl",name:"WGSL",import:(()=>m(()=>import("./wgsl-Dx-B1_4e.js"),[]))},{id:"wikitext",name:"Wikitext",aliases:["mediawiki","wiki"],import:(()=>m(()=>import("./wikitext-BhOHFoWU.js"),[]))},{id:"wit",name:"WebAssembly Interface Types",import:(()=>m(()=>import("./wit-5i3qLPDT.js"),[]))},{id:"wolfram",name:"Wolfram",aliases:["wl"],import:(()=>m(()=>import("./wolfram-lXgVvXCa.js"),[]))},{id:"xml",name:"XML",import:(()=>m(()=>import("./xml-sdJ4AIDG.js"),__vite__mapDeps([7,8])))},{id:"xsl",name:"XSL",import:(()=>m(()=>import("./xsl-CtQFsRM5.js"),__vite__mapDeps([97,7,8])))},{id:"yaml",name:"YAML",aliases:["yml"],import:(()=>m(()=>import("./yaml-Buea-lGh.js"),[]))},{id:"zenscript",name:"ZenScript",import:(()=>m(()=>import("./zenscript-DVFEvuxE.js"),[]))},{id:"zig",name:"Zig",import:(()=>m(()=>import("./zig-VOosw3JB.js"),[]))}],r1=Object.fromEntries(Zd.map(e=>[e.id,e.import])),i1=Object.fromEntries(Zd.flatMap(e=>e.aliases?.map(t=>[t,e.import])||[])),o1={...r1,...i1},a1=[{id:"andromeeda",displayName:"Andromeeda",type:"dark",import:(()=>m(()=>import("./andromeeda-C4gqWexZ.js"),[]))},{id:"aurora-x",displayName:"Aurora X",type:"dark",import:(()=>m(()=>import("./aurora-x-D-2ljcwZ.js"),[]))},{id:"ayu-dark",displayName:"Ayu Dark",type:"dark",import:(()=>m(()=>import("./ayu-dark-CMjwMIkn.js"),[]))},{id:"ayu-light",displayName:"Ayu Light",type:"light",import:(()=>m(()=>import("./ayu-light-C47S-Tmv.js"),[]))},{id:"ayu-mirage",displayName:"Ayu Mirage",type:"dark",import:(()=>m(()=>import("./ayu-mirage-CjoLj4QM.js"),[]))},{id:"catppuccin-frappe",displayName:"Catppuccin Frappé",type:"dark",import:(()=>m(()=>import("./catppuccin-frappe-DFWUc33u.js"),[]))},{id:"catppuccin-latte",displayName:"Catppuccin Latte",type:"light",import:(()=>m(()=>import("./catppuccin-latte-C9dUb6Cb.js"),[]))},{id:"catppuccin-macchiato",displayName:"Catppuccin Macchiato",type:"dark",import:(()=>m(()=>import("./catppuccin-macchiato-DQyhUUbL.js"),[]))},{id:"catppuccin-mocha",displayName:"Catppuccin Mocha",type:"dark",import:(()=>m(()=>import("./catppuccin-mocha-D87Tk5Gz.js"),[]))},{id:"dark-plus",displayName:"Dark Plus",type:"dark",import:(()=>m(()=>import("./dark-plus-C3mMm8J8.js"),[]))},{id:"dracula",displayName:"Dracula Theme",type:"dark",import:(()=>m(()=>import("./dracula-BzJJZx-M.js"),[]))},{id:"dracula-soft",displayName:"Dracula Theme Soft",type:"dark",import:(()=>m(()=>import("./dracula-soft-BXkSAIEj.js"),[]))},{id:"everforest-dark",displayName:"Everforest Dark",type:"dark",import:(()=>m(()=>import("./everforest-dark-BgDCqdQA.js"),[]))},{id:"everforest-light",displayName:"Everforest Light",type:"light",import:(()=>m(()=>import("./everforest-light-C8M2exoo.js"),[]))},{id:"github-dark",displayName:"GitHub Dark",type:"dark",import:(()=>m(()=>import("./github-dark-DHJKELXO.js"),[]))},{id:"github-dark-default",displayName:"GitHub Dark Default",type:"dark",import:(()=>m(()=>import("./github-dark-default-Cuk6v7N8.js"),[]))},{id:"github-dark-dimmed",displayName:"GitHub Dark Dimmed",type:"dark",import:(()=>m(()=>import("./github-dark-dimmed-DH5Ifo-i.js"),[]))},{id:"github-dark-high-contrast",displayName:"GitHub Dark High Contrast",type:"dark",import:(()=>m(()=>import("./github-dark-high-contrast-E3gJ1_iC.js"),[]))},{id:"github-light",displayName:"GitHub Light",type:"light",import:(()=>m(()=>import("./github-light-DAi9KRSo.js"),[]))},{id:"github-light-default",displayName:"GitHub Light Default",type:"light",import:(()=>m(()=>import("./github-light-default-D7oLnXFd.js"),[]))},{id:"github-light-high-contrast",displayName:"GitHub Light High Contrast",type:"light",import:(()=>m(()=>import("./github-light-high-contrast-BfjtVDDH.js"),[]))},{id:"gruvbox-dark-hard",displayName:"Gruvbox Dark Hard",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-hard-CFHQjOhq.js"),[]))},{id:"gruvbox-dark-medium",displayName:"Gruvbox Dark Medium",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-medium-GsRaNv29.js"),[]))},{id:"gruvbox-dark-soft",displayName:"Gruvbox Dark Soft",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-soft-CVdnzihN.js"),[]))},{id:"gruvbox-light-hard",displayName:"Gruvbox Light Hard",type:"light",import:(()=>m(()=>import("./gruvbox-light-hard-CH1njM8p.js"),[]))},{id:"gruvbox-light-medium",displayName:"Gruvbox Light Medium",type:"light",import:(()=>m(()=>import("./gruvbox-light-medium-DRw_LuNl.js"),[]))},{id:"gruvbox-light-soft",displayName:"Gruvbox Light Soft",type:"light",import:(()=>m(()=>import("./gruvbox-light-soft-hJgmCMqR.js"),[]))},{id:"horizon",displayName:"Horizon",type:"dark",import:(()=>m(()=>import("./horizon-BUw7H-hv.js"),[]))},{id:"houston",displayName:"Houston",type:"dark",import:(()=>m(()=>import("./houston-DnULxvSX.js"),[]))},{id:"kanagawa-dragon",displayName:"Kanagawa Dragon",type:"dark",import:(()=>m(()=>import("./kanagawa-dragon-CkXjmgJE.js"),[]))},{id:"kanagawa-lotus",displayName:"Kanagawa Lotus",type:"light",import:(()=>m(()=>import("./kanagawa-lotus-CfQXZHmo.js"),[]))},{id:"kanagawa-wave",displayName:"Kanagawa Wave",type:"dark",import:(()=>m(()=>import("./kanagawa-wave-DWedfzmr.js"),[]))},{id:"laserwave",displayName:"LaserWave",type:"dark",import:(()=>m(()=>import("./laserwave-DUszq2jm.js"),[]))},{id:"light-plus",displayName:"Light Plus",type:"light",import:(()=>m(()=>import("./light-plus-B7mTdjB0.js"),[]))},{id:"material-theme",displayName:"Material Theme",type:"dark",import:(()=>m(()=>import("./material-theme-D5KoaKCx.js"),[]))},{id:"material-theme-darker",displayName:"Material Theme Darker",type:"dark",import:(()=>m(()=>import("./material-theme-darker-BfHTSMKl.js"),[]))},{id:"material-theme-lighter",displayName:"Material Theme Lighter",type:"light",import:(()=>m(()=>import("./material-theme-lighter-B0m2ddpp.js"),[]))},{id:"material-theme-ocean",displayName:"Material Theme Ocean",type:"dark",import:(()=>m(()=>import("./material-theme-ocean-CyktbL80.js"),[]))},{id:"material-theme-palenight",displayName:"Material Theme Palenight",type:"dark",import:(()=>m(()=>import("./material-theme-palenight-Csfq5Kiy.js"),[]))},{id:"min-dark",displayName:"Min Dark",type:"dark",import:(()=>m(()=>import("./min-dark-CafNBF8u.js"),[]))},{id:"min-light",displayName:"Min Light",type:"light",import:(()=>m(()=>import("./min-light-CTRr51gU.js"),[]))},{id:"monokai",displayName:"Monokai",type:"dark",import:(()=>m(()=>import("./monokai-D4h5O-jR.js"),[]))},{id:"night-owl",displayName:"Night Owl",type:"dark",import:(()=>m(()=>import("./night-owl-C39BiMTA.js"),[]))},{id:"night-owl-light",displayName:"Night Owl Light",type:"light",import:(()=>m(()=>import("./night-owl-light-CMTm3GFP.js"),[]))},{id:"nord",displayName:"Nord",type:"dark",import:(()=>m(()=>import("./nord-Ddv68eIx.js"),[]))},{id:"one-dark-pro",displayName:"One Dark Pro",type:"dark",import:(()=>m(()=>import("./one-dark-pro-DVMEJ2y_.js"),[]))},{id:"one-light",displayName:"One Light",type:"light",import:(()=>m(()=>import("./one-light-C3Wv6jpd.js"),[]))},{id:"plastic",displayName:"Plastic",type:"dark",import:(()=>m(()=>import("./plastic-3e1v2bzS.js"),[]))},{id:"poimandres",displayName:"Poimandres",type:"dark",import:(()=>m(()=>import("./poimandres-CS3Unz2-.js"),[]))},{id:"red",displayName:"Red",type:"dark",import:(()=>m(()=>import("./red-bN70gL4F.js"),[]))},{id:"rose-pine",displayName:"Rosé Pine",type:"dark",import:(()=>m(()=>import("./rose-pine-qdsjHGoJ.js"),[]))},{id:"rose-pine-dawn",displayName:"Rosé Pine Dawn",type:"light",import:(()=>m(()=>import("./rose-pine-dawn-DHQR4-dF.js"),[]))},{id:"rose-pine-moon",displayName:"Rosé Pine Moon",type:"dark",import:(()=>m(()=>import("./rose-pine-moon-D4_iv3hh.js"),[]))},{id:"slack-dark",displayName:"Slack Dark",type:"dark",import:(()=>m(()=>import("./slack-dark-BthQWCQV.js"),[]))},{id:"slack-ochin",displayName:"Slack Ochin",type:"light",import:(()=>m(()=>import("./slack-ochin-DqwNpetd.js"),[]))},{id:"snazzy-light",displayName:"Snazzy Light",type:"light",import:(()=>m(()=>import("./snazzy-light-Bw305WKR.js"),[]))},{id:"solarized-dark",displayName:"Solarized Dark",type:"dark",import:(()=>m(()=>import("./solarized-dark-DXbdFlpD.js"),[]))},{id:"solarized-light",displayName:"Solarized Light",type:"light",import:(()=>m(()=>import("./solarized-light-L9t79GZl.js"),[]))},{id:"synthwave-84",displayName:"Synthwave '84",type:"dark",import:(()=>m(()=>import("./synthwave-84-CbfX1IO0.js"),[]))},{id:"tokyo-night",displayName:"Tokyo Night",type:"dark",import:(()=>m(()=>import("./tokyo-night-hegEt444.js"),[]))},{id:"vesper",displayName:"Vesper",type:"dark",import:(()=>m(()=>import("./vesper-DU1UobuO.js"),[]))},{id:"vitesse-black",displayName:"Vitesse Black",type:"dark",import:(()=>m(()=>import("./vitesse-black-Bkuqu6BP.js"),[]))},{id:"vitesse-dark",displayName:"Vitesse Dark",type:"dark",import:(()=>m(()=>import("./vitesse-dark-D0r3Knsf.js"),[]))},{id:"vitesse-light",displayName:"Vitesse Light",type:"light",import:(()=>m(()=>import("./vitesse-light-CVO1_9PV.js"),[]))}],l1=Object.fromEntries(a1.map(e=>[e.id,e.import]));class ka extends Error{constructor(t){super(t),this.name="ShikiError"}}function c1(){return 2147483648}function u1(){return typeof performance<"u"?performance.now():Date.now()}const d1=(e,t)=>e+(t-e%t)%t;async function p1(e){let t,n;const s={};function r(h){n=h,s.HEAPU8=new Uint8Array(h),s.HEAPU32=new Uint32Array(h)}function i(h,y,w){s.HEAPU8.copyWithin(h,y,y+w)}function o(h){try{return t.grow(h-n.byteLength+65535>>>16),r(t.buffer),1}catch{}}function l(h){const y=s.HEAPU8.length;h=h>>>0;const w=c1();if(h>w)return!1;for(let T=1;T<=4;T*=2){let S=y*(1+.2/T);S=Math.min(S,h+100663296);const L=Math.min(w,d1(Math.max(h,S),65536));if(o(L))return!0}return!1}const a=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function c(h,y,w=1024){const T=y+w;let S=y;for(;h[S]&&!(S>=T);)++S;if(S-y>16&&h.buffer&&a)return a.decode(h.subarray(y,S));let L="";for(;y>10,56320|Y&1023)}}return L}function u(h,y){return h?c(s.HEAPU8,h,y):""}const d={emscripten_get_now:u1,emscripten_memcpy_big:i,emscripten_resize_heap:l,fd_write:()=>0};async function f(){const y=await e({env:d,wasi_snapshot_preview1:d});t=y.memory,r(t.buffer),Object.assign(s,y),s.UTF8ToString=u}return await f(),s}var f1=Object.defineProperty,h1=(e,t,n)=>t in e?f1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,tt=(e,t,n)=>h1(e,typeof t!="symbol"?t+"":t,n);let st=null;function m1(e){throw new ka(e.UTF8ToString(e.getLastOnigError()))}class wi{constructor(t){tt(this,"utf16Length"),tt(this,"utf8Length"),tt(this,"utf16Value"),tt(this,"utf8Value"),tt(this,"utf16OffsetToUtf8"),tt(this,"utf8OffsetToUtf16");const n=t.length,s=wi._utf8ByteLength(t),r=s!==n,i=r?new Uint32Array(n+1):null;r&&(i[n]=s);const o=r?new Uint32Array(s+1):null;r&&(o[s]=n);const l=new Uint8Array(s);let a=0;for(let c=0;c=55296&&u<=56319&&c+1=56320&&h<=57343&&(d=(u-55296<<10)+65536|h-56320,f=!0)}r&&(i[c]=a,f&&(i[c+1]=a),d<=127?o[a+0]=c:d<=2047?(o[a+0]=c,o[a+1]=c):d<=65535?(o[a+0]=c,o[a+1]=c,o[a+2]=c):(o[a+0]=c,o[a+1]=c,o[a+2]=c,o[a+3]=c)),d<=127?l[a++]=d:d<=2047?(l[a++]=192|(d&1984)>>>6,l[a++]=128|(d&63)>>>0):d<=65535?(l[a++]=224|(d&61440)>>>12,l[a++]=128|(d&4032)>>>6,l[a++]=128|(d&63)>>>0):(l[a++]=240|(d&1835008)>>>18,l[a++]=128|(d&258048)>>>12,l[a++]=128|(d&4032)>>>6,l[a++]=128|(d&63)>>>0),f&&c++}this.utf16Length=n,this.utf8Length=s,this.utf16Value=t,this.utf8Value=l,this.utf16OffsetToUtf8=i,this.utf8OffsetToUtf16=o}static _utf8ByteLength(t){let n=0;for(let s=0,r=t.length;s=55296&&i<=56319&&s+1=56320&&a<=57343&&(o=(i-55296<<10)+65536|a-56320,l=!0)}o<=127?n+=1:o<=2047?n+=2:o<=65535?n+=3:n+=4,l&&s++}return n}createString(t){const n=t.omalloc(this.utf8Length);return t.HEAPU8.set(this.utf8Value,n),n}}const ki=class Jt{constructor(t){if(tt(this,"id",++Jt.LAST_ID),tt(this,"_onigBinding"),tt(this,"content"),tt(this,"utf16Length"),tt(this,"utf8Length"),tt(this,"utf16OffsetToUtf8"),tt(this,"utf8OffsetToUtf16"),tt(this,"ptr"),!st)throw new ka("Must invoke loadWasm first.");this._onigBinding=st,this.content=t;const n=new wi(t);this.utf16Length=n.utf16Length,this.utf8Length=n.utf8Length,this.utf16OffsetToUtf8=n.utf16OffsetToUtf8,this.utf8OffsetToUtf16=n.utf8OffsetToUtf16,this.utf8Length<1e4&&!Jt._sharedPtrInUse?(Jt._sharedPtr||(Jt._sharedPtr=st.omalloc(1e4)),Jt._sharedPtrInUse=!0,st.HEAPU8.set(n.utf8Value,Jt._sharedPtr),this.ptr=Jt._sharedPtr):this.ptr=n.createString(st)}convertUtf8OffsetToUtf16(t){return this.utf8OffsetToUtf16?t<0?0:t>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[t]:t}convertUtf16OffsetToUtf8(t){return this.utf16OffsetToUtf8?t<0?0:t>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[t]:t}dispose(){this.ptr===Jt._sharedPtr?Jt._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};tt(ki,"LAST_ID",0);tt(ki,"_sharedPtr",0);tt(ki,"_sharedPtrInUse",!1);let ep=ki;class g1{constructor(t){if(tt(this,"_onigBinding"),tt(this,"_ptr"),!st)throw new ka("Must invoke loadWasm first.");const n=[],s=[];for(let l=0,a=t.length;l{let s=e;return s=await s,typeof s=="function"&&(s=await s(n)),typeof s=="function"&&(s=await s(n)),_1(s)?s=await s.instantiator(n):v1(s)?s=await s.default(n):(y1(s)&&(s=s.data),b1(s)?typeof WebAssembly.instantiateStreaming=="function"?s=await E1(s)(n):s=await x1(s)(n):w1(s)?s=await Zi(s)(n):s instanceof WebAssembly.Module?s=await Zi(s)(n):"default"in s&&s.default instanceof WebAssembly.Module&&(s=await Zi(s.default)(n))),"instance"in s&&(s=s.instance),"exports"in s&&(s=s.exports),s})}return wr=t(),wr}function Zi(e){return t=>WebAssembly.instantiate(e,t)}function E1(e){return t=>WebAssembly.instantiateStreaming(e,t)}function x1(e){return async t=>{const n=await e.arrayBuffer();return WebAssembly.instantiate(n,t)}}async function S1(e){return e&&await k1(e),{createScanner(t){return new g1(t.map(n=>typeof n=="string"?n:n.source))},createString(t){return new ep(t)}}}const T1=s1({langs:o1,themes:l1,engine:()=>S1(m(()=>import("./wasm-CG6Dc4jp.js"),[]))}),A1={class:"show-page"},R1={class:"top"},C1={class:"top-inner"},I1={class:"meta"},L1={class:"id"},P1={key:0,class:"sub"},O1={class:"wrap"},D1={class:"panel"},N1={key:0,class:"state muted"},$1={key:1,class:"state muted"},M1={key:2,class:"content"},V1={class:"head"},B1={class:"left"},j1={class:"title"},G1={key:0,class:"desc"},U1={key:1,class:"tags"},H1={class:"links"},F1=["href"],z1={class:"right"},W1={class:"badge"},q1={class:"badge-v"},K1={class:"badge"},Y1={class:"badge-v"},X1={class:"grid"},J1={class:"card"},Q1={class:"stats"},Z1={class:"k"},eS={class:"v"},tS={key:0,class:"card"},nS=["innerHTML"],sS={key:1,class:"card"},rS={key:3,class:"state muted"},iS={__name:"RegistryPkgShow",setup(e){const t=rr(),n=new Zu,s=de(!0),r=de(""),i=de(""),o=de(null),l=ue(()=>{const w=(t.params.namespace||"").toString().trim(),T=(t.params.name||"").toString().trim();return w&&T?`${w}/${T}`:""}),a=de("");let c=null;function u(w){const T=(w||"").toString().trim().toLowerCase();return T?T==="c++"?"cpp":T==="shell"?"bash":T:"txt"}async function d(){return c||(c=await T1({themes:["github-dark"],langs:["cpp","c","bash","json","yaml","toml","ini","cmake","xml","html","css","js","ts","diff","md","txt"]}),c)}async function f(w){const T=(w||"").toString();if(!T){a.value="";return}const S=await d(),L=new Ce.Renderer;L.code=(v,V)=>{const Y=typeof v=="string"?v:v&&v.text?v.text:"",ne=typeof V=="string"?V:v&&v.lang?v.lang:"",z=u(ne);try{return S.codeToHtml(Y,{lang:z,theme:"github-dark"})}catch{return S.codeToHtml(Y,{lang:"txt",theme:"github-dark"})}},Ce.setOptions({gfm:!0,breaks:!1,renderer:L});const g=Ce.parse(T);a.value=pk.sanitize(g)}function h(){l.value&&n.postMessage({type:"getPackage",id:l.value})}_n(async()=>{n.onmessage=w=>{const T=w.data||{};if(T.type==="loaded"){i.value=T.version||"",h();return}if(T.type==="packageResult"){if(s.value=!1,i.value=T.version||i.value,!T.ok){r.value=T.error||"cannot_load_package",o.value=null,a.value="";return}o.value=T.pkg||null,r.value="",f(o.value?.readme||"");return}T.type==="error"&&(s.value=!1,r.value=T.error||"worker_error")};try{const{data:w}=await na();n.postMessage({type:"load",data:w})}catch{s.value=!1,r.value="cannot_load_registry"}}),An(()=>{n.terminate()}),tn(()=>l.value,()=>{!s.value&&!r.value&&h()}),tn(()=>o.value?.readme,w=>{f(w||"")});const y=ue(()=>{const w=o.value?.stats||{};return[{k:"Latest",v:o.value?.latest||"-"},{k:"Versions",v:String(w.versionsCount??"-")},{k:"Repo",v:w.hasRepo?"yes":"no"},{k:"Readme",v:w.hasReadme?"yes":"no"},{k:"Created",v:w.createdAt||"-"},{k:"Updated",v:w.updatedAt||"-"}]});return(w,T)=>(A(),O("section",A1,[p("header",R1,[p("div",C1,[T[0]||(T[0]=p("div",{class:"brand"},[p("div",{class:"logo","aria-hidden":"true"}),p("div",{class:"brand-text"},"Vix Registry")],-1)),p("div",I1,[p("div",L1,H(l.value),1),i.value?(A(),O("div",P1,"Index: "+H(i.value),1)):se("",!0)])])]),p("div",O1,[p("div",D1,[s.value?(A(),O("div",N1,"Loading package…")):r.value?(A(),O("div",$1,"Error: "+H(r.value),1)):o.value?(A(),O("div",M1,[p("div",V1,[p("div",B1,[p("div",j1,H(o.value.id),1),o.value.description?(A(),O("div",G1,H(o.value.description),1)):se("",!0),o.value.keywords&&o.value.keywords.length?(A(),O("div",U1,[(A(!0),O(we,null,ze(o.value.keywords,S=>(A(),O("span",{key:S,class:"tag"},H(S),1))),128))])):se("",!0),p("div",H1,[o.value.repo?(A(),O("a",{key:0,class:"link",href:o.value.repo,target:"_blank",rel:"noreferrer"},"Repository",8,F1)):se("",!0)])]),p("div",z1,[p("div",W1,[T[1]||(T[1]=p("div",{class:"badge-k"},"Latest",-1)),p("div",q1,H(o.value.latest||"-"),1)]),p("div",K1,[T[2]||(T[2]=p("div",{class:"badge-k"},"License",-1)),p("div",Y1,H(o.value.license||"-"),1)])])]),p("div",X1,[p("div",J1,[T[3]||(T[3]=p("div",{class:"card-title"},"Stats",-1)),p("ul",Q1,[(A(!0),O(we,null,ze(y.value,S=>(A(),O("li",{key:S.k,class:"stat"},[p("span",Z1,H(S.k),1),p("span",eS,H(S.v),1)]))),128))])]),o.value.readme?(A(),O("div",tS,[T[4]||(T[4]=p("div",{class:"card-title"},"Readme",-1)),p("div",{class:"readme-md",innerHTML:a.value},null,8,nS)])):(A(),O("div",sS,[...T[5]||(T[5]=[p("div",{class:"card-title"},"Readme",-1),p("div",{class:"muted"},"No readme in index.",-1)])]))])])):(A(),O("div",rS,"Not found."))])])]))}},oS=Me(iS,[["__scopeId","data-v-93ff3496"]]),yn={siteName:"Vix.cpp",title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",baseUrl:"https://vixcpp.com",twitter:"@vix_cpp",image:"https://res.cloudinary.com/dwjbed2xb/image/upload/v1769499528/vix_banniere_zljwdt.png"};function Ot(e,t,n){const s=n?`meta[property="${e}"]`:`meta[name="${e}"]`;let r=document.head.querySelector(s);r||(r=document.createElement("meta"),n?r.setAttribute("property",e):r.setAttribute("name",e),document.head.appendChild(r)),r.setAttribute("content",t)}function aS(e,t){let n=document.head.querySelector(`link[rel="${e}"]`);n||(n=document.createElement("link"),n.setAttribute("rel",e),document.head.appendChild(n)),n.setAttribute("href",t)}function bc(e,t){return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?e.replace(/\/+$/,"")+t:e.replace(/\/+$/,"")+"/"+t:e}function tp(e){const t=document.getElementById(e);t&&t.parentNode&&t.parentNode.removeChild(t)}function lS(e,t){tp(e);const n=document.createElement("script");n.type="application/ld+json",n.id=e,n.text=JSON.stringify(t),document.head.appendChild(n)}function wc(e={}){const t=yn.siteName,n=(e.title||yn.title).trim();let s=n;!n.includes(t)&&n!==yn.title&&(s=`${n} | ${t}`);const r=(e.description||yn.description).trim(),i=e.canonical?e.canonical:bc(yn.baseUrl,e.path||window.location.pathname),o=bc(yn.baseUrl,e.image||yn.image),l=e.type||"website";document.title=s,Ot("description",r,!1),aS("canonical",i),Ot("og:site_name",t,!0),Ot("og:title",s,!0),Ot("og:description",r,!0),Ot("og:url",i,!0),Ot("og:type",l,!0),Ot("og:image",o,!0),Ot("twitter:card","summary_large_image",!1),Ot("twitter:title",s,!1),Ot("twitter:description",r,!1),Ot("twitter:image",o,!1),Ot("twitter:site",yn.twitter,!1);const a="vix-jsonld";e.jsonLd===null?tp(a):e.jsonLd&&typeof e.jsonLd=="object"&&lS(a,e.jsonLd)}const cS=[{path:"/",name:"home",component:Dv,meta:{seo:{title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",path:"/",type:"website",jsonLd:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"Vix.cpp",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",url:"https://vixcpp.com/"}}}},{path:"/install",name:"install",component:Wv,meta:{seo:{title:"Install",description:"Install Vix.cpp in minutes. Verify, update, and uninstall cleanly.",path:"/install"}}},{path:"/registry",component:Gy,children:[{path:"",name:"registry_home",component:Zy,meta:{seo:{title:"Vix Registry",description:"Discover Vix packages. Search, browse, and publish.",path:"/registry"}}},{path:"browse",name:"registry_browse",component:Pb,meta:{seo:{title:"Browse packages",description:"Browse packages in the Vix Registry.",path:"/registry/browse"}}},{path:"pkg/:namespace/:name",name:"registry_pkg_show",component:oS,meta:{seo:{title:"Package",description:"Package details and stats in the Vix Registry.",path:"/registry/pkg"}}},{path:"docs",name:"registry_docs",component:Nb,meta:{seo:{title:"Registry docs",description:"How the Vix Registry works.",path:"/registry/docs"}}},{path:"publish",name:"registry_publish",component:aw,meta:{seo:{title:"Publish a package",description:"Publish packages to the Vix Registry.",path:"/registry/publish"}}}]},{path:"/community",name:"community",component:Xv,meta:{seo:{title:"Community",description:"Contribute to Vix.cpp. Issues, PR guidelines, and good first contributions.",path:"/community"}}},{path:"/blog",name:"blog",component:ey,meta:{seo:{title:"Blog",description:"Short, concrete updates about Vix.cpp: performance, DX, middleware, and the registry workflow.",path:"/blog"}}},{path:"/blog/:slug",name:"post",component:fy,props:!0,meta:{seo:{title:"Post",description:"Vix.cpp blog post.",path:"/blog"}}},{path:"/about/community-guide",name:"community_guide",component:ky,meta:{seo:{title:"Community Guide",description:"How to contribute to Vix.cpp: rules, PR structure, examples, and review expectations.",path:"/about/community-guide"}}},{path:"/about/releases",name:"releases",component:Ty,meta:{seo:{title:"Releases",description:"Release policy and versioning notes for Vix.cpp (CLI, modules, stability guarantees).",path:"/about/releases"}}},{path:"/about/team",name:"team",component:Iy,meta:{seo:{title:"Team",description:"People behind Vix.cpp and how to get in touch for collaboration.",path:"/about/team"}}},{path:"/about/faq",name:"faq",component:Dy,meta:{seo:{title:"FAQ",description:"Frequently asked questions about Vix.cpp: scope, use cases, registry, and platform support.",path:"/about/faq"}}},{path:"/about/documentary",name:"documentary",component:Vy,meta:{seo:{title:"The Documentary",description:"The story behind Vix.cpp: why it exists, what it solves, and what’s next.",path:"/about/documentary"}}},{path:"/:pathMatch(.*)*",name:"notfound",component:vy,meta:{seo:{title:"404",description:"Page not found.",path:"/404"}}}],np=Gm({history:ym(),routes:cS,scrollBehavior(){return{top:0}}});np.afterEach(e=>{const t=e.meta?.seo;wc(t||{title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun.",path:"/"}),window.gtag&&window.gtag("event","page_view",{page_path:e.fullPath,page_title:document.title})});function uS(e={}){const{immediate:t=!1,onNeedRefresh:n,onOfflineReady:s,onRegistered:r,onRegisteredSW:i,onRegisterError:o}=e;let l,a;const c=async(d=!0)=>{await a};async function u(){if("serviceWorker"in navigator){if(l=await m(async()=>{const{Workbox:d}=await import("./workbox-window.prod.es5-BIl4cyR9.js");return{Workbox:d}},[]).then(({Workbox:d})=>new d("/sw.js",{scope:"/",type:"classic"})).catch(d=>{o?.(d)}),!l)return;l.addEventListener("activated",d=>{(d.isUpdate||d.isExternal)&&window.location.reload()}),l.addEventListener("installed",d=>{d.isUpdate||s?.()}),l.register({immediate:t}).then(d=>{i?i("/sw.js",d):r?.(d)}).catch(d=>{o?.(d)})}}return a=u(),c}const kc=sessionStorage.getItem("redirect");kc&&(sessionStorage.removeItem("redirect"),window.history.replaceState(null,"",kc));const Ea=Oh(Pg),xa=de(!1),dS=de("New version available."),pS=de("Refresh to load the latest build.");Ea.component("PwaUpdateToast",Wu);Ea.provide("pwaToast",{show:xa,message:dS,detail:pS});Ea.use(np).mount("#app");const fS=uS({immediate:!0,onNeedRefresh(){xa.value=!0},onOfflineReady(){}});window.__vix_pwa_refresh__=()=>fS(!0);window.__vix_pwa_dismiss__=()=>{xa.value=!1}; +\f\r "&'<=>\``.split("")]],single:[["&'".split(""),"\"&'`".split("")],["\0&'".split(""),"\0\"&'`".split("")]],double:[['"&'.split(""),"\"&'`".split("")],['\0"&'.split(""),"\0\"&'`".split("")]]};function nx(e,t,n,s){const r=s.schema,i=r.space==="svg"?!1:s.settings.omitOptionalTags;let o=r.space==="svg"?s.settings.closeEmptyElements:s.settings.voids.includes(e.tagName.toLowerCase());const l=[];let a;r.space==="html"&&e.tagName==="svg"&&(s.schema=Md);const c=sx(s,e.properties),u=s.all(r.space==="html"&&e.tagName==="template"?e.content:e);return s.schema=r,u&&(o=!1),(c||!i||!XE(e,t,n))&&(l.push("<",e.tagName,c?" "+c:""),o&&(r.space==="svg"||s.settings.closeSelfClosing)&&(a=c.charAt(c.length-1),(!s.settings.tightSelfClosing||a==="/"||a&&a!=='"'&&a!=="'")&&l.push(" "),l.push("/")),l.push(">")),l.push(u),!o&&(!i||!ma(e,t,n))&&l.push(""),l.join("")}function sx(e,t){const n=[];let s=-1,r;if(t){for(r in t)if(t[r]!==null&&t[r]!==void 0){const i=rx(e,r,t[r]);i&&n.push(i)}}for(;++suc(n,e.alternative)&&(o=e.alternative),l=o+as(n,Object.assign({},e.settings.characterReferences,{subset:(o==="'"?br.single:br.double)[r][i],attribute:!0}))+o),a+(l&&"="+l))}const ix=["<","&"];function Ud(e,t,n,s){return n&&n.type==="element"&&(n.tagName==="script"||n.tagName==="style")?e.value:as(e.value,Object.assign({},s.settings.characterReferences,{subset:ix}))}function ox(e,t,n,s){return s.settings.allowDangerousHtml?e.value:Ud(e,t,n,s)}function ax(e,t,n,s){return s.all(e)}const lx=dE("type",{invalid:cx,unknown:ux,handlers:{comment:LE,doctype:PE,element:nx,raw:ox,root:ax,text:Ud}});function cx(e){throw new Error("Expected node, not `"+e+"`")}function ux(e){const t=e;throw new Error("Cannot compile unknown node `"+t.type+"`")}const dx={},px={},fx=[];function hx(e,t){const n=t||dx,s=n.quote||'"',r=s==='"'?"'":'"';if(s!=='"'&&s!=="'")throw new Error("Invalid quote `"+s+"`, expected `'` or `\"`");return{one:mx,all:gx,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||tE,characterReferences:n.characterReferences||px,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space==="svg"?Md:uE,quote:s,alternative:r}.one(Array.isArray(e)?{type:"root",children:e}:e,void 0,void 0)}function mx(e,t,n){return lx(e,t,n,this)}function gx(e){const t=[],n=e&&e.children||fx;let s=-1;for(;++st.default||t)}function ga(e){return!e||["plaintext","txt","text","plain"].includes(e)}function Fd(e){return e==="ansi"||ga(e)}function _a(e){return e==="none"}function zd(e){return _a(e)}function Wd(e,t){if(!t)return e;e.properties||={},e.properties.class||=[],typeof e.properties.class=="string"&&(e.properties.class=e.properties.class.split(/\s+/g)),Array.isArray(e.properties.class)||(e.properties.class=[]);const n=Array.isArray(t)?t:t.split(/\s+/g);for(const s of n)s&&!e.properties.class.includes(s)&&e.properties.class.push(s);return e}function yi(e,t=!1){if(e.length===0)return[["",0]];const n=e.split(/(\r?\n)/g);let s=0;const r=[];for(let i=0;ir);function n(r){if(r===e.length)return{line:t.length-1,character:t[t.length-1].length};let i=r,o=0;for(const l of t){if(in&&s.push({...e,content:e.content.slice(n,r),offset:e.offset+n}),n=r;return ns-r);return n.length?e.map(s=>s.flatMap(r=>{const i=n.filter(o=>r.offseto-r.offset).sort((o,l)=>o-l);return i.length?bx(r,i):r})):e}function kx(e,t,n,s,r="css-vars"){const i={content:e.content,explanation:e.explanation,offset:e.offset},o=t.map(u=>Xr(e.variants[u])),l=new Set(o.flatMap(u=>Object.keys(u))),a={},c=(u,d)=>{const f=d==="color"?"":d==="background-color"?"-bg":`-${d}`;return n+t[u]+(d==="color"?"":f)};return o.forEach((u,d)=>{for(const f of l){const h=u[f]||"inherit";if(d===0&&s&&yx.includes(f))if(s===va&&o.length>1){const y=t.findIndex(L=>L==="light"),w=t.findIndex(L=>L==="dark");if(y===-1||w===-1)throw new Xe('When using `defaultColor: "light-dark()"`, you must provide both `light` and `dark` themes');const A=o[y][f]||"inherit",S=o[w][f]||"inherit";a[f]=`light-dark(${A}, ${S})`,r==="css-vars"&&(a[c(d,f)]=h)}else a[f]=h;else r==="css-vars"&&(a[c(d,f)]=h)}}),i.htmlStyle=a,i}function Xr(e){const t={};if(e.color&&(t.color=e.color),e.bgColor&&(t["background-color"]=e.bgColor),e.fontStyle){e.fontStyle&ht.Italic&&(t["font-style"]="italic"),e.fontStyle&ht.Bold&&(t["font-weight"]="bold");const n=[];e.fontStyle&ht.Underline&&n.push("underline"),e.fontStyle&ht.Strikethrough&&n.push("line-through"),n.length&&(t["text-decoration"]=n.join(" "))}return t}function No(e){return typeof e=="string"?e:Object.entries(e).map(([t,n])=>`${t}:${n}`).join(";")}const qd=new WeakMap;function bi(e,t){qd.set(e,t)}function er(e){return qd.get(e)}class _s{_stacks={};lang;get themes(){return Object.keys(this._stacks)}get theme(){return this.themes[0]}get _stack(){return this._stacks[this.theme]}static initial(t,n){return new _s(Object.fromEntries(_x(n).map(s=>[s,Io])),t)}constructor(...t){if(t.length===2){const[n,s]=t;this.lang=s,this._stacks=n}else{const[n,s,r]=t;this.lang=s,this._stacks={[r]:n}}}getInternalStack(t=this.theme){return this._stacks[t]}getScopes(t=this.theme){return Ex(this._stacks[t])}toJSON(){return{lang:this.lang,theme:this.theme,themes:this.themes,scopes:this.getScopes()}}}function Ex(e){const t=[],n=new Set;function s(r){if(n.has(r))return;n.add(r);const i=r?.nameScopesList?.scopeName;i&&t.push(i),r.parent&&s(r.parent)}return s(e),t}function xx(e,t){if(!(e instanceof _s))throw new Xe("Invalid grammar state");return e.getInternalStack(t)}function Sx(){const e=new WeakMap;function t(n){if(!e.has(n.meta)){let s=function(o){if(typeof o=="number"){if(o<0||o>n.source.length)throw new Xe(`Invalid decoration offset: ${o}. Code length: ${n.source.length}`);return{...r.indexToPos(o),offset:o}}else{const l=r.lines[o.line];if(l===void 0)throw new Xe(`Invalid decoration position ${JSON.stringify(o)}. Lines length: ${r.lines.length}`);let a=o.character;if(a<0&&(a=l.length+a),a<0||a>l.length)throw new Xe(`Invalid decoration position ${JSON.stringify(o)}. Line ${o.line} length: ${l.length}`);return{...o,character:a,offset:r.posToIndex(o.line,a)}}};const r=vx(n.source),i=(n.options.decorations||[]).map(o=>({...o,start:s(o.start),end:s(o.end)}));Ax(i),e.set(n.meta,{decorations:i,converter:r,source:n.source})}return e.get(n.meta)}return{name:"shiki:decorations",tokens(n){if(!this.options.decorations?.length)return;const r=t(this).decorations.flatMap(o=>[o.start.offset,o.end.offset]);return wx(n,r)},code(n){if(!this.options.decorations?.length)return;const s=t(this),r=Array.from(n.children).filter(u=>u.type==="element"&&u.tagName==="span");if(r.length!==s.converter.lines.length)throw new Xe(`Number of lines in code element (${r.length}) does not match the number of lines in the source (${s.converter.lines.length}). Failed to apply decorations.`);function i(u,d,f,h){const y=r[u];let w="",A=-1,S=-1;if(d===0&&(A=0),f===0&&(S=0),f===Number.POSITIVE_INFINITY&&(S=y.children.length),A===-1||S===-1)for(let g=0;gw);return u.tagName=d.tagName||"span",u.properties={...u.properties,...h,class:u.properties.class},d.properties?.class&&Wd(u,d.properties.class),u=y(u,f)||u,u}const a=[],c=s.decorations.sort((u,d)=>d.start.offset-u.start.offset||u.end.offset-d.end.offset);for(const u of c){const{start:d,end:f}=u;if(d.line===f.line)i(d.line,d.character,f.character,u);else if(d.lineo(h,u));i(f.line,0,f.character,u)}}a.forEach(u=>u())}}}function Ax(e){for(let t=0;tn.end.offset)throw new Xe(`Invalid decoration range: ${JSON.stringify(n.start)} - ${JSON.stringify(n.end)}`);for(let s=t+1;sNumber.parseInt(s));return n.length!==3||n.some(s=>Number.isNaN(s))?void 0:{type:"rgb",rgb:n}}else if(t==="5"){const n=e.shift();if(n)return{type:"table",index:Number(n)}}}function Ix(e){const t=[];for(;e.length>0;){const n=e.shift();if(!n)continue;const s=Number.parseInt(n);if(!Number.isNaN(s))if(s===0)t.push({type:"resetAll"});else if(s<=9)Zi[s]&&t.push({type:"setDecoration",value:Zi[s]});else if(s<=29){const r=Zi[s-20];r&&(t.push({type:"resetDecoration",value:r}),r==="dim"&&t.push({type:"resetDecoration",value:"bold"}))}else if(s<=37)t.push({type:"setForegroundColor",value:{type:"named",name:jn[s-30]}});else if(s===38){const r=hc(e);r&&t.push({type:"setForegroundColor",value:r})}else if(s===39)t.push({type:"resetForegroundColor"});else if(s<=47)t.push({type:"setBackgroundColor",value:{type:"named",name:jn[s-40]}});else if(s===48){const r=hc(e);r&&t.push({type:"setBackgroundColor",value:r})}else s===49?t.push({type:"resetBackgroundColor"}):s===53?t.push({type:"setDecoration",value:"overline"}):s===55?t.push({type:"resetDecoration",value:"overline"}):s>=90&&s<=97?t.push({type:"setForegroundColor",value:{type:"named",name:jn[s-90+8]}}):s>=100&&s<=107&&t.push({type:"setBackgroundColor",value:{type:"named",name:jn[s-100+8]}})}return t}function Lx(){let e=null,t=null,n=new Set;return{parse(s){const r=[];let i=0;do{const o=Cx(s,i),l=o.sequence?s.substring(i,o.startPosition):s.substring(i);if(l.length>0&&r.push({value:l,foreground:e,background:t,decorations:new Set(n)}),o.sequence){const a=Ix(o.sequence);for(const c of a)c.type==="resetAll"?(e=null,t=null,n.clear()):c.type==="resetForegroundColor"?e=null:c.type==="resetBackgroundColor"?t=null:c.type==="resetDecoration"&&n.delete(c.value);for(const c of a)c.type==="setForegroundColor"?e=c.value:c.type==="setBackgroundColor"?t=c.value:c.type==="setDecoration"&&n.add(c.value)}i=o.position}while(iMath.max(0,Math.min(a,255)).toString(16).padStart(2,"0")).join("")}`}let s;function r(){if(s)return s;s=[];for(let c=0;c{const c=`terminal.ansi${a[0].toUpperCase()}${a.substring(1)}`,u=e.colors?.[c];return[a,u||Dx[a]]})),o=Ox(i),l=Lx();return r.map(a=>l.parse(a[0]).map(c=>{let u,d;c.decorations.has("reverse")?(u=c.background?o.value(c.background):e.bg,d=c.foreground?o.value(c.foreground):e.fg):(u=c.foreground?o.value(c.foreground):e.fg,d=c.background?o.value(c.background):void 0),u=An(u,s),d=An(d,s),c.decorations.has("dim")&&(u=$x(u));let f=ht.None;return c.decorations.has("bold")&&(f|=ht.Bold),c.decorations.has("italic")&&(f|=ht.Italic),c.decorations.has("underline")&&(f|=ht.Underline),c.decorations.has("strikethrough")&&(f|=ht.Strikethrough),{content:c.value,offset:a[1],color:u,bgColor:d,fontStyle:f}}))}function $x(e){const t=e.match(/#([0-9a-f]{3,8})/i);if(t){const s=t[1];if(s.length===8){const r=Math.round(Number.parseInt(s.slice(6,8),16)/2).toString(16).padStart(2,"0");return`#${s.slice(0,6)}${r}`}else{if(s.length===6)return`#${s}80`;if(s.length===4){const r=s[0],i=s[1],o=s[2],l=s[3],a=Math.round(Number.parseInt(`${l}${l}`,16)/2).toString(16).padStart(2,"0");return`#${r}${r}${i}${i}${o}${o}${a}`}else if(s.length===3){const r=s[0],i=s[1],o=s[2];return`#${r}${r}${i}${i}${o}${o}80`}}}const n=e.match(/var\((--[\w-]+-ansi-[\w-]+)\)/);return n?`var(${n[1]}-dim)`:e}function ya(e,t,n={}){const{theme:s=e.getLoadedThemes()[0]}=n,r=e.resolveLangAlias(n.lang||"text");if(ga(r)||_a(s))return yi(t).map(a=>[{content:a[0],offset:a[1]}]);const{theme:i,colorMap:o}=e.setTheme(s);if(r==="ansi")return Nx(i,t,n);const l=e.getLanguage(n.lang||"text");if(n.grammarState){if(n.grammarState.lang!==l.name)throw new Xe(`Grammar state language "${n.grammarState.lang}" does not match highlight language "${l.name}"`);if(!n.grammarState.themes.includes(i.name))throw new Xe(`Grammar state themes "${n.grammarState.themes}" do not contain highlight theme "${i.name}"`)}return Vx(t,l,i,o,n)}function Mx(...e){if(e.length===2)return er(e[1]);const[t,n,s={}]=e,{lang:r="text",theme:i=t.getLoadedThemes()[0]}=s;if(ga(r)||_a(i))throw new Xe("Plain language does not have grammar state");if(r==="ansi")throw new Xe("ANSI language does not have grammar state");const{theme:o,colorMap:l}=t.setTheme(i),a=t.getLanguage(r);return new _s(ba(n,a,o,l,s).stateStack,a.name,o.name)}function Vx(e,t,n,s,r){const i=ba(e,t,n,s,r),o=new _s(i.stateStack,t.name,n.name);return bi(i.tokens,o),i.tokens}function ba(e,t,n,s,r){const i=Yr(n,r),{tokenizeMaxLineLength:o=0,tokenizeTimeLimit:l=500}=r,a=yi(e);let c=r.grammarState?xx(r.grammarState,n.name)??Io:r.grammarContextCode!=null?ba(r.grammarContextCode,t,n,s,{...r,grammarState:void 0,grammarContextCode:void 0}).stateStack:Io,u=[];const d=[];for(let f=0,h=a.length;f0&&y.length>=o){u=[],d.push([{content:y,offset:w,color:"",fontStyle:0}]);continue}let A,S,L;r.includeExplanation&&(A=t.tokenizeLine(y,c,l),S=A.tokens,L=0);const g=t.tokenizeLine2(y,c,l),v=g.tokens.length/2;for(let V=0;VN.trim());break;case"object":I=D.scope;break;default:continue}G.push({settings:D,selectors:I.map(N=>N.split(/ /))})}J.explanation=[];let x=0;for(;Y+x({scopeName:t}))}function jx(e,t){const n=[];for(let s=0,r=t.length;s=0&&r>=0;)mc(e[s],n[r])&&(s-=1),r-=1;return s===-1}function Ux(e,t,n){const s=[];for(const{selectors:r,settings:i}of e)for(const o of r)if(Gx(o,t,n)){s.push(i);break}return s}function Yd(e,t,n){const s=Object.entries(n.themes).filter(a=>a[1]).map(a=>({color:a[0],theme:a[1]})),r=s.map(a=>{const c=ya(e,t,{...n,theme:a.theme}),u=er(c),d=typeof a.theme=="string"?a.theme:a.theme.name;return{tokens:c,state:u,theme:d}}),i=Hx(...r.map(a=>a.tokens)),o=i[0].map((a,c)=>a.map((u,d)=>{const f={content:u.content,variants:{},offset:u.offset};return"includeExplanation"in n&&n.includeExplanation&&(f.explanation=u.explanation),i.forEach((h,y)=>{const{content:w,explanation:A,offset:S,...L}=h[c][d];f.variants[s[y].color]=L}),f})),l=r[0].state?new _s(Object.fromEntries(r.map(a=>[a.theme,a.state?.getInternalStack(a.theme)])),r[0].state.lang):void 0;return l&&bi(o,l),o}function Hx(...e){const t=e.map(()=>[]),n=e.length;for(let s=0;sa[s]),i=t.map(()=>[]);t.forEach((a,c)=>a.push(i[c]));const o=r.map(()=>0),l=r.map(a=>a[0]);for(;l.every(a=>a);){const a=Math.min(...l.map(c=>c.content.length));for(let c=0;cS[1]).map(S=>({color:S[0],theme:S[1]})).sort((S,L)=>S.color===c?-1:L.color===c?1:0);if(f.length===0)throw new Xe("`themes` option must not be empty");const h=Yd(e,t,n);if(a=er(h),c&&va!==c&&!f.find(S=>S.color===c))throw new Xe(`\`themes\` option must contain the defaultColor key \`${c}\``);const y=f.map(S=>e.getTheme(S.theme)),w=f.map(S=>S.color);i=h.map(S=>S.map(L=>kx(L,w,u,c,d))),a&&bi(i,a);const A=f.map(S=>Yr(S.theme,n));r=gc(f,y,A,u,c,"fg",d),s=gc(f,y,A,u,c,"bg",d),o=`shiki-themes ${y.map(S=>S.name).join(" ")}`,l=c?void 0:[r,s].join(";")}else if("theme"in n){const c=Yr(n.theme,n);i=ya(e,t,n);const u=e.getTheme(n.theme);s=An(u.bg,c),r=An(u.fg,c),o=u.name,a=er(i)}else throw new Xe("Invalid options, either `theme` or `themes` must be provided");return{tokens:i,fg:r,bg:s,themeName:o,rootStyle:l,grammarState:a}}function gc(e,t,n,s,r,i,o){return e.map((l,a)=>{const c=An(t[a][i],n[a])||"inherit",u=`${s+l.color}${i==="bg"?"-bg":""}:${c}`;if(a===0&&r){if(r===va&&e.length>1){const d=e.findIndex(w=>w.color==="light"),f=e.findIndex(w=>w.color==="dark");if(d===-1||f===-1)throw new Xe('When using `defaultColor: "light-dark()"`, you must provide both `light` and `dark` themes');const h=An(t[d][i],n[d])||"inherit",y=An(t[f][i],n[f])||"inherit";return`light-dark(${h}, ${y});${u}`}return c}return o==="css-vars"?u:null}).filter(l=>!!l).join(";")}function Qr(e,t,n,s={meta:{},options:n,codeToHast:(r,i)=>Qr(e,r,i),codeToTokens:(r,i)=>Zr(e,r,i)}){let r=t;for(const y of Jr(n))r=y.preprocess?.call(s,r,n)||r;let{tokens:i,fg:o,bg:l,themeName:a,rootStyle:c,grammarState:u}=Zr(e,r,n);const{mergeWhitespaces:d=!0,mergeSameStyleTokens:f=!1}=n;d===!0?i=zx(i):d==="never"&&(i=Wx(i)),f&&(i=qx(i));const h={...s,get source(){return r}};for(const y of Jr(n))i=y.tokens?.call(h,i)||i;return Fx(i,{...n,fg:o,bg:l,themeName:a,rootStyle:n.rootStyle===!1?!1:n.rootStyle??c},h,u)}function Fx(e,t,n,s=er(e)){const r=Jr(t),i=[],o={type:"root",children:[]},{structure:l="classic",tabindex:a="0"}=t,c={class:`shiki ${t.themeName||""}`};t.rootStyle!==!1&&(t.rootStyle!=null?c.style=t.rootStyle:c.style=`background-color:${t.bg};color:${t.fg}`),a!==!1&&a!=null&&(c.tabindex=a.toString());for(const[w,A]of Object.entries(t.meta||{}))w.startsWith("_")||(c[w]=A);let u={type:"element",tagName:"pre",properties:c,children:[],data:t.data},d={type:"element",tagName:"code",properties:{},children:i};const f=[],h={...n,structure:l,addClassToHast:Wd,get source(){return n.source},get tokens(){return e},get options(){return t},get root(){return o},get pre(){return u},get code(){return d},get lines(){return f}};if(e.forEach((w,A)=>{A&&(l==="inline"?o.children.push({type:"element",tagName:"br",properties:{},children:[]}):l==="classic"&&i.push({type:"text",value:` +`}));let S={type:"element",tagName:"span",properties:{class:"line"},children:[]},L=0;for(const g of w){let v={type:"element",tagName:"span",properties:{...g.htmlAttrs},children:[{type:"text",value:g.content}]};const V=No(g.htmlStyle||Xr(g));V&&(v.properties.style=V);for(const Y of r)v=Y?.span?.call(h,v,A+1,L,S,g)||v;l==="inline"?o.children.push(v):l==="classic"&&S.children.push(v),L+=g.content.length}if(l==="classic"){for(const g of r)S=g?.line?.call(h,S,A+1)||S;f.push(S),i.push(S)}else l==="inline"&&f.push(S)}),l==="classic"){for(const w of r)d=w?.code?.call(h,d)||d;u.children.push(d);for(const w of r)u=w?.pre?.call(h,u)||u;o.children.push(u)}else if(l==="inline"){const w=[];let A={type:"element",tagName:"span",properties:{class:"line"},children:[]};for(const g of o.children)g.type==="element"&&g.tagName==="br"?(w.push(A),A={type:"element",tagName:"span",properties:{class:"line"},children:[]}):(g.type==="element"||g.type==="text")&&A.children.push(g);w.push(A);let L={type:"element",tagName:"code",properties:{},children:w};for(const g of r)L=g?.code?.call(h,L)||L;o.children=[];for(let g=0;g0&&o.children.push({type:"element",tagName:"br",properties:{},children:[]});const v=L.children[g];v.type==="element"&&o.children.push(...v.children)}}let y=o;for(const w of r)y=w?.root?.call(h,y)||y;return s&&bi(y,s),y}function zx(e){return e.map(t=>{const n=[];let s="",r;return t.forEach((i,o)=>{const a=!(i.fontStyle&&(i.fontStyle&ht.Underline||i.fontStyle&ht.Strikethrough));a&&i.content.match(/^\s+$/)&&t[o+1]?(r===void 0&&(r=i.offset),s+=i.content):s?(a?n.push({...i,offset:r,content:s+i.content}):n.push({content:s,offset:r},i),r=void 0,s=""):n.push(i)}),n})}function Wx(e){return e.map(t=>t.flatMap(n=>{if(n.content.match(/^\s+$/))return n;const s=n.content.match(/^(\s*)(.*?)(\s*)$/);if(!s)return n;const[,r,i,o]=s;if(!r&&!o)return n;const l=[{...n,offset:n.offset+r.length,content:i}];return r&&l.unshift({content:r,offset:n.offset}),o&&l.push({content:o,offset:n.offset+r.length+i.length}),l}))}function qx(e){return e.map(t=>{const n=[];for(const s of t){if(n.length===0){n.push({...s});continue}const r=n[n.length-1],i=No(r.htmlStyle||Xr(r)),o=No(s.htmlStyle||Xr(s)),l=r.fontStyle&&(r.fontStyle&ht.Underline||r.fontStyle&ht.Strikethrough),a=s.fontStyle&&(s.fontStyle&ht.Underline||s.fontStyle&ht.Strikethrough);!l&&!a&&i===o?r.content+=s.content:n.push({...s})}return n})}const Kx=hx;function Yx(e,t,n){const s={meta:{},options:n,codeToHast:(i,o)=>Qr(e,i,o),codeToTokens:(i,o)=>Zr(e,i,o)};let r=Kx(Qr(e,t,n,s));for(const i of Jr(n))r=i.postprocess?.call(s,r,n)||r;return r}const _c={light:"#333333",dark:"#bbbbbb"},vc={light:"#fffffe",dark:"#1e1e1e"},yc="__shiki_resolved";function wa(e){if(e?.[yc])return e;const t={...e};t.tokenColors&&!t.settings&&(t.settings=t.tokenColors,delete t.tokenColors),t.type||="dark",t.colorReplacements={...t.colorReplacements},t.settings||=[];let{bg:n,fg:s}=t;if(!n||!s){const l=t.settings?t.settings.find(a=>!a.name&&!a.scope):void 0;l?.settings?.foreground&&(s=l.settings.foreground),l?.settings?.background&&(n=l.settings.background),!s&&t?.colors?.["editor.foreground"]&&(s=t.colors["editor.foreground"]),!n&&t?.colors?.["editor.background"]&&(n=t.colors["editor.background"]),s||(s=t.type==="light"?_c.light:_c.dark),n||(n=t.type==="light"?vc.light:vc.dark),t.fg=s,t.bg=n}t.settings[0]&&t.settings[0].settings&&!t.settings[0].scope||t.settings.unshift({settings:{foreground:t.fg,background:t.bg}});let r=0;const i=new Map;function o(l){if(i.has(l))return i.get(l);r+=1;const a=`#${r.toString(16).padStart(8,"0").toLowerCase()}`;return t.colorReplacements?.[`#${a}`]?o(l):(i.set(l,a),a)}t.settings=t.settings.map(l=>{const a=l.settings?.foreground&&!l.settings.foreground.startsWith("#"),c=l.settings?.background&&!l.settings.background.startsWith("#");if(!a&&!c)return l;const u={...l,settings:{...l.settings}};if(a){const d=o(l.settings.foreground);t.colorReplacements[d]=l.settings.foreground,u.settings.foreground=d}if(c){const d=o(l.settings.background);t.colorReplacements[d]=l.settings.background,u.settings.background=d}return u});for(const l of Object.keys(t.colors||{}))if((l==="editor.foreground"||l==="editor.background"||l.startsWith("terminal.ansi"))&&!t.colors[l]?.startsWith("#")){const a=o(t.colors[l]);t.colorReplacements[a]=t.colors[l],t.colors[l]=a}return Object.defineProperty(t,yc,{enumerable:!1,writable:!1,value:!0}),t}async function Xd(e){return Array.from(new Set((await Promise.all(e.filter(t=>!Fd(t)).map(async t=>await Hd(t).then(n=>Array.isArray(n)?n:[n])))).flat()))}async function Jd(e){return(await Promise.all(e.map(async n=>zd(n)?null:wa(await Hd(n))))).filter(n=>!!n)}let Xx=3;function Jx(e,t=3){t>Xx||console.trace(`[SHIKI DEPRECATE]: ${e}`)}let Qn=class extends Error{constructor(t){super(t),this.name="ShikiError"}};function Zd(e,t){if(!t)return e;if(t[e]){const n=new Set([e]);for(;t[e];){if(e=t[e],n.has(e))throw new Qn(`Circular alias \`${Array.from(n).join(" -> ")} -> ${e}\``);n.add(e)}}return e}class Zx extends eE{constructor(t,n,s,r={}){super(t),this._resolver=t,this._themes=n,this._langs=s,this._alias=r,this._themes.map(i=>this.loadTheme(i)),this.loadLanguages(this._langs)}_resolvedThemes=new Map;_resolvedGrammars=new Map;_langMap=new Map;_langGraph=new Map;_textmateThemeCache=new WeakMap;_loadedThemesCache=null;_loadedLanguagesCache=null;getTheme(t){return typeof t=="string"?this._resolvedThemes.get(t):this.loadTheme(t)}loadTheme(t){const n=wa(t);return n.name&&(this._resolvedThemes.set(n.name,n),this._loadedThemesCache=null),n}getLoadedThemes(){return this._loadedThemesCache||(this._loadedThemesCache=[...this._resolvedThemes.keys()]),this._loadedThemesCache}setTheme(t){let n=this._textmateThemeCache.get(t);n||(n=Fr.createFromRawTheme(t),this._textmateThemeCache.set(t,n)),this._syncRegistry.setTheme(n)}getGrammar(t){return t=Zd(t,this._alias),this._resolvedGrammars.get(t)}loadLanguage(t){if(this.getGrammar(t.name))return;const n=new Set([...this._langMap.values()].filter(i=>i.embeddedLangsLazy?.includes(t.name)));this._resolver.addLanguage(t);const s={balancedBracketSelectors:t.balancedBracketSelectors||["*"],unbalancedBracketSelectors:t.unbalancedBracketSelectors||[]};this._syncRegistry._rawGrammars.set(t.scopeName,t);const r=this.loadGrammarWithConfiguration(t.scopeName,1,s);if(r.name=t.name,this._resolvedGrammars.set(t.name,r),t.aliases&&t.aliases.forEach(i=>{this._alias[i]=t.name}),this._loadedLanguagesCache=null,n.size)for(const i of n)this._resolvedGrammars.delete(i.name),this._loadedLanguagesCache=null,this._syncRegistry?._injectionGrammars?.delete(i.scopeName),this._syncRegistry?._grammars?.delete(i.scopeName),this.loadLanguage(this._langMap.get(i.name))}dispose(){super.dispose(),this._resolvedThemes.clear(),this._resolvedGrammars.clear(),this._langMap.clear(),this._langGraph.clear(),this._loadedThemesCache=null}loadLanguages(t){for(const r of t)this.resolveEmbeddedLanguages(r);const n=Array.from(this._langGraph.entries()),s=n.filter(([r,i])=>!i);if(s.length){const r=n.filter(([i,o])=>o?(o.embeddedLanguages||o.embeddedLangs)?.some(a=>s.map(([c])=>c).includes(a)):!1).filter(i=>!s.includes(i));throw new Qn(`Missing languages ${s.map(([i])=>`\`${i}\``).join(", ")}, required by ${r.map(([i])=>`\`${i}\``).join(", ")}`)}for(const[r,i]of n)this._resolver.addLanguage(i);for(const[r,i]of n)this.loadLanguage(i)}getLoadedLanguages(){return this._loadedLanguagesCache||(this._loadedLanguagesCache=[...new Set([...this._resolvedGrammars.keys(),...Object.keys(this._alias)])]),this._loadedLanguagesCache}resolveEmbeddedLanguages(t){this._langMap.set(t.name,t),this._langGraph.set(t.name,t);const n=t.embeddedLanguages??t.embeddedLangs;if(n)for(const s of n)this._langGraph.set(s,this._langMap.get(s))}}class Qx{_langs=new Map;_scopeToLang=new Map;_injections=new Map;_onigLib;constructor(t,n){this._onigLib={createOnigScanner:s=>t.createScanner(s),createOnigString:s=>t.createString(s)},n.forEach(s=>this.addLanguage(s))}get onigLib(){return this._onigLib}getLangRegistration(t){return this._langs.get(t)}loadGrammar(t){return this._scopeToLang.get(t)}addLanguage(t){this._langs.set(t.name,t),t.aliases&&t.aliases.forEach(n=>{this._langs.set(n,t)}),this._scopeToLang.set(t.scopeName,t),t.injectTo&&t.injectTo.forEach(n=>{this._injections.get(n)||this._injections.set(n,[]),this._injections.get(n).push(t.scopeName)})}getInjections(t){const n=t.split(".");let s=[];for(let r=1;r<=n.length;r++){const i=n.slice(0,r).join(".");s=[...s,...this._injections.get(i)||[]]}return s}}let Is=0;function e1(e){Is+=1,e.warnings!==!1&&Is>=10&&Is%10===0&&console.warn(`[Shiki] ${Is} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \`highlighter.dispose()\` to release unused instances.`);let t=!1;if(!e.engine)throw new Qn("`engine` option is required for synchronous mode");const n=(e.langs||[]).flat(1),s=(e.themes||[]).flat(1).map(wa),r=new Qx(e.engine,n),i=new Zx(r,s,n,e.langAlias);let o;function l(g){return Zd(g,e.langAlias)}function a(g){S();const v=i.getGrammar(typeof g=="string"?g:g.name);if(!v)throw new Qn(`Language \`${g}\` not found, you may need to load it first`);return v}function c(g){if(g==="none")return{bg:"",fg:"",name:"none",settings:[],type:"dark"};S();const v=i.getTheme(g);if(!v)throw new Qn(`Theme \`${g}\` not found, you may need to load it first`);return v}function u(g){S();const v=c(g);o!==g&&(i.setTheme(v),o=g);const V=i.getColorMap();return{theme:v,colorMap:V}}function d(){return S(),i.getLoadedThemes()}function f(){return S(),i.getLoadedLanguages()}function h(...g){S(),i.loadLanguages(g.flat(1))}async function y(...g){return h(await Xd(g))}function w(...g){S();for(const v of g.flat(1))i.loadTheme(v)}async function A(...g){return S(),w(await Jd(g))}function S(){if(t)throw new Qn("Shiki instance has been disposed")}function L(){t||(t=!0,i.dispose(),Is-=1)}return{setTheme:u,getTheme:c,getLanguage:a,getLoadedThemes:d,getLoadedLanguages:f,resolveLangAlias:l,loadLanguage:y,loadLanguageSync:h,loadTheme:A,loadThemeSync:w,dispose:L,[Symbol.dispose]:L}}async function t1(e){e.engine||Jx("`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.");const[t,n,s]=await Promise.all([Jd(e.themes||[]),Xd(e.langs||[]),e.engine]);return e1({...e,themes:t,langs:n,engine:s})}async function n1(e){const t=await t1(e);return{getLastGrammarState:(...n)=>Mx(t,...n),codeToTokensBase:(n,s)=>ya(t,n,s),codeToTokensWithThemes:(n,s)=>Yd(t,n,s),codeToTokens:(n,s)=>Zr(t,n,s),codeToHast:(n,s)=>Qr(t,n,s),codeToHtml:(n,s)=>Yx(t,n,s),getBundledLanguages:()=>({}),getBundledThemes:()=>({}),...t,getInternalContext:()=>t}}function s1(e){const t=e.langs,n=e.themes,s=e.engine;async function r(i){function o(d){if(typeof d=="string"){if(d=i.langAlias?.[d]||d,Fd(d))return[];const f=t[d];if(!f)throw new Xe(`Language \`${d}\` is not included in this bundle. You may want to load it from external source.`);return f}return d}function l(d){if(zd(d))return"none";if(typeof d=="string"){const f=n[d];if(!f)throw new Xe(`Theme \`${d}\` is not included in this bundle. You may want to load it from external source.`);return f}return d}const a=(i.themes??[]).map(d=>l(d)),c=(i.langs??[]).map(d=>o(d)),u=await n1({engine:i.engine??s(),...i,themes:a,langs:c});return{...u,loadLanguage(...d){return u.loadLanguage(...d.map(o))},loadTheme(...d){return u.loadTheme(...d.map(l))},getBundledLanguages(){return t},getBundledThemes(){return n}}}return r}const Qd=[{id:"abap",name:"ABAP",import:(()=>m(()=>import("./abap-BdImnpbu.js"),[]))},{id:"actionscript-3",name:"ActionScript",import:(()=>m(()=>import("./actionscript-3-CoDkCxhg.js"),[]))},{id:"ada",name:"Ada",import:(()=>m(()=>import("./ada-bCR0ucgS.js"),[]))},{id:"angular-html",name:"Angular HTML",import:(()=>m(()=>import("./angular-html-CU67Zn6k.js").then(e=>e.f),__vite__mapDeps([0,1,2,3])))},{id:"angular-ts",name:"Angular TypeScript",import:(()=>m(()=>import("./angular-ts-BwZT4LLn.js"),__vite__mapDeps([4,0,1,2,3,5])))},{id:"apache",name:"Apache Conf",import:(()=>m(()=>import("./apache-Pmp26Uib.js"),[]))},{id:"apex",name:"Apex",import:(()=>m(()=>import("./apex-D8_7TLub.js"),[]))},{id:"apl",name:"APL",import:(()=>m(()=>import("./apl-dKokRX4l.js"),__vite__mapDeps([6,1,2,3,7,8,9])))},{id:"applescript",name:"AppleScript",import:(()=>m(()=>import("./applescript-Co6uUVPk.js"),[]))},{id:"ara",name:"Ara",import:(()=>m(()=>import("./ara-BRHolxvo.js"),[]))},{id:"asciidoc",name:"AsciiDoc",aliases:["adoc"],import:(()=>m(()=>import("./asciidoc-Dv7Oe6Be.js"),[]))},{id:"asm",name:"Assembly",import:(()=>m(()=>import("./asm-D_Q5rh1f.js"),[]))},{id:"astro",name:"Astro",import:(()=>m(()=>import("./astro-CbQHKStN.js"),__vite__mapDeps([10,9,2,11,3,12,13])))},{id:"awk",name:"AWK",import:(()=>m(()=>import("./awk-DMzUqQB5.js"),[]))},{id:"ballerina",name:"Ballerina",import:(()=>m(()=>import("./ballerina-BFfxhgS-.js"),[]))},{id:"bat",name:"Batch File",aliases:["batch"],import:(()=>m(()=>import("./bat-BkioyH1T.js"),[]))},{id:"beancount",name:"Beancount",import:(()=>m(()=>import("./beancount-k_qm7-4y.js"),[]))},{id:"berry",name:"Berry",aliases:["be"],import:(()=>m(()=>import("./berry-uYugtg8r.js"),[]))},{id:"bibtex",name:"BibTeX",import:(()=>m(()=>import("./bibtex-CHM0blh-.js"),[]))},{id:"bicep",name:"Bicep",import:(()=>m(()=>import("./bicep-Bmn6On1c.js"),[]))},{id:"blade",name:"Blade",import:(()=>m(()=>import("./blade-D4QpJJKB.js"),__vite__mapDeps([14,15,1,2,3,7,8,16,9])))},{id:"bsl",name:"1C (Enterprise)",aliases:["1c"],import:(()=>m(()=>import("./bsl-BO_Y6i37.js"),__vite__mapDeps([17,18])))},{id:"c",name:"C",import:(()=>m(()=>import("./c-BIGW1oBm.js"),[]))},{id:"c3",name:"C3",import:(()=>m(()=>import("./c3-VCDPK7BO.js"),[]))},{id:"cadence",name:"Cadence",aliases:["cdc"],import:(()=>m(()=>import("./cadence-Bv_4Rxtq.js"),[]))},{id:"cairo",name:"Cairo",import:(()=>m(()=>import("./cairo-KRGpt6FW.js"),__vite__mapDeps([19,20])))},{id:"clarity",name:"Clarity",import:(()=>m(()=>import("./clarity-D53aC0YG.js"),[]))},{id:"clojure",name:"Clojure",aliases:["clj"],import:(()=>m(()=>import("./clojure-P80f7IUj.js"),[]))},{id:"cmake",name:"CMake",import:(()=>m(()=>import("./cmake-D1j8_8rp.js"),[]))},{id:"cobol",name:"COBOL",import:(()=>m(()=>import("./cobol-nwyudZeR.js"),__vite__mapDeps([21,1,2,3,8])))},{id:"codeowners",name:"CODEOWNERS",import:(()=>m(()=>import("./codeowners-Bp6g37R7.js"),[]))},{id:"codeql",name:"CodeQL",aliases:["ql"],import:(()=>m(()=>import("./codeql-DsOJ9woJ.js"),[]))},{id:"coffee",name:"CoffeeScript",aliases:["coffeescript"],import:(()=>m(()=>import("./coffee-Ch7k5sss.js"),__vite__mapDeps([22,2])))},{id:"common-lisp",name:"Common Lisp",aliases:["lisp"],import:(()=>m(()=>import("./common-lisp-Cg-RD9OK.js"),[]))},{id:"coq",name:"Coq",import:(()=>m(()=>import("./coq-DkFqJrB1.js"),[]))},{id:"cpp",name:"C++",aliases:["c++"],import:(()=>m(()=>import("./cpp-CofmeUqb.js"),__vite__mapDeps([23,24,25,26,16])))},{id:"crystal",name:"Crystal",import:(()=>m(()=>import("./crystal-tKQVLTB8.js"),__vite__mapDeps([27,1,2,3,16,26,28])))},{id:"csharp",name:"C#",aliases:["c#","cs"],import:(()=>m(()=>import("./csharp-COcwbKMJ.js"),[]))},{id:"css",name:"CSS",import:(()=>m(()=>import("./css-DPfMkruS.js"),[]))},{id:"csv",name:"CSV",import:(()=>m(()=>import("./csv-fuZLfV_i.js"),[]))},{id:"cue",name:"CUE",import:(()=>m(()=>import("./cue-D82EKSYY.js"),[]))},{id:"cypher",name:"Cypher",aliases:["cql"],import:(()=>m(()=>import("./cypher-COkxafJQ.js"),[]))},{id:"d",name:"D",import:(()=>m(()=>import("./d-85-TOEBH.js"),[]))},{id:"dart",name:"Dart",import:(()=>m(()=>import("./dart-CF10PKvl.js"),[]))},{id:"dax",name:"DAX",import:(()=>m(()=>import("./dax-CEL-wOlO.js"),[]))},{id:"desktop",name:"Desktop",import:(()=>m(()=>import("./desktop-BmXAJ9_W.js"),[]))},{id:"diff",name:"Diff",import:(()=>m(()=>import("./diff-D97Zzqfu.js"),[]))},{id:"docker",name:"Dockerfile",aliases:["dockerfile"],import:(()=>m(()=>import("./docker-BcOcwvcX.js"),[]))},{id:"dotenv",name:"dotEnv",import:(()=>m(()=>import("./dotenv-Da5cRb03.js"),[]))},{id:"dream-maker",name:"Dream Maker",import:(()=>m(()=>import("./dream-maker-BtqSS_iP.js"),[]))},{id:"edge",name:"Edge",import:(()=>m(()=>import("./edge-BkV0erSs.js"),__vite__mapDeps([29,11,1,2,3,15])))},{id:"elixir",name:"Elixir",import:(()=>m(()=>import("./elixir-CDX3lj18.js"),__vite__mapDeps([30,1,2,3])))},{id:"elm",name:"Elm",import:(()=>m(()=>import("./elm-DbKCFpqz.js"),__vite__mapDeps([31,25,26])))},{id:"emacs-lisp",name:"Emacs Lisp",aliases:["elisp"],import:(()=>m(()=>import("./emacs-lisp-C9XAeP06.js"),[]))},{id:"erb",name:"ERB",import:(()=>m(()=>import("./erb-CgJxNhIT.js"),__vite__mapDeps([32,1,2,3,33,34,7,8,16,35,11,36,13,23,24,25,26,28,37,38])))},{id:"erlang",name:"Erlang",aliases:["erl"],import:(()=>m(()=>import("./erlang-DsQrWhSR.js"),__vite__mapDeps([39,40])))},{id:"fennel",name:"Fennel",import:(()=>m(()=>import("./fennel-BYunw83y.js"),[]))},{id:"fish",name:"Fish",import:(()=>m(()=>import("./fish-BvzEVeQv.js"),[]))},{id:"fluent",name:"Fluent",aliases:["ftl"],import:(()=>m(()=>import("./fluent-C4IJs8-o.js"),[]))},{id:"fortran-fixed-form",name:"Fortran (Fixed Form)",aliases:["f","for","f77"],import:(()=>m(()=>import("./fortran-fixed-form-CkoXwp7k.js"),__vite__mapDeps([41,42])))},{id:"fortran-free-form",name:"Fortran (Free Form)",aliases:["f90","f95","f03","f08","f18"],import:(()=>m(()=>import("./fortran-free-form-BxgE0vQu.js"),[]))},{id:"fsharp",name:"F#",aliases:["f#","fs"],import:(()=>m(()=>import("./fsharp-CXgrBDvD.js"),__vite__mapDeps([43,40])))},{id:"gdresource",name:"GDResource",aliases:["tscn","tres"],import:(()=>m(()=>import("./gdresource-BOOCDP_w.js"),__vite__mapDeps([44,45,46])))},{id:"gdscript",name:"GDScript",aliases:["gd"],import:(()=>m(()=>import("./gdscript-C5YyOfLZ.js"),[]))},{id:"gdshader",name:"GDShader",import:(()=>m(()=>import("./gdshader-DkwncUOv.js"),[]))},{id:"genie",name:"Genie",import:(()=>m(()=>import("./genie-D0YGMca9.js"),[]))},{id:"gherkin",name:"Gherkin",import:(()=>m(()=>import("./gherkin-DyxjwDmM.js"),[]))},{id:"git-commit",name:"Git Commit Message",import:(()=>m(()=>import("./git-commit-F4YmCXRG.js"),__vite__mapDeps([47,48])))},{id:"git-rebase",name:"Git Rebase Message",import:(()=>m(()=>import("./git-rebase-r7XF79zn.js"),__vite__mapDeps([49,28])))},{id:"gleam",name:"Gleam",import:(()=>m(()=>import("./gleam-BspZqrRM.js"),[]))},{id:"glimmer-js",name:"Glimmer JS",aliases:["gjs"],import:(()=>m(()=>import("./glimmer-js-Rg0-pVw9.js"),__vite__mapDeps([50,2,11,3,1])))},{id:"glimmer-ts",name:"Glimmer TS",aliases:["gts"],import:(()=>m(()=>import("./glimmer-ts-U6CK756n.js"),__vite__mapDeps([51,11,3,2,1])))},{id:"glsl",name:"GLSL",import:(()=>m(()=>import("./glsl-DplSGwfg.js"),__vite__mapDeps([25,26])))},{id:"gn",name:"GN",import:(()=>m(()=>import("./gn-n2N0HUVH.js"),[]))},{id:"gnuplot",name:"Gnuplot",import:(()=>m(()=>import("./gnuplot-DdkO51Og.js"),[]))},{id:"go",name:"Go",import:(()=>m(()=>import("./go-CxLEBnE3.js"),[]))},{id:"graphql",name:"GraphQL",aliases:["gql"],import:(()=>m(()=>import("./graphql-ChdNCCLP.js"),__vite__mapDeps([35,2,11,36,13])))},{id:"groovy",name:"Groovy",import:(()=>m(()=>import("./groovy-gcz8RCvz.js"),[]))},{id:"hack",name:"Hack",import:(()=>m(()=>import("./hack-CaT9iCJl.js"),__vite__mapDeps([52,1,2,3,16])))},{id:"haml",name:"Ruby Haml",import:(()=>m(()=>import("./haml-B8DHNrY2.js"),__vite__mapDeps([34,2,3])))},{id:"handlebars",name:"Handlebars",aliases:["hbs"],import:(()=>m(()=>import("./handlebars-BL8al0AC.js"),__vite__mapDeps([53,1,2,3,38])))},{id:"haskell",name:"Haskell",aliases:["hs"],import:(()=>m(()=>import("./haskell-Df6bDoY_.js"),[]))},{id:"haxe",name:"Haxe",import:(()=>m(()=>import("./haxe-CzTSHFRz.js"),[]))},{id:"hcl",name:"HashiCorp HCL",import:(()=>m(()=>import("./hcl-BWvSN4gD.js"),[]))},{id:"hjson",name:"Hjson",import:(()=>m(()=>import("./hjson-D5-asLiD.js"),[]))},{id:"hlsl",name:"HLSL",import:(()=>m(()=>import("./hlsl-D3lLCCz7.js"),[]))},{id:"html",name:"HTML",import:(()=>m(()=>import("./html-GMplVEZG.js"),__vite__mapDeps([1,2,3])))},{id:"html-derivative",name:"HTML (Derivative)",import:(()=>m(()=>import("./html-derivative-BFtXZ54Q.js"),__vite__mapDeps([15,1,2,3])))},{id:"http",name:"HTTP",import:(()=>m(()=>import("./http-jrhK8wxY.js"),__vite__mapDeps([54,28,9,7,8,35,2,11,36,13])))},{id:"hurl",name:"Hurl",import:(()=>m(()=>import("./hurl-irOxFIW8.js"),__vite__mapDeps([55,35,2,11,36,13,7,8,56])))},{id:"hxml",name:"HXML",import:(()=>m(()=>import("./hxml-Bvhsp5Yf.js"),__vite__mapDeps([57,58])))},{id:"hy",name:"Hy",import:(()=>m(()=>import("./hy-DFXneXwc.js"),[]))},{id:"imba",name:"Imba",import:(()=>m(()=>import("./imba-DGztddWO.js"),[]))},{id:"ini",name:"INI",aliases:["properties"],import:(()=>m(()=>import("./ini-BEwlwnbL.js"),[]))},{id:"java",name:"Java",import:(()=>m(()=>import("./java-CylS5w8V.js"),[]))},{id:"javascript",name:"JavaScript",aliases:["js","cjs","mjs"],import:(()=>m(()=>import("./javascript-wDzz0qaB.js"),[]))},{id:"jinja",name:"Jinja",import:(()=>m(()=>import("./jinja-4LBKfQ-Z.js"),__vite__mapDeps([59,1,2,3])))},{id:"jison",name:"Jison",import:(()=>m(()=>import("./jison-wvAkD_A8.js"),__vite__mapDeps([60,2])))},{id:"json",name:"JSON",import:(()=>m(()=>import("./json-Cp-IABpG.js"),[]))},{id:"json5",name:"JSON5",import:(()=>m(()=>import("./json5-C9tS-k6U.js"),[]))},{id:"jsonc",name:"JSON with Comments",import:(()=>m(()=>import("./jsonc-Des-eS-w.js"),[]))},{id:"jsonl",name:"JSON Lines",import:(()=>m(()=>import("./jsonl-DcaNXYhu.js"),[]))},{id:"jsonnet",name:"Jsonnet",import:(()=>m(()=>import("./jsonnet-DFQXde-d.js"),[]))},{id:"jssm",name:"JSSM",aliases:["fsl"],import:(()=>m(()=>import("./jssm-C2t-YnRu.js"),[]))},{id:"jsx",name:"JSX",import:(()=>m(()=>import("./jsx-g9-lgVsj.js"),[]))},{id:"julia",name:"Julia",aliases:["jl"],import:(()=>m(()=>import("./julia-CxzCAyBv.js"),__vite__mapDeps([61,23,24,25,26,16,20,2,62])))},{id:"kdl",name:"KDL",import:(()=>m(()=>import("./kdl-DV7GczEv.js"),[]))},{id:"kotlin",name:"Kotlin",aliases:["kt","kts"],import:(()=>m(()=>import("./kotlin-BdnUsdx6.js"),[]))},{id:"kusto",name:"Kusto",aliases:["kql"],import:(()=>m(()=>import("./kusto-DZf3V79B.js"),[]))},{id:"latex",name:"LaTeX",import:(()=>m(()=>import("./latex-DGMBWnxU.js"),__vite__mapDeps([63,64,62])))},{id:"lean",name:"Lean 4",aliases:["lean4"],import:(()=>m(()=>import("./lean-BZvkOJ9d.js"),[]))},{id:"less",name:"Less",import:(()=>m(()=>import("./less-B1dDrJ26.js"),[]))},{id:"liquid",name:"Liquid",import:(()=>m(()=>import("./liquid-DYVedYrR.js"),__vite__mapDeps([65,1,2,3,9])))},{id:"llvm",name:"LLVM IR",import:(()=>m(()=>import("./llvm-BtvRca6l.js"),[]))},{id:"log",name:"Log file",import:(()=>m(()=>import("./log-2UxHyX5q.js"),[]))},{id:"logo",name:"Logo",import:(()=>m(()=>import("./logo-BtOb2qkB.js"),[]))},{id:"lua",name:"Lua",import:(()=>m(()=>import("./lua-BaeVxFsk.js"),__vite__mapDeps([37,26])))},{id:"luau",name:"Luau",import:(()=>m(()=>import("./luau-C-HG3fhB.js"),[]))},{id:"make",name:"Makefile",aliases:["makefile"],import:(()=>m(()=>import("./make-CHLpvVh8.js"),[]))},{id:"markdown",name:"Markdown",aliases:["md"],import:(()=>m(()=>import("./markdown-Cvjx9yec.js"),[]))},{id:"marko",name:"Marko",import:(()=>m(()=>import("./marko-DZsq8hO1.js"),__vite__mapDeps([66,3,67,5,11])))},{id:"matlab",name:"MATLAB",import:(()=>m(()=>import("./matlab-D7o27uSR.js"),[]))},{id:"mdc",name:"MDC",import:(()=>m(()=>import("./mdc-DUICxH0z.js"),__vite__mapDeps([68,40,38,15,1,2,3])))},{id:"mdx",name:"MDX",import:(()=>m(()=>import("./mdx-Cmh6b_Ma.js"),[]))},{id:"mermaid",name:"Mermaid",aliases:["mmd"],import:(()=>m(()=>import("./mermaid-mWjccvbQ.js"),[]))},{id:"mipsasm",name:"MIPS Assembly",aliases:["mips"],import:(()=>m(()=>import("./mipsasm-CKIfxQSi.js"),[]))},{id:"mojo",name:"Mojo",import:(()=>m(()=>import("./mojo-B93PlW-d.js"),[]))},{id:"moonbit",name:"MoonBit",aliases:["mbt","mbti"],import:(()=>m(()=>import("./moonbit-Ba13S78F.js"),[]))},{id:"move",name:"Move",import:(()=>m(()=>import("./move-IF9eRakj.js"),[]))},{id:"narrat",name:"Narrat Language",aliases:["nar"],import:(()=>m(()=>import("./narrat-DRg8JJMk.js"),[]))},{id:"nextflow",name:"Nextflow",aliases:["nf"],import:(()=>m(()=>import("./nextflow-BrzmwbiE.js"),[]))},{id:"nginx",name:"Nginx",import:(()=>m(()=>import("./nginx-BpAMiNFr.js"),__vite__mapDeps([69,37,26])))},{id:"nim",name:"Nim",import:(()=>m(()=>import("./nim-CVrawwO9.js"),__vite__mapDeps([70,26,1,2,3,7,8,25,40])))},{id:"nix",name:"Nix",import:(()=>m(()=>import("./nix-CwoSXNpI.js"),[]))},{id:"nushell",name:"nushell",aliases:["nu"],import:(()=>m(()=>import("./nushell-C-sUppwS.js"),[]))},{id:"objective-c",name:"Objective-C",aliases:["objc"],import:(()=>m(()=>import("./objective-c-DXmwc3jG.js"),[]))},{id:"objective-cpp",name:"Objective-C++",import:(()=>m(()=>import("./objective-cpp-CLxacb5B.js"),[]))},{id:"ocaml",name:"OCaml",import:(()=>m(()=>import("./ocaml-C0hk2d4L.js"),[]))},{id:"odin",name:"Odin",import:(()=>m(()=>import("./odin-BBf5iR-q.js"),[]))},{id:"openscad",name:"OpenSCAD",aliases:["scad"],import:(()=>m(()=>import("./openscad-C4EeE6gA.js"),[]))},{id:"pascal",name:"Pascal",import:(()=>m(()=>import("./pascal-D93ZcfNL.js"),[]))},{id:"perl",name:"Perl",import:(()=>m(()=>import("./perl-C0TMdlhV.js"),__vite__mapDeps([71,1,2,3,7,8,16])))},{id:"php",name:"PHP",import:(()=>m(()=>import("./php-Dhbhpdrm.js"),__vite__mapDeps([72,1,2,3,7,8,16,9])))},{id:"pkl",name:"Pkl",import:(()=>m(()=>import("./pkl-u5AG7uiY.js"),[]))},{id:"plsql",name:"PL/SQL",import:(()=>m(()=>import("./plsql-ChMvpjG-.js"),[]))},{id:"po",name:"Gettext PO",aliases:["pot","potx"],import:(()=>m(()=>import("./po-BTJTHyun.js"),[]))},{id:"polar",name:"Polar",import:(()=>m(()=>import("./polar-C0HS_06l.js"),[]))},{id:"postcss",name:"PostCSS",import:(()=>m(()=>import("./postcss-CXtECtnM.js"),[]))},{id:"powerquery",name:"PowerQuery",import:(()=>m(()=>import("./powerquery-CEu0bR-o.js"),[]))},{id:"powershell",name:"PowerShell",aliases:["ps","ps1"],import:(()=>m(()=>import("./powershell-Dpen1YoG.js"),[]))},{id:"prisma",name:"Prisma",import:(()=>m(()=>import("./prisma-Dd19v3D-.js"),[]))},{id:"prolog",name:"Prolog",import:(()=>m(()=>import("./prolog-CbFg5uaA.js"),[]))},{id:"proto",name:"Protocol Buffer 3",aliases:["protobuf"],import:(()=>m(()=>import("./proto-C7zT0LnQ.js"),[]))},{id:"pug",name:"Pug",aliases:["jade"],import:(()=>m(()=>import("./pug-CGlum2m_.js"),__vite__mapDeps([73,2,3,1])))},{id:"puppet",name:"Puppet",import:(()=>m(()=>import("./puppet-BMWR74SV.js"),[]))},{id:"purescript",name:"PureScript",import:(()=>m(()=>import("./purescript-CklMAg4u.js"),[]))},{id:"python",name:"Python",aliases:["py"],import:(()=>m(()=>import("./python-B6aJPvgy.js"),[]))},{id:"qml",name:"QML",import:(()=>m(()=>import("./qml-3beO22l8.js"),__vite__mapDeps([74,2])))},{id:"qmldir",name:"QML Directory",import:(()=>m(()=>import("./qmldir-C8lEn-DE.js"),[]))},{id:"qss",name:"Qt Style Sheets",import:(()=>m(()=>import("./qss-IeuSbFQv.js"),[]))},{id:"r",name:"R",import:(()=>m(()=>import("./r-Dspwwk_N.js"),[]))},{id:"racket",name:"Racket",import:(()=>m(()=>import("./racket-BqYA7rlc.js"),[]))},{id:"raku",name:"Raku",aliases:["perl6"],import:(()=>m(()=>import("./raku-DXvB9xmW.js"),[]))},{id:"razor",name:"ASP.NET Razor",import:(()=>m(()=>import("./razor-Uh8Bk_45.js"),__vite__mapDeps([75,1,2,3,76])))},{id:"reg",name:"Windows Registry Script",import:(()=>m(()=>import("./reg-C-SQnVFl.js"),[]))},{id:"regexp",name:"RegExp",aliases:["regex"],import:(()=>m(()=>import("./regexp-CDVJQ6XC.js"),[]))},{id:"rel",name:"Rel",import:(()=>m(()=>import("./rel-C3B-1QV4.js"),[]))},{id:"riscv",name:"RISC-V",import:(()=>m(()=>import("./riscv-BM1_JUlF.js"),[]))},{id:"ron",name:"RON",import:(()=>m(()=>import("./ron-BhRPY-oY.js"),[]))},{id:"rosmsg",name:"ROS Interface",import:(()=>m(()=>import("./rosmsg-BJDFO7_C.js"),[]))},{id:"rst",name:"reStructuredText",import:(()=>m(()=>import("./rst-D5oM4XIm.js"),__vite__mapDeps([77,15,1,2,3,23,24,25,26,16,20,28,38,78,33,34,7,8,35,11,36,13,37])))},{id:"ruby",name:"Ruby",aliases:["rb"],import:(()=>m(()=>import("./ruby-Cw6WdidG.js"),__vite__mapDeps([33,1,2,3,34,7,8,16,35,11,36,13,23,24,25,26,28,37,38])))},{id:"rust",name:"Rust",aliases:["rs"],import:(()=>m(()=>import("./rust-B1yitclQ.js"),[]))},{id:"sas",name:"SAS",import:(()=>m(()=>import("./sas-cz2c8ADy.js"),__vite__mapDeps([79,16])))},{id:"sass",name:"Sass",import:(()=>m(()=>import("./sass-Cj5Yp3dK.js"),[]))},{id:"scala",name:"Scala",import:(()=>m(()=>import("./scala-C151Ov-r.js"),[]))},{id:"scheme",name:"Scheme",import:(()=>m(()=>import("./scheme-C98Dy4si.js"),[]))},{id:"scss",name:"SCSS",import:(()=>m(()=>import("./scss-OYdSNvt2.js"),__vite__mapDeps([5,3])))},{id:"sdbl",name:"1C (Query)",aliases:["1c-query"],import:(()=>m(()=>import("./sdbl-DVxCFoDh.js"),[]))},{id:"shaderlab",name:"ShaderLab",aliases:["shader"],import:(()=>m(()=>import("./shaderlab-Dg9Lc6iA.js"),__vite__mapDeps([80,81])))},{id:"shellscript",name:"Shell",aliases:["bash","sh","shell","zsh"],import:(()=>m(()=>import("./shellscript-Yzrsuije.js"),[]))},{id:"shellsession",name:"Shell Session",aliases:["console"],import:(()=>m(()=>import("./shellsession-BADoaaVG.js"),__vite__mapDeps([82,28])))},{id:"smalltalk",name:"Smalltalk",import:(()=>m(()=>import("./smalltalk-BERRCDM3.js"),[]))},{id:"solidity",name:"Solidity",import:(()=>m(()=>import("./solidity-rGO070M0.js"),[]))},{id:"soy",name:"Closure Templates",aliases:["closure-templates"],import:(()=>m(()=>import("./soy-Brmx7dQM.js"),__vite__mapDeps([83,1,2,3])))},{id:"sparql",name:"SPARQL",import:(()=>m(()=>import("./sparql-rVzFXLq3.js"),__vite__mapDeps([84,85])))},{id:"splunk",name:"Splunk Query Language",aliases:["spl"],import:(()=>m(()=>import("./splunk-BtCnVYZw.js"),[]))},{id:"sql",name:"SQL",import:(()=>m(()=>import("./sql-BLtJtn59.js"),[]))},{id:"ssh-config",name:"SSH Config",import:(()=>m(()=>import("./ssh-config-_ykCGR6B.js"),[]))},{id:"stata",name:"Stata",import:(()=>m(()=>import("./stata-BH5u7GGu.js"),__vite__mapDeps([86,16])))},{id:"stylus",name:"Stylus",aliases:["styl"],import:(()=>m(()=>import("./stylus-BEDo0Tqx.js"),[]))},{id:"surrealql",name:"SurrealQL",aliases:["surql"],import:(()=>m(()=>import("./surrealql-Bq5Q-fJD.js"),__vite__mapDeps([87,2])))},{id:"svelte",name:"Svelte",import:(()=>m(()=>import("./svelte-zxCyuUbr.js"),__vite__mapDeps([88,2,11,3,12])))},{id:"swift",name:"Swift",import:(()=>m(()=>import("./swift-Dg5xB15N.js"),[]))},{id:"system-verilog",name:"SystemVerilog",import:(()=>m(()=>import("./system-verilog-CnnmHF94.js"),[]))},{id:"systemd",name:"Systemd Units",import:(()=>m(()=>import("./systemd-4A_iFExJ.js"),[]))},{id:"talonscript",name:"TalonScript",aliases:["talon"],import:(()=>m(()=>import("./talonscript-CkByrt1z.js"),[]))},{id:"tasl",name:"Tasl",import:(()=>m(()=>import("./tasl-QIJgUcNo.js"),[]))},{id:"tcl",name:"Tcl",import:(()=>m(()=>import("./tcl-dwOrl1Do.js"),[]))},{id:"templ",name:"Templ",import:(()=>m(()=>import("./templ-P3uqSqPl.js"),__vite__mapDeps([89,90,2,3])))},{id:"terraform",name:"Terraform",aliases:["tf","tfvars"],import:(()=>m(()=>import("./terraform-BETggiCN.js"),[]))},{id:"tex",name:"TeX",import:(()=>m(()=>import("./tex-CvyZ59Mk.js"),__vite__mapDeps([64,62])))},{id:"toml",name:"TOML",import:(()=>m(()=>import("./toml-vGWfd6FD.js"),[]))},{id:"ts-tags",name:"TypeScript with Tags",aliases:["lit"],import:(()=>m(()=>import("./ts-tags-zn1MmPIZ.js"),__vite__mapDeps([91,11,3,2,25,26,1,16,7,8])))},{id:"tsv",name:"TSV",import:(()=>m(()=>import("./tsv-B_m7g4N7.js"),[]))},{id:"tsx",name:"TSX",import:(()=>m(()=>import("./tsx-COt5Ahok.js"),[]))},{id:"turtle",name:"Turtle",import:(()=>m(()=>import("./turtle-BsS91CYL.js"),[]))},{id:"twig",name:"Twig",import:(()=>m(()=>import("./twig-ChbOoGGc.js"),__vite__mapDeps([92,3,2,5,72,1,7,8,16,9,20,33,34,35,11,36,13,23,24,25,26,28,37,38])))},{id:"typescript",name:"TypeScript",aliases:["ts","cts","mts"],import:(()=>m(()=>import("./typescript-BPQ3VLAy.js"),[]))},{id:"typespec",name:"TypeSpec",aliases:["tsp"],import:(()=>m(()=>import("./typespec-BGHnOYBU.js"),[]))},{id:"typst",name:"Typst",aliases:["typ"],import:(()=>m(()=>import("./typst-DHCkPAjA.js"),[]))},{id:"v",name:"V",import:(()=>m(()=>import("./v-BcVCzyr7.js"),[]))},{id:"vala",name:"Vala",import:(()=>m(()=>import("./vala-CsfeWuGM.js"),[]))},{id:"vb",name:"Visual Basic",aliases:["cmd"],import:(()=>m(()=>import("./vb-D17OF-Vu.js"),[]))},{id:"verilog",name:"Verilog",import:(()=>m(()=>import("./verilog-BQ8w6xss.js"),[]))},{id:"vhdl",name:"VHDL",import:(()=>m(()=>import("./vhdl-CeAyd5Ju.js"),[]))},{id:"viml",name:"Vim Script",aliases:["vim","vimscript"],import:(()=>m(()=>import("./viml-CJc9bBzg.js"),[]))},{id:"vue",name:"Vue",import:(()=>m(()=>import("./vue-DN_0RTcg.js"),__vite__mapDeps([93,3,2,11,9,1,15])))},{id:"vue-html",name:"Vue HTML",import:(()=>m(()=>import("./vue-html-AaS7Mt5G.js"),__vite__mapDeps([94,2])))},{id:"vue-vine",name:"Vue Vine",import:(()=>m(()=>import("./vue-vine-CQOfvN7w.js"),__vite__mapDeps([95,3,5,67,96,12,2])))},{id:"vyper",name:"Vyper",aliases:["vy"],import:(()=>m(()=>import("./vyper-CDx5xZoG.js"),[]))},{id:"wasm",name:"WebAssembly",import:(()=>m(()=>import("./wasm-MzD3tlZU.js"),[]))},{id:"wenyan",name:"Wenyan",aliases:["文言"],import:(()=>m(()=>import("./wenyan-BV7otONQ.js"),[]))},{id:"wgsl",name:"WGSL",import:(()=>m(()=>import("./wgsl-Dx-B1_4e.js"),[]))},{id:"wikitext",name:"Wikitext",aliases:["mediawiki","wiki"],import:(()=>m(()=>import("./wikitext-BhOHFoWU.js"),[]))},{id:"wit",name:"WebAssembly Interface Types",import:(()=>m(()=>import("./wit-5i3qLPDT.js"),[]))},{id:"wolfram",name:"Wolfram",aliases:["wl"],import:(()=>m(()=>import("./wolfram-lXgVvXCa.js"),[]))},{id:"xml",name:"XML",import:(()=>m(()=>import("./xml-sdJ4AIDG.js"),__vite__mapDeps([7,8])))},{id:"xsl",name:"XSL",import:(()=>m(()=>import("./xsl-CtQFsRM5.js"),__vite__mapDeps([97,7,8])))},{id:"yaml",name:"YAML",aliases:["yml"],import:(()=>m(()=>import("./yaml-Buea-lGh.js"),[]))},{id:"zenscript",name:"ZenScript",import:(()=>m(()=>import("./zenscript-DVFEvuxE.js"),[]))},{id:"zig",name:"Zig",import:(()=>m(()=>import("./zig-VOosw3JB.js"),[]))}],r1=Object.fromEntries(Qd.map(e=>[e.id,e.import])),i1=Object.fromEntries(Qd.flatMap(e=>e.aliases?.map(t=>[t,e.import])||[])),o1={...r1,...i1},a1=[{id:"andromeeda",displayName:"Andromeeda",type:"dark",import:(()=>m(()=>import("./andromeeda-C4gqWexZ.js"),[]))},{id:"aurora-x",displayName:"Aurora X",type:"dark",import:(()=>m(()=>import("./aurora-x-D-2ljcwZ.js"),[]))},{id:"ayu-dark",displayName:"Ayu Dark",type:"dark",import:(()=>m(()=>import("./ayu-dark-CMjwMIkn.js"),[]))},{id:"ayu-light",displayName:"Ayu Light",type:"light",import:(()=>m(()=>import("./ayu-light-C47S-Tmv.js"),[]))},{id:"ayu-mirage",displayName:"Ayu Mirage",type:"dark",import:(()=>m(()=>import("./ayu-mirage-CjoLj4QM.js"),[]))},{id:"catppuccin-frappe",displayName:"Catppuccin Frappé",type:"dark",import:(()=>m(()=>import("./catppuccin-frappe-DFWUc33u.js"),[]))},{id:"catppuccin-latte",displayName:"Catppuccin Latte",type:"light",import:(()=>m(()=>import("./catppuccin-latte-C9dUb6Cb.js"),[]))},{id:"catppuccin-macchiato",displayName:"Catppuccin Macchiato",type:"dark",import:(()=>m(()=>import("./catppuccin-macchiato-DQyhUUbL.js"),[]))},{id:"catppuccin-mocha",displayName:"Catppuccin Mocha",type:"dark",import:(()=>m(()=>import("./catppuccin-mocha-D87Tk5Gz.js"),[]))},{id:"dark-plus",displayName:"Dark Plus",type:"dark",import:(()=>m(()=>import("./dark-plus-C3mMm8J8.js"),[]))},{id:"dracula",displayName:"Dracula Theme",type:"dark",import:(()=>m(()=>import("./dracula-BzJJZx-M.js"),[]))},{id:"dracula-soft",displayName:"Dracula Theme Soft",type:"dark",import:(()=>m(()=>import("./dracula-soft-BXkSAIEj.js"),[]))},{id:"everforest-dark",displayName:"Everforest Dark",type:"dark",import:(()=>m(()=>import("./everforest-dark-BgDCqdQA.js"),[]))},{id:"everforest-light",displayName:"Everforest Light",type:"light",import:(()=>m(()=>import("./everforest-light-C8M2exoo.js"),[]))},{id:"github-dark",displayName:"GitHub Dark",type:"dark",import:(()=>m(()=>import("./github-dark-DHJKELXO.js"),[]))},{id:"github-dark-default",displayName:"GitHub Dark Default",type:"dark",import:(()=>m(()=>import("./github-dark-default-Cuk6v7N8.js"),[]))},{id:"github-dark-dimmed",displayName:"GitHub Dark Dimmed",type:"dark",import:(()=>m(()=>import("./github-dark-dimmed-DH5Ifo-i.js"),[]))},{id:"github-dark-high-contrast",displayName:"GitHub Dark High Contrast",type:"dark",import:(()=>m(()=>import("./github-dark-high-contrast-E3gJ1_iC.js"),[]))},{id:"github-light",displayName:"GitHub Light",type:"light",import:(()=>m(()=>import("./github-light-DAi9KRSo.js"),[]))},{id:"github-light-default",displayName:"GitHub Light Default",type:"light",import:(()=>m(()=>import("./github-light-default-D7oLnXFd.js"),[]))},{id:"github-light-high-contrast",displayName:"GitHub Light High Contrast",type:"light",import:(()=>m(()=>import("./github-light-high-contrast-BfjtVDDH.js"),[]))},{id:"gruvbox-dark-hard",displayName:"Gruvbox Dark Hard",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-hard-CFHQjOhq.js"),[]))},{id:"gruvbox-dark-medium",displayName:"Gruvbox Dark Medium",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-medium-GsRaNv29.js"),[]))},{id:"gruvbox-dark-soft",displayName:"Gruvbox Dark Soft",type:"dark",import:(()=>m(()=>import("./gruvbox-dark-soft-CVdnzihN.js"),[]))},{id:"gruvbox-light-hard",displayName:"Gruvbox Light Hard",type:"light",import:(()=>m(()=>import("./gruvbox-light-hard-CH1njM8p.js"),[]))},{id:"gruvbox-light-medium",displayName:"Gruvbox Light Medium",type:"light",import:(()=>m(()=>import("./gruvbox-light-medium-DRw_LuNl.js"),[]))},{id:"gruvbox-light-soft",displayName:"Gruvbox Light Soft",type:"light",import:(()=>m(()=>import("./gruvbox-light-soft-hJgmCMqR.js"),[]))},{id:"horizon",displayName:"Horizon",type:"dark",import:(()=>m(()=>import("./horizon-BUw7H-hv.js"),[]))},{id:"houston",displayName:"Houston",type:"dark",import:(()=>m(()=>import("./houston-DnULxvSX.js"),[]))},{id:"kanagawa-dragon",displayName:"Kanagawa Dragon",type:"dark",import:(()=>m(()=>import("./kanagawa-dragon-CkXjmgJE.js"),[]))},{id:"kanagawa-lotus",displayName:"Kanagawa Lotus",type:"light",import:(()=>m(()=>import("./kanagawa-lotus-CfQXZHmo.js"),[]))},{id:"kanagawa-wave",displayName:"Kanagawa Wave",type:"dark",import:(()=>m(()=>import("./kanagawa-wave-DWedfzmr.js"),[]))},{id:"laserwave",displayName:"LaserWave",type:"dark",import:(()=>m(()=>import("./laserwave-DUszq2jm.js"),[]))},{id:"light-plus",displayName:"Light Plus",type:"light",import:(()=>m(()=>import("./light-plus-B7mTdjB0.js"),[]))},{id:"material-theme",displayName:"Material Theme",type:"dark",import:(()=>m(()=>import("./material-theme-D5KoaKCx.js"),[]))},{id:"material-theme-darker",displayName:"Material Theme Darker",type:"dark",import:(()=>m(()=>import("./material-theme-darker-BfHTSMKl.js"),[]))},{id:"material-theme-lighter",displayName:"Material Theme Lighter",type:"light",import:(()=>m(()=>import("./material-theme-lighter-B0m2ddpp.js"),[]))},{id:"material-theme-ocean",displayName:"Material Theme Ocean",type:"dark",import:(()=>m(()=>import("./material-theme-ocean-CyktbL80.js"),[]))},{id:"material-theme-palenight",displayName:"Material Theme Palenight",type:"dark",import:(()=>m(()=>import("./material-theme-palenight-Csfq5Kiy.js"),[]))},{id:"min-dark",displayName:"Min Dark",type:"dark",import:(()=>m(()=>import("./min-dark-CafNBF8u.js"),[]))},{id:"min-light",displayName:"Min Light",type:"light",import:(()=>m(()=>import("./min-light-CTRr51gU.js"),[]))},{id:"monokai",displayName:"Monokai",type:"dark",import:(()=>m(()=>import("./monokai-D4h5O-jR.js"),[]))},{id:"night-owl",displayName:"Night Owl",type:"dark",import:(()=>m(()=>import("./night-owl-C39BiMTA.js"),[]))},{id:"night-owl-light",displayName:"Night Owl Light",type:"light",import:(()=>m(()=>import("./night-owl-light-CMTm3GFP.js"),[]))},{id:"nord",displayName:"Nord",type:"dark",import:(()=>m(()=>import("./nord-Ddv68eIx.js"),[]))},{id:"one-dark-pro",displayName:"One Dark Pro",type:"dark",import:(()=>m(()=>import("./one-dark-pro-DVMEJ2y_.js"),[]))},{id:"one-light",displayName:"One Light",type:"light",import:(()=>m(()=>import("./one-light-C3Wv6jpd.js"),[]))},{id:"plastic",displayName:"Plastic",type:"dark",import:(()=>m(()=>import("./plastic-3e1v2bzS.js"),[]))},{id:"poimandres",displayName:"Poimandres",type:"dark",import:(()=>m(()=>import("./poimandres-CS3Unz2-.js"),[]))},{id:"red",displayName:"Red",type:"dark",import:(()=>m(()=>import("./red-bN70gL4F.js"),[]))},{id:"rose-pine",displayName:"Rosé Pine",type:"dark",import:(()=>m(()=>import("./rose-pine-qdsjHGoJ.js"),[]))},{id:"rose-pine-dawn",displayName:"Rosé Pine Dawn",type:"light",import:(()=>m(()=>import("./rose-pine-dawn-DHQR4-dF.js"),[]))},{id:"rose-pine-moon",displayName:"Rosé Pine Moon",type:"dark",import:(()=>m(()=>import("./rose-pine-moon-D4_iv3hh.js"),[]))},{id:"slack-dark",displayName:"Slack Dark",type:"dark",import:(()=>m(()=>import("./slack-dark-BthQWCQV.js"),[]))},{id:"slack-ochin",displayName:"Slack Ochin",type:"light",import:(()=>m(()=>import("./slack-ochin-DqwNpetd.js"),[]))},{id:"snazzy-light",displayName:"Snazzy Light",type:"light",import:(()=>m(()=>import("./snazzy-light-Bw305WKR.js"),[]))},{id:"solarized-dark",displayName:"Solarized Dark",type:"dark",import:(()=>m(()=>import("./solarized-dark-DXbdFlpD.js"),[]))},{id:"solarized-light",displayName:"Solarized Light",type:"light",import:(()=>m(()=>import("./solarized-light-L9t79GZl.js"),[]))},{id:"synthwave-84",displayName:"Synthwave '84",type:"dark",import:(()=>m(()=>import("./synthwave-84-CbfX1IO0.js"),[]))},{id:"tokyo-night",displayName:"Tokyo Night",type:"dark",import:(()=>m(()=>import("./tokyo-night-hegEt444.js"),[]))},{id:"vesper",displayName:"Vesper",type:"dark",import:(()=>m(()=>import("./vesper-DU1UobuO.js"),[]))},{id:"vitesse-black",displayName:"Vitesse Black",type:"dark",import:(()=>m(()=>import("./vitesse-black-Bkuqu6BP.js"),[]))},{id:"vitesse-dark",displayName:"Vitesse Dark",type:"dark",import:(()=>m(()=>import("./vitesse-dark-D0r3Knsf.js"),[]))},{id:"vitesse-light",displayName:"Vitesse Light",type:"light",import:(()=>m(()=>import("./vitesse-light-CVO1_9PV.js"),[]))}],l1=Object.fromEntries(a1.map(e=>[e.id,e.import]));class ka extends Error{constructor(t){super(t),this.name="ShikiError"}}function c1(){return 2147483648}function u1(){return typeof performance<"u"?performance.now():Date.now()}const d1=(e,t)=>e+(t-e%t)%t;async function p1(e){let t,n;const s={};function r(h){n=h,s.HEAPU8=new Uint8Array(h),s.HEAPU32=new Uint32Array(h)}function i(h,y,w){s.HEAPU8.copyWithin(h,y,y+w)}function o(h){try{return t.grow(h-n.byteLength+65535>>>16),r(t.buffer),1}catch{}}function l(h){const y=s.HEAPU8.length;h=h>>>0;const w=c1();if(h>w)return!1;for(let A=1;A<=4;A*=2){let S=y*(1+.2/A);S=Math.min(S,h+100663296);const L=Math.min(w,d1(Math.max(h,S),65536));if(o(L))return!0}return!1}const a=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function c(h,y,w=1024){const A=y+w;let S=y;for(;h[S]&&!(S>=A);)++S;if(S-y>16&&h.buffer&&a)return a.decode(h.subarray(y,S));let L="";for(;y>10,56320|Y&1023)}}return L}function u(h,y){return h?c(s.HEAPU8,h,y):""}const d={emscripten_get_now:u1,emscripten_memcpy_big:i,emscripten_resize_heap:l,fd_write:()=>0};async function f(){const y=await e({env:d,wasi_snapshot_preview1:d});t=y.memory,r(t.buffer),Object.assign(s,y),s.UTF8ToString=u}return await f(),s}var f1=Object.defineProperty,h1=(e,t,n)=>t in e?f1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,tt=(e,t,n)=>h1(e,typeof t!="symbol"?t+"":t,n);let st=null;function m1(e){throw new ka(e.UTF8ToString(e.getLastOnigError()))}class wi{constructor(t){tt(this,"utf16Length"),tt(this,"utf8Length"),tt(this,"utf16Value"),tt(this,"utf8Value"),tt(this,"utf16OffsetToUtf8"),tt(this,"utf8OffsetToUtf16");const n=t.length,s=wi._utf8ByteLength(t),r=s!==n,i=r?new Uint32Array(n+1):null;r&&(i[n]=s);const o=r?new Uint32Array(s+1):null;r&&(o[s]=n);const l=new Uint8Array(s);let a=0;for(let c=0;c=55296&&u<=56319&&c+1=56320&&h<=57343&&(d=(u-55296<<10)+65536|h-56320,f=!0)}r&&(i[c]=a,f&&(i[c+1]=a),d<=127?o[a+0]=c:d<=2047?(o[a+0]=c,o[a+1]=c):d<=65535?(o[a+0]=c,o[a+1]=c,o[a+2]=c):(o[a+0]=c,o[a+1]=c,o[a+2]=c,o[a+3]=c)),d<=127?l[a++]=d:d<=2047?(l[a++]=192|(d&1984)>>>6,l[a++]=128|(d&63)>>>0):d<=65535?(l[a++]=224|(d&61440)>>>12,l[a++]=128|(d&4032)>>>6,l[a++]=128|(d&63)>>>0):(l[a++]=240|(d&1835008)>>>18,l[a++]=128|(d&258048)>>>12,l[a++]=128|(d&4032)>>>6,l[a++]=128|(d&63)>>>0),f&&c++}this.utf16Length=n,this.utf8Length=s,this.utf16Value=t,this.utf8Value=l,this.utf16OffsetToUtf8=i,this.utf8OffsetToUtf16=o}static _utf8ByteLength(t){let n=0;for(let s=0,r=t.length;s=55296&&i<=56319&&s+1=56320&&a<=57343&&(o=(i-55296<<10)+65536|a-56320,l=!0)}o<=127?n+=1:o<=2047?n+=2:o<=65535?n+=3:n+=4,l&&s++}return n}createString(t){const n=t.omalloc(this.utf8Length);return t.HEAPU8.set(this.utf8Value,n),n}}const ki=class Jt{constructor(t){if(tt(this,"id",++Jt.LAST_ID),tt(this,"_onigBinding"),tt(this,"content"),tt(this,"utf16Length"),tt(this,"utf8Length"),tt(this,"utf16OffsetToUtf8"),tt(this,"utf8OffsetToUtf16"),tt(this,"ptr"),!st)throw new ka("Must invoke loadWasm first.");this._onigBinding=st,this.content=t;const n=new wi(t);this.utf16Length=n.utf16Length,this.utf8Length=n.utf8Length,this.utf16OffsetToUtf8=n.utf16OffsetToUtf8,this.utf8OffsetToUtf16=n.utf8OffsetToUtf16,this.utf8Length<1e4&&!Jt._sharedPtrInUse?(Jt._sharedPtr||(Jt._sharedPtr=st.omalloc(1e4)),Jt._sharedPtrInUse=!0,st.HEAPU8.set(n.utf8Value,Jt._sharedPtr),this.ptr=Jt._sharedPtr):this.ptr=n.createString(st)}convertUtf8OffsetToUtf16(t){return this.utf8OffsetToUtf16?t<0?0:t>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[t]:t}convertUtf16OffsetToUtf8(t){return this.utf16OffsetToUtf8?t<0?0:t>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[t]:t}dispose(){this.ptr===Jt._sharedPtr?Jt._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};tt(ki,"LAST_ID",0);tt(ki,"_sharedPtr",0);tt(ki,"_sharedPtrInUse",!1);let ep=ki;class g1{constructor(t){if(tt(this,"_onigBinding"),tt(this,"_ptr"),!st)throw new ka("Must invoke loadWasm first.");const n=[],s=[];for(let l=0,a=t.length;l{let s=e;return s=await s,typeof s=="function"&&(s=await s(n)),typeof s=="function"&&(s=await s(n)),_1(s)?s=await s.instantiator(n):v1(s)?s=await s.default(n):(y1(s)&&(s=s.data),b1(s)?typeof WebAssembly.instantiateStreaming=="function"?s=await E1(s)(n):s=await x1(s)(n):w1(s)?s=await Qi(s)(n):s instanceof WebAssembly.Module?s=await Qi(s)(n):"default"in s&&s.default instanceof WebAssembly.Module&&(s=await Qi(s.default)(n))),"instance"in s&&(s=s.instance),"exports"in s&&(s=s.exports),s})}return wr=t(),wr}function Qi(e){return t=>WebAssembly.instantiate(e,t)}function E1(e){return t=>WebAssembly.instantiateStreaming(e,t)}function x1(e){return async t=>{const n=await e.arrayBuffer();return WebAssembly.instantiate(n,t)}}async function S1(e){return e&&await k1(e),{createScanner(t){return new g1(t.map(n=>typeof n=="string"?n:n.source))},createString(t){return new ep(t)}}}const A1=s1({langs:o1,themes:l1,engine:()=>S1(m(()=>import("./wasm-CG6Dc4jp.js"),[]))}),T1={class:"show-page"},R1={class:"top"},C1={class:"top-inner"},I1={class:"meta"},L1={class:"id"},P1={key:0,class:"sub"},O1={class:"wrap"},D1={class:"panel"},N1={key:0,class:"state muted"},$1={key:1,class:"state muted"},M1={key:2,class:"content"},V1={class:"head"},B1={class:"left"},j1={class:"title"},G1={key:0,class:"desc"},U1={key:1,class:"tags"},H1={class:"links"},F1=["href"],z1={class:"right"},W1={class:"badge"},q1={class:"badge-v"},K1={class:"badge"},Y1={class:"badge-v"},X1={class:"grid"},J1={class:"card"},Z1={class:"stats"},Q1={class:"k"},eS={class:"v"},tS={key:0,class:"card"},nS=["innerHTML"],sS={key:1,class:"card"},rS={key:3,class:"state muted"},iS={__name:"RegistryPkgShow",setup(e){const t=rr(),n=new Qu,s=de(!0),r=de(""),i=de(""),o=de(null),l=ue(()=>{const w=(t.params.namespace||"").toString().trim(),A=(t.params.name||"").toString().trim();return w&&A?`${w}/${A}`:""}),a=de("");let c=null;function u(w){const A=(w||"").toString().trim().toLowerCase();return A?A==="c++"?"cpp":A==="shell"?"bash":A:"txt"}async function d(){return c||(c=await A1({themes:["github-dark"],langs:["cpp","c","bash","json","yaml","toml","ini","cmake","xml","html","css","js","ts","diff","md","txt"]}),c)}async function f(w){const A=(w||"").toString();if(!A){a.value="";return}const S=await d(),L=new Ce.Renderer;L.code=(v,V)=>{const Y=typeof v=="string"?v:v&&v.text?v.text:"",ne=typeof V=="string"?V:v&&v.lang?v.lang:"",z=u(ne);try{return S.codeToHtml(Y,{lang:z,theme:"github-dark"})}catch{return S.codeToHtml(Y,{lang:"txt",theme:"github-dark"})}},Ce.setOptions({gfm:!0,breaks:!1,renderer:L});const g=Ce.parse(A);a.value=pk.sanitize(g)}function h(){l.value&&n.postMessage({type:"getPackage",id:l.value})}_n(async()=>{n.onmessage=w=>{const A=w.data||{};if(A.type==="loaded"){i.value=A.version||"",h();return}if(A.type==="packageResult"){if(s.value=!1,i.value=A.version||i.value,!A.ok){r.value=A.error||"cannot_load_package",o.value=null,a.value="";return}o.value=A.pkg||null,r.value="",f(o.value?.readme||"");return}A.type==="error"&&(s.value=!1,r.value=A.error||"worker_error")};try{const{data:w}=await na();n.postMessage({type:"load",data:w})}catch{s.value=!1,r.value="cannot_load_registry"}}),Tn(()=>{n.terminate()}),tn(()=>l.value,()=>{!s.value&&!r.value&&h()}),tn(()=>o.value?.readme,w=>{f(w||"")});const y=ue(()=>{const w=o.value?.stats||{};return[{k:"Latest",v:o.value?.latest||"-"},{k:"Versions",v:String(w.versionsCount??"-")},{k:"Repo",v:w.hasRepo?"yes":"no"},{k:"Readme",v:w.hasReadme?"yes":"no"},{k:"Created",v:w.createdAt||"-"},{k:"Updated",v:w.updatedAt||"-"}]});return(w,A)=>(T(),O("section",T1,[p("header",R1,[p("div",C1,[A[0]||(A[0]=p("div",{class:"brand"},[p("div",{class:"logo","aria-hidden":"true"}),p("div",{class:"brand-text"},"Vix Registry")],-1)),p("div",I1,[p("div",L1,H(l.value),1),i.value?(T(),O("div",P1,"Index: "+H(i.value),1)):se("",!0)])])]),p("div",O1,[p("div",D1,[s.value?(T(),O("div",N1,"Loading package…")):r.value?(T(),O("div",$1,"Error: "+H(r.value),1)):o.value?(T(),O("div",M1,[p("div",V1,[p("div",B1,[p("div",j1,H(o.value.id),1),o.value.description?(T(),O("div",G1,H(o.value.description),1)):se("",!0),o.value.keywords&&o.value.keywords.length?(T(),O("div",U1,[(T(!0),O(we,null,ze(o.value.keywords,S=>(T(),O("span",{key:S,class:"tag"},H(S),1))),128))])):se("",!0),p("div",H1,[o.value.repo?(T(),O("a",{key:0,class:"link",href:o.value.repo,target:"_blank",rel:"noreferrer"},"Repository",8,F1)):se("",!0)])]),p("div",z1,[p("div",W1,[A[1]||(A[1]=p("div",{class:"badge-k"},"Latest",-1)),p("div",q1,H(o.value.latest||"-"),1)]),p("div",K1,[A[2]||(A[2]=p("div",{class:"badge-k"},"License",-1)),p("div",Y1,H(o.value.license||"-"),1)])])]),p("div",X1,[p("div",J1,[A[3]||(A[3]=p("div",{class:"card-title"},"Stats",-1)),p("ul",Z1,[(T(!0),O(we,null,ze(y.value,S=>(T(),O("li",{key:S.k,class:"stat"},[p("span",Q1,H(S.k),1),p("span",eS,H(S.v),1)]))),128))])]),o.value.readme?(T(),O("div",tS,[A[4]||(A[4]=p("div",{class:"card-title"},"Readme",-1)),p("div",{class:"readme-md",innerHTML:a.value},null,8,nS)])):(T(),O("div",sS,[...A[5]||(A[5]=[p("div",{class:"card-title"},"Readme",-1),p("div",{class:"muted"},"No readme in index.",-1)])]))])])):(T(),O("div",rS,"Not found."))])])]))}},oS=Me(iS,[["__scopeId","data-v-93ff3496"]]),yn={siteName:"Vix.cpp",title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",baseUrl:"https://vixcpp.com",twitter:"@vix_cpp",image:"https://res.cloudinary.com/dwjbed2xb/image/upload/v1769499528/vix_banniere_zljwdt.png"};function Ot(e,t,n){const s=n?`meta[property="${e}"]`:`meta[name="${e}"]`;let r=document.head.querySelector(s);r||(r=document.createElement("meta"),n?r.setAttribute("property",e):r.setAttribute("name",e),document.head.appendChild(r)),r.setAttribute("content",t)}function aS(e,t){let n=document.head.querySelector(`link[rel="${e}"]`);n||(n=document.createElement("link"),n.setAttribute("rel",e),document.head.appendChild(n)),n.setAttribute("href",t)}function bc(e,t){return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?e.replace(/\/+$/,"")+t:e.replace(/\/+$/,"")+"/"+t:e}function tp(e){const t=document.getElementById(e);t&&t.parentNode&&t.parentNode.removeChild(t)}function lS(e,t){tp(e);const n=document.createElement("script");n.type="application/ld+json",n.id=e,n.text=JSON.stringify(t),document.head.appendChild(n)}function wc(e={}){const t=yn.siteName,n=(e.title||yn.title).trim();let s=n;!n.includes(t)&&n!==yn.title&&(s=`${n} | ${t}`);const r=(e.description||yn.description).trim(),i=e.canonical?e.canonical:bc(yn.baseUrl,e.path||window.location.pathname),o=bc(yn.baseUrl,e.image||yn.image),l=e.type||"website";document.title=s,Ot("description",r,!1),aS("canonical",i),Ot("og:site_name",t,!0),Ot("og:title",s,!0),Ot("og:description",r,!0),Ot("og:url",i,!0),Ot("og:type",l,!0),Ot("og:image",o,!0),Ot("twitter:card","summary_large_image",!1),Ot("twitter:title",s,!1),Ot("twitter:description",r,!1),Ot("twitter:image",o,!1),Ot("twitter:site",yn.twitter,!1);const a="vix-jsonld";e.jsonLd===null?tp(a):e.jsonLd&&typeof e.jsonLd=="object"&&lS(a,e.jsonLd)}const cS=[{path:"/",name:"home",component:Dv,meta:{seo:{title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",path:"/",type:"website",jsonLd:{"@context":"https://schema.org","@type":"SoftwareApplication",name:"Vix.cpp",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun. It is designed for unreliable networks, offline-first workflows, peer-to-peer systems, and extreme native performance.",url:"https://vixcpp.com/"}}}},{path:"/install",name:"install",component:Wv,meta:{seo:{title:"Install",description:"Install Vix.cpp in minutes. Verify, update, and uninstall cleanly.",path:"/install"}}},{path:"/registry",component:Gy,children:[{path:"",name:"registry_home",component:Qy,meta:{seo:{title:"Vix Registry",description:"Discover Vix packages. Search, browse, and publish.",path:"/registry"}}},{path:"browse",name:"registry_browse",component:Pb,meta:{seo:{title:"Browse packages",description:"Browse packages in the Vix Registry.",path:"/registry/browse"}}},{path:"pkg/:namespace/:name",name:"registry_pkg_show",component:oS,meta:{seo:{title:"Package",description:"Package details and stats in the Vix Registry.",path:"/registry/pkg"}}},{path:"docs",name:"registry_docs",component:Nb,meta:{seo:{title:"Registry docs",description:"How the Vix Registry works.",path:"/registry/docs"}}},{path:"publish",name:"registry_publish",component:aw,meta:{seo:{title:"Publish a package",description:"Publish packages to the Vix Registry.",path:"/registry/publish"}}}]},{path:"/community",name:"community",component:Xv,meta:{seo:{title:"Community",description:"Contribute to Vix.cpp. Issues, PR guidelines, and good first contributions.",path:"/community"}}},{path:"/blog",name:"blog",component:ey,meta:{seo:{title:"Blog",description:"Short, concrete updates about Vix.cpp: performance, DX, middleware, and the registry workflow.",path:"/blog"}}},{path:"/blog/:slug",name:"post",component:fy,props:!0,meta:{seo:{title:"Post",description:"Vix.cpp blog post.",path:"/blog"}}},{path:"/about/community-guide",name:"community_guide",component:ky,meta:{seo:{title:"Community Guide",description:"How to contribute to Vix.cpp: rules, PR structure, examples, and review expectations.",path:"/about/community-guide"}}},{path:"/about/releases",name:"releases",component:Ay,meta:{seo:{title:"Releases",description:"Release policy and versioning notes for Vix.cpp (CLI, modules, stability guarantees).",path:"/about/releases"}}},{path:"/about/team",name:"team",component:Iy,meta:{seo:{title:"Team",description:"People behind Vix.cpp and how to get in touch for collaboration.",path:"/about/team"}}},{path:"/about/faq",name:"faq",component:Dy,meta:{seo:{title:"FAQ",description:"Frequently asked questions about Vix.cpp: scope, use cases, registry, and platform support.",path:"/about/faq"}}},{path:"/about/documentary",name:"documentary",component:Vy,meta:{seo:{title:"The Documentary",description:"The story behind Vix.cpp: why it exists, what it solves, and what’s next.",path:"/about/documentary"}}},{path:"/:pathMatch(.*)*",name:"notfound",component:vy,meta:{seo:{title:"404",description:"Page not found.",path:"/404"}}}],np=Gm({history:ym(),routes:cS,scrollBehavior(){return{top:0}}});np.afterEach(e=>{const t=e.meta?.seo;wc(t||{title:"Vix.cpp A Modern C++ Backend Runtime",description:"Vix.cpp is a modern C++ runtime built as a serious alternative to Node.js, Deno, and Bun.",path:"/"}),window.gtag&&window.gtag("event","page_view",{page_path:e.fullPath,page_title:document.title})});function uS(e={}){const{immediate:t=!1,onNeedRefresh:n,onOfflineReady:s,onRegistered:r,onRegisteredSW:i,onRegisterError:o}=e;let l,a;const c=async(d=!0)=>{await a};async function u(){if("serviceWorker"in navigator){if(l=await m(async()=>{const{Workbox:d}=await import("./workbox-window.prod.es5-BIl4cyR9.js");return{Workbox:d}},[]).then(({Workbox:d})=>new d("/sw.js",{scope:"/",type:"classic"})).catch(d=>{o?.(d)}),!l)return;l.addEventListener("activated",d=>{(d.isUpdate||d.isExternal)&&window.location.reload()}),l.addEventListener("installed",d=>{d.isUpdate||s?.()}),l.register({immediate:t}).then(d=>{i?i("/sw.js",d):r?.(d)}).catch(d=>{o?.(d)})}}return a=u(),c}const kc=sessionStorage.getItem("redirect");kc&&(sessionStorage.removeItem("redirect"),window.history.replaceState(null,"",kc));const Ea=Oh(Pg),xa=de(!1),dS=de("New version available."),pS=de("Refresh to load the latest build.");Ea.component("PwaUpdateToast",Wu);Ea.provide("pwaToast",{show:xa,message:dS,detail:pS});Ea.use(np).mount("#app");const fS=uS({immediate:!0,onNeedRefresh(){xa.value=!0},onOfflineReady(){}});window.__vix_pwa_refresh__=()=>fS(!0);window.__vix_pwa_dismiss__=()=>{xa.value=!1}; diff --git a/docs/404.html b/docs/404.html index 59cf615ad..63757d159 100644 --- a/docs/404.html +++ b/docs/404.html @@ -9,8 +9,7 @@ - - + @@ -19,7 +18,7 @@

- + \ No newline at end of file diff --git a/docs/api.html b/docs/api.html index 23b4ca888..6db9fa714 100644 --- a/docs/api.html +++ b/docs/api.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

Vix.cpp
- + \ No newline at end of file diff --git a/docs/api/async.html b/docs/api/async.html index 9b1ba4e62..d772b4476 100644 --- a/docs/api/async.html +++ b/docs/api/async.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content
Vix.cpp
- + \ No newline at end of file diff --git a/docs/api/config.html b/docs/api/config.html index db4fa5fd8..4dd4b2d49 100644 --- a/docs/api/config.html +++ b/docs/api/config.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Config API ​

This page documents the configuration loader in Vix.

Header:

cpp
#include <vix/config/Config.hpp>

Core type:

cpp
vix::config::Config

The configuration system is:

  • JSON-based
  • Strongly typed
  • Path-addressable via dot notation
  • Safe with fallback defaults

Constructor ​

cpp
vix::config::Config cfg{"config.json"};

Loads and parses the JSON file at construction.

If the file cannot be loaded, behavior depends on implementation configuration. In production, always validate at boot time.


Getters ​

All getters accept:

  • dot path string
  • fallback value

get_string ​

cpp
std::string value = cfg.get_string("server.host", "127.0.0.1");

get_int ​

cpp
int port = cfg.get_int("server.port", 8080);

get_bool ​

cpp
bool debug = cfg.get_bool("runtime.debug", false);

get_double ​

cpp
double ratio = cfg.get_double("limits.ratio", 0.5);

Dot Path Access ​

Nested JSON can be accessed using dot notation.

Given:

json
{
+    
Skip to content

Config API ​

This page documents the configuration loader in Vix.

Header:

cpp
#include <vix/config/Config.hpp>

Core type:

cpp
vix::config::Config

The configuration system is:

  • JSON-based
  • Strongly typed
  • Path-addressable via dot notation
  • Safe with fallback defaults

Constructor ​

cpp
vix::config::Config cfg{"config.json"};

Loads and parses the JSON file at construction.

If the file cannot be loaded, behavior depends on implementation configuration. In production, always validate at boot time.


Getters ​

All getters accept:

  • dot path string
  • fallback value

get_string ​

cpp
std::string value = cfg.get_string("server.host", "127.0.0.1");

get_int ​

cpp
int port = cfg.get_int("server.port", 8080);

get_bool ​

cpp
bool debug = cfg.get_bool("runtime.debug", false);

get_double ​

cpp
double ratio = cfg.get_double("limits.ratio", 0.5);

Dot Path Access ​

Nested JSON can be accessed using dot notation.

Given:

json
{
   "database": {
     "host": "localhost",
     "port": 5432
@@ -53,7 +54,7 @@
     port = std::atoi(env);
 
   return port;
-}

Design Notes ​

  • Configuration is read at startup.
  • No global mutable config state.
  • Safe access always requires fallback.
  • Deterministic behavior: no implicit environment merging.

The Config API is intentionally small and predictable.


Design Notes ​

  • Configuration is read at startup.
  • No global mutable config state.
  • Safe access always requires fallback.
  • Deterministic behavior: no implicit environment merging.

The Config API is intentionally small and predictable.

- + \ No newline at end of file diff --git a/docs/api/http.html b/docs/api/http.html index 105652c02..a0a3a0395 100644 --- a/docs/api/http.html +++ b/docs/api/http.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

HTTP API ​

This page documents the core HTTP primitives in Vix.

It covers:

  • App
  • Routing methods
  • Request
  • Response

All examples are minimal and placed entirely inside main().


App ​

Header:

cpp
#include <vix.hpp>

Core type:

cpp
vix::App

Constructor ​

cpp
App app;

Run ​

cpp
app.run(8080);

Starts the HTTP server on the given port (blocking call).


Routing Methods ​

GET ​

cpp
app.get(path, handler);

POST ​

cpp
app.post(path, handler);

PUT ​

cpp
app.put(path, handler);

DELETE ​

cpp
app.del(path, handler);

Minimal Example ​

cpp
#include <vix.hpp>
+    
Skip to content

HTTP API ​

This page documents the core HTTP primitives in Vix.

It covers:

  • App
  • Routing methods
  • Request
  • Response

All examples are minimal and placed entirely inside main().


App ​

Header:

cpp
#include <vix.hpp>

Core type:

cpp
vix::App

Constructor ​

cpp
App app;

Run ​

cpp
app.run(8080);

Starts the HTTP server on the given port (blocking call).


Routing Methods ​

GET ​

cpp
app.get(path, handler);

POST ​

cpp
app.post(path, handler);

PUT ​

cpp
app.put(path, handler);

DELETE ​

cpp
app.del(path, handler);

Minimal Example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -57,7 +58,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/api/index.html b/docs/api/index.html index cb4a3a2fe..e41f001ab 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

Vix.cpp
- + \ No newline at end of file diff --git a/docs/api/json.html b/docs/api/json.html index 290dbffcd..a07767ad1 100644 --- a/docs/api/json.html +++ b/docs/api/json.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

JSON API ​

This page documents the JSON facilities available in Vix.

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp)
  2. High-level JSON (vix/json/json.hpp)

They serve different purposes and can coexist.


1) Simple JSON ​

Header:

cpp
#include <vix/json/Simple.hpp>

Namespace:

cpp
vix::json

Core types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object storage

token ​

Represents any JSON value.

Supported kinds:

  • null
  • bool
  • int64
  • double
  • string
  • array
  • object

Example:

cpp
#include <vix/json/Simple.hpp>
+    
Skip to content

JSON API ​

This page documents the JSON facilities available in Vix.

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp)
  2. High-level JSON (vix/json/json.hpp)

They serve different purposes and can coexist.


1) Simple JSON ​

Header:

cpp
#include <vix/json/Simple.hpp>

Namespace:

cpp
vix::json

Core types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object storage

token ​

Represents any JSON value.

Supported kinds:

  • null
  • bool
  • int64
  • double
  • string
  • array
  • object

Example:

cpp
#include <vix/json/Simple.hpp>
 #include <iostream>
 
 using namespace vix::json;
@@ -97,7 +98,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/api/middleware.html b/docs/api/middleware.html index 847cb5fa3..b363fd324 100644 --- a/docs/api/middleware.html +++ b/docs/api/middleware.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Middleware API ​

This page documents the middleware system in Vix.

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (Request/Response based)

Both can be adapted and chained.


Headers ​

Context middleware:

cpp
#include <vix/middleware/Middleware.hpp>

Legacy middleware:

cpp
#include <vix/http/HttpMiddleware.hpp>

1) Context Middleware (Recommended) ​

Type:

cpp
vix::middleware::MiddlewareFn

Signature:

cpp
(Context& ctx, Next next)

Minimal Example ​

cpp
#include <vix.hpp>
+    
Skip to content

Middleware API ​

This page documents the middleware system in Vix.

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (Request/Response based)

Both can be adapted and chained.


Headers ​

Context middleware:

cpp
#include <vix/middleware/Middleware.hpp>

Legacy middleware:

cpp
#include <vix/http/HttpMiddleware.hpp>

1) Context Middleware (Recommended) ​

Type:

cpp
vix::middleware::MiddlewareFn

Signature:

cpp
(Context& ctx, Next next)

Minimal Example ​

cpp
#include <vix.hpp>
 #include <vix/middleware/Middleware.hpp>
 
 using namespace vix;
@@ -99,7 +100,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/api/p2p.html b/docs/api/p2p.html index 055d477fe..97ee227a0 100644 --- a/docs/api/p2p.html +++ b/docs/api/p2p.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content
Vix.cpp
- + \ No newline at end of file diff --git a/docs/api/websocket.html b/docs/api/websocket.html index a35f1a95c..23b9dd03f 100644 --- a/docs/api/websocket.html +++ b/docs/api/websocket.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

WebSocket API ​

This page documents the WebSocket server API in Vix.

It covers:

  • WebSocket server
  • Event hooks
  • Typed message protocol
  • Broadcast functions
  • Long polling bridge

All examples are minimal and placed inside main().


Server ​

Header:

cpp
#include <vix/websocket.hpp>

Core type:

cpp
vix::websocket::Server

Constructor ​

cpp
Server ws(cfg, executor);

Parameters:

  • cfg → configuration object
  • executor → thread pool executor

Minimal Standalone Example ​

cpp
#include <vix/config/Config.hpp>
+    
Skip to content

WebSocket API ​

This page documents the WebSocket server API in Vix.

It covers:

  • WebSocket server
  • Event hooks
  • Typed message protocol
  • Broadcast functions
  • Long polling bridge

All examples are minimal and placed inside main().


Server ​

Header:

cpp
#include <vix/websocket.hpp>

Core type:

cpp
vix::websocket::Server

Constructor ​

cpp
Server ws(cfg, executor);

Parameters:

  • cfg → configuration object
  • executor → thread pool executor

Minimal Standalone Example ​

cpp
#include <vix/config/Config.hpp>
 #include <vix/experimental/ThreadPoolExecutor.hpp>
 #include <vix/websocket.hpp>
 
@@ -62,7 +63,7 @@
 });

Broadcast to room ​

cpp
ws.broadcast_room_json("room1", "chat.message", payload);

Long Polling Bridge ​

Header:

cpp
#include <vix/websocket/LongPollingBridge.hpp>

Attach bridge:

cpp
ws.attach_long_polling_bridge(bridge);

Purpose:

  • Fallback when WebSocket is blocked
  • HTTP endpoints simulate WebSocket behavior

HTTP + WS Combined ​

Use helper:

cpp
vix::serve_http_and_ws([](auto& app, auto& ws) {
   // register HTTP routes
   // register WebSocket handlers
-});

This creates a single runtime handling both protocols.


Notes ​

  • listen_blocking() blocks the thread.
  • WebSocket handlers should be short and non-blocking.
  • Use broadcast carefully in high-load scenarios.
  • Use room broadcasting for scalable chat systems.

The WebSocket API is minimal by design.

This creates a single runtime handling both protocols.


Notes ​

  • listen_blocking() blocks the thread.
  • WebSocket handlers should be short and non-blocking.
  • Use broadcast carefully in high-load scenarios.
  • Use room broadcasting for scalable chat systems.

The WebSocket API is minimal by design.

- + \ No newline at end of file diff --git a/docs/assets/api.md.CVJdr-eN.js b/docs/assets/api.md.CVJdr-eN.js new file mode 100644 index 000000000..5ef5ea447 --- /dev/null +++ b/docs/assets/api.md.CVJdr-eN.js @@ -0,0 +1 @@ +import{_ as i,o as l,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":1770798288000}'),o={name:"api.md"};function r(s,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a('

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

',18)])])}const _=i(o,[["render",r]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/api.md.CVJdr-eN.lean.js b/docs/assets/api.md.CVJdr-eN.lean.js new file mode 100644 index 000000000..2b91d7eae --- /dev/null +++ b/docs/assets/api.md.CVJdr-eN.lean.js @@ -0,0 +1 @@ +import{_ as i,o as l,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":1770798288000}'),o={name:"api.md"};function r(s,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a("",18)])])}const _=i(o,[["render",r]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/api.md.DPZyJPoT.js b/docs/assets/api.md.DPZyJPoT.js deleted file mode 100644 index baacdb915..000000000 --- a/docs/assets/api.md.DPZyJPoT.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as l,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":1770798288000}'),o={name:"api.md"};function s(r,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a('

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

',18)])])}const m=i(o,[["render",s]]);export{d as __pageData,m as default}; diff --git a/docs/assets/api.md.DPZyJPoT.lean.js b/docs/assets/api.md.DPZyJPoT.lean.js deleted file mode 100644 index 769bc91b2..000000000 --- a/docs/assets/api.md.DPZyJPoT.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as l,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":1770798288000}'),o={name:"api.md"};function s(r,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a("",18)])])}const m=i(o,[["render",s]]);export{d as __pageData,m as default}; diff --git a/docs/assets/api_async.md.D-gqSopA.js b/docs/assets/api_async.md.D-gqSopA.js deleted file mode 100644 index 0b750b935..000000000 --- a/docs/assets/api_async.md.D-gqSopA.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/async.md","filePath":"api/async.md","lastUpdated":1770717352000}'),s={name:"api/async.md"};function c(n,r,o,p,i,d){return e(),t("div")}const f=a(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/assets/api_async.md.D-gqSopA.lean.js b/docs/assets/api_async.md.D-gqSopA.lean.js deleted file mode 100644 index 0b750b935..000000000 --- a/docs/assets/api_async.md.D-gqSopA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/async.md","filePath":"api/async.md","lastUpdated":1770717352000}'),s={name:"api/async.md"};function c(n,r,o,p,i,d){return e(),t("div")}const f=a(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/assets/api_async.md.T-h93m4E.js b/docs/assets/api_async.md.T-h93m4E.js new file mode 100644 index 000000000..a91d9b981 --- /dev/null +++ b/docs/assets/api_async.md.T-h93m4E.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/async.md","filePath":"api/async.md","lastUpdated":1770717352000}'),s={name:"api/async.md"};function r(c,n,o,p,i,d){return t(),e("div")}const h=a(s,[["render",r]]);export{l as __pageData,h as default}; diff --git a/docs/assets/api_async.md.T-h93m4E.lean.js b/docs/assets/api_async.md.T-h93m4E.lean.js new file mode 100644 index 000000000..a91d9b981 --- /dev/null +++ b/docs/assets/api_async.md.T-h93m4E.lean.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/async.md","filePath":"api/async.md","lastUpdated":1770717352000}'),s={name:"api/async.md"};function r(c,n,o,p,i,d){return t(),e("div")}const h=a(s,[["render",r]]);export{l as __pageData,h as default}; diff --git a/docs/assets/api_config.md.CSROQcmc.lean.js b/docs/assets/api_config.md.CSROQcmc.lean.js deleted file mode 100644 index 9b3e745aa..000000000 --- a/docs/assets/api_config.md.CSROQcmc.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Config API","description":"","frontmatter":{},"headers":[],"relativePath":"api/config.md","filePath":"api/config.md","lastUpdated":1770798288000}'),h={name:"api/config.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",48)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; diff --git a/docs/assets/api_config.md.CSROQcmc.js b/docs/assets/api_config.md.D1ZrU3I-.js similarity index 59% rename from docs/assets/api_config.md.CSROQcmc.js rename to docs/assets/api_config.md.D1ZrU3I-.js index 719310602..e605a116a 100644 --- a/docs/assets/api_config.md.CSROQcmc.js +++ b/docs/assets/api_config.md.D1ZrU3I-.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Config API","description":"","frontmatter":{},"headers":[],"relativePath":"api/config.md","filePath":"api/config.md","lastUpdated":1770798288000}'),h={name:"api/config.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Config API ​

This page documents the configuration loader in Vix.

Header:

cpp
#include <vix/config/Config.hpp>

Core type:

cpp
vix::config::Config

The configuration system is:

  • JSON-based
  • Strongly typed
  • Path-addressable via dot notation
  • Safe with fallback defaults

Constructor ​

cpp
vix::config::Config cfg{"config.json"};

Loads and parses the JSON file at construction.

If the file cannot be loaded, behavior depends on implementation configuration. In production, always validate at boot time.


Getters ​

All getters accept:

  • dot path string
  • fallback value

get_string ​

cpp
std::string value = cfg.get_string("server.host", "127.0.0.1");

get_int ​

cpp
int port = cfg.get_int("server.port", 8080);

get_bool ​

cpp
bool debug = cfg.get_bool("runtime.debug", false);

get_double ​

cpp
double ratio = cfg.get_double("limits.ratio", 0.5);

Dot Path Access ​

Nested JSON can be accessed using dot notation.

Given:

json
{
+import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Config API","description":"","frontmatter":{},"headers":[],"relativePath":"api/config.md","filePath":"api/config.md","lastUpdated":1770798288000}'),h={name:"api/config.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Config API ​

This page documents the configuration loader in Vix.

Header:

cpp
#include <vix/config/Config.hpp>

Core type:

cpp
vix::config::Config

The configuration system is:

  • JSON-based
  • Strongly typed
  • Path-addressable via dot notation
  • Safe with fallback defaults

Constructor ​

cpp
vix::config::Config cfg{"config.json"};

Loads and parses the JSON file at construction.

If the file cannot be loaded, behavior depends on implementation configuration. In production, always validate at boot time.


Getters ​

All getters accept:

  • dot path string
  • fallback value

get_string ​

cpp
std::string value = cfg.get_string("server.host", "127.0.0.1");

get_int ​

cpp
int port = cfg.get_int("server.port", 8080);

get_bool ​

cpp
bool debug = cfg.get_bool("runtime.debug", false);

get_double ​

cpp
double ratio = cfg.get_double("limits.ratio", 0.5);

Dot Path Access ​

Nested JSON can be accessed using dot notation.

Given:

json
{
   "database": {
     "host": "localhost",
     "port": 5432
@@ -30,4 +30,4 @@ import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const g
     port = std::atoi(env);
 
   return port;
-}

Design Notes ​

  • Configuration is read at startup.
  • No global mutable config state.
  • Safe access always requires fallback.
  • Deterministic behavior: no implicit environment merging.

The Config API is intentionally small and predictable.

`,48)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; +}

Design Notes ​

  • Configuration is read at startup.
  • No global mutable config state.
  • Safe access always requires fallback.
  • Deterministic behavior: no implicit environment merging.

The Config API is intentionally small and predictable.

`,48)])])}const y=i(h,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/api_config.md.D1ZrU3I-.lean.js b/docs/assets/api_config.md.D1ZrU3I-.lean.js new file mode 100644 index 000000000..47d401db1 --- /dev/null +++ b/docs/assets/api_config.md.D1ZrU3I-.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Config API","description":"","frontmatter":{},"headers":[],"relativePath":"api/config.md","filePath":"api/config.md","lastUpdated":1770798288000}'),h={name:"api/config.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",48)])])}const y=i(h,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/api_http.md.CqECDlrv.lean.js b/docs/assets/api_http.md.CqECDlrv.lean.js deleted file mode 100644 index 7c954d25b..000000000 --- a/docs/assets/api_http.md.CqECDlrv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"api/http.md","filePath":"api/http.md","lastUpdated":1770798288000}'),p={name:"api/http.md"};function h(n,s,l,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",80)])])}const E=i(p,[["render",h]]);export{c as __pageData,E as default}; diff --git a/docs/assets/api_http.md.CqECDlrv.js b/docs/assets/api_http.md.Cu6IcBbZ.js similarity index 70% rename from docs/assets/api_http.md.CqECDlrv.js rename to docs/assets/api_http.md.Cu6IcBbZ.js index 282fd8598..2d363f905 100644 --- a/docs/assets/api_http.md.CqECDlrv.js +++ b/docs/assets/api_http.md.Cu6IcBbZ.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"api/http.md","filePath":"api/http.md","lastUpdated":1770798288000}'),p={name:"api/http.md"};function h(n,s,l,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[t(`

HTTP API ​

This page documents the core HTTP primitives in Vix.

It covers:

  • App
  • Routing methods
  • Request
  • Response

All examples are minimal and placed entirely inside main().


App ​

Header:

cpp
#include <vix.hpp>

Core type:

cpp
vix::App

Constructor ​

cpp
App app;

Run ​

cpp
app.run(8080);

Starts the HTTP server on the given port (blocking call).


Routing Methods ​

GET ​

cpp
app.get(path, handler);

POST ​

cpp
app.post(path, handler);

PUT ​

cpp
app.put(path, handler);

DELETE ​

cpp
app.del(path, handler);

Minimal Example ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"api/http.md","filePath":"api/http.md","lastUpdated":1770798288000}'),p={name:"api/http.md"};function h(n,s,l,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[t(`

HTTP API ​

This page documents the core HTTP primitives in Vix.

It covers:

  • App
  • Routing methods
  • Request
  • Response

All examples are minimal and placed entirely inside main().


App ​

Header:

cpp
#include <vix.hpp>

Core type:

cpp
vix::App

Constructor ​

cpp
App app;

Run ​

cpp
app.run(8080);

Starts the HTTP server on the given port (blocking call).


Routing Methods ​

GET ​

cpp
app.get(path, handler);

POST ​

cpp
app.post(path, handler);

PUT ​

cpp
app.put(path, handler);

DELETE ​

cpp
app.del(path, handler);

Minimal Example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -15,4 +15,4 @@ import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
 req.has_header("Authorization");

Body ​

cpp
std::string body = req.body();

JSON ​

cpp
const auto& j = req.json();

Returns parsed JSON (high-level JSON layer).


Response ​

Type:

cpp
vix::Response

Controls HTTP output.


Status ​

cpp
res.status(201);
 res.set_status(404);

Send text ​

cpp
res.send("Hello");

Send JSON ​

cpp
res.json({"message", "ok"});

Auto-send return ​

If a route handler returns:

  • std::string → text response
  • JSON object → JSON response

Example:

cpp
app.get("/auto", [](Request&, Response&) {
   return vix::json::o("message", "auto");
-});

Behavior Notes ​

  • If res.send() or res.json() is called, returned values are ignored.
  • If nothing is sent, the handler must return a value.
  • Status defaults to 200 unless changed.
  • Handlers execute synchronously per request context.

Design Philosophy ​

The HTTP layer is:

  • Minimal
  • Explicit
  • Deterministic
  • Zero hidden middleware stack by default

You control exactly what happens in each handler.

`,80)])])}const E=i(p,[["render",h]]);export{c as __pageData,E as default}; +});

Behavior Notes ​

  • If res.send() or res.json() is called, returned values are ignored.
  • If nothing is sent, the handler must return a value.
  • Status defaults to 200 unless changed.
  • Handlers execute synchronously per request context.

Design Philosophy ​

The HTTP layer is:

  • Minimal
  • Explicit
  • Deterministic
  • Zero hidden middleware stack by default

You control exactly what happens in each handler.

`,80)])])}const u=i(p,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/api_http.md.Cu6IcBbZ.lean.js b/docs/assets/api_http.md.Cu6IcBbZ.lean.js new file mode 100644 index 000000000..6eede9556 --- /dev/null +++ b/docs/assets/api_http.md.Cu6IcBbZ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP API","description":"","frontmatter":{},"headers":[],"relativePath":"api/http.md","filePath":"api/http.md","lastUpdated":1770798288000}'),p={name:"api/http.md"};function h(n,s,l,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",80)])])}const u=i(p,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/api_index.md.BW-LD6ZJ.js b/docs/assets/api_index.md.BW-LD6ZJ.js new file mode 100644 index 000000000..a5492e00a --- /dev/null +++ b/docs/assets/api_index.md.BW-LD6ZJ.js @@ -0,0 +1 @@ +import{_ as i,o as l,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1770798288000}'),o={name:"api/index.md"};function r(s,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a('

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

',18)])])}const _=i(o,[["render",r]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/api_index.md.BW-LD6ZJ.lean.js b/docs/assets/api_index.md.BW-LD6ZJ.lean.js new file mode 100644 index 000000000..85ef7d491 --- /dev/null +++ b/docs/assets/api_index.md.BW-LD6ZJ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as l,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1770798288000}'),o={name:"api/index.md"};function r(s,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a("",18)])])}const _=i(o,[["render",r]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/api_index.md.CrqOQBb_.js b/docs/assets/api_index.md.CrqOQBb_.js deleted file mode 100644 index bbe9e9573..000000000 --- a/docs/assets/api_index.md.CrqOQBb_.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as l,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1770798288000}'),o={name:"api/index.md"};function s(r,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a('

API Reference ​

This section documents the public API surface of Vix.

It focuses on:

  • Core HTTP primitives
  • Routing
  • Request & Response
  • JSON layer
  • WebSocket
  • Configuration
  • Runtime behavior

The goal of this section is precision.

If the Guide shows how to use Vix, the API section shows what exactly exists.


Structure ​

  • App
  • Request
  • Response
  • Routing methods
  • JSON helpers
  • WebSocket server
  • Config loader

Each page in this section describes:

  • Available methods
  • Signatures
  • Minimal usage examples
  • Behavioral notes

Philosophy ​

The Vix API follows strict principles:

  • Explicit over magic
  • Minimal abstraction layers
  • Deterministic behavior
  • No hidden global state
  • No runtime reflection

Everything that happens should be visible in code.


Continue with the next API component page.

',18)])])}const m=i(o,[["render",s]]);export{d as __pageData,m as default}; diff --git a/docs/assets/api_index.md.CrqOQBb_.lean.js b/docs/assets/api_index.md.CrqOQBb_.lean.js deleted file mode 100644 index eb4828832..000000000 --- a/docs/assets/api_index.md.CrqOQBb_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as l,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1770798288000}'),o={name:"api/index.md"};function s(r,e,n,p,h,c){return l(),t("div",null,[...e[0]||(e[0]=[a("",18)])])}const m=i(o,[["render",s]]);export{d as __pageData,m as default}; diff --git a/docs/assets/api_json.md.CWpGS7a_.js b/docs/assets/api_json.md.BNJkYYYC.js similarity index 88% rename from docs/assets/api_json.md.CWpGS7a_.js rename to docs/assets/api_json.md.BNJkYYYC.js index 8ff8a0a63..a20d5c7a0 100644 --- a/docs/assets/api_json.md.CWpGS7a_.js +++ b/docs/assets/api_json.md.BNJkYYYC.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"JSON API","description":"","frontmatter":{},"headers":[],"relativePath":"api/json.md","filePath":"api/json.md","lastUpdated":1770798288000}'),p={name:"api/json.md"};function t(e,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l(`

JSON API ​

This page documents the JSON facilities available in Vix.

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp)
  2. High-level JSON (vix/json/json.hpp)

They serve different purposes and can coexist.


1) Simple JSON ​

Header:

cpp
#include <vix/json/Simple.hpp>

Namespace:

cpp
vix::json

Core types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object storage

token ​

Represents any JSON value.

Supported kinds:

  • null
  • bool
  • int64
  • double
  • string
  • array
  • object

Example:

cpp
#include <vix/json/Simple.hpp>
+import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"JSON API","description":"","frontmatter":{},"headers":[],"relativePath":"api/json.md","filePath":"api/json.md","lastUpdated":1770798288000}'),p={name:"api/json.md"};function t(e,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l(`

JSON API ​

This page documents the JSON facilities available in Vix.

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp)
  2. High-level JSON (vix/json/json.hpp)

They serve different purposes and can coexist.


1) Simple JSON ​

Header:

cpp
#include <vix/json/Simple.hpp>

Namespace:

cpp
vix::json

Core types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object storage

token ​

Represents any JSON value.

Supported kinds:

  • null
  • bool
  • int64
  • double
  • string
  • array
  • object

Example:

cpp
#include <vix/json/Simple.hpp>
 #include <iostream>
 
 using namespace vix::json;
@@ -55,4 +55,4 @@ import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o
 if (auto v = jget(j, "user.profile.name"))
 {
   // value exists
-}

Design Notes ​

Simple JSON:

  • Minimal overhead
  • Strong control
  • Useful for internal state and WebSocket payloads

High-level JSON:

  • Expressive builders
  • API responses
  • Parsing and file operations

The JSON API is explicit and deterministic.

`,74)])])}const c=i(p,[["render",t]]);export{o as __pageData,c as default}; +}

Design Notes ​

Simple JSON:

  • Minimal overhead
  • Strong control
  • Useful for internal state and WebSocket payloads

High-level JSON:

  • Expressive builders
  • API responses
  • Parsing and file operations

The JSON API is explicit and deterministic.

`,74)])])}const y=i(p,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/api_json.md.BNJkYYYC.lean.js b/docs/assets/api_json.md.BNJkYYYC.lean.js new file mode 100644 index 000000000..8b04404d5 --- /dev/null +++ b/docs/assets/api_json.md.BNJkYYYC.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"JSON API","description":"","frontmatter":{},"headers":[],"relativePath":"api/json.md","filePath":"api/json.md","lastUpdated":1770798288000}'),p={name:"api/json.md"};function t(e,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l("",74)])])}const y=i(p,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/api_json.md.CWpGS7a_.lean.js b/docs/assets/api_json.md.CWpGS7a_.lean.js deleted file mode 100644 index 426ba1799..000000000 --- a/docs/assets/api_json.md.CWpGS7a_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"JSON API","description":"","frontmatter":{},"headers":[],"relativePath":"api/json.md","filePath":"api/json.md","lastUpdated":1770798288000}'),p={name:"api/json.md"};function t(e,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l("",74)])])}const c=i(p,[["render",t]]);export{o as __pageData,c as default}; diff --git a/docs/assets/api_middleware.md.B9uldjbl.lean.js b/docs/assets/api_middleware.md.B9uldjbl.lean.js deleted file mode 100644 index 2ee64c83e..000000000 --- a/docs/assets/api_middleware.md.B9uldjbl.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Middleware API","description":"","frontmatter":{},"headers":[],"relativePath":"api/middleware.md","filePath":"api/middleware.md","lastUpdated":1770798288000}'),e={name:"api/middleware.md"};function t(l,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",63)])])}const c=i(e,[["render",t]]);export{g as __pageData,c as default}; diff --git a/docs/assets/api_middleware.md.B9uldjbl.js b/docs/assets/api_middleware.md.BLpQXhS5.js similarity index 84% rename from docs/assets/api_middleware.md.B9uldjbl.js rename to docs/assets/api_middleware.md.BLpQXhS5.js index 209de33c7..3026a7516 100644 --- a/docs/assets/api_middleware.md.B9uldjbl.js +++ b/docs/assets/api_middleware.md.BLpQXhS5.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Middleware API","description":"","frontmatter":{},"headers":[],"relativePath":"api/middleware.md","filePath":"api/middleware.md","lastUpdated":1770798288000}'),e={name:"api/middleware.md"};function t(l,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Middleware API ​

This page documents the middleware system in Vix.

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (Request/Response based)

Both can be adapted and chained.


Headers ​

Context middleware:

cpp
#include <vix/middleware/Middleware.hpp>

Legacy middleware:

cpp
#include <vix/http/HttpMiddleware.hpp>

1) Context Middleware (Recommended) ​

Type:

cpp
vix::middleware::MiddlewareFn

Signature:

cpp
(Context& ctx, Next next)

Minimal Example ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Middleware API","description":"","frontmatter":{},"headers":[],"relativePath":"api/middleware.md","filePath":"api/middleware.md","lastUpdated":1770798288000}'),e={name:"api/middleware.md"};function t(l,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Middleware API ​

This page documents the middleware system in Vix.

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (Request/Response based)

Both can be adapted and chained.


Headers ​

Context middleware:

cpp
#include <vix/middleware/Middleware.hpp>

Legacy middleware:

cpp
#include <vix/http/HttpMiddleware.hpp>

1) Context Middleware (Recommended) ​

Type:

cpp
vix::middleware::MiddlewareFn

Signature:

cpp
(Context& ctx, Next next)

Minimal Example ​

cpp
#include <vix.hpp>
 #include <vix/middleware/Middleware.hpp>
 
 using namespace vix;
@@ -57,4 +57,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
   app.run(8080);
 }

Adapters ​

Adapt legacy to context:

cpp
auto adapted = vix::middleware::adapt(mw);
 app.use(adapted);

Adapt context to legacy:

cpp
auto adapted = vix::middleware::adapt_ctx(ctx_mw);
-app.use(adapted);

Behavior Notes ​

  • Middleware executes in registration order.
  • If next() is not called, the chain stops.
  • Middleware can modify request state before handler execution.
  • Middleware should not block for long operations.

The middleware system is explicit and composable by design.

`,63)])])}const c=i(e,[["render",t]]);export{g as __pageData,c as default}; +app.use(adapted);

Behavior Notes ​

  • Middleware executes in registration order.
  • If next() is not called, the chain stops.
  • Middleware can modify request state before handler execution.
  • Middleware should not block for long operations.

The middleware system is explicit and composable by design.

`,63)])])}const y=i(e,[["render",t]]);export{o as __pageData,y as default}; diff --git a/docs/assets/api_middleware.md.BLpQXhS5.lean.js b/docs/assets/api_middleware.md.BLpQXhS5.lean.js new file mode 100644 index 000000000..d713885c3 --- /dev/null +++ b/docs/assets/api_middleware.md.BLpQXhS5.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Middleware API","description":"","frontmatter":{},"headers":[],"relativePath":"api/middleware.md","filePath":"api/middleware.md","lastUpdated":1770798288000}'),e={name:"api/middleware.md"};function t(l,s,h,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",63)])])}const y=i(e,[["render",t]]);export{o as __pageData,y as default}; diff --git a/docs/assets/api_p2p.md.11AL4zie.js b/docs/assets/api_p2p.md.11AL4zie.js deleted file mode 100644 index c2ed136c8..000000000 --- a/docs/assets/api_p2p.md.11AL4zie.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/p2p.md","filePath":"api/p2p.md","lastUpdated":1770717352000}'),p={name:"api/p2p.md"};function r(o,s,c,n,i,d){return t(),a("div")}const f=e(p,[["render",r]]);export{m as __pageData,f as default}; diff --git a/docs/assets/api_p2p.md.11AL4zie.lean.js b/docs/assets/api_p2p.md.11AL4zie.lean.js deleted file mode 100644 index c2ed136c8..000000000 --- a/docs/assets/api_p2p.md.11AL4zie.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/p2p.md","filePath":"api/p2p.md","lastUpdated":1770717352000}'),p={name:"api/p2p.md"};function r(o,s,c,n,i,d){return t(),a("div")}const f=e(p,[["render",r]]);export{m as __pageData,f as default}; diff --git a/docs/assets/api_p2p.md.CYB3Moad.js b/docs/assets/api_p2p.md.CYB3Moad.js new file mode 100644 index 000000000..8eccd2118 --- /dev/null +++ b/docs/assets/api_p2p.md.CYB3Moad.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/p2p.md","filePath":"api/p2p.md","lastUpdated":1770717352000}'),p={name:"api/p2p.md"};function r(o,s,c,i,n,d){return e(),a("div")}const h=t(p,[["render",r]]);export{l as __pageData,h as default}; diff --git a/docs/assets/api_p2p.md.CYB3Moad.lean.js b/docs/assets/api_p2p.md.CYB3Moad.lean.js new file mode 100644 index 000000000..8eccd2118 --- /dev/null +++ b/docs/assets/api_p2p.md.CYB3Moad.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"api/p2p.md","filePath":"api/p2p.md","lastUpdated":1770717352000}'),p={name:"api/p2p.md"};function r(o,s,c,i,n,d){return e(),a("div")}const h=t(p,[["render",r]]);export{l as __pageData,h as default}; diff --git a/docs/assets/api_websocket.md.Dk_6OgmJ.lean.js b/docs/assets/api_websocket.md.Dk_6OgmJ.lean.js deleted file mode 100644 index 1048baddc..000000000 --- a/docs/assets/api_websocket.md.Dk_6OgmJ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"WebSocket API","description":"","frontmatter":{},"headers":[],"relativePath":"api/websocket.md","filePath":"api/websocket.md","lastUpdated":1770798288000}'),t={name:"api/websocket.md"};function l(p,s,h,k,o,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",63)])])}const c=i(t,[["render",l]]);export{E as __pageData,c as default}; diff --git a/docs/assets/api_websocket.md.Dk_6OgmJ.js b/docs/assets/api_websocket.md.WPnZd0iU.js similarity index 82% rename from docs/assets/api_websocket.md.Dk_6OgmJ.js rename to docs/assets/api_websocket.md.WPnZd0iU.js index e9565c5a9..d6ca703d2 100644 --- a/docs/assets/api_websocket.md.Dk_6OgmJ.js +++ b/docs/assets/api_websocket.md.WPnZd0iU.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"WebSocket API","description":"","frontmatter":{},"headers":[],"relativePath":"api/websocket.md","filePath":"api/websocket.md","lastUpdated":1770798288000}'),t={name:"api/websocket.md"};function l(p,s,h,k,o,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

WebSocket API ​

This page documents the WebSocket server API in Vix.

It covers:

  • WebSocket server
  • Event hooks
  • Typed message protocol
  • Broadcast functions
  • Long polling bridge

All examples are minimal and placed inside main().


Server ​

Header:

cpp
#include <vix/websocket.hpp>

Core type:

cpp
vix::websocket::Server

Constructor ​

cpp
Server ws(cfg, executor);

Parameters:

  • cfg → configuration object
  • executor → thread pool executor

Minimal Standalone Example ​

cpp
#include <vix/config/Config.hpp>
+import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"WebSocket API","description":"","frontmatter":{},"headers":[],"relativePath":"api/websocket.md","filePath":"api/websocket.md","lastUpdated":1770798288000}'),t={name:"api/websocket.md"};function l(p,s,h,k,o,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

WebSocket API ​

This page documents the WebSocket server API in Vix.

It covers:

  • WebSocket server
  • Event hooks
  • Typed message protocol
  • Broadcast functions
  • Long polling bridge

All examples are minimal and placed inside main().


Server ​

Header:

cpp
#include <vix/websocket.hpp>

Core type:

cpp
vix::websocket::Server

Constructor ​

cpp
Server ws(cfg, executor);

Parameters:

  • cfg → configuration object
  • executor → thread pool executor

Minimal Standalone Example ​

cpp
#include <vix/config/Config.hpp>
 #include <vix/experimental/ThreadPoolExecutor.hpp>
 #include <vix/websocket.hpp>
 
@@ -39,4 +39,4 @@ import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const E
 });

Broadcast to room ​

cpp
ws.broadcast_room_json("room1", "chat.message", payload);

Long Polling Bridge ​

Header:

cpp
#include <vix/websocket/LongPollingBridge.hpp>

Attach bridge:

cpp
ws.attach_long_polling_bridge(bridge);

Purpose:

  • Fallback when WebSocket is blocked
  • HTTP endpoints simulate WebSocket behavior

HTTP + WS Combined ​

Use helper:

cpp
vix::serve_http_and_ws([](auto& app, auto& ws) {
   // register HTTP routes
   // register WebSocket handlers
-});

This creates a single runtime handling both protocols.


Notes ​

  • listen_blocking() blocks the thread.
  • WebSocket handlers should be short and non-blocking.
  • Use broadcast carefully in high-load scenarios.
  • Use room broadcasting for scalable chat systems.

The WebSocket API is minimal by design.

`,63)])])}const c=i(t,[["render",l]]);export{E as __pageData,c as default}; +});

This creates a single runtime handling both protocols.


Notes ​

  • listen_blocking() blocks the thread.
  • WebSocket handlers should be short and non-blocking.
  • Use broadcast carefully in high-load scenarios.
  • Use room broadcasting for scalable chat systems.

The WebSocket API is minimal by design.

`,63)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/api_websocket.md.WPnZd0iU.lean.js b/docs/assets/api_websocket.md.WPnZd0iU.lean.js new file mode 100644 index 000000000..303ef162f --- /dev/null +++ b/docs/assets/api_websocket.md.WPnZd0iU.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"WebSocket API","description":"","frontmatter":{},"headers":[],"relativePath":"api/websocket.md","filePath":"api/websocket.md","lastUpdated":1770798288000}'),t={name:"api/websocket.md"};function l(p,s,h,k,o,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",63)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/app.BYybgkFJ.js b/docs/assets/app.BYybgkFJ.js new file mode 100644 index 000000000..e15c6d8aa --- /dev/null +++ b/docs/assets/app.BYybgkFJ.js @@ -0,0 +1,61 @@ +var Fl=Object.defineProperty;var Rl=(e,t,n)=>t in e?Fl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ir=(e,t,n)=>Rl(e,typeof t!="symbol"?t+"":t,n);import{M as Dl}from"./chunks/markjs.l6TISjdC.js";import{M as Hl}from"./chunks/minisearch.DigTKvvb.js";/** +* @vue/shared v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function qr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const $e={},yn=[],bt=()=>{},Ni=()=>!1,Qn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Gr=e=>e.startsWith("onUpdate:"),De=Object.assign,zr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Bl=Object.prototype.hasOwnProperty,ke=(e,t)=>Bl.call(e,t),pe=Array.isArray,_n=e=>js(e)==="[object Map]",Mi=e=>js(e)==="[object Set]",ve=e=>typeof e=="function",Ve=e=>typeof e=="string",Mt=e=>typeof e=="symbol",Ee=e=>e!==null&&typeof e=="object",Ii=e=>(Ee(e)||ve(e))&&ve(e.then)&&ve(e.catch),Vi=Object.prototype.toString,js=e=>Vi.call(e),jl=e=>js(e).slice(8,-1),Oi=e=>js(e)==="[object Object]",Ks=e=>Ve(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,nn=qr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Us=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Kl=/-\w/g,at=Us(e=>e.replace(Kl,t=>t.slice(1).toUpperCase())),Ul=/\B([A-Z])/g,zt=Us(e=>e.replace(Ul,"-$1").toLowerCase()),Ws=Us(e=>e.charAt(0).toUpperCase()+e.slice(1)),bs=Us(e=>e?`on${Ws(e)}`:""),jt=(e,t)=>!Object.is(e,t),ys=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Yr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Wl=e=>{const t=Ve(e)?Number(e):NaN;return isNaN(t)?e:t};let Ao;const qs=()=>Ao||(Ao=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Pn(e){if(pe(e)){const t={};for(let n=0;n{if(n){const s=n.split(Gl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function be(e){let t="";if(Ve(e))t=e;else if(pe(e))for(let n=0;n!!(e&&e.__v_isRef===!0),me=e=>Ve(e)?e:e==null?"":pe(e)||Ee(e)&&(e.toString===Vi||!ve(e.toString))?Di(e)?me(e.value):JSON.stringify(e,Hi,2):String(e),Hi=(e,t)=>Di(t)?Hi(e,t.value):_n(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[ar(s,o)+" =>"]=r,n),{})}:Mi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ar(n))}:Mt(t)?ar(t):Ee(t)&&!pe(t)&&!Oi(t)?String(t):t,ar=(e,t="")=>{var n;return Mt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let qe;class Zl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=qe,!t&&qe&&(this.index=(qe.scopes||(qe.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(qe=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Fn){let t=Fn;for(Fn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;On;){let t=On;for(On=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Wi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function qi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Zr(s),ec(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Cr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Gi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Gi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Un)||(e.globalVersion=Un,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Cr(e))))return;e.flags|=2;const t=e.dep,n=Pe,s=ut;Pe=e,ut=!0;try{Wi(e);const r=e.fn(e._value);(t.version===0||jt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Pe=n,ut=s,qi(e),e.flags&=-3}}function Zr(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)Zr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ec(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ut=!0;const zi=[];function Ct(){zi.push(ut),ut=!1}function Lt(){const e=zi.pop();ut=e===void 0?!0:e}function Po(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Pe;Pe=void 0;try{t()}finally{Pe=n}}}let Un=0;class tc{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Gs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Pe||!ut||Pe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Pe)n=this.activeLink=new tc(Pe,this),Pe.deps?(n.prevDep=Pe.depsTail,Pe.depsTail.nextDep=n,Pe.depsTail=n):Pe.deps=Pe.depsTail=n,Yi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Pe.depsTail,n.nextDep=void 0,Pe.depsTail.nextDep=n,Pe.depsTail=n,Pe.deps===n&&(Pe.deps=s)}return n}trigger(t){this.version++,Un++,this.notify(t)}notify(t){Xr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Jr()}}}function Yi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Yi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const $s=new WeakMap,sn=Symbol(""),Lr=Symbol(""),Wn=Symbol("");function Ge(e,t,n){if(ut&&Pe){let s=$s.get(e);s||$s.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Gs),r.map=s,r.key=n),r.track()}}function $t(e,t,n,s,r,o){const i=$s.get(e);if(!i){Un++;return}const a=l=>{l&&l.trigger()};if(Xr(),t==="clear")i.forEach(a);else{const l=pe(e),c=l&&Ks(n);if(l&&n==="length"){const u=Number(s);i.forEach((f,p)=>{(p==="length"||p===Wn||!Mt(p)&&p>=u)&&a(f)})}else switch((n!==void 0||i.has(void 0))&&a(i.get(n)),c&&a(i.get(Wn)),t){case"add":l?c&&a(i.get("length")):(a(i.get(sn)),_n(e)&&a(i.get(Lr)));break;case"delete":l||(a(i.get(sn)),_n(e)&&a(i.get(Lr)));break;case"set":_n(e)&&a(i.get(sn));break}}Jr()}function nc(e,t){const n=$s.get(e);return n&&n.get(t)}function hn(e){const t=we(e);return t===e?t:(Ge(t,"iterate",Wn),st(e)?t:t.map(dt))}function zs(e){return Ge(e=we(e),"iterate",Wn),e}function Dt(e,t){return Nt(e)?En(Kt(e)?dt(t):t):dt(t)}const sc={__proto__:null,[Symbol.iterator](){return cr(this,Symbol.iterator,e=>Dt(this,e))},concat(...e){return hn(this).concat(...e.map(t=>pe(t)?hn(t):t))},entries(){return cr(this,"entries",e=>(e[1]=Dt(this,e[1]),e))},every(e,t){return kt(this,"every",e,t,void 0,arguments)},filter(e,t){return kt(this,"filter",e,t,n=>n.map(s=>Dt(this,s)),arguments)},find(e,t){return kt(this,"find",e,t,n=>Dt(this,n),arguments)},findIndex(e,t){return kt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return kt(this,"findLast",e,t,n=>Dt(this,n),arguments)},findLastIndex(e,t){return kt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return kt(this,"forEach",e,t,void 0,arguments)},includes(...e){return ur(this,"includes",e)},indexOf(...e){return ur(this,"indexOf",e)},join(e){return hn(this).join(e)},lastIndexOf(...e){return ur(this,"lastIndexOf",e)},map(e,t){return kt(this,"map",e,t,void 0,arguments)},pop(){return Nn(this,"pop")},push(...e){return Nn(this,"push",e)},reduce(e,...t){return Co(this,"reduce",e,t)},reduceRight(e,...t){return Co(this,"reduceRight",e,t)},shift(){return Nn(this,"shift")},some(e,t){return kt(this,"some",e,t,void 0,arguments)},splice(...e){return Nn(this,"splice",e)},toReversed(){return hn(this).toReversed()},toSorted(e){return hn(this).toSorted(e)},toSpliced(...e){return hn(this).toSpliced(...e)},unshift(...e){return Nn(this,"unshift",e)},values(){return cr(this,"values",e=>Dt(this,e))}};function cr(e,t,n){const s=zs(e),r=s[t]();return s!==e&&!st(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const rc=Array.prototype;function kt(e,t,n,s,r,o){const i=zs(e),a=i!==e&&!st(e),l=i[t];if(l!==rc[t]){const f=l.apply(e,o);return a?dt(f):f}let c=n;i!==e&&(a?c=function(f,p){return n.call(this,Dt(e,f),p,e)}:n.length>2&&(c=function(f,p){return n.call(this,f,p,e)}));const u=l.call(i,c,s);return a&&r?r(u):u}function Co(e,t,n,s){const r=zs(e);let o=n;return r!==e&&(st(e)?n.length>3&&(o=function(i,a,l){return n.call(this,i,a,l,e)}):o=function(i,a,l){return n.call(this,i,Dt(e,a),l,e)}),r[t](o,...s)}function ur(e,t,n){const s=we(e);Ge(s,"iterate",Wn);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=we(n[0]),s[t](...n)):r}function Nn(e,t,n=[]){Ct(),Xr();const s=we(e)[t].apply(e,n);return Jr(),Lt(),s}const oc=qr("__proto__,__v_isRef,__isVue"),Xi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Mt));function ic(e){Mt(e)||(e=String(e));const t=we(this);return Ge(t,"has",e),t.hasOwnProperty(e)}class Ji{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?mc:ta:o?ea:Qi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=pe(t);if(!r){let l;if(i&&(l=sc[n]))return l;if(n==="hasOwnProperty")return ic}const a=Reflect.get(t,n,Fe(t)?t:s);if((Mt(n)?Xi.has(n):oc(n))||(r||Ge(t,"get",n),o))return a;if(Fe(a)){const l=i&&Ks(n)?a:a.value;return r&&Ee(l)?$n(l):l}return Ee(a)?r?$n(a):xn(a):a}}class Zi extends Ji{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=pe(t)&&Ks(n);if(!this._isShallow){const c=Nt(o);if(!st(s)&&!Nt(s)&&(o=we(o),s=we(s)),!i&&Fe(o)&&!Fe(s))return c||(o.value=s),!0}const a=i?Number(n)e,os=e=>Reflect.getPrototypeOf(e);function fc(e,t,n){return function(...s){const r=this.__v_raw,o=we(r),i=_n(o),a=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,c=r[e](...s),u=n?Nr:t?En:dt;return!t&&Ge(o,"iterate",l?Lr:sn),De(Object.create(c),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:a?[u(f[0]),u(f[1])]:u(f),done:p}}})}}function is(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function dc(e,t){const n={get(r){const o=this.__v_raw,i=we(o),a=we(r);e||(jt(r,a)&&Ge(i,"get",r),Ge(i,"get",a));const{has:l}=os(i),c=t?Nr:e?En:dt;if(l.call(i,r))return c(o.get(r));if(l.call(i,a))return c(o.get(a));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&Ge(we(r),"iterate",sn),r.size},has(r){const o=this.__v_raw,i=we(o),a=we(r);return e||(jt(r,a)&&Ge(i,"has",r),Ge(i,"has",a)),r===a?o.has(r):o.has(r)||o.has(a)},forEach(r,o){const i=this,a=i.__v_raw,l=we(a),c=t?Nr:e?En:dt;return!e&&Ge(l,"iterate",sn),a.forEach((u,f)=>r.call(o,c(u),c(f),i))}};return De(n,e?{add:is("add"),set:is("set"),delete:is("delete"),clear:is("clear")}:{add(r){!t&&!st(r)&&!Nt(r)&&(r=we(r));const o=we(this);return os(o).has.call(o,r)||(o.add(r),$t(o,"add",r,r)),this},set(r,o){!t&&!st(o)&&!Nt(o)&&(o=we(o));const i=we(this),{has:a,get:l}=os(i);let c=a.call(i,r);c||(r=we(r),c=a.call(i,r));const u=l.call(i,r);return i.set(r,o),c?jt(o,u)&&$t(i,"set",r,o):$t(i,"add",r,o),this},delete(r){const o=we(this),{has:i,get:a}=os(o);let l=i.call(o,r);l||(r=we(r),l=i.call(o,r)),a&&a.call(o,r);const c=o.delete(r);return l&&$t(o,"delete",r,void 0),c},clear(){const r=we(this),o=r.size!==0,i=r.clear();return o&&$t(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=fc(r,e,t)}),n}function Qr(e,t){const n=dc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(ke(n,r)&&r in s?n:s,r,o)}const hc={get:Qr(!1,!1)},pc={get:Qr(!1,!0)},vc={get:Qr(!0,!1)};const Qi=new WeakMap,ea=new WeakMap,ta=new WeakMap,mc=new WeakMap;function gc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function bc(e){return e.__v_skip||!Object.isExtensible(e)?0:gc(jl(e))}function xn(e){return Nt(e)?e:eo(e,!1,lc,hc,Qi)}function yc(e){return eo(e,!1,uc,pc,ea)}function $n(e){return eo(e,!0,cc,vc,ta)}function eo(e,t,n,s,r){if(!Ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=bc(e);if(o===0)return e;const i=r.get(e);if(i)return i;const a=new Proxy(e,o===2?s:n);return r.set(e,a),a}function Kt(e){return Nt(e)?Kt(e.__v_raw):!!(e&&e.__v_isReactive)}function Nt(e){return!!(e&&e.__v_isReadonly)}function st(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function we(e){const t=e&&e.__v_raw;return t?we(t):e}function wn(e){return!ke(e,"__v_skip")&&Object.isExtensible(e)&&Fi(e,"__v_skip",!0),e}const dt=e=>Ee(e)?xn(e):e,En=e=>Ee(e)?$n(e):e;function Fe(e){return e?e.__v_isRef===!0:!1}function fe(e){return na(e,!1)}function Oe(e){return na(e,!0)}function na(e,t){return Fe(e)?e:new _c(e,t)}class _c{constructor(t,n){this.dep=new Gs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:we(t),this._value=n?t:dt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||st(t)||Nt(t);t=s?t:we(t),jt(t,n)&&(this._rawValue=t,this._value=s?t:dt(t),this.dep.trigger())}}function w(e){return Fe(e)?e.value:e}function Ie(e){return ve(e)?e():w(e)}const wc={get:(e,t,n)=>t==="__v_raw"?e:w(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Fe(r)&&!Fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function sa(e){return Kt(e)?e:new Proxy(e,wc)}class kc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Gs,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Sc(e){return new kc(e)}class Tc{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=we(t);let r=!0,o=t;if(!pe(t)||!Ks(String(n)))do r=!Ys(o)||st(o);while(r&&(o=o.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=w(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Fe(this._raw[this._key])){const n=this._object[this._key];if(Fe(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return nc(this._raw,this._key)}}class xc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function $c(e,t,n){return Fe(e)?e:ve(e)?new xc(e):Ee(e)&&arguments.length>1?Ec(e,t,n):fe(e)}function Ec(e,t,n){return new Tc(e,t,n)}class Ac{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Gs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Un-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Pe!==this)return Ui(this,!0),!0}get value(){const t=this.dep.track();return Gi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Pc(e,t,n=!1){let s,r;return ve(e)?s=e:(s=e.get,r=e.set),new Ac(s,r,n)}const as={},Es=new WeakMap;let Zt;function Cc(e,t=!1,n=Zt){if(n){let s=Es.get(n);s||Es.set(n,s=[]),s.push(e)}}function Lc(e,t,n=$e){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:a,call:l}=n,c=v=>r?v:st(v)||r===!1||r===0?Et(v,1):Et(v);let u,f,p,y,k=!1,S=!1;if(Fe(e)?(f=()=>e.value,k=st(e)):Kt(e)?(f=()=>c(e),k=!0):pe(e)?(S=!0,k=e.some(v=>Kt(v)||st(v)),f=()=>e.map(v=>{if(Fe(v))return v.value;if(Kt(v))return c(v);if(ve(v))return l?l(v,2):v()})):ve(e)?t?f=l?()=>l(e,2):e:f=()=>{if(p){Ct();try{p()}finally{Lt()}}const v=Zt;Zt=u;try{return l?l(e,3,[y]):e(y)}finally{Zt=v}}:f=bt,t&&r){const v=f,I=r===!0?1/0:r;f=()=>Et(v(),I)}const O=Bi(),N=()=>{u.stop(),O&&O.active&&zr(O.effects,u)};if(o&&t){const v=t;t=(...I)=>{v(...I),N()}}let U=S?new Array(e.length).fill(as):as;const h=v=>{if(!(!(u.flags&1)||!u.dirty&&!v))if(t){const I=u.run();if(r||k||(S?I.some((ee,q)=>jt(ee,U[q])):jt(I,U))){p&&p();const ee=Zt;Zt=u;try{const q=[I,U===as?void 0:S&&U[0]===as?[]:U,y];U=I,l?l(t,3,q):t(...q)}finally{Zt=ee}}}else u.run()};return a&&a(h),u=new ji(f),u.scheduler=i?()=>i(h,!1):h,y=v=>Cc(v,!1,u),p=u.onStop=()=>{const v=Es.get(u);if(v){if(l)l(v,4);else for(const I of v)I();Es.delete(u)}},t?s?h(!0):U=u.run():i?i(h.bind(null,!0),!0):u.run(),N.pause=u.pause.bind(u),N.resume=u.resume.bind(u),N.stop=N,N}function Et(e,t=1/0,n){if(t<=0||!Ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Fe(e))Et(e.value,t,n);else if(pe(e))for(let s=0;s{Et(s,t,n)});else if(Oi(e)){for(const s in e)Et(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Et(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function es(e,t,n,s){try{return s?e(...s):e()}catch(r){ts(r,t,n)}}function ht(e,t,n,s){if(ve(e)){const r=es(e,t,n,s);return r&&Ii(r)&&r.catch(o=>{ts(o,t,n)}),r}if(pe(e)){const r=[];for(let o=0;o>>1,r=Je[s],o=qn(r);o=qn(n)?Je.push(e):Je.splice(Mc(t),0,e),e.flags|=1,oa()}}function oa(){As||(As=ra.then(ia))}function Ic(e){pe(e)?kn.push(...e):Ht&&e.id===-1?Ht.splice(mn+1,0,e):e.flags&1||(kn.push(e),e.flags|=1),oa()}function Lo(e,t,n=mt+1){for(;nqn(n)-qn(s));if(kn.length=0,Ht){Ht.push(...t);return}for(Ht=t,mn=0;mne.id==null?e.flags&2?-1:1/0:e.id;function ia(e){try{for(mt=0;mt{s._d&&Ms(-1);const o=Cs(t);let i;try{i=e(...r)}finally{Cs(o),s._d&&Ms(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function Vc(e,t){if(Ue===null)return e;const n=er(Ue),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&ve(t)?t.call(s&&s.proxy):t}}function la(){return!!(fn()||on)}const Oc=Symbol.for("v-scx"),Fc=()=>ft(Oc);function It(e,t){return Xs(e,null,t)}function so(e,t){return Xs(e,null,{flush:"post"})}function Ce(e,t,n){return Xs(e,t,n)}function Xs(e,t,n=$e){const{immediate:s,deep:r,flush:o,once:i}=n,a=De({},n),l=t&&s||!t&&o!=="post";let c;if(An){if(o==="sync"){const y=Fc();c=y.__watcherHandles||(y.__watcherHandles=[])}else if(!l){const y=()=>{};return y.stop=bt,y.resume=bt,y.pause=bt,y}}const u=Ke;a.call=(y,k,S)=>ht(y,u,k,S);let f=!1;o==="post"?a.scheduler=y=>{Xe(y,u&&u.suspense)}:o!=="sync"&&(f=!0,a.scheduler=(y,k)=>{k?y():to(y)}),a.augmentJob=y=>{t&&(y.flags|=4),f&&(y.flags|=2,u&&(y.id=u.uid,y.i=u))};const p=Lc(e,t,a);return An&&(c?c.push(p):l&&p()),p}function Rc(e,t,n){const s=this.proxy,r=Ve(e)?e.includes(".")?ca(s,e):()=>s[e]:e.bind(s,s);let o;ve(t)?o=t:(o=t.handler,n=t);const i=ss(this),a=Xs(r,o.bind(s),n);return i(),a}function ca(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Rn=e=>e&&(e.disabled||e.disabled===""),No=e=>e&&(e.defer||e.defer===""),Mo=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Io=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Mr=(e,t)=>{const n=e&&e.to;return Ve(n)?t?t(n):null:n},da={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,a,l,c){const{mc:u,pc:f,pbc:p,o:{insert:y,querySelector:k,createText:S,createComment:O}}=c,N=Rn(t.props);let{shapeFlag:U,children:h,dynamicChildren:v}=t;if(e==null){const I=t.el=S(""),ee=t.anchor=S("");y(I,n,s),y(ee,n,s);const q=(E,G)=>{U&16&&u(h,E,G,r,o,i,a,l)},se=()=>{const E=t.target=Mr(t.props,k),G=ha(E,t,S,y);E&&(i!=="svg"&&Mo(E)?i="svg":i!=="mathml"&&Io(E)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(E),N||(q(E,G),_s(t,!1)))};N&&(q(n,ee),_s(t,!0)),No(t.props)?(t.el.__isMounted=!1,Xe(()=>{se(),delete t.el.__isMounted},o)):se()}else{if(No(t.props)&&e.el.__isMounted===!1){Xe(()=>{da.process(e,t,n,s,r,o,i,a,l,c)},o);return}t.el=e.el,t.targetStart=e.targetStart;const I=t.anchor=e.anchor,ee=t.target=e.target,q=t.targetAnchor=e.targetAnchor,se=Rn(e.props),E=se?n:ee,G=se?I:q;if(i==="svg"||Mo(ee)?i="svg":(i==="mathml"||Io(ee))&&(i="mathml"),v?(p(e.dynamicChildren,v,E,r,o,i,a),ao(e,t,!0)):l||f(e,t,E,G,r,o,i,a,!1),N)se?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ls(t,n,I,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const W=t.target=Mr(t.props,k);W&&ls(t,W,null,c,0)}else se&&ls(t,ee,q,c,1);_s(t,N)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:a,anchor:l,targetStart:c,targetAnchor:u,target:f,props:p}=e;if(f&&(r(c),r(u)),o&&r(l),i&16){const y=o||!Rn(p);for(let k=0;k{e.isMounted=!0}),Zs(()=>{e.isUnmounting=!0}),e}const rt=[Function,Array],pa={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:rt,onEnter:rt,onAfterEnter:rt,onEnterCancelled:rt,onBeforeLeave:rt,onLeave:rt,onAfterLeave:rt,onLeaveCancelled:rt,onBeforeAppear:rt,onAppear:rt,onAfterAppear:rt,onAppearCancelled:rt},va=e=>{const t=e.subTree;return t.component?va(t.component):t},jc={name:"BaseTransition",props:pa,setup(e,{slots:t}){const n=fn(),s=Bc();return()=>{const r=t.default&&ba(t.default(),!0);if(!r||!r.length)return;const o=ma(r),i=we(e),{mode:a}=i;if(s.isLeaving)return fr(o);const l=Vo(o);if(!l)return fr(o);let c=Ir(l,i,s,n,f=>c=f);l.type!==je&&Gn(l,c);let u=n.subTree&&Vo(n.subTree);if(u&&u.type!==je&&!Qt(u,l)&&va(n).type!==je){let f=Ir(u,i,s,n);if(Gn(u,f),a==="out-in"&&l.type!==je)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},fr(o);a==="in-out"&&l.type!==je?f.delayLeave=(p,y,k)=>{const S=ga(s,u);S[String(u.key)]=u,p[xt]=()=>{y(),p[xt]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{k(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function ma(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==je){t=n;break}}return t}const Kc=jc;function ga(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ir(e,t,n,s,r){const{appear:o,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:p,onLeave:y,onAfterLeave:k,onLeaveCancelled:S,onBeforeAppear:O,onAppear:N,onAfterAppear:U,onAppearCancelled:h}=t,v=String(e.key),I=ga(n,e),ee=(E,G)=>{E&&ht(E,s,9,G)},q=(E,G)=>{const W=G[1];ee(E,G),pe(E)?E.every(L=>L.length<=1)&&W():E.length<=1&&W()},se={mode:i,persisted:a,beforeEnter(E){let G=l;if(!n.isMounted)if(o)G=O||l;else return;E[xt]&&E[xt](!0);const W=I[v];W&&Qt(e,W)&&W.el[xt]&&W.el[xt](),ee(G,[E])},enter(E){let G=c,W=u,L=f;if(!n.isMounted)if(o)G=N||c,W=U||u,L=h||f;else return;let x=!1;const _=E[cs]=T=>{x||(x=!0,T?ee(L,[E]):ee(W,[E]),se.delayedLeave&&se.delayedLeave(),E[cs]=void 0)};G?q(G,[E,_]):_()},leave(E,G){const W=String(e.key);if(E[cs]&&E[cs](!0),n.isUnmounting)return G();ee(p,[E]);let L=!1;const x=E[xt]=_=>{L||(L=!0,G(),_?ee(S,[E]):ee(k,[E]),E[xt]=void 0,I[W]===e&&delete I[W])};I[W]=e,y?q(y,[E,x]):x()},clone(E){const G=Ir(E,t,n,s,r);return r&&r(G),G}};return se}function fr(e){if(ns(e))return e=Wt(e),e.children=null,e}function Vo(e){if(!ns(e))return fa(e.type)&&e.children?ma(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ve(n.default))return n.default()}}function Gn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Gn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ba(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oSn(k,t&&(pe(t)?t[S]:t),n,s,r));return}if(rn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Sn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?er(s.component):s.el,i=r?null:o,{i:a,r:l}=e,c=t&&t.r,u=a.refs===$e?a.refs={}:a.refs,f=a.setupState,p=we(f),y=f===$e?Ni:k=>ke(p,k);if(c!=null&&c!==l){if(Oo(t),Ve(c))u[c]=null,y(c)&&(f[c]=null);else if(Fe(c)){c.value=null;const k=t;k.k&&(u[k.k]=null)}}if(ve(l))es(l,a,12,[i,u]);else{const k=Ve(l),S=Fe(l);if(k||S){const O=()=>{if(e.f){const N=k?y(l)?f[l]:u[l]:l.value;if(r)pe(N)&&zr(N,o);else if(pe(N))N.includes(o)||N.push(o);else if(k)u[l]=[o],y(l)&&(f[l]=u[l]);else{const U=[o];l.value=U,e.k&&(u[e.k]=U)}}else k?(u[l]=i,y(l)&&(f[l]=i)):S&&(l.value=i,e.k&&(u[e.k]=i))};if(i){const N=()=>{O(),Ls.delete(e)};N.id=-1,Ls.set(e,N),Xe(N,n)}else Oo(e),O()}}}function Oo(e){const t=Ls.get(e);t&&(t.flags|=8,Ls.delete(e))}let Fo=!1;const pn=()=>{Fo||(console.error("Hydration completed but contains mismatches."),Fo=!0)},Uc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Wc=e=>e.namespaceURI.includes("MathML"),us=e=>{if(e.nodeType===1){if(Uc(e))return"svg";if(Wc(e))return"mathml"}},bn=e=>e.nodeType===8;function qc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:o,parentNode:i,remove:a,insert:l,createComment:c}}=e,u=(h,v)=>{if(!v.hasChildNodes()){n(null,h,v),Ps(),v._vnode=h;return}f(v.firstChild,h,null,null,null),Ps(),v._vnode=h},f=(h,v,I,ee,q,se=!1)=>{se=se||!!v.dynamicChildren;const E=bn(h)&&h.data==="[",G=()=>S(h,v,I,ee,q,E),{type:W,ref:L,shapeFlag:x,patchFlag:_}=v;let T=h.nodeType;v.el=h,_===-2&&(se=!1,v.dynamicChildren=null);let P=null;switch(W){case an:T!==3?v.children===""?(l(v.el=r(""),i(h),h),P=h):P=G():(h.data!==v.children&&(pn(),h.data=v.children),P=o(h));break;case je:U(h)?(P=o(h),N(v.el=h.content.firstChild,h,I)):T!==8||E?P=G():P=o(h);break;case Hn:if(E&&(h=o(h),T=h.nodeType),T===1||T===3){P=h;const K=!v.children.length;for(let C=0;C{se=se||!!v.dynamicChildren;const{type:E,props:G,patchFlag:W,shapeFlag:L,dirs:x,transition:_}=v,T=E==="input"||E==="option";if(T||W!==-1){x&>(v,null,I,"created");let P=!1;if(U(h)){P=Da(null,_)&&I&&I.vnode.props&&I.vnode.props.appear;const C=h.content.firstChild;if(P){const z=C.getAttribute("class");z&&(C.$cls=z),_.beforeEnter(C)}N(C,h,I),v.el=h=C}if(L&16&&!(G&&(G.innerHTML||G.textContent))){let C=y(h.firstChild,v,h,I,ee,q,se);for(;C;){fs(h,1)||pn();const z=C;C=C.nextSibling,a(z)}}else if(L&8){let C=v.children;C[0]===` +`&&(h.tagName==="PRE"||h.tagName==="TEXTAREA")&&(C=C.slice(1));const{textContent:z}=h;z!==C&&z!==C.replace(/\r\n|\r/g,` +`)&&(fs(h,0)||pn(),h.textContent=v.children)}if(G){if(T||!se||W&48){const C=h.tagName.includes("-");for(const z in G)(T&&(z.endsWith("value")||z==="indeterminate")||Qn(z)&&!nn(z)||z[0]==="."||C&&!nn(z))&&s(h,z,null,G[z],void 0,I)}else if(G.onClick)s(h,"onClick",null,G.onClick,void 0,I);else if(W&4&&Kt(G.style))for(const C in G.style)G.style[C]}let K;(K=G&&G.onVnodeBeforeMount)&&ot(K,I,v),x&>(v,null,I,"beforeMount"),((K=G&&G.onVnodeMounted)||x||P)&&Ka(()=>{K&&ot(K,I,v),P&&_.enter(h),x&>(v,null,I,"mounted")},ee)}return h.nextSibling},y=(h,v,I,ee,q,se,E)=>{E=E||!!v.dynamicChildren;const G=v.children,W=G.length;for(let L=0;L{const{slotScopeIds:E}=v;E&&(q=q?q.concat(E):E);const G=i(h),W=y(o(h),v,G,I,ee,q,se);return W&&bn(W)&&W.data==="]"?o(v.anchor=W):(pn(),l(v.anchor=c("]"),G,W),W)},S=(h,v,I,ee,q,se)=>{if(fs(h.parentElement,1)||pn(),v.el=null,se){const W=O(h);for(;;){const L=o(h);if(L&&L!==W)a(L);else break}}const E=o(h),G=i(h);return a(h),n(null,v,G,E,I,ee,us(G),q),I&&(I.vnode.el=v.el,Pa(I,v.el)),E},O=(h,v="[",I="]")=>{let ee=0;for(;h;)if(h=o(h),h&&bn(h)&&(h.data===v&&ee++,h.data===I)){if(ee===0)return o(h);ee--}return h},N=(h,v,I)=>{const ee=v.parentNode;ee&&ee.replaceChild(h,v);let q=I;for(;q;)q.vnode.el===v&&(q.vnode.el=q.subTree.el=h),q=q.parent},U=h=>h.nodeType===1&&h.tagName==="TEMPLATE";return[u,f]}const Ro="data-allow-mismatch",Gc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function fs(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Ro);)e=e.parentElement;const n=e&&e.getAttribute(Ro);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Gc[t])}}qs().requestIdleCallback;qs().cancelIdleCallback;function zc(e,t){if(bn(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(bn(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const rn=e=>!!e.type.__asyncLoader;function Yc(e){ve(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:o,timeout:i,suspensible:a=!0,onError:l}=e;let c=null,u,f=0;const p=()=>(f++,c=null,y()),y=()=>{let k;return c||(k=c=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),l)return new Promise((O,N)=>{l(S,()=>O(p()),()=>N(S),f+1)});throw S}).then(S=>k!==c&&c?c:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),u=S,S)))};return oe({name:"AsyncComponentWrapper",__asyncLoader:y,__asyncHydrate(k,S,O){let N=!1;(S.bu||(S.bu=[])).push(()=>N=!0);const U=()=>{N||O()},h=o?()=>{const v=o(U,I=>zc(k,I));v&&(S.bum||(S.bum=[])).push(v)}:U;u?h():y().then(()=>!S.isUnmounted&&h())},get __asyncResolved(){return u},setup(){const k=Ke;if(ro(k),u)return()=>ds(u,k);const S=h=>{c=null,ts(h,k,13,!s)};if(a&&k.suspense||An)return y().then(h=>()=>ds(h,k)).catch(h=>(S(h),()=>s?Q(s,{error:h}):null));const O=fe(!1),N=fe(),U=fe(!!r);return r&&setTimeout(()=>{U.value=!1},r),i!=null&&setTimeout(()=>{if(!O.value&&!N.value){const h=new Error(`Async component timed out after ${i}ms.`);S(h),N.value=h}},i),y().then(()=>{O.value=!0,k.parent&&ns(k.parent.vnode)&&k.parent.update()}).catch(h=>{S(h),N.value=h}),()=>{if(O.value&&u)return ds(u,k);if(N.value&&s)return Q(s,{error:N.value});if(n&&!U.value)return ds(n,k)}}})}function ds(e,t){const{ref:n,props:s,children:r,ce:o}=t.vnode,i=Q(e,s,r);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const ns=e=>e.type.__isKeepAlive;function Xc(e,t){ya(e,"a",t)}function Jc(e,t){ya(e,"da",t)}function ya(e,t,n=Ke){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Js(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ns(r.parent.vnode)&&Zc(s,t,n,r),r=r.parent}}function Zc(e,t,n,s){const r=Js(t,e,s,!0);cn(()=>{zr(s[t],r)},n)}function Js(e,t,n=Ke,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ct();const a=ss(n),l=ht(t,n,e,i);return a(),Lt(),l});return s?r.unshift(o):r.push(o),o}}const Vt=e=>(t,n=Ke)=>{(!An||e==="sp")&&Js(e,(...s)=>t(...s),n)},Qc=Vt("bm"),Be=Vt("m"),eu=Vt("bu"),_a=Vt("u"),Zs=Vt("bum"),cn=Vt("um"),tu=Vt("sp"),nu=Vt("rtg"),su=Vt("rtc");function ru(e,t=Ke){Js("ec",e,t)}const wa="components";function un(e,t){return Sa(wa,e,!0,t)||e}const ka=Symbol.for("v-ndc");function yt(e){return Ve(e)?Sa(wa,e,!1)||e:e||ka}function Sa(e,t,n=!0,s=!1){const r=Ue||Ke;if(r){const o=r.type;{const a=Bu(o,!1);if(a&&(a===t||a===at(t)||a===Ws(at(t))))return o}const i=Do(r[e]||o[e],t)||Do(r.appContext[e],t);return!i&&s?o:i}}function Do(e,t){return e&&(e[t]||e[at(t)]||e[Ws(at(t))])}function Re(e,t,n,s){let r;const o=n,i=pe(e);if(i||Ve(e)){const a=i&&Kt(e);let l=!1,c=!1;a&&(l=!st(e),c=Nt(e),e=zs(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(a,l,void 0,o));else{const a=Object.keys(e);r=new Array(a.length);for(let l=0,c=a.length;l0;return t!=="default"&&(n.name=t),m(),ae(de,null,[Q("slot",n,s&&s())],c?-2:64)}let o=e[t];o&&o._c&&(o._d=!1),m();const i=o&&Ta(o(n)),a=n.key||i&&i.key,l=ae(de,{key:(a&&!Mt(a)?a:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return!r&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function Ta(e){return e.some(t=>Yn(t)?!(t.type===je||t.type===de&&!Ta(t.children)):!0)?e:null}function ou(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:bs(s)]=e[s];return n}const Vr=e=>e?qa(e)?er(e):Vr(e.parent):null,Dn=De(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Vr(e.parent),$root:e=>Vr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>$a(e),$forceUpdate:e=>e.f||(e.f=()=>{to(e.update)}),$nextTick:e=>e.n||(e.n=ct.bind(e.proxy)),$watch:e=>Rc.bind(e)}),dr=(e,t)=>e!==$e&&!e.__isScriptSetup&&ke(e,t),iu={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:a,appContext:l}=e;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(dr(s,t))return i[t]=1,s[t];if(r!==$e&&ke(r,t))return i[t]=2,r[t];if(ke(o,t))return i[t]=3,o[t];if(n!==$e&&ke(n,t))return i[t]=4,n[t];Or&&(i[t]=0)}}const c=Dn[t];let u,f;if(c)return t==="$attrs"&&Ge(e.attrs,"get",""),c(e);if((u=a.__cssModules)&&(u=u[t]))return u;if(n!==$e&&ke(n,t))return i[t]=4,n[t];if(f=l.config.globalProperties,ke(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return dr(r,t)?(r[t]=n,!0):s!==$e&&ke(s,t)?(s[t]=n,!0):ke(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},a){let l;return!!(n[a]||e!==$e&&a[0]!=="$"&&ke(e,a)||dr(t,a)||ke(o,a)||ke(s,a)||ke(Dn,a)||ke(r.config.globalProperties,a)||(l=i.__cssModules)&&l[a])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ke(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function au(){return lu().slots}function lu(e){const t=fn();return t.setupContext||(t.setupContext=za(t))}function Ho(e){return pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Or=!0;function cu(e){const t=$a(e),n=e.proxy,s=e.ctx;Or=!1,t.beforeCreate&&Bo(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:a,provide:l,inject:c,created:u,beforeMount:f,mounted:p,beforeUpdate:y,updated:k,activated:S,deactivated:O,beforeDestroy:N,beforeUnmount:U,destroyed:h,unmounted:v,render:I,renderTracked:ee,renderTriggered:q,errorCaptured:se,serverPrefetch:E,expose:G,inheritAttrs:W,components:L,directives:x,filters:_}=t;if(c&&uu(c,s,null),i)for(const K in i){const C=i[K];ve(C)&&(s[K]=C.bind(n))}if(r){const K=r.call(n,n);Ee(K)&&(e.data=xn(K))}if(Or=!0,o)for(const K in o){const C=o[K],z=ve(C)?C.bind(n,n):ve(C.get)?C.get.bind(n,n):bt,re=!ve(C)&&ve(C.set)?C.set.bind(n):bt,j=Y({get:z,set:re});Object.defineProperty(s,K,{enumerable:!0,configurable:!0,get:()=>j.value,set:V=>j.value=V})}if(a)for(const K in a)xa(a[K],s,n,K);if(l){const K=ve(l)?l.call(n):l;Reflect.ownKeys(K).forEach(C=>{no(C,K[C])})}u&&Bo(u,e,"c");function P(K,C){pe(C)?C.forEach(z=>K(z.bind(n))):C&&K(C.bind(n))}if(P(Qc,f),P(Be,p),P(eu,y),P(_a,k),P(Xc,S),P(Jc,O),P(ru,se),P(su,ee),P(nu,q),P(Zs,U),P(cn,v),P(tu,E),pe(G))if(G.length){const K=e.exposed||(e.exposed={});G.forEach(C=>{Object.defineProperty(K,C,{get:()=>n[C],set:z=>n[C]=z,enumerable:!0})})}else e.exposed||(e.exposed={});I&&e.render===bt&&(e.render=I),W!=null&&(e.inheritAttrs=W),L&&(e.components=L),x&&(e.directives=x),E&&ro(e)}function uu(e,t,n=bt){pe(e)&&(e=Fr(e));for(const s in e){const r=e[s];let o;Ee(r)?"default"in r?o=ft(r.from||s,r.default,!0):o=ft(r.from||s):o=ft(r),Fe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function Bo(e,t,n){ht(pe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function xa(e,t,n,s){let r=s.includes(".")?ca(n,s):()=>n[s];if(Ve(e)){const o=t[e];ve(o)&&Ce(r,o)}else if(ve(e))Ce(r,e.bind(n));else if(Ee(e))if(pe(e))e.forEach(o=>xa(o,t,n,s));else{const o=ve(e.handler)?e.handler.bind(n):t[e.handler];ve(o)&&Ce(r,o,e)}}function $a(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,a=o.get(t);let l;return a?l=a:!r.length&&!n&&!s?l=t:(l={},r.length&&r.forEach(c=>Ns(l,c,i,!0)),Ns(l,t,i)),Ee(t)&&o.set(t,l),l}function Ns(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Ns(e,o,n,!0),r&&r.forEach(i=>Ns(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const a=fu[i]||n&&n[i];e[i]=a?a(e[i],t[i]):t[i]}return e}const fu={data:jo,props:Ko,emits:Ko,methods:Vn,computed:Vn,beforeCreate:Ye,created:Ye,beforeMount:Ye,mounted:Ye,beforeUpdate:Ye,updated:Ye,beforeDestroy:Ye,beforeUnmount:Ye,destroyed:Ye,unmounted:Ye,activated:Ye,deactivated:Ye,errorCaptured:Ye,serverPrefetch:Ye,components:Vn,directives:Vn,watch:hu,provide:jo,inject:du};function jo(e,t){return t?e?function(){return De(ve(e)?e.call(this,this):e,ve(t)?t.call(this,this):t)}:t:e}function du(e,t){return Vn(Fr(e),Fr(t))}function Fr(e){if(pe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${at(t)}Modifiers`]||e[`${zt(t)}Modifiers`];function gu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||$e;let r=n;const o=t.startsWith("update:"),i=o&&mu(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>Ve(u)?u.trim():u)),i.number&&(r=n.map(Yr)));let a,l=s[a=bs(t)]||s[a=bs(at(t))];!l&&o&&(l=s[a=bs(zt(t))]),l&&ht(l,e,6,r);const c=s[a+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,ht(c,e,6,r)}}const bu=new WeakMap;function Aa(e,t,n=!1){const s=n?bu:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},a=!1;if(!ve(e)){const l=c=>{const u=Aa(c,t,!0);u&&(a=!0,De(i,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!o&&!a?(Ee(e)&&s.set(e,null),null):(pe(o)?o.forEach(l=>i[l]=null):De(i,o),Ee(e)&&s.set(e,i),i)}function Qs(e,t){return!e||!Qn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ke(e,t[0].toLowerCase()+t.slice(1))||ke(e,zt(t))||ke(e,t))}function hr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:a,emit:l,render:c,renderCache:u,props:f,data:p,setupState:y,ctx:k,inheritAttrs:S}=e,O=Cs(e);let N,U;try{if(n.shapeFlag&4){const v=r||s,I=v;N=it(c.call(I,v,u,f,y,p,k)),U=a}else{const v=t;N=it(v.length>1?v(f,{attrs:a,slots:i,emit:l}):v(f,null)),U=t.props?a:yu(a)}}catch(v){Bn.length=0,ts(v,e,1),N=Q(je)}let h=N;if(U&&S!==!1){const v=Object.keys(U),{shapeFlag:I}=h;v.length&&I&7&&(o&&v.some(Gr)&&(U=_u(U,o)),h=Wt(h,U,!1,!0))}return n.dirs&&(h=Wt(h,null,!1,!0),h.dirs=h.dirs?h.dirs.concat(n.dirs):n.dirs),n.transition&&Gn(h,n.transition),N=h,Cs(O),N}const yu=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qn(n))&&((t||(t={}))[n]=e[n]);return t},_u=(e,t)=>{const n={};for(const s in e)(!Gr(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function wu(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:a,patchFlag:l}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return s?Uo(s,i,c):!!i;if(l&8){const u=t.dynamicProps;for(let f=0;fObject.create(Ca),Na=e=>Object.getPrototypeOf(e)===Ca;function ku(e,t,n,s=!1){const r={},o=La();e.propsDefaults=Object.create(null),Ma(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:yc(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function Su(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,a=we(r),[l]=e.propsOptions;let c=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[p,y]=Ia(f,t,!0);De(i,p),y&&a.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!l)return Ee(e)&&s.set(e,yn),yn;if(pe(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",io=e=>pe(e)?e.map(it):[it(e)],xu=(e,t,n)=>{if(t._n)return t;const s=B((...r)=>io(t(...r)),n);return s._c=!1,s},Va=(e,t,n)=>{const s=e._ctx;for(const r in e){if(oo(r))continue;const o=e[r];if(ve(o))t[r]=xu(r,o,s);else if(o!=null){const i=io(o);t[r]=()=>i}}},Oa=(e,t)=>{const n=io(t);e.slots.default=()=>n},Fa=(e,t,n)=>{for(const s in t)(n||!oo(s))&&(e[s]=t[s])},$u=(e,t,n)=>{const s=e.slots=La();if(e.vnode.shapeFlag&32){const r=t._;r?(Fa(s,t,n),n&&Fi(s,"_",r,!0)):Va(t,s)}else t&&Oa(e,t)},Eu=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=$e;if(s.shapeFlag&32){const a=t._;a?n&&a===1?o=!1:Fa(r,t,n):(o=!t.$stable,Va(t,r)),i=t}else t&&(Oa(e,t),i={default:1});if(o)for(const a in r)!oo(a)&&i[a]==null&&delete r[a]},Xe=Ka;function Au(e){return Ra(e)}function Pu(e){return Ra(e,qc)}function Ra(e,t){const n=qs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:a,createComment:l,setText:c,setElementText:u,parentNode:f,nextSibling:p,setScopeId:y=bt,insertStaticContent:k}=e,S=(d,g,A,D=null,F=null,R=null,J=void 0,Z=null,X=!!g.dynamicChildren)=>{if(d===g)return;d&&!Qt(d,g)&&(D=Ne(d),V(d,F,R,!0),d=null),g.patchFlag===-2&&(X=!1,g.dynamicChildren=null);const{type:H,ref:le,shapeFlag:te}=g;switch(H){case an:O(d,g,A,D);break;case je:N(d,g,A,D);break;case Hn:d==null&&U(g,A,D,J);break;case de:L(d,g,A,D,F,R,J,Z,X);break;default:te&1?I(d,g,A,D,F,R,J,Z,X):te&6?x(d,g,A,D,F,R,J,Z,X):(te&64||te&128)&&H.process(d,g,A,D,F,R,J,Z,X,Ze)}le!=null&&F?Sn(le,d&&d.ref,R,g||d,!g):le==null&&d&&d.ref!=null&&Sn(d.ref,null,R,d,!0)},O=(d,g,A,D)=>{if(d==null)s(g.el=a(g.children),A,D);else{const F=g.el=d.el;g.children!==d.children&&c(F,g.children)}},N=(d,g,A,D)=>{d==null?s(g.el=l(g.children||""),A,D):g.el=d.el},U=(d,g,A,D)=>{[d.el,d.anchor]=k(d.children,g,A,D,d.el,d.anchor)},h=({el:d,anchor:g},A,D)=>{let F;for(;d&&d!==g;)F=p(d),s(d,A,D),d=F;s(g,A,D)},v=({el:d,anchor:g})=>{let A;for(;d&&d!==g;)A=p(d),r(d),d=A;r(g)},I=(d,g,A,D,F,R,J,Z,X)=>{if(g.type==="svg"?J="svg":g.type==="math"&&(J="mathml"),d==null)ee(g,A,D,F,R,J,Z,X);else{const H=d.el&&d.el._isVueCE?d.el:null;try{H&&H._beginPatch(),E(d,g,F,R,J,Z,X)}finally{H&&H._endPatch()}}},ee=(d,g,A,D,F,R,J,Z)=>{let X,H;const{props:le,shapeFlag:te,transition:ie,dirs:he}=d;if(X=d.el=i(d.type,R,le&&le.is,le),te&8?u(X,d.children):te&16&&se(d.children,X,null,D,F,pr(d,R),J,Z),he&>(d,null,D,"created"),q(X,d,d.scopeId,J,D),le){for(const Ae in le)Ae!=="value"&&!nn(Ae)&&o(X,Ae,null,le[Ae],R,D);"value"in le&&o(X,"value",null,le.value,R),(H=le.onVnodeBeforeMount)&&ot(H,D,d)}he&>(d,null,D,"beforeMount");const ye=Da(F,ie);ye&&ie.beforeEnter(X),s(X,g,A),((H=le&&le.onVnodeMounted)||ye||he)&&Xe(()=>{H&&ot(H,D,d),ye&&ie.enter(X),he&>(d,null,D,"mounted")},F)},q=(d,g,A,D,F)=>{if(A&&y(d,A),D)for(let R=0;R{for(let H=X;H{const Z=g.el=d.el;let{patchFlag:X,dynamicChildren:H,dirs:le}=g;X|=d.patchFlag&16;const te=d.props||$e,ie=g.props||$e;let he;if(A&&Yt(A,!1),(he=ie.onVnodeBeforeUpdate)&&ot(he,A,g,d),le&>(g,d,A,"beforeUpdate"),A&&Yt(A,!0),(te.innerHTML&&ie.innerHTML==null||te.textContent&&ie.textContent==null)&&u(Z,""),H?G(d.dynamicChildren,H,Z,A,D,pr(g,F),R):J||C(d,g,Z,null,A,D,pr(g,F),R,!1),X>0){if(X&16)W(Z,te,ie,A,F);else if(X&2&&te.class!==ie.class&&o(Z,"class",null,ie.class,F),X&4&&o(Z,"style",te.style,ie.style,F),X&8){const ye=g.dynamicProps;for(let Ae=0;Ae{he&&ot(he,A,g,d),le&>(g,d,A,"updated")},D)},G=(d,g,A,D,F,R,J)=>{for(let Z=0;Z{if(g!==A){if(g!==$e)for(const R in g)!nn(R)&&!(R in A)&&o(d,R,g[R],null,F,D);for(const R in A){if(nn(R))continue;const J=A[R],Z=g[R];J!==Z&&R!=="value"&&o(d,R,Z,J,F,D)}"value"in A&&o(d,"value",g.value,A.value,F)}},L=(d,g,A,D,F,R,J,Z,X)=>{const H=g.el=d?d.el:a(""),le=g.anchor=d?d.anchor:a("");let{patchFlag:te,dynamicChildren:ie,slotScopeIds:he}=g;he&&(Z=Z?Z.concat(he):he),d==null?(s(H,A,D),s(le,A,D),se(g.children||[],A,le,F,R,J,Z,X)):te>0&&te&64&&ie&&d.dynamicChildren&&d.dynamicChildren.length===ie.length?(G(d.dynamicChildren,ie,A,F,R,J,Z),(g.key!=null||F&&g===F.subTree)&&ao(d,g,!0)):C(d,g,A,le,F,R,J,Z,X)},x=(d,g,A,D,F,R,J,Z,X)=>{g.slotScopeIds=Z,d==null?g.shapeFlag&512?F.ctx.activate(g,A,D,J,X):_(g,A,D,F,R,J,X):T(d,g,X)},_=(d,g,A,D,F,R,J)=>{const Z=d.component=Fu(d,D,F);if(ns(d)&&(Z.ctx.renderer=Ze),Ru(Z,!1,J),Z.asyncDep){if(F&&F.registerDep(Z,P,J),!d.el){const X=Z.subTree=Q(je);N(null,X,g,A),d.placeholder=X.el}}else P(Z,d,g,A,F,R,J)},T=(d,g,A)=>{const D=g.component=d.component;if(wu(d,g,A))if(D.asyncDep&&!D.asyncResolved){K(D,g,A);return}else D.next=g,D.update();else g.el=d.el,D.vnode=g},P=(d,g,A,D,F,R,J)=>{const Z=()=>{if(d.isMounted){let{next:te,bu:ie,u:he,parent:ye,vnode:Ae}=d;{const et=Ha(d);if(et){te&&(te.el=Ae.el,K(d,te,J)),et.asyncDep.then(()=>{d.isUnmounted||Z()});return}}let Se=te,Qe;Yt(d,!1),te?(te.el=Ae.el,K(d,te,J)):te=Ae,ie&&ys(ie),(Qe=te.props&&te.props.onVnodeBeforeUpdate)&&ot(Qe,ye,te,Ae),Yt(d,!0);const We=hr(d),lt=d.subTree;d.subTree=We,S(lt,We,f(lt.el),Ne(lt),d,F,R),te.el=We.el,Se===null&&Pa(d,We.el),he&&Xe(he,F),(Qe=te.props&&te.props.onVnodeUpdated)&&Xe(()=>ot(Qe,ye,te,Ae),F)}else{let te;const{el:ie,props:he}=g,{bm:ye,m:Ae,parent:Se,root:Qe,type:We}=d,lt=rn(g);if(Yt(d,!1),ye&&ys(ye),!lt&&(te=he&&he.onVnodeBeforeMount)&&ot(te,Se,g),Yt(d,!0),ie&&dn){const et=()=>{d.subTree=hr(d),dn(ie,d.subTree,d,F,null)};lt&&We.__asyncHydrate?We.__asyncHydrate(ie,d,et):et()}else{Qe.ce&&Qe.ce._def.shadowRoot!==!1&&Qe.ce._injectChildStyle(We);const et=d.subTree=hr(d);S(null,et,A,D,d,F,R),g.el=et.el}if(Ae&&Xe(Ae,F),!lt&&(te=he&&he.onVnodeMounted)){const et=g;Xe(()=>ot(te,Se,et),F)}(g.shapeFlag&256||Se&&rn(Se.vnode)&&Se.vnode.shapeFlag&256)&&d.a&&Xe(d.a,F),d.isMounted=!0,g=A=D=null}};d.scope.on();const X=d.effect=new ji(Z);d.scope.off();const H=d.update=X.run.bind(X),le=d.job=X.runIfDirty.bind(X);le.i=d,le.id=d.uid,X.scheduler=()=>to(le),Yt(d,!0),H()},K=(d,g,A)=>{g.component=d;const D=d.vnode.props;d.vnode=g,d.next=null,Su(d,g.props,D,A),Eu(d,g.children,A),Ct(),Lo(d),Lt()},C=(d,g,A,D,F,R,J,Z,X=!1)=>{const H=d&&d.children,le=d?d.shapeFlag:0,te=g.children,{patchFlag:ie,shapeFlag:he}=g;if(ie>0){if(ie&128){re(H,te,A,D,F,R,J,Z,X);return}else if(ie&256){z(H,te,A,D,F,R,J,Z,X);return}}he&8?(le&16&&xe(H,F,R),te!==H&&u(A,te)):le&16?he&16?re(H,te,A,D,F,R,J,Z,X):xe(H,F,R,!0):(le&8&&u(A,""),he&16&&se(te,A,D,F,R,J,Z,X))},z=(d,g,A,D,F,R,J,Z,X)=>{d=d||yn,g=g||yn;const H=d.length,le=g.length,te=Math.min(H,le);let ie;for(ie=0;iele?xe(d,F,R,!0,!1,te):se(g,A,D,F,R,J,Z,X,te)},re=(d,g,A,D,F,R,J,Z,X)=>{let H=0;const le=g.length;let te=d.length-1,ie=le-1;for(;H<=te&&H<=ie;){const he=d[H],ye=g[H]=X?Bt(g[H]):it(g[H]);if(Qt(he,ye))S(he,ye,A,null,F,R,J,Z,X);else break;H++}for(;H<=te&&H<=ie;){const he=d[te],ye=g[ie]=X?Bt(g[ie]):it(g[ie]);if(Qt(he,ye))S(he,ye,A,null,F,R,J,Z,X);else break;te--,ie--}if(H>te){if(H<=ie){const he=ie+1,ye=heie)for(;H<=te;)V(d[H],F,R,!0),H++;else{const he=H,ye=H,Ae=new Map;for(H=ye;H<=ie;H++){const tt=g[H]=X?Bt(g[H]):it(g[H]);tt.key!=null&&Ae.set(tt.key,H)}let Se,Qe=0;const We=ie-ye+1;let lt=!1,et=0;const Ln=new Array(We);for(H=0;H=We){V(tt,F,R,!0);continue}let vt;if(tt.key!=null)vt=Ae.get(tt.key);else for(Se=ye;Se<=ie;Se++)if(Ln[Se-ye]===0&&Qt(tt,g[Se])){vt=Se;break}vt===void 0?V(tt,F,R,!0):(Ln[vt-ye]=H+1,vt>=et?et=vt:lt=!0,S(tt,g[vt],A,null,F,R,J,Z,X),Qe++)}const xo=lt?Cu(Ln):yn;for(Se=xo.length-1,H=We-1;H>=0;H--){const tt=ye+H,vt=g[tt],$o=g[tt+1],Eo=tt+1{const{el:R,type:J,transition:Z,children:X,shapeFlag:H}=d;if(H&6){j(d.component.subTree,g,A,D);return}if(H&128){d.suspense.move(g,A,D);return}if(H&64){J.move(d,g,A,Ze);return}if(J===de){s(R,g,A);for(let te=0;teZ.enter(R),F);else{const{leave:te,delayLeave:ie,afterLeave:he}=Z,ye=()=>{d.ctx.isUnmounted?r(R):s(R,g,A)},Ae=()=>{R._isLeaving&&R[xt](!0),te(R,()=>{ye(),he&&he()})};ie?ie(R,ye,Ae):Ae()}else s(R,g,A)},V=(d,g,A,D=!1,F=!1)=>{const{type:R,props:J,ref:Z,children:X,dynamicChildren:H,shapeFlag:le,patchFlag:te,dirs:ie,cacheIndex:he}=d;if(te===-2&&(F=!1),Z!=null&&(Ct(),Sn(Z,null,A,d,!0),Lt()),he!=null&&(g.renderCache[he]=void 0),le&256){g.ctx.deactivate(d);return}const ye=le&1&&ie,Ae=!rn(d);let Se;if(Ae&&(Se=J&&J.onVnodeBeforeUnmount)&&ot(Se,g,d),le&6)Le(d.component,A,D);else{if(le&128){d.suspense.unmount(A,D);return}ye&>(d,null,g,"beforeUnmount"),le&64?d.type.remove(d,g,A,Ze,D):H&&!H.hasOnce&&(R!==de||te>0&&te&64)?xe(H,g,A,!1,!0):(R===de&&te&384||!F&&le&16)&&xe(X,g,A),D&&ce(d)}(Ae&&(Se=J&&J.onVnodeUnmounted)||ye)&&Xe(()=>{Se&&ot(Se,g,d),ye&>(d,null,g,"unmounted")},A)},ce=d=>{const{type:g,el:A,anchor:D,transition:F}=d;if(g===de){Te(A,D);return}if(g===Hn){v(d);return}const R=()=>{r(A),F&&!F.persisted&&F.afterLeave&&F.afterLeave()};if(d.shapeFlag&1&&F&&!F.persisted){const{leave:J,delayLeave:Z}=F,X=()=>J(A,R);Z?Z(d.el,R,X):X()}else R()},Te=(d,g)=>{let A;for(;d!==g;)A=p(d),r(d),d=A;r(g)},Le=(d,g,A)=>{const{bum:D,scope:F,job:R,subTree:J,um:Z,m:X,a:H}=d;qo(X),qo(H),D&&ys(D),F.stop(),R&&(R.flags|=8,V(J,d,g,A)),Z&&Xe(Z,g),Xe(()=>{d.isUnmounted=!0},g)},xe=(d,g,A,D=!1,F=!1,R=0)=>{for(let J=R;J{if(d.shapeFlag&6)return Ne(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const g=p(d.anchor||d.el),A=g&&g[ua];return A?p(A):g};let _e=!1;const He=(d,g,A)=>{let D;d==null?g._vnode&&(V(g._vnode,null,null,!0),D=g._vnode.component):S(g._vnode||null,d,g,null,null,null,A),g._vnode=d,_e||(_e=!0,Lo(D),Ps(),_e=!1)},Ze={p:S,um:V,m:j,r:ce,mt:_,mc:se,pc:C,pbc:G,n:Ne,o:e};let Ft,dn;return t&&([Ft,dn]=t(Ze)),{render:He,hydrate:Ft,createApp:vu(He,Ft)}}function pr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Yt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Da(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ao(e,t,n=!1){const s=e.children,r=t.children;if(pe(s)&&pe(r))for(let o=0;o>1,e[n[a]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Ha(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ha(t)}function qo(e){if(e)for(let t=0;te.__isSuspense;function Ka(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):Ic(e)}const de=Symbol.for("v-fgt"),an=Symbol.for("v-txt"),je=Symbol.for("v-cmt"),Hn=Symbol.for("v-stc"),Bn=[];let nt=null;function m(e=!1){Bn.push(nt=e?null:[])}function Lu(){Bn.pop(),nt=Bn[Bn.length-1]||null}let zn=1;function Ms(e,t=!1){zn+=e,e<0&&nt&&t&&(nt.hasOnce=!0)}function Ua(e){return e.dynamicChildren=zn>0?nt||yn:null,Lu(),zn>0&&nt&&nt.push(e),e}function $(e,t,n,s,r,o){return Ua(b(e,t,n,s,r,o,!0))}function ae(e,t,n,s,r){return Ua(Q(e,t,n,s,r,!0))}function Yn(e){return e?e.__v_isVNode===!0:!1}function Qt(e,t){return e.type===t.type&&e.key===t.key}const Wa=({key:e})=>e??null,ws=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ve(e)||Fe(e)||ve(e)?{i:Ue,r:e,k:t,f:!!n}:e:null);function b(e,t=null,n=null,s=0,r=null,o=e===de?0:1,i=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Wa(t),ref:t&&ws(t),scopeId:aa,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ue};return a?(lo(l,n),o&128&&e.normalize(l)):n&&(l.shapeFlag|=Ve(n)?8:16),zn>0&&!i&&nt&&(l.patchFlag>0||o&6)&&l.patchFlag!==32&&nt.push(l),l}const Q=Nu;function Nu(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===ka)&&(e=je),Yn(e)){const a=Wt(e,t,!0);return n&&lo(a,n),zn>0&&!o&&nt&&(a.shapeFlag&6?nt[nt.indexOf(e)]=a:nt.push(a)),a.patchFlag=-2,a}if(ju(e)&&(e=e.__vccOpts),t){t=Mu(t);let{class:a,style:l}=t;a&&!Ve(a)&&(t.class=be(a)),Ee(l)&&(Ys(l)&&!pe(l)&&(l=De({},l)),t.style=Pn(l))}const i=Ve(e)?1:ja(e)?128:fa(e)?64:Ee(e)?4:ve(e)?2:0;return b(e,t,n,s,r,i,o,!0)}function Mu(e){return e?Ys(e)||Na(e)?De({},e):e:null}function Wt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:a,transition:l}=e,c=t?Pt(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Wa(c),ref:t&&t.ref?n&&o?pe(o)?o.concat(ws(t)):[o,ws(t)]:ws(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==de?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wt(e.ssContent),ssFallback:e.ssFallback&&Wt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&s&&Gn(u,l.clone(u)),u}function ze(e=" ",t=0){return Q(an,null,e,t)}function Iu(e,t){const n=Q(Hn,null,e);return n.staticCount=t,n}function ne(e="",t=!1){return t?(m(),ae(je,null,e)):Q(je,null,e)}function it(e){return e==null||typeof e=="boolean"?Q(je):pe(e)?Q(de,null,e.slice()):Yn(e)?Bt(e):Q(an,null,String(e))}function Bt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Wt(e)}function lo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),lo(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Na(t)?t._ctx=Ue:r===3&&Ue&&(Ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ve(t)?(t={default:t,_ctx:Ue},n=32):(t=String(t),s&64?(n=16,t=[ze(t)]):n=8);e.children=t,e.shapeFlag|=n}function Pt(...e){const t={};for(let n=0;nKe||Ue;let Is,Dr;{const e=qs(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Is=t("__VUE_INSTANCE_SETTERS__",n=>Ke=n),Dr=t("__VUE_SSR_SETTERS__",n=>An=n)}const ss=e=>{const t=Ke;return Is(e),e.scope.on(),()=>{e.scope.off(),Is(t)}},Go=()=>{Ke&&Ke.scope.off(),Is(null)};function qa(e){return e.vnode.shapeFlag&4}let An=!1;function Ru(e,t=!1,n=!1){t&&Dr(t);const{props:s,children:r}=e.vnode,o=qa(e);ku(e,s,o,t),$u(e,r,n||t);const i=o?Du(e,t):void 0;return t&&Dr(!1),i}function Du(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,iu);const{setup:s}=n;if(s){Ct();const r=e.setupContext=s.length>1?za(e):null,o=ss(e),i=es(s,e,0,[e.props,r]),a=Ii(i);if(Lt(),o(),(a||e.sp)&&!rn(e)&&ro(e),a){if(i.then(Go,Go),t)return i.then(l=>{zo(e,l)}).catch(l=>{ts(l,e,0)});e.asyncDep=i}else zo(e,i)}else Ga(e)}function zo(e,t,n){ve(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ee(t)&&(e.setupState=sa(t)),Ga(e)}function Ga(e,t,n){const s=e.type;e.render||(e.render=s.render||bt);{const r=ss(e);Ct();try{cu(e)}finally{Lt(),r()}}}const Hu={get(e,t){return Ge(e,"get",""),e[t]}};function za(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Hu),slots:e.slots,emit:e.emit,expose:t}}function er(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(sa(wn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Dn)return Dn[n](e)},has(t,n){return n in t||n in Dn}})):e.proxy}function Bu(e,t=!0){return ve(e)?e.displayName||e.name:e.name||t&&e.__name}function ju(e){return ve(e)&&"__vccOpts"in e}const Y=(e,t)=>Pc(e,t,An);function Vs(e,t,n){try{Ms(-1);const s=arguments.length;return s===2?Ee(t)&&!pe(t)?Yn(t)?Q(e,null,[t]):Q(e,t):Q(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Yn(n)&&(n=[n]),Q(e,t,n))}finally{Ms(1)}}const Ku="3.5.27";/** +* @vue/runtime-dom v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Hr;const Yo=typeof window<"u"&&window.trustedTypes;if(Yo)try{Hr=Yo.createPolicy("vue",{createHTML:e=>e})}catch{}const Ya=Hr?e=>Hr.createHTML(e):e=>e,Uu="http://www.w3.org/2000/svg",Wu="http://www.w3.org/1998/Math/MathML",Tt=typeof document<"u"?document:null,Xo=Tt&&Tt.createElement("template"),qu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Tt.createElementNS(Uu,e):t==="mathml"?Tt.createElementNS(Wu,e):n?Tt.createElement(e,{is:n}):Tt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Tt.createTextNode(e),createComment:e=>Tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{Xo.innerHTML=Ya(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const a=Xo.content;if(s==="svg"||s==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Rt="transition",Mn="animation",Xn=Symbol("_vtc"),Xa={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Gu=De({},pa,Xa),zu=e=>(e.displayName="Transition",e.props=Gu,e),co=zu((e,{slots:t})=>Vs(Kc,Yu(e),t)),Xt=(e,t=[])=>{pe(e)?e.forEach(n=>n(...t)):e&&e(...t)},Jo=e=>e?pe(e)?e.some(t=>t.length>1):e.length>1:!1;function Yu(e){const t={};for(const L in e)L in Xa||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:l=o,appearActiveClass:c=i,appearToClass:u=a,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,k=Xu(r),S=k&&k[0],O=k&&k[1],{onBeforeEnter:N,onEnter:U,onEnterCancelled:h,onLeave:v,onLeaveCancelled:I,onBeforeAppear:ee=N,onAppear:q=U,onAppearCancelled:se=h}=t,E=(L,x,_,T)=>{L._enterCancelled=T,Jt(L,x?u:a),Jt(L,x?c:i),_&&_()},G=(L,x)=>{L._isLeaving=!1,Jt(L,f),Jt(L,y),Jt(L,p),x&&x()},W=L=>(x,_)=>{const T=L?q:U,P=()=>E(x,L,_);Xt(T,[x,P]),Zo(()=>{Jt(x,L?l:o),St(x,L?u:a),Jo(T)||Qo(x,s,S,P)})};return De(t,{onBeforeEnter(L){Xt(N,[L]),St(L,o),St(L,i)},onBeforeAppear(L){Xt(ee,[L]),St(L,l),St(L,c)},onEnter:W(!1),onAppear:W(!0),onLeave(L,x){L._isLeaving=!0;const _=()=>G(L,x);St(L,f),L._enterCancelled?(St(L,p),ni(L)):(ni(L),St(L,p)),Zo(()=>{L._isLeaving&&(Jt(L,f),St(L,y),Jo(v)||Qo(L,s,O,_))}),Xt(v,[L,_])},onEnterCancelled(L){E(L,!1,void 0,!0),Xt(h,[L])},onAppearCancelled(L){E(L,!0,void 0,!0),Xt(se,[L])},onLeaveCancelled(L){G(L),Xt(I,[L])}})}function Xu(e){if(e==null)return null;if(Ee(e))return[vr(e.enter),vr(e.leave)];{const t=vr(e);return[t,t]}}function vr(e){return Wl(e)}function St(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Xn]||(e[Xn]=new Set)).add(t)}function Jt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Xn];n&&(n.delete(t),n.size||(e[Xn]=void 0))}function Zo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Ju=0;function Qo(e,t,n,s){const r=e._endId=++Ju,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:a,propCount:l}=Zu(e,t);if(!i)return s();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,p),o()},p=y=>{y.target===e&&++u>=l&&f()};setTimeout(()=>{u(n[k]||"").split(", "),r=s(`${Rt}Delay`),o=s(`${Rt}Duration`),i=ei(r,o),a=s(`${Mn}Delay`),l=s(`${Mn}Duration`),c=ei(a,l);let u=null,f=0,p=0;t===Rt?i>0&&(u=Rt,f=i,p=o.length):t===Mn?c>0&&(u=Mn,f=c,p=l.length):(f=Math.max(i,c),u=f>0?i>c?Rt:Mn:null,p=u?u===Rt?o.length:l.length:0);const y=u===Rt&&/\b(?:transform|all)(?:,|$)/.test(s(`${Rt}Property`).toString());return{type:u,timeout:f,propCount:p,hasTransform:y}}function ei(e,t){for(;e.lengthti(n)+ti(e[s])))}function ti(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ni(e){return(e?e.ownerDocument:document).body.offsetHeight}function Qu(e,t,n){const s=e[Xn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const si=Symbol("_vod"),ef=Symbol("_vsh"),tf=Symbol(""),nf=/(?:^|;)\s*display\s*:/;function sf(e,t,n){const s=e.style,r=Ve(n);let o=!1;if(n&&!r){if(t)if(Ve(t))for(const i of t.split(";")){const a=i.slice(0,i.indexOf(":")).trim();n[a]==null&&ks(s,a,"")}else for(const i in t)n[i]==null&&ks(s,i,"");for(const i in n)i==="display"&&(o=!0),ks(s,i,n[i])}else if(r){if(t!==n){const i=s[tf];i&&(n+=";"+i),s.cssText=n,o=nf.test(n)}}else t&&e.removeAttribute("style");si in e&&(e[si]=o?s.display:"",e[ef]&&(s.display="none"))}const ri=/\s*!important$/;function ks(e,t,n){if(pe(n))n.forEach(s=>ks(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=rf(e,t);ri.test(n)?e.setProperty(zt(s),n.replace(ri,""),"important"):e[s]=n}}const oi=["Webkit","Moz","ms"],mr={};function rf(e,t){const n=mr[t];if(n)return n;let s=at(t);if(s!=="filter"&&s in e)return mr[t]=s;s=Ws(s);for(let r=0;rgr||(cf.then(()=>gr=0),gr=Date.now());function ff(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;ht(df(s,n.value),t,5,[s])};return n.value=e,n.attached=uf(),n}function df(e,t){if(pe(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const fi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hf=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?Qu(e,s,i):t==="style"?sf(e,n,s):Qn(t)?Gr(t)||af(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):pf(e,t,s,i))?(li(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ai(e,t,s,i,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ve(s))?li(e,at(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ai(e,t,s,i))};function pf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&fi(t)&&ve(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return fi(t)&&Ve(n)?!1:t in e}const di=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>ys(t,n):t};function vf(e){e.target.composing=!0}function hi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const br=Symbol("_assign");function pi(e,t,n){return t&&(e=e.trim()),n&&(e=Yr(e)),e}const mf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[br]=di(r);const o=s||r.props&&r.props.type==="number";gn(e,t?"change":"input",i=>{i.target.composing||e[br](pi(e.value,n,o))}),(n||o)&&gn(e,"change",()=>{e.value=pi(e.value,n,o)}),t||(gn(e,"compositionstart",vf),gn(e,"compositionend",hi),gn(e,"change",hi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[br]=di(i),e.composing)return;const a=(o||e.type==="number")&&!/^0\d/.test(e.value)?Yr(e.value):e.value,l=t??"";a!==l&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===l)||(e.value=l))}},gf=["ctrl","shift","alt","meta"],bf={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>gf.some(n=>e[`${n}Key`]&&!t.includes(n))},Ja=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const o=zt(r.key);if(t.some(i=>i===o||yf[i]===o))return e(r)})},Za=De({patchProp:hf},qu);let jn,vi=!1;function wf(){return jn||(jn=Au(Za))}function kf(){return jn=vi?jn:Pu(Za),vi=!0,jn}const Sf=(...e)=>{const t=wf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=el(s);if(!r)return;const o=t._component;!ve(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Qa(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t},Tf=(...e)=>{const t=kf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=el(s);if(r)return n(r,!0,Qa(r))},t};function Qa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function el(e){return Ve(e)?document.querySelector(e):e}const xf=oe({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(m(),$("span",{class:be(["VPBadge",e.type])},[M(t.$slots,"default",{},()=>[ze(me(e.text),1)])],2))}}),$f=window.__VP_SITE_DATA__;function uo(e){return Bi()?(Ql(e),!0):!1}const yr=new WeakMap,Ef=(...e)=>{var t;const n=e[0],s=(t=fn())==null?void 0:t.proxy;if(s==null&&!la())throw new Error("injectLocal must be called in setup");return s&&yr.has(s)&&n in yr.get(s)?yr.get(s)[n]:ft(...e)},tl=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Af=e=>e!=null,Pf=Object.prototype.toString,Cf=e=>Pf.call(e)==="[object Object]",qt=()=>{},mi=Lf();function Lf(){var e,t;return tl&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function fo(e,t){function n(...s){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(o)})}return n}const nl=e=>e();function sl(e,t={}){let n,s,r=qt;const o=l=>{clearTimeout(l),r(),r=qt};let i;return l=>{const c=Ie(e),u=Ie(t.maxWait);return n&&o(n),c<=0||u!==void 0&&u<=0?(s&&(o(s),s=null),Promise.resolve(l())):new Promise((f,p)=>{r=t.rejectOnCancel?p:f,i=l,u&&!s&&(s=setTimeout(()=>{n&&o(n),s=null,f(i())},u)),n=setTimeout(()=>{s&&o(s),s=null,f(l())},c)})}}function Nf(...e){let t=0,n,s=!0,r=qt,o,i,a,l,c;!Fe(e[0])&&typeof e[0]=="object"?{delay:i,trailing:a=!0,leading:l=!0,rejectOnCancel:c=!1}=e[0]:[i,a=!0,l=!0,c=!1]=e;const u=()=>{n&&(clearTimeout(n),n=void 0,r(),r=qt)};return p=>{const y=Ie(i),k=Date.now()-t,S=()=>o=p();return u(),y<=0?(t=Date.now(),S()):(k>y&&(l||!s)?(t=Date.now(),S()):a&&(o=new Promise((O,N)=>{r=c?N:O,n=setTimeout(()=>{t=Date.now(),s=!0,O(S()),u()},Math.max(0,y-k))})),!l&&!n&&(n=setTimeout(()=>s=!0,y)),s=!1,o)}}function Mf(e=nl,t={}){const{initialState:n="active"}=t,s=ho(n==="active");function r(){s.value=!1}function o(){s.value=!0}return{isActive:$n(s),pause:r,resume:o,eventFilter:(...a)=>{s.value&&e(...a)}}}function gi(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function If(e){return fn()}function Ss(e){return Array.isArray(e)?e:[e]}function ho(...e){if(e.length!==1)return $c(...e);const t=e[0];return typeof t=="function"?$n(Sc(()=>({get:t,set:qt}))):fe(t)}function Vf(e,t=200,n={}){return fo(sl(t,n),e)}function Of(e,t=200,n=!1,s=!0,r=!1){return fo(Nf(t,n,s,r),e)}function rl(e,t,n={}){const{eventFilter:s=nl,...r}=n;return Ce(e,fo(s,t),r)}function Ff(e,t,n={}){const{eventFilter:s,initialState:r="active",...o}=n,{eventFilter:i,pause:a,resume:l,isActive:c}=Mf(s,{initialState:r});return{stop:rl(e,t,{...o,eventFilter:i}),pause:a,resume:l,isActive:c}}function tr(e,t=!0,n){If()?Be(e,n):t?e():ct(e)}function Rf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...o}=n;return rl(e,t,{...o,eventFilter:sl(s,{maxWait:r})})}function Df(e,t,n){return Ce(e,t,{...n,immediate:!0})}function bi(e,t,n){let s;Fe(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:o=void 0,shallow:i=!0,onError:a=qt}=s,l=Oe(!r),c=i?Oe(t):fe(t);let u=0;return It(async f=>{if(!l.value)return;u++;const p=u;let y=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const k=await e(S=>{f(()=>{o&&(o.value=!1),y||S()})});p===u&&(c.value=k)}catch(k){a(k)}finally{o&&p===u&&(o.value=!1),y=!0}}),r?Y(()=>(l.value=!0,c.value)):c}const pt=tl?window:void 0;function nr(e){var t;const n=Ie(e);return(t=n==null?void 0:n.$el)!=null?t:n}function wt(...e){const t=[],n=()=>{t.forEach(a=>a()),t.length=0},s=(a,l,c,u)=>(a.addEventListener(l,c,u),()=>a.removeEventListener(l,c,u)),r=Y(()=>{const a=Ss(Ie(e[0])).filter(l=>l!=null);return a.every(l=>typeof l!="string")?a:void 0}),o=Df(()=>{var a,l;return[(l=(a=r.value)==null?void 0:a.map(c=>nr(c)))!=null?l:[pt].filter(c=>c!=null),Ss(Ie(r.value?e[1]:e[0])),Ss(w(r.value?e[2]:e[1])),Ie(r.value?e[3]:e[2])]},([a,l,c,u])=>{if(n(),!(a!=null&&a.length)||!(l!=null&&l.length)||!(c!=null&&c.length))return;const f=Cf(u)?{...u}:u;t.push(...a.flatMap(p=>l.flatMap(y=>c.map(k=>s(p,y,k,f)))))},{flush:"post"}),i=()=>{o(),n()};return uo(n),i}function Hf(){const e=Oe(!1),t=fn();return t&&Be(()=>{e.value=!0},t),e}function Bf(e){const t=Hf();return Y(()=>(t.value,!!e()))}function jf(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tn(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=pt,eventName:o="keydown",passive:i=!1,dedupe:a=!1}=s,l=jf(t);return wt(r,o,u=>{u.repeat&&Ie(a)||l(u)&&n(u)},i)}const Kf=Symbol("vueuse-ssr-width");function Uf(){const e=la()?Ef(Kf,null):null;return typeof e=="number"?e:void 0}function Jn(e,t={}){const{window:n=pt,ssrWidth:s=Uf()}=t,r=Bf(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),o=Oe(typeof s=="number"),i=Oe(),a=Oe(!1),l=c=>{a.value=c.matches};return It(()=>{if(o.value){o.value=!r.value;const c=Ie(e).split(",");a.value=c.some(u=>{const f=u.includes("not all"),p=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),y=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let k=!!(p||y);return p&&k&&(k=s>=gi(p[1])),y&&k&&(k=s<=gi(y[1])),f?!k:k});return}r.value&&(i.value=n.matchMedia(Ie(e)),a.value=i.value.matches)}),wt(i,"change",l,{passive:!0}),Y(()=>a.value)}const hs=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ps="__vueuse_ssr_handlers__",Wf=qf();function qf(){return ps in hs||(hs[ps]=hs[ps]||{}),hs[ps]}function ol(e,t){return Wf[e]||t}function il(e){return Jn("(prefers-color-scheme: dark)",e)}function Gf(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const zf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},yi="vueuse-storage";function po(e,t,n,s={}){var r;const{flush:o="pre",deep:i=!0,listenToStorageChanges:a=!0,writeDefaults:l=!0,mergeDefaults:c=!1,shallow:u,window:f=pt,eventFilter:p,onError:y=W=>{console.error(W)},initOnMounted:k}=s,S=(u?Oe:fe)(typeof t=="function"?t():t),O=Y(()=>Ie(e));if(!n)try{n=ol("getDefaultStorage",()=>{var W;return(W=pt)==null?void 0:W.localStorage})()}catch(W){y(W)}if(!n)return S;const N=Ie(t),U=Gf(N),h=(r=s.serializer)!=null?r:zf[U],{pause:v,resume:I}=Ff(S,()=>q(S.value),{flush:o,deep:i,eventFilter:p});Ce(O,()=>E(),{flush:o}),f&&a&&tr(()=>{n instanceof Storage?wt(f,"storage",E,{passive:!0}):wt(f,yi,G),k&&E()}),k||E();function ee(W,L){if(f){const x={key:O.value,oldValue:W,newValue:L,storageArea:n};f.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(yi,{detail:x}))}}function q(W){try{const L=n.getItem(O.value);if(W==null)ee(L,null),n.removeItem(O.value);else{const x=h.write(W);L!==x&&(n.setItem(O.value,x),ee(L,x))}}catch(L){y(L)}}function se(W){const L=W?W.newValue:n.getItem(O.value);if(L==null)return l&&N!=null&&n.setItem(O.value,h.write(N)),N;if(!W&&c){const x=h.read(L);return typeof c=="function"?c(x,N):U==="object"&&!Array.isArray(x)?{...N,...x}:x}else return typeof L!="string"?L:h.read(L)}function E(W){if(!(W&&W.storageArea!==n)){if(W&&W.key==null){S.value=N;return}if(!(W&&W.key!==O.value)){v();try{(W==null?void 0:W.newValue)!==h.write(S.value)&&(S.value=se(W))}catch(L){y(L)}finally{W?ct(I):I()}}}}function G(W){E(W.detail)}return S}const Yf="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Xf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=pt,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:a=!0,storageRef:l,emitAuto:c,disableTransition:u=!0}=e,f={auto:"",light:"light",dark:"dark",...e.modes||{}},p=il({window:r}),y=Y(()=>p.value?"dark":"light"),k=l||(i==null?ho(s):po(i,s,o,{window:r,listenToStorageChanges:a})),S=Y(()=>k.value==="auto"?y.value:k.value),O=ol("updateHTMLAttrs",(v,I,ee)=>{const q=typeof v=="string"?r==null?void 0:r.document.querySelector(v):nr(v);if(!q)return;const se=new Set,E=new Set;let G=null;if(I==="class"){const L=ee.split(/\s/g);Object.values(f).flatMap(x=>(x||"").split(/\s/g)).filter(Boolean).forEach(x=>{L.includes(x)?se.add(x):E.add(x)})}else G={key:I,value:ee};if(se.size===0&&E.size===0&&G===null)return;let W;u&&(W=r.document.createElement("style"),W.appendChild(document.createTextNode(Yf)),r.document.head.appendChild(W));for(const L of se)q.classList.add(L);for(const L of E)q.classList.remove(L);G&&q.setAttribute(G.key,G.value),u&&(r.getComputedStyle(W).opacity,document.head.removeChild(W))});function N(v){var I;O(t,n,(I=f[v])!=null?I:v)}function U(v){e.onChanged?e.onChanged(v,N):N(v)}Ce(S,U,{flush:"post",immediate:!0}),tr(()=>U(S.value));const h=Y({get(){return c?k.value:S.value},set(v){k.value=v}});return Object.assign(h,{store:k,system:y,state:S})}function Jf(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Xf({...e,onChanged:(i,a)=>{var l;e.onChanged?(l=e.onChanged)==null||l.call(e,i==="dark",a,i):a(i)},modes:{dark:t,light:n}}),r=Y(()=>s.system.value);return Y({get(){return s.value==="dark"},set(i){const a=i?"dark":"light";r.value===a?s.value="auto":s.value=a}})}function _r(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const _i=1;function Zf(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=qt,onScroll:o=qt,offset:i={left:0,right:0,top:0,bottom:0},eventListenerOptions:a={capture:!1,passive:!0},behavior:l="auto",window:c=pt,onError:u=q=>{console.error(q)}}=t,f=Oe(0),p=Oe(0),y=Y({get(){return f.value},set(q){S(q,void 0)}}),k=Y({get(){return p.value},set(q){S(void 0,q)}});function S(q,se){var E,G,W,L;if(!c)return;const x=Ie(e);if(!x)return;(W=x instanceof Document?c.document.body:x)==null||W.scrollTo({top:(E=Ie(se))!=null?E:k.value,left:(G=Ie(q))!=null?G:y.value,behavior:Ie(l)});const _=((L=x==null?void 0:x.document)==null?void 0:L.documentElement)||(x==null?void 0:x.documentElement)||x;y!=null&&(f.value=_.scrollLeft),k!=null&&(p.value=_.scrollTop)}const O=Oe(!1),N=xn({left:!0,right:!1,top:!0,bottom:!1}),U=xn({left:!1,right:!1,top:!1,bottom:!1}),h=q=>{O.value&&(O.value=!1,U.left=!1,U.right=!1,U.top=!1,U.bottom=!1,r(q))},v=Vf(h,n+s),I=q=>{var se;if(!c)return;const E=((se=q==null?void 0:q.document)==null?void 0:se.documentElement)||(q==null?void 0:q.documentElement)||nr(q),{display:G,flexDirection:W,direction:L}=getComputedStyle(E),x=L==="rtl"?-1:1,_=E.scrollLeft;U.left=_f.value;const T=Math.abs(_*x)<=(i.left||0),P=Math.abs(_*x)+E.clientWidth>=E.scrollWidth-(i.right||0)-_i;G==="flex"&&W==="row-reverse"?(N.left=P,N.right=T):(N.left=T,N.right=P),f.value=_;let K=E.scrollTop;q===c.document&&!K&&(K=c.document.body.scrollTop),U.top=Kp.value;const C=Math.abs(K)<=(i.top||0),z=Math.abs(K)+E.clientHeight>=E.scrollHeight-(i.bottom||0)-_i;G==="flex"&&W==="column-reverse"?(N.top=z,N.bottom=C):(N.top=C,N.bottom=z),p.value=K},ee=q=>{var se;if(!c)return;const E=(se=q.target.documentElement)!=null?se:q.target;I(E),O.value=!0,v(q),o(q)};return wt(e,"scroll",n?Of(ee,n,!0,!1):ee,a),tr(()=>{try{const q=Ie(e);if(!q)return;I(q)}catch(q){u(q)}}),wt(e,"scrollend",h,a),{x:y,y:k,isScrolling:O,arrivedState:N,directions:U,measure(){const q=Ie(e);c&&q&&I(q)}}}function Qf(e,t,n={}){const{window:s=pt}=n;return po(e,t,s==null?void 0:s.localStorage,n)}function al(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const wr=new WeakMap;function vo(e,t=!1){const n=Oe(t);let s=null,r="";Ce(ho(e),a=>{const l=_r(Ie(a));if(l){const c=l;if(wr.get(c)||wr.set(c,c.style.overflow),c.style.overflow!=="hidden"&&(r=c.style.overflow),c.style.overflow==="hidden")return n.value=!0;if(n.value)return c.style.overflow="hidden"}},{immediate:!0});const o=()=>{const a=_r(Ie(e));!a||n.value||(mi&&(s=wt(a,"touchmove",l=>{ed(l)},{passive:!1})),a.style.overflow="hidden",n.value=!0)},i=()=>{const a=_r(Ie(e));!a||!n.value||(mi&&(s==null||s()),a.style.overflow=r,wr.delete(a),n.value=!1)};return uo(i),Y({get(){return n.value},set(a){a?o():i()}})}function td(e,t,n={}){const{window:s=pt}=n;return po(e,t,s==null?void 0:s.sessionStorage,n)}function ll(e={}){const{window:t=pt,...n}=e;return Zf(t,n)}function nd(e={}){const{window:t=pt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:o=!0,type:i="inner"}=e,a=Oe(n),l=Oe(s),c=()=>{if(t)if(i==="outer")a.value=t.outerWidth,l.value=t.outerHeight;else if(i==="visual"&&t.visualViewport){const{width:f,height:p,scale:y}=t.visualViewport;a.value=Math.round(f*y),l.value=Math.round(p*y)}else o?(a.value=t.innerWidth,l.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight)};c(),tr(c);const u={passive:!0};if(wt("resize",c,u),t&&i==="visual"&&t.visualViewport&&wt(t.visualViewport,"resize",c,u),r){const f=Jn("(orientation: portrait)");Ce(f,()=>c())}return{width:a,height:l}}const kr={};var Sr={};const sr=/^(?:[a-z]+:|\/\/)/i,sd="vitepress-theme-appearance",rd=/#.*$/,od=/[?#].*$/,id=/(?:(^|\/)index)?\.(?:md|html)$/,Me=typeof document<"u",cl={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Gt(e,t,n=!1){if(t===void 0)return!1;if(e=wi(`/${e}`),n)return new RegExp(t).test(e);if(wi(t)!==e)return!1;const s=t.match(rd);return s?(Me?location.hash:"")===s[0]:!0}function wi(e){return decodeURI(e).replace(od,"").replace(id,"$1")}function ul(e){return sr.test(e)}function ad(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!ul(n)&&Gt(t,`/${n}/`,!0))||"root"}function ld(e,t){var s,r,o,i,a,l,c;const n=ad(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((a=e.locales[n])==null?void 0:a.description)??e.description,head:dl(e.head,((l=e.locales[n])==null?void 0:l.head)??[]),themeConfig:{...e.themeConfig,...(c=e.locales[n])==null?void 0:c.themeConfig}})}function fl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=cd(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function cd(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ud(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([o,i])=>o===n&&i[r[0]]===r[1])}function dl(e,t){return[...e.filter(n=>!ud(t,n)),...t]}const fd=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,dd=/^[a-z]:/i;function ki(e){const t=dd.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(fd,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Tr=new Set;function hl(e){if(Tr.size===0){const n=typeof process=="object"&&(Sr==null?void 0:Sr.VITE_EXTRA_EXTENSIONS)||(kr==null?void 0:kr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Tr.add(s))}const t=e.split(".").pop();return t==null||!Tr.has(t.toLowerCase())}function hd(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const mo=Symbol(),Ut=Oe($f);function pd(e){const t=Y(()=>ld(Ut.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n==="force-auto"?il():n?Jf({storageKey:sd,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):fe(!1),r=fe(Me?location.hash:"");return Me&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ce(()=>e.data,()=>{r.value=Me?location.hash:""}),{site:t,theme:Y(()=>t.value.themeConfig),page:Y(()=>e.data),frontmatter:Y(()=>e.data.frontmatter),params:Y(()=>e.data.params),lang:Y(()=>t.value.lang),dir:Y(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:Y(()=>t.value.localeIndex||"root"),title:Y(()=>fl(t.value,e.data)),description:Y(()=>e.data.description||t.value.description),isDark:s,hash:Y(()=>r.value)}}function go(){const e=ft(mo);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vd(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Zn(e){return sr.test(e)||!e.startsWith("/")?e:vd(Ut.value.base,e)}function bo(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Me){const n="/docs/";t=ki(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${ki(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Ts=[];function rr(e){Ts.push(e),cn(()=>{Ts=Ts.filter(t=>t!==e)})}function pl(){let e=Ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Si(e,n);else if(Array.isArray(e))for(const s of e){const r=Si(s,n);if(r){t=r;break}}return t}function Si(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const vl=Symbol(),ml="http://a.com",md=()=>({path:"/",component:null,data:cl});function gd(e,t){const n=xn(md()),s={route:n,go:r};async function r(a=Me?location.href:"/"){var l,c;a=xr(a),await((l=s.onBeforeRouteChange)==null?void 0:l.call(s,a))!==!1&&(Me&&a!==xr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",a)),await i(a),await((c=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:c(a)))}let o=null;async function i(a,l=0,c=!1){var p,y;if(await((p=s.onBeforePageLoad)==null?void 0:p.call(s,a))===!1)return;const u=new URL(a,ml),f=o=u.pathname;try{let k=await e(f);if(!k)throw new Error(`Page not found: ${f}`);if(o===f){o=null;const{default:S,__pageData:O}=k;if(!S)throw new Error(`Invalid route component: ${S}`);await((y=s.onAfterPageLoad)==null?void 0:y.call(s,a)),n.path=Me?f:Zn(f),n.component=wn(S),n.data=wn(O),Me&&ct(()=>{let N=Ut.value.base+O.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!Ut.value.cleanUrls&&!N.endsWith("/")&&(N+=".html"),N!==u.pathname&&(u.pathname=N,a=N+u.search+u.hash,history.replaceState({},"",a)),u.hash&&!l){let U=null;try{U=document.getElementById(decodeURIComponent(u.hash).slice(1))}catch(h){console.warn(h)}if(U){Ti(U,u.hash);return}}window.scrollTo(0,l)})}}catch(k){if(!/fetch|Page not found/.test(k.message)&&!/^\/404(\.html|\/)?$/.test(a)&&console.error(k),!c)try{const S=await fetch(Ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await S.json(),await i(a,l,!0);return}catch{}if(o===f){o=null,n.path=Me?f:Zn(f),n.component=t?wn(t):null;const S=Me?f.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...cl,relativePath:S}}}}return Me&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",a=>{if(a.defaultPrevented||!(a.target instanceof Element)||a.target.closest("button")||a.button!==0||a.ctrlKey||a.shiftKey||a.altKey||a.metaKey)return;const l=a.target.closest("a");if(!l||l.closest(".vp-raw")||l.hasAttribute("download")||l.hasAttribute("target"))return;const c=l.getAttribute("href")??(l instanceof SVGAElement?l.getAttribute("xlink:href"):null);if(c==null)return;const{href:u,origin:f,pathname:p,hash:y,search:k}=new URL(c,l.baseURI),S=new URL(location.href);f===S.origin&&hl(p)&&(a.preventDefault(),p===S.pathname&&k===S.search?(y!==S.hash&&(history.pushState({},"",u),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:u}))),y?Ti(l,y,l.classList.contains("header-anchor")):window.scrollTo(0,0)):r(u))},{capture:!0}),window.addEventListener("popstate",async a=>{var c;if(a.state===null)return;const l=xr(location.href);await i(l,a.state&&a.state.scrollPosition||0),await((c=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:c(l))}),window.addEventListener("hashchange",a=>{a.preventDefault()})),s}function gl(){const e=ft(vl);if(!e)throw new Error("useRouter() is called without provider.");return e}function Cn(){return gl().route}function Ti(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(s).paddingTop,10),i=window.scrollY+s.getBoundingClientRect().top-pl()+o;requestAnimationFrame(r)}}function xr(e){const t=new URL(e,ml);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),Ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const vs=()=>Ts.forEach(e=>e()),bd=oe({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Cn(),{frontmatter:n,site:s}=go();return Ce(n,vs,{deep:!0,flush:"post"}),()=>Vs(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Vs(t.component,{onVnodeMounted:vs,onVnodeUpdated:vs,onVnodeUnmounted:vs}):"404 Page Not Found"])}}),yd={key:0,class:"VPBackdrop"},_d=oe({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(m(),ae(co,{name:"fade"},{default:B(()=>[e.show?(m(),$("div",yd)):ne("",!0)]),_:1}))}}),ue=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},wd=ue(_d,[["__scopeId","data-v-c79a1216"]]),ge=go;function kd(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function Br(e){return e.startsWith("/")?e:`/${e}`}function yo(e){const{pathname:t,search:n,hash:s,protocol:r}=new URL(e,"http://a.com");if(ul(e)||e.startsWith("#")||!r.startsWith("http")||!hl(t))return e;const{site:o}=ge(),i=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,o.value.cleanUrls?"":".html")}${n}${s}`);return Zn(i)}function rs({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:r,hash:o}=ge(),i=Y(()=>{var l,c;return{label:(l=t.value.locales[n.value])==null?void 0:l.label,link:((c=t.value.locales[n.value])==null?void 0:c.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:Y(()=>Object.entries(t.value.locales).flatMap(([l,c])=>i.value.label===c.label?[]:{text:c.label,link:Sd(c.link||(l==="root"?"/":`/${l}/`),r.value.i18nRouting!==!1&&e,s.value.relativePath.slice(i.value.link.length-1),!t.value.cleanUrls)+o.value})),currentLang:i}}function Sd(e,t,n,s){return t?e.replace(/\/$/,"")+Br(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const Td={class:"NotFound"},xd={class:"code"},$d={class:"title"},Ed={class:"quote"},Ad={class:"action"},Pd=["href","aria-label"],Cd=oe({__name:"NotFound",setup(e){const{theme:t}=ge(),{currentLang:n}=rs();return(s,r)=>{var o,i,a,l,c;return m(),$("div",Td,[b("p",xd,me(((o=w(t).notFound)==null?void 0:o.code)??"404"),1),b("h1",$d,me(((i=w(t).notFound)==null?void 0:i.title)??"PAGE NOT FOUND"),1),r[0]||(r[0]=b("div",{class:"divider"},null,-1)),b("blockquote",Ed,me(((a=w(t).notFound)==null?void 0:a.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),b("div",Ad,[b("a",{class:"link",href:w(Zn)(w(n).link),"aria-label":((l=w(t).notFound)==null?void 0:l.linkLabel)??"go to home"},me(((c=w(t).notFound)==null?void 0:c.linkText)??"Take me home"),9,Pd)])])}}}),Ld=ue(Cd,[["__scopeId","data-v-d6be1790"]]);function bl(e,t){if(Array.isArray(e))return xs(e);if(e==null)return[];t=Br(t);const n=Object.keys(e).sort((r,o)=>o.split("/").length-r.split("/").length).find(r=>t.startsWith(Br(r))),s=n?e[n]:[];return Array.isArray(s)?xs(s):xs(s.items,s.base)}function Nd(e){const t=[];let n=0;for(const s in e){const r=e[s];if(r.items){n=t.push(r);continue}t[n]||t.push({items:[]}),t[n].items.push(r)}return t}function Md(e){const t=[];function n(s){for(const r of s)r.text&&r.link&&t.push({text:r.text,link:r.link,docFooterText:r.docFooterText}),r.items&&n(r.items)}return n(e),t}function jr(e,t){return Array.isArray(t)?t.some(n=>jr(e,n)):Gt(e,t.link)?!0:t.items?jr(e,t.items):!1}function xs(e,t){return[...e].map(n=>{const s={...n},r=s.base||t;return r&&s.link&&(s.link=r+s.link),s.items&&(s.items=xs(s.items,r)),s})}function Ot(){const{frontmatter:e,page:t,theme:n}=ge(),s=Jn("(min-width: 960px)"),r=fe(!1),o=Y(()=>{const S=n.value.sidebar,O=t.value.relativePath;return S?bl(S,O):[]}),i=fe(o.value);Ce(o,(S,O)=>{JSON.stringify(S)!==JSON.stringify(O)&&(i.value=o.value)});const a=Y(()=>e.value.sidebar!==!1&&i.value.length>0&&e.value.layout!=="home"),l=Y(()=>c?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),c=Y(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),u=Y(()=>a.value&&s.value),f=Y(()=>a.value?Nd(i.value):[]);function p(){r.value=!0}function y(){r.value=!1}function k(){r.value?y():p()}return{isOpen:r,sidebar:i,sidebarGroups:f,hasSidebar:a,hasAside:c,leftAside:l,isSidebarEnabled:u,open:p,close:y,toggle:k}}function Id(e,t){let n;It(()=>{n=e.value?document.activeElement:void 0}),Be(()=>{window.addEventListener("keyup",s)}),cn(()=>{window.removeEventListener("keyup",s)});function s(r){r.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Vd(e){const{page:t,hash:n}=ge(),s=fe(!1),r=Y(()=>e.value.collapsed!=null),o=Y(()=>!!e.value.link),i=fe(!1),a=()=>{i.value=Gt(t.value.relativePath,e.value.link)};Ce([t,e,n],a),Be(a);const l=Y(()=>i.value?!0:e.value.items?jr(t.value.relativePath,e.value.items):!1),c=Y(()=>!!(e.value.items&&e.value.items.length));It(()=>{s.value=!!(r.value&&e.value.collapsed)}),so(()=>{(i.value||l.value)&&(s.value=!1)});function u(){r.value&&(s.value=!s.value)}return{collapsed:s,collapsible:r,isLink:o,isActiveLink:i,hasActiveLink:l,hasChildren:c,toggle:u}}function Od(){const{hasSidebar:e}=Ot(),t=Jn("(min-width: 960px)"),n=Jn("(min-width: 1280px)");return{isAsideEnabled:Y(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const Fd=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Kr=[];function yl(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function _o(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:Rd(n),link:"#"+n.id,level:s}});return Dd(t,e)}function Rd(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(Fd.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function Dd(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,r]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return jd(e,s,r)}function Hd(e,t){const{isAsideEnabled:n}=Od(),s=kd(o,100);let r=null;Be(()=>{requestAnimationFrame(o),window.addEventListener("scroll",s)}),_a(()=>{i(location.hash)}),cn(()=>{window.removeEventListener("scroll",s)});function o(){if(!n.value)return;const a=window.scrollY,l=window.innerHeight,c=document.body.offsetHeight,u=Math.abs(a+l-c)<1,f=Kr.map(({element:y,link:k})=>({link:k,top:Bd(y)})).filter(({top:y})=>!Number.isNaN(y)).sort((y,k)=>y.top-k.top);if(!f.length){i(null);return}if(a<1){i(null);return}if(u){i(f[f.length-1].link);return}let p=null;for(const{link:y,top:k}of f){if(k>a+pl()+4)break;p=y}i(p)}function i(a){r&&r.classList.remove("active"),a==null?r=null:r=e.value.querySelector(`a[href="${decodeURIComponent(a)}"]`);const l=r;l?(l.classList.add("active"),t.value.style.top=l.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function Bd(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function jd(e,t,n){Kr.length=0;const s=[],r=[];return e.forEach(o=>{const i={...o,children:[]};let a=r[r.length-1];for(;a&&a.level>=i.level;)r.pop(),a=r[r.length-1];if(i.element.classList.contains("ignore-header")||a&&"shouldIgnore"in a){r.push({level:i.level,shouldIgnore:!0});return}i.level>n||i.level{const r=un("VPDocOutlineItem",!0);return m(),$("ul",{class:be(["VPDocOutlineItem",e.root?"root":"nested"])},[(m(!0),$(de,null,Re(e.headers,({children:o,link:i,title:a})=>(m(),$("li",null,[b("a",{class:"outline-link",href:i,onClick:t,title:a},me(a),9,Kd),o!=null&&o.length?(m(),ae(r,{key:0,headers:o},null,8,["headers"])):ne("",!0)]))),256))],2)}}}),_l=ue(Ud,[["__scopeId","data-v-b933a997"]]),Wd={class:"content"},qd={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Gd=oe({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=ge(),s=Oe([]);rr(()=>{s.value=_o(t.value.outline??n.value.outline)});const r=fe(),o=fe();return Hd(r,o),(i,a)=>(m(),$("nav",{"aria-labelledby":"doc-outline-aria-label",class:be(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:r},[b("div",Wd,[b("div",{class:"outline-marker",ref_key:"marker",ref:o},null,512),b("div",qd,me(w(yl)(w(n))),1),Q(_l,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),zd=ue(Gd,[["__scopeId","data-v-a5bbad30"]]),Yd={class:"VPDocAsideCarbonAds"},Xd=oe({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(m(),$("div",Yd,[Q(w(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Jd={class:"VPDocAside"},Zd=oe({__name:"VPDocAside",setup(e){const{theme:t}=ge();return(n,s)=>(m(),$("div",Jd,[M(n.$slots,"aside-top",{},void 0,!0),M(n.$slots,"aside-outline-before",{},void 0,!0),Q(zd),M(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=b("div",{class:"spacer"},null,-1)),M(n.$slots,"aside-ads-before",{},void 0,!0),w(t).carbonAds?(m(),ae(Xd,{key:0,"carbon-ads":w(t).carbonAds},null,8,["carbon-ads"])):ne("",!0),M(n.$slots,"aside-ads-after",{},void 0,!0),M(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Qd=ue(Zd,[["__scopeId","data-v-3f215769"]]);function eh(){const{theme:e,page:t}=ge();return Y(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let r;return typeof s=="function"?r=s(t.value):r=s.replace(/:path/g,t.value.filePath),{url:r,text:n}})}function th(){const{page:e,theme:t,frontmatter:n}=ge();return Y(()=>{var c,u,f,p,y,k,S,O;const s=bl(t.value.sidebar,e.value.relativePath),r=Md(s),o=nh(r,N=>N.link.replace(/[?#].*$/,"")),i=o.findIndex(N=>Gt(e.value.relativePath,N.link)),a=((c=t.value.docFooter)==null?void 0:c.prev)===!1&&!n.value.prev||n.value.prev===!1,l=((u=t.value.docFooter)==null?void 0:u.next)===!1&&!n.value.next||n.value.next===!1;return{prev:a?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((f=o[i-1])==null?void 0:f.docFooterText)??((p=o[i-1])==null?void 0:p.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((y=o[i-1])==null?void 0:y.link)},next:l?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((k=o[i+1])==null?void 0:k.docFooterText)??((S=o[i+1])==null?void 0:S.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((O=o[i+1])==null?void 0:O.link)}}})}function nh(e,t){const n=new Set;return e.filter(s=>{const r=t(s);return n.has(r)?!1:n.add(r)})}const _t=oe({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=Y(()=>t.tag??(t.href?"a":"span")),s=Y(()=>t.href&&sr.test(t.href)||t.target==="_blank");return(r,o)=>(m(),ae(yt(n.value),{class:be(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?w(yo)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:B(()=>[M(r.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),sh={class:"VPLastUpdated"},rh=["datetime"],oh=oe({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=ge(),r=Y(()=>new Date(n.value.lastUpdated)),o=Y(()=>r.value.toISOString()),i=fe("");return Be(()=>{It(()=>{var a,l,c;i.value=new Intl.DateTimeFormat((l=(a=t.value.lastUpdated)==null?void 0:a.formatOptions)!=null&&l.forceLocale?s.value:void 0,((c=t.value.lastUpdated)==null?void 0:c.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(a,l)=>{var c;return m(),$("p",sh,[ze(me(((c=w(t).lastUpdated)==null?void 0:c.text)||w(t).lastUpdatedText||"Last updated")+": ",1),b("time",{datetime:o.value},me(i.value),9,rh)])}}}),ih=ue(oh,[["__scopeId","data-v-e98dd255"]]),ah={key:0,class:"VPDocFooter"},lh={key:0,class:"edit-info"},ch={key:0,class:"edit-link"},uh={key:1,class:"last-updated"},fh={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},dh={class:"pager"},hh=["innerHTML"],ph=["innerHTML"],vh={class:"pager"},mh=["innerHTML"],gh=["innerHTML"],bh=oe({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=ge(),r=eh(),o=th(),i=Y(()=>t.value.editLink&&s.value.editLink!==!1),a=Y(()=>n.value.lastUpdated),l=Y(()=>i.value||a.value||o.value.prev||o.value.next);return(c,u)=>{var f,p,y,k;return l.value?(m(),$("footer",ah,[M(c.$slots,"doc-footer-before",{},void 0,!0),i.value||a.value?(m(),$("div",lh,[i.value?(m(),$("div",ch,[Q(_t,{class:"edit-link-button",href:w(r).url,"no-icon":!0},{default:B(()=>[u[0]||(u[0]=b("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ze(" "+me(w(r).text),1)]),_:1},8,["href"])])):ne("",!0),a.value?(m(),$("div",uh,[Q(ih)])):ne("",!0)])):ne("",!0),(f=w(o).prev)!=null&&f.link||(p=w(o).next)!=null&&p.link?(m(),$("nav",fh,[u[1]||(u[1]=b("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),b("div",dh,[(y=w(o).prev)!=null&&y.link?(m(),ae(_t,{key:0,class:"pager-link prev",href:w(o).prev.link},{default:B(()=>{var S;return[b("span",{class:"desc",innerHTML:((S=w(t).docFooter)==null?void 0:S.prev)||"Previous page"},null,8,hh),b("span",{class:"title",innerHTML:w(o).prev.text},null,8,ph)]}),_:1},8,["href"])):ne("",!0)]),b("div",vh,[(k=w(o).next)!=null&&k.link?(m(),ae(_t,{key:0,class:"pager-link next",href:w(o).next.link},{default:B(()=>{var S;return[b("span",{class:"desc",innerHTML:((S=w(t).docFooter)==null?void 0:S.next)||"Next page"},null,8,mh),b("span",{class:"title",innerHTML:w(o).next.text},null,8,gh)]}),_:1},8,["href"])):ne("",!0)])])):ne("",!0)])):ne("",!0)}}}),yh=ue(bh,[["__scopeId","data-v-e257564d"]]),_h={class:"container"},wh={class:"aside-container"},kh={class:"aside-content"},Sh={class:"content"},Th={class:"content-container"},xh={class:"main"},$h=oe({__name:"VPDoc",setup(e){const{theme:t}=ge(),n=Cn(),{hasSidebar:s,hasAside:r,leftAside:o}=Ot(),i=Y(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(a,l)=>{const c=un("Content");return m(),$("div",{class:be(["VPDoc",{"has-sidebar":w(s),"has-aside":w(r)}])},[M(a.$slots,"doc-top",{},void 0,!0),b("div",_h,[w(r)?(m(),$("div",{key:0,class:be(["aside",{"left-aside":w(o)}])},[l[0]||(l[0]=b("div",{class:"aside-curtain"},null,-1)),b("div",wh,[b("div",kh,[Q(Qd,null,{"aside-top":B(()=>[M(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":B(()=>[M(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":B(()=>[M(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[M(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[M(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[M(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):ne("",!0),b("div",Sh,[b("div",Th,[M(a.$slots,"doc-before",{},void 0,!0),b("main",xh,[Q(c,{class:be(["vp-doc",[i.value,w(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),Q(yh,null,{"doc-footer-before":B(()=>[M(a.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),M(a.$slots,"doc-after",{},void 0,!0)])])]),M(a.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Eh=ue($h,[["__scopeId","data-v-39a288b8"]]),Ah=oe({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=Y(()=>t.href&&sr.test(t.href)),s=Y(()=>t.tag||(t.href?"a":"button"));return(r,o)=>(m(),ae(yt(s.value),{class:be(["VPButton",[e.size,e.theme]]),href:e.href?w(yo)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:B(()=>[ze(me(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ph=ue(Ah,[["__scopeId","data-v-fa7799d5"]]),Ch=["src","alt"],Lh=oe({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=un("VPImage",!0);return e.image?(m(),$(de,{key:0},[typeof e.image=="string"||"src"in e.image?(m(),$("img",Pt({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:w(Zn)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Ch)):(m(),$(de,{key:1},[Q(s,Pt({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),Q(s,Pt({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):ne("",!0)}}}),Os=ue(Lh,[["__scopeId","data-v-8426fc1a"]]),Nh={class:"container"},Mh={class:"main"},Ih={class:"heading"},Vh=["innerHTML"],Oh=["innerHTML"],Fh=["innerHTML"],Rh={key:0,class:"actions"},Dh={key:0,class:"image"},Hh={class:"image-container"},Bh=oe({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=ft("hero-image-slot-exists");return(n,s)=>(m(),$("div",{class:be(["VPHero",{"has-image":e.image||w(t)}])},[b("div",Nh,[b("div",Mh,[M(n.$slots,"home-hero-info-before",{},void 0,!0),M(n.$slots,"home-hero-info",{},()=>[b("h1",Ih,[e.name?(m(),$("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,Vh)):ne("",!0),e.text?(m(),$("span",{key:1,innerHTML:e.text,class:"text"},null,8,Oh)):ne("",!0)]),e.tagline?(m(),$("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,Fh)):ne("",!0)],!0),M(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(m(),$("div",Rh,[(m(!0),$(de,null,Re(e.actions,r=>(m(),$("div",{key:r.link,class:"action"},[Q(Ph,{tag:"a",size:"medium",theme:r.theme,text:r.text,href:r.link,target:r.target,rel:r.rel},null,8,["theme","text","href","target","rel"])]))),128))])):ne("",!0),M(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||w(t)?(m(),$("div",Dh,[b("div",Hh,[s[0]||(s[0]=b("div",{class:"image-bg"},null,-1)),M(n.$slots,"home-hero-image",{},()=>[e.image?(m(),ae(Os,{key:0,class:"image-src",image:e.image},null,8,["image"])):ne("",!0)],!0)])])):ne("",!0)])],2))}}),jh=ue(Bh,[["__scopeId","data-v-4f9c455b"]]),Kh=oe({__name:"VPHomeHero",setup(e){const{frontmatter:t}=ge();return(n,s)=>w(t).hero?(m(),ae(jh,{key:0,class:"VPHomeHero",name:w(t).hero.name,text:w(t).hero.text,tagline:w(t).hero.tagline,image:w(t).hero.image,actions:w(t).hero.actions},{"home-hero-info-before":B(()=>[M(n.$slots,"home-hero-info-before")]),"home-hero-info":B(()=>[M(n.$slots,"home-hero-info")]),"home-hero-info-after":B(()=>[M(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":B(()=>[M(n.$slots,"home-hero-actions-after")]),"home-hero-image":B(()=>[M(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):ne("",!0)}}),Uh={class:"box"},Wh={key:0,class:"icon"},qh=["innerHTML"],Gh=["innerHTML"],zh=["innerHTML"],Yh={key:4,class:"link-text"},Xh={class:"link-text-value"},Jh=oe({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(m(),ae(_t,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:B(()=>[b("article",Uh,[typeof e.icon=="object"&&e.icon.wrap?(m(),$("div",Wh,[Q(Os,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(m(),ae(Os,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(m(),$("div",{key:2,class:"icon",innerHTML:e.icon},null,8,qh)):ne("",!0),b("h2",{class:"title",innerHTML:e.title},null,8,Gh),e.details?(m(),$("p",{key:3,class:"details",innerHTML:e.details},null,8,zh)):ne("",!0),e.linkText?(m(),$("div",Yh,[b("p",Xh,[ze(me(e.linkText)+" ",1),n[0]||(n[0]=b("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):ne("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Zh=ue(Jh,[["__scopeId","data-v-a3976bdc"]]),Qh={key:0,class:"VPFeatures"},ep={class:"container"},tp={class:"items"},np=oe({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=Y(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,r)=>e.features?(m(),$("div",Qh,[b("div",ep,[b("div",tp,[(m(!0),$(de,null,Re(e.features,o=>(m(),$("div",{key:o.title,class:be(["item",[n.value]])},[Q(Zh,{icon:o.icon,title:o.title,details:o.details,link:o.link,"link-text":o.linkText,rel:o.rel,target:o.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):ne("",!0)}}),sp=ue(np,[["__scopeId","data-v-a6181336"]]),rp=oe({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=ge();return(n,s)=>w(t).features?(m(),ae(sp,{key:0,class:"VPHomeFeatures",features:w(t).features},null,8,["features"])):ne("",!0)}}),op=oe({__name:"VPHomeContent",setup(e){const{width:t}=nd({initialWidth:0,includeScrollbar:!1});return(n,s)=>(m(),$("div",{class:"vp-doc container",style:Pn(w(t)?{"--vp-offset":`calc(50% - ${w(t)/2}px)`}:{})},[M(n.$slots,"default",{},void 0,!0)],4))}}),ip=ue(op,[["__scopeId","data-v-8e2d4988"]]),ap=oe({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=ge();return(s,r)=>{const o=un("Content");return m(),$("div",{class:be(["VPHome",{"external-link-icon-enabled":w(n).externalLinkIcon}])},[M(s.$slots,"home-hero-before",{},void 0,!0),Q(Kh,null,{"home-hero-info-before":B(()=>[M(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":B(()=>[M(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":B(()=>[M(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":B(()=>[M(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":B(()=>[M(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),M(s.$slots,"home-hero-after",{},void 0,!0),M(s.$slots,"home-features-before",{},void 0,!0),Q(rp),M(s.$slots,"home-features-after",{},void 0,!0),w(t).markdownStyles!==!1?(m(),ae(ip,{key:0},{default:B(()=>[Q(o)]),_:1})):(m(),ae(o,{key:1}))],2)}}}),lp=ue(ap,[["__scopeId","data-v-8b561e3d"]]),cp={},up={class:"VPPage"};function fp(e,t){const n=un("Content");return m(),$("div",up,[M(e.$slots,"page-top"),Q(n),M(e.$slots,"page-bottom")])}const dp=ue(cp,[["render",fp]]),hp=oe({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=ge(),{hasSidebar:s}=Ot();return(r,o)=>(m(),$("div",{class:be(["VPContent",{"has-sidebar":w(s),"is-home":w(n).layout==="home"}]),id:"VPContent"},[w(t).isNotFound?M(r.$slots,"not-found",{key:0},()=>[Q(Ld)],!0):w(n).layout==="page"?(m(),ae(dp,{key:1},{"page-top":B(()=>[M(r.$slots,"page-top",{},void 0,!0)]),"page-bottom":B(()=>[M(r.$slots,"page-bottom",{},void 0,!0)]),_:3})):w(n).layout==="home"?(m(),ae(lp,{key:2},{"home-hero-before":B(()=>[M(r.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":B(()=>[M(r.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":B(()=>[M(r.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":B(()=>[M(r.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":B(()=>[M(r.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":B(()=>[M(r.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":B(()=>[M(r.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":B(()=>[M(r.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":B(()=>[M(r.$slots,"home-features-after",{},void 0,!0)]),_:3})):w(n).layout&&w(n).layout!=="doc"?(m(),ae(yt(w(n).layout),{key:3})):(m(),ae(Eh,{key:4},{"doc-top":B(()=>[M(r.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":B(()=>[M(r.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":B(()=>[M(r.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":B(()=>[M(r.$slots,"doc-before",{},void 0,!0)]),"doc-after":B(()=>[M(r.$slots,"doc-after",{},void 0,!0)]),"aside-top":B(()=>[M(r.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":B(()=>[M(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[M(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[M(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[M(r.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":B(()=>[M(r.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),pp=ue(hp,[["__scopeId","data-v-1428d186"]]),vp={class:"container"},mp=["innerHTML"],gp=["innerHTML"],bp=oe({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=ge(),{hasSidebar:s}=Ot();return(r,o)=>w(t).footer&&w(n).footer!==!1?(m(),$("footer",{key:0,class:be(["VPFooter",{"has-sidebar":w(s)}])},[b("div",vp,[w(t).footer.message?(m(),$("p",{key:0,class:"message",innerHTML:w(t).footer.message},null,8,mp)):ne("",!0),w(t).footer.copyright?(m(),$("p",{key:1,class:"copyright",innerHTML:w(t).footer.copyright},null,8,gp)):ne("",!0)])],2)):ne("",!0)}}),yp=ue(bp,[["__scopeId","data-v-e315a0ad"]]);function _p(){const{theme:e,frontmatter:t}=ge(),n=Oe([]),s=Y(()=>n.value.length>0);return rr(()=>{n.value=_o(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:s}}const wp={class:"menu-text"},kp={class:"header"},Sp={class:"outline"},Tp=oe({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=ge(),s=fe(!1),r=fe(0),o=fe(),i=fe();function a(f){var p;(p=o.value)!=null&&p.contains(f.target)||(s.value=!1)}Ce(s,f=>{if(f){document.addEventListener("click",a);return}document.removeEventListener("click",a)}),tn("Escape",()=>{s.value=!1}),rr(()=>{s.value=!1});function l(){s.value=!s.value,r.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function c(f){f.target.classList.contains("outline-link")&&(i.value&&(i.value.style.transition="none"),ct(()=>{s.value=!1}))}function u(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(f,p)=>(m(),$("div",{class:"VPLocalNavOutlineDropdown",style:Pn({"--vp-vh":r.value+"px"}),ref_key:"main",ref:o},[e.headers.length>0?(m(),$("button",{key:0,onClick:l,class:be({open:s.value})},[b("span",wp,me(w(yl)(w(n))),1),p[0]||(p[0]=b("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(m(),$("button",{key:1,onClick:u},me(w(n).returnToTopLabel||"Return to top"),1)),Q(co,{name:"flyout"},{default:B(()=>[s.value?(m(),$("div",{key:0,ref_key:"items",ref:i,class:"items",onClick:c},[b("div",kp,[b("a",{class:"top-link",href:"#",onClick:u},me(w(n).returnToTopLabel||"Return to top"),1)]),b("div",Sp,[Q(_l,{headers:e.headers},null,8,["headers"])])],512)):ne("",!0)]),_:1})],4))}}),xp=ue(Tp,[["__scopeId","data-v-8a42e2b4"]]),$p={class:"container"},Ep=["aria-expanded"],Ap={class:"menu-text"},Pp=oe({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=ge(),{hasSidebar:s}=Ot(),{headers:r}=_p(),{y:o}=ll(),i=fe(0);Be(()=>{i.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),rr(()=>{r.value=_o(n.value.outline??t.value.outline)});const a=Y(()=>r.value.length===0),l=Y(()=>a.value&&!s.value),c=Y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:a.value,fixed:l.value}));return(u,f)=>w(n).layout!=="home"&&(!l.value||w(o)>=i.value)?(m(),$("div",{key:0,class:be(c.value)},[b("div",$p,[w(s)?(m(),$("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=p=>u.$emit("open-menu"))},[f[1]||(f[1]=b("span",{class:"vpi-align-left menu-icon"},null,-1)),b("span",Ap,me(w(t).sidebarMenuLabel||"Menu"),1)],8,Ep)):ne("",!0),Q(xp,{headers:w(r),navHeight:i.value},null,8,["headers","navHeight"])])],2)):ne("",!0)}}),Cp=ue(Pp,[["__scopeId","data-v-a6f0e41e"]]);function Lp(){const e=fe(!1);function t(){e.value=!0,window.addEventListener("resize",r)}function n(){e.value=!1,window.removeEventListener("resize",r)}function s(){e.value?n():t()}function r(){window.outerWidth>=768&&n()}const o=Cn();return Ce(()=>o.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const Np={},Mp={class:"VPSwitch",type:"button",role:"switch"},Ip={class:"check"},Vp={key:0,class:"icon"};function Op(e,t){return m(),$("button",Mp,[b("span",Ip,[e.$slots.default?(m(),$("span",Vp,[M(e.$slots,"default",{},void 0,!0)])):ne("",!0)])])}const Fp=ue(Np,[["render",Op],["__scopeId","data-v-1d5665e3"]]),Rp=oe({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=ge(),s=ft("toggle-appearance",()=>{t.value=!t.value}),r=fe("");return so(()=>{r.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(o,i)=>(m(),ae(Fp,{title:r.value,class:"VPSwitchAppearance","aria-checked":w(t),onClick:w(s)},{default:B(()=>[...i[0]||(i[0]=[b("span",{class:"vpi-sun sun"},null,-1),b("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),wo=ue(Rp,[["__scopeId","data-v-5337faa4"]]),Dp={key:0,class:"VPNavBarAppearance"},Hp=oe({__name:"VPNavBarAppearance",setup(e){const{site:t}=ge();return(n,s)=>w(t).appearance&&w(t).appearance!=="force-dark"&&w(t).appearance!=="force-auto"?(m(),$("div",Dp,[Q(wo)])):ne("",!0)}}),Bp=ue(Hp,[["__scopeId","data-v-6c893767"]]),ko=fe();let wl=!1,$r=0;function jp(e){const t=fe(!1);if(Me){!wl&&Kp(),$r++;const n=Ce(ko,s=>{var r,o,i;s===e.el.value||(r=e.el.value)!=null&&r.contains(s)?(t.value=!0,(o=e.onFocus)==null||o.call(e)):(t.value=!1,(i=e.onBlur)==null||i.call(e))});cn(()=>{n(),$r--,$r||Up()})}return $n(t)}function Kp(){document.addEventListener("focusin",kl),wl=!0,ko.value=document.activeElement}function Up(){document.removeEventListener("focusin",kl)}function kl(){ko.value=document.activeElement}const Wp={class:"VPMenuLink"},qp=["innerHTML"],Gp=oe({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=ge();return(n,s)=>(m(),$("div",Wp,[Q(_t,{class:be({active:w(Gt)(w(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:B(()=>[b("span",{innerHTML:e.item.text},null,8,qp)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),or=ue(Gp,[["__scopeId","data-v-35975db6"]]),zp={class:"VPMenuGroup"},Yp={key:0,class:"title"},Xp=oe({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(m(),$("div",zp,[e.text?(m(),$("p",Yp,me(e.text),1)):ne("",!0),(m(!0),$(de,null,Re(e.items,s=>(m(),$(de,null,["link"in s?(m(),ae(or,{key:0,item:s},null,8,["item"])):ne("",!0)],64))),256))]))}}),Jp=ue(Xp,[["__scopeId","data-v-69e747b5"]]),Zp={class:"VPMenu"},Qp={key:0,class:"items"},ev=oe({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(m(),$("div",Zp,[e.items?(m(),$("div",Qp,[(m(!0),$(de,null,Re(e.items,s=>(m(),$(de,{key:JSON.stringify(s)},["link"in s?(m(),ae(or,{key:0,item:s},null,8,["item"])):"component"in s?(m(),ae(yt(s.component),Pt({key:1,ref_for:!0},s.props),null,16)):(m(),ae(Jp,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):ne("",!0),M(t.$slots,"default",{},void 0,!0)]))}}),tv=ue(ev,[["__scopeId","data-v-b98bc113"]]),nv=["aria-expanded","aria-label"],sv={key:0,class:"text"},rv=["innerHTML"],ov={key:1,class:"vpi-more-horizontal icon"},iv={class:"menu"},av=oe({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=fe(!1),n=fe();jp({el:n,onBlur:s});function s(){t.value=!1}return(r,o)=>(m(),$("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:o[1]||(o[1]=i=>t.value=!0),onMouseleave:o[2]||(o[2]=i=>t.value=!1)},[b("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:o[0]||(o[0]=i=>t.value=!t.value)},[e.button||e.icon?(m(),$("span",sv,[e.icon?(m(),$("span",{key:0,class:be([e.icon,"option-icon"])},null,2)):ne("",!0),e.button?(m(),$("span",{key:1,innerHTML:e.button},null,8,rv)):ne("",!0),o[3]||(o[3]=b("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(m(),$("span",ov))],8,nv),b("div",iv,[Q(tv,{items:e.items},{default:B(()=>[M(r.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),So=ue(av,[["__scopeId","data-v-cf11d7a2"]]),lv=["href","aria-label","innerHTML"],cv=oe({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=fe();Be(async()=>{var o;await ct();const r=(o=n.value)==null?void 0:o.children[0];r instanceof HTMLElement&&r.className.startsWith("vpi-social-")&&(getComputedStyle(r).maskImage||getComputedStyle(r).webkitMaskImage)==="none"&&r.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=Y(()=>typeof t.icon=="object"?t.icon.svg:``);return(r,o)=>(m(),$("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,lv))}}),uv=ue(cv,[["__scopeId","data-v-bd121fe5"]]),fv={class:"VPSocialLinks"},dv=oe({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(m(),$("div",fv,[(m(!0),$(de,null,Re(e.links,({link:s,icon:r,ariaLabel:o})=>(m(),ae(uv,{key:s,icon:r,link:s,ariaLabel:o},null,8,["icon","link","ariaLabel"]))),128))]))}}),To=ue(dv,[["__scopeId","data-v-7bc22406"]]),hv={key:0,class:"group translations"},pv={class:"trans-title"},vv={key:1,class:"group"},mv={class:"item appearance"},gv={class:"label"},bv={class:"appearance-action"},yv={key:2,class:"group"},_v={class:"item social-links"},wv=oe({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=ge(),{localeLinks:s,currentLang:r}=rs({correspondingLink:!0}),o=Y(()=>s.value.length&&r.value.label||t.value.appearance||n.value.socialLinks);return(i,a)=>o.value?(m(),ae(So,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:B(()=>[w(s).length&&w(r).label?(m(),$("div",hv,[b("p",pv,me(w(r).label),1),(m(!0),$(de,null,Re(w(s),l=>(m(),ae(or,{key:l.link,item:l},null,8,["item"]))),128))])):ne("",!0),w(t).appearance&&w(t).appearance!=="force-dark"&&w(t).appearance!=="force-auto"?(m(),$("div",vv,[b("div",mv,[b("p",gv,me(w(n).darkModeSwitchLabel||"Appearance"),1),b("div",bv,[Q(wo)])])])):ne("",!0),w(n).socialLinks?(m(),$("div",yv,[b("div",_v,[Q(To,{class:"social-links-list",links:w(n).socialLinks},null,8,["links"])])])):ne("",!0)]),_:1})):ne("",!0)}}),kv=ue(wv,[["__scopeId","data-v-bb2aa2f0"]]),Sv=["aria-expanded"],Tv=oe({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(m(),$("button",{type:"button",class:be(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[b("span",{class:"container"},[b("span",{class:"top"}),b("span",{class:"middle"}),b("span",{class:"bottom"})],-1)])],10,Sv))}}),xv=ue(Tv,[["__scopeId","data-v-e5dd9c1c"]]),$v=["innerHTML"],Ev=oe({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=ge();return(n,s)=>(m(),ae(_t,{class:be({VPNavBarMenuLink:!0,active:w(Gt)(w(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:B(()=>[b("span",{innerHTML:e.item.text},null,8,$v)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Av=ue(Ev,[["__scopeId","data-v-e56f3d57"]]),Pv=oe({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=ge(),s=o=>"component"in o?!1:"link"in o?Gt(n.value.relativePath,o.link,!!t.item.activeMatch):o.items.some(s),r=Y(()=>s(t.item));return(o,i)=>(m(),ae(So,{class:be({VPNavBarMenuGroup:!0,active:w(Gt)(w(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||r.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Cv={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Lv=oe({__name:"VPNavBarMenu",setup(e){const{theme:t}=ge();return(n,s)=>w(t).nav?(m(),$("nav",Cv,[s[0]||(s[0]=b("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(m(!0),$(de,null,Re(w(t).nav,r=>(m(),$(de,{key:JSON.stringify(r)},["link"in r?(m(),ae(Av,{key:0,item:r},null,8,["item"])):"component"in r?(m(),ae(yt(r.component),Pt({key:1,ref_for:!0},r.props),null,16)):(m(),ae(Pv,{key:2,item:r},null,8,["item"]))],64))),128))])):ne("",!0)}}),Nv=ue(Lv,[["__scopeId","data-v-dc692963"]]),Mv="modulepreload",Iv=function(e){return"/docs/"+e},xi={},Sl=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),a=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=Promise.allSettled(n.map(l=>{if(l=Iv(l),l in xi)return;xi[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":Mv,c||(f.as="script"),f.crossOrigin="",f.href=l,a&&f.setAttribute("nonce",a),document.head.appendChild(f),c)return new Promise((p,y)=>{f.addEventListener("load",p),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${l}`)))})}))}function o(i){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=i,window.dispatchEvent(a),!a.defaultPrevented)throw i}return r.then(i=>{for(const a of i||[])a.status==="rejected"&&o(a.reason);return t().catch(o)})};function Tl(e){const{localeIndex:t,theme:n}=ge();function s(r){var k,S,O;const o=r.split("."),i=(k=n.value.search)==null?void 0:k.options,a=i&&typeof i=="object",l=a&&((O=(S=i.locales)==null?void 0:S[t.value])==null?void 0:O.translations)||null,c=a&&i.translations||null;let u=l,f=c,p=e;const y=o.pop();for(const N of o){let U=null;const h=p==null?void 0:p[N];h&&(U=p=h);const v=f==null?void 0:f[N];v&&(U=f=v);const I=u==null?void 0:u[N];I&&(U=u=I),h||(p=U),v||(f=U),I||(u=U)}return(u==null?void 0:u[y])??(f==null?void 0:f[y])??(p==null?void 0:p[y])??""}return s}const Vv=["aria-label"],Ov={class:"DocSearch-Button-Container"},Fv={class:"DocSearch-Button-Placeholder"},$i=oe({__name:"VPNavBarSearchButton",setup(e){const n=Tl({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,r)=>(m(),$("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":w(n)("button.buttonAriaLabel")},[b("span",Ov,[r[0]||(r[0]=b("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),b("span",Fv,me(w(n)("button.buttonText")),1)]),r[1]||(r[1]=b("span",{class:"DocSearch-Button-Keys"},[b("kbd",{class:"DocSearch-Button-Key"}),b("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Vv))}}),Rv={class:"VPNavBarSearch"},Dv={id:"local-search"},Hv={key:1,id:"docsearch"},Bv=oe({__name:"VPNavBarSearch",setup(e){const t=Yc(()=>Sl(()=>Promise.resolve().then(()=>ly),void 0)),n=()=>null,{theme:s}=ge(),r=fe(!1),o=fe(!1);Be(()=>{});function i(){r.value||(r.value=!0,setTimeout(a,16))}function a(){const f=new Event("keydown");f.key="k",f.metaKey=!0,window.dispatchEvent(f),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||a()},16)}function l(f){const p=f.target,y=p.tagName;return p.isContentEditable||y==="INPUT"||y==="SELECT"||y==="TEXTAREA"}const c=fe(!1);tn("k",f=>{(f.ctrlKey||f.metaKey)&&(f.preventDefault(),c.value=!0)}),tn("/",f=>{l(f)||(f.preventDefault(),c.value=!0)});const u="local";return(f,p)=>{var y;return m(),$("div",Rv,[w(u)==="local"?(m(),$(de,{key:0},[c.value?(m(),ae(w(t),{key:0,onClose:p[0]||(p[0]=k=>c.value=!1)})):ne("",!0),b("div",Dv,[Q($i,{onClick:p[1]||(p[1]=k=>c.value=!0)})])],64)):w(u)==="algolia"?(m(),$(de,{key:1},[r.value?(m(),ae(w(n),{key:0,algolia:((y=w(s).search)==null?void 0:y.options)??w(s).algolia,onVnodeBeforeMount:p[2]||(p[2]=k=>o.value=!0)},null,8,["algolia"])):ne("",!0),o.value?ne("",!0):(m(),$("div",Hv,[Q($i,{onClick:i})]))],64)):ne("",!0)])}}}),jv=oe({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=ge();return(n,s)=>w(t).socialLinks?(m(),ae(To,{key:0,class:"VPNavBarSocialLinks",links:w(t).socialLinks},null,8,["links"])):ne("",!0)}}),Kv=ue(jv,[["__scopeId","data-v-0394ad82"]]),Uv=["href","rel","target"],Wv=["innerHTML"],qv={key:2},Gv=oe({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=ge(),{hasSidebar:s}=Ot(),{currentLang:r}=rs(),o=Y(()=>{var l;return typeof n.value.logoLink=="string"?n.value.logoLink:(l=n.value.logoLink)==null?void 0:l.link}),i=Y(()=>{var l;return typeof n.value.logoLink=="string"||(l=n.value.logoLink)==null?void 0:l.rel}),a=Y(()=>{var l;return typeof n.value.logoLink=="string"||(l=n.value.logoLink)==null?void 0:l.target});return(l,c)=>(m(),$("div",{class:be(["VPNavBarTitle",{"has-sidebar":w(s)}])},[b("a",{class:"title",href:o.value??w(yo)(w(r).link),rel:i.value,target:a.value},[M(l.$slots,"nav-bar-title-before",{},void 0,!0),w(n).logo?(m(),ae(Os,{key:0,class:"logo",image:w(n).logo},null,8,["image"])):ne("",!0),w(n).siteTitle?(m(),$("span",{key:1,innerHTML:w(n).siteTitle},null,8,Wv)):w(n).siteTitle===void 0?(m(),$("span",qv,me(w(t).title),1)):ne("",!0),M(l.$slots,"nav-bar-title-after",{},void 0,!0)],8,Uv)],2))}}),zv=ue(Gv,[["__scopeId","data-v-1168a8e4"]]),Yv={class:"items"},Xv={class:"title"},Jv=oe({__name:"VPNavBarTranslations",setup(e){const{theme:t}=ge(),{localeLinks:n,currentLang:s}=rs({correspondingLink:!0});return(r,o)=>w(n).length&&w(s).label?(m(),ae(So,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:w(t).langMenuLabel||"Change language"},{default:B(()=>[b("div",Yv,[b("p",Xv,me(w(s).label),1),(m(!0),$(de,null,Re(w(n),i=>(m(),ae(or,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1},8,["label"])):ne("",!0)}}),Zv=ue(Jv,[["__scopeId","data-v-88af2de4"]]),Qv={class:"wrapper"},em={class:"container"},tm={class:"title"},nm={class:"content"},sm={class:"content-body"},rm=oe({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=ll(),{hasSidebar:s}=Ot(),{frontmatter:r}=ge(),o=fe({});return so(()=>{o.value={"has-sidebar":s.value,home:r.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(i,a)=>(m(),$("div",{class:be(["VPNavBar",o.value])},[b("div",Qv,[b("div",em,[b("div",tm,[Q(zv,null,{"nav-bar-title-before":B(()=>[M(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[M(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),b("div",nm,[b("div",sm,[M(i.$slots,"nav-bar-content-before",{},void 0,!0),Q(Bv,{class:"search"}),Q(Nv,{class:"menu"}),Q(Zv,{class:"translations"}),Q(Bp,{class:"appearance"}),Q(Kv,{class:"social-links"}),Q(kv,{class:"extra"}),M(i.$slots,"nav-bar-content-after",{},void 0,!0),Q(xv,{class:"hamburger",active:e.isScreenOpen,onClick:a[0]||(a[0]=l=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),a[1]||(a[1]=b("div",{class:"divider"},[b("div",{class:"divider-line"})],-1))],2))}}),om=ue(rm,[["__scopeId","data-v-6aa21345"]]),im={key:0,class:"VPNavScreenAppearance"},am={class:"text"},lm=oe({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=ge();return(s,r)=>w(t).appearance&&w(t).appearance!=="force-dark"&&w(t).appearance!=="force-auto"?(m(),$("div",im,[b("p",am,me(w(n).darkModeSwitchLabel||"Appearance"),1),Q(wo)])):ne("",!0)}}),cm=ue(lm,[["__scopeId","data-v-b44890b2"]]),um=["innerHTML"],fm=oe({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=ft("close-screen");return(n,s)=>(m(),ae(_t,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:w(t)},{default:B(()=>[b("span",{innerHTML:e.item.text},null,8,um)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),dm=ue(fm,[["__scopeId","data-v-df37e6dd"]]),hm=["innerHTML"],pm=oe({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=ft("close-screen");return(n,s)=>(m(),ae(_t,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:w(t)},{default:B(()=>[b("span",{innerHTML:e.item.text},null,8,hm)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),xl=ue(pm,[["__scopeId","data-v-3e9c20e4"]]),vm={class:"VPNavScreenMenuGroupSection"},mm={key:0,class:"title"},gm=oe({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(m(),$("div",vm,[e.text?(m(),$("p",mm,me(e.text),1)):ne("",!0),(m(!0),$(de,null,Re(e.items,s=>(m(),ae(xl,{key:s.text,item:s},null,8,["item"]))),128))]))}}),bm=ue(gm,[["__scopeId","data-v-8133b170"]]),ym=["aria-controls","aria-expanded"],_m=["innerHTML"],wm=["id"],km={key:0,class:"item"},Sm={key:1,class:"item"},Tm={key:2,class:"group"},xm=oe({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=fe(!1),s=Y(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function r(){n.value=!n.value}return(o,i)=>(m(),$("div",{class:be(["VPNavScreenMenuGroup",{open:n.value}])},[b("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:r},[b("span",{class:"button-text",innerHTML:e.text},null,8,_m),i[0]||(i[0]=b("span",{class:"vpi-plus button-icon"},null,-1))],8,ym),b("div",{id:s.value,class:"items"},[(m(!0),$(de,null,Re(e.items,a=>(m(),$(de,{key:JSON.stringify(a)},["link"in a?(m(),$("div",km,[Q(xl,{item:a},null,8,["item"])])):"component"in a?(m(),$("div",Sm,[(m(),ae(yt(a.component),Pt({ref_for:!0},a.props,{"screen-menu":""}),null,16))])):(m(),$("div",Tm,[Q(bm,{text:a.text,items:a.items},null,8,["text","items"])]))],64))),128))],8,wm)],2))}}),$m=ue(xm,[["__scopeId","data-v-b9ab8c58"]]),Em={key:0,class:"VPNavScreenMenu"},Am=oe({__name:"VPNavScreenMenu",setup(e){const{theme:t}=ge();return(n,s)=>w(t).nav?(m(),$("nav",Em,[(m(!0),$(de,null,Re(w(t).nav,r=>(m(),$(de,{key:JSON.stringify(r)},["link"in r?(m(),ae(dm,{key:0,item:r},null,8,["item"])):"component"in r?(m(),ae(yt(r.component),Pt({key:1,ref_for:!0},r.props,{"screen-menu":""}),null,16)):(m(),ae($m,{key:2,text:r.text||"",items:r.items},null,8,["text","items"]))],64))),128))])):ne("",!0)}}),Pm=oe({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=ge();return(n,s)=>w(t).socialLinks?(m(),ae(To,{key:0,class:"VPNavScreenSocialLinks",links:w(t).socialLinks},null,8,["links"])):ne("",!0)}}),Cm={class:"list"},Lm=oe({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=rs({correspondingLink:!0}),s=fe(!1);function r(){s.value=!s.value}return(o,i)=>w(t).length&&w(n).label?(m(),$("div",{key:0,class:be(["VPNavScreenTranslations",{open:s.value}])},[b("button",{class:"title",onClick:r},[i[0]||(i[0]=b("span",{class:"vpi-languages icon lang"},null,-1)),ze(" "+me(w(n).label)+" ",1),i[1]||(i[1]=b("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),b("ul",Cm,[(m(!0),$(de,null,Re(w(t),a=>(m(),$("li",{key:a.link,class:"item"},[Q(_t,{class:"link",href:a.link},{default:B(()=>[ze(me(a.text),1)]),_:2},1032,["href"])]))),128))])],2)):ne("",!0)}}),Nm=ue(Lm,[["__scopeId","data-v-858fe1a4"]]),Mm={class:"container"},Im=oe({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=fe(null),n=vo(Me?document.body:null);return(s,r)=>(m(),ae(co,{name:"fade",onEnter:r[0]||(r[0]=o=>n.value=!0),onAfterLeave:r[1]||(r[1]=o=>n.value=!1)},{default:B(()=>[e.open?(m(),$("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[b("div",Mm,[M(s.$slots,"nav-screen-content-before",{},void 0,!0),Q(Am,{class:"menu"}),Q(Nm,{class:"translations"}),Q(cm,{class:"appearance"}),Q(Pm,{class:"social-links"}),M(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):ne("",!0)]),_:3}))}}),Vm=ue(Im,[["__scopeId","data-v-f2779853"]]),Om={key:0,class:"VPNav"},Fm=oe({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=Lp(),{frontmatter:r}=ge(),o=Y(()=>r.value.navbar!==!1);return no("close-screen",n),It(()=>{Me&&document.documentElement.classList.toggle("hide-nav",!o.value)}),(i,a)=>o.value?(m(),$("header",Om,[Q(om,{"is-screen-open":w(t),onToggleScreen:w(s)},{"nav-bar-title-before":B(()=>[M(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[M(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":B(()=>[M(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":B(()=>[M(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),Q(Vm,{open:w(t)},{"nav-screen-content-before":B(()=>[M(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":B(()=>[M(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):ne("",!0)}}),Rm=ue(Fm,[["__scopeId","data-v-ae24b3ad"]]),Dm=["role","tabindex"],Hm={key:1,class:"items"},Bm=oe({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:r,isActiveLink:o,hasActiveLink:i,hasChildren:a,toggle:l}=Vd(Y(()=>t.item)),c=Y(()=>a.value?"section":"div"),u=Y(()=>r.value?"a":"div"),f=Y(()=>a.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),p=Y(()=>r.value?void 0:"button"),y=Y(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":r.value},{"is-active":o.value},{"has-active":i.value}]);function k(O){"key"in O&&O.key!=="Enter"||!t.item.link&&l()}function S(){t.item.link&&l()}return(O,N)=>{const U=un("VPSidebarItem",!0);return m(),ae(yt(c.value),{class:be(["VPSidebarItem",y.value])},{default:B(()=>[e.item.text?(m(),$("div",Pt({key:0,class:"item",role:p.value},ou(e.item.items?{click:k,keydown:k}:{},!0),{tabindex:e.item.items&&0}),[N[1]||(N[1]=b("div",{class:"indicator"},null,-1)),e.item.link?(m(),ae(_t,{key:0,tag:u.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:B(()=>[(m(),ae(yt(f.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(m(),ae(yt(f.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(m(),$("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:S,onKeydown:_f(S,["enter"]),tabindex:"0"},[...N[0]||(N[0]=[b("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):ne("",!0)],16,Dm)):ne("",!0),e.item.items&&e.item.items.length?(m(),$("div",Hm,[e.depth<5?(m(!0),$(de,{key:0},Re(e.item.items,h=>(m(),ae(U,{key:h.text,item:h,depth:e.depth+1},null,8,["item","depth"]))),128)):ne("",!0)])):ne("",!0)]),_:1},8,["class"])}}}),jm=ue(Bm,[["__scopeId","data-v-b3fd67f8"]]),Km=oe({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=fe(!0);let n=null;return Be(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),Zs(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,r)=>(m(!0),$(de,null,Re(e.items,o=>(m(),$("div",{key:o.text,class:be(["group",{"no-transition":t.value}])},[Q(jm,{item:o,depth:0},null,8,["item"])],2))),128))}}),Um=ue(Km,[["__scopeId","data-v-c40bc020"]]),Wm={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},qm=oe({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=Ot(),s=e,r=fe(null),o=vo(Me?document.body:null);Ce([s,r],()=>{var a;s.open?(o.value=!0,(a=r.value)==null||a.focus()):o.value=!1},{immediate:!0,flush:"post"});const i=fe(0);return Ce(t,()=>{i.value+=1},{deep:!0}),(a,l)=>w(n)?(m(),$("aside",{key:0,class:be(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:r,onClick:l[0]||(l[0]=Ja(()=>{},["stop"]))},[l[2]||(l[2]=b("div",{class:"curtain"},null,-1)),b("nav",Wm,[l[1]||(l[1]=b("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),M(a.$slots,"sidebar-nav-before",{},void 0,!0),(m(),ae(Um,{items:w(t),key:i.value},null,8,["items"])),M(a.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):ne("",!0)}}),Gm=ue(qm,[["__scopeId","data-v-319d5ca6"]]),zm=oe({__name:"VPSkipLink",setup(e){const{theme:t}=ge(),n=Cn(),s=fe();Ce(()=>n.path,()=>s.value.focus());function r({target:o}){const i=document.getElementById(decodeURIComponent(o.hash).slice(1));if(i){const a=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",a)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",a),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(m(),$(de,null,[b("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),b("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:r},me(w(t).skipToContentLabel||"Skip to content"),1)],64))}}),Ym=ue(zm,[["__scopeId","data-v-0b0ada53"]]),Xm=oe({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=Ot(),r=Cn();Ce(()=>r.path,s),Id(t,s);const{frontmatter:o}=ge(),i=au(),a=Y(()=>!!i["home-hero-image"]);return no("hero-image-slot-exists",a),(l,c)=>{const u=un("Content");return w(o).layout!==!1?(m(),$("div",{key:0,class:be(["Layout",w(o).pageClass])},[M(l.$slots,"layout-top",{},void 0,!0),Q(Ym),Q(wd,{class:"backdrop",show:w(t),onClick:w(s)},null,8,["show","onClick"]),Q(Rm,null,{"nav-bar-title-before":B(()=>[M(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[M(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":B(()=>[M(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":B(()=>[M(l.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":B(()=>[M(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":B(()=>[M(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),Q(Cp,{open:w(t),onOpenMenu:w(n)},null,8,["open","onOpenMenu"]),Q(Gm,{open:w(t)},{"sidebar-nav-before":B(()=>[M(l.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":B(()=>[M(l.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),Q(pp,null,{"page-top":B(()=>[M(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":B(()=>[M(l.$slots,"page-bottom",{},void 0,!0)]),"not-found":B(()=>[M(l.$slots,"not-found",{},void 0,!0)]),"home-hero-before":B(()=>[M(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":B(()=>[M(l.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":B(()=>[M(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":B(()=>[M(l.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":B(()=>[M(l.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":B(()=>[M(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":B(()=>[M(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":B(()=>[M(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":B(()=>[M(l.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":B(()=>[M(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":B(()=>[M(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":B(()=>[M(l.$slots,"doc-after",{},void 0,!0)]),"doc-top":B(()=>[M(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":B(()=>[M(l.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":B(()=>[M(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":B(()=>[M(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":B(()=>[M(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[M(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[M(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[M(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),Q(yp),M(l.$slots,"layout-bottom",{},void 0,!0)],2)):(m(),ae(u,{key:1}))}}}),Jm=ue(Xm,[["__scopeId","data-v-5d98c3a5"]]),$l={Layout:Jm,enhanceApp:({app:e})=>{e.component("Badge",xf)}},Zm={class:"vix-footerbar",role:"contentinfo"},Qm={class:"vix-footerbar__inner"},eg={class:"vix-footerbar__nav","aria-label":"Footer"},tg=["href"],ng={__name:"Layout",setup(e){const{Layout:t}=$l,n=[{text:"Docs",href:"/docs"},{text:"Guides",href:"/docs/guide"},{text:"Registry",href:"/registry"},{text:"Examples",href:"/docs/examples"},{text:"Services",href:"/services"}];return(s,r)=>(m(),ae(w(t),null,{"layout-bottom":B(()=>[b("footer",Zm,[b("div",Qm,[r[0]||(r[0]=b("div",{class:"vix-footerbar__brand"},"Vix.cpp",-1)),b("nav",eg,[(m(),$(de,null,Re(n,o=>b("a",{key:o.text,class:"vix-footerbar__link",href:o.href},me(o.text),9,tg)),64))]),r[1]||(r[1]=b("div",{class:"vix-footerbar__social","aria-label":"Social links"},[b("a",{class:"vix-footerbar__icon",href:"https://github.com/vixcpp",target:"_blank",rel:"noreferrer","aria-label":"GitHub"},[b("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[b("path",{d:`M12 2C6.48 2 2 6.58 2 12.26c0 4.54 2.87 8.39 6.84 9.75.5.1.68-.22.68-.48 + 0-.24-.01-.88-.01-1.73-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.49-1.11-1.49 + -.9-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.57 2.34 1.12 2.91.86 + .09-.66.35-1.12.63-1.38-2.22-.26-4.56-1.14-4.56-5.06 0-1.12.39-2.04 1.03-2.76 + -.1-.26-.45-1.3.1-2.71 0 0 .84-.27 2.75 1.05A9.2 9.2 0 0 1 12 7.07c.85 0 1.71.12 + 2.51.35 1.9-1.32 2.74-1.05 2.74-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.64 1.03 2.76 + 0 3.93-2.34 4.79-4.57 5.05.36.32.68.95.68 1.92 0 1.38-.01 2.5-.01 2.84 + 0 .27.18.59.69.48A10.04 10.04 0 0 0 22 12.26C22 6.58 17.52 2 12 2z`})])]),b("a",{class:"vix-footerbar__icon",href:"https://discord.gg/XXXX",target:"_blank",rel:"noreferrer","aria-label":"Discord"},[b("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[b("path",{d:`M20 4.5a16.3 16.3 0 0 0-4-1.3l-.2.4a15.5 15.5 0 0 1 3 1.2 + 11.9 11.9 0 0 0-3.7-1.1c-.6.8-1 1.7-1.2 2.1a14.5 14.5 0 0 0-3.8 0 + c-.2-.4-.6-1.3-1.2-2.1A11.9 11.9 0 0 0 5.2 4.8a15.5 15.5 0 0 1 3-1.2l-.2-.4 + a16.3 16.3 0 0 0-4 1.3C2.4 7 1.8 9.4 2 12c1.3 2 3.3 3.2 5.6 3.7 + l.4-.6a9.4 9.4 0 0 1-1.8-.9l.4-.3c1.1.5 2.3.9 3.5 1.1a13 13 0 0 0 4.8 0 + c1.2-.2 2.4-.6 3.5-1.1l.4.3c-.6.4-1.2.7-1.8.9l.4.6c2.3-.5 4.3-1.7 5.6-3.7 + .3-2.6-.4-5-2-7.5ZM9.2 12.9c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4 + 1.3.6 1.3 1.4-.6 1.4-1.3 1.4Zm5.6 0c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4 + 1.3.6 1.3 1.4-.6 1.4-1.3 1.4Z`})])]),b("a",{class:"vix-footerbar__icon",href:"https://x.com/vixcpp",target:"_blank",rel:"noreferrer","aria-label":"X"},[b("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[b("path",{d:"M18.9 2H22l-6.8 7.8L23 22h-6.7l-5.2-6.8L5.3 22H2l7.3-8.4L1.7 2h6.9l4.7 6.1L18.9 2Zm-1.2 18h1.7L7.7 3.9H5.9L17.7 20Z"})])]),b("a",{class:"vix-footerbar__icon",href:"https://www.youtube.com/@vixcpp",target:"_blank",rel:"noreferrer","aria-label":"YouTube"},[b("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[b("path",{d:`M21.6 7.2a2.7 2.7 0 0 0-1.9-1.9C18 4.9 12 4.9 12 4.9s-6 0-7.7.4 + A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8 + 2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9 + A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z`})])])],-1))])])]),_:1}))}},sg={class:"code-head"},rg={class:"head-left"},og={class:"head-title"},ig={key:0,class:"chips"},ag={class:"head-right"},lg={key:0,class:"tabs"},cg=["onClick"],ug=["title"],fg={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},dg={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},hg={class:"code-pre"},pg=["innerHTML"],vg={key:0,class:"code-foot"},mg={class:"code-note"},El={__name:"CodeBlock",props:{title:{type:String,default:""},code:{type:String,default:""},run:{type:String,default:""},out:{type:String,default:""},note:{type:String,default:""},lang:{type:String,default:""},chips:{type:Array,default:()=>[]},maxHeight:{type:[Number,String],default:380}},setup(e){const t=e,n=fe(!1),s=fe("code"),r=fe(!1),o=Y(()=>{var v,I,ee;const h=[];return(v=t.code)!=null&&v.trim()&&h.push({key:"code",label:"Code",text:t.code,lang:p("code")}),(I=t.run)!=null&&I.trim()&&h.push({key:"run",label:"Run",text:t.run,lang:"shell"}),(ee=t.out)!=null&&ee.trim()&&h.push({key:"out",label:"Output",text:t.out,lang:"shell"}),h});Ce(()=>o.value.map(h=>h.key).join(","),()=>{var h;o.value.find(v=>v.key===s.value)||(s.value=((h=o.value[0])==null?void 0:h.key)||"code")},{immediate:!0});const i=Y(()=>o.value.find(h=>h.key===s.value)||o.value[0]),a=Y(()=>{var h;return((h=i.value)==null?void 0:h.text)||""}),l=Y(()=>{var h;return((h=i.value)==null?void 0:h.lang)||p(s.value)}),c=Y(()=>s.value==="run"?"Run":s.value==="out"?"Output":l.value==="shell"?"Shell":"C++"),u=Y(()=>(t.chips||[]).filter(Boolean)),f=Y(()=>{const h=t.maxHeight;return typeof h=="number"?`${h}px`:typeof h=="string"&&h.trim()?h:"380px"});function p(h){if(t.lang)return t.lang;if(h==="run"||h==="out")return"shell";const v=(t.code||"").trim();return v.includes("#include")||v.includes("int main")||v.includes("std::")?"cpp":v.startsWith("~$")||v.includes(" vix ")||v.includes("$ ")?"shell":"cpp"}function y(h){return String(h).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function k(h){return String(h??"").split(` +`).map(I=>{let ee=I.replace(/^\s*>\s?/,"");return ee=ee.replace(/\s*>\s*:(\d{2,5})/g," :$1"),ee}).join(` +`)}function S(h){const I=String(h??"").split(` +`),ee=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),q=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),se=new Set(["std","vix","asio","net","http","ws"]);function E(x,_){return`${y(_)}`}function G(x){let _=!1,T=!1;for(let P=0;P\n]*>)(.*)$/);if(C)return K+=y(C[1]),K+=E("cpp-include",C[2]),K+=L(C[3]||""),K;const z=P.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return z?(K+=y(z[1]),K+=E("cpp-include",z[2]),K+=L(z[4]||""),K):(K+=L(P),K)}function L(x){let _="",T=0;const P=C=>/[A-Za-z_]/.test(C),K=C=>/[A-Za-z0-9_]/.test(C);for(;T{for(let ce=T-1;ce>=0;ce--)if(x[ce]!==" "&&x[ce]!==" ")return x[ce];return""})(),V=(()=>{for(let ce=z;ce"?_+=E("cpp-member",re):_+=E("cpp-ident",re),T=z;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(C)){if(x.startsWith("::",T)){_+=E("cpp-op","::"),T+=2;continue}if(x.startsWith("->",T)){_+=E("cpp-op","->"),T+=2;continue}_+=E("cpp-op",C),T++;continue}_+=y(C),T++}return _=_.replace(/(https?:\/\/[^\s<]+)/g,'$1'),_}return I.map(x=>{const{code:_,comment:T}=G(x),K=W(_)??L(_),C=T?`${y(T)}`:"";return K+C}).join(` +`)}function O(h){let v=y(k(h));return v=v.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),v=v.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),v=v.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),v=v.replace(/(https?:\/\/[^\s]+)/g,'$1'),v=v.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),v=v.replace(/(:\d{2,5}\b)/g,'$1'),v=v.replace(/(\s\|\|\s|\s\|\s)/g,'$1'),v=v.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),v=v.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),v}const N=Y(()=>{const h=a.value||"";return l.value==="shell"?O(h):S(h)});async function U(h){try{await navigator.clipboard.writeText(h),n.value=!0,window.clearTimeout(U._t),U._t=window.setTimeout(()=>n.value=!1,900)}catch{const v=document.createElement("textarea");v.value=h,v.style.position="fixed",v.style.opacity="0",document.body.appendChild(v),v.focus(),v.select();try{document.execCommand("copy"),n.value=!0,window.clearTimeout(U._t),U._t=window.setTimeout(()=>n.value=!1,900)}finally{document.body.removeChild(v)}}}return(h,v)=>(m(),$("div",{class:"code-card",onMouseenter:v[1]||(v[1]=I=>r.value=!0),onMouseleave:v[2]||(v[2]=I=>r.value=!1)},[b("div",sg,[b("div",rg,[v[3]||(v[3]=b("span",{class:"dot dot-red"},null,-1)),v[4]||(v[4]=b("span",{class:"dot dot-yellow"},null,-1)),v[5]||(v[5]=b("span",{class:"dot dot-green"},null,-1)),b("span",og,me(e.title||c.value),1),u.value.length?(m(),$("div",ig,[(m(!0),$(de,null,Re(u.value,I=>(m(),$("span",{key:I,class:"chip"},me(I),1))),128))])):ne("",!0)]),b("div",ag,[o.value.length>1?(m(),$("div",lg,[(m(!0),$(de,null,Re(o.value,I=>(m(),$("button",{key:I.key,type:"button",class:be(["tab",{active:s.value===I.key}]),onClick:ee=>s.value=I.key},me(I.label),11,cg))),128))])):ne("",!0),a.value?(m(),$("button",{key:1,type:"button",class:"copy-btn",onClick:v[0]||(v[0]=I=>U(a.value)),title:n.value?"Copied":"Copy","aria-label":"Copy"},[n.value?(m(),$("svg",dg,[...v[7]||(v[7]=[b("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(m(),$("svg",fg,[...v[6]||(v[6]=[b("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),b("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,ug)):ne("",!0)])]),b("div",{class:"code-body",style:Pn({maxHeight:f.value}),role:"region","aria-label":"Code block"},[b("pre",hg,[b("code",{class:"code-code",innerHTML:N.value},null,8,pg)])],4),e.note?(m(),$("div",vg,[b("p",mg,me(e.note),1)])):ne("",!0)],32))}},gg={class:"vix-docs-hero"},bg={class:"vix-docs-hero__right"},yg={class:"vix-hero-cards"},_g=["href"],wg={class:"vix-hero-card__top"},kg={class:"vix-hero-card__icon","aria-hidden":"true"},Sg={viewBox:"0 0 24 24",fill:"none"},Tg=["d"],xg={class:"vix-hero-card__title"},$g={class:"vix-hero-card__desc"},Eg=`#include +using namespace vix; + +int main() +{ + App app; + + app.get("/", [](Request&, Response& res){ + res.send("Hello"); + }); + + app.run(8080); +}`,Ag={__name:"DocsHomeHero",setup(e){const t=[{title:"HTTP APIs",desc:"Build fast endpoints with explicit routing, predictable performance, and zero hidden magic.",icon:"swap",href:"/docs/modules/core/example.html"},{title:"WebSockets",desc:"Real time channels with robust connection handling and backpressure friendly design.",icon:"bolt",href:"/docs/modules/websocket"},{title:"Async Tasks",desc:"A unified runtime for scheduling, timers, and concurrency in performance critical workloads.",icon:"chip",href:"/docs/modules/async"},{title:"P2P",desc:"Peer to peer communication primitives designed for unstable networks and local first systems.",icon:"p2p",href:"/docs/modules/p2p"}];function n(s){return s==="swap"?"M7 7h11l-2-2m2 2l-2 2M17 17H6l2 2m-2-2l2-2":s==="bolt"?"M13 2L4 14h7l-1 8 9-12h-7l1-8z":s==="chip"?"M9 9h6v6H9V9zm-5 3h2m12 0h2M12 4v2m0 12v2M6.5 6.5l1.4 1.4m8.2 8.2l1.4 1.4m0-12.4l-1.4 1.4M7.9 16.1l-1.4 1.4":"M6 12a2 2 0 114 0 2 2 0 01-4 0zm8-6a2 2 0 114 0 2 2 0 01-4 0zm0 12a2 2 0 114 0 2 2 0 01-4 0zM10 12l4-6M10 12l4 6"}return(s,r)=>(m(),$(de,null,[b("div",gg,[r[1]||(r[1]=Iu('

Vix.cpp Documentation

A modern C++ runtime for building fast, explicit, and offline-first applications.

Vix.cpp is designed for real-world conditions: unstable networks, constrained environments, and performance-critical workloads. It provides a unified runtime for HTTP APIs, WebSockets, async tasks, and local-first systems, without garbage collection or hidden magic.

',1)),b("div",bg,[r[0]||(r[0]=b("div",{class:"vix-hero-annot vix-hint"},[ze(" Your runtime endpoint "),b("br"),ze(" works with the Vix.cpp API ")],-1)),Q(El,{title:"main.cpp",lang:"cpp",chips:["http"],code:Eg,maxHeight:360})])]),b("div",yg,[(m(),$(de,null,Re(t,o=>b("a",{key:o.title,class:"vix-hero-card",href:o.href},[b("div",wg,[b("div",kg,[(m(),$("svg",Sg,[b("path",{d:n(o.icon),stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},null,8,Tg)]))]),r[2]||(r[2]=b("div",{class:"vix-hero-card__arrow","aria-hidden":"true"},[b("svg",{viewBox:"0 0 24 24",fill:"none"},[b("path",{d:"M9 6l6 6-6 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1))]),b("div",xg,me(o.title),1),b("div",$g,me(o.desc),1)],8,_g)),64))])],64))}},Pg={class:"vix-code-tabs"},Cg={class:"vix-code-tabs__head"},Lg={class:"vix-code-tabs__meta"},Ng={class:"vix-code-tabs__title"},Mg={key:0,class:"vix-code-tabs__subtitle"},Ig=["aria-selected","tabindex","data-key","onClick"],Vg={class:"vix-code-tabs__body"},Og={key:0,class:"vix-code-tabs__file"},Fg={class:"vix-code-tabs__badge"},Rg={class:"vix-code-tabs__filename"},Dg={__name:"CodeTabs",props:{title:{type:String,default:"Examples"},subtitle:{type:String,default:""},examples:{type:Array,required:!0},defaultKey:{type:String,default:""}},setup(e){var c,u;const t=e,n=fe(t.defaultKey||(((u=(c=t.examples)==null?void 0:c[0])==null?void 0:u.key)??""));Ce(()=>{var f;return[t.defaultKey,(f=t.examples)==null?void 0:f.map(p=>p.key).join("|")].join("::")},()=>{var y,k,S;const f=t.defaultKey||n.value,p=(y=t.examples)==null?void 0:y.some(O=>O.key===f);n.value=p?f:((S=(k=t.examples)==null?void 0:k[0])==null?void 0:S.key)??""},{immediate:!0});const s=Y(()=>t.examples.find(f=>f.key===n.value)||t.examples[0]||null);function r(f){n.value=f}function o(f){var O,N,U,h;const p=((O=t.examples)==null?void 0:O.map(v=>v.key))??[];if(!p.length)return;const y=Math.max(0,p.indexOf(n.value));let k=y;if(f.key==="ArrowRight")k=(y+1)%p.length;else if(f.key==="ArrowLeft")k=(y-1+p.length)%p.length;else if(f.key==="Home")k=0;else if(f.key==="End")k=p.length-1;else return;f.preventDefault(),n.value=p[k];const S=(U=(N=f.currentTarget)==null?void 0:N.querySelector)==null?void 0:U.call(N,`button[data-key="${n.value}"]`);(h=S==null?void 0:S.focus)==null||h.call(S)}const i=Y(()=>{const f=s.value;return f&&(f.title||f.file||f.label)||""}),a=Y(()=>{var f;return((f=s.value)==null?void 0:f.lang)||""}),l=Y(()=>{var f;return Array.isArray((f=s.value)==null?void 0:f.chips)?s.value.chips:[]});return(f,p)=>{var y,k,S,O,N;return m(),$("div",Pg,[b("div",Cg,[b("div",Lg,[b("div",Ng,me(e.title),1),e.subtitle?(m(),$("div",Mg,me(e.subtitle),1)):ne("",!0)]),b("div",{class:"vix-code-tabs__tabs",role:"tablist","aria-label":"Code examples",onKeydown:o},[(m(!0),$(de,null,Re(e.examples,U=>(m(),$("button",{key:U.key,class:be(["vix-code-tabs__tab",{"is-active":U.key===n.value}]),"aria-selected":U.key===n.value,tabindex:U.key===n.value?0:-1,role:"tab",type:"button","data-key":U.key,onClick:h=>r(U.key)},me(U.label),11,Ig))),128))],32)]),b("div",Vg,[(y=s.value)!=null&&y.file?(m(),$("div",Og,[b("span",Fg,me(s.value.lang||"txt"),1),b("span",Rg,me(s.value.file),1)])):ne("",!0),Q(El,{title:i.value,lang:a.value,chips:l.value,code:((k=s.value)==null?void 0:k.code)||"",run:((S=s.value)==null?void 0:S.run)||"",out:((O=s.value)==null?void 0:O.out)||"",note:((N=s.value)==null?void 0:N.note)||"",maxHeight:420},null,8,["title","lang","chips","code","run","out","note"])])])}}},Hg=ue(Dg,[["__scopeId","data-v-85e456b0"]]),Bg={...$l,Layout:ng,enhanceApp({app:e}){e.component("DocsHomeHero",Ag),e.component("CodeTabs",Hg)}},jg=oe({setup(e,{slots:t}){const n=fe(!1);return Be(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Kg(){Me&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const o=s.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(c=>c.classList.contains("active"));if(!i)return;const a=o.children[r];if(!a||i===a)return;i.classList.remove("active"),a.classList.add("active");const l=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);l==null||l.scrollIntoView({block:"nearest"})}})}function Ug(){if(Me){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,o=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),a=[".vp-copy-ignore",".diff.remove"],l=o.cloneNode(!0);l.querySelectorAll(a.join(",")).forEach(u=>u.remove());let c=l.textContent||"";i&&(c=c.replace(/^ *(\$|>) /gm,"").trim()),Wg(c).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const u=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,u)})}})}}async function Wg(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function qg(e,t){let n=!0,s=[];const r=o=>{if(n){n=!1,o.forEach(a=>{const l=Er(a);for(const c of document.head.children)if(c.isEqualNode(l)){s.push(c);return}});return}const i=o.map(Er);s.forEach((a,l)=>{const c=i.findIndex(u=>u==null?void 0:u.isEqualNode(a??null));c!==-1?delete i[c]:(a==null||a.remove(),delete s[l])}),i.forEach(a=>a&&document.head.appendChild(a)),s=[...s,...i].filter(Boolean)};It(()=>{const o=e.data,i=t.value,a=o&&o.description,l=o&&o.frontmatter.head||[],c=fl(i,o);c!==document.title&&(document.title=c);const u=a||i.description;let f=document.querySelector("meta[name=description]");f?f.getAttribute("content")!==u&&f.setAttribute("content",u):Er(["meta",{name:"description",content:u}]),r(dl(i.head,zg(l)))})}function Er([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function Gg(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function zg(e){return e.filter(t=>!Gg(t))}const Ar=new Set,Al=()=>document.createElement("link"),Yg=e=>{const t=Al();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Xg=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let ms;const Jg=Me&&(ms=Al())&&ms.relList&&ms.relList.supports&&ms.relList.supports("prefetch")?Yg:Xg;function Zg(){if(!Me||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const a=i.target;n.unobserve(a);const{pathname:l}=a;if(!Ar.has(l)){Ar.add(l);const c=bo(l);c&&Jg(c)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:a}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),l=a.match(/\.\w+$/);l&&l[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(a!==location.pathname?n.observe(o):Ar.add(a))})})};Be(s);const r=Cn();Ce(()=>r.path,s),cn(()=>{n&&n.disconnect()})}function Pl(e){if(e.extends){const t=Pl(e.extends);return{...t,...e,async enhanceApp(n){t.enhanceApp&&await t.enhanceApp(n),e.enhanceApp&&await e.enhanceApp(n)}}}return e}const Tn=Pl(Bg),Qg=oe({name:"VitePressApp",setup(){const{site:e,lang:t,dir:n}=go();return Be(()=>{It(()=>{document.documentElement.lang=t.value,document.documentElement.dir=n.value})}),e.value.router.prefetchLinks&&Zg(),Ug(),Kg(),Tn.setup&&Tn.setup(),()=>Vs(Tn.Layout)}});async function eb(){globalThis.__VITEPRESS__=!0;const e=nb(),t=tb();t.provide(vl,e);const n=pd(e.route);return t.provide(mo,n),t.component("Content",bd),t.component("ClientOnly",jg),Object.defineProperties(t.config.globalProperties,{$frontmatter:{get(){return n.frontmatter.value}},$params:{get(){return n.page.value.params}}}),Tn.enhanceApp&&await Tn.enhanceApp({app:t,router:e,siteData:Ut}),{app:t,router:e,data:n}}function tb(){return Tf(Qg)}function nb(){let e=Me;return gd(t=>{let n=bo(t),s=null;return n&&(e&&(n=n.replace(/\.js$/,".lean.js")),s=import(n)),Me&&(e=!1),s},Tn.NotFound)}Me&&eb().then(({app:e,router:t,data:n})=>{t.go().then(()=>{qg(t.route,n.site),e.mount("#app")})});const sb={root:()=>Sl(()=>import("./chunks/@localSearchIndexroot.BQXDtRpN.js"),[])};/*! +* tabbable 6.4.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var Cl=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],Fs=Cl.join(","),Ll=typeof Element>"u",ln=Ll?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Rs=!Ll&&Element.prototype.getRootNode?function(e){var t;return e==null||(t=e.getRootNode)===null||t===void 0?void 0:t.call(e)}:function(e){return e==null?void 0:e.ownerDocument},Ds=function(t,n){var s;n===void 0&&(n=!0);var r=t==null||(s=t.getAttribute)===null||s===void 0?void 0:s.call(t,"inert"),o=r===""||r==="true",i=o||n&&t&&(typeof t.closest=="function"?t.closest("[inert]"):Ds(t.parentNode));return i},rb=function(t){var n,s=t==null||(n=t.getAttribute)===null||n===void 0?void 0:n.call(t,"contenteditable");return s===""||s==="true"},Nl=function(t,n,s){if(Ds(t))return[];var r=Array.prototype.slice.apply(t.querySelectorAll(Fs));return n&&ln.call(t,Fs)&&r.unshift(t),r=r.filter(s),r},Hs=function(t,n,s){for(var r=[],o=Array.from(t);o.length;){var i=o.shift();if(!Ds(i,!1))if(i.tagName==="SLOT"){var a=i.assignedElements(),l=a.length?a:i.children,c=Hs(l,!0,s);s.flatten?r.push.apply(r,c):r.push({scopeParent:i,candidates:c})}else{var u=ln.call(i,Fs);u&&s.filter(i)&&(n||!t.includes(i))&&r.push(i);var f=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!Ds(f,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(f&&p){var y=Hs(f===!0?i.children:f.children,!0,s);s.flatten?r.push.apply(r,y):r.push({scopeParent:i,candidates:y})}else o.unshift.apply(o,i.children)}}return r},Ml=function(t){return!isNaN(parseInt(t.getAttribute("tabindex"),10))},en=function(t){if(!t)throw new Error("No node provided");return t.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||rb(t))&&!Ml(t)?0:t.tabIndex},ob=function(t,n){var s=en(t);return s<0&&n&&!Ml(t)?0:s},ib=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},Il=function(t){return t.tagName==="INPUT"},ab=function(t){return Il(t)&&t.type==="hidden"},lb=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(s){return s.tagName==="SUMMARY"});return n},cb=function(t,n){for(var s=0;ssummary:first-of-type"),a=i?t.parentElement:t;if(ln.call(a,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="full-native"||s==="legacy-full"){if(typeof r=="function"){for(var l=t;t;){var c=t.parentElement,u=Rs(t);if(c&&!c.shadowRoot&&r(c)===!0)return Ei(t);t.assignedSlot?t=t.assignedSlot:!c&&u!==t.ownerDocument?t=u.host:t=c}t=l}if(hb(t))return!t.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return Ei(t);return!1},vb=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var s=0;s=0)},Vl=function(t){var n=[],s=[];return t.forEach(function(r,o){var i=!!r.scopeParent,a=i?r.scopeParent:r,l=ob(a,i),c=i?Vl(r.candidates):a;l===0?i?n.push.apply(n,c):n.push(a):s.push({documentOrder:o,tabIndex:l,item:r,isScope:i,content:c})}),s.sort(ib).reduce(function(r,o){return o.isScope?r.push.apply(r,o.content):r.push(o.content),r},[]).concat(n)},gb=function(t,n){n=n||{};var s;return n.getShadowRoot?s=Hs([t],n.includeContainer,{filter:Ur.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:mb}):s=Nl(t,n.includeContainer,Ur.bind(null,n)),Vl(s)},bb=function(t,n){n=n||{};var s;return n.getShadowRoot?s=Hs([t],n.includeContainer,{filter:Bs.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):s=Nl(t,n.includeContainer,Bs.bind(null,n)),s},vn=function(t,n){if(n=n||{},!t)throw new Error("No node provided");return ln.call(t,Fs)===!1?!1:Ur(n,t)},yb=Cl.concat("iframe:not([inert]):not([inert] *)").join(","),Pr=function(t,n){if(n=n||{},!t)throw new Error("No node provided");return ln.call(t,yb)===!1?!1:Bs(n,t)};/*! +* focus-trap 7.8.0 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function Wr(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,s=Array(t);n=e.length?{done:!0}:{done:!1,value:e[s++]}},e:function(l){throw l},f:r}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o,i=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var l=n.next();return i=l.done,l},e:function(l){a=!0,o=l},f:function(){try{i||n.return==null||n.return()}finally{if(a)throw o}}}}function wb(e,t,n){return(t=$b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kb(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Sb(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Pi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,s)}return n}function Ci(e){for(var t=1;t0?t[t.length-1]:null},activateTrap:function(t,n){var s=At.getActiveTrap(t);n!==s&&At.pauseTrap(t);var r=t.indexOf(n);r===-1||t.splice(r,1),t.push(n)},deactivateTrap:function(t,n){var s=t.indexOf(n);s!==-1&&t.splice(s,1),At.unpauseTrap(t)},pauseTrap:function(t){var n=At.getActiveTrap(t);n==null||n._setPausedState(!0)},unpauseTrap:function(t){var n=At.getActiveTrap(t);n&&!n._isManuallyPaused()&&n._setPausedState(!1)}},Eb=function(t){return t.tagName&&t.tagName.toLowerCase()==="input"&&typeof t.select=="function"},Ab=function(t){return(t==null?void 0:t.key)==="Escape"||(t==null?void 0:t.key)==="Esc"||(t==null?void 0:t.keyCode)===27},Kn=function(t){return(t==null?void 0:t.key)==="Tab"||(t==null?void 0:t.keyCode)===9},Pb=function(t){return Kn(t)&&!t.shiftKey},Cb=function(t){return Kn(t)&&t.shiftKey},Li=function(t){return setTimeout(t,0)},In=function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r1&&arguments[1]!==void 0?arguments[1]:{},P=T.hasFallback,K=P===void 0?!1:P,C=T.params,z=C===void 0?[]:C,re=o[_];if(typeof re=="function"&&(re=re.apply(void 0,Tb(z))),re===!0&&(re=void 0),!re){if(re===void 0||re===!1)return re;throw new Error("`".concat(_,"` was specified but was not a node, or did not return a node"))}var j=re;if(typeof re=="string"){try{j=s.querySelector(re)}catch(V){throw new Error("`".concat(_,'` appears to be an invalid selector; error="').concat(V.message,'"'))}if(!j&&!K)throw new Error("`".concat(_,"` as selector refers to no known node"))}return j},f=function(){var _=u("initialFocus",{hasFallback:!0});if(_===!1)return!1;if(_===void 0||_&&!Pr(_,o.tabbableOptions))if(c(s.activeElement)>=0)_=s.activeElement;else{var T=i.tabbableGroups[0],P=T&&T.firstTabbableNode;_=P||u("fallbackFocus")}else _===null&&(_=u("fallbackFocus"));if(!_)throw new Error("Your focus-trap needs to have at least one focusable element");return _},p=function(){if(i.containerGroups=i.containers.map(function(_){var T=gb(_,o.tabbableOptions),P=bb(_,o.tabbableOptions),K=T.length>0?T[0]:void 0,C=T.length>0?T[T.length-1]:void 0,z=P.find(function(V){return vn(V)}),re=P.slice().reverse().find(function(V){return vn(V)}),j=!!T.find(function(V){return en(V)>0});return{container:_,tabbableNodes:T,focusableNodes:P,posTabIndexesFound:j,firstTabbableNode:K,lastTabbableNode:C,firstDomTabbableNode:z,lastDomTabbableNode:re,nextTabbableNode:function(ce){var Te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Le=T.indexOf(ce);return Le<0?Te?P.slice(P.indexOf(ce)+1).find(function(xe){return vn(xe)}):P.slice(0,P.indexOf(ce)).reverse().find(function(xe){return vn(xe)}):T[Le+(Te?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(_){return _.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!u("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(_){return _.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function(_){var T=_.activeElement;if(T)return T.shadowRoot&&T.shadowRoot.activeElement!==null?y(T.shadowRoot):T},k=function(_){if(_!==!1&&_!==y(document)){if(!_||!_.focus){k(f());return}_.focus({preventScroll:!!o.preventScroll}),i.mostRecentlyFocusedNode=_,Eb(_)&&_.select()}},S=function(_){var T=u("setReturnFocus",{params:[_]});return T||(T===!1?!1:_)},O=function(_){var T=_.target,P=_.event,K=_.isBackward,C=K===void 0?!1:K;T=T||gs(P),p();var z=null;if(i.tabbableGroups.length>0){var re=c(T,P),j=re>=0?i.containerGroups[re]:void 0;if(re<0)C?z=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:z=i.tabbableGroups[0].firstTabbableNode;else if(C){var V=i.tabbableGroups.findIndex(function(_e){var He=_e.firstTabbableNode;return T===He});if(V<0&&(j.container===T||Pr(T,o.tabbableOptions)&&!vn(T,o.tabbableOptions)&&!j.nextTabbableNode(T,!1))&&(V=re),V>=0){var ce=V===0?i.tabbableGroups.length-1:V-1,Te=i.tabbableGroups[ce];z=en(T)>=0?Te.lastTabbableNode:Te.lastDomTabbableNode}else Kn(P)||(z=j.nextTabbableNode(T,!1))}else{var Le=i.tabbableGroups.findIndex(function(_e){var He=_e.lastTabbableNode;return T===He});if(Le<0&&(j.container===T||Pr(T,o.tabbableOptions)&&!vn(T,o.tabbableOptions)&&!j.nextTabbableNode(T))&&(Le=re),Le>=0){var xe=Le===i.tabbableGroups.length-1?0:Le+1,Ne=i.tabbableGroups[xe];z=en(T)>=0?Ne.firstTabbableNode:Ne.firstDomTabbableNode}else Kn(P)||(z=j.nextTabbableNode(T))}}else z=u("fallbackFocus");return z},N=function(_){var T=gs(_);if(!(c(T,_)>=0)){if(In(o.clickOutsideDeactivates,_)){a.deactivate({returnFocus:o.returnFocusOnDeactivate});return}In(o.allowOutsideClick,_)||_.preventDefault()}},U=function(_){var T=gs(_),P=c(T,_)>=0;if(P||T instanceof Document)P&&(i.mostRecentlyFocusedNode=T);else{_.stopImmediatePropagation();var K,C=!0;if(i.mostRecentlyFocusedNode)if(en(i.mostRecentlyFocusedNode)>0){var z=c(i.mostRecentlyFocusedNode),re=i.containerGroups[z].tabbableNodes;if(re.length>0){var j=re.findIndex(function(V){return V===i.mostRecentlyFocusedNode});j>=0&&(o.isKeyForward(i.recentNavEvent)?j+1=0&&(K=re[j-1],C=!1))}}else i.containerGroups.some(function(V){return V.tabbableNodes.some(function(ce){return en(ce)>0})})||(C=!1);else C=!1;C&&(K=O({target:i.mostRecentlyFocusedNode,isBackward:o.isKeyBackward(i.recentNavEvent)})),k(K||i.mostRecentlyFocusedNode||f())}i.recentNavEvent=void 0},h=function(_){var T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=_;var P=O({event:_,isBackward:T});P&&(Kn(_)&&_.preventDefault(),k(P))},v=function(_){(o.isKeyForward(_)||o.isKeyBackward(_))&&h(_,o.isKeyBackward(_))},I=function(_){Ab(_)&&In(o.escapeDeactivates,_)!==!1&&(_.preventDefault(),a.deactivate())},ee=function(_){var T=gs(_);c(T,_)>=0||In(o.clickOutsideDeactivates,_)||In(o.allowOutsideClick,_)||(_.preventDefault(),_.stopImmediatePropagation())},q=function(){if(i.active)return At.activateTrap(r,a),i.delayInitialFocusTimer=o.delayInitialFocus?Li(function(){k(f())}):k(f()),s.addEventListener("focusin",U,!0),s.addEventListener("mousedown",N,{capture:!0,passive:!1}),s.addEventListener("touchstart",N,{capture:!0,passive:!1}),s.addEventListener("click",ee,{capture:!0,passive:!1}),s.addEventListener("keydown",v,{capture:!0,passive:!1}),s.addEventListener("keydown",I),a},se=function(_){i.active&&!i.paused&&a._setSubtreeIsolation(!1),i.adjacentElements.clear(),i.alreadySilent.clear();var T=new Set,P=new Set,K=Ai(_),C;try{for(K.s();!(C=K.n()).done;){var z=C.value;T.add(z);for(var re=typeof ShadowRoot<"u"&&z.getRootNode()instanceof ShadowRoot,j=z;j;){T.add(j);var V=j.parentElement,ce=[];V?ce=V.children:!V&&re&&(ce=j.getRootNode().children,V=j.getRootNode().host,re=typeof ShadowRoot<"u"&&V.getRootNode()instanceof ShadowRoot);var Te=Ai(ce),Le;try{for(Te.s();!(Le=Te.n()).done;){var xe=Le.value;P.add(xe)}}catch(Ne){Te.e(Ne)}finally{Te.f()}j=V}}}catch(Ne){K.e(Ne)}finally{K.f()}T.forEach(function(Ne){P.delete(Ne)}),i.adjacentElements=P},E=function(){if(i.active)return s.removeEventListener("focusin",U,!0),s.removeEventListener("mousedown",N,!0),s.removeEventListener("touchstart",N,!0),s.removeEventListener("click",ee,!0),s.removeEventListener("keydown",v,!0),s.removeEventListener("keydown",I),a},G=function(_){var T=_.some(function(P){var K=Array.from(P.removedNodes);return K.some(function(C){return C===i.mostRecentlyFocusedNode})});T&&k(f())},W=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(G):void 0,L=function(){W&&(W.disconnect(),i.active&&!i.paused&&i.containers.map(function(_){W.observe(_,{subtree:!0,childList:!0})}))};return a={get active(){return i.active},get paused(){return i.paused},activate:function(_){if(i.active)return this;var T=l(_,"onActivate"),P=l(_,"onPostActivate"),K=l(_,"checkCanFocusTrap"),C=At.getActiveTrap(r),z=!1;if(C&&!C.paused){var re;(re=C._setSubtreeIsolation)===null||re===void 0||re.call(C,!1),z=!0}try{K||p(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=y(s),T==null||T();var j=function(){K&&p(),q(),L(),o.isolateSubtrees&&a._setSubtreeIsolation(!0),P==null||P()};if(K)return K(i.containers.concat()).then(j,j),this;j()}catch(ce){if(C===At.getActiveTrap(r)&&z){var V;(V=C._setSubtreeIsolation)===null||V===void 0||V.call(C,!0)}throw ce}return this},deactivate:function(_){if(!i.active)return this;var T=Ci({onDeactivate:o.onDeactivate,onPostDeactivate:o.onPostDeactivate,checkCanReturnFocus:o.checkCanReturnFocus},_);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,i.paused||a._setSubtreeIsolation(!1),i.alreadySilent.clear(),E(),i.active=!1,i.paused=!1,L(),At.deactivateTrap(r,a);var P=l(T,"onDeactivate"),K=l(T,"onPostDeactivate"),C=l(T,"checkCanReturnFocus"),z=l(T,"returnFocus","returnFocusOnDeactivate");P==null||P();var re=function(){Li(function(){z&&k(S(i.nodeFocusedBeforeActivation)),K==null||K()})};return z&&C?(C(S(i.nodeFocusedBeforeActivation)).then(re,re),this):(re(),this)},pause:function(_){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,_)):this},unpause:function(_){return i.active?(i.manuallyPaused=!1,r[r.length-1]!==this?this:this._setPausedState(!1,_)):this},updateContainerElements:function(_){var T=[].concat(_).filter(Boolean);return i.containers=T.map(function(P){return typeof P=="string"?s.querySelector(P):P}),o.isolateSubtrees&&se(i.containers),i.active&&(p(),o.isolateSubtrees&&!i.paused&&a._setSubtreeIsolation(!0)),L(),this}},Object.defineProperties(a,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(_,T){if(i.paused===_)return this;if(i.paused=_,_){var P=l(T,"onPause"),K=l(T,"onPostPause");P==null||P(),E(),L(),a._setSubtreeIsolation(!1),K==null||K()}else{var C=l(T,"onUnpause"),z=l(T,"onPostUnpause");C==null||C(),a._setSubtreeIsolation(!0),p(),q(),L(),z==null||z()}return this}},_setSubtreeIsolation:{value:function(_){o.isolateSubtrees&&i.adjacentElements.forEach(function(T){var P;if(_)switch(o.isolateSubtrees){case"aria-hidden":(T.ariaHidden==="true"||((P=T.getAttribute("aria-hidden"))===null||P===void 0?void 0:P.toLowerCase())==="true")&&i.alreadySilent.add(T),T.setAttribute("aria-hidden","true");break;default:(T.inert||T.hasAttribute("inert"))&&i.alreadySilent.add(T),T.setAttribute("inert",!0);break}else if(!i.alreadySilent.has(T))switch(o.isolateSubtrees){case"aria-hidden":T.removeAttribute("aria-hidden");break;default:T.removeAttribute("inert");break}})}}}),a.updateContainerElements(t),a};function Mb(e,t={}){let n;const{immediate:s,...r}=t,o=Oe(!1),i=Oe(!1),a=p=>n&&n.activate(p),l=p=>n&&n.deactivate(p),c=()=>{n&&(n.pause(),i.value=!0)},u=()=>{n&&(n.unpause(),i.value=!1)},f=Y(()=>{const p=Ie(e);return Ss(p).map(y=>{const k=Ie(y);return typeof k=="string"?k:nr(k)}).filter(Af)});return Ce(f,p=>{p.length&&(n=Nb(p,{...r,onActivate(){o.value=!0,t.onActivate&&t.onActivate()},onDeactivate(){o.value=!1,t.onDeactivate&&t.onDeactivate()}}),s&&a())},{flush:"post"}),uo(()=>l()),{hasFocus:o,isPaused:i,activate:a,deactivate:l,pause:c,unpause:u}}class Ib{constructor(t=10){ir(this,"max");ir(this,"cache");this.max=t,this.cache=new Map}get(t){let n=this.cache.get(t);return n!==void 0&&(this.cache.delete(t),this.cache.set(t,n)),n}set(t,n){this.cache.has(t)?this.cache.delete(t):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(t,n)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Vb=["aria-owns"],Ob={class:"shell"},Fb=["title"],Rb={class:"search-actions before"},Db=["title"],Hb=["aria-activedescendant","aria-controls","placeholder"],Bb={class:"search-actions"},jb=["title"],Kb=["disabled","title"],Ub=["id","role","aria-labelledby"],Wb=["id","aria-selected"],qb=["href","aria-label","onMouseenter","onFocusin","data-index"],Gb={class:"titles"},zb=["innerHTML"],Yb={class:"title main"},Xb=["innerHTML"],Jb={key:0,class:"excerpt-wrapper"},Zb={key:0,class:"excerpt",inert:""},Qb=["innerHTML"],ey={key:0,class:"no-results"},ty={class:"search-keyboard-shortcuts"},ny=["aria-label"],sy=["aria-label"],ry=["aria-label"],oy=["aria-label"],iy=oe({__name:"VPLocalSearchBox",emits:["close"],setup(e,{emit:t}){var z,re;const n=t,s=Oe(),r=Oe(),o=Oe(sb),i=ge(),{activate:a}=Mb(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,u=bi(async()=>{var j,V,ce,Te,Le,xe,Ne,_e,He;return wn(Hl.loadJSON((ce=await((V=(j=o.value)[l.value])==null?void 0:V.call(j)))==null?void 0:ce.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((Te=c.value.search)==null?void 0:Te.provider)==="local"&&((xe=(Le=c.value.search.options)==null?void 0:Le.miniSearch)==null?void 0:xe.searchOptions)},...((Ne=c.value.search)==null?void 0:Ne.provider)==="local"&&((He=(_e=c.value.search.options)==null?void 0:_e.miniSearch)==null?void 0:He.options)}))}),p=Y(()=>{var j,V;return((j=c.value.search)==null?void 0:j.provider)==="local"&&((V=c.value.search.options)==null?void 0:V.disableQueryPersistence)===!0}).value?fe(""):td("vitepress:local-search-filter",""),y=Qf("vitepress:local-search-detailed-list",((z=c.value.search)==null?void 0:z.provider)==="local"&&((re=c.value.search.options)==null?void 0:re.detailedView)===!0),k=Y(()=>{var j,V,ce;return((j=c.value.search)==null?void 0:j.provider)==="local"&&(((V=c.value.search.options)==null?void 0:V.disableDetailedView)===!0||((ce=c.value.search.options)==null?void 0:ce.detailedView)===!1)}),S=Y(()=>{var V,ce,Te,Le,xe,Ne,_e;const j=((V=c.value.search)==null?void 0:V.options)??c.value.algolia;return((xe=(Le=(Te=(ce=j==null?void 0:j.locales)==null?void 0:ce[l.value])==null?void 0:Te.translations)==null?void 0:Le.button)==null?void 0:xe.buttonText)||((_e=(Ne=j==null?void 0:j.translations)==null?void 0:Ne.button)==null?void 0:_e.buttonText)||"Search"});It(()=>{k.value&&(y.value=!1)});const O=Oe([]),N=fe(!1);Ce(p,()=>{N.value=!1});const U=bi(async()=>{if(r.value)return wn(new Dl(r.value))},null),h=new Ib(16);Rf(()=>[u.value,p.value,y.value],async([j,V,ce],Te,Le)=>{var Ze,Ft,dn,d;(Te==null?void 0:Te[0])!==j&&h.clear();let xe=!1;if(Le(()=>{xe=!0}),!j)return;O.value=j.search(V).slice(0,16),N.value=!0;const Ne=ce?await Promise.all(O.value.map(g=>v(g.id))):[];if(xe)return;for(const{id:g,mod:A}of Ne){const D=g.slice(0,g.indexOf("#"));let F=h.get(D);if(F)continue;F=new Map,h.set(D,F);const R=A.default??A;if(R!=null&&R.render||R!=null&&R.setup){const J=Sf(R);J.config.warnHandler=()=>{},J.provide(mo,i),Object.defineProperties(J.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Z=document.createElement("div");J.mount(Z),Z.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(H=>{var he;const le=(he=H.querySelector("a"))==null?void 0:he.getAttribute("href"),te=(le==null?void 0:le.startsWith("#"))&&le.slice(1);if(!te)return;let ie="";for(;(H=H.nextElementSibling)&&!/^h[1-6]$/i.test(H.tagName);)ie+=H.outerHTML;F.set(te,ie)}),J.unmount()}if(xe)return}const _e=new Set;if(O.value=O.value.map(g=>{const[A,D]=g.id.split("#"),F=h.get(A),R=(F==null?void 0:F.get(D))??"";for(const J in g.match)_e.add(J);return{...g,text:R}}),await ct(),xe)return;await new Promise(g=>{var A;(A=U.value)==null||A.unmark({done:()=>{var D;(D=U.value)==null||D.markRegExp(K(_e),{done:g})}})});const He=((Ze=s.value)==null?void 0:Ze.querySelectorAll(".result .excerpt"))??[];for(const g of He)(Ft=g.querySelector('mark[data-markjs="true"]'))==null||Ft.scrollIntoView({block:"center"});(d=(dn=r.value)==null?void 0:dn.firstElementChild)==null||d.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function v(j){const V=bo(j.slice(0,j.indexOf("#")));try{if(!V)throw new Error(`Cannot find file for id: ${j}`);return{id:j,mod:await import(V)}}catch(ce){return console.error(ce),{id:j,mod:{}}}}const I=fe(),ee=Y(()=>{var j;return((j=p.value)==null?void 0:j.length)<=0});function q(j=!0){var V,ce;(V=I.value)==null||V.focus(),j&&((ce=I.value)==null||ce.select())}Be(()=>{q()});function se(j){j.pointerType==="mouse"&&q()}const E=fe(-1),G=fe(!0);Ce(O,j=>{E.value=j.length?0:-1,W()});function W(){ct(()=>{const j=document.querySelector(".result.selected");j==null||j.scrollIntoView({block:"nearest"})})}tn("ArrowUp",j=>{j.preventDefault(),E.value--,E.value<0&&(E.value=O.value.length-1),G.value=!0,W()}),tn("ArrowDown",j=>{j.preventDefault(),E.value++,E.value>=O.value.length&&(E.value=0),G.value=!0,W()});const L=gl();tn("Enter",j=>{if(j.isComposing||j.target instanceof HTMLButtonElement&&j.target.type!=="submit")return;const V=O.value[E.value];if(j.target instanceof HTMLInputElement&&!V){j.preventDefault();return}V&&(L.go(V.id),n("close"))}),tn("Escape",()=>{n("close")});const _=Tl({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Be(()=>{window.history.pushState(null,"",null)}),wt("popstate",j=>{j.preventDefault(),n("close")});const T=vo(Me?document.body:null);Be(()=>{ct(()=>{T.value=!0,ct().then(()=>a())})}),Zs(()=>{T.value=!1});function P(){p.value="",ct().then(()=>q(!1))}function K(j){return new RegExp([...j].sort((V,ce)=>ce.length-V.length).map(V=>`(${hd(V)})`).join("|"),"gi")}function C(j){var Te;if(!G.value)return;const V=(Te=j.target)==null?void 0:Te.closest(".result"),ce=Number.parseInt(V==null?void 0:V.dataset.index);ce>=0&&ce!==E.value&&(E.value=ce),G.value=!1}return(j,V)=>{var ce,Te,Le,xe,Ne;return m(),ae(Hc,{to:"body"},[b("div",{ref_key:"el",ref:s,role:"button","aria-owns":(ce=O.value)!=null&&ce.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[b("div",{class:"backdrop",onClick:V[0]||(V[0]=_e=>j.$emit("close"))}),b("div",Ob,[b("form",{class:"search-bar",onPointerup:V[4]||(V[4]=_e=>se(_e)),onSubmit:V[5]||(V[5]=Ja(()=>{},["prevent"]))},[b("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},[...V[7]||(V[7]=[b("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)])],8,Fb),b("div",Rb,[b("button",{class:"back-button",title:w(_)("modal.backButtonTitle"),onClick:V[1]||(V[1]=_e=>j.$emit("close"))},[...V[8]||(V[8]=[b("span",{class:"vpi-arrow-left local-search-icon"},null,-1)])],8,Db)]),Vc(b("input",{ref_key:"searchInput",ref:I,"onUpdate:modelValue":V[2]||(V[2]=_e=>Fe(p)?p.value=_e:null),"aria-activedescendant":E.value>-1?"localsearch-item-"+E.value:void 0,"aria-autocomplete":"both","aria-controls":(Te=O.value)!=null&&Te.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:S.value,spellcheck:"false",type:"search"},null,8,Hb),[[mf,w(p)]]),b("div",Bb,[k.value?ne("",!0):(m(),$("button",{key:0,class:be(["toggle-layout-button",{"detailed-list":w(y)}]),type:"button",title:w(_)("modal.displayDetails"),onClick:V[3]||(V[3]=_e=>E.value>-1&&(y.value=!w(y)))},[...V[9]||(V[9]=[b("span",{class:"vpi-layout-list local-search-icon"},null,-1)])],10,jb)),b("button",{class:"clear-button",type:"reset",disabled:ee.value,title:w(_)("modal.resetButtonTitle"),onClick:P},[...V[10]||(V[10]=[b("span",{class:"vpi-delete local-search-icon"},null,-1)])],8,Kb)])],32),b("ul",{ref_key:"resultsEl",ref:r,id:(Le=O.value)!=null&&Le.length?"localsearch-list":void 0,role:(xe=O.value)!=null&&xe.length?"listbox":void 0,"aria-labelledby":(Ne=O.value)!=null&&Ne.length?"localsearch-label":void 0,class:"results",onMousemove:C},[(m(!0),$(de,null,Re(O.value,(_e,He)=>(m(),$("li",{key:_e.id,id:"localsearch-item-"+He,"aria-selected":E.value===He?"true":"false",role:"option"},[b("a",{href:_e.id,class:be(["result",{selected:E.value===He}]),"aria-label":[..._e.titles,_e.title].join(" > "),onMouseenter:Ze=>!G.value&&(E.value=He),onFocusin:Ze=>E.value=He,onClick:V[6]||(V[6]=Ze=>j.$emit("close")),"data-index":He},[b("div",null,[b("div",Gb,[V[12]||(V[12]=b("span",{class:"title-icon"},"#",-1)),(m(!0),$(de,null,Re(_e.titles,(Ze,Ft)=>(m(),$("span",{key:Ft,class:"title"},[b("span",{class:"text",innerHTML:Ze},null,8,zb),V[11]||(V[11]=b("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),b("span",Yb,[b("span",{class:"text",innerHTML:_e.title},null,8,Xb)])]),w(y)?(m(),$("div",Jb,[_e.text?(m(),$("div",Zb,[b("div",{class:"vp-doc",innerHTML:_e.text},null,8,Qb)])):ne("",!0),V[13]||(V[13]=b("div",{class:"excerpt-gradient-bottom"},null,-1)),V[14]||(V[14]=b("div",{class:"excerpt-gradient-top"},null,-1))])):ne("",!0)])],42,qb)],8,Wb))),128)),w(p)&&!O.value.length&&N.value?(m(),$("li",ey,[ze(me(w(_)("modal.noResultsText"))+' "',1),b("strong",null,me(w(p)),1),V[15]||(V[15]=ze('" ',-1))])):ne("",!0)],40,Ub),b("div",ty,[b("span",null,[b("kbd",{"aria-label":w(_)("modal.footer.navigateUpKeyAriaLabel")},[...V[16]||(V[16]=[b("span",{class:"vpi-arrow-up navigate-icon"},null,-1)])],8,ny),b("kbd",{"aria-label":w(_)("modal.footer.navigateDownKeyAriaLabel")},[...V[17]||(V[17]=[b("span",{class:"vpi-arrow-down navigate-icon"},null,-1)])],8,sy),ze(" "+me(w(_)("modal.footer.navigateText")),1)]),b("span",null,[b("kbd",{"aria-label":w(_)("modal.footer.selectKeyAriaLabel")},[...V[18]||(V[18]=[b("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)])],8,ry),ze(" "+me(w(_)("modal.footer.selectText")),1)]),b("span",null,[b("kbd",{"aria-label":w(_)("modal.footer.closeKeyAriaLabel")},"esc",8,oy),ze(" "+me(w(_)("modal.footer.closeText")),1)])])])],8,Vb)])}}}),ay=ue(iy,[["__scopeId","data-v-ce626c7c"]]),ly=Object.freeze(Object.defineProperty({__proto__:null,default:ay},Symbol.toStringTag,{value:"Module"}));export{ue as _,Iu as a,Q as b,$ as c,eb as createApp,m as o,un as r}; diff --git a/docs/assets/app.DzD_rsuH.js b/docs/assets/app.DzD_rsuH.js deleted file mode 100644 index 0faf300f4..000000000 --- a/docs/assets/app.DzD_rsuH.js +++ /dev/null @@ -1 +0,0 @@ -import{R as p}from"./chunks/theme.CYllfLRE.js";import{R as s,a3 as i,a4 as u,a5 as c,a6 as l,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,d as v,u as R,v as w,s as y,ad as C,ae as P,af as b,ag as E}from"./chunks/framework.jUmBZPH5.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/docs/assets/chunks/@localSearchIndexroot.BQXDtRpN.js b/docs/assets/chunks/@localSearchIndexroot.BQXDtRpN.js new file mode 100644 index 000000000..2b09a9cbf --- /dev/null +++ b/docs/assets/chunks/@localSearchIndexroot.BQXDtRpN.js @@ -0,0 +1 @@ +const e='{"documentCount":1675,"nextId":1675,"documentIds":{"0":"/docs/api.html#api-reference","1":"/docs/api.html#structure","2":"/docs/api.html#philosophy","3":"/docs/api/config.html#config-api","4":"/docs/api/config.html#constructor","5":"/docs/api/config.html#getters","6":"/docs/api/config.html#get-string","7":"/docs/api/config.html#get-int","8":"/docs/api/config.html#get-bool","9":"/docs/api/config.html#get-double","10":"/docs/api/config.html#dot-path-access","11":"/docs/api/config.html#minimal-usage-example","12":"/docs/api/config.html#environment-override-pattern","13":"/docs/api/config.html#design-notes","14":"/docs/api/http.html#http-api","15":"/docs/api/http.html#app","16":"/docs/api/http.html#constructor","17":"/docs/api/http.html#run","18":"/docs/api/http.html#routing-methods","19":"/docs/api/http.html#get","20":"/docs/api/http.html#post","21":"/docs/api/http.html#put","22":"/docs/api/http.html#delete","23":"/docs/api/http.html#minimal-example","24":"/docs/api/http.html#request","25":"/docs/api/http.html#path-parameter","26":"/docs/api/http.html#query-parameter","27":"/docs/api/http.html#headers","28":"/docs/api/http.html#body","29":"/docs/api/http.html#json","30":"/docs/api/http.html#response","31":"/docs/api/http.html#status","32":"/docs/api/http.html#send-text","33":"/docs/api/http.html#send-json","34":"/docs/api/http.html#auto-send-return","35":"/docs/api/http.html#behavior-notes","36":"/docs/api/http.html#design-philosophy","37":"/docs/api/#api-reference","38":"/docs/api/#structure","39":"/docs/api/#philosophy","40":"/docs/api/json.html#json-api","41":"/docs/api/json.html#_1-simple-json","42":"/docs/api/json.html#token","43":"/docs/api/json.html#array-t","44":"/docs/api/json.html#kvs","45":"/docs/api/json.html#_2-high-level-json","46":"/docs/api/json.html#object-builder","47":"/docs/api/json.html#array-builder","48":"/docs/api/json.html#kv-initializer","49":"/docs/api/json.html#dumps","50":"/docs/api/json.html#loads","51":"/docs/api/json.html#file-io","52":"/docs/api/json.html#jset-jget-path-access","53":"/docs/api/json.html#design-notes","54":"/docs/api/middleware.html#middleware-api","55":"/docs/api/middleware.html#headers","56":"/docs/api/middleware.html#_1-context-middleware-recommended","57":"/docs/api/middleware.html#minimal-example","58":"/docs/api/middleware.html#registering-middleware","59":"/docs/api/middleware.html#global","60":"/docs/api/middleware.html#prefix","61":"/docs/api/middleware.html#exact-path","62":"/docs/api/middleware.html#chaining-middleware","63":"/docs/api/middleware.html#request-state-storage","64":"/docs/api/middleware.html#_2-legacy-http-middleware","65":"/docs/api/middleware.html#adapters","66":"/docs/api/middleware.html#behavior-notes","67":"/docs/api/websocket.html#websocket-api","68":"/docs/api/websocket.html#server","69":"/docs/api/websocket.html#constructor","70":"/docs/api/websocket.html#minimal-standalone-example","71":"/docs/api/websocket.html#event-hooks","72":"/docs/api/websocket.html#on-open","73":"/docs/api/websocket.html#on-close","74":"/docs/api/websocket.html#on-typed-message","75":"/docs/api/websocket.html#typed-message-protocol","76":"/docs/api/websocket.html#broadcast","77":"/docs/api/websocket.html#broadcast-to-all","78":"/docs/api/websocket.html#broadcast-to-room","79":"/docs/api/websocket.html#long-polling-bridge","80":"/docs/api/websocket.html#http-ws-combined","81":"/docs/api/websocket.html#notes","82":"/docs/examples/async.html#async-worker","83":"/docs/examples/async.html#run","84":"/docs/examples/async.html#example-timer-cpu-pool-stop","85":"/docs/examples/async.html#example-signals-sigint-sigterm","86":"/docs/examples/async.html#example-tcp-echo-server-async-accept-read-write","87":"/docs/examples/auth.html#auth","88":"/docs/examples/auth.html#goal","89":"/docs/examples/auth.html#full-example","90":"/docs/examples/auth.html#test-with-curl","91":"/docs/examples/auth.html#notes","92":"/docs/examples/hello-http.html#hello-http","93":"/docs/examples/hello-http.html#minimal-hello-world","94":"/docs/examples/hello-http.html#returning-json","95":"/docs/examples/hello-http.html#auto-send-return-style","96":"/docs/examples/hello-http.html#status-codes","97":"/docs/examples/hello-http.html#what-this-example-teaches","98":"/docs/examples/#examples","99":"/docs/examples/#available-examples","100":"/docs/examples/#hello-http","101":"/docs/examples/#auth","102":"/docs/examples/#ws-chat","103":"/docs/examples/#async-worker","104":"/docs/examples/#p2p-ping","105":"/docs/examples/#philosophy","106":"/docs/examples/ws-chat.html#ws-chat","107":"/docs/examples/ws-chat.html#chat-protocol","108":"/docs/examples/ws-chat.html#full-example","109":"/docs/examples/ws-chat.html#test-quickly","110":"/docs/examples/ws-chat.html#notes","111":"/docs/fundamentals/errors.html#errors","112":"/docs/fundamentals/errors.html#basic-error-response","113":"/docs/fundamentals/errors.html#_404-example","114":"/docs/fundamentals/errors.html#validation-error","115":"/docs/fundamentals/errors.html#internal-server-error-pattern","116":"/docs/fundamentals/errors.html#error-structure-consistency","117":"/docs/fundamentals/errors.html#important-rules","118":"/docs/fundamentals/errors.html#philosophy","119":"/docs/fundamentals/#fundamentals","120":"/docs/fundamentals/#the-runtime","121":"/docs/fundamentals/#the-execution-model","122":"/docs/fundamentals/#the-request-object","123":"/docs/fundamentals/#the-response-object","124":"/docs/fundamentals/#minimal-complete-example","125":"/docs/fundamentals/#design-principles","126":"/docs/fundamentals/lifecycle.html#lifecycle","127":"/docs/fundamentals/lifecycle.html#high-level-flow","128":"/docs/fundamentals/lifecycle.html#minimal-example","129":"/docs/fundamentals/lifecycle.html#step-by-step-breakdown","130":"/docs/fundamentals/lifecycle.html#_1-route-matching","131":"/docs/fundamentals/lifecycle.html#_2-handler-execution","132":"/docs/fundamentals/lifecycle.html#_3-response-finalization","133":"/docs/fundamentals/lifecycle.html#important-rules","134":"/docs/fundamentals/lifecycle.html#lifecycle-philosophy","135":"/docs/fundamentals/logging.html#logging-core","136":"/docs/fundamentals/logging.html#_1-development-logging-vix-console","137":"/docs/fundamentals/logging.html#why-use-console-instead-of-std-cout","138":"/docs/fundamentals/logging.html#_2-logging-request-data","139":"/docs/fundamentals/logging.html#_3-logging-errors-dev-mode","140":"/docs/fundamentals/logging.html#_4-production-logging-vix-utils-logger","141":"/docs/fundamentals/logging.html#_5-structured-logging-pattern","142":"/docs/fundamentals/logging.html#_6-performance-considerations","143":"/docs/fundamentals/logging.html#_7-philosophy","144":"/docs/fundamentals/performance.html#performance","145":"/docs/fundamentals/performance.html#minimal-overhead-model","146":"/docs/fundamentals/performance.html#minimal-example","147":"/docs/fundamentals/performance.html#avoiding-performance-pitfalls","148":"/docs/fundamentals/performance.html#_1-avoid-heavy-allocations-in-hot-paths","149":"/docs/fundamentals/performance.html#_2-keep-handlers-small","150":"/docs/fundamentals/performance.html#_3-avoid-unnecessary-json-depth","151":"/docs/fundamentals/performance.html#hardware-considerations","152":"/docs/fundamentals/performance.html#throughput-mindset","153":"/docs/fundamentals/performance.html#benchmarking-rule","154":"/docs/fundamentals/performance.html#philosophy","155":"/docs/fundamentals/security.html#security","156":"/docs/fundamentals/security.html#basic-header-check","157":"/docs/fundamentals/security.html#token-validation-pattern","158":"/docs/fundamentals/security.html#input-validation","159":"/docs/fundamentals/security.html#avoid-leaking-internal-details","160":"/docs/fundamentals/security.html#security-headers","161":"/docs/fundamentals/security.html#https","162":"/docs/fundamentals/security.html#rate-limiting-and-protection","163":"/docs/fundamentals/security.html#security-mindset","164":"/docs/guide.html#routes-and-middleware","165":"/docs/guide.html#_1-quick-start","166":"/docs/guide.html#_2-core-mental-model","167":"/docs/guide.html#routes","168":"/docs/guide.html#middleware","169":"/docs/guide.html#_3-routes","170":"/docs/guide.html#_3-1-minimal-route","171":"/docs/guide.html#_3-2-return-values-vs-using-res","172":"/docs/guide.html#style-a-explicit-res","173":"/docs/guide.html#style-b-return-payload-auto-send","174":"/docs/guide.html#_3-3-path-parameters","175":"/docs/guide.html#_3-4-query-parameters","176":"/docs/guide.html#_3-5-headers","177":"/docs/guide.html#_3-6-request-body-and-json","178":"/docs/guide.html#_3-7-status-codes","179":"/docs/guide.html#_4-organizing-routes-recommended-pattern","180":"/docs/guide.html#_5-middleware","181":"/docs/guide.html#_5-1-context-based-middleware-recommended","182":"/docs/guide.html#_5-2-legacy-httpmiddleware","183":"/docs/guide.html#_6-where-middleware-runs","184":"/docs/guide.html#_6-1-global-middleware-runs-for-all-routes","185":"/docs/guide.html#_6-2-prefix-middleware-runs-only-for-routes-under-a-prefix","186":"/docs/guide.html#_6-3-exact-middleware-runs-only-for-a-single-route","187":"/docs/guide.html#_7-chaining-middleware","188":"/docs/guide.html#_8-using-requeststate-share-data-across-middleware-and-handlers","189":"/docs/guide.html#_9-common-presets-what-you-typically-want","190":"/docs/guide.html#security-headers","191":"/docs/guide.html#cors-dev","192":"/docs/guide.html#rate-limit","193":"/docs/guide.html#json-form-multipart-parsing","194":"/docs/guide.html#api-key-auth-dev","195":"/docs/guide.html#http-get-cache-middleware","196":"/docs/guide.html#_10-a-practical-layout-for-real-projects","197":"/docs/guide.html#_11-troubleshooting-tips","198":"/docs/inference/#inference","199":"/docs/inference/#inference-1","200":"/docs/inference/#philosophy","201":"/docs/inference/#minimal-inference-endpoint","202":"/docs/inference/#json-based-inference","203":"/docs/inference/#architecture-pattern","204":"/docs/inference/#performance-mindset","205":"/docs/inference/#next-steps","206":"/docs/inference/providers.html#providers","207":"/docs/inference/providers.html#minimal-provider-concept","208":"/docs/inference/providers.html#provider-with-json-input","209":"/docs/inference/providers.html#provider-selection-strategy","210":"/docs/inference/providers.html#production-notes","211":"/docs/inference/providers.html#common-integration-style","212":"/docs/inference/providers.html#philosophy","213":"/docs/inference/reliability.html#reliability","214":"/docs/inference/reliability.html#reliability-goals","215":"/docs/inference/reliability.html#request-lifecycle","216":"/docs/inference/reliability.html#timeouts","217":"/docs/inference/reliability.html#retries","218":"/docs/inference/reliability.html#idempotency","219":"/docs/inference/reliability.html#streaming-reliability","220":"/docs/inference/reliability.html#circuit-breaker","221":"/docs/inference/reliability.html#fallback-providers","222":"/docs/inference/reliability.html#error-format","223":"/docs/inference/reliability.html#limits","224":"/docs/inference/reliability.html#observability","225":"/docs/inference/reliability.html#practical-checklist","226":"/docs/inference/routing.html#routing-for-inference","227":"/docs/inference/routing.html#query-based-inference","228":"/docs/inference/routing.html#json-based-inference","229":"/docs/inference/routing.html#batch-inference-pattern","230":"/docs/inference/routing.html#input-size-guard","231":"/docs/inference/routing.html#rule-of-thumb","232":"/docs/inference/streaming.html#streaming","233":"/docs/inference/streaming.html#when-to-use-streaming","234":"/docs/inference/streaming.html#core-idea","235":"/docs/inference/streaming.html#minimal-http-example","236":"/docs/inference/streaming.html#recommended-chunk-format","237":"/docs/inference/streaming.html#backpressure","238":"/docs/inference/streaming.html#error-handling","239":"/docs/inference/streaming.html#notes","240":"/docs/install.html#install","241":"/docs/install.html#install-vix-cli","242":"/docs/install.html#linux-macos","243":"/docs/install.html#windows-powershell","244":"/docs/install.html#build-prerequisites","245":"/docs/install.html#ubuntu-example","246":"/docs/install.html#macos-homebrew","247":"/docs/install.html#windows","248":"/docs/install.html#troubleshooting","249":"/docs/install.html#vix-not-found","250":"/docs/install.html#download-failures","251":"/docs/modules/async/asio.html#asio-net-service","252":"/docs/modules/async/asio.html#what-problem-it-solves","253":"/docs/modules/async/asio.html#where-it-sits-in-the-architecture","254":"/docs/modules/async/asio.html#key-design-points","255":"/docs/modules/async/asio.html#_1-dedicated-thread-for-networking","256":"/docs/modules/async/asio.html#_2-work-guard-keeps-asio-alive","257":"/docs/modules/async/asio.html#_3-stop-is-explicit","258":"/docs/modules/async/asio.html#public-surface","259":"/docs/modules/async/asio.html#constructor","260":"/docs/modules/async/asio.html#accessor","261":"/docs/modules/async/asio.html#stop","262":"/docs/modules/async/asio.html#typical-lifecycle","263":"/docs/modules/async/asio.html#lazy-creation","264":"/docs/modules/async/asio.html#shutdown-behavior","265":"/docs/modules/async/asio.html#how-networking-primitives-should-integrate-with-it","266":"/docs/modules/async/asio.html#threading-model-and-safety-notes","267":"/docs/modules/async/asio.html#common-pitfalls","268":"/docs/modules/async/asio.html#_1-forgetting-the-guard","269":"/docs/modules/async/asio.html#_2-resuming-coroutines-on-the-wrong-thread","270":"/docs/modules/async/asio.html#_3-stop-order","271":"/docs/modules/async/asio.html#suggested-testing-checklist","272":"/docs/modules/async/asio.html#next-docs-that-depend-on-this","273":"/docs/modules/async/cancel.html#async-core-cancel","274":"/docs/modules/async/cancel.html#why-this-exists","275":"/docs/modules/async/cancel.html#key-types","276":"/docs/modules/async/cancel.html#cancel-state","277":"/docs/modules/async/cancel.html#cancel-token","278":"/docs/modules/async/cancel.html#cancel-source","279":"/docs/modules/async/cancel.html#error-model","280":"/docs/modules/async/cancel.html#usage","281":"/docs/modules/async/cancel.html#_1-basic-pattern-cooperative-loop","282":"/docs/modules/async/cancel.html#_2-cancel-from-another-thread","283":"/docs/modules/async/cancel.html#_3-return-cancellation-as-an-error-code","284":"/docs/modules/async/cancel.html#notes-and-best-practices","285":"/docs/modules/async/cancel.html#related","286":"/docs/modules/async/dns.html#dns","287":"/docs/modules/async/dns.html#overview","288":"/docs/modules/async/dns.html#resolved-address","289":"/docs/modules/async/dns.html#dns-resolver","290":"/docs/modules/async/dns.html#contract","291":"/docs/modules/async/dns.html#error-model","292":"/docs/modules/async/dns.html#factory","293":"/docs/modules/async/dns.html#example","294":"/docs/modules/async/dns.html#design-notes","295":"/docs/modules/async/dns.html#related","296":"/docs/modules/async/error.html#async-core-error","297":"/docs/modules/async/error.html#overview","298":"/docs/modules/async/error.html#error-enumeration","299":"/docs/modules/async/error.html#generic-errors","300":"/docs/modules/async/error.html#runtime-scheduler","301":"/docs/modules/async/error.html#thread-pool","302":"/docs/modules/async/error.html#platform","303":"/docs/modules/async/error.html#error-category","304":"/docs/modules/async/error.html#creating-error-codes","305":"/docs/modules/async/error.html#cancellation-integration","306":"/docs/modules/async/error.html#design-goals","307":"/docs/modules/async/error.html#typical-usage-pattern","308":"/docs/modules/async/example.html#minimal-http-server-vix-async","309":"/docs/modules/async/example.html#what-you-get","310":"/docs/modules/async/example.html#full-code","311":"/docs/modules/async/example.html#run-it","312":"/docs/modules/async/example.html#_1-compile-and-run-with-vix","313":"/docs/modules/async/example.html#_2-test-with-curl","314":"/docs/modules/async/example.html#_3-test-with-httpie","315":"/docs/modules/async/example.html#how-it-works","316":"/docs/modules/async/example.html#io-context","317":"/docs/modules/async/example.html#server-coroutine","318":"/docs/modules/async/example.html#client-coroutine","319":"/docs/modules/async/example.html#notes-and-limitations","320":"/docs/modules/async/example.html#next-steps","321":"/docs/modules/async/#async","322":"/docs/modules/async/#core-concepts","323":"/docs/modules/async/#_1-event-loop-and-task","324":"/docs/modules/async/#_2-timers","325":"/docs/modules/async/#_3-cpu-pool","326":"/docs/modules/async/#_4-signals","327":"/docs/modules/async/#_5-tcp-server-pattern","328":"/docs/modules/async/#_6-when-all-and-when-any","329":"/docs/modules/async/#execution-model","330":"/docs/modules/async/#recommended-usage","331":"/docs/modules/async/io.html#io-context","332":"/docs/modules/async/io.html#header","333":"/docs/modules/async/io.html#what-it-provides","334":"/docs/modules/async/io.html#_1-scheduler-ownership","335":"/docs/modules/async/io.html#_2-event-loop-control","336":"/docs/modules/async/io.html#_3-lazy-services","337":"/docs/modules/async/io.html#minimal-example","338":"/docs/modules/async/io.html#using-lazy-services","339":"/docs/modules/async/io.html#cpu-pool-compute-bound-work","340":"/docs/modules/async/io.html#timers","341":"/docs/modules/async/io.html#signals","342":"/docs/modules/async/io.html#networking","343":"/docs/modules/async/io.html#lifecycle-rules-and-best-practices","344":"/docs/modules/async/io.html#common-pitfalls","345":"/docs/modules/async/io.html#related","346":"/docs/modules/async/scheduler.html#scheduler","347":"/docs/modules/async/scheduler.html#overview","348":"/docs/modules/async/scheduler.html#basic-usage","349":"/docs/modules/async/scheduler.html#posting-work","350":"/docs/modules/async/scheduler.html#_1-posting-a-callable","351":"/docs/modules/async/scheduler.html#_2-posting-a-coroutine-handle","352":"/docs/modules/async/scheduler.html#awaitable-scheduling","353":"/docs/modules/async/scheduler.html#what-it-does","354":"/docs/modules/async/scheduler.html#event-loop","355":"/docs/modules/async/scheduler.html#run","356":"/docs/modules/async/scheduler.html#stop","357":"/docs/modules/async/scheduler.html#introspection","358":"/docs/modules/async/scheduler.html#internal-design","359":"/docs/modules/async/scheduler.html#job-queue","360":"/docs/modules/async/scheduler.html#thread-safety","361":"/docs/modules/async/scheduler.html#design-principles","362":"/docs/modules/async/scheduler.html#typical-role-in-vix","363":"/docs/modules/async/scheduler.html#summary","364":"/docs/modules/async/signal.html#signal","365":"/docs/modules/async/signal.html#what-problem-does-this-solve","366":"/docs/modules/async/signal.html#design-model","367":"/docs/modules/async/signal.html#typical-usage","368":"/docs/modules/async/signal.html#_1-basic-ctrl-c-handling","369":"/docs/modules/async/signal.html#_2-using-a-callback-instead-of-awaiting","370":"/docs/modules/async/signal.html#_3-supporting-both-callback-and-coroutine-wait","371":"/docs/modules/async/signal.html#api-reference","372":"/docs/modules/async/signal.html#signal-set-io-context-ctx","373":"/docs/modules/async/signal.html#void-add-int-sig","374":"/docs/modules/async/signal.html#void-remove-int-sig","375":"/docs/modules/async/signal.html#task-int-async-wait-cancel-token-ct","376":"/docs/modules/async/signal.html#void-on-signal-std-function-void-int-fn","377":"/docs/modules/async/signal.html#void-stop-noexcept","378":"/docs/modules/async/signal.html#threading-and-safety-notes","379":"/docs/modules/async/signal.html#cancellation-behavior","380":"/docs/modules/async/signal.html#common-patterns","381":"/docs/modules/async/signal.html#graceful-shutdown-signal-cancels-main-loop-exits","382":"/docs/modules/async/signal.html#coalesce-repeated-signals","383":"/docs/modules/async/signal.html#practical-limitations","384":"/docs/modules/async/signal.html#summary","385":"/docs/modules/async/spawn.html#spawn","386":"/docs/modules/async/spawn.html#what-it-provides","387":"/docs/modules/async/spawn.html#api","388":"/docs/modules/async/spawn.html#behavior","389":"/docs/modules/async/spawn.html#how-it-works-internally","390":"/docs/modules/async/spawn.html#detail-detached-task","391":"/docs/modules/async/spawn.html#detail-make-detached-task-void","392":"/docs/modules/async/spawn.html#example","393":"/docs/modules/async/spawn.html#notes-and-best-practices","394":"/docs/modules/async/spawn.html#related","395":"/docs/modules/async/task.html#task","396":"/docs/modules/async/task.html#header","397":"/docs/modules/async/task.html#what-task-t-is","398":"/docs/modules/async/task.html#lifecycle-and-suspension-model","399":"/docs/modules/async/task.html#lazy-start","400":"/docs/modules/async/task.html#continuation-wiring","401":"/docs/modules/async/task.html#basic-usage","402":"/docs/modules/async/task.html#await-a-task-that-returns-a-value","403":"/docs/modules/async/task.html#await-a-task-that-returns-void","404":"/docs/modules/async/task.html#error-propagation","405":"/docs/modules/async/task.html#detaching-and-scheduling","406":"/docs/modules/async/task.html#start-scheduler","407":"/docs/modules/async/task.html#awaiting-from-coroutines","408":"/docs/modules/async/task.html#operator-co-await","409":"/docs/modules/async/task.html#ownership-rules","410":"/docs/modules/async/task.html#notes-and-constraints","411":"/docs/modules/async/task.html#related","412":"/docs/modules/async/tcp.html#tcp-async-net","413":"/docs/modules/async/tcp.html#files","414":"/docs/modules/async/tcp.html#types","415":"/docs/modules/async/tcp.html#tcp-endpoint","416":"/docs/modules/async/tcp.html#tcp-stream","417":"/docs/modules/async/tcp.html#behavior-rules","418":"/docs/modules/async/tcp.html#buffer-types","419":"/docs/modules/async/tcp.html#tcp-listener","420":"/docs/modules/async/tcp.html#behavior-rules-1","421":"/docs/modules/async/tcp.html#factories","422":"/docs/modules/async/tcp.html#why-factories","423":"/docs/modules/async/tcp.html#usage-examples","424":"/docs/modules/async/tcp.html#_1-connect-write-read-client","425":"/docs/modules/async/tcp.html#_2-listen-accept-loop-server","426":"/docs/modules/async/tcp.html#cancellation-pattern","427":"/docs/modules/async/tcp.html#design-notes","428":"/docs/modules/async/threadpool.html#thread-pool-async-core","429":"/docs/modules/async/threadpool.html#header","430":"/docs/modules/async/threadpool.html#concepts","431":"/docs/modules/async/threadpool.html#two-submission-styles","432":"/docs/modules/async/threadpool.html#cancellation-model","433":"/docs/modules/async/threadpool.html#exception-model","434":"/docs/modules/async/threadpool.html#api","435":"/docs/modules/async/threadpool.html#construction","436":"/docs/modules/async/threadpool.html#destruction","437":"/docs/modules/async/threadpool.html#fire-and-forget","438":"/docs/modules/async/threadpool.html#awaitable-submission","439":"/docs/modules/async/threadpool.html#stop","440":"/docs/modules/async/threadpool.html#size","441":"/docs/modules/async/threadpool.html#usage","442":"/docs/modules/async/threadpool.html#example-1-await-a-compute-result","443":"/docs/modules/async/threadpool.html#example-2-cancellation","444":"/docs/modules/async/threadpool.html#example-3-fire-and-forget","445":"/docs/modules/async/threadpool.html#notes","446":"/docs/modules/async/threadpool.html#related","447":"/docs/modules/async/timer.html#timer","448":"/docs/modules/async/timer.html#key-types","449":"/docs/modules/async/timer.html#lifecycle-and-threading-model","450":"/docs/modules/async/timer.html#schedule-a-callback-with-after","451":"/docs/modules/async/timer.html#signature","452":"/docs/modules/async/timer.html#behavior","453":"/docs/modules/async/timer.html#example","454":"/docs/modules/async/timer.html#coroutine-sleep-with-sleep-for","455":"/docs/modules/async/timer.html#signature-1","456":"/docs/modules/async/timer.html#behavior-1","457":"/docs/modules/async/timer.html#example-1","458":"/docs/modules/async/timer.html#cancellation","459":"/docs/modules/async/timer.html#example-with-cancel-source","460":"/docs/modules/async/timer.html#ordering-and-tie-breaking","461":"/docs/modules/async/timer.html#common-pitfalls","462":"/docs/modules/async/timer.html#recommended-pattern","463":"/docs/modules/async/udp.html#udp-async-net","464":"/docs/modules/async/udp.html#header","465":"/docs/modules/async/udp.html#types","466":"/docs/modules/async/udp.html#udp-endpoint","467":"/docs/modules/async/udp.html#udp-datagram","468":"/docs/modules/async/udp.html#udp-socket","469":"/docs/modules/async/udp.html#async-bind-bind-ep","470":"/docs/modules/async/udp.html#async-send-to-buf-to-ct","471":"/docs/modules/async/udp.html#async-recv-from-buf-ct","472":"/docs/modules/async/udp.html#close-and-is-open","473":"/docs/modules/async/udp.html#factory","474":"/docs/modules/async/udp.html#make-udp-socket-ctx","475":"/docs/modules/async/udp.html#cancellation","476":"/docs/modules/async/udp.html#example-udp-echo-single-socket","477":"/docs/modules/async/udp.html#example-udp-discovery-ping","478":"/docs/modules/async/udp.html#behavior-and-design-notes","479":"/docs/modules/async/udp.html#common-patterns","480":"/docs/modules/async/when.html#when","481":"/docs/modules/async/when.html#header","482":"/docs/modules/async/when.html#mental-model","483":"/docs/modules/async/when.html#what-these-functions-do","484":"/docs/modules/async/when.html#why-the-scheduler-is-required","485":"/docs/modules/async/when.html#return-types","486":"/docs/modules/async/when.html#void-tasks-are-mapped-to-std-monostate","487":"/docs/modules/async/when.html#when-all-return-type","488":"/docs/modules/async/when.html#when-any-return-type","489":"/docs/modules/async/when.html#exception-behavior","490":"/docs/modules/async/when.html#when-all","491":"/docs/modules/async/when.html#when-any","492":"/docs/modules/async/when.html#concurrency-and-lifetime-notes","493":"/docs/modules/async/when.html#examples","494":"/docs/modules/async/when.html#example-1-when-all-with-values","495":"/docs/modules/async/when.html#example-2-when-all-with-void-tasks","496":"/docs/modules/async/when.html#example-3-when-any-race","497":"/docs/modules/async/when.html#example-4-running-end-to-end","498":"/docs/modules/async/when.html#design-notes","499":"/docs/modules/cache/#cache","500":"/docs/modules/cache/#concepts","501":"/docs/modules/cache/#cacheentry","502":"/docs/modules/cache/#cachecontext","503":"/docs/modules/cache/#cachepolicy","504":"/docs/modules/cache/#cachestore","505":"/docs/modules/cache/#cache-facade","506":"/docs/modules/cache/#cache-keys","507":"/docs/modules/cache/#cachekey","508":"/docs/modules/cache/#stores","509":"/docs/modules/cache/#memorystore","510":"/docs/modules/cache/#lrumemorystore","511":"/docs/modules/cache/#filestore","512":"/docs/modules/cache/#typical-usage","513":"/docs/modules/cache/#offline-and-network-error-behavior","514":"/docs/modules/cache/#pruning","515":"/docs/modules/cache/#design-notes","516":"/docs/modules/cli/add.html#vix-add","517":"/docs/modules/cli/add.html#usage","518":"/docs/modules/cli/add.html#description","519":"/docs/modules/cli/add.html#sync-registry","520":"/docs/modules/cli/add.html#example","521":"/docs/modules/cli/add.html#versioning-rules","522":"/docs/modules/cli/add.html#what-happens-internally","523":"/docs/modules/cli/add.html#notes","524":"/docs/modules/cli/build.html#vix-build","525":"/docs/modules/cli/build.html#usage","526":"/docs/modules/cli/build.html#description","527":"/docs/modules/cli/build.html#presets","528":"/docs/modules/cli/build.html#options","529":"/docs/modules/cli/build.html#environment-variables","530":"/docs/modules/cli/build.html#examples","531":"/docs/modules/cli/build.html#logs","532":"/docs/modules/cli/build.html#signature-cache","533":"/docs/modules/cli/build.html#fast-mode","534":"/docs/modules/cli/build.html#design-goals","535":"/docs/modules/cli/deps.html#dependencies","536":"/docs/modules/cli/deps.html#command","537":"/docs/modules/cli/deps.html#what-it-does","538":"/docs/modules/cli/deps.html#typical-workflow","539":"/docs/modules/cli/deps.html#cmake-integration","540":"/docs/modules/cli/deps.html#vix-lock","541":"/docs/modules/cli/deps.html#design-principles","542":"/docs/modules/cli/deps.html#summary","543":"/docs/modules/cli/dev.html#vix-dev","544":"/docs/modules/cli/dev.html#usage","545":"/docs/modules/cli/dev.html#description","546":"/docs/modules/cli/dev.html#options","547":"/docs/modules/cli/dev.html#examples","548":"/docs/modules/cli/dev.html#mode-classification","549":"/docs/modules/cli/dev.html#when-to-use-vix-dev","550":"/docs/modules/cli/dev.html#design-goals","551":"/docs/modules/cli/#cli-overview","552":"/docs/modules/cli/#version-example","553":"/docs/modules/cli/#core-philosophy","554":"/docs/modules/cli/#command-categories","555":"/docs/modules/cli/#_1-project","556":"/docs/modules/cli/#_2-project-structure-modules","557":"/docs/modules/cli/#_3-network","558":"/docs/modules/cli/#_4-registry","559":"/docs/modules/cli/#_5-packaging-security","560":"/docs/modules/cli/#_6-database-orm","561":"/docs/modules/cli/#_7-info","562":"/docs/modules/cli/#global-options","563":"/docs/modules/cli/#quick-start-example","564":"/docs/modules/cli/#design-goals","565":"/docs/modules/cli/install.html#vix-install","566":"/docs/modules/cli/install.html#usage","567":"/docs/modules/cli/install.html#description","568":"/docs/modules/cli/install.html#options","569":"/docs/modules/cli/install.html#store-location","570":"/docs/modules/cli/install.html#examples","571":"/docs/modules/cli/install.html#security-notes","572":"/docs/modules/cli/install.html#typical-workflow","573":"/docs/modules/cli/list.html#vix-list","574":"/docs/modules/cli/list.html#usage","575":"/docs/modules/cli/list.html#description","576":"/docs/modules/cli/list.html#example","577":"/docs/modules/cli/list.html#behavior-notes","578":"/docs/modules/cli/list.html#typical-workflow","579":"/docs/modules/cli/modules.html#vix-modules","580":"/docs/modules/cli/modules.html#command-overview","581":"/docs/modules/cli/modules.html#subcommands","582":"/docs/modules/cli/modules.html#global-options","583":"/docs/modules/cli/modules.html#_1-initialize-modules-mode","584":"/docs/modules/cli/modules.html#_2-add-a-module","585":"/docs/modules/cli/modules.html#_3-explicit-cross-module-dependency","586":"/docs/modules/cli/modules.html#_4-module-structure-contract","587":"/docs/modules/cli/modules.html#_5-validate-module-safety","588":"/docs/modules/cli/modules.html#design-philosophy","589":"/docs/modules/cli/modules.html#minimal-workflow-example","590":"/docs/modules/cli/new.html#vix-new","591":"/docs/modules/cli/new.html#usage","592":"/docs/modules/cli/new.html#options","593":"/docs/modules/cli/new.html#environment-variables","594":"/docs/modules/cli/new.html#interactive-mode","595":"/docs/modules/cli/new.html#template","596":"/docs/modules/cli/new.html#features-application","597":"/docs/modules/cli/new.html#advanced","598":"/docs/modules/cli/new.html#examples","599":"/docs/modules/cli/new.html#output-example-application","600":"/docs/modules/cli/new.html#output-example-library","601":"/docs/modules/cli/new.html#behavior-notes","602":"/docs/modules/cli/orm.html#vix-orm","603":"/docs/modules/cli/orm.html#usage","604":"/docs/modules/cli/orm.html#description","605":"/docs/modules/cli/orm.html#commands","606":"/docs/modules/cli/orm.html#migrate","607":"/docs/modules/cli/orm.html#rollback","608":"/docs/modules/cli/orm.html#status","609":"/docs/modules/cli/orm.html#makemigrations","610":"/docs/modules/cli/orm.html#common-options","611":"/docs/modules/cli/orm.html#environment-defaults","612":"/docs/modules/cli/orm.html#examples","613":"/docs/modules/cli/p2p.html#vix-p2p","614":"/docs/modules/cli/p2p.html#usage","615":"/docs/modules/cli/p2p.html#description","616":"/docs/modules/cli/p2p.html#core-options","617":"/docs/modules/cli/p2p.html#discovery-udp","618":"/docs/modules/cli/p2p.html#bootstrap-http-registry","619":"/docs/modules/cli/p2p.html#logging","620":"/docs/modules/cli/p2p.html#examples","621":"/docs/modules/cli/p2p.html#typical-workflow","622":"/docs/modules/cli/pack.html#vix-pack","623":"/docs/modules/cli/pack.html#usage","624":"/docs/modules/cli/pack.html#description","625":"/docs/modules/cli/pack.html#options","626":"/docs/modules/cli/pack.html#basic-example","627":"/docs/modules/cli/pack.html#signing-optional","628":"/docs/modules/cli/pack.html#what-gets-generated","629":"/docs/modules/cli/pack.html#typical-workflow","630":"/docs/modules/cli/publish.html#vix-publish","631":"/docs/modules/cli/publish.html#usage","632":"/docs/modules/cli/publish.html#description","633":"/docs/modules/cli/publish.html#requirements","634":"/docs/modules/cli/publish.html#examples","635":"/docs/modules/cli/publish.html#version-rules","636":"/docs/modules/cli/publish.html#what-happens-internally","637":"/docs/modules/cli/publish.html#notes","638":"/docs/modules/cli/registry.html#vix-registry","639":"/docs/modules/cli/registry.html#usage","640":"/docs/modules/cli/registry.html#subcommands","641":"/docs/modules/cli/registry.html#description","642":"/docs/modules/cli/registry.html#first-step","643":"/docs/modules/cli/registry.html#examples","644":"/docs/modules/cli/registry.html#publishing-a-package","645":"/docs/modules/cli/registry.html#registry-design-v1","646":"/docs/modules/cli/registry.html#related-commands","647":"/docs/modules/cli/remove.html#vix-remove","648":"/docs/modules/cli/remove.html#usage","649":"/docs/modules/cli/remove.html#description","650":"/docs/modules/cli/remove.html#examples","651":"/docs/modules/cli/remove.html#behavior-notes","652":"/docs/modules/cli/remove.html#typical-workflow","653":"/docs/modules/cli/repl.html#repl","654":"/docs/modules/cli/repl.html#start-the-repl","655":"/docs/modules/cli/repl.html#basic-math","656":"/docs/modules/cli/repl.html#variables","657":"/docs/modules/cli/repl.html#arrays","658":"/docs/modules/cli/repl.html#objects","659":"/docs/modules/cli/repl.html#built-in-commands","660":"/docs/modules/cli/repl.html#history","661":"/docs/modules/cli/repl.html#behavior-notes","662":"/docs/modules/cli/repl.html#when-to-use-repl","663":"/docs/modules/cli/run.html#vix-run","664":"/docs/modules/cli/run.html#usage","665":"/docs/modules/cli/run.html#modes","666":"/docs/modules/cli/run.html#_1-project-mode","667":"/docs/modules/cli/run.html#_2-script-mode-cpp","668":"/docs/modules/cli/run.html#_3-manifest-mode-vix","669":"/docs/modules/cli/run.html#options","670":"/docs/modules/cli/run.html#runtime-options","671":"/docs/modules/cli/run.html#watch-mode","672":"/docs/modules/cli/run.html#script-mode-flags","673":"/docs/modules/cli/run.html#documentation-openapi","674":"/docs/modules/cli/run.html#logging","675":"/docs/modules/cli/run.html#compiler-linker-flags-script-mode","676":"/docs/modules/cli/run.html#examples","677":"/docs/modules/cli/run.html#environment-variables","678":"/docs/modules/cli/run.html#design-goals","679":"/docs/modules/cli/search.html#vix-search","680":"/docs/modules/cli/search.html#usage","681":"/docs/modules/cli/search.html#description","682":"/docs/modules/cli/search.html#sync-registry","683":"/docs/modules/cli/search.html#examples","684":"/docs/modules/cli/search.html#behavior-notes","685":"/docs/modules/cli/search.html#design-goals","686":"/docs/modules/cli/tests.html#vix-tests","687":"/docs/modules/cli/tests.html#usage","688":"/docs/modules/cli/tests.html#description","689":"/docs/modules/cli/tests.html#test-flags","690":"/docs/modules/cli/tests.html#ctest-passthrough","691":"/docs/modules/cli/tests.html#preset-behavior","692":"/docs/modules/cli/tests.html#examples","693":"/docs/modules/cli/tests.html#notes","694":"/docs/modules/cli/verify.html#vix-verify","695":"/docs/modules/cli/verify.html#usage","696":"/docs/modules/cli/verify.html#description","697":"/docs/modules/cli/verify.html#auto-detection-rules","698":"/docs/modules/cli/verify.html#options","699":"/docs/modules/cli/verify.html#signature-behavior","700":"/docs/modules/cli/verify.html#exit-codes","701":"/docs/modules/cli/verify.html#examples","702":"/docs/modules/cli/verify.html#typical-workflow","703":"/docs/modules/conversion/error.html#conversionerror","704":"/docs/modules/conversion/error.html#header","705":"/docs/modules/conversion/error.html#conversionerrorcode","706":"/docs/modules/conversion/error.html#meaning","707":"/docs/modules/conversion/error.html#conversionerror-1","708":"/docs/modules/conversion/error.html#fields","709":"/docs/modules/conversion/error.html#ok","710":"/docs/modules/conversion/error.html#to-string-conversionerrorcode","711":"/docs/modules/conversion/error.html#typical-usage-with-expected","712":"/docs/modules/conversion/error.html#design-philosophy","713":"/docs/modules/conversion/expected.html#expected","714":"/docs/modules/conversion/expected.html#header","715":"/docs/modules/conversion/expected.html#why-vix-has-its-own-expected","716":"/docs/modules/conversion/expected.html#when-std-expected-is-used","717":"/docs/modules/conversion/expected.html#constexpr-behavior","718":"/docs/modules/conversion/expected.html#public-api-surface","719":"/docs/modules/conversion/expected.html#expected-t-e","720":"/docs/modules/conversion/expected.html#unexpected-e","721":"/docs/modules/conversion/expected.html#basic-usage-pattern","722":"/docs/modules/conversion/expected.html#creating-errors-with-make-unexpected","723":"/docs/modules/conversion/expected.html#notes-about-the-fallback-implementation","724":"/docs/modules/conversion/expected.html#design-philosophy","725":"/docs/modules/conversion/#conversion","726":"/docs/modules/conversion/#include","727":"/docs/modules/conversion/#result-model","728":"/docs/modules/conversion/#to-bool","729":"/docs/modules/conversion/#to-int","730":"/docs/modules/conversion/#to-float","731":"/docs/modules/conversion/#to-enum","732":"/docs/modules/conversion/#to-string","733":"/docs/modules/conversion/#parse-lt-t-gt","734":"/docs/modules/conversion/#notes","735":"/docs/modules/conversion/to_bool.html#to-bool","736":"/docs/modules/conversion/to_bool.html#overview","737":"/docs/modules/conversion/to_bool.html#supported-inputs","738":"/docs/modules/conversion/to_bool.html#true-values","739":"/docs/modules/conversion/to_bool.html#false-values","740":"/docs/modules/conversion/to_bool.html#function-signature","741":"/docs/modules/conversion/to_bool.html#error-handling","742":"/docs/modules/conversion/to_bool.html#possible-error-codes","743":"/docs/modules/conversion/to_bool.html#example-usage","744":"/docs/modules/conversion/to_bool.html#implementation-notes","745":"/docs/modules/conversion/to_bool.html#design-philosophy","746":"/docs/modules/conversion/parse.html#vix-conversion-parse","747":"/docs/modules/conversion/parse.html#supported-types","748":"/docs/modules/conversion/parse.html#basic-usage","749":"/docs/modules/conversion/parse.html#error-handling","750":"/docs/modules/conversion/parse.html#enum-parsing","751":"/docs/modules/conversion/parse.html#design-philosophy","752":"/docs/modules/conversion/parse.html#summary","753":"/docs/modules/conversion/to_float.html#to-float","754":"/docs/modules/conversion/to_float.html#header","755":"/docs/modules/conversion/to_float.html#overview","756":"/docs/modules/conversion/to_float.html#template-api","757":"/docs/modules/conversion/to_float.html#constraints","758":"/docs/modules/conversion/to_float.html#supported-formats","759":"/docs/modules/conversion/to_float.html#strict-rules","760":"/docs/modules/conversion/to_float.html#error-handling","761":"/docs/modules/conversion/to_float.html#convenience-wrappers","762":"/docs/modules/conversion/to_float.html#to-float32","763":"/docs/modules/conversion/to_float.html#to-float64","764":"/docs/modules/conversion/to_float.html#to-float80","765":"/docs/modules/conversion/to_float.html#example-safe-parsing","766":"/docs/modules/conversion/to_float.html#comparison-with-std-stod","767":"/docs/modules/conversion/to_float.html#design-philosophy","768":"/docs/modules/conversion/to_enum.html#to-enum","769":"/docs/modules/conversion/to_enum.html#header","770":"/docs/modules/conversion/to_enum.html#overview","771":"/docs/modules/conversion/to_enum.html#enumentry","772":"/docs/modules/conversion/to_enum.html#core-api","773":"/docs/modules/conversion/to_enum.html#constraints","774":"/docs/modules/conversion/to_enum.html#behavior","775":"/docs/modules/conversion/to_enum.html#error-handling","776":"/docs/modules/conversion/to_enum.html#example","777":"/docs/modules/conversion/to_enum.html#static-array-overload","778":"/docs/modules/conversion/to_enum.html#case-sensitivity","779":"/docs/modules/conversion/to_enum.html#why-explicit-mapping","780":"/docs/modules/conversion/to_enum.html#design-philosophy","781":"/docs/modules/conversion/to_int.html#to-int","782":"/docs/modules/conversion/to_int.html#header","783":"/docs/modules/conversion/to_int.html#what-it-does","784":"/docs/modules/conversion/to_int.html#api","785":"/docs/modules/conversion/to_int.html#generic-parser","786":"/docs/modules/conversion/to_int.html#convenience-helpers","787":"/docs/modules/conversion/to_int.html#error-behavior","788":"/docs/modules/conversion/to_int.html#examples","789":"/docs/modules/conversion/to_int.html#parse-signed-integer","790":"/docs/modules/conversion/to_int.html#reject-trailing-characters","791":"/docs/modules/conversion/to_int.html#parse-unsigned-integer","792":"/docs/modules/conversion/to_int.html#overflow-detection","793":"/docs/modules/conversion/to_int.html#tips","794":"/docs/modules/conversion/to_string.html#to-string","795":"/docs/modules/conversion/to_string.html#integral-types","796":"/docs/modules/conversion/to_string.html#floating-point-types","797":"/docs/modules/conversion/to_string.html#boolean","798":"/docs/modules/conversion/to_string.html#enum-conversion-mapping-table","799":"/docs/modules/conversion/to_string.html#design-notes","800":"/docs/modules/core/api.html#http","801":"/docs/modules/core/api.html#setting-status-codes","802":"/docs/modules/core/api.html#setting-headers","803":"/docs/modules/core/api.html#sending-plain-text","804":"/docs/modules/core/api.html#sending-json","805":"/docs/modules/core/api.html#reading-request-headers","806":"/docs/modules/core/api.html#checking-header-existence","807":"/docs/modules/core/api.html#raw-body-access","808":"/docs/modules/core/api.html#content-behavior-rule","809":"/docs/modules/core/app.html#quick-start","810":"/docs/modules/core/app.html#lifecycle","811":"/docs/modules/core/app.html#run-port","812":"/docs/modules/core/app.html#listen-port-on-listen","813":"/docs/modules/core/app.html#close-and-wait","814":"/docs/modules/core/app.html#routing","815":"/docs/modules/core/app.html#handler-signatures","816":"/docs/modules/core/app.html#auto-send-behavior","817":"/docs/modules/core/app.html#middleware","818":"/docs/modules/core/app.html#groups","819":"/docs/modules/core/app.html#static-files","820":"/docs/modules/core/app.html#dev-mode","821":"/docs/modules/core/app.html#executor-and-concurrency","822":"/docs/modules/core/app.html#signal-safe-stop","823":"/docs/modules/core/app.html#introspection","824":"/docs/modules/core/app.html#notes","825":"/docs/modules/core/config.html#configuration","826":"/docs/modules/core/config.html#_1-config-file-format","827":"/docs/modules/core/config.html#_2-loading-config","828":"/docs/modules/core/config.html#singleton-access","829":"/docs/modules/core/config.html#_3-typed-getters-with-defaults","830":"/docs/modules/core/config.html#_4-dot-path-lookup","831":"/docs/modules/core/config.html#_5-convenience-getters-server-logging-waf","832":"/docs/modules/core/config.html#_6-environment-override-db-password","833":"/docs/modules/core/config.html#_7-defaults-and-validation-behavior","834":"/docs/modules/core/config.html#best-practices","835":"/docs/modules/core/console.html#vix-console-core","836":"/docs/modules/core/console.html#goals-what-vix-console-guarantees","837":"/docs/modules/core/console.html#non-goals-what-it-is-not","838":"/docs/modules/core/console.html#what-vix-console-is-not-by-design","839":"/docs/modules/core/console.html#quick-start","840":"/docs/modules/core/console.html#api-and-semantics","841":"/docs/modules/core/console.html#methods","842":"/docs/modules/core/console.html#level-policy","843":"/docs/modules/core/console.html#environment-variables-read-once-stable","844":"/docs/modules/core/console.html#vix-console-level","845":"/docs/modules/core/console.html#color-control","846":"/docs/modules/core/console.html#performance-model-critical-contract","847":"/docs/modules/core/console.html#the-golden-rule","848":"/docs/modules/core/console.html#practical-guidance","849":"/docs/modules/core/console.html#thread-safety-and-atomic-lines","850":"/docs/modules/core/console.html#guarantee","851":"/docs/modules/core/console.html#implication","852":"/docs/modules/core/console.html#i-o-behavior-and-constraints-important","853":"/docs/modules/core/console.html#best-effort-i-o","854":"/docs/modules/core/console.html#flush-policy","855":"/docs/modules/core/console.html#ordering-guarantees","856":"/docs/modules/core/console.html#anti-spam-protection-dev-proof","857":"/docs/modules/core/console.html#why-it-exists","858":"/docs/modules/core/console.html#policy","859":"/docs/modules/core/console.html#reliability-notes-crash-shutdown","860":"/docs/modules/core/console.html#recommended-usage-patterns","861":"/docs/modules/core/console.html#good","862":"/docs/modules/core/console.html#avoid","863":"/docs/modules/core/console.html#integration","864":"/docs/modules/core/console.html#include","865":"/docs/modules/core/console.html#umbrella-headers","866":"/docs/modules/core/console.html#faq","867":"/docs/modules/core/console.html#is-vix-console-asynchronous","868":"/docs/modules/core/console.html#why-not-auto-enable-debug-by-default","869":"/docs/modules/core/console.html#why-not-structured-json-by-default","870":"/docs/modules/core/console.html#summary","871":"/docs/modules/core/example.html#vix-cpp-examples-guide-beginner-friendly","872":"/docs/modules/core/example.html#mental-model-for-python-node-developers","873":"/docs/modules/core/example.html#where-to-go-next","874":"/docs/modules/core/executor.html#executor","875":"/docs/modules/core/executor.html#iexecutor","876":"/docs/modules/core/executor.html#core-api","877":"/docs/modules/core/executor.html#post-fn-opt","878":"/docs/modules/core/executor.html#metrics","879":"/docs/modules/core/executor.html#wait-idle","880":"/docs/modules/core/executor.html#futures-with-submit","881":"/docs/modules/core/executor.html#rejection-behavior","882":"/docs/modules/core/executor.html#taskoptions","883":"/docs/modules/core/executor.html#fields","884":"/docs/modules/core/executor.html#metrics-1","885":"/docs/modules/core/executor.html#lightweight-wrappers","886":"/docs/modules/core/executor.html#stand","887":"/docs/modules/core/executor.html#limitedexecutor","888":"/docs/modules/core/executor.html#how-it-fits-in-core","889":"/docs/modules/core/executor.html#practical-guidance","890":"/docs/modules/core/experimental.html#experimental-threadpoolexecutor","891":"/docs/modules/core/experimental.html#threadpoolexecutor","892":"/docs/modules/core/experimental.html#construction","893":"/docs/modules/core/experimental.html#parameters","894":"/docs/modules/core/experimental.html#core-api","895":"/docs/modules/core/experimental.html#post-fn-opt","896":"/docs/modules/core/experimental.html#metrics","897":"/docs/modules/core/experimental.html#wait-idle","898":"/docs/modules/core/experimental.html#introspection","899":"/docs/modules/core/experimental.html#factory-helper","900":"/docs/modules/core/experimental.html#how-it-integrates-with-app","901":"/docs/modules/core/experimental.html#design-notes","902":"/docs/modules/core/experimental.html#when-to-use-it","903":"/docs/modules/core/guide.html#http","904":"/docs/modules/core/guide.html#setting-status-codes","905":"/docs/modules/core/guide.html#setting-headers","906":"/docs/modules/core/guide.html#sending-plain-text","907":"/docs/modules/core/guide.html#sending-json","908":"/docs/modules/core/guide.html#reading-request-headers","909":"/docs/modules/core/guide.html#checking-header-existence","910":"/docs/modules/core/guide.html#raw-body-access","911":"/docs/modules/core/guide.html#content-behavior-rule","912":"/docs/modules/core/http.html#http-core","913":"/docs/modules/core/http.html#irequesthandler","914":"/docs/modules/core/http.html#request","915":"/docs/modules/core/http.html#path-and-query-parsing","916":"/docs/modules/core/http.html#route-params","917":"/docs/modules/core/http.html#json-caching","918":"/docs/modules/core/http.html#requeststate","919":"/docs/modules/core/http.html#response","920":"/docs/modules/core/http.html#http-date-formatting","921":"/docs/modules/core/http.html#responsewrapper","922":"/docs/modules/core/http.html#common-usage","923":"/docs/modules/core/http.html#auto-default-behavior","924":"/docs/modules/core/http.html#static-files","925":"/docs/modules/core/http.html#requesthandler","926":"/docs/modules/core/http.html#supported-handler-signatures","927":"/docs/modules/core/http.html#error-handling","928":"/docs/modules/core/http.html#status","929":"/docs/modules/core/http.html#practical-guidance","930":"/docs/modules/core/#core-overview","931":"/docs/modules/core/#what-the-core-provides","932":"/docs/modules/core/#request-lifecycle-end-to-end","933":"/docs/modules/core/#why-this-architecture-exists","934":"/docs/modules/core/#core-components","935":"/docs/modules/core/#httpserver","936":"/docs/modules/core/#session","937":"/docs/modules/core/#router","938":"/docs/modules/core/#heavy-routes","939":"/docs/modules/core/#openapi-and-docs","940":"/docs/modules/core/#disable-auto-docs","941":"/docs/modules/core/#executor-threadpool-and-timers","942":"/docs/modules/core/#threadpool","943":"/docs/modules/core/#interval-timer","944":"/docs/modules/core/#mental-mapping-for-node-js-and-python-developers","945":"/docs/modules/core/#node-js-mapping-express","946":"/docs/modules/core/#python-mapping-fastapi","947":"/docs/modules/core/#minimal-example","948":"/docs/modules/core/#practical-recommendations","949":"/docs/modules/core/middleware.html#middleware-core","950":"/docs/modules/core/middleware.html#_1-context","951":"/docs/modules/core/middleware.html#_2-services","952":"/docs/modules/core/middleware.html#_3-request-scoped-state","953":"/docs/modules/core/middleware.html#_4-next-continuation-control","954":"/docs/modules/core/middleware.html#_5-hooks","955":"/docs/modules/core/middleware.html#_6-result-and-error","956":"/docs/modules/core/middleware.html#_7-standard-error-model","957":"/docs/modules/core/middleware.html#_8-typical-middleware-flow","958":"/docs/modules/core/middleware.html#design-philosophy","959":"/docs/modules/core/middleware.html#when-to-use-middleware","960":"/docs/modules/core/middleware.html#summary","961":"/docs/modules/core/openapi.html#openapi-and-docs-ui-offline-swagger","962":"/docs/modules/core/openapi.html#what-you-get","963":"/docs/modules/core/openapi.html#core-types","964":"/docs/modules/core/openapi.html#routedoc","965":"/docs/modules/core/openapi.html#openapi-registry","966":"/docs/modules/core/openapi.html#build-openapi-json","967":"/docs/modules/core/openapi.html#register-the-docs-routes","968":"/docs/modules/core/openapi.html#offline-swagger-ui-behavior","969":"/docs/modules/core/openapi.html#heavy-routes-metadata","970":"/docs/modules/core/openapi.html#disable-auto-docs","971":"/docs/modules/core/openapi.html#minimal-integration-example","972":"/docs/modules/core/router.html#router-core","973":"/docs/modules/core/router.html#design-philosophy","974":"/docs/modules/core/router.html#basic-route-registration","975":"/docs/modules/core/router.html#route-tree-model","976":"/docs/modules/core/router.html#path-parameters","977":"/docs/modules/core/router.html#heavy-routes","978":"/docs/modules/core/router.html#head-fallback","979":"/docs/modules/core/router.html#options-handling","980":"/docs/modules/core/router.html#_404-handling","981":"/docs/modules/core/router.html#openapi-integration","982":"/docs/modules/core/router.html#matching-rules","983":"/docs/modules/core/router.html#guarantees","984":"/docs/modules/core/router.html#when-to-use","985":"/docs/modules/core/router.html#summary","986":"/docs/modules/core/routing.html#routing","987":"/docs/modules/core/routing.html#minimal-server","988":"/docs/modules/core/routing.html#plain-text","989":"/docs/modules/core/routing.html#json-response","990":"/docs/modules/core/routing.html#nested-json","991":"/docs/modules/core/routing.html#status-codes","992":"/docs/modules/core/routing.html#path-parameters","993":"/docs/modules/core/routing.html#query-parameters","994":"/docs/modules/core/routing.html#headers","995":"/docs/modules/core/routing.html#request-body","996":"/docs/modules/core/routing.html#raw-body","997":"/docs/modules/core/routing.html#json-body","998":"/docs/modules/core/routing.html#mixed-behavior","999":"/docs/modules/core/routing.html#rule-of-thumb","1000":"/docs/modules/core/server.html#http-server-guide-vix-server-httpserver","1001":"/docs/modules/core/server.html#what-httpserver-is","1002":"/docs/modules/core/server.html#key-dependencies","1003":"/docs/modules/core/server.html#boost","1004":"/docs/modules/core/server.html#vix-components","1005":"/docs/modules/core/server.html#public-api","1006":"/docs/modules/core/server.html#constructor","1007":"/docs/modules/core/server.html#run","1008":"/docs/modules/core/server.html#start-accept","1009":"/docs/modules/core/server.html#calculate-io-thread-count","1010":"/docs/modules/core/server.html#getrouter","1011":"/docs/modules/core/server.html#monitor-metrics","1012":"/docs/modules/core/server.html#stop-async","1013":"/docs/modules/core/server.html#stop-blocking","1014":"/docs/modules/core/server.html#join-threads","1015":"/docs/modules/core/server.html#bound-port","1016":"/docs/modules/core/server.html#internal-flow","1017":"/docs/modules/core/server.html#_1-acceptor-initialization","1018":"/docs/modules/core/server.html#_2-accept-loop","1019":"/docs/modules/core/server.html#_3-session-creation","1020":"/docs/modules/core/server.html#_4-i-o-threads","1021":"/docs/modules/core/server.html#typical-usage","1022":"/docs/modules/core/server.html#setup-and-run","1023":"/docs/modules/core/server.html#graceful-shutdown","1024":"/docs/modules/core/server.html#notes-and-gotchas","1025":"/docs/modules/core/server.html#port-validation","1026":"/docs/modules/core/server.html#head-requests","1027":"/docs/modules/core/server.html#stop-blocking-does-not-stop","1028":"/docs/modules/core/server.html#close-socket","1029":"/docs/modules/core/server.html#how-to-extend","1030":"/docs/modules/core/server.html#custom-404","1031":"/docs/modules/core/server.html#dedicated-executors-heavy-routes","1032":"/docs/modules/core/server.html#checklist-for-production","1033":"/docs/modules/core/threadpool.html#threadpool-vix-threadpool","1034":"/docs/modules/core/threadpool.html#components","1035":"/docs/modules/core/threadpool.html#_1-task","1036":"/docs/modules/core/threadpool.html#_2-taskcmp","1037":"/docs/modules/core/threadpool.html#_3-taskguard","1038":"/docs/modules/core/threadpool.html#_4-threadpool","1039":"/docs/modules/core/threadpool.html#construction","1040":"/docs/modules/core/threadpool.html#enqueueing-work","1041":"/docs/modules/core/threadpool.html#timeout-behavior","1042":"/docs/modules/core/threadpool.html#return-values","1043":"/docs/modules/core/threadpool.html#auto-scaling","1044":"/docs/modules/core/threadpool.html#periodic-scheduling","1045":"/docs/modules/core/threadpool.html#idle-waiting","1046":"/docs/modules/core/threadpool.html#shutdown-and-lifetime","1047":"/docs/modules/core/threadpool.html#platform-notes","1048":"/docs/modules/core/threadpool.html#linux-cpu-affinity","1049":"/docs/modules/core/threadpool.html#windows-macros","1050":"/docs/modules/core/threadpool.html#usage-example","1051":"/docs/modules/core/threadpool.html#integration-note-for-vix-server","1052":"/docs/modules/core/threadpool.html#quick-checklist","1053":"/docs/modules/core/session.html#session-core","1054":"/docs/modules/core/session.html#architecture-role","1055":"/docs/modules/core/session.html#responsibilities","1056":"/docs/modules/core/session.html#_1-asynchronous-request-reading","1057":"/docs/modules/core/session.html#_2-timeout-protection","1058":"/docs/modules/core/session.html#_3-basic-waf-web-application-firewall","1059":"/docs/modules/core/session.html#light-vs-heavy-routes","1060":"/docs/modules/core/session.html#keep-alive-handling","1061":"/docs/modules/core/session.html#response-flow","1062":"/docs/modules/core/session.html#error-handling-guarantees","1063":"/docs/modules/core/session.html#security-safeguards","1064":"/docs/modules/core/session.html#thread-safety","1065":"/docs/modules/core/session.html#performance-model","1066":"/docs/modules/core/session.html#when-to-use","1067":"/docs/modules/core/session.html#summary","1068":"/docs/modules/core/timers.html#timers-interval","1069":"/docs/modules/core/timers.html#files","1070":"/docs/modules/core/timers.html#key-types","1071":"/docs/modules/core/timers.html#vix-timers-intervalhandle","1072":"/docs/modules/core/timers.html#api","1073":"/docs/modules/core/timers.html#intervalhandle-interval-iexecutor-exec-milliseconds-period-function-void-fn-taskoptions-opt","1074":"/docs/modules/core/timers.html#typical-usage","1075":"/docs/modules/core/timers.html#_1-store-the-handle-in-a-long-lived-owner-server-app","1076":"/docs/modules/core/timers.html#_2-stop-explicitly","1077":"/docs/modules/core/timers.html#concurrency-and-safety","1078":"/docs/modules/core/timers.html#practical-guidance","1079":"/docs/modules/crypto/#crypto","1080":"/docs/modules/crypto/#include","1081":"/docs/modules/crypto/#result-model","1082":"/docs/modules/crypto/#_1-hashing","1083":"/docs/modules/crypto/#sha-256","1084":"/docs/modules/crypto/#_2-randomness","1085":"/docs/modules/crypto/#_3-authenticated-encryption-aead","1086":"/docs/modules/crypto/#algorithms","1087":"/docs/modules/crypto/#key-and-nonce-sizes","1088":"/docs/modules/crypto/#seal-encrypt","1089":"/docs/modules/crypto/#open-decrypt","1090":"/docs/modules/crypto/#_4-digital-signatures","1091":"/docs/modules/crypto/#algorithms-1","1092":"/docs/modules/crypto/#key-generation","1093":"/docs/modules/crypto/#sign","1094":"/docs/modules/crypto/#verify","1095":"/docs/modules/crypto/#recommended-usage","1096":"/docs/modules/db/#database","1097":"/docs/modules/db/#_1-build-and-feature-flags","1098":"/docs/modules/db/#_2-core-model","1099":"/docs/modules/db/#connection","1100":"/docs/modules/db/#statement","1101":"/docs/modules/db/#resultset-and-resultrow","1102":"/docs/modules/db/#_3-dbvalue-and-binding","1103":"/docs/modules/db/#_4-connection-pool","1104":"/docs/modules/db/#_5-database-facade-and-config","1105":"/docs/modules/db/#_6-minimal-examples","1106":"/docs/modules/db/#_6-1-connect-and-ping","1107":"/docs/modules/db/#_6-2-transaction-create-table-insert-query","1108":"/docs/modules/db/#_6-3-prepared-select-with-parameter","1109":"/docs/modules/db/#_7-transactions","1110":"/docs/modules/db/#_8-migrations","1111":"/docs/modules/db/#code-migrations","1112":"/docs/modules/db/#file-migrations","1113":"/docs/modules/db/#_9-drivers-overview","1114":"/docs/modules/db/#sqlite-driver","1115":"/docs/modules/db/#mysql-driver","1116":"/docs/modules/db/#_10-schema-utilities","1117":"/docs/modules/db/#_11-common-errors","1118":"/docs/modules/deploy/#deploy-vix-cpp","1119":"/docs/modules/deploy/#goal","1120":"/docs/modules/deploy/#folder-layout","1121":"/docs/modules/deploy/#_1-build-and-copy-the-binary","1122":"/docs/modules/deploy/#option-a-build-locally-copy-to-server","1123":"/docs/modules/deploy/#option-b-build-on-the-server","1124":"/docs/modules/deploy/#_2-systemd-service","1125":"/docs/modules/deploy/#logs","1126":"/docs/modules/deploy/#_3-open-the-port-firewall","1127":"/docs/modules/deploy/#_4-nginx-reverse-proxy-recommended","1128":"/docs/modules/deploy/#_5-tls-with-certbot-optional","1129":"/docs/modules/deploy/#_6-deploy-update-workflow-simple-and-safe","1130":"/docs/modules/deploy/#_7-health-check-ideas","1131":"/docs/modules/deploy/#common-issues","1132":"/docs/modules/deploy/#service-starts-then-exits","1133":"/docs/modules/deploy/#permission-errors-static-files-uploads","1134":"/docs/modules/deploy/#wrong-client-ip-inside-the-app","1135":"/docs/modules/deploy/#minimal-checklist","1136":"/docs/modules/json/build.html#json-build-helpers","1137":"/docs/modules/json/build.html#include","1138":"/docs/modules/json/build.html#types","1139":"/docs/modules/json/build.html#vix-json-json","1140":"/docs/modules/json/build.html#vix-json-orderedjson","1141":"/docs/modules/json/build.html#builders","1142":"/docs/modules/json/build.html#o-k1-v1-k2-v2-orderedjson","1143":"/docs/modules/json/build.html#nested-example","1144":"/docs/modules/json/build.html#why-ordered","1145":"/docs/modules/json/build.html#a-v1-v2-v3-json","1146":"/docs/modules/json/build.html#nested-arrays-and-objects","1147":"/docs/modules/json/build.html#dynamic-pairs-example","1148":"/docs/modules/json/build.html#common-mistakes","1149":"/docs/modules/json/build.html#_1-odd-number-of-arguments-to-o","1150":"/docs/modules/json/build.html#_2-using-kv-a-1","1151":"/docs/modules/json/build.html#_3-keys-that-are-not-key-like","1152":"/docs/modules/json/build.html#patterns-you-can-copy","1153":"/docs/modules/json/build.html#api-response-envelope","1154":"/docs/modules/json/build.html#pagination-response","1155":"/docs/modules/json/build.html#notes-on-conversions","1156":"/docs/modules/json/build.html#when-to-use-which-helper","1157":"/docs/modules/json/build.html#summary","1158":"/docs/modules/json/convert.html#json-convert-helpers","1159":"/docs/modules/json/convert.html#include","1160":"/docs/modules/json/convert.html#strictness-levels","1161":"/docs/modules/json/convert.html#_1-ptr","1162":"/docs/modules/json/convert.html#_2-get-opt-t","1163":"/docs/modules/json/convert.html#_3-get-or-t","1164":"/docs/modules/json/convert.html#_4-ensure-t","1165":"/docs/modules/json/convert.html#types","1166":"/docs/modules/json/convert.html#ptr-reference","1167":"/docs/modules/json/convert.html#ptr-const-json-j-std-string-view-key","1168":"/docs/modules/json/convert.html#ptr-const-json-j-std-size-t-idx","1169":"/docs/modules/json/convert.html#get-opt-t-reference","1170":"/docs/modules/json/convert.html#convert-a-value","1171":"/docs/modules/json/convert.html#convert-from-a-pointer","1172":"/docs/modules/json/convert.html#convert-an-object-member-by-key","1173":"/docs/modules/json/convert.html#convert-an-array-element-by-index","1174":"/docs/modules/json/convert.html#get-or-t-reference","1175":"/docs/modules/json/convert.html#convert-a-value-with-a-default","1176":"/docs/modules/json/convert.html#convert-an-object-member-with-a-default","1177":"/docs/modules/json/convert.html#convert-an-array-element-with-a-default","1178":"/docs/modules/json/convert.html#ensure-t-reference","1179":"/docs/modules/json/convert.html#strict-conversion-of-a-value","1180":"/docs/modules/json/convert.html#strict-conversion-of-an-object-member","1181":"/docs/modules/json/convert.html#converting-vix-simple-json-to-nlohmann-json","1182":"/docs/modules/json/convert.html#simple-to-json-token-kvs-array-t","1183":"/docs/modules/json/convert.html#to-json-convenience-overloads","1184":"/docs/modules/json/convert.html#practical-patterns","1185":"/docs/modules/json/convert.html#parsing-external-payload-safely","1186":"/docs/modules/json/convert.html#trusted-config-parsing-strictly","1187":"/docs/modules/json/convert.html#summary","1188":"/docs/modules/json/dumps.html#json-dumps-helpers","1189":"/docs/modules/json/dumps.html#include","1190":"/docs/modules/json/dumps.html#types","1191":"/docs/modules/json/dumps.html#_1-serialize-json-to-string","1192":"/docs/modules/json/dumps.html#dumps","1193":"/docs/modules/json/dumps.html#custom-indentation","1194":"/docs/modules/json/dumps.html#escape-non-ascii","1195":"/docs/modules/json/dumps.html#dumps-pretty","1196":"/docs/modules/json/dumps.html#dumps-compact","1197":"/docs/modules/json/dumps.html#_2-write-json-safely-to-disk","1198":"/docs/modules/json/dumps.html#dump-file-path-json","1199":"/docs/modules/json/dumps.html#what-makes-it-safe","1200":"/docs/modules/json/dumps.html#custom-formatting","1201":"/docs/modules/json/dumps.html#overloads","1202":"/docs/modules/json/dumps.html#error-handling","1203":"/docs/modules/json/dumps.html#practical-patterns","1204":"/docs/modules/json/dumps.html#writing-application-config","1205":"/docs/modules/json/dumps.html#logging-a-json-response","1206":"/docs/modules/json/dumps.html#sending-compact-json-over-network","1207":"/docs/modules/json/dumps.html#when-to-use-which","1208":"/docs/modules/json/dumps.html#summary","1209":"/docs/modules/json/#json","1210":"/docs/modules/json/#_1-simple-json","1211":"/docs/modules/json/#token","1212":"/docs/modules/json/#array-t","1213":"/docs/modules/json/#kvs-object","1214":"/docs/modules/json/#nested-structures","1215":"/docs/modules/json/#merge-and-erase","1216":"/docs/modules/json/#_2-high-level-json-nlohmann-powered","1217":"/docs/modules/json/#object-array-builders","1218":"/docs/modules/json/#file-io","1219":"/docs/modules/json/#jpath-navigation","1220":"/docs/modules/json/#when-to-use-which","1221":"/docs/modules/json/jpath.html#jpath-guide","1222":"/docs/modules/json/jpath.html#include","1223":"/docs/modules/json/jpath.html#what-problem-does-jpath-solve","1224":"/docs/modules/json/jpath.html#supported-syntax","1225":"/docs/modules/json/jpath.html#_1-dot-notation","1226":"/docs/modules/json/jpath.html#_2-array-indices","1227":"/docs/modules/json/jpath.html#_3-quoted-keys-inside-brackets","1228":"/docs/modules/json/jpath.html#read-vs-write-behavior","1229":"/docs/modules/json/jpath.html#read-only-const-json-jget-const-json-path","1230":"/docs/modules/json/jpath.html#writable-json-jget-json-path","1231":"/docs/modules/json/jpath.html#safe-write-wrapper-jset-json-path-value","1232":"/docs/modules/json/jpath.html#quick-reference","1233":"/docs/modules/json/jpath.html#tokenize-path-path-std-vector-token","1234":"/docs/modules/json/jpath.html#examples","1235":"/docs/modules/json/jpath.html#read-a-nested-value","1236":"/docs/modules/json/jpath.html#read-array-element","1237":"/docs/modules/json/jpath.html#read-a-key-that-contains-a-dot","1238":"/docs/modules/json/jpath.html#write-and-auto-create","1239":"/docs/modules/json/jpath.html#error-cases-and-behavior","1240":"/docs/modules/json/jpath.html#invalid-syntax-in-read-only-mode","1241":"/docs/modules/json/jpath.html#invalid-syntax-in-writable-mode","1242":"/docs/modules/json/jpath.html#performance-notes","1243":"/docs/modules/json/jpath.html#when-to-use-jpath","1244":"/docs/modules/json/jpath.html#summary","1245":"/docs/modules/json/loads.html#json-loads-guide","1246":"/docs/modules/json/loads.html#include","1247":"/docs/modules/json/loads.html#overview","1248":"/docs/modules/json/loads.html#from-strings","1249":"/docs/modules/json/loads.html#from-files","1250":"/docs/modules/json/loads.html#from-strings-1","1251":"/docs/modules/json/loads.html#loads-std-string-view","1252":"/docs/modules/json/loads.html#try-loads-std-string-view","1253":"/docs/modules/json/loads.html#from-files-1","1254":"/docs/modules/json/loads.html#load-file-const-fs-path","1255":"/docs/modules/json/loads.html#try-load-file-const-fs-path","1256":"/docs/modules/json/loads.html#error-model","1257":"/docs/modules/json/loads.html#when-to-use-what","1258":"/docs/modules/json/loads.html#examples","1259":"/docs/modules/json/loads.html#parse-json-from-string","1260":"/docs/modules/json/loads.html#safe-parse-user-input","1261":"/docs/modules/json/loads.html#load-configuration","1262":"/docs/modules/json/loads.html#optional-settings-file","1263":"/docs/modules/json/loads.html#convenience-overloads","1264":"/docs/modules/json/loads.html#design-philosophy","1265":"/docs/modules/json/loads.html#summary","1266":"/docs/modules/json/simple.html#simple-json-model-guide","1267":"/docs/modules/json/simple.html#include","1268":"/docs/modules/json/simple.html#what-is-simple","1269":"/docs/modules/json/simple.html#core-types","1270":"/docs/modules/json/simple.html#token","1271":"/docs/modules/json/simple.html#array-t","1272":"/docs/modules/json/simple.html#kvs","1273":"/docs/modules/json/simple.html#quick-example","1274":"/docs/modules/json/simple.html#creating-values","1275":"/docs/modules/json/simple.html#null","1276":"/docs/modules/json/simple.html#bool","1277":"/docs/modules/json/simple.html#integers","1278":"/docs/modules/json/simple.html#floating-point","1279":"/docs/modules/json/simple.html#strings","1280":"/docs/modules/json/simple.html#arrays","1281":"/docs/modules/json/simple.html#objects","1282":"/docs/modules/json/simple.html#reading-values","1283":"/docs/modules/json/simple.html#type-checks","1284":"/docs/modules/json/simple.html#raw-getters-pointer-or-nullptr","1285":"/docs/modules/json/simple.html#convenience-getters-with-default","1286":"/docs/modules/json/simple.html#mutating-values","1287":"/docs/modules/json/simple.html#setters","1288":"/docs/modules/json/simple.html#ensure-array-object","1289":"/docs/modules/json/simple.html#array-t-guide","1290":"/docs/modules/json/simple.html#append-elements","1291":"/docs/modules/json/simple.html#ensure-index","1292":"/docs/modules/json/simple.html#remove-at-index","1293":"/docs/modules/json/simple.html#kvs-guide","1294":"/docs/modules/json/simple.html#find-and-contains","1295":"/docs/modules/json/simple.html#get-pointer","1296":"/docs/modules/json/simple.html#get-or-create","1297":"/docs/modules/json/simple.html#set-insert-or-replace","1298":"/docs/modules/json/simple.html#typed-getters","1299":"/docs/modules/json/simple.html#typed-getters-with-defaults","1300":"/docs/modules/json/simple.html#typed-setters","1301":"/docs/modules/json/simple.html#ensure-nested-array-object","1302":"/docs/modules/json/simple.html#builders-and-aliases","1303":"/docs/modules/json/simple.html#builders-existing-api","1304":"/docs/modules/json/simple.html#explicit-aliases","1305":"/docs/modules/json/simple.html#important-fix-integer-ambiguity","1306":"/docs/modules/json/simple.html#when-to-use-simple-vs-nlohmann-json","1307":"/docs/modules/json/simple.html#summary","1308":"/docs/modules/middleware/#middleware","1309":"/docs/modules/middleware/#context-based-middleware-recommended","1310":"/docs/modules/middleware/#legacy-http-middleware","1311":"/docs/modules/middleware/#prefix-middleware","1312":"/docs/modules/middleware/#exact-path-middleware","1313":"/docs/modules/middleware/#chaining-and-early-return","1314":"/docs/modules/middleware/#requeststate-store-data-across-middleware-and-handlers","1315":"/docs/modules/middleware/#notes","1316":"/docs/modules/orm/examples.html#orm-examples","1317":"/docs/modules/orm/examples.html#concepts","1318":"/docs/modules/orm/examples.html#_1-connection-pool-basic-insert-transaction","1319":"/docs/modules/orm/examples.html#_2-querybuilder-update","1320":"/docs/modules/orm/examples.html#_3-repository-crud","1321":"/docs/modules/orm/examples.html#_4-unitofwork","1322":"/docs/modules/orm/examples.html#common-errors","1323":"/docs/modules/orm/#orm-guide","1324":"/docs/modules/orm/#include","1325":"/docs/modules/orm/#_1-orm-c-api","1326":"/docs/modules/orm/#core-building-blocks","1327":"/docs/modules/orm/#entity","1328":"/docs/modules/orm/#mapper","1329":"/docs/modules/orm/#repository-baserepository","1330":"/docs/modules/orm/#constructor","1331":"/docs/modules/orm/#create","1332":"/docs/modules/orm/#find-by-id","1333":"/docs/modules/orm/#update-by-id","1334":"/docs/modules/orm/#delete-by-id","1335":"/docs/modules/orm/#unitofwork","1336":"/docs/modules/orm/#access-the-transaction-connection","1337":"/docs/modules/orm/#querybuilder","1338":"/docs/modules/orm/#db-compat-hpp","1339":"/docs/modules/orm/#any-to-dbvalue-or-throw-const-std-any","1340":"/docs/modules/orm/#_2-cli-vix-orm","1341":"/docs/modules/orm/#usage","1342":"/docs/modules/orm/#commands","1343":"/docs/modules/orm/#migrate","1344":"/docs/modules/orm/#rollback","1345":"/docs/modules/orm/#status","1346":"/docs/modules/orm/#makemigrations","1347":"/docs/modules/orm/#common-options","1348":"/docs/modules/orm/#environment-defaults","1349":"/docs/modules/orm/#examples","1350":"/docs/modules/orm/#summary","1351":"/docs/modules/p2p/#p2p-ping","1352":"/docs/modules/p2p/#run","1353":"/docs/modules/p2p/#example","1354":"/docs/modules/p2p/#notes","1355":"/docs/modules/p2p_http/#p2p-ping","1356":"/docs/modules/p2p_http/#run","1357":"/docs/modules/p2p_http/#example","1358":"/docs/modules/p2p_http/#notes","1359":"/docs/modules/sync/engine.html#sync-engine","1360":"/docs/modules/sync/engine.html#headers","1361":"/docs/modules/sync/engine.html#architecture-overview","1362":"/docs/modules/sync/engine.html#syncengine","1363":"/docs/modules/sync/engine.html#config","1364":"/docs/modules/sync/engine.html#lifecycle","1365":"/docs/modules/sync/engine.html#syncworker","1366":"/docs/modules/sync/engine.html#config-1","1367":"/docs/modules/sync/engine.html#api","1368":"/docs/modules/sync/engine.html#isynctransport-and-sendresult","1369":"/docs/modules/sync/engine.html#sendresult","1370":"/docs/modules/sync/engine.html#transport-interface","1371":"/docs/modules/sync/engine.html#usage-pattern","1372":"/docs/modules/sync/engine.html#manual-driving-single-threaded-integration","1373":"/docs/modules/sync/engine.html#background-loop","1374":"/docs/modules/sync/engine.html#thread-safety-contract","1375":"/docs/modules/sync/engine.html#design-philosophy","1376":"/docs/modules/sync/examples.html#sync-examples","1377":"/docs/modules/sync/examples.html#example-1-minimal-smoke-test-enqueue-tick-done","1378":"/docs/modules/sync/examples.html#example-2-permanent-failure-retryable-false","1379":"/docs/modules/sync/examples.html#example-3-in-flight-timeout-requeue-simulate-crash","1380":"/docs/modules/sync/examples.html#appendix-minimal-fake-transport","1381":"/docs/modules/sync/examples.html#notes","1382":"/docs/modules/sync/operation.html#operation","1383":"/docs/modules/sync/operation.html#header","1384":"/docs/modules/sync/operation.html#overview","1385":"/docs/modules/sync/operation.html#operationstatus","1386":"/docs/modules/sync/operation.html#meaning","1387":"/docs/modules/sync/operation.html#operation-structure","1388":"/docs/modules/sync/operation.html#fields-explained","1389":"/docs/modules/sync/operation.html#id","1390":"/docs/modules/sync/operation.html#kind","1391":"/docs/modules/sync/operation.html#target","1392":"/docs/modules/sync/operation.html#payload","1393":"/docs/modules/sync/operation.html#idempotency-key","1394":"/docs/modules/sync/operation.html#created-at-ms","1395":"/docs/modules/sync/operation.html#updated-at-ms","1396":"/docs/modules/sync/operation.html#attempt","1397":"/docs/modules/sync/operation.html#next-retry-at-ms","1398":"/docs/modules/sync/operation.html#status","1399":"/docs/modules/sync/operation.html#last-error","1400":"/docs/modules/sync/operation.html#lifecycle-helpers","1401":"/docs/modules/sync/operation.html#is-done","1402":"/docs/modules/sync/operation.html#is-pending","1403":"/docs/modules/sync/operation.html#is-failed","1404":"/docs/modules/sync/operation.html#fail","1405":"/docs/modules/sync/operation.html#done","1406":"/docs/modules/sync/operation.html#typical-lifecycle-flow","1407":"/docs/modules/sync/operation.html#offline-first-guarantees","1408":"/docs/modules/sync/operation.html#design-philosophy","1409":"/docs/modules/sync/outbox.html#outbox","1410":"/docs/modules/sync/outbox.html#headers","1411":"/docs/modules/sync/outbox.html#architecture-overview","1412":"/docs/modules/sync/outbox.html#outbox-1","1413":"/docs/modules/sync/outbox.html#config","1414":"/docs/modules/sync/outbox.html#core-api","1415":"/docs/modules/sync/outbox.html#lifecycle","1416":"/docs/modules/sync/outbox.html#outboxstore","1417":"/docs/modules/sync/outbox.html#listoptions","1418":"/docs/modules/sync/outbox.html#required-methods","1419":"/docs/modules/sync/outbox.html#fileoutboxstore","1420":"/docs/modules/sync/outbox.html#config-1","1421":"/docs/modules/sync/outbox.html#behavior","1422":"/docs/modules/sync/outbox.html#crash-recovery","1423":"/docs/modules/sync/outbox.html#offline-first-guarantees","1424":"/docs/modules/sync/outbox.html#design-philosophy","1425":"/docs/modules/sync/retry_policy.html#retrypolicy","1426":"/docs/modules/sync/retry_policy.html#header","1427":"/docs/modules/sync/retry_policy.html#overview","1428":"/docs/modules/sync/retry_policy.html#structure","1429":"/docs/modules/sync/retry_policy.html#fields-explained","1430":"/docs/modules/sync/retry_policy.html#max-attempts","1431":"/docs/modules/sync/retry_policy.html#base-delay-ms","1432":"/docs/modules/sync/retry_policy.html#max-delay-ms","1433":"/docs/modules/sync/retry_policy.html#factor","1434":"/docs/modules/sync/retry_policy.html#jitter-ratio","1435":"/docs/modules/sync/retry_policy.html#methods","1436":"/docs/modules/sync/retry_policy.html#can-retry","1437":"/docs/modules/sync/retry_policy.html#compute-delay-ms","1438":"/docs/modules/sync/retry_policy.html#example-usage","1439":"/docs/modules/sync/retry_policy.html#deterministic-recovery","1440":"/docs/modules/sync/retry_policy.html#offline-first-considerations","1441":"/docs/modules/sync/retry_policy.html#design-philosophy","1442":"/docs/modules/sync/wal.html#write-ahead-log-wal","1443":"/docs/modules/sync/wal.html#headers","1444":"/docs/modules/sync/wal.html#architecture-overview","1445":"/docs/modules/sync/wal.html#wal","1446":"/docs/modules/sync/wal.html#guarantees","1447":"/docs/modules/sync/wal.html#walrecord","1448":"/docs/modules/sync/wal.html#meaning","1449":"/docs/modules/sync/wal.html#walwriter","1450":"/docs/modules/sync/wal.html#walreader","1451":"/docs/modules/sync/wal.html#typical-usage","1452":"/docs/modules/sync/wal.html#append-before-side-effects","1453":"/docs/modules/sync/wal.html#replay-during-recovery","1454":"/docs/modules/sync/wal.html#crash-recovery-model","1455":"/docs/modules/sync/wal.html#durability-model","1456":"/docs/modules/sync/wal.html#offline-first-guarantees","1457":"/docs/modules/sync/wal.html#design-philosophy","1458":"/docs/modules/time/#time","1459":"/docs/modules/time/#_1-date","1460":"/docs/modules/time/#create-current-date","1461":"/docs/modules/time/#parse-a-date","1462":"/docs/modules/time/#convert-date-to-timestamp-start-of-day-utc","1463":"/docs/modules/time/#_2-datetime-utc","1464":"/docs/modules/time/#current-utc-datetime","1465":"/docs/modules/time/#parse-iso-8601-utc-z","1466":"/docs/modules/time/#_3-timestamp","1467":"/docs/modules/time/#get-current-timestamp","1468":"/docs/modules/time/#timestamp-arithmetic","1469":"/docs/modules/time/#_4-duration","1470":"/docs/modules/time/#create-durations","1471":"/docs/modules/time/#inspect-duration","1472":"/docs/modules/time/#_5-measuring-elapsed-time-steadyclock","1473":"/docs/modules/time/#recommended-usage","1474":"/docs/modules/utils/env.html#env-utilities","1475":"/docs/modules/utils/env.html#api","1476":"/docs/modules/utils/env.html#env-or-key-def","1477":"/docs/modules/utils/env.html#env-bool-key-def","1478":"/docs/modules/utils/env.html#env-int-key-def","1479":"/docs/modules/utils/env.html#env-uint-key-def","1480":"/docs/modules/utils/env.html#env-double-key-def","1481":"/docs/modules/utils/env.html#platform-notes","1482":"/docs/modules/utils/env.html#vix-getenv-name","1483":"/docs/modules/utils/env.html#behavior-details","1484":"/docs/modules/utils/env.html#example-patterns","1485":"/docs/modules/utils/env.html#feature-flags","1486":"/docs/modules/utils/env.html#limits","1487":"/docs/modules/utils/env.html#config-selection","1488":"/docs/modules/utils/env.html#common-variables-used-in-vix-runtime","1489":"/docs/modules/utils/#utils","1490":"/docs/modules/utils/#what-is-inside","1491":"/docs/modules/utils/#quick-start","1492":"/docs/modules/utils/#guides","1493":"/docs/modules/utils/#design-goals","1494":"/docs/modules/utils/prettylogs.html#server-pretty-logs-runtime-banner","1495":"/docs/modules/utils/prettylogs.html#what-this-component-does","1496":"/docs/modules/utils/prettylogs.html#include","1497":"/docs/modules/utils/prettylogs.html#basic-usage","1498":"/docs/modules/utils/prettylogs.html#http-websocket-example","1499":"/docs/modules/utils/prettylogs.html#environment-controls","1500":"/docs/modules/utils/prettylogs.html#colors","1501":"/docs/modules/utils/prettylogs.html#mode","1502":"/docs/modules/utils/prettylogs.html#hyperlinks-osc-8","1503":"/docs/modules/utils/prettylogs.html#animations","1504":"/docs/modules/utils/prettylogs.html#thread-safety-and-output-ordering","1505":"/docs/modules/utils/prettylogs.html#field-reference","1506":"/docs/modules/utils/prettylogs.html#typical-pattern-in-a-server","1507":"/docs/modules/utils/prettylogs.html#troubleshooting","1508":"/docs/modules/utils/logger.html#logger","1509":"/docs/modules/utils/logger.html#include","1510":"/docs/modules/utils/logger.html#default-behavior","1511":"/docs/modules/utils/logger.html#logging-levels","1512":"/docs/modules/utils/logger.html#basic-logging","1513":"/docs/modules/utils/logger.html#module-prefix","1514":"/docs/modules/utils/logger.html#pattern","1515":"/docs/modules/utils/logger.html#async-mode","1516":"/docs/modules/utils/logger.html#per-thread-context","1517":"/docs/modules/utils/logger.html#set-context","1518":"/docs/modules/utils/logger.html#clear-context","1519":"/docs/modules/utils/logger.html#read-context","1520":"/docs/modules/utils/logger.html#structured-logging","1521":"/docs/modules/utils/logger.html#kv-format-default","1522":"/docs/modules/utils/logger.html#json-formats","1523":"/docs/modules/utils/logger.html#colors-and-terminals","1524":"/docs/modules/utils/logger.html#console-synchronization","1525":"/docs/modules/utils/logger.html#windows-macro-safety","1526":"/docs/modules/utils/logger.html#throw-helpers","1527":"/docs/modules/utils/logger.html#recommended-baseline","1528":"/docs/modules/utils/result.html#result-guide","1529":"/docs/modules/utils/result.html#basic-usage","1530":"/docs/modules/utils/result.html#creating-results","1531":"/docs/modules/utils/result.html#checking-state","1532":"/docs/modules/utils/result.html#accessing-values","1533":"/docs/modules/utils/result.html#result-void","1534":"/docs/modules/utils/result.html#design-notes","1535":"/docs/modules/utils/result.html#philosophy","1536":"/docs/modules/utils/string.html#string-helpers-vix-utils-string","1537":"/docs/modules/utils/string.html#include","1538":"/docs/modules/utils/string.html#what-this-file-provides","1539":"/docs/modules/utils/string.html#whitespace-and-trim-ascii-whitespace","1540":"/docs/modules/utils/string.html#case-transform","1541":"/docs/modules/utils/string.html#lowercase-ascii-c-locale","1542":"/docs/modules/utils/string.html#prefix-and-suffix-checks","1543":"/docs/modules/utils/string.html#case-insensitive-prefix","1544":"/docs/modules/utils/string.html#split-and-join","1545":"/docs/modules/utils/string.html#split-by-a-single-character","1546":"/docs/modules/utils/string.html#split-by-a-string-separator","1547":"/docs/modules/utils/string.html#join","1548":"/docs/modules/utils/string.html#http-helpers","1549":"/docs/modules/utils/string.html#extract-multipart-boundary","1550":"/docs/modules/utils/string.html#url-decode","1551":"/docs/modules/utils/string.html#query-string-parsing","1552":"/docs/modules/utils/string.html#notes-and-constraints","1553":"/docs/modules/utils/string.html#file-location-suggestion-project","1554":"/docs/modules/utils/time.html#time","1555":"/docs/modules/utils/time.html#what-you-get","1556":"/docs/modules/utils/time.html#_1-utc-calendar-time-strings","1557":"/docs/modules/utils/time.html#_2-monotonic-milliseconds-for-durations","1558":"/docs/modules/utils/time.html#_3-unix-epoch-milliseconds-for-persisted-timestamps","1559":"/docs/modules/utils/time.html#include-and-namespace","1560":"/docs/modules/utils/time.html#pick-the-right-function","1561":"/docs/modules/utils/time.html#measure-latency-or-elapsed-time","1562":"/docs/modules/utils/time.html#create-a-timestamp-string-for-logs","1563":"/docs/modules/utils/time.html#build-http-date-header","1564":"/docs/modules/utils/time.html#store-an-event-timestamp-in-the-database","1565":"/docs/modules/utils/time.html#internals-and-portability-notes","1566":"/docs/modules/utils/time.html#thread-safe-utc-extraction","1567":"/docs/modules/utils/time.html#strings-and-allocations","1568":"/docs/modules/utils/time.html#common-mistakes","1569":"/docs/modules/utils/time.html#using-system-clock-for-durations","1570":"/docs/modules/utils/time.html#expecting-now-ms-to-be-an-epoch-time","1571":"/docs/modules/utils/time.html#quick-recipe","1572":"/docs/modules/utils/uuid.html#uuid-guide-vix-utils-uuid4","1573":"/docs/modules/utils/uuid.html#what-is-a-uuid-v4","1574":"/docs/modules/utils/uuid.html#basic-usage","1575":"/docs/modules/utils/uuid.html#thread-safety","1576":"/docs/modules/utils/uuid.html#how-it-works-internally","1577":"/docs/modules/utils/uuid.html#when-to-use-uuid-v4","1578":"/docs/modules/utils/uuid.html#performance-characteristics","1579":"/docs/modules/utils/uuid.html#summary","1580":"/docs/modules/utils/validation.html#validation-vix-utils-validation","1581":"/docs/modules/utils/validation.html#what-you-get","1582":"/docs/modules/utils/validation.html#api","1583":"/docs/modules/utils/validation.html#types","1584":"/docs/modules/utils/validation.html#rule","1585":"/docs/modules/utils/validation.html#builders","1586":"/docs/modules/utils/validation.html#validate-map","1587":"/docs/modules/utils/validation.html#quick-start","1588":"/docs/modules/utils/validation.html#common-patterns","1589":"/docs/modules/utils/validation.html#_1-required-length","1590":"/docs/modules/utils/validation.html#_2-optional-field-with-length","1591":"/docs/modules/utils/validation.html#_3-numeric-range","1592":"/docs/modules/utils/validation.html#_4-regex-full-match","1593":"/docs/modules/utils/validation.html#working-with-the-returned-errors","1594":"/docs/modules/utils/validation.html#behavior-details","1595":"/docs/modules/utils/validation.html#empty-string-handling","1596":"/docs/modules/utils/validation.html#first-error-per-field","1597":"/docs/modules/utils/validation.html#regex-cost","1598":"/docs/modules/utils/validation.html#tips","1599":"/docs/modules/validation/#validation","1600":"/docs/modules/validation/#_1-validating-a-simple-value","1601":"/docs/modules/validation/#numeric-example","1602":"/docs/modules/validation/#_2-parsed-validation-string-→-typed-value","1603":"/docs/modules/validation/#_3-schema-based-struct-validation","1604":"/docs/modules/validation/#_4-basemodel-pattern","1605":"/docs/modules/validation/#_5-custom-cross-field-validation","1606":"/docs/modules/validation/#_6-validating-http-style-form-input","1607":"/docs/modules/validation/#_7-allowed-values-in-set","1608":"/docs/modules/validation/#_8-optional-values","1609":"/docs/modules/validation/#error-model","1610":"/docs/modules/validation/#recommended-usage","1611":"/docs/modules/webrpc/examples.html#webrpc-examples","1612":"/docs/modules/webrpc/examples.html#_1-parse-a-request-envelope","1613":"/docs/modules/webrpc/examples.html#_2-register-methods-and-dispatch-with-router","1614":"/docs/modules/webrpc/examples.html#_3-notifications-with-dispatcher","1615":"/docs/modules/webrpc/examples.html#_4-batch-requests","1616":"/docs/modules/webrpc/examples.html#_5-when-to-use-router-vs-dispatcher","1617":"/docs/modules/webrpc/#webrpc-guide","1618":"/docs/modules/webrpc/#what-you-build-with-webrpc","1619":"/docs/modules/webrpc/#request-shape","1620":"/docs/modules/webrpc/#step-1-parse-a-request","1621":"/docs/modules/webrpc/#step-2-register-methods-with-router","1622":"/docs/modules/webrpc/#step-3-use-dispatcher-for-real-transports","1623":"/docs/modules/webrpc/#notifications","1624":"/docs/modules/webrpc/#batch-requests","1625":"/docs/modules/webrpc/#what-goes-in-transport-code","1626":"/docs/modules/websocket/#websocket","1627":"/docs/modules/websocket/#_1-http-ws-in-one-process-with-long-polling-bridge","1628":"/docs/modules/websocket/#_2-standalone-websocket-server","1629":"/docs/modules/websocket/#minimal-client-message","1630":"/docs/modules/websocket/#notes","1631":"/docs/project-setup.html#project-setup","1632":"/docs/project-setup.html#project-setup-1","1633":"/docs/project-setup.html#_1-minimal-structure","1634":"/docs/project-setup.html#_2-main-cpp-example","1635":"/docs/project-setup.html#_3-minimal-cmakelists-txt","1636":"/docs/project-setup.html#_4-build-manually","1637":"/docs/project-setup.html#_5-scaling-later","1638":"/docs/quick-start.html#quick-start","1639":"/docs/quick-start.html#_1-minimal-server","1640":"/docs/quick-start.html#_2-run","1641":"/docs/quick-start.html#_3-test","1642":"/docs/quick-start.html#_4-minimal-route-examples","1643":"/docs/quick-start.html#plain-text","1644":"/docs/quick-start.html#path-parameter","1645":"/docs/quick-start.html#query-parameter","1646":"/docs/quick-start.html#status-code","1647":"/docs/quick-start.html#philosophy","1648":"/docs/services/consulting.html#consulting","1649":"/docs/services/consulting.html#architecture-design","1650":"/docs/services/consulting.html#performance-optimization","1651":"/docs/services/consulting.html#migration-strategy","1652":"/docs/services/consulting.html#codebase-audit","1653":"/docs/services/consulting.html#engagement-models","1654":"/docs/services/consulting.html#contact","1655":"/docs/services/#services","1656":"/docs/services/#what-we-offer","1657":"/docs/services/#who-it-s-for","1658":"/docs/services/#philosophy","1659":"/docs/services/#available-service-categories","1660":"/docs/services/support.html#support","1661":"/docs/services/support.html#production-support","1662":"/docs/services/support.html#priority-channels","1663":"/docs/services/support.html#sla-options","1664":"/docs/services/support.html#what-is-not-included","1665":"/docs/services/support.html#contact","1666":"/docs/services/training.html#training","1667":"/docs/services/training.html#core-training-tracks","1668":"/docs/services/training.html#_1-modern-c-backend-foundations","1669":"/docs/services/training.html#_2-async-concurrency-mastery","1670":"/docs/services/training.html#_3-database-orm-systems","1671":"/docs/services/training.html#_4-p2p-offline-first-architecture","1672":"/docs/services/training.html#format-options","1673":"/docs/services/training.html#who-this-is-for","1674":"/docs/services/training.html#contact"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,40],"1":[1,2,25],"2":[1,2,35],"3":[2,1,36],"4":[1,1,29],"5":[1,1,9],"6":[2,1,12],"7":[2,1,9],"8":[2,1,9],"9":[2,1,10],"10":[3,1,26],"11":[3,1,25],"12":[3,1,37],"13":[2,1,29],"14":[2,1,26],"15":[1,1,11],"16":[1,1,3],"17":[1,1,13],"18":[2,1,1],"19":[1,2,5],"20":[1,2,5],"21":[1,2,5],"22":[1,2,5],"23":[2,2,21],"24":[1,1,14],"25":[2,1,10],"26":[2,1,6],"27":[1,1,8],"28":[1,1,6],"29":[1,1,14],"30":[1,1,7],"31":[1,1,7],"32":[2,1,4],"33":[2,1,5],"34":[3,1,25],"35":[2,1,32],"36":[2,1,22],"37":[2,1,40],"38":[1,2,25],"39":[1,2,35],"40":[2,1,26],"41":[3,1,23],"42":[1,3,41],"43":[2,3,29],"44":[1,3,41],"45":[4,1,17],"46":[2,4,21],"47":[2,4,8],"48":[2,4,9],"49":[1,4,11],"50":[1,4,10],"51":[2,4,11],"52":[5,4,22],"53":[2,1,27],"54":[2,1,25],"55":[1,1,12],"56":[5,1,12],"57":[2,5,34],"58":[2,1,1],"59":[1,2,8],"60":[1,2,10],"61":[2,2,11],"62":[2,1,20],"63":[3,1,25],"64":[4,1,35],"65":[1,1,15],"66":[2,1,34],"67":[2,1,30],"68":[1,1,12],"69":[1,1,11],"70":[3,1,43],"71":[2,1,1],"72":[2,2,14],"73":[2,2,13],"74":[3,2,18],"75":[3,1,18],"76":[1,1,1],"77":[3,1,10],"78":[3,1,9],"79":[3,1,25],"80":[4,1,24],"81":[1,1,32],"82":[2,1,14],"83":[1,2,7],"84":[6,2,80],"85":[5,2,52],"86":[9,2,98],"87":[1,1,22],"88":[1,1,17],"89":[2,1,81],"90":[3,1,18],"91":[1,1,31],"92":[2,1,26],"93":[3,2,29],"94":[2,2,28],"95":[4,2,46],"96":[2,2,25],"97":[4,2,17],"98":[1,1,28],"99":[2,1,1],"100":[2,2,14],"101":[1,2,12],"102":[2,2,14],"103":[2,2,20],"104":[2,2,16],"105":[1,1,23],"106":[2,1,34],"107":[2,2,22],"108":[2,2,112],"109":[2,2,18],"110":[1,2,31],"111":[1,1,22],"112":[3,1,25],"113":[2,1,41],"114":[2,1,42],"115":[4,1,34],"116":[3,1,19],"117":[2,1,20],"118":[1,1,20],"119":[1,1,32],"120":[2,1,23],"121":[3,1,23],"122":[3,1,26],"123":[3,1,35],"124":[3,1,22],"125":[2,1,24],"126":[1,1,15],"127":[3,1,30],"128":[2,1,38],"129":[4,1,1],"130":[3,5,38],"131":[3,5,25],"132":[3,5,36],"133":[2,1,28],"134":[2,1,24],"135":[3,1,39],"136":[6,3,34],"137":[8,8,32],"138":[4,3,29],"139":[6,3,26],"140":[7,3,52],"141":[4,3,30],"142":[3,3,47],"143":[2,3,21],"144":[1,1,24],"145":[3,1,31],"146":[2,1,36],"147":[3,1,1],"148":[7,4,19],"149":[4,4,15],"150":[5,4,13],"151":[2,1,30],"152":[2,1,37],"153":[2,1,22],"154":[1,1,23],"155":[1,1,20],"156":[3,1,39],"157":[3,1,33],"158":[2,1,32],"159":[4,1,21],"160":[2,1,30],"161":[1,1,33],"162":[4,1,20],"163":[2,1,25],"164":[3,1,37],"165":[3,3,34],"166":[4,3,1],"167":[1,7,26],"168":[1,7,44],"169":[2,3,1],"170":[4,4,11],"171":[7,4,5],"172":[5,10,18],"173":[7,10,43],"174":[3,4,45],"175":[4,4,29],"176":[3,4,27],"177":[6,4,45],"178":[4,4,22],"179":[6,3,41],"180":[2,3,29],"181":[7,4,49],"182":[4,4,52],"183":[4,3,8],"184":[9,7,16],"185":[12,7,29],"186":[11,7,24],"187":[3,3,34],"188":[10,3,60],"189":[8,3,9],"190":[2,11,10],"191":[3,11,8],"192":[2,11,15],"193":[4,11,18],"194":[5,11,11],"195":[4,11,50],"196":[7,3,36],"197":[3,3,56],"198":[1,1,1],"199":[1,1,41],"200":[1,1,22],"201":[3,1,37],"202":[3,1,31],"203":[2,1,17],"204":[2,1,23],"205":[2,1,23],"206":[1,1,36],"207":[3,1,47],"208":[4,1,37],"209":[3,1,25],"210":[2,1,28],"211":[3,1,24],"212":[1,1,12],"213":[1,1,49],"214":[2,1,34],"215":[2,1,34],"216":[1,1,41],"217":[1,1,50],"218":[1,1,45],"219":[2,1,52],"220":[2,1,36],"221":[2,1,37],"222":[2,1,34],"223":[1,1,29],"224":[1,1,37],"225":[2,1,32],"226":[3,1,28],"227":[3,3,51],"228":[3,3,42],"229":[3,3,53],"230":[3,3,49],"231":[3,3,25],"232":[1,1,29],"233":[4,1,27],"234":[2,1,23],"235":[3,1,90],"236":[3,1,25],"237":[1,1,31],"238":[2,1,24],"239":[1,1,28],"240":[1,1,13],"241":[3,1,1],"242":[2,3,26],"243":[3,3,14],"244":[2,1,16],"245":[2,3,18],"246":[3,3,10],"247":[1,3,19],"248":[1,1,1],"249":[5,2,19],"250":[2,2,18],"251":[3,1,56],"252":[4,3,63],"253":[6,3,50],"254":[3,3,1],"255":[5,6,33],"256":[6,6,33],"257":[4,6,26],"258":[2,3,1],"259":[1,5,22],"260":[1,5,19],"261":[2,5,18],"262":[2,3,1],"263":[2,5,21],"264":[2,5,38],"265":[7,3,68],"266":[5,3,46],"267":[2,3,1],"268":[4,5,21],"269":[7,5,38],"270":[3,5,40],"271":[3,3,42],"272":[6,3,35],"273":[3,1,59],"274":[3,3,44],"275":[2,3,1],"276":[2,5,37],"277":[2,5,38],"278":[2,5,23],"279":[2,3,36],"280":[1,3,1],"281":[6,4,29],"282":[5,4,29],"283":[7,4,24],"284":[4,3,46],"285":[1,3,12],"286":[1,1,29],"287":[1,1,40],"288":[2,1,31],"289":[2,1,27],"290":[1,2,27],"291":[2,2,26],"292":[1,1,30],"293":[1,1,37],"294":[2,1,34],"295":[1,1,13],"296":[3,1,9],"297":[1,3,41],"298":[2,3,7],"299":[2,5,21],"300":[2,5,8],"301":[2,5,6],"302":[1,5,6],"303":[2,3,20],"304":[3,3,27],"305":[2,3,21],"306":[2,3,16],"307":[3,3,31],"308":[6,1,52],"309":[3,6,32],"310":[2,6,153],"311":[2,6,1],"312":[6,7,24],"313":[4,7,8],"314":[4,7,3],"315":[3,6,1],"316":[2,8,33],"317":[2,8,29],"318":[2,8,23],"319":[3,6,34],"320":[2,6,54],"321":[1,1,31],"322":[2,1,43],"323":[5,1,49],"324":[2,1,26],"325":[3,1,54],"326":[2,1,27],"327":[4,1,50],"328":[5,1,38],"329":[2,1,32],"330":[2,1,43],"331":[2,1,55],"332":[1,2,10],"333":[3,2,1],"334":[3,5,34],"335":[4,5,19],"336":[3,5,50],"337":[2,2,30],"338":[3,2,1],"339":[6,5,40],"340":[1,5,29],"341":[1,5,26],"342":[1,5,28],"343":[5,2,53],"344":[2,2,43],"345":[1,2,25],"346":[1,1,11],"347":[1,1,47],"348":[2,1,22],"349":[2,1,1],"350":[4,3,20],"351":[5,3,19],"352":[2,1,8],"353":[3,3,30],"354":[2,1,1],"355":[2,3,27],"356":[2,3,13],"357":[1,1,19],"358":[2,1,1],"359":[2,3,36],"360":[2,1,17],"361":[2,1,28],"362":[4,1,20],"363":[1,1,34],"364":[1,1,55],"365":[6,1,48],"366":[2,1,124],"367":[2,1,1],"368":[4,3,86],"369":[7,3,47],"370":[7,3,29],"371":[2,1,1],"372":[7,3,24],"373":[5,3,25],"374":[5,3,21],"375":[11,3,69],"376":[10,3,39],"377":[3,3,29],"378":[4,1,71],"379":[2,1,47],"380":[2,1,1],"381":[7,3,38],"382":[3,3,34],"383":[2,1,58],"384":[1,1,38],"385":[1,1,56],"386":[3,1,48],"387":[1,1,17],"388":[1,2,31],"389":[4,1,1],"390":[3,5,45],"391":[8,5,35],"392":[1,1,46],"393":[4,1,61],"394":[1,1,25],"395":[1,1,57],"396":[1,1,11],"397":[6,1,64],"398":[4,1,1],"399":[2,5,30],"400":[2,5,35],"401":[2,1,1],"402":[6,3,22],"403":[6,3,14],"404":[2,1,48],"405":[3,1,1],"406":[4,4,83],"407":[3,1,1],"408":[3,4,38],"409":[2,1,37],"410":[3,1,49],"411":[1,1,25],"412":[4,1,63],"413":[1,4,23],"414":[1,4,1],"415":[2,4,39],"416":[2,4,45],"417":[2,5,83],"418":[2,5,28],"419":[2,4,48],"420":[2,5,58],"421":[1,4,29],"422":[2,4,23],"423":[2,4,1],"424":[7,5,97],"425":[7,5,105],"426":[2,4,44],"427":[2,4,42],"428":[5,1,48],"429":[1,5,10],"430":[1,5,1],"431":[3,5,43],"432":[2,5,51],"433":[2,5,33],"434":[1,5,1],"435":[1,5,28],"436":[1,5,10],"437":[3,5,9],"438":[2,5,34],"439":[1,5,8],"440":[1,5,11],"441":[1,5,1],"442":[6,5,74],"443":[3,5,83],"444":[5,5,16],"445":[1,5,48],"446":[1,5,15],"447":[1,1,57],"448":[2,1,26],"449":[4,1,68],"450":[6,1,1],"451":[1,7,16],"452":[1,7,35],"453":[1,7,58],"454":[5,1,1],"455":[1,6,12],"456":[1,6,34],"457":[1,6,54],"458":[1,1,40],"459":[4,2,87],"460":[4,1,27],"461":[2,1,50],"462":[2,1,31],"463":[4,1,51],"464":[1,4,21],"465":[1,4,1],"466":[2,4,29],"467":[2,4,25],"468":[2,4,48],"469":[4,5,18],"470":[6,5,19],"471":[6,5,22],"472":[5,5,10],"473":[1,4,1],"474":[5,4,30],"475":[1,4,45],"476":[6,4,76],"477":[4,4,81],"478":[4,4,67],"479":[2,4,30],"480":[1,1,39],"481":[1,1,9],"482":[2,1,1],"483":[4,3,33],"484":[5,3,24],"485":[2,1,1],"486":[7,3,32],"487":[4,3,21],"488":[4,3,40],"489":[2,1,1],"490":[2,3,21],"491":[2,3,52],"492":[4,1,45],"493":[1,1,1],"494":[6,2,36],"495":[7,2,35],"496":[6,2,44],"497":[5,2,34],"498":[2,1,54],"499":[1,1,59],"500":[1,1,1],"501":[1,2,28],"502":[1,2,39],"503":[1,2,33],"504":[1,2,23],"505":[2,2,34],"506":[2,1,1],"507":[1,2,94],"508":[1,1,1],"509":[1,2,23],"510":[1,2,32],"511":[1,2,58],"512":[2,1,111],"513":[5,1,63],"514":[1,1,35],"515":[2,1,40],"516":[2,1,8],"517":[1,2,7],"518":[1,2,32],"519":[2,2,4],"520":[1,2,7],"521":[2,2,28],"522":[3,2,21],"523":[1,2,27],"524":[2,1,11],"525":[1,2,6],"526":[1,2,36],"527":[1,1,12],"528":[1,1,86],"529":[2,1,14],"530":[1,1,36],"531":[1,1,21],"532":[2,1,25],"533":[2,1,25],"534":[2,1,25],"535":[1,1,32],"536":[1,1,3],"537":[3,1,27],"538":[2,1,16],"539":[2,1,32],"540":[2,1,23],"541":[2,1,22],"542":[1,1,22],"543":[2,1,21],"544":[1,2,7],"545":[1,2,26],"546":[1,2,44],"547":[1,2,25],"548":[2,2,24],"549":[5,2,17],"550":[2,2,25],"551":[2,1,24],"552":[2,2,14],"553":[2,2,25],"554":[2,1,1],"555":[2,2,17],"556":[5,2,14],"557":[2,2,12],"558":[2,2,24],"559":[4,2,15],"560":[4,2,12],"561":[2,2,7],"562":[2,1,20],"563":[3,1,14],"564":[2,1,39],"565":[2,1,9],"566":[1,2,8],"567":[1,2,29],"568":[1,2,46],"569":[2,2,22],"570":[1,2,25],"571":[2,2,24],"572":[2,2,23],"573":[2,1,7],"574":[1,2,3],"575":[1,2,23],"576":[1,2,13],"577":[2,2,19],"578":[2,2,21],"579":[2,1,35],"580":[2,2,6],"581":[1,4,16],"582":[2,4,31],"583":[4,1,20],"584":[4,1,36],"585":[5,1,23],"586":[4,1,24],"587":[4,1,26],"588":[2,1,24],"589":[3,1,21],"590":[2,1,6],"591":[1,2,6],"592":[1,2,31],"593":[2,2,7],"594":[2,1,10],"595":[1,2,5],"596":[3,2,11],"597":[1,2,10],"598":[1,1,19],"599":[4,1,16],"600":[4,1,14],"601":[2,1,36],"602":[2,1,6],"603":[1,2,15],"604":[1,2,17],"605":[1,2,1],"606":[1,3,7],"607":[1,3,14],"608":[1,3,9],"609":[1,3,30],"610":[2,2,28],"611":[2,2,10],"612":[1,2,40],"613":[2,1,11],"614":[1,2,10],"615":[1,2,32],"616":[2,2,51],"617":[3,2,27],"618":[4,2,32],"619":[1,2,15],"620":[1,2,30],"621":[2,2,25],"622":[2,1,8],"623":[1,2,4],"624":[1,2,26],"625":[1,2,49],"626":[2,2,14],"627":[3,2,25],"628":[3,2,22],"629":[2,2,19],"630":[2,1,9],"631":[1,2,8],"632":[1,2,36],"633":[1,2,22],"634":[1,2,18],"635":[2,2,30],"636":[3,2,22],"637":[1,2,30],"638":[2,1,9],"639":[1,2,5],"640":[1,2,13],"641":[1,2,34],"642":[2,2,15],"643":[1,2,18],"644":[3,2,41],"645":[4,2,29],"646":[2,2,23],"647":[2,1,8],"648":[1,2,7],"649":[1,2,31],"650":[1,2,12],"651":[2,2,21],"652":[2,2,14],"653":[1,1,32],"654":[3,1,20],"655":[2,1,22],"656":[1,1,12],"657":[1,1,8],"658":[1,1,25],"659":[3,1,25],"660":[1,1,11],"661":[2,1,27],"662":[4,1,34],"663":[2,1,9],"664":[1,2,10],"665":[1,1,1],"666":[3,1,15],"667":[5,1,18],"668":[5,1,24],"669":[1,1,30],"670":[2,1,26],"671":[2,1,18],"672":[3,1,8],"673":[3,1,8],"674":[1,1,20],"675":[6,1,18],"676":[1,1,25],"677":[2,1,9],"678":[2,1,33],"679":[2,1,9],"680":[1,2,5],"681":[1,2,27],"682":[2,2,4],"683":[1,2,12],"684":[2,2,22],"685":[2,2,19],"686":[2,1,6],"687":[1,2,5],"688":[1,2,32],"689":[2,1,24],"690":[2,1,19],"691":[2,1,17],"692":[1,1,24],"693":[1,1,29],"694":[2,1,11],"695":[1,2,9],"696":[1,2,27],"697":[3,2,19],"698":[1,2,38],"699":[2,2,27],"700":[2,2,6],"701":[1,2,37],"702":[2,2,16],"703":[1,1,42],"704":[1,1,10],"705":[1,1,23],"706":[1,2,52],"707":[1,1,27],"708":[1,1,29],"709":[2,1,20],"710":[4,1,47],"711":[4,1,46],"712":[2,1,38],"713":[1,1,34],"714":[1,1,10],"715":[6,1,44],"716":[5,1,40],"717":[2,1,53],"718":[3,1,14],"719":[6,4,9],"720":[5,4,12],"721":[3,1,35],"722":[5,1,27],"723":[5,1,62],"724":[2,1,31],"725":[1,1,33],"726":[1,1,21],"727":[2,1,46],"728":[2,1,20],"729":[2,1,33],"730":[2,1,27],"731":[2,1,45],"732":[2,1,39],"733":[5,1,36],"734":[1,1,40],"735":[2,1,1],"736":[1,2,34],"737":[2,2,6],"738":[2,4,6],"739":[2,4,13],"740":[2,2,16],"741":[2,2,9],"742":[3,4,17],"743":[2,2,31],"744":[2,2,28],"745":[2,2,18],"746":[3,1,40],"747":[2,3,25],"748":[2,3,28],"749":[2,3,31],"750":[2,3,31],"751":[2,3,28],"752":[1,3,19],"753":[2,1,9],"754":[1,2,10],"755":[1,2,49],"756":[2,2,15],"757":[1,4,11],"758":[2,2,28],"759":[2,2,25],"760":[2,2,28],"761":[2,2,1],"762":[2,4,11],"763":[2,4,11],"764":[2,4,20],"765":[3,2,33],"766":[4,2,26],"767":[2,2,25],"768":[2,1,8],"769":[1,2,10],"770":[1,2,34],"771":[1,2,20],"772":[2,2,26],"773":[1,4,10],"774":[1,2,22],"775":[2,2,12],"776":[1,2,45],"777":[3,2,42],"778":[2,2,19],"779":[4,2,35],"780":[2,2,21],"781":[2,1,29],"782":[1,2,8],"783":[3,2,42],"784":[1,2,1],"785":[2,3,25],"786":[2,3,18],"787":[2,2,54],"788":[1,2,1],"789":[3,3,28],"790":[3,3,28],"791":[3,3,27],"792":[2,3,27],"793":[1,2,34],"794":[2,1,35],"795":[2,2,30],"796":[3,2,20],"797":[1,2,12],"798":[5,2,30],"799":[2,2,13],"800":[1,1,20],"801":[3,1,28],"802":[2,1,38],"803":[3,1,24],"804":[2,1,25],"805":[3,1,35],"806":[3,1,31],"807":[3,1,31],"808":[3,1,21],"809":[2,1,22],"810":[1,1,1],"811":[3,1,14],"812":[4,1,24],"813":[4,1,17],"814":[1,1,41],"815":[2,1,28],"816":[3,1,45],"817":[1,1,63],"818":[1,1,28],"819":[2,1,32],"820":[2,1,21],"821":[3,1,39],"822":[3,1,25],"823":[1,1,24],"824":[1,1,27],"825":[1,1,53],"826":[4,1,54],"827":[3,1,27],"828":[2,3,27],"829":[5,1,50],"830":[4,1,26],"831":[7,1,50],"832":[6,1,38],"833":[5,1,36],"834":[2,1,39],"835":[4,1,41],"836":[6,4,90],"837":[7,4,42],"838":[8,4,54],"839":[2,4,43],"840":[3,4,1],"841":[1,6,7],"842":[2,6,28],"843":[6,4,10],"844":[3,9,75],"845":[2,9,42],"846":[5,4,1],"847":[3,8,52],"848":[2,8,47],"849":[5,4,1],"850":[1,8,26],"851":[1,8,17],"852":[7,4,1],"853":[4,10,54],"854":[2,10,33],"855":[2,4,37],"856":[6,4,1],"857":[3,9,27],"858":[1,9,53],"859":[5,4,38],"860":[3,4,1],"861":[1,6,24],"862":[1,6,47],"863":[1,4,1],"864":[1,4,14],"865":[2,4,23],"866":[1,4,1],"867":[5,4,33],"868":[8,4,22],"869":[7,4,20],"870":[1,4,40],"871":[7,1,188],"872":[6,7,42],"873":[4,7,37],"874":[1,1,48],"875":[1,1,10],"876":[2,2,38],"877":[4,2,28],"878":[2,2,21],"879":[3,2,25],"880":[3,1,34],"881":[2,4,34],"882":[1,1,23],"883":[1,2,34],"884":[1,1,28],"885":[2,1,11],"886":[1,3,16],"887":[1,3,40],"888":[5,1,31],"889":[2,1,34],"890":[2,1,40],"891":[1,2,23],"892":[1,2,9],"893":[1,3,33],"894":[2,2,1],"895":[4,4,31],"896":[2,4,17],"897":[3,4,17],"898":[1,2,18],"899":[2,2,37],"900":[5,2,35],"901":[2,2,21],"902":[4,2,44],"903":[1,1,20],"904":[3,1,28],"905":[2,1,38],"906":[3,1,24],"907":[2,1,25],"908":[3,1,35],"909":[3,1,31],"910":[3,1,31],"911":[3,1,21],"912":[3,1,73],"913":[1,3,51],"914":[1,3,51],"915":[4,3,23],"916":[2,3,24],"917":[2,3,15],"918":[1,3,58],"919":[1,3,47],"920":[3,3,17],"921":[1,3,45],"922":[2,3,16],"923":[3,3,29],"924":[2,3,27],"925":[1,3,38],"926":[3,3,61],"927":[2,3,38],"928":[1,3,48],"929":[2,3,34],"930":[2,1,27],"931":[4,2,70],"932":[5,2,72],"933":[4,7,56],"934":[2,2,1],"935":[1,2,75],"936":[1,2,93],"937":[1,2,53],"938":[2,3,41],"939":[3,2,44],"940":[3,5,17],"941":[4,2,11],"942":[1,2,76],"943":[2,2,57],"944":[8,2,1],"945":[5,2,23],"946":[4,2,24],"947":[2,2,25],"948":[2,2,46],"949":[3,1,54],"950":[2,3,67],"951":[2,3,55],"952":[4,3,52],"953":[5,3,45],"954":[2,3,40],"955":[4,3,55],"956":[4,3,39],"957":[4,3,26],"958":[2,3,40],"959":[4,3,23],"960":[1,3,29],"961":[7,1,34],"962":[3,7,41],"963":[2,7,1],"964":[1,8,40],"965":[2,8,42],"966":[3,7,56],"967":[4,7,26],"968":[4,7,74],"969":[3,7,31],"970":[3,7,28],"971":[3,7,33],"972":[3,1,43],"973":[2,3,32],"974":[3,3,32],"975":[3,3,22],"976":[2,3,23],"977":[2,3,28],"978":[2,3,29],"979":[2,3,17],"980":[2,3,24],"981":[2,3,31],"982":[2,3,22],"983":[1,3,28],"984":[3,3,20],"985":[1,3,21],"986":[1,1,14],"987":[2,1,22],"988":[2,1,23],"989":[2,1,23],"990":[2,1,36],"991":[2,1,31],"992":[2,1,48],"993":[2,1,44],"994":[1,1,49],"995":[2,1,1],"996":[2,3,31],"997":[2,3,23],"998":[2,1,37],"999":[3,1,20],"1000":[7,1,27],"1001":[3,7,60],"1002":[2,7,1],"1003":[1,8,24],"1004":[2,8,33],"1005":[2,7,1],"1006":[1,8,48],"1007":[2,8,34],"1008":[3,8,26],"1009":[5,8,24],"1010":[2,8,19],"1011":[3,8,26],"1012":[3,8,31],"1013":[3,8,27],"1014":[3,8,7],"1015":[3,8,15],"1016":[2,7,1],"1017":[3,8,32],"1018":[3,8,21],"1019":[3,8,27],"1020":[4,8,28],"1021":[2,7,1],"1022":[3,8,45],"1023":[2,8,15],"1024":[3,7,1],"1025":[2,9,28],"1026":[2,9,33],"1027":[4,9,31],"1028":[3,9,26],"1029":[3,7,1],"1030":[2,9,14],"1031":[5,9,27],"1032":[3,7,44],"1033":[4,1,66],"1034":[1,4,1],"1035":[2,4,44],"1036":[2,4,37],"1037":[2,4,31],"1038":[2,4,42],"1039":[1,4,47],"1040":[2,4,13],"1041":[2,5,22],"1042":[2,5,28],"1043":[2,5,38],"1044":[2,4,56],"1045":[2,4,35],"1046":[3,4,51],"1047":[2,4,1],"1048":[3,5,35],"1049":[2,5,18],"1050":[2,4,31],"1051":[5,4,45],"1052":[2,4,39],"1053":[3,1,40],"1054":[2,3,18],"1055":[1,3,1],"1056":[4,3,32],"1057":[3,3,23],"1058":[7,3,49],"1059":[4,3,38],"1060":[3,3,22],"1061":[2,3,23],"1062":[3,3,23],"1063":[2,3,27],"1064":[2,3,23],"1065":[2,3,29],"1066":[3,3,26],"1067":[1,3,36],"1068":[2,1,38],"1069":[1,2,5],"1070":[2,2,1],"1071":[3,4,45],"1072":[1,2,1],"1073":[16,3,62],"1074":[2,2,1],"1075":[12,4,39],"1076":[3,4,15],"1077":[3,2,37],"1078":[2,2,50],"1079":[1,1,37],"1080":[1,1,10],"1081":[2,1,30],"1082":[2,1,1],"1083":[2,2,51],"1084":[2,1,38],"1085":[5,1,10],"1086":[1,5,7],"1087":[4,5,18],"1088":[3,5,43],"1089":[3,5,44],"1090":[3,1,11],"1091":[1,3,5],"1092":[2,3,16],"1093":[1,3,21],"1094":[1,3,18],"1095":[2,1,51],"1096":[1,1,71],"1097":[5,1,37],"1098":[3,1,10],"1099":[1,4,35],"1100":[1,4,38],"1101":[3,4,42],"1102":[4,1,46],"1103":[3,1,42],"1104":[5,1,60],"1105":[3,1,1],"1106":[5,4,47],"1107":[7,4,112],"1108":[6,4,66],"1109":[2,1,44],"1110":[2,1,5],"1111":[2,3,15],"1112":[2,3,121],"1113":[3,1,1],"1114":[2,4,19],"1115":[2,4,41],"1116":[3,1,56],"1117":[3,1,41],"1118":[4,1,27],"1119":[1,4,22],"1120":[2,4,25],"1121":[6,4,1],"1122":[7,9,12],"1123":[6,9,39],"1124":[3,4,80],"1125":[1,6,6],"1126":[6,4,25],"1127":[6,4,65],"1128":[6,4,21],"1129":[8,4,49],"1130":[4,4,19],"1131":[2,4,1],"1132":[4,5,19],"1133":[6,5,17],"1134":[6,5,21],"1135":[2,4,18],"1136":[3,1,40],"1137":[1,3,16],"1138":[1,3,1],"1139":[3,4,26],"1140":[3,4,39],"1141":[1,3,1],"1142":[7,4,46],"1143":[2,11,18],"1144":[2,11,27],"1145":[6,4,20],"1146":[4,10,41],"1147":[3,10,53],"1148":[2,3,1],"1149":[8,5,35],"1150":[7,5,26],"1151":[7,5,21],"1152":[4,3,1],"1153":[3,7,18],"1154":[2,7,15],"1155":[3,3,37],"1156":[5,3,33],"1157":[1,3,30],"1158":[3,1,49],"1159":[1,3,10],"1160":[2,3,30],"1161":[3,5,31],"1162":[7,5,21],"1163":[7,5,22],"1164":[6,5,26],"1165":[1,3,18],"1166":[2,3,1],"1167":[10,5,43],"1168":[10,5,26],"1169":[6,3,1],"1170":[3,9,18],"1171":[4,9,13],"1172":[6,9,9],"1173":[6,9,28],"1174":[6,3,1],"1175":[5,9,16],"1176":[7,9,19],"1177":[7,9,21],"1178":[5,3,1],"1179":[5,8,13],"1180":[6,8,56],"1181":[7,3,25],"1182":[6,9,29],"1183":[4,9,19],"1184":[2,3,1],"1185":[4,5,22],"1186":[4,5,21],"1187":[1,3,46],"1188":[3,1,35],"1189":[1,3,10],"1190":[1,3,10],"1191":[5,1,1],"1192":[2,5,30],"1193":[2,7,9],"1194":[3,7,20],"1195":[3,5,19],"1196":[3,5,28],"1197":[6,1,1],"1198":[5,6,21],"1199":[5,6,61],"1200":[2,6,21],"1201":[1,6,14],"1202":[2,1,33],"1203":[2,1,1],"1204":[3,2,17],"1205":[4,2,13],"1206":[5,2,9],"1207":[4,1,33],"1208":[1,1,29],"1209":[1,1,35],"1210":[3,1,22],"1211":[1,3,39],"1212":[2,3,36],"1213":[3,3,31],"1214":[2,3,37],"1215":[3,3,36],"1216":[7,1,31],"1217":[4,7,30],"1218":[2,7,34],"1219":[2,7,41],"1220":[4,1,37],"1221":[2,1,42],"1222":[1,2,10],"1223":[6,2,51],"1224":[2,2,1],"1225":[3,4,6],"1226":[3,4,7],"1227":[5,4,37],"1228":[4,2,7],"1229":[8,6,30],"1230":[6,6,51],"1231":[9,6,30],"1232":[2,2,1],"1233":[8,4,31],"1234":[1,2,1],"1235":[4,3,26],"1236":[3,3,17],"1237":[6,3,15],"1238":[4,3,24],"1239":[4,2,1],"1240":[6,6,24],"1241":[5,6,41],"1242":[2,2,42],"1243":[4,2,47],"1244":[1,2,38],"1245":[3,1,37],"1246":[1,3,10],"1247":[1,1,6],"1248":[2,1,13],"1249":[2,1,16],"1250":[2,1,1],"1251":[5,2,36],"1252":[6,2,45],"1253":[2,1,1],"1254":[7,2,38],"1255":[8,2,30],"1256":[2,1,26],"1257":[5,1,15],"1258":[1,1,1],"1259":[4,1,10],"1260":[4,1,20],"1261":[2,1,22],"1262":[3,1,19],"1263":[2,1,23],"1264":[2,1,25],"1265":[1,1,23],"1266":[4,1,49],"1267":[1,4,10],"1268":[4,4,58],"1269":[2,4,1],"1270":[1,6,42],"1271":[2,6,21],"1272":[1,6,31],"1273":[2,4,25],"1274":[2,4,1],"1275":[1,6,7],"1276":[1,6,5],"1277":[1,6,20],"1278":[2,6,6],"1279":[1,6,9],"1280":[1,6,22],"1281":[1,6,33],"1282":[2,4,1],"1283":[2,6,13],"1284":[6,6,21],"1285":[4,6,20],"1286":[2,4,1],"1287":[1,6,20],"1288":[3,6,39],"1289":[3,4,1],"1290":[2,7,26],"1291":[2,7,27],"1292":[3,7,5],"1293":[2,4,1],"1294":[3,6,21],"1295":[2,6,12],"1296":[3,6,21],"1297":[5,6,8],"1298":[2,6,22],"1299":[4,6,21],"1300":[2,6,26],"1301":[4,6,19],"1302":[3,4,1],"1303":[4,7,12],"1304":[2,7,31],"1305":[4,4,48],"1306":[7,4,38],"1307":[1,4,40],"1308":[1,1,54],"1309":[5,1,86],"1310":[3,1,68],"1311":[2,1,72],"1312":[3,1,60],"1313":[4,1,72],"1314":[8,1,92],"1315":[1,1,31],"1316":[2,1,37],"1317":[1,2,35],"1318":[8,2,82],"1319":[3,2,87],"1320":[3,2,105],"1321":[2,2,77],"1322":[2,2,40],"1323":[2,1,47],"1324":[1,2,25],"1325":[4,1,1],"1326":[3,4,1],"1327":[1,7,47],"1328":[1,4,98],"1329":[2,4,26],"1330":[1,6,10],"1331":[1,6,25],"1332":[3,6,23],"1333":[3,6,28],"1334":[3,6,14],"1335":[1,4,33],"1336":[4,5,22],"1337":[1,4,63],"1338":[3,4,20],"1339":[9,7,67],"1340":[4,1,18],"1341":[1,4,15],"1342":[1,4,1],"1343":[1,5,7],"1344":[1,5,15],"1345":[1,5,9],"1346":[1,5,29],"1347":[2,4,28],"1348":[2,4,23],"1349":[1,4,27],"1350":[1,1,42],"1351":[2,1,35],"1352":[1,2,25],"1353":[1,2,74],"1354":[1,2,46],"1355":[2,1,35],"1356":[1,2,25],"1357":[1,2,74],"1358":[1,2,46],"1359":[2,1,30],"1360":[1,2,12],"1361":[2,2,74],"1362":[1,2,50],"1363":[1,3,69],"1364":[1,3,59],"1365":[1,2,37],"1366":[1,3,48],"1367":[1,3,31],"1368":[3,2,6],"1369":[1,5,30],"1370":[2,5,35],"1371":[2,2,9],"1372":[6,4,30],"1373":[2,4,21],"1374":[3,2,25],"1375":[2,2,36],"1376":[2,1,52],"1377":[10,2,118],"1378":[8,2,144],"1379":[9,2,157],"1380":[4,2,86],"1381":[1,2,37],"1382":[1,1,37],"1383":[1,1,10],"1384":[1,1,33],"1385":[1,1,14],"1386":[1,1,32],"1387":[2,1,27],"1388":[2,1,1],"1389":[1,2,12],"1390":[1,2,13],"1391":[1,2,11],"1392":[1,2,16],"1393":[2,2,18],"1394":[3,2,6],"1395":[3,2,6],"1396":[1,2,11],"1397":[4,2,12],"1398":[1,2,5],"1399":[2,2,12],"1400":[2,1,1],"1401":[3,2,12],"1402":[3,2,12],"1403":[3,2,12],"1404":[2,2,29],"1405":[2,2,17],"1406":[3,1,26],"1407":[3,1,23],"1408":[2,1,25],"1409":[1,1,43],"1410":[1,1,13],"1411":[2,1,40],"1412":[1,1,35],"1413":[1,1,33],"1414":[2,1,36],"1415":[1,3,23],"1416":[1,1,26],"1417":[1,1,28],"1418":[2,1,54],"1419":[1,1,28],"1420":[1,1,28],"1421":[1,1,22],"1422":[2,1,28],"1423":[3,1,35],"1424":[2,1,23],"1425":[1,1,38],"1426":[1,1,10],"1427":[1,1,34],"1428":[1,1,29],"1429":[2,1,1],"1430":[2,2,16],"1431":[3,2,10],"1432":[3,2,13],"1433":[1,2,29],"1434":[2,2,37],"1435":[1,1,1],"1436":[2,1,16],"1437":[3,1,31],"1438":[2,1,24],"1439":[2,1,36],"1440":[3,1,22],"1441":[2,1,25],"1442":[5,1,42],"1443":[1,5,14],"1444":[2,1,36],"1445":[1,1,41],"1446":[1,1,22],"1447":[1,1,36],"1448":[1,1,29],"1449":[1,1,48],"1450":[1,1,36],"1451":[2,1,1],"1452":[4,2,27],"1453":[3,2,17],"1454":[3,1,31],"1455":[2,1,27],"1456":[3,1,33],"1457":[2,1,21],"1458":[1,1,45],"1459":[2,1,7],"1460":[3,2,12],"1461":[3,2,19],"1462":[9,2,15],"1463":[4,1,7],"1464":[3,4,12],"1465":[6,4,23],"1466":[2,1,8],"1467":[3,2,13],"1468":[2,2,17],"1469":[2,1,5],"1470":[2,2,10],"1471":[2,2,11],"1472":[6,1,41],"1473":[2,1,32],"1474":[2,1,54],"1475":[1,2,1],"1476":[5,3,24],"1477":[5,3,31],"1478":[5,3,33],"1479":[5,3,26],"1480":[5,3,26],"1481":[2,2,1],"1482":[4,4,52],"1483":[2,2,45],"1484":[2,2,1],"1485":[2,4,12],"1486":[1,4,14],"1487":[2,4,13],"1488":[6,2,54],"1489":[1,1,31],"1490":[3,1,81],"1491":[2,1,53],"1492":[1,1,20],"1493":[2,1,19],"1494":[6,1,35],"1495":[4,6,64],"1496":[1,6,8],"1497":[2,6,55],"1498":[4,6,42],"1499":[2,6,1],"1500":[1,7,40],"1501":[1,7,22],"1502":[4,7,31],"1503":[1,7,34],"1504":[5,6,40],"1505":[2,6,27],"1506":[5,6,45],"1507":[1,6,48],"1508":[1,1,43],"1509":[1,1,16],"1510":[2,1,24],"1511":[2,1,42],"1512":[2,1,24],"1513":[2,1,25],"1514":[1,1,31],"1515":[2,1,37],"1516":[3,1,12],"1517":[2,4,28],"1518":[2,4,10],"1519":[2,4,30],"1520":[2,1,9],"1521":[4,3,39],"1522":[2,3,47],"1523":[3,1,29],"1524":[2,1,45],"1525":[3,1,41],"1526":[2,1,28],"1527":[2,1,15],"1528":[2,1,30],"1529":[2,2,36],"1530":[2,2,21],"1531":[2,2,10],"1532":[2,2,18],"1533":[5,2,19],"1534":[2,2,21],"1535":[1,2,23],"1536":[5,1,36],"1537":[1,5,11],"1538":[4,5,1],"1539":[6,8,51],"1540":[2,5,1],"1541":[5,6,31],"1542":[4,5,24],"1543":[3,8,26],"1544":[3,5,1],"1545":[5,7,27],"1546":[5,7,31],"1547":[1,7,32],"1548":[2,5,1],"1549":[3,5,30],"1550":[2,5,33],"1551":[3,5,52],"1552":[3,5,34],"1553":[5,5,17],"1554":[1,1,49],"1555":[3,1,1],"1556":[6,4,34],"1557":[5,4,27],"1558":[7,4,28],"1559":[3,1,10],"1560":[4,1,1],"1561":[5,5,50],"1562":[6,5,19],"1563":[4,5,26],"1564":[7,5,26],"1565":[4,1,1],"1566":[4,5,26],"1567":[3,5,35],"1568":[2,1,1],"1569":[5,3,25],"1570":[8,3,23],"1571":[2,1,17],"1572":[6,1,29],"1573":[6,6,34],"1574":[2,6,26],"1575":[2,6,28],"1576":[5,6,21],"1577":[5,6,27],"1578":[2,6,15],"1579":[1,6,19],"1580":[4,1,40],"1581":[3,4,25],"1582":[1,4,1],"1583":[1,4,13],"1584":[1,4,25],"1585":[1,4,24],"1586":[2,4,57],"1587":[2,4,65],"1588":[2,4,1],"1589":[4,5,41],"1590":[5,5,24],"1591":[3,5,53],"1592":[4,5,25],"1593":[5,4,78],"1594":[2,4,1],"1595":[3,5,21],"1596":[4,5,23],"1597":[2,5,38],"1598":[1,4,33],"1599":[1,1,46],"1600":[5,1,40],"1601":[2,5,16],"1602":[8,1,45],"1603":[5,1,56],"1604":[3,1,41],"1605":[5,1,33],"1606":[6,1,53],"1607":[6,1,13],"1608":[3,1,17],"1609":[2,1,30],"1610":[2,1,37],"1611":[2,1,50],"1612":[5,2,87],"1613":[7,2,103],"1614":[4,2,88],"1615":[3,2,94],"1616":[7,2,38],"1617":[2,1,45],"1618":[5,2,45],"1619":[2,2,29],"1620":[5,2,58],"1621":[6,2,82],"1622":[7,2,62],"1623":[1,2,28],"1624":[2,2,43],"1625":[5,2,33],"1626":[1,1,72],"1627":[12,1,130],"1628":[4,1,80],"1629":[3,1,22],"1630":[1,1,32],"1631":[2,1,1],"1632":[2,1,17],"1633":[3,2,11],"1634":[4,2,54],"1635":[4,2,32],"1636":[3,2,10],"1637":[3,2,36],"1638":[2,1,42],"1639":[3,2,40],"1640":[2,2,18],"1641":[2,2,18],"1642":[4,2,1],"1643":[2,6,11],"1644":[2,6,24],"1645":[2,6,25],"1646":[2,6,14],"1647":[1,2,18],"1648":[1,1,13],"1649":[2,1,23],"1650":[2,1,19],"1651":[2,1,21],"1652":[2,1,18],"1653":[2,1,14],"1654":[1,1,4],"1655":[1,1,19],"1656":[3,1,28],"1657":[4,1,28],"1658":[1,1,17],"1659":[3,1,10],"1660":[1,1,10],"1661":[2,1,15],"1662":[2,1,16],"1663":[2,1,15],"1664":[4,1,15],"1665":[1,1,7],"1666":[1,1,18],"1667":[3,1,1],"1668":[5,3,18],"1669":[5,3,21],"1670":[5,3,16],"1671":[6,3,14],"1672":[2,1,18],"1673":[4,1,14],"1674":[1,1,4]},"averageFieldLength":[2.688358208955223,2.774925373134336,28.025671641791035],"storedFields":{"0":{"title":"API Reference","titles":[]},"1":{"title":"Structure","titles":["API Reference"]},"2":{"title":"Philosophy","titles":["API Reference"]},"3":{"title":"Config API","titles":[]},"4":{"title":"Constructor","titles":[]},"5":{"title":"Getters","titles":[]},"6":{"title":"get_string","titles":["Getters"]},"7":{"title":"get_int","titles":["Getters"]},"8":{"title":"get_bool","titles":["Getters"]},"9":{"title":"get_double","titles":["Getters"]},"10":{"title":"Dot Path Access","titles":[]},"11":{"title":"Minimal Usage Example","titles":[]},"12":{"title":"Environment Override Pattern","titles":[]},"13":{"title":"Design Notes","titles":[]},"14":{"title":"HTTP API","titles":[]},"15":{"title":"App","titles":[]},"16":{"title":"Constructor","titles":["App"]},"17":{"title":"Run","titles":["App"]},"18":{"title":"Routing Methods","titles":[]},"19":{"title":"GET","titles":["Routing Methods"]},"20":{"title":"POST","titles":["Routing Methods"]},"21":{"title":"PUT","titles":["Routing Methods"]},"22":{"title":"DELETE","titles":["Routing Methods"]},"23":{"title":"Minimal Example","titles":["Routing Methods"]},"24":{"title":"Request","titles":[]},"25":{"title":"Path parameter","titles":["Request"]},"26":{"title":"Query parameter","titles":["Request"]},"27":{"title":"Headers","titles":["Request"]},"28":{"title":"Body","titles":["Request"]},"29":{"title":"JSON","titles":["Request"]},"30":{"title":"Response","titles":[]},"31":{"title":"Status","titles":["Response"]},"32":{"title":"Send text","titles":["Response"]},"33":{"title":"Send JSON","titles":["Response"]},"34":{"title":"Auto-send return","titles":["Response"]},"35":{"title":"Behavior Notes","titles":[]},"36":{"title":"Design Philosophy","titles":[]},"37":{"title":"API Reference","titles":[]},"38":{"title":"Structure","titles":["API Reference"]},"39":{"title":"Philosophy","titles":["API Reference"]},"40":{"title":"JSON API","titles":[]},"41":{"title":"1) Simple JSON","titles":[]},"42":{"title":"token","titles":["1) Simple JSON"]},"43":{"title":"array_t","titles":["1) Simple JSON"]},"44":{"title":"kvs","titles":["1) Simple JSON"]},"45":{"title":"2) High-Level JSON","titles":[]},"46":{"title":"Object Builder","titles":["2) High-Level JSON"]},"47":{"title":"Array Builder","titles":["2) High-Level JSON"]},"48":{"title":"kv initializer","titles":["2) High-Level JSON"]},"49":{"title":"dumps","titles":["2) High-Level JSON"]},"50":{"title":"loads","titles":["2) High-Level JSON"]},"51":{"title":"File IO","titles":["2) High-Level JSON"]},"52":{"title":"jset / jget (Path Access)","titles":["2) High-Level JSON"]},"53":{"title":"Design Notes","titles":[]},"54":{"title":"Middleware API","titles":[]},"55":{"title":"Headers","titles":[]},"56":{"title":"1) Context Middleware (Recommended)","titles":[]},"57":{"title":"Minimal Example","titles":["1) Context Middleware (Recommended)"]},"58":{"title":"Registering Middleware","titles":[]},"59":{"title":"Global","titles":["Registering Middleware"]},"60":{"title":"Prefix","titles":["Registering Middleware"]},"61":{"title":"Exact Path","titles":["Registering Middleware"]},"62":{"title":"Chaining Middleware","titles":[]},"63":{"title":"Request State Storage","titles":[]},"64":{"title":"2) Legacy HTTP Middleware","titles":[]},"65":{"title":"Adapters","titles":[]},"66":{"title":"Behavior Notes","titles":[]},"67":{"title":"WebSocket API","titles":[]},"68":{"title":"Server","titles":[]},"69":{"title":"Constructor","titles":["Server"]},"70":{"title":"Minimal Standalone Example","titles":[]},"71":{"title":"Event Hooks","titles":[]},"72":{"title":"on_open","titles":["Event Hooks"]},"73":{"title":"on_close","titles":["Event Hooks"]},"74":{"title":"on_typed_message","titles":["Event Hooks"]},"75":{"title":"Typed Message Protocol","titles":[]},"76":{"title":"Broadcast","titles":[]},"77":{"title":"Broadcast to all","titles":["Broadcast"]},"78":{"title":"Broadcast to room","titles":["Broadcast"]},"79":{"title":"Long Polling Bridge","titles":[]},"80":{"title":"HTTP + WS Combined","titles":[]},"81":{"title":"Notes","titles":[]},"82":{"title":"async-worker","titles":[]},"83":{"title":"Run","titles":["async-worker"]},"84":{"title":"Example: timer + cpu_pool + stop","titles":["async-worker"]},"85":{"title":"Example: signals (SIGINT/SIGTERM)","titles":["async-worker"]},"86":{"title":"Example: tcp echo server (async accept/read/write)","titles":["async-worker"]},"87":{"title":"Auth","titles":[]},"88":{"title":"Goal","titles":["Auth"]},"89":{"title":"Full Example","titles":["Auth"]},"90":{"title":"Test with curl","titles":["Auth"]},"91":{"title":"Notes","titles":["Auth"]},"92":{"title":"Hello HTTP","titles":[]},"93":{"title":"Minimal Hello World","titles":["Hello HTTP"]},"94":{"title":"Returning JSON","titles":["Hello HTTP"]},"95":{"title":"Auto-send Return Style","titles":["Hello HTTP"]},"96":{"title":"Status Codes","titles":["Hello HTTP"]},"97":{"title":"What this example teaches","titles":["Hello HTTP"]},"98":{"title":"Examples","titles":[]},"99":{"title":"Available Examples","titles":["Examples"]},"100":{"title":"hello-http","titles":["Examples","Available Examples"]},"101":{"title":"auth","titles":["Examples","Available Examples"]},"102":{"title":"ws-chat","titles":["Examples","Available Examples"]},"103":{"title":"async-worker","titles":["Examples","Available Examples"]},"104":{"title":"p2p-ping","titles":["Examples","Available Examples"]},"105":{"title":"Philosophy","titles":["Examples"]},"106":{"title":"WS Chat","titles":[]},"107":{"title":"Chat protocol","titles":["WS Chat"]},"108":{"title":"Full example","titles":["WS Chat"]},"109":{"title":"Test quickly","titles":["WS Chat"]},"110":{"title":"Notes","titles":["WS Chat"]},"111":{"title":"Errors","titles":[]},"112":{"title":"Basic error response","titles":["Errors"]},"113":{"title":"404 example","titles":["Errors"]},"114":{"title":"Validation error","titles":["Errors"]},"115":{"title":"Internal server error pattern","titles":["Errors"]},"116":{"title":"Error structure consistency","titles":["Errors"]},"117":{"title":"Important rules","titles":["Errors"]},"118":{"title":"Philosophy","titles":["Errors"]},"119":{"title":"Fundamentals","titles":[]},"120":{"title":"The Runtime","titles":["Fundamentals"]},"121":{"title":"The Execution Model","titles":["Fundamentals"]},"122":{"title":"The Request Object","titles":["Fundamentals"]},"123":{"title":"The Response Object","titles":["Fundamentals"]},"124":{"title":"Minimal complete example","titles":["Fundamentals"]},"125":{"title":"Design Principles","titles":["Fundamentals"]},"126":{"title":"Lifecycle","titles":[]},"127":{"title":"High-level flow","titles":["Lifecycle"]},"128":{"title":"Minimal example","titles":["Lifecycle"]},"129":{"title":"Step-by-step breakdown","titles":["Lifecycle"]},"130":{"title":"1. Route matching","titles":["Lifecycle","Step-by-step breakdown"]},"131":{"title":"2. Handler execution","titles":["Lifecycle","Step-by-step breakdown"]},"132":{"title":"3. Response finalization","titles":["Lifecycle","Step-by-step breakdown"]},"133":{"title":"Important rules","titles":["Lifecycle"]},"134":{"title":"Lifecycle philosophy","titles":["Lifecycle"]},"135":{"title":"Logging (Core)","titles":[]},"136":{"title":"1. Development logging (vix::console)","titles":["Logging (Core)"]},"137":{"title":"Why use console instead of std::cout?","titles":["Logging (Core)","1. Development logging (vix::console)"]},"138":{"title":"2. Logging request data","titles":["Logging (Core)"]},"139":{"title":"3. Logging errors (dev mode)","titles":["Logging (Core)"]},"140":{"title":"4. Production logging (vix::utils::Logger)","titles":["Logging (Core)"]},"141":{"title":"5. Structured logging pattern","titles":["Logging (Core)"]},"142":{"title":"6. Performance considerations","titles":["Logging (Core)"]},"143":{"title":"7. Philosophy","titles":["Logging (Core)"]},"144":{"title":"Performance","titles":[]},"145":{"title":"Minimal overhead model","titles":["Performance"]},"146":{"title":"Minimal example","titles":["Performance"]},"147":{"title":"Avoiding performance pitfalls","titles":["Performance"]},"148":{"title":"1. Avoid heavy allocations in hot paths","titles":["Performance","Avoiding performance pitfalls"]},"149":{"title":"2. Keep handlers small","titles":["Performance","Avoiding performance pitfalls"]},"150":{"title":"3. Avoid unnecessary JSON depth","titles":["Performance","Avoiding performance pitfalls"]},"151":{"title":"Hardware considerations","titles":["Performance"]},"152":{"title":"Throughput mindset","titles":["Performance"]},"153":{"title":"Benchmarking rule","titles":["Performance"]},"154":{"title":"Philosophy","titles":["Performance"]},"155":{"title":"Security","titles":[]},"156":{"title":"Basic header check","titles":["Security"]},"157":{"title":"Token validation pattern","titles":["Security"]},"158":{"title":"Input validation","titles":["Security"]},"159":{"title":"Avoid leaking internal details","titles":["Security"]},"160":{"title":"Security headers","titles":["Security"]},"161":{"title":"HTTPS","titles":["Security"]},"162":{"title":"Rate limiting and protection","titles":["Security"]},"163":{"title":"Security mindset","titles":["Security"]},"164":{"title":"Routes and Middleware","titles":[]},"165":{"title":"1) Quick start","titles":["Routes and Middleware"]},"166":{"title":"2) Core mental model","titles":["Routes and Middleware"]},"167":{"title":"Routes","titles":["Routes and Middleware","2) Core mental model"]},"168":{"title":"Middleware","titles":["Routes and Middleware","2) Core mental model"]},"169":{"title":"3) Routes","titles":["Routes and Middleware"]},"170":{"title":"3.1 Minimal route","titles":["Routes and Middleware","3) Routes"]},"171":{"title":"3.2 Return values vs using res","titles":["Routes and Middleware","3) Routes"]},"172":{"title":"Style A: explicit res.*","titles":["Routes and Middleware","3) Routes","3.2 Return values vs using res"]},"173":{"title":"Style B: return payload (auto-send)","titles":["Routes and Middleware","3) Routes","3.2 Return values vs using res"]},"174":{"title":"3.3 Path parameters","titles":["Routes and Middleware","3) Routes"]},"175":{"title":"3.4 Query parameters","titles":["Routes and Middleware","3) Routes"]},"176":{"title":"3.5 Headers","titles":["Routes and Middleware","3) Routes"]},"177":{"title":"3.6 Request body and JSON","titles":["Routes and Middleware","3) Routes"]},"178":{"title":"3.7 Status codes","titles":["Routes and Middleware","3) Routes"]},"179":{"title":"4) Organizing routes (recommended pattern)","titles":["Routes and Middleware"]},"180":{"title":"5) Middleware","titles":["Routes and Middleware"]},"181":{"title":"5.1 Context-based middleware (recommended)","titles":["Routes and Middleware","5) Middleware"]},"182":{"title":"5.2 Legacy HttpMiddleware","titles":["Routes and Middleware","5) Middleware"]},"183":{"title":"6) Where middleware runs","titles":["Routes and Middleware"]},"184":{"title":"6.1 Global middleware (runs for all routes)","titles":["Routes and Middleware","6) Where middleware runs"]},"185":{"title":"6.2 Prefix middleware (runs only for routes under a prefix)","titles":["Routes and Middleware","6) Where middleware runs"]},"186":{"title":"6.3 Exact middleware (runs only for a single route)","titles":["Routes and Middleware","6) Where middleware runs"]},"187":{"title":"7) Chaining middleware","titles":["Routes and Middleware"]},"188":{"title":"8) Using RequestState (share data across middleware and handlers)","titles":["Routes and Middleware"]},"189":{"title":"9) Common presets (what you typically want)","titles":["Routes and Middleware"]},"190":{"title":"Security headers","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"191":{"title":"CORS (dev)","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"192":{"title":"Rate limit","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"193":{"title":"JSON/Form/Multipart parsing","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"194":{"title":"API key auth (dev)","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"195":{"title":"HTTP GET cache middleware","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"196":{"title":"10) A practical layout for real projects","titles":["Routes and Middleware"]},"197":{"title":"11) Troubleshooting tips","titles":["Routes and Middleware"]},"198":{"title":"inference","titles":[]},"199":{"title":"Inference","titles":[]},"200":{"title":"Philosophy","titles":["Inference"]},"201":{"title":"Minimal inference endpoint","titles":["Inference"]},"202":{"title":"JSON-based inference","titles":["Inference"]},"203":{"title":"Architecture pattern","titles":["Inference"]},"204":{"title":"Performance mindset","titles":["Inference"]},"205":{"title":"Next steps","titles":["Inference"]},"206":{"title":"Providers","titles":[]},"207":{"title":"Minimal provider concept","titles":["Providers"]},"208":{"title":"Provider with JSON input","titles":["Providers"]},"209":{"title":"Provider selection strategy","titles":["Providers"]},"210":{"title":"Production notes","titles":["Providers"]},"211":{"title":"Common integration style","titles":["Providers"]},"212":{"title":"Philosophy","titles":["Providers"]},"213":{"title":"Reliability","titles":[]},"214":{"title":"Reliability goals","titles":["Reliability"]},"215":{"title":"Request lifecycle","titles":["Reliability"]},"216":{"title":"Timeouts","titles":["Reliability"]},"217":{"title":"Retries","titles":["Reliability"]},"218":{"title":"Idempotency","titles":["Reliability"]},"219":{"title":"Streaming reliability","titles":["Reliability"]},"220":{"title":"Circuit breaker","titles":["Reliability"]},"221":{"title":"Fallback providers","titles":["Reliability"]},"222":{"title":"Error format","titles":["Reliability"]},"223":{"title":"Limits","titles":["Reliability"]},"224":{"title":"Observability","titles":["Reliability"]},"225":{"title":"Practical checklist","titles":["Reliability"]},"226":{"title":"Routing for inference","titles":[]},"227":{"title":"Query-based inference","titles":["Routing for inference"]},"228":{"title":"JSON-based inference","titles":["Routing for inference"]},"229":{"title":"Batch inference pattern","titles":["Routing for inference"]},"230":{"title":"Input size guard","titles":["Routing for inference"]},"231":{"title":"Rule of thumb","titles":["Routing for inference"]},"232":{"title":"Streaming","titles":[]},"233":{"title":"When to use streaming","titles":["Streaming"]},"234":{"title":"Core idea","titles":["Streaming"]},"235":{"title":"Minimal HTTP example","titles":["Streaming"]},"236":{"title":"Recommended chunk format","titles":["Streaming"]},"237":{"title":"Backpressure","titles":["Streaming"]},"238":{"title":"Error handling","titles":["Streaming"]},"239":{"title":"Notes","titles":["Streaming"]},"240":{"title":"Install","titles":[]},"241":{"title":"Install Vix CLI","titles":["Install"]},"242":{"title":"Linux / macOS","titles":["Install","Install Vix CLI"]},"243":{"title":"Windows (PowerShell)","titles":["Install","Install Vix CLI"]},"244":{"title":"Build prerequisites","titles":["Install"]},"245":{"title":"Ubuntu example","titles":["Install","Build prerequisites"]},"246":{"title":"macOS (Homebrew)","titles":["Install","Build prerequisites"]},"247":{"title":"Windows","titles":["Install","Build prerequisites"]},"248":{"title":"Troubleshooting","titles":["Install"]},"249":{"title":""vix not found"","titles":["Install","Troubleshooting"]},"250":{"title":"Download failures","titles":["Install","Troubleshooting"]},"251":{"title":"asio_net_service","titles":[]},"252":{"title":"What problem it solves","titles":["asio_net_service"]},"253":{"title":"Where it sits in the architecture","titles":["asio_net_service"]},"254":{"title":"Key design points","titles":["asio_net_service"]},"255":{"title":"1) Dedicated thread for networking","titles":["asio_net_service","Key design points"]},"256":{"title":"2) Work guard keeps Asio alive","titles":["asio_net_service","Key design points"]},"257":{"title":"3) stop() is explicit","titles":["asio_net_service","Key design points"]},"258":{"title":"Public surface","titles":["asio_net_service"]},"259":{"title":"Constructor","titles":["asio_net_service","Public surface"]},"260":{"title":"Accessor","titles":["asio_net_service","Public surface"]},"261":{"title":"stop()","titles":["asio_net_service","Public surface"]},"262":{"title":"Typical lifecycle","titles":["asio_net_service"]},"263":{"title":"Lazy creation","titles":["asio_net_service","Typical lifecycle"]},"264":{"title":"Shutdown behavior","titles":["asio_net_service","Typical lifecycle"]},"265":{"title":"How networking primitives should integrate with it","titles":["asio_net_service"]},"266":{"title":"Threading model and safety notes","titles":["asio_net_service"]},"267":{"title":"Common pitfalls","titles":["asio_net_service"]},"268":{"title":"1) Forgetting the guard","titles":["asio_net_service","Common pitfalls"]},"269":{"title":"2) Resuming coroutines on the wrong thread","titles":["asio_net_service","Common pitfalls"]},"270":{"title":"3) stop order","titles":["asio_net_service","Common pitfalls"]},"271":{"title":"Suggested testing checklist","titles":["asio_net_service"]},"272":{"title":"Next docs that depend on this","titles":["asio_net_service"]},"273":{"title":"async/core cancel","titles":[]},"274":{"title":"Why this exists","titles":["async/core cancel"]},"275":{"title":"Key types","titles":["async/core cancel"]},"276":{"title":"cancel_state","titles":["async/core cancel","Key types"]},"277":{"title":"cancel_token","titles":["async/core cancel","Key types"]},"278":{"title":"cancel_source","titles":["async/core cancel","Key types"]},"279":{"title":"Error model","titles":["async/core cancel"]},"280":{"title":"Usage","titles":["async/core cancel"]},"281":{"title":"1) Basic pattern (cooperative loop)","titles":["async/core cancel","Usage"]},"282":{"title":"2) Cancel from another thread","titles":["async/core cancel","Usage"]},"283":{"title":"3) Return cancellation as an error code","titles":["async/core cancel","Usage"]},"284":{"title":"Notes and best practices","titles":["async/core cancel"]},"285":{"title":"Related","titles":["async/core cancel"]},"286":{"title":"dns","titles":[]},"287":{"title":"Overview","titles":["dns"]},"288":{"title":"resolved_address","titles":["dns"]},"289":{"title":"dns_resolver","titles":["dns"]},"290":{"title":"Contract","titles":["dns","dns_resolver"]},"291":{"title":"Error Model","titles":["dns","dns_resolver"]},"292":{"title":"Factory","titles":["dns"]},"293":{"title":"Example","titles":["dns"]},"294":{"title":"Design Notes","titles":["dns"]},"295":{"title":"Related","titles":["dns"]},"296":{"title":"async/core/error","titles":[]},"297":{"title":"Overview","titles":["async/core/error"]},"298":{"title":"Error Enumeration","titles":["async/core/error"]},"299":{"title":"Generic errors","titles":["async/core/error","Error Enumeration"]},"300":{"title":"Runtime / Scheduler","titles":["async/core/error","Error Enumeration"]},"301":{"title":"Thread Pool","titles":["async/core/error","Error Enumeration"]},"302":{"title":"Platform","titles":["async/core/error","Error Enumeration"]},"303":{"title":"Error Category","titles":["async/core/error"]},"304":{"title":"Creating Error Codes","titles":["async/core/error"]},"305":{"title":"Cancellation Integration","titles":["async/core/error"]},"306":{"title":"Design Goals","titles":["async/core/error"]},"307":{"title":"Typical Usage Pattern","titles":["async/core/error"]},"308":{"title":"Minimal HTTP Server (Vix async)","titles":[]},"309":{"title":"What you get","titles":["Minimal HTTP Server (Vix async)"]},"310":{"title":"Full code","titles":["Minimal HTTP Server (Vix async)"]},"311":{"title":"Run it","titles":["Minimal HTTP Server (Vix async)"]},"312":{"title":"1) Compile and run with Vix","titles":["Minimal HTTP Server (Vix async)","Run it"]},"313":{"title":"2) Test with curl","titles":["Minimal HTTP Server (Vix async)","Run it"]},"314":{"title":"3) Test with HTTPie","titles":["Minimal HTTP Server (Vix async)","Run it"]},"315":{"title":"How it works","titles":["Minimal HTTP Server (Vix async)"]},"316":{"title":"io_context","titles":["Minimal HTTP Server (Vix async)","How it works"]},"317":{"title":"server() coroutine","titles":["Minimal HTTP Server (Vix async)","How it works"]},"318":{"title":"client() coroutine","titles":["Minimal HTTP Server (Vix async)","How it works"]},"319":{"title":"Notes and limitations","titles":["Minimal HTTP Server (Vix async)"]},"320":{"title":"Next steps","titles":["Minimal HTTP Server (Vix async)"]},"321":{"title":"Async","titles":[]},"322":{"title":"Core Concepts","titles":[]},"323":{"title":"1. Event loop and task","titles":[]},"324":{"title":"2. Timers","titles":[]},"325":{"title":"3. CPU pool","titles":[]},"326":{"title":"4. Signals","titles":[]},"327":{"title":"5. TCP server pattern","titles":[]},"328":{"title":"6. when_all and when_any","titles":[]},"329":{"title":"Execution Model","titles":[]},"330":{"title":"Recommended Usage","titles":[]},"331":{"title":"io_context","titles":[]},"332":{"title":"Header","titles":["io_context"]},"333":{"title":"What it provides","titles":["io_context"]},"334":{"title":"1) Scheduler ownership","titles":["io_context","What it provides"]},"335":{"title":"2) Event loop control","titles":["io_context","What it provides"]},"336":{"title":"3) Lazy services","titles":["io_context","What it provides"]},"337":{"title":"Minimal example","titles":["io_context"]},"338":{"title":"Using lazy services","titles":["io_context"]},"339":{"title":"CPU pool (compute-bound work)","titles":["io_context","Using lazy services"]},"340":{"title":"Timers","titles":["io_context","Using lazy services"]},"341":{"title":"Signals","titles":["io_context","Using lazy services"]},"342":{"title":"Networking","titles":["io_context","Using lazy services"]},"343":{"title":"Lifecycle rules and best practices","titles":["io_context"]},"344":{"title":"Common pitfalls","titles":["io_context"]},"345":{"title":"Related","titles":["io_context"]},"346":{"title":"scheduler","titles":[]},"347":{"title":"Overview","titles":["scheduler"]},"348":{"title":"Basic Usage","titles":["scheduler"]},"349":{"title":"Posting Work","titles":["scheduler"]},"350":{"title":"1. Posting a Callable","titles":["scheduler","Posting Work"]},"351":{"title":"2. Posting a Coroutine Handle","titles":["scheduler","Posting Work"]},"352":{"title":"Awaitable Scheduling","titles":["scheduler"]},"353":{"title":"What it does","titles":["scheduler","Awaitable Scheduling"]},"354":{"title":"Event Loop","titles":["scheduler"]},"355":{"title":"run()","titles":["scheduler","Event Loop"]},"356":{"title":"stop()","titles":["scheduler","Event Loop"]},"357":{"title":"Introspection","titles":["scheduler"]},"358":{"title":"Internal Design","titles":["scheduler"]},"359":{"title":"Job Queue","titles":["scheduler","Internal Design"]},"360":{"title":"Thread Safety","titles":["scheduler"]},"361":{"title":"Design Principles","titles":["scheduler"]},"362":{"title":"Typical Role in Vix","titles":["scheduler"]},"363":{"title":"Summary","titles":["scheduler"]},"364":{"title":"signal","titles":[]},"365":{"title":"What problem does this solve?","titles":["signal"]},"366":{"title":"Design model","titles":["signal"]},"367":{"title":"Typical usage","titles":["signal"]},"368":{"title":"1) Basic Ctrl+C handling","titles":["signal","Typical usage"]},"369":{"title":"2) Using a callback instead of awaiting","titles":["signal","Typical usage"]},"370":{"title":"3) Supporting both callback and coroutine wait","titles":["signal","Typical usage"]},"371":{"title":"API reference","titles":["signal"]},"372":{"title":"signal_set(io_context& ctx)","titles":["signal","API reference"]},"373":{"title":"void add(int sig)","titles":["signal","API reference"]},"374":{"title":"void remove(int sig)","titles":["signal","API reference"]},"375":{"title":"task<int> async_wait(cancel_token ct = {})","titles":["signal","API reference"]},"376":{"title":"void on_signal(std::function<void(int)> fn)","titles":["signal","API reference"]},"377":{"title":"void stop() noexcept","titles":["signal","API reference"]},"378":{"title":"Threading and safety notes","titles":["signal"]},"379":{"title":"Cancellation behavior","titles":["signal"]},"380":{"title":"Common patterns","titles":["signal"]},"381":{"title":"Graceful shutdown: signal cancels, main loop exits","titles":["signal","Common patterns"]},"382":{"title":"Coalesce repeated signals","titles":["signal","Common patterns"]},"383":{"title":"Practical limitations","titles":["signal"]},"384":{"title":"Summary","titles":["signal"]},"385":{"title":"spawn","titles":[]},"386":{"title":"What it provides","titles":["spawn"]},"387":{"title":"API","titles":["spawn"]},"388":{"title":"Behavior","titles":["spawn","API"]},"389":{"title":"How it works internally","titles":["spawn"]},"390":{"title":"detail::detached_task","titles":["spawn","How it works internally"]},"391":{"title":"detail::make_detached(task<void>)","titles":["spawn","How it works internally"]},"392":{"title":"Example","titles":["spawn"]},"393":{"title":"Notes and best practices","titles":["spawn"]},"394":{"title":"Related","titles":["spawn"]},"395":{"title":"task","titles":[]},"396":{"title":"Header","titles":["task"]},"397":{"title":"What task<T> is","titles":["task"]},"398":{"title":"Lifecycle and suspension model","titles":["task"]},"399":{"title":"Lazy start","titles":["task","Lifecycle and suspension model"]},"400":{"title":"Continuation wiring","titles":["task","Lifecycle and suspension model"]},"401":{"title":"Basic usage","titles":["task"]},"402":{"title":"Await a task that returns a value","titles":["task","Basic usage"]},"403":{"title":"Await a task that returns void","titles":["task","Basic usage"]},"404":{"title":"Error propagation","titles":["task"]},"405":{"title":"Detaching and scheduling","titles":["task"]},"406":{"title":"start(scheduler&)","titles":["task","Detaching and scheduling"]},"407":{"title":"Awaiting from coroutines","titles":["task"]},"408":{"title":"operator co_await","titles":["task","Awaiting from coroutines"]},"409":{"title":"Ownership rules","titles":["task"]},"410":{"title":"Notes and constraints","titles":["task"]},"411":{"title":"Related","titles":["task"]},"412":{"title":"TCP (async/net)","titles":[]},"413":{"title":"Files","titles":["TCP (async/net)"]},"414":{"title":"Types","titles":["TCP (async/net)"]},"415":{"title":"tcp_endpoint","titles":["TCP (async/net)","Types"]},"416":{"title":"tcp_stream","titles":["TCP (async/net)"]},"417":{"title":"Behavior rules","titles":["TCP (async/net)","tcp_stream"]},"418":{"title":"Buffer types","titles":["TCP (async/net)","tcp_stream"]},"419":{"title":"tcp_listener","titles":["TCP (async/net)"]},"420":{"title":"Behavior rules","titles":["TCP (async/net)","tcp_listener"]},"421":{"title":"Factories","titles":["TCP (async/net)"]},"422":{"title":"Why factories","titles":["TCP (async/net)","Factories"]},"423":{"title":"Usage examples","titles":["TCP (async/net)"]},"424":{"title":"1) Connect + write + read (client)","titles":["TCP (async/net)","Usage examples"]},"425":{"title":"2) Listen + accept loop (server)","titles":["TCP (async/net)","Usage examples"]},"426":{"title":"Cancellation pattern","titles":["TCP (async/net)"]},"427":{"title":"Design notes","titles":["TCP (async/net)"]},"428":{"title":"thread_pool (async/core)","titles":[]},"429":{"title":"Header","titles":["thread_pool (async/core)"]},"430":{"title":"Concepts","titles":["thread_pool (async/core)"]},"431":{"title":"Two submission styles","titles":["thread_pool (async/core)","Concepts"]},"432":{"title":"Cancellation model","titles":["thread_pool (async/core)","Concepts"]},"433":{"title":"Exception model","titles":["thread_pool (async/core)","Concepts"]},"434":{"title":"API","titles":["thread_pool (async/core)"]},"435":{"title":"Construction","titles":["thread_pool (async/core)","API"]},"436":{"title":"Destruction","titles":["thread_pool (async/core)","API"]},"437":{"title":"Fire-and-forget","titles":["thread_pool (async/core)","API"]},"438":{"title":"Awaitable submission","titles":["thread_pool (async/core)","API"]},"439":{"title":"Stop","titles":["thread_pool (async/core)","API"]},"440":{"title":"Size","titles":["thread_pool (async/core)","API"]},"441":{"title":"Usage","titles":["thread_pool (async/core)"]},"442":{"title":"Example 1: Await a compute result","titles":["thread_pool (async/core)","Usage"]},"443":{"title":"Example 2: Cancellation","titles":["thread_pool (async/core)","Usage"]},"444":{"title":"Example 3: Fire-and-forget","titles":["thread_pool (async/core)","Usage"]},"445":{"title":"Notes","titles":["thread_pool (async/core)"]},"446":{"title":"Related","titles":["thread_pool (async/core)"]},"447":{"title":"Timer","titles":[]},"448":{"title":"Key types","titles":["Timer"]},"449":{"title":"Lifecycle and threading model","titles":["Timer"]},"450":{"title":"Schedule a callback with after()","titles":["Timer"]},"451":{"title":"Signature","titles":["Timer","Schedule a callback with after()"]},"452":{"title":"Behavior","titles":["Timer","Schedule a callback with after()"]},"453":{"title":"Example","titles":["Timer","Schedule a callback with after()"]},"454":{"title":"Coroutine sleep with sleep_for()","titles":["Timer"]},"455":{"title":"Signature","titles":["Timer","Coroutine sleep with sleep_for()"]},"456":{"title":"Behavior","titles":["Timer","Coroutine sleep with sleep_for()"]},"457":{"title":"Example","titles":["Timer","Coroutine sleep with sleep_for()"]},"458":{"title":"Cancellation","titles":["Timer"]},"459":{"title":"Example with cancel_source","titles":["Timer","Cancellation"]},"460":{"title":"Ordering and tie breaking","titles":["Timer"]},"461":{"title":"Common pitfalls","titles":["Timer"]},"462":{"title":"Recommended pattern","titles":["Timer"]},"463":{"title":"UDP (async/net)","titles":[]},"464":{"title":"Header","titles":["UDP (async/net)"]},"465":{"title":"Types","titles":["UDP (async/net)"]},"466":{"title":"udp_endpoint","titles":["UDP (async/net)","Types"]},"467":{"title":"udp_datagram","titles":["UDP (async/net)","Types"]},"468":{"title":"udp_socket","titles":["UDP (async/net)"]},"469":{"title":"async_bind(bind_ep)","titles":["UDP (async/net)","udp_socket"]},"470":{"title":"async_send_to(buf, to, ct)","titles":["UDP (async/net)","udp_socket"]},"471":{"title":"async_recv_from(buf, ct)","titles":["UDP (async/net)","udp_socket"]},"472":{"title":"close() and is_open()","titles":["UDP (async/net)","udp_socket"]},"473":{"title":"Factory","titles":["UDP (async/net)"]},"474":{"title":"make_udp_socket(ctx)","titles":["UDP (async/net)","Factory"]},"475":{"title":"Cancellation","titles":["UDP (async/net)"]},"476":{"title":"Example: UDP echo (single socket)","titles":["UDP (async/net)"]},"477":{"title":"Example: UDP discovery ping","titles":["UDP (async/net)"]},"478":{"title":"Behavior and design notes","titles":["UDP (async/net)"]},"479":{"title":"Common patterns","titles":["UDP (async/net)"]},"480":{"title":"when","titles":[]},"481":{"title":"Header","titles":["when"]},"482":{"title":"Mental model","titles":["when"]},"483":{"title":"What these functions do","titles":["when","Mental model"]},"484":{"title":"Why the scheduler is required","titles":["when","Mental model"]},"485":{"title":"Return types","titles":["when"]},"486":{"title":"void tasks are mapped to std::monostate","titles":["when","Return types"]},"487":{"title":"when_all return type","titles":["when","Return types"]},"488":{"title":"when_any return type","titles":["when","Return types"]},"489":{"title":"Exception behavior","titles":["when"]},"490":{"title":"when_all","titles":["when","Exception behavior"]},"491":{"title":"when_any","titles":["when","Exception behavior"]},"492":{"title":"Concurrency and lifetime notes","titles":["when"]},"493":{"title":"Examples","titles":["when"]},"494":{"title":"Example 1: when_all with values","titles":["when","Examples"]},"495":{"title":"Example 2: when_all with void tasks","titles":["when","Examples"]},"496":{"title":"Example 3: when_any (race)","titles":["when","Examples"]},"497":{"title":"Example 4: running end-to-end","titles":["when","Examples"]},"498":{"title":"Design notes","titles":["when"]},"499":{"title":"Cache","titles":[]},"500":{"title":"Concepts","titles":["Cache"]},"501":{"title":"CacheEntry","titles":["Cache","Concepts"]},"502":{"title":"CacheContext","titles":["Cache","Concepts"]},"503":{"title":"CachePolicy","titles":["Cache","Concepts"]},"504":{"title":"CacheStore","titles":["Cache","Concepts"]},"505":{"title":"Cache facade","titles":["Cache","Concepts"]},"506":{"title":"Cache keys","titles":["Cache"]},"507":{"title":"CacheKey","titles":["Cache","Cache keys"]},"508":{"title":"Stores","titles":["Cache"]},"509":{"title":"MemoryStore","titles":["Cache","Stores"]},"510":{"title":"LruMemoryStore","titles":["Cache","Stores"]},"511":{"title":"FileStore","titles":["Cache","Stores"]},"512":{"title":"Typical usage","titles":["Cache"]},"513":{"title":"Offline and network error behavior","titles":["Cache"]},"514":{"title":"Pruning","titles":["Cache"]},"515":{"title":"Design notes","titles":["Cache"]},"516":{"title":"vix add","titles":[]},"517":{"title":"Usage","titles":["vix add"]},"518":{"title":"Description","titles":["vix add"]},"519":{"title":"Sync Registry","titles":["vix add"]},"520":{"title":"Example","titles":["vix add"]},"521":{"title":"Versioning Rules","titles":["vix add"]},"522":{"title":"What Happens Internally","titles":["vix add"]},"523":{"title":"Notes","titles":["vix add"]},"524":{"title":"vix build","titles":[]},"525":{"title":"Usage","titles":["vix build"]},"526":{"title":"Description","titles":["vix build"]},"527":{"title":"Presets","titles":[]},"528":{"title":"Options","titles":[]},"529":{"title":"Environment Variables","titles":[]},"530":{"title":"Examples","titles":[]},"531":{"title":"Logs","titles":[]},"532":{"title":"Signature Cache","titles":[]},"533":{"title":"Fast Mode","titles":[]},"534":{"title":"Design Goals","titles":[]},"535":{"title":"Dependencies","titles":[]},"536":{"title":"Command","titles":["Dependencies"]},"537":{"title":"What it does","titles":["Dependencies"]},"538":{"title":"Typical workflow","titles":["Dependencies"]},"539":{"title":"CMake integration","titles":["Dependencies"]},"540":{"title":"vix.lock","titles":["Dependencies"]},"541":{"title":"Design principles","titles":["Dependencies"]},"542":{"title":"Summary","titles":["Dependencies"]},"543":{"title":"vix dev","titles":[]},"544":{"title":"Usage","titles":["vix dev"]},"545":{"title":"Description","titles":["vix dev"]},"546":{"title":"Options","titles":["vix dev"]},"547":{"title":"Examples","titles":["vix dev"]},"548":{"title":"Mode Classification","titles":["vix dev"]},"549":{"title":"When To Use vix dev","titles":["vix dev"]},"550":{"title":"Design Goals","titles":["vix dev"]},"551":{"title":"CLI Overview","titles":[]},"552":{"title":"Version Example","titles":["CLI Overview"]},"553":{"title":"Core Philosophy","titles":["CLI Overview"]},"554":{"title":"Command Categories","titles":[]},"555":{"title":"1. Project","titles":["Command Categories"]},"556":{"title":"2. Project Structure (Modules)","titles":["Command Categories"]},"557":{"title":"3. Network","titles":["Command Categories"]},"558":{"title":"4. Registry","titles":["Command Categories"]},"559":{"title":"5. Packaging & Security","titles":["Command Categories"]},"560":{"title":"6. Database (ORM)","titles":["Command Categories"]},"561":{"title":"7. Info","titles":["Command Categories"]},"562":{"title":"Global Options","titles":[]},"563":{"title":"Quick Start Example","titles":[]},"564":{"title":"Design Goals","titles":[]},"565":{"title":"vix install","titles":[]},"566":{"title":"Usage","titles":["vix install"]},"567":{"title":"Description","titles":["vix install"]},"568":{"title":"Options","titles":["vix install"]},"569":{"title":"Store Location","titles":["vix install"]},"570":{"title":"Examples","titles":["vix install"]},"571":{"title":"Security Notes","titles":["vix install"]},"572":{"title":"Typical Workflow","titles":["vix install"]},"573":{"title":"vix list","titles":[]},"574":{"title":"Usage","titles":["vix list"]},"575":{"title":"Description","titles":["vix list"]},"576":{"title":"Example","titles":["vix list"]},"577":{"title":"Behavior Notes","titles":["vix list"]},"578":{"title":"Typical Workflow","titles":["vix list"]},"579":{"title":"Vix Modules","titles":[]},"580":{"title":"Command Overview","titles":["Vix Modules"]},"581":{"title":"Subcommands","titles":["Vix Modules","Command Overview"]},"582":{"title":"Global Options","titles":["Vix Modules","Command Overview"]},"583":{"title":"1. Initialize Modules Mode","titles":[]},"584":{"title":"2. Add a Module","titles":[]},"585":{"title":"3. Explicit Cross-Module Dependency","titles":[]},"586":{"title":"4. Module Structure Contract","titles":[]},"587":{"title":"5. Validate Module Safety","titles":[]},"588":{"title":"Design Philosophy","titles":[]},"589":{"title":"Minimal Workflow Example","titles":[]},"590":{"title":"vix new","titles":[]},"591":{"title":"Usage","titles":["vix new"]},"592":{"title":"Options","titles":["vix new"]},"593":{"title":"Environment Variables","titles":["vix new"]},"594":{"title":"Interactive Mode","titles":[]},"595":{"title":"Template","titles":["Interactive Mode"]},"596":{"title":"Features (Application)","titles":["Interactive Mode"]},"597":{"title":"Advanced","titles":["Interactive Mode"]},"598":{"title":"Examples","titles":[]},"599":{"title":"Output Example (Application)","titles":[]},"600":{"title":"Output Example (Library)","titles":[]},"601":{"title":"Behavior Notes","titles":[]},"602":{"title":"vix orm","titles":[]},"603":{"title":"Usage","titles":["vix orm"]},"604":{"title":"Description","titles":["vix orm"]},"605":{"title":"Commands","titles":["vix orm"]},"606":{"title":"Migrate","titles":["vix orm","Commands"]},"607":{"title":"Rollback","titles":["vix orm","Commands"]},"608":{"title":"Status","titles":["vix orm","Commands"]},"609":{"title":"Makemigrations","titles":["vix orm","Commands"]},"610":{"title":"Common Options","titles":["vix orm"]},"611":{"title":"Environment Defaults","titles":["vix orm"]},"612":{"title":"Examples","titles":["vix orm"]},"613":{"title":"vix p2p","titles":[]},"614":{"title":"Usage","titles":["vix p2p"]},"615":{"title":"Description","titles":["vix p2p"]},"616":{"title":"Core Options","titles":["vix p2p"]},"617":{"title":"Discovery (UDP)","titles":["vix p2p"]},"618":{"title":"Bootstrap (HTTP Registry)","titles":["vix p2p"]},"619":{"title":"Logging","titles":["vix p2p"]},"620":{"title":"Examples","titles":["vix p2p"]},"621":{"title":"Typical Workflow","titles":["vix p2p"]},"622":{"title":"vix pack","titles":[]},"623":{"title":"Usage","titles":["vix pack"]},"624":{"title":"Description","titles":["vix pack"]},"625":{"title":"Options","titles":["vix pack"]},"626":{"title":"Basic Example","titles":["vix pack"]},"627":{"title":"Signing (Optional)","titles":["vix pack"]},"628":{"title":"What Gets Generated","titles":["vix pack"]},"629":{"title":"Typical Workflow","titles":["vix pack"]},"630":{"title":"vix publish","titles":[]},"631":{"title":"Usage","titles":["vix publish"]},"632":{"title":"Description","titles":["vix publish"]},"633":{"title":"Requirements","titles":["vix publish"]},"634":{"title":"Examples","titles":["vix publish"]},"635":{"title":"Version Rules","titles":["vix publish"]},"636":{"title":"What Happens Internally","titles":["vix publish"]},"637":{"title":"Notes","titles":["vix publish"]},"638":{"title":"vix registry","titles":[]},"639":{"title":"Usage","titles":["vix registry"]},"640":{"title":"Subcommands","titles":["vix registry"]},"641":{"title":"Description","titles":["vix registry"]},"642":{"title":"First Step","titles":["vix registry"]},"643":{"title":"Examples","titles":["vix registry"]},"644":{"title":"Publishing a Package","titles":["vix registry"]},"645":{"title":"Registry Design (V1)","titles":["vix registry"]},"646":{"title":"Related Commands","titles":["vix registry"]},"647":{"title":"vix remove","titles":[]},"648":{"title":"Usage","titles":["vix remove"]},"649":{"title":"Description","titles":["vix remove"]},"650":{"title":"Examples","titles":["vix remove"]},"651":{"title":"Behavior Notes","titles":["vix remove"]},"652":{"title":"Typical Workflow","titles":["vix remove"]},"653":{"title":"REPL","titles":[]},"654":{"title":"Start the REPL","titles":["REPL"]},"655":{"title":"Basic Math","titles":["REPL"]},"656":{"title":"Variables","titles":["REPL"]},"657":{"title":"Arrays","titles":["REPL"]},"658":{"title":"Objects","titles":["REPL"]},"659":{"title":"Built-in Commands","titles":["REPL"]},"660":{"title":"History","titles":["REPL"]},"661":{"title":"Behavior Notes","titles":["REPL"]},"662":{"title":"When To Use REPL","titles":["REPL"]},"663":{"title":"vix run","titles":[]},"664":{"title":"Usage","titles":["vix run"]},"665":{"title":"Modes","titles":[]},"666":{"title":"1) Project Mode","titles":["Modes"]},"667":{"title":"2) Script Mode (.cpp)","titles":["Modes"]},"668":{"title":"3) Manifest Mode (.vix)","titles":["Modes"]},"669":{"title":"Options","titles":[]},"670":{"title":"Runtime Options","titles":[]},"671":{"title":"Watch Mode","titles":[]},"672":{"title":"Script Mode Flags","titles":[]},"673":{"title":"Documentation (OpenAPI)","titles":[]},"674":{"title":"Logging","titles":[]},"675":{"title":"Compiler / Linker Flags (Script Mode)","titles":[]},"676":{"title":"Examples","titles":[]},"677":{"title":"Environment Variables","titles":[]},"678":{"title":"Design Goals","titles":[]},"679":{"title":"vix search","titles":[]},"680":{"title":"Usage","titles":["vix search"]},"681":{"title":"Description","titles":["vix search"]},"682":{"title":"Sync Registry","titles":["vix search"]},"683":{"title":"Examples","titles":["vix search"]},"684":{"title":"Behavior Notes","titles":["vix search"]},"685":{"title":"Design Goals","titles":["vix search"]},"686":{"title":"vix tests","titles":[]},"687":{"title":"Usage","titles":["vix tests"]},"688":{"title":"Description","titles":["vix tests"]},"689":{"title":"Test Flags","titles":[]},"690":{"title":"CTest Passthrough","titles":[]},"691":{"title":"Preset Behavior","titles":[]},"692":{"title":"Examples","titles":[]},"693":{"title":"Notes","titles":[]},"694":{"title":"vix verify","titles":[]},"695":{"title":"Usage","titles":["vix verify"]},"696":{"title":"Description","titles":["vix verify"]},"697":{"title":"Auto-detection Rules","titles":["vix verify"]},"698":{"title":"Options","titles":["vix verify"]},"699":{"title":"Signature Behavior","titles":["vix verify"]},"700":{"title":"Exit Codes","titles":["vix verify"]},"701":{"title":"Examples","titles":["vix verify"]},"702":{"title":"Typical Workflow","titles":["vix verify"]},"703":{"title":"ConversionError","titles":[]},"704":{"title":"Header","titles":["ConversionError"]},"705":{"title":"ConversionErrorCode","titles":["ConversionError"]},"706":{"title":"Meaning","titles":["ConversionError","ConversionErrorCode"]},"707":{"title":"ConversionError","titles":["ConversionError"]},"708":{"title":"Fields","titles":["ConversionError","ConversionError"]},"709":{"title":"ok()","titles":["ConversionError"]},"710":{"title":"to_string(ConversionErrorCode)","titles":["ConversionError"]},"711":{"title":"Typical Usage with expected","titles":["ConversionError"]},"712":{"title":"Design Philosophy","titles":["ConversionError"]},"713":{"title":"expected","titles":[]},"714":{"title":"Header","titles":["expected"]},"715":{"title":"Why Vix Has Its Own expected","titles":["expected"]},"716":{"title":"When std::expected Is Used","titles":["expected"]},"717":{"title":"constexpr Behavior","titles":["expected"]},"718":{"title":"Public API Surface","titles":["expected"]},"719":{"title":"expected<T, E>","titles":["expected","Public API Surface"]},"720":{"title":"unexpected<E>","titles":["expected","Public API Surface"]},"721":{"title":"Basic Usage Pattern","titles":["expected"]},"722":{"title":"Creating Errors with make_unexpected","titles":["expected"]},"723":{"title":"Notes About the Fallback Implementation","titles":["expected"]},"724":{"title":"Design Philosophy","titles":["expected"]},"725":{"title":"Conversion","titles":[]},"726":{"title":"Include","titles":["Conversion"]},"727":{"title":"Result model","titles":[]},"728":{"title":"to_bool","titles":[]},"729":{"title":"to_int","titles":[]},"730":{"title":"to_float","titles":[]},"731":{"title":"to_enum","titles":[]},"732":{"title":"to_string","titles":[]},"733":{"title":"parse<T>","titles":[]},"734":{"title":"Notes","titles":[]},"735":{"title":"to_bool","titles":[]},"736":{"title":"Overview","titles":["to_bool"]},"737":{"title":"Supported Inputs","titles":["to_bool"]},"738":{"title":"True values","titles":["to_bool","Supported Inputs"]},"739":{"title":"False values","titles":["to_bool","Supported Inputs"]},"740":{"title":"Function Signature","titles":["to_bool"]},"741":{"title":"Error Handling","titles":["to_bool"]},"742":{"title":"Possible Error Codes","titles":["to_bool","Error Handling"]},"743":{"title":"Example Usage","titles":["to_bool"]},"744":{"title":"Implementation Notes","titles":["to_bool"]},"745":{"title":"Design Philosophy","titles":["to_bool"]},"746":{"title":"vix::conversion::parse","titles":[]},"747":{"title":"Supported Types","titles":["vix::conversion::parse"]},"748":{"title":"Basic Usage","titles":["vix::conversion::parse"]},"749":{"title":"Error Handling","titles":["vix::conversion::parse"]},"750":{"title":"Enum Parsing","titles":["vix::conversion::parse"]},"751":{"title":"Design Philosophy","titles":["vix::conversion::parse"]},"752":{"title":"Summary","titles":["vix::conversion::parse"]},"753":{"title":"to_float","titles":[]},"754":{"title":"Header","titles":["to_float"]},"755":{"title":"Overview","titles":["to_float"]},"756":{"title":"Template API","titles":["to_float"]},"757":{"title":"Constraints","titles":["to_float","Template API"]},"758":{"title":"Supported Formats","titles":["to_float"]},"759":{"title":"Strict Rules","titles":["to_float"]},"760":{"title":"Error Handling","titles":["to_float"]},"761":{"title":"Convenience Wrappers","titles":["to_float"]},"762":{"title":"to_float32","titles":["to_float","Convenience Wrappers"]},"763":{"title":"to_float64","titles":["to_float","Convenience Wrappers"]},"764":{"title":"to_float80","titles":["to_float","Convenience Wrappers"]},"765":{"title":"Example: Safe Parsing","titles":["to_float"]},"766":{"title":"Comparison with std::stod","titles":["to_float"]},"767":{"title":"Design Philosophy","titles":["to_float"]},"768":{"title":"to_enum","titles":[]},"769":{"title":"Header","titles":["to_enum"]},"770":{"title":"Overview","titles":["to_enum"]},"771":{"title":"EnumEntry","titles":["to_enum"]},"772":{"title":"Core API","titles":["to_enum"]},"773":{"title":"Constraints","titles":["to_enum","Core API"]},"774":{"title":"Behavior","titles":["to_enum"]},"775":{"title":"Error Handling","titles":["to_enum"]},"776":{"title":"Example","titles":["to_enum"]},"777":{"title":"Static Array Overload","titles":["to_enum"]},"778":{"title":"Case Sensitivity","titles":["to_enum"]},"779":{"title":"Why Explicit Mapping?","titles":["to_enum"]},"780":{"title":"Design Philosophy","titles":["to_enum"]},"781":{"title":"to_int","titles":[]},"782":{"title":"Header","titles":["to_int"]},"783":{"title":"What it does","titles":["to_int"]},"784":{"title":"API","titles":["to_int"]},"785":{"title":"Generic parser","titles":["to_int","API"]},"786":{"title":"Convenience helpers","titles":["to_int","API"]},"787":{"title":"Error behavior","titles":["to_int"]},"788":{"title":"Examples","titles":["to_int"]},"789":{"title":"Parse signed integer","titles":["to_int","Examples"]},"790":{"title":"Reject trailing characters","titles":["to_int","Examples"]},"791":{"title":"Parse unsigned integer","titles":["to_int","Examples"]},"792":{"title":"Overflow detection","titles":["to_int","Examples"]},"793":{"title":"Tips","titles":["to_int"]},"794":{"title":"to_string","titles":[]},"795":{"title":"Integral Types","titles":["to_string"]},"796":{"title":"Floating Point Types","titles":["to_string"]},"797":{"title":"Boolean","titles":["to_string"]},"798":{"title":"Enum Conversion (Mapping Table)","titles":["to_string"]},"799":{"title":"Design Notes","titles":["to_string"]},"800":{"title":"HTTP","titles":[]},"801":{"title":"Setting status codes","titles":["HTTP"]},"802":{"title":"Setting headers","titles":["HTTP"]},"803":{"title":"Sending plain text","titles":["HTTP"]},"804":{"title":"Sending JSON","titles":["HTTP"]},"805":{"title":"Reading request headers","titles":["HTTP"]},"806":{"title":"Checking header existence","titles":["HTTP"]},"807":{"title":"Raw body access","titles":["HTTP"]},"808":{"title":"Content behavior rule","titles":["HTTP"]},"809":{"title":"Quick Start","titles":[]},"810":{"title":"Lifecycle","titles":[]},"811":{"title":"run(port)","titles":["Lifecycle"]},"812":{"title":"listen(port, on_listen)","titles":["Lifecycle"]},"813":{"title":"close() and wait()","titles":["Lifecycle"]},"814":{"title":"Routing","titles":[]},"815":{"title":"Handler Signatures","titles":["Routing"]},"816":{"title":"Auto-send Behavior","titles":[]},"817":{"title":"Middleware","titles":[]},"818":{"title":"Groups","titles":[]},"819":{"title":"Static Files","titles":[]},"820":{"title":"Dev Mode","titles":[]},"821":{"title":"Executor and Concurrency","titles":[]},"822":{"title":"Signal-safe Stop","titles":[]},"823":{"title":"Introspection","titles":[]},"824":{"title":"Notes","titles":[]},"825":{"title":"Configuration","titles":[]},"826":{"title":"1. Config file format","titles":[]},"827":{"title":"2. Loading config","titles":[]},"828":{"title":"Singleton access","titles":["2. Loading config"]},"829":{"title":"3. Typed getters with defaults","titles":[]},"830":{"title":"4. Dot-path lookup","titles":[]},"831":{"title":"5. Convenience getters (server, logging, waf)","titles":[]},"832":{"title":"6. Environment override (DB password)","titles":[]},"833":{"title":"7. Defaults and validation behavior","titles":[]},"834":{"title":"Best practices","titles":[]},"835":{"title":"Vix Console (core)","titles":[]},"836":{"title":"Goals (what Vix Console guarantees)","titles":["Vix Console (core)"]},"837":{"title":"Non-goals (what it is not)","titles":["Vix Console (core)"]},"838":{"title":"What Vix Console is NOT (by design)","titles":["Vix Console (core)"]},"839":{"title":"Quick start","titles":["Vix Console (core)"]},"840":{"title":"API and semantics","titles":["Vix Console (core)"]},"841":{"title":"Methods","titles":["Vix Console (core)","API and semantics"]},"842":{"title":"Level policy","titles":["Vix Console (core)","API and semantics"]},"843":{"title":"Environment variables (read once, stable)","titles":["Vix Console (core)"]},"844":{"title":"VIX_CONSOLE_LEVEL","titles":["Vix Console (core)","Environment variables (read once, stable)"]},"845":{"title":"Color control","titles":["Vix Console (core)","Environment variables (read once, stable)"]},"846":{"title":"Performance model (critical contract)","titles":["Vix Console (core)"]},"847":{"title":"The golden rule","titles":["Vix Console (core)","Performance model (critical contract)"]},"848":{"title":"Practical guidance","titles":["Vix Console (core)","Performance model (critical contract)"]},"849":{"title":"Thread safety and atomic lines","titles":["Vix Console (core)"]},"850":{"title":"Guarantee","titles":["Vix Console (core)","Thread safety and atomic lines"]},"851":{"title":"Implication","titles":["Vix Console (core)","Thread safety and atomic lines"]},"852":{"title":"I/O behavior and constraints (important)","titles":["Vix Console (core)"]},"853":{"title":"Best-effort I/O","titles":["Vix Console (core)","I/O behavior and constraints (important)"]},"854":{"title":"Flush policy","titles":["Vix Console (core)","I/O behavior and constraints (important)"]},"855":{"title":"Ordering guarantees","titles":["Vix Console (core)"]},"856":{"title":"Anti-spam protection (dev-proof)","titles":["Vix Console (core)"]},"857":{"title":"Why it exists","titles":["Vix Console (core)","Anti-spam protection (dev-proof)"]},"858":{"title":"Policy","titles":["Vix Console (core)","Anti-spam protection (dev-proof)"]},"859":{"title":"Reliability notes (crash/shutdown)","titles":["Vix Console (core)"]},"860":{"title":"Recommended usage patterns","titles":["Vix Console (core)"]},"861":{"title":"Good","titles":["Vix Console (core)","Recommended usage patterns"]},"862":{"title":"Avoid","titles":["Vix Console (core)","Recommended usage patterns"]},"863":{"title":"Integration","titles":["Vix Console (core)"]},"864":{"title":"Include","titles":["Vix Console (core)","Integration"]},"865":{"title":"Umbrella headers","titles":["Vix Console (core)","Integration"]},"866":{"title":"FAQ","titles":["Vix Console (core)"]},"867":{"title":"Is Vix Console asynchronous?","titles":["Vix Console (core)","FAQ"]},"868":{"title":"Why not auto-enable debug by default?","titles":["Vix Console (core)","FAQ"]},"869":{"title":"Why not structured JSON by default?","titles":["Vix Console (core)","FAQ"]},"870":{"title":"Summary","titles":["Vix Console (core)"]},"871":{"title":"Vix.cpp Examples Guide (Beginner Friendly)","titles":[]},"872":{"title":"Mental Model for Python / Node Developers","titles":["Vix.cpp Examples Guide (Beginner Friendly)"]},"873":{"title":"Where to Go Next","titles":["Vix.cpp Examples Guide (Beginner Friendly)"]},"874":{"title":"Executor","titles":[]},"875":{"title":"IExecutor","titles":["Executor"]},"876":{"title":"Core API","titles":["Executor","IExecutor"]},"877":{"title":"post(fn, opt)","titles":["Executor","IExecutor"]},"878":{"title":"metrics()","titles":["Executor","IExecutor"]},"879":{"title":"wait_idle()","titles":["Executor","IExecutor"]},"880":{"title":"Futures with submit","titles":["Executor"]},"881":{"title":"Rejection behavior","titles":["Executor","Futures with submit"]},"882":{"title":"TaskOptions","titles":["Executor"]},"883":{"title":"Fields","titles":["Executor","TaskOptions"]},"884":{"title":"Metrics","titles":["Executor"]},"885":{"title":"Lightweight wrappers","titles":["Executor"]},"886":{"title":"Stand","titles":["Executor","Lightweight wrappers"]},"887":{"title":"LimitedExecutor","titles":["Executor","Lightweight wrappers"]},"888":{"title":"How it fits in core","titles":["Executor"]},"889":{"title":"Practical guidance","titles":["Executor"]},"890":{"title":"Experimental: ThreadPoolExecutor","titles":[]},"891":{"title":"ThreadPoolExecutor","titles":["Experimental: ThreadPoolExecutor"]},"892":{"title":"Construction","titles":["Experimental: ThreadPoolExecutor"]},"893":{"title":"Parameters","titles":["Experimental: ThreadPoolExecutor","Construction"]},"894":{"title":"Core API","titles":["Experimental: ThreadPoolExecutor"]},"895":{"title":"post(fn, opt)","titles":["Experimental: ThreadPoolExecutor","Core API"]},"896":{"title":"metrics()","titles":["Experimental: ThreadPoolExecutor","Core API"]},"897":{"title":"wait_idle()","titles":["Experimental: ThreadPoolExecutor","Core API"]},"898":{"title":"Introspection","titles":["Experimental: ThreadPoolExecutor"]},"899":{"title":"Factory Helper","titles":["Experimental: ThreadPoolExecutor"]},"900":{"title":"How it integrates with App","titles":["Experimental: ThreadPoolExecutor"]},"901":{"title":"Design Notes","titles":["Experimental: ThreadPoolExecutor"]},"902":{"title":"When to use it","titles":["Experimental: ThreadPoolExecutor"]},"903":{"title":"HTTP","titles":[]},"904":{"title":"Setting status codes","titles":["HTTP"]},"905":{"title":"Setting headers","titles":["HTTP"]},"906":{"title":"Sending plain text","titles":["HTTP"]},"907":{"title":"Sending JSON","titles":["HTTP"]},"908":{"title":"Reading request headers","titles":["HTTP"]},"909":{"title":"Checking header existence","titles":["HTTP"]},"910":{"title":"Raw body access","titles":["HTTP"]},"911":{"title":"Content behavior rule","titles":["HTTP"]},"912":{"title":"HTTP (core)","titles":[]},"913":{"title":"IRequestHandler","titles":["HTTP (core)"]},"914":{"title":"Request","titles":["HTTP (core)"]},"915":{"title":"Path and query parsing","titles":["HTTP (core)","Request"]},"916":{"title":"Route params","titles":["HTTP (core)","Request"]},"917":{"title":"JSON caching","titles":["HTTP (core)","Request"]},"918":{"title":"RequestState","titles":["HTTP (core)"]},"919":{"title":"Response","titles":["HTTP (core)"]},"920":{"title":"HTTP date formatting","titles":["HTTP (core)","Response"]},"921":{"title":"ResponseWrapper","titles":["HTTP (core)"]},"922":{"title":"Common usage","titles":["HTTP (core)","ResponseWrapper"]},"923":{"title":"Auto default behavior","titles":["HTTP (core)","ResponseWrapper"]},"924":{"title":"Static files","titles":["HTTP (core)","ResponseWrapper"]},"925":{"title":"RequestHandler","titles":["HTTP (core)"]},"926":{"title":"Supported handler signatures","titles":["HTTP (core)","RequestHandler"]},"927":{"title":"Error handling","titles":["HTTP (core)","RequestHandler"]},"928":{"title":"Status","titles":["HTTP (core)"]},"929":{"title":"Practical guidance","titles":["HTTP (core)"]},"930":{"title":"Core Overview","titles":[]},"931":{"title":"What the core provides","titles":["Core Overview"]},"932":{"title":"Request lifecycle (end to end)","titles":["Core Overview"]},"933":{"title":"Why this architecture exists","titles":["Core Overview","Request lifecycle (end to end)"]},"934":{"title":"Core components","titles":["Core Overview"]},"935":{"title":"HTTPServer","titles":["Core Overview"]},"936":{"title":"Session","titles":["Core Overview"]},"937":{"title":"Router","titles":["Core Overview"]},"938":{"title":"Heavy routes","titles":["Core Overview","Router"]},"939":{"title":"OpenAPI and Docs","titles":["Core Overview"]},"940":{"title":"Disable auto docs","titles":["Core Overview","OpenAPI and Docs"]},"941":{"title":"Executor, ThreadPool, and timers","titles":["Core Overview"]},"942":{"title":"ThreadPool","titles":["Core Overview"]},"943":{"title":"interval() timer","titles":["Core Overview"]},"944":{"title":"Mental mapping for Node.js and Python developers","titles":["Core Overview"]},"945":{"title":"Node.js mapping (Express)","titles":["Core Overview"]},"946":{"title":"Python mapping (FastAPI)","titles":["Core Overview"]},"947":{"title":"Minimal example","titles":["Core Overview"]},"948":{"title":"Practical recommendations","titles":["Core Overview"]},"949":{"title":"Middleware (core)","titles":[]},"950":{"title":"1. Context","titles":["Middleware (core)"]},"951":{"title":"2. Services","titles":["Middleware (core)"]},"952":{"title":"3. Request-Scoped State","titles":["Middleware (core)"]},"953":{"title":"4. Next (Continuation Control)","titles":["Middleware (core)"]},"954":{"title":"5. Hooks","titles":["Middleware (core)"]},"955":{"title":"6. Result and Error","titles":["Middleware (core)"]},"956":{"title":"7. Standard Error Model","titles":["Middleware (core)"]},"957":{"title":"8. Typical Middleware Flow","titles":["Middleware (core)"]},"958":{"title":"Design Philosophy","titles":["Middleware (core)"]},"959":{"title":"When to Use Middleware","titles":["Middleware (core)"]},"960":{"title":"Summary","titles":["Middleware (core)"]},"961":{"title":"OpenAPI and Docs UI (offline Swagger)","titles":[]},"962":{"title":"What you get","titles":["OpenAPI and Docs UI (offline Swagger)"]},"963":{"title":"Core types","titles":["OpenAPI and Docs UI (offline Swagger)"]},"964":{"title":"RouteDoc","titles":["OpenAPI and Docs UI (offline Swagger)","Core types"]},"965":{"title":"OpenAPI Registry","titles":["OpenAPI and Docs UI (offline Swagger)","Core types"]},"966":{"title":"Build OpenAPI JSON","titles":["OpenAPI and Docs UI (offline Swagger)"]},"967":{"title":"Register the docs routes","titles":["OpenAPI and Docs UI (offline Swagger)"]},"968":{"title":"Offline Swagger UI behavior","titles":["OpenAPI and Docs UI (offline Swagger)"]},"969":{"title":"Heavy routes metadata","titles":["OpenAPI and Docs UI (offline Swagger)"]},"970":{"title":"Disable auto docs","titles":["OpenAPI and Docs UI (offline Swagger)"]},"971":{"title":"Minimal integration example","titles":["OpenAPI and Docs UI (offline Swagger)"]},"972":{"title":"Router (core)","titles":[]},"973":{"title":"Design Philosophy","titles":["Router (core)"]},"974":{"title":"Basic Route Registration","titles":["Router (core)"]},"975":{"title":"Route Tree Model","titles":["Router (core)"]},"976":{"title":"Path Parameters","titles":["Router (core)"]},"977":{"title":"Heavy Routes","titles":["Router (core)"]},"978":{"title":"HEAD Fallback","titles":["Router (core)"]},"979":{"title":"OPTIONS Handling","titles":["Router (core)"]},"980":{"title":"404 Handling","titles":["Router (core)"]},"981":{"title":"OpenAPI Integration","titles":["Router (core)"]},"982":{"title":"Matching Rules","titles":["Router (core)"]},"983":{"title":"Guarantees","titles":["Router (core)"]},"984":{"title":"When To Use","titles":["Router (core)"]},"985":{"title":"Summary","titles":["Router (core)"]},"986":{"title":"Routing","titles":[]},"987":{"title":"Minimal server","titles":["Routing"]},"988":{"title":"Plain text","titles":["Routing"]},"989":{"title":"JSON response","titles":["Routing"]},"990":{"title":"Nested JSON","titles":["Routing"]},"991":{"title":"Status codes","titles":["Routing"]},"992":{"title":"Path parameters","titles":["Routing"]},"993":{"title":"Query parameters","titles":["Routing"]},"994":{"title":"Headers","titles":["Routing"]},"995":{"title":"Request body","titles":["Routing"]},"996":{"title":"Raw body","titles":["Routing","Request body"]},"997":{"title":"JSON body","titles":["Routing","Request body"]},"998":{"title":"Mixed behavior","titles":["Routing"]},"999":{"title":"Rule of thumb","titles":["Routing"]},"1000":{"title":"HTTP Server Guide (vix::server::HTTPServer)","titles":[]},"1001":{"title":"What HTTPServer is","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1002":{"title":"Key dependencies","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1003":{"title":"Boost","titles":["HTTP Server Guide (vix::server::HTTPServer)","Key dependencies"]},"1004":{"title":"Vix components","titles":["HTTP Server Guide (vix::server::HTTPServer)","Key dependencies"]},"1005":{"title":"Public API","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1006":{"title":"Constructor","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1007":{"title":"run()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1008":{"title":"start_accept()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1009":{"title":"calculate_io_thread_count()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1010":{"title":"getRouter()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1011":{"title":"monitor_metrics()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1012":{"title":"stop_async()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1013":{"title":"stop_blocking()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1014":{"title":"join_threads()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1015":{"title":"bound_port()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"1016":{"title":"Internal flow","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1017":{"title":"1) Acceptor initialization","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"1018":{"title":"2) Accept loop","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"1019":{"title":"3) Session creation","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"1020":{"title":"4) I/O threads","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"1021":{"title":"Typical usage","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1022":{"title":"Setup and run","titles":["HTTP Server Guide (vix::server::HTTPServer)","Typical usage"]},"1023":{"title":"Graceful shutdown","titles":["HTTP Server Guide (vix::server::HTTPServer)","Typical usage"]},"1024":{"title":"Notes and gotchas","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1025":{"title":"Port validation","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"1026":{"title":"HEAD requests","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"1027":{"title":"stop_blocking() does not stop","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"1028":{"title":"close_socket()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"1029":{"title":"How to extend","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1030":{"title":"Custom 404","titles":["HTTP Server Guide (vix::server::HTTPServer)","How to extend"]},"1031":{"title":"Dedicated executors (heavy routes)","titles":["HTTP Server Guide (vix::server::HTTPServer)","How to extend"]},"1032":{"title":"Checklist for production","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"1033":{"title":"ThreadPool (vix::threadpool)","titles":[]},"1034":{"title":"Components","titles":["ThreadPool (vix::threadpool)"]},"1035":{"title":"1) Task","titles":["ThreadPool (vix::threadpool)","Components"]},"1036":{"title":"2) TaskCmp","titles":["ThreadPool (vix::threadpool)","Components"]},"1037":{"title":"3) TaskGuard","titles":["ThreadPool (vix::threadpool)","Components"]},"1038":{"title":"4) ThreadPool","titles":["ThreadPool (vix::threadpool)","Components"]},"1039":{"title":"Construction","titles":["ThreadPool (vix::threadpool)"]},"1040":{"title":"Enqueueing work","titles":["ThreadPool (vix::threadpool)"]},"1041":{"title":"Timeout behavior","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"1042":{"title":"Return values","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"1043":{"title":"Auto-scaling","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"1044":{"title":"Periodic scheduling","titles":["ThreadPool (vix::threadpool)"]},"1045":{"title":"Idle waiting","titles":["ThreadPool (vix::threadpool)"]},"1046":{"title":"Shutdown and lifetime","titles":["ThreadPool (vix::threadpool)"]},"1047":{"title":"Platform notes","titles":["ThreadPool (vix::threadpool)"]},"1048":{"title":"Linux CPU affinity","titles":["ThreadPool (vix::threadpool)","Platform notes"]},"1049":{"title":"Windows macros","titles":["ThreadPool (vix::threadpool)","Platform notes"]},"1050":{"title":"Usage example","titles":["ThreadPool (vix::threadpool)"]},"1051":{"title":"Integration note for Vix server","titles":["ThreadPool (vix::threadpool)"]},"1052":{"title":"Quick checklist","titles":["ThreadPool (vix::threadpool)"]},"1053":{"title":"Session (core)","titles":[]},"1054":{"title":"Architecture Role","titles":["Session (core)"]},"1055":{"title":"Responsibilities","titles":["Session (core)"]},"1056":{"title":"1. Asynchronous Request Reading","titles":["Session (core)","Responsibilities"]},"1057":{"title":"2. Timeout Protection","titles":["Session (core)","Responsibilities"]},"1058":{"title":"3. Basic WAF (Web Application Firewall)","titles":["Session (core)","Responsibilities"]},"1059":{"title":"Light vs Heavy Routes","titles":["Session (core)"]},"1060":{"title":"Keep-Alive Handling","titles":["Session (core)"]},"1061":{"title":"Response Flow","titles":["Session (core)"]},"1062":{"title":"Error Handling Guarantees","titles":["Session (core)"]},"1063":{"title":"Security Safeguards","titles":["Session (core)"]},"1064":{"title":"Thread Safety","titles":["Session (core)"]},"1065":{"title":"Performance Model","titles":["Session (core)"]},"1066":{"title":"When To Use","titles":["Session (core)"]},"1067":{"title":"Summary","titles":["Session (core)"]},"1068":{"title":"Timers: interval","titles":[]},"1069":{"title":"Files","titles":["Timers: interval"]},"1070":{"title":"Key types","titles":["Timers: interval"]},"1071":{"title":"vix::timers::IntervalHandle","titles":["Timers: interval","Key types"]},"1072":{"title":"API","titles":["Timers: interval"]},"1073":{"title":"IntervalHandle interval(IExecutor& exec, milliseconds period, function<void()> fn, TaskOptions opt = {})","titles":["Timers: interval","API"]},"1074":{"title":"Typical usage","titles":["Timers: interval"]},"1075":{"title":"1) Store the handle in a long-lived owner (server, app)","titles":["Timers: interval","Typical usage"]},"1076":{"title":"2) Stop explicitly","titles":["Timers: interval","Typical usage"]},"1077":{"title":"Concurrency and safety","titles":["Timers: interval"]},"1078":{"title":"Practical guidance","titles":["Timers: interval"]},"1079":{"title":"Crypto","titles":[]},"1080":{"title":"Include","titles":["Crypto"]},"1081":{"title":"Result model","titles":[]},"1082":{"title":"1. Hashing","titles":[]},"1083":{"title":"SHA-256","titles":["1. Hashing"]},"1084":{"title":"2. Randomness","titles":[]},"1085":{"title":"3. Authenticated encryption (AEAD)","titles":[]},"1086":{"title":"Algorithms","titles":["3. Authenticated encryption (AEAD)"]},"1087":{"title":"Key and nonce sizes","titles":["3. Authenticated encryption (AEAD)"]},"1088":{"title":"Seal (encrypt)","titles":["3. Authenticated encryption (AEAD)"]},"1089":{"title":"Open (decrypt)","titles":["3. Authenticated encryption (AEAD)"]},"1090":{"title":"4. Digital signatures","titles":[]},"1091":{"title":"Algorithms","titles":["4. Digital signatures"]},"1092":{"title":"Key generation","titles":["4. Digital signatures"]},"1093":{"title":"Sign","titles":["4. Digital signatures"]},"1094":{"title":"Verify","titles":["4. Digital signatures"]},"1095":{"title":"Recommended usage","titles":[]},"1096":{"title":"Database","titles":[]},"1097":{"title":"1) Build and feature flags","titles":["Database"]},"1098":{"title":"2) Core model","titles":["Database"]},"1099":{"title":"Connection","titles":["Database","2) Core model"]},"1100":{"title":"Statement","titles":["Database","2) Core model"]},"1101":{"title":"ResultSet and ResultRow","titles":["Database","2) Core model"]},"1102":{"title":"3) DbValue and binding","titles":["Database"]},"1103":{"title":"4) Connection pool","titles":["Database"]},"1104":{"title":"5) Database facade and config","titles":["Database"]},"1105":{"title":"6) Minimal examples","titles":["Database"]},"1106":{"title":"6.1 Connect and ping","titles":["Database","6) Minimal examples"]},"1107":{"title":"6.2 Transaction, create table, insert, query","titles":["Database","6) Minimal examples"]},"1108":{"title":"6.3 Prepared SELECT with parameter","titles":["Database","6) Minimal examples"]},"1109":{"title":"7) Transactions","titles":["Database"]},"1110":{"title":"8) Migrations","titles":["Database"]},"1111":{"title":"Code migrations","titles":["Database","8) Migrations"]},"1112":{"title":"File migrations","titles":["Database","8) Migrations"]},"1113":{"title":"9) Drivers overview","titles":["Database"]},"1114":{"title":"SQLite driver","titles":["Database","9) Drivers overview"]},"1115":{"title":"MySQL driver","titles":["Database","9) Drivers overview"]},"1116":{"title":"10) Schema utilities","titles":["Database"]},"1117":{"title":"11) Common errors","titles":["Database"]},"1118":{"title":"Deploy (Vix.cpp)","titles":[]},"1119":{"title":"Goal","titles":["Deploy (Vix.cpp)"]},"1120":{"title":"Folder layout","titles":["Deploy (Vix.cpp)"]},"1121":{"title":"1) Build and copy the binary","titles":["Deploy (Vix.cpp)"]},"1122":{"title":"Option A: build locally, copy to server","titles":["Deploy (Vix.cpp)","1) Build and copy the binary"]},"1123":{"title":"Option B: build on the server","titles":["Deploy (Vix.cpp)","1) Build and copy the binary"]},"1124":{"title":"2) systemd service","titles":["Deploy (Vix.cpp)"]},"1125":{"title":"Logs","titles":["Deploy (Vix.cpp)","2) systemd service"]},"1126":{"title":"3) Open the port (firewall)","titles":["Deploy (Vix.cpp)"]},"1127":{"title":"4) Nginx reverse proxy (recommended)","titles":["Deploy (Vix.cpp)"]},"1128":{"title":"5) TLS with Certbot (optional)","titles":["Deploy (Vix.cpp)"]},"1129":{"title":"6) Deploy update workflow (simple and safe)","titles":["Deploy (Vix.cpp)"]},"1130":{"title":"7) Health check ideas","titles":["Deploy (Vix.cpp)"]},"1131":{"title":"Common issues","titles":["Deploy (Vix.cpp)"]},"1132":{"title":"Service starts then exits","titles":["Deploy (Vix.cpp)","Common issues"]},"1133":{"title":"Permission errors (static files, uploads)","titles":["Deploy (Vix.cpp)","Common issues"]},"1134":{"title":"Wrong client IP inside the app","titles":["Deploy (Vix.cpp)","Common issues"]},"1135":{"title":"Minimal checklist","titles":["Deploy (Vix.cpp)"]},"1136":{"title":"JSON Build Helpers","titles":[]},"1137":{"title":"Include","titles":["JSON Build Helpers"]},"1138":{"title":"Types","titles":["JSON Build Helpers"]},"1139":{"title":"vix::json::Json","titles":["JSON Build Helpers","Types"]},"1140":{"title":"vix::json::OrderedJson","titles":["JSON Build Helpers","Types"]},"1141":{"title":"Builders","titles":["JSON Build Helpers"]},"1142":{"title":"o(k1, v1, k2, v2, ...) -> OrderedJson","titles":["JSON Build Helpers","Builders"]},"1143":{"title":"Nested example","titles":["JSON Build Helpers","Builders","o(k1, v1, k2, v2, ...) -> OrderedJson"]},"1144":{"title":"Why ordered","titles":["JSON Build Helpers","Builders","o(k1, v1, k2, v2, ...) -> OrderedJson"]},"1145":{"title":"a(v1, v2, v3, ...) -> Json","titles":["JSON Build Helpers","Builders"]},"1146":{"title":"Nested arrays and objects","titles":["JSON Build Helpers","Builders","a(v1, v2, v3, ...) -> Json"]},"1147":{"title":"Dynamic pairs example","titles":["JSON Build Helpers","Builders","a(v1, v2, v3, ...) -> Json"]},"1148":{"title":"Common mistakes","titles":["JSON Build Helpers"]},"1149":{"title":"1) Odd number of arguments to o()","titles":["JSON Build Helpers","Common mistakes"]},"1150":{"title":"2) Using kv({{"a", 1}})","titles":["JSON Build Helpers","Common mistakes"]},"1151":{"title":"3) Keys that are not key-like","titles":["JSON Build Helpers","Common mistakes"]},"1152":{"title":"Patterns you can copy","titles":["JSON Build Helpers"]},"1153":{"title":"API response envelope","titles":["JSON Build Helpers","Patterns you can copy"]},"1154":{"title":"Pagination response","titles":["JSON Build Helpers","Patterns you can copy"]},"1155":{"title":"Notes on conversions","titles":["JSON Build Helpers"]},"1156":{"title":"When to use which helper","titles":["JSON Build Helpers"]},"1157":{"title":"Summary","titles":["JSON Build Helpers"]},"1158":{"title":"JSON Convert Helpers","titles":[]},"1159":{"title":"Include","titles":["JSON Convert Helpers"]},"1160":{"title":"Strictness levels","titles":["JSON Convert Helpers"]},"1161":{"title":"1) ptr()","titles":["JSON Convert Helpers","Strictness levels"]},"1162":{"title":"2) get_opt<T>()","titles":["JSON Convert Helpers","Strictness levels"]},"1163":{"title":"3) get_or<T>()","titles":["JSON Convert Helpers","Strictness levels"]},"1164":{"title":"4) ensure<T>()","titles":["JSON Convert Helpers","Strictness levels"]},"1165":{"title":"Types","titles":["JSON Convert Helpers"]},"1166":{"title":"ptr() reference","titles":["JSON Convert Helpers"]},"1167":{"title":"ptr(const Json& j, std::string_view key)","titles":["JSON Convert Helpers","ptr() reference"]},"1168":{"title":"ptr(const Json& j, std::size_t idx)","titles":["JSON Convert Helpers","ptr() reference"]},"1169":{"title":"get_opt<T>() reference","titles":["JSON Convert Helpers"]},"1170":{"title":"Convert a value","titles":["JSON Convert Helpers","get_opt<T>() reference"]},"1171":{"title":"Convert from a pointer","titles":["JSON Convert Helpers","get_opt<T>() reference"]},"1172":{"title":"Convert an object member by key","titles":["JSON Convert Helpers","get_opt<T>() reference"]},"1173":{"title":"Convert an array element by index","titles":["JSON Convert Helpers","get_opt<T>() reference"]},"1174":{"title":"get_or<T>() reference","titles":["JSON Convert Helpers"]},"1175":{"title":"Convert a value with a default","titles":["JSON Convert Helpers","get_or<T>() reference"]},"1176":{"title":"Convert an object member with a default","titles":["JSON Convert Helpers","get_or<T>() reference"]},"1177":{"title":"Convert an array element with a default","titles":["JSON Convert Helpers","get_or<T>() reference"]},"1178":{"title":"ensure<T>() reference","titles":["JSON Convert Helpers"]},"1179":{"title":"Strict conversion of a value","titles":["JSON Convert Helpers","ensure<T>() reference"]},"1180":{"title":"Strict conversion of an object member","titles":["JSON Convert Helpers","ensure<T>() reference"]},"1181":{"title":"Converting Vix Simple JSON to nlohmann::json","titles":["JSON Convert Helpers"]},"1182":{"title":"simple_to_json(token|kvs|array_t)","titles":["JSON Convert Helpers","Converting Vix Simple JSON to nlohmann::json"]},"1183":{"title":"to_json(...) convenience overloads","titles":["JSON Convert Helpers","Converting Vix Simple JSON to nlohmann::json"]},"1184":{"title":"Practical patterns","titles":["JSON Convert Helpers"]},"1185":{"title":"Parsing external payload safely","titles":["JSON Convert Helpers","Practical patterns"]},"1186":{"title":"Trusted config parsing strictly","titles":["JSON Convert Helpers","Practical patterns"]},"1187":{"title":"Summary","titles":["JSON Convert Helpers"]},"1188":{"title":"JSON Dumps Helpers","titles":[]},"1189":{"title":"Include","titles":["JSON Dumps Helpers"]},"1190":{"title":"Types","titles":["JSON Dumps Helpers"]},"1191":{"title":"1. Serialize JSON to string","titles":[]},"1192":{"title":"dumps()","titles":["1. Serialize JSON to string"]},"1193":{"title":"Custom indentation","titles":["1. Serialize JSON to string","dumps()"]},"1194":{"title":"Escape non-ASCII","titles":["1. Serialize JSON to string","dumps()"]},"1195":{"title":"dumps_pretty()","titles":["1. Serialize JSON to string"]},"1196":{"title":"dumps_compact()","titles":["1. Serialize JSON to string"]},"1197":{"title":"2. Write JSON safely to disk","titles":[]},"1198":{"title":"dump_file(path, json)","titles":["2. Write JSON safely to disk"]},"1199":{"title":"What makes it safe?","titles":["2. Write JSON safely to disk"]},"1200":{"title":"Custom formatting","titles":["2. Write JSON safely to disk"]},"1201":{"title":"Overloads","titles":["2. Write JSON safely to disk"]},"1202":{"title":"Error handling","titles":[]},"1203":{"title":"Practical patterns","titles":[]},"1204":{"title":"Writing application config","titles":["Practical patterns"]},"1205":{"title":"Logging a JSON response","titles":["Practical patterns"]},"1206":{"title":"Sending compact JSON over network","titles":["Practical patterns"]},"1207":{"title":"When to use which","titles":[]},"1208":{"title":"Summary","titles":[]},"1209":{"title":"JSON","titles":[]},"1210":{"title":"1) Simple JSON","titles":[]},"1211":{"title":"token","titles":["1) Simple JSON"]},"1212":{"title":"array_t","titles":["1) Simple JSON"]},"1213":{"title":"kvs (object)","titles":["1) Simple JSON"]},"1214":{"title":"Nested structures","titles":["1) Simple JSON"]},"1215":{"title":"Merge and erase","titles":["1) Simple JSON"]},"1216":{"title":"2) High-level JSON (nlohmann powered)","titles":[]},"1217":{"title":"Object + array builders","titles":["2) High-level JSON (nlohmann powered)"]},"1218":{"title":"File IO","titles":["2) High-level JSON (nlohmann powered)"]},"1219":{"title":"JPath navigation","titles":["2) High-level JSON (nlohmann powered)"]},"1220":{"title":"When to use which","titles":[]},"1221":{"title":"JPath Guide","titles":[]},"1222":{"title":"Include","titles":["JPath Guide"]},"1223":{"title":"What problem does JPath solve?","titles":["JPath Guide"]},"1224":{"title":"Supported syntax","titles":["JPath Guide"]},"1225":{"title":"1) Dot notation","titles":["JPath Guide","Supported syntax"]},"1226":{"title":"2) Array indices","titles":["JPath Guide","Supported syntax"]},"1227":{"title":"3) Quoted keys inside brackets","titles":["JPath Guide","Supported syntax"]},"1228":{"title":"Read vs Write behavior","titles":["JPath Guide"]},"1229":{"title":"Read-only: const Json* jget(const Json&, path)","titles":["JPath Guide","Read vs Write behavior"]},"1230":{"title":"Writable: Json* jget(Json&, path)","titles":["JPath Guide","Read vs Write behavior"]},"1231":{"title":"Safe write wrapper: jset(Json&, path, value)","titles":["JPath Guide","Read vs Write behavior"]},"1232":{"title":"Quick reference","titles":["JPath Guide"]},"1233":{"title":"tokenize_path(path) -> std::vector<Token>","titles":["JPath Guide","Quick reference"]},"1234":{"title":"Examples","titles":["JPath Guide"]},"1235":{"title":"Read a nested value","titles":["JPath Guide","Examples"]},"1236":{"title":"Read array element","titles":["JPath Guide","Examples"]},"1237":{"title":"Read a key that contains a dot","titles":["JPath Guide","Examples"]},"1238":{"title":"Write and auto-create","titles":["JPath Guide","Examples"]},"1239":{"title":"Error cases and behavior","titles":["JPath Guide"]},"1240":{"title":"Invalid syntax in read-only mode","titles":["JPath Guide","Error cases and behavior"]},"1241":{"title":"Invalid syntax in writable mode","titles":["JPath Guide","Error cases and behavior"]},"1242":{"title":"Performance notes","titles":["JPath Guide"]},"1243":{"title":"When to use JPath","titles":["JPath Guide"]},"1244":{"title":"Summary","titles":["JPath Guide"]},"1245":{"title":"JSON Loads Guide","titles":[]},"1246":{"title":"Include","titles":["JSON Loads Guide"]},"1247":{"title":"Overview","titles":[]},"1248":{"title":"From strings","titles":["Overview"]},"1249":{"title":"From files","titles":["Overview"]},"1250":{"title":"From strings","titles":[]},"1251":{"title":"loads(std::string_view)","titles":["From strings"]},"1252":{"title":"try_loads(std::string_view)","titles":["From strings"]},"1253":{"title":"From files","titles":[]},"1254":{"title":"load_file(const fs::path&)","titles":["From files"]},"1255":{"title":"try_load_file(const fs::path&)","titles":["From files"]},"1256":{"title":"Error model","titles":[]},"1257":{"title":"When to use what?","titles":[]},"1258":{"title":"Examples","titles":[]},"1259":{"title":"Parse JSON from string","titles":["Examples"]},"1260":{"title":"Safe parse user input","titles":["Examples"]},"1261":{"title":"Load configuration","titles":["Examples"]},"1262":{"title":"Optional settings file","titles":["Examples"]},"1263":{"title":"Convenience overloads","titles":[]},"1264":{"title":"Design philosophy","titles":[]},"1265":{"title":"Summary","titles":[]},"1266":{"title":"Simple JSON Model Guide","titles":[]},"1267":{"title":"Include","titles":["Simple JSON Model Guide"]},"1268":{"title":"What is Simple?","titles":["Simple JSON Model Guide"]},"1269":{"title":"Core types","titles":["Simple JSON Model Guide"]},"1270":{"title":"token","titles":["Simple JSON Model Guide","Core types"]},"1271":{"title":"array_t","titles":["Simple JSON Model Guide","Core types"]},"1272":{"title":"kvs","titles":["Simple JSON Model Guide","Core types"]},"1273":{"title":"Quick example","titles":["Simple JSON Model Guide"]},"1274":{"title":"Creating values","titles":["Simple JSON Model Guide"]},"1275":{"title":"Null","titles":["Simple JSON Model Guide","Creating values"]},"1276":{"title":"Bool","titles":["Simple JSON Model Guide","Creating values"]},"1277":{"title":"Integers","titles":["Simple JSON Model Guide","Creating values"]},"1278":{"title":"Floating point","titles":["Simple JSON Model Guide","Creating values"]},"1279":{"title":"Strings","titles":["Simple JSON Model Guide","Creating values"]},"1280":{"title":"Arrays","titles":["Simple JSON Model Guide","Creating values"]},"1281":{"title":"Objects","titles":["Simple JSON Model Guide","Creating values"]},"1282":{"title":"Reading values","titles":["Simple JSON Model Guide"]},"1283":{"title":"Type checks","titles":["Simple JSON Model Guide","Reading values"]},"1284":{"title":"Raw getters (pointer or nullptr)","titles":["Simple JSON Model Guide","Reading values"]},"1285":{"title":"Convenience getters with default","titles":["Simple JSON Model Guide","Reading values"]},"1286":{"title":"Mutating values","titles":["Simple JSON Model Guide"]},"1287":{"title":"Setters","titles":["Simple JSON Model Guide","Mutating values"]},"1288":{"title":"Ensure array/object","titles":["Simple JSON Model Guide","Mutating values"]},"1289":{"title":"array_t guide","titles":["Simple JSON Model Guide"]},"1290":{"title":"Append elements","titles":["Simple JSON Model Guide","array_t guide"]},"1291":{"title":"Ensure index","titles":["Simple JSON Model Guide","array_t guide"]},"1292":{"title":"Remove at index","titles":["Simple JSON Model Guide","array_t guide"]},"1293":{"title":"kvs guide","titles":["Simple JSON Model Guide"]},"1294":{"title":"Find and contains","titles":["Simple JSON Model Guide","kvs guide"]},"1295":{"title":"Get pointer","titles":["Simple JSON Model Guide","kvs guide"]},"1296":{"title":"Get or create","titles":["Simple JSON Model Guide","kvs guide"]},"1297":{"title":"Set (insert or replace)","titles":["Simple JSON Model Guide","kvs guide"]},"1298":{"title":"Typed getters","titles":["Simple JSON Model Guide","kvs guide"]},"1299":{"title":"Typed getters with defaults","titles":["Simple JSON Model Guide","kvs guide"]},"1300":{"title":"Typed setters","titles":["Simple JSON Model Guide","kvs guide"]},"1301":{"title":"Ensure nested array/object","titles":["Simple JSON Model Guide","kvs guide"]},"1302":{"title":"Builders and aliases","titles":["Simple JSON Model Guide"]},"1303":{"title":"Builders (existing API)","titles":["Simple JSON Model Guide","Builders and aliases"]},"1304":{"title":"Explicit aliases","titles":["Simple JSON Model Guide","Builders and aliases"]},"1305":{"title":"Important fix: integer ambiguity","titles":["Simple JSON Model Guide"]},"1306":{"title":"When to use Simple vs nlohmann::json","titles":["Simple JSON Model Guide"]},"1307":{"title":"Summary","titles":["Simple JSON Model Guide"]},"1308":{"title":"Middleware","titles":[]},"1309":{"title":"Context-based middleware (recommended)","titles":["Middleware"]},"1310":{"title":"Legacy HTTP middleware","titles":["Middleware"]},"1311":{"title":"Prefix middleware","titles":["Middleware"]},"1312":{"title":"Exact-path middleware","titles":["Middleware"]},"1313":{"title":"Chaining and early return","titles":["Middleware"]},"1314":{"title":"RequestState (store data across middleware and handlers)","titles":["Middleware"]},"1315":{"title":"Notes","titles":["Middleware"]},"1316":{"title":"ORM Examples","titles":[]},"1317":{"title":"Concepts","titles":["ORM Examples"]},"1318":{"title":"1) Connection pool + basic insert (transaction)","titles":["ORM Examples"]},"1319":{"title":"2) QueryBuilder UPDATE","titles":["ORM Examples"]},"1320":{"title":"3) Repository CRUD","titles":["ORM Examples"]},"1321":{"title":"4) UnitOfWork","titles":["ORM Examples"]},"1322":{"title":"Common errors","titles":["ORM Examples"]},"1323":{"title":"ORM Guide","titles":[]},"1324":{"title":"Include","titles":["ORM Guide"]},"1325":{"title":"1) ORM C++ API","titles":[]},"1326":{"title":"Core building blocks","titles":["1) ORM C++ API"]},"1327":{"title":"Entity","titles":["1) ORM C++ API","Core building blocks"]},"1328":{"title":"Mapper","titles":["1) ORM C++ API"]},"1329":{"title":"Repository: BaseRepository","titles":["1) ORM C++ API"]},"1330":{"title":"Constructor","titles":["1) ORM C++ API","Repository: BaseRepository"]},"1331":{"title":"Create","titles":["1) ORM C++ API","Repository: BaseRepository"]},"1332":{"title":"Find by id","titles":["1) ORM C++ API","Repository: BaseRepository"]},"1333":{"title":"Update by id","titles":["1) ORM C++ API","Repository: BaseRepository"]},"1334":{"title":"Delete by id","titles":["1) ORM C++ API","Repository: BaseRepository"]},"1335":{"title":"UnitOfWork","titles":["1) ORM C++ API"]},"1336":{"title":"Access the transaction connection","titles":["1) ORM C++ API","UnitOfWork"]},"1337":{"title":"QueryBuilder","titles":["1) ORM C++ API"]},"1338":{"title":"db_compat.hpp","titles":["1) ORM C++ API"]},"1339":{"title":"any_to_dbvalue_or_throw(const std::any&)","titles":["1) ORM C++ API","db_compat.hpp"]},"1340":{"title":"2) CLI: vix orm","titles":[]},"1341":{"title":"Usage","titles":["2) CLI: vix orm"]},"1342":{"title":"Commands","titles":["2) CLI: vix orm"]},"1343":{"title":"migrate","titles":["2) CLI: vix orm","Commands"]},"1344":{"title":"rollback","titles":["2) CLI: vix orm","Commands"]},"1345":{"title":"status","titles":["2) CLI: vix orm","Commands"]},"1346":{"title":"makemigrations","titles":["2) CLI: vix orm","Commands"]},"1347":{"title":"Common options","titles":["2) CLI: vix orm"]},"1348":{"title":"Environment defaults","titles":["2) CLI: vix orm"]},"1349":{"title":"Examples","titles":["2) CLI: vix orm"]},"1350":{"title":"Summary","titles":[]},"1351":{"title":"p2p-ping","titles":[]},"1352":{"title":"Run","titles":["p2p-ping"]},"1353":{"title":"Example","titles":["p2p-ping"]},"1354":{"title":"Notes","titles":["p2p-ping"]},"1355":{"title":"p2p-ping","titles":[]},"1356":{"title":"Run","titles":["p2p-ping"]},"1357":{"title":"Example","titles":["p2p-ping"]},"1358":{"title":"Notes","titles":["p2p-ping"]},"1359":{"title":"Sync Engine","titles":[]},"1360":{"title":"Headers","titles":["Sync Engine"]},"1361":{"title":"Architecture Overview","titles":["Sync Engine"]},"1362":{"title":"SyncEngine","titles":["Sync Engine"]},"1363":{"title":"Config","titles":["Sync Engine","SyncEngine"]},"1364":{"title":"Lifecycle","titles":["Sync Engine","SyncEngine"]},"1365":{"title":"SyncWorker","titles":["Sync Engine"]},"1366":{"title":"Config","titles":["Sync Engine","SyncWorker"]},"1367":{"title":"API","titles":["Sync Engine","SyncWorker"]},"1368":{"title":"ISyncTransport and SendResult","titles":["Sync Engine"]},"1369":{"title":"SendResult","titles":["Sync Engine","ISyncTransport and SendResult"]},"1370":{"title":"Transport Interface","titles":["Sync Engine","ISyncTransport and SendResult"]},"1371":{"title":"Usage Pattern","titles":["Sync Engine"]},"1372":{"title":"Manual driving (single-threaded integration)","titles":["Sync Engine","Usage Pattern"]},"1373":{"title":"Background loop","titles":["Sync Engine","Usage Pattern"]},"1374":{"title":"Thread-Safety Contract","titles":["Sync Engine"]},"1375":{"title":"Design Philosophy","titles":["Sync Engine"]},"1376":{"title":"Sync Examples","titles":[]},"1377":{"title":"Example 1: Minimal smoke test (enqueue + tick + done)","titles":["Sync Examples"]},"1378":{"title":"Example 2: Permanent failure (retryable = false)","titles":["Sync Examples"]},"1379":{"title":"Example 3: In-flight timeout requeue (simulate crash)","titles":["Sync Examples"]},"1380":{"title":"Appendix: Minimal Fake Transport","titles":["Sync Examples"]},"1381":{"title":"Notes","titles":["Sync Examples"]},"1382":{"title":"Operation","titles":[]},"1383":{"title":"Header","titles":["Operation"]},"1384":{"title":"Overview","titles":[]},"1385":{"title":"OperationStatus","titles":[]},"1386":{"title":"Meaning","titles":["OperationStatus"]},"1387":{"title":"Operation Structure","titles":[]},"1388":{"title":"Fields Explained","titles":[]},"1389":{"title":"id","titles":["Fields Explained"]},"1390":{"title":"kind","titles":["Fields Explained"]},"1391":{"title":"target","titles":["Fields Explained"]},"1392":{"title":"payload","titles":["Fields Explained"]},"1393":{"title":"idempotency_key","titles":["Fields Explained"]},"1394":{"title":"created_at_ms","titles":["Fields Explained"]},"1395":{"title":"updated_at_ms","titles":["Fields Explained"]},"1396":{"title":"attempt","titles":["Fields Explained"]},"1397":{"title":"next_retry_at_ms","titles":["Fields Explained"]},"1398":{"title":"status","titles":["Fields Explained"]},"1399":{"title":"last_error","titles":["Fields Explained"]},"1400":{"title":"Lifecycle Helpers","titles":[]},"1401":{"title":"is_done()","titles":["Lifecycle Helpers"]},"1402":{"title":"is_pending()","titles":["Lifecycle Helpers"]},"1403":{"title":"is_failed()","titles":["Lifecycle Helpers"]},"1404":{"title":"fail()","titles":["Lifecycle Helpers"]},"1405":{"title":"done()","titles":["Lifecycle Helpers"]},"1406":{"title":"Typical Lifecycle Flow","titles":[]},"1407":{"title":"Offline-First Guarantees","titles":[]},"1408":{"title":"Design Philosophy","titles":[]},"1409":{"title":"Outbox","titles":[]},"1410":{"title":"Headers","titles":["Outbox"]},"1411":{"title":"Architecture Overview","titles":[]},"1412":{"title":"Outbox","titles":[]},"1413":{"title":"Config","titles":["Outbox"]},"1414":{"title":"Core API","titles":["Outbox"]},"1415":{"title":"Lifecycle","titles":["Outbox","Core API"]},"1416":{"title":"OutboxStore","titles":[]},"1417":{"title":"ListOptions","titles":["OutboxStore"]},"1418":{"title":"Required Methods","titles":["OutboxStore"]},"1419":{"title":"FileOutboxStore","titles":[]},"1420":{"title":"Config","titles":["FileOutboxStore"]},"1421":{"title":"Behavior","titles":["FileOutboxStore"]},"1422":{"title":"Crash Recovery","titles":[]},"1423":{"title":"Offline-First Guarantees","titles":[]},"1424":{"title":"Design Philosophy","titles":[]},"1425":{"title":"RetryPolicy","titles":[]},"1426":{"title":"Header","titles":["RetryPolicy"]},"1427":{"title":"Overview","titles":[]},"1428":{"title":"Structure","titles":[]},"1429":{"title":"Fields Explained","titles":[]},"1430":{"title":"max_attempts","titles":["Fields Explained"]},"1431":{"title":"base_delay_ms","titles":["Fields Explained"]},"1432":{"title":"max_delay_ms","titles":["Fields Explained"]},"1433":{"title":"factor","titles":["Fields Explained"]},"1434":{"title":"jitter_ratio","titles":["Fields Explained"]},"1435":{"title":"Methods","titles":[]},"1436":{"title":"can_retry","titles":["Methods"]},"1437":{"title":"compute_delay_ms","titles":["Methods"]},"1438":{"title":"Example Usage","titles":[]},"1439":{"title":"Deterministic Recovery","titles":[]},"1440":{"title":"Offline-First Considerations","titles":[]},"1441":{"title":"Design Philosophy","titles":[]},"1442":{"title":"Write-Ahead Log (WAL)","titles":[]},"1443":{"title":"Headers","titles":["Write-Ahead Log (WAL)"]},"1444":{"title":"Architecture Overview","titles":[]},"1445":{"title":"Wal","titles":[]},"1446":{"title":"Guarantees","titles":["Wal"]},"1447":{"title":"WalRecord","titles":[]},"1448":{"title":"Meaning","titles":["WalRecord"]},"1449":{"title":"WalWriter","titles":[]},"1450":{"title":"WalReader","titles":[]},"1451":{"title":"Typical Usage","titles":[]},"1452":{"title":"Append before side effects","titles":["Typical Usage"]},"1453":{"title":"Replay during recovery","titles":["Typical Usage"]},"1454":{"title":"Crash Recovery Model","titles":[]},"1455":{"title":"Durability Model","titles":[]},"1456":{"title":"Offline-First Guarantees","titles":[]},"1457":{"title":"Design Philosophy","titles":[]},"1458":{"title":"Time","titles":[]},"1459":{"title":"1. Date","titles":[]},"1460":{"title":"Create current date","titles":["1. Date"]},"1461":{"title":"Parse a date","titles":["1. Date"]},"1462":{"title":"Convert Date to Timestamp (start of day UTC)","titles":["1. Date"]},"1463":{"title":"2. DateTime (UTC)","titles":[]},"1464":{"title":"Current UTC datetime","titles":["2. DateTime (UTC)"]},"1465":{"title":"Parse ISO-8601 (UTC Z)","titles":["2. DateTime (UTC)"]},"1466":{"title":"3. Timestamp","titles":[]},"1467":{"title":"Get current timestamp","titles":["3. Timestamp"]},"1468":{"title":"Timestamp arithmetic","titles":["3. Timestamp"]},"1469":{"title":"4. Duration","titles":[]},"1470":{"title":"Create durations","titles":["4. Duration"]},"1471":{"title":"Inspect duration","titles":["4. Duration"]},"1472":{"title":"5. Measuring elapsed time (SteadyClock)","titles":[]},"1473":{"title":"Recommended Usage","titles":[]},"1474":{"title":"Env utilities","titles":[]},"1475":{"title":"API","titles":["Env utilities"]},"1476":{"title":"env_or(key, def)","titles":["Env utilities","API"]},"1477":{"title":"env_bool(key, def)","titles":["Env utilities","API"]},"1478":{"title":"env_int(key, def)","titles":["Env utilities","API"]},"1479":{"title":"env_uint(key, def)","titles":["Env utilities","API"]},"1480":{"title":"env_double(key, def)","titles":["Env utilities","API"]},"1481":{"title":"Platform notes","titles":["Env utilities"]},"1482":{"title":"vix_getenv(name)","titles":["Env utilities","Platform notes"]},"1483":{"title":"Behavior details","titles":["Env utilities"]},"1484":{"title":"Example patterns","titles":["Env utilities"]},"1485":{"title":"Feature flags","titles":["Env utilities","Example patterns"]},"1486":{"title":"Limits","titles":["Env utilities","Example patterns"]},"1487":{"title":"Config selection","titles":["Env utilities","Example patterns"]},"1488":{"title":"Common variables used in Vix runtime","titles":["Env utilities"]},"1489":{"title":"Utils","titles":[]},"1490":{"title":"What is inside","titles":["Utils"]},"1491":{"title":"Quick start","titles":["Utils"]},"1492":{"title":"Guides","titles":["Utils"]},"1493":{"title":"Design goals","titles":["Utils"]},"1494":{"title":"Server Pretty Logs (Runtime Banner)","titles":[]},"1495":{"title":"What this component does","titles":["Server Pretty Logs (Runtime Banner)"]},"1496":{"title":"Include","titles":["Server Pretty Logs (Runtime Banner)"]},"1497":{"title":"Basic usage","titles":["Server Pretty Logs (Runtime Banner)"]},"1498":{"title":"HTTP + WebSocket example","titles":["Server Pretty Logs (Runtime Banner)"]},"1499":{"title":"Environment controls","titles":["Server Pretty Logs (Runtime Banner)"]},"1500":{"title":"Colors","titles":["Server Pretty Logs (Runtime Banner)","Environment controls"]},"1501":{"title":"Mode","titles":["Server Pretty Logs (Runtime Banner)","Environment controls"]},"1502":{"title":"Hyperlinks (OSC 8)","titles":["Server Pretty Logs (Runtime Banner)","Environment controls"]},"1503":{"title":"Animations","titles":["Server Pretty Logs (Runtime Banner)","Environment controls"]},"1504":{"title":"Thread safety and output ordering","titles":["Server Pretty Logs (Runtime Banner)"]},"1505":{"title":"Field reference","titles":["Server Pretty Logs (Runtime Banner)"]},"1506":{"title":"Typical pattern in a server","titles":["Server Pretty Logs (Runtime Banner)"]},"1507":{"title":"Troubleshooting","titles":["Server Pretty Logs (Runtime Banner)"]},"1508":{"title":"Logger","titles":[]},"1509":{"title":"Include","titles":["Logger"]},"1510":{"title":"Default behavior","titles":["Logger"]},"1511":{"title":"Logging levels","titles":["Logger"]},"1512":{"title":"Basic logging","titles":["Logger"]},"1513":{"title":"Module prefix","titles":["Logger"]},"1514":{"title":"Pattern","titles":["Logger"]},"1515":{"title":"Async mode","titles":["Logger"]},"1516":{"title":"Per-thread context","titles":["Logger"]},"1517":{"title":"Set context","titles":["Logger","Per-thread context"]},"1518":{"title":"Clear context","titles":["Logger","Per-thread context"]},"1519":{"title":"Read context","titles":["Logger","Per-thread context"]},"1520":{"title":"Structured logging","titles":["Logger"]},"1521":{"title":"KV format (default)","titles":["Logger","Structured logging"]},"1522":{"title":"JSON formats","titles":["Logger","Structured logging"]},"1523":{"title":"Colors and terminals","titles":["Logger"]},"1524":{"title":"Console synchronization","titles":["Logger"]},"1525":{"title":"Windows macro safety","titles":["Logger"]},"1526":{"title":"Throw helpers","titles":["Logger"]},"1527":{"title":"Recommended baseline","titles":["Logger"]},"1528":{"title":"Result Guide","titles":[]},"1529":{"title":"Basic usage","titles":["Result Guide"]},"1530":{"title":"Creating Results","titles":["Result Guide"]},"1531":{"title":"Checking State","titles":["Result Guide"]},"1532":{"title":"Accessing Values","titles":["Result Guide"]},"1533":{"title":"Result<void>","titles":["Result Guide"]},"1534":{"title":"Design Notes","titles":["Result Guide"]},"1535":{"title":"Philosophy","titles":["Result Guide"]},"1536":{"title":"String helpers (vix::utils::String)","titles":[]},"1537":{"title":"Include","titles":["String helpers (vix::utils::String)"]},"1538":{"title":"What this file provides","titles":["String helpers (vix::utils::String)"]},"1539":{"title":"Whitespace and trim (ASCII whitespace)","titles":["String helpers (vix::utils::String)","What this file provides"]},"1540":{"title":"Case transform","titles":["String helpers (vix::utils::String)"]},"1541":{"title":"Lowercase (ASCII, C locale)","titles":["String helpers (vix::utils::String)","Case transform"]},"1542":{"title":"Prefix and suffix checks","titles":["String helpers (vix::utils::String)"]},"1543":{"title":"Case-insensitive prefix","titles":["String helpers (vix::utils::String)","Prefix and suffix checks"]},"1544":{"title":"Split and join","titles":["String helpers (vix::utils::String)"]},"1545":{"title":"Split by a single character","titles":["String helpers (vix::utils::String)","Split and join"]},"1546":{"title":"Split by a string separator","titles":["String helpers (vix::utils::String)","Split and join"]},"1547":{"title":"Join","titles":["String helpers (vix::utils::String)","Split and join"]},"1548":{"title":"HTTP helpers","titles":["String helpers (vix::utils::String)"]},"1549":{"title":"Extract multipart boundary","titles":["String helpers (vix::utils::String)","HTTP helpers"]},"1550":{"title":"URL decode","titles":["String helpers (vix::utils::String)","HTTP helpers"]},"1551":{"title":"Query string parsing","titles":["String helpers (vix::utils::String)","HTTP helpers"]},"1552":{"title":"Notes and constraints","titles":["String helpers (vix::utils::String)"]},"1553":{"title":"File location suggestion (project)","titles":["String helpers (vix::utils::String)"]},"1554":{"title":"Time","titles":[]},"1555":{"title":"What you get","titles":["Time"]},"1556":{"title":"1) UTC calendar time (strings)","titles":["Time","What you get"]},"1557":{"title":"2) Monotonic milliseconds for durations","titles":["Time","What you get"]},"1558":{"title":"3) UNIX epoch milliseconds for persisted timestamps","titles":["Time","What you get"]},"1559":{"title":"Include and namespace","titles":["Time"]},"1560":{"title":"Pick the right function","titles":["Time"]},"1561":{"title":"Measure latency or elapsed time","titles":["Time","Pick the right function"]},"1562":{"title":"Create a timestamp string for logs","titles":["Time","Pick the right function"]},"1563":{"title":"Build HTTP Date header","titles":["Time","Pick the right function"]},"1564":{"title":"Store an event timestamp in the database","titles":["Time","Pick the right function"]},"1565":{"title":"Internals and portability notes","titles":["Time"]},"1566":{"title":"Thread safe UTC extraction","titles":["Time","Internals and portability notes"]},"1567":{"title":"Strings and allocations","titles":["Time","Internals and portability notes"]},"1568":{"title":"Common mistakes","titles":["Time"]},"1569":{"title":"Using system_clock for durations","titles":["Time","Common mistakes"]},"1570":{"title":"Expecting now_ms() to be an epoch time","titles":["Time","Common mistakes"]},"1571":{"title":"Quick recipe","titles":["Time"]},"1572":{"title":"UUID Guide (vix::utils::uuid4)","titles":[]},"1573":{"title":"What is a UUID v4?","titles":["UUID Guide (vix::utils::uuid4)"]},"1574":{"title":"Basic Usage","titles":["UUID Guide (vix::utils::uuid4)"]},"1575":{"title":"Thread Safety","titles":["UUID Guide (vix::utils::uuid4)"]},"1576":{"title":"How It Works (Internally)","titles":["UUID Guide (vix::utils::uuid4)"]},"1577":{"title":"When To Use UUID v4","titles":["UUID Guide (vix::utils::uuid4)"]},"1578":{"title":"Performance Characteristics","titles":["UUID Guide (vix::utils::uuid4)"]},"1579":{"title":"Summary","titles":["UUID Guide (vix::utils::uuid4)"]},"1580":{"title":"Validation (vix::utils::Validation)","titles":[]},"1581":{"title":"What you get","titles":["Validation (vix::utils::Validation)"]},"1582":{"title":"API","titles":["Validation (vix::utils::Validation)"]},"1583":{"title":"Types","titles":["Validation (vix::utils::Validation)","API"]},"1584":{"title":"Rule","titles":["Validation (vix::utils::Validation)","API"]},"1585":{"title":"Builders","titles":["Validation (vix::utils::Validation)","API"]},"1586":{"title":"validate_map","titles":["Validation (vix::utils::Validation)","API"]},"1587":{"title":"Quick start","titles":["Validation (vix::utils::Validation)"]},"1588":{"title":"Common patterns","titles":["Validation (vix::utils::Validation)"]},"1589":{"title":"1) Required + length","titles":["Validation (vix::utils::Validation)","Common patterns"]},"1590":{"title":"2) Optional field with length","titles":["Validation (vix::utils::Validation)","Common patterns"]},"1591":{"title":"3) Numeric range","titles":["Validation (vix::utils::Validation)","Common patterns"]},"1592":{"title":"4) Regex full match","titles":["Validation (vix::utils::Validation)","Common patterns"]},"1593":{"title":"Working with the returned errors","titles":["Validation (vix::utils::Validation)"]},"1594":{"title":"Behavior details","titles":["Validation (vix::utils::Validation)"]},"1595":{"title":"Empty string handling","titles":["Validation (vix::utils::Validation)","Behavior details"]},"1596":{"title":"First error per field","titles":["Validation (vix::utils::Validation)","Behavior details"]},"1597":{"title":"Regex cost","titles":["Validation (vix::utils::Validation)","Behavior details"]},"1598":{"title":"Tips","titles":["Validation (vix::utils::Validation)"]},"1599":{"title":"Validation","titles":[]},"1600":{"title":"1. Validating a simple value","titles":[]},"1601":{"title":"Numeric example","titles":["1. Validating a simple value"]},"1602":{"title":"2. Parsed validation (string → typed value)","titles":[]},"1603":{"title":"3. Schema-based struct validation","titles":[]},"1604":{"title":"4. BaseModel pattern","titles":[]},"1605":{"title":"5. Custom cross-field validation","titles":[]},"1606":{"title":"6. Validating HTTP-style form input","titles":[]},"1607":{"title":"7. Allowed values (in_set)","titles":[]},"1608":{"title":"8. Optional values","titles":[]},"1609":{"title":"Error Model","titles":[]},"1610":{"title":"Recommended Usage","titles":[]},"1611":{"title":"WebRPC Examples","titles":[]},"1612":{"title":"1) Parse a request envelope","titles":["WebRPC Examples"]},"1613":{"title":"2) Register methods and dispatch with Router","titles":["WebRPC Examples"]},"1614":{"title":"3) Notifications with Dispatcher","titles":["WebRPC Examples"]},"1615":{"title":"4) Batch requests","titles":["WebRPC Examples"]},"1616":{"title":"5) When to use Router vs Dispatcher","titles":["WebRPC Examples"]},"1617":{"title":"WebRPC Guide","titles":[]},"1618":{"title":"What you build with WebRPC","titles":["WebRPC Guide"]},"1619":{"title":"Request shape","titles":["WebRPC Guide"]},"1620":{"title":"Step 1: Parse a request","titles":["WebRPC Guide"]},"1621":{"title":"Step 2: Register methods with Router","titles":["WebRPC Guide"]},"1622":{"title":"Step 3: Use Dispatcher for real transports","titles":["WebRPC Guide"]},"1623":{"title":"Notifications","titles":["WebRPC Guide"]},"1624":{"title":"Batch requests","titles":["WebRPC Guide"]},"1625":{"title":"What goes in transport code","titles":["WebRPC Guide"]},"1626":{"title":"WebSocket","titles":[]},"1627":{"title":"1) HTTP + WS in one process (with long polling bridge)","titles":["WebSocket"]},"1628":{"title":"2) Standalone WebSocket server","titles":["WebSocket"]},"1629":{"title":"Minimal client message","titles":["WebSocket"]},"1630":{"title":"Notes","titles":["WebSocket"]},"1631":{"title":"project-setup","titles":[]},"1632":{"title":"Project setup","titles":[]},"1633":{"title":"1. Minimal structure","titles":["Project setup"]},"1634":{"title":"2. main.cpp example","titles":["Project setup"]},"1635":{"title":"3. Minimal CMakeLists.txt","titles":["Project setup"]},"1636":{"title":"4. Build manually","titles":["Project setup"]},"1637":{"title":"5. Scaling later","titles":["Project setup"]},"1638":{"title":"Quick start","titles":[]},"1639":{"title":"1. Minimal server","titles":["Quick start"]},"1640":{"title":"2. Run","titles":["Quick start"]},"1641":{"title":"3. Test","titles":["Quick start"]},"1642":{"title":"4. Minimal route examples","titles":["Quick start"]},"1643":{"title":"Plain text","titles":["Quick start","4. Minimal route examples"]},"1644":{"title":"Path parameter","titles":["Quick start","4. Minimal route examples"]},"1645":{"title":"Query parameter","titles":["Quick start","4. Minimal route examples"]},"1646":{"title":"Status code","titles":["Quick start","4. Minimal route examples"]},"1647":{"title":"Philosophy","titles":["Quick start"]},"1648":{"title":"Consulting","titles":[]},"1649":{"title":"Architecture Design","titles":["Consulting"]},"1650":{"title":"Performance Optimization","titles":["Consulting"]},"1651":{"title":"Migration Strategy","titles":["Consulting"]},"1652":{"title":"Codebase Audit","titles":["Consulting"]},"1653":{"title":"Engagement Models","titles":["Consulting"]},"1654":{"title":"Contact","titles":["Consulting"]},"1655":{"title":"Services","titles":[]},"1656":{"title":"What We Offer","titles":["Services"]},"1657":{"title":"Who It’s For","titles":["Services"]},"1658":{"title":"Philosophy","titles":["Services"]},"1659":{"title":"Available Service Categories","titles":["Services"]},"1660":{"title":"Support","titles":[]},"1661":{"title":"Production Support","titles":["Support"]},"1662":{"title":"Priority Channels","titles":["Support"]},"1663":{"title":"SLA Options","titles":["Support"]},"1664":{"title":"What Is Not Included","titles":["Support"]},"1665":{"title":"Contact","titles":["Support"]},"1666":{"title":"Training","titles":[]},"1667":{"title":"Core Training Tracks","titles":["Training"]},"1668":{"title":"1. Modern C++ Backend Foundations","titles":["Training","Core Training Tracks"]},"1669":{"title":"2. Async & Concurrency Mastery","titles":["Training","Core Training Tracks"]},"1670":{"title":"3. Database & ORM Systems","titles":["Training","Core Training Tracks"]},"1671":{"title":"4. P2P & Offline-First Architecture","titles":["Training","Core Training Tracks"]},"1672":{"title":"Format Options","titles":["Training"]},"1673":{"title":"Who This Is For","titles":["Training"]},"1674":{"title":"Contact","titles":["Training"]}},"dirtCount":0,"index":[["±20",{"2":{"1434":1}}],["^",{"2":{"1433":1,"1514":2,"1587":4,"1592":1,"1598":1}}],["└──",{"2":{"975":3}}],["z0",{"2":{"1592":2}}],["z",{"0":{"1465":1},"2":{"1615":1}}],["zip",{"2":{"625":1,"626":1}}],["zeroize",{"2":{"1095":1}}],["zero",{"2":{"36":1,"137":1,"152":1,"306":1,"498":1,"550":1,"564":1,"655":2,"836":2,"847":1,"870":1,"1101":1,"1419":1,"1529":1,"1579":1}}],["✔",{"2":{"599":1,"600":1}}],["$scheme",{"2":{"1127":1}}],["$proxy",{"2":{"1127":1}}],["$path",{"2":{"242":1}}],["$remote",{"2":{"1127":1}}],["$host",{"2":{"1127":1}}],["$",{"2":{"539":1,"1514":2,"1592":1,"1598":1}}],["~walwriter",{"2":{"1449":1}}],["~syncengine",{"2":{"1364":1}}],["~entity",{"2":{"1327":1}}],["~isynctransport",{"2":{"1370":1}}],["~irequesthandler",{"2":{"913":1}}],["~iexecutor",{"2":{"876":1}}],["~udp",{"2":{"468":1}}],["~timer",{"2":{"449":1}}],["~tcp",{"2":{"416":1,"419":1}}],["~dns",{"2":{"289":1}}],["~asio",{"2":{"264":1}}],["~",{"2":{"242":1,"249":1,"569":1,"632":1}}],["|h",{"2":{"507":1}}],["|",{"2":{"242":1,"243":1,"528":8,"546":5,"562":5,"619":6,"625":2}}],["||",{"2":{"229":2,"310":1,"1491":1}}],["999ull",{"2":{"1300":1}}],["999ll",{"2":{"1300":1}}],["999999999999",{"2":{"792":1}}],["9003",{"2":{"1354":1,"1358":1}}],["9002",{"2":{"620":1,"621":1,"1354":1,"1358":1}}],["9001",{"2":{"620":6,"621":2,"1353":1,"1357":1}}],["9000",{"2":{"476":1}}],["9090",{"2":{"86":2,"327":1,"1498":1}}],["93",{"2":{"288":1}}],["9",{"0":{"189":1,"1113":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"1114":1,"1115":1},"2":{"1592":2}}],["yield",{"2":{"1624":1}}],["yields",{"2":{"1615":1,"1624":2}}],["yyyy",{"2":{"1461":1,"1465":1,"1556":1}}],["ys",{"2":{"1280":1}}],["yes",{"2":{"728":1,"738":1,"743":1,"766":5,"1477":1}}],["yet",{"2":{"256":1,"816":1,"1007":1,"1015":1,"1376":1}}],["year",{"2":{"174":3}}],["y",{"2":{"245":1,"1123":1,"1127":1,"1128":1,"1615":1}}],["yourself",{"2":{"862":1}}],["your",{"2":{"127":1,"131":1,"153":1,"179":1,"200":2,"204":1,"209":1,"220":1,"235":1,"240":1,"242":1,"247":1,"249":1,"250":2,"253":1,"265":1,"284":1,"322":1,"330":1,"365":2,"366":2,"368":3,"376":1,"377":1,"378":2,"379":1,"381":1,"383":1,"432":1,"433":1,"442":1,"445":1,"449":1,"452":1,"478":1,"497":1,"512":1,"518":1,"537":1,"539":2,"548":1,"578":1,"583":1,"629":1,"632":1,"633":1,"637":1,"644":1,"793":1,"831":1,"833":1,"862":1,"873":1,"902":3,"942":1,"961":1,"964":1,"970":1,"971":1,"1030":1,"1032":2,"1052":1,"1078":1,"1095":1,"1104":2,"1119":1,"1120":1,"1122":2,"1127":1,"1128":2,"1129":2,"1134":1,"1308":1,"1320":1,"1329":1,"1354":2,"1358":2,"1495":1,"1507":1,"1521":1,"1561":1,"1613":1,"1617":2,"1621":1,"1635":1,"1637":1,"1638":1,"1640":1,"1651":1,"1663":1,"1672":1}}],["you",{"0":{"189":1,"309":1,"962":1,"1152":1,"1555":1,"1581":1,"1618":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"1153":1,"1154":1,"1556":1,"1557":1,"1558":1},"2":{"36":1,"92":1,"95":1,"111":1,"118":1,"119":1,"121":1,"122":1,"123":3,"127":1,"131":2,"132":4,"135":1,"143":1,"145":1,"154":1,"155":1,"160":1,"162":1,"167":1,"168":1,"172":1,"173":1,"180":1,"183":1,"187":1,"205":1,"206":1,"210":1,"211":1,"212":1,"218":2,"221":2,"224":1,"226":1,"233":1,"237":1,"244":1,"268":1,"269":2,"270":1,"273":1,"274":2,"279":1,"304":1,"308":1,"312":2,"320":3,"323":1,"329":1,"331":2,"334":1,"339":1,"343":2,"364":2,"365":3,"366":2,"368":2,"369":2,"370":1,"375":1,"377":1,"378":1,"381":1,"382":3,"383":3,"385":1,"392":1,"393":2,"399":3,"400":1,"406":1,"409":1,"410":1,"424":1,"426":1,"428":1,"431":2,"432":1,"442":1,"443":1,"449":2,"453":1,"456":1,"458":2,"459":2,"461":1,"463":1,"475":1,"480":1,"491":1,"498":3,"507":1,"510":1,"511":1,"513":1,"515":1,"518":1,"537":1,"548":1,"585":1,"601":1,"633":1,"644":1,"653":1,"655":1,"661":1,"681":1,"684":1,"723":2,"734":2,"746":1,"770":1,"777":1,"779":1,"793":1,"800":2,"827":1,"828":1,"862":1,"871":3,"872":1,"881":1,"902":2,"903":2,"913":2,"923":1,"931":1,"933":3,"935":1,"940":1,"942":1,"950":1,"970":1,"974":1,"977":1,"981":1,"998":1,"999":2,"1013":1,"1027":1,"1032":1,"1042":1,"1066":1,"1073":1,"1078":1,"1083":1,"1089":2,"1096":2,"1097":1,"1104":1,"1111":1,"1112":1,"1115":1,"1118":2,"1124":1,"1126":2,"1129":3,"1134":1,"1139":1,"1140":1,"1142":1,"1144":1,"1146":1,"1147":2,"1149":1,"1156":5,"1160":2,"1161":1,"1163":1,"1180":2,"1182":1,"1187":1,"1200":1,"1207":2,"1209":2,"1220":6,"1233":1,"1241":1,"1243":6,"1244":1,"1245":2,"1264":1,"1266":1,"1304":1,"1306":6,"1308":1,"1309":1,"1311":1,"1314":1,"1318":1,"1319":1,"1321":1,"1327":1,"1328":1,"1348":1,"1354":1,"1358":1,"1372":1,"1373":1,"1439":1,"1482":1,"1483":2,"1497":1,"1504":1,"1505":1,"1507":2,"1513":1,"1515":1,"1520":1,"1524":2,"1525":1,"1526":1,"1535":1,"1554":1,"1558":1,"1567":1,"1570":1,"1577":2,"1580":1,"1586":1,"1589":2,"1593":1,"1597":2,"1611":4,"1612":2,"1616":6,"1618":1,"1620":2,"1622":1,"1624":1,"1626":1,"1627":1,"1628":1,"1637":1,"1640":1,"1647":2,"1649":1,"1651":2}}],["qs",{"2":{"1551":1}}],["q=hello",{"2":{"1550":2,"1551":1}}],["q=vix",{"2":{"165":1,"871":1,"993":2,"1645":1}}],["qb",{"2":{"1319":4}}],["q",{"2":{"175":4,"528":1,"546":1,"871":3,"993":4,"1337":4,"1551":1,"1634":3,"1645":4}}],["quiet",{"2":{"528":1,"546":1,"562":1,"616":1,"674":1}}],["quick",{"0":{"165":1,"563":1,"809":1,"839":1,"1052":1,"1232":1,"1273":1,"1491":1,"1571":1,"1587":1,"1638":1},"1":{"1233":1,"1639":1,"1640":1,"1641":1,"1642":1,"1643":1,"1644":1,"1645":1,"1646":1,"1647":1},"2":{"136":1,"661":1,"835":1,"861":1,"1381":1}}],["quickly",{"0":{"109":1},"2":{"219":1,"375":1,"379":1,"653":1,"662":1,"948":1}}],["queuing",{"2":{"1376":1}}],["queued",{"2":{"335":1,"357":1,"378":1,"449":1,"1078":1}}],["queue",{"0":{"359":1},"2":{"253":1,"300":2,"307":2,"345":1,"347":1,"353":1,"355":1,"366":2,"374":2,"394":1,"445":1,"449":1,"452":1,"826":1,"830":1,"877":1,"883":1,"1033":1,"1035":2,"1036":2,"1043":1,"1046":1,"1103":1,"1361":1}}],["queries",{"2":{"681":1}}],["querybuilder",{"0":{"1319":1,"1337":1},"2":{"1319":2,"1324":1,"1337":1,"1350":1}}],["query>",{"2":{"558":1,"646":1,"680":1}}],["query",{"0":{"26":1,"175":1,"227":1,"915":1,"993":1,"1107":1,"1551":1,"1645":1},"2":{"24":1,"26":1,"114":1,"122":1,"131":1,"158":1,"175":5,"201":1,"207":1,"227":2,"507":2,"751":1,"871":4,"912":1,"914":4,"915":3,"925":1,"983":1,"993":3,"1100":1,"1101":1,"1308":1,"1490":1,"1536":1,"1551":2,"1552":1,"1580":1,"1634":3,"1645":1,"1650":1,"1670":1}}],["quote",{"2":{"1227":1}}],["quoted",{"0":{"1227":1},"2":{"1227":1,"1244":1}}],["quot",{"0":{"249":2,"1150":2},"2":{"87":2,"106":6,"130":2,"213":2,"255":2,"290":2,"385":4,"392":2,"393":2,"415":6,"417":2,"458":4,"459":2,"484":2,"491":2,"710":8,"723":2,"738":8,"739":8,"817":6,"871":2,"881":2,"919":4,"928":2,"945":2,"968":2,"975":2,"976":2,"1036":2,"1130":2,"1151":2,"1161":2,"1227":1,"1244":2,"1328":2,"1329":2,"1354":4,"1358":4,"1390":6,"1494":2,"1549":2,"1591":6,"1595":4}}],["65535",{"2":{"833":1,"1025":1,"1491":2}}],["64",{"2":{"310":1,"887":1,"1575":1,"1603":1}}],["6",{"0":{"142":1,"177":1,"183":1,"184":1,"185":1,"186":1,"328":1,"560":1,"832":1,"955":1,"1105":1,"1106":1,"1107":1,"1108":1,"1129":1,"1606":1},"1":{"184":1,"185":1,"186":1,"1106":1,"1107":1,"1108":1},"2":{"1576":1}}],["60",{"2":{"108":1,"512":2,"1379":1,"1627":1}}],["7231",{"2":{"920":1}}],["7",{"0":{"143":1,"178":1,"187":1,"561":1,"833":1,"956":1,"1109":1,"1130":1,"1607":1},"2":{"84":1,"325":1,"656":1,"729":1,"1300":1,"1613":1}}],[">claim",{"2":{"1379":1}}],[">close",{"2":{"86":2,"310":2,"424":1,"425":1,"477":1}}],[">callcount",{"2":{"1378":2}}],[">enqueue",{"2":{"1377":1,"1378":1,"1379":1}}],[">exec",{"2":{"1107":2,"1112":2,"1318":1,"1319":1,"1321":1}}],[">name",{"2":{"1320":1}}],[">next",{"2":{"1107":1,"1108":1}}],[">dump",{"2":{"1252":1}}],[">get",{"2":{"1219":1,"1223":1,"1229":1,"1235":1,"1236":1,"1377":1,"1378":1,"1379":3,"1612":1,"1613":3,"1614":1,"1621":2}}],[">prepare",{"2":{"1108":1}}],[">ping",{"2":{"1106":1}}],[">row",{"2":{"1107":1,"1108":1}}],[">query",{"2":{"1107":1,"1108":1,"1337":1}}],[">bind",{"2":{"1107":3,"1108":1,"1318":3,"1319":1,"1321":3,"1337":1}}],[">body",{"2":{"512":1}}],[">as",{"2":{"1615":1}}],[">async",{"2":{"86":4,"293":1,"310":4,"327":2,"424":3,"425":4,"476":3,"477":2}}],[">add",{"2":{"1022":1}}],[">headers",{"2":{"512":1}}],[">size",{"2":{"1615":1}}],[">second",{"2":{"1380":2}}],[">setrulefortarget",{"2":{"1378":1}}],[">setdefault",{"2":{"1377":1,"1379":1}}],[">setnotfoundhandler",{"2":{"1030":1}}],[">session",{"2":{"108":1,"1627":1}}],[">status",{"2":{"512":1,"1377":1,"1378":1,"1379":3}}],[">>>",{"2":{"488":1,"654":1,"655":4,"656":5,"657":2,"658":3,"660":2}}],[">>",{"2":{"487":1,"876":1,"1022":1}}],[">is",{"2":{"86":1,"310":2,"425":2,"476":1}}],[">=",{"2":{"84":1,"178":1,"1107":1,"1377":1,"1378":1,"1430":1}}],[">",{"2":{"84":1,"85":2,"86":1,"230":1,"310":3,"334":1,"351":1,"424":1,"437":1,"438":1,"443":2,"527":3,"641":1,"817":2,"876":2,"895":1,"1108":1,"1230":2,"1270":1,"1320":1,"1328":1,"1337":1,"1379":1,"1445":1,"1491":1,"1613":1,"1614":1,"1615":1,"1621":1}}],["+$",{"2":{"1587":1}}],["++calls",{"2":{"1380":1}}],["++i",{"2":{"84":1,"235":1,"325":1,"443":1,"1212":1,"1319":1,"1337":1,"1472":1,"1561":1}}],["+x",{"2":{"1122":1,"1123":1,"1129":1}}],["+=",{"2":{"84":1,"108":1,"310":3,"325":1,"1073":2,"1561":1,"1593":12,"1627":1}}],["+",{"0":{"80":1,"84":2,"424":2,"425":1,"1217":1,"1318":1,"1377":2,"1498":1,"1589":1,"1627":1},"2":{"108":2,"113":1,"174":1,"201":1,"207":1,"214":1,"227":1,"310":2,"345":1,"364":1,"427":1,"452":1,"471":1,"526":2,"527":3,"530":1,"613":2,"625":1,"649":1,"655":2,"656":2,"672":1,"678":1,"692":1,"783":1,"842":3,"871":1,"914":1,"931":3,"932":1,"937":1,"966":1,"971":1,"972":1,"992":1,"1004":1,"1073":1,"1076":1,"1095":1,"1158":1,"1198":1,"1199":1,"1249":1,"1309":2,"1319":1,"1337":2,"1350":1,"1377":4,"1379":2,"1408":1,"1438":1,"1444":1,"1463":1,"1468":1,"1495":1,"1510":3,"1539":1,"1550":1,"1563":1,"1587":2,"1591":1,"1592":2,"1593":1,"1613":1,"1616":1,"1621":1,"1626":1,"1627":2,"1634":1}}],["8601",{"0":{"1465":1},"2":{"1490":1,"1554":1,"1556":1}}],["8000",{"2":{"1433":1}}],["80",{"2":{"288":1,"293":1,"1126":1,"1127":1}}],["8080",{"2":{"7":1,"11":1,"12":1,"17":1,"23":1,"57":1,"64":1,"89":1,"90":3,"93":2,"94":1,"95":1,"96":1,"109":2,"112":1,"113":1,"114":1,"115":1,"120":1,"124":1,"128":1,"136":1,"146":1,"156":1,"165":4,"167":1,"179":1,"195":3,"196":1,"197":1,"201":1,"202":1,"207":1,"208":1,"227":2,"228":1,"229":1,"230":1,"235":1,"309":1,"310":2,"312":1,"313":1,"314":1,"424":1,"425":1,"547":1,"618":1,"801":1,"802":2,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"811":1,"812":1,"826":1,"829":1,"839":2,"871":4,"904":1,"905":2,"906":1,"907":1,"908":1,"909":1,"910":1,"947":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":2,"993":2,"994":2,"996":1,"997":1,"998":1,"1124":1,"1126":1,"1127":1,"1130":1,"1135":1,"1204":1,"1281":1,"1309":2,"1310":3,"1311":4,"1312":1,"1313":4,"1314":3,"1478":1,"1491":1,"1497":1,"1498":1,"1512":1,"1634":1,"1639":1,"1641":2,"1644":1,"1645":1}}],["8",{"0":{"188":1,"957":1,"1110":1,"1502":1,"1608":1},"1":{"1111":1,"1112":1},"2":{"70":1,"530":1,"1107":1,"1318":1,"1319":1,"1320":1,"1321":1,"1428":1,"1494":1,"1507":1,"1576":2,"1593":1,"1603":1,"1604":1,"1628":1}}],["31",{"2":{"1320":1}}],["3abc",{"2":{"711":1,"760":1}}],["37020",{"2":{"477":1,"617":1}}],["32>",{"2":{"1083":1,"1084":1,"1088":1}}],["32",{"2":{"442":1,"1022":1,"1083":1,"1087":1}}],["34",{"2":{"288":1,"1498":1}}],["304",{"2":{"923":1}}],["30",{"2":{"216":1,"512":2,"1168":1,"1213":1,"1273":1,"1320":1,"1428":1,"1432":1,"1465":1,"1615":1}}],["300",{"2":{"178":1,"826":1}}],["3",{"0":{"132":1,"139":1,"150":1,"169":1,"170":1,"171":1,"174":2,"175":1,"176":1,"177":1,"178":1,"186":1,"257":1,"270":1,"283":1,"314":1,"325":1,"336":1,"370":1,"444":1,"496":1,"557":1,"585":1,"668":1,"829":1,"952":1,"1019":1,"1037":1,"1058":1,"1085":1,"1102":1,"1108":1,"1126":1,"1151":1,"1163":1,"1227":1,"1320":1,"1379":1,"1466":1,"1558":1,"1591":1,"1603":1,"1614":1,"1622":1,"1635":1,"1641":1,"1670":1},"1":{"170":1,"171":1,"172":2,"173":2,"174":1,"175":1,"176":1,"177":1,"178":1,"1086":1,"1087":1,"1088":1,"1089":1,"1467":1,"1468":1},"2":{"47":1,"217":1,"235":1,"244":1,"246":1,"576":1,"655":2,"656":2,"657":2,"660":1,"721":1,"730":1,"733":1,"748":1,"758":2,"796":1,"961":1,"962":2,"1145":1,"1173":2,"1211":1,"1217":2,"1278":1,"1280":2,"1287":1,"1290":1,"1291":1,"1300":1,"1318":2,"1320":1,"1321":1,"1433":1,"1438":1,"1447":1,"1589":1,"1635":1}}],["3306",{"2":{"10":1,"826":1,"1106":1,"1107":1,"1108":1,"1112":1,"1318":1,"1319":1,"1320":1,"1321":1}}],["24",{"2":{"1663":1}}],["29",{"2":{"1319":1}}],["21x",{"2":{"1591":1}}],["21",{"2":{"1587":1,"1591":1}}],["213",{"2":{"1147":2}}],["216",{"2":{"288":1}}],["22",{"2":{"1112":1,"1321":1}}],["23e10",{"2":{"758":1}}],["26",{"2":{"658":2}}],["255",{"2":{"1107":1,"1112":1}}],["250ms",{"2":{"1076":1}}],["250",{"2":{"457":2,"1353":1,"1357":1,"1363":1,"1366":1,"1470":1}}],["25",{"2":{"195":1,"1318":1,"1363":1,"1366":1,"1480":1,"1602":1}}],["256",{"0":{"1083":1},"2":{"108":1,"1079":1,"1083":1,"1086":1,"1087":1,"1088":1,"1095":2,"1627":1}}],["2",{"0":{"45":1,"64":1,"131":1,"138":1,"149":1,"166":1,"171":1,"182":1,"185":1,"256":1,"269":1,"282":1,"313":1,"324":1,"335":1,"351":1,"369":1,"425":1,"443":1,"495":1,"556":1,"584":1,"667":1,"827":1,"951":1,"1018":1,"1036":1,"1057":1,"1076":1,"1084":1,"1098":1,"1107":1,"1124":1,"1150":1,"1162":1,"1197":1,"1216":1,"1226":1,"1319":1,"1340":1,"1378":1,"1463":1,"1557":1,"1590":1,"1602":1,"1613":1,"1621":1,"1628":1,"1634":1,"1640":1,"1669":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"167":1,"168":1,"172":1,"173":1,"828":1,"1099":1,"1100":1,"1101":1,"1125":1,"1198":1,"1199":1,"1200":1,"1201":1,"1217":1,"1218":1,"1219":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1464":1,"1465":1},"2":{"47":1,"49":1,"51":1,"108":1,"216":1,"217":1,"229":1,"235":1,"496":1,"576":1,"621":1,"634":3,"635":3,"644":4,"655":4,"657":2,"660":1,"765":1,"1107":2,"1142":1,"1145":1,"1146":1,"1149":1,"1173":2,"1177":1,"1182":1,"1192":1,"1194":1,"1200":1,"1217":2,"1218":2,"1219":3,"1230":1,"1238":1,"1252":1,"1280":2,"1290":1,"1294":1,"1318":2,"1320":1,"1321":1,"1428":2,"1433":2,"1434":1,"1447":1,"1529":1,"1551":1,"1561":1,"1615":1,"1627":1}}],["20world",{"2":{"1551":1}}],["20world+vix",{"2":{"1550":1}}],["204",{"2":{"923":1,"928":1,"979":1}}],["2048>",{"2":{"476":1}}],["2048",{"2":{"310":1,"512":1}}],["2025",{"2":{"1556":1}}],["202202l",{"2":{"716":1}}],["2026",{"2":{"174":1,"1112":1,"1461":1,"1465":1}}],["20+",{"2":{"244":1}}],["20",{"2":{"173":1,"1107":1,"1168":2,"1177":1,"1218":1,"1589":1,"1615":1,"1635":2}}],["20000",{"2":{"826":1}}],["2000",{"2":{"617":1,"826":1,"829":1,"1433":1}}],["200",{"2":{"35":1,"95":1,"123":1,"178":3,"309":1,"310":1,"512":1,"801":1,"904":1,"922":1,"923":1,"928":1,"966":1,"1132":1,"1521":1}}],["201",{"2":{"31":1,"96":1,"172":2,"173":1,"801":1,"814":1,"871":2,"904":1,"928":1,"991":1,"998":1}}],["48",{"2":{"1663":1}}],["446655440000",{"2":{"1573":1}}],["443",{"2":{"1126":1}}],["41d4",{"2":{"1573":1}}],["4122",{"2":{"1490":1,"1572":1,"1573":1,"1579":1}}],["413",{"2":{"230":1}}],["4u",{"2":{"1479":1}}],["45",{"2":{"758":1}}],["4>",{"2":{"477":1}}],["4xx",{"2":{"223":1}}],["4000",{"2":{"1433":1}}],["400",{"2":{"112":1,"114":1,"116":3,"158":1,"168":1,"217":1,"227":1,"228":1,"229":1,"871":1,"928":1,"1185":1,"1260":1}}],["403",{"2":{"87":1,"89":1,"157":1,"168":1,"197":1,"217":1,"1313":1}}],["401",{"2":{"87":1,"89":1,"101":1,"156":1,"168":1,"182":1,"197":1,"217":1,"950":1,"955":1,"956":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1}}],["4096",{"2":{"86":1,"826":1}}],["404",{"0":{"113":1,"980":1,"1030":1},"2":{"31":1,"113":1,"174":1,"217":1,"928":2,"937":1,"972":1,"991":1,"992":1,"1006":1,"1634":1,"1646":1}}],["4",{"0":{"140":1,"175":1,"179":1,"326":1,"497":1,"558":1,"586":1,"830":1,"953":1,"1020":1,"1038":1,"1090":1,"1103":1,"1127":1,"1164":1,"1321":1,"1469":1,"1592":1,"1604":1,"1615":1,"1636":1,"1642":1,"1671":1},"1":{"1091":1,"1092":1,"1093":1,"1094":1,"1470":1,"1471":1,"1643":1,"1644":1,"1645":1,"1646":1},"2":{"70":1,"235":1,"477":1,"538":1,"655":3,"656":1,"657":2,"758":1,"899":1,"1022":1,"1039":1,"1112":1,"1145":1,"1193":2,"1200":2,"1291":1,"1433":1,"1572":1,"1573":1,"1576":4,"1628":1,"1663":1}}],["422",{"2":{"217":1}}],["429",{"2":{"217":1}}],["42",{"2":{"42":1,"63":1,"130":2,"165":1,"174":1,"402":1,"443":1,"495":2,"732":1,"748":1,"758":1,"789":1,"795":2,"839":1,"871":1,"880":1,"918":1,"952":1,"990":1,"992":2,"1142":1,"1143":1,"1167":2,"1170":2,"1176":2,"1179":1,"1180":1,"1205":1,"1211":1,"1259":1,"1277":2,"1283":1,"1288":1,"1300":1,"1498":1,"1517":1,"1530":1,"1613":1,"1644":1}}],["kind",{"0":{"1390":1},"2":{"1377":1,"1378":1,"1379":1,"1380":7,"1384":1,"1387":1}}],["kinds",{"2":{"42":1,"668":1,"1038":1}}],["kampala",{"2":{"1238":1}}],["k2",{"0":{"1142":1},"1":{"1143":1,"1144":1},"2":{"1149":1}}],["k1",{"0":{"1142":1},"1":{"1143":1,"1144":1},"2":{"1149":1}}],["kp",{"2":{"1092":4,"1093":1,"1094":1}}],["k=v>",{"2":{"670":1}}],["known",{"2":{"477":1,"1146":1}}],["k",{"2":{"108":2,"1147":2,"1215":2,"1290":1,"1627":2}}],["keeping",{"2":{"732":1,"1319":1}}],["keeps",{"0":{"256":1},"2":{"126":1,"252":1,"256":1,"263":1,"265":1,"307":1,"422":1,"445":2,"449":1,"492":1,"511":1,"541":1,"612":1,"645":1,"652":1,"794":1,"832":1,"844":1,"1036":1,"1051":1,"1060":1,"1068":1,"1157":1,"1208":1,"1256":1,"1264":1,"1265":1,"1272":1,"1307":1,"1317":1,"1337":1,"1340":1,"1545":1,"1546":1,"1552":1,"1566":1}}],["keep",{"0":{"149":1,"1060":1},"2":{"110":1,"116":1,"142":1,"152":1,"161":1,"179":1,"200":2,"203":1,"211":1,"219":1,"226":1,"231":1,"235":1,"239":1,"252":1,"268":1,"281":1,"319":1,"320":1,"336":1,"339":1,"369":1,"376":1,"412":1,"427":1,"453":1,"462":1,"486":1,"504":1,"515":1,"793":1,"834":1,"848":1,"871":1,"873":1,"889":1,"925":1,"929":1,"932":1,"936":1,"943":1,"948":3,"959":1,"999":1,"1022":1,"1035":1,"1052":1,"1053":1,"1060":1,"1061":1,"1067":1,"1078":1,"1109":1,"1133":1,"1144":1,"1183":1,"1304":1,"1315":1,"1328":1,"1339":1,"1354":1,"1358":1,"1482":1,"1507":1,"1515":1,"1553":1,"1567":1,"1589":1,"1598":1,"1625":1,"1626":1,"1630":1}}],["kept",{"2":{"82":1,"1351":1,"1355":1}}],["key=",{"2":{"1512":1}}],["key1",{"2":{"1272":1}}],["key0",{"2":{"1272":1}}],["keygen",{"2":{"1092":1}}],["keyed",{"2":{"918":1,"937":1}}],["keywords",{"2":{"1058":1}}],["keyword",{"2":{"736":1,"739":1}}],["keys",{"0":{"506":1,"1151":1,"1227":1},"1":{"507":1},"2":{"44":1,"570":1,"627":1,"701":2,"710":1,"951":1,"1084":1,"1095":2,"1142":1,"1151":1,"1156":1,"1158":1,"1215":1,"1223":1,"1227":1,"1230":1,"1244":2,"1272":1,"1412":1,"1413":1,"1551":1,"1577":1}}],["key",{"0":{"194":1,"254":1,"275":1,"448":1,"1002":1,"1070":1,"1087":1,"1092":1,"1151":1,"1167":1,"1172":1,"1237":1,"1393":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"1":{"255":1,"256":1,"257":1,"276":1,"277":1,"278":1,"1003":1,"1004":1,"1071":1},"2":{"43":1,"44":9,"91":1,"108":2,"140":1,"175":1,"185":2,"194":2,"218":1,"223":1,"375":1,"504":3,"505":2,"507":3,"512":4,"568":1,"571":1,"627":2,"698":1,"699":2,"701":1,"829":1,"833":1,"935":1,"936":1,"937":1,"942":1,"982":1,"1033":1,"1084":2,"1087":2,"1088":3,"1089":3,"1090":1,"1092":2,"1093":1,"1094":2,"1095":2,"1099":1,"1100":1,"1107":1,"1112":1,"1139":1,"1140":1,"1142":1,"1156":1,"1157":1,"1161":1,"1164":1,"1167":4,"1176":1,"1180":5,"1210":1,"1227":2,"1237":2,"1244":1,"1281":3,"1294":1,"1296":1,"1311":10,"1329":1,"1387":1,"1413":2,"1439":1,"1477":1,"1512":1,"1520":1,"1541":1,"1551":2,"1595":1,"1620":1,"1627":2}}],["kvpairs",{"2":{"1521":1}}],["kv|json|json",{"2":{"674":1}}],["kv",{"0":{"48":1,"1150":1,"1521":1},"2":{"48":1,"108":1,"837":1,"1146":1,"1147":1,"1150":3,"1156":1,"1157":1,"1216":1,"1627":1}}],["kvs>",{"2":{"1270":1}}],["kvs",{"0":{"44":1,"1213":1,"1272":1,"1293":1},"1":{"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1},"2":{"41":1,"44":1,"70":1,"74":1,"108":5,"1183":1,"1210":1,"1213":1,"1214":2,"1215":2,"1268":1,"1270":1,"1273":1,"1288":1,"1301":1,"1303":1,"1307":1,"1627":5,"1628":1}}],["uuids",{"2":{"1579":1}}],["uuid4",{"0":{"1572":1},"1":{"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1},"2":{"1574":1,"1577":1,"1579":1}}],["uuid",{"0":{"1572":1,"1573":1,"1577":1},"1":{"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1},"2":{"1490":2,"1492":2,"1572":2,"1573":1,"1574":2,"1575":1,"1577":1}}],["utc",{"0":{"1462":1,"1463":1,"1464":1,"1465":1,"1556":1,"1566":1},"1":{"1464":1,"1465":1},"2":{"1458":1,"1459":1,"1462":1,"1463":1,"1464":2,"1465":1,"1473":1,"1490":1,"1554":2,"1556":1,"1566":1}}],["utility",{"2":{"1068":1,"1554":1}}],["utilities",{"0":{"1116":1,"1474":1},"1":{"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1481":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1,"1488":1},"2":{"480":1,"753":1,"768":1,"794":1,"921":1,"931":1,"1096":1,"1306":1,"1490":1,"1536":1}}],["utilization",{"2":{"204":1}}],["utils",{"0":{"140":1,"1489":1,"1536":1,"1572":1,"1580":1},"1":{"1490":1,"1491":1,"1492":1,"1493":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1},"2":{"135":1,"140":3,"817":2,"835":2,"837":1,"838":1,"862":2,"869":1,"870":1,"927":1,"1474":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1485":1,"1486":1,"1487":1,"1491":5,"1494":2,"1495":1,"1496":1,"1497":4,"1498":3,"1506":3,"1508":1,"1509":2,"1511":3,"1512":1,"1513":2,"1514":1,"1515":1,"1517":2,"1518":1,"1519":1,"1521":2,"1522":2,"1526":1,"1529":2,"1537":2,"1539":2,"1541":3,"1542":3,"1543":2,"1545":2,"1546":2,"1547":2,"1549":2,"1550":2,"1551":2,"1553":3,"1554":2,"1559":2,"1561":3,"1562":2,"1563":2,"1564":2,"1574":3,"1585":4,"1586":3,"1587":7,"1589":4,"1590":2,"1591":1,"1592":1,"1593":2}}],["uow",{"2":{"1321":3,"1335":4,"1336":1}}],["ull",{"2":{"1287":1,"1300":1}}],["ultra",{"2":{"526":1}}],["ufw",{"2":{"1126":2}}],["u",{"2":{"918":1,"1125":1,"1132":1,"1135":1,"1155":3,"1320":16,"1328":11,"1603":4}}],["umbrella",{"0":{"865":1},"2":{"865":1,"1096":1,"1324":1}}],["ua",{"2":{"805":2,"871":2,"908":2,"994":2}}],["ubig",{"2":{"1300":1,"1305":1}}],["ubsan",{"2":{"667":1,"672":3}}],["ubuntu",{"0":{"245":1}}],["ug",{"2":{"658":1,"1273":1}}],["urls",{"2":{"1354":1,"1358":1,"1502":1}}],["url",{"0":{"1550":1},"2":{"932":1,"936":1,"1391":1,"1490":1,"1495":2,"1536":1,"1550":2,"1551":1,"1580":1}}],["url>",{"2":{"618":1}}],["uri",{"2":{"610":1,"1347":1}}],["uri>",{"2":{"610":1,"1347":1}}],["udp",{"0":{"463":1,"466":1,"467":1,"468":1,"474":1,"476":1,"477":1,"617":1},"1":{"464":1,"465":1,"466":1,"467":1,"468":1,"469":2,"470":2,"471":2,"472":2,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"479":1},"2":{"251":1,"265":1,"272":1,"295":1,"463":4,"464":1,"466":2,"467":2,"468":6,"471":1,"474":3,"476":5,"477":4,"478":2,"479":1,"615":1}}],["uint",{"0":{"1479":1},"2":{"1479":1,"1483":1,"1486":1,"1490":1}}],["uintptr",{"2":{"1309":1}}],["uint64",{"2":{"786":2,"791":2,"793":1,"884":3,"1331":1,"1333":1,"1334":1,"1564":1}}],["uint32",{"2":{"747":1,"786":1,"1387":1,"1428":3,"1436":1,"1437":1,"1438":1}}],["uint8",{"2":{"298":1,"705":1,"1083":1,"1084":1,"1088":2,"1385":1,"1447":2}}],["uint16",{"2":{"288":1,"289":1,"310":2,"415":1,"466":1}}],["ui",{"0":{"961":1,"968":1},"1":{"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1},"2":{"233":1,"703":1,"710":1,"931":1,"939":4,"961":1,"962":5,"968":3,"1351":1,"1353":1,"1355":1,"1357":1,"1593":1}}],["upgrade",{"2":{"1661":1}}],["upgrades",{"2":{"320":1,"521":1,"540":1,"651":1}}],["updating",{"2":{"1365":1}}],["updatebyid",{"2":{"1320":1,"1333":1}}],["update",{"0":{"1129":1,"1319":1,"1333":1},"2":{"245":1,"636":1,"640":1,"974":1,"1038":1,"1100":1,"1123":1,"1128":1,"1133":1,"1319":1,"1328":1}}],["updates",{"2":{"233":1,"632":1,"642":1,"644":1,"649":1,"974":1,"1361":1,"1404":1}}],["updated",{"0":{"1395":1},"2":{"161":1,"391":1,"1387":1,"1404":1}}],["upper",{"2":{"1039":1,"1432":1,"1440":1}}],["uppercased",{"2":{"507":1}}],["upstream",{"2":{"787":1,"1129":1}}],["up",{"2":{"513":2,"528":2,"533":1,"942":1,"943":1,"1033":1,"1036":1,"1068":1,"1071":1,"1111":1,"1112":2,"1367":1}}],["uploads",{"0":{"1133":1},"2":{"193":1,"1133":1,"1254":1}}],["untrusted",{"2":{"1268":1}}],["until",{"2":{"309":1,"310":1,"318":1,"344":1,"449":1,"811":1,"879":1,"897":1,"1013":1,"1038":1,"1045":1,"1073":2,"1482":1}}],["uncaught",{"2":{"1062":1}}],["unconditionally",{"2":{"845":1}}],["unpredictable",{"2":{"838":1}}],["unset",{"2":{"844":1}}],["unsigned",{"0":{"791":1},"2":{"786":1,"791":1,"1305":1,"1474":1,"1479":1,"1486":1}}],["unsafe",{"2":{"779":1,"838":1}}],["unlike",{"2":{"755":1}}],["unless",{"2":{"35":1,"123":1,"143":1,"271":1,"343":1,"344":1,"378":1,"393":1,"507":1,"601":1,"1025":1,"1335":1,"1483":1,"1522":1}}],["unicode",{"2":{"1541":1}}],["unitofwork",{"0":{"1321":1,"1335":1},"1":{"1336":1},"2":{"1321":2,"1324":1,"1335":2,"1350":1}}],["unit",{"2":{"1035":1,"1109":1,"1124":1,"1323":1,"1365":1,"1382":1,"1407":1,"1411":1,"1670":1}}],["uniform",{"2":{"912":1}}],["unix",{"0":{"1558":1},"2":{"842":1,"1490":1,"1523":1,"1554":1,"1558":1,"1564":2,"1567":1,"1569":2,"1571":1}}],["union",{"2":{"723":1,"1058":1,"1534":1}}],["unique",{"2":{"86":1,"292":1,"310":1,"419":1,"420":1,"421":2,"425":1,"474":1,"893":1,"899":1,"1087":1,"1389":1}}],["unexpected",{"0":{"720":1,"722":1},"2":{"706":1,"716":2,"720":1,"722":2,"787":1,"861":1}}],["unordered",{"2":{"507":1,"512":1,"1140":1,"1380":3,"1551":2,"1552":1,"1580":1,"1583":2,"1586":1,"1587":1}}],["unobserved",{"2":{"390":1}}],["unhandled",{"2":{"390":1,"393":1,"404":1}}],["unblock",{"2":{"377":1}}],["unbounded",{"2":{"310":1,"1254":1,"1432":1}}],["undefines",{"2":{"1049":1,"1525":1}}],["undefined",{"2":{"375":1,"749":1,"780":1}}],["underneath",{"2":{"873":1}}],["underflow",{"2":{"705":1,"706":1,"755":1,"759":1,"760":1,"783":1,"787":1}}],["underlying",{"2":{"417":1,"472":1,"897":1}}],["understanding",{"2":{"126":1}}],["understand",{"2":{"105":1,"119":1,"196":1}}],["under",{"0":{"185":1},"2":{"60":1,"89":1,"142":1,"213":1,"819":1,"837":1,"872":1,"958":1,"967":1,"1308":1,"1311":1,"1351":1,"1355":1,"1504":1,"1553":1,"1650":1}}],["unwind",{"2":{"368":1}}],["unambiguous",{"2":{"1305":1}}],["unavailable",{"2":{"217":1,"1059":1}}],["unauthorized",{"2":{"182":1,"217":1,"950":1,"955":1,"956":2,"1310":1,"1311":1,"1312":1,"1314":1}}],["unnecessary",{"0":{"150":1},"2":{"152":1}}],["unknownenumvalue",{"2":{"705":1,"706":1,"775":1,"798":1}}],["unknown",{"2":{"141":1,"177":1,"980":1,"1299":1,"1628":2}}],["usable",{"2":{"417":1,"505":1,"836":1,"1099":1}}],["usage",{"0":{"11":1,"280":1,"307":1,"330":1,"348":1,"367":1,"401":1,"423":1,"441":1,"512":1,"517":1,"525":1,"544":1,"566":1,"574":1,"591":1,"603":1,"614":1,"623":1,"631":1,"639":1,"648":1,"664":1,"680":1,"687":1,"695":1,"711":1,"721":1,"743":1,"748":1,"860":1,"922":1,"1021":1,"1050":1,"1074":1,"1095":1,"1341":1,"1371":1,"1438":1,"1451":1,"1473":1,"1497":1,"1529":1,"1574":1,"1610":1},"1":{"281":1,"282":1,"283":1,"368":1,"369":1,"370":1,"402":1,"403":1,"424":1,"425":1,"442":1,"443":1,"444":1,"861":1,"862":1,"1022":1,"1023":1,"1075":1,"1076":1,"1372":1,"1373":1,"1452":1,"1453":1},"2":{"1":1,"38":1,"103":1,"339":1,"340":1,"341":1,"539":1,"587":1,"727":1,"831":1,"870":1,"950":1,"1050":1,"1458":1,"1611":1,"1650":1}}],["usually",{"2":{"218":1,"265":1,"370":1,"478":1,"1150":1,"1328":2}}],["using",{"0":{"171":1,"188":1,"338":1,"369":1,"1150":1,"1569":1},"1":{"172":1,"173":1,"339":1,"340":1,"341":1,"342":1},"2":{"10":1,"23":1,"42":1,"43":1,"44":1,"46":1,"52":1,"57":1,"64":1,"84":2,"85":2,"86":2,"87":1,"89":1,"93":1,"94":1,"95":1,"96":1,"101":1,"102":1,"106":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"126":1,"128":1,"136":1,"140":1,"146":1,"156":1,"164":1,"173":1,"182":1,"199":1,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":1,"230":1,"235":1,"247":1,"281":2,"282":1,"283":1,"293":1,"308":1,"310":2,"323":2,"343":1,"348":1,"368":1,"376":1,"392":1,"402":1,"404":1,"406":2,"424":1,"425":1,"442":1,"443":1,"453":1,"457":1,"459":1,"461":1,"476":1,"477":1,"492":1,"494":1,"503":1,"512":5,"524":1,"612":1,"624":1,"668":1,"686":1,"701":1,"711":1,"716":2,"717":1,"731":1,"743":1,"744":1,"748":1,"765":1,"770":1,"776":1,"789":1,"790":1,"791":1,"792":1,"794":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"817":1,"821":1,"839":1,"862":2,"871":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"927":1,"937":1,"938":1,"942":1,"946":1,"947":1,"952":1,"954":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1011":1,"1017":1,"1019":1,"1020":1,"1033":1,"1044":1,"1064":1,"1073":1,"1083":1,"1106":1,"1107":1,"1108":1,"1112":1,"1118":1,"1137":1,"1159":1,"1182":1,"1189":1,"1198":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":2,"1222":1,"1242":2,"1244":2,"1246":1,"1262":1,"1267":1,"1280":2,"1309":2,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1318":1,"1319":1,"1320":1,"1321":1,"1324":1,"1335":2,"1353":1,"1357":1,"1376":1,"1377":4,"1378":4,"1379":4,"1397":1,"1404":1,"1425":1,"1478":1,"1479":1,"1480":1,"1491":1,"1529":1,"1559":1,"1583":1,"1586":2,"1587":6,"1600":1,"1602":1,"1611":1,"1612":2,"1613":2,"1614":2,"1615":2,"1621":1,"1627":1,"1628":1,"1634":1,"1639":1}}],["uses",{"2":{"220":1,"263":1,"266":1,"279":1,"290":1,"305":1,"393":1,"418":1,"445":1,"447":1,"498":2,"681":1,"688":1,"716":1,"779":1,"787":1,"795":1,"796":1,"833":1,"874":1,"920":1,"933":2,"935":2,"936":2,"937":1,"962":1,"968":1,"1009":1,"1011":1,"1025":1,"1040":1,"1048":1,"1056":1,"1060":1,"1077":1,"1115":1,"1165":1,"1309":1,"1310":1,"1315":1,"1331":1,"1333":1,"1339":1,"1362":1,"1480":1,"1482":2,"1495":1,"1515":1,"1534":1,"1552":1,"1557":1,"1558":1,"1566":1,"1575":1,"1592":1}}],["used",{"0":{"716":1,"1488":1},"2":{"97":1,"189":1,"232":1,"251":1,"253":1,"260":1,"286":1,"297":1,"331":1,"413":1,"415":1,"435":1,"502":1,"555":1,"601":1,"618":1,"703":1,"713":1,"720":1,"723":1,"726":1,"813":1,"821":1,"827":1,"839":2,"851":1,"871":2,"893":1,"912":3,"913":1,"921":1,"970":1,"980":1,"1001":1,"1004":1,"1028":1,"1033":1,"1035":2,"1037":1,"1039":1,"1066":1,"1089":1,"1096":1,"1139":1,"1361":1,"1366":2,"1393":1,"1399":1,"1413":1,"1417":1,"1425":1,"1442":1,"1450":1,"1488":1,"1489":1,"1490":1,"1533":1,"1536":1,"1566":1,"1584":1}}],["useful",{"2":{"53":1,"328":1,"385":1,"431":1,"577":1,"708":1,"823":1,"828":1,"879":1,"897":1,"935":1,"969":1,"1015":1,"1116":1,"1140":2,"1233":1,"1314":1,"1327":1,"1474":1,"1552":1,"1624":1,"1627":1,"1628":1}}],["username",{"2":{"1589":2}}],["user=www",{"2":{"1124":1}}],["user>",{"2":{"952":2,"1320":2,"1328":1,"1603":2}}],["userid",{"2":{"916":1}}],["users",{"2":{"113":1,"130":2,"165":1,"174":1,"251":1,"265":1,"612":1,"818":3,"821":1,"839":2,"844":1,"871":3,"914":1,"916":1,"972":1,"974":2,"975":2,"976":1,"982":2,"992":2,"1107":3,"1108":1,"1112":3,"1226":1,"1316":1,"1318":1,"1319":1,"1320":1,"1321":1,"1324":1,"1337":1,"1349":1,"1634":1,"1644":2}}],["user",{"0":{"1260":1},"2":{"27":1,"52":2,"77":1,"89":2,"107":1,"113":2,"138":2,"141":2,"158":1,"174":2,"176":2,"188":1,"255":1,"269":1,"274":1,"287":1,"412":1,"427":1,"445":1,"507":1,"599":1,"600":1,"610":2,"611":1,"658":2,"703":1,"710":1,"712":1,"731":4,"776":3,"805":2,"818":1,"826":1,"871":3,"888":1,"900":1,"908":2,"912":1,"925":1,"952":3,"955":1,"974":2,"990":1,"992":2,"994":2,"1104":1,"1106":1,"1107":1,"1108":1,"1112":1,"1115":1,"1117":1,"1122":2,"1124":1,"1129":2,"1142":2,"1143":1,"1155":2,"1160":1,"1167":2,"1176":3,"1180":2,"1213":5,"1214":4,"1219":3,"1223":4,"1225":1,"1230":3,"1231":1,"1235":1,"1236":1,"1238":3,"1240":1,"1241":2,"1252":1,"1257":1,"1259":2,"1260":1,"1273":2,"1301":4,"1314":7,"1320":7,"1322":1,"1328":5,"1347":2,"1348":1,"1513":2,"1517":1,"1521":1,"1598":1,"1603":4,"1607":1,"1628":1,"1629":1,"1634":2}}],["use",{"0":{"137":1,"233":1,"549":1,"662":1,"902":1,"959":1,"984":1,"1066":1,"1156":1,"1207":1,"1220":1,"1243":1,"1257":1,"1306":1,"1577":1,"1616":1,"1622":1},"2":{"0":1,"37":1,"57":1,"59":1,"60":1,"61":1,"62":1,"64":1,"65":2,"80":1,"81":2,"105":1,"110":1,"136":1,"140":1,"142":1,"151":3,"161":1,"162":2,"174":1,"181":1,"184":2,"190":1,"191":1,"197":1,"210":1,"218":1,"233":1,"236":1,"247":1,"266":1,"273":1,"276":2,"279":2,"324":1,"325":1,"330":2,"343":1,"364":1,"377":1,"383":1,"410":1,"425":1,"433":1,"461":1,"462":1,"477":1,"501":1,"507":1,"513":1,"670":2,"675":1,"690":1,"715":2,"747":1,"777":1,"817":4,"818":1,"835":1,"836":1,"838":1,"844":1,"855":1,"864":1,"870":1,"871":1,"874":1,"889":2,"902":1,"929":3,"940":1,"942":1,"943":1,"948":2,"950":1,"952":1,"959":1,"966":1,"984":1,"999":1,"1010":1,"1017":1,"1031":1,"1032":1,"1052":3,"1061":1,"1078":1,"1079":1,"1083":1,"1084":1,"1090":1,"1096":1,"1104":1,"1109":1,"1117":1,"1120":1,"1129":1,"1134":1,"1139":1,"1146":1,"1156":3,"1161":1,"1164":1,"1188":1,"1194":1,"1196":1,"1207":3,"1209":2,"1220":2,"1227":1,"1233":1,"1241":1,"1243":3,"1251":2,"1252":1,"1266":1,"1306":2,"1307":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":2,"1314":1,"1319":1,"1320":1,"1321":1,"1336":1,"1339":1,"1372":1,"1373":1,"1381":1,"1458":1,"1472":1,"1473":4,"1515":1,"1557":1,"1558":1,"1561":1,"1562":1,"1563":1,"1564":1,"1567":1,"1572":1,"1577":2,"1589":1,"1600":1,"1603":1,"1605":2,"1606":1,"1610":4,"1611":1,"1612":1,"1616":2,"1617":1,"1620":2,"1623":1,"1630":1,"1638":1}}],["→",{"0":{"1602":1},"2":{"34":2,"41":3,"69":2,"74":2,"134":3,"135":2,"139":2,"145":4,"203":3,"322":6,"357":2,"668":2,"697":3,"836":2,"842":2,"972":1,"982":1,"1054":4,"1210":3,"1216":6,"1406":4,"1434":2,"1437":1,"1576":2,"1602":1}}],["jump",{"2":{"1558":1,"1569":1}}],["just",{"2":{"369":1,"662":1,"767":1,"780":1,"1458":1,"1507":1,"1639":1}}],["jpath",{"0":{"1219":1,"1221":1,"1223":1,"1243":1},"1":{"1222":1,"1223":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1},"2":{"1221":2,"1222":1,"1223":3,"1244":1}}],["j3",{"2":{"1183":1}}],["j1",{"2":{"1183":1}}],["javascript",{"2":{"838":1}}],["john",{"2":{"1600":1}}],["journalctl",{"2":{"1132":1,"1135":1}}],["journald",{"2":{"853":1,"1120":1}}],["job>",{"2":{"359":1}}],["job",{"0":{"359":1},"2":{"347":1,"350":1,"351":1,"359":1,"392":1,"406":2,"432":5,"433":1,"443":1,"445":1,"449":1,"452":2,"457":2,"1044":1}}],["jobs",{"2":{"253":1,"355":1,"357":1,"359":1,"428":1,"443":1,"445":1,"449":1,"528":2,"530":1,"546":2,"669":2,"931":1,"942":1,"943":1}}],["joinable",{"2":{"1077":1}}],["join",{"0":{"1014":1,"1544":1,"1547":1},"1":{"1545":1,"1546":1,"1547":1},"2":{"266":1,"282":1,"381":1,"424":1,"1013":1,"1490":1,"1536":1,"1547":2}}],["joining",{"2":{"264":1}}],["joins",{"2":{"257":1,"264":1,"271":1,"436":1,"813":1,"935":1,"943":1,"1014":1,"1027":1,"1039":1,"1046":2,"1071":2,"1076":1,"1077":1,"1364":1}}],["jitter",{"0":{"1434":1},"2":{"217":1,"1078":1,"1427":1,"1428":1,"1434":2}}],["jwt",{"2":{"91":1}}],["jget",{"0":{"52":1,"1229":1,"1230":1},"2":{"52":1,"1219":2,"1223":1,"1229":1,"1230":1,"1235":1,"1236":1,"1237":1,"1240":2,"1241":2,"1244":2}}],["js",{"0":{"944":1,"945":1},"2":{"164":1,"835":1,"857":1,"871":4,"930":1,"933":1,"939":1,"962":2,"968":2,"1629":1,"1651":1,"1657":1}}],["jset",{"0":{"52":1,"1231":1},"2":{"52":1,"1219":3,"1223":1,"1231":1,"1238":3,"1241":1,"1244":1}}],["jsonpath",{"2":{"1221":1,"1243":1}}],["json>>",{"2":{"1147":1}}],["json>",{"2":{"603":1,"609":1,"1341":1}}],["json",{"0":{"29":1,"33":1,"40":1,"41":1,"45":1,"94":1,"150":1,"177":1,"193":1,"202":1,"208":1,"228":1,"804":1,"869":1,"907":1,"917":1,"966":1,"989":1,"990":1,"997":1,"1136":1,"1139":2,"1140":1,"1145":1,"1158":1,"1167":1,"1168":1,"1181":2,"1182":1,"1183":1,"1188":1,"1191":1,"1197":1,"1198":1,"1205":1,"1206":1,"1209":1,"1210":1,"1216":1,"1229":2,"1230":2,"1231":1,"1245":1,"1259":1,"1266":1,"1306":1,"1522":1},"1":{"42":1,"43":1,"44":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"1137":1,"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":2,"1147":2,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":3,"1183":3,"1184":1,"1185":1,"1186":1,"1187":1,"1189":1,"1190":1,"1192":1,"1193":1,"1194":1,"1195":1,"1196":1,"1198":1,"1199":1,"1200":1,"1201":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1246":1,"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1},"2":{"0":1,"1":1,"3":1,"4":2,"10":2,"11":1,"12":1,"24":1,"29":3,"33":1,"34":3,"35":1,"37":1,"38":1,"40":7,"41":5,"42":3,"43":3,"44":2,"45":4,"46":3,"51":2,"53":3,"70":2,"74":1,"75":1,"77":1,"78":1,"89":4,"92":1,"94":2,"95":3,"96":1,"97":1,"102":1,"107":1,"108":9,"112":1,"113":2,"114":2,"115":2,"116":2,"123":1,"124":1,"128":2,"130":1,"131":1,"132":1,"136":1,"138":1,"139":1,"140":1,"146":1,"148":1,"150":1,"152":1,"156":2,"157":2,"158":2,"159":2,"160":1,"167":1,"170":1,"172":1,"173":2,"174":3,"175":1,"176":2,"177":7,"178":1,"179":1,"182":1,"186":2,"187":4,"188":2,"193":2,"197":6,"201":1,"202":2,"207":1,"208":2,"211":1,"213":1,"222":1,"227":2,"228":4,"229":5,"230":2,"236":2,"238":1,"507":1,"511":3,"512":1,"576":1,"609":1,"612":2,"636":1,"653":1,"658":1,"662":1,"676":1,"688":1,"693":1,"697":3,"801":3,"802":1,"804":2,"805":1,"806":1,"807":1,"808":2,"814":1,"816":1,"825":2,"826":3,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"836":1,"837":1,"871":17,"904":3,"905":1,"907":2,"908":1,"909":1,"910":1,"911":2,"912":2,"914":3,"917":1,"919":4,"921":1,"922":2,"927":1,"937":1,"939":1,"942":1,"946":1,"947":1,"956":2,"962":2,"966":1,"967":1,"968":2,"969":1,"980":2,"987":1,"989":2,"990":2,"991":2,"992":2,"993":1,"994":1,"996":1,"997":3,"998":1,"999":1,"1006":1,"1104":1,"1116":4,"1120":1,"1136":3,"1137":3,"1139":3,"1140":3,"1142":1,"1144":1,"1145":1,"1146":3,"1147":7,"1149":1,"1150":2,"1153":1,"1154":1,"1155":4,"1157":3,"1158":5,"1159":2,"1160":1,"1161":2,"1162":1,"1164":1,"1165":3,"1167":3,"1168":2,"1170":1,"1171":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1,"1181":1,"1182":6,"1183":7,"1185":1,"1186":1,"1187":6,"1188":4,"1189":2,"1190":2,"1192":1,"1196":2,"1198":2,"1199":3,"1200":2,"1201":3,"1202":2,"1204":1,"1208":2,"1209":7,"1210":4,"1211":2,"1212":2,"1213":2,"1214":2,"1215":2,"1216":2,"1217":3,"1218":5,"1219":4,"1220":3,"1221":3,"1222":2,"1223":2,"1229":2,"1230":3,"1231":1,"1235":2,"1236":1,"1237":2,"1238":1,"1240":2,"1241":2,"1243":1,"1244":3,"1245":3,"1246":2,"1248":2,"1249":1,"1251":3,"1252":2,"1254":3,"1255":1,"1256":2,"1260":1,"1261":2,"1262":1,"1263":3,"1265":2,"1266":6,"1267":2,"1268":2,"1271":1,"1272":1,"1273":1,"1304":1,"1306":3,"1307":2,"1309":1,"1310":2,"1311":3,"1312":3,"1313":3,"1314":3,"1346":2,"1349":2,"1377":2,"1378":2,"1379":2,"1411":1,"1419":1,"1420":3,"1487":1,"1522":4,"1523":1,"1542":2,"1580":1,"1593":7,"1611":2,"1612":2,"1613":2,"1614":2,"1615":2,"1617":1,"1619":3,"1621":1,"1622":1,"1625":1,"1626":3,"1627":9,"1628":5,"1629":1,"1634":4,"1639":2,"1641":2,"1644":1,"1645":1,"1646":1}}],["j2",{"2":{"51":1,"1183":1,"1218":2}}],["j",{"0":{"1167":1,"1168":1},"2":{"29":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":3,"177":9,"202":2,"208":2,"228":3,"229":7,"528":1,"530":1,"546":1,"669":1,"871":3,"990":3,"1146":2,"1167":5,"1168":4,"1170":3,"1171":1,"1172":1,"1173":1,"1175":2,"1176":3,"1179":2,"1180":2,"1182":2,"1192":2,"1193":1,"1194":1,"1195":1,"1196":1,"1198":2,"1200":2,"1201":3,"1202":1,"1217":2,"1218":2,"1219":5,"1223":4,"1229":2,"1230":3,"1231":2,"1235":2,"1236":1,"1237":2,"1238":5,"1240":1,"1241":1,"1251":1,"1259":2,"1263":1}}],["xxxx",{"2":{"1573":3}}],["xxxxxxxxxxxx",{"2":{"1573":1}}],["xxxxxxxx",{"2":{"1573":1}}],["xx",{"2":{"1550":1}}],["xs",{"2":{"1145":2,"1177":3,"1280":3,"1288":3,"1290":9,"1291":2}}],["xss",{"2":{"1063":1}}],["x+1",{"2":{"660":1}}],["x=3",{"2":{"660":1}}],["xdg",{"2":{"569":1}}],["x",{"2":{"123":1,"160":2,"181":1,"182":1,"195":4,"197":1,"404":2,"495":2,"507":1,"552":2,"654":2,"656":6,"802":1,"839":1,"880":1,"905":1,"938":1,"964":2,"966":1,"968":1,"969":2,"1102":4,"1127":4,"1134":2,"1284":2,"1296":1,"1297":1,"1309":2,"1310":3,"1311":4,"1312":2,"1313":6,"1314":4,"1561":2,"1615":1}}],["x26",{"2":{"23":2,"29":1,"34":2,"56":1,"57":3,"63":1,"64":6,"70":4,"72":1,"73":1,"80":2,"84":1,"85":3,"86":8,"89":6,"93":2,"94":2,"95":2,"96":2,"108":23,"112":2,"113":2,"114":2,"115":2,"122":2,"124":2,"128":2,"130":2,"132":4,"136":2,"138":2,"139":2,"146":2,"152":2,"156":2,"157":2,"158":2,"160":2,"165":2,"167":2,"170":2,"172":2,"173":6,"174":4,"175":2,"176":4,"177":9,"178":4,"179":3,"181":2,"182":4,"188":3,"201":2,"202":3,"207":2,"208":3,"227":2,"228":3,"229":3,"230":2,"235":2,"259":1,"260":1,"292":1,"293":2,"310":5,"323":1,"326":2,"334":4,"336":4,"337":2,"339":2,"340":2,"341":2,"342":2,"353":1,"368":3,"369":1,"387":1,"404":1,"406":3,"408":3,"416":1,"419":1,"421":2,"424":1,"425":1,"435":1,"438":2,"442":3,"443":3,"444":1,"451":2,"453":2,"457":2,"459":2,"468":2,"474":1,"476":1,"477":1,"487":1,"488":1,"494":2,"495":2,"496":2,"497":1,"507":1,"512":1,"711":1,"727":1,"777":1,"801":6,"802":2,"803":2,"804":2,"805":2,"806":2,"807":2,"809":2,"814":4,"815":4,"816":2,"817":4,"818":2,"828":1,"831":1,"832":1,"871":21,"876":4,"904":6,"905":2,"906":2,"907":2,"908":2,"909":2,"910":2,"913":2,"918":1,"921":1,"922":4,"947":2,"950":3,"952":1,"953":1,"987":2,"988":2,"989":2,"990":2,"991":4,"992":2,"993":6,"994":2,"996":2,"997":2,"998":2,"1006":1,"1030":2,"1075":2,"1104":1,"1107":2,"1108":1,"1112":4,"1147":1,"1155":1,"1202":1,"1214":2,"1215":1,"1241":1,"1261":1,"1288":2,"1291":1,"1301":2,"1309":4,"1310":4,"1311":6,"1312":6,"1313":6,"1314":5,"1318":2,"1319":2,"1320":4,"1321":2,"1328":3,"1330":1,"1331":1,"1333":1,"1336":1,"1337":1,"1353":4,"1357":4,"1370":1,"1372":1,"1378":1,"1379":1,"1380":2,"1414":4,"1418":10,"1445":3,"1449":1,"1453":1,"1509":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1517":1,"1518":1,"1519":1,"1521":1,"1522":1,"1526":1,"1551":1,"1586":2,"1587":2,"1593":2,"1600":1,"1603":3,"1604":2,"1605":2,"1606":1,"1609":1,"1612":1,"1613":1,"1614":1,"1615":1,"1621":1,"1622":1,"1627":23,"1628":6,"1634":6,"1639":4,"1643":2,"1644":2,"1645":2,"1646":2}}],["x3c",{"2":{"3":1,"11":10,"12":2,"15":1,"23":1,"41":1,"42":6,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"63":3,"64":2,"68":1,"70":3,"79":1,"84":21,"85":22,"86":50,"89":2,"93":1,"94":1,"95":2,"96":1,"108":13,"112":1,"113":2,"114":2,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":2,"177":2,"178":1,"181":2,"188":3,"201":2,"202":1,"207":2,"208":2,"227":2,"228":1,"229":1,"230":2,"235":2,"281":1,"282":2,"283":1,"289":2,"292":1,"293":3,"304":2,"310":21,"323":3,"325":1,"332":1,"334":2,"337":4,"348":3,"351":1,"353":3,"359":1,"368":5,"387":1,"391":1,"392":3,"396":1,"402":3,"403":2,"404":4,"406":3,"413":5,"416":5,"419":3,"421":2,"424":11,"425":11,"426":1,"429":1,"437":1,"438":3,"442":11,"443":5,"451":1,"453":2,"455":1,"457":5,"459":6,"464":1,"468":5,"474":1,"476":9,"477":8,"481":1,"486":3,"487":6,"488":7,"494":6,"495":5,"496":6,"497":3,"507":2,"512":7,"513":1,"517":3,"528":8,"546":2,"555":1,"556":1,"558":5,"560":1,"562":1,"566":1,"568":3,"569":5,"580":1,"581":1,"582":2,"584":5,"585":2,"586":4,"591":1,"592":1,"603":2,"607":2,"609":5,"610":7,"614":2,"616":7,"617":4,"618":4,"619":1,"624":1,"625":5,"628":2,"631":1,"639":1,"641":3,"646":5,"648":3,"659":2,"669":5,"670":3,"674":3,"680":1,"695":1,"698":2,"704":1,"711":28,"714":1,"716":4,"717":1,"726":8,"727":15,"729":1,"730":1,"731":2,"733":3,"740":1,"743":10,"748":4,"749":1,"750":2,"754":1,"756":2,"757":1,"758":1,"760":4,"762":1,"763":1,"764":1,"765":14,"769":1,"771":1,"772":3,"773":1,"775":1,"776":7,"777":3,"782":1,"785":2,"786":4,"789":15,"790":7,"791":14,"792":6,"794":1,"798":1,"801":1,"802":1,"803":1,"804":1,"805":2,"806":1,"807":2,"809":1,"817":2,"821":1,"825":1,"839":1,"864":1,"871":1,"876":4,"893":1,"895":1,"899":1,"904":1,"905":1,"906":1,"907":1,"908":2,"909":1,"910":2,"913":2,"918":2,"921":1,"947":1,"951":2,"952":2,"966":1,"967":1,"968":1,"971":2,"987":1,"988":1,"989":1,"990":1,"991":1,"992":2,"993":2,"994":2,"996":2,"997":1,"998":1,"1006":1,"1010":1,"1022":2,"1075":1,"1080":1,"1081":4,"1083":5,"1084":1,"1088":2,"1096":1,"1106":6,"1107":26,"1108":12,"1112":14,"1137":1,"1142":4,"1145":4,"1147":3,"1159":1,"1170":4,"1171":1,"1172":1,"1173":1,"1175":1,"1176":2,"1177":2,"1179":1,"1180":1,"1182":6,"1185":2,"1186":3,"1189":1,"1192":4,"1202":6,"1205":4,"1210":1,"1211":14,"1212":7,"1213":6,"1214":6,"1215":6,"1216":1,"1217":6,"1218":6,"1219":11,"1222":1,"1223":6,"1229":7,"1230":4,"1235":7,"1236":5,"1238":4,"1246":1,"1252":6,"1255":4,"1261":6,"1262":4,"1267":1,"1270":3,"1280":1,"1298":4,"1309":6,"1310":3,"1311":2,"1312":2,"1313":2,"1314":5,"1316":1,"1318":8,"1319":13,"1320":33,"1321":8,"1324":1,"1328":6,"1332":1,"1337":1,"1341":2,"1347":7,"1353":5,"1357":5,"1360":2,"1364":3,"1367":3,"1372":1,"1377":15,"1378":16,"1379":16,"1380":5,"1383":1,"1410":3,"1414":2,"1418":2,"1426":1,"1443":4,"1445":1,"1447":1,"1450":1,"1458":1,"1460":4,"1461":4,"1462":4,"1464":4,"1465":4,"1467":4,"1468":4,"1471":8,"1472":5,"1491":8,"1496":1,"1497":1,"1498":1,"1509":1,"1529":4,"1530":4,"1533":3,"1535":1,"1537":1,"1539":1,"1541":1,"1542":1,"1543":1,"1545":2,"1546":2,"1547":2,"1549":1,"1550":1,"1551":2,"1559":1,"1561":9,"1562":6,"1563":7,"1564":9,"1574":7,"1583":2,"1584":5,"1586":2,"1587":13,"1589":1,"1593":2,"1599":5,"1600":9,"1602":2,"1603":13,"1604":6,"1606":13,"1608":2,"1609":14,"1612":25,"1613":13,"1614":12,"1615":12,"1620":2,"1627":12,"1628":4,"1634":1,"1639":1}}],["550e8400",{"2":{"1573":1}}],["5180",{"2":{"1354":1,"1358":1}}],["5179",{"2":{"1354":1,"1358":1}}],["5178",{"2":{"1352":5,"1353":3,"1356":5,"1357":3}}],["599",{"2":{"928":1}}],["5e3",{"2":{"765":1}}],["5e",{"2":{"758":1}}],["503",{"2":{"217":1,"221":1,"1059":1}}],["500",{"2":{"115":1,"139":1,"159":2,"801":1,"904":1,"928":1,"1314":1,"1363":1,"1366":1,"1428":1,"1431":1,"1433":1}}],["50",{"2":{"84":1,"324":1,"1050":1,"1379":1,"1414":1,"1417":1}}],["50ms",{"2":{"84":1,"1379":2}}],["5432",{"2":{"10":1}}],["5",{"0":{"141":1,"176":1,"180":1,"181":1,"182":1,"327":1,"559":1,"587":1,"831":1,"954":1,"1104":1,"1128":1,"1472":1,"1605":1,"1616":1,"1637":1},"1":{"181":1,"182":1},"2":{"9":1,"216":2,"235":1,"512":1,"1011":2,"1075":1,"1468":1,"1613":1}}],["17",{"2":{"1601":1}}],["160",{"2":{"1590":1}}],["16",{"2":{"899":1,"1576":1}}],["1e",{"2":{"730":1}}],["14159",{"2":{"796":1}}],["1415",{"2":{"758":1}}],["14",{"2":{"721":1,"733":1,"748":1,"1211":1,"1278":1,"1287":1,"1290":1,"1300":1,"1556":1}}],["1+2",{"2":{"660":1}}],["18",{"2":{"655":1,"1107":1,"1108":1,"1337":1,"1587":1,"1591":1,"1601":1,"1602":1}}],["18446744073709551615",{"2":{"791":1}}],["184",{"2":{"288":1}}],["1>",{"2":{"495":1,"496":1}}],["15z",{"2":{"1465":1}}],["153",{"2":{"858":1}}],["15",{"2":{"216":1,"618":1}}],["1123",{"2":{"1490":1,"1554":1,"1556":1}}],["11",{"0":{"197":1,"1117":1}}],["10xxxxxx",{"2":{"1573":1,"1576":1}}],["1048576",{"2":{"826":1}}],["1000u",{"2":{"1486":1}}],["1000",{"2":{"616":1,"1433":1}}],["100000",{"2":{"84":1,"325":1}}],["100",{"2":{"459":1,"928":1,"1050":1}}],["100ms",{"2":{"459":1}}],["1024>",{"2":{"424":1,"425":1}}],["1024",{"2":{"186":2,"187":1,"193":4,"230":2,"310":1,"833":1,"1025":2}}],["10",{"0":{"196":1,"1116":1},"2":{"175":2,"193":1,"443":1,"494":2,"620":2,"656":1,"781":1,"795":1,"993":1,"1050":1,"1056":1,"1168":1,"1177":2,"1218":1,"1363":1,"1366":1,"1377":1,"1378":1,"1379":1,"1470":1,"1478":1,"1479":1,"1529":1,"1530":1,"1586":1,"1591":1,"1615":1}}],["12h",{"2":{"1495":1}}],["12>",{"2":{"1088":1}}],["12px",{"2":{"790":1}}],["12",{"2":{"711":1,"760":1,"1087":1,"1521":1,"1556":1,"1576":1}}],["123ull",{"2":{"1287":1,"1305":1}}],["123ll",{"2":{"1287":1,"1305":1}}],["123",{"2":{"185":1,"194":1,"733":1,"758":1,"1237":1,"1241":1,"1287":2,"1296":1,"1297":1,"1311":4,"1452":1,"1517":1,"1603":1,"1604":1,"1606":1}}],["120",{"2":{"185":1,"192":1,"216":1,"1587":1,"1591":1,"1600":1,"1601":1,"1602":1,"1603":1}}],["128",{"2":{"86":1,"310":1,"327":1,"419":1,"425":1,"1573":2}}],["127",{"2":{"6":1,"10":1,"90":3,"109":2,"165":4,"195":3,"197":1,"227":1,"313":1,"415":1,"424":1,"477":1,"618":1,"620":1,"621":1,"802":1,"905":1,"992":1,"993":1,"994":1,"1106":1,"1107":1,"1108":1,"1112":1,"1127":1,"1130":1,"1135":1,"1204":1,"1281":1,"1309":1,"1310":2,"1311":3,"1313":3,"1314":2,"1318":1,"1319":1,"1320":1,"1321":1,"1352":5,"1353":1,"1356":5,"1357":1,"1476":1,"1497":1,"1517":1,"1641":2,"1644":1,"1645":1}}],["1",{"0":{"41":1,"56":1,"130":1,"136":1,"148":1,"165":1,"170":1,"181":1,"184":1,"255":1,"268":1,"281":1,"312":1,"323":1,"334":1,"350":1,"368":1,"424":1,"442":1,"494":1,"555":1,"583":1,"666":1,"826":1,"950":1,"1017":1,"1035":1,"1056":1,"1075":1,"1082":1,"1097":1,"1106":1,"1121":1,"1149":1,"1150":1,"1161":1,"1191":1,"1210":1,"1225":1,"1318":1,"1325":1,"1377":1,"1459":1,"1556":1,"1589":1,"1600":1,"1612":1,"1620":1,"1627":1,"1633":1,"1639":1,"1668":1},"1":{"42":1,"43":1,"44":1,"57":1,"137":1,"1083":1,"1122":1,"1123":1,"1192":1,"1193":1,"1194":1,"1195":1,"1196":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1460":1,"1461":1,"1462":1,"1601":1},"2":{"6":1,"10":1,"26":1,"43":1,"46":1,"47":1,"48":1,"50":1,"90":3,"108":2,"109":2,"165":4,"175":2,"182":1,"185":1,"192":1,"195":3,"197":1,"227":1,"229":1,"235":1,"310":2,"313":1,"320":2,"415":2,"424":1,"443":1,"453":1,"459":1,"477":1,"488":1,"496":2,"510":1,"520":1,"538":2,"563":1,"570":4,"572":2,"576":1,"578":1,"612":1,"618":1,"620":1,"621":2,"625":1,"626":1,"629":2,"643":1,"650":1,"655":1,"656":1,"657":2,"660":1,"700":1,"701":2,"702":1,"738":1,"758":1,"802":1,"804":1,"871":1,"905":1,"907":1,"992":1,"993":2,"994":1,"1009":1,"1039":3,"1081":1,"1106":2,"1107":6,"1108":3,"1112":3,"1127":3,"1130":1,"1135":1,"1145":1,"1146":2,"1149":2,"1150":3,"1168":1,"1173":1,"1176":1,"1177":3,"1204":1,"1212":1,"1217":1,"1218":1,"1226":1,"1230":1,"1238":1,"1251":1,"1263":2,"1280":2,"1281":1,"1288":1,"1290":1,"1292":1,"1294":1,"1309":1,"1310":5,"1311":3,"1312":2,"1313":6,"1314":2,"1318":6,"1319":4,"1320":4,"1321":4,"1332":1,"1337":1,"1344":1,"1349":1,"1352":5,"1353":1,"1356":5,"1357":1,"1363":1,"1377":2,"1378":4,"1379":2,"1433":1,"1447":1,"1472":1,"1476":1,"1477":1,"1488":1,"1491":2,"1497":1,"1517":1,"1578":1,"1587":1,"1591":1,"1612":2,"1613":1,"1615":1,"1619":1,"1627":2,"1634":1,"1641":2,"1644":1,"1645":1}}],["08",{"2":{"1556":1}}],["07t10",{"2":{"1465":1}}],["07",{"2":{"1461":1,"1556":1}}],["02",{"2":{"1461":1,"1465":1}}],["0100",{"2":{"1576":1}}],["01",{"2":{"1112":1}}],["0>",{"2":{"496":1}}],["000",{"2":{"195":1,"443":2,"512":3,"1363":1,"1366":1,"1428":1,"1472":2,"1561":2}}],["0",{"2":{"6":2,"9":1,"10":2,"11":5,"25":1,"42":2,"43":1,"44":1,"46":1,"70":2,"84":4,"85":1,"86":11,"89":1,"90":6,"93":1,"94":1,"95":1,"96":1,"108":3,"109":4,"113":2,"130":1,"165":8,"174":2,"179":1,"195":6,"196":1,"197":2,"227":2,"235":2,"288":1,"289":1,"309":4,"310":10,"312":4,"313":2,"325":2,"327":4,"337":1,"368":1,"392":1,"404":1,"415":3,"416":5,"417":1,"419":4,"424":2,"425":5,"443":1,"466":1,"467":1,"468":5,"476":5,"477":8,"479":1,"488":1,"496":2,"497":1,"512":2,"520":2,"538":3,"563":2,"570":8,"572":4,"576":3,"578":2,"618":2,"620":2,"621":2,"625":2,"626":2,"629":4,"634":6,"635":4,"643":2,"644":6,"650":2,"655":1,"700":1,"701":4,"702":2,"705":1,"707":2,"708":1,"739":1,"802":2,"823":2,"826":1,"833":1,"871":1,"876":3,"882":3,"884":3,"899":1,"905":2,"913":1,"935":1,"947":1,"962":1,"966":3,"967":3,"971":4,"992":4,"993":2,"994":2,"1009":1,"1015":2,"1022":1,"1025":2,"1045":2,"1106":3,"1107":4,"1108":4,"1112":3,"1127":2,"1130":2,"1135":2,"1146":2,"1176":2,"1177":1,"1204":2,"1211":2,"1212":2,"1213":1,"1214":2,"1215":1,"1217":1,"1218":1,"1219":1,"1223":1,"1226":1,"1227":1,"1236":1,"1281":2,"1285":3,"1299":3,"1309":3,"1310":5,"1311":7,"1312":1,"1313":7,"1314":5,"1318":3,"1319":4,"1320":7,"1321":3,"1328":4,"1337":1,"1352":10,"1353":2,"1356":10,"1357":2,"1370":1,"1377":1,"1378":1,"1379":3,"1380":1,"1385":1,"1387":4,"1417":1,"1418":9,"1428":2,"1433":2,"1434":3,"1437":1,"1447":2,"1453":1,"1472":1,"1476":2,"1480":1,"1488":1,"1491":1,"1497":5,"1498":2,"1506":6,"1517":2,"1529":1,"1561":3,"1562":1,"1563":1,"1564":1,"1587":1,"1612":1,"1613":4,"1614":1,"1615":2,"1621":2,"1627":3,"1628":2,"1634":2,"1641":4,"1644":3,"1645":2}}],["=1024",{"2":{"1025":1}}],["=>",{"2":{"871":1}}],["=mode",{"2":{"625":1}}],["==",{"2":{"86":1,"108":1,"113":1,"114":1,"158":1,"174":2,"310":2,"425":1,"494":2,"496":1,"513":2,"707":1,"709":1,"842":1,"870":1,"992":2,"1045":2,"1377":1,"1378":3,"1379":2,"1401":1,"1402":1,"1403":1,"1529":1,"1627":1,"1628":1,"1634":1}}],["=",{"0":{"375":1,"1073":1,"1378":1},"2":{"6":1,"7":1,"8":1,"9":1,"11":2,"12":3,"28":1,"29":1,"42":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":2,"57":1,"62":1,"63":2,"64":1,"65":2,"70":1,"84":5,"85":3,"86":6,"89":3,"108":8,"113":1,"114":1,"115":1,"130":1,"148":1,"156":1,"157":2,"158":1,"174":1,"175":3,"177":6,"178":1,"181":1,"182":4,"188":1,"195":9,"201":2,"202":1,"207":2,"208":3,"227":2,"228":1,"229":2,"230":1,"235":1,"279":1,"282":1,"288":2,"289":3,"293":2,"304":2,"307":1,"310":6,"323":1,"325":3,"326":1,"327":2,"328":2,"339":1,"340":1,"341":1,"342":1,"351":1,"357":2,"368":1,"375":1,"381":1,"382":3,"390":1,"402":1,"404":1,"406":1,"416":9,"419":7,"424":5,"425":5,"426":1,"435":1,"438":1,"442":7,"443":6,"444":1,"451":1,"452":1,"453":1,"455":1,"457":1,"459":1,"468":8,"475":1,"476":2,"477":1,"486":1,"494":2,"495":3,"496":3,"503":1,"507":2,"512":15,"513":1,"656":2,"657":1,"658":2,"668":2,"705":1,"707":2,"710":1,"711":2,"716":3,"721":3,"727":2,"728":2,"729":2,"730":2,"731":3,"732":6,"733":3,"743":1,"748":4,"749":2,"750":2,"758":1,"760":1,"765":1,"772":1,"776":2,"777":1,"778":2,"789":1,"790":1,"791":1,"792":1,"795":2,"796":2,"797":2,"798":2,"805":2,"806":1,"807":1,"817":2,"821":1,"828":1,"829":4,"830":1,"831":3,"832":2,"836":1,"839":1,"871":5,"876":6,"880":2,"882":2,"886":1,"887":1,"889":1,"895":1,"899":1,"908":2,"909":1,"910":1,"913":2,"918":1,"928":6,"938":1,"950":2,"951":1,"952":1,"966":1,"968":1,"969":1,"971":2,"974":3,"976":2,"977":1,"990":1,"992":1,"993":3,"994":3,"996":1,"1012":1,"1022":2,"1043":4,"1046":2,"1073":1,"1075":1,"1076":1,"1081":1,"1083":2,"1084":1,"1088":4,"1089":2,"1092":1,"1093":2,"1094":1,"1106":6,"1107":11,"1108":9,"1112":7,"1139":1,"1140":1,"1142":1,"1143":1,"1145":1,"1146":2,"1147":3,"1149":2,"1150":3,"1165":1,"1167":2,"1168":2,"1170":3,"1171":2,"1172":1,"1173":2,"1175":2,"1176":3,"1177":3,"1179":2,"1180":2,"1182":2,"1183":5,"1185":3,"1186":4,"1190":2,"1192":4,"1193":1,"1194":1,"1195":1,"1196":1,"1198":1,"1204":1,"1205":1,"1206":1,"1211":4,"1212":1,"1214":2,"1215":2,"1217":1,"1218":2,"1219":2,"1223":2,"1229":2,"1230":3,"1231":2,"1235":2,"1236":1,"1237":2,"1238":1,"1240":1,"1241":2,"1251":1,"1252":1,"1254":1,"1255":1,"1259":2,"1260":2,"1261":1,"1262":1,"1263":4,"1270":1,"1273":2,"1275":1,"1276":1,"1277":2,"1278":1,"1279":2,"1280":5,"1281":2,"1283":1,"1284":1,"1285":4,"1288":2,"1291":2,"1294":2,"1295":1,"1298":4,"1299":4,"1301":2,"1305":1,"1309":1,"1310":2,"1311":2,"1312":1,"1313":2,"1314":4,"1318":5,"1319":4,"1320":7,"1321":2,"1327":1,"1328":5,"1332":1,"1334":1,"1336":1,"1337":4,"1353":10,"1357":10,"1370":2,"1377":18,"1378":21,"1379":26,"1380":10,"1385":1,"1404":1,"1405":1,"1406":2,"1414":2,"1418":9,"1438":3,"1447":3,"1452":4,"1455":2,"1460":1,"1461":1,"1462":1,"1464":1,"1465":1,"1467":1,"1468":3,"1470":2,"1472":3,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1485":1,"1486":1,"1487":1,"1491":6,"1497":9,"1498":15,"1506":9,"1509":1,"1511":1,"1512":1,"1513":1,"1514":5,"1515":1,"1517":5,"1518":1,"1519":2,"1521":1,"1522":1,"1523":3,"1526":1,"1529":3,"1530":4,"1539":1,"1547":1,"1561":4,"1563":1,"1564":1,"1574":1,"1583":2,"1584":1,"1585":4,"1587":4,"1589":3,"1590":2,"1591":1,"1592":1,"1593":3,"1600":2,"1601":2,"1602":2,"1603":3,"1604":3,"1605":1,"1606":3,"1607":1,"1608":2,"1612":7,"1613":7,"1614":4,"1615":4,"1620":2,"1621":2,"1622":1,"1623":1,"1624":1,"1627":8,"1628":1,"1634":3,"1644":1,"1645":1}}],["vm",{"2":{"1569":1}}],["v4",{"0":{"1573":1,"1577":1},"2":{"1490":1,"1573":1,"1577":1}}],["v3",{"0":{"1145":1},"1":{"1146":1,"1147":1}}],["vhttp",{"2":{"815":1,"913":1,"914":1,"919":2,"921":1,"925":1,"928":1,"1022":1}}],["v0",{"2":{"635":2,"644":2,"1177":1}}],["v2",{"0":{"1142":1,"1145":1},"1":{"1143":1,"1144":1,"1146":1,"1147":1},"2":{"624":1,"628":1,"694":1,"696":1,"1149":1,"1177":1}}],["v1",{"0":{"645":1,"1142":1,"1145":1},"1":{"1143":1,"1144":1,"1146":1,"1147":1},"2":{"518":1,"521":1,"552":1,"618":1,"654":1,"839":2,"1149":1,"1497":1,"1498":1,"1506":1}}],["volume",{"2":{"858":1}}],["volatile",{"2":{"507":1,"1561":1}}],["void>",{"2":{"84":1,"85":1,"86":2,"293":1,"310":2,"323":1,"353":1,"368":1,"387":1,"391":1,"392":1,"402":1,"403":2,"404":1,"406":1,"416":1,"419":1,"424":1,"425":2,"442":1,"443":1,"455":1,"457":1,"459":1,"468":1,"476":1,"477":1,"486":1,"494":1,"495":2,"496":1,"497":1,"1533":3}}],["void",{"0":{"373":1,"374":1,"376":2,"377":1,"391":1,"403":1,"486":1,"495":1,"1073":1,"1533":1},"2":{"64":2,"70":4,"89":1,"179":1,"235":1,"265":1,"281":1,"282":1,"334":2,"335":1,"337":1,"339":2,"340":2,"341":2,"342":2,"368":1,"385":1,"386":1,"387":1,"388":1,"393":1,"397":1,"402":1,"404":1,"406":2,"416":1,"419":1,"424":4,"425":2,"431":1,"437":1,"443":1,"451":1,"453":1,"457":1,"459":1,"468":1,"486":1,"487":1,"488":1,"492":1,"495":1,"496":1,"584":2,"711":1,"727":1,"743":1,"748":1,"765":1,"776":1,"789":1,"790":1,"791":1,"792":1,"816":1,"817":2,"876":2,"895":1,"913":1,"926":5,"955":1,"1035":1,"1075":3,"1112":2,"1364":2,"1372":1,"1378":2,"1379":1,"1380":3,"1418":1,"1445":1,"1449":1,"1450":1,"1491":3,"1561":1,"1586":1,"1628":2}}],["vcpkg",{"2":{"247":1}}],["vs",{"0":{"171":1,"1059":1,"1228":1,"1306":1,"1616":1},"1":{"172":1,"173":1,"1229":1,"1230":1,"1231":1},"2":{"984":1,"1032":1,"1053":1,"1376":1,"1612":1,"1620":1,"1621":2}}],["varchar",{"2":{"1107":1,"1112":1,"1116":1}}],["variant",{"2":{"1270":2,"1532":1,"1573":1,"1576":1,"1613":1,"1621":1}}],["variants",{"2":{"920":1}}],["variant>",{"2":{"108":1}}],["variables",{"0":{"529":1,"593":1,"656":1,"677":1,"843":1,"1488":1},"1":{"844":1,"845":1},"2":{"612":1,"653":1,"661":1,"751":1,"834":1,"836":1,"844":1,"1124":1,"1474":1}}],["variable",{"2":{"355":1,"360":1,"670":1,"701":1,"832":1,"1476":1,"1477":1,"1483":2,"1490":1}}],["vary",{"2":{"195":1,"507":1}}],["validity",{"2":{"1114":1}}],["valid",{"2":{"239":1,"284":1,"409":1,"698":1,"706":2,"759":1,"956":1,"1251":1,"1482":1,"1532":2,"1591":1,"1604":1}}],["validating",{"0":{"1600":1,"1606":1},"1":{"1601":1},"2":{"556":1,"1603":1}}],["validationerrorcode",{"2":{"1605":1}}],["validationerrors",{"2":{"1605":1}}],["validation",{"0":{"114":1,"157":1,"158":1,"833":1,"1025":1,"1580":2,"1599":1,"1602":1,"1603":1,"1605":1},"1":{"1581":2,"1582":2,"1583":2,"1584":2,"1585":2,"1586":2,"1587":2,"1588":2,"1589":2,"1590":2,"1591":2,"1592":2,"1593":2,"1594":2,"1595":2,"1596":2,"1597":2,"1598":2},"2":{"155":1,"203":1,"217":1,"225":1,"515":2,"564":1,"637":1,"712":1,"781":1,"952":1,"959":1,"981":1,"1058":2,"1243":1,"1268":1,"1490":2,"1492":2,"1580":1,"1586":1,"1587":1,"1589":1,"1593":1,"1597":1,"1599":8,"1600":3,"1602":2,"1603":5,"1604":6,"1605":3,"1606":3,"1609":1,"1610":2}}],["validated",{"2":{"1616":1}}],["validates",{"2":{"587":1,"696":1,"815":1,"833":1}}],["validate",{"0":{"587":1,"1586":1},"2":{"4":1,"110":1,"114":1,"157":1,"158":1,"210":1,"215":1,"226":1,"231":1,"581":1,"636":1,"662":1,"834":1,"1337":1,"1586":1,"1587":2,"1599":1,"1600":3,"1601":1,"1602":2,"1603":2,"1604":2,"1606":2,"1607":1,"1608":1,"1610":1,"1611":1,"1612":1,"1613":1,"1620":1,"1621":1,"1630":1}}],["value1",{"2":{"1272":1}}],["value0",{"2":{"1272":1}}],["value>",{"2":{"670":1}}],["values",{"0":{"171":1,"494":1,"738":1,"739":1,"1042":1,"1274":1,"1282":1,"1286":1,"1532":1,"1607":1,"1608":1},"1":{"172":1,"173":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1283":1,"1284":1,"1285":1,"1287":1,"1288":1},"2":{"35":1,"175":1,"328":1,"507":1,"656":1,"668":1,"732":1,"737":1,"752":1,"770":1,"794":1,"825":1,"831":1,"844":1,"998":1,"1100":1,"1107":1,"1136":1,"1145":1,"1156":1,"1268":1,"1307":1,"1318":1,"1321":1,"1328":1,"1331":1,"1339":1,"1363":1,"1366":1,"1474":1,"1477":1,"1483":1,"1488":2,"1525":1,"1551":1,"1570":1,"1580":1,"1599":2}}],["value",{"0":{"402":1,"1170":1,"1175":1,"1179":1,"1231":1,"1235":1,"1600":1,"1602":1},"1":{"1601":1},"2":{"5":1,"6":1,"25":1,"26":1,"35":1,"41":1,"42":1,"44":4,"52":1,"63":1,"95":1,"114":1,"132":2,"140":1,"158":1,"173":2,"175":4,"181":3,"188":1,"195":1,"201":1,"207":1,"227":1,"393":1,"395":1,"397":2,"417":1,"706":2,"710":1,"711":2,"719":2,"720":1,"721":1,"723":3,"725":1,"727":3,"728":1,"729":1,"730":1,"731":2,"732":3,"736":1,"742":1,"743":1,"748":2,"749":1,"765":2,"770":1,"771":2,"787":1,"789":2,"791":2,"795":1,"796":1,"798":1,"816":2,"829":1,"832":1,"871":3,"918":1,"926":1,"955":1,"993":3,"1009":1,"1081":1,"1089":2,"1092":2,"1093":1,"1094":2,"1096":1,"1100":1,"1142":1,"1149":1,"1150":1,"1155":1,"1163":1,"1210":2,"1227":2,"1237":2,"1266":1,"1268":1,"1270":2,"1281":3,"1291":1,"1295":1,"1296":2,"1306":1,"1328":5,"1377":1,"1378":1,"1379":3,"1437":1,"1476":1,"1482":3,"1483":1,"1488":1,"1491":1,"1520":1,"1529":2,"1532":1,"1533":1,"1539":1,"1551":1,"1573":1,"1595":1,"1600":1,"1614":1,"1620":1,"1622":1,"1634":2,"1645":1}}],["vendor",{"2":{"964":1,"966":1,"981":1}}],["verb",{"2":{"814":1,"973":1,"974":2,"985":1,"1022":1}}],["verbose",{"2":{"528":1,"546":1,"562":1,"568":1,"625":1,"674":1,"698":1,"701":2,"1223":1}}],["verbosity",{"2":{"137":1,"844":1}}],["ver>",{"2":{"625":1}}],["verified",{"2":{"572":1,"658":1}}],["verifies",{"2":{"567":2,"1089":1}}],["verification",{"2":{"559":1,"567":1,"568":1,"570":1,"571":2,"698":3,"700":2,"1089":1}}],["verify",{"0":{"694":1,"1094":1},"1":{"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1},"2":{"242":1,"243":1,"250":1,"271":1,"559":1,"563":2,"568":1,"571":1,"572":1,"629":1,"694":1,"695":2,"696":1,"697":3,"701":10,"702":2,"1094":1,"1117":1,"1322":1}}],["verifying",{"2":{"240":1}}],["very",{"2":{"89":1,"1140":1}}],["versioned",{"2":{"559":1,"612":1,"1340":1}}],["versions",{"2":{"526":1,"575":1,"1167":1,"1245":2,"1256":1}}],["versioning",{"0":{"521":1}}],["version>",{"2":{"517":1,"558":2,"569":1,"628":1,"631":1,"641":1,"646":2,"648":1}}],["version",{"0":{"552":1,"635":1},"2":{"46":1,"235":1,"242":1,"243":1,"518":1,"521":3,"522":1,"523":2,"532":3,"540":1,"552":1,"561":2,"562":1,"563":1,"564":1,"572":1,"624":1,"625":2,"626":2,"628":1,"629":1,"630":1,"632":2,"633":1,"634":1,"635":2,"637":1,"644":1,"649":1,"650":1,"659":2,"702":1,"804":1,"907":1,"966":1,"967":1,"968":1,"1127":1,"1146":1,"1249":1,"1251":1,"1252":1,"1254":1,"1255":1,"1497":1,"1498":1,"1505":1,"1506":1,"1572":1,"1573":1,"1576":2,"1635":1}}],["vector",{"0":{"1233":1},"2":{"86":1,"289":1,"294":1,"310":1,"1147":1,"1271":1,"1272":1,"1280":2,"1320":2,"1328":2,"1337":1,"1414":1,"1418":1,"1447":1,"1545":2,"1546":2,"1547":2,"1606":2}}],["vector>",{"2":{"86":1,"310":1,"1147":1}}],["v",{"2":{"52":1,"63":1,"84":3,"108":1,"402":2,"410":1,"443":3,"487":1,"488":1,"562":1,"633":1,"635":1,"644":1,"721":1,"728":1,"729":1,"730":1,"731":1,"743":3,"757":1,"773":1,"785":1,"1147":2,"1173":1,"1219":2,"1237":1,"1280":3,"1290":1,"1310":2,"1328":2,"1331":1,"1333":1,"1514":2,"1522":1,"1539":1,"1547":3,"1627":1}}],["video",{"2":{"1662":1}}],["violations",{"2":{"587":1}}],["virtual",{"2":{"289":2,"359":1,"416":6,"419":5,"468":6,"876":4,"913":2,"1327":1,"1370":2,"1418":8}}],["view>>",{"2":{"1606":2}}],["view>",{"2":{"476":1,"1083":1}}],["view",{"0":{"1167":1,"1251":1,"1252":1},"2":{"277":1,"310":1,"578":1,"703":1,"707":2,"710":1,"711":1,"717":1,"729":1,"740":1,"747":1,"756":1,"762":1,"763":1,"764":1,"771":1,"772":1,"776":1,"777":1,"785":1,"786":4,"787":1,"887":1,"1083":1,"1088":2,"1093":1,"1142":1,"1147":1,"1151":2,"1153":1,"1339":1,"1542":6,"1543":3,"1545":1,"1546":2,"1547":1,"1549":2,"1550":1,"1551":1,"1593":1,"1606":2,"1618":1}}],["visibility",{"2":{"842":1,"854":1}}],["visible",{"2":{"2":1,"39":1,"221":1,"842":1,"859":1,"1317":1,"1513":1}}],["visual",{"2":{"247":1}}],["vip",{"2":{"174":1,"177":7,"197":1,"990":1,"992":1}}],["via",{"2":{"3":1,"308":1,"329":1,"331":2,"334":1,"364":1,"366":1,"378":1,"386":1,"404":1,"417":1,"420":1,"447":1,"449":1,"509":1,"510":1,"513":1,"522":1,"558":1,"618":1,"732":1,"745":1,"815":1,"819":1,"826":1,"832":1,"833":1,"888":1,"889":1,"893":1,"900":1,"913":1,"929":1,"935":1,"938":1,"942":1,"951":1,"981":1,"1006":1,"1033":1,"1051":2,"1057":1,"1112":1,"1115":1,"1361":1,"1508":2,"1511":1,"1522":1,"1524":1,"1539":1}}],["vixdb",{"2":{"1106":1,"1107":1,"1108":1,"1112":1,"1316":1,"1318":1,"1319":1,"1320":1,"1321":1}}],["vixpkg",{"2":{"568":1,"570":2,"572":1,"624":1,"625":1,"628":1,"698":1,"701":1}}],["vixpkg>",{"2":{"566":1,"695":1}}],["vixcpp",{"2":{"242":1,"243":1,"1123":1}}],["vix",{"0":{"136":1,"140":1,"241":1,"249":1,"308":1,"312":1,"362":1,"516":1,"524":1,"540":1,"543":1,"549":1,"565":1,"573":1,"579":1,"590":1,"602":1,"613":1,"622":1,"630":1,"638":1,"647":1,"663":1,"668":1,"679":1,"686":1,"694":1,"715":1,"746":1,"835":1,"836":1,"838":1,"844":1,"867":1,"871":1,"1000":1,"1004":1,"1033":1,"1051":1,"1071":1,"1118":1,"1139":1,"1140":1,"1181":1,"1340":1,"1482":1,"1488":1,"1536":1,"1572":1,"1580":1},"1":{"137":1,"242":1,"243":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"525":1,"526":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"574":1,"575":1,"576":1,"577":1,"578":1,"580":1,"581":1,"582":1,"591":1,"592":1,"593":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"648":1,"649":1,"650":1,"651":1,"652":1,"664":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"687":1,"688":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"872":1,"873":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1119":1,"1120":1,"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1182":1,"1183":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1},"2":{"0":2,"2":1,"3":2,"11":2,"12":2,"14":1,"15":1,"23":2,"34":1,"37":2,"39":1,"40":4,"41":1,"42":2,"43":2,"44":3,"45":1,"46":3,"54":2,"55":2,"57":6,"62":1,"64":3,"65":2,"67":1,"68":1,"70":7,"74":1,"75":1,"79":1,"82":1,"84":6,"85":5,"86":10,"89":2,"92":1,"93":3,"94":3,"95":5,"96":2,"97":1,"98":1,"106":1,"108":15,"111":1,"112":2,"113":2,"114":2,"115":2,"118":1,"119":2,"120":1,"123":1,"124":2,"125":1,"126":2,"128":2,"130":1,"134":1,"135":5,"136":2,"140":3,"143":1,"144":2,"145":1,"146":2,"151":1,"154":2,"155":2,"156":2,"161":1,"162":1,"163":1,"164":4,"165":1,"170":1,"171":1,"173":2,"180":1,"181":6,"182":8,"185":1,"187":1,"190":1,"191":1,"192":1,"193":5,"194":1,"195":5,"196":1,"199":2,"200":1,"201":2,"202":2,"204":1,"206":2,"207":2,"208":2,"209":1,"212":1,"213":1,"214":1,"215":1,"219":1,"226":1,"227":2,"228":2,"229":3,"230":2,"232":1,"235":2,"240":1,"242":2,"243":2,"244":1,"249":2,"251":2,"252":2,"253":1,"255":1,"259":1,"264":1,"265":3,"266":1,"269":1,"273":1,"279":2,"281":3,"282":2,"283":3,"285":1,"286":1,"287":2,"293":3,"296":1,"304":1,"308":2,"309":1,"310":15,"320":2,"321":1,"322":1,"323":4,"329":1,"330":1,"331":2,"332":1,"336":1,"337":3,"339":1,"340":1,"341":1,"342":1,"347":1,"348":2,"363":1,"364":1,"366":1,"368":6,"384":1,"385":1,"386":1,"387":1,"392":3,"395":2,"396":1,"402":2,"403":1,"404":2,"406":4,"412":2,"413":5,"424":4,"425":4,"426":2,"428":1,"429":1,"442":4,"443":4,"446":4,"447":1,"453":3,"457":5,"459":6,"463":2,"464":5,"476":3,"477":4,"480":2,"481":1,"494":5,"495":1,"496":1,"497":6,"502":1,"507":2,"511":1,"512":11,"513":4,"516":1,"518":2,"521":1,"522":1,"523":3,"524":1,"526":1,"528":1,"529":1,"532":1,"533":2,"534":2,"535":2,"537":5,"538":1,"539":2,"540":1,"542":5,"543":2,"545":2,"548":1,"550":1,"551":2,"552":1,"555":7,"556":2,"557":1,"558":8,"559":3,"560":1,"561":2,"563":2,"564":1,"565":1,"567":2,"569":3,"570":1,"571":1,"572":4,"573":1,"575":2,"577":1,"578":2,"579":1,"583":3,"588":1,"589":3,"590":1,"593":1,"594":1,"597":1,"599":3,"600":1,"601":1,"603":3,"604":1,"611":5,"612":2,"613":1,"615":1,"620":1,"621":1,"622":1,"624":1,"627":2,"629":3,"630":1,"632":2,"635":1,"637":2,"638":1,"641":1,"644":2,"646":5,"648":1,"649":2,"651":1,"652":3,"653":1,"654":1,"658":1,"662":1,"663":1,"664":1,"666":2,"668":2,"673":1,"674":3,"675":1,"677":5,"678":2,"681":1,"684":1,"685":2,"688":3,"693":3,"694":2,"695":1,"696":1,"699":1,"701":3,"702":2,"703":1,"704":1,"710":1,"711":3,"713":1,"714":1,"715":2,"716":2,"717":5,"718":1,"721":1,"722":1,"723":1,"724":1,"725":1,"726":9,"740":1,"743":2,"745":1,"748":2,"752":1,"753":1,"754":1,"765":2,"766":1,"768":1,"769":1,"776":2,"779":1,"781":1,"782":1,"789":2,"790":2,"791":2,"792":2,"794":1,"800":1,"801":2,"802":3,"803":3,"804":3,"805":2,"806":2,"807":2,"809":3,"812":1,"815":3,"816":2,"817":3,"820":1,"823":1,"825":3,"826":1,"835":2,"836":2,"837":2,"838":2,"839":2,"843":1,"844":6,"845":2,"847":1,"853":1,"857":1,"858":2,"859":1,"862":3,"864":1,"865":3,"867":1,"869":1,"870":2,"871":15,"872":1,"873":1,"874":1,"875":1,"885":1,"886":1,"887":1,"890":1,"891":3,"893":1,"899":4,"900":1,"903":1,"904":2,"905":3,"906":3,"907":3,"908":2,"909":2,"910":2,"912":1,"913":2,"914":1,"919":2,"921":1,"925":1,"926":1,"927":1,"928":1,"930":1,"931":1,"933":2,"938":1,"939":2,"941":1,"947":3,"949":1,"950":1,"951":1,"953":1,"954":1,"955":3,"958":1,"961":1,"964":2,"965":1,"966":4,"967":3,"968":2,"969":1,"971":6,"972":1,"985":2,"986":1,"987":2,"988":2,"989":3,"990":3,"991":2,"992":2,"993":2,"994":2,"996":2,"997":2,"998":3,"1000":3,"1001":4,"1004":3,"1006":2,"1010":1,"1019":1,"1022":3,"1033":1,"1067":1,"1068":1,"1069":1,"1075":5,"1076":1,"1079":1,"1080":2,"1083":2,"1096":4,"1097":4,"1100":1,"1104":4,"1106":2,"1107":2,"1108":2,"1110":1,"1112":2,"1116":1,"1118":1,"1119":1,"1120":1,"1122":2,"1123":4,"1124":10,"1125":1,"1127":3,"1129":7,"1132":1,"1133":1,"1135":2,"1136":1,"1137":2,"1139":1,"1147":2,"1157":1,"1158":3,"1159":2,"1181":1,"1182":4,"1183":2,"1187":2,"1188":2,"1189":2,"1192":1,"1196":1,"1198":1,"1208":1,"1209":3,"1210":1,"1211":2,"1212":2,"1213":2,"1214":2,"1215":2,"1216":1,"1217":2,"1218":2,"1219":2,"1221":1,"1222":2,"1245":2,"1246":2,"1264":1,"1265":1,"1266":3,"1267":2,"1273":1,"1307":1,"1308":2,"1309":8,"1310":8,"1311":2,"1312":2,"1313":2,"1314":3,"1316":1,"1317":2,"1318":2,"1319":2,"1320":3,"1321":2,"1322":1,"1323":2,"1324":2,"1328":3,"1330":1,"1337":1,"1338":1,"1339":5,"1340":1,"1341":3,"1348":7,"1350":3,"1351":1,"1353":12,"1355":1,"1357":12,"1360":2,"1364":2,"1367":2,"1370":1,"1372":2,"1377":10,"1378":10,"1379":10,"1380":6,"1383":1,"1410":3,"1413":1,"1420":1,"1426":1,"1443":4,"1445":1,"1452":1,"1458":3,"1474":1,"1476":1,"1477":2,"1478":1,"1479":1,"1480":1,"1482":2,"1485":2,"1486":2,"1487":2,"1488":5,"1489":1,"1491":5,"1494":2,"1495":1,"1496":1,"1497":4,"1498":4,"1500":3,"1501":1,"1502":2,"1503":2,"1506":3,"1507":1,"1508":3,"1509":2,"1510":2,"1511":4,"1512":1,"1513":2,"1514":1,"1515":1,"1517":2,"1518":1,"1519":1,"1521":2,"1522":4,"1523":2,"1524":3,"1526":1,"1527":4,"1529":2,"1536":1,"1537":2,"1539":2,"1541":3,"1542":5,"1543":2,"1545":2,"1546":2,"1547":2,"1549":2,"1550":3,"1551":2,"1553":1,"1554":2,"1559":2,"1561":3,"1562":2,"1563":2,"1564":2,"1572":1,"1574":3,"1585":3,"1586":2,"1587":7,"1589":4,"1590":1,"1591":1,"1592":1,"1593":2,"1599":6,"1600":2,"1602":2,"1603":5,"1604":6,"1605":2,"1606":1,"1611":2,"1612":4,"1613":4,"1614":5,"1615":5,"1617":2,"1621":1,"1625":1,"1626":2,"1627":16,"1628":7,"1632":1,"1633":1,"1634":3,"1635":6,"1636":1,"1638":1,"1639":4,"1640":1,"1641":2,"1648":1,"1655":1,"1660":1,"1666":1}}],["fsync",{"2":{"1377":1,"1378":1,"1379":1,"1420":2,"1421":1,"1445":1,"1446":1,"1449":2,"1455":2}}],["fs",{"0":{"1254":1,"1255":1},"2":{"1190":1}}],["fssl",{"2":{"242":1}}],["f64",{"2":{"1102":1,"1283":1,"1284":1,"1285":1,"1287":1,"1290":1,"1298":1,"1299":1,"1300":1}}],["fn",{"0":{"376":1,"877":1,"895":1,"1073":1},"2":{"334":2,"366":1,"431":1,"437":1,"438":3,"451":2,"876":1,"895":1,"1073":1}}],["fn>>",{"2":{"438":1}}],["fn>",{"2":{"334":1,"438":1,"451":1}}],["feel",{"2":{"1304":1}}],["feels",{"2":{"945":1}}],["feed",{"2":{"1115":1}}],["feedback",{"2":{"136":1,"835":1}}],["fearing",{"2":{"847":1}}],["features",{"0":{"596":1},"2":{"331":1,"447":1,"838":1,"1033":1,"1220":1,"1243":1}}],["feature",{"0":{"1097":1,"1485":1},"2":{"163":1,"225":1,"302":1,"715":1,"716":1,"766":1,"1134":1,"1664":1}}],["fewer",{"2":{"1044":1,"1547":1,"1624":1}}],["few",{"2":{"507":1,"1098":1,"1536":1}}],["fetches",{"2":{"968":1}}],["fetch",{"2":{"494":4,"512":2}}],["flexible",{"2":{"1328":1}}],["fluent",{"2":{"912":1,"921":1,"929":1}}],["flushed",{"2":{"1421":1}}],["flushing",{"2":{"853":1,"854":1}}],["flush",{"0":{"854":1},"2":{"216":1,"235":2,"237":1,"511":1,"854":2,"859":1,"867":1,"1449":1}}],["flight",{"0":{"1379":1},"2":{"844":1,"1363":1,"1366":1,"1376":1,"1415":1,"1422":1,"1454":1}}],["flips",{"2":{"278":1,"369":1}}],["flooding",{"2":{"1440":1}}],["float80",{"0":{"764":1},"2":{"764":1}}],["float32",{"0":{"762":1},"2":{"762":1}}],["float>",{"2":{"756":1,"757":1}}],["float64",{"0":{"763":1},"2":{"711":1,"721":1,"763":1,"765":1}}],["floating",{"0":{"796":1,"1278":1},"2":{"710":1,"730":1,"747":1,"753":1,"755":1,"757":1,"767":1,"1268":1,"1270":1}}],["float",{"0":{"730":1,"753":1},"1":{"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1},"2":{"705":1,"706":2,"713":1,"730":1,"734":1,"747":1,"755":1,"756":2,"758":1,"760":2,"762":1,"766":1,"1181":1,"1339":1}}],["flowing",{"2":{"1382":1}}],["flows",{"2":{"428":1}}],["flow",{"0":{"127":1,"957":1,"1016":1,"1061":1,"1406":1},"1":{"1017":1,"1018":1,"1019":1,"1020":1},"2":{"119":1,"127":1,"145":1,"323":1,"365":1,"751":1,"767":1,"932":1,"1361":1,"1493":1,"1528":1}}],["flags",{"0":{"672":1,"675":1,"689":1,"1097":1,"1485":1},"2":{"503":1,"664":1,"667":1,"668":1,"670":1,"822":1,"1117":1}}],["flag",{"2":{"273":1,"276":2,"278":2,"355":1,"356":1,"369":1,"492":1,"498":1,"594":1,"723":1,"820":1,"1071":1}}],["flask",{"2":{"164":1,"871":1}}],["flattened",{"2":{"1281":1}}],["flat",{"2":{"108":1,"1272":1,"1294":1,"1307":1,"1627":1}}],["five",{"2":{"949":1}}],["fixtures",{"2":{"1136":1,"1140":1,"1144":1,"1157":1,"1207":1}}],["fix",{"0":{"1305":1},"2":{"461":1,"1149":1,"1150":1}}],["fixed",{"2":{"309":1,"510":1,"793":1,"1033":1,"1073":1}}],["fifo",{"2":{"347":1,"355":1,"363":1,"445":1,"1033":1}}],["firing",{"2":{"459":1}}],["firewall",{"0":{"1058":1,"1126":1},"2":{"1063":1}}],["fired",{"2":{"458":1}}],["fires",{"2":{"449":1,"452":1}}],["fire",{"0":{"437":1,"444":1},"2":{"322":1,"330":1,"385":1,"406":1,"431":1,"1614":2,"1623":1}}],["first",{"0":{"642":1,"1407":1,"1423":1,"1440":1,"1456":1,"1596":1,"1671":1},"2":{"216":1,"218":1,"233":1,"235":1,"263":1,"328":1,"336":1,"373":2,"382":3,"463":1,"480":1,"483":1,"488":1,"490":1,"492":1,"498":1,"499":1,"511":2,"515":1,"564":1,"579":1,"681":1,"685":1,"689":1,"692":1,"774":1,"836":1,"844":1,"915":1,"1013":1,"1035":3,"1036":2,"1063":1,"1089":1,"1315":2,"1322":1,"1359":1,"1361":1,"1362":1,"1375":1,"1384":1,"1409":1,"1419":2,"1421":1,"1424":1,"1425":1,"1431":1,"1473":2,"1581":1,"1587":1,"1593":4,"1596":1,"1621":1,"1649":1,"1656":1,"1657":1}}],["fits",{"0":{"888":1}}],["fit",{"2":{"321":1,"787":1,"949":1}}],["filled",{"2":{"1291":1}}],["fill",{"2":{"1084":1,"1230":1,"1506":1}}],["filters",{"2":{"1243":1}}],["filter",{"2":{"141":1,"1058":1,"1417":1}}],["filtered",{"2":{"137":1,"142":1,"836":1,"847":1,"870":1}}],["filtering",{"2":{"137":1,"862":1,"1058":1,"1067":1}}],["fileoutboxstore>",{"2":{"1377":1,"1378":1,"1379":1}}],["fileoutboxstore",{"0":{"1419":1},"1":{"1420":1,"1421":1},"2":{"1377":2,"1378":2,"1379":2,"1410":1,"1411":1,"1419":1}}],["file>",{"2":{"1316":1}}],["filemigrationsrunner",{"2":{"1112":2}}],["filesystems",{"2":{"1199":1}}],["filesystem",{"2":{"1112":1,"1190":1,"1199":1,"1201":1,"1378":4,"1379":4,"1420":1,"1445":1,"1449":1,"1450":1}}],["filesystem>",{"2":{"1112":1,"1378":1,"1379":1}}],["filestore",{"0":{"511":1}}],["files",{"0":{"413":1,"819":1,"924":1,"1069":1,"1133":1,"1249":1,"1253":1},"1":{"1254":1,"1255":1},"2":{"12":1,"568":1,"625":1,"628":1,"689":1,"751":1,"819":1,"825":1,"832":1,"836":1,"837":1,"845":1,"912":1,"1112":2,"1120":1,"1180":1,"1194":1,"1199":1,"1207":2,"1254":1,"1637":1}}],["file",{"0":{"51":1,"826":1,"1112":1,"1198":1,"1218":1,"1254":1,"1255":1,"1262":1,"1538":1,"1553":1},"1":{"1539":1},"2":{"4":2,"51":2,"53":1,"140":1,"142":1,"165":1,"251":1,"297":1,"499":1,"511":4,"526":1,"532":1,"535":1,"537":1,"540":2,"545":1,"577":1,"667":1,"668":1,"671":1,"819":1,"825":1,"827":1,"833":1,"921":2,"924":2,"1096":1,"1124":1,"1198":2,"1200":2,"1201":6,"1202":3,"1204":1,"1207":1,"1208":1,"1216":3,"1218":2,"1220":1,"1249":3,"1254":4,"1255":1,"1257":4,"1261":1,"1262":1,"1263":2,"1265":4,"1353":2,"1357":2,"1376":1,"1377":2,"1378":1,"1379":1,"1411":1,"1420":2,"1445":1,"1449":2,"1450":2,"1510":1,"1536":1,"1554":1,"1620":1,"1639":1}}],["fingerprints",{"2":{"1095":1}}],["fine",{"2":{"284":1,"370":1,"1567":1}}],["finishing",{"2":{"1045":1}}],["finisher",{"2":{"498":1}}],["finishes",{"2":{"483":2,"1041":1}}],["finished",{"2":{"328":1}}],["finish",{"2":{"261":1,"381":1,"480":2,"492":1,"1023":1,"1524":1}}],["final",{"2":{"224":1,"386":1,"388":1,"390":1,"391":1,"397":1,"400":2,"406":1,"569":1,"616":1,"795":1,"824":1,"891":2,"1112":1,"1202":1,"1379":3,"1380":1,"1437":1,"1578":1}}],["finalize",{"2":{"215":1}}],["finalized",{"2":{"121":1,"127":1,"132":1}}],["finalization",{"0":{"132":1}}],["findbyid",{"2":{"1320":1,"1332":1}}],["find",{"0":{"1294":1,"1332":1},"2":{"114":1,"158":1,"310":1,"862":1,"1052":1,"1294":1,"1380":2}}],["field=",{"2":{"1609":1}}],["fielderrors>",{"2":{"1586":1}}],["fielderrors",{"2":{"1581":1,"1583":1,"1586":1,"1593":2}}],["field",{"0":{"1505":1,"1590":1,"1596":1,"1605":1},"2":{"114":1,"1061":1,"1581":3,"1586":2,"1590":1,"1593":1,"1595":1,"1596":1,"1600":3,"1603":5,"1604":4,"1605":1,"1606":2,"1609":2,"1610":1,"1630":1}}],["fields",{"0":{"708":1,"883":1,"1388":1,"1429":1},"1":{"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1430":1,"1431":1,"1432":1,"1433":1,"1434":1},"2":{"110":1,"177":1,"224":1,"501":1,"862":1,"896":1,"966":1,"1252":1,"1328":1,"1339":1,"1382":1,"1497":1,"1505":1,"1508":1,"1517":2,"1521":2,"1586":1,"1612":1,"1613":1,"1620":1,"1621":1}}],["f",{"2":{"108":4,"748":1,"876":4,"1040":3,"1125":1,"1135":1,"1539":1,"1604":4,"1627":4}}],["fraction",{"2":{"1434":1}}],["framing",{"2":{"424":1,"425":1,"427":1}}],["frame",{"2":{"160":1,"386":1,"388":1,"400":1,"406":2,"409":1}}],["framework",{"2":{"94":1,"163":1,"199":1,"871":1}}],["front",{"2":{"1119":1,"1126":1}}],["fromerr",{"2":{"1530":1}}],["fromok",{"2":{"1530":1}}],["fromrow",{"2":{"1320":1,"1328":2}}],["fromrequest",{"2":{"507":1,"512":1}}],["from",{"0":{"282":1,"407":1,"471":1,"1171":1,"1248":1,"1249":1,"1250":1,"1253":1,"1259":1},"1":{"408":1,"1251":1,"1252":1,"1254":1,"1255":1},"2":{"44":1,"84":1,"108":1,"144":1,"154":1,"164":1,"200":1,"213":1,"220":1,"250":1,"266":4,"269":1,"271":1,"279":2,"309":1,"310":2,"337":1,"343":2,"348":1,"374":1,"384":1,"397":1,"399":1,"417":1,"424":1,"426":1,"431":1,"453":1,"467":3,"468":1,"475":1,"476":3,"478":1,"479":1,"480":1,"502":1,"512":2,"513":1,"516":1,"573":1,"609":1,"647":1,"649":1,"684":1,"688":1,"691":1,"693":1,"729":1,"781":1,"795":1,"803":1,"817":1,"822":1,"833":1,"857":1,"862":1,"871":1,"888":1,"901":2,"906":1,"914":1,"930":1,"933":2,"939":1,"941":1,"961":1,"966":3,"970":1,"982":1,"1056":1,"1065":1,"1068":1,"1104":2,"1107":1,"1108":1,"1116":1,"1134":1,"1142":1,"1145":1,"1146":1,"1157":1,"1215":1,"1216":1,"1242":1,"1290":1,"1314":1,"1319":1,"1327":1,"1328":2,"1332":1,"1334":1,"1337":1,"1346":1,"1359":1,"1361":1,"1362":1,"1365":2,"1441":1,"1445":1,"1478":1,"1479":1,"1494":1,"1497":1,"1501":1,"1504":1,"1506":1,"1521":1,"1524":1,"1549":1,"1570":1,"1580":1,"1581":1,"1586":1,"1591":2,"1612":1,"1617":1,"1627":2,"1651":1,"1657":1}}],["friction",{"2":{"550":1}}],["friendly",{"0":{"871":1},"1":{"872":1,"873":1},"2":{"286":1,"306":1,"431":1,"432":1,"447":1,"511":1,"543":1,"721":1,"725":1,"815":1,"912":1,"1221":1,"1384":1,"1441":1,"1494":1,"1593":1}}],["frequently",{"2":{"884":1}}],["frequency",{"2":{"848":1,"862":1,"1567":1}}],["fresh",{"2":{"503":2}}],["freshness",{"2":{"499":1,"503":1}}],["freed",{"2":{"1482":1}}],["free",{"2":{"297":1,"703":1,"712":1,"721":1,"848":1,"870":1,"1221":1,"1266":1,"1307":1,"1425":1,"1441":1,"1535":1,"1580":1,"1664":1}}],["further",{"2":{"1430":1}}],["fut",{"2":{"880":2}}],["futures",{"0":{"880":1},"1":{"881":1}}],["future",{"2":{"874":1,"876":1,"880":1,"881":2,"1042":3}}],["func",{"2":{"1035":1,"1044":2}}],["function",{"0":{"376":1,"740":1,"1073":1,"1560":1},"1":{"1561":1,"1562":1,"1563":1,"1564":1},"2":{"359":1,"431":1,"437":1,"817":2,"876":1,"895":1,"942":1,"943":1,"1035":1,"1103":1,"1155":1,"1199":1,"1308":1,"1339":1,"1445":1}}],["functions",{"0":{"483":1},"2":{"67":1,"179":1,"279":1,"421":1,"484":1,"492":1,"711":1,"713":1,"717":1,"727":1,"946":1,"1256":1,"1539":1}}],["fundamental",{"2":{"1382":1}}],["fundamentally",{"2":{"867":1}}],["fundamentals",{"0":{"119":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1},"2":{"124":1,"125":1,"1668":1}}],["fully",{"2":{"123":1,"172":1,"294":1,"307":1,"322":1,"541":1,"558":1,"641":1,"649":1,"681":1,"744":1,"751":1,"779":1,"961":1,"1328":1}}],["full",{"0":{"89":1,"108":1,"310":1,"1592":1},"2":{"232":1,"233":1,"300":2,"307":2,"321":1,"528":1,"533":1,"597":2,"601":1,"661":1,"766":1,"838":1,"858":1,"877":1,"999":1,"1058":1,"1063":1,"1209":1,"1221":1,"1243":1,"1268":1,"1478":1,"1479":1,"1480":1,"1586":1,"1603":1,"1616":2,"1652":1,"1664":1}}],["favors",{"2":{"1419":1}}],["far",{"2":{"1396":1}}],["faq",{"0":{"866":1},"1":{"867":1,"868":1,"869":1}}],["familiar",{"2":{"836":1}}],["facade",{"0":{"505":1,"1104":1},"2":{"514":1,"815":1,"912":2,"914":1,"925":1,"926":2,"929":1,"1104":1,"1412":1}}],["factor",{"0":{"1433":1},"2":{"1428":1,"1433":2}}],["factories",{"0":{"421":1,"422":1},"1":{"422":1},"2":{"427":1,"1115":2}}],["factory",{"0":{"292":1,"473":1,"899":1},"1":{"474":1},"2":{"899":1,"1103":1,"1115":2,"1318":3,"1319":3,"1320":3,"1321":3}}],["facing",{"2":{"135":1,"710":1,"712":1,"817":1,"835":1,"914":1,"1598":1}}],["facilities",{"2":{"40":1}}],["fan",{"2":{"274":1,"366":1}}],["fakehttptransport",{"2":{"1378":1,"1380":1}}],["fakehttptransport>",{"2":{"1377":1,"1378":1,"1379":1}}],["fake",{"0":{"1380":1},"2":{"207":1,"235":1,"1377":1,"1378":1,"1379":1,"1380":2}}],["fastapi",{"0":{"946":1},"2":{"164":1,"871":1,"930":1,"933":1}}],["fastify",{"2":{"164":1,"196":1}}],["fast",{"0":{"533":1},"2":{"146":1,"151":1,"204":1,"214":1,"231":1,"274":1,"376":1,"496":2,"526":2,"528":1,"530":2,"533":1,"534":1,"667":1,"685":1,"689":1,"692":1,"794":1,"871":1,"943":1,"1065":1,"1242":1,"1455":1,"1543":1,"1552":1,"1638":1}}],["failover",{"2":{"221":1}}],["failing",{"2":{"220":1,"1586":1,"1596":1}}],["fail",{"0":{"1404":1},"2":{"213":1,"221":2,"417":1,"420":1,"475":1,"568":1,"627":1,"689":1,"692":1,"698":1,"955":1,"1404":1,"1412":1,"1414":1,"1415":1}}],["fails",{"2":{"197":1,"213":1,"215":1,"221":1,"250":1,"274":1,"404":2,"420":1,"432":1,"861":1,"1017":1,"1039":1,"1048":1,"1089":1,"1149":1,"1162":1,"1199":1,"1202":2,"1240":1,"1586":1,"1591":1,"1596":2,"1612":1}}],["failed",{"0":{"1403":1},"2":{"141":2,"502":1,"700":1,"706":1,"1106":1,"1202":1,"1261":1,"1385":1,"1386":3,"1403":2,"1404":1,"1406":2,"1418":2,"1425":1}}],["failures",{"0":{"250":1},"2":{"217":1,"224":1,"417":1,"881":1,"1180":1,"1322":1,"1376":1,"1409":1,"1456":1}}],["failure",{"0":{"1378":1},"2":{"115":3,"213":2,"214":1,"219":1,"220":2,"469":1,"470":1,"471":1,"689":1,"690":2,"692":1,"708":2,"721":1,"723":1,"727":1,"736":1,"746":1,"749":1,"787":1,"794":1,"796":1,"799":1,"1062":1,"1164":1,"1180":1,"1248":1,"1252":1,"1255":1,"1376":1,"1378":2,"1380":1,"1409":1,"1415":1,"1422":1,"1423":1,"1438":1,"1448":1,"1528":1,"1530":1,"1581":1,"1613":1,"1620":1,"1671":1}}],["falls",{"2":{"1199":1}}],["fallback",{"0":{"221":1,"723":1,"978":1},"2":{"3":1,"5":1,"13":1,"25":1,"44":1,"79":1,"108":1,"110":1,"175":1,"715":1,"716":1,"717":1,"718":1,"722":1,"723":1,"937":1,"972":1,"1566":1,"1627":2}}],["false",{"0":{"739":1,"1378":1},"2":{"8":1,"89":2,"177":1,"182":1,"184":1,"188":1,"190":1,"222":1,"224":1,"382":1,"739":1,"743":1,"778":1,"797":2,"877":1,"882":1,"895":1,"1175":2,"1186":1,"1192":1,"1204":1,"1211":1,"1215":1,"1231":2,"1241":1,"1244":1,"1281":1,"1285":1,"1299":1,"1310":1,"1311":1,"1312":1,"1313":2,"1314":3,"1369":2,"1377":1,"1378":3,"1379":1,"1417":1,"1420":2,"1445":1,"1449":1,"1455":1,"1477":1,"1483":1,"1485":1,"1488":1,"1497":1,"1506":1,"1515":1,"1584":1,"1593":1}}],["focus",{"2":{"1658":1}}],["focused",{"2":{"98":1,"1539":1}}],["focuses",{"2":{"0":1,"37":1,"161":1,"321":1,"364":1,"1188":1,"1458":1,"1489":1,"1611":1}}],["four",{"2":{"1160":1}}],["foundations",{"0":{"1668":1}}],["foundational",{"2":{"1423":1,"1442":1,"1454":1}}],["foundation",{"2":{"363":1,"534":1,"724":1}}],["found",{"0":{"249":1},"2":{"113":1,"174":1,"217":1,"417":1,"684":1,"798":1,"827":2,"928":2,"937":2,"956":1,"980":1,"991":2,"992":1,"1026":2,"1320":1,"1332":1,"1613":1,"1634":1,"1646":1}}],["folding",{"2":{"1541":1}}],["folders",{"2":{"1133":1}}],["folder",{"0":{"1120":1},"2":{"568":1,"570":1,"592":1,"625":2,"698":1,"701":1}}],["folder|artifact",{"2":{"566":1,"695":1}}],["following",{"2":{"737":1}}],["follow",{"2":{"327":1,"586":1,"1500":1}}],["follows",{"2":{"2":1,"39":1,"200":1,"330":1,"587":1,"745":1,"844":1,"845":1,"853":1,"978":1,"1572":1}}],["forced",{"2":{"1523":1}}],["forces",{"2":{"1009":1,"1535":1}}],["force",{"2":{"528":1,"546":4,"547":4,"548":2,"568":1,"570":2,"592":1,"598":2,"601":1,"610":1,"671":4,"845":1,"1347":1,"1500":1,"1522":1}}],["forcibly",{"2":{"284":1}}],["forwarding",{"2":{"886":1}}],["forwarded",{"2":{"675":1,"691":1,"693":1,"1127":3,"1134":2}}],["forward",{"2":{"515":1,"954":1,"1101":1,"1304":1,"1370":1,"1444":1,"1450":2}}],["forget",{"0":{"437":1,"444":1},"2":{"322":1,"330":1,"385":1,"406":1,"431":1,"1614":2,"1623":1}}],["forgetting",{"0":{"268":1},"2":{"344":1,"461":1}}],["forever",{"2":{"219":1,"1117":1}}],["forms",{"2":{"739":1,"926":1,"985":1,"1067":1,"1530":1}}],["form",{"0":{"193":1,"1606":1},"2":{"186":2,"193":2,"758":1,"1549":2,"1567":1,"1580":1,"1599":2,"1606":3}}],["formatted",{"2":{"1573":1}}],["formatting",{"0":{"920":1,"1200":1},"2":{"203":1,"528":1,"794":1,"795":2,"796":1,"799":1,"836":1,"838":1,"847":1,"1490":1,"1566":1,"1567":2}}],["format=kv",{"2":{"1527":1}}],["format=json",{"2":{"1522":2,"1527":1}}],["formats",{"0":{"758":1,"1522":1},"2":{"920":1,"1083":1,"1554":1}}],["format",{"0":{"222":1,"236":1,"826":1,"1521":1,"1672":1},"2":{"111":1,"116":1,"209":1,"226":1,"507":1,"674":2,"677":1,"706":1,"839":1,"1461":1,"1465":1,"1495":1,"1508":1,"1522":2,"1567":1,"1576":1,"1647":1}}],["forbidden",{"2":{"157":1,"217":1,"956":1}}],["for",{"0":{"184":1,"185":1,"186":1,"196":1,"226":1,"255":1,"454":1,"872":1,"944":1,"1032":1,"1051":1,"1557":1,"1558":1,"1562":1,"1569":1,"1622":1,"1657":1,"1673":1},"1":{"227":1,"228":1,"229":1,"230":1,"231":1,"455":1,"456":1,"457":1},"2":{"53":1,"66":1,"81":1,"82":1,"84":3,"85":1,"91":1,"108":2,"110":1,"116":1,"127":1,"136":1,"137":1,"140":2,"143":2,"144":1,"151":1,"161":1,"162":1,"168":1,"184":1,"185":1,"186":1,"188":1,"195":1,"197":1,"201":1,"203":1,"205":1,"213":1,"214":2,"217":1,"220":1,"222":1,"231":1,"232":1,"235":1,"252":1,"257":1,"265":2,"266":1,"271":1,"272":1,"273":2,"276":1,"290":1,"293":1,"296":1,"310":1,"317":1,"320":2,"324":3,"325":1,"328":2,"331":2,"340":1,"346":1,"360":1,"363":1,"366":1,"368":2,"370":2,"375":1,"376":1,"379":1,"381":1,"382":1,"385":3,"393":1,"395":1,"411":2,"416":1,"419":1,"420":1,"431":1,"442":1,"443":2,"445":2,"447":2,"448":1,"455":1,"457":2,"458":1,"459":4,"461":2,"462":3,"468":1,"478":1,"479":4,"480":1,"484":1,"498":1,"499":1,"501":1,"505":1,"507":2,"509":1,"510":1,"511":1,"512":1,"515":2,"526":1,"528":1,"529":1,"533":1,"543":2,"545":2,"546":1,"551":1,"556":1,"577":1,"579":1,"589":1,"615":1,"620":1,"629":1,"632":1,"659":1,"661":1,"669":2,"670":2,"678":1,"681":1,"693":1,"703":1,"706":1,"710":3,"715":1,"730":1,"734":1,"739":1,"747":1,"751":2,"753":1,"755":1,"768":1,"779":1,"783":1,"817":2,"822":1,"824":1,"825":1,"835":2,"838":1,"844":1,"848":1,"854":1,"858":1,"862":1,"870":2,"871":2,"873":1,"874":1,"877":1,"879":1,"885":1,"888":1,"890":1,"897":1,"898":1,"900":1,"912":2,"913":1,"918":1,"923":1,"928":1,"929":3,"930":1,"931":1,"932":1,"933":2,"935":1,"936":2,"940":1,"942":1,"946":1,"948":1,"950":1,"951":1,"952":1,"954":1,"955":1,"956":1,"958":1,"959":1,"961":1,"964":2,"965":2,"968":1,"969":1,"972":1,"1001":2,"1004":1,"1023":1,"1026":2,"1027":1,"1032":1,"1033":2,"1036":2,"1038":1,"1039":1,"1041":1,"1046":1,"1050":1,"1052":1,"1053":1,"1078":1,"1079":1,"1084":1,"1087":2,"1090":1,"1095":1,"1101":1,"1102":3,"1116":1,"1117":1,"1118":1,"1127":2,"1134":1,"1136":1,"1139":1,"1140":3,"1147":1,"1155":1,"1157":1,"1158":1,"1163":1,"1167":2,"1180":2,"1187":5,"1188":1,"1194":1,"1195":1,"1196":1,"1201":1,"1208":3,"1212":1,"1215":1,"1221":1,"1223":1,"1227":2,"1242":1,"1244":2,"1245":1,"1254":2,"1256":2,"1265":4,"1266":2,"1268":3,"1270":1,"1305":1,"1307":4,"1311":2,"1315":1,"1317":1,"1319":1,"1327":3,"1328":2,"1329":2,"1336":1,"1337":1,"1339":1,"1351":1,"1355":1,"1362":1,"1366":1,"1375":1,"1376":1,"1379":1,"1380":1,"1381":3,"1384":1,"1389":1,"1397":1,"1399":1,"1419":1,"1421":1,"1423":1,"1425":1,"1432":1,"1439":1,"1448":2,"1449":1,"1454":1,"1458":1,"1472":2,"1473":5,"1474":1,"1490":1,"1512":1,"1516":1,"1524":1,"1527":2,"1528":3,"1536":1,"1539":1,"1547":1,"1552":1,"1554":2,"1556":1,"1557":1,"1561":1,"1567":2,"1580":2,"1581":1,"1587":1,"1591":1,"1593":2,"1596":1,"1597":1,"1598":1,"1599":2,"1600":2,"1603":1,"1605":1,"1606":1,"1610":6,"1614":1,"1620":1,"1621":1,"1622":1,"1623":1,"1626":1,"1627":1,"1630":1,"1637":1,"1638":2,"1648":1,"1651":1,"1659":1,"1660":1,"1666":1,"1672":1}}],["b=",{"2":{"1333":1}}],["blue",{"2":{"798":3,"1129":1}}],["blob",{"2":{"1102":2,"1339":3}}],["blog",{"2":{"570":4,"572":1,"598":1,"612":3,"626":1,"629":1,"666":1,"692":1,"701":2,"1349":3}}],["blocks",{"0":{"1326":1},"1":{"1327":1},"2":{"81":1,"105":1,"119":1,"321":1,"335":1,"348":1,"355":1,"811":1,"879":1,"897":1,"1013":1,"1045":1,"1103":1,"1117":1,"1489":1}}],["blocked",{"2":{"79":1,"888":1,"1626":1,"1630":1}}],["block",{"2":{"66":1,"84":1,"168":1,"324":1,"325":1,"848":1,"853":1,"882":1,"883":2,"889":2,"900":1,"902":1,"948":1,"1007":1}}],["blocking",{"0":{"1013":1,"1027":1},"2":{"17":1,"70":1,"81":2,"103":1,"142":1,"152":1,"284":1,"294":1,"376":1,"456":1,"837":1,"867":1,"889":1,"895":1,"933":2,"935":1,"942":1,"946":1,"1013":2,"1023":1,"1027":2,"1032":1,"1051":1,"1059":1,"1628":1}}],["bio",{"2":{"1590":2}}],["bits",{"2":{"1576":2}}],["bit",{"2":{"1573":2}}],["bigint",{"2":{"1107":1,"1112":1}}],["big",{"2":{"514":1,"1300":1,"1305":1}}],["binarydir",{"2":{"693":1}}],["binary",{"0":{"1121":1},"1":{"1122":1,"1123":1},"2":{"424":1,"538":1,"539":1,"597":1,"1118":1,"1120":1,"1129":1,"1132":1,"1339":1,"1627":1}}],["bindnull",{"2":{"1100":1}}],["binding",{"0":{"1102":1},"2":{"469":1,"823":2,"1001":1,"1102":1,"1107":1,"1318":1,"1606":1}}],["bind",{"0":{"469":2},"2":{"260":1,"419":1,"420":3,"425":4,"468":2,"476":2,"477":2,"479":2,"1017":2,"1100":1,"1102":8,"1117":1,"1322":2,"1506":1}}],["binds",{"2":{"259":1,"372":1,"420":1,"469":1,"935":1,"1007":1,"1100":3}}],["bin",{"2":{"242":1,"249":1,"1120":1,"1122":2,"1123":2,"1124":2,"1129":4}}],["banners",{"2":{"1524":2}}],["banner",{"0":{"1494":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"1488":1,"1490":1,"1494":1,"1495":2,"1497":1,"1502":1,"1504":4,"1506":1,"1507":1}}],["batches",{"2":{"514":1}}],["batch",{"0":{"229":1,"1615":1,"1624":1},"2":{"205":1,"229":2,"1361":1,"1363":3,"1365":1,"1366":2,"1367":1,"1370":1,"1377":1,"1378":1,"1379":1,"1611":1,"1615":4,"1616":1,"1618":1,"1622":1,"1624":3}}],["bad",{"2":{"112":1,"159":1,"217":2,"231":1,"928":1,"956":1,"1149":1,"1150":1,"1151":1,"1260":1,"1378":1,"1603":1,"1604":1,"1606":1}}],["backwards",{"2":{"1557":1}}],["backslash",{"2":{"1227":1}}],["backbone",{"2":{"564":1,"985":1}}],["backlog",{"2":{"419":1,"420":1,"942":1,"1043":2}}],["backed",{"2":{"292":1,"342":1,"366":1,"412":2,"421":1,"474":1,"511":1,"890":1,"973":1,"1051":1,"1411":1}}],["backend",{"0":{"1668":1},"2":{"252":1,"253":1,"272":1,"292":1,"412":1,"417":1,"420":1,"426":1,"427":1,"463":1,"478":4,"504":1,"549":1,"552":1,"654":1,"1473":1,"1599":1,"1610":2,"1649":1,"1657":1,"1666":1,"1673":1}}],["backends",{"2":{"252":1,"265":1,"287":1,"422":1,"1097":1}}],["backpressure",{"0":{"237":1},"2":{"219":1,"425":1}}],["backoff",{"2":{"217":1,"462":1,"1365":1,"1425":1,"1427":1,"1437":1,"1440":1}}],["back",{"2":{"107":1,"255":1,"269":1,"372":1,"425":1,"428":1,"435":1,"447":1,"449":1,"456":1,"476":2,"484":1,"498":1,"932":1,"936":1,"1109":2,"1147":2,"1199":1,"1290":1,"1318":1,"1593":1,"1617":1,"1625":1}}],["background",{"0":{"1373":1},"2":{"103":1,"331":1,"385":1,"392":3,"406":2,"431":1,"553":1,"812":1,"813":1,"879":1,"897":1,"943":1,"1033":1,"1050":1,"1078":1,"1361":2,"1362":1,"1364":1}}],["basemodel",{"0":{"1604":1},"2":{"1599":1,"1604":3,"1610":1}}],["baseline",{"0":{"1527":1}}],["baserepository",{"0":{"1329":1},"1":{"1330":1,"1331":1,"1332":1,"1333":1,"1334":1},"2":{"1320":1,"1329":1,"1350":1}}],["bases",{"2":{"793":1}}],["base",{"0":{"1431":1},"2":{"359":1,"592":2,"781":1,"795":1,"968":1,"1215":4,"1327":1,"1428":1,"1433":1,"1437":2,"1478":1,"1479":1,"1497":1,"1498":1,"1505":1,"1506":1,"1586":1,"1591":1}}],["based",{"0":{"181":1,"202":1,"227":1,"228":1,"1309":1,"1603":1},"2":{"3":1,"54":2,"88":1,"168":1,"180":1,"188":1,"209":1,"235":1,"290":1,"297":1,"321":1,"322":1,"345":1,"397":1,"417":1,"468":1,"478":1,"499":1,"507":1,"532":1,"535":1,"558":1,"638":1,"640":1,"666":1,"733":1,"874":1,"925":1,"942":1,"972":1,"973":1,"985":1,"1033":1,"1096":1,"1101":1,"1160":1,"1266":1,"1308":1,"1318":1,"1361":1,"1376":1,"1380":1,"1417":1,"1419":1,"1450":1,"1458":1,"1490":1,"1573":1,"1599":1,"1649":2}}],["basic",{"0":{"112":1,"156":1,"281":1,"348":1,"368":1,"401":1,"626":1,"655":1,"721":1,"748":1,"974":1,"1058":1,"1318":1,"1497":1,"1512":1,"1529":1,"1574":1},"1":{"402":1,"403":1},"2":{"102":1,"104":1,"108":1,"337":2,"530":1,"692":1,"789":1,"826":1,"829":1,"889":1,"924":1,"931":1,"932":1,"936":1,"1053":1,"1058":1,"1063":1,"1339":1}}],["bashmkdir",{"2":{"1636":1}}],["bashunset",{"2":{"1524":1}}],["bashexport",{"2":{"1511":1,"1522":1,"1523":1,"1524":1,"1527":2}}],["bashecho",{"2":{"242":1}}],["bashjournalctl",{"2":{"1125":1}}],["bashgit",{"2":{"644":1}}],["bashscp",{"2":{"1122":1,"1129":1}}],["bashsync",{"2":{"640":1}}],["bashsudo",{"2":{"245":1,"1123":1,"1124":2,"1126":1,"1127":3,"1128":1}}],["bashhttp",{"2":{"314":1}}],["bashbrew",{"2":{"246":1}}],["bashwhich",{"2":{"242":1}}],["bash",{"2":{"242":1,"568":1,"607":1,"609":1,"610":1,"616":1,"617":1,"618":1,"619":1,"625":1,"698":1,"871":4,"1120":1,"1347":1,"1500":2,"1636":1}}],["bashcurl",{"2":{"90":3,"109":2,"165":1,"195":1,"197":1,"227":1,"242":1,"313":1,"802":1,"905":1,"992":1,"993":1,"994":1,"1130":1,"1309":1,"1310":1,"1311":1,"1313":1,"1314":1,"1352":1,"1356":1,"1641":1,"1644":1,"1645":1}}],["bashvix",{"2":{"83":1,"109":1,"165":2,"312":2,"517":1,"519":1,"520":1,"522":1,"525":1,"530":8,"536":1,"538":2,"544":1,"547":6,"552":1,"563":2,"566":1,"570":4,"572":1,"574":1,"576":1,"578":1,"580":1,"583":1,"584":1,"587":1,"589":1,"591":1,"598":4,"603":1,"606":1,"607":1,"608":1,"609":1,"611":1,"612":5,"614":1,"620":5,"621":2,"623":1,"626":3,"627":2,"629":1,"631":1,"633":1,"634":3,"639":1,"642":1,"643":4,"644":1,"646":1,"648":1,"649":1,"650":2,"652":1,"654":1,"664":1,"666":1,"667":1,"668":1,"675":1,"676":4,"680":1,"682":1,"683":2,"687":1,"690":2,"691":1,"692":6,"695":1,"701":7,"702":1,"844":1,"940":1,"970":1,"1316":1,"1341":1,"1343":1,"1344":1,"1345":1,"1346":1,"1348":2,"1349":4,"1352":1,"1356":1,"1501":1,"1502":1,"1503":1,"1574":1,"1640":1}}],["busy",{"2":{"1043":1}}],["business",{"2":{"462":1,"712":1,"959":1,"1605":1,"1625":1}}],["bundle",{"2":{"939":1,"962":2,"968":1}}],["budget",{"2":{"217":1}}],["but",{"2":{"142":1,"150":1,"218":1,"266":1,"397":1,"442":1,"457":1,"543":1,"688":1,"706":1,"715":1,"787":1,"867":1,"887":1,"1028":1,"1058":1,"1119":1,"1140":1,"1327":1,"1354":1,"1358":1,"1379":1,"1386":1,"1488":1,"1602":1,"1615":1,"1637":1,"1638":1}}],["built",{"0":{"659":1},"2":{"98":1,"125":1,"342":1,"345":1,"361":1,"410":1,"499":1,"653":1,"678":1,"779":1,"836":1,"880":1,"949":1,"1001":1,"1096":1,"1097":1,"1098":1,"1118":1,"1136":1,"1158":1,"1188":1,"1245":1,"1281":1,"1317":1,"1351":1,"1355":1,"1375":1,"1648":1}}],["builds",{"2":{"363":1,"521":1,"534":1,"540":1,"541":1,"545":1,"564":1,"641":1,"887":1,"916":1,"927":2,"975":1,"1157":3,"1303":2,"1331":1,"1333":1,"1350":1}}],["building",{"0":{"1326":1},"1":{"1327":1},"2":{"105":1,"119":2,"321":1,"551":1,"851":1,"873":1,"984":1,"1043":1,"1116":1,"1221":1,"1268":1,"1376":1,"1489":1,"1657":2,"1673":1}}],["build",{"0":{"244":1,"524":1,"966":1,"1097":1,"1121":1,"1122":1,"1123":1,"1136":1,"1563":1,"1618":1,"1636":1},"1":{"245":1,"246":1,"247":1,"525":1,"526":1,"1122":1,"1123":1,"1137":1,"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"92":1,"127":1,"199":1,"245":2,"247":1,"308":1,"366":1,"383":1,"497":1,"512":1,"524":1,"525":1,"526":1,"527":3,"528":2,"529":2,"530":10,"531":3,"533":2,"534":1,"555":1,"588":1,"599":1,"629":1,"652":1,"661":1,"663":1,"669":1,"678":1,"688":2,"693":1,"712":1,"722":1,"744":1,"827":1,"912":1,"919":1,"966":2,"1030":1,"1118":1,"1123":7,"1136":1,"1137":1,"1142":1,"1145":1,"1146":1,"1157":1,"1220":1,"1243":1,"1319":1,"1328":1,"1337":1,"1354":1,"1358":1,"1547":1,"1589":1,"1593":1,"1597":1,"1598":1,"1611":1,"1617":1,"1636":3,"1655":1}}],["builders",{"0":{"1141":1,"1217":1,"1302":1,"1303":1,"1585":1},"1":{"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1303":1,"1304":1},"2":{"53":1,"1209":1,"1220":1,"1307":1}}],["builder",{"0":{"46":1,"47":1},"2":{"507":1,"965":1,"1216":2}}],["buffered",{"2":{"366":1,"853":2,"1627":1}}],["buffering",{"2":{"233":1,"427":1,"855":1,"1455":1}}],["buffer",{"0":{"418":1},"2":{"215":1,"418":2,"424":1,"467":1,"478":2,"1084":1}}],["buffers",{"2":{"210":1,"418":1}}],["buf",{"0":{"470":1,"471":1},"2":{"86":4,"310":4,"416":2,"424":3,"425":4,"468":2,"471":1,"476":4,"1084":1}}],["bracket",{"2":{"1244":1}}],["brackets",{"0":{"1227":1}}],["branch",{"2":{"274":1,"632":1,"636":1,"644":1,"721":1,"1161":1}}],["browser",{"2":{"1629":1}}],["broken",{"2":{"417":1}}],["broadcast|multicast>",{"2":{"617":1}}],["broadcasts",{"2":{"107":1}}],["broadcasting",{"2":{"81":1,"1626":1}}],["broadcast",{"0":{"76":1,"77":1,"78":1},"1":{"77":1,"78":1},"2":{"67":1,"77":1,"78":1,"81":1,"102":1,"106":1,"108":2,"617":1,"1626":3,"1627":2,"1628":3,"1630":2}}],["bring",{"2":{"212":1}}],["bridges",{"2":{"1268":1}}],["bridge",{"0":{"79":1,"1627":1},"2":{"67":1,"79":3,"106":1,"108":6,"255":1,"384":1,"1351":1,"1355":1,"1626":2,"1627":6,"1630":1}}],["breaking",{"0":{"460":1}}],["breaker",{"0":{"220":1},"2":{"220":1,"225":1}}],["breakdown",{"0":{"129":1},"1":{"130":1,"131":1,"132":1}}],["break",{"2":{"86":4,"310":2,"425":1,"1525":1,"1561":1,"1593":6}}],["b",{"0":{"173":1,"1123":1},"2":{"48":1,"108":4,"328":2,"486":2,"494":4,"620":1,"621":1,"732":4,"733":3,"748":1,"1102":1,"1123":1,"1146":1,"1149":2,"1218":1,"1227":1,"1275":1,"1277":1,"1279":1,"1294":2,"1354":1,"1358":1,"1470":1,"1471":1,"1491":1,"1529":3,"1545":2,"1546":2,"1547":2,"1613":4,"1621":1,"1627":4}}],["bypasses",{"2":{"532":1}}],["bypass",{"2":{"195":5}}],["byte",{"2":{"288":1,"310":1,"415":1,"418":2,"424":2,"425":1,"427":1,"466":1,"471":1,"476":1,"477":1,"1449":1,"1541":1,"1552":1,"1576":2}}],["bytes",{"2":{"177":1,"219":1,"223":1,"230":1,"237":1,"417":1,"424":2,"467":3,"470":1,"476":1,"807":1,"826":1,"830":1,"910":1,"936":1,"996":1,"1083":2,"1084":3,"1087":2,"1088":2,"1095":1,"1102":2,"1576":1,"1617":2,"1625":1}}],["byte>",{"2":{"86":3,"310":3,"416":2,"424":2,"425":2,"468":2,"476":2,"477":1}}],["by",{"0":{"129":1,"838":1,"868":1,"869":1,"1172":1,"1173":1,"1332":1,"1333":1,"1334":1,"1545":1,"1546":1},"1":{"130":1,"131":1,"132":1},"2":{"36":1,"45":1,"66":1,"81":1,"91":1,"105":1,"123":1,"137":1,"140":1,"247":1,"251":2,"253":1,"260":1,"286":1,"316":1,"322":1,"331":1,"336":1,"343":1,"344":1,"360":1,"363":1,"366":2,"375":1,"378":2,"383":1,"386":1,"395":1,"413":1,"415":1,"433":1,"448":1,"459":1,"460":1,"463":1,"466":1,"467":1,"474":1,"475":1,"484":1,"491":1,"504":1,"511":1,"513":1,"567":1,"571":1,"579":1,"601":1,"644":1,"646":1,"649":2,"650":1,"655":2,"683":2,"696":1,"699":1,"703":1,"713":1,"750":1,"778":1,"783":1,"821":2,"836":2,"837":1,"839":1,"844":1,"847":1,"851":1,"853":1,"865":1,"867":1,"871":1,"877":1,"881":1,"887":1,"888":1,"890":1,"912":3,"913":1,"916":1,"918":1,"926":1,"937":1,"939":1,"951":1,"968":2,"972":1,"974":1,"1004":1,"1026":1,"1033":1,"1035":2,"1039":1,"1044":1,"1051":1,"1066":1,"1077":1,"1101":1,"1104":1,"1114":1,"1208":1,"1209":1,"1265":1,"1308":1,"1313":1,"1314":1,"1359":1,"1363":1,"1365":1,"1366":2,"1374":2,"1380":8,"1389":1,"1404":1,"1416":1,"1421":1,"1427":1,"1472":1,"1482":1,"1488":2,"1490":1,"1500":1,"1502":1,"1503":1,"1510":1,"1523":1,"1525":1,"1529":1,"1539":1,"1551":1,"1552":1,"1591":1,"1630":1}}],["bottlenecks",{"2":{"1650":1}}],["both",{"0":{"370":1},"2":{"54":1,"80":1,"180":1,"216":1,"239":1,"370":1,"406":1,"408":1,"415":1,"458":1,"480":1,"484":1,"492":1,"722":1,"926":1,"958":1,"967":1,"1045":2,"1112":1,"1220":1,"1589":1}}],["bobby",{"2":{"1320":1}}],["bob",{"2":{"1320":3}}],["boilerplate",{"2":{"1136":1,"1156":1,"1158":1,"1187":1,"1323":1,"1639":1}}],["bodies",{"2":{"319":1,"320":1,"923":1,"1580":1}}],["body>",{"2":{"913":2,"921":1}}],["body",{"0":{"28":1,"177":1,"807":1,"910":1,"995":1,"996":1,"997":1},"1":{"996":1,"997":1},"2":{"24":1,"28":2,"122":1,"131":1,"168":1,"177":7,"188":1,"223":1,"230":4,"309":1,"310":4,"393":1,"432":1,"501":1,"512":2,"800":1,"807":5,"816":1,"826":1,"830":1,"871":1,"903":1,"910":5,"914":1,"917":2,"923":1,"926":1,"932":2,"936":2,"964":1,"978":1,"979":1,"981":1,"996":6,"1006":1,"1026":1,"1053":1,"1056":3,"1058":1,"1063":1,"1065":1,"1185":3,"1308":1}}],["bounds",{"2":{"1168":1,"1177":1,"1586":1,"1589":1,"1591":1}}],["boundary=",{"2":{"1549":2}}],["boundary",{"0":{"1549":1},"2":{"587":1,"1067":1,"1536":1,"1549":3}}],["boundaries",{"2":{"284":1,"579":1,"1066":1}}],["bounded",{"2":{"510":1,"1052":1,"1440":1}}],["bound",{"0":{"339":1,"1015":1},"2":{"265":1,"366":1,"368":1,"445":2,"823":3,"867":1,"935":1,"936":1,"1015":2,"1017":1,"1032":2,"1039":1}}],["boring",{"2":{"213":1}}],["boom",{"2":{"404":1}}],["boost",{"0":{"1003":1},"2":{"246":1,"912":1,"914":1,"919":1,"931":2,"1001":2,"1003":2,"1022":1,"1056":1}}],["booleans",{"2":{"1474":1}}],["boolean",{"0":{"797":1},"2":{"177":1,"276":1,"705":1,"706":1,"723":1,"728":1,"743":1,"1270":1,"1477":1}}],["bool>",{"2":{"108":1,"177":1,"733":1,"748":1,"1175":1,"1186":1,"1298":1,"1627":1}}],["bool",{"0":{"8":1,"728":1,"735":1,"1276":1,"1477":1},"1":{"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"8":1,"42":1,"43":1,"44":1,"115":1,"177":1,"335":1,"366":1,"409":1,"416":1,"419":1,"468":1,"707":1,"719":1,"728":2,"734":1,"736":3,"740":2,"741":1,"743":1,"745":1,"747":1,"772":1,"777":1,"795":1,"806":1,"829":1,"876":1,"882":1,"909":1,"994":1,"1102":2,"1175":1,"1181":2,"1186":1,"1211":2,"1212":1,"1213":1,"1231":1,"1268":1,"1270":1,"1277":1,"1283":1,"1284":1,"1285":1,"1287":1,"1290":1,"1298":1,"1299":2,"1300":1,"1314":1,"1339":1,"1364":1,"1369":2,"1379":1,"1380":2,"1413":2,"1414":4,"1417":2,"1418":4,"1420":2,"1428":1,"1445":1,"1449":1,"1474":1,"1477":1,"1483":1,"1485":2,"1490":1,"1542":4,"1543":2,"1584":1,"1593":1}}],["bootcamps",{"2":{"1672":1}}],["boots",{"2":{"1351":1,"1355":1}}],["bootstrap",{"0":{"618":1},"2":{"613":1,"615":1,"618":1,"620":2}}],["bootstraps",{"2":{"601":1}}],["boot",{"2":{"4":1,"618":1,"834":1}}],["besides",{"2":{"1221":1}}],["best",{"0":{"284":1,"343":1,"393":1,"834":1,"853":1},"2":{"133":1,"142":1,"385":1,"392":1,"393":1,"511":1,"734":1,"833":1,"853":1,"1033":1,"1150":1,"1199":1,"1339":1,"1364":1,"1367":1,"1523":1,"1663":1}}],["beast",{"2":{"912":1,"914":1,"919":1,"931":1,"932":1,"1001":1,"1003":1,"1022":1,"1056":1}}],["bearer",{"2":{"88":1,"89":2,"90":1,"157":1,"507":1,"994":1,"1543":2}}],["being",{"2":{"888":1,"1386":1,"1409":1}}],["belong",{"2":{"869":1}}],["below",{"2":{"706":1,"1522":1,"1620":1}}],["between",{"2":{"725":1,"836":1,"855":1,"983":1,"1067":1,"1266":1,"1268":1,"1306":1,"1437":1,"1602":1}}],["better",{"2":{"159":1,"872":1}}],["been",{"2":{"277":1}}],["beginning",{"2":{"1519":1}}],["beginner",{"0":{"871":1},"1":{"872":1,"873":1},"2":{"815":1,"1221":1}}],["beginners",{"2":{"164":1,"196":1,"930":1,"948":1}}],["begin",{"2":{"954":2,"957":1,"1099":1}}],["begins",{"2":{"274":1,"1109":1,"1335":1}}],["because",{"2":{"218":1,"264":1,"269":1,"304":1,"375":1,"393":1,"448":1,"848":1,"868":1,"869":1,"1036":1,"1147":1,"1150":1}}],["become",{"2":{"179":1,"486":1,"853":1,"1027":1,"1230":1,"1305":1,"1378":1}}],["becomes",{"2":{"130":1,"272":1,"406":1,"858":1,"879":1,"897":1,"900":1,"1038":1,"1044":1,"1288":2,"1291":1,"1366":1,"1397":1,"1495":1,"1550":1}}],["behave",{"2":{"1483":1}}],["behaves",{"2":{"364":1,"1595":1}}],["behaviors",{"2":{"366":1,"375":1,"935":1,"936":1,"942":1}}],["behavioral",{"2":{"1":1,"38":1,"1046":1}}],["behavior",{"0":{"35":1,"66":1,"264":1,"379":1,"388":1,"417":1,"420":1,"452":1,"456":1,"478":1,"489":1,"513":1,"577":1,"601":1,"651":1,"661":1,"684":1,"691":1,"699":1,"717":1,"774":1,"787":1,"808":1,"816":1,"833":1,"852":1,"881":1,"911":1,"923":1,"968":1,"998":1,"1041":1,"1228":1,"1239":1,"1421":1,"1483":1,"1510":1,"1594":1},"1":{"490":1,"491":1,"853":1,"854":1,"1229":1,"1230":1,"1231":1,"1240":1,"1241":1,"1595":1,"1596":1,"1597":1},"2":{"0":1,"2":1,"4":1,"13":1,"37":1,"39":1,"79":1,"104":1,"125":1,"133":1,"134":1,"154":1,"163":1,"213":2,"221":1,"225":1,"266":1,"306":1,"355":1,"366":1,"384":1,"395":1,"397":1,"408":1,"420":1,"445":1,"504":1,"514":1,"548":1,"550":1,"553":1,"662":1,"723":1,"731":1,"745":1,"749":1,"755":1,"766":1,"767":1,"770":1,"780":1,"799":1,"819":1,"833":1,"836":1,"844":2,"858":1,"871":1,"902":1,"954":1,"957":1,"983":1,"1027":1,"1033":1,"1039":1,"1073":1,"1173":1,"1192":1,"1199":1,"1245":1,"1251":1,"1252":1,"1254":1,"1255":1,"1264":1,"1304":1,"1323":1,"1327":1,"1361":1,"1362":1,"1375":1,"1437":1,"1440":1,"1449":1,"1450":1,"1489":1,"1614":1}}],["behind",{"2":{"161":1,"848":1}}],["benchmarks",{"2":{"153":1,"1557":1}}],["benchmark",{"2":{"153":1,"1058":1}}],["benchmarking",{"0":{"153":1},"2":{"1458":1}}],["before",{"0":{"1452":1},"2":{"66":1,"119":1,"168":1,"218":1,"225":1,"270":1,"284":2,"366":1,"368":1,"379":1,"443":1,"458":1,"459":1,"514":1,"518":1,"616":1,"633":1,"642":1,"669":1,"681":1,"736":1,"744":1,"749":1,"824":1,"854":1,"879":1,"915":1,"949":1,"1010":1,"1027":1,"1039":1,"1058":1,"1308":1,"1363":1,"1366":1,"1379":1,"1384":1,"1409":2,"1412":1,"1423":1,"1431":1,"1442":1,"1456":1,"1524":1}}],["be",{"0":{"1570":1},"2":{"2":1,"4":1,"10":1,"39":1,"54":1,"62":1,"81":1,"110":1,"133":1,"138":1,"142":1,"161":1,"216":1,"217":1,"221":1,"238":1,"266":1,"277":1,"287":1,"319":1,"331":1,"347":1,"366":1,"370":1,"379":1,"392":1,"415":1,"417":2,"420":1,"447":1,"459":1,"463":1,"466":1,"488":1,"523":1,"551":1,"588":1,"592":1,"601":1,"633":2,"644":2,"693":1,"712":1,"717":1,"724":1,"755":1,"767":1,"780":1,"783":1,"785":1,"817":1,"818":1,"820":1,"829":1,"832":1,"834":1,"837":1,"848":2,"853":1,"854":1,"859":3,"868":1,"869":1,"926":1,"938":1,"953":1,"954":1,"977":1,"986":1,"1051":1,"1058":1,"1083":1,"1087":1,"1097":1,"1109":1,"1142":2,"1150":1,"1151":1,"1164":1,"1202":1,"1221":1,"1251":1,"1254":1,"1327":1,"1362":1,"1363":1,"1374":1,"1378":1,"1382":1,"1386":2,"1430":1,"1439":1,"1441":1,"1454":1,"1478":1,"1489":1,"1491":1,"1503":1,"1510":1,"1535":1,"1597":1,"1601":1,"1602":1,"1612":2,"1613":1,"1621":1,"1622":1}}],["cxx",{"2":{"1635":3}}],["cvperiodic",{"2":{"1046":1}}],["cvidle",{"2":{"1038":1,"1045":1}}],["cwd",{"2":{"670":1,"676":1}}],["city",{"2":{"1238":1}}],["ciphertext",{"2":{"1089":1}}],["ci",{"2":{"601":1,"693":1,"845":1,"853":1}}],["ci=1",{"2":{"593":1}}],["circuit",{"0":{"220":1},"2":{"220":1,"225":1}}],["cdn",{"2":{"961":1}}],["cdns",{"2":{"939":1}}],["cd",{"2":{"563":1,"599":1,"600":1,"659":1,"1123":1,"1636":1}}],["ccache",{"2":{"526":1,"528":1}}],["certbot",{"0":{"1128":1},"2":{"1119":1,"1128":4}}],["certificates",{"2":{"161":1}}],["cerr",{"2":{"1081":1,"1106":1,"1107":1,"1112":1,"1202":1,"1261":1,"1318":1,"1319":1,"1320":1,"1321":1,"1587":1,"1612":1,"1613":1}}],["centralized",{"2":{"645":1}}],["centralizes",{"2":{"422":1}}],["central",{"2":{"551":1}}],["c",{"0":{"1541":1},"2":{"310":9,"442":3,"707":2,"733":3,"921":1,"1103":1,"1112":4,"1227":1,"1263":1,"1318":2,"1321":2,"1336":1,"1354":1,"1358":1,"1491":1,"1545":2,"1546":2,"1547":2,"1593":3}}],["crud",{"0":{"1320":1},"2":{"1329":1,"1350":1}}],["crypto",{"0":{"1079":1},"1":{"1080":1},"2":{"1079":1,"1080":3,"1081":1,"1083":3}}],["cryptographically",{"2":{"1084":1}}],["cryptographic",{"2":{"571":1,"1079":1,"1577":1}}],["cr",{"2":{"936":1}}],["critical",{"0":{"846":1},"1":{"847":1,"848":1},"2":{"546":1,"562":1,"619":1,"834":1,"1456":1,"1511":1,"1663":1}}],["cross",{"0":{"585":1,"1605":1},"2":{"528":3,"530":1,"534":1,"587":1,"676":1,"949":1,"1575":1,"1610":1}}],["crash",{"0":{"859":1,"1379":1,"1422":1,"1454":1},"2":{"390":1,"833":1,"839":2,"859":1,"1240":1,"1379":1,"1407":1,"1416":1,"1419":1,"1421":1,"1423":1,"1439":1,"1442":1,"1449":1,"1455":1,"1456":1}}],["crashes",{"2":{"270":1,"853":1,"854":1,"1199":1}}],["creating",{"0":{"304":1,"722":1,"1274":1,"1530":1},"1":{"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1},"2":{"271":1,"644":1,"1001":1}}],["creation",{"0":{"263":1,"1019":1},"2":{"271":1,"1039":1,"1230":1,"1448":1}}],["createuserstable",{"2":{"1112":2}}],["create",{"0":{"1107":1,"1238":1,"1296":1,"1331":1,"1460":1,"1470":1,"1562":1},"2":{"263":1,"265":1,"269":1,"271":1,"323":2,"327":1,"343":1,"399":1,"412":1,"421":1,"442":1,"555":1,"581":1,"590":1,"598":3,"612":1,"625":1,"818":1,"854":1,"971":1,"1050":1,"1107":1,"1112":2,"1124":1,"1127":1,"1223":1,"1243":1,"1244":1,"1320":1,"1322":1,"1331":1,"1349":1,"1378":1,"1379":1,"1413":2,"1497":1,"1639":1}}],["created",{"0":{"1394":1},"2":{"96":2,"172":2,"173":1,"251":1,"266":1,"327":1,"331":1,"336":1,"339":1,"340":1,"341":1,"397":1,"501":1,"512":1,"592":1,"599":1,"600":1,"801":2,"814":1,"871":2,"904":2,"928":1,"932":1,"957":1,"965":1,"991":2,"998":1,"1320":1,"1363":1,"1387":1,"1394":1,"1406":1,"1510":1}}],["creates",{"2":{"80":1,"120":1,"259":1,"278":1,"292":1,"442":1,"474":1,"583":1,"584":1,"624":2,"632":1,"925":1,"943":1,"1006":2,"1008":1,"1019":1,"1043":1,"1044":1,"1073":1,"1103":1,"1199":1,"1230":2,"1296":1}}],["cmakecmake",{"2":{"1635":1}}],["cmakepresets",{"2":{"688":1,"693":1}}],["cmakeadd",{"2":{"584":1}}],["cmaketarget",{"2":{"539":1,"585":1}}],["cmakeinclude",{"2":{"539":1,"583":1}}],["cmakelists",{"0":{"1635":1},"2":{"537":1,"539":1,"582":2,"583":1,"584":1,"697":1,"1633":1}}],["cmake",{"0":{"539":1},"2":{"244":1,"245":1,"246":1,"524":1,"525":1,"526":2,"528":3,"530":1,"532":2,"535":2,"537":1,"539":2,"541":1,"542":2,"545":1,"579":1,"583":4,"584":1,"601":1,"666":1,"1123":3,"1635":2,"1636":2,"1649":1}}],["cutting",{"2":{"949":1}}],["curriculum",{"2":{"1672":1}}],["currently",{"2":{"878":1,"1032":1,"1386":1}}],["current",{"0":{"1460":1,"1464":1,"1467":1},"2":{"459":1,"512":1,"523":1,"547":1,"582":1,"625":1,"697":3,"811":1,"950":3,"1000":1,"1013":1,"1027":1,"1101":1,"1398":1,"1450":1,"1495":1}}],["curl",{"0":{"90":1,"313":1},"2":{"165":3,"195":2,"197":1,"1135":1,"1310":1,"1311":2,"1313":2,"1314":1,"1352":2,"1354":1,"1356":2,"1358":1,"1641":1}}],["customizable",{"2":{"937":1}}],["custom",{"0":{"1030":1,"1193":1,"1200":1,"1605":1},"2":{"162":1,"187":1,"205":1,"206":1,"287":1,"297":1,"667":1,"808":1,"821":1,"902":1,"911":1,"980":1,"1151":1,"1155":1,"1242":1,"1336":1,"1339":1,"1508":1,"1521":1,"1599":1,"1605":1,"1656":1,"1664":1,"1672":1}}],["c++23",{"2":{"715":1,"717":1,"724":1}}],["c++20",{"2":{"244":1,"715":2,"717":1,"724":1}}],["c++",{"0":{"1325":1,"1668":1},"1":{"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1},"2":{"154":2,"199":1,"205":1,"206":1,"244":1,"297":1,"307":1,"552":1,"589":1,"596":1,"654":1,"725":1,"746":1,"779":1,"838":1,"857":1,"871":2,"990":1,"1102":1,"1115":1,"1143":1,"1214":1,"1273":1,"1317":1,"1323":1,"1507":1,"1626":1,"1640":1,"1648":1,"1651":1,"1655":1,"1657":1,"1664":1,"1666":1,"1673":1}}],["ctos",{"2":{"1673":1}}],["ctest",{"0":{"690":1},"2":{"686":1,"688":1,"689":1,"690":1}}],["ctrl+d",{"2":{"654":1}}],["ctrl+c",{"0":{"368":1},"2":{"85":1,"310":1,"365":1,"368":2,"382":1,"654":1,"1495":1}}],["ct",{"0":{"375":1,"470":1,"471":1},"2":{"281":2,"283":2,"289":1,"375":1,"381":1,"382":1,"416":3,"419":1,"426":2,"432":1,"438":1,"443":5,"451":1,"452":1,"455":1,"459":2,"468":2,"475":1,"1549":2}}],["ctx",{"0":{"372":1,"474":1},"2":{"56":1,"57":1,"63":2,"65":2,"84":8,"85":8,"86":11,"181":8,"187":1,"259":1,"260":1,"263":1,"264":1,"265":2,"266":1,"269":1,"270":1,"292":1,"293":2,"310":11,"316":3,"323":6,"324":2,"325":1,"326":2,"327":3,"337":6,"339":2,"340":2,"341":2,"342":2,"366":1,"368":8,"369":1,"372":1,"376":1,"378":1,"381":1,"386":1,"387":1,"392":3,"421":2,"424":6,"425":7,"435":2,"442":6,"443":2,"444":1,"449":1,"453":4,"457":7,"459":7,"461":1,"474":1,"476":6,"477":6,"494":2,"495":2,"496":2,"497":5,"505":1,"512":2,"513":3,"950":4,"951":1,"952":1,"953":1,"1309":6,"1517":6,"1519":1,"1613":2,"1614":2,"1615":2,"1621":2}}],["css",{"2":{"939":1,"962":2,"968":2}}],["cstr",{"2":{"1287":1,"1290":1,"1301":1}}],["cstring>",{"2":{"477":1}}],["cstdint>",{"2":{"1083":1,"1107":1,"1108":1,"1309":1,"1564":1}}],["cstddef>",{"2":{"86":1,"310":1,"424":1,"425":1,"476":1,"477":1}}],["cstdlib>",{"2":{"12":1}}],["csignal",{"2":{"383":1}}],["csignal>",{"2":{"85":1,"86":1,"310":1}}],["cs",{"2":{"368":5,"369":1,"381":1,"382":1,"426":3,"443":3}}],["chmod",{"2":{"1122":1,"1123":1,"1129":1}}],["choice",{"2":{"1272":1}}],["choices",{"2":{"151":1}}],["choose",{"2":{"1160":1,"1245":1,"1264":1,"1455":1}}],["chooses",{"2":{"733":1}}],["chown",{"2":{"1124":1}}],["chunked",{"2":{"239":1}}],["chunks",{"2":{"232":1,"234":3,"235":1,"237":1,"239":1,"281":1}}],["chunk",{"0":{"236":1},"2":{"216":1,"219":1,"235":1,"236":1,"281":1}}],["cheap",{"2":{"142":1,"263":1,"273":1,"277":1,"884":1,"1306":1}}],["checking",{"0":{"806":1,"909":1,"1531":1},"2":{"459":1}}],["checked",{"2":{"432":1,"723":1,"1596":2}}],["checkpoints",{"2":{"284":1}}],["checklist",{"0":{"225":1,"271":1,"1032":1,"1052":1,"1135":1}}],["checksums",{"2":{"567":1,"625":1,"628":1,"696":2,"698":1}}],["checks",{"0":{"1283":1,"1542":1},"1":{"1543":1},"2":{"130":1,"186":1,"284":1,"449":1,"568":1,"571":1,"781":1,"931":1,"932":1,"936":3,"1043":1,"1053":1,"1058":1,"1065":1,"1099":1,"1158":1,"1243":1,"1313":1,"1502":1,"1536":1,"1591":1,"1597":1}}],["check",{"0":{"156":1,"1130":1},"2":{"89":1,"109":2,"176":2,"197":1,"250":1,"274":1,"284":1,"432":1,"443":1,"528":1,"555":1,"581":1,"587":1,"589":1,"688":1,"689":1,"693":1,"749":1,"806":1,"909":1,"977":1,"1081":1,"1084":1,"1095":1,"1114":1,"1132":1,"1507":1,"1511":1,"1539":1,"1605":2,"1610":1}}],["chrono",{"2":{"84":1,"108":1,"185":1,"192":1,"324":1,"448":1,"453":1,"457":2,"459":2,"882":2,"1011":1,"1075":1,"1309":1,"1377":1,"1378":1,"1379":1,"1472":1,"1557":1,"1558":1,"1627":1}}],["chrono>",{"2":{"84":1,"108":1,"1309":1,"1377":1,"1378":1,"1379":1,"1627":1}}],["channels",{"0":{"1662":1}}],["channel",{"2":{"366":1,"383":1,"1662":1}}],["changing",{"2":{"287":1,"819":1,"844":1}}],["change",{"2":{"550":1,"636":1,"659":1,"1124":1,"1304":1,"1354":1,"1358":1}}],["changes",{"2":{"209":1,"448":1,"545":1,"649":1,"671":1,"689":1,"843":1,"844":1,"1340":1,"1408":1,"1472":1,"1557":1,"1569":1}}],["changed",{"2":{"35":1,"532":1}}],["chat",{"0":{"102":1,"106":1,"107":1},"1":{"107":1,"108":1,"109":1,"110":1},"2":{"77":1,"78":1,"81":1,"91":1,"102":2,"106":1,"107":1,"108":3,"109":1,"233":1,"1626":1,"1627":3,"1628":4,"1629":1,"1630":1}}],["chains",{"2":{"134":1,"144":1,"824":1}}],["chain",{"2":{"62":1,"66":1,"91":1,"187":1,"918":1,"953":1,"957":1,"1054":1,"1313":1,"1315":1}}],["chaining",{"0":{"62":1,"187":1,"1313":1},"2":{"1539":1}}],["chained",{"2":{"54":1,"62":3,"1243":1}}],["charlie",{"2":{"1321":2}}],["chars",{"2":{"795":1,"796":1,"1242":1,"1478":1,"1479":1,"1581":1,"1586":1,"1591":2}}],["characteristics",{"0":{"1578":1},"2":{"795":1,"951":1}}],["characters",{"0":{"790":1},"2":{"706":1,"710":1,"729":1,"759":1,"783":1,"787":1,"1227":1,"1483":1}}],["character",{"0":{"1545":1},"2":{"706":1,"708":1,"1058":1,"1063":1}}],["char>",{"2":{"442":1}}],["char",{"2":{"12":1,"310":1,"1102":1,"1339":1,"1482":1,"1545":1,"1593":1}}],["cp",{"2":{"1123":1}}],["cpus",{"2":{"151":1}}],["cpu",{"0":{"84":1,"325":1,"339":1,"1048":1},"2":{"84":3,"209":1,"253":2,"322":2,"325":4,"329":1,"330":1,"331":1,"336":1,"339":3,"361":1,"393":1,"428":2,"442":1,"443":1,"444":1,"445":1,"453":2,"461":1,"462":1,"528":1,"902":1,"933":1,"938":1,"942":1,"948":1,"977":1,"1020":1,"1032":1,"1033":1,"1048":1,"1059":1,"1638":1,"1669":1}}],["cpplog",{"2":{"1515":1}}],["cpplogger",{"2":{"141":1}}],["cppuser",{"2":{"1603":1}}],["cppusing",{"2":{"181":1,"182":1,"185":1,"187":1,"304":1,"403":1,"726":1,"817":1,"825":1,"857":1,"1080":1,"1096":1,"1139":1,"1140":1,"1165":1,"1190":1,"1270":1,"1273":1,"1458":1,"1537":1,"1583":1,"1606":1}}],["cppunsigned",{"2":{"1479":1}}],["cppwal",{"2":{"1452":1,"1453":1}}],["cppws",{"2":{"72":1,"73":1,"77":1,"78":1,"79":1}}],["cppquerybuilder",{"2":{"1337":1}}],["cppbaserepository",{"2":{"1330":1}}],["cppbool",{"2":{"8":1,"357":1,"382":1,"409":1,"895":1,"1285":1,"1401":1,"1402":1,"1403":1,"1436":1,"1477":1}}],["cppoutbox",{"2":{"1414":1}}],["cppo",{"2":{"1297":1,"1300":1}}],["cpporderedjson",{"2":{"1153":1,"1154":1}}],["cppxs",{"2":{"1292":1}}],["cppkvs",{"2":{"1281":1,"1294":1,"1296":1,"1301":1,"1305":1}}],["cppjset",{"2":{"1223":1}}],["cppjson",{"2":{"45":1,"52":1,"1146":1,"1167":1,"1168":1,"1170":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1,"1183":1,"1185":1,"1186":1,"1192":1,"1198":1,"1204":1,"1205":1,"1229":1,"1230":1,"1231":1,"1235":1,"1237":1,"1238":1,"1251":1,"1254":1,"1259":1,"1263":1}}],["cpprpcresult",{"2":{"1621":1}}],["cppr",{"2":{"1531":1,"1532":1}}],["cpprouteoptions",{"2":{"977":1}}],["cpprouter",{"2":{"974":2,"977":1,"981":1,"1621":1}}],["cppretrypolicy",{"2":{"1438":1}}],["cppreturn",{"2":{"722":1,"955":2,"1535":1}}],["cppresult",{"2":{"1533":1}}],["cppresolved",{"2":{"288":1}}],["cppres",{"2":{"31":1,"32":1,"33":1,"116":1,"123":1,"159":2}}],["cpprequeue",{"2":{"1422":1}}],["cppreq",{"2":{"25":1,"26":1,"27":1}}],["cpphttp",{"2":{"921":1}}],["cppfloat",{"2":{"757":1}}],["cppfor",{"2":{"375":1,"1609":1}}],["cpp|manifest",{"2":{"664":1}}],["cpp~thread",{"2":{"436":1}}],["cppnamespace",{"2":{"387":1}}],["cppthrow",{"2":{"1535":1}}],["cppthreadpoolexecutor",{"2":{"892":1}}],["cppthread",{"2":{"336":1}}],["cpptimestamp",{"2":{"1462":1,"1467":1,"1468":1}}],["cpptoken",{"2":{"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1283":1,"1287":1,"1288":1}}],["cpptry",{"2":{"1202":1,"1241":1,"1261":1}}],["cpptask",{"2":{"353":1,"455":1,"486":1,"495":1,"496":1}}],["cpptemplate",{"2":{"334":1,"438":1,"451":1,"487":1,"488":1,"716":1,"756":1,"771":1,"772":1,"777":1,"785":1}}],["cppengine",{"2":{"1373":1}}],["cppenum",{"2":{"298":1,"705":1,"731":1,"750":1,"773":1,"798":1,"1385":1,"1447":1}}],["cppexpected",{"2":{"711":1,"760":1,"762":1,"763":1,"764":1,"775":1,"786":1}}],["cppexplicit",{"2":{"259":1,"435":1,"1006":1}}],["cpperr",{"2":{"709":1}}],["cpperrc",{"2":{"305":1}}],["cppvirtual",{"2":{"1418":1}}],["cppvix",{"2":{"3":1,"4":1,"15":1,"24":1,"30":1,"41":1,"45":1,"56":1,"64":1,"68":1,"80":1,"192":1,"193":1,"194":1,"195":1,"396":1,"475":1,"704":1,"714":1,"754":1,"769":1,"864":1,"890":1,"896":1,"919":1,"1011":1,"1022":1,"1335":1,"1336":1,"1360":1,"1383":1,"1410":1,"1426":1,"1443":1,"1585":1,"1586":1,"1590":1}}],["cppvoid",{"2":{"261":1,"335":1,"406":1,"437":1,"439":1,"871":1,"950":1,"953":1,"1404":1,"1405":1,"1506":1}}],["cppschema",{"2":{"1591":1,"1592":1}}],["cppsched",{"2":{"350":1,"355":1,"356":1}}],["cppscheduler",{"2":{"334":1}}],["cppsyncworker",{"2":{"1367":1}}],["cppsyncengine",{"2":{"1364":1}}],["cppsignaturealg",{"2":{"1091":1}}],["cppsignal",{"2":{"369":1}}],["cppservices",{"2":{"951":1}}],["cppserver",{"2":{"69":1,"1023":1,"1030":1}}],["cppstruct",{"2":{"288":1,"415":1,"466":1,"467":1,"707":1,"876":1,"882":1,"884":1,"918":1,"1155":1,"1327":1,"1328":1,"1363":1,"1366":1,"1369":1,"1387":1,"1413":1,"1417":1,"1420":1,"1428":1,"1447":1,"1584":1}}],["cppstatic",{"2":{"179":1,"181":1,"182":1,"339":1,"340":1,"341":1,"342":1,"727":1}}],["cppstd",{"2":{"6":1,"28":1,"49":1,"148":1,"279":1,"292":1,"304":1,"305":1,"307":1,"351":1,"359":1,"421":1,"440":1,"474":1,"710":1,"893":1,"898":1,"899":1,"1010":1,"1084":1,"1093":1,"1193":1,"1194":1,"1195":1,"1196":1,"1206":1,"1260":1,"1280":1,"1299":1,"1331":1,"1332":1,"1333":1,"1334":1,"1437":1,"1471":1,"1476":1,"1606":1,"1608":1}}],["cppio",{"2":{"362":1}}],["cppinline",{"2":{"391":1}}],["cppinstall",{"2":{"186":1}}],["cppint",{"2":{"7":1,"196":1,"325":1,"381":1,"1478":1,"1601":1}}],["cppif",{"2":{"63":1,"709":1,"830":1,"1223":1,"1236":1,"1252":1,"1255":1,"1262":1,"1284":1,"1295":1,"1511":1}}],["cppdispatcher",{"2":{"1622":1}}],["cppduration",{"2":{"1470":1}}],["cppdump",{"2":{"51":1,"1200":1,"1201":1}}],["cppdatetime",{"2":{"1464":1,"1465":1}}],["cppdate",{"2":{"1460":1,"1461":1}}],["cppdbconfig",{"2":{"1104":1}}],["cppdouble",{"2":{"9":1,"1480":1}}],["cppattempt",{"2":{"1430":1}}],["cpparray",{"2":{"1280":1,"1290":1,"1291":1}}],["cppaeadalg",{"2":{"1086":1}}],["cppasio",{"2":{"260":1}}],["cppauto",{"2":{"47":1,"48":1,"50":1,"62":1,"65":2,"326":1,"327":1,"328":2,"408":1,"443":1,"444":1,"721":1,"727":1,"728":1,"729":1,"730":1,"732":2,"733":1,"749":1,"758":1,"760":1,"778":1,"795":1,"796":1,"797":1,"821":1,"828":1,"831":1,"832":1,"880":1,"886":1,"887":1,"899":1,"951":1,"952":1,"1076":1,"1081":1,"1089":1,"1092":1,"1094":1,"1142":1,"1143":1,"1145":1,"1146":1,"1149":2,"1150":2,"1172":1,"1223":1,"1298":1,"1472":1,"1509":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1517":1,"1518":1,"1519":1,"1521":1,"1522":1,"1526":1,"1529":1,"1530":2,"1607":1,"1620":1}}],["cppapp",{"2":{"16":1,"17":1,"19":1,"20":1,"21":1,"22":1,"34":1,"59":1,"60":1,"61":1,"120":2,"122":1,"130":1,"132":2,"138":1,"139":1,"152":1,"157":1,"158":1,"160":1,"167":1,"170":1,"172":1,"173":2,"174":2,"175":1,"176":2,"177":2,"178":1,"184":1,"188":1,"190":1,"191":1,"811":1,"812":1,"813":1,"814":1,"816":1,"817":1,"818":1,"819":1,"820":1,"823":1,"871":7,"922":1,"1643":1,"1644":1,"1645":1,"1646":1}}],["cppcase",{"2":{"778":1}}],["cppconfig",{"2":{"827":1,"829":1}}],["cppconsole",{"2":{"141":1}}],["cppconstexpr",{"2":{"1088":1}}],["cppconst",{"2":{"29":1,"1171":1,"1240":1,"1485":1,"1486":1,"1487":1}}],["cppco",{"2":{"324":1,"352":1}}],["cppclass",{"2":{"289":1,"303":1,"416":1,"419":1,"468":1,"891":1,"913":1,"1370":1,"1445":1,"1449":1,"1450":1}}],["cppctx",{"2":{"63":1,"188":1,"952":1}}],["cppcfg",{"2":{"10":1}}],["cpp",{"0":{"667":1,"871":1,"1118":1,"1634":1},"1":{"872":1,"873":1,"1119":1,"1120":1,"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1},"2":{"3":1,"11":1,"12":1,"15":1,"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"55":2,"56":1,"57":1,"64":2,"68":1,"70":1,"74":1,"79":1,"83":1,"84":1,"85":1,"86":1,"89":1,"93":1,"94":2,"95":1,"96":1,"108":2,"109":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":1,"164":3,"165":2,"181":1,"182":1,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":1,"230":1,"235":1,"265":1,"271":1,"273":1,"281":1,"282":1,"283":1,"293":1,"303":1,"310":1,"312":2,"323":1,"332":1,"337":1,"348":1,"368":1,"392":1,"395":1,"396":1,"402":1,"404":1,"406":1,"413":2,"424":1,"425":1,"426":1,"429":1,"442":1,"443":1,"453":1,"457":1,"459":1,"463":1,"464":1,"476":1,"477":1,"481":1,"494":1,"497":1,"507":1,"512":1,"513":1,"545":1,"547":4,"552":1,"584":3,"586":2,"654":1,"658":1,"663":1,"667":1,"668":2,"675":2,"676":2,"704":1,"711":1,"714":1,"716":2,"717":2,"726":1,"740":1,"743":1,"748":1,"753":1,"754":1,"765":1,"768":1,"769":1,"776":1,"782":1,"789":1,"790":1,"791":1,"792":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"815":2,"825":1,"839":1,"864":1,"871":4,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"930":1,"940":1,"947":1,"966":1,"967":1,"968":1,"970":1,"971":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1000":1,"1028":1,"1075":1,"1080":1,"1083":1,"1096":1,"1106":1,"1107":1,"1108":1,"1112":1,"1137":1,"1139":1,"1147":1,"1158":1,"1159":1,"1182":1,"1188":1,"1189":1,"1192":1,"1196":1,"1198":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1217":1,"1218":1,"1219":2,"1222":1,"1245":1,"1246":1,"1267":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1316":1,"1318":1,"1319":1,"1320":1,"1321":1,"1324":1,"1352":1,"1353":2,"1356":1,"1357":2,"1360":1,"1372":1,"1377":1,"1378":1,"1379":1,"1380":1,"1383":1,"1410":1,"1426":1,"1443":1,"1458":1,"1489":1,"1491":1,"1496":1,"1497":1,"1498":2,"1500":2,"1501":1,"1502":1,"1503":1,"1509":1,"1529":1,"1536":1,"1537":1,"1539":1,"1541":1,"1542":1,"1543":1,"1545":1,"1546":1,"1547":1,"1549":1,"1550":1,"1551":1,"1559":1,"1561":1,"1562":1,"1563":1,"1564":1,"1574":3,"1587":1,"1589":1,"1593":1,"1599":1,"1600":1,"1602":1,"1603":1,"1604":1,"1605":1,"1612":1,"1613":1,"1614":1,"1615":1,"1627":2,"1628":1,"1633":1,"1634":1,"1635":1,"1638":1,"1639":2,"1640":1,"1648":1,"1655":1,"1660":1,"1666":1}}],["clones",{"2":{"642":1}}],["clone",{"2":{"632":1,"640":1,"1123":1}}],["clock",{"0":{"1569":1},"2":{"448":4,"452":1,"512":1,"1309":1,"1377":1,"1378":1,"1379":1,"1472":1,"1554":2,"1557":2,"1558":1,"1561":1,"1569":1}}],["closed",{"2":{"299":2,"417":1,"420":1,"478":1,"979":1,"1060":1}}],["closes",{"2":{"274":1,"309":1,"935":1,"936":1,"1012":1,"1057":1}}],["close",{"0":{"73":1,"472":1,"813":1,"1028":1},"2":{"73":1,"237":1,"310":1,"318":1,"416":1,"417":2,"419":1,"420":1,"468":1,"472":1,"478":1,"813":2,"1027":1,"1028":1,"1062":1}}],["cl",{"2":{"247":1}}],["clamps",{"2":{"1437":1}}],["clamp",{"2":{"1427":1,"1432":1}}],["clamped",{"2":{"1039":3,"1433":1,"1437":1}}],["claiming",{"2":{"1413":1}}],["claim",{"2":{"1412":1,"1414":1,"1415":1,"1416":1,"1418":1}}],["claimed",{"2":{"1379":3,"1386":1,"1406":1,"1409":1}}],["classification",{"0":{"548":1},"2":{"546":2,"708":1,"1444":1}}],["class",{"2":{"297":1,"298":1,"705":1,"731":1,"750":1,"776":1,"798":1,"825":1,"828":1,"876":2,"1075":1,"1111":1,"1112":1,"1327":1,"1380":1,"1385":1,"1447":1}}],["clang",{"2":{"247":1}}],["clarity",{"2":{"125":1,"588":1,"1381":1}}],["clickable",{"2":{"1502":1,"1507":1}}],["cliff",{"2":{"854":1}}],["cliffs",{"2":{"847":1,"867":1}}],["cli",{"0":{"241":1,"551":1,"1340":1},"1":{"242":1,"243":1,"552":1,"553":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1},"2":{"240":1,"551":1,"553":1,"564":1,"632":1,"653":1,"654":1,"659":1,"668":1,"751":1,"844":1,"970":1,"1323":1,"1350":1,"1617":1,"1640":1}}],["clients",{"2":{"213":2,"237":1,"309":1,"479":1,"951":1}}],["client",{"0":{"318":1,"424":1,"1134":1,"1629":1},"2":{"72":1,"73":1,"86":12,"107":1,"128":1,"216":1,"218":1,"219":2,"234":2,"237":1,"310":2,"318":1,"327":4,"424":4,"425":2,"428":1,"932":1,"936":2,"942":1,"969":1,"1001":1,"1004":1,"1008":1,"1019":1,"1053":1,"1054":1,"1627":1,"1629":1}}],["cleaned",{"2":{"1539":1}}],["cleanest",{"2":{"1156":1}}],["cleaner",{"2":{"688":1}}],["cleanly",{"2":{"310":1,"356":1,"384":1,"713":1,"949":1,"1000":1}}],["clean",{"2":{"179":1,"199":1,"257":1,"326":1,"365":1,"428":1,"526":1,"528":1,"532":1,"534":1,"550":1,"564":1,"589":1,"632":1,"678":1,"693":1,"871":1,"879":1,"948":1,"983":1,"1013":1,"1207":1,"1494":1,"1506":1,"1658":1,"1668":1}}],["cleanup",{"2":{"73":1,"264":1,"385":1,"943":1,"1416":1}}],["clearcontext",{"2":{"1518":1}}],["clears",{"2":{"1405":1}}],["clearer",{"2":{"1017":1,"1180":1}}],["cleared",{"2":{"923":1}}],["clear=never",{"2":{"669":1}}],["clear",{"0":{"1518":1},"2":{"117":1,"214":1,"223":1,"319":1,"504":1,"659":4,"660":2,"669":3,"723":1,"745":1,"779":1,"1187":1,"1195":1,"1245":1,"1322":1,"1327":1,"1519":1,"1535":1}}],["cadence",{"2":{"1073":1}}],["caddy",{"2":{"161":1}}],["calendar",{"0":{"1556":1},"2":{"1459":1,"1473":1}}],["calculate",{"0":{"1009":1},"2":{"935":1}}],["calculates",{"2":{"532":1}}],["callcount",{"2":{"1380":1}}],["callers",{"2":{"418":1,"1117":1}}],["caller",{"2":{"385":1,"879":1,"1427":1}}],["called",{"2":{"35":1,"66":1,"72":1,"73":1,"74":1,"379":1,"417":1,"953":1,"1374":1}}],["callback",{"0":{"369":1,"370":1,"450":1},"1":{"451":1,"452":1,"453":1},"2":{"364":1,"366":3,"370":1,"376":2,"378":1,"384":1,"447":1,"461":1,"462":1,"1068":1,"1073":1,"1078":1}}],["callbacks",{"2":{"269":1,"273":1,"366":1,"372":1,"378":2,"449":2,"453":1,"616":1,"1062":1,"1078":1}}],["callable",{"0":{"350":1},"2":{"350":1,"359":1,"452":1,"880":1,"1042":2}}],["callables",{"2":{"347":1}}],["calls",{"2":{"128":1,"255":1,"257":1,"261":1,"264":2,"426":1,"1008":2,"1018":1,"1019":1,"1020":1,"1071":1,"1380":2,"1504":1,"1611":2,"1662":1}}],["calling",{"2":{"91":1,"95":1,"253":1,"266":1,"284":1,"344":1,"347":1,"355":1,"360":1,"375":1,"970":1,"1010":1,"1313":1,"1364":1,"1374":1}}],["call",{"2":{"17":1,"132":2,"168":1,"211":1,"226":1,"263":1,"266":1,"271":1,"323":1,"343":1,"344":1,"366":1,"399":1,"406":1,"449":1,"458":1,"461":1,"514":1,"836":2,"847":1,"850":1,"923":1,"953":2,"967":1,"1007":1,"1013":2,"1027":1,"1032":1,"1048":1,"1052":1,"1071":1,"1147":1,"1305":1,"1308":1,"1315":1,"1318":1,"1482":2,"1495":1,"1526":1,"1597":1,"1614":1,"1616":1,"1617":1,"1618":1,"1622":1,"1623":1,"1625":1}}],["carry",{"2":{"720":1}}],["carries",{"2":{"499":1,"703":1,"964":1,"1533":1}}],["care",{"2":{"364":1,"1139":1,"1497":1,"1617":1}}],["careful",{"2":{"138":1,"370":1}}],["carefully",{"2":{"81":1,"330":1}}],["cause",{"2":{"491":1,"844":1,"1393":1}}],["causes",{"2":{"375":1,"1012":1}}],["categories",{"0":{"554":1,"1659":1},"1":{"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1}}],["category",{"0":{"303":1},"2":{"285":1,"297":1,"303":4,"1390":1,"1448":1}}],["catches",{"2":{"927":1,"1162":1,"1252":1}}],["catch",{"2":{"86":3,"404":1,"433":1,"443":1,"1107":1,"1112":1,"1158":1,"1202":1,"1241":1,"1256":1,"1261":1,"1318":1,"1319":1,"1320":1,"1321":1,"1335":1}}],["capable",{"2":{"985":1}}],["capacity",{"2":{"299":1,"1242":1,"1547":1}}],["capturing",{"2":{"459":1}}],["captures",{"2":{"378":1,"431":1,"490":1,"1077":1}}],["captured",{"2":{"366":1,"397":1,"404":1,"408":1,"433":1,"490":2,"491":1,"823":1}}],["cap",{"2":{"219":1,"237":1,"310":1}}],["caches",{"2":{"509":1,"917":1,"951":1,"1095":1}}],["cachestore",{"0":{"504":1},"2":{"499":1}}],["cachekey",{"0":{"507":1},"2":{"507":2,"512":2}}],["cacheentry",{"0":{"501":1},"2":{"505":1,"512":3,"515":1}}],["cachecontextmapper",{"2":{"502":1,"513":2}}],["cachecontext",{"0":{"502":1},"2":{"499":1,"502":3,"512":3,"513":1}}],["cachepolicy",{"0":{"503":1},"2":{"499":1,"512":3}}],["cache",{"0":{"195":1,"499":1,"505":1,"506":1,"532":1},"1":{"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":2,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"515":1},"2":{"195":9,"197":1,"235":2,"287":1,"385":1,"499":3,"505":1,"507":4,"511":3,"512":22,"513":5,"514":2,"515":1,"526":1,"528":3,"532":1,"802":1,"905":1,"924":1,"943":1,"968":1,"1078":1,"1480":1,"1512":1}}],["cached",{"2":{"148":1,"501":1}}],["caching",{"0":{"917":1},"2":{"185":1,"507":3,"510":1,"511":1,"512":1,"515":1}}],["cases",{"0":{"1239":1},"1":{"1240":1,"1241":1},"2":{"1180":1,"1188":1,"1305":1,"1580":1}}],["case",{"0":{"778":1,"1540":1,"1543":1},"1":{"1541":1},"2":{"477":1,"684":1,"728":1,"731":1,"736":1,"739":1,"744":1,"750":1,"772":1,"774":1,"777":1,"778":1,"1006":1,"1474":1,"1477":1,"1490":1,"1536":1,"1541":1,"1593":5}}],["cascading",{"2":{"220":1}}],["cast",{"2":{"108":2,"310":4,"424":1,"442":1,"1107":2,"1108":1,"1309":1,"1320":5,"1377":1,"1378":1,"1379":1,"1627":2}}],["cassert>",{"2":{"84":1,"1377":1,"1378":1,"1379":1}}],["canonical",{"2":{"1576":1}}],["cancels",{"0":{"381":1}}],["cancelable",{"2":{"277":1}}],["canceled",{"2":{"273":1,"279":2,"284":1,"285":1,"299":2,"304":1,"305":1,"420":1}}],["cancellable",{"2":{"459":2}}],["cancellation",{"0":{"283":1,"305":1,"379":1,"426":1,"432":1,"443":1,"458":1,"475":1},"1":{"459":1},"2":{"273":4,"276":1,"277":2,"281":1,"284":1,"290":1,"291":1,"294":1,"297":1,"305":1,"366":4,"368":2,"375":1,"379":2,"381":1,"410":1,"411":1,"417":2,"426":3,"432":5,"443":3,"447":1,"449":1,"458":2,"459":1,"470":1,"471":1,"475":1,"478":1,"498":1}}],["cancelled",{"2":{"273":1,"276":1,"277":1,"278":1,"279":3,"281":1,"282":1,"283":2,"305":1,"379":1,"417":1,"432":3,"443":3,"449":1,"452":1,"458":1,"459":1,"475":1}}],["cancel",{"0":{"273":1,"276":1,"277":1,"278":1,"282":1,"375":1,"459":1},"1":{"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1},"2":{"219":1,"273":4,"274":3,"276":1,"277":1,"278":2,"281":4,"282":4,"283":3,"284":1,"289":1,"291":1,"295":1,"366":1,"368":4,"369":1,"370":1,"375":1,"379":2,"381":1,"382":1,"410":1,"411":2,"413":1,"416":3,"417":1,"419":1,"420":1,"426":4,"431":1,"432":1,"438":1,"443":3,"446":3,"447":1,"451":1,"455":1,"458":2,"459":6,"464":1,"468":2,"475":4,"479":1,"498":3,"1041":1,"1046":1,"1078":1}}],["candidates",{"2":{"217":2,"1415":1}}],["can",{"0":{"1152":1,"1436":1},"1":{"1153":1,"1154":1},"2":{"10":1,"40":1,"54":1,"62":1,"66":1,"91":1,"92":1,"110":1,"131":1,"160":1,"162":1,"168":2,"180":1,"187":1,"218":1,"221":1,"269":1,"270":1,"273":1,"277":2,"287":1,"304":1,"308":1,"320":1,"334":1,"366":1,"368":1,"370":1,"372":1,"375":1,"377":1,"378":1,"379":1,"382":1,"391":1,"409":1,"415":1,"420":2,"433":1,"442":1,"449":1,"452":1,"459":1,"463":1,"466":1,"548":1,"583":1,"655":1,"712":1,"717":2,"777":1,"817":1,"818":1,"820":1,"821":1,"827":1,"832":1,"847":1,"848":2,"853":2,"854":1,"857":1,"859":1,"871":2,"883":1,"926":1,"935":1,"937":1,"938":1,"939":2,"942":2,"946":1,"953":1,"954":1,"964":1,"974":1,"977":2,"981":2,"1031":1,"1042":1,"1051":1,"1058":1,"1097":1,"1118":1,"1129":1,"1147":1,"1155":1,"1156":1,"1200":1,"1220":1,"1223":1,"1268":1,"1308":2,"1311":1,"1313":1,"1327":1,"1362":1,"1363":1,"1370":1,"1378":1,"1428":1,"1434":1,"1436":1,"1438":1,"1439":1,"1454":1,"1456":1,"1503":1,"1504":1,"1510":1,"1520":1,"1524":1,"1525":1,"1526":1,"1533":1,"1558":1,"1569":1,"1589":1,"1593":1,"1597":1,"1621":1,"1629":1,"1637":1,"1662":1}}],["cannot",{"2":{"4":1,"829":1,"1046":1,"1117":1,"1202":1,"1254":1,"1322":1}}],["cfg",{"2":{"4":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":3,"12":2,"69":2,"70":2,"195":11,"827":1,"828":1,"829":5,"830":2,"831":4,"832":2,"971":2,"1022":2,"1104":1,"1106":7,"1107":9,"1108":7,"1112":9,"1186":4,"1204":2,"1254":1,"1255":1,"1261":1,"1263":2,"1281":2,"1318":4,"1353":4,"1354":2,"1357":4,"1358":2,"1364":1,"1367":1,"1414":1,"1445":1,"1449":1,"1628":2}}],["copied",{"2":{"568":1,"625":1,"966":1}}],["copies",{"2":{"567":1}}],["copyable",{"2":{"824":1,"884":1,"1077":1}}],["copying",{"2":{"152":1,"204":1,"1161":1,"1306":1}}],["copy",{"0":{"1121":1,"1122":1,"1152":1},"1":{"1122":1,"1123":1,"1153":1,"1154":1},"2":{"98":1,"277":1,"308":1,"409":1,"884":1,"1199":1,"1376":1,"1482":1,"1534":1,"1539":1}}],["coalesce",{"0":{"382":1}}],["coordinate",{"2":{"1412":1,"1504":1}}],["coordinates",{"2":{"362":1,"1359":1}}],["coordinator",{"2":{"1362":1}}],["coordination",{"2":{"325":1,"484":1,"492":1,"1411":1}}],["cooperative",{"0":{"281":1},"2":{"273":1,"284":1,"290":1,"329":1,"411":1,"426":1,"432":1,"443":1}}],["cooldown",{"2":{"220":1}}],["col2",{"2":{"1331":1}}],["col1",{"2":{"1331":1}}],["column",{"2":{"1101":1,"1116":2,"1328":2,"1329":1}}],["columns",{"2":{"1101":1}}],["collectmetrics",{"2":{"1075":2}}],["collector",{"2":{"872":1}}],["collectors",{"2":{"845":1,"848":1,"853":1,"855":1}}],["collected",{"2":{"824":1}}],["collection",{"2":{"144":1,"872":1}}],["color=1",{"2":{"1523":1}}],["color=never|0|false",{"2":{"1523":1}}],["color=never",{"2":{"1500":1}}],["color=auto|always|never",{"2":{"845":1}}],["color=always|1|true",{"2":{"1523":1}}],["color=always",{"2":{"312":1,"1500":1}}],["coloring",{"2":{"1488":1}}],["colors",{"0":{"1500":1,"1523":1},"2":{"845":5,"1488":1,"1494":1,"1500":7,"1507":1,"1522":1,"1523":4}}],["color>",{"2":{"798":1}}],["color",{"0":{"845":1},"2":{"674":3,"677":1,"798":5,"845":1,"1477":2,"1488":2,"1500":2,"1503":1,"1507":2,"1514":1,"1523":1}}],["colored",{"2":{"312":1}}],["cold",{"2":{"213":1}}],["cost",{"0":{"1597":1},"2":{"137":1,"150":1,"836":1,"847":1,"1420":1}}],["corrupt",{"2":{"1456":1}}],["corruption",{"2":{"850":1}}],["correlation",{"2":{"952":1,"1577":1}}],["correct",{"2":{"733":1,"1132":1,"1456":1,"1569":1}}],["correctness",{"2":{"515":1,"588":1,"1384":1,"1418":1,"1419":1,"1489":1}}],["correctly",{"2":{"126":1,"1458":1,"1572":1}}],["corresponds",{"2":{"478":1}}],["coroutines",{"0":{"269":1,"407":1},"1":{"408":1},"2":{"255":1,"265":1,"365":1,"378":1,"384":1,"428":2,"456":1,"492":1,"1668":1}}],["coroutine",{"0":{"317":1,"318":1,"351":1,"370":1,"454":1},"1":{"455":1,"456":1,"457":1},"2":{"252":1,"253":1,"265":1,"269":1,"272":1,"286":1,"290":1,"291":1,"308":1,"310":1,"316":3,"317":2,"321":1,"322":3,"323":1,"324":1,"325":1,"327":1,"329":1,"334":1,"345":1,"346":1,"347":1,"351":2,"363":1,"366":2,"369":1,"370":1,"375":1,"376":1,"381":1,"386":3,"388":2,"390":2,"391":1,"394":1,"395":2,"397":3,"400":3,"406":2,"409":1,"411":1,"417":1,"425":1,"431":1,"432":1,"433":2,"435":1,"438":1,"442":1,"445":1,"447":1,"456":2,"457":1,"459":1,"462":1,"463":1,"468":1,"478":1,"484":1,"497":1,"1649":1,"1669":1}}],["cors",{"0":{"191":1},"2":{"184":2,"191":1,"959":1}}],["core",{"0":{"135":1,"166":1,"234":1,"273":1,"296":1,"322":1,"428":1,"553":1,"616":1,"772":1,"835":1,"876":1,"888":1,"894":1,"912":1,"930":1,"931":1,"934":1,"949":1,"963":1,"972":1,"1053":1,"1098":1,"1269":1,"1326":1,"1414":1,"1667":1},"1":{"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"167":1,"168":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"773":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"895":1,"896":1,"897":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"964":1,"965":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"1054":1,"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1,"1065":1,"1066":1,"1067":1,"1099":1,"1100":1,"1101":1,"1270":1,"1271":1,"1272":1,"1327":1,"1415":1,"1668":1,"1669":1,"1670":1,"1671":1},"2":{"0":1,"3":1,"14":1,"15":1,"37":1,"41":1,"45":1,"68":1,"84":6,"85":5,"86":7,"119":1,"151":1,"251":1,"252":2,"253":2,"259":2,"279":2,"281":3,"282":2,"283":3,"285":1,"289":2,"292":1,"293":3,"304":1,"310":7,"321":1,"323":4,"331":2,"332":1,"337":3,"339":1,"340":1,"341":1,"342":1,"347":1,"348":2,"363":1,"368":6,"386":1,"387":1,"392":3,"395":2,"396":2,"402":2,"403":1,"404":2,"406":4,"412":1,"413":5,"416":6,"417":2,"419":3,"421":2,"424":6,"425":8,"426":2,"428":1,"429":1,"442":4,"443":4,"446":4,"447":1,"449":1,"453":3,"457":5,"459":6,"463":1,"464":4,"468":5,"474":2,"475":3,"476":5,"477":5,"480":1,"481":1,"494":5,"495":1,"496":1,"497":6,"865":1,"901":1,"912":1,"918":1,"930":1,"931":2,"937":1,"941":1,"949":1,"965":1,"1048":2,"1096":1,"1165":1,"1409":1,"1637":1,"1638":1}}],["coupling",{"2":{"588":1}}],["could",{"2":{"491":1,"1305":1}}],["country",{"2":{"658":1,"1273":1}}],["counts",{"2":{"224":1}}],["counter",{"2":{"220":1,"498":1,"1037":1}}],["counters",{"2":{"162":1,"492":1,"862":1,"1075":1}}],["count",{"0":{"1009":1},"2":{"108":1,"224":1,"471":1,"528":1,"634":1,"772":1,"777":1,"838":1,"935":1,"1009":1,"1032":1,"1050":1,"1142":1,"1205":1,"1217":1,"1242":1,"1300":1,"1309":1,"1363":2,"1364":1,"1377":2,"1378":2,"1379":2,"1468":1,"1471":2,"1472":1,"1627":1}}],["cout",{"0":{"137":1},"2":{"11":1,"42":1,"84":4,"85":4,"86":8,"304":1,"337":1,"348":1,"353":1,"442":1,"711":4,"727":1,"743":2,"760":1,"765":2,"776":2,"789":2,"790":1,"791":2,"792":1,"1106":1,"1107":2,"1108":1,"1112":2,"1142":1,"1145":1,"1182":1,"1192":1,"1205":1,"1211":3,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":2,"1223":1,"1229":2,"1230":1,"1235":1,"1236":1,"1238":1,"1252":2,"1255":2,"1262":2,"1318":1,"1319":1,"1320":3,"1321":1,"1377":1,"1378":1,"1379":1,"1460":1,"1461":1,"1462":1,"1464":1,"1465":1,"1467":1,"1468":1,"1471":2,"1472":1,"1561":1,"1562":1,"1563":1,"1564":1,"1574":1,"1587":1,"1600":1,"1603":1,"1606":1,"1609":1,"1612":3,"1613":1,"1614":2,"1615":2}}],["co",{"0":{"408":1},"2":{"84":3,"85":2,"86":6,"293":2,"310":7,"323":1,"325":1,"326":1,"327":2,"328":2,"329":1,"353":1,"364":1,"365":1,"368":2,"375":1,"381":1,"382":1,"388":1,"391":2,"392":1,"393":1,"397":1,"399":1,"400":1,"402":3,"403":3,"404":3,"406":1,"408":3,"424":4,"425":6,"431":1,"433":1,"442":2,"443":3,"457":4,"459":2,"476":4,"477":3,"486":1,"494":4,"495":4,"496":4}}],["come",{"2":{"684":1,"933":2,"1104":1}}],["comes",{"2":{"144":1,"154":1,"399":1,"1617":1}}],["com",{"2":{"242":1,"243":1,"290":1,"293":1,"415":1,"1123":1,"1127":1,"1128":1,"1318":1,"1319":1,"1320":2,"1321":1,"1587":1,"1600":1,"1654":1,"1665":1,"1674":1}}],["commentid",{"2":{"916":1}}],["comments",{"2":{"916":1}}],["committing",{"2":{"1109":1}}],["committed",{"2":{"523":1,"1107":1,"1321":1,"1335":1,"1454":1}}],["commits",{"2":{"632":1}}],["commit",{"2":{"518":1,"521":2,"522":1,"575":1,"635":1,"636":2,"637":1,"641":2,"645":1,"651":1,"1099":1,"1107":1,"1109":1,"1112":2,"1318":2,"1321":1,"1335":1}}],["command>",{"2":{"659":1}}],["commands",{"0":{"605":1,"646":1,"659":1,"1342":1},"1":{"606":1,"607":1,"608":1,"609":1,"1343":1,"1344":1,"1345":1,"1346":1},"2":{"661":1,"1354":1,"1358":1}}],["command",{"0":{"536":1,"554":1,"580":1},"1":{"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"581":1,"582":1},"2":{"243":1,"249":1,"535":1,"550":1,"575":1,"579":1,"601":1,"659":2,"678":1}}],["commonly",{"2":{"1488":1,"1505":1}}],["common",{"0":{"189":1,"211":1,"267":1,"344":1,"380":1,"461":1,"479":1,"610":1,"922":1,"1117":1,"1131":1,"1148":1,"1322":1,"1347":1,"1488":1,"1568":1,"1588":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"268":1,"269":1,"270":1,"381":1,"382":1,"1132":1,"1133":1,"1134":1,"1149":1,"1150":1,"1151":1,"1569":1,"1570":1,"1589":1,"1590":1,"1591":1,"1592":1},"2":{"223":1,"235":1,"399":1,"457":1,"725":1,"728":1,"827":1,"842":1,"919":1,"928":1,"956":1,"1097":1,"1102":1,"1119":1,"1155":2,"1514":1,"1536":1,"1611":1}}],["communication",{"2":{"104":1,"1649":1}}],["combine",{"2":{"187":1,"479":1}}],["combined",{"0":{"80":1}}],["coming",{"2":{"164":1,"857":1,"871":1,"930":1}}],["compliant",{"2":{"1573":1,"1579":1}}],["complex",{"2":{"384":1,"960":1,"1227":1,"1237":2,"1244":1,"1661":1}}],["completion",{"2":{"388":1,"431":1,"879":1,"1409":1}}],["completions",{"2":{"252":1,"255":1,"365":1,"368":1,"372":1,"447":1,"461":1}}],["completed",{"2":{"408":1,"1044":1,"1379":1,"1386":1,"1422":1}}],["completes",{"2":{"265":1,"272":1,"328":1,"469":1,"498":1}}],["complete",{"0":{"124":1},"2":{"265":1,"268":1,"366":1,"375":1,"1377":1,"1379":1,"1412":1,"1414":1,"1415":1,"1620":1,"1639":1}}],["compete",{"2":{"837":1}}],["compilation",{"2":{"528":1,"534":1,"1597":1}}],["compiled",{"2":{"1120":1}}],["compile",{"0":{"312":1},"2":{"410":1,"530":1,"546":1,"667":1,"731":1,"779":1,"815":1,"1142":1,"1146":1,"1149":1,"1640":1}}],["compiler",{"0":{"675":1},"2":{"244":1,"532":1,"664":1,"670":1,"675":1}}],["compression",{"2":{"428":1}}],["company",{"2":{"1672":1}}],["companies",{"2":{"1657":1,"1673":1}}],["compat",{"0":{"1338":1},"1":{"1339":1},"2":{"1324":1}}],["compatible",{"2":{"294":1,"297":1,"307":1,"744":1,"751":1,"973":1,"1308":1}}],["compatibility",{"2":{"209":1,"1167":1,"1338":1}}],["compare",{"2":{"1144":1}}],["compares",{"2":{"1036":2}}],["comparator",{"2":{"1036":1}}],["comparison",{"0":{"766":1},"2":{"744":1,"774":1}}],["compact",{"0":{"1196":1,"1206":1},"2":{"297":1,"1196":3,"1206":1,"1207":1,"1208":1,"1593":1}}],["computation",{"2":{"204":1,"395":1}}],["computed",{"2":{"1397":1}}],["computes",{"2":{"452":1,"1073":1,"1427":1,"1437":1}}],["compute",{"0":{"339":1,"442":1,"1437":1},"2":{"200":1,"253":1,"345":1,"402":2,"428":1,"442":1,"462":1,"1428":1,"1437":1,"1438":1,"1638":1}}],["composition",{"2":{"958":1}}],["composes",{"2":{"505":1}}],["composed",{"2":{"329":1,"1361":1,"1411":1,"1444":1}}],["composable",{"2":{"66":1,"307":1,"1599":1,"1610":1}}],["components",{"0":{"934":1,"1004":1,"1034":1},"1":{"1035":1,"1036":1,"1037":1,"1038":1},"2":{"149":1,"287":1,"322":1,"1488":1}}],["component",{"0":{"1495":1},"2":{"2":1,"39":1,"1053":1}}],["coexist",{"2":{"40":1,"1220":1}}],["covers",{"2":{"14":1,"67":1,"199":1,"240":1,"1188":1,"1323":1}}],["conns",{"2":{"1486":2}}],["conn",{"2":{"1106":2,"1107":3,"1108":2,"1112":2,"1318":1,"1321":1,"1335":1,"1336":1,"1337":1}}],["connectivity",{"2":{"1361":1,"1381":1}}],["connectionfactory",{"2":{"1115":2}}],["connectionpool",{"2":{"1096":1,"1103":1,"1104":1,"1115":1,"1318":1,"1319":1,"1320":1,"1321":1,"1330":1}}],["connections",{"2":{"317":1,"412":1,"419":1,"420":1,"888":1,"936":1,"951":1,"1001":1,"1012":1,"1053":1,"1057":1,"1103":2,"1117":2,"1626":1}}],["connection",{"0":{"1099":1,"1103":1,"1318":1,"1336":1},"2":{"121":1,"127":2,"217":1,"235":1,"250":1,"308":1,"309":1,"310":1,"317":1,"327":1,"420":1,"425":2,"463":1,"931":1,"932":1,"935":1,"936":1,"979":1,"1001":1,"1004":1,"1053":1,"1054":1,"1056":1,"1061":1,"1066":1,"1067":1,"1096":2,"1099":2,"1103":2,"1112":2,"1114":1,"1115":1,"1317":1,"1336":1,"1670":1}}],["connector",{"2":{"1115":1}}],["connect",{"0":{"424":1,"1106":1},"2":{"216":1,"393":1,"415":1,"416":1,"417":1,"424":1,"426":1,"616":6,"620":2,"621":1,"873":1,"1117":1,"1322":1,"1352":1,"1353":2,"1356":1,"1357":2}}],["connected",{"2":{"86":1,"412":1,"416":1,"1106":1}}],["connects",{"2":{"72":1,"564":1,"1000":1}}],["conflicts",{"2":{"1049":1}}],["conflict",{"2":{"956":1}}],["confidentiality",{"2":{"1085":1}}],["confined",{"2":{"378":1}}],["confirmation",{"2":{"1605":1}}],["confirm",{"2":{"197":1,"1605":2}}],["configurable",{"2":{"932":1,"1057":1,"1441":1}}],["configuration",{"0":{"825":1,"1261":1},"2":{"0":1,"3":2,"4":1,"12":1,"13":1,"37":1,"69":1,"534":1,"601":1,"744":1,"751":1,"834":1,"843":1,"951":1,"1104":1,"1136":1,"1207":1,"1348":1,"1455":1,"1579":1,"1639":1,"1661":1,"1671":1}}],["configures",{"2":{"545":1}}],["configure",{"2":{"221":1,"524":1,"531":1,"532":1,"663":1,"669":1,"831":1}}],["configured",{"2":{"142":1,"161":1,"225":1,"898":1,"935":1,"1001":1,"1059":1,"1381":1,"1389":1}}],["config",{"0":{"3":1,"826":1,"827":1,"1104":1,"1186":1,"1204":1,"1363":1,"1366":1,"1413":1,"1420":1,"1487":1},"1":{"828":1},"2":{"1":1,"3":4,"4":3,"11":5,"12":5,"13":2,"38":1,"70":5,"195":1,"245":1,"246":1,"511":1,"512":1,"676":2,"825":7,"826":3,"827":3,"828":4,"829":2,"831":4,"832":4,"834":2,"836":1,"870":2,"935":1,"971":2,"1006":4,"1009":1,"1015":1,"1019":1,"1022":2,"1025":1,"1032":1,"1057":1,"1104":10,"1120":2,"1123":1,"1127":1,"1128":1,"1180":1,"1186":1,"1194":1,"1198":1,"1199":2,"1200":2,"1202":1,"1204":1,"1207":1,"1221":1,"1243":1,"1251":1,"1254":2,"1255":2,"1257":2,"1261":2,"1263":2,"1363":1,"1364":1,"1366":1,"1367":1,"1377":4,"1378":4,"1379":4,"1413":1,"1414":1,"1420":1,"1445":2,"1449":2,"1487":3,"1495":1,"1505":1,"1526":1,"1628":7}}],["convention",{"2":{"1050":1}}],["conventions",{"2":{"845":1}}],["convenience",{"0":{"761":1,"786":1,"831":1,"1183":1,"1263":1,"1285":1},"1":{"762":1,"763":1,"764":1},"2":{"709":1,"885":1,"899":1,"962":1,"1102":1,"1103":1,"1201":1,"1271":1}}],["convenient",{"2":{"369":1,"1163":1,"1227":1,"1539":1}}],["convergence",{"2":{"1407":1,"1423":1,"1439":1,"1454":1}}],["converted",{"2":{"1231":1}}],["converters",{"2":{"1158":1}}],["converting",{"0":{"1181":1},"1":{"1182":1,"1183":1},"2":{"1187":1}}],["convertible",{"2":{"1142":1,"1151":1}}],["converts",{"2":{"736":1,"770":1,"928":1,"1181":1,"1241":1,"1328":1,"1339":1}}],["convert",{"0":{"1158":1,"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1462":1},"1":{"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1},"2":{"731":1,"732":1,"746":1,"794":1,"1158":2,"1159":1,"1182":1,"1187":1,"1474":1,"1593":1}}],["conversion",{"0":{"725":1,"746":1,"798":1,"1179":1,"1180":1},"1":{"726":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1},"2":{"703":1,"704":2,"708":1,"711":4,"712":1,"713":1,"714":2,"715":1,"717":2,"718":1,"721":1,"724":1,"725":2,"726":9,"727":1,"733":1,"743":2,"748":2,"752":1,"754":2,"765":2,"766":1,"767":1,"769":2,"776":2,"780":1,"781":1,"782":1,"789":2,"790":2,"791":2,"792":2,"794":2,"1151":1,"1155":1,"1162":1,"1164":1,"1181":1,"1187":1,"1306":1}}],["conversionerror>",{"2":{"711":1,"717":1,"740":1,"756":1,"760":1,"762":1,"763":1,"764":1,"772":1,"775":1,"777":1,"785":1,"786":4,"794":1}}],["conversionerrorcode",{"0":{"705":1,"710":1},"1":{"706":1},"2":{"703":1,"705":1,"707":4,"709":1,"722":1,"798":1}}],["conversionerror",{"0":{"703":1,"707":1},"1":{"704":1,"705":1,"706":1,"707":1,"708":2,"709":1,"710":1,"711":1,"712":1},"2":{"703":1,"704":1,"707":3,"711":1,"712":1,"722":1,"725":1,"726":1,"727":2,"729":1,"736":2,"746":1,"749":2,"755":1,"781":1,"787":2}}],["conversions",{"0":{"1155":1},"2":{"424":1,"427":1,"715":1,"725":1,"745":1,"751":1,"1181":1,"1187":1,"1490":1}}],["conditional",{"2":{"487":1,"488":1}}],["condition",{"2":{"355":1,"360":1,"1046":1}}],["conditions",{"2":{"269":1,"716":1,"1045":1}}],["concatenation",{"2":{"847":1}}],["concurrency",{"0":{"492":1,"821":1,"1077":1,"1669":1},"2":{"330":1,"361":1,"435":1,"890":1,"900":1,"901":1,"902":1,"931":1,"935":1,"1009":1,"1038":1,"1048":1,"1052":1,"1652":1,"1656":1,"1669":1}}],["concurrently",{"2":{"328":1,"344":1,"375":1,"480":1,"483":2,"942":1,"1364":1,"1374":1}}],["concurrent",{"2":{"223":1,"1039":1}}],["concrete",{"2":{"255":1,"265":1,"294":1,"421":1,"474":1,"890":1}}],["concerns",{"2":{"203":1,"949":1}}],["conceptually",{"2":{"946":1,"1140":1}}],["conceptual",{"2":{"265":1}}],["concepts",{"0":{"322":1,"430":1,"500":1,"1317":1},"1":{"431":1,"432":1,"433":1,"501":1,"502":1,"503":1,"504":1,"505":1},"2":{"100":1,"949":1,"1098":1}}],["concept",{"0":{"207":1},"2":{"98":1,"105":1}}],["conscious",{"2":{"973":1}}],["consulting",{"0":{"1648":1},"1":{"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1},"2":{"1648":1,"1656":1,"1659":1}}],["consults",{"2":{"1365":1}}],["consulted",{"2":{"505":1}}],["consumption",{"2":{"766":1}}],["consuming",{"2":{"375":1}}],["consumed",{"2":{"366":1,"755":1}}],["consumers",{"2":{"366":1,"383":1}}],["consumer",{"2":{"360":1,"397":1}}],["consider",{"2":{"1242":1,"1597":1}}],["considered",{"2":{"502":1,"1363":1,"1595":1}}],["considerations",{"0":{"142":1,"151":1,"1440":1}}],["consistently",{"2":{"722":1,"1052":1}}],["consistent",{"2":{"116":1,"231":1,"236":1,"305":1,"486":1,"564":1,"887":1,"1140":1,"1144":1,"1183":1,"1454":1}}],["consistency",{"0":{"116":1},"2":{"1327":1}}],["consolemutex",{"2":{"1524":1}}],["console",{"0":{"136":1,"137":1,"835":1,"836":1,"838":1,"844":1,"867":1,"1524":1},"1":{"137":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1},"2":{"135":2,"136":1,"137":1,"138":2,"139":2,"140":2,"142":1,"143":1,"308":1,"310":3,"312":1,"531":1,"812":1,"817":2,"820":1,"823":1,"835":2,"836":2,"837":1,"838":6,"839":6,"841":5,"843":1,"844":5,"845":1,"847":2,"848":2,"850":1,"853":1,"857":1,"858":4,"859":1,"862":3,"864":2,"865":1,"867":2,"869":1,"870":2,"1353":2,"1357":2,"1495":1,"1504":4,"1507":2,"1508":1,"1510":1,"1514":1,"1524":5}}],["constexpr",{"0":{"717":1},"2":{"707":3,"717":6,"731":1,"740":1,"744":1,"750":1,"751":1,"776":1,"798":1}}],["constants",{"2":{"912":1,"928":1}}],["constant",{"2":{"216":1,"1065":1}}],["constraint",{"2":{"883":1}}],["constraints",{"0":{"410":1,"757":1,"773":1,"852":1,"1552":1},"1":{"853":1,"854":1},"2":{"209":1,"364":1,"785":1,"877":1,"1605":1,"1610":1}}],["constructs",{"2":{"925":1}}],["construct",{"2":{"449":1,"1136":1}}],["constructing",{"2":{"278":1,"343":1}}],["construction",{"0":{"435":1,"892":1,"1039":1},"1":{"893":1},"2":{"4":1,"795":1,"847":1,"1037":1,"1103":1,"1157":1,"1209":1,"1335":1,"1534":1}}],["constructed",{"2":{"277":1}}],["constructors",{"2":{"723":1,"956":1}}],["constructor",{"0":{"4":1,"16":1,"69":1,"259":1,"1006":1,"1330":1},"2":{"827":1,"915":1,"1039":1,"1109":1}}],["const",{"0":{"1167":1,"1168":1,"1229":2,"1254":1,"1255":1,"1339":1},"2":{"12":1,"70":2,"86":4,"89":1,"108":8,"113":1,"114":1,"130":1,"132":1,"156":1,"157":1,"158":1,"173":2,"174":1,"175":3,"177":2,"178":1,"182":1,"188":1,"201":1,"202":1,"207":1,"208":1,"227":2,"228":1,"229":1,"230":1,"310":4,"334":2,"335":1,"404":1,"409":3,"416":3,"418":1,"419":2,"424":4,"425":2,"440":1,"443":1,"468":4,"476":1,"477":1,"707":1,"711":1,"727":1,"772":1,"777":1,"805":2,"806":1,"807":1,"815":1,"876":1,"896":1,"898":2,"908":2,"909":1,"910":1,"913":1,"926":4,"988":1,"992":1,"993":3,"994":3,"996":1,"1102":1,"1104":1,"1107":2,"1108":1,"1112":2,"1147":1,"1155":1,"1161":2,"1167":1,"1168":1,"1202":1,"1223":1,"1229":1,"1235":1,"1236":1,"1237":1,"1240":1,"1241":1,"1244":1,"1261":1,"1284":1,"1295":1,"1309":1,"1310":1,"1311":1,"1314":1,"1318":1,"1319":2,"1320":4,"1321":1,"1328":3,"1331":1,"1333":1,"1337":1,"1339":1,"1364":1,"1370":1,"1377":3,"1378":5,"1379":6,"1380":3,"1401":1,"1402":1,"1403":1,"1414":4,"1418":10,"1428":2,"1436":1,"1437":1,"1445":3,"1449":1,"1450":1,"1453":1,"1482":1,"1491":3,"1547":1,"1561":2,"1563":1,"1564":1,"1586":2,"1587":2,"1593":2,"1600":1,"1603":1,"1605":1,"1606":1,"1609":1,"1612":1,"1613":5,"1614":2,"1615":1,"1621":3,"1627":8,"1628":2,"1634":3,"1643":1,"1644":1,"1645":1}}],["contact",{"0":{"1654":1,"1665":1,"1674":1}}],["container",{"2":{"918":1,"950":1,"951":1,"955":1}}],["contained",{"2":{"98":1}}],["contains",{"0":{"1237":1,"1294":1},"2":{"98":1,"177":2,"229":2,"359":1,"375":1,"483":1,"697":2,"706":1,"725":1,"955":1,"1116":2,"1158":1,"1227":1,"1294":1,"1327":1,"1376":1,"1411":1}}],["contain",{"2":{"12":1,"1230":1}}],["contributions",{"2":{"632":1}}],["contract",{"0":{"290":1,"586":1,"846":1,"1374":1},"1":{"847":1,"848":1},"2":{"366":1,"459":1,"587":1,"836":1,"1411":1,"1416":1,"1621":1}}],["controller",{"2":{"274":1}}],["controlled",{"2":{"123":1,"137":1,"322":1,"889":1,"890":1,"900":1,"1052":1,"1434":1,"1440":1,"1502":1,"1503":1,"1523":1}}],["control",{"0":{"335":1,"845":1,"953":1},"2":{"36":1,"53":1,"121":1,"131":1,"144":1,"155":1,"161":1,"172":1,"199":1,"235":1,"323":1,"329":1,"330":1,"381":1,"523":1,"751":1,"767":1,"779":1,"800":2,"802":1,"844":1,"872":1,"890":1,"902":1,"903":2,"905":1,"924":1,"953":1,"960":2,"999":1,"1058":1,"1063":1,"1078":1,"1200":1,"1209":1,"1361":1,"1364":1,"1493":1,"1508":1,"1528":1,"1616":1,"1647":2}}],["controls",{"0":{"1499":1},"1":{"1500":1,"1501":1,"1502":1,"1503":1},"2":{"30":1,"435":1,"808":1,"844":1,"911":1,"1073":1,"1427":1}}],["continuation",{"0":{"400":1,"953":1},"2":{"265":1,"353":1,"397":1,"400":3,"406":1,"408":1,"484":1,"492":1,"498":2,"953":1,"960":1}}],["continuations",{"2":{"252":1,"269":1,"347":1,"435":1}}],["continues",{"2":{"428":1,"456":1}}],["continue",{"2":{"2":1,"39":1,"89":1,"168":1,"453":1,"950":1,"953":1,"1308":1,"1309":1}}],["contention",{"2":{"1575":1,"1638":1,"1650":1}}],["content",{"0":{"808":1,"911":1},"2":{"160":2,"197":2,"235":1,"310":1,"319":1,"320":1,"800":1,"808":2,"816":1,"903":1,"911":2,"928":1,"968":1,"978":1,"979":1,"1095":1,"1549":1}}],["contextfromprobeandoutcome",{"2":{"513":1}}],["context",{"0":{"56":1,"181":1,"316":1,"331":1,"372":1,"950":1,"1309":1,"1516":1,"1517":1,"1518":1,"1519":1},"1":{"57":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"1517":1,"1518":1,"1519":1},"2":{"35":1,"54":1,"55":1,"56":1,"57":1,"63":1,"65":2,"84":4,"85":4,"86":4,"180":2,"181":2,"251":2,"252":2,"253":2,"256":1,"257":1,"259":2,"260":1,"263":1,"264":1,"266":2,"270":2,"271":1,"286":1,"287":1,"292":2,"293":2,"295":1,"308":1,"310":4,"316":1,"322":1,"323":6,"330":2,"331":2,"332":1,"334":1,"336":1,"337":3,"339":1,"340":1,"341":1,"342":1,"343":2,"344":3,"347":1,"362":2,"364":1,"365":1,"366":2,"368":3,"372":1,"378":1,"379":1,"381":1,"384":1,"385":1,"386":2,"387":1,"388":1,"392":2,"394":2,"410":1,"411":1,"412":1,"413":1,"421":3,"422":1,"424":3,"425":3,"428":2,"435":1,"438":1,"442":4,"443":2,"445":1,"446":2,"447":3,"449":2,"453":3,"456":1,"457":3,"459":3,"463":1,"464":1,"474":2,"475":1,"476":3,"477":3,"494":2,"495":1,"496":1,"497":4,"502":2,"505":1,"512":1,"513":1,"822":1,"935":3,"949":1,"950":3,"952":1,"953":1,"957":1,"1001":1,"1003":1,"1006":1,"1007":1,"1012":2,"1020":1,"1027":1,"1088":1,"1308":1,"1309":3,"1508":1,"1516":1,"1517":1,"1519":1,"1521":2,"1613":2,"1614":1,"1615":1,"1618":1,"1621":2,"1669":1}}],["code=",{"2":{"1609":1}}],["codebase",{"0":{"1652":1},"2":{"442":1,"1052":1,"1097":1}}],["codes",{"0":{"96":1,"178":1,"304":1,"700":1,"742":1,"801":1,"904":1,"991":1},"2":{"214":1,"279":1,"760":1,"766":1,"775":1,"787":1,"800":1,"871":1,"903":1,"912":1,"927":1,"928":1,"948":1,"956":1,"1647":1}}],["code",{"0":{"283":1,"310":1,"1111":1,"1625":1,"1646":1},"2":{"2":1,"39":1,"82":1,"86":3,"111":1,"116":2,"117":1,"178":7,"200":2,"206":1,"222":1,"233":1,"265":2,"273":2,"279":3,"283":1,"284":1,"287":1,"297":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":4,"305":1,"307":2,"412":1,"427":1,"432":1,"443":1,"445":2,"703":1,"707":3,"708":1,"709":1,"710":1,"711":2,"718":1,"721":1,"727":1,"734":1,"742":1,"831":1,"843":1,"847":1,"874":1,"900":1,"921":1,"955":1,"956":1,"1000":1,"1079":1,"1096":1,"1112":1,"1153":3,"1195":1,"1351":1,"1355":1,"1378":1,"1379":1,"1458":1,"1609":2,"1658":1}}],["ntp",{"2":{"1569":1}}],["np",{"2":{"1020":1,"1048":1}}],["npos",{"2":{"114":1,"158":1,"310":1}}],["ndebug",{"2":{"927":1}}],["n>",{"2":{"528":1,"546":1,"603":1,"607":2,"669":1,"777":1,"1341":1}}],["num",{"2":{"1585":1,"1587":2,"1591":2}}],["numeric",{"0":{"1591":1,"1601":1},"2":{"705":1,"710":1,"783":1,"912":1,"928":1,"1483":1,"1490":1,"1581":2,"1586":1,"1596":1,"1602":1,"1610":1}}],["nums",{"2":{"657":2}}],["number",{"0":{"1149":1},"2":{"357":1,"373":1,"374":1,"417":1,"435":1,"440":1,"460":1,"467":1,"470":1,"510":1,"759":1,"787":1,"893":1,"942":1,"1033":1,"1035":1,"1036":1,"1149":1,"1363":1,"1396":1,"1427":1,"1430":1,"1602":2}}],["nulls",{"2":{"1230":1,"1291":1}}],["nullptr",{"0":{"1284":1},"2":{"1102":1,"1161":1,"1167":2,"1229":1,"1240":2,"1244":1,"1275":1,"1339":1,"1612":1,"1614":1}}],["nullopt",{"2":{"513":1,"1162":1,"1173":2,"1248":1,"1249":1,"1252":1,"1255":1,"1256":1,"1332":1,"1608":1,"1614":1,"1622":1}}],["null",{"0":{"1275":1},"2":{"42":1,"936":1,"1100":1,"1101":1,"1102":2,"1107":2,"1112":2,"1117":1,"1173":1,"1181":2,"1211":1,"1230":3,"1268":1,"1270":2,"1283":1,"1287":1,"1290":1,"1291":1,"1296":1,"1339":1,"1612":2,"1614":1,"1619":1,"1621":1,"1623":1,"1624":1}}],["ninja",{"2":{"244":1,"245":1,"246":1,"526":1,"527":5,"528":4,"533":1,"669":1,"676":2,"688":1,"691":1,"1123":2}}],["nginxserver",{"2":{"1127":1}}],["nginx",{"0":{"1127":1},"2":{"161":1,"1119":1,"1126":1,"1127":7,"1128":3,"1129":1,"1134":1,"1135":1}}],["nvme",{"2":{"151":1}}],["narrowing",{"2":{"1339":1}}],["navigate",{"2":{"1221":1}}],["navigation",{"0":{"1219":1}}],["naming",{"2":{"1183":1}}],["name|file",{"2":{"664":1}}],["name|path>",{"2":{"591":1}}],["named",{"2":{"547":1,"1329":1}}],["name>",{"2":{"517":1,"528":2,"555":1,"569":1,"581":1,"582":1,"610":2,"625":1,"628":1,"641":1,"669":2,"1347":2}}],["names",{"2":{"235":1,"507":1,"1304":1,"1488":1}}],["namespace>",{"2":{"517":1,"641":1}}],["namespace",{"0":{"1559":1},"2":{"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"57":1,"64":1,"89":1,"93":1,"94":1,"95":1,"96":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":1,"181":1,"182":1,"185":1,"187":1,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":2,"230":1,"235":1,"251":1,"287":1,"293":1,"304":1,"310":2,"336":1,"348":1,"368":1,"392":1,"396":1,"424":1,"425":1,"442":1,"443":1,"453":1,"457":1,"459":1,"464":1,"476":1,"477":1,"584":2,"683":1,"704":1,"711":1,"714":1,"726":2,"743":1,"748":1,"754":1,"765":1,"769":1,"776":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"825":1,"839":1,"857":1,"871":1,"890":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"947":1,"987":1,"988":1,"989":1,"990":2,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1080":2,"1083":1,"1096":2,"1106":1,"1107":1,"1108":1,"1112":1,"1116":1,"1137":1,"1159":1,"1182":1,"1189":1,"1190":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1222":1,"1246":1,"1267":1,"1273":1,"1309":2,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1318":1,"1319":1,"1320":2,"1321":1,"1324":1,"1353":1,"1357":1,"1360":1,"1377":4,"1378":4,"1379":4,"1380":2,"1383":1,"1410":1,"1426":1,"1443":1,"1458":2,"1491":1,"1537":2,"1559":1,"1600":1,"1602":1,"1612":2,"1613":2,"1614":2,"1615":2,"1627":1,"1634":1,"1639":1}}],["name",{"0":{"1482":1},"2":{"44":1,"46":1,"52":2,"75":1,"113":1,"174":2,"177":7,"197":1,"303":1,"415":1,"544":1,"582":1,"609":1,"610":1,"612":1,"624":1,"625":3,"626":2,"628":1,"649":1,"658":3,"683":1,"732":1,"771":2,"774":1,"826":1,"871":1,"914":2,"918":1,"937":1,"990":1,"992":1,"1107":3,"1108":1,"1112":1,"1127":1,"1142":1,"1143":1,"1147":2,"1155":3,"1170":3,"1185":2,"1213":2,"1214":1,"1219":1,"1223":6,"1225":1,"1231":1,"1235":1,"1238":1,"1240":1,"1251":1,"1273":1,"1288":1,"1297":1,"1298":2,"1299":2,"1300":1,"1301":1,"1316":1,"1318":1,"1320":6,"1321":1,"1322":1,"1328":7,"1346":1,"1347":1,"1349":1,"1391":1,"1413":1,"1482":1,"1514":1,"1542":2,"1587":3,"1634":1}}],["nano",{"2":{"1124":1,"1127":1}}],["naturally",{"2":{"857":1}}],["native",{"2":{"110":1,"535":1,"542":1,"646":1}}],["nlohmann",{"0":{"1181":1,"1216":1,"1306":1},"1":{"1182":1,"1183":1,"1217":1,"1218":1,"1219":1},"2":{"45":1,"919":1,"966":1,"1136":1,"1137":1,"1139":1,"1140":1,"1155":1,"1158":2,"1162":1,"1165":1,"1167":1,"1181":1,"1187":1,"1188":1,"1190":1,"1209":1,"1221":1,"1245":1,"1251":1,"1254":1,"1256":1,"1266":2,"1306":1}}],["n",{"2":{"11":1,"42":1,"84":4,"85":4,"86":12,"235":9,"265":2,"309":2,"310":10,"318":2,"337":1,"342":2,"348":1,"353":1,"424":3,"425":3,"442":1,"488":1,"607":1,"616":1,"711":4,"727":1,"743":2,"765":2,"776":2,"777":1,"789":2,"790":1,"791":2,"792":1,"887":1,"1020":1,"1081":1,"1106":2,"1107":3,"1108":1,"1112":3,"1116":1,"1132":1,"1142":1,"1145":1,"1182":1,"1192":1,"1202":1,"1205":1,"1211":3,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":2,"1223":1,"1229":2,"1230":1,"1235":1,"1236":1,"1238":1,"1252":2,"1255":2,"1261":1,"1262":2,"1285":1,"1318":2,"1319":2,"1320":4,"1321":2,"1344":2,"1377":1,"1378":1,"1379":1,"1460":1,"1461":1,"1462":1,"1464":1,"1465":1,"1467":1,"1468":1,"1471":2,"1472":1,"1539":1,"1561":1,"1562":1,"1563":1,"1564":1,"1587":2,"1593":2,"1600":1,"1603":1,"1606":1,"1609":1,"1612":4,"1613":2,"1614":2,"1615":2}}],["neither",{"2":{"513":1}}],["necessarily",{"2":{"374":1}}],["new",{"0":{"590":1},"1":{"591":1,"592":1,"593":1},"2":{"237":1,"278":1,"420":1,"555":1,"563":1,"590":1,"591":1,"598":4,"603":1,"609":3,"612":2,"632":2,"723":1,"1012":1,"1043":1,"1046":1,"1129":3,"1341":1,"1346":4,"1349":2,"1626":1}}],["needs",{"2":{"343":1,"715":1,"718":1,"862":1,"1663":1}}],["needed",{"2":{"271":1,"339":1,"340":1,"341":1,"545":1,"943":1,"1133":1,"1288":1,"1291":1,"1327":1,"1507":1}}],["need",{"2":{"224":1,"233":1,"244":1,"252":1,"274":1,"343":1,"366":1,"375":1,"383":1,"393":2,"410":1,"431":1,"453":1,"507":1,"515":1,"777":1,"793":1,"879":1,"902":1,"1032":1,"1078":1,"1083":1,"1124":1,"1156":1,"1220":2,"1243":1,"1306":2,"1327":1,"1482":1,"1525":1,"1554":1,"1558":1,"1567":1,"1577":2,"1616":3}}],["never|0|false",{"2":{"1500":1}}],["never",{"2":{"158":1,"213":1,"263":1,"268":1,"284":1,"540":1,"586":1,"625":1,"627":1,"746":2,"845":1,"853":1,"858":1,"859":1,"1089":1,"1095":1,"1117":1,"1162":1,"1229":1,"1231":1,"1252":1,"1255":1,"1408":1,"1409":1,"1423":1,"1456":1,"1488":1,"1557":1}}],["near",{"2":{"137":1,"152":1,"836":1,"847":1,"870":1}}],["networks",{"2":{"1630":1}}],["networkprobe>",{"2":{"1364":1,"1367":1,"1377":1,"1378":1,"1379":1}}],["networkprobe",{"2":{"502":1,"513":1,"1361":1,"1362":1,"1365":1,"1376":1,"1377":2,"1378":2,"1379":2,"1381":2}}],["networkerror",{"2":{"502":1,"513":1}}],["network",{"0":{"513":1,"557":1,"1206":1},"2":{"200":1,"213":1,"217":1,"250":1,"251":1,"253":2,"259":1,"270":1,"499":2,"502":2,"503":1,"512":2,"513":1,"553":1,"575":1,"617":1,"681":1,"933":1,"1067":1,"1196":1,"1207":1,"1363":1,"1375":1,"1384":1,"1409":2,"1411":1,"1423":2,"1424":1,"1440":1,"1456":1,"1647":1}}],["networking",{"0":{"255":1,"265":1,"342":1},"2":{"144":1,"251":2,"252":3,"255":2,"263":1,"265":2,"268":1,"270":1,"286":1,"331":1,"336":1,"342":1,"345":1,"361":1,"362":1,"412":1,"417":1,"445":1,"564":1,"615":1,"874":1,"888":1,"900":1,"929":1,"931":1,"933":1,"1143":1,"1273":1}}],["net",{"0":{"251":1,"412":1,"463":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"479":1},"2":{"86":3,"251":3,"252":1,"253":2,"255":3,"257":1,"259":1,"263":1,"264":4,"265":2,"266":2,"269":2,"271":2,"272":2,"287":2,"293":2,"310":3,"336":4,"342":2,"345":1,"393":1,"412":1,"413":1,"424":3,"425":4,"464":2,"476":3,"477":4,"502":1,"513":1,"990":1,"1003":1,"1364":1,"1367":1,"1377":3,"1378":3,"1379":3}}],["nested",{"0":{"990":1,"1143":1,"1146":1,"1214":1,"1235":1,"1301":1},"2":{"10":1,"52":1,"150":1,"658":1,"818":1,"826":1,"830":1,"954":1,"1219":1,"1281":1}}],["next",{"0":{"205":1,"272":1,"320":1,"873":1,"953":1,"1397":1},"2":{"2":1,"39":1,"56":2,"57":3,"64":3,"66":1,"89":3,"91":2,"97":1,"110":1,"168":2,"180":2,"181":6,"182":6,"239":1,"320":1,"364":1,"375":1,"384":1,"452":1,"599":1,"600":1,"817":5,"932":1,"949":1,"950":3,"953":6,"964":1,"1008":1,"1038":1,"1044":1,"1060":1,"1073":5,"1101":2,"1308":1,"1309":4,"1310":4,"1311":3,"1312":3,"1313":7,"1314":3,"1315":1,"1379":1,"1387":1,"1418":1,"1438":1,"1447":1,"1448":1,"1450":1,"1482":1}}],["nodiscard",{"2":{"707":1,"717":1,"740":1}}],["nodeconfig",{"2":{"1353":1,"1357":1}}],["nodes",{"2":{"615":1,"1031":1,"1223":1,"1230":1,"1243":1,"1354":1,"1358":1}}],["node",{"0":{"872":1,"944":1,"945":1},"2":{"164":1,"196":1,"557":1,"613":1,"614":1,"615":1,"616":2,"618":1,"620":1,"835":1,"836":2,"857":1,"870":1,"871":3,"872":1,"930":1,"933":2,"1351":1,"1353":5,"1354":1,"1355":1,"1357":5,"1358":1,"1629":1,"1651":1,"1657":1,"1671":1}}],["nobody",{"2":{"406":1}}],["now",{"0":{"1570":1},"2":{"353":1,"452":1,"505":2,"512":3,"513":1,"514":1,"920":1,"1028":1,"1073":1,"1124":1,"1309":3,"1364":2,"1367":2,"1372":2,"1377":4,"1378":5,"1379":3,"1404":1,"1405":1,"1414":5,"1417":1,"1418":5,"1422":1,"1438":1,"1452":1,"1460":1,"1464":3,"1467":1,"1468":1,"1472":1,"1491":1,"1556":2,"1557":1,"1561":3,"1562":2,"1563":2,"1567":2,"1569":1,"1570":1,"1571":3}}],["noexcept",{"0":{"377":1},"2":{"260":1,"261":1,"334":2,"335":2,"406":1,"408":2,"409":3,"416":2,"419":2,"439":1,"440":1,"468":2,"707":2,"717":1,"740":1,"756":1,"772":1,"777":1,"785":1,"786":4,"898":2,"913":1,"1364":1,"1380":1,"1401":1,"1402":1,"1403":1,"1428":2,"1436":1,"1437":1,"1450":1,"1539":3,"1541":1,"1542":2}}],["normalize",{"2":{"1541":1}}],["normalized",{"2":{"956":1,"1315":1}}],["normalizes",{"2":{"507":1,"924":1,"1501":1}}],["normally",{"2":{"284":1,"871":1,"1515":1,"1640":1}}],["normal",{"2":{"226":1,"365":1,"433":1,"1050":1,"1627":2}}],["nosniff",{"2":{"160":1,"968":1}}],["nonce",{"0":{"1087":1},"2":{"1087":2,"1088":3,"1089":3}}],["nonces",{"2":{"1084":1,"1095":2}}],["noninteractive=1",{"2":{"593":1}}],["nonewprivileges=true",{"2":{"1124":1}}],["none",{"2":{"528":1,"705":1,"706":1,"707":2,"709":1,"893":1}}],["non",{"0":{"837":1,"1194":1},"2":{"81":1,"103":1,"277":1,"383":1,"409":1,"710":1,"787":1,"824":3,"837":1,"867":1,"889":1,"1048":1,"1100":1,"1200":1,"1483":2,"1488":1,"1500":1,"1586":1,"1619":1}}],["notfound",{"2":{"1646":1}}],["notification",{"2":{"1612":1,"1614":4,"1615":1,"1618":1,"1619":1,"1620":1,"1622":1,"1623":1,"1624":1}}],["notifications",{"0":{"1614":1,"1623":1},"2":{"1611":1,"1614":2,"1615":3,"1616":1,"1622":1,"1623":1,"1624":1}}],["notify",{"2":{"1038":1,"1045":1}}],["note",{"0":{"1051":1},"2":{"310":1,"459":1,"764":1,"787":1,"817":1,"844":1,"887":1,"1013":1,"1045":1,"1140":1,"1312":1}}],["notes",{"0":{"13":1,"35":1,"53":1,"66":1,"81":1,"91":1,"110":1,"210":1,"239":1,"266":1,"284":1,"294":1,"319":1,"378":1,"393":1,"410":1,"427":1,"445":1,"478":1,"492":1,"498":1,"515":1,"523":1,"571":1,"577":1,"601":1,"637":1,"651":1,"661":1,"684":1,"693":1,"723":1,"734":1,"744":1,"799":1,"824":1,"859":1,"901":1,"1024":1,"1047":1,"1155":1,"1242":1,"1315":1,"1354":1,"1358":1,"1381":1,"1481":1,"1534":1,"1552":1,"1565":1,"1630":1},"1":{"1025":1,"1026":1,"1027":1,"1028":1,"1048":1,"1049":1,"1482":1,"1566":1,"1567":1},"2":{"1":1,"38":1,"336":1,"368":1,"415":1,"424":1,"425":1,"466":1,"631":1,"634":2,"710":1,"796":1,"845":1,"966":1,"1073":1,"1083":1,"1167":1,"1318":1,"1328":1,"1364":1,"1515":1,"1522":1,"1591":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["nothing",{"2":{"35":1,"95":1,"123":1,"127":1,"133":1,"143":1,"163":2,"284":1,"323":1,"344":1,"409":1,"532":1,"588":1,"800":1,"903":1,"1109":1,"1317":1,"1363":1,"1637":1}}],["not",{"0":{"249":1,"837":1,"838":1,"868":1,"869":1,"1027":1,"1151":1,"1664":1},"2":{"12":1,"66":2,"84":1,"91":2,"105":1,"113":1,"118":1,"135":1,"137":1,"138":1,"140":1,"142":1,"151":1,"153":1,"154":1,"155":1,"159":1,"162":1,"163":1,"174":1,"186":1,"199":1,"206":1,"213":1,"217":1,"218":1,"219":1,"222":1,"225":1,"231":1,"251":1,"268":1,"271":1,"299":2,"302":2,"319":1,"321":1,"324":1,"325":1,"361":3,"365":1,"368":1,"369":1,"374":1,"378":1,"383":1,"385":1,"390":2,"399":1,"410":1,"417":1,"427":1,"431":1,"443":1,"448":1,"449":2,"453":1,"458":1,"461":1,"475":1,"499":2,"513":1,"568":1,"571":1,"575":1,"582":2,"587":1,"625":2,"627":1,"637":1,"651":1,"661":1,"703":1,"706":2,"708":1,"710":2,"717":1,"742":1,"787":1,"798":1,"835":1,"837":1,"838":1,"844":1,"855":1,"858":1,"867":1,"900":1,"913":1,"923":1,"928":2,"932":1,"937":2,"942":1,"948":1,"952":1,"953":1,"956":1,"965":1,"973":1,"980":1,"991":2,"992":1,"1007":2,"1008":1,"1013":1,"1015":1,"1025":1,"1026":3,"1027":1,"1028":1,"1041":1,"1044":2,"1046":1,"1058":1,"1059":1,"1060":1,"1063":1,"1073":1,"1077":1,"1096":1,"1107":3,"1112":3,"1139":1,"1146":1,"1164":2,"1167":2,"1180":2,"1220":1,"1221":1,"1227":1,"1240":1,"1243":1,"1254":1,"1266":1,"1268":1,"1281":1,"1288":2,"1304":1,"1305":1,"1312":1,"1313":1,"1315":1,"1318":1,"1327":1,"1332":1,"1337":1,"1339":1,"1375":1,"1376":1,"1378":3,"1393":1,"1427":1,"1434":1,"1444":1,"1472":1,"1483":1,"1488":1,"1495":1,"1504":1,"1507":2,"1525":1,"1541":1,"1552":1,"1561":1,"1566":1,"1569":1,"1577":1,"1591":1,"1595":1,"1596":2,"1597":1,"1605":1,"1612":1,"1613":2,"1615":1,"1617":1,"1620":1,"1621":1,"1625":1,"1634":1,"1646":1}}],["notation",{"0":{"1225":1},"2":{"3":1,"10":1,"758":2,"1227":1}}],["no",{"2":{"2":2,"13":2,"39":2,"111":1,"121":1,"125":3,"144":2,"145":1,"146":1,"214":1,"235":1,"256":2,"273":3,"294":2,"299":1,"306":1,"322":1,"327":1,"330":1,"331":1,"375":1,"376":2,"386":1,"397":1,"400":1,"406":2,"431":1,"444":2,"463":2,"490":1,"509":2,"521":2,"526":1,"528":3,"535":1,"540":1,"541":3,"553":1,"568":1,"571":1,"579":1,"582":2,"585":1,"587":1,"588":1,"592":1,"594":1,"616":1,"625":2,"626":1,"634":1,"641":2,"645":2,"651":1,"662":2,"669":1,"673":1,"674":1,"676":1,"681":1,"684":1,"697":1,"698":2,"706":2,"709":1,"712":1,"734":1,"739":1,"744":2,"745":2,"749":2,"751":3,"755":3,"759":1,"766":5,"767":3,"770":2,"777":1,"779":1,"780":3,"783":1,"795":1,"799":1,"802":1,"816":2,"827":1,"833":1,"836":9,"845":1,"847":7,"853":1,"854":1,"859":1,"867":1,"871":3,"872":2,"905":1,"923":1,"928":1,"940":1,"951":1,"962":1,"966":1,"970":2,"978":1,"979":2,"980":1,"982":1,"983":1,"1006":1,"1026":1,"1045":1,"1048":1,"1062":2,"1064":1,"1065":1,"1103":1,"1124":1,"1129":1,"1132":1,"1209":1,"1242":1,"1264":1,"1327":2,"1350":1,"1378":1,"1386":1,"1411":1,"1424":1,"1430":1,"1434":1,"1454":1,"1458":2,"1474":1,"1478":1,"1488":3,"1493":2,"1500":1,"1502":2,"1503":3,"1507":3,"1510":1,"1523":2,"1528":1,"1533":1,"1534":2,"1546":1,"1552":1,"1578":2,"1581":1,"1593":1,"1599":1,"1612":1,"1614":2,"1615":3,"1622":3,"1623":1,"1624":2,"1632":1,"1639":2,"1647":1,"1658":1}}],["mt19937",{"2":{"1575":1}}],["md",{"2":{"1492":9}}],["mv",{"2":{"1129":1}}],["mkdir",{"2":{"1124":1}}],["m1",{"2":{"1112":2}}],["mb",{"2":{"1056":1}}],["mm",{"2":{"839":4,"858":1,"1461":1,"1465":2,"1514":1,"1556":2}}],["m>",{"2":{"586":3}}],["m",{"2":{"378":1,"750":1}}],["mydatabase>",{"2":{"951":2}}],["mydb",{"2":{"826":1}}],["myuser",{"2":{"826":1}}],["myexecutor>",{"2":{"821":1}}],["myserver",{"2":{"1075":2}}],["mysuite",{"2":{"690":1}}],["mysql|sqlite",{"2":{"1346":1}}],["mysql|sqlite>",{"2":{"609":1}}],["mysqlconfig",{"2":{"1104":1}}],["mysql",{"0":{"1115":1},"2":{"604":1,"609":1,"610":1,"612":1,"1097":2,"1104":1,"1106":5,"1107":7,"1108":5,"1112":7,"1115":2,"1116":1,"1316":1,"1318":1,"1319":1,"1320":1,"1321":1,"1346":1,"1347":1,"1349":1}}],["my",{"2":{"353":1,"539":1,"950":1,"1497":1,"1506":1,"1635":3,"1636":1}}],["ms=",{"2":{"1561":1,"1564":1}}],["ms>",{"2":{"616":2,"617":1}}],["msg",{"2":{"424":3,"477":4,"1081":1,"1088":2,"1093":2,"1094":1,"1612":3,"1614":2,"1619":1}}],["msvc",{"2":{"247":1}}],["ms",{"0":{"1394":1,"1395":1,"1397":1,"1431":1,"1432":1,"1437":1,"1570":1},"2":{"195":1,"224":1,"501":1,"503":8,"505":2,"512":7,"513":4,"514":1,"829":1,"1309":2,"1353":1,"1357":1,"1363":6,"1364":2,"1366":6,"1367":2,"1372":2,"1377":3,"1378":4,"1379":6,"1387":3,"1404":2,"1405":1,"1414":5,"1417":1,"1418":8,"1422":3,"1428":3,"1431":1,"1433":3,"1437":3,"1438":2,"1447":2,"1448":2,"1452":2,"1471":1,"1472":1,"1490":1,"1498":1,"1505":1,"1506":3,"1521":1,"1557":1,"1558":1,"1561":3,"1564":2,"1567":1,"1569":3,"1570":1,"1571":2}}],["mobile",{"2":{"1629":1}}],["monitor",{"0":{"1011":1},"2":{"935":1}}],["monitoring",{"2":{"898":1}}],["monostate",{"0":{"486":1},"2":{"486":2,"487":1,"488":1,"495":1,"1270":1}}],["monotonically",{"2":{"1446":1}}],["monotonic",{"0":{"1557":1},"2":{"448":1,"460":1,"1033":1,"1442":1,"1458":1,"1472":1,"1490":1,"1554":2,"1557":1,"1561":1}}],["moving",{"2":{"1651":1}}],["movable",{"2":{"824":1,"1077":1}}],["moves",{"2":{"408":1,"572":1}}],["moved",{"2":{"397":1}}],["move",{"2":{"70":1,"86":1,"149":1,"181":1,"182":2,"195":1,"310":1,"327":1,"359":1,"397":2,"399":1,"406":2,"409":1,"425":1,"442":1,"899":1,"1153":1,"1154":1,"1280":1,"1314":1,"1380":5,"1534":1,"1539":1,"1541":1,"1628":1}}],["mount",{"2":{"819":1}}],["mold",{"2":{"526":1,"528":1,"530":1}}],["more",{"2":{"142":1,"266":1,"290":1,"859":1,"883":1,"1361":1,"1386":1,"1637":1,"1655":1,"1659":1}}],["mostly",{"2":{"1233":1}}],["most",{"2":{"92":1,"187":1,"475":1,"711":1,"844":1,"858":1,"929":1,"1126":1,"1163":1,"1199":1,"1228":1,"1324":1,"1399":1,"1489":1,"1616":1}}],["mod",{"2":{"1521":1}}],["modular",{"2":{"551":1,"556":1,"1649":1,"1658":1,"1668":1}}],["module",{"0":{"584":1,"585":1,"586":1,"587":1,"1513":1},"2":{"212":1,"235":1,"286":1,"308":1,"321":1,"345":1,"499":2,"579":1,"581":2,"582":2,"586":1,"587":1,"589":1,"725":1,"890":1,"961":1,"1033":1,"1079":1,"1096":1,"1316":1,"1323":1,"1338":1,"1359":1,"1376":2,"1382":1,"1409":1,"1425":1,"1442":1,"1458":1,"1474":1,"1488":1,"1489":1,"1508":1,"1513":1,"1517":1,"1542":1,"1553":1,"1580":1,"1597":1,"1599":1,"1656":1}}],["modules",{"0":{"556":1,"579":1,"583":1},"1":{"580":1,"581":1,"582":1},"2":{"91":1,"556":2,"579":2,"580":1,"581":1,"583":4,"584":5,"586":2,"587":1,"588":1,"589":4,"817":1,"835":1,"939":1,"965":1,"1266":1,"1268":1,"1306":1}}],["mode>",{"2":{"528":2,"750":2}}],["modes",{"0":{"665":1},"1":{"666":1,"667":1,"668":1},"2":{"219":1,"550":1,"627":1,"715":1,"722":1,"1058":1,"1522":1}}],["modern",{"0":{"1668":1},"2":{"154":1,"244":1,"307":1,"552":1,"654":1,"871":1,"1079":1,"1638":1,"1666":1}}],["mode",{"0":{"139":1,"533":1,"548":1,"583":1,"594":1,"666":1,"667":1,"668":1,"671":1,"672":1,"675":1,"820":1,"1240":1,"1241":1,"1501":1,"1515":1},"1":{"595":1,"596":1,"597":1},"2":{"457":1,"492":1,"547":3,"581":1,"601":1,"615":1,"617":1,"670":1,"676":1,"677":1,"678":1,"692":1,"701":1,"717":2,"722":2,"750":3,"820":2,"826":1,"829":2,"861":1,"936":1,"1058":1,"1264":1,"1488":2,"1495":1,"1497":2,"1498":1,"1501":2,"1505":1,"1506":2,"1515":1}}],["modeled",{"2":{"294":1}}],["models",{"0":{"1653":1},"2":{"205":1,"231":1,"463":1,"1599":1,"1610":1}}],["model",{"0":{"121":1,"145":1,"166":1,"266":1,"279":1,"291":1,"329":1,"366":1,"398":1,"432":1,"433":1,"449":1,"482":1,"727":1,"846":1,"872":1,"956":1,"975":1,"1065":1,"1081":1,"1098":1,"1256":1,"1266":1,"1454":1,"1455":1,"1609":1},"1":{"167":1,"168":1,"399":1,"400":1,"483":1,"484":1,"847":1,"848":1,"1099":1,"1100":1,"1101":1,"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1},"2":{"119":1,"199":1,"200":1,"201":1,"203":1,"204":1,"205":1,"206":1,"208":4,"209":1,"210":2,"213":1,"215":1,"224":2,"226":1,"232":1,"253":1,"273":1,"297":1,"307":1,"366":2,"383":1,"394":1,"425":1,"518":1,"523":1,"558":1,"645":1,"678":1,"685":1,"732":1,"936":1,"956":1,"1096":2,"1102":1,"1116":1,"1266":1,"1272":1,"1306":1,"1307":1,"1652":1,"1668":1}}],["modified",{"2":{"515":1}}],["modifications",{"2":{"133":1}}],["modifying",{"2":{"637":1}}],["modify",{"2":{"66":1,"651":1,"1444":1}}],["mw3",{"2":{"62":3}}],["mw2",{"2":{"62":3}}],["mw1",{"2":{"62":3}}],["mw",{"2":{"57":2,"59":1,"60":1,"61":1,"64":2,"65":2,"181":2,"182":2,"187":1,"817":4,"818":1,"950":1,"951":1,"953":1,"954":1,"955":3}}],["might",{"2":{"965":1}}],["migrating",{"2":{"1657":1,"1673":1}}],["migration",{"0":{"1651":1},"2":{"604":1,"609":2,"612":1,"1111":1,"1112":1,"1116":1,"1340":1,"1346":2,"1349":1}}],["migrationsrunner",{"2":{"1111":1,"1112":1}}],["migrations",{"0":{"1110":1,"1111":1,"1112":1},"1":{"1111":1,"1112":1},"2":{"553":1,"560":1,"602":1,"604":1,"606":1,"607":1,"608":1,"610":1,"612":5,"1096":1,"1112":6,"1322":1,"1323":1,"1340":1,"1343":1,"1344":1,"1345":1,"1347":1,"1348":1,"1349":4,"1350":1,"1670":1}}],["migrator",{"2":{"610":1,"1347":1}}],["migrate",{"0":{"606":1,"1343":1},"2":{"603":1,"606":1,"612":2,"1341":1,"1343":1,"1348":1,"1349":1}}],["mime",{"2":{"924":1}}],["mistakes",{"0":{"1148":1,"1568":1},"1":{"1149":1,"1150":1,"1151":1,"1569":1,"1570":1}}],["mismatch",{"2":{"1117":1,"1175":1,"1180":1,"1322":1}}],["misuse",{"2":{"723":1,"858":1}}],["miss",{"2":{"368":1,"512":1,"1512":1}}],["missing",{"2":{"89":1,"156":1,"227":1,"568":1,"698":1,"699":1,"825":1,"829":1,"833":2,"924":1,"950":1,"1149":1,"1158":1,"1161":1,"1163":1,"1164":1,"1176":1,"1180":2,"1185":1,"1187":1,"1223":1,"1229":2,"1230":3,"1255":1,"1296":1,"1313":1,"1314":1,"1322":1,"1413":2,"1474":1,"1476":1,"1477":1,"1483":1,"1590":1,"1595":1,"1619":1}}],["mid",{"2":{"218":1,"219":2,"836":1,"844":1,"1199":1}}],["middlewares",{"2":{"196":5,"817":1}}],["middlewarefn",{"2":{"56":1,"57":1,"181":1}}],["middleware",{"0":{"54":1,"56":1,"58":1,"62":1,"64":1,"164":1,"168":1,"180":1,"181":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"195":1,"817":1,"949":1,"957":1,"959":1,"1308":1,"1309":1,"1310":1,"1311":1,"1312":1,"1314":1},"1":{"57":1,"59":1,"60":1,"61":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":2,"182":2,"183":1,"184":2,"185":2,"186":2,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1},"2":{"36":1,"54":4,"55":4,"56":1,"57":5,"62":2,"65":2,"66":4,"87":1,"89":2,"91":1,"101":1,"125":1,"134":1,"144":1,"162":1,"164":4,"165":3,"168":3,"177":1,"180":3,"181":7,"182":4,"183":1,"185":1,"187":3,"189":1,"190":1,"191":1,"192":2,"193":6,"194":2,"195":2,"197":2,"817":1,"818":1,"824":1,"872":1,"912":1,"918":2,"929":1,"949":1,"950":3,"951":1,"953":2,"954":1,"956":1,"957":1,"958":1,"959":2,"960":1,"1308":6,"1309":9,"1310":5,"1311":1,"1312":1,"1313":1,"1314":2,"1315":3,"1637":1}}],["mirrors",{"2":{"196":1}}],["minv",{"2":{"1585":1}}],["minl",{"2":{"1585":1}}],["min",{"2":{"1049":1,"1103":1,"1107":1,"1112":1,"1318":1,"1525":1,"1584":2,"1586":2,"1589":1,"1591":1,"1601":1,"1603":1,"1604":1,"1628":1}}],["minisig",{"2":{"699":1}}],["minisign",{"2":{"559":1,"568":1,"571":1,"624":1,"627":2,"628":1,"696":1,"698":1,"699":1,"701":1}}],["minimizing",{"2":{"1207":1}}],["minimizes",{"2":{"867":1}}],["minimized",{"2":{"851":1}}],["minimize",{"2":{"152":1}}],["minimum",{"2":{"844":1,"1009":1,"1635":1}}],["minimalism",{"2":{"836":1,"1381":1}}],["minimal",{"0":{"11":1,"23":1,"57":1,"70":1,"93":1,"124":1,"128":1,"145":1,"146":1,"170":1,"201":1,"207":1,"235":1,"308":1,"337":1,"589":1,"947":1,"971":1,"987":1,"1105":1,"1135":1,"1377":1,"1380":1,"1629":1,"1633":1,"1635":1,"1639":1,"1642":1},"1":{"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"1106":1,"1107":1,"1108":1,"1643":1,"1644":1,"1645":1,"1646":1},"2":{"1":1,"2":1,"14":1,"36":1,"38":1,"39":1,"53":1,"67":1,"81":1,"82":1,"87":1,"92":1,"97":1,"98":2,"100":1,"102":1,"104":1,"105":1,"106":1,"144":1,"149":1,"204":1,"207":1,"208":1,"211":1,"220":1,"224":1,"252":1,"273":1,"308":1,"318":1,"319":1,"323":1,"346":1,"361":1,"395":1,"410":1,"422":1,"425":1,"497":1,"501":1,"528":1,"531":1,"646":1,"662":1,"715":1,"718":1,"727":1,"831":1,"858":1,"869":1,"870":1,"871":1,"884":1,"951":1,"958":1,"986":1,"1050":1,"1065":1,"1079":1,"1081":1,"1096":1,"1116":1,"1124":1,"1156":1,"1209":2,"1220":1,"1221":1,"1266":1,"1272":1,"1306":1,"1307":1,"1309":1,"1310":1,"1314":1,"1316":1,"1322":1,"1323":1,"1329":1,"1337":1,"1350":1,"1351":1,"1355":1,"1376":1,"1416":1,"1441":1,"1445":1,"1457":1,"1458":1,"1490":1,"1507":1,"1574":1,"1579":1,"1606":1,"1620":1,"1621":1,"1626":2,"1632":1}}],["minute",{"2":{"223":1}}],["minutes",{"2":{"185":1,"192":1}}],["mindset",{"0":{"152":1,"163":1,"204":1}}],["mixed",{"0":{"998":1}}],["mixing",{"2":{"252":1}}],["mix",{"2":{"132":1,"173":1,"998":1}}],["milliseconds>",{"2":{"1309":1,"1377":1,"1378":1,"1379":1}}],["milliseconds",{"0":{"1073":1,"1557":1,"1558":1},"2":{"84":1,"324":1,"457":2,"459":1,"882":2,"1363":1,"1366":1,"1470":1,"1554":1}}],["much",{"2":{"1160":1}}],["mutex",{"2":{"360":1,"378":1,"445":1,"509":1,"510":1,"511":1,"851":2,"1421":1,"1495":1,"1504":1,"1507":1,"1524":1}}],["mutating",{"0":{"1286":1},"1":{"1287":1,"1288":1},"2":{"936":1}}],["mutation",{"2":{"511":1,"1219":1,"1390":1,"1421":1}}],["mutate",{"2":{"52":1,"218":1,"1221":1}}],["mutable",{"2":{"13":1,"182":1,"418":1,"838":1,"1064":1,"1288":1,"1384":1}}],["multithreaded",{"2":{"1489":1,"1494":1}}],["multiset",{"2":{"460":1}}],["multipart",{"0":{"193":1,"1549":1},"2":{"193":2,"1549":2}}],["multiple",{"2":{"62":1,"174":1,"221":1,"229":1,"266":1,"271":1,"284":1,"309":1,"328":1,"360":1,"366":1,"375":1,"379":1,"382":2,"383":1,"417":1,"460":1,"480":1,"935":1,"936":1,"1071":1,"1116":1,"1233":1,"1336":1,"1354":1,"1358":1,"1524":1,"1551":1,"1637":1}}],["multi",{"2":{"151":1,"344":1,"361":1,"838":1,"850":1,"1192":1,"1605":1,"1630":1,"1638":1}}],["must",{"2":{"35":1,"142":1,"216":1,"219":1,"221":1,"237":1,"238":1,"266":2,"284":1,"406":1,"461":1,"507":1,"523":1,"537":1,"585":1,"586":1,"588":1,"633":3,"635":2,"644":3,"712":1,"724":1,"757":1,"759":1,"773":1,"774":1,"783":1,"785":1,"844":1,"859":1,"1083":1,"1087":1,"1142":2,"1151":1,"1251":1,"1378":2,"1382":1,"1418":1,"1439":1,"1441":1,"1491":1,"1503":1,"1592":1,"1601":1,"1602":1,"1613":1,"1621":1}}],["messaging",{"2":{"1626":1}}],["message=",{"2":{"1609":1}}],["messages",{"2":{"102":1,"106":1,"110":1,"214":1,"236":1,"703":1,"712":1,"861":1,"1095":1,"1377":1,"1378":2,"1379":1,"1584":1,"1598":1,"1626":1,"1627":1}}],["message",{"0":{"74":1,"75":1,"1629":1},"2":{"33":1,"34":1,"67":1,"70":1,"74":1,"75":2,"77":1,"78":1,"86":3,"89":1,"94":1,"95":1,"104":1,"107":1,"108":6,"111":1,"116":1,"117":1,"124":1,"128":1,"136":1,"146":1,"152":1,"170":1,"172":1,"173":1,"222":1,"238":1,"304":1,"463":1,"760":1,"765":1,"789":1,"790":1,"791":1,"792":1,"847":1,"871":3,"919":2,"922":1,"947":1,"955":1,"956":1,"987":1,"991":1,"1017":1,"1081":2,"1083":1,"1087":1,"1088":1,"1095":1,"1153":3,"1180":1,"1217":1,"1309":1,"1390":1,"1399":1,"1510":1,"1514":1,"1581":1,"1593":2,"1600":1,"1603":1,"1606":1,"1609":2,"1626":3,"1627":6,"1628":4,"1629":2,"1634":1,"1639":1,"1641":1}}],["mersenne",{"2":{"1575":1}}],["merges",{"2":{"965":1}}],["merged",{"2":{"954":1}}],["merge",{"0":{"1215":1},"2":{"44":1,"954":1,"1215":1}}],["merging",{"2":{"13":1}}],["members",{"2":{"1071":1}}],["member",{"0":{"1172":1,"1176":1,"1180":1},"2":{"723":2}}],["memcpy",{"2":{"477":1}}],["memorystore",{"0":{"509":1}}],["memory",{"2":{"151":1,"204":1,"276":2,"310":1,"499":1,"510":2,"511":1,"872":1,"1056":1,"1254":1,"1268":1,"1306":1,"1421":1,"1482":1,"1638":1,"1650":1,"1668":1}}],["memory>",{"2":{"86":1,"108":1,"310":1,"1377":1,"1378":1,"1379":1,"1627":1}}],["mechanisms",{"2":{"848":1}}],["mechanism",{"2":{"343":1,"366":1,"381":1,"1361":1}}],["measuring",{"0":{"1472":1},"2":{"1557":1}}],["measurements",{"2":{"1561":1}}],["measurement",{"2":{"954":1,"1472":1,"1473":1}}],["measure",{"0":{"1561":1},"2":{"153":1,"1569":1}}],["meant",{"2":{"319":1,"869":1,"887":1,"1136":1,"1268":2}}],["meaningful",{"2":{"1570":1}}],["meaningfully",{"2":{"488":1}}],["meaning",{"0":{"706":1,"1386":1,"1448":1},"2":{"299":1,"300":1,"301":1,"302":1,"467":1,"1363":1,"1366":1,"1369":1,"1413":1,"1420":1}}],["means",{"2":{"229":1,"255":1,"366":1,"433":1,"491":1,"883":1,"938":1,"1025":1,"1042":1,"1557":1,"1619":1}}],["mental",{"0":{"166":1,"482":1,"872":1,"944":1},"1":{"167":1,"168":1,"483":1,"484":1},"2":{"936":1,"1096":1}}],["mega",{"2":{"164":1,"165":2,"189":1}}],["met",{"2":{"716":1}}],["meta",{"2":{"658":1,"699":1,"1237":2,"1622":1,"1625":1}}],["metadata",{"0":{"969":1},"2":{"188":1,"463":1,"467":1,"501":1,"515":1,"624":1,"628":1,"632":1,"698":1,"939":1,"952":1,"964":1,"972":1,"973":1,"981":1,"1088":1,"1254":1}}],["method",{"2":{"130":1,"167":1,"319":1,"507":2,"709":1,"817":1,"912":1,"914":1,"927":1,"931":1,"932":1,"937":2,"965":2,"966":1,"972":1,"980":1,"982":1,"1004":1,"1006":1,"1612":4,"1613":4,"1614":1,"1615":3,"1618":1,"1619":2,"1621":1}}],["methods",{"0":{"18":1,"841":1,"1418":1,"1435":1,"1613":1,"1621":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"1436":1,"1437":1},"2":{"1":2,"14":1,"38":2,"43":1,"44":1,"277":1,"378":1,"898":1,"936":1,"1071":1,"1101":1,"1271":1,"1611":1,"1618":1}}],["metrics",{"0":{"878":1,"884":1,"896":1,"1011":1},"2":{"108":2,"184":1,"215":1,"221":1,"224":1,"225":1,"320":1,"710":1,"874":2,"876":2,"884":2,"889":1,"896":2,"935":2,"942":1,"943":1,"954":1,"1001":1,"1004":1,"1007":1,"1011":1,"1032":1,"1033":1,"1041":1,"1075":3,"1078":1,"1485":2,"1554":1,"1627":2}}],["me",{"2":{"88":1,"89":4,"90":2}}],["malformed",{"2":{"1063":1}}],["mastery",{"0":{"1669":1}}],["master",{"2":{"919":1,"1666":1}}],["masking",{"2":{"383":1}}],["masks",{"2":{"383":1}}],["map>",{"2":{"1380":1}}],["mappers",{"2":{"1323":1,"1339":1}}],["mapper",{"0":{"1328":1},"2":{"1320":2,"1324":1,"1328":3,"1329":1,"1331":1,"1333":1,"1339":1,"1350":1}}],["mapped",{"0":{"486":1},"2":{"1328":1}}],["mapping",{"0":{"779":1,"798":1,"944":1,"945":1,"946":1},"2":{"706":1,"750":1,"770":2,"779":1,"799":1,"1317":1,"1350":1}}],["mappings",{"2":{"674":1}}],["maps",{"2":{"597":1,"641":1,"673":1,"771":1,"924":1,"1104":1,"1490":1}}],["map",{"0":{"1586":1},"2":{"501":1,"507":2,"509":1,"511":1,"512":1,"712":1,"770":1,"955":1,"964":1,"1380":2,"1488":2,"1551":3,"1552":1,"1580":1,"1583":2,"1586":2,"1587":3,"1593":1}}],["manner",{"2":{"1434":1}}],["manual",{"0":{"1372":1},"2":{"844":1,"1158":1,"1361":1,"1569":1,"1593":1}}],["manually",{"0":{"1636":1},"2":{"540":1,"777":1,"1066":1,"1362":1,"1589":1}}],["manifest",{"0":{"668":1},"2":{"624":1,"628":1,"668":3,"678":1,"694":1,"696":1,"697":3}}],["manifests",{"2":{"545":1}}],["managing",{"2":{"551":1,"984":1,"1053":1}}],["managed",{"2":{"1114":1,"1327":1}}],["manages",{"2":{"558":1,"604":1,"1340":1,"1350":1}}],["management",{"2":{"553":1,"602":1,"652":1}}],["manage",{"2":{"418":1,"555":1,"560":1,"638":1,"949":1,"950":1,"1028":1,"1099":1,"1373":1,"1374":1}}],["manager",{"2":{"310":1}}],["many",{"2":{"217":1,"857":1,"872":1,"1155":1,"1591":1}}],["macros",{"0":{"1049":1},"2":{"779":1,"1049":1,"1097":1,"1525":1}}],["macro",{"0":{"1525":1},"2":{"716":1,"1097":1}}],["macos",{"0":{"242":1,"246":1},"2":{"249":1,"1493":1}}],["machine",{"2":{"199":1,"955":1,"1199":1}}],["machines",{"2":{"125":1,"540":1}}],["maxv",{"2":{"1585":1}}],["maxl",{"2":{"1585":1}}],["maxthreadcount",{"2":{"1039":1}}],["maxthreads",{"2":{"892":1,"893":1,"899":1,"942":1,"1033":1,"1043":1,"1052":1}}],["maxperiodic",{"2":{"1039":1}}],["maxperiodicthreads",{"2":{"1038":1,"1044":1}}],["maxpending",{"2":{"887":1}}],["maximum",{"2":{"503":2,"883":1,"893":1,"1039":1,"1056":1,"1363":1,"1427":2,"1430":1}}],["maximize",{"2":{"152":1}}],["max",{"0":{"1430":1,"1432":1},"2":{"217":1,"223":6,"237":1,"510":1,"512":1,"826":3,"830":2,"898":1,"899":1,"936":1,"968":1,"1049":1,"1103":1,"1107":1,"1112":1,"1117":1,"1318":1,"1366":2,"1428":2,"1430":1,"1433":1,"1436":1,"1437":1,"1486":2,"1505":1,"1525":1,"1584":2,"1586":2,"1589":1,"1590":1,"1591":1,"1600":1,"1601":1,"1603":2,"1627":1,"1628":1}}],["markfailed",{"2":{"1447":1,"1448":1}}],["markdone",{"2":{"1447":1}}],["marking",{"2":{"1422":1}}],["marked",{"2":{"932":1,"938":1,"976":1,"977":1,"1377":1}}],["marker",{"2":{"187":1}}],["marks",{"2":{"406":1,"1109":2,"1415":2}}],["mark",{"2":{"187":1,"814":1,"889":1,"948":1,"1379":1,"1418":3,"1438":1,"1504":1}}],["maybe",{"2":{"1252":2,"1260":1,"1263":2}}],["may",{"2":{"153":1,"235":1,"268":1,"291":1,"373":1,"375":1,"382":1,"383":1,"417":1,"425":1,"478":1,"513":2,"693":1,"816":1,"848":1,"853":1,"854":1,"858":1,"859":1,"865":1,"882":1,"883":2,"889":2,"902":1,"926":1,"936":1,"1230":1,"1304":1,"1363":1,"1366":1,"1369":1,"1386":1,"1452":1,"1507":1,"1522":1,"1612":2}}],["math",{"0":{"655":1},"2":{"662":1,"1613":2,"1621":1}}],["matters",{"2":{"153":1,"478":1,"1207":1,"1315":1}}],["matter",{"2":{"151":1,"284":1}}],["match",{"0":{"1592":1},"2":{"145":1,"635":1,"706":2,"742":1,"774":1,"932":1,"978":1,"982":3,"983":1,"1026":1,"1101":1,"1164":1,"1585":1,"1586":2,"1587":2,"1592":4,"1598":1,"1605":1,"1621":1}}],["matcher",{"2":{"972":1}}],["matches",{"2":{"130":1,"723":1,"916":1,"937":1,"976":1,"980":1,"1000":1,"1004":1,"1312":1,"1598":1}}],["matched",{"2":{"121":1,"127":1,"128":1}}],["matching",{"0":{"130":1,"982":1},"2":{"449":1,"736":1,"739":1,"750":1,"774":2,"778":1,"779":1,"931":1,"972":1,"973":1,"982":1,"983":1,"984":1,"1315":1}}],["makemigrations",{"0":{"609":1,"1346":1},"2":{"603":1,"609":1,"612":1,"1341":1,"1346":1,"1349":1}}],["makestand",{"2":{"886":1}}],["makes",{"0":{"1199":1},"2":{"118":1,"163":1,"252":1,"307":1,"390":1,"427":1,"460":1,"499":1,"539":1,"751":1,"931":1,"1598":1}}],["make",{"0":{"391":1,"474":1,"722":1},"2":{"70":1,"86":1,"108":1,"279":1,"287":1,"292":1,"293":1,"304":1,"310":1,"327":1,"379":1,"388":1,"391":1,"412":2,"421":2,"424":1,"425":1,"474":1,"476":1,"477":1,"512":1,"720":1,"722":1,"787":1,"821":1,"865":1,"867":1,"899":2,"951":1,"1022":2,"1032":1,"1077":1,"1104":1,"1115":2,"1133":1,"1195":1,"1318":1,"1319":1,"1320":1,"1321":1,"1353":1,"1357":1,"1377":4,"1378":4,"1379":4,"1627":1,"1628":1}}],["maintainability",{"2":{"588":1}}],["main",{"0":{"381":1,"1634":1},"2":{"11":1,"12":1,"14":1,"23":1,"42":1,"43":1,"44":1,"46":1,"57":1,"64":1,"67":1,"70":1,"82":1,"84":1,"85":1,"86":1,"87":1,"89":1,"92":1,"93":1,"94":1,"95":1,"96":1,"98":1,"103":1,"106":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":1,"179":2,"196":2,"201":1,"202":1,"207":2,"208":1,"227":1,"228":1,"229":1,"230":1,"235":1,"253":1,"287":1,"310":1,"322":1,"323":1,"337":1,"348":1,"368":3,"381":1,"392":1,"424":1,"425":1,"442":1,"453":1,"457":1,"459":1,"476":1,"477":1,"497":3,"512":1,"582":2,"667":1,"668":1,"675":2,"676":1,"678":1,"711":1,"719":1,"765":1,"776":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"839":1,"871":5,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"947":1,"971":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1022":1,"1038":1,"1044":1,"1046":1,"1104":1,"1106":1,"1107":1,"1108":1,"1112":1,"1136":1,"1188":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1318":1,"1319":1,"1320":1,"1321":1,"1351":1,"1353":1,"1355":1,"1357":1,"1377":1,"1378":1,"1379":1,"1491":1,"1497":1,"1498":1,"1500":2,"1502":1,"1503":1,"1561":1,"1562":1,"1563":1,"1564":1,"1574":2,"1587":1,"1599":1,"1612":1,"1613":1,"1614":1,"1615":1,"1626":1,"1627":1,"1628":1,"1633":1,"1634":2,"1635":1,"1637":1,"1639":2,"1640":1}}],["magical",{"2":{"836":1}}],["magic",{"2":{"2":1,"39":1,"121":1,"134":1,"154":1,"330":1,"662":1,"755":1,"770":1,"867":1,"871":1,"872":1,"958":1,"1350":1,"1507":1,"1647":1,"1658":1}}],["dto",{"2":{"1610":1}}],["dt",{"2":{"1465":2,"1561":2}}],["ddthh",{"2":{"1465":1,"1556":1}}],["dd",{"2":{"1461":1}}],["ddebug",{"2":{"675":1}}],["dcmake",{"2":{"1123":1}}],["dx",{"2":{"836":1}}],["dvix",{"2":{"530":1}}],["dg",{"2":{"476":3}}],["dberror",{"2":{"1339":1}}],["dbconfig",{"2":{"1104":1,"1106":1,"1107":1,"1108":1,"1112":1}}],["dbvalue",{"0":{"1102":1,"1339":1},"2":{"1096":1,"1100":1,"1102":1,"1328":1,"1337":1,"1339":2}}],["db=blog",{"2":{"612":1,"1348":1}}],["db",{"0":{"832":1,"1338":1},"1":{"1339":1},"2":{"428":1,"610":1,"611":1,"612":7,"825":1,"832":3,"834":1,"933":1,"938":1,"942":2,"951":1,"977":1,"1059":1,"1096":5,"1097":4,"1104":2,"1106":7,"1107":6,"1108":5,"1112":6,"1115":1,"1116":1,"1317":1,"1324":1,"1328":2,"1330":1,"1336":1,"1337":1,"1338":1,"1339":5,"1347":1,"1348":2,"1349":6,"1350":1,"1390":1,"1512":1}}],["drift",{"2":{"1073":1}}],["driving",{"0":{"1372":1},"2":{"344":1,"411":1,"1359":1}}],["drivers",{"0":{"1113":1},"1":{"1114":1,"1115":1}}],["driver",{"0":{"1114":1,"1115":1},"2":{"1096":1,"1097":3,"1099":1,"1115":1,"1117":1,"1374":1}}],["driven",{"2":{"344":1,"480":1,"499":1,"767":1,"843":1,"1408":1,"1424":1,"1657":1}}],["drives",{"2":{"316":1,"1004":1,"1361":1,"1386":1}}],["drive",{"2":{"252":1,"331":1,"344":1,"406":1,"1371":1}}],["drains",{"2":{"1046":1}}],["draining",{"2":{"879":1,"897":1}}],["drained",{"2":{"379":1}}],["drop",{"2":{"826":1,"1058":1,"1073":1,"1112":1,"1369":1}}],["dry",{"2":{"528":2,"631":1,"634":2,"637":1}}],["day",{"0":{"1462":1}}],["dark",{"2":{"1229":1,"1235":1}}],["daemon",{"2":{"1124":1}}],["dateheader",{"2":{"1563":2}}],["datetime",{"0":{"1463":1,"1464":1},"1":{"1464":1,"1465":1},"2":{"1458":1,"1464":1,"1465":1,"1473":1}}],["dates",{"2":{"1458":1,"1554":1}}],["date",{"0":{"920":1,"1459":1,"1460":1,"1461":1,"1462":1,"1563":1},"1":{"1460":1,"1461":1,"1462":1},"2":{"528":2,"533":1,"919":2,"920":2,"1459":1,"1460":1,"1461":1,"1463":1,"1473":1,"1556":1,"1563":1,"1571":1}}],["datagram>",{"2":{"468":1}}],["datagrams",{"2":{"463":1}}],["datagram",{"0":{"467":1},"2":{"463":1,"467":1,"470":1,"471":2,"477":1,"478":4}}],["data",{"0":{"138":1,"188":1,"1314":1},"2":{"86":2,"122":1,"138":1,"148":2,"168":1,"235":3,"237":1,"310":4,"318":1,"424":2,"425":2,"476":2,"477":2,"569":1,"676":1,"681":1,"912":1,"918":1,"919":1,"929":1,"949":1,"950":1,"952":1,"1095":1,"1124":4,"1133":1,"1143":1,"1153":3,"1154":1,"1156":1,"1160":1,"1180":1,"1187":1,"1266":1,"1268":1,"1307":1,"1314":1,"1327":1,"1339":1,"1392":1,"1516":1,"1549":2,"1586":1,"1587":2,"1595":1}}],["database",{"0":{"560":1,"1096":1,"1104":1,"1564":1,"1670":1},"1":{"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1,"1114":1,"1115":1,"1116":1,"1117":1},"2":{"10":3,"153":1,"553":1,"596":1,"602":1,"604":1,"610":3,"612":1,"825":1,"826":1,"830":3,"832":1,"873":1,"951":1,"1096":1,"1099":1,"1104":2,"1106":2,"1107":2,"1108":2,"1112":2,"1117":1,"1316":1,"1322":1,"1328":2,"1340":1,"1347":3,"1577":1,"1637":1,"1650":1,"1652":1,"1656":1}}],["dangling",{"2":{"264":1}}],["dns",{"0":{"286":1,"289":1},"1":{"287":1,"288":1,"289":1,"290":2,"291":2,"292":1,"293":1,"294":1,"295":1},"2":{"250":1,"251":1,"265":1,"272":1,"286":1,"287":3,"289":1,"292":2,"293":2,"294":1,"415":1}}],["dupenv",{"2":{"1482":1}}],["duplicate",{"2":{"218":1,"370":1,"965":1,"1393":1,"1423":1}}],["dump",{"0":{"1198":1},"2":{"1142":1,"1145":1,"1182":1,"1198":1,"1200":1,"1201":2,"1202":2,"1204":1,"1207":1,"1208":1,"1216":1,"1218":1,"1230":1,"1238":1}}],["dumps",{"0":{"49":1,"1188":1,"1192":1,"1195":1,"1196":1},"1":{"1189":1,"1190":1,"1193":1,"1194":1},"2":{"49":1,"1144":1,"1188":1,"1189":1,"1192":1,"1193":1,"1194":1,"1195":2,"1196":1,"1205":1,"1206":1,"1207":2,"1208":4,"1216":1,"1217":1,"1218":1,"1219":1}}],["due",{"2":{"390":1,"502":1,"855":1,"1569":1}}],["durability",{"0":{"1455":1},"2":{"1420":1,"1421":1,"1442":1,"1446":1,"1454":1,"1455":1,"1457":1}}],["durably",{"2":{"1384":1,"1409":1}}],["durable",{"2":{"511":1,"1361":1,"1382":1,"1386":1,"1398":1,"1406":1,"1407":1,"1408":1,"1409":1,"1416":1,"1419":1,"1423":1,"1424":2,"1425":1,"1441":2,"1444":1,"1447":1,"1456":1}}],["durations",{"0":{"1470":1,"1557":1,"1569":1},"2":{"1458":1,"1569":1}}],["duration",{"0":{"1469":1,"1471":1},"1":{"1470":1,"1471":1},"2":{"223":1,"237":1,"448":2,"451":1,"455":1,"851":1,"1363":2,"1377":1,"1378":1,"1379":1,"1468":2,"1470":3,"1472":1,"1473":1,"1554":1}}],["during",{"0":{"1453":1},"2":{"213":1,"264":1,"502":1,"550":1,"723":1,"795":1,"835":1,"844":1,"965":1,"983":1,"1050":1,"1439":1,"1450":1}}],["d",{"2":{"197":1,"451":1,"452":1,"455":1,"528":1,"582":1,"592":1,"598":1,"625":1,"669":1,"1128":1,"1285":1,"1461":2,"1462":1,"1614":2,"1615":2,"1622":2}}],["dive",{"2":{"1669":1}}],["divide",{"2":{"1529":2}}],["division",{"2":{"655":2,"1529":1}}],["digits",{"2":{"1483":1}}],["digital",{"0":{"1090":1},"1":{"1091":1,"1092":1,"1093":1,"1094":1},"2":{"1079":1}}],["digit",{"2":{"783":1,"787":2}}],["digest",{"2":{"567":1,"699":1,"1083":1}}],["diffs",{"2":{"1144":1}}],["diffing",{"2":{"1116":1}}],["diff",{"2":{"609":1,"1346":1}}],["differ",{"2":{"235":1}}],["difference",{"2":{"226":1}}],["differently",{"2":{"853":1,"883":1,"1361":1}}],["different",{"2":{"40":1,"140":1,"287":1,"422":1,"492":1,"793":1,"982":1,"1097":1,"1129":1,"1354":1,"1358":1}}],["dialect",{"2":{"609":2,"612":1,"1116":1,"1346":2,"1349":1}}],["dialects",{"2":{"604":1}}],["diagnostics",{"2":{"188":1,"703":1,"710":1,"787":1,"898":1,"1369":1,"1399":1,"1448":1}}],["dir=",{"2":{"1348":1}}],["dir>",{"2":{"568":1,"592":1,"659":1}}],["direct",{"2":{"1065":1}}],["directories",{"2":{"584":1,"1199":1,"1378":1,"1379":1}}],["directory",{"2":{"528":1,"531":1,"535":1,"541":1,"592":2,"598":1,"601":1,"610":1,"625":3,"659":2,"669":1,"670":1,"688":1,"693":1,"697":3,"819":1,"924":1,"1199":1,"1347":1}}],["directly",{"2":{"165":1,"251":1,"269":1,"334":1,"410":1,"442":1,"463":1,"655":1,"690":1,"827":1,"871":1,"913":1,"1126":1,"1434":1,"1634":1}}],["dir",{"2":{"528":1,"539":1,"582":1,"592":1,"610":2,"611":1,"612":4,"625":1,"666":1,"669":1,"819":2,"1347":2,"1348":1,"1349":3,"1353":1,"1357":1,"1378":8,"1379":8}}],["did",{"2":{"222":1,"706":1}}],["disabling",{"2":{"871":1}}],["disables",{"2":{"571":1,"845":1,"1500":1,"1503":1}}],["disable",{"0":{"940":1,"970":1},"2":{"503":1,"528":3,"593":2,"616":1,"620":1,"626":1,"627":1,"676":1,"845":1,"871":1,"940":1,"970":1,"1488":3,"1500":1,"1502":1,"1503":1,"1514":1,"1515":1,"1524":1}}],["disabled",{"2":{"142":1,"601":1,"661":1,"845":1,"847":1,"848":1,"1058":1,"1097":1,"1500":1,"1522":1,"1523":2}}],["discards",{"2":{"1423":1}}],["discarded",{"2":{"1173":1}}],["disc",{"2":{"617":3}}],["discipline",{"2":{"579":1}}],["discord",{"2":{"1662":1}}],["discover",{"2":{"617":1,"618":1,"948":1}}],["discovery",{"0":{"477":1,"617":1},"2":{"477":1,"557":1,"613":1,"615":1,"617":1,"620":2,"685":1,"1671":1}}],["disconnect",{"2":{"219":1}}],["disconnected",{"2":{"86":1}}],["disconnects",{"2":{"73":1,"213":1,"219":3,"237":1}}],["display",{"2":{"968":1,"1473":1}}],["displays",{"2":{"575":1}}],["dispatcher",{"0":{"1614":1,"1616":1,"1622":1},"2":{"972":1,"1031":1,"1611":1,"1614":4,"1615":3,"1616":2,"1618":1,"1622":1,"1624":1,"1625":1}}],["dispatches",{"2":{"937":1,"1613":1}}],["dispatching",{"2":{"931":1,"1053":1}}],["dispatch",{"0":{"1613":1},"2":{"359":1,"1001":1,"1065":2,"1613":2,"1621":2}}],["distribution",{"2":{"629":1,"702":1}}],["distributions",{"2":{"559":1}}],["distributable",{"2":{"622":1}}],["distributed",{"2":{"615":1,"621":1,"1439":1,"1577":1}}],["dist",{"2":{"570":3,"572":1,"624":2,"625":1,"628":2,"629":1,"697":3,"701":2}}],["disk",{"0":{"1197":1},"1":{"1198":1,"1199":1,"1200":1,"1201":1},"2":{"511":1,"1188":1,"1208":1,"1421":1}}],["dynamically",{"2":{"1156":1}}],["dynamic",{"0":{"1147":1},"2":{"43":1,"145":1,"306":1,"872":1,"976":1,"1221":1,"1243":1,"1534":1,"1578":1}}],["dom",{"2":{"1268":1}}],["domain",{"2":{"712":1,"1127":1,"1128":1,"1610":1}}],["doubt",{"2":{"1102":1,"1322":1}}],["double>",{"2":{"730":1,"733":1,"748":1,"758":1,"760":1,"1298":1}}],["double",{"0":{"9":1,"1480":1},"2":{"9":1,"42":1,"721":1,"730":2,"747":1,"763":1,"764":2,"953":1,"1062":1,"1102":2,"1181":1,"1211":1,"1268":1,"1270":1,"1285":1,"1299":1,"1339":2,"1428":2,"1474":1,"1480":2,"1483":1,"1490":1}}],["doc",{"2":{"964":1,"965":1}}],["docker",{"2":{"853":1}}],["documentation",{"0":{"673":1},"2":{"964":1,"973":1,"974":1,"981":1,"985":1}}],["document",{"2":{"383":1,"949":1,"961":1,"962":1,"966":1,"1323":1}}],["documents",{"2":{"0":1,"3":1,"14":1,"37":1,"40":1,"54":1,"67":1,"395":1,"412":1,"480":1,"1359":1,"1382":1,"1409":1,"1425":1,"1442":1}}],["docsui",{"2":{"968":1}}],["docs=0|1|true|false",{"2":{"673":1}}],["docs",{"0":{"272":1,"939":1,"940":1,"961":1,"967":1,"970":1},"1":{"940":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1},"2":{"673":3,"676":2,"677":1,"871":3,"873":1,"938":1,"939":7,"940":2,"948":1,"962":7,"965":2,"967":5,"968":4,"970":4,"971":3}}],["downtime",{"2":{"1129":1}}],["downgrades",{"2":{"651":1}}],["down",{"2":{"257":1,"877":1,"918":1,"1111":1,"1112":2,"1199":1}}],["downloads",{"2":{"537":1}}],["download",{"0":{"250":1}}],["do",{"0":{"483":1},"2":{"118":1,"140":1,"142":1,"159":1,"211":1,"219":1,"226":1,"268":1,"281":2,"283":1,"350":1,"368":1,"369":1,"370":1,"378":1,"383":1,"385":1,"392":1,"403":2,"406":1,"428":1,"431":1,"443":1,"449":1,"453":1,"582":2,"587":1,"625":2,"812":1,"871":1,"913":1,"942":1,"948":1,"1139":1,"1220":1,"1243":1,"1304":1,"1318":1,"1327":1,"1335":1,"1472":1,"1483":1,"1525":2,"1561":3,"1569":1,"1577":1,"1605":1,"1615":1}}],["done",{"0":{"1377":1,"1401":1,"1405":1},"2":{"84":2,"235":1,"378":1,"424":1,"492":1,"498":1,"1199":1,"1242":1,"1377":2,"1379":2,"1382":1,"1385":1,"1386":1,"1401":2,"1405":2,"1406":1,"1418":2,"1422":1,"1504":1}}],["does",{"0":{"353":1,"365":1,"537":1,"783":1,"1027":1,"1223":1,"1495":1},"2":{"84":1,"118":1,"135":1,"151":1,"155":1,"162":1,"199":1,"206":1,"218":1,"271":1,"318":1,"319":1,"324":1,"344":1,"374":1,"399":1,"409":1,"410":1,"427":1,"499":2,"513":1,"575":1,"651":1,"742":1,"787":1,"837":1,"838":1,"867":1,"900":1,"1006":1,"1007":1,"1013":1,"1026":1,"1027":1,"1041":1,"1044":1,"1046":1,"1073":1,"1109":1,"1164":1,"1167":1,"1199":1,"1266":1,"1315":1,"1337":1,"1393":1,"1427":1,"1434":1,"1444":1,"1495":1,"1504":1,"1524":1,"1617":1,"1621":1}}],["dots",{"2":{"1227":1}}],["dottedkey",{"2":{"829":4}}],["dot",{"0":{"10":1,"830":1,"1225":1,"1237":1},"2":{"3":1,"5":1,"10":1,"825":1,"826":1,"830":1,"831":1,"1227":1,"1244":1}}],["denied",{"2":{"1533":1}}],["deny",{"2":{"160":1}}],["dead",{"2":{"1369":1}}],["deadline",{"2":{"448":1,"449":2,"452":3,"458":1,"460":2,"882":1,"883":1}}],["deadlines",{"2":{"253":1,"447":1}}],["deduplicate",{"2":{"1393":1}}],["deduces",{"2":{"777":1}}],["dedicated",{"0":{"255":1,"1031":1},"2":{"91":1,"149":1,"251":1,"252":1,"266":1,"366":1,"369":1,"390":1,"447":1,"831":1,"848":1,"933":1,"977":1,"1068":1,"1628":1,"1662":1}}],["declarative",{"2":{"1581":1,"1599":1}}],["declare",{"2":{"585":1}}],["decoded",{"2":{"1550":1,"1551":1}}],["decode",{"0":{"1550":1},"2":{"1490":1,"1536":1,"1550":3}}],["decrypt",{"0":{"1089":1},"2":{"1089":1}}],["decrements",{"2":{"1037":1}}],["decimal",{"2":{"758":1,"1480":1}}],["decisions",{"2":{"499":2,"501":1,"977":1,"1365":1,"1427":1}}],["decision",{"2":{"163":1}}],["decides",{"2":{"491":1,"499":1}}],["decide",{"2":{"111":1,"118":1,"123":1,"135":1,"329":1,"424":1,"458":1,"505":1,"1031":1,"1365":1}}],["derived",{"2":{"693":1,"966":1}}],["derive",{"2":{"502":1,"513":1}}],["deep",{"2":{"1181":1,"1223":1,"1243":1,"1669":1}}],["deeper",{"2":{"443":1}}],["deeply",{"2":{"150":1}}],["deque",{"2":{"359":1}}],["def",{"0":{"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"2":{"1380":3,"1476":1,"1477":1,"1483":3}}],["defense",{"2":{"1063":1}}],["definitions",{"2":{"779":1}}],["define",{"2":{"717":2,"770":1,"1305":1,"1320":1,"1380":1,"1525":1,"1618":1}}],["defines",{"2":{"273":1,"286":1,"297":1,"303":1,"463":1,"503":1,"1036":1,"1266":1,"1328":1,"1350":1,"1416":1,"1425":1}}],["defined",{"2":{"225":1,"292":1,"535":1,"716":1,"878":1,"883":3,"979":1,"980":1,"1418":1}}],["defaultpriority",{"2":{"892":1,"893":1,"899":1}}],["defaultvalue",{"2":{"829":3}}],["default",{"0":{"868":1,"869":1,"923":1,"1175":1,"1176":1,"1177":1,"1285":1,"1510":1,"1521":1},"2":{"36":1,"137":1,"160":1,"225":1,"277":1,"289":1,"292":1,"395":1,"416":1,"419":1,"468":1,"475":1,"511":1,"527":1,"528":2,"546":1,"567":1,"569":1,"571":1,"582":3,"601":1,"609":3,"616":2,"617":4,"618":4,"624":1,"625":5,"669":1,"688":1,"691":1,"696":1,"699":2,"707":1,"731":1,"750":1,"778":1,"821":1,"825":1,"826":1,"829":2,"830":3,"833":2,"836":3,"837":1,"839":1,"842":1,"844":1,"845":1,"847":1,"853":1,"854":1,"865":1,"868":1,"871":1,"876":1,"893":1,"899":1,"913":1,"923":1,"937":1,"966":1,"980":1,"1006":1,"1030":1,"1039":1,"1040":1,"1056":1,"1163":1,"1192":1,"1208":1,"1270":1,"1285":1,"1327":1,"1346":3,"1370":1,"1431":1,"1432":1,"1433":1,"1474":1,"1483":3,"1500":1,"1510":2,"1534":1,"1593":1,"1628":1}}],["defaults",{"0":{"611":1,"829":1,"833":1,"1299":1,"1348":1},"2":{"3":1,"35":1,"133":1,"825":1,"827":1,"833":1,"834":1,"836":1,"870":1,"919":1,"923":1,"1039":1,"1101":1,"1124":1,"1163":1,"1187":1,"1262":1,"1474":1,"1493":1}}],["deploy",{"0":{"1118":1,"1129":1},"1":{"1119":1,"1120":1,"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1},"2":{"873":1}}],["deployment",{"2":{"161":1,"209":1,"961":1,"1118":1,"1661":1}}],["deprecated",{"2":{"839":2,"861":1}}],["deps",{"2":{"522":1,"535":1,"536":1,"537":2,"538":1,"539":1,"542":3,"558":1,"649":1,"652":1}}],["depending",{"2":{"417":1,"420":1,"478":1,"491":1,"744":1,"859":1,"1369":1,"1663":1}}],["dependent",{"2":{"383":1,"474":1,"853":1,"854":1,"1099":1}}],["dependency",{"0":{"585":1},"2":{"294":1,"516":1,"518":2,"521":1,"523":1,"539":1,"540":1,"542":1,"553":1,"564":1,"577":1,"578":1,"585":1,"588":1,"643":1,"645":2,"647":1,"649":1,"652":1,"685":1,"951":1,"960":1,"1209":1,"1221":1,"1266":1,"1306":1,"1307":1,"1489":1,"1580":1}}],["dependencies",{"0":{"535":1,"1002":1},"1":{"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"542":1,"1003":1,"1004":1},"2":{"247":1,"522":1,"535":1,"538":1,"558":1,"573":1,"575":1,"579":1,"621":1,"836":1,"1419":1}}],["depend",{"0":{"272":1},"2":{"383":1,"461":1,"1099":1,"1266":1,"1354":1,"1358":1}}],["depends",{"2":{"4":1,"133":1,"216":1,"339":1,"340":1,"341":1,"368":1,"426":1,"514":1,"585":1,"764":1,"867":1,"1137":1,"1199":1,"1392":1,"1446":1,"1455":1,"1638":1}}],["depth",{"0":{"150":1}}],["dev|watch|reload",{"2":{"1501":1}}],["development",{"0":{"136":1},"1":{"137":1},"2":{"534":1,"543":1,"549":2,"550":2,"564":1,"693":1,"723":1,"835":1,"1656":1,"1664":1}}],["developers",{"0":{"872":1,"944":1},"2":{"143":1,"847":1,"857":1,"871":1}}],["developer",{"2":{"135":1,"137":1,"543":1,"553":1,"564":1,"688":1,"710":1,"817":1,"835":1,"868":1,"913":1,"914":1,"921":1,"1238":1}}],["dev",{"0":{"139":1,"191":1,"194":1,"543":1,"549":1,"820":1,"856":1},"1":{"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"857":1,"858":1},"2":{"89":1,"90":1,"135":1,"184":2,"185":3,"186":2,"187":1,"190":1,"191":1,"192":1,"193":3,"194":2,"245":3,"527":5,"528":2,"531":2,"533":1,"544":1,"545":1,"546":1,"547":6,"550":1,"555":1,"563":1,"599":1,"669":1,"676":2,"688":1,"691":1,"750":4,"820":2,"836":1,"861":1,"870":1,"889":1,"1123":2,"1311":4,"1488":2,"1495":1,"1497":1,"1498":1,"1501":2,"1503":1}}],["demonstrate",{"2":{"662":1,"1376":1}}],["demonstrates",{"2":{"87":1,"92":1,"106":1}}],["demonstrations",{"2":{"105":1}}],["demonstrating",{"2":{"104":1}}],["demo",{"2":{"89":2,"91":1,"182":1,"195":3,"208":1,"308":1,"310":1,"319":1,"337":2,"339":1,"340":1,"341":1,"342":1,"402":1,"403":1,"404":1,"494":1,"495":1,"496":1,"871":1,"1310":3,"1312":2,"1313":4,"1550":1}}],["determinism",{"2":{"515":1}}],["deterministic",{"0":{"1439":1},"2":{"2":1,"13":1,"36":1,"39":1,"53":1,"273":1,"306":1,"307":1,"329":1,"331":1,"347":1,"363":1,"386":1,"445":1,"447":1,"491":1,"498":1,"499":1,"507":1,"512":1,"521":1,"523":1,"534":1,"535":1,"542":1,"567":1,"578":1,"632":1,"641":1,"646":1,"651":1,"685":1,"755":1,"779":1,"780":1,"834":1,"879":1,"897":1,"948":1,"958":1,"973":1,"983":1,"984":1,"1035":1,"1083":1,"1095":1,"1140":3,"1375":1,"1407":1,"1408":1,"1423":1,"1424":1,"1425":2,"1434":1,"1439":1,"1441":1,"1442":1,"1446":1,"1454":1,"1456":1,"1457":1,"1528":1}}],["detects",{"2":{"548":1,"696":1,"708":1,"755":1}}],["detected",{"2":{"528":1,"666":1,"701":1,"759":1,"783":1,"839":2,"1031":1}}],["detection",{"0":{"697":1,"792":1},"2":{"526":2,"610":1,"766":1,"1085":1,"1347":1,"1500":1,"1502":1,"1523":1}}],["detect",{"2":{"219":1,"513":1,"1077":1,"1612":1,"1620":1}}],["detaches",{"2":{"406":1}}],["detached",{"0":{"390":1,"391":1},"2":{"86":1,"310":1,"317":2,"322":1,"327":1,"330":1,"386":4,"387":1,"388":1,"390":1,"391":3,"392":2,"393":2,"400":1,"406":2,"409":1,"424":2,"425":3,"457":2,"459":1,"476":1,"477":1,"492":1,"497":1}}],["detaching",{"0":{"405":1},"1":{"406":1}}],["detachable",{"2":{"397":1}}],["detailed",{"2":{"568":1,"698":1}}],["detail",{"0":{"390":1,"391":1},"2":{"251":1,"336":2,"386":1,"1035":1}}],["details",{"0":{"159":1,"1483":1,"1594":1},"1":{"1595":1,"1596":1,"1597":1},"2":{"116":1,"336":1,"412":1,"872":1,"927":1,"935":1,"955":1,"956":1,"968":1,"1044":1,"1659":1}}],["delta",{"2":{"1468":2}}],["delay",{"0":{"1431":1,"1432":1,"1437":1},"2":{"447":2,"448":1,"456":1,"616":2,"1427":1,"1428":3,"1431":1,"1433":4,"1437":5,"1438":3,"1440":1}}],["delays",{"2":{"153":1,"324":1,"461":1,"462":1}}],["delegates",{"2":{"1001":1,"1362":1,"1411":1}}],["delegate",{"2":{"376":1,"1412":1}}],["deleted",{"2":{"409":1,"1320":1}}],["delete",{"0":{"22":1,"1334":1},"2":{"936":1,"1100":1}}],["delivered",{"2":{"1406":1}}],["deliver",{"2":{"366":1,"1359":1}}],["delivery",{"2":{"365":1,"378":1,"383":1,"463":1,"1361":1,"1393":1,"1396":1,"1407":1}}],["del",{"2":{"22":1,"814":1}}],["descent",{"2":{"1243":1}}],["description=vix",{"2":{"1124":1}}],["description",{"0":{"518":1,"526":1,"545":1,"567":1,"575":1,"604":1,"615":1,"624":1,"632":1,"641":1,"649":1,"681":1,"688":1,"696":1},"2":{"415":1,"742":1,"964":1,"974":1,"981":1}}],["describes",{"2":{"1":1,"38":1,"1116":1,"1447":1}}],["destination",{"2":{"418":1,"1391":1}}],["destroying",{"2":{"391":1,"409":1}}],["destroys",{"2":{"386":1,"388":1,"390":1,"400":1,"406":1,"409":1,"723":1}}],["destroy",{"2":{"270":1,"409":1,"857":1}}],["destroyed",{"2":{"257":1,"270":1,"343":1,"1071":1}}],["destructor",{"2":{"264":1,"271":1,"409":1,"723":1,"1046":1,"1071":1,"1075":1,"1109":2,"1114":1}}],["destruction",{"0":{"436":1},"2":{"257":1,"266":1,"270":1,"344":1,"390":1,"449":1,"943":1,"1037":1,"1077":1,"1103":1,"1335":1}}],["designed",{"2":{"137":1,"144":1,"214":1,"331":1,"347":1,"364":1,"428":1,"447":1,"499":1,"526":1,"551":1,"615":1,"632":1,"661":1,"693":1,"703":1,"734":1,"755":1,"822":1,"825":1,"835":1,"848":1,"870":1,"871":1,"918":1,"951":1,"960":1,"961":1,"972":1,"986":1,"1109":1,"1221":1,"1266":1,"1384":1,"1419":1,"1489":1,"1516":1,"1528":1,"1554":1,"1580":1,"1599":1}}],["design",{"0":{"13":1,"36":1,"53":1,"125":1,"254":1,"294":1,"306":1,"358":1,"361":1,"366":1,"427":1,"478":1,"498":1,"515":1,"534":1,"541":1,"550":1,"564":1,"588":1,"645":1,"678":1,"685":1,"712":1,"724":1,"745":1,"751":1,"767":1,"780":1,"799":1,"838":1,"901":1,"958":1,"973":1,"1264":1,"1375":1,"1408":1,"1424":1,"1441":1,"1457":1,"1493":1,"1534":1,"1649":1},"1":{"255":1,"256":1,"257":1,"359":1},"2":{"66":1,"81":1,"105":1,"140":1,"273":1,"297":1,"363":1,"386":1,"412":1,"457":1,"491":1,"504":1,"579":1,"646":1,"770":1,"819":1,"1068":1,"1265":1,"1272":1,"1439":1,"1552":1,"1649":1,"1655":1,"1656":2,"1658":1,"1668":1,"1670":1}}],["debugging",{"2":{"136":1,"710":1,"835":1,"838":1,"1194":1,"1527":1,"1556":1,"1661":1}}],["debug",{"0":{"868":1},"2":{"8":2,"137":1,"138":2,"139":1,"142":1,"195":2,"224":1,"511":1,"527":2,"546":2,"562":1,"596":1,"619":1,"662":1,"723":1,"820":1,"836":3,"839":2,"841":1,"842":2,"844":1,"847":2,"848":1,"927":1,"928":1,"1032":1,"1146":1,"1175":3,"1192":1,"1196":1,"1198":1,"1215":2,"1511":5,"1525":1}}],["e29b",{"2":{"1573":1}}],["edge",{"2":{"1361":1,"1370":1,"1567":1,"1649":1,"1657":1}}],["ed25519",{"2":{"1079":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1}}],["editor",{"2":{"1230":2,"1235":1}}],["edit",{"2":{"540":1}}],["escalation",{"2":{"1662":1}}],["escaping",{"2":{"1200":1}}],["escapes",{"2":{"1227":1}}],["escape",{"0":{"1194":1},"2":{"1062":1,"1200":1,"1593":3}}],["essential",{"2":{"126":1,"245":1,"1123":1,"1439":1}}],["e>",{"2":{"716":4}}],["etag",{"2":{"515":1}}],["etc",{"2":{"161":1,"251":1,"260":1,"287":1,"339":1,"340":1,"420":1,"424":1,"428":1,"499":1,"721":1,"747":2,"793":1,"825":1,"837":1,"877":1,"949":1,"956":1,"1058":1,"1075":1,"1124":1,"1127":3,"1271":1,"1361":1,"1596":1,"1614":1}}],["equal",{"2":{"443":1,"1036":1}}],["equivalent",{"2":{"366":1,"507":1,"543":1,"688":1}}],["eof",{"2":{"417":1}}],["epoch",{"0":{"1558":1,"1570":1},"2":{"1309":1,"1377":1,"1378":1,"1379":1,"1458":1,"1462":1,"1466":1,"1467":1,"1490":1,"1554":1}}],["ephemeral",{"2":{"477":1,"823":1,"935":1,"1015":1}}],["ep",{"0":{"469":1},"2":{"416":1,"419":1,"420":2,"424":4,"468":1}}],["either",{"2":{"375":1,"496":1,"723":1,"725":1,"816":1,"871":1,"955":1,"1270":1,"1528":1,"1589":1,"1613":1}}],["evaluation",{"2":{"662":1,"744":1}}],["evaluate",{"2":{"653":1,"655":1}}],["eval",{"2":{"653":1}}],["evolution",{"2":{"604":1,"612":1,"1323":1,"1340":1,"1350":1}}],["evolves",{"2":{"1382":1,"1408":1,"1433":1}}],["evolve",{"2":{"308":1,"320":1,"412":1,"491":1,"901":1}}],["eviction",{"2":{"509":1}}],["even",{"2":{"211":1,"256":1,"391":1,"460":1,"492":1,"531":1,"871":1,"939":1,"1037":1,"1142":1,"1149":1,"1500":1,"1557":1,"1598":1}}],["eventually",{"2":{"395":1}}],["events",{"2":{"219":1,"366":1,"1627":1}}],["event",{"0":{"71":1,"323":1,"335":1,"354":1,"1564":1},"1":{"72":1,"73":1,"74":1,"355":1,"356":1},"2":{"67":1,"75":1,"84":2,"140":1,"141":1,"219":1,"225":1,"235":4,"236":2,"238":1,"239":1,"252":1,"253":1,"308":1,"310":1,"316":1,"322":2,"325":2,"329":1,"347":1,"394":1,"933":2,"1003":1,"1571":1,"1668":1}}],["everywhere",{"2":{"1158":1,"1638":1}}],["every",{"2":{"120":1,"127":1,"135":1,"224":1,"274":1,"323":1,"483":1,"616":1,"854":1,"943":1,"1011":1,"1071":1,"1321":1,"1353":1,"1357":1,"1456":1,"1609":1,"1624":1}}],["everyone",{"2":{"106":1}}],["everything",{"2":{"2":1,"39":1,"87":1,"89":1,"92":1,"98":1,"106":1,"119":1,"131":1,"145":1,"163":1,"363":1,"553":1,"588":1,"675":1,"808":1,"855":1,"871":1,"872":1,"911":1,"986":1,"1046":1,"1256":1,"1311":1,"1317":1,"1477":1,"1501":1,"1626":1,"1632":2}}],["ecfg",{"2":{"1379":7}}],["ecosystem",{"2":{"637":1}}],["ec",{"2":{"265":2,"273":1,"279":3,"283":1,"304":4,"305":1,"307":4,"417":1,"432":2,"443":2,"459":1,"475":1,"1378":3,"1379":3}}],["echo",{"0":{"86":1,"476":1},"2":{"86":1,"177":2,"186":2,"187":1,"193":3,"197":1,"425":2,"476":3,"807":1,"871":1,"910":1,"996":1,"997":1,"1615":4}}],["effort",{"0":{"853":1},"2":{"385":1,"392":1,"393":1,"734":1,"833":1,"853":1,"1033":1,"1199":1,"1339":1,"1364":1,"1367":1,"1523":1,"1663":1}}],["effective",{"2":{"1017":1}}],["effects",{"0":{"1452":1},"2":{"370":1,"1393":1,"1423":1,"1440":1,"1452":1}}],["effect",{"2":{"233":1,"955":1,"1384":1,"1425":1,"1441":1}}],["efficiency",{"2":{"154":1}}],["efficient",{"2":{"152":1,"154":2,"204":1}}],["elapsed",{"0":{"1472":1,"1561":1},"2":{"1458":1,"1472":2,"1557":1,"1561":1}}],["eligible",{"2":{"1366":1,"1397":1,"1415":1}}],["elements",{"0":{"1290":1}}],["element",{"0":{"1173":1,"1177":1,"1236":1},"2":{"1036":1,"1161":1,"1291":1}}],["elk",{"2":{"141":1,"837":1}}],["elsewhere",{"2":{"965":1}}],["else",{"2":{"108":1,"363":1,"717":1,"743":1,"1229":1,"1252":1,"1255":1,"1260":1,"1262":1,"1438":1,"1477":1,"1501":1,"1529":1,"1627":1}}],["emergency",{"2":{"1662":1}}],["emission",{"2":{"1116":1}}],["emitting",{"2":{"1524":1}}],["emits",{"2":{"234":1,"836":1,"850":1}}],["emit",{"2":{"215":1,"235":1,"1495":1,"1497":2,"1498":1,"1504":1,"1506":2}}],["embedded",{"2":{"347":1,"362":1,"524":1,"526":1,"962":2,"1372":1,"1653":1,"1664":1}}],["embed",{"2":{"199":1}}],["email=",{"2":{"1319":1}}],["email",{"2":{"114":7,"158":4,"1226":1,"1316":1,"1318":1,"1320":6,"1321":1,"1587":3,"1595":1,"1600":4,"1603":6,"1604":6,"1606":2,"1662":1}}],["emptyinput",{"2":{"705":1,"706":1,"742":1,"760":1,"775":1,"787":1}}],["empty",{"0":{"1595":1},"2":{"89":1,"108":1,"156":1,"227":1,"277":1,"284":1,"355":1,"406":1,"408":1,"706":1,"710":1,"742":1,"787":1,"816":1,"917":1,"926":1,"979":1,"1006":1,"1045":1,"1254":1,"1288":1,"1314":1,"1339":1,"1483":5,"1488":1,"1500":1,"1545":1,"1546":2,"1552":1,"1586":1,"1590":1,"1595":1,"1615":1,"1619":1,"1624":1,"1627":1}}],["emplace",{"2":{"63":1,"181":1,"188":1,"918":2,"952":1,"1314":1}}],["earlier",{"2":{"1035":1}}],["earliest",{"2":{"449":1}}],["early",{"0":{"1313":1},"2":{"168":1,"223":1,"231":1,"270":1,"274":1,"368":2,"432":1,"1308":1,"1313":1}}],["easily",{"2":{"1223":1}}],["easier",{"2":{"141":1,"163":1}}],["easy",{"2":{"105":1,"712":1,"721":1,"1209":1,"1307":1}}],["each",{"2":{"1":1,"36":1,"38":1,"98":1,"327":1,"359":1,"364":1,"376":1,"478":1,"490":1,"531":1,"586":1,"617":1,"725":1,"771":1,"824":1,"836":1,"850":1,"981":1,"1001":1,"1020":2,"1043":1,"1044":1,"1054":1,"1057":1,"1064":1,"1079":1,"1361":2,"1446":1,"1575":1,"1609":1,"1615":1,"1624":1,"1659":1}}],["e",{"0":{"719":1,"720":1},"2":{"86":6,"159":1,"290":1,"366":1,"370":1,"373":1,"410":1,"417":1,"443":2,"512":5,"691":1,"711":4,"713":1,"720":1,"722":1,"723":2,"724":1,"727":4,"865":1,"928":1,"1107":2,"1112":2,"1129":1,"1202":2,"1241":1,"1261":2,"1318":2,"1319":2,"1320":2,"1321":2,"1490":1,"1528":2,"1600":3,"1603":3,"1606":3,"1609":4}}],["ergonomic",{"2":{"456":1}}],["ergonomics",{"2":{"137":1}}],["errs",{"2":{"1587":2,"1593":2}}],["err2",{"2":{"1530":1}}],["err",{"2":{"709":1,"710":1,"721":3,"727":2,"728":1,"729":1,"730":1,"731":1,"732":3,"733":3,"749":1,"1153":1,"1404":1,"1491":2,"1512":1,"1528":1,"1529":2,"1530":2,"1531":1,"1532":1,"1533":1,"1535":1,"1586":1,"1587":1}}],["errc",{"2":{"279":1,"285":1,"297":1,"298":1,"304":2,"307":1,"383":1,"478":1}}],["errors",{"0":{"111":1,"139":1,"299":1,"722":1,"1117":1,"1133":1,"1322":1,"1593":1},"1":{"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1},"2":{"210":1,"214":1,"217":1,"219":1,"222":1,"238":1,"291":1,"417":1,"420":1,"458":1,"546":1,"712":2,"734":1,"741":1,"759":1,"956":2,"1062":1,"1180":1,"1187":1,"1230":1,"1231":1,"1241":1,"1256":1,"1581":1,"1593":2,"1599":1,"1600":1,"1602":1,"1603":1,"1605":2,"1606":1,"1609":2}}],["error",{"0":{"112":1,"114":1,"115":1,"116":1,"222":1,"238":1,"279":1,"283":1,"291":1,"296":1,"298":1,"303":1,"304":1,"404":1,"513":1,"741":1,"742":1,"749":1,"760":1,"775":1,"787":1,"927":1,"955":1,"956":1,"1062":1,"1202":1,"1239":1,"1256":1,"1399":1,"1596":1,"1609":1},"1":{"297":1,"298":1,"299":2,"300":2,"301":2,"302":2,"303":1,"304":1,"305":1,"306":1,"307":1,"742":1,"1240":1,"1241":1},"2":{"86":6,"89":2,"111":2,"112":2,"113":1,"114":1,"115":2,"116":2,"117":1,"118":1,"139":6,"155":1,"156":1,"157":1,"158":1,"159":3,"174":1,"182":1,"214":1,"215":1,"219":1,"221":1,"222":3,"223":1,"224":1,"227":1,"228":1,"229":1,"230":1,"238":1,"265":1,"273":1,"279":5,"283":1,"285":2,"291":2,"296":1,"297":5,"299":1,"303":4,"304":4,"305":2,"307":3,"366":1,"404":2,"413":1,"417":2,"420":3,"432":4,"443":2,"459":1,"469":1,"470":1,"471":1,"475":1,"478":2,"499":1,"502":1,"503":4,"512":1,"513":2,"546":1,"562":1,"619":1,"655":1,"699":1,"703":2,"706":1,"709":1,"711":1,"713":1,"719":1,"720":2,"721":1,"723":3,"724":1,"727":4,"728":1,"729":1,"730":1,"731":1,"732":4,"733":3,"734":2,"742":1,"743":1,"749":1,"755":1,"760":2,"765":2,"766":1,"770":1,"775":1,"779":1,"787":1,"789":2,"790":1,"791":2,"792":1,"801":3,"836":2,"839":2,"841":1,"842":2,"844":1,"854":1,"858":1,"859":1,"861":1,"871":1,"881":1,"904":3,"919":1,"927":3,"928":1,"949":2,"950":1,"954":2,"955":3,"956":2,"957":2,"960":1,"980":1,"991":1,"992":1,"1061":1,"1081":3,"1083":1,"1084":1,"1088":1,"1089":1,"1092":1,"1093":1,"1107":1,"1112":1,"1142":1,"1149":1,"1153":2,"1180":1,"1202":1,"1231":1,"1233":1,"1241":1,"1248":1,"1249":1,"1251":2,"1254":2,"1256":3,"1264":1,"1310":1,"1311":1,"1312":1,"1313":2,"1314":2,"1369":2,"1378":2,"1379":1,"1380":3,"1387":1,"1399":1,"1404":1,"1405":1,"1414":1,"1418":2,"1447":1,"1448":1,"1490":1,"1495":1,"1511":1,"1512":2,"1525":1,"1526":2,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1535":4,"1584":1,"1587":1,"1593":2,"1606":1,"1609":1,"1612":1,"1613":1,"1615":1,"1620":1,"1624":1,"1634":1,"1646":1}}],["error>",{"2":{"86":1}}],["erased",{"2":{"350":1,"359":1,"452":1,"1096":1,"1100":1}}],["erase",{"0":{"1215":1},"2":{"44":1,"504":1,"510":1,"1215":1,"1271":1,"1292":1}}],["engagement",{"0":{"1653":1}}],["engineer",{"2":{"1664":1}}],["engineers",{"2":{"1657":1,"1666":1,"1673":1}}],["engine",{"0":{"1359":1},"1":{"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1},"2":{"206":1,"347":1,"1067":1,"1099":1,"1104":2,"1106":2,"1107":2,"1108":2,"1112":2,"1359":2,"1360":3,"1361":2,"1363":1,"1364":1,"1368":1,"1371":1,"1372":4,"1373":2,"1374":1,"1375":1,"1377":6,"1378":6,"1379":7,"1380":3,"1411":1,"1413":1,"1434":1,"1454":1}}],["encrypts",{"2":{"1088":1}}],["encrypt",{"0":{"1088":1},"2":{"1089":1,"1095":1}}],["encryption",{"0":{"1085":1},"1":{"1086":1,"1087":1,"1088":1,"1089":1},"2":{"1079":1,"1085":1}}],["encapsulate",{"2":{"1066":1}}],["encoded",{"2":{"1580":1}}],["encoding",{"2":{"195":1}}],["encourages",{"2":{"955":1}}],["enforcing",{"2":{"1053":1}}],["enforcement",{"2":{"887":1,"1067":1}}],["enforces",{"2":{"571":1,"936":1,"1412":1,"1424":1,"1456":1}}],["enforced",{"2":{"216":1,"225":1,"579":1}}],["enforce",{"2":{"110":1,"162":1,"237":1,"588":1,"1056":1,"1589":1}}],["enqueues",{"2":{"1044":1}}],["enqueueing",{"0":{"1040":1},"1":{"1041":1,"1042":1,"1043":1}}],["enqueue",{"0":{"1377":1},"2":{"1033":1,"1038":1,"1039":1,"1040":3,"1042":1,"1043":1,"1044":1,"1046":2,"1050":1,"1414":1,"1415":1}}],["enqueued",{"2":{"350":1,"1035":1}}],["enrichment",{"2":{"959":1}}],["enables",{"2":{"529":1,"579":1,"621":1,"724":1,"842":1,"981":1,"1097":2,"1407":1,"1500":1}}],["enable",{"0":{"868":1},"2":{"503":1,"528":1,"546":1,"583":1,"620":1,"672":2,"873":1,"1117":1,"1124":1,"1127":1,"1353":5,"1357":5,"1485":1,"1514":1,"1515":1,"1524":1}}],["enabled",{"2":{"225":3,"567":1,"750":1,"932":1,"936":1,"948":1,"962":1,"1127":1,"1500":1,"1511":3,"1523":1}}],["enterprise",{"2":{"1663":1}}],["entities",{"2":{"1323":1}}],["entity",{"0":{"1327":1},"2":{"1320":3,"1324":1,"1327":2,"1328":2,"1329":1}}],["entire",{"2":{"363":1,"755":1,"759":1,"774":1,"783":1,"1254":1,"1592":1}}],["entirely",{"2":{"14":1}}],["entries",{"2":{"460":2,"499":1,"510":1,"511":1,"512":1,"514":1,"750":2,"772":1,"777":1,"798":2,"965":2,"1444":1,"1615":1}}],["entrypoint",{"2":{"543":1}}],["entry",{"2":{"447":1,"456":1,"458":1,"501":1,"503":2,"504":1,"505":2,"507":1,"513":1,"522":1,"635":1,"649":1,"668":2,"678":1,"733":1,"734":1,"771":1,"774":2,"1303":1,"1615":2,"1622":1,"1624":2}}],["enum>",{"2":{"771":1,"772":2,"773":1,"777":1}}],["enums",{"2":{"747":1,"750":1,"779":1}}],["enumentry",{"0":{"771":1},"2":{"731":2,"750":1,"771":1,"772":1,"776":1,"777":1,"798":1}}],["enumeration",{"0":{"298":1},"1":{"299":1,"300":1,"301":1,"302":1}}],["enum",{"0":{"731":1,"750":1,"768":1,"798":1},"1":{"769":1,"770":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"779":1,"780":1},"2":{"297":1,"304":1,"306":1,"705":1,"706":1,"713":1,"731":2,"732":1,"734":1,"747":1,"750":1,"768":1,"770":3,"771":2,"772":2,"773":1,"775":1,"776":2,"777":3,"778":1,"780":2,"798":1,"799":1,"1104":1,"1525":1}}],["enough",{"2":{"276":1,"281":1,"1633":1,"1638":1}}],["endl",{"2":{"1574":1}}],["endif",{"2":{"717":1,"1380":1}}],["end",{"0":{"497":2,"932":2},"1":{"933":2},"2":{"134":1,"145":1,"219":2,"225":1,"235":3,"236":2,"238":2,"239":1,"251":1,"318":1,"386":1,"703":1,"954":2,"957":1,"1036":1,"1109":1,"1380":2}}],["ends",{"2":{"128":1,"234":1,"1542":2}}],["endpoint",{"0":{"201":1,"415":1,"466":1},"2":{"89":1,"288":1,"310":1,"415":2,"416":1,"419":1,"424":1,"425":1,"466":2,"467":2,"468":2,"469":1,"476":1,"477":3,"478":1,"618":1,"1017":1}}],["endpoints",{"2":{"79":1,"106":1,"108":1,"186":1,"199":1,"226":1,"230":1,"463":1,"948":1,"1354":1,"1358":1,"1370":1,"1627":2}}],["ensured",{"2":{"824":1}}],["ensures",{"2":{"305":1,"521":1,"540":1,"702":1,"881":1,"900":1,"954":1,"1044":1,"1393":1,"1423":1,"1440":1,"1454":1,"1456":1}}],["ensure",{"0":{"1164":1,"1178":1,"1288":1,"1291":1,"1301":1},"1":{"1179":1,"1180":1},"2":{"44":2,"242":1,"249":1,"250":1,"270":1,"368":1,"377":1,"684":1,"956":1,"1032":1,"1061":1,"1132":1,"1134":1,"1160":1,"1179":1,"1180":5,"1186":2,"1187":1,"1192":1,"1214":2,"1243":1,"1271":1,"1273":1,"1288":2,"1291":2,"1301":2,"1507":1}}],["envelopes",{"2":{"1618":1,"1622":1}}],["envelope",{"0":{"1153":1,"1612":1},"2":{"222":2,"236":1,"1614":1,"1616":2,"1618":1}}],["env",{"0":{"1474":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1},"1":{"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1481":1,"1482":1,"1483":1,"1484":1,"1485":1,"1486":1,"1487":1,"1488":1},"2":{"12":2,"670":1,"1124":1,"1215":2,"1348":1,"1474":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1483":5,"1485":1,"1486":1,"1487":1,"1488":1,"1490":1,"1491":2,"1492":2,"1497":1,"1501":1,"1506":1}}],["environmentfile=",{"2":{"1124":1}}],["environment=vix",{"2":{"1124":1}}],["environments",{"2":{"601":1,"837":1,"869":1,"890":1,"961":1,"1419":1,"1626":1}}],["environment",{"0":{"12":1,"529":1,"593":1,"611":1,"677":1,"832":1,"843":1,"1348":1,"1499":1},"1":{"844":1,"845":1,"1500":1,"1501":1,"1502":1,"1503":1},"2":{"13":1,"137":1,"612":1,"627":1,"653":1,"670":1,"674":1,"701":1,"751":1,"825":1,"832":1,"834":1,"836":1,"843":1,"844":2,"853":1,"859":1,"870":1,"1095":1,"1124":1,"1474":1,"1490":1,"1511":1,"1522":1}}],["exotic",{"2":{"1566":1}}],["ex",{"2":{"491":2,"880":1,"886":1,"887":2}}],["exiting",{"2":{"377":1}}],["exits",{"0":{"381":1,"1132":1},"2":{"271":1,"355":1,"533":1,"1073":1}}],["exit",{"0":{"700":1},"2":{"257":1,"264":1,"270":1,"356":1,"439":1,"526":1,"528":1,"654":2,"659":2,"661":1,"879":1,"1027":1,"1046":1,"1515":1}}],["existing",{"0":{"1303":1}}],["existence",{"0":{"806":1,"909":1}}],["exist",{"2":{"180":1,"633":1,"635":1,"644":1,"956":1,"1045":1,"1167":1,"1201":1}}],["exists",{"0":{"274":1,"857":1,"933":1},"2":{"0":1,"37":1,"52":1,"63":1,"272":1,"375":1,"391":1,"592":1,"601":1,"627":1,"636":1,"697":1,"716":1,"978":1,"1026":1,"1066":1,"1077":1,"1103":2,"1107":1,"1112":2,"1167":1,"1195":1,"1316":1,"1327":1,"1595":1,"1625":1}}],["extension",{"2":{"1327":1}}],["extensions",{"2":{"924":1,"964":1,"981":1}}],["extend",{"0":{"1029":1},"1":{"1030":1,"1031":1}}],["external",{"0":{"1185":1},"2":{"153":1,"621":1,"939":1,"951":1,"1160":1,"1163":1,"1209":1,"1252":1,"1306":2,"1374":1,"1419":1,"1452":1}}],["extract",{"0":{"1549":1},"2":{"1549":2,"1612":1}}],["extracts",{"2":{"925":2}}],["extracted",{"2":{"914":1}}],["extraction",{"0":{"1566":1},"2":{"108":1,"1536":1}}],["extra",{"2":{"146":1,"219":1,"706":1,"787":1,"939":1,"965":1}}],["extremely",{"2":{"1567":1}}],["extreme",{"2":{"142":1}}],["excludes",{"2":{"1328":2}}],["excluded",{"2":{"507":1,"795":1}}],["except",{"2":{"1277":1,"1578":1}}],["exceptions",{"2":{"291":1,"306":1,"386":1,"390":1,"393":1,"397":1,"408":1,"431":1,"490":1,"713":1,"725":1,"734":1,"744":1,"745":1,"749":1,"766":1,"799":1,"859":1,"955":1,"1042":1,"1062":1,"1252":1,"1474":1,"1490":1,"1493":1,"1528":2,"1581":1,"1599":1,"1612":1,"1620":1}}],["exception",{"0":{"433":1,"489":1},"1":{"490":1,"491":1},"2":{"111":1,"390":2,"393":1,"397":1,"404":3,"433":2,"459":1,"490":2,"491":2,"492":1,"721":1,"767":1,"881":1,"927":1,"1017":1,"1046":1,"1107":1,"1109":1,"1112":1,"1115":1,"1162":1,"1199":1,"1202":1,"1241":1,"1261":1,"1318":1,"1319":1,"1320":1,"1321":1,"1535":1}}],["exceeded",{"2":{"1406":1}}],["exceed",{"2":{"1052":1}}],["excessive",{"2":{"858":1}}],["exchange",{"2":{"104":1,"1266":1}}],["execstart=",{"2":{"1124":2}}],["exec",{"0":{"1073":1},"2":{"70":2,"821":2,"899":2,"971":2,"1006":1,"1022":2,"1073":2,"1075":5,"1076":1,"1077":2,"1100":1,"1628":2}}],["executable",{"2":{"610":1,"1132":1,"1347":1,"1635":1}}],["executing",{"2":{"432":1,"878":1}}],["execution",{"0":{"121":1,"131":1,"329":1},"2":{"62":1,"66":1,"103":1,"119":1,"154":1,"347":1,"353":1,"363":2,"661":1,"678":1,"836":1,"872":1,"873":1,"875":1,"877":1,"882":1,"890":1,"954":1,"958":1,"983":1,"1054":1,"1064":1,"1067":1,"1068":1}}],["executors",{"0":{"1031":1},"2":{"410":1,"883":1}}],["executor",{"0":{"821":1,"874":1,"941":1},"1":{"875":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1},"2":{"69":3,"70":1,"256":1,"821":3,"874":2,"875":1,"877":1,"878":1,"879":1,"881":1,"885":1,"886":1,"887":3,"888":1,"890":1,"891":3,"893":1,"896":2,"899":3,"900":1,"901":1,"929":1,"931":1,"932":1,"933":2,"935":2,"936":1,"938":1,"943":2,"948":1,"971":1,"977":1,"1000":1,"1001":1,"1004":1,"1006":2,"1011":3,"1013":1,"1019":1,"1022":1,"1027":1,"1031":1,"1032":1,"1051":3,"1059":2,"1064":1,"1065":1,"1068":2,"1075":2,"1078":3,"1628":2}}],["executed",{"2":{"121":1,"131":1,"350":1,"537":1,"821":1,"824":1,"888":1,"936":1,"1035":1,"1051":1,"1059":1,"1614":1,"1615":1}}],["executes",{"2":{"66":1,"127":1,"145":1,"347":1,"366":1,"688":1,"942":1,"957":1,"1332":1,"1334":1,"1361":1,"1618":1}}],["execute",{"2":{"35":1,"215":1,"368":1,"372":1,"874":1,"957":2,"1038":1,"1392":1}}],["expired",{"2":{"514":1,"1057":1}}],["expires",{"2":{"274":1}}],["export",{"2":{"1483":1,"1522":1,"1524":1,"1527":2}}],["exports",{"2":{"1338":1}}],["exponentially",{"2":{"1437":1}}],["exponential",{"2":{"217":1,"1425":1,"1427":1,"1432":1,"1433":1,"1437":1,"1440":1}}],["exposing",{"2":{"874":1,"1001":1}}],["exposes",{"2":{"331":1,"334":1,"362":1,"814":1,"828":1,"831":1,"864":1,"891":1,"914":1,"928":1,"938":1,"1354":1,"1358":1,"1434":1}}],["exposed",{"2":{"294":1}}],["expose",{"2":{"159":1,"889":1,"898":1,"939":1,"1126":2}}],["exposure",{"2":{"155":1}}],["expressed",{"2":{"1363":1,"1366":1,"1434":1}}],["expressions",{"2":{"653":1,"655":1,"662":1}}],["expressive",{"2":{"53":1,"1209":2,"1220":1}}],["express",{"0":{"945":1},"2":{"164":1,"196":1,"871":3,"887":1,"930":1,"945":1}}],["explained",{"0":{"1388":1,"1429":1},"1":{"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1430":1,"1431":1,"1432":1,"1433":1,"1434":1}}],["explains",{"2":{"119":1,"164":1,"213":1,"232":1,"321":1,"930":1,"949":1,"1000":1,"1079":1,"1096":1,"1494":1,"1572":1,"1617":1}}],["explore",{"2":{"653":1,"873":1}}],["explicitness",{"2":{"515":1}}],["explicitly",{"0":{"1076":1},"2":{"95":1,"123":1,"132":1,"133":1,"160":1,"330":1,"344":1,"395":1,"418":1,"424":1,"449":1,"585":1,"587":1,"746":1,"816":1,"998":1,"1032":1,"1109":1}}],["explicit",{"0":{"172":1,"257":1,"585":1,"779":1,"1304":1},"2":{"2":1,"36":1,"39":1,"53":1,"66":1,"105":1,"110":1,"111":1,"119":1,"125":1,"126":1,"132":1,"135":1,"143":1,"144":1,"146":1,"154":1,"155":1,"163":1,"199":1,"219":1,"239":1,"279":1,"307":1,"322":1,"329":1,"330":1,"331":1,"366":1,"384":1,"409":1,"424":1,"427":1,"445":1,"447":1,"499":2,"504":1,"515":1,"534":1,"535":1,"541":1,"551":1,"553":1,"564":1,"579":1,"588":1,"589":1,"612":1,"626":1,"637":1,"652":1,"662":1,"678":1,"721":1,"724":1,"725":1,"734":2,"736":1,"745":1,"746":1,"749":1,"750":1,"752":1,"755":1,"759":1,"766":1,"767":1,"770":2,"779":1,"780":1,"794":1,"799":1,"800":1,"808":1,"848":1,"871":1,"872":1,"881":1,"890":1,"902":1,"903":1,"911":1,"953":1,"955":1,"958":1,"960":1,"979":1,"986":1,"999":1,"1039":1,"1075":1,"1079":1,"1096":1,"1155":1,"1195":1,"1208":1,"1245":1,"1256":1,"1264":1,"1265":1,"1304":1,"1305":1,"1307":1,"1308":1,"1316":1,"1317":1,"1322":1,"1323":1,"1335":1,"1340":1,"1350":1,"1375":1,"1408":1,"1424":1,"1445":1,"1449":1,"1450":1,"1457":1,"1458":1,"1473":1,"1490":1,"1493":1,"1507":1,"1528":1,"1530":1,"1534":1,"1535":1,"1599":1,"1610":1,"1617":1,"1632":1,"1637":1,"1647":1,"1658":1}}],["expert",{"2":{"844":1}}],["experiment",{"2":{"662":1}}],["experimentation",{"2":{"621":1,"661":1}}],["experimental",{"0":{"890":1},"1":{"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"902":1},"2":{"70":2,"890":2,"899":1,"1022":1,"1628":2}}],["experience",{"2":{"564":1}}],["expect",{"2":{"1180":1}}],["expecting",{"0":{"1570":1},"2":{"461":1}}],["expectations",{"2":{"842":1}}],["expectation",{"2":{"383":1}}],["expects",{"2":{"310":1}}],["expected",{"0":{"711":1,"713":1,"715":1,"716":1,"719":1},"1":{"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1},"2":{"75":1,"182":4,"228":1,"229":1,"713":1,"714":1,"715":2,"716":6,"717":7,"722":1,"723":3,"724":1,"725":1,"726":1,"727":1,"732":1,"736":1,"740":2,"745":1,"746":1,"749":1,"755":1,"756":1,"772":1,"777":1,"781":1,"785":1,"786":3,"787":1,"794":1,"839":1,"1164":1,"1641":1}}],["expensive",{"2":{"148":1,"284":1,"848":1,"929":1,"942":1}}],["exact",{"0":{"61":1,"186":1,"1312":1},"2":{"61":2,"89":2,"182":1,"186":2,"187":1,"193":3,"235":1,"426":1,"461":1,"514":1,"518":1,"521":1,"523":1,"540":1,"575":1,"577":1,"635":1,"645":1,"708":1,"774":1,"817":2,"982":1,"1312":2,"1354":1,"1358":1,"1453":1}}],["exactly",{"2":{"0":1,"36":1,"37":1,"476":1,"770":1,"1308":1,"1312":1}}],["example",{"0":{"11":1,"23":1,"57":1,"70":1,"84":1,"85":1,"86":1,"89":1,"97":1,"108":1,"113":1,"124":1,"128":1,"146":1,"235":1,"245":1,"293":1,"337":1,"392":1,"442":1,"443":1,"444":1,"453":1,"457":1,"459":1,"476":1,"477":1,"494":1,"495":1,"496":1,"497":1,"520":1,"552":1,"563":1,"576":1,"589":1,"599":1,"600":1,"626":1,"743":1,"765":1,"776":1,"947":1,"971":1,"1050":1,"1143":1,"1147":1,"1273":1,"1353":1,"1357":1,"1377":1,"1378":1,"1379":1,"1438":1,"1484":1,"1498":1,"1601":1,"1634":1},"1":{"1485":1,"1486":1,"1487":1},"2":{"12":1,"34":1,"42":1,"43":1,"44":1,"64":1,"87":1,"89":1,"91":1,"97":1,"98":1,"101":1,"102":1,"103":1,"104":1,"106":1,"110":1,"116":1,"128":1,"130":1,"132":1,"140":1,"152":1,"165":2,"181":1,"182":1,"187":1,"189":1,"197":1,"207":2,"221":1,"235":1,"236":1,"238":1,"265":1,"288":1,"290":1,"293":2,"308":1,"316":1,"320":1,"339":1,"340":1,"341":1,"353":1,"368":1,"385":1,"404":1,"406":1,"415":1,"453":2,"457":2,"459":2,"475":1,"476":1,"478":1,"486":1,"507":1,"512":1,"539":1,"552":1,"576":1,"583":1,"584":1,"627":1,"635":1,"654":1,"691":1,"710":1,"711":1,"730":1,"743":1,"748":1,"758":1,"760":1,"765":2,"789":1,"790":1,"791":1,"792":1,"816":1,"817":1,"825":1,"826":1,"832":1,"833":1,"834":1,"847":1,"858":1,"871":2,"899":1,"918":1,"919":1,"950":1,"955":1,"964":1,"975":1,"1022":1,"1050":1,"1086":1,"1091":1,"1097":1,"1112":1,"1116":1,"1120":1,"1123":1,"1127":1,"1142":1,"1145":1,"1146":1,"1180":1,"1202":1,"1227":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1315":1,"1316":1,"1318":1,"1319":1,"1320":2,"1321":1,"1328":1,"1337":1,"1348":1,"1351":2,"1354":3,"1355":2,"1358":3,"1433":1,"1523":1,"1573":1,"1574":1,"1587":1,"1593":1,"1600":1,"1606":1,"1609":1,"1619":1,"1620":1,"1628":1}}],["examples",{"0":{"98":1,"99":1,"423":1,"493":1,"530":1,"547":1,"570":1,"598":1,"612":1,"620":1,"634":1,"643":1,"650":1,"676":1,"683":1,"692":1,"701":1,"788":1,"871":1,"1105":1,"1234":1,"1258":1,"1316":1,"1349":1,"1376":1,"1611":1,"1642":1},"1":{"99":1,"100":2,"101":2,"102":2,"103":2,"104":2,"105":1,"424":1,"425":1,"494":1,"495":1,"496":1,"497":1,"789":1,"790":1,"791":1,"792":1,"872":1,"873":1,"1106":1,"1107":1,"1108":1,"1235":1,"1236":1,"1237":1,"1238":1,"1259":1,"1260":1,"1261":1,"1262":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1643":1,"1644":1,"1645":1,"1646":1},"2":{"1":1,"14":1,"38":1,"67":1,"82":1,"83":1,"98":1,"105":1,"109":1,"164":2,"165":2,"179":1,"206":1,"666":1,"692":1,"726":1,"830":1,"844":1,"1096":2,"1316":2,"1352":1,"1356":1,"1376":3,"1380":1,"1381":1,"1390":1,"1391":1,"1500":1,"1501":1,"1620":1,"1626":1}}],["lbl",{"2":{"1585":3}}],["ll",{"2":{"1287":1,"1300":1}}],["lld",{"2":{"526":1,"528":1}}],["ln",{"2":{"1127":1}}],["lf",{"2":{"936":1}}],["lcrypto",{"2":{"675":1}}],["lssl",{"2":{"675":1}}],["lru",{"2":{"510":1}}],["lrumemorystore>",{"2":{"512":1}}],["lrumemorystore",{"0":{"510":1},"2":{"512":3}}],["lvalue",{"2":{"408":1}}],["l",{"2":{"310":4,"425":4,"1514":2}}],["langs",{"2":{"1219":2}}],["languages",{"2":{"871":1,"1635":1}}],["language",{"2":{"715":1,"871":1,"1221":1,"1244":1}}],["launches",{"2":{"935":1}}],["launcher",{"2":{"528":1,"530":2}}],["label",{"2":{"609":1,"1346":2,"1584":1,"1585":1,"1590":1,"1598":1}}],["label>",{"2":{"609":1}}],["lastinsertid",{"2":{"1099":1}}],["last",{"0":{"1399":1},"2":{"502":1,"607":1,"823":1,"1099":1,"1331":1,"1344":1,"1387":1,"1395":1,"1404":1,"1405":1,"1551":1}}],["lazy",{"0":{"263":1,"336":1,"338":1,"399":1},"1":{"339":1,"340":1,"341":1,"342":1},"2":{"271":1,"331":1,"343":1,"344":1,"366":1,"368":1,"394":1,"395":1,"397":1,"828":1,"914":2,"1421":1,"1450":1}}],["lazily",{"2":{"251":1,"253":1,"373":1,"442":1,"511":1,"915":1,"1449":1}}],["latest",{"2":{"697":2}}],["later",{"0":{"1637":1},"2":{"188":1,"282":1,"324":1,"366":1,"391":1,"393":1,"422":1,"426":1,"461":1,"475":1,"498":1,"952":1,"964":1,"1328":1}}],["latency",{"0":{"1561":1},"2":{"153":1,"224":2,"233":1,"872":1,"1050":1,"1059":1,"1473":1,"1521":1,"1557":1,"1569":1,"1571":1,"1624":1,"1650":1}}],["layout",{"0":{"196":1,"1120":1},"2":{"567":1,"569":1,"1120":1,"1272":1,"1632":1}}],["layouts",{"2":{"150":1}}],["layered",{"2":{"135":1,"143":1}}],["layers",{"2":{"2":1,"39":1,"40":1,"144":1,"145":1,"146":1,"155":1,"712":1,"949":1,"954":1,"1209":1,"1220":1,"1434":1,"1618":1,"1637":1,"1649":1}}],["layer",{"2":{"0":1,"29":1,"36":1,"37":1,"111":1,"121":1,"200":2,"204":1,"287":1,"366":1,"413":1,"499":1,"515":2,"596":1,"800":1,"903":1,"912":1,"931":1,"958":1,"1026":1,"1058":1,"1063":1,"1067":1,"1096":1,"1116":1,"1317":1,"1338":1,"1350":1,"1359":2,"1361":1,"1375":1,"1382":1,"1392":1,"1409":1,"1411":2,"1442":1,"1444":1,"1457":1,"1617":2,"1647":1}}],["largest",{"2":{"1036":1}}],["large",{"2":{"148":2,"230":1,"942":1,"958":1,"1268":1}}],["larger",{"2":{"119":1,"478":1,"511":1}}],["lambdas",{"2":{"1637":1}}],["lambda",{"2":{"121":1,"127":1,"128":1,"131":1,"146":1,"325":1,"1381":1}}],["ltrim",{"2":{"1539":1}}],["lt",{"0":{"375":1,"376":1,"391":1,"397":1,"719":1,"720":1,"733":1,"1073":1,"1162":1,"1163":1,"1164":1,"1169":1,"1174":1,"1178":1,"1233":1,"1533":1},"1":{"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1},"2":{"88":1,"290":1,"294":2,"295":1,"322":1,"366":2,"383":1,"385":1,"386":1,"388":1,"393":2,"394":1,"395":1,"397":2,"406":2,"410":4,"417":1,"418":2,"420":1,"424":1,"427":1,"431":2,"446":1,"464":1,"480":1,"486":1,"492":1,"503":1,"505":1,"624":2,"628":2,"633":1,"635":1,"644":1,"713":1,"716":1,"722":1,"723":1,"724":1,"725":1,"727":1,"731":1,"732":1,"733":1,"734":1,"736":1,"746":1,"747":2,"749":1,"755":1,"781":1,"783":1,"785":1,"794":1,"836":1,"914":4,"918":5,"919":1,"921":1,"925":1,"926":2,"955":2,"968":1,"1025":2,"1033":1,"1035":1,"1042":1,"1043":1,"1071":1,"1112":2,"1158":1,"1162":1,"1173":1,"1187":3,"1270":2,"1271":1,"1320":1,"1328":1,"1329":2,"1331":1,"1333":1,"1337":1,"1344":1,"1346":4,"1350":2,"1436":1,"1490":1,"1528":1,"1545":1,"1546":1,"1547":1,"1551":1,"1580":1,"1603":1,"1604":1,"1606":1,"1610":3,"1613":1,"1621":1}}],["left",{"2":{"1550":1}}],["less",{"2":{"1129":1,"1136":1}}],["len",{"2":{"826":1,"1584":2,"1585":1,"1586":2,"1587":1,"1589":3,"1590":1}}],["length",{"0":{"1589":1,"1590":1},"2":{"310":1,"319":1,"320":1,"774":1,"816":1,"936":1,"978":1,"1058":1,"1490":1,"1581":1,"1586":1,"1596":2,"1600":1,"1603":3,"1604":1}}],["letter",{"2":{"1369":1}}],["letting",{"2":{"257":1}}],["let",{"2":{"368":1,"379":1,"480":1,"816":1,"1515":1}}],["lets",{"2":{"274":1,"364":1,"385":1,"431":1,"1314":1}}],["leadership",{"2":{"1653":1}}],["leading",{"2":{"758":1,"783":2,"1474":1,"1591":1}}],["leaving",{"2":{"1519":1}}],["leave",{"2":{"847":1}}],["leaves",{"2":{"634":1}}],["least",{"2":{"783":1,"1039":3,"1103":1}}],["leakage",{"2":{"579":1}}],["leak",{"2":{"390":1}}],["leaking",{"0":{"159":1},"2":{"210":1,"412":1}}],["learn",{"2":{"205":1}}],["learning",{"2":{"199":1}}],["legacy",{"0":{"64":1,"182":1,"1310":1},"2":{"54":1,"55":1,"65":2,"180":1,"1308":1,"1310":1}}],["level=info",{"2":{"1124":1,"1527":1}}],["level=off",{"2":{"844":1}}],["level=warn",{"2":{"844":1}}],["level=debug",{"2":{"844":1,"1511":1,"1527":1}}],["levels",{"0":{"1160":1,"1511":1},"1":{"1161":1,"1162":1,"1163":1,"1164":1},"2":{"562":1,"619":1,"1160":1,"1511":1}}],["level>",{"2":{"546":1,"562":1,"619":1,"674":1}}],["level",{"0":{"45":1,"127":1,"842":1,"844":1,"1216":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"1217":1,"1218":1,"1219":1},"2":{"29":1,"40":1,"53":1,"137":1,"161":1,"216":2,"251":1,"331":1,"343":1,"361":1,"362":1,"363":1,"411":1,"425":1,"427":1,"497":1,"546":1,"562":1,"619":1,"674":2,"677":1,"712":1,"836":2,"844":4,"847":2,"865":1,"912":1,"913":1,"930":1,"1032":1,"1078":1,"1209":2,"1220":1,"1323":1,"1361":1,"1411":1,"1412":1,"1444":1,"1445":1,"1455":1,"1457":1,"1508":2,"1510":3,"1511":3,"1513":1,"1514":2,"1521":1,"1526":1}}],["literals",{"2":{"1151":1,"1257":1}}],["literal",{"2":{"717":1,"1227":2}}],["listoptions",{"0":{"1417":1},"2":{"1417":1,"1418":1}}],["list",{"0":{"573":1},"1":{"574":1,"575":1,"576":1,"577":1,"578":1},"2":{"528":1,"558":1,"573":1,"574":1,"575":1,"576":1,"578":2,"646":1,"689":2,"692":2,"1146":1,"1147":1,"1216":1,"1280":1,"1281":2,"1305":1,"1337":1,"1418":1}}],["listens",{"2":{"309":1}}],["listening",{"2":{"86":1,"317":1,"412":1,"419":1,"420":1,"1353":1,"1357":1,"1495":1,"1498":1}}],["listener>",{"2":{"421":1}}],["listeners",{"2":{"270":1}}],["listener",{"0":{"419":1},"1":{"420":1},"2":{"86":5,"272":1,"308":1,"310":1,"327":5,"412":2,"419":3,"420":1,"421":1,"425":1}}],["listen",{"0":{"425":1,"812":2},"2":{"70":1,"81":1,"86":1,"310":1,"317":1,"327":2,"415":1,"419":1,"420":2,"425":1,"614":1,"616":2,"620":6,"621":2,"812":1,"813":1,"823":1,"1017":1,"1127":1,"1353":2,"1354":2,"1357":2,"1358":2,"1506":1,"1628":1}}],["lifetime",{"0":{"492":1,"1046":1},"2":{"1073":1,"1114":1,"1570":1}}],["lifecycle",{"0":{"126":1,"134":1,"215":1,"262":1,"343":1,"398":1,"449":1,"810":1,"932":1,"1364":1,"1400":1,"1406":1,"1415":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"263":1,"264":1,"399":1,"400":1,"811":1,"812":1,"813":1,"933":1,"1401":1,"1402":1,"1403":1,"1404":1,"1405":1},"2":{"125":1,"126":2,"128":1,"134":1,"329":1,"553":1,"950":1,"954":1,"957":1,"960":1,"1028":1,"1066":1,"1382":1,"1384":1,"1395":1,"1398":1,"1408":1,"1669":1,"1671":1}}],["lightly",{"2":{"853":1}}],["light",{"0":{"1059":1},"2":{"336":1,"984":1,"1053":1,"1065":1,"1473":1,"1489":1}}],["lightweight",{"0":{"885":1},"1":{"886":1,"887":1},"2":{"152":1,"199":1,"297":1,"331":1,"359":1,"369":1,"744":1,"835":1,"874":1,"885":1,"941":1,"951":1,"972":1,"1033":1,"1058":1,"1114":1,"1209":1,"1242":1,"1266":1,"1306":1,"1458":1,"1528":1,"1580":1}}],["lib",{"2":{"592":1,"598":1,"600":2,"716":2}}],["libsqlite3",{"2":{"245":1}}],["libssl",{"2":{"245":1,"1123":1}}],["libboost",{"2":{"245":1,"1123":1}}],["library",{"0":{"600":1},"2":{"204":1,"584":2,"592":1,"595":1,"598":1,"601":1,"632":1,"633":1,"637":1,"644":1,"715":1,"716":1,"1049":1,"1593":1}}],["libraries",{"2":{"199":1,"539":1,"585":1,"1591":1,"1635":1}}],["links",{"2":{"1502":1,"1507":1}}],["linking",{"2":{"541":1}}],["linkage",{"2":{"541":1}}],["linker",{"0":{"675":1},"2":{"528":1,"530":2,"532":1,"664":1,"667":1,"670":1}}],["linked",{"2":{"277":1,"587":1}}],["link",{"2":{"528":1,"539":1,"582":4,"585":1,"597":1,"1635":2}}],["line",{"2":{"320":1,"616":1,"836":1,"850":2,"851":1,"853":1,"854":2,"858":1,"1192":1,"1196":1,"1208":1,"1495":1,"1521":1,"1524":1}}],["lines",{"0":{"849":1},"1":{"850":1,"851":1},"2":{"137":1,"855":4,"858":2,"859":1,"870":1}}],["linux",{"0":{"242":1,"1048":1},"2":{"249":1,"530":1,"1020":1,"1033":1,"1048":2,"1118":1,"1493":1}}],["lived",{"0":{"1075":1},"2":{"509":1,"546":2,"548":1,"671":2}}],["lives",{"2":{"251":1,"1365":1,"1625":1}}],["live",{"2":{"233":1,"549":1,"615":1,"616":1,"952":1,"1078":1,"1099":1,"1353":1,"1357":1,"1672":1}}],["limit=20",{"2":{"507":1,"512":1}}],["limit=5",{"2":{"165":1,"993":2}}],["limitations",{"0":{"319":1,"383":1}}],["limitedexecutor",{"0":{"887":1}}],["limited",{"2":{"217":1,"887":3,"961":1,"1221":1}}],["limit",{"0":{"192":1},"2":{"175":4,"185":1,"192":1,"225":1,"858":2,"887":2,"932":1,"952":1,"993":4,"1038":1,"1065":1,"1154":3,"1332":1,"1363":2,"1366":2,"1367":1,"1377":1,"1378":1,"1379":1,"1414":1,"1417":1}}],["limiting",{"0":{"162":1},"2":{"162":2,"185":1,"949":1,"959":1}}],["limits",{"0":{"223":1,"1486":1},"2":{"9":1,"110":1,"151":1,"213":1,"215":1,"223":1,"425":1,"834":1,"898":1,"902":1,"1053":1,"1056":1}}],["likely",{"2":{"859":1,"1028":1}}],["like",{"0":{"1151":1},"2":{"44":1,"118":1,"252":1,"312":1,"365":1,"461":1,"507":2,"548":2,"589":1,"653":1,"658":1,"713":1,"835":1,"836":2,"868":1,"870":1,"871":1,"914":1,"916":1,"919":1,"936":1,"945":4,"946":1,"968":1,"1130":1,"1158":1,"1223":1,"1244":1,"1266":1,"1268":1,"1271":1,"1272":1,"1305":1,"1307":1,"1483":1,"1488":2,"1513":1,"1521":1,"1525":1,"1549":1,"1580":1,"1595":1,"1611":1,"1618":1,"1619":1,"1621":1,"1623":1}}],["loud",{"2":{"1164":1}}],["lose",{"2":{"1409":1}}],["losers",{"2":{"498":2}}],["lost",{"2":{"859":1,"1454":1}}],["loss",{"2":{"859":1,"1455":1}}],["losing",{"2":{"491":1,"1136":1}}],["locations",{"2":{"699":1,"827":1}}],["location",{"0":{"569":1,"1553":1},"2":{"599":1,"600":1,"1127":1,"1420":1}}],["localized",{"2":{"710":2}}],["locally",{"0":{"1122":1},"2":{"522":1,"615":1,"643":1,"681":1,"931":1,"939":1,"962":2,"1316":1,"1527":1}}],["locale",{"0":{"1541":1},"2":{"507":1,"1242":1,"1552":1}}],["local",{"2":{"136":1,"221":1,"242":1,"249":1,"469":1,"511":1,"518":1,"535":2,"565":1,"567":1,"569":1,"575":1,"632":1,"640":1,"642":1,"643":1,"645":1,"651":1,"679":1,"681":1,"684":1,"685":1,"835":1,"962":1,"967":1,"1017":1,"1199":1,"1361":1,"1381":1,"1409":1,"1419":1,"1423":1,"1456":1,"1482":1,"1490":1,"1495":1,"1516":1,"1575":1}}],["localhost",{"2":{"10":1,"93":1,"826":1,"830":1,"871":2,"1498":2}}],["locks",{"2":{"883":1,"1524":1,"1578":1}}],["lockfiles",{"2":{"637":1,"645":1}}],["lockfile",{"2":{"523":1,"535":1,"647":1,"649":1}}],["lock",{"0":{"540":1},"2":{"518":1,"521":1,"522":1,"535":1,"537":1,"540":1,"542":1,"573":1,"575":1,"577":1,"649":1,"651":1,"836":1,"847":1,"848":1,"851":1}}],["locking",{"2":{"445":1,"1650":1}}],["lowering",{"2":{"1541":1}}],["lowercase",{"0":{"1541":1},"2":{"1083":1,"1573":1}}],["lowercased",{"2":{"507":1}}],["lower",{"2":{"872":1,"1083":2,"1541":2}}],["lowest",{"2":{"363":1,"1457":1}}],["low",{"2":{"233":1,"427":1,"913":1,"1187":1,"1567":1}}],["loki",{"2":{"141":1}}],["logf",{"2":{"1520":1,"1521":1}}],["logmodule",{"2":{"1513":1}}],["login",{"2":{"141":2,"584":2,"1521":1}}],["logical",{"2":{"1390":1,"1391":1,"1413":1}}],["logic",{"2":{"57":2,"149":2,"159":1,"207":1,"323":1,"326":1,"379":1,"462":1,"549":1,"653":1,"662":1,"712":1,"942":1,"953":2,"959":1,"1018":1,"1067":1,"1078":1,"1242":1,"1386":1,"1411":3,"1473":1,"1605":1,"1625":1}}],["logs",{"0":{"531":1,"1125":1,"1494":1,"1562":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"140":2,"141":1,"142":2,"214":1,"221":1,"224":1,"225":1,"531":1,"546":1,"703":1,"710":2,"835":1,"862":1,"927":1,"935":1,"1011":1,"1032":1,"1048":1,"1120":1,"1124":1,"1132":1,"1140":1,"1194":1,"1196":1,"1207":1,"1353":2,"1357":2,"1504":1,"1526":1,"1556":1,"1623":1}}],["logged",{"2":{"143":1,"1041":1,"1513":1}}],["logger",{"0":{"140":1,"1508":1},"1":{"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1,"1518":1,"1519":1,"1520":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1},"2":{"135":2,"140":6,"142":1,"143":1,"393":1,"817":1,"831":1,"835":2,"837":1,"838":1,"855":1,"858":1,"862":2,"869":1,"870":1,"927":1,"1490":1,"1492":2,"1508":2,"1509":2,"1511":3,"1512":1,"1513":2,"1514":1,"1515":1,"1516":1,"1517":2,"1518":1,"1519":1,"1521":2,"1522":2,"1524":1,"1525":1,"1526":1}}],["logging",{"0":{"135":1,"136":1,"138":1,"139":1,"140":1,"141":1,"619":1,"674":1,"831":1,"1205":1,"1511":1,"1512":1,"1520":1},"1":{"136":1,"137":2,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"1521":1,"1522":1},"2":{"135":3,"141":1,"142":1,"143":1,"184":1,"393":1,"615":1,"678":1,"817":1,"826":1,"829":1,"830":1,"831":1,"837":1,"848":1,"869":1,"870":1,"943":1,"949":1,"954":1,"959":1,"1032":1,"1078":1,"1399":1,"1490":1,"1508":1,"1515":2,"1554":1,"1567":1,"1652":1}}],["log",{"0":{"1442":1},"1":{"1443":1},"2":{"135":3,"138":1,"139":1,"142":1,"143":1,"224":1,"308":1,"310":1,"312":1,"526":1,"531":2,"546":1,"562":2,"619":1,"674":5,"677":2,"829":1,"836":2,"839":1,"841":1,"842":2,"844":2,"845":1,"848":1,"850":1,"857":1,"858":4,"1075":1,"1124":1,"1144":1,"1442":1,"1445":1,"1452":1,"1500":2,"1508":2,"1509":1,"1510":2,"1511":5,"1512":4,"1513":2,"1514":2,"1515":2,"1517":3,"1518":2,"1519":2,"1520":1,"1521":2,"1522":4,"1524":1,"1526":3,"1527":4,"1571":1,"1614":3}}],["lookup",{"0":{"830":1}}],["look",{"2":{"195":1}}],["looks",{"2":{"97":1,"118":1,"1223":1,"1618":1}}],["loops",{"2":{"142":1,"331":1,"526":1,"533":1,"848":1,"862":1,"900":1,"1073":1,"1668":1}}],["loop",{"0":{"281":1,"323":1,"335":1,"354":1,"381":1,"425":1,"1018":1,"1373":1},"1":{"355":1,"356":1},"2":{"84":2,"235":1,"252":1,"253":2,"256":1,"257":1,"264":1,"284":1,"308":2,"310":1,"316":3,"322":2,"323":1,"325":2,"327":1,"329":1,"343":3,"344":1,"347":1,"357":1,"363":1,"381":1,"394":1,"479":1,"497":1,"530":1,"550":1,"653":1,"933":2,"935":1,"936":1,"1003":1,"1007":1,"1018":1,"1068":1,"1071":1,"1076":1,"1077":1,"1242":1,"1359":1,"1361":1,"1362":2,"1364":1,"1372":3}}],["long>",{"2":{"1584":2}}],["longer",{"2":{"406":1}}],["longpollingbridge>",{"2":{"108":1,"1627":1}}],["longpollingbridge",{"2":{"79":1,"108":1,"1627":1}}],["long",{"0":{"79":1,"1075":1,"1627":1},"2":{"66":1,"67":1,"79":1,"106":1,"108":4,"110":1,"177":2,"230":2,"233":1,"432":1,"443":1,"461":1,"514":1,"546":1,"548":1,"588":1,"671":1,"747":1,"764":2,"807":2,"910":2,"968":1,"996":2,"1305":9,"1309":4,"1363":1,"1584":2,"1585":4,"1626":2,"1627":6,"1630":1,"1653":1}}],["loading",{"0":{"827":1},"1":{"828":1},"2":{"1265":1}}],["load",{"0":{"1254":1,"1255":1,"1261":1},"2":{"51":1,"81":1,"142":1,"210":1,"231":1,"461":1,"825":1,"828":1,"834":1,"872":1,"1124":1,"1216":1,"1218":1,"1249":3,"1254":1,"1255":1,"1257":2,"1261":2,"1262":1,"1263":2,"1265":2,"1421":1,"1628":1,"1650":1}}],["loaded",{"2":{"4":1,"968":1,"1255":1,"1262":1}}],["loader",{"2":{"1":1,"3":1,"38":1,"1104":1}}],["loads",{"0":{"50":1,"1245":1,"1251":1,"1252":1},"1":{"1246":1},"2":{"4":1,"50":1,"511":1,"825":1,"827":1,"1216":1,"1218":1,"1245":1,"1246":1,"1248":2,"1251":1,"1252":1,"1257":2,"1259":1,"1260":1,"1263":2,"1265":3}}],["www",{"2":{"1124":2,"1133":1}}],["wcount",{"2":{"1043":4}}],["would",{"2":{"717":1,"868":1}}],["world",{"0":{"93":1},"2":{"173":1,"213":1,"871":1,"988":1,"1456":1,"1550":1,"1551":1,"1638":1,"1643":1}}],["workingdirectory",{"2":{"1132":1}}],["workingdirectory=",{"2":{"1124":1}}],["working",{"0":{"1593":1},"2":{"659":1,"670":1,"1639":1}}],["workflows",{"2":{"543":1,"564":1}}],["workflow",{"0":{"538":1,"572":1,"578":1,"589":1,"621":1,"629":1,"652":1,"702":1,"1129":1},"2":{"512":1,"523":1,"534":1,"678":1,"685":1,"693":1}}],["workload",{"2":{"153":1,"216":1,"1032":1}}],["workloads",{"2":{"151":1,"204":1,"857":1,"868":1,"890":1,"931":1,"1033":1,"1638":2}}],["workshops",{"2":{"1656":1,"1672":1}}],["works",{"0":{"315":1,"389":1,"1576":1},"1":{"316":1,"317":1,"318":1,"390":1,"391":1},"2":{"97":1,"180":2,"271":1,"518":1,"545":1,"577":1,"651":1,"681":1,"722":1,"930":1,"961":1,"968":1,"1000":1,"1493":1,"1572":1}}],["work",{"0":{"256":1,"339":1,"349":1,"1040":1},"1":{"350":1,"351":1,"1041":1,"1042":1,"1043":1},"2":{"84":1,"219":1,"252":1,"256":2,"259":1,"268":1,"273":1,"274":1,"281":2,"282":1,"283":1,"322":1,"325":2,"329":1,"330":1,"334":1,"339":1,"343":1,"361":1,"376":2,"385":1,"393":1,"403":2,"428":3,"431":1,"443":2,"445":2,"453":2,"461":1,"484":1,"653":1,"812":1,"814":1,"822":1,"874":1,"879":1,"886":1,"887":1,"888":1,"902":1,"929":1,"931":1,"933":2,"939":1,"941":1,"942":2,"943":1,"945":1,"946":1,"948":1,"1004":1,"1033":2,"1035":1,"1041":2,"1050":1,"1068":1,"1078":1,"1109":1,"1323":1,"1327":1,"1335":1,"1472":1,"1561":2,"1670":1}}],["workers",{"2":{"439":1,"1038":1,"1039":1,"1043":2,"1045":1,"1046":3,"1359":1,"1362":1,"1363":1,"1479":1}}],["worker",{"0":{"82":1,"103":1},"1":{"83":1,"84":1,"85":1,"86":1},"2":{"83":1,"103":1,"110":1,"253":1,"282":2,"325":1,"366":1,"373":1,"377":2,"378":1,"428":2,"431":1,"432":1,"433":1,"435":1,"436":1,"438":1,"440":1,"442":1,"444":1,"447":1,"449":3,"452":1,"453":1,"890":1,"893":2,"935":1,"943":1,"945":1,"1007":1,"1014":1,"1033":2,"1035":1,"1038":1,"1039":2,"1043":1,"1048":1,"1071":1,"1077":1,"1361":3,"1363":3,"1369":1,"1377":1,"1378":2,"1379":1,"1413":1,"1504":1}}],["writable",{"0":{"1230":1,"1241":1},"2":{"1241":1}}],["writing",{"0":{"1204":1},"2":{"845":1,"871":1,"1053":1,"1067":1,"1207":1,"1321":1}}],["written",{"2":{"467":1,"522":1,"531":1,"930":1,"936":1,"976":1,"1036":1,"1061":1,"1199":1}}],["writer",{"2":{"1444":1,"1449":1}}],["writes",{"2":{"276":1,"853":1,"932":2,"936":2,"1004":1,"1061":1,"1062":1,"1064":1,"1198":1,"1199":1,"1208":1,"1223":1,"1243":1,"1409":1,"1421":1,"1442":1,"1455":2,"1456":1,"1507":1,"1524":1}}],["write",{"0":{"86":1,"424":1,"1197":1,"1228":1,"1231":1,"1238":1,"1442":1},"1":{"1198":1,"1199":1,"1200":1,"1201":1,"1229":1,"1230":1,"1231":1,"1443":1},"2":{"86":2,"145":1,"154":1,"164":1,"167":1,"181":1,"235":6,"304":1,"310":1,"318":1,"320":1,"416":1,"417":1,"418":1,"424":1,"425":1,"426":1,"717":1,"837":1,"857":1,"931":1,"950":1,"1026":1,"1051":1,"1062":1,"1111":1,"1147":1,"1155":1,"1156":1,"1188":1,"1199":1,"1202":2,"1244":2,"1377":1,"1378":1,"1379":1,"1420":2,"1423":1,"1442":1,"1445":1,"1446":1,"1449":1,"1455":2,"1524":1}}],["wrapping",{"2":{"1614":1,"1616":1,"1622":1}}],["wrappers",{"0":{"761":1,"885":1},"1":{"762":1,"763":1,"764":1,"886":1,"887":1},"2":{"885":1,"931":1}}],["wrapper",{"0":{"1231":1},"2":{"388":3,"391":1,"410":1,"886":1,"887":2,"1100":1,"1508":1}}],["wrap",{"2":{"388":1,"1241":1}}],["wraps",{"2":{"351":1,"452":1,"526":1,"880":1,"891":1,"912":1,"914":1,"921":1,"950":1,"1042":1}}],["wrong",{"0":{"269":1,"1134":1},"2":{"833":1,"1089":3,"1094":1,"1150":1,"1532":1}}],["wise",{"2":{"1541":1}}],["wildcards",{"2":{"1243":1}}],["wildcard",{"2":{"937":1}}],["will",{"2":{"205":1,"211":1,"265":1,"268":1,"390":2,"392":1,"443":1,"459":1,"592":1,"594":1,"601":1,"635":1,"637":1,"716":1,"857":1,"938":1,"1096":1,"1097":1,"1128":1,"1149":1,"1207":1,"1230":1,"1240":1,"1504":1,"1505":1,"1511":1,"1616":1}}],["widely",{"2":{"845":1}}],["wins",{"2":{"774":1,"1551":1}}],["winner",{"2":{"483":2,"488":2,"491":2,"496":3,"498":1}}],["windows",{"0":{"243":1,"247":1,"1049":1,"1525":1},"2":{"249":1,"479":1,"1049":1,"1439":1,"1482":1,"1493":1,"1523":1,"1525":1,"1566":1}}],["window",{"2":{"220":1,"1434":1,"1455":1}}],["wiring",{"0":{"400":1},"2":{"1376":1}}],["within",{"2":{"661":1,"855":1,"1168":1,"1199":1,"1591":1}}],["without",{"2":{"90":1,"233":1,"256":1,"287":1,"384":1,"385":1,"412":1,"424":1,"456":1,"533":1,"621":1,"637":1,"752":1,"819":1,"843":1,"847":1,"858":1,"914":1,"925":1,"939":1,"955":1,"961":1,"976":1,"1039":1,"1136":1,"1151":1,"1161":1,"1187":1,"1223":1,"1243":1,"1266":1,"1306":1,"1321":1,"1424":1,"1490":1,"1614":1,"1623":1}}],["with",{"0":{"90":1,"208":1,"265":1,"312":1,"313":1,"314":1,"450":1,"454":1,"459":1,"494":1,"495":1,"711":1,"722":1,"766":1,"829":1,"880":1,"900":1,"1108":1,"1128":1,"1175":1,"1176":1,"1177":1,"1285":1,"1299":1,"1590":1,"1593":1,"1613":1,"1614":1,"1618":1,"1621":1,"1627":1},"1":{"451":1,"452":1,"453":1,"455":1,"456":1,"457":1,"881":1},"2":{"2":1,"3":1,"39":1,"49":1,"89":1,"90":1,"92":1,"98":1,"100":1,"120":2,"174":1,"175":1,"180":2,"181":1,"199":1,"215":1,"221":2,"223":1,"229":1,"236":1,"251":2,"252":1,"286":1,"292":1,"294":1,"297":1,"303":1,"307":1,"309":1,"320":1,"323":1,"327":1,"343":1,"366":2,"390":1,"397":1,"412":1,"417":1,"420":3,"421":1,"422":1,"428":1,"432":1,"447":1,"462":1,"463":1,"471":1,"474":1,"479":2,"480":1,"498":1,"512":1,"518":1,"526":1,"530":1,"543":1,"547":1,"548":1,"549":1,"557":1,"615":1,"634":1,"653":1,"662":1,"676":1,"688":1,"699":1,"713":1,"717":1,"781":1,"817":3,"828":1,"836":1,"837":2,"842":1,"855":1,"871":1,"881":1,"882":1,"902":1,"918":1,"923":1,"927":1,"931":1,"933":1,"939":1,"948":2,"968":1,"969":1,"973":1,"1017":1,"1036":1,"1038":1,"1049":1,"1050":2,"1052":1,"1073":1,"1079":1,"1081":3,"1084":1,"1089":1,"1095":1,"1097":2,"1100":1,"1104":2,"1111":1,"1115":1,"1116":1,"1119":1,"1136":1,"1156":1,"1180":1,"1182":1,"1187":1,"1209":1,"1216":1,"1223":1,"1230":1,"1242":2,"1244":2,"1281":1,"1288":1,"1291":2,"1296":1,"1306":1,"1316":2,"1319":1,"1350":1,"1351":1,"1355":1,"1364":1,"1374":1,"1376":2,"1381":1,"1490":1,"1494":1,"1495":1,"1504":1,"1507":1,"1508":1,"1520":1,"1542":4,"1543":2,"1569":1,"1586":1,"1589":1,"1611":1,"1614":1,"1615":1,"1624":2,"1626":2,"1640":1,"1648":1}}],["walrecord>",{"2":{"1450":1}}],["walrecord",{"0":{"1447":1},"1":{"1448":1},"2":{"1443":1,"1444":1,"1445":2,"1447":2,"1448":1,"1449":1,"1452":1,"1453":1}}],["walreader",{"0":{"1450":1},"2":{"1443":1,"1444":1,"1450":2}}],["walwriter",{"0":{"1449":1},"2":{"1443":1,"1444":1,"1449":2}}],["wal",{"0":{"1442":1,"1445":1},"1":{"1443":1,"1446":1},"2":{"1382":1,"1439":1,"1442":2,"1443":6,"1444":3,"1445":4,"1452":3,"1454":2,"1456":1,"1457":1}}],["wall",{"2":{"448":1,"1472":1,"1554":1}}],["waf",{"0":{"831":1,"1058":1},"2":{"826":1,"829":2,"830":1,"831":1,"932":1,"936":2,"1053":1,"1058":1,"1067":1}}],["warmup",{"2":{"1103":1,"1318":1,"1319":1,"1320":1,"1321":1}}],["warmups",{"2":{"385":1}}],["warns",{"2":{"1044":1}}],["warning",{"2":{"699":1,"1041":2,"1048":1}}],["warnings",{"2":{"546":1,"861":1,"1052":1}}],["warn",{"2":{"139":1,"141":1,"310":1,"546":1,"562":1,"619":1,"717":1,"836":2,"839":2,"841":1,"842":2,"844":1,"858":2,"1495":1,"1511":1,"1512":1}}],["watches",{"2":{"545":1}}],["watcher",{"2":{"364":2,"368":1,"372":2}}],["watch",{"0":{"671":1},"2":{"379":1,"543":1,"546":1,"671":2,"676":2,"678":1,"689":2,"692":2,"1488":1}}],["wakeups",{"2":{"461":1}}],["wake",{"2":{"366":1,"478":1}}],["wakes",{"2":{"356":1,"377":1,"420":1,"452":1,"943":1,"1046":1,"1068":1,"1071":1}}],["way",{"2":{"274":1,"365":1,"736":1,"746":1,"938":1,"949":1}}],["ways",{"2":{"183":1,"1371":1}}],["was",{"2":{"95":1,"490":1,"706":1,"813":1,"1394":1}}],["wantedby=multi",{"2":{"1124":1}}],["wants=network",{"2":{"1124":1}}],["wanting",{"2":{"862":1}}],["want",{"0":{"189":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"88":1,"274":1,"279":1,"312":1,"320":1,"343":1,"365":2,"368":1,"369":2,"377":1,"385":1,"443":1,"458":1,"459":1,"491":1,"498":1,"510":1,"511":1,"734":2,"828":1,"902":1,"933":1,"940":1,"942":1,"965":1,"970":1,"999":2,"1027":1,"1104":1,"1129":1,"1140":1,"1144":1,"1156":2,"1161":1,"1180":1,"1207":1,"1209":2,"1220":3,"1233":1,"1243":4,"1245":1,"1266":1,"1306":3,"1319":1,"1321":1,"1373":1,"1483":1,"1513":1,"1589":1,"1616":2,"1620":1,"1624":1,"1627":1,"1628":1,"1666":1}}],["waituntilidle",{"2":{"1045":1,"1052":1}}],["waiter",{"2":{"366":5,"375":2,"377":1,"383":1}}],["waiters",{"2":{"356":1,"379":1,"1046":1}}],["waits",{"2":{"328":1,"355":1,"375":1,"420":1,"449":1,"935":1,"1027":1,"1046":1,"1524":1}}],["wait",{"0":{"370":1,"375":1,"813":1,"879":1,"897":1},"2":{"85":2,"326":1,"364":1,"366":3,"368":2,"370":1,"373":1,"375":5,"379":1,"381":2,"382":1,"384":1,"447":1,"480":1,"812":1,"813":2,"874":1,"876":1,"889":1,"1013":1,"1022":1,"1023":1,"1038":1,"1050":1,"1353":1,"1357":1}}],["waiting",{"0":{"1045":1},"2":{"85":1,"232":1,"369":1,"379":1,"878":1,"1386":1}}],["wed",{"2":{"1556":1}}],["weird",{"2":{"1500":1}}],["weak",{"2":{"1077":1}}],["webrpc",{"0":{"1611":1,"1617":1,"1618":1},"1":{"1612":1,"1613":1,"1614":1,"1615":1,"1616":1,"1618":1,"1619":1,"1620":1,"1621":1,"1622":1,"1623":1,"1624":1,"1625":1},"2":{"1611":2,"1612":2,"1613":2,"1614":3,"1615":3,"1617":3,"1621":1}}],["webkitformboundaryabc",{"2":{"1549":1}}],["web",{"0":{"1058":1}}],["websocketmetrics",{"2":{"108":1,"1627":1}}],["websocket",{"0":{"67":1,"1498":1,"1626":1,"1628":1},"1":{"1627":1,"1628":1,"1629":1,"1630":1},"2":{"0":1,"1":1,"37":1,"38":1,"53":1,"67":2,"68":2,"70":2,"79":3,"80":1,"81":2,"102":1,"106":1,"108":7,"110":1,"236":1,"239":1,"1361":1,"1370":1,"1495":1,"1614":1,"1617":1,"1622":1,"1626":3,"1627":8,"1628":3,"1630":1,"1668":1}}],["welcome",{"2":{"871":1,"1628":1,"1634":1}}],["well",{"2":{"179":1}}],["were",{"2":{"816":1}}],["we",{"0":{"1656":1},"2":{"88":1,"316":1,"476":1,"1649":1,"1650":1,"1651":1,"1655":1,"1658":1,"1661":1}}],["whitespace",{"0":{"1539":2},"2":{"729":1,"730":1,"755":1,"758":1,"783":1,"1474":1,"1478":1,"1479":1,"1480":1,"1539":1}}],["which",{"0":{"1156":1,"1207":1,"1220":1},"2":{"197":1,"249":1,"328":1,"723":1,"770":2,"838":1,"844":1,"916":1,"1031":1,"1241":1,"1245":1,"1613":1,"1618":1,"1621":1}}],["while",{"2":{"86":2,"270":1,"281":1,"282":1,"310":2,"327":1,"359":1,"379":1,"412":1,"425":2,"427":1,"476":1,"732":1,"844":1,"857":1,"868":1,"960":1,"1107":1,"1108":1,"1319":1,"1382":1}}],["whoami",{"2":{"1314":3}}],["who",{"0":{"1657":1,"1673":1},"2":{"188":1,"1666":1}}],["whole",{"2":{"185":1,"1598":1}}],["why",{"0":{"137":1,"274":1,"422":1,"484":1,"715":1,"779":1,"857":1,"868":1,"869":1,"933":1,"1144":1},"2":{"1561":1}}],["where",{"0":{"183":1,"253":1,"873":1},"1":{"184":1,"185":1,"186":1},"2":{"329":1,"385":1,"426":1,"431":1,"432":1,"483":1,"507":1,"510":1,"592":1,"751":1,"787":1,"948":1,"961":1,"1107":1,"1108":1,"1180":1,"1281":1,"1319":1,"1323":1,"1332":1,"1333":1,"1334":1,"1337":1,"1375":1,"1554":1,"1580":1,"1606":1,"1626":1}}],["whether",{"2":{"135":1,"357":1,"417":1,"458":1,"472":1,"505":1,"548":1,"1365":1}}],["whenever",{"2":{"1045":1}}],["when",{"0":{"233":1,"328":2,"480":1,"487":1,"488":1,"490":1,"491":1,"494":1,"495":1,"496":1,"549":1,"662":1,"716":1,"902":1,"959":1,"984":1,"1066":1,"1156":1,"1207":1,"1220":1,"1243":1,"1257":1,"1306":1,"1577":1,"1616":1},"1":{"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1},"2":{"72":1,"73":1,"74":1,"79":1,"121":1,"128":1,"130":1,"132":1,"135":1,"137":1,"142":1,"148":1,"152":1,"177":2,"179":1,"210":1,"219":1,"232":1,"233":1,"237":2,"256":1,"257":1,"265":1,"271":1,"279":1,"291":1,"312":1,"325":1,"328":3,"329":1,"330":2,"331":1,"350":1,"355":1,"365":1,"369":1,"395":1,"399":2,"400":1,"431":1,"432":1,"433":1,"449":2,"452":1,"456":1,"460":2,"469":1,"480":4,"481":1,"483":4,"486":1,"487":1,"488":1,"490":2,"491":2,"494":2,"495":1,"496":1,"498":5,"502":2,"503":3,"511":1,"513":2,"529":1,"537":1,"594":1,"661":1,"696":1,"697":1,"708":2,"709":1,"715":1,"716":1,"734":2,"793":1,"813":1,"816":1,"823":2,"828":1,"844":1,"845":2,"847":1,"848":1,"851":1,"858":2,"861":1,"877":1,"889":1,"893":1,"900":1,"902":1,"924":1,"926":1,"942":2,"943":1,"962":1,"970":1,"984":1,"999":2,"1015":1,"1019":1,"1033":1,"1038":1,"1043":1,"1044":1,"1045":1,"1071":1,"1083":1,"1102":1,"1104":1,"1129":1,"1139":1,"1140":1,"1144":1,"1146":1,"1156":3,"1161":1,"1163":2,"1164":2,"1167":2,"1199":1,"1207":3,"1209":2,"1220":2,"1223":1,"1227":1,"1229":1,"1243":2,"1251":1,"1252":1,"1304":1,"1306":2,"1312":1,"1319":1,"1321":1,"1322":1,"1327":1,"1361":1,"1362":1,"1363":2,"1366":2,"1372":1,"1373":1,"1389":1,"1394":1,"1396":1,"1397":1,"1412":1,"1413":1,"1488":3,"1493":1,"1495":1,"1503":1,"1506":1,"1507":1,"1511":1,"1519":1,"1533":1,"1558":1,"1570":1,"1577":2,"1597":1,"1602":1,"1603":1,"1616":2,"1620":1,"1621":1,"1622":1,"1624":1,"1627":1,"1628":1,"1630":1,"1637":1,"1669":2}}],["what",{"0":{"97":1,"189":1,"252":1,"309":1,"333":1,"353":1,"365":1,"386":1,"397":1,"483":1,"522":1,"537":1,"628":1,"636":1,"783":1,"836":1,"837":1,"838":1,"931":1,"962":1,"1001":1,"1199":1,"1223":1,"1257":1,"1268":1,"1490":1,"1495":1,"1538":1,"1555":1,"1573":1,"1581":1,"1618":1,"1625":1,"1656":1,"1664":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"334":1,"335":1,"336":1,"1539":1,"1556":1,"1557":1,"1558":1},"2":{"0":1,"36":1,"37":1,"118":1,"135":1,"145":1,"153":1,"159":1,"226":1,"364":1,"476":1,"507":1,"718":1,"861":1,"938":1,"1006":1,"1051":1,"1107":1,"1112":1,"1115":1,"1202":1,"1261":1,"1318":1,"1319":1,"1320":1,"1321":1,"1382":1,"1524":1,"1612":1,"1618":1,"1627":1}}],["ws",{"0":{"80":1,"102":1,"106":1,"1627":1},"1":{"107":1,"108":1,"109":1,"110":1},"2":{"69":1,"70":4,"80":2,"91":1,"106":1,"108":18,"109":2,"216":1,"1497":2,"1498":6,"1505":6,"1506":1,"1627":21,"1628":10}}],["tm",{"2":{"1566":1}}],["tmux",{"2":{"1507":1}}],["tmp",{"2":{"1199":2}}],["t0",{"2":{"1377":2,"1379":4,"1468":3,"1561":2}}],["t5",{"2":{"1211":2}}],["t4",{"2":{"1211":1}}],["t3",{"2":{"1211":2}}],["tx",{"2":{"1107":5,"1112":6,"1318":3}}],["txtmy",{"2":{"1633":1}}],["txtmodules",{"2":{"1553":1}}],["txt",{"0":{"1635":1},"2":{"173":1,"537":1,"539":1,"582":2,"583":1,"584":1,"697":1,"988":1,"1633":1,"1643":1}}],["tty",{"2":{"616":1,"845":1,"853":1,"1503":1,"1523":1}}],["ttl",{"2":{"195":1,"503":2,"512":1,"513":1,"1627":1}}],["ts",{"2":{"487":1,"488":1,"1447":1,"1448":1,"1452":1,"1491":2,"1564":3}}],["ts>",{"2":{"487":4,"488":4}}],["t2",{"2":{"483":2,"1211":2}}],["t1",{"2":{"483":2,"1211":1,"1379":3,"1468":2}}],["twister",{"2":{"1575":1}}],["twice",{"2":{"344":1,"370":1}}],["two",{"0":{"431":1},"2":{"40":1,"43":1,"54":1,"171":1,"180":1,"447":1,"620":1,"621":1,"815":1,"1035":1,"1038":1,"1045":1,"1110":1,"1129":1,"1188":1,"1209":1,"1212":1,"1245":1,"1288":1,"1308":1,"1313":1,"1323":1,"1371":1,"1504":1,"1570":1,"1626":1}}],["tutoring",{"2":{"1664":1}}],["turning",{"2":{"858":1}}],["turns",{"2":{"752":1}}],["tui",{"2":{"615":1,"616":1}}],["tuples",{"2":{"486":1}}],["tuple",{"2":{"328":1,"483":2,"486":2,"487":1,"488":2,"490":1,"495":1,"926":1}}],["tup",{"2":{"328":1,"486":1,"495":2,"496":4}}],["tuning",{"2":{"151":1,"205":1,"1661":1}}],["t>",{"2":{"310":1,"416":2,"468":1,"1107":2,"1108":1,"1270":1,"1298":1,"1320":4,"1332":1,"1447":1,"1535":1,"1584":2}}],["tampered",{"2":{"1089":1}}],["tamper",{"2":{"1085":1}}],["tables",{"2":{"779":1,"862":1}}],["table",{"0":{"798":1,"1107":1},"2":{"706":1,"731":1,"732":1,"750":1,"770":1,"838":1,"1107":1,"1112":2,"1116":2,"1316":1,"1322":2,"1329":2,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1}}],["take",{"2":{"829":1}}],["taken",{"2":{"691":1}}],["takes",{"2":{"207":1,"385":1}}],["tagged",{"2":{"1270":1}}],["tags",{"2":{"658":1,"964":1,"981":1,"990":1}}],["tag",{"2":{"633":1,"635":3,"636":2,"644":2,"1495":1,"1503":1}}],["target",{"0":{"1391":1},"2":{"528":4,"530":1,"582":2,"584":2,"669":1,"706":1,"783":1,"787":1,"826":1,"914":1,"915":1,"925":1,"1058":1,"1116":1,"1124":3,"1377":1,"1378":1,"1379":1,"1380":7,"1384":1,"1387":1,"1391":1,"1635":1}}],["targets",{"2":{"209":1,"528":1,"539":1,"715":1,"1370":1,"1566":1}}],["taskcmp",{"0":{"1036":1},"2":{"1033":1,"1036":1}}],["taskguard",{"0":{"1037":1},"2":{"942":1,"1037":1}}],["taskoptions",{"0":{"882":1,"1073":1},"1":{"883":1},"2":{"876":2,"882":2,"889":1,"895":1,"1075":1}}],["taskstimedout",{"2":{"1041":1}}],["tasks",{"0":{"486":1,"495":1},"2":{"252":1,"328":2,"329":1,"335":1,"344":1,"346":1,"368":2,"376":1,"377":1,"379":2,"381":1,"385":1,"386":1,"393":1,"395":1,"411":1,"462":1,"480":1,"483":2,"492":1,"498":1,"874":1,"878":3,"889":1,"897":1,"933":1,"942":3,"943":1,"1035":1,"1036":1,"1038":1,"1043":1,"1045":2,"1046":2,"1050":3,"1052":2,"1078":1}}],["task",{"0":{"323":1,"375":1,"390":1,"391":1,"395":1,"397":1,"402":1,"403":1,"1035":1},"1":{"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1},"2":{"84":4,"85":3,"86":4,"103":1,"253":1,"274":1,"289":1,"290":1,"293":1,"294":1,"295":1,"300":1,"301":1,"310":5,"322":2,"323":4,"327":1,"328":1,"345":1,"353":1,"363":1,"366":2,"368":3,"375":1,"385":1,"386":2,"387":1,"388":2,"390":1,"391":3,"392":1,"393":4,"394":1,"395":4,"396":1,"397":3,"399":2,"400":4,"402":4,"403":3,"404":5,"406":8,"408":1,"409":3,"410":2,"413":1,"416":3,"417":1,"419":2,"424":2,"425":2,"431":1,"438":1,"442":2,"443":1,"446":2,"457":2,"459":2,"464":1,"468":3,"476":1,"477":1,"480":3,"483":2,"486":2,"487":2,"488":2,"491":1,"492":1,"494":5,"495":2,"496":2,"497":3,"875":1,"877":2,"880":1,"881":1,"882":1,"883":1,"893":1,"895":3,"943":1,"1033":1,"1035":1,"1037":1,"1038":2,"1042":1,"1044":1,"1045":1,"1071":1}}],["title",{"2":{"966":1,"967":1,"968":1,"1146":2}}],["ticks",{"2":{"1361":1,"1362":1}}],["tick",{"0":{"1377":1},"2":{"857":1,"1038":1,"1044":2,"1361":1,"1362":1,"1363":1,"1364":3,"1366":1,"1367":2,"1372":1,"1374":2,"1377":1,"1378":2,"1379":4}}],["tight",{"2":{"533":1}}],["tie",{"0":{"460":1}}],["tip",{"2":{"453":1,"507":1,"599":1,"1147":1,"1180":1}}],["tips",{"0":{"197":1,"793":1,"1598":1},"2":{"1519":1}}],["tiny",{"2":{"273":1,"308":1,"385":1,"943":1,"1068":1,"1096":1,"1136":1,"1268":1,"1337":1,"1380":1}}],["timing",{"2":{"461":1,"491":1,"838":1,"1068":1,"1427":1,"1439":1,"1441":1,"1554":1}}],["timings",{"2":{"188":1,"492":1}}],["timedouttasks",{"2":{"942":1}}],["timed",{"2":{"299":1,"878":2,"884":1,"896":1,"1011":1,"1033":1,"1363":1,"1422":1}}],["timestamps",{"0":{"1558":1},"2":{"1384":1,"1458":1,"1490":1,"1554":1,"1567":1,"1571":1}}],["timestamp",{"0":{"1462":1,"1466":1,"1467":1,"1468":1,"1562":1,"1564":1},"1":{"1467":1,"1468":1},"2":{"448":1,"836":1,"847":1,"1394":1,"1395":1,"1448":2,"1462":1,"1467":1,"1468":2,"1473":1,"1510":1,"1554":1,"1556":1,"1558":1}}],["times",{"2":{"271":1,"284":1,"382":1,"417":1,"1071":1,"1551":1}}],["timeout",{"0":{"1041":1,"1057":1,"1379":1},"2":{"216":3,"221":1,"222":1,"238":1,"274":1,"299":1,"304":2,"826":2,"829":2,"882":1,"883":1,"932":1,"936":1,"1040":1,"1041":2,"1052":1,"1065":1,"1067":1,"1363":2,"1366":2,"1376":1,"1379":4,"1418":1,"1422":1}}],["timeoutstopsec=10",{"2":{"1124":1}}],["timeouts",{"0":{"216":1},"2":{"213":1,"215":1,"216":3,"217":1,"225":1,"319":1,"320":1,"328":1,"410":1,"425":1,"448":1,"461":1,"462":1,"834":1,"931":1,"1053":1,"1472":1,"1473":1,"1557":1,"1571":1}}],["timers",{"0":{"324":1,"340":1,"941":1,"1068":1,"1071":1},"1":{"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1},"2":{"84":1,"260":1,"297":1,"316":1,"322":1,"324":2,"331":1,"336":1,"340":2,"361":1,"362":1,"393":1,"410":1,"445":1,"448":1,"453":1,"457":1,"459":2,"862":1,"1004":1,"1011":1,"1068":1,"1069":1,"1075":3,"1076":1,"1490":1}}],["timer",{"0":{"84":1,"447":1,"943":1},"1":{"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1},"2":{"84":3,"253":1,"336":1,"340":1,"345":1,"447":3,"448":3,"449":2,"453":2,"456":1,"457":1,"459":2,"460":1,"461":2,"462":1,"479":1,"514":1,"932":1,"936":1,"943":1,"1011":1,"1057":1,"1068":2,"1073":1,"1078":1,"1554":1}}],["time",{"0":{"1458":1,"1472":1,"1554":1,"1556":1,"1561":1,"1570":1},"1":{"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1},"2":{"4":1,"222":1,"345":1,"366":1,"375":1,"410":1,"448":1,"460":1,"461":1,"588":1,"681":1,"731":1,"779":1,"815":1,"825":1,"838":1,"853":1,"877":1,"883":2,"1044":1,"1065":1,"1126":1,"1142":1,"1146":1,"1149":1,"1309":2,"1363":1,"1366":2,"1377":1,"1378":1,"1379":1,"1382":1,"1397":1,"1425":1,"1458":6,"1463":1,"1466":1,"1469":1,"1473":1,"1490":1,"1491":1,"1492":2,"1495":1,"1554":2,"1557":1,"1558":1,"1559":1,"1561":2,"1562":1,"1563":1,"1564":1,"1566":1,"1567":1,"1569":2,"1570":1,"1571":1,"1577":1,"1626":1,"1653":1,"1664":1}}],["tls",{"0":{"1128":1},"2":{"161":1,"1119":1,"1186":2,"1204":1,"1281":1}}],["typing",{"2":{"233":1}}],["typically",{"0":{"189":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"183":1,"251":1,"292":1,"335":1,"339":1,"365":1,"412":1,"417":1,"463":1,"474":1,"507":1,"844":1,"845":1,"853":1,"913":1,"927":1,"1013":1,"1097":1,"1272":1}}],["typical",{"0":{"262":1,"307":1,"362":1,"367":1,"512":1,"538":1,"572":1,"578":1,"621":1,"629":1,"652":1,"702":1,"711":1,"957":1,"1021":1,"1074":1,"1406":1,"1451":1,"1506":1},"1":{"263":1,"264":1,"368":1,"369":1,"370":1,"1022":1,"1023":1,"1075":1,"1076":1,"1452":1,"1453":1},"2":{"145":1,"195":1,"215":1,"264":1,"413":1,"477":1,"501":1,"787":1,"896":1,"1023":1,"1527":1,"1618":1}}],["type=simple",{"2":{"1124":1}}],["type=release",{"2":{"1123":1}}],["typename",{"2":{"334":1,"438":1,"451":1,"487":1,"488":1,"716":3,"756":1,"771":1,"772":1,"777":1,"785":1}}],["types",{"0":{"275":1,"414":1,"418":1,"448":1,"465":1,"485":1,"747":1,"795":1,"796":1,"963":1,"1070":1,"1138":1,"1165":1,"1190":1,"1269":1,"1583":1},"1":{"276":1,"277":1,"278":1,"415":1,"466":1,"467":1,"486":1,"487":1,"488":1,"964":1,"965":1,"1071":1,"1139":1,"1140":1,"1270":1,"1271":1,"1272":1},"2":{"41":1,"180":1,"265":1,"294":1,"410":1,"412":1,"464":1,"480":1,"716":1,"725":1,"746":1,"747":2,"924":1,"1003":1,"1102":1,"1151":1,"1155":2,"1210":1,"1277":1,"1317":1,"1327":1,"1338":1,"1339":3,"1474":1}}],["typed",{"0":{"74":1,"75":1,"829":1,"1298":1,"1299":1,"1300":1,"1602":1},"2":{"3":1,"63":1,"67":1,"70":1,"74":1,"75":1,"102":1,"106":1,"108":2,"110":1,"236":2,"724":1,"746":1,"752":1,"759":1,"766":1,"770":2,"793":1,"794":1,"799":1,"825":1,"918":1,"929":1,"952":1,"955":1,"958":1,"960":2,"1314":1,"1626":3,"1627":2,"1628":1,"1629":1}}],["type",{"0":{"487":1,"488":1,"1283":1},"2":{"3":1,"15":1,"24":1,"30":1,"45":1,"56":1,"64":1,"68":1,"70":2,"74":2,"75":1,"106":1,"107":1,"108":2,"160":1,"168":1,"188":2,"197":2,"235":1,"236":2,"238":1,"331":1,"336":1,"350":1,"359":1,"386":1,"390":1,"394":1,"395":3,"409":1,"452":1,"474":1,"486":2,"495":1,"654":1,"703":1,"706":1,"717":2,"729":1,"730":1,"760":1,"775":1,"783":1,"785":1,"787":1,"800":1,"808":1,"815":1,"833":1,"903":1,"911":1,"912":1,"918":1,"921":1,"926":1,"951":2,"955":1,"968":1,"1096":1,"1100":1,"1103":1,"1116":2,"1139":1,"1150":1,"1164":1,"1165":1,"1175":1,"1180":2,"1220":1,"1314":1,"1328":1,"1339":1,"1382":1,"1447":1,"1448":1,"1452":1,"1490":1,"1549":1,"1626":2,"1627":2,"1628":5,"1629":1}}],["team",{"2":{"1656":1,"1672":1}}],["teams",{"2":{"1655":1,"1657":1,"1660":1,"1666":1,"1673":1}}],["teaches",{"0":{"97":1}}],["temp",{"2":{"1198":1,"1202":1}}],["temporary",{"2":{"1167":1,"1577":1}}],["temporarily",{"2":{"1049":1,"1525":1}}],["template",{"0":{"595":1,"756":1},"1":{"757":1},"2":{"592":2,"594":1,"601":2,"716":1,"876":1,"1320":1,"1328":2}}],["templates",{"2":{"105":1}}],["technical",{"2":{"712":1,"1653":1}}],["term",{"2":{"588":1,"1653":2}}],["terminals",{"0":{"1523":1},"2":{"621":1}}],["terminal",{"2":{"249":1,"621":2,"669":1,"1488":1,"1490":1,"1494":1,"1500":1,"1502":1,"1507":1}}],["termination",{"2":{"214":1,"859":1}}],["terminates",{"2":{"377":1}}],["terminate",{"2":{"161":1}}],["tell",{"2":{"1378":1}}],["tells",{"2":{"328":1}}],["telemetry",{"2":{"385":1,"848":1,"1623":1}}],["tensorrt",{"2":{"206":1}}],["tests=on",{"2":{"530":1}}],["tests",{"0":{"686":1},"1":{"687":1,"688":1},"2":{"509":1,"555":1,"600":1,"686":1,"687":1,"688":2,"689":3,"690":2,"691":1,"692":8,"693":1,"879":1,"889":1,"1136":1,"1140":2,"1144":1,"1157":1,"1251":1,"1257":1,"1376":1,"1380":1}}],["testable",{"2":{"504":1}}],["testing",{"0":{"271":1},"2":{"549":1,"615":1,"1381":1}}],["test",{"0":{"90":1,"109":1,"313":1,"314":1,"689":1,"1377":1,"1641":1},"2":{"165":1,"195":1,"227":1,"600":2,"653":1,"662":1,"690":1,"802":1,"871":1,"873":1,"897":1,"905":1,"992":1,"993":1,"994":2,"1309":1,"1310":1,"1311":1,"1313":1,"1314":1,"1352":1,"1356":1,"1377":2,"1378":7,"1379":8,"1644":1,"1645":1}}],["textmodules",{"2":{"583":1,"584":1,"586":1}}],["textinit",{"2":{"581":1}}],["textvix",{"2":{"542":1}}],["textual",{"2":{"288":1,"736":1,"794":1}}],["text",{"0":{"32":1,"803":1,"906":1,"988":1,"1643":1},"2":{"34":1,"77":1,"92":1,"107":1,"123":1,"132":1,"218":1,"235":1,"236":1,"424":1,"537":2,"542":1,"582":1,"710":1,"752":1,"803":1,"871":3,"906":1,"912":1,"919":1,"921":1,"923":1,"1225":1,"1226":1,"1227":2,"1266":2,"1268":1,"1306":1,"1369":1,"1377":1,"1378":1,"1379":1,"1626":1,"1628":1,"1629":1}}],["tcp",{"0":{"86":1,"327":1,"412":1,"415":1,"416":1,"419":1},"1":{"413":1,"414":1,"415":1,"416":1,"417":2,"418":2,"419":1,"420":2,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1},"2":{"86":3,"251":1,"265":2,"272":2,"295":1,"308":1,"310":3,"327":1,"412":6,"413":2,"415":1,"416":4,"419":4,"420":1,"421":4,"424":3,"425":4,"427":1,"557":1,"613":1,"615":1,"616":1,"932":1,"935":1,"1001":1,"1003":1,"1008":1,"1054":1,"1106":1,"1107":1,"1108":1,"1112":1,"1126":1,"1318":1,"1319":1,"1320":1,"1321":1,"1353":1,"1357":1}}],["trees",{"2":{"1221":1,"1243":1,"1268":1}}],["tree",{"0":{"975":1},"2":{"520":1,"538":1,"539":1,"576":1,"578":1,"598":1,"643":2,"650":2,"652":1,"683":1,"937":2,"972":1,"973":1,"975":1,"982":1,"985":1}}],["treated",{"2":{"1363":1}}],["treats",{"2":{"671":2,"1026":1,"1483":1}}],["treat",{"2":{"284":1,"378":1,"393":1,"458":1,"1095":1}}],["trips",{"2":{"1624":1}}],["triple",{"2":{"528":1}}],["triple>",{"2":{"528":1}}],["tricks",{"2":{"779":1}}],["trim",{"0":{"1539":1},"2":{"1490":1,"1536":1,"1539":2,"1541":1}}],["trims",{"2":{"755":1,"1478":1,"1479":1,"1480":1}}],["trimming",{"2":{"706":1,"742":1}}],["trimmed",{"2":{"507":1,"736":1,"744":1,"759":2,"774":1,"783":2,"787":2}}],["triggered",{"2":{"291":1,"316":1}}],["triggers",{"2":{"264":1,"369":1,"381":1,"511":1,"1046":1,"1532":1}}],["troubleshooting",{"0":{"197":1,"248":1,"1507":1},"1":{"249":1,"250":1}}],["truthy",{"2":{"1477":1}}],["truth",{"2":{"950":1,"1375":1}}],["truncation",{"2":{"751":1,"755":1}}],["truncate",{"2":{"478":1}}],["trusted",{"0":{"1186":1},"2":{"870":1,"1160":1,"1180":1,"1251":1,"1257":1}}],["trust",{"2":{"158":1,"836":1,"1160":1}}],["true",{"0":{"738":1},"2":{"48":1,"89":1,"94":1,"114":1,"115":2,"123":1,"138":1,"156":1,"158":1,"160":1,"167":1,"173":1,"179":1,"186":3,"187":2,"188":1,"193":3,"195":3,"197":1,"222":1,"224":1,"230":1,"276":1,"277":2,"382":1,"406":1,"408":1,"452":1,"502":2,"503":2,"512":1,"513":2,"658":1,"709":1,"732":1,"738":1,"743":1,"748":1,"772":1,"777":1,"778":1,"797":2,"802":1,"804":1,"814":1,"820":1,"826":2,"829":1,"871":2,"877":1,"889":1,"905":1,"907":1,"919":1,"938":2,"969":2,"974":1,"976":1,"977":1,"989":1,"990":1,"998":1,"1012":1,"1018":1,"1044":1,"1045":2,"1046":2,"1130":1,"1142":1,"1146":1,"1175":1,"1192":1,"1194":1,"1196":1,"1198":1,"1200":1,"1211":1,"1212":1,"1213":1,"1215":2,"1231":1,"1244":1,"1252":1,"1276":1,"1287":1,"1290":1,"1300":1,"1309":1,"1310":2,"1311":4,"1312":3,"1313":2,"1314":2,"1353":5,"1357":5,"1369":1,"1377":3,"1378":2,"1379":3,"1380":2,"1381":1,"1401":1,"1402":1,"1403":1,"1413":2,"1414":1,"1417":1,"1436":1,"1452":1,"1455":1,"1477":2,"1488":1,"1498":2,"1515":1,"1531":2,"1593":1,"1639":1,"1641":1}}],["training",{"0":{"1666":1,"1667":1},"1":{"1667":1,"1668":2,"1669":2,"1670":2,"1671":2,"1672":1,"1673":1,"1674":1},"2":{"1656":1,"1659":1,"1664":1,"1666":1,"1672":1}}],["trail",{"2":{"862":1}}],["trailing",{"0":{"790":1},"2":{"710":1,"758":1,"759":1,"783":2,"790":1,"1474":1,"1478":1,"1483":1,"1591":1}}],["trailingcharacters",{"2":{"705":1,"706":1,"760":1,"787":1,"790":1}}],["tradeoff",{"2":{"1455":1}}],["tracking",{"2":{"1416":1}}],["track",{"2":{"1037":1,"1382":1}}],["tracks",{"0":{"1667":1},"1":{"1668":1,"1669":1,"1670":1,"1671":1},"2":{"942":1}}],["tracing",{"2":{"954":1,"959":1,"1554":1}}],["trace",{"2":{"546":1,"562":1,"619":1,"1511":1}}],["traces",{"2":{"159":1}}],["traversal",{"2":{"924":1}}],["traverse",{"2":{"830":1}}],["traffic",{"2":{"142":1,"153":1,"220":1}}],["translate",{"2":{"1617":2}}],["translation",{"2":{"111":1}}],["transmit",{"2":{"1558":1}}],["transactionally",{"2":{"1350":1}}],["transactional",{"2":{"1321":1}}],["transaction",{"0":{"1107":1,"1318":1,"1336":1},"2":{"1096":1,"1107":2,"1109":3,"1112":2,"1318":2,"1335":2,"1336":2}}],["transactions",{"0":{"1109":1},"2":{"1096":1,"1099":1,"1115":1,"1317":1,"1322":1,"1670":1}}],["transition",{"2":{"1395":1,"1444":1,"1447":1,"1448":1,"1454":1,"1456":1}}],["transitions",{"2":{"499":1,"1404":1,"1405":1,"1406":1,"1412":1,"1442":1}}],["transitive",{"2":{"541":1}}],["transient",{"2":{"214":1,"217":1}}],["transform",{"0":{"1540":1},"1":{"1541":1}}],["transforms",{"2":{"542":1,"1536":1}}],["transformations",{"2":{"134":1}}],["transferred",{"2":{"417":1}}],["transparent",{"2":{"118":1,"645":1,"780":1}}],["transports",{"0":{"1622":1},"2":{"1616":1}}],["transport",{"0":{"1370":1,"1380":1,"1625":1},"2":{"108":1,"110":1,"161":1,"216":1,"239":1,"557":1,"615":1,"1359":1,"1364":1,"1367":1,"1368":1,"1375":1,"1376":1,"1377":5,"1378":7,"1379":4,"1380":3,"1382":1,"1392":1,"1411":1,"1416":1,"1424":1,"1457":1,"1611":1,"1617":2,"1625":3}}],["trying",{"2":{"1026":1}}],["try",{"0":{"1252":1,"1255":1},"2":{"63":1,"86":3,"89":1,"221":1,"404":1,"433":1,"443":1,"512":1,"914":1,"918":1,"993":1,"1107":1,"1112":1,"1158":1,"1248":1,"1249":1,"1252":1,"1255":1,"1257":2,"1260":1,"1262":1,"1263":2,"1265":2,"1318":1,"1319":1,"1320":1,"1321":1,"1335":1,"1337":1}}],["t",{"0":{"43":1,"397":1,"719":1,"733":1,"1162":1,"1163":1,"1164":1,"1168":1,"1169":1,"1174":1,"1178":1,"1182":1,"1212":1,"1271":1,"1289":1},"1":{"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1,"1290":1,"1291":1,"1292":1},"2":{"41":1,"42":3,"43":1,"84":2,"85":2,"86":3,"108":3,"265":1,"288":1,"289":1,"295":1,"298":1,"310":4,"316":1,"322":1,"323":2,"340":2,"357":1,"387":1,"391":2,"393":1,"394":1,"395":2,"397":2,"406":2,"410":3,"415":1,"424":1,"425":1,"435":1,"438":1,"440":1,"442":2,"446":1,"453":2,"457":3,"464":1,"466":1,"467":1,"480":1,"487":1,"488":2,"505":1,"512":1,"703":1,"705":1,"707":2,"711":1,"713":1,"716":2,"723":2,"724":1,"725":1,"727":1,"729":1,"731":1,"733":2,"734":1,"746":1,"747":3,"749":1,"755":1,"772":1,"777":1,"781":1,"783":1,"786":2,"876":1,"884":3,"892":2,"898":2,"899":2,"914":4,"918":5,"955":2,"1071":1,"1083":1,"1084":1,"1088":2,"1102":3,"1117":1,"1127":1,"1135":1,"1158":1,"1162":1,"1173":1,"1182":2,"1183":2,"1187":3,"1210":1,"1212":2,"1214":1,"1268":1,"1270":3,"1276":1,"1277":1,"1278":1,"1280":4,"1281":1,"1283":8,"1284":2,"1285":5,"1287":10,"1288":4,"1290":1,"1291":1,"1294":1,"1299":1,"1301":1,"1303":1,"1305":1,"1307":1,"1309":1,"1319":1,"1320":2,"1322":1,"1328":4,"1329":2,"1331":3,"1332":1,"1333":4,"1334":2,"1337":1,"1339":1,"1350":2,"1363":5,"1364":2,"1366":4,"1367":2,"1372":1,"1377":1,"1378":1,"1379":1,"1380":2,"1385":1,"1387":4,"1404":1,"1405":1,"1414":6,"1417":2,"1418":10,"1428":6,"1436":1,"1437":2,"1438":1,"1445":3,"1447":3,"1449":1,"1450":2,"1462":2,"1467":2,"1490":1,"1514":2,"1528":2,"1539":1,"1564":1,"1566":1,"1585":2,"1593":2,"1603":1,"1604":1,"1606":1,"1610":3,"1627":3}}],["tolerant",{"2":{"1474":1}}],["toresult",{"2":{"1380":4}}],["toupdateparams",{"2":{"1320":1,"1328":3,"1333":1}}],["touch",{"2":{"378":1}}],["toinsertparams",{"2":{"1320":1,"1328":3,"1331":1}}],["toint",{"2":{"726":1,"782":1,"789":1,"790":1,"791":1,"792":1}}],["toggling",{"2":{"1115":1}}],["toggled",{"2":{"820":1}}],["together",{"2":{"321":1,"931":1,"949":1}}],["tostring",{"2":{"726":1,"794":1}}],["toenum",{"2":{"726":1,"769":1,"776":1}}],["tobool",{"2":{"726":1,"743":1}}],["tofloat",{"2":{"711":1,"726":1,"754":1,"765":1}}],["today",{"2":{"422":1,"1460":2}}],["top",{"2":{"342":1,"345":1,"361":1,"363":1,"366":1,"497":1,"712":1,"874":1,"880":1,"919":1,"1036":2,"1114":1,"1115":1,"1136":1,"1188":1,"1245":1,"1317":1}}],["tok",{"2":{"282":3}}],["tokenization",{"2":{"1240":1,"1242":1}}],["tokenizer",{"2":{"1242":1}}],["tokenizes",{"2":{"1233":1}}],["tokenize",{"0":{"1233":1},"2":{"1242":1}}],["token|kvs|array",{"0":{"1182":1}}],["tokens",{"2":{"138":1,"157":1,"218":1,"223":2,"232":1,"277":3,"284":1,"706":1,"936":1,"939":1,"1084":1,"1095":1,"1158":1,"1181":1,"1233":1,"1242":1,"1272":1}}],["token>",{"2":{"89":1,"1280":1,"1613":1}}],["token",{"0":{"42":1,"157":1,"277":1,"375":1,"1211":1,"1233":1,"1270":1},"2":{"41":1,"42":1,"88":1,"89":2,"90":3,"108":5,"156":2,"157":2,"216":1,"218":1,"219":1,"233":1,"235":1,"236":1,"273":1,"274":1,"278":2,"281":2,"282":1,"283":2,"284":1,"289":1,"291":1,"295":1,"366":1,"368":1,"375":1,"379":2,"410":1,"411":1,"416":3,"417":1,"419":1,"420":1,"426":2,"431":1,"432":1,"438":1,"443":2,"446":1,"447":1,"451":1,"455":1,"458":2,"459":3,"464":1,"468":2,"475":4,"479":1,"498":1,"950":1,"955":1,"956":1,"1182":1,"1210":1,"1211":5,"1270":2,"1271":1,"1273":1,"1275":1,"1277":1,"1279":1,"1280":1,"1281":1,"1288":1,"1290":1,"1291":1,"1295":2,"1296":1,"1305":1,"1307":1,"1611":1,"1612":4,"1613":4,"1614":2,"1615":2,"1617":1,"1619":2,"1620":1,"1621":2,"1622":2,"1625":1,"1627":4}}],["tooling",{"2":{"553":1,"889":1,"969":1,"1116":1,"1306":1}}],["toolchains",{"2":{"528":1,"715":1}}],["toolchain",{"2":{"528":1,"1640":1}}],["tool",{"2":{"526":1,"547":1,"610":1,"611":1,"1347":1,"1348":1}}],["tools",{"2":{"247":1,"981":1,"1490":1}}],["too",{"2":{"217":1,"230":1,"1503":1}}],["total",{"2":{"216":1,"219":1,"237":1,"1154":3}}],["to",{"0":{"77":1,"78":1,"233":1,"470":2,"486":1,"497":1,"549":1,"662":1,"710":1,"728":1,"729":1,"730":1,"731":1,"732":1,"735":1,"753":1,"762":1,"763":1,"764":1,"768":1,"781":1,"794":1,"873":1,"902":1,"932":1,"959":1,"984":1,"1029":1,"1066":1,"1122":1,"1149":1,"1156":1,"1181":1,"1182":1,"1183":1,"1191":1,"1197":1,"1207":1,"1220":1,"1243":1,"1257":1,"1306":1,"1339":1,"1462":1,"1570":1,"1577":1,"1616":1},"1":{"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"779":1,"780":1,"782":1,"783":1,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"795":1,"796":1,"797":1,"798":1,"799":1,"933":1,"1030":1,"1031":1,"1182":1,"1183":1,"1192":1,"1193":1,"1194":1,"1195":1,"1196":1,"1198":1,"1199":1,"1200":1,"1201":1},"2":{"0":1,"24":1,"35":1,"37":1,"59":1,"60":1,"61":1,"65":2,"75":1,"98":1,"104":1,"105":1,"106":2,"107":1,"108":3,"110":1,"122":1,"126":1,"135":2,"138":1,"141":2,"152":1,"164":1,"168":3,"175":2,"178":1,"188":1,"197":1,"199":1,"216":3,"218":1,"220":1,"224":1,"252":2,"255":2,"259":1,"260":1,"261":1,"264":1,"265":2,"266":2,"269":1,"270":1,"271":1,"273":1,"274":2,"276":1,"277":2,"279":1,"308":1,"310":2,"316":1,"319":1,"320":2,"325":1,"326":1,"329":1,"330":1,"331":1,"335":1,"336":1,"339":1,"343":2,"344":2,"347":2,"353":1,"356":1,"364":2,"365":2,"366":3,"368":2,"370":1,"372":1,"373":1,"376":1,"377":1,"378":2,"381":1,"384":1,"385":2,"386":1,"388":1,"390":1,"393":1,"406":1,"410":1,"412":2,"418":1,"420":1,"424":2,"428":1,"431":1,"435":2,"439":1,"447":3,"449":1,"453":1,"459":1,"461":2,"468":2,"469":1,"476":3,"477":3,"478":4,"479":1,"480":2,"486":1,"488":1,"491":2,"498":1,"502":2,"503":1,"504":1,"505":1,"507":1,"511":2,"513":3,"514":1,"518":1,"521":1,"522":2,"523":1,"528":2,"533":1,"539":1,"543":1,"551":1,"555":1,"597":1,"615":1,"616":1,"617":1,"618":1,"630":1,"632":1,"649":1,"651":1,"653":1,"673":1,"675":1,"688":1,"690":2,"708":1,"710":1,"711":2,"712":1,"713":4,"717":1,"720":1,"721":2,"722":1,"727":2,"728":1,"729":1,"730":1,"731":2,"732":5,"734":4,"736":1,"740":1,"741":1,"743":1,"745":1,"746":1,"755":2,"756":1,"758":1,"760":1,"762":1,"763":1,"764":1,"765":1,"766":1,"770":2,"771":1,"772":1,"776":1,"777":2,"778":2,"781":1,"783":1,"785":1,"786":4,"787":3,"789":2,"790":2,"791":2,"792":2,"793":3,"794":1,"795":2,"796":2,"797":2,"798":1,"817":2,"821":1,"822":1,"823":1,"833":1,"834":1,"837":2,"845":3,"848":1,"850":1,"853":1,"854":2,"855":4,"859":1,"862":3,"865":1,"867":1,"869":2,"871":4,"873":2,"874":2,"878":1,"884":2,"887":1,"889":1,"895":1,"901":2,"912":2,"918":1,"919":1,"920":1,"923":1,"924":1,"928":3,"929":1,"932":3,"933":1,"935":1,"936":2,"937":1,"938":1,"940":1,"942":2,"943":1,"946":1,"949":1,"950":1,"954":1,"956":1,"960":2,"964":1,"965":1,"966":1,"968":1,"970":1,"978":1,"986":1,"1000":2,"1001":2,"1006":1,"1010":1,"1012":1,"1020":1,"1023":1,"1026":1,"1027":2,"1028":1,"1031":2,"1032":1,"1033":1,"1035":1,"1037":1,"1039":4,"1042":1,"1046":2,"1048":2,"1049":1,"1052":1,"1053":1,"1056":1,"1059":1,"1061":1,"1064":1,"1066":1,"1068":1,"1071":1,"1073":2,"1077":1,"1079":1,"1083":1,"1084":1,"1101":2,"1103":1,"1104":1,"1109":1,"1115":1,"1116":1,"1136":1,"1142":1,"1144":1,"1149":1,"1150":1,"1151":2,"1155":2,"1158":1,"1161":2,"1167":2,"1168":1,"1182":1,"1183":4,"1187":2,"1188":2,"1195":1,"1199":3,"1202":1,"1221":2,"1230":1,"1231":1,"1233":1,"1241":1,"1261":1,"1266":1,"1296":1,"1304":1,"1308":1,"1309":3,"1310":1,"1312":1,"1314":2,"1316":1,"1317":1,"1319":1,"1320":3,"1327":3,"1328":2,"1337":2,"1339":1,"1361":2,"1362":3,"1363":1,"1365":1,"1367":1,"1371":1,"1373":1,"1374":1,"1375":1,"1386":1,"1392":1,"1393":1,"1404":1,"1405":1,"1411":1,"1412":1,"1417":1,"1421":1,"1442":1,"1458":1,"1460":1,"1461":1,"1462":1,"1464":1,"1465":1,"1474":1,"1478":1,"1482":2,"1483":1,"1488":3,"1489":1,"1495":1,"1502":1,"1503":1,"1508":2,"1522":1,"1524":3,"1525":1,"1528":1,"1535":1,"1541":2,"1558":1,"1569":1,"1572":1,"1589":1,"1593":1,"1598":1,"1609":1,"1611":1,"1612":2,"1616":1,"1617":4,"1620":2,"1626":4,"1627":4,"1628":1,"1630":1,"1634":1,"1635":1,"1638":1,"1657":1,"1665":1,"1666":1,"1673":1}}],["thundering",{"2":{"1440":1}}],["thumb",{"0":{"231":1,"999":1},"2":{"376":1,"1160":1}}],["though",{"2":{"871":1,"1598":1}}],["those",{"2":{"270":1,"272":1,"410":1,"716":1,"838":1,"1115":1,"1305":1}}],["thin",{"2":{"1350":1,"1508":1,"1625":1}}],["things",{"2":{"931":1,"1504":1}}],["think",{"2":{"871":1}}],["this",{"0":{"97":1,"272":1,"274":1,"365":1,"933":1,"1495":1,"1538":1,"1673":1},"1":{"1539":1},"2":{"0":2,"1":1,"3":1,"14":1,"37":2,"38":1,"40":1,"54":1,"67":1,"75":1,"80":1,"87":1,"89":1,"91":1,"92":1,"98":1,"106":1,"119":1,"120":1,"127":1,"152":1,"164":1,"179":1,"196":1,"205":1,"213":1,"220":1,"232":1,"235":1,"236":1,"240":1,"251":1,"252":1,"255":1,"263":1,"265":1,"273":1,"279":1,"287":1,"303":1,"305":1,"307":1,"308":1,"310":1,"316":1,"319":1,"320":2,"321":1,"324":1,"325":1,"326":1,"327":1,"331":1,"342":1,"359":1,"361":1,"364":1,"369":1,"377":1,"385":1,"391":1,"395":1,"399":1,"406":1,"412":1,"418":1,"425":1,"428":1,"443":1,"445":2,"449":1,"456":1,"457":1,"459":1,"460":1,"463":1,"476":1,"477":1,"480":1,"491":1,"492":1,"499":1,"501":1,"511":1,"512":1,"515":1,"521":1,"532":1,"535":1,"537":1,"539":1,"540":1,"541":1,"548":1,"575":1,"583":1,"587":1,"589":1,"601":1,"641":1,"642":1,"645":1,"703":1,"715":2,"717":1,"721":1,"722":1,"723":1,"724":1,"751":1,"793":1,"794":1,"795":1,"819":1,"823":1,"828":1,"831":1,"832":1,"842":1,"844":1,"847":1,"850":1,"857":1,"858":1,"862":1,"864":1,"871":2,"872":1,"873":1,"879":1,"881":1,"884":1,"888":1,"890":1,"900":1,"912":1,"913":1,"930":1,"932":1,"938":2,"949":1,"952":1,"954":1,"955":1,"957":1,"961":1,"964":1,"967":1,"969":1,"977":1,"978":1,"981":1,"1000":2,"1010":1,"1011":1,"1012":1,"1033":1,"1037":1,"1042":1,"1043":1,"1051":1,"1056":1,"1057":1,"1058":1,"1059":1,"1068":1,"1075":1,"1079":1,"1084":1,"1096":1,"1107":1,"1116":1,"1118":1,"1137":1,"1140":1,"1144":1,"1146":1,"1149":1,"1150":1,"1160":1,"1161":1,"1163":1,"1165":1,"1167":1,"1180":1,"1181":1,"1194":1,"1195":1,"1196":1,"1199":1,"1221":1,"1223":1,"1227":1,"1228":1,"1233":1,"1240":1,"1251":1,"1252":1,"1256":1,"1264":2,"1272":1,"1305":2,"1314":1,"1316":1,"1323":1,"1336":1,"1337":1,"1338":1,"1339":1,"1351":1,"1355":1,"1359":1,"1372":1,"1373":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1382":1,"1386":1,"1409":1,"1423":1,"1425":1,"1439":1,"1442":1,"1456":1,"1458":1,"1472":1,"1474":1,"1482":1,"1489":1,"1494":1,"1508":1,"1525":1,"1526":1,"1539":1,"1541":1,"1552":1,"1553":1,"1554":1,"1566":1,"1572":1,"1575":1,"1580":1,"1597":1,"1602":1,"1605":1,"1611":2,"1614":1,"1617":1,"1626":2,"1627":2,"1628":1,"1632":1,"1639":1}}],["than",{"2":{"252":1,"266":1,"478":1,"513":1,"1044":1,"1418":2,"1422":2,"1597":1,"1655":1}}],["that",{"0":{"272":1,"402":1,"403":1,"1151":1,"1237":1},"2":{"2":1,"39":1,"118":1,"123":1,"132":1,"134":1,"163":1,"186":1,"196":1,"197":2,"206":1,"251":1,"252":1,"273":1,"274":1,"276":2,"279":1,"281":1,"286":1,"287":1,"343":1,"351":1,"365":1,"366":3,"369":1,"378":1,"390":2,"391":1,"392":1,"394":1,"395":1,"411":1,"412":2,"419":1,"421":1,"432":1,"433":2,"447":1,"449":1,"456":1,"458":1,"459":1,"463":2,"491":1,"499":1,"511":1,"715":1,"723":4,"724":1,"725":1,"777":1,"814":1,"820":1,"878":1,"879":1,"889":1,"912":1,"925":1,"926":1,"931":1,"932":2,"935":1,"942":1,"943":3,"953":1,"955":1,"961":1,"1007":1,"1009":1,"1025":1,"1033":1,"1036":1,"1037":1,"1044":1,"1051":1,"1052":1,"1068":1,"1071":2,"1073":1,"1078":1,"1104":2,"1112":1,"1134":1,"1155":1,"1180":1,"1227":1,"1243":1,"1268":1,"1270":1,"1308":1,"1328":1,"1338":1,"1359":1,"1365":1,"1378":1,"1381":1,"1393":1,"1412":1,"1495":1,"1567":1,"1591":1,"1593":1,"1627":1,"1633":1}}],["throwerror",{"2":{"1526":1}}],["throwing",{"2":{"475":1,"741":1,"751":1,"1161":1,"1187":1,"1245":1,"1251":1,"1254":1,"1256":1,"1264":1}}],["thrown",{"2":{"433":1,"744":1,"1017":1,"1042":1}}],["throws",{"2":{"395":1,"404":1,"469":1,"470":1,"471":1,"491":1,"746":1,"766":1,"1025":1,"1037":1,"1162":1,"1164":1,"1173":1,"1180":3,"1202":1,"1223":1,"1229":1,"1231":1,"1233":1,"1241":1,"1251":1,"1252":1,"1254":2,"1255":1,"1339":1,"1526":1}}],["throw",{"0":{"1339":1,"1526":1},"2":{"291":3,"392":1,"404":1,"443":1,"459":1,"491":1,"853":1,"859":2,"1116":1,"1230":1,"1248":1,"1249":1,"1335":1,"1526":1}}],["through",{"2":{"215":1,"359":1,"449":1,"891":1,"932":1,"950":1,"952":1,"965":1,"1042":1,"1100":1,"1111":1,"1359":1,"1365":1,"1382":1}}],["throughput",{"0":{"152":1},"2":{"152":1,"857":1,"1419":1,"1650":1}}],["three",{"2":{"183":1,"499":1,"1040":1,"1328":1,"1618":1}}],["threadcount",{"2":{"1039":1,"1052":1}}],["threaded",{"0":{"1372":1},"2":{"344":1,"347":1,"361":1,"838":1,"850":1}}],["thread>",{"2":{"282":1}}],["threading",{"0":{"266":1,"378":1,"449":1},"2":{"272":1}}],["threads",{"0":{"1014":1,"1020":1},"2":{"142":1,"253":1,"265":1,"266":1,"273":1,"276":1,"277":1,"322":1,"327":1,"383":1,"428":2,"435":3,"436":1,"440":1,"442":1,"826":1,"831":1,"836":1,"850":1,"888":1,"892":1,"893":3,"898":2,"899":3,"900":1,"929":1,"933":3,"935":4,"942":2,"948":1,"1001":1,"1007":2,"1012":1,"1013":1,"1014":1,"1020":2,"1023":1,"1027":2,"1033":2,"1038":3,"1039":3,"1044":2,"1046":1,"1048":1,"1051":2,"1059":1,"1065":1,"1066":1,"1479":1,"1495":1,"1504":2,"1505":2,"1524":1,"1628":2}}],["threadpool>",{"2":{"893":1}}],["threadpool",{"0":{"941":1,"942":1,"1033":2,"1038":1},"1":{"1034":2,"1035":2,"1036":2,"1037":2,"1038":2,"1039":2,"1040":2,"1041":2,"1042":2,"1043":2,"1044":2,"1045":2,"1046":2,"1047":2,"1048":2,"1049":2,"1050":2,"1051":2,"1052":2},"2":{"70":1,"873":1,"890":2,"891":2,"893":1,"899":2,"1022":1,"1046":1,"1628":1}}],["threadpoolexecutor",{"0":{"890":1,"891":1},"1":{"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"902":1},"2":{"70":1,"891":2,"902":1,"1628":1}}],["thread",{"0":{"255":1,"269":1,"282":1,"301":1,"360":1,"428":1,"849":1,"1009":1,"1064":1,"1374":1,"1504":1,"1516":1,"1566":1,"1575":1},"1":{"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"850":1,"851":1,"1517":1,"1518":1,"1519":1},"2":{"69":1,"81":1,"84":3,"103":2,"137":1,"251":1,"252":1,"253":4,"255":3,"257":2,"259":1,"261":1,"264":3,"265":4,"266":3,"269":3,"271":3,"272":2,"276":1,"282":1,"297":1,"306":1,"324":1,"325":1,"331":1,"339":1,"343":1,"344":1,"345":1,"346":1,"347":3,"353":2,"355":1,"361":1,"363":1,"365":1,"366":3,"369":1,"372":1,"373":1,"376":1,"377":1,"378":5,"383":1,"384":1,"392":1,"393":1,"394":1,"406":1,"426":1,"428":4,"429":1,"433":1,"435":2,"438":2,"442":3,"443":1,"444":1,"445":2,"447":3,"449":5,"453":2,"456":3,"457":1,"461":1,"462":1,"475":1,"484":2,"498":1,"509":1,"510":1,"811":1,"812":1,"813":1,"836":1,"870":1,"890":1,"893":1,"895":1,"931":1,"932":1,"933":1,"935":1,"936":1,"943":1,"946":1,"1009":2,"1020":2,"1032":1,"1033":1,"1043":1,"1044":1,"1050":1,"1051":1,"1059":1,"1065":1,"1068":2,"1071":3,"1073":2,"1076":1,"1077":2,"1096":1,"1361":1,"1364":2,"1373":1,"1374":2,"1418":1,"1482":2,"1490":1,"1495":1,"1508":1,"1515":1,"1516":1,"1519":1,"1566":1,"1572":1,"1575":3,"1579":1,"1628":1,"1650":1,"1669":1}}],["their",{"2":{"265":1,"1028":1}}],["these",{"0":{"483":1},"2":{"189":1,"203":1,"214":1,"336":1,"397":1,"412":1,"421":1,"898":1,"931":1,"962":1,"1288":1,"1303":1,"1304":1,"1376":1,"1381":1,"1488":1,"1500":1,"1539":1,"1556":1}}],["there",{"2":{"111":1,"121":1,"145":1,"256":1,"397":1,"400":1,"453":1,"463":1,"502":1,"1028":1,"1040":1,"1044":1,"1045":1,"1104":1,"1264":1,"1363":1,"1371":1}}],["themselves",{"2":{"1048":1}}],["theme=",{"2":{"1235":1}}],["theme",{"2":{"939":1,"1225":1,"1229":5,"1235":4}}],["them",{"2":{"105":1,"284":1,"331":1,"343":1,"375":1,"378":1,"393":1,"431":1,"537":1,"538":1,"936":1,"948":1,"951":1,"1112":1,"1328":1,"1359":1,"1474":1,"1525":2,"1597":1,"1598":1,"1618":1}}],["then",{"0":{"1132":1},"2":{"84":1,"165":1,"195":1,"196":1,"238":2,"255":1,"265":1,"316":1,"426":1,"479":2,"498":1,"512":1,"935":1,"936":1,"1013":1,"1032":1,"1036":1,"1043":1,"1046":1,"1073":1,"1111":1,"1112":1,"1124":1,"1129":1,"1130":1,"1230":1,"1233":1,"1288":1,"1291":1,"1352":1,"1356":1,"1379":1,"1497":1,"1617":1}}],["they",{"2":{"40":1,"105":1,"232":1,"321":1,"343":1,"344":1,"372":1,"378":1,"395":1,"449":1,"480":1,"937":1,"948":1,"949":2,"965":1,"1045":1,"1304":2,"1323":1,"1376":1,"1379":1,"1442":1,"1488":1}}],["the",{"0":{"120":1,"121":1,"122":1,"123":1,"253":1,"268":1,"269":1,"484":1,"654":1,"723":1,"847":1,"931":1,"967":1,"1075":1,"1121":1,"1123":1,"1126":1,"1134":1,"1336":1,"1560":1,"1564":1,"1593":1},"1":{"1122":1,"1123":1,"1561":1,"1562":1,"1563":1,"1564":1},"2":{"0":4,"2":2,"3":2,"4":2,"13":1,"14":1,"17":2,"35":1,"36":1,"37":4,"39":2,"40":1,"53":1,"54":1,"61":1,"66":2,"67":1,"81":2,"84":3,"91":1,"92":1,"93":1,"103":1,"107":2,"110":1,"111":3,"117":1,"118":1,"119":6,"120":3,"121":4,"125":1,"126":2,"127":5,"128":4,"130":3,"132":1,"134":1,"146":1,"164":1,"168":3,"172":1,"173":1,"174":1,"180":1,"181":1,"188":1,"189":1,"197":1,"199":1,"200":2,"204":1,"206":1,"209":2,"210":1,"211":1,"213":3,"218":2,"219":1,"222":1,"225":1,"226":3,"230":1,"232":3,"234":2,"235":1,"237":2,"238":1,"240":1,"251":2,"252":2,"253":1,"255":2,"256":2,"257":3,"259":2,"261":1,"263":1,"265":5,"266":2,"268":1,"269":4,"271":5,"272":2,"273":3,"274":1,"276":1,"278":4,"284":1,"285":1,"286":3,"291":1,"292":3,"296":1,"297":3,"303":1,"305":2,"307":2,"309":4,"310":4,"316":5,"317":1,"318":2,"320":3,"321":2,"323":2,"324":2,"325":5,"328":1,"330":4,"331":1,"335":1,"336":3,"339":2,"343":5,"344":2,"347":4,"350":1,"351":3,"352":1,"353":3,"355":1,"362":1,"363":3,"364":5,"366":5,"368":2,"369":1,"372":3,"373":2,"374":3,"375":5,"376":2,"377":2,"378":3,"379":2,"381":1,"383":1,"384":3,"385":2,"386":3,"388":6,"390":1,"391":1,"392":1,"393":5,"394":1,"395":2,"397":3,"400":9,"404":2,"406":6,"408":4,"409":1,"410":1,"411":1,"412":4,"413":1,"417":2,"418":1,"420":1,"422":2,"426":2,"427":1,"428":1,"431":2,"432":6,"433":2,"435":2,"438":2,"442":3,"443":2,"445":2,"447":3,"448":1,"449":10,"452":5,"453":2,"456":4,"458":4,"459":3,"460":1,"461":2,"462":4,"467":2,"468":1,"469":1,"470":1,"472":1,"474":1,"475":3,"476":2,"478":4,"480":1,"483":4,"484":6,"488":3,"490":1,"491":3,"497":2,"498":7,"499":2,"501":1,"502":2,"505":2,"507":2,"511":1,"512":2,"513":3,"514":3,"515":1,"516":1,"518":3,"521":1,"523":1,"533":1,"534":2,"535":1,"540":1,"542":2,"545":1,"550":1,"551":2,"553":1,"564":2,"565":1,"567":1,"572":1,"575":2,"577":2,"579":2,"592":1,"601":1,"617":1,"630":1,"632":3,"633":2,"635":1,"637":3,"638":1,"640":1,"641":1,"642":1,"644":1,"646":1,"647":1,"649":2,"651":1,"653":1,"661":1,"662":1,"675":1,"678":2,"679":1,"681":4,"684":1,"685":1,"688":1,"693":1,"694":1,"696":1,"703":2,"706":1,"708":4,"713":1,"715":3,"716":1,"717":1,"718":1,"723":6,"724":1,"725":1,"732":1,"733":2,"734":1,"736":1,"737":1,"746":1,"749":1,"755":1,"759":1,"777":3,"779":1,"783":2,"787":8,"793":1,"794":2,"798":1,"800":1,"811":3,"812":1,"813":1,"814":1,"815":1,"816":2,"819":1,"821":3,"823":1,"824":1,"825":1,"827":1,"828":1,"829":3,"832":1,"833":1,"836":1,"838":1,"844":2,"847":2,"851":3,"855":1,"859":1,"864":1,"867":1,"868":1,"871":1,"872":1,"873":1,"874":5,"875":1,"877":1,"879":2,"880":2,"881":2,"883":1,"887":4,"888":5,"890":1,"891":1,"893":2,"895":3,"897":1,"900":1,"901":2,"903":1,"912":3,"913":2,"914":1,"915":4,"916":1,"917":3,"918":1,"921":1,"924":1,"925":3,"926":1,"927":1,"929":1,"930":1,"931":2,"932":10,"933":2,"935":6,"936":3,"937":2,"938":4,"939":3,"942":2,"943":1,"948":2,"949":2,"950":7,"952":1,"953":3,"956":1,"958":2,"960":1,"964":1,"965":2,"966":2,"968":4,"969":1,"970":1,"972":1,"973":1,"975":1,"976":1,"978":2,"982":1,"983":1,"985":3,"1000":3,"1001":3,"1003":1,"1004":1,"1006":2,"1007":3,"1008":1,"1010":1,"1011":1,"1012":1,"1013":1,"1015":1,"1017":1,"1018":1,"1019":2,"1025":1,"1026":2,"1027":4,"1030":1,"1033":1,"1035":4,"1036":5,"1037":1,"1038":5,"1039":1,"1041":4,"1042":3,"1043":2,"1044":7,"1046":2,"1048":2,"1049":1,"1051":7,"1052":1,"1053":2,"1054":1,"1056":1,"1057":1,"1059":1,"1067":3,"1068":4,"1071":4,"1073":6,"1077":4,"1078":2,"1079":1,"1088":1,"1089":2,"1095":1,"1096":4,"1097":2,"1098":1,"1099":2,"1101":3,"1102":1,"1103":2,"1104":1,"1109":4,"1114":1,"1116":1,"1117":1,"1118":1,"1120":1,"1124":1,"1126":2,"1132":2,"1136":1,"1139":1,"1146":1,"1147":2,"1150":2,"1156":1,"1160":1,"1163":1,"1164":3,"1165":1,"1167":2,"1180":1,"1182":1,"1199":5,"1207":1,"1220":1,"1227":1,"1228":1,"1230":1,"1241":1,"1242":1,"1247":1,"1266":1,"1272":1,"1281":2,"1288":1,"1291":1,"1303":1,"1304":1,"1308":1,"1309":1,"1312":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1319":1,"1320":1,"1322":1,"1323":2,"1324":1,"1327":1,"1328":3,"1329":1,"1336":1,"1338":1,"1339":2,"1350":2,"1351":1,"1352":1,"1354":5,"1355":1,"1356":1,"1358":5,"1359":5,"1361":2,"1362":3,"1363":2,"1364":2,"1365":3,"1368":1,"1369":3,"1371":1,"1373":1,"1374":1,"1375":2,"1376":2,"1377":1,"1378":4,"1379":4,"1381":1,"1382":3,"1389":1,"1392":1,"1393":1,"1397":1,"1407":2,"1409":4,"1411":3,"1412":2,"1416":1,"1423":1,"1425":2,"1427":1,"1431":1,"1434":2,"1437":1,"1440":1,"1442":3,"1444":2,"1456":1,"1457":3,"1458":1,"1473":1,"1474":1,"1476":1,"1478":1,"1482":6,"1483":2,"1488":1,"1490":1,"1497":1,"1502":1,"1503":1,"1504":2,"1506":2,"1507":1,"1509":1,"1514":1,"1515":1,"1519":3,"1521":1,"1522":2,"1524":1,"1525":1,"1532":1,"1539":1,"1551":1,"1553":1,"1557":1,"1558":1,"1567":2,"1570":1,"1572":1,"1574":1,"1575":1,"1589":1,"1591":1,"1592":2,"1596":1,"1597":2,"1599":1,"1606":1,"1610":1,"1611":1,"1614":1,"1615":1,"1617":1,"1618":1,"1620":1,"1622":1,"1624":1,"1625":2,"1628":1,"1630":1,"1632":1,"1637":3,"1647":1}}],["hyperlink=1",{"2":{"1502":1}}],["hyperlinks",{"0":{"1502":1},"2":{"1488":1,"1494":1}}],["hyperlink",{"2":{"1488":1,"1502":1}}],["href=",{"2":{"968":1}}],["humans",{"2":{"1207":1}}],["human",{"2":{"928":1,"955":1,"1420":1}}],["huge",{"2":{"237":1}}],["html",{"2":{"924":1,"927":1,"939":1,"962":2,"968":3,"1353":2,"1357":2}}],["httpie",{"0":{"314":1}}],["httpcacheappconfig",{"2":{"195":1}}],["httpserver",{"0":{"935":1,"1000":1,"1001":1},"1":{"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1},"2":{"932":1,"971":2,"1000":2,"1001":1,"1006":1,"1022":1,"1028":1,"1066":1}}],["https",{"0":{"161":1},"2":{"161":1,"242":1,"243":1,"1123":1}}],["httpapi",{"2":{"108":1,"1627":1}}],["httpmiddleware",{"0":{"182":1},"2":{"55":1,"64":3,"182":1}}],["http",{"0":{"14":1,"64":1,"80":1,"92":1,"100":1,"195":1,"235":1,"308":1,"618":1,"800":1,"903":1,"912":1,"920":1,"1000":1,"1310":1,"1498":1,"1548":1,"1563":1,"1606":1,"1627":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"808":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1549":1,"1550":1,"1551":1},"2":{"0":1,"14":1,"17":1,"30":1,"36":1,"37":1,"54":1,"55":1,"64":1,"79":1,"80":2,"90":3,"92":1,"93":1,"100":1,"106":1,"108":4,"109":3,"120":1,"127":1,"130":1,"164":1,"165":5,"180":1,"195":4,"197":1,"199":1,"204":1,"206":1,"216":2,"227":1,"239":1,"308":2,"309":1,"310":4,"312":2,"313":1,"318":1,"319":1,"320":2,"501":1,"507":1,"511":2,"512":1,"515":2,"615":1,"618":1,"751":1,"800":1,"802":1,"808":1,"814":1,"821":1,"871":3,"874":1,"888":1,"890":1,"900":1,"901":1,"903":1,"905":1,"911":1,"912":2,"913":4,"915":1,"920":1,"921":2,"928":1,"931":1,"932":2,"937":1,"955":1,"956":1,"965":1,"972":1,"973":1,"974":2,"978":1,"985":1,"990":1,"992":1,"993":1,"994":1,"1000":1,"1001":2,"1003":2,"1004":1,"1022":1,"1051":1,"1053":2,"1056":1,"1118":1,"1127":3,"1130":1,"1135":1,"1308":1,"1309":1,"1310":2,"1311":3,"1313":3,"1314":2,"1351":3,"1352":5,"1353":4,"1354":2,"1355":3,"1356":5,"1357":4,"1358":2,"1361":1,"1370":1,"1377":2,"1378":2,"1379":2,"1380":2,"1390":1,"1495":1,"1497":1,"1498":1,"1501":1,"1505":1,"1517":1,"1536":1,"1554":1,"1556":2,"1571":1,"1599":1,"1614":1,"1617":1,"1622":2,"1626":1,"1627":7,"1641":2,"1644":1,"1645":1,"1668":1}}],["hh",{"2":{"839":4,"858":1,"1514":1}}],["h",{"2":{"90":1,"195":1,"197":1,"265":1,"334":1,"351":2,"409":1,"528":1,"552":1,"562":1,"568":1,"582":1,"625":1,"698":1,"994":1,"1076":2,"1310":1,"1311":1,"1313":3,"1314":2}}],["hpp",{"0":{"1338":1},"1":{"1339":1},"2":{"40":2,"279":1,"285":1,"287":1,"297":1,"395":1,"463":1,"584":1,"586":1,"794":1,"836":1,"865":2,"1000":1,"1069":1,"1136":1,"1157":1,"1158":1,"1187":1,"1188":1,"1208":1,"1209":2,"1221":1,"1245":1,"1265":1,"1266":1,"1307":1,"1324":6,"1377":1,"1378":1,"1379":1,"1380":2,"1474":1,"1494":1,"1525":1,"1536":1,"1553":1,"1554":1}}],["hpp>",{"2":{"3":1,"11":1,"12":1,"15":1,"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"64":2,"68":1,"70":3,"79":1,"84":4,"85":3,"86":5,"89":1,"93":1,"94":1,"95":2,"96":1,"108":4,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":1,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":1,"230":1,"235":1,"281":1,"282":1,"283":1,"293":2,"310":6,"323":2,"332":1,"337":1,"348":1,"368":4,"392":2,"396":1,"402":1,"404":1,"406":2,"413":5,"424":3,"425":3,"426":1,"429":1,"442":3,"443":3,"453":2,"457":4,"459":5,"464":1,"476":2,"477":2,"481":1,"494":3,"497":2,"507":1,"512":5,"513":1,"584":1,"586":1,"704":1,"711":2,"714":1,"726":8,"743":1,"748":1,"754":1,"765":1,"769":1,"776":1,"782":1,"789":1,"790":1,"791":1,"792":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"825":1,"839":1,"864":1,"871":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"947":1,"966":1,"967":1,"968":1,"971":2,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1075":1,"1080":1,"1083":1,"1096":1,"1106":1,"1107":1,"1108":1,"1112":1,"1137":1,"1159":1,"1182":2,"1189":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1217":1,"1218":1,"1219":1,"1222":1,"1246":1,"1267":1,"1309":2,"1310":2,"1311":1,"1312":1,"1313":1,"1314":1,"1318":1,"1319":1,"1320":1,"1321":1,"1324":1,"1353":5,"1357":5,"1360":2,"1372":1,"1377":4,"1378":4,"1379":4,"1380":1,"1383":1,"1410":3,"1426":1,"1443":4,"1458":1,"1491":4,"1496":1,"1497":1,"1498":1,"1509":1,"1529":1,"1537":1,"1539":1,"1541":1,"1542":1,"1543":1,"1545":1,"1546":1,"1547":1,"1549":1,"1550":1,"1551":1,"1559":1,"1561":1,"1562":1,"1563":1,"1564":1,"1574":2,"1587":1,"1589":1,"1593":1,"1599":5,"1600":1,"1602":1,"1603":1,"1604":1,"1612":2,"1613":2,"1614":3,"1615":3,"1627":4,"1628":3,"1634":1,"1639":1}}],["hi",{"2":{"1227":1,"1280":1,"1287":2,"1290":1}}],["history",{"0":{"660":1},"2":{"604":1,"659":4,"660":3,"1340":1}}],["hit",{"2":{"512":5}}],["hides",{"2":{"872":1}}],["hide",{"2":{"499":1,"1497":1}}],["hiding",{"2":{"384":1}}],["hidden",{"2":{"2":1,"36":1,"39":1,"111":1,"121":1,"125":1,"134":1,"144":1,"145":1,"163":1,"322":1,"327":1,"330":1,"331":1,"418":1,"541":1,"553":1,"564":1,"588":1,"662":1,"745":1,"767":1,"780":1,"800":1,"842":1,"871":1,"872":1,"903":1,"958":1,"1264":1,"1317":1,"1493":1,"1507":1,"1632":1,"1647":1,"1658":1}}],["hints",{"2":{"882":1,"895":1,"972":1,"973":1,"1495":1,"1498":1,"1505":1}}],["hint",{"2":{"89":2,"703":1,"708":1,"883":1,"993":1,"1310":1,"1311":1,"1312":1,"1495":1}}],["highest",{"2":{"1038":1}}],["higher",{"2":{"251":1,"331":1,"343":1,"361":1,"362":1,"411":1,"425":1,"712":1,"865":1,"872":1,"883":1,"1035":1,"1036":1,"1078":1,"1392":1,"1434":1}}],["high",{"0":{"45":1,"127":1,"1216":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"1217":1,"1218":1,"1219":1},"2":{"29":1,"40":1,"53":1,"81":1,"142":1,"144":1,"199":1,"848":1,"862":1,"912":1,"930":1,"972":1,"984":1,"1209":2,"1220":1,"1361":1,"1411":1,"1412":1,"1444":1,"1445":1,"1624":1,"1648":1,"1655":1,"1657":1,"1673":1}}],["hazard",{"2":{"868":1}}],["hardening",{"2":{"1124":1}}],["hard",{"2":{"859":1,"1180":1}}],["hardware",{"0":{"151":1},"2":{"151":1,"204":1,"435":1,"935":1,"1009":1,"1048":1,"1638":2}}],["happening",{"2":{"861":1}}],["happen",{"2":{"255":1,"266":1}}],["happens",{"0":{"522":1,"636":1},"2":{"2":1,"36":1,"39":1,"127":1,"269":1,"512":1,"926":1,"986":1,"1019":1,"1335":1}}],["have",{"2":{"237":1,"379":1,"381":1,"386":1,"942":1,"1035":1,"1129":1,"1147":1,"1156":1,"1163":1,"1372":1,"1580":1,"1616":1,"1640":1}}],["half",{"2":{"220":1}}],["handled",{"2":{"327":1,"655":1,"1060":1,"1404":1,"1525":1}}],["handles",{"2":{"204":2,"206":1,"931":1,"1004":1,"1606":1,"1614":1,"1622":1}}],["handle",{"0":{"351":1,"1075":1},"2":{"84":1,"85":1,"86":3,"108":2,"211":1,"237":1,"270":1,"310":1,"316":2,"319":1,"323":2,"326":1,"327":1,"334":1,"351":2,"366":1,"375":2,"386":1,"388":1,"390":1,"391":1,"397":1,"400":2,"404":1,"406":2,"408":1,"409":3,"424":1,"425":2,"456":1,"492":1,"746":1,"913":1,"936":1,"943":1,"1008":1,"1019":1,"1056":1,"1071":2,"1073":3,"1077":2,"1083":1,"1084":1,"1088":1,"1092":1,"1093":1,"1611":1,"1614":2,"1615":1,"1616":1,"1620":1,"1622":1,"1625":1,"1626":2,"1627":2}}],["handlers",{"0":{"149":1,"188":1,"1314":1},"2":{"35":1,"80":1,"81":1,"103":1,"122":1,"149":1,"317":1,"821":2,"822":1,"874":1,"889":1,"900":1,"902":1,"912":1,"921":1,"926":2,"938":1,"951":1,"959":1,"986":1,"999":1,"1314":1,"1618":2,"1625":1,"1630":1,"1637":1}}],["handler",{"0":{"131":1,"815":1,"926":1},"2":{"19":1,"20":1,"21":1,"22":1,"34":1,"35":1,"36":1,"62":1,"66":1,"108":1,"121":1,"127":1,"134":1,"145":1,"146":1,"167":1,"168":2,"188":1,"211":1,"226":2,"308":1,"318":1,"369":1,"815":4,"816":2,"818":2,"819":2,"824":1,"888":2,"890":1,"918":1,"925":2,"926":1,"929":1,"932":1,"937":2,"945":1,"949":1,"957":1,"974":2,"980":1,"1004":1,"1006":1,"1026":2,"1032":1,"1054":1,"1308":1,"1519":2,"1613":2,"1614":1,"1621":2,"1623":1,"1627":1}}],["handling",{"0":{"238":1,"368":1,"741":1,"749":1,"760":1,"775":1,"927":1,"979":1,"980":1,"1060":1,"1062":1,"1202":1,"1595":1},"1":{"742":1},"2":{"80":1,"111":1,"199":2,"204":1,"205":1,"296":1,"297":1,"307":1,"319":1,"322":1,"331":1,"345":1,"713":1,"724":1,"734":1,"755":1,"770":1,"931":1,"941":1,"949":1,"955":1,"959":1,"960":1,"972":1,"973":1,"983":1,"1001":1,"1017":1,"1026":1,"1053":1,"1117":1,"1158":1,"1252":1,"1256":1,"1327":1,"1376":1,"1490":1,"1528":1,"1535":1,"1616":1,"1669":1,"1671":1}}],["hasauth",{"2":{"806":2,"909":2,"994":2}}],["hashes",{"2":{"526":1,"532":1}}],["hash",{"2":{"509":1,"625":1,"698":1}}],["hashing",{"0":{"1082":1},"1":{"1083":1},"2":{"428":1,"942":1,"1079":1,"1095":1}}],["has",{"0":{"715":1},"2":{"27":1,"152":1,"176":2,"188":1,"219":1,"252":1,"277":1,"391":1,"531":1,"719":1,"723":1,"779":1,"806":2,"829":1,"830":1,"909":2,"914":1,"918":1,"933":1,"937":1,"950":1,"966":1,"994":2,"1026":1,"1038":1,"1097":3,"1314":1,"1328":1,"1377":1,"1378":1,"1379":3,"1543":1,"1575":1,"1609":1,"1612":3,"1614":1,"1618":1,"1620":1,"1626":1}}],["hour",{"2":{"1663":3}}],["housekeeping",{"2":{"1078":1}}],["home",{"2":{"484":1,"569":1,"599":1,"600":1}}],["homebrew",{"0":{"246":1}}],["hop",{"2":{"347":1,"457":1,"1065":1}}],["holding",{"2":{"1104":1}}],["holder",{"2":{"359":1}}],["holds",{"2":{"276":1,"723":2,"955":1,"1612":1,"1613":1,"1620":1}}],["hold",{"2":{"270":1}}],["hot",{"0":{"148":1},"2":{"142":1,"231":1,"510":1,"546":1,"848":1,"862":1,"1242":1,"1567":1,"1597":1}}],["hooks",{"0":{"71":1,"954":1},"1":{"72":1,"73":1,"74":1},"2":{"67":1,"949":1,"954":4,"957":3}}],["hostname",{"2":{"286":1,"290":1,"466":1}}],["host",{"2":{"6":1,"10":2,"11":3,"176":2,"288":1,"289":1,"415":3,"417":1,"420":1,"424":1,"425":1,"466":4,"478":1,"610":1,"611":1,"616":1,"805":4,"825":1,"826":1,"830":4,"908":4,"994":4,"1104":1,"1106":1,"1107":1,"1108":1,"1112":1,"1115":1,"1117":1,"1127":1,"1186":2,"1204":1,"1281":1,"1322":1,"1347":1,"1348":1,"1476":2,"1497":1,"1498":2,"1505":2,"1506":1}}],["how",{"0":{"265":1,"315":1,"389":1,"888":1,"900":1,"1029":1,"1576":1},"1":{"316":1,"317":1,"318":1,"390":1,"391":1,"1030":1,"1031":1},"2":{"0":1,"37":1,"97":4,"164":1,"199":1,"308":1,"321":1,"329":1,"364":2,"424":1,"871":1,"930":1,"949":1,"1000":3,"1079":1,"1160":1,"1328":1,"1363":1,"1378":1,"1382":1,"1425":1,"1458":1,"1572":2,"1611":1,"1617":1}}],["herd",{"2":{"1440":1}}],["here",{"2":{"84":1,"235":1,"323":1,"339":1,"340":1,"341":1,"392":1,"432":1,"442":2,"453":1,"871":1,"971":1,"1381":1}}],["heuristic",{"2":{"1043":1,"1242":1}}],["hexadecimal",{"2":{"1573":1}}],["hex",{"2":{"793":1,"1083":4,"1550":1}}],["hence",{"2":{"310":1}}],["heavier",{"2":{"1597":1}}],["heavy",{"0":{"148":1,"938":1,"969":1,"977":1,"1031":1,"1059":1},"2":{"142":1,"149":1,"231":1,"325":2,"330":1,"339":1,"376":2,"442":1,"453":1,"462":1,"814":3,"822":1,"836":1,"838":1,"902":1,"931":2,"932":2,"933":3,"936":1,"938":5,"941":1,"942":1,"943":1,"945":1,"946":1,"948":3,"964":1,"969":2,"972":1,"973":1,"974":1,"977":2,"984":1,"1031":3,"1033":1,"1051":2,"1053":1,"1059":3,"1064":1,"1065":1,"1067":1,"1078":2}}],["head",{"0":{"978":1,"1026":1},"2":{"814":1,"937":2,"972":1,"978":2,"983":1,"1006":1,"1026":4,"1060":1}}],["header=value",{"2":{"507":2}}],["headers",{"0":{"27":1,"55":1,"160":1,"176":1,"190":1,"802":1,"805":1,"865":1,"905":1,"908":1,"994":1,"1360":1,"1410":1,"1443":1},"2":{"24":1,"87":1,"101":1,"122":1,"131":2,"138":1,"155":1,"160":1,"168":2,"176":2,"184":2,"190":1,"195":1,"197":1,"235":1,"309":1,"318":1,"336":1,"501":1,"507":4,"512":3,"515":1,"586":1,"587":2,"800":1,"802":2,"808":1,"865":1,"871":2,"903":1,"905":2,"911":1,"912":2,"925":1,"929":1,"968":2,"994":2,"1049":1,"1056":1,"1061":1,"1134":1,"1308":2,"1525":1,"1556":1,"1599":1}}],["header",{"0":{"156":1,"332":1,"396":1,"429":1,"464":1,"481":1,"704":1,"714":1,"754":1,"769":1,"782":1,"806":1,"909":1,"1383":1,"1426":1,"1563":1},"2":{"3":1,"15":1,"27":2,"41":1,"45":1,"68":1,"79":1,"88":1,"89":2,"123":1,"138":1,"156":2,"157":1,"160":3,"176":4,"181":2,"182":8,"195":3,"235":3,"273":1,"287":1,"319":1,"366":1,"375":1,"383":1,"507":3,"579":1,"584":1,"592":1,"595":1,"601":1,"715":1,"716":1,"794":1,"802":2,"805":2,"806":1,"808":1,"871":1,"905":2,"908":2,"909":1,"911":1,"914":2,"921":2,"950":1,"968":1,"994":3,"1049":1,"1096":1,"1097":1,"1127":4,"1136":1,"1137":1,"1160":1,"1165":1,"1181":1,"1264":1,"1266":1,"1305":1,"1309":3,"1310":3,"1311":2,"1312":2,"1313":2,"1314":2,"1324":1,"1338":1,"1458":1,"1474":2,"1489":1,"1525":1,"1536":1,"1543":2,"1549":1,"1554":1,"1571":1,"1572":1,"1574":1,"1578":1,"1579":1}}],["heap",{"2":{"744":1,"795":1,"847":1}}],["heartbeat",{"2":{"529":1}}],["heartbeat=1",{"2":{"529":1}}],["heartbeats",{"2":{"477":1}}],["healthcheck",{"2":{"1129":1}}],["healthy",{"2":{"871":1}}],["health",{"0":{"1130":1},"2":{"165":1,"320":1,"814":1,"871":1,"889":1,"1022":1,"1130":2,"1135":1,"1639":1,"1641":1}}],["helps",{"2":{"1144":1}}],["help",{"2":{"528":2,"561":2,"562":1,"568":2,"582":2,"625":2,"659":4,"698":2,"948":1,"1649":1,"1651":1,"1655":1}}],["helper",{"0":{"899":1,"1156":1},"2":{"80":1,"235":1,"305":1,"385":1,"386":1,"512":1,"634":1,"720":1,"722":1,"744":1,"880":1,"956":1,"1028":1,"1037":1,"1101":1,"1104":1,"1146":1,"1337":1,"1612":1,"1627":1}}],["helpers",{"0":{"786":1,"1136":1,"1158":1,"1188":1,"1400":1,"1526":1,"1536":1,"1548":1},"1":{"1137":1,"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1189":1,"1190":1,"1401":1,"1402":1,"1403":1,"1404":1,"1405":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":2,"1550":2,"1551":2,"1552":1,"1553":1},"2":{"1":1,"38":1,"45":1,"97":1,"108":1,"187":1,"502":1,"503":1,"793":1,"814":1,"912":2,"919":2,"921":1,"928":1,"1045":1,"1102":1,"1116":1,"1117":1,"1136":1,"1158":1,"1165":1,"1188":1,"1216":1,"1245":1,"1263":1,"1266":1,"1288":1,"1304":1,"1317":1,"1416":1,"1422":1,"1474":1,"1482":2,"1489":1,"1490":2,"1536":1,"1552":1,"1554":1,"1604":1,"1621":1,"1637":1}}],["hello",{"0":{"92":1,"93":1,"100":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1},"2":{"23":1,"32":1,"57":1,"64":1,"77":1,"84":1,"93":1,"94":1,"107":1,"108":1,"136":1,"170":1,"173":3,"174":1,"235":1,"236":1,"309":1,"310":1,"337":1,"348":1,"442":1,"803":1,"809":1,"839":2,"871":3,"906":1,"922":1,"947":1,"987":1,"988":1,"1083":1,"1088":1,"1093":1,"1211":1,"1217":1,"1279":2,"1290":1,"1377":1,"1378":1,"1379":1,"1539":2,"1551":1,"1612":1,"1619":1,"1626":1,"1627":1,"1629":1,"1639":1,"1641":1,"1643":1}}],["gmail",{"2":{"1654":1,"1665":1,"1674":1}}],["gmtime",{"2":{"920":1,"1566":3}}],["gmt",{"2":{"919":1,"920":1,"1556":1}}],["gcm",{"2":{"1086":1,"1087":1,"1088":1,"1095":1}}],["gh",{"2":{"632":1,"636":1}}],["gnu",{"2":{"530":1}}],["g",{"2":{"290":1,"366":1,"370":1,"373":1,"410":1,"417":1,"691":1,"818":4,"865":1,"928":1,"1123":1}}],["git",{"2":{"558":1,"633":2,"635":3,"636":1,"638":1,"640":1,"641":2,"644":2,"645":1,"646":1,"1123":2}}],["github",{"2":{"250":1,"1123":1}}],["gives",{"2":{"122":1,"274":1,"428":1,"456":1,"800":1,"872":1,"903":1,"1160":1,"1187":1,"1244":1,"1350":1,"1626":1}}],["given",{"2":{"10":1,"17":1,"292":1,"344":1,"374":1,"505":1,"1087":1,"1596":1}}],["guidance",{"0":{"848":1,"889":1,"929":1,"1078":1},"2":{"1661":1}}],["guidelines",{"2":{"1621":1}}],["guideline",{"2":{"1109":1}}],["guides",{"0":{"1492":1},"2":{"272":1}}],["guide",{"0":{"871":1,"1000":1,"1221":1,"1245":1,"1266":1,"1289":1,"1293":1,"1323":1,"1528":1,"1572":1,"1617":1},"1":{"872":1,"873":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1222":1,"1223":1,"1224":1,"1225":1,"1226":1,"1227":1,"1228":1,"1229":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1246":1,"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":2,"1291":2,"1292":2,"1293":1,"1294":2,"1295":2,"1296":2,"1297":2,"1298":2,"1299":2,"1300":2,"1301":2,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1,"1324":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1618":1,"1619":1,"1620":1,"1621":1,"1622":1,"1623":1,"1624":1,"1625":1},"2":{"0":1,"37":1,"164":1,"321":1,"364":1,"871":1,"873":1,"1000":2,"1079":1,"1096":1,"1118":1,"1316":1,"1458":1,"1492":1,"1494":1,"1508":1,"1554":1,"1572":1,"1611":1,"1617":1,"1626":1,"1632":1}}],["guest",{"2":{"776":3,"1607":1}}],["guaranteed",{"2":{"488":1,"855":2}}],["guarantee",{"0":{"850":1},"2":{"463":1,"837":1}}],["guaranteeing",{"2":{"257":1}}],["guarantees",{"0":{"836":1,"855":1,"983":1,"1062":1,"1407":1,"1423":1,"1446":1,"1456":1},"2":{"213":1,"641":1,"715":1,"847":1,"953":1,"957":1,"983":1,"1062":1,"1416":1,"1418":1,"1442":1,"1455":1,"1577":1}}],["guarded",{"2":{"1097":1}}],["guardrails",{"2":{"870":1}}],["guards",{"2":{"723":1,"848":1}}],["guard",{"0":{"230":1,"256":1,"268":1},"2":{"252":1,"256":2,"259":1,"261":1,"268":1}}],["gpus",{"2":{"213":1}}],["gpu",{"2":{"209":1,"1638":1}}],["game",{"2":{"1372":1}}],["gateways",{"2":{"1370":1}}],["gaspardkirira9",{"2":{"1654":1,"1665":1,"1674":1}}],["gaspardkirira",{"2":{"520":1,"538":2,"576":1,"578":1,"643":1,"650":2,"652":1,"683":1}}],["gaspard",{"2":{"188":1,"658":3,"1142":1,"1143":1,"1214":1,"1219":1,"1314":1}}],["garbage",{"2":{"144":1,"872":2,"1478":1,"1591":1}}],["green",{"2":{"798":4,"1129":1}}],["grows",{"2":{"1043":1,"1230":1,"1238":1,"1291":1,"1437":1,"1637":1}}],["grow",{"2":{"942":1,"1230":1}}],["growth",{"2":{"310":1,"1033":1,"1039":1,"1052":1,"1427":1,"1432":1,"1433":1,"1440":1}}],["grouping",{"2":{"1473":1}}],["group=www",{"2":{"1124":1}}],["grouped",{"2":{"862":1}}],["groups",{"0":{"818":1},"2":{"818":2,"1335":1,"1350":1}}],["group",{"2":{"185":1,"818":2,"838":1}}],["graph",{"2":{"540":1,"577":1}}],["gracefully",{"2":{"1060":1}}],["graceful",{"0":{"381":1,"1023":1},"2":{"308":1,"813":1,"1062":1,"1669":1}}],["granted",{"2":{"157":1}}],["grade",{"2":{"135":1,"835":1,"838":1,"1610":1}}],["gt",{"0":{"375":1,"376":1,"391":1,"397":1,"719":1,"720":1,"733":1,"1073":1,"1142":1,"1145":1,"1162":1,"1163":1,"1164":1,"1169":1,"1174":1,"1178":1,"1233":2,"1533":1},"1":{"1143":1,"1144":1,"1146":1,"1147":1,"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1},"2":{"88":1,"167":1,"253":1,"290":1,"294":2,"295":1,"322":1,"366":2,"383":1,"385":1,"386":1,"388":1,"393":2,"394":1,"395":1,"397":2,"406":2,"410":4,"417":1,"418":2,"420":1,"424":1,"427":1,"431":3,"446":1,"464":1,"480":1,"486":1,"491":2,"492":1,"504":1,"505":3,"624":2,"628":2,"633":1,"635":1,"644":1,"713":1,"716":2,"722":1,"723":1,"724":1,"725":1,"727":1,"731":1,"732":1,"733":1,"734":1,"736":1,"746":1,"747":2,"749":1,"755":1,"781":1,"783":1,"785":1,"794":1,"836":1,"914":4,"918":5,"919":1,"921":1,"925":1,"926":2,"935":1,"955":2,"968":1,"1006":1,"1007":1,"1008":1,"1009":1,"1011":1,"1012":1,"1013":1,"1019":1,"1020":1,"1025":2,"1033":1,"1035":1,"1042":1,"1043":2,"1071":1,"1112":2,"1158":1,"1161":2,"1162":1,"1173":1,"1181":6,"1187":3,"1270":2,"1271":1,"1320":1,"1328":1,"1329":2,"1331":1,"1333":1,"1337":1,"1339":6,"1344":1,"1346":4,"1350":2,"1490":1,"1501":2,"1523":3,"1528":1,"1539":3,"1541":1,"1542":2,"1543":1,"1545":2,"1546":2,"1547":2,"1549":1,"1550":1,"1551":2,"1580":1,"1581":2,"1593":1,"1603":1,"1604":1,"1606":1,"1610":3,"1613":1,"1621":1,"1622":1}}],["gone",{"2":{"1073":1}}],["golden",{"0":{"847":1}}],["go",{"0":{"873":1},"2":{"579":1,"589":1,"1651":1,"1657":1}}],["goes",{"0":{"1625":1},"2":{"215":1,"325":1,"442":1,"932":1,"1557":1}}],["good",{"0":{"861":1},"2":{"184":1,"185":1,"186":1,"217":1,"509":1,"510":1,"1151":1,"1621":1}}],["gotchas",{"0":{"1024":1},"1":{"1025":1,"1026":1,"1027":1,"1028":1}}],["got",{"2":{"85":1,"182":2}}],["goals",{"0":{"214":1,"306":1,"534":1,"550":1,"564":1,"678":1,"685":1,"836":1,"837":1,"1493":1},"2":{"770":1,"1474":1}}],["goal",{"0":{"88":1,"1119":1},"2":{"0":1,"37":1,"125":1,"213":2,"336":1,"412":1,"871":1,"1136":1,"1439":1,"1494":1}}],["generator",{"2":{"1490":1,"1575":1}}],["generating",{"2":{"984":1,"1207":1}}],["generation",{"0":{"1092":1},"2":{"559":1,"847":1,"964":1,"965":1,"969":1,"970":1,"973":1,"981":1,"1136":1,"1572":1,"1578":1,"1579":1}}],["generations",{"2":{"233":1}}],["generates",{"2":{"535":1,"537":1,"624":1,"913":1,"961":1}}],["generated",{"0":{"628":1},"2":{"218":1,"584":1,"939":1,"962":1,"968":1,"1099":1,"1389":1}}],["generate",{"2":{"181":1,"592":2,"609":1,"612":1,"625":1,"871":1,"966":1,"1144":1,"1346":1,"1349":1,"1412":1,"1413":4,"1576":1}}],["general",{"2":{"107":1,"890":1,"1626":1,"1629":1,"1664":1}}],["generic",{"0":{"299":1,"785":1},"2":{"41":1,"347":1,"359":1,"705":1,"733":1,"734":1,"875":1,"1210":1,"1329":1}}],["getcontext",{"2":{"1519":1}}],["getxor",{"2":{"1117":1}}],["getdoubleor",{"2":{"1101":1}}],["getdouble",{"2":{"1101":1}}],["getdbpasswordfromenv",{"2":{"832":2}}],["getrouter",{"0":{"1010":1},"2":{"967":1,"971":1,"1010":1,"1022":1,"1030":1}}],["getrequesttimeout",{"2":{"831":1}}],["getwafmaxbodybytes",{"2":{"831":1}}],["getwafmaxtargetlen",{"2":{"831":1}}],["getwafmode",{"2":{"831":1}}],["getlogdroponoverflow",{"2":{"831":1}}],["getlogqueuemax",{"2":{"831":1}}],["getlogasync",{"2":{"831":2}}],["getiothreads",{"2":{"831":2,"1009":1,"1032":1}}],["getint64or",{"2":{"1101":1,"1320":2}}],["getint64",{"2":{"1101":1,"1107":2,"1108":1}}],["getint",{"2":{"829":3,"834":1}}],["getinstance",{"2":{"828":1,"831":1,"832":1,"1509":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1517":1,"1518":1,"1519":1,"1521":1,"1522":1,"1526":1}}],["getbool",{"2":{"829":2,"834":1}}],["getsessiontimeoutsec",{"2":{"831":1}}],["getserverport",{"2":{"831":2}}],["getstringor",{"2":{"1101":1,"1320":2}}],["getstring",{"2":{"829":2,"830":1,"834":1,"1101":1,"1107":1,"1108":1}}],["gets",{"0":{"628":1},"2":{"915":1}}],["getenv",{"0":{"1482":1},"2":{"12":1,"1482":3}}],["get",{"0":{"6":1,"7":1,"8":1,"9":1,"19":1,"195":1,"309":1,"962":1,"1162":1,"1163":1,"1169":1,"1174":1,"1295":1,"1296":1,"1467":1,"1555":1,"1581":1},"1":{"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1556":1,"1557":1,"1558":1},"2":{"6":1,"7":1,"8":1,"9":1,"10":2,"11":2,"12":1,"19":1,"23":1,"34":1,"44":1,"57":1,"64":1,"89":3,"92":1,"93":1,"94":1,"95":1,"96":1,"100":1,"108":6,"112":1,"113":1,"114":1,"115":1,"122":1,"124":1,"128":1,"130":2,"132":2,"136":1,"138":1,"139":1,"146":1,"152":1,"156":1,"157":1,"158":1,"160":1,"167":1,"170":1,"172":1,"173":3,"174":2,"175":1,"176":2,"177":2,"178":1,"179":1,"188":1,"195":1,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":1,"230":1,"249":1,"265":1,"269":1,"270":1,"320":1,"334":2,"382":1,"442":1,"457":1,"494":1,"495":2,"496":4,"498":1,"502":1,"504":1,"505":2,"507":2,"510":1,"512":4,"515":1,"723":1,"801":3,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"814":3,"816":1,"818":1,"871":12,"880":1,"881":1,"904":3,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"918":2,"922":2,"933":1,"937":1,"939":4,"945":1,"947":1,"951":1,"962":6,"972":1,"974":1,"975":2,"978":1,"980":1,"982":1,"987":1,"988":1,"989":1,"990":1,"991":2,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1022":1,"1026":1,"1042":1,"1089":1,"1130":1,"1142":1,"1149":1,"1158":1,"1160":2,"1170":2,"1171":1,"1172":1,"1173":2,"1175":1,"1176":2,"1177":2,"1185":2,"1186":1,"1187":2,"1213":1,"1223":1,"1260":1,"1295":1,"1298":4,"1299":4,"1309":1,"1310":1,"1311":2,"1312":2,"1313":1,"1314":1,"1319":1,"1353":2,"1357":2,"1418":1,"1509":1,"1586":1,"1612":3,"1613":1,"1618":1,"1620":2,"1621":2,"1627":6,"1634":3,"1639":2,"1643":1,"1644":1,"1645":1,"1646":1}}],["getters",{"0":{"5":1,"829":1,"831":1,"1284":1,"1285":1,"1298":1,"1299":1},"1":{"6":1,"7":1,"8":1,"9":1},"2":{"5":1,"829":1,"831":1,"1284":1}}],["globally",{"2":{"168":1,"181":1,"817":1,"1308":1}}],["global",{"0":{"59":1,"184":1,"562":1,"582":1},"2":{"2":1,"13":1,"39":1,"107":1,"196":2,"535":1,"541":1,"780":1,"819":1,"828":1,"864":1,"952":1,"958":1,"965":1,"1264":1,"1309":1,"1508":1,"1578":1}}],["icase",{"2":{"1543":2}}],["irequesthandler",{"0":{"913":1},"2":{"912":2,"913":2,"973":1}}],["ignore",{"2":{"382":1,"528":1}}],["ignored",{"2":{"35":1,"132":2,"133":1,"173":3,"965":1,"998":2,"1474":1,"1590":1}}],["ipv6",{"2":{"288":1,"466":1}}],["ipv4",{"2":{"288":1,"466":1}}],["ip",{"0":{"1134":1},"2":{"288":3,"290":1,"293":1,"415":1,"466":1,"1127":1,"1134":1,"1517":1}}],["image",{"2":{"942":1}}],["immutable",{"2":{"418":1,"641":1,"968":1,"1328":1,"1384":1,"1411":1,"1444":1,"1448":1}}],["immediate",{"2":{"370":1,"1164":1}}],["immediately",{"2":{"268":1,"378":1,"528":1,"533":1,"812":1,"836":1,"932":1,"1039":1,"1059":1,"1415":1}}],["improves",{"2":{"850":1}}],["improve",{"2":{"787":1,"1650":1}}],["improvements",{"2":{"427":1}}],["impose",{"2":{"151":1,"427":1}}],["important",{"0":{"117":1,"133":1,"852":1,"1305":1},"1":{"853":1,"854":1},"2":{"173":1,"264":1,"364":1,"366":1,"406":1,"432":1,"449":1,"491":1,"670":1,"723":1,"833":1,"883":1,"936":1,"943":1,"953":1,"968":1,"1007":1,"1035":1,"1044":1,"1071":2,"1199":1,"1228":1,"1254":1,"1272":1,"1281":1,"1364":1,"1434":1,"1504":1}}],["implication",{"0":{"851":1}}],["implications",{"2":{"378":1,"406":1,"1046":1}}],["implicit",{"2":{"13":1,"125":1,"134":1,"427":1,"521":1,"541":1,"585":1,"651":1,"745":1,"746":1,"751":1,"780":1,"838":1,"958":1,"1264":1}}],["implied",{"2":{"366":1}}],["implements",{"2":{"715":1,"1114":1,"1115":1,"1409":1}}],["implementing",{"2":{"271":1}}],["implemented",{"2":{"225":1,"395":1,"463":1,"723":1,"783":1,"819":1,"880":1,"918":1,"1115":1}}],["implement",{"2":{"162":1,"319":2,"458":1,"459":1,"793":1,"902":1,"913":1,"1032":1}}],["implementations",{"2":{"260":1,"265":1,"272":1,"412":1,"417":1,"421":1,"478":1,"819":1,"1418":1}}],["implementation",{"0":{"723":1,"744":1},"2":{"4":1,"272":2,"292":1,"373":1,"378":1,"391":1,"410":1,"412":1,"426":1,"475":1,"478":1,"514":2,"584":1,"586":1,"710":1,"833":1,"854":1,"878":1,"883":3,"887":1,"890":1,"891":1,"968":1,"1013":1,"1045":1,"1051":1,"1167":1,"1221":1,"1354":1,"1358":1,"1362":1,"1370":1,"1411":1,"1418":1,"1419":1,"1572":1,"1578":1}}],["iexecutor>",{"2":{"899":1,"1006":1}}],["iexecutor",{"0":{"875":1,"1073":1},"1":{"876":1,"877":1,"878":1,"879":1},"2":{"821":1,"874":1,"875":1,"876":1,"890":1,"891":2,"901":1,"902":1,"1004":1,"1075":2}}],["iex",{"2":{"243":1}}],["illustrative",{"2":{"140":1}}],["i",{"0":{"852":1,"853":1,"1020":1},"1":{"853":1,"854":1},"2":{"84":3,"90":3,"108":5,"109":2,"142":2,"152":1,"165":4,"195":3,"197":2,"235":2,"252":1,"274":1,"313":1,"316":1,"325":4,"328":1,"376":1,"443":2,"445":1,"462":1,"748":3,"802":1,"836":1,"837":1,"847":1,"848":1,"867":1,"883":1,"905":1,"932":1,"933":3,"935":2,"942":1,"948":1,"1001":1,"1003":1,"1007":1,"1012":1,"1014":1,"1020":2,"1032":2,"1051":2,"1059":2,"1065":1,"1066":1,"1101":3,"1117":1,"1130":1,"1135":1,"1212":4,"1256":1,"1294":1,"1309":1,"1310":2,"1311":3,"1313":3,"1314":2,"1319":4,"1337":4,"1352":3,"1356":3,"1362":1,"1427":1,"1472":2,"1561":3,"1627":5,"1638":1}}],["ioc",{"2":{"252":1,"255":1,"261":1,"268":1,"271":2}}],["io",{"0":{"51":1,"316":1,"331":1,"372":1,"1009":1,"1218":1},"1":{"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1},"2":{"84":4,"85":4,"86":4,"251":2,"252":2,"253":2,"256":1,"257":1,"259":2,"260":1,"263":1,"264":1,"266":1,"270":2,"271":1,"286":1,"287":1,"292":2,"293":2,"295":1,"308":1,"310":4,"316":1,"322":1,"323":6,"330":1,"331":1,"332":1,"334":1,"336":1,"337":3,"339":2,"340":1,"341":1,"342":1,"343":1,"344":1,"347":1,"362":1,"364":1,"366":2,"368":3,"378":1,"379":1,"384":1,"385":1,"386":2,"387":1,"388":1,"392":2,"394":1,"410":1,"411":1,"412":1,"413":1,"417":1,"421":3,"422":1,"424":4,"425":3,"427":1,"428":2,"435":1,"438":1,"442":4,"443":2,"445":1,"446":2,"447":3,"449":2,"453":3,"456":1,"457":3,"459":3,"463":1,"464":1,"474":2,"476":3,"477":3,"494":2,"495":1,"496":1,"497":3,"499":1,"826":1,"831":1,"935":5,"1001":1,"1003":1,"1006":1,"1007":1,"1012":2,"1020":2,"1027":1,"1216":1,"1220":1,"1669":1}}],["iostream>",{"2":{"11":1,"42":1,"84":1,"85":1,"86":1,"337":1,"442":1,"711":1,"743":1,"765":1,"776":1,"789":1,"790":1,"791":1,"792":1,"1106":1,"1107":1,"1108":1,"1112":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1318":1,"1319":1,"1320":1,"1321":1,"1377":1,"1378":1,"1379":1,"1561":1,"1562":1,"1563":1,"1564":1,"1574":1,"1587":1,"1612":1,"1613":1,"1614":1,"1615":1}}],["i64",{"2":{"42":2,"1102":1,"1211":1,"1283":1,"1284":2,"1285":1,"1287":1,"1290":1,"1298":1,"1299":1,"1300":1,"1328":2,"1613":3,"1621":3}}],["id=",{"2":{"1320":1,"1333":1}}],["ids",{"2":{"952":1,"1095":1,"1412":1,"1413":3,"1577":3}}],["idle",{"0":{"879":1,"897":1,"1045":1},"2":{"874":2,"876":1,"879":1,"889":1,"897":1,"935":1,"1013":1,"1027":1,"1038":1,"1050":1,"1103":2,"1361":1,"1363":2,"1366":3,"1379":1}}],["id>",{"2":{"614":1,"616":1}}],["idx>",{"2":{"496":1}}],["idx",{"0":{"1168":1},"2":{"496":3,"1100":2,"1102":6,"1161":1,"1168":2,"1271":1,"1291":2}}],["identifiers",{"2":{"1525":1,"1577":2}}],["identifier",{"2":{"1389":1,"1448":1,"1573":1}}],["identity",{"2":{"1090":1,"1095":1,"1495":1}}],["idempotent",{"2":{"266":1,"278":1,"284":1,"417":1,"472":1,"1077":1,"1407":1}}],["idempotency",{"0":{"218":1,"1393":1},"2":{"218":1,"1387":1,"1412":1,"1413":3,"1423":1}}],["ideal",{"2":{"515":1,"952":1,"954":1,"1157":1,"1180":1}}],["ideas",{"0":{"1130":1},"2":{"499":1,"662":1,"937":1}}],["idea",{"0":{"234":1},"2":{"933":1,"1637":1}}],["id",{"0":{"1332":1,"1333":1,"1334":1,"1389":1},"2":{"25":1,"113":9,"130":6,"173":1,"174":10,"181":5,"184":1,"188":2,"197":1,"214":1,"222":1,"224":2,"460":1,"614":1,"616":2,"620":6,"621":2,"871":8,"914":1,"916":1,"918":1,"972":1,"974":2,"975":1,"976":2,"990":1,"992":10,"1048":1,"1099":1,"1107":2,"1108":1,"1111":1,"1112":4,"1142":1,"1143":1,"1146":2,"1151":1,"1155":3,"1167":2,"1170":3,"1171":2,"1172":2,"1176":3,"1179":3,"1180":5,"1185":4,"1251":1,"1259":3,"1309":3,"1316":1,"1320":8,"1328":4,"1329":1,"1331":1,"1332":2,"1333":1,"1334":2,"1353":1,"1354":1,"1357":1,"1358":1,"1377":2,"1378":2,"1379":5,"1387":1,"1391":1,"1414":3,"1418":5,"1447":1,"1448":1,"1452":1,"1508":1,"1517":2,"1574":2,"1612":5,"1613":1,"1614":2,"1615":3,"1619":2,"1620":1,"1622":1,"1623":2,"1624":2,"1634":7,"1644":5}}],["inherit",{"2":{"1327":1}}],["inherently",{"2":{"853":1}}],["ini",{"2":{"1124":1}}],["init",{"2":{"583":1,"589":1,"1017":1}}],["initialization",{"0":{"1017":1}}],["initializes",{"2":{"935":1,"1007":1}}],["initialize",{"0":{"583":1},"2":{"211":1,"581":1}}],["initializer",{"0":{"48":1},"2":{"1147":1,"1216":1,"1280":1,"1281":2,"1305":1}}],["initial",{"2":{"390":1,"397":1,"399":1,"844":1,"893":1,"899":1,"1039":1,"1431":1}}],["inactive",{"2":{"1109":2}}],["inline",{"2":{"387":1,"717":1,"1147":1,"1156":1}}],["indices",{"0":{"1226":1},"2":{"1230":1,"1242":1}}],["indicates",{"2":{"379":1,"417":1,"883":1,"1116":1}}],["indent",{"2":{"1192":1,"1200":1}}],["indented",{"2":{"1192":1}}],["indentation",{"0":{"1193":1},"2":{"49":1,"1200":1,"1216":1}}],["indexes",{"2":{"1101":1,"1158":1}}],["index",{"0":{"1173":1,"1291":1,"1292":1},"2":{"328":2,"483":1,"488":1,"518":1,"522":1,"632":1,"638":1,"640":2,"642":1,"679":1,"681":1,"684":1,"708":1,"918":1,"924":1,"939":1,"962":1,"1048":1,"1101":1,"1116":1,"1244":1,"1294":2,"1353":1,"1357":1}}],["independently",{"2":{"264":1,"901":1}}],["independent",{"2":{"251":1,"855":1,"1064":1,"1242":1,"1457":1,"1575":1}}],["infrastructure",{"2":{"1657":1,"1673":1}}],["inflight",{"2":{"1363":2,"1366":2,"1379":6,"1385":1,"1386":1,"1406":1,"1417":1,"1418":1,"1422":1}}],["influence",{"2":{"499":1}}],["infer",{"2":{"202":1,"208":1,"228":1,"235":1}}],["inference",{"0":{"198":1,"199":1,"201":1,"202":1,"226":1,"227":1,"228":1,"229":1},"1":{"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"227":1,"228":1,"229":1,"230":1,"231":1},"2":{"199":2,"200":1,"201":1,"202":1,"203":1,"204":1,"205":2,"206":3,"209":1,"212":1,"213":2,"214":1,"215":1,"218":1,"219":5,"222":1,"226":2,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"234":1,"235":1,"236":2,"238":2,"1656":1}}],["information",{"2":{"561":1}}],["info",{"0":{"561":1},"2":{"136":1,"139":1,"140":1,"141":1,"221":1,"546":1,"562":1,"619":1,"812":1,"817":1,"823":3,"836":3,"839":3,"841":1,"842":3,"844":1,"848":1,"858":4,"868":1,"952":1,"1353":1,"1357":1,"1495":1,"1497":11,"1498":17,"1506":11,"1510":1,"1511":1,"1512":1,"1513":1,"1517":1,"1521":1,"1525":1,"1628":1}}],["injects",{"2":{"969":1}}],["injection",{"2":{"958":1,"960":1,"1058":1,"1063":2}}],["injected",{"2":{"900":1}}],["inject",{"2":{"155":1,"343":1,"821":1,"902":1}}],["invariant",{"2":{"1408":1,"1424":1,"1441":1,"1456":1}}],["invalidfloat",{"2":{"705":1,"706":1,"722":1,"760":1,"796":1}}],["invalidboolean",{"2":{"705":1,"706":1,"742":1}}],["invalidcharacter",{"2":{"705":1,"706":1,"787":1}}],["invalid",{"0":{"1240":1,"1241":1},"2":{"89":1,"114":1,"116":1,"158":1,"213":1,"214":1,"299":2,"568":1,"710":1,"729":1,"767":1,"776":1,"825":1,"871":1,"927":1,"955":1,"956":1,"1094":1,"1150":1,"1161":1,"1163":1,"1185":1,"1187":1,"1229":1,"1231":1,"1233":1,"1241":1,"1251":2,"1252":1,"1254":1,"1255":1,"1256":1,"1474":1,"1483":1,"1526":1,"1550":1,"1613":1,"1615":1,"1621":2,"1624":1}}],["invocation",{"2":{"953":1}}],["invokes",{"2":{"925":1,"1004":1}}],["invoke",{"2":{"438":1,"876":1}}],["invoked",{"2":{"376":1,"953":1}}],["involved",{"2":{"146":1}}],["ingestion",{"2":{"137":1,"140":1,"835":1,"837":1,"862":1}}],["incremental",{"2":{"1268":1}}],["increment",{"2":{"1107":1,"1112":1,"1328":1}}],["incremented",{"2":{"1041":1,"1396":1}}],["increments",{"2":{"1037":1}}],["increasing",{"2":{"1035":1,"1446":1}}],["increases",{"2":{"942":1}}],["increase",{"2":{"150":1,"854":1}}],["incoming",{"2":{"122":1,"127":1,"136":1,"420":1}}],["included",{"0":{"1664":1}}],["includes",{"2":{"223":1,"601":1,"653":1,"912":1,"1158":1,"1180":1,"1324":1,"1495":1,"1525":1,"1652":1}}],["include",{"0":{"726":1,"864":1,"1080":1,"1137":1,"1159":1,"1189":1,"1222":1,"1246":1,"1267":1,"1324":1,"1496":1,"1509":1,"1537":1,"1559":1},"2":{"3":1,"11":2,"12":2,"15":1,"23":1,"41":1,"42":2,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"64":2,"68":1,"70":3,"79":1,"84":7,"85":5,"86":12,"89":1,"93":1,"94":1,"95":2,"96":1,"108":8,"112":1,"113":2,"114":2,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":2,"201":2,"202":1,"207":2,"208":2,"227":2,"228":1,"229":1,"230":2,"235":1,"281":1,"282":2,"283":1,"293":2,"310":12,"323":2,"332":1,"337":2,"348":1,"368":4,"392":2,"396":1,"402":1,"404":2,"406":2,"413":6,"424":6,"425":5,"426":1,"429":1,"442":5,"443":3,"453":2,"457":4,"459":5,"464":1,"476":5,"477":5,"481":1,"494":3,"497":2,"507":3,"512":5,"513":1,"535":1,"537":1,"541":1,"584":5,"586":4,"587":2,"704":1,"711":3,"714":1,"726":8,"734":1,"743":2,"748":1,"754":1,"765":2,"769":1,"776":2,"782":1,"789":2,"790":2,"791":2,"792":2,"801":1,"802":1,"803":1,"804":1,"805":2,"806":1,"807":2,"809":1,"825":2,"836":1,"839":1,"862":1,"864":1,"865":1,"871":1,"904":1,"905":1,"906":1,"907":1,"908":2,"909":1,"910":2,"947":1,"966":1,"967":1,"968":1,"971":2,"987":1,"988":1,"989":1,"990":1,"991":1,"992":2,"993":2,"994":2,"996":2,"997":1,"998":1,"1058":1,"1075":1,"1080":1,"1083":4,"1096":2,"1106":2,"1107":4,"1108":3,"1112":4,"1137":1,"1147":1,"1159":1,"1182":2,"1189":1,"1210":2,"1211":2,"1212":2,"1213":2,"1214":2,"1215":2,"1216":2,"1217":2,"1218":2,"1219":2,"1222":1,"1246":1,"1267":1,"1304":1,"1309":5,"1310":3,"1311":2,"1312":2,"1313":2,"1314":2,"1318":2,"1319":2,"1320":3,"1321":2,"1324":2,"1339":1,"1353":5,"1357":5,"1360":2,"1370":1,"1372":1,"1377":9,"1378":10,"1379":10,"1380":3,"1383":1,"1410":3,"1417":1,"1426":1,"1443":4,"1458":1,"1491":4,"1496":1,"1497":1,"1498":1,"1509":1,"1522":1,"1529":1,"1537":1,"1539":1,"1541":1,"1542":1,"1543":1,"1545":1,"1546":1,"1547":1,"1549":1,"1550":1,"1551":1,"1553":1,"1559":1,"1561":2,"1562":2,"1563":3,"1564":3,"1574":4,"1587":2,"1589":1,"1593":2,"1599":5,"1600":1,"1602":1,"1603":1,"1604":1,"1612":3,"1613":3,"1614":4,"1615":4,"1627":7,"1628":4,"1630":1,"1634":1,"1639":1,"1662":1}}],["input=",{"2":{"727":1}}],["input=hello",{"2":{"227":1}}],["inputs",{"0":{"737":1},"1":{"738":1,"739":1},"2":{"229":7,"231":1,"483":1,"499":1,"1599":1}}],["input",{"0":{"158":1,"208":1,"230":1,"1260":1,"1606":1},"2":{"116":1,"149":1,"158":1,"201":5,"207":6,"208":1,"210":1,"215":1,"223":1,"225":1,"226":1,"227":7,"228":1,"299":1,"442":2,"703":1,"706":1,"707":2,"708":3,"710":1,"711":4,"717":1,"721":1,"722":1,"727":2,"733":1,"734":1,"736":2,"740":1,"742":2,"744":1,"746":1,"755":1,"756":1,"759":2,"762":1,"763":1,"764":1,"767":1,"770":1,"772":1,"774":2,"776":2,"777":1,"778":1,"783":2,"785":1,"786":4,"787":2,"1160":1,"1163":1,"1251":1,"1252":1,"1257":1,"1260":2,"1539":1,"1602":3,"1606":5,"1610":1,"1613":1,"1621":2}}],["inserted",{"2":{"1318":1}}],["insert",{"0":{"1107":1,"1297":1,"1318":1},"2":{"1100":1,"1107":1,"1318":1,"1321":1,"1328":1,"1331":1}}],["inserts",{"2":{"452":1}}],["insensitive",{"0":{"1543":1},"2":{"684":1,"728":1,"731":1,"736":1,"739":1,"744":1,"750":1,"772":1,"774":1,"777":1,"778":1,"1474":1,"1477":1}}],["inspired",{"2":{"579":1}}],["inspectable",{"2":{"712":1}}],["inspection",{"2":{"145":1}}],["inspect",{"0":{"1471":1},"2":{"138":2,"140":1,"409":1,"653":1,"721":1,"749":1,"805":1,"908":1,"1610":1,"1620":1}}],["instrumentation",{"2":{"838":1}}],["instant",{"2":{"1466":1}}],["instantiate",{"2":{"1066":1}}],["instantaneous",{"2":{"878":1}}],["instances",{"2":{"1361":1,"1362":1}}],["instance",{"2":{"120":1,"334":1,"1054":1,"1508":1}}],["installs",{"2":{"535":1,"537":1,"567":1,"1006":1}}],["installation",{"2":{"240":1,"242":1,"250":1}}],["installing",{"2":{"240":1,"317":1}}],["installed",{"2":{"177":1,"197":2,"522":1,"568":1,"636":1,"1315":1,"1640":1}}],["install",{"0":{"240":1,"241":1,"565":1},"1":{"241":1,"242":2,"243":2,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1},"2":{"168":1,"180":1,"181":1,"182":2,"183":1,"185":2,"186":1,"187":2,"192":1,"193":3,"194":1,"195":1,"196":5,"242":1,"243":1,"245":1,"246":1,"247":1,"538":1,"541":1,"542":1,"559":1,"565":1,"566":1,"567":1,"570":6,"572":2,"1123":1,"1124":1,"1127":2,"1128":2,"1309":1,"1310":1}}],["instead",{"0":{"137":1,"369":1},"2":{"95":1,"141":1,"148":1,"199":1,"206":1,"232":1,"458":1,"741":1,"779":1,"838":1,"871":1,"926":1,"1243":1,"1535":1,"1597":1}}],["inside",{"0":{"1134":1,"1227":1,"1490":1},"2":{"14":1,"67":1,"82":1,"87":1,"92":1,"98":1,"106":1,"122":1,"131":1,"142":1,"207":1,"222":1,"226":1,"347":1,"353":1,"362":1,"393":1,"432":1,"443":1,"456":1,"461":1,"462":1,"598":1,"628":1,"633":1,"644":1,"661":1,"696":1,"787":1,"950":1,"951":1,"986":1,"1019":1,"1028":1,"1033":1,"1042":1,"1305":1,"1339":1,"1351":1,"1355":1,"1507":1,"1534":1,"1597":1,"1605":1,"1618":1,"1634":1}}],["int32",{"2":{"717":1,"786":1,"792":2,"793":1}}],["introspection",{"0":{"357":1,"823":1,"898":1}}],["into",{"2":{"149":1,"180":1,"252":1,"273":1,"308":2,"320":1,"336":1,"351":1,"364":1,"384":1,"388":1,"400":1,"412":1,"426":2,"452":2,"467":1,"471":1,"498":1,"511":1,"535":1,"537":1,"542":1,"565":1,"567":2,"572":1,"582":2,"622":1,"637":1,"693":1,"708":1,"712":1,"736":1,"746":1,"752":1,"770":1,"794":1,"858":1,"880":1,"900":1,"902":1,"912":1,"933":1,"943":1,"945":1,"966":1,"969":1,"1038":1,"1044":2,"1107":1,"1158":1,"1181":1,"1187":1,"1233":1,"1254":1,"1305":1,"1318":1,"1321":1,"1328":1,"1331":1,"1338":1,"1339":1,"1474":1,"1576":1,"1593":1,"1611":1,"1622":1,"1625":1,"1637":1}}],["int>",{"2":{"63":3,"108":1,"402":1,"404":1,"486":2,"494":1,"495":2,"496":2,"727":1,"729":1,"733":1,"748":1,"749":1,"785":1,"789":1,"790":1,"1170":2,"1171":1,"1172":1,"1173":1,"1176":2,"1177":2,"1179":1,"1180":1,"1185":1,"1186":1,"1320":1,"1491":3,"1529":3,"1530":4,"1602":1,"1608":2,"1627":1}}],["integers",{"0":{"1277":1},"2":{"1102":1,"1151":1,"1322":1,"1591":1}}],["integer",{"0":{"789":1,"791":1,"1305":1},"2":{"729":1,"758":1,"781":1,"1035":1,"1117":1,"1181":1,"1268":1,"1270":1,"1478":1,"1479":1,"1567":1,"1591":1}}],["integral",{"0":{"795":1},"2":{"747":1,"785":2,"1277":1,"1339":1}}],["integrated",{"2":{"447":1,"463":1}}],["integrates",{"0":{"900":1},"2":{"286":1,"303":1,"366":1,"384":1,"637":1,"688":1,"693":1,"713":1}}],["integrate",{"0":{"265":1},"2":{"364":1,"412":1,"480":1,"837":1}}],["integrating",{"2":{"205":1}}],["integrations",{"2":{"1622":1}}],["integration",{"0":{"211":1,"305":1,"539":1,"863":1,"971":1,"981":1,"1051":1,"1372":1},"1":{"864":1,"865":1},"2":{"199":1,"290":1,"365":1,"422":1,"693":1,"902":1,"954":1,"1097":2,"1306":1}}],["integrity",{"2":{"571":1,"696":1,"702":1,"1085":1,"1090":1}}],["intensive",{"2":{"977":1,"1672":1}}],["intent",{"2":{"383":1,"734":1,"793":1,"887":1,"1195":1,"1304":1,"1384":1,"1408":1,"1598":1}}],["intentional",{"2":{"134":1,"1552":1}}],["intentionally",{"2":{"13":1,"135":1,"273":1,"287":1,"308":1,"342":1,"347":1,"361":1,"386":1,"410":1,"412":1,"427":1,"499":1,"662":1,"712":1,"718":1,"835":1,"838":1,"853":1,"884":1,"1025":1,"1102":1,"1221":1,"1247":1,"1323":1,"1337":1,"1376":1,"1539":1,"1580":1}}],["intended",{"2":{"235":1,"366":1,"445":1,"512":1,"710":1,"817":1,"890":1,"1254":1,"1374":1}}],["interoperability",{"2":{"1556":1}}],["interleaved",{"2":{"1508":1}}],["interleaves",{"2":{"1507":1}}],["interleave",{"2":{"1495":1,"1504":1}}],["interleaving",{"2":{"836":1,"850":1,"853":1}}],["interchangeable",{"2":{"1375":1}}],["intercept",{"2":{"949":1}}],["intermediate",{"2":{"1223":2,"1230":1,"1243":1}}],["interpretation",{"2":{"1392":1}}],["interpret",{"2":{"424":1}}],["interfaces",{"2":{"412":1,"427":1}}],["interface",{"0":{"1370":1},"2":{"286":1,"287":1,"416":1,"419":1,"463":1,"468":1,"504":1,"551":1,"564":1,"688":1,"875":1,"880":1,"891":1,"912":1,"913":1,"1444":1,"1445":1}}],["interactively",{"2":{"662":1}}],["interactive",{"0":{"594":1},"1":{"595":1,"596":1,"597":1},"2":{"593":2,"601":1}}],["interact",{"2":{"251":1}}],["internet",{"2":{"250":1,"961":1}}],["internally",{"0":{"389":1,"522":1,"636":1,"1576":1},"1":{"390":1,"391":1},"2":{"270":1,"478":1,"492":1,"543":1,"851":1,"893":1,"937":1,"952":1,"975":2,"1162":1,"1252":1,"1270":1,"1324":1,"1482":1,"1534":1}}],["internals",{"0":{"1565":1},"1":{"1566":1,"1567":1},"2":{"210":1,"252":1,"1668":1}}],["internal",{"0":{"115":1,"159":1,"358":1,"1016":1},"1":{"359":1,"1017":1,"1018":1,"1019":1,"1020":1},"2":{"53":1,"115":2,"139":1,"159":2,"251":1,"260":1,"276":1,"336":1,"342":1,"373":1,"377":1,"378":1,"386":1,"388":1,"412":1,"586":1,"744":1,"801":1,"814":1,"904":1,"912":1,"928":1,"956":1,"1035":1,"1160":1,"1180":1,"1266":1,"1268":1,"1307":2,"1364":1,"1374":1,"1515":1}}],["intervalhandle",{"0":{"1071":1,"1073":1},"2":{"1071":1,"1073":1,"1075":1,"1077":1}}],["intervals",{"2":{"1033":1,"1432":1}}],["interval",{"0":{"943":1,"1068":1,"1073":1},"1":{"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1},"2":{"216":1,"616":1,"617":1,"618":1,"943":1,"1011":1,"1044":1,"1068":1,"1069":1,"1073":1,"1075":2,"1076":1,"1077":1}}],["int64",{"2":{"42":1,"501":1,"512":1,"786":2,"1102":3,"1107":2,"1108":1,"1117":1,"1181":1,"1211":1,"1268":1,"1270":1,"1277":2,"1284":1,"1285":1,"1298":1,"1299":1,"1305":1,"1320":5,"1322":1,"1328":2,"1332":1,"1333":1,"1334":1,"1339":1,"1363":3,"1364":1,"1366":3,"1367":1,"1372":1,"1377":1,"1378":1,"1379":1,"1387":3,"1404":1,"1405":1,"1414":5,"1417":1,"1418":8,"1428":3,"1437":1,"1445":3,"1447":2,"1449":1,"1450":2}}],["int",{"0":{"7":1,"373":1,"374":1,"375":1,"376":1,"729":1,"781":1,"1478":1},"1":{"782":1,"783":1,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1},"2":{"7":1,"10":1,"11":3,"12":3,"23":1,"42":1,"43":3,"44":2,"46":1,"57":1,"63":1,"64":1,"70":1,"84":5,"85":3,"86":2,"89":1,"93":1,"94":1,"95":1,"96":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"140":1,"146":1,"156":1,"175":4,"178":2,"179":2,"201":1,"202":1,"207":1,"208":1,"227":1,"228":1,"229":1,"230":1,"235":2,"310":2,"323":1,"325":2,"326":1,"337":1,"348":1,"368":2,"369":1,"375":1,"382":1,"392":1,"402":1,"404":1,"419":1,"424":1,"425":1,"442":1,"443":3,"453":1,"457":1,"459":1,"476":1,"477":1,"496":1,"497":1,"501":1,"512":1,"711":1,"713":1,"717":1,"727":2,"729":2,"734":1,"747":1,"748":1,"765":1,"776":1,"781":1,"783":1,"785":4,"786":1,"787":1,"789":2,"790":2,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"823":1,"829":2,"831":2,"833":1,"839":1,"871":2,"880":1,"882":1,"892":1,"899":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"918":1,"921":1,"928":2,"947":1,"971":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1102":1,"1106":1,"1107":2,"1108":1,"1112":2,"1153":1,"1154":3,"1155":1,"1176":2,"1177":2,"1179":1,"1180":1,"1186":1,"1211":1,"1212":2,"1213":2,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1259":1,"1287":1,"1288":2,"1290":1,"1296":1,"1300":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1318":1,"1319":1,"1320":2,"1321":1,"1353":1,"1357":1,"1377":1,"1378":1,"1379":1,"1472":1,"1474":1,"1478":1,"1483":1,"1490":1,"1491":4,"1497":1,"1498":1,"1506":2,"1529":3,"1561":3,"1562":1,"1563":1,"1564":1,"1574":1,"1587":1,"1602":1,"1612":1,"1613":1,"1614":1,"1615":1,"1627":1,"1628":1,"1634":1,"1639":1}}],["in",{"0":{"148":1,"253":1,"362":1,"659":1,"888":1,"1075":1,"1240":1,"1241":1,"1379":1,"1488":1,"1506":1,"1564":1,"1607":1,"1625":1,"1627":1},"2":{"1":1,"2":1,"3":1,"4":1,"12":1,"14":1,"36":1,"38":1,"39":1,"40":1,"54":1,"66":1,"67":1,"81":1,"89":1,"106":1,"111":1,"119":1,"135":1,"141":1,"142":2,"143":1,"144":1,"154":1,"155":1,"157":1,"163":1,"164":2,"168":1,"174":1,"179":1,"181":1,"183":1,"188":1,"189":1,"196":1,"200":1,"205":1,"206":1,"210":1,"211":2,"213":2,"220":1,"221":1,"222":1,"224":1,"231":1,"232":1,"234":1,"242":1,"249":1,"251":1,"255":1,"274":2,"287":1,"288":1,"310":1,"316":1,"322":1,"325":1,"327":1,"330":1,"336":1,"350":1,"355":1,"365":2,"366":1,"368":1,"374":1,"383":1,"390":1,"395":1,"397":1,"404":2,"412":1,"415":1,"422":1,"442":2,"445":1,"446":4,"449":1,"457":2,"459":1,"460":1,"466":1,"477":1,"478":1,"483":1,"486":1,"488":1,"491":1,"492":1,"496":1,"510":1,"511":1,"513":1,"515":1,"518":1,"521":2,"523":2,"535":1,"537":1,"539":1,"541":1,"546":1,"556":1,"564":1,"589":1,"601":1,"653":1,"678":1,"679":1,"707":2,"717":2,"722":1,"723":1,"726":1,"736":1,"779":1,"812":1,"822":1,"824":1,"831":1,"834":1,"838":1,"847":1,"848":1,"850":1,"853":3,"857":1,"859":1,"861":1,"862":1,"865":2,"868":1,"871":6,"872":2,"874":1,"880":1,"889":2,"921":1,"927":2,"928":1,"931":1,"937":1,"938":1,"949":1,"952":2,"953":1,"958":1,"959":2,"968":1,"969":1,"1000":1,"1013":1,"1017":2,"1025":1,"1031":1,"1035":1,"1037":1,"1042":1,"1051":2,"1052":1,"1058":1,"1059":1,"1078":2,"1096":2,"1097":1,"1102":1,"1109":2,"1119":1,"1126":1,"1133":1,"1140":1,"1144":1,"1195":1,"1220":1,"1227":2,"1242":1,"1268":1,"1294":1,"1305":1,"1306":1,"1313":1,"1321":1,"1322":1,"1323":1,"1335":1,"1336":2,"1339":1,"1351":1,"1354":2,"1355":1,"1358":2,"1359":1,"1363":2,"1365":1,"1366":2,"1373":1,"1376":1,"1382":1,"1384":2,"1406":1,"1407":1,"1409":1,"1415":1,"1421":1,"1422":1,"1425":1,"1434":1,"1442":1,"1446":1,"1453":1,"1454":1,"1457":1,"1459":1,"1463":1,"1466":1,"1478":1,"1479":1,"1482":1,"1489":1,"1490":1,"1491":1,"1494":1,"1513":1,"1526":1,"1550":1,"1567":1,"1572":1,"1584":1,"1591":1,"1595":1,"1606":2,"1607":1,"1611":1,"1616":1,"1625":2,"1626":2,"1630":1,"1651":1,"1660":1}}],["ifndef",{"2":{"1380":1}}],["if",{"2":{"0":1,"4":1,"12":1,"34":1,"35":2,"37":1,"42":1,"52":1,"66":1,"86":1,"89":2,"95":2,"108":5,"113":1,"114":1,"115":1,"130":1,"132":1,"133":1,"142":1,"154":1,"156":1,"157":1,"158":1,"173":1,"174":1,"177":3,"182":1,"188":1,"197":2,"215":1,"218":2,"219":1,"220":1,"221":3,"227":1,"228":1,"229":1,"230":1,"247":1,"250":1,"263":1,"268":1,"269":1,"270":1,"277":2,"283":1,"291":1,"304":1,"307":2,"310":3,"312":1,"320":2,"339":1,"340":1,"341":1,"365":1,"366":3,"374":1,"375":3,"377":3,"378":1,"381":1,"382":2,"383":2,"391":1,"392":1,"393":2,"400":1,"404":1,"406":1,"408":1,"410":1,"417":1,"425":1,"432":2,"443":3,"449":1,"452":1,"453":1,"458":2,"459":2,"475":2,"478":2,"490":1,"491":2,"492":2,"498":1,"503":2,"512":5,"513":3,"515":2,"528":1,"531":1,"532":1,"533":1,"545":1,"567":1,"568":2,"585":1,"592":1,"601":1,"627":2,"632":1,"636":1,"684":1,"697":3,"699":1,"711":1,"716":1,"717":1,"721":1,"723":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":3,"733":3,"743":1,"748":1,"749":1,"760":1,"765":1,"776":1,"787":4,"789":1,"790":1,"791":1,"792":1,"793":1,"795":1,"796":1,"798":1,"816":2,"820":1,"827":2,"829":1,"831":1,"832":1,"836":1,"845":1,"847":1,"855":1,"862":2,"871":2,"877":1,"881":1,"895":1,"902":1,"917":1,"923":2,"924":1,"932":3,"933":2,"935":2,"936":1,"937":1,"940":1,"942":1,"943":1,"950":1,"953":1,"957":1,"966":1,"969":1,"970":1,"978":1,"979":1,"980":2,"992":1,"998":1,"1006":1,"1007":1,"1008":1,"1009":1,"1012":1,"1015":1,"1017":1,"1018":1,"1025":1,"1026":1,"1027":1,"1032":1,"1035":1,"1037":1,"1039":1,"1041":1,"1043":1,"1044":1,"1048":1,"1057":1,"1059":3,"1060":2,"1073":2,"1077":2,"1078":2,"1081":1,"1083":1,"1084":1,"1088":1,"1089":3,"1092":1,"1093":1,"1094":1,"1095":1,"1097":2,"1099":1,"1103":1,"1106":1,"1107":1,"1109":1,"1112":2,"1124":1,"1126":1,"1129":1,"1134":1,"1147":2,"1161":1,"1162":1,"1167":2,"1168":2,"1173":2,"1180":2,"1185":1,"1199":2,"1202":1,"1212":1,"1219":1,"1229":1,"1231":1,"1233":1,"1235":1,"1240":1,"1241":1,"1251":1,"1254":2,"1260":1,"1266":1,"1288":3,"1291":1,"1296":1,"1310":1,"1311":1,"1312":1,"1313":2,"1314":3,"1315":1,"1318":1,"1320":1,"1332":1,"1339":1,"1348":1,"1354":2,"1358":2,"1369":1,"1380":2,"1399":1,"1401":1,"1402":1,"1403":1,"1413":2,"1430":1,"1436":1,"1438":1,"1476":1,"1482":1,"1483":1,"1491":2,"1500":3,"1502":1,"1504":1,"1507":3,"1511":1,"1513":1,"1515":1,"1519":1,"1524":1,"1529":2,"1531":2,"1532":2,"1533":1,"1546":1,"1551":1,"1553":1,"1557":1,"1558":1,"1567":1,"1586":1,"1587":1,"1589":1,"1590":1,"1593":1,"1595":1,"1596":2,"1600":1,"1603":1,"1605":1,"1606":1,"1612":4,"1613":3,"1614":2,"1615":2,"1617":1,"1620":1,"1621":1,"1624":1,"1625":1,"1627":5,"1628":1,"1634":1,"1640":1,"1651":1}}],["iso8601",{"2":{"1491":1,"1556":1,"1562":2,"1567":1,"1571":1}}],["iso",{"0":{"1465":1},"2":{"1490":1,"1554":1,"1556":1}}],["isolation",{"2":{"977":1,"1059":1,"1065":1}}],["isolate",{"2":{"938":1}}],["isolates",{"2":{"252":1,"901":1}}],["isolated",{"2":{"200":1}}],["isynctransport>",{"2":{"1364":1,"1367":1}}],["isynctransport",{"0":{"1368":1},"1":{"1369":1,"1370":1},"2":{"1361":2,"1362":1,"1365":1,"1370":1,"1380":1}}],["isnull",{"2":{"1117":1}}],["isvalid",{"2":{"1115":1}}],["isidle",{"2":{"1045":1}}],["isparam",{"2":{"976":1}}],["isdevmode",{"2":{"820":1}}],["issues",{"0":{"1131":1},"1":{"1132":1,"1133":1,"1134":1},"2":{"502":1,"1661":1}}],["is",{"0":{"257":1,"397":1,"472":1,"484":1,"716":1,"837":1,"838":1,"867":1,"1001":1,"1268":1,"1401":1,"1402":1,"1403":1,"1490":1,"1573":1,"1664":1,"1673":1},"2":{"0":1,"3":1,"13":2,"35":2,"36":1,"37":1,"42":1,"53":1,"66":2,"72":1,"74":1,"79":1,"81":1,"82":1,"86":1,"87":1,"91":1,"92":2,"98":1,"106":1,"111":2,"119":1,"121":4,"122":1,"123":2,"125":1,"126":1,"127":2,"128":1,"130":1,"131":1,"132":2,"133":1,"134":2,"135":2,"137":1,"142":4,"143":4,"144":1,"145":2,"146":1,"154":1,"155":1,"163":5,"167":1,"173":1,"177":5,"188":2,"197":3,"206":1,"212":2,"213":2,"214":1,"218":1,"220":1,"225":2,"226":1,"228":1,"229":2,"232":1,"234":1,"235":1,"239":1,"242":1,"249":1,"251":2,"253":1,"256":1,"257":2,"261":1,"264":2,"266":2,"269":1,"270":1,"271":1,"273":2,"276":2,"277":2,"278":1,"281":2,"282":1,"283":1,"284":4,"287":1,"291":1,"292":1,"294":1,"297":2,"304":2,"308":1,"310":1,"316":1,"317":1,"319":2,"322":1,"325":1,"327":2,"329":1,"331":2,"335":1,"336":1,"344":1,"347":2,"350":1,"355":2,"357":3,"361":2,"362":1,"363":2,"364":1,"366":5,"368":2,"369":1,"370":1,"374":1,"375":2,"376":1,"377":1,"378":3,"379":1,"384":2,"385":2,"386":2,"390":1,"391":1,"393":1,"395":1,"397":4,"400":2,"404":1,"408":2,"409":2,"410":2,"412":1,"415":1,"416":2,"417":3,"419":2,"424":1,"425":2,"426":2,"427":1,"428":1,"432":6,"433":1,"435":1,"443":2,"445":1,"447":2,"448":1,"452":3,"458":2,"459":2,"463":2,"466":1,"468":2,"472":3,"474":1,"475":2,"477":1,"478":3,"484":1,"487":1,"488":4,"490":2,"491":3,"496":2,"498":1,"499":3,"501":1,"502":2,"503":4,"505":2,"511":1,"513":1,"515":2,"521":2,"522":3,"523":1,"529":1,"531":1,"532":1,"533":1,"534":1,"535":1,"542":1,"548":1,"550":1,"551":2,"553":2,"564":1,"567":1,"579":1,"585":1,"587":1,"588":1,"594":1,"601":3,"627":1,"632":1,"636":1,"637":1,"641":1,"646":1,"655":1,"661":1,"662":1,"675":1,"678":1,"684":1,"685":1,"688":1,"691":1,"693":1,"697":1,"699":1,"703":2,"706":4,"708":1,"709":1,"712":1,"713":1,"715":1,"716":1,"717":2,"718":1,"721":1,"723":2,"724":1,"729":1,"730":1,"731":1,"733":1,"736":2,"739":1,"742":1,"744":2,"746":1,"750":1,"752":1,"755":1,"757":1,"759":1,"773":1,"774":2,"781":1,"783":2,"785":1,"787":2,"793":1,"795":1,"798":1,"800":1,"808":1,"812":1,"816":1,"817":1,"819":1,"820":1,"821":2,"822":1,"823":1,"824":2,"825":1,"826":1,"827":1,"828":1,"829":2,"835":2,"836":4,"839":1,"844":3,"845":1,"847":4,"848":1,"851":2,"855":3,"859":1,"862":1,"867":1,"869":1,"871":6,"872":2,"873":1,"874":1,"875":1,"879":1,"880":1,"881":1,"884":3,"886":1,"887":2,"888":1,"890":1,"891":1,"893":1,"900":1,"903":1,"911":1,"913":1,"914":1,"915":1,"917":1,"918":2,"921":1,"923":1,"924":1,"925":1,"926":1,"930":1,"931":1,"932":3,"935":1,"936":2,"937":2,"938":1,"939":1,"942":1,"945":3,"949":1,"950":2,"951":2,"952":2,"953":2,"955":2,"957":1,"958":2,"960":1,"961":2,"965":1,"966":4,"968":1,"969":2,"970":1,"972":2,"973":1,"975":1,"976":1,"977":1,"978":3,"979":2,"980":1,"982":2,"985":1,"1001":2,"1006":1,"1008":1,"1009":1,"1015":1,"1017":1,"1018":1,"1019":1,"1025":1,"1028":2,"1031":1,"1032":2,"1035":1,"1036":2,"1037":2,"1041":3,"1043":2,"1044":1,"1046":1,"1048":2,"1051":1,"1053":1,"1054":1,"1058":1,"1059":4,"1060":1,"1063":1,"1064":2,"1066":1,"1067":1,"1068":1,"1071":1,"1073":3,"1077":2,"1078":1,"1079":1,"1084":1,"1088":1,"1096":2,"1097":2,"1098":1,"1099":1,"1102":1,"1103":1,"1104":3,"1109":1,"1114":2,"1116":1,"1132":2,"1136":3,"1140":2,"1146":1,"1147":1,"1150":1,"1155":1,"1157":1,"1158":1,"1163":1,"1164":2,"1167":2,"1168":3,"1173":1,"1180":3,"1188":1,"1199":1,"1212":1,"1221":3,"1223":1,"1228":1,"1229":1,"1233":1,"1241":1,"1242":1,"1243":1,"1245":1,"1247":1,"1251":2,"1254":3,"1264":1,"1266":1,"1268":3,"1270":2,"1281":3,"1283":7,"1284":1,"1295":1,"1308":2,"1314":1,"1316":2,"1317":2,"1318":1,"1323":2,"1327":1,"1328":2,"1329":3,"1337":2,"1338":1,"1339":1,"1350":1,"1351":1,"1355":1,"1361":1,"1362":1,"1363":2,"1365":1,"1368":1,"1374":1,"1375":5,"1377":1,"1378":2,"1379":2,"1380":1,"1381":1,"1382":1,"1384":2,"1386":1,"1401":1,"1402":1,"1403":1,"1404":1,"1407":1,"1408":1,"1411":1,"1412":1,"1416":1,"1418":1,"1419":1,"1423":3,"1424":1,"1425":1,"1437":1,"1439":2,"1441":1,"1442":1,"1444":2,"1446":1,"1448":1,"1454":3,"1456":3,"1457":2,"1472":1,"1473":1,"1477":1,"1491":1,"1500":3,"1502":1,"1503":1,"1506":1,"1508":1,"1510":1,"1511":2,"1516":2,"1519":1,"1522":1,"1525":1,"1528":1,"1529":1,"1531":2,"1532":2,"1539":3,"1541":2,"1542":2,"1546":2,"1550":1,"1552":2,"1553":1,"1554":1,"1558":1,"1561":1,"1567":1,"1570":2,"1572":1,"1573":1,"1575":1,"1580":2,"1587":1,"1590":1,"1591":2,"1593":1,"1595":2,"1596":1,"1599":1,"1602":1,"1604":1,"1606":1,"1608":1,"1610":1,"1611":2,"1612":1,"1613":5,"1614":4,"1615":3,"1617":1,"1618":1,"1619":1,"1621":2,"1622":1,"1623":2,"1624":5,"1626":1,"1627":1,"1628":1,"1630":1,"1632":2,"1633":1,"1638":1,"1639":1,"1655":1}}],["item",{"2":{"1615":1,"1624":2}}],["items",{"2":{"814":1,"1146":1,"1154":3,"1615":1}}],["iterating",{"2":{"549":1,"1107":1}}],["iteration",{"2":{"526":1,"534":1,"667":1,"1364":1,"1450":1}}],["iterations",{"2":{"284":1}}],["its",{"0":{"715":1},"2":{"197":1,"252":3,"303":1,"327":1,"409":3,"483":1,"531":1,"716":1,"1097":1,"1373":1,"1382":1,"1408":1,"1575":1}}],["itself",{"2":{"151":1,"266":1,"386":1,"400":1,"513":1,"1018":1,"1044":1,"1411":1,"1427":1,"1534":1}}],["it",{"0":{"252":1,"253":1,"265":1,"311":1,"315":1,"333":1,"353":1,"386":1,"389":1,"537":1,"783":1,"837":1,"857":1,"888":1,"900":1,"902":1,"1199":1,"1576":1,"1657":1},"1":{"312":1,"313":1,"314":1,"316":1,"317":1,"318":1,"334":1,"335":1,"336":1,"390":1,"391":1},"2":{"0":1,"14":1,"37":1,"67":1,"92":1,"95":1,"122":1,"123":1,"131":1,"135":1,"143":1,"154":1,"163":1,"168":1,"173":1,"174":1,"182":1,"188":2,"199":1,"218":2,"220":1,"221":1,"225":1,"251":2,"263":1,"266":1,"272":1,"273":1,"276":1,"277":1,"279":1,"284":1,"286":1,"297":1,"308":3,"318":1,"319":2,"320":2,"321":1,"331":3,"334":1,"343":1,"347":2,"350":1,"363":2,"364":2,"366":1,"369":1,"374":1,"375":1,"376":1,"378":1,"383":1,"384":1,"385":3,"390":3,"392":1,"393":1,"395":1,"399":3,"400":1,"406":3,"410":2,"427":1,"428":1,"442":1,"447":4,"449":3,"452":2,"453":1,"456":1,"461":1,"478":3,"491":1,"497":1,"498":2,"499":1,"507":2,"512":1,"513":1,"514":1,"515":2,"542":1,"545":2,"551":1,"564":1,"583":1,"585":1,"641":1,"653":1,"688":1,"696":1,"703":1,"709":1,"713":1,"715":1,"718":1,"725":1,"733":1,"736":1,"746":1,"752":1,"755":2,"781":1,"816":2,"822":1,"825":1,"835":1,"848":2,"859":1,"865":1,"867":1,"868":1,"871":2,"880":1,"883":1,"884":1,"891":2,"901":2,"902":1,"912":1,"914":1,"917":1,"918":1,"919":2,"921":1,"923":2,"927":2,"930":1,"932":1,"935":1,"936":1,"937":4,"938":1,"942":1,"943":2,"949":1,"950":2,"951":2,"953":1,"958":1,"959":1,"960":1,"961":1,"964":1,"968":3,"969":1,"972":1,"973":1,"985":1,"1000":2,"1001":1,"1006":2,"1007":1,"1009":2,"1019":1,"1025":1,"1026":1,"1027":1,"1028":1,"1037":1,"1038":1,"1043":2,"1044":2,"1046":1,"1053":1,"1063":1,"1066":2,"1067":2,"1071":1,"1073":2,"1078":3,"1079":1,"1095":1,"1096":1,"1104":1,"1109":2,"1111":1,"1118":1,"1129":1,"1136":1,"1139":1,"1147":1,"1157":1,"1158":2,"1162":2,"1164":2,"1188":2,"1208":1,"1221":2,"1223":1,"1241":1,"1243":2,"1245":1,"1265":1,"1266":1,"1268":2,"1281":1,"1296":1,"1307":1,"1308":1,"1309":1,"1310":1,"1323":1,"1324":1,"1327":4,"1328":2,"1337":2,"1338":1,"1339":1,"1340":1,"1363":1,"1366":1,"1379":3,"1380":6,"1382":2,"1384":1,"1407":1,"1411":1,"1416":2,"1419":1,"1424":1,"1425":1,"1427":1,"1434":1,"1441":1,"1442":1,"1456":1,"1457":1,"1458":1,"1472":1,"1482":1,"1495":2,"1501":1,"1502":1,"1503":1,"1504":2,"1507":1,"1516":1,"1519":1,"1524":1,"1525":1,"1528":1,"1541":1,"1553":1,"1557":2,"1558":2,"1570":1,"1572":2,"1580":1,"1587":3,"1589":1,"1593":3,"1598":1,"1599":1,"1617":1,"1622":1,"1625":2}}],["a716",{"2":{"1573":1}}],["ahead",{"0":{"1442":1},"1":{"1443":1},"2":{"1442":1}}],["a=",{"2":{"1333":1}}],["ambiguity",{"0":{"1305":1}}],["ambiguous",{"2":{"1304":1,"1305":1}}],["amp",{"0":{"372":1,"406":1,"559":1,"1073":1,"1167":1,"1168":1,"1229":1,"1230":1,"1231":1,"1254":1,"1255":1,"1339":1,"1669":1,"1670":1,"1671":1},"2":{"0":1,"37":1,"287":1,"386":1,"492":1,"727":2,"731":2,"732":2,"733":2,"734":2,"871":1,"926":10,"1240":1,"1241":1,"1244":2,"1528":2,"1547":1,"1551":1,"1613":1,"1621":1,"1656":3}}],["aad",{"2":{"1088":3,"1089":4}}],["aarch64",{"2":{"530":1}}],["aes",{"2":{"1086":1,"1087":1,"1088":1,"1095":1}}],["aeadalg",{"2":{"1088":2}}],["aead",{"0":{"1085":1},"1":{"1086":1,"1087":1,"1088":1,"1089":1},"2":{"1079":1,"1085":1,"1088":1,"1089":1,"1095":2}}],["abuse",{"2":{"1056":1}}],["absolute",{"2":{"883":1}}],["abstract",{"2":{"105":1,"286":1,"287":2,"412":1,"416":1,"419":1,"427":1,"468":1,"1411":1}}],["abstractions",{"2":{"1323":1}}],["abstraction",{"2":{"2":1,"39":1,"144":1,"463":1,"715":1,"874":1,"1051":1,"1096":1}}],["abrupt",{"2":{"859":1}}],["abnormal",{"2":{"858":1}}],["abc",{"2":{"749":1,"1549":1}}],["above",{"2":{"706":1}}],["about",{"0":{"723":1},"2":{"364":1,"861":1,"1139":1,"1497":1}}],["able",{"2":{"366":1}}],["abi",{"2":{"306":1,"764":1}}],["aim",{"2":{"837":1}}],["ai",{"2":{"199":1,"1656":1,"1657":1}}],["affinity",{"0":{"1048":1},"2":{"498":1,"1020":1,"1033":1,"1048":2}}],["affected",{"2":{"448":1,"858":2,"1319":1,"1333":1,"1472":1}}],["affect",{"2":{"186":1,"1456":1}}],["after=network",{"2":{"1124":1}}],["after",{"0":{"450":1},"1":{"451":1,"452":1,"453":1},"2":{"84":1,"133":1,"168":1,"242":1,"309":1,"344":1,"378":1,"406":1,"409":1,"447":2,"451":1,"453":2,"458":1,"459":2,"461":1,"512":1,"514":1,"547":1,"578":1,"616":2,"641":1,"645":1,"651":1,"675":1,"689":1,"706":1,"742":1,"787":1,"834":1,"836":1,"854":1,"873":1,"915":1,"1041":1,"1045":1,"1046":2,"1376":1,"1379":2,"1423":1,"1448":1,"1452":1,"1525":1}}],["audits",{"2":{"1656":1}}],["audit",{"0":{"1652":1},"2":{"862":1,"1652":1,"1653":1}}],["auditing",{"2":{"163":1,"577":1}}],["audience",{"2":{"164":1}}],["authuser>",{"2":{"918":2}}],["authuser",{"2":{"918":2}}],["authoring",{"2":{"931":1}}],["authorization",{"2":{"27":1,"88":1,"89":4,"90":1,"138":1,"155":1,"156":2,"157":1,"176":2,"507":2,"806":2,"909":2,"950":1,"959":1,"994":3}}],["author",{"2":{"683":1}}],["authenticity",{"2":{"1089":1,"1090":1,"1095":1}}],["authenticate",{"2":{"1095":1}}],["authenticates",{"2":{"1088":1}}],["authenticated",{"0":{"1085":1},"1":{"1086":1,"1087":1,"1088":1,"1089":1},"2":{"952":1,"1079":1,"1088":1}}],["authentication",{"2":{"101":1,"155":1,"641":1,"959":1,"1085":1}}],["authed",{"2":{"188":3,"1314":3}}],["authinfo",{"2":{"188":1,"1314":3}}],["authinfo>",{"2":{"188":3,"1314":3}}],["auth",{"0":{"87":1,"101":1,"194":1},"1":{"88":1,"89":1,"90":1,"91":1},"2":{"87":1,"88":1,"89":6,"91":2,"97":1,"176":1,"185":1,"188":1,"584":15,"585":2,"586":2,"589":1,"806":1,"818":1,"909":1,"949":1,"1513":2}}],["autocommit",{"2":{"1115":1}}],["auto|always|never>",{"2":{"669":1,"674":1}}],["automatic",{"2":{"163":1,"550":1,"588":1,"637":1,"872":1,"940":1,"972":1,"1033":1}}],["automatically",{"2":{"75":1,"95":1,"135":1,"139":1,"155":1,"162":1,"173":1,"323":1,"545":1,"548":1,"777":1,"808":1,"824":1,"871":1,"911":1,"923":1,"965":1,"978":1,"1057":1,"1061":1,"1066":1,"1155":1,"1318":1,"1389":1}}],["auto",{"0":{"34":1,"95":1,"173":1,"697":1,"816":1,"868":1,"923":1,"940":1,"970":1,"1043":1,"1238":1},"2":{"29":1,"34":2,"46":1,"51":1,"52":1,"63":1,"64":1,"70":3,"72":1,"73":1,"80":2,"84":1,"85":2,"86":4,"95":2,"108":15,"123":1,"132":2,"134":1,"177":1,"188":1,"202":1,"208":1,"228":1,"229":1,"282":1,"293":3,"310":4,"323":1,"327":1,"339":1,"340":1,"341":1,"342":1,"408":1,"424":1,"425":2,"426":1,"438":1,"442":4,"443":3,"453":1,"457":1,"475":1,"476":2,"477":1,"486":1,"494":2,"495":3,"496":2,"512":2,"513":1,"526":2,"528":2,"543":1,"549":1,"582":2,"609":1,"616":3,"617":1,"625":2,"627":1,"666":1,"676":1,"696":1,"701":1,"711":2,"721":1,"731":1,"732":1,"733":2,"743":1,"748":3,"749":1,"750":1,"765":1,"776":1,"789":1,"790":1,"791":1,"792":1,"797":1,"798":1,"816":2,"830":1,"845":2,"871":4,"876":1,"918":1,"926":2,"946":1,"950":2,"966":1,"968":1,"971":2,"999":1,"1022":2,"1030":2,"1039":1,"1083":2,"1084":1,"1088":1,"1093":1,"1106":1,"1107":5,"1108":4,"1112":1,"1119":2,"1128":1,"1147":1,"1150":1,"1170":2,"1171":1,"1173":1,"1185":2,"1215":1,"1217":1,"1218":2,"1219":1,"1223":1,"1230":2,"1243":1,"1244":1,"1252":1,"1255":1,"1260":1,"1262":1,"1263":2,"1298":3,"1314":1,"1318":3,"1319":3,"1320":3,"1321":2,"1328":1,"1337":3,"1346":1,"1353":1,"1357":1,"1377":8,"1378":8,"1379":10,"1380":2,"1413":6,"1438":2,"1452":1,"1491":2,"1519":1,"1530":2,"1561":2,"1587":3,"1593":1,"1600":2,"1601":1,"1602":1,"1603":2,"1604":1,"1606":2,"1608":1,"1609":1,"1612":2,"1613":4,"1614":2,"1615":2,"1621":1,"1622":1,"1627":15,"1628":3}}],["aware",{"2":{"143":1,"397":1,"475":1,"794":2,"973":1,"985":2,"1434":1}}],["awaiter",{"2":{"400":1,"491":1}}],["awaited",{"2":{"395":1,"445":1}}],["awaits",{"2":{"388":1,"393":1,"406":1}}],["awaiting",{"0":{"369":1,"407":1},"1":{"408":1},"2":{"291":1,"366":1,"397":1,"400":1,"408":1,"428":1,"433":1,"438":1,"444":1,"456":1,"459":1,"484":1}}],["awaitable",{"0":{"352":1,"438":1},"1":{"353":1},"2":{"265":1,"347":1}}],["await",{"0":{"402":1,"403":1,"408":1,"442":1},"2":{"84":2,"85":1,"86":4,"293":1,"310":4,"324":1,"325":1,"326":1,"327":2,"328":2,"329":1,"352":1,"353":1,"364":1,"365":1,"368":1,"375":1,"381":1,"382":1,"384":1,"391":1,"393":1,"397":3,"399":1,"400":1,"402":1,"403":1,"404":2,"408":6,"424":3,"425":4,"431":2,"433":2,"442":1,"443":2,"457":3,"459":1,"476":3,"477":2,"486":1,"494":1,"495":1,"496":1}}],["agnostic",{"2":{"1368":1,"1416":1,"1424":1,"1611":1,"1617":1}}],["aggressive",{"2":{"853":1}}],["aggregated",{"2":{"1581":1}}],["aggregate",{"2":{"141":1}}],["age=",{"2":{"1319":1}}],["age=31536000",{"2":{"968":1}}],["age",{"2":{"503":7,"658":2,"1107":4,"1108":1,"1112":1,"1176":2,"1213":1,"1273":1,"1288":1,"1298":2,"1299":2,"1300":1,"1316":1,"1318":1,"1320":6,"1321":1,"1328":7,"1337":1,"1587":3,"1591":2,"1601":3,"1602":2}}],["agent",{"2":{"27":1,"138":2,"176":2,"805":2,"871":2,"908":2,"994":2}}],["against",{"2":{"694":1,"953":1,"1063":1}}],["again",{"2":{"375":1}}],["average",{"2":{"510":1}}],["avoiding",{"0":{"147":1},"1":{"148":1,"149":1,"150":1}}],["avoids",{"2":{"134":1,"359":1,"418":1,"427":1,"725":1,"822":1,"831":1,"850":1,"853":1,"867":1,"958":1,"1057":1,"1264":1,"1482":1}}],["avoid",{"0":{"148":1,"150":1,"159":1,"862":1},"2":{"117":1,"142":2,"151":1,"152":1,"210":2,"231":1,"237":1,"264":1,"266":1,"310":1,"336":1,"343":1,"370":1,"507":1,"834":1,"854":1,"933":1,"959":1,"1049":1,"1051":1,"1339":1,"1364":1,"1374":1,"1508":1,"1638":1}}],["available",{"0":{"99":1,"1659":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1},"2":{"1":1,"38":1,"40":1,"177":1,"293":1,"539":1,"632":1,"865":1,"1127":2,"1284":2,"1511":1}}],["ack",{"2":{"1370":1}}],["acquisition",{"2":{"847":1}}],["acquires",{"2":{"1103":1}}],["acquire",{"2":{"276":1,"1103":1,"1106":1,"1108":1}}],["accidental",{"2":{"579":1,"587":1}}],["according",{"2":{"478":1,"514":1,"920":1,"1635":1}}],["accounts",{"2":{"379":1}}],["acceleration",{"2":{"209":1,"1638":1}}],["accessing",{"0":{"1532":1},"2":{"749":1,"1532":1}}],["accessible",{"2":{"250":1}}],["accessors",{"2":{"719":2,"720":1,"825":1,"829":1,"914":1,"1158":1}}],["accessor",{"0":{"260":1}}],["accessed",{"2":{"10":1,"826":1}}],["access",{"0":{"10":1,"52":1,"807":1,"828":1,"910":1,"1336":1},"2":{"10":1,"13":1,"24":1,"63":1,"122":1,"157":1,"336":1,"511":1,"575":1,"723":1,"825":1,"915":1,"950":1,"961":1,"1187":2,"1223":1,"1243":1,"1244":1,"1421":1,"1652":1}}],["acceptor",{"0":{"1017":1},"2":{"935":3,"1001":1,"1003":1,"1007":1,"1008":1,"1012":1,"1017":1,"1027":1}}],["acceptance",{"2":{"767":1}}],["accepted",{"2":{"425":1,"706":1,"729":1,"730":1,"737":1,"742":1,"877":1,"926":1,"1019":1,"1277":1,"1369":1,"1409":1,"1423":1,"1591":1}}],["accepting",{"2":{"317":1,"420":1,"874":1,"1001":1,"1012":1}}],["accepts",{"2":{"127":1,"309":1,"412":1,"419":1,"432":1,"815":1,"888":1,"932":1,"1018":1}}],["accept",{"0":{"86":1,"425":1,"1008":1,"1018":1},"2":{"5":1,"86":2,"176":2,"195":2,"308":1,"310":1,"317":1,"327":2,"417":1,"419":1,"420":4,"425":1,"426":1,"458":1,"475":1,"507":3,"512":2,"900":1,"935":2,"1003":1,"1007":1,"1008":3,"1018":2}}],["actions",{"2":{"370":1}}],["activetasks",{"2":{"942":1,"1037":1,"1038":1,"1043":1,"1045":2}}],["active",{"2":{"72":1,"256":1,"357":1,"366":2,"375":1,"377":1,"723":2,"858":1,"878":1,"884":1,"896":1,"942":1,"1011":1,"1033":1,"1044":1,"1109":1,"1142":1,"1213":1,"1298":1,"1299":2,"1300":1}}],["actually",{"2":{"417":1,"715":1}}],["actual",{"2":{"292":1,"764":1,"1015":1,"1068":1,"1362":1,"1381":1}}],["across",{"0":{"188":1,"1314":1},"2":{"273":1,"276":1,"277":1,"297":1,"305":1,"540":1,"550":1,"615":1,"715":1,"724":1,"850":1,"869":1,"949":1,"1052":1,"1064":1,"1139":1,"1144":1,"1167":1,"1489":1,"1536":1,"1566":1,"1614":1}}],["advisory",{"2":{"1653":1}}],["advances",{"2":{"1101":1}}],["advanced",{"0":{"597":1},"2":{"515":1,"815":1,"821":1,"838":1,"844":1,"873":1,"926":1,"1220":1,"1233":1}}],["adult",{"2":{"1601":1}}],["adjustments",{"2":{"1561":1}}],["adjusted",{"2":{"1558":1}}],["adjust",{"2":{"1354":1,"1358":1}}],["adheres",{"2":{"901":1}}],["adopted",{"2":{"845":1}}],["admin",{"2":{"157":1,"188":1,"196":2,"731":3,"732":1,"776":4,"817":1,"1223":1,"1235":1,"1301":1,"1313":3,"1314":1,"1607":1}}],["addr",{"2":{"1127":1}}],["address=true",{"2":{"1017":1}}],["addresses",{"2":{"290":1}}],["address>>",{"2":{"289":1}}],["address",{"0":{"288":1},"2":{"287":1,"288":3,"294":1,"317":1,"478":1,"1017":1,"1238":1}}],["addressable",{"2":{"3":1}}],["added",{"2":{"966":1}}],["adding",{"2":{"518":1,"556":1,"578":1,"642":1}}],["additional",{"2":{"133":1}}],["adds",{"2":{"518":1,"1305":1,"1604":1,"1618":1}}],["add",{"0":{"373":1,"516":1,"584":1},"1":{"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1},"2":{"85":2,"86":2,"168":1,"195":1,"310":2,"320":2,"326":2,"364":1,"368":1,"369":2,"384":1,"393":1,"425":1,"516":1,"517":1,"518":1,"520":1,"523":1,"538":3,"558":1,"578":1,"581":1,"584":2,"589":2,"634":1,"643":2,"646":1,"873":1,"965":2,"974":2,"1112":1,"1119":1,"1127":1,"1130":1,"1309":1,"1605":1,"1613":3,"1614":1,"1615":1,"1621":2,"1635":1,"1637":3}}],["adastra",{"2":{"576":1}}],["adapt",{"2":{"65":4,"181":1,"182":2,"187":1,"1309":2,"1310":2,"1361":1,"1362":1}}],["adapter",{"2":{"181":1,"912":2,"916":1,"925":1,"927":1,"1309":1,"1310":1,"1625":1}}],["adapters",{"0":{"65":1},"2":{"180":1,"913":1,"1268":1,"1580":1}}],["adapted",{"2":{"54":1,"65":4}}],["ada",{"2":{"52":1,"197":1,"918":1,"952":1,"990":1,"1170":2,"1223":1,"1231":1,"1235":1,"1238":1,"1288":1,"1297":1,"1300":1,"1301":1,"1587":2}}],["ascii",{"0":{"1194":1,"1539":1,"1541":1},"2":{"736":1,"744":1,"755":1,"758":1,"759":1,"774":2,"783":1,"1192":1,"1200":2,"1474":1,"1539":1,"1541":1,"1543":1,"1552":1}}],["asan",{"2":{"667":1,"672":1}}],["asks",{"2":{"932":1,"1059":1}}],["ask",{"2":{"331":1,"1524":1}}],["assumptions",{"2":{"1316":1,"1329":1}}],["assume",{"2":{"375":1,"378":1,"1096":1}}],["assumes",{"2":{"269":1,"1118":1}}],["assets",{"2":{"931":1,"939":1,"961":1,"962":1,"967":1,"968":1}}],["assertion",{"2":{"723":1}}],["asserts",{"2":{"723":2,"928":1}}],["assert",{"2":{"84":1,"410":1,"723":1,"815":1,"1377":3,"1378":5,"1379":7,"1381":1,"1532":1}}],["assignment",{"2":{"1231":1}}],["assign",{"2":{"656":1}}],["associated",{"2":{"292":1,"421":1,"474":1,"882":1}}],["asio",{"0":{"251":1,"256":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1},"2":{"251":3,"252":4,"253":2,"255":1,"256":2,"257":1,"259":1,"260":1,"261":1,"264":1,"265":5,"266":2,"269":1,"270":2,"271":1,"272":2,"287":1,"292":1,"336":1,"342":1,"412":1,"422":1,"463":1,"474":1,"931":1,"933":1,"1001":1,"1003":1,"1064":1}}],["asynchronously",{"2":{"375":1,"1001":1,"1061":1}}],["asynchronous",{"0":{"867":1,"1056":1},"2":{"286":1,"321":1,"364":1,"395":1,"1001":1}}],["async",{"0":{"82":1,"86":1,"103":1,"273":1,"296":1,"308":1,"321":1,"375":1,"412":1,"428":1,"463":1,"469":1,"470":1,"471":1,"1012":1,"1515":1,"1669":1},"1":{"83":1,"84":1,"85":1,"86":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"479":1},"2":{"82":1,"83":1,"84":10,"85":11,"86":18,"103":1,"110":1,"134":1,"251":2,"252":2,"253":1,"259":1,"265":1,"273":2,"274":1,"279":2,"281":3,"282":2,"283":3,"285":1,"286":2,"287":2,"289":1,"291":1,"293":3,"294":1,"296":1,"297":1,"303":2,"304":1,"305":1,"307":2,"308":1,"309":1,"310":12,"317":2,"321":1,"322":2,"323":6,"324":1,"326":1,"327":3,"329":1,"330":1,"331":2,"332":1,"336":1,"337":3,"339":1,"340":1,"341":1,"342":1,"346":1,"347":1,"348":2,"362":1,"363":1,"364":2,"365":1,"366":3,"368":8,"375":3,"379":1,"381":1,"382":1,"384":2,"385":1,"386":1,"387":1,"392":3,"395":2,"396":2,"402":2,"403":1,"404":2,"406":4,"412":2,"413":5,"416":3,"417":4,"419":2,"420":3,"424":4,"425":4,"426":4,"428":2,"429":1,"432":1,"442":4,"443":4,"445":1,"446":4,"447":1,"449":2,"453":3,"457":5,"459":6,"463":1,"464":5,"467":1,"468":3,"475":1,"476":3,"477":3,"478":2,"479":1,"480":1,"481":1,"494":5,"495":1,"496":1,"497":6,"549":1,"826":1,"829":2,"831":1,"872":1,"902":1,"933":1,"935":2,"1003":1,"1007":1,"1008":2,"1013":2,"1018":1,"1023":1,"1027":1,"1032":1,"1056":1,"1062":1,"1066":1,"1067":1,"1515":4,"1649":1,"1656":1,"1668":1}}],["as",{"0":{"283":1},"2":{"42":1,"105":1,"232":1,"238":1,"256":2,"284":1,"294":1,"320":1,"330":2,"359":1,"378":1,"390":1,"393":1,"395":1,"411":1,"458":2,"483":1,"507":2,"546":2,"671":2,"723":1,"814":1,"838":1,"862":1,"880":1,"895":1,"913":1,"914":1,"937":1,"938":1,"948":1,"951":1,"962":2,"966":1,"968":1,"975":2,"976":2,"977":1,"1031":1,"1095":1,"1119":1,"1156":1,"1165":1,"1211":3,"1212":1,"1214":1,"1268":2,"1271":1,"1272":1,"1277":1,"1284":7,"1285":4,"1305":1,"1322":1,"1328":1,"1337":2,"1362":1,"1363":1,"1415":1,"1433":1,"1434":1,"1473":1,"1476":1,"1477":1,"1480":1,"1483":1,"1502":1,"1550":1,"1573":1,"1612":3,"1613":1}}],["analyze",{"2":{"1650":1}}],["analysis",{"2":{"838":1,"1652":1}}],["anchored",{"2":{"1598":1}}],["ansi",{"2":{"1522":1}}],["anim=1",{"2":{"1503":1}}],["animations",{"0":{"1503":1},"2":{"1488":1,"1503":2}}],["anim",{"2":{"1488":1,"1503":1}}],["anonymous",{"2":{"1185":1}}],["another",{"0":{"282":1},"2":{"475":1,"902":1,"1051":1}}],["anti",{"0":{"856":1},"1":{"857":1,"858":1},"2":{"870":1}}],["announce",{"2":{"618":1}}],["an",{"0":{"283":1,"1172":1,"1173":1,"1176":1,"1177":1,"1180":1,"1564":1,"1570":1},"2":{"117":1,"118":1,"163":1,"165":1,"206":1,"218":1,"219":1,"221":1,"238":1,"239":1,"251":2,"252":2,"276":1,"279":1,"286":1,"317":1,"323":1,"336":1,"347":2,"365":1,"366":2,"368":1,"385":1,"386":1,"388":1,"390":1,"395":1,"406":1,"415":1,"416":1,"419":1,"420":1,"421":1,"456":1,"459":1,"463":1,"466":1,"477":1,"478":2,"491":1,"498":1,"510":1,"511":1,"518":1,"592":1,"598":1,"703":1,"720":1,"723":1,"725":1,"729":1,"731":1,"734":1,"746":1,"750":1,"770":1,"771":1,"774":1,"781":1,"785":1,"817":1,"820":1,"821":1,"824":1,"844":1,"853":1,"862":1,"874":2,"878":1,"881":1,"885":1,"887":1,"912":1,"913":1,"929":1,"932":1,"933":3,"935":2,"943":2,"948":1,"955":1,"957":1,"961":2,"1001":1,"1006":1,"1008":1,"1039":1,"1046":1,"1051":1,"1068":1,"1089":1,"1142":1,"1147":1,"1149":2,"1161":1,"1167":2,"1168":1,"1180":2,"1199":1,"1288":1,"1305":1,"1314":1,"1328":1,"1351":2,"1355":2,"1362":1,"1363":1,"1364":1,"1366":1,"1374":1,"1375":1,"1376":1,"1384":1,"1408":1,"1466":1,"1479":1,"1483":1,"1515":1,"1532":1,"1556":2,"1570":1,"1612":1,"1614":1,"1615":4,"1622":1,"1624":3}}],["any>>",{"2":{"1320":2,"1328":2}}],["anything",{"2":{"385":1,"1525":1}}],["any",{"0":{"328":1,"488":1,"491":1,"496":1,"1339":2},"2":{"42":1,"215":1,"266":1,"328":1,"330":1,"366":1,"377":2,"426":1,"433":1,"456":1,"461":1,"478":1,"480":2,"483":1,"488":1,"491":2,"492":1,"496":1,"498":2,"511":1,"515":1,"579":1,"742":1,"918":1,"939":1,"942":1,"952":1,"1231":1,"1252":1,"1255":1,"1316":1,"1328":1,"1339":3,"1384":1,"1399":1,"1409":1,"1488":1,"1554":1,"1586":1,"1619":1,"1629":1,"1669":1}}],["and",{"0":{"162":1,"164":1,"177":1,"188":1,"266":1,"284":1,"312":1,"319":1,"323":1,"328":1,"343":1,"370":1,"378":1,"393":1,"398":1,"405":1,"410":1,"437":1,"444":1,"449":1,"460":1,"472":1,"478":1,"492":1,"513":1,"813":1,"821":1,"833":1,"840":1,"849":1,"852":1,"915":1,"939":1,"941":1,"944":1,"955":1,"961":1,"1022":1,"1024":1,"1046":1,"1077":1,"1087":1,"1097":1,"1101":1,"1102":1,"1104":1,"1106":1,"1121":1,"1129":1,"1146":1,"1215":1,"1238":1,"1239":1,"1294":1,"1302":1,"1313":1,"1314":1,"1368":1,"1504":1,"1523":1,"1539":1,"1542":1,"1544":1,"1552":1,"1559":1,"1565":1,"1567":1,"1613":1},"1":{"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"399":1,"400":1,"406":1,"841":1,"842":1,"850":1,"851":1,"853":1,"854":1,"940":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"1025":1,"1026":1,"1027":1,"1028":1,"1122":1,"1123":1,"1240":1,"1241":1,"1303":1,"1304":1,"1369":1,"1370":1,"1543":1,"1545":1,"1546":1,"1547":1,"1566":1,"1567":1},"2":{"4":1,"13":1,"14":1,"40":1,"53":3,"54":1,"66":1,"67":1,"75":1,"80":1,"81":1,"87":1,"98":1,"106":1,"108":1,"110":1,"119":1,"125":1,"126":1,"127":1,"130":2,"135":1,"136":1,"140":1,"146":1,"151":1,"163":1,"164":1,"168":1,"174":1,"180":1,"181":1,"186":1,"188":1,"196":1,"197":1,"199":1,"207":1,"210":1,"213":1,"214":1,"215":3,"216":1,"217":1,"218":1,"219":2,"221":1,"224":1,"225":1,"239":3,"251":1,"252":2,"253":1,"257":2,"264":1,"268":1,"270":1,"271":3,"272":1,"273":1,"274":1,"284":1,"285":1,"286":1,"293":1,"294":1,"307":1,"309":1,"316":2,"317":1,"320":2,"321":1,"322":1,"324":1,"325":1,"330":1,"331":3,"334":1,"336":2,"339":1,"343":1,"346":1,"355":1,"364":1,"366":2,"368":1,"369":2,"372":1,"375":1,"377":2,"378":1,"384":1,"385":2,"386":1,"393":2,"394":3,"395":1,"397":2,"400":1,"404":1,"406":3,"408":3,"411":2,"412":2,"415":1,"417":1,"418":1,"420":1,"422":1,"425":1,"427":1,"428":2,"431":2,"432":2,"436":1,"445":4,"447":1,"449":1,"453":1,"458":1,"459":1,"461":3,"463":4,"466":1,"474":1,"476":1,"477":1,"478":1,"479":2,"480":4,"484":1,"491":1,"498":3,"499":2,"502":1,"503":1,"504":1,"505":1,"509":1,"513":1,"514":1,"515":4,"524":1,"534":1,"535":1,"541":1,"545":1,"546":1,"550":1,"551":1,"553":1,"555":1,"556":1,"557":1,"559":1,"560":1,"561":1,"563":1,"564":1,"567":1,"568":1,"602":1,"604":1,"608":1,"612":1,"626":1,"641":1,"644":1,"645":1,"646":1,"652":1,"662":1,"663":1,"667":1,"671":1,"678":1,"689":1,"702":1,"703":1,"710":2,"712":3,"713":2,"715":1,"723":1,"724":1,"725":1,"729":1,"734":1,"736":2,"746":3,"755":1,"759":2,"781":2,"783":2,"793":1,"794":1,"811":1,"812":1,"816":3,"817":1,"818":1,"821":1,"822":1,"824":2,"825":1,"827":1,"831":1,"834":1,"835":2,"842":1,"850":1,"853":3,"855":2,"858":1,"859":1,"867":2,"869":2,"872":1,"873":2,"874":1,"877":1,"880":1,"881":1,"884":1,"887":1,"888":1,"889":1,"891":1,"895":1,"898":1,"902":1,"912":3,"914":1,"916":1,"917":1,"920":1,"921":1,"923":1,"925":1,"926":2,"927":1,"931":4,"932":2,"933":2,"935":3,"936":3,"937":1,"939":1,"942":1,"943":2,"948":2,"951":1,"952":1,"958":1,"961":1,"964":1,"966":1,"967":3,"968":4,"970":2,"971":1,"972":1,"974":1,"978":1,"983":2,"986":1,"999":1,"1000":3,"1001":2,"1003":1,"1004":3,"1006":1,"1007":2,"1009":1,"1012":1,"1013":1,"1018":1,"1025":1,"1027":1,"1028":1,"1031":1,"1033":1,"1037":1,"1039":1,"1041":2,"1042":1,"1043":3,"1045":2,"1046":2,"1049":1,"1052":1,"1056":1,"1065":1,"1067":1,"1068":2,"1071":3,"1084":1,"1085":1,"1088":1,"1090":1,"1095":3,"1096":2,"1100":1,"1101":1,"1103":3,"1104":3,"1107":1,"1109":1,"1116":1,"1117":2,"1126":1,"1127":1,"1128":1,"1132":1,"1134":1,"1136":2,"1140":1,"1144":1,"1156":1,"1157":2,"1158":2,"1162":1,"1164":1,"1167":1,"1168":1,"1187":1,"1188":2,"1200":1,"1208":1,"1209":2,"1219":1,"1220":1,"1221":3,"1223":1,"1230":1,"1243":1,"1245":2,"1248":2,"1254":1,"1264":1,"1265":1,"1268":1,"1272":1,"1277":1,"1304":2,"1305":1,"1306":1,"1307":2,"1309":1,"1313":1,"1315":2,"1317":1,"1318":1,"1322":1,"1323":1,"1327":1,"1328":1,"1339":1,"1340":1,"1345":1,"1350":1,"1359":1,"1361":1,"1362":1,"1363":1,"1364":3,"1370":1,"1375":2,"1376":1,"1377":1,"1378":1,"1379":2,"1380":1,"1381":2,"1384":1,"1386":2,"1399":1,"1409":1,"1411":1,"1412":1,"1417":1,"1419":1,"1437":1,"1439":1,"1444":1,"1458":1,"1472":1,"1473":3,"1474":2,"1482":1,"1483":1,"1489":2,"1490":2,"1493":2,"1494":2,"1495":1,"1501":1,"1502":1,"1504":1,"1505":2,"1507":1,"1514":2,"1521":2,"1525":1,"1526":2,"1534":1,"1536":1,"1539":1,"1551":1,"1554":2,"1556":1,"1567":3,"1571":1,"1572":2,"1580":1,"1586":1,"1591":1,"1598":1,"1604":1,"1610":1,"1611":3,"1612":1,"1613":1,"1614":3,"1615":1,"1616":1,"1618":4,"1620":1,"1623":1,"1624":2,"1625":1,"1626":1,"1627":1,"1630":1,"1638":2,"1648":1,"1649":2,"1650":1,"1652":1,"1655":1,"1656":2,"1657":2,"1666":2,"1668":4,"1669":2,"1670":1,"1671":1}}],["arbitrary",{"2":{"1570":1}}],["arithmetic",{"0":{"1468":1}}],["arming",{"2":{"1018":1}}],["arms",{"2":{"1018":1}}],["architectural",{"2":{"579":1,"588":1,"1648":1}}],["architecture",{"0":{"203":1,"253":1,"933":1,"1054":1,"1361":1,"1411":1,"1444":1,"1649":1,"1671":1},"2":{"151":1,"163":1,"589":1,"1652":1,"1653":1,"1656":1,"1658":1,"1666":1,"1668":1,"1672":1}}],["archive",{"2":{"570":1,"624":1,"626":1,"628":1,"701":1}}],["arch>",{"2":{"569":1}}],["artifact",{"2":{"559":1,"564":1,"568":1,"622":1,"698":1}}],["artifacts",{"2":{"534":1}}],["artificial",{"2":{"151":1}}],["args>",{"2":{"876":1}}],["args",{"2":{"525":1,"544":1,"547":1,"670":2,"676":3,"691":1,"876":3,"1040":3,"1124":1,"1149":1}}],["arguments",{"0":{"1149":1},"2":{"530":1,"670":1,"678":1,"690":1,"751":1}}],["argument",{"2":{"299":1,"670":1,"1142":1}}],["around",{"2":{"214":1,"383":1,"410":1,"433":1,"462":1,"499":1,"553":1,"836":1,"885":1,"949":1,"1096":1,"1098":1,"1158":1}}],["arriving",{"2":{"379":1}}],["arrive",{"2":{"232":1,"365":1}}],["arrives",{"2":{"121":1,"130":1,"366":1,"378":1,"379":1,"957":1}}],["arr",{"2":{"43":3,"47":1,"1161":1,"1173":2,"1183":2,"1212":7,"1217":1,"1615":2}}],["arrays",{"0":{"657":1,"1146":1,"1280":1},"2":{"1156":1,"1157":1,"1268":1,"1307":1}}],["array>",{"2":{"424":1,"425":1,"476":1,"477":1,"1083":1}}],["array",{"0":{"43":1,"47":1,"777":1,"1173":1,"1177":1,"1212":1,"1217":1,"1226":1,"1236":1,"1271":1,"1288":1,"1289":1,"1301":1},"1":{"1290":1,"1291":1,"1292":1},"2":{"41":2,"42":1,"43":2,"44":1,"229":2,"424":1,"425":1,"476":1,"477":1,"777":1,"990":1,"1083":1,"1084":1,"1088":2,"1145":1,"1168":1,"1181":1,"1183":1,"1210":2,"1212":1,"1214":2,"1216":1,"1230":3,"1238":1,"1242":1,"1268":1,"1270":3,"1271":1,"1273":1,"1280":5,"1283":1,"1284":1,"1288":4,"1291":1,"1301":2,"1303":2,"1304":3,"1307":3,"1615":4,"1621":1,"1622":2,"1624":1}}],["are",{"0":{"486":1,"1151":1},"2":{"14":1,"35":1,"67":1,"97":2,"105":2,"120":1,"125":1,"133":1,"141":1,"145":1,"146":1,"189":1,"212":1,"226":1,"239":1,"244":1,"250":1,"256":1,"277":2,"284":1,"291":1,"294":1,"320":1,"327":1,"329":1,"331":1,"336":1,"342":1,"343":1,"344":1,"359":1,"364":1,"366":1,"378":1,"383":1,"386":1,"393":1,"395":1,"397":1,"408":1,"410":1,"412":1,"421":1,"424":1,"448":1,"460":1,"480":1,"504":1,"522":1,"531":1,"645":1,"658":1,"661":2,"684":1,"716":1,"724":1,"737":1,"744":1,"759":2,"783":1,"821":1,"824":1,"826":1,"827":1,"836":1,"838":1,"845":1,"853":1,"858":1,"872":1,"881":1,"882":1,"916":1,"923":1,"936":1,"937":2,"946":2,"954":1,"956":1,"962":1,"965":1,"968":2,"975":1,"986":1,"998":1,"1025":1,"1031":1,"1040":1,"1044":1,"1045":2,"1051":1,"1060":1,"1061":2,"1064":1,"1065":1,"1101":2,"1115":2,"1140":1,"1146":1,"1156":1,"1223":1,"1227":1,"1231":1,"1242":1,"1272":2,"1277":1,"1281":1,"1303":1,"1328":1,"1363":1,"1366":1,"1371":1,"1376":2,"1381":1,"1406":1,"1409":3,"1423":1,"1425":1,"1442":1,"1456":1,"1474":1,"1488":2,"1489":1,"1500":2,"1503":1,"1507":2,"1523":1,"1550":2,"1551":1,"1552":1,"1556":1,"1596":2,"1614":1,"1615":2,"1626":1,"1637":2,"1647":1}}],["a",{"0":{"172":1,"185":1,"186":1,"196":1,"350":1,"351":1,"369":1,"402":2,"403":1,"442":1,"450":1,"584":1,"644":1,"1075":1,"1122":1,"1145":1,"1150":1,"1170":1,"1171":1,"1175":2,"1176":1,"1177":1,"1179":1,"1205":1,"1235":1,"1237":2,"1461":1,"1506":1,"1545":1,"1546":1,"1562":1,"1573":1,"1600":1,"1612":1,"1620":1},"1":{"451":1,"452":1,"453":1,"1146":1,"1147":1,"1601":1},"2":{"34":1,"35":1,"47":1,"48":1,"50":1,"72":1,"73":1,"74":1,"80":1,"87":1,"88":3,"91":2,"95":1,"100":1,"101":1,"102":1,"103":1,"104":1,"106":2,"116":1,"117":1,"121":1,"123":1,"128":1,"130":1,"132":3,"133":2,"145":1,"146":1,"161":1,"162":1,"163":1,"167":1,"168":3,"173":2,"179":1,"181":2,"182":2,"185":1,"187":1,"188":6,"195":1,"196":1,"197":1,"199":1,"206":4,"207":2,"210":1,"212":2,"215":2,"220":4,"222":1,"223":1,"225":1,"228":1,"234":3,"235":1,"236":1,"244":1,"251":1,"252":1,"253":1,"255":1,"256":2,"257":1,"259":1,"264":2,"265":1,"273":3,"274":6,"276":1,"277":2,"278":3,"279":2,"281":1,"288":4,"290":1,"294":1,"297":2,"308":3,"309":1,"310":3,"318":1,"319":2,"320":2,"321":1,"323":1,"325":1,"328":3,"331":1,"334":1,"336":1,"343":2,"344":1,"347":1,"350":1,"351":1,"359":2,"361":2,"362":1,"364":2,"365":4,"366":6,"368":1,"369":3,"372":1,"373":1,"374":1,"375":3,"376":1,"378":1,"379":2,"381":1,"383":2,"385":2,"390":3,"391":2,"392":1,"393":2,"395":1,"397":2,"399":1,"400":1,"404":1,"406":1,"409":1,"411":1,"412":2,"415":2,"416":1,"417":2,"419":1,"420":1,"424":2,"425":2,"426":1,"428":2,"432":2,"433":1,"438":1,"444":1,"445":2,"447":4,"449":3,"452":1,"456":1,"458":1,"460":1,"463":1,"466":2,"469":1,"474":2,"475":1,"477":3,"478":3,"483":2,"486":3,"491":1,"494":4,"498":1,"499":4,"501":1,"502":2,"505":2,"507":2,"509":1,"510":1,"511":4,"512":1,"516":1,"518":2,"521":1,"522":1,"524":1,"532":1,"535":2,"557":1,"558":1,"565":1,"567":1,"577":1,"578":1,"579":1,"581":1,"589":1,"590":1,"592":1,"598":2,"613":1,"615":1,"620":5,"621":1,"622":2,"624":2,"630":1,"632":3,"641":1,"644":2,"647":1,"649":1,"653":1,"659":1,"661":1,"663":1,"666":1,"667":1,"668":1,"688":1,"694":1,"696":1,"703":1,"706":2,"708":2,"709":1,"710":1,"713":1,"715":3,"717":1,"722":1,"723":5,"725":2,"727":2,"729":2,"730":1,"731":2,"732":4,"733":3,"734":1,"736":4,"744":1,"746":1,"759":1,"770":1,"771":1,"781":2,"787":2,"793":1,"812":1,"813":1,"814":1,"816":3,"817":1,"819":3,"821":1,"822":1,"825":1,"827":1,"828":3,"829":1,"835":2,"836":2,"837":1,"838":1,"844":1,"845":1,"847":2,"850":1,"851":1,"853":2,"854":1,"855":1,"858":3,"859":1,"861":1,"862":1,"868":1,"870":1,"871":1,"873":1,"874":2,"877":1,"880":3,"881":2,"882":1,"884":1,"886":1,"887":2,"888":1,"890":1,"891":2,"895":1,"896":1,"899":1,"912":3,"914":1,"916":2,"918":1,"920":1,"923":1,"924":1,"925":2,"926":2,"927":2,"928":1,"930":1,"932":3,"933":1,"935":2,"936":6,"937":4,"938":1,"940":1,"942":3,"943":3,"945":1,"946":1,"949":1,"950":1,"951":1,"953":1,"955":2,"958":1,"965":1,"966":2,"969":1,"972":1,"975":1,"976":1,"978":1,"998":1,"999":1,"1001":4,"1006":1,"1008":1,"1011":1,"1017":1,"1019":2,"1020":1,"1022":1,"1023":1,"1026":1,"1028":2,"1031":1,"1032":1,"1033":3,"1035":1,"1037":2,"1038":1,"1041":1,"1042":2,"1043":2,"1044":1,"1045":1,"1048":3,"1050":2,"1051":1,"1052":1,"1053":1,"1057":1,"1058":2,"1063":2,"1068":4,"1071":2,"1073":2,"1077":1,"1078":1,"1079":1,"1081":1,"1083":2,"1084":1,"1087":1,"1089":1,"1096":6,"1097":1,"1098":1,"1099":2,"1100":6,"1101":1,"1103":3,"1104":3,"1109":1,"1111":1,"1114":1,"1115":2,"1116":1,"1118":3,"1119":1,"1124":1,"1127":1,"1129":2,"1130":1,"1140":1,"1142":1,"1143":1,"1145":2,"1146":4,"1149":2,"1150":3,"1155":2,"1156":1,"1157":1,"1161":1,"1163":2,"1164":1,"1167":2,"1168":1,"1180":1,"1188":1,"1198":1,"1216":1,"1217":1,"1218":1,"1221":2,"1227":3,"1233":1,"1242":3,"1244":1,"1251":1,"1263":2,"1266":1,"1268":1,"1270":4,"1271":1,"1272":2,"1275":1,"1277":1,"1279":1,"1288":1,"1294":2,"1295":1,"1296":2,"1305":1,"1306":1,"1307":1,"1308":3,"1309":1,"1310":1,"1311":1,"1313":3,"1314":10,"1315":2,"1316":1,"1320":1,"1321":1,"1323":1,"1327":2,"1328":2,"1329":2,"1335":1,"1337":2,"1338":1,"1346":2,"1350":1,"1351":1,"1353":1,"1355":1,"1357":1,"1359":1,"1362":2,"1364":1,"1365":1,"1372":1,"1374":1,"1375":1,"1376":5,"1379":1,"1380":1,"1381":1,"1419":1,"1434":2,"1439":1,"1442":1,"1445":1,"1446":1,"1447":1,"1459":1,"1469":1,"1470":1,"1471":1,"1476":1,"1477":1,"1478":1,"1480":1,"1482":1,"1483":1,"1491":1,"1494":1,"1495":2,"1497":1,"1503":1,"1506":1,"1508":3,"1511":1,"1513":1,"1519":1,"1524":2,"1528":1,"1529":2,"1534":1,"1536":1,"1539":1,"1545":2,"1546":2,"1547":2,"1551":1,"1554":2,"1558":1,"1573":2,"1575":1,"1590":1,"1591":1,"1592":2,"1593":4,"1595":1,"1596":1,"1599":1,"1602":3,"1603":1,"1611":2,"1612":5,"1613":8,"1614":2,"1615":2,"1616":2,"1617":1,"1618":4,"1619":2,"1620":4,"1621":5,"1622":2,"1623":2,"1624":3,"1625":1,"1626":3,"1627":2,"1628":1,"1629":1,"1630":1,"1638":1,"1639":2,"1655":1}}],["alternating",{"2":{"1142":1}}],["alternative",{"2":{"713":1,"1528":1,"1612":1,"1613":1,"1620":1}}],["alg",{"2":{"1088":2,"1089":1}}],["algorithm",{"2":{"1086":1,"1091":1}}],["algorithms",{"0":{"1086":1,"1091":1}}],["almost",{"2":{"848":1}}],["also",{"2":{"320":1,"334":1,"378":1,"397":1,"432":1,"442":1,"449":1,"502":1,"828":1,"831":1,"865":1,"938":1,"974":1,"1075":1,"1102":1,"1104":1,"1158":1,"1181":1,"1263":1,"1304":1,"1338":1,"1495":1,"1504":1,"1507":1}}],["aligns",{"2":{"842":1}}],["aliases",{"0":{"1302":1,"1304":1},"1":{"1303":1,"1304":1},"2":{"1183":1,"1304":1,"1307":1}}],["alias",{"2":{"584":1,"669":1,"716":1,"1139":1,"1140":1,"1165":1,"1195":1,"1208":1}}],["alive",{"0":{"256":1,"1060":1},"2":{"235":1,"252":1,"256":1,"268":1,"271":1,"319":1,"320":1,"925":1,"932":1,"936":1,"948":1,"1022":1,"1053":1,"1060":1,"1061":1,"1067":1}}],["alice",{"2":{"77":1,"107":1,"1107":1,"1213":1,"1273":1,"1318":2,"1319":1,"1521":1,"1629":1}}],["already",{"2":{"173":1,"252":1,"374":1,"375":1,"408":1,"432":1,"533":1,"568":1,"635":1,"881":1,"1026":1,"1078":1,"1118":1,"1147":1,"1156":1,"1241":1,"1288":2,"1372":1,"1482":1,"1580":1,"1598":1,"1616":1}}],["allocates",{"2":{"1167":1}}],["allocating",{"2":{"1161":1}}],["allocation",{"2":{"297":1,"306":1,"703":1,"712":1,"725":1,"794":1,"795":1,"847":1,"973":1,"1473":1,"1534":1}}],["allocations",{"0":{"148":1,"1567":1},"2":{"231":1,"273":1,"418":1,"744":1,"1493":1,"1578":1}}],["allowlist",{"2":{"1502":1}}],["allowing",{"2":{"412":1,"427":1,"844":1,"874":1}}],["allowed",{"0":{"1607":1},"2":{"261":1,"503":2,"585":1,"758":1,"759":1,"766":1,"883":1,"893":1,"1430":1,"1503":1}}],["allow",{"2":{"195":1,"503":2,"513":2,"877":1,"1052":1,"1126":1,"1219":1,"1327":1}}],["allows",{"2":{"63":1,"326":1,"356":1,"418":1,"422":1,"617":1,"653":1,"819":1,"901":1,"951":1,"977":1,"1059":1}}],["all",{"0":{"77":1,"184":1,"328":1,"487":1,"490":1,"494":1,"495":1},"2":{"5":1,"14":1,"59":1,"67":1,"82":1,"221":1,"245":1,"270":1,"328":2,"330":1,"356":1,"417":1,"436":1,"449":1,"480":3,"483":3,"486":1,"487":1,"490":1,"494":1,"495":1,"498":1,"511":1,"575":1,"645":1,"727":1,"837":1,"900":1,"981":1,"1014":1,"1019":1,"1043":1,"1046":1,"1061":1,"1096":1,"1123":1,"1252":1,"1263":1,"1277":1,"1308":1,"1328":1,"1351":1,"1355":1,"1363":1,"1366":1,"1375":1,"1378":1,"1379":1,"1406":1,"1409":1,"1482":1,"1483":1,"1521":1,"1552":1,"1586":1,"1600":1,"1603":1,"1606":1,"1609":2,"1615":1,"1626":2,"1634":1,"1669":1}}],["always|1|true",{"2":{"1500":1}}],["always",{"2":{"4":1,"13":1,"117":2,"133":1,"153":1,"157":1,"161":1,"216":1,"219":1,"239":1,"271":1,"330":1,"353":1,"390":1,"397":1,"399":1,"445":1,"531":1,"746":1,"749":1,"797":1,"829":1,"834":1,"845":1,"881":1,"948":1,"1032":1,"1084":1,"1089":1,"1095":1,"1245":1,"1264":1,"1377":2,"1381":1,"1441":1,"1488":1,"1610":1}}],["attacks",{"2":{"1057":1}}],["attached",{"2":{"108":1,"188":1,"817":1,"1627":1}}],["attachedruntime",{"2":{"108":1,"1627":1}}],["attach",{"2":{"79":2,"108":1,"164":1,"974":1,"1308":1,"1311":1,"1627":1}}],["attempt",{"0":{"1396":1},"2":{"867":1,"1046":1,"1048":1,"1387":1,"1409":1,"1423":1,"1424":1,"1428":2,"1433":2,"1436":2,"1437":2,"1438":3}}],["attempts",{"0":{"1430":1},"2":{"217":1,"221":1,"978":1,"1063":1,"1384":1,"1396":1,"1406":1,"1427":1,"1428":1,"1430":2,"1436":1}}],["atomic",{"0":{"849":1},"1":{"850":1,"851":1},"2":{"137":1,"273":1,"276":1,"498":1,"836":1,"850":1,"870":1,"1037":1,"1199":2,"1407":1}}],["atoi",{"2":{"12":1}}],["at",{"0":{"1292":1,"1394":1,"1395":1,"1397":1},"2":{"4":2,"13":1,"161":1,"210":1,"211":1,"216":2,"284":1,"340":1,"366":1,"375":1,"386":1,"388":1,"390":1,"397":1,"400":2,"406":1,"410":1,"432":1,"443":1,"458":1,"501":1,"512":1,"514":1,"515":1,"783":1,"815":1,"825":1,"834":2,"853":1,"858":1,"873":1,"930":1,"939":1,"977":1,"1033":1,"1036":1,"1039":3,"1103":2,"1109":1,"1146":1,"1147":1,"1149":1,"1271":1,"1292":1,"1323":1,"1335":1,"1387":3,"1404":1,"1418":1,"1420":1,"1433":1,"1438":1,"1447":1,"1448":1,"1483":1,"1519":1,"1526":1,"1567":1}}],["apt",{"2":{"245":2,"1123":2,"1127":1,"1128":1}}],["approach",{"2":{"853":1,"1506":1}}],["appropriately",{"2":{"1078":1}}],["appropriate",{"2":{"117":1,"948":1,"1032":1}}],["appear",{"2":{"1043":1}}],["appears",{"2":{"787":1,"969":1,"1551":1}}],["appended",{"2":{"1449":1}}],["appends",{"2":{"1449":1,"1521":1}}],["appendix",{"0":{"1380":1}}],["append",{"0":{"1290":1,"1452":1},"2":{"310":2,"921":1,"1442":1,"1444":3,"1445":1,"1446":2,"1448":1,"1449":2,"1452":2,"1457":1}}],["applyall",{"2":{"1112":1}}],["applying",{"2":{"1053":1}}],["apply",{"2":{"606":1,"612":1,"649":1,"858":1,"1233":1,"1343":1,"1349":1,"1412":1,"1434":2}}],["applicable",{"2":{"708":1}}],["application",{"0":{"596":1,"599":1,"1058":1,"1204":1},"2":{"120":1,"197":2,"507":1,"512":1,"592":1,"595":1,"598":1,"601":1,"661":1,"663":1,"820":1,"902":1,"1067":1,"1220":1,"1373":1}}],["applications",{"2":{"116":1,"321":1,"543":1,"555":1,"865":1,"960":1,"1455":1}}],["applied",{"2":{"607":1,"608":1,"854":1,"1344":1,"1345":1,"1427":1,"1442":1}}],["applies",{"2":{"59":1,"60":1,"61":1,"513":1,"919":1,"932":1,"1365":1}}],["apps",{"2":{"110":1,"912":1,"929":1,"1096":1,"1419":1,"1494":1,"1527":1}}],["app",{"0":{"15":1,"900":1,"1075":1,"1134":1},"1":{"16":1,"17":1},"2":{"1":1,"14":1,"15":1,"16":1,"23":4,"38":1,"57":5,"62":1,"64":5,"65":2,"80":1,"84":2,"85":2,"89":8,"92":2,"93":4,"94":4,"95":4,"96":4,"100":2,"108":5,"112":4,"113":4,"114":4,"115":4,"119":1,"120":2,"123":1,"124":4,"128":4,"136":4,"146":4,"156":4,"167":4,"173":1,"179":7,"180":1,"181":2,"182":2,"184":1,"185":3,"186":2,"187":2,"190":1,"191":1,"192":3,"193":9,"194":3,"195":3,"196":13,"201":4,"202":4,"207":4,"208":4,"227":4,"228":4,"229":4,"230":4,"235":4,"263":1,"264":1,"323":2,"368":4,"442":2,"539":1,"544":1,"547":1,"548":1,"579":1,"592":1,"671":2,"801":6,"802":5,"803":4,"804":4,"805":4,"806":4,"807":4,"809":4,"811":2,"812":3,"813":1,"814":4,"817":3,"818":3,"819":1,"820":1,"821":2,"824":1,"844":3,"853":1,"871":14,"874":1,"899":2,"900":1,"902":1,"904":6,"905":5,"906":4,"907":4,"908":4,"909":4,"910":4,"913":1,"922":1,"929":1,"945":1,"947":4,"970":1,"987":4,"988":4,"989":4,"990":4,"991":5,"992":4,"993":4,"994":4,"996":4,"997":4,"998":4,"1120":2,"1122":5,"1123":5,"1124":14,"1125":1,"1127":3,"1129":12,"1132":1,"1133":1,"1134":1,"1135":2,"1192":1,"1196":1,"1198":1,"1204":1,"1261":1,"1309":8,"1310":8,"1311":7,"1312":7,"1313":8,"1314":6,"1351":1,"1353":8,"1354":1,"1355":1,"1357":8,"1358":1,"1476":1,"1495":1,"1497":2,"1498":1,"1505":1,"1506":2,"1627":5,"1633":1,"1634":6,"1635":3,"1636":1,"1639":5}}],["apis",{"2":{"251":1,"294":1,"342":1,"645":1,"703":1,"713":1,"717":1,"724":1,"861":1,"984":1,"1096":1,"1266":1,"1657":1}}],["api",{"0":{"0":1,"3":1,"14":1,"37":1,"40":1,"54":1,"67":1,"194":1,"371":1,"387":1,"434":1,"718":1,"756":1,"772":1,"784":1,"840":1,"876":1,"894":1,"1005":1,"1072":1,"1153":1,"1303":1,"1325":1,"1367":1,"1414":1,"1475":1,"1582":1},"1":{"1":1,"2":1,"38":1,"39":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"388":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"719":1,"720":1,"757":1,"773":1,"785":1,"786":1,"841":1,"842":1,"895":1,"896":1,"897":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1073":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1415":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1583":1,"1584":1,"1585":1,"1586":1},"2":{"0":2,"2":2,"13":1,"37":2,"39":2,"53":2,"60":2,"67":1,"81":1,"91":1,"153":1,"179":3,"182":1,"185":4,"186":2,"187":1,"188":1,"192":1,"193":3,"194":2,"195":4,"196":4,"197":1,"222":1,"336":1,"339":1,"340":1,"341":1,"364":1,"368":1,"412":1,"418":1,"422":1,"427":1,"463":1,"478":1,"507":1,"512":1,"547":1,"549":1,"563":2,"584":3,"586":1,"598":2,"599":2,"641":1,"666":1,"668":1,"676":3,"708":1,"715":2,"723":1,"746":1,"794":1,"817":2,"818":1,"819":1,"838":1,"839":2,"871":1,"873":1,"874":1,"881":1,"887":1,"912":1,"918":1,"921":1,"940":1,"948":1,"966":1,"967":1,"968":1,"970":1,"971":2,"1098":1,"1136":1,"1140":1,"1157":1,"1194":1,"1220":1,"1247":1,"1252":1,"1308":1,"1311":10,"1312":4,"1313":6,"1314":4,"1315":1,"1323":1,"1351":2,"1352":4,"1353":2,"1354":1,"1355":2,"1356":4,"1357":2,"1358":1,"1377":1,"1378":2,"1379":1,"1473":1,"1579":1,"1610":1,"1611":1}}],["rpc",{"2":{"1613":1,"1617":1}}],["rpcresponse",{"2":{"1618":1,"1622":1}}],["rpcresult",{"2":{"1613":3,"1614":1,"1615":1,"1621":2}}],["rpcrequest>",{"2":{"1612":1,"1620":1}}],["rpcrequest",{"2":{"1611":1,"1612":3,"1616":1,"1618":1,"1620":3}}],["rpcerror",{"2":{"1612":1,"1613":4,"1620":1,"1621":3}}],["rpcerror>",{"2":{"1612":1,"1613":1,"1620":1}}],["rtrim",{"2":{"1539":1}}],["rng",{"2":{"1490":1,"1575":1}}],["rs",{"2":{"1107":3,"1108":3,"1337":1}}],["rfc1123",{"2":{"1556":1,"1563":2,"1567":1,"1571":1}}],["rfc",{"2":{"920":1,"1490":2,"1554":1,"1556":1,"1572":1,"1573":1,"1579":1}}],["rfc7231",{"2":{"919":1}}],["r2",{"2":{"797":1}}],["r1",{"2":{"797":1}}],["risk",{"2":{"1199":1,"1455":1,"1652":1}}],["right",{"0":{"1560":1},"1":{"1561":1,"1562":1,"1563":1,"1564":1},"2":{"1028":1}}],["richer",{"2":{"712":1,"1306":1}}],["rid",{"2":{"181":3,"1309":2,"1521":1}}],["rvalue",{"2":{"406":1,"408":1}}],["rarely",{"2":{"1066":1}}],["raii",{"2":{"942":1,"943":1,"1037":1,"1071":2,"1096":1,"1103":1,"1107":1,"1317":1,"1335":1}}],["rapid",{"2":{"549":1}}],["range",{"0":{"1591":1},"2":{"706":2,"833":1,"927":1,"1158":1,"1490":1,"1491":1,"1581":1,"1585":1,"1586":1,"1587":2,"1591":2}}],["ranges",{"2":{"521":1}}],["ran",{"2":{"684":1,"1309":1}}],["randomization",{"2":{"1434":1}}],["randomness",{"0":{"1084":1},"2":{"1079":1,"1434":1}}],["random",{"2":{"365":1,"1084":3,"1088":2,"1095":1,"1572":1,"1573":2,"1576":1}}],["race",{"0":{"496":1},"2":{"269":1}}],["rawrequest",{"2":{"815":1,"926":2}}],["raw",{"0":{"807":1,"910":1,"996":1,"1284":1},"2":{"177":2,"530":1,"690":1,"808":1,"815":1,"911":1,"914":1,"915":2,"926":2,"997":1,"1284":1,"1294":1,"1319":1,"1337":1,"1522":1,"1599":1,"1606":1,"1612":3,"1613":1,"1620":2,"1621":2}}],["rather",{"2":{"252":1}}],["rates",{"2":{"224":1}}],["rate",{"0":{"162":1,"192":1},"2":{"162":2,"185":2,"192":1,"213":1,"225":1,"858":2,"949":1,"952":1,"959":1}}],["ratio",{"0":{"1434":1},"2":{"9":2,"1427":1,"1428":1,"1480":2}}],["rule>",{"2":{"1380":2,"1583":1}}],["rule",{"0":{"153":1,"231":1,"808":1,"847":1,"911":1,"999":1,"1584":1},"2":{"200":1,"265":1,"269":1,"270":1,"272":1,"325":1,"844":1,"943":1,"1160":1,"1339":1,"1378":1,"1380":7,"1482":1,"1581":1,"1584":1,"1585":4,"1589":4,"1590":3,"1596":1,"1597":1,"1608":1}}],["rules",{"0":{"117":1,"133":1,"343":1,"409":1,"417":1,"420":1,"521":1,"635":1,"697":1,"759":1,"982":1},"2":{"219":1,"237":1,"376":1,"383":1,"427":1,"478":1,"499":1,"503":1,"581":1,"783":1,"932":1,"1089":1,"1095":1,"1142":1,"1230":1,"1500":1,"1550":1,"1599":2,"1602":1,"1608":1,"1615":1,"1623":1,"1624":1}}],["runall",{"2":{"1112":1}}],["runnable",{"2":{"1620":1}}],["runner",{"2":{"368":1,"490":1,"491":1,"492":1,"1112":6}}],["running",{"0":{"497":1},"2":{"86":1,"256":1,"310":1,"327":1,"335":1,"353":1,"357":3,"360":1,"368":1,"399":1,"432":1,"543":1,"548":1,"551":1,"900":1,"1001":1,"1046":1,"1316":1,"1364":1,"1495":1,"1660":1}}],["runs",{"0":{"183":1,"184":1,"185":1,"186":1},"1":{"184":1,"185":1,"186":1},"2":{"128":1,"168":1,"206":1,"251":1,"252":1,"255":1,"264":1,"323":1,"325":1,"329":1,"366":1,"369":1,"378":1,"392":1,"393":1,"428":1,"438":1,"444":1,"453":1,"545":1,"571":1,"666":1,"932":1,"935":1,"957":1,"1035":2,"1068":2,"1100":2,"1144":1,"1308":1,"1311":1,"1315":1,"1364":2,"1373":1,"1623":1,"1638":1}}],["run",{"0":{"17":1,"83":1,"311":1,"312":1,"355":1,"663":1,"811":1,"1007":1,"1022":1,"1352":1,"1356":1,"1640":1},"1":{"312":1,"313":1,"314":1,"664":1},"2":{"17":1,"23":1,"57":1,"64":1,"83":1,"84":2,"85":1,"86":1,"89":1,"92":1,"93":2,"94":1,"95":1,"96":1,"98":1,"100":1,"109":1,"112":1,"113":1,"114":1,"115":1,"120":1,"124":1,"128":1,"136":1,"146":1,"156":1,"161":1,"165":3,"167":1,"179":3,"196":1,"201":1,"202":1,"207":1,"208":1,"226":1,"227":1,"228":1,"229":1,"230":1,"235":1,"249":2,"252":3,"253":1,"255":1,"256":1,"265":1,"268":1,"269":1,"271":1,"282":1,"310":2,"312":2,"316":2,"323":2,"328":1,"331":1,"335":1,"337":1,"343":1,"344":2,"347":2,"348":1,"350":1,"355":1,"356":1,"357":1,"360":1,"364":1,"366":2,"368":3,"378":1,"385":1,"392":1,"395":1,"406":2,"424":3,"425":3,"442":3,"443":1,"447":1,"449":2,"453":3,"457":4,"459":3,"461":2,"476":2,"477":1,"480":1,"497":2,"528":2,"543":1,"547":2,"555":1,"557":1,"599":1,"613":1,"616":1,"620":2,"631":1,"634":2,"637":1,"649":1,"661":1,"663":1,"664":1,"666":3,"667":2,"668":2,"669":2,"675":2,"676":6,"678":2,"686":1,"689":3,"690":1,"692":3,"696":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"811":1,"821":1,"871":5,"874":1,"878":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"935":1,"940":2,"947":1,"957":1,"970":1,"971":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1000":1,"1007":2,"1010":1,"1012":1,"1019":1,"1020":1,"1022":1,"1025":1,"1044":1,"1051":1,"1073":1,"1111":1,"1112":1,"1119":1,"1124":1,"1129":1,"1309":1,"1310":1,"1311":1,"1312":2,"1313":1,"1314":1,"1316":2,"1322":1,"1352":1,"1353":1,"1354":1,"1356":1,"1357":1,"1358":1,"1362":1,"1488":1,"1495":1,"1497":1,"1500":2,"1501":1,"1502":1,"1503":1,"1511":1,"1574":2,"1634":1,"1636":1,"1639":1,"1640":1}}],["runtimebanner",{"2":{"1494":1,"1495":1,"1497":2,"1498":1,"1501":1,"1506":2}}],["runtimes",{"2":{"1489":1}}],["runtime",{"0":{"120":1,"300":1,"670":1,"1488":1,"1494":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"0":1,"2":1,"8":1,"37":1,"39":1,"80":1,"84":1,"119":1,"120":1,"125":1,"127":1,"133":1,"135":1,"145":1,"146":1,"161":1,"206":1,"212":1,"230":1,"251":1,"286":1,"291":1,"292":1,"296":1,"297":1,"300":1,"305":1,"307":1,"316":1,"321":1,"330":2,"331":1,"343":1,"347":1,"363":1,"364":1,"372":1,"390":1,"394":1,"395":1,"400":2,"404":1,"411":1,"412":1,"421":1,"449":1,"463":1,"474":1,"499":1,"502":1,"547":1,"552":1,"553":1,"564":1,"596":1,"645":1,"654":1,"662":1,"670":2,"676":1,"678":1,"689":1,"692":1,"821":1,"831":1,"835":1,"838":1,"844":1,"868":1,"870":1,"871":1,"872":1,"881":1,"883":1,"889":1,"901":1,"902":1,"931":1,"951":1,"958":1,"977":2,"981":1,"985":1,"1067":1,"1202":1,"1233":1,"1241":1,"1254":1,"1256":1,"1339":1,"1353":4,"1357":4,"1372":1,"1490":1,"1526":1,"1535":1,"1637":1,"1655":1,"1671":1}}],["round",{"2":{"1624":1}}],["routedoc",{"0":{"964":1},"2":{"964":1,"966":1,"969":1,"973":1,"974":1,"981":1}}],["routeoptions",{"2":{"938":1,"969":1,"974":1}}],["router>",{"2":{"1010":1}}],["router",{"0":{"937":1,"972":1,"1613":1,"1616":1,"1621":1},"1":{"938":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1},"2":{"814":1,"888":1,"912":2,"913":1,"931":1,"932":1,"938":1,"939":1,"961":1,"964":2,"965":2,"966":4,"967":1,"969":1,"972":1,"973":1,"975":1,"976":1,"978":1,"979":1,"983":1,"984":1,"985":1,"1000":1,"1001":2,"1004":2,"1006":2,"1010":2,"1019":2,"1026":2,"1031":2,"1053":1,"1054":1,"1059":2,"1065":1,"1611":1,"1613":7,"1614":5,"1615":5,"1616":1,"1618":1,"1621":2,"1622":1}}],["routes",{"0":{"164":1,"167":1,"169":1,"179":1,"184":1,"185":1,"938":1,"967":1,"969":1,"977":1,"1031":1,"1059":1},"1":{"165":1,"166":1,"167":1,"168":1,"169":1,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":2,"177":2,"178":2,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1},"2":{"59":1,"60":1,"75":1,"80":1,"87":1,"101":1,"120":1,"139":1,"164":3,"165":2,"167":1,"179":2,"196":5,"226":1,"814":1,"818":1,"871":3,"873":1,"931":1,"933":1,"936":2,"940":1,"946":2,"948":1,"962":1,"965":3,"971":1,"973":1,"977":1,"981":2,"984":1,"986":1,"1010":1,"1031":1,"1051":1,"1053":1,"1065":1,"1078":1,"1308":1,"1351":1,"1355":1,"1627":1,"1634":1,"1637":2,"1639":1,"1647":1}}],["route",{"0":{"130":1,"170":1,"186":1,"916":1,"974":1,"975":1,"1642":1},"1":{"1643":1,"1644":1,"1645":1,"1646":1},"2":{"34":1,"88":2,"89":2,"92":1,"100":2,"108":1,"121":1,"127":1,"128":1,"130":1,"145":1,"152":2,"167":1,"168":1,"197":2,"211":1,"226":1,"814":1,"824":2,"855":1,"883":1,"900":1,"914":1,"916":2,"925":2,"926":1,"927":1,"931":1,"932":3,"937":2,"938":2,"945":1,"964":2,"966":1,"969":1,"972":2,"974":2,"978":1,"979":1,"980":2,"981":1,"1022":1,"1026":1,"1051":1,"1059":2,"1064":1,"1067":1,"1078":1,"1130":1,"1308":1,"1627":1}}],["routing",{"0":{"18":1,"226":1,"814":1,"986":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"227":1,"228":1,"229":1,"230":1,"231":1,"815":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1},"2":{"0":1,"1":1,"14":1,"37":1,"38":1,"97":1,"119":1,"137":1,"164":1,"200":1,"231":1,"239":1,"320":1,"842":2,"902":1,"972":1,"973":1,"983":1,"1019":1,"1058":1,"1656":1}}],["rows",{"2":{"1317":1,"1319":1,"1333":1}}],["row",{"2":{"1101":3,"1107":4,"1108":3,"1117":1,"1320":6,"1328":6,"1497":1}}],["rolls",{"2":{"1109":2,"1318":1}}],["rollback",{"0":{"607":1,"1344":1},"2":{"560":1,"603":1,"604":1,"607":2,"612":2,"1099":1,"1109":1,"1335":3,"1340":1,"1341":1,"1344":2,"1349":2}}],["roles",{"2":{"731":2,"732":1,"776":2,"778":1,"1223":1,"1226":1,"1230":4,"1235":1,"1236":1,"1238":1,"1301":3}}],["role>",{"2":{"731":2,"776":1}}],["role",{"0":{"362":1,"1054":1},"2":{"89":1,"188":3,"731":4,"732":1,"776":7,"935":1,"936":1,"937":1,"942":1,"943":1,"1236":2,"1313":2,"1314":6,"1607":2}}],["robust",{"2":{"379":1}}],["root",{"2":{"330":1,"537":1,"539":1,"568":1,"582":3,"583":2,"610":1,"975":1,"1106":1,"1107":1,"1108":1,"1112":1,"1214":2,"1273":2,"1301":2,"1318":1,"1319":1,"1320":1,"1321":1,"1347":1}}],["rooms",{"2":{"102":1,"1630":1}}],["room1",{"2":{"78":1}}],["room",{"0":{"78":1},"2":{"78":1,"81":1,"106":1,"107":2,"108":5,"1626":3,"1627":5,"1629":1,"1630":2}}],["rotating",{"2":{"140":1}}],["r",{"2":{"50":1,"293":3,"309":2,"310":12,"318":2,"431":1,"442":3,"690":1,"711":4,"721":4,"727":6,"728":4,"729":4,"730":4,"731":4,"732":4,"758":1,"760":3,"765":4,"776":2,"778":1,"789":4,"790":3,"791":4,"792":3,"795":3,"796":3,"798":1,"971":2,"1022":2,"1081":3,"1083":2,"1084":2,"1124":1,"1167":1,"1168":1,"1170":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1,"1218":1,"1229":1,"1235":1,"1237":1,"1251":1,"1252":1,"1259":1,"1377":1,"1378":1,"1379":1,"1380":11,"1491":3,"1517":1,"1529":4,"1531":1,"1532":1,"1539":1,"1566":1,"1587":1,"1589":4,"1590":4,"1592":1,"1593":2,"1603":3,"1604":1,"1606":3}}],["review",{"2":{"1652":2,"1653":1,"1661":2}}],["reverse",{"0":{"1127":1},"2":{"161":1,"162":1,"954":2}}],["renames",{"2":{"1199":1}}],["rename",{"2":{"1198":1,"1199":2}}],["renewal",{"2":{"1128":1}}],["regular",{"2":{"1266":1}}],["regex>",{"2":{"1584":1}}],["regex",{"0":{"1592":1,"1597":1},"2":{"973":1,"976":1,"983":1,"1242":1,"1490":1,"1581":1,"1585":1,"1586":2,"1592":1,"1596":2,"1597":2,"1598":1}}],["registry",{"0":{"519":1,"558":1,"618":1,"638":1,"645":1,"682":1,"965":1},"1":{"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1},"2":{"320":1,"516":1,"518":3,"519":1,"522":1,"523":2,"558":2,"564":1,"615":1,"618":2,"630":1,"632":4,"633":2,"635":1,"636":2,"637":1,"638":1,"639":1,"640":2,"641":1,"642":2,"643":4,"644":3,"646":1,"651":1,"679":1,"681":3,"682":1,"684":2,"685":1,"780":1,"965":5,"1613":1}}],["registration",{"0":{"974":1},"2":{"66":1,"179":1,"373":1,"818":1}}],["registerform>",{"2":{"1604":3,"1606":1}}],["registerform",{"2":{"1604":4}}],["registerroutes",{"2":{"1353":1,"1357":1}}],["registers",{"2":{"967":1,"1618":1}}],["registered",{"2":{"120":1,"937":1,"939":1,"962":1,"969":1,"981":1,"1004":1,"1613":1}}],["register",{"0":{"967":1,"1613":1,"1621":1},"2":{"80":2,"179":2,"196":5,"364":1,"368":2,"373":1,"376":1,"384":1,"618":1,"814":1,"871":2,"965":1,"967":3,"970":1,"971":4,"981":1,"1010":1,"1611":1}}],["registering",{"0":{"58":1},"1":{"59":1,"60":1,"61":1},"2":{"951":1}}],["redesign",{"2":{"1651":1}}],["redirect",{"2":{"921":1,"962":1}}],["redirects",{"2":{"919":1}}],["redirection",{"2":{"842":1}}],["reduce",{"2":{"853":1,"1073":1}}],["reduces",{"2":{"445":1,"1199":1}}],["red",{"2":{"798":3}}],["re",{"2":{"689":1,"1018":2,"1338":1,"1376":1,"1651":1}}],["rebuilding",{"2":{"1597":1}}],["rebuild",{"2":{"549":1,"550":1}}],["rebuilds",{"2":{"545":1,"671":1,"1454":1}}],["reusing",{"2":{"1242":1,"1597":1}}],["reusable",{"2":{"320":1,"1599":1}}],["reused",{"2":{"1519":1}}],["reuses",{"2":{"1103":1}}],["reuse",{"2":{"152":1,"210":1,"499":2,"503":2,"513":2,"937":1,"1017":1,"1089":1,"1095":1,"1598":1}}],["reinterpret",{"2":{"310":2,"424":1}}],["rejection",{"0":{"881":1},"2":{"1058":1}}],["rejects",{"2":{"410":1,"881":1,"895":1,"924":1,"1591":1}}],["rejected",{"2":{"301":2,"375":1,"877":1,"881":1,"1025":1}}],["reject",{"0":{"790":1},"2":{"223":1,"231":1}}],["repetitive",{"2":{"1158":1}}],["repeating",{"2":{"831":1,"943":1,"1068":1}}],["repeatable",{"2":{"670":2}}],["repeated",{"0":{"382":1},"2":{"1393":1}}],["repeatedly",{"2":{"220":1}}],["repositories",{"2":{"1323":1,"1335":1,"1336":1}}],["repository",{"0":{"1320":1,"1329":1},"1":{"1330":1,"1331":1,"1332":1,"1333":1,"1334":1},"2":{"633":1,"641":1,"1320":1,"1324":1,"1329":1,"1670":1}}],["repo",{"2":{"644":1,"1320":5}}],["reporting",{"2":{"779":1,"799":1,"861":1,"1001":1,"1007":1,"1606":1}}],["reports",{"2":{"417":1,"472":1,"533":1}}],["reported",{"2":{"417":1}}],["replication",{"2":{"1370":1}}],["replicate",{"2":{"838":1}}],["replacement",{"2":{"1202":1}}],["replace",{"0":{"1297":1},"2":{"837":1,"1030":1,"1288":1}}],["replay",{"0":{"1453":1},"2":{"218":1,"1384":1,"1407":1,"1439":1,"1442":1,"1444":1,"1445":1,"1446":2,"1450":1,"1453":2,"1454":1,"1456":1}}],["repl",{"0":{"653":1,"654":1,"662":1},"1":{"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1},"2":{"555":1,"653":1,"658":1,"659":1,"661":2,"662":1}}],["reproducible",{"2":{"521":1,"534":1,"540":1,"564":1,"572":1,"629":1,"641":1,"645":1,"652":1,"702":1}}],["represented",{"2":{"937":1,"1104":1}}],["representation",{"2":{"1421":1}}],["representations",{"2":{"794":1}}],["representable",{"2":{"706":2}}],["represent",{"2":{"759":1,"1268":1,"1602":1}}],["representing",{"2":{"279":1,"1622":1}}],["represents",{"2":{"42":1,"122":1,"288":1,"395":1,"412":2,"466":1,"1053":1,"1382":1,"1459":1,"1463":1,"1466":1,"1469":1,"1528":1}}],["retention",{"2":{"862":1}}],["rethrow",{"2":{"1042":1}}],["rethrowing",{"2":{"1039":1}}],["rethrows",{"2":{"408":1,"431":1,"433":1,"491":1}}],["rethrown",{"2":{"291":1,"397":1,"404":1,"490":1}}],["retried",{"2":{"1378":2,"1386":1,"1425":1}}],["retrieve",{"2":{"981":1}}],["retrieving",{"2":{"951":1}}],["retries",{"0":{"217":1},"2":{"214":1,"217":1,"218":1,"462":1,"1386":1,"1393":1,"1407":1,"1423":1}}],["retrypolicy",{"0":{"1425":1},"1":{"1426":1},"2":{"1397":1,"1404":1,"1408":1,"1411":1,"1413":1,"1424":1,"1425":1,"1426":1,"1427":1,"1428":1,"1439":1,"1441":1}}],["retrying",{"2":{"1396":1}}],["retryability",{"2":{"1361":1}}],["retryable",{"0":{"1378":1},"2":{"222":1,"1369":2,"1376":1,"1378":2,"1380":3,"1414":1}}],["retry",{"0":{"1397":1,"1436":1},"2":{"217":3,"218":3,"224":2,"225":1,"479":1,"1365":1,"1366":1,"1378":1,"1386":1,"1387":1,"1397":1,"1404":1,"1406":2,"1409":1,"1411":2,"1412":1,"1413":3,"1415":1,"1416":1,"1418":1,"1422":1,"1425":1,"1427":1,"1428":1,"1430":2,"1431":1,"1432":1,"1436":1,"1438":2,"1439":2,"1440":2,"1441":1,"1447":1,"1448":2,"1473":1}}],["returntype",{"2":{"1042":1}}],["returnable",{"2":{"926":1}}],["returning",{"0":{"94":1},"2":{"173":1,"294":1,"385":1,"424":1,"717":1,"871":2,"926":1,"946":1,"1100":1,"1244":2,"1249":1,"1482":1}}],["returned",{"0":{"1593":1},"2":{"35":1,"132":1,"173":1,"467":1,"490":1,"787":1,"829":1,"968":1,"998":1,"1482":1,"1614":1,"1615":1}}],["returns",{"0":{"402":1,"403":1},"2":{"25":1,"29":1,"34":1,"197":1,"207":1,"215":1,"218":1,"222":1,"256":1,"277":2,"278":1,"279":1,"290":1,"328":2,"336":1,"399":1,"400":1,"408":1,"420":1,"440":1,"470":1,"471":1,"478":1,"483":2,"513":1,"709":1,"710":1,"725":1,"736":1,"741":1,"746":1,"749":1,"755":1,"781":1,"787":1,"794":1,"796":1,"798":1,"812":1,"816":1,"823":1,"832":1,"833":1,"877":2,"878":1,"880":1,"881":1,"895":1,"896":1,"917":1,"927":2,"928":1,"943":1,"979":1,"1006":1,"1007":1,"1010":1,"1015":2,"1042":1,"1045":1,"1059":1,"1073":1,"1099":2,"1100":1,"1101":1,"1103":1,"1115":2,"1130":1,"1144":1,"1155":1,"1161":1,"1162":2,"1163":1,"1167":3,"1168":1,"1173":2,"1229":1,"1231":2,"1240":1,"1252":1,"1255":1,"1291":1,"1296":1,"1331":1,"1332":1,"1333":1,"1364":1,"1381":1,"1401":1,"1402":1,"1403":1,"1415":1,"1436":1,"1446":1,"1449":1,"1476":1,"1477":1,"1483":3,"1546":1,"1556":2,"1612":1,"1614":1,"1615":1,"1620":1,"1624":1}}],["return",{"0":{"34":1,"95":1,"171":1,"173":1,"283":1,"485":1,"487":1,"488":1,"1042":1,"1313":1},"1":{"172":1,"173":1,"486":1,"487":1,"488":1},"2":{"11":1,"12":1,"34":1,"35":1,"42":1,"43":1,"44":1,"46":1,"70":1,"84":3,"85":2,"86":3,"89":3,"93":1,"94":1,"95":3,"96":1,"108":6,"113":1,"114":1,"115":1,"117":1,"123":1,"132":3,"156":1,"157":1,"158":1,"168":1,"173":3,"174":1,"179":2,"181":1,"182":2,"187":1,"188":1,"196":1,"211":1,"221":1,"227":1,"228":1,"229":1,"230":1,"235":1,"268":1,"279":1,"283":2,"293":1,"307":1,"310":5,"323":1,"325":1,"337":1,"368":2,"391":1,"392":2,"393":1,"395":1,"402":2,"403":2,"404":2,"406":1,"410":1,"417":3,"424":1,"425":2,"432":1,"442":2,"443":3,"457":1,"459":1,"476":2,"477":2,"494":3,"495":3,"496":3,"497":1,"512":2,"707":1,"711":2,"721":1,"727":2,"728":1,"729":2,"730":1,"731":1,"732":3,"760":1,"765":1,"775":1,"776":1,"789":1,"790":1,"791":1,"792":1,"816":3,"871":5,"880":1,"926":2,"947":1,"950":1,"971":1,"988":1,"992":1,"998":1,"999":1,"1012":1,"1051":1,"1073":1,"1081":2,"1106":2,"1107":2,"1108":1,"1112":3,"1153":2,"1154":1,"1155":1,"1185":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":1,"1248":1,"1256":1,"1260":1,"1288":1,"1309":2,"1310":2,"1311":2,"1312":2,"1313":3,"1314":3,"1318":2,"1319":2,"1320":5,"1321":2,"1328":3,"1377":3,"1378":3,"1379":3,"1380":5,"1474":1,"1482":1,"1483":2,"1491":3,"1497":1,"1498":1,"1529":2,"1533":2,"1535":1,"1539":2,"1541":1,"1542":2,"1543":1,"1545":1,"1546":1,"1547":1,"1549":1,"1550":1,"1551":1,"1561":1,"1562":1,"1563":1,"1564":1,"1587":2,"1589":1,"1590":1,"1593":2,"1602":1,"1603":1,"1604":1,"1612":2,"1613":5,"1614":2,"1615":3,"1621":3,"1622":1,"1627":6,"1628":2,"1634":1,"1643":1}}],["remains",{"2":{"853":1,"1482":1}}],["remain",{"2":{"787":1,"822":1,"900":1,"936":1,"960":1,"1305":1,"1363":1,"1366":1}}],["remained",{"2":{"706":1}}],["remaining",{"2":{"359":1,"492":1,"498":1}}],["removing",{"2":{"578":1,"649":1}}],["removal",{"2":{"374":1,"651":2}}],["removebyid",{"2":{"1320":1,"1334":1}}],["removed",{"2":{"783":1}}],["removes",{"2":{"514":1,"649":1,"1158":1}}],["remove",{"0":{"374":1,"647":1,"1292":1},"1":{"648":1,"649":1,"650":1,"651":1,"652":1},"2":{"364":1,"374":1,"558":1,"646":1,"647":1,"648":2,"649":1,"650":4,"652":2,"1199":1,"1323":1,"1378":1,"1379":1}}],["remote",{"2":{"206":1,"221":1,"618":1,"632":1,"645":1,"1369":1,"1393":1,"1672":1}}],["remember",{"2":{"142":1}}],["relative",{"2":{"855":2,"968":1}}],["related",{"0":{"285":1,"295":1,"345":1,"394":1,"411":1,"446":1,"646":1},"2":{"160":1,"413":1,"464":1}}],["relaxed",{"2":{"793":1}}],["reload",{"2":{"543":1,"546":2,"547":1,"671":1,"1124":1,"1127":2,"1488":1}}],["reloading",{"2":{"210":1}}],["relevant",{"2":{"532":1}}],["release",{"2":{"276":1,"527":3,"528":1,"530":4,"629":1,"691":2,"927":1,"1103":1,"1117":1}}],["releases",{"2":{"250":1,"261":1,"397":1,"406":1,"409":1,"449":1,"1103":1}}],["reliable",{"2":{"222":1,"1118":1}}],["reliability",{"0":{"213":1,"214":1,"219":1,"859":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1},"2":{"213":1,"223":1,"225":1,"1656":1,"1671":1}}],["relying",{"2":{"779":1}}],["rely",{"2":{"140":1}}],["reached",{"2":{"1117":1}}],["reaches",{"2":{"498":1}}],["reach",{"2":{"949":1}}],["reasoning",{"2":{"233":1}}],["reason",{"2":{"224":1,"236":1,"847":1,"1526":1,"1569":1}}],["reasons",{"2":{"213":1}}],["reasonable",{"2":{"150":1,"1050":1}}],["reallocations",{"2":{"1547":1}}],["really",{"2":{"507":1}}],["real",{"0":{"196":1,"1622":1},"2":{"91":1,"110":1,"116":1,"140":1,"153":2,"179":1,"203":1,"210":1,"213":1,"308":1,"320":1,"425":1,"461":1,"873":1,"887":1,"1096":1,"1127":1,"1134":1,"1381":1,"1554":1,"1558":1,"1626":1,"1638":1}}],["reader",{"2":{"1444":1,"1450":1}}],["readers",{"2":{"219":1}}],["readwritepaths",{"2":{"1133":1}}],["readwritepaths=",{"2":{"1124":1}}],["readability",{"2":{"845":1,"850":1,"1136":1,"1188":1}}],["readable",{"2":{"196":1,"836":1,"928":1,"955":2,"1157":1,"1194":1,"1208":1,"1243":1,"1420":1,"1504":1}}],["reading",{"0":{"805":1,"908":1,"1056":1,"1282":1},"1":{"1283":1,"1284":1,"1285":1},"2":{"834":1,"871":2,"1053":1}}],["readiness",{"2":{"252":1,"1417":1}}],["reads",{"2":{"276":2,"278":1,"309":1,"537":1,"575":1,"932":2,"936":1,"1004":1,"1011":1,"1134":1,"1243":1,"1477":1,"1478":1,"1479":1,"1480":1,"1501":1}}],["ready",{"2":{"98":1,"299":2,"310":1,"312":1,"325":1,"408":1,"534":1,"812":1,"823":2,"985":1,"1361":1,"1365":2,"1414":1,"1415":1,"1417":1,"1490":1,"1494":1,"1495":3,"1497":2,"1498":2,"1504":1,"1505":1,"1506":4,"1599":1,"1649":1,"1658":1}}],["read",{"0":{"86":1,"424":1,"843":1,"1228":1,"1229":1,"1235":1,"1236":1,"1237":1,"1240":1,"1519":1},"1":{"844":1,"845":1,"1229":1,"1230":1,"1231":1},"2":{"13":1,"86":2,"122":1,"131":3,"168":1,"174":1,"175":1,"176":1,"181":1,"188":1,"265":1,"277":1,"283":1,"310":1,"318":1,"320":1,"416":1,"417":2,"418":1,"424":1,"425":1,"426":1,"636":1,"653":1,"836":1,"844":1,"870":1,"884":1,"935":1,"950":1,"964":1,"1056":1,"1062":1,"1075":1,"1081":2,"1101":1,"1207":1,"1240":1,"1244":1,"1254":1,"1308":1,"1474":1,"1613":1,"1618":1,"1621":1,"1627":1}}],["recipe",{"0":{"1571":1}}],["rec",{"2":{"1445":1,"1449":1,"1452":5,"1453":1}}],["reclaiming",{"2":{"1422":1}}],["recent",{"2":{"1399":1}}],["receives",{"2":{"471":1}}],["receive",{"2":{"463":1,"467":1,"471":1,"478":1,"479":1,"1625":1,"1627":1}}],["received",{"2":{"74":1,"85":1,"86":1,"140":1,"202":1,"364":1,"375":1,"376":1,"476":1,"871":1,"978":1}}],["recursion",{"2":{"1270":1}}],["recursive",{"2":{"1243":1,"1307":1}}],["recurring",{"2":{"1011":1}}],["recompute",{"2":{"1439":1}}],["recomputable",{"2":{"1439":1,"1441":1}}],["recommendations",{"0":{"948":1}}],["recommended",{"0":{"56":1,"179":1,"181":1,"236":1,"330":1,"462":1,"860":1,"1095":1,"1127":1,"1309":1,"1473":1,"1527":1,"1610":1},"1":{"57":1,"861":1,"862":1},"2":{"54":1,"180":1,"203":1,"216":1,"217":1,"219":1,"222":1,"237":1,"244":1,"266":1,"269":1,"550":1,"568":1,"571":1,"727":1,"926":1,"938":1,"1257":1,"1308":1,"1366":2,"1622":1}}],["reconstructed",{"2":{"1454":1}}],["reconstruct",{"2":{"1453":1}}],["reconstruction",{"2":{"1407":1,"1439":1}}],["reconfiguration",{"2":{"836":1}}],["reconfigure",{"2":{"528":1}}],["recovery",{"0":{"1422":1,"1439":1,"1453":1,"1454":1},"2":{"1384":1,"1416":1,"1419":1,"1422":1,"1423":1,"1425":1,"1439":2,"1442":1,"1450":1,"1454":1,"1456":1}}],["recordtype",{"2":{"1444":1,"1447":3,"1452":1}}],["records",{"2":{"1439":1,"1446":1,"1449":1}}],["recorded",{"2":{"1409":1}}],["record",{"2":{"964":1,"1444":2,"1445":1,"1449":1}}],["recv",{"0":{"471":1},"2":{"467":1,"468":1,"476":2,"478":1,"479":1}}],["recalculate",{"2":{"452":1}}],["req",{"2":{"27":1,"28":1,"29":1,"64":2,"89":4,"108":4,"113":2,"114":2,"122":2,"130":2,"138":2,"156":2,"157":2,"158":2,"174":6,"175":5,"176":6,"177":5,"178":2,"181":3,"182":3,"188":4,"201":2,"202":2,"207":2,"208":2,"227":2,"228":2,"229":2,"230":2,"235":2,"310":4,"805":3,"806":2,"807":2,"817":3,"871":10,"908":3,"909":2,"910":2,"913":1,"918":2,"936":1,"945":1,"950":3,"992":2,"993":4,"994":4,"996":2,"997":2,"1030":1,"1031":1,"1310":2,"1311":2,"1312":2,"1313":4,"1314":7,"1612":8,"1613":2,"1620":1,"1627":4,"1634":5,"1644":2,"1645":2}}],["requeues",{"2":{"1379":1}}],["requeue",{"0":{"1379":1},"2":{"1379":1,"1418":1}}],["requestbody",{"2":{"964":1}}],["requesthandler",{"0":{"925":1},"1":{"926":1,"927":1},"2":{"912":1,"913":1,"916":1,"925":1,"1022":1}}],["requestoutcome",{"2":{"513":1}}],["requesting",{"2":{"370":1}}],["requestid>",{"2":{"181":2}}],["requestid",{"2":{"181":1}}],["requested",{"2":{"277":1,"355":1,"366":1,"379":1,"432":1,"1008":1,"1012":1,"1018":1}}],["requests",{"0":{"1026":1,"1615":1,"1624":1},"2":{"211":1,"214":1,"217":1,"220":1,"223":1,"261":1,"335":1,"366":1,"377":1,"436":1,"439":1,"507":1,"813":1,"888":1,"936":2,"949":1,"1001":1,"1012":1,"1053":1,"1060":1,"1063":1,"1364":1,"1611":1,"1622":1}}],["requeststate",{"0":{"188":1,"918":1,"1314":1},"2":{"168":1,"188":1,"912":1,"914":1,"918":1,"925":1,"929":1,"952":1}}],["request",{"0":{"24":1,"63":1,"122":1,"138":1,"177":1,"215":1,"805":1,"908":1,"914":1,"932":1,"952":1,"995":1,"1056":1,"1612":1,"1619":1,"1620":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"915":1,"916":1,"917":1,"933":1,"996":1,"997":1},"2":{"0":1,"1":1,"14":1,"23":1,"24":1,"34":1,"35":1,"37":1,"38":1,"54":1,"57":1,"63":1,"64":3,"66":1,"89":3,"93":1,"94":1,"95":1,"96":1,"103":1,"112":2,"113":1,"114":1,"115":1,"119":1,"121":1,"122":2,"124":1,"126":1,"127":1,"128":2,"130":3,"131":1,"132":2,"134":1,"135":1,"136":2,"138":1,"139":1,"140":1,"142":2,"145":2,"146":1,"152":1,"156":1,"157":1,"158":1,"160":1,"167":1,"168":3,"170":1,"172":1,"173":3,"174":2,"175":1,"176":2,"177":2,"178":1,"179":1,"180":1,"181":5,"182":2,"184":1,"188":3,"197":2,"199":1,"201":1,"202":1,"203":1,"207":1,"208":1,"210":1,"214":1,"215":1,"216":1,"217":2,"222":1,"223":1,"224":2,"227":1,"228":1,"229":2,"230":1,"231":1,"234":1,"235":1,"237":1,"273":1,"274":1,"276":1,"278":1,"282":1,"284":1,"319":2,"320":2,"368":3,"369":1,"379":1,"381":1,"382":1,"426":2,"443":2,"458":1,"459":1,"475":1,"502":2,"507":1,"636":1,"681":1,"801":3,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"814":2,"815":1,"816":1,"817":2,"821":1,"822":1,"826":1,"829":1,"834":1,"871":10,"874":1,"888":1,"889":1,"904":3,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"912":3,"913":2,"914":3,"917":1,"918":1,"922":2,"925":1,"926":4,"928":1,"931":1,"932":4,"936":3,"941":1,"945":1,"947":1,"950":4,"952":1,"956":1,"957":1,"959":2,"960":2,"964":1,"977":1,"978":1,"981":1,"987":1,"988":1,"989":1,"990":1,"991":2,"992":1,"993":1,"994":1,"996":1,"997":1,"998":1,"1001":1,"1003":1,"1006":1,"1019":1,"1023":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":2,"1185":1,"1260":1,"1308":1,"1309":4,"1310":3,"1311":3,"1312":3,"1313":4,"1314":3,"1353":2,"1357":2,"1378":1,"1390":1,"1508":1,"1516":1,"1517":2,"1519":1,"1554":1,"1577":1,"1597":1,"1612":2,"1613":1,"1615":1,"1616":1,"1618":1,"1619":1,"1620":1,"1621":2,"1622":1,"1624":1,"1634":3,"1639":2,"1643":1,"1644":1,"1645":1,"1646":1,"1665":1}}],["requiring",{"2":{"890":1,"984":1}}],["requirement",{"2":{"1375":1}}],["requirements",{"0":{"633":1},"2":{"644":1,"1375":1,"1638":1}}],["required=false",{"2":{"1590":1}}],["required",{"0":{"484":1,"1418":1,"1589":1},"2":{"247":1,"306":1,"501":1,"521":1,"523":1,"537":1,"568":1,"607":1,"609":1,"616":2,"625":1,"627":1,"681":1,"734":1,"783":1,"855":1,"1084":1,"1257":1,"1313":1,"1344":1,"1346":1,"1392":1,"1412":1,"1416":1,"1488":1,"1490":1,"1493":1,"1528":1,"1581":1,"1584":1,"1585":1,"1586":1,"1587":2,"1589":2,"1593":1,"1596":1,"1600":1,"1603":2,"1604":2,"1607":1,"1608":2,"1619":1,"1635":2,"1638":1}}],["require",{"2":{"89":2,"182":3,"204":1,"568":1,"570":2,"571":1,"572":1,"698":2,"699":1,"701":3,"702":1,"750":1,"778":1,"838":1,"1310":1}}],["requires",{"2":{"13":1,"518":1,"523":1,"577":1,"755":1,"902":1,"1095":1,"1149":1,"1150":1,"1311":1,"1478":1,"1479":1,"1480":1}}],["research",{"2":{"1657":1}}],["reserve",{"2":{"1593":1}}],["reserves",{"2":{"1242":1,"1547":1}}],["resetpassword",{"2":{"1605":1}}],["resets",{"2":{"1056":1}}],["reset",{"2":{"217":1,"661":1,"1378":2,"1379":2,"1504":1}}],["reschedule",{"2":{"462":1}}],["respect",{"2":{"1061":1,"1507":1}}],["respects",{"2":{"895":1}}],["resp",{"2":{"310":3}}],["responds",{"2":{"309":1}}],["respond",{"2":{"222":1}}],["responsibilities",{"0":{"1055":1},"1":{"1056":1,"1057":1,"1058":1},"2":{"1328":1,"1362":1,"1365":1,"1412":1}}],["responsible",{"2":{"257":1,"317":1,"874":1,"900":1,"1001":1,"1053":1}}],["responsibly",{"2":{"142":1}}],["responsive",{"2":{"281":1,"900":1,"933":1,"1051":1}}],["responsewrapper",{"0":{"921":1},"1":{"922":1,"923":1,"924":1},"2":{"912":1,"921":1,"922":2,"926":5,"929":1,"950":1}}],["responses",{"2":{"53":1,"87":1,"97":1,"101":1,"117":1,"205":1,"213":1,"231":1,"912":1,"919":4,"936":2,"948":1,"950":1,"956":1,"964":2,"966":1,"981":1,"1053":1,"1061":2,"1136":1,"1144":1,"1157":1,"1194":1,"1220":1,"1615":2,"1622":1}}],["response",{"0":{"30":1,"112":1,"123":1,"132":1,"919":1,"989":1,"1061":1,"1153":1,"1154":1,"1205":1},"1":{"31":1,"32":1,"33":1,"34":1,"920":1},"2":{"0":1,"1":1,"14":1,"23":1,"30":1,"34":3,"37":1,"38":1,"54":1,"57":1,"64":3,"89":3,"92":2,"93":1,"94":1,"95":2,"96":1,"100":1,"112":1,"113":1,"114":1,"115":1,"117":1,"119":1,"121":1,"122":1,"123":1,"124":1,"127":1,"128":2,"130":1,"131":1,"132":5,"133":2,"134":1,"136":1,"138":1,"139":1,"145":1,"146":1,"149":1,"152":1,"156":1,"157":1,"158":1,"160":1,"167":1,"168":1,"170":1,"172":2,"173":4,"174":2,"175":1,"176":2,"177":2,"178":1,"179":1,"180":1,"182":2,"188":1,"197":1,"199":1,"201":1,"202":1,"203":1,"207":1,"208":1,"224":1,"227":1,"228":1,"229":1,"230":1,"232":1,"234":1,"235":1,"309":1,"318":1,"501":1,"801":3,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"809":1,"814":2,"815":2,"816":2,"817":2,"871":11,"904":3,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"912":1,"913":1,"919":3,"921":1,"926":1,"927":1,"931":1,"932":2,"945":1,"947":1,"966":1,"978":1,"980":1,"987":1,"988":1,"989":1,"990":1,"991":2,"992":1,"993":1,"994":1,"996":1,"997":1,"998":2,"1003":1,"1030":1,"1051":1,"1054":1,"1067":1,"1309":2,"1310":3,"1311":3,"1312":3,"1313":4,"1314":2,"1315":1,"1353":2,"1357":2,"1593":1,"1612":1,"1614":3,"1615":6,"1616":2,"1617":1,"1618":1,"1622":4,"1623":1,"1624":4,"1625":1,"1634":3,"1639":2,"1643":1,"1644":1,"1645":1,"1646":1,"1663":3}}],["restores",{"2":{"1453":1,"1525":1}}],["rest",{"2":{"269":1,"274":1,"330":1,"368":1,"449":1,"984":1}}],["restart=always",{"2":{"1124":1}}],["restartsec=2",{"2":{"1124":1}}],["restarts",{"2":{"511":1,"545":1,"671":1}}],["restart",{"2":{"249":1,"1119":1,"1454":1}}],["resource",{"2":{"299":1,"1391":1}}],["resources",{"2":{"152":1,"223":1}}],["resolves",{"2":{"290":1,"688":1,"888":1}}],["resolve",{"2":{"289":1,"291":1,"293":2,"478":1}}],["resolved",{"0":{"288":1},"2":{"287":1,"288":2,"289":1,"290":1,"294":1,"518":1,"521":1,"522":1,"575":1}}],["resolver>",{"2":{"292":1}}],["resolvers",{"2":{"260":1,"266":1}}],["resolver",{"0":{"289":1},"1":{"290":1,"291":1},"2":{"251":1,"272":1,"286":1,"287":3,"289":2,"292":2,"293":3}}],["resolution",{"2":{"250":1,"286":1,"291":1,"521":1,"540":1,"564":1,"569":1,"571":1,"585":1,"645":1,"699":1}}],["resuming",{"0":{"269":1},"2":{"431":1,"491":1}}],["resumptions",{"2":{"411":1}}],["resumption",{"2":{"253":1,"269":2,"345":1,"346":1,"363":1,"484":1,"498":1}}],["resumed",{"2":{"442":1,"456":1}}],["resumes",{"2":{"272":1,"291":1,"316":1,"324":1,"325":1,"351":1,"353":1,"397":1,"400":2,"408":1,"428":2,"433":1,"438":1,"447":1,"478":1,"483":2,"490":1,"498":1}}],["resume",{"2":{"84":1,"255":1,"265":2,"269":1,"397":2,"404":1,"408":1,"433":1,"445":1,"461":1,"484":1,"1569":1}}],["resultrow",{"0":{"1101":1},"2":{"1101":1,"1320":1,"1328":1}}],["resultset",{"0":{"1101":1},"2":{"1100":1,"1101":2}}],["results",{"0":{"1530":1},"2":{"188":1,"293":2,"328":1,"483":1,"486":1,"488":1,"492":1,"589":1,"684":2,"745":1,"952":1,"1101":1,"1107":1,"1622":1}}],["result",{"0":{"442":1,"727":1,"955":1,"1081":1,"1528":1,"1533":1},"1":{"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1},"2":{"84":1,"202":1,"208":3,"228":1,"325":2,"385":1,"394":1,"397":1,"408":1,"410":1,"431":2,"438":1,"444":1,"483":1,"490":1,"496":1,"749":3,"876":1,"917":1,"949":1,"955":3,"958":1,"1081":1,"1328":1,"1437":1,"1490":2,"1491":4,"1492":2,"1528":1,"1529":5,"1530":4,"1533":2,"1534":1,"1535":2,"1586":1,"1600":1,"1601":1,"1602":1,"1607":1,"1608":1,"1609":1,"1613":1}}],["res",{"0":{"171":1,"172":1},"1":{"172":1,"173":1},"2":{"23":2,"31":1,"35":2,"57":2,"64":4,"89":7,"93":2,"94":2,"95":1,"96":2,"108":8,"112":2,"113":3,"114":3,"115":3,"122":1,"123":3,"124":2,"128":3,"130":2,"132":4,"136":2,"138":2,"139":2,"146":2,"148":1,"152":2,"156":3,"157":3,"158":3,"160":5,"167":2,"170":2,"172":2,"173":3,"174":5,"175":2,"176":4,"177":4,"178":2,"179":2,"181":2,"182":3,"188":3,"201":2,"202":2,"207":2,"208":2,"227":3,"228":3,"229":3,"230":3,"235":13,"801":6,"802":4,"803":2,"804":2,"805":2,"806":2,"807":2,"808":4,"809":2,"814":4,"816":2,"817":1,"871":20,"904":6,"905":4,"906":2,"907":2,"908":2,"909":2,"910":2,"911":4,"913":1,"919":1,"922":4,"936":1,"945":1,"947":2,"950":2,"987":2,"989":2,"990":2,"991":4,"992":3,"993":2,"994":2,"996":2,"997":2,"998":2,"999":1,"1030":1,"1143":1,"1205":2,"1206":1,"1309":3,"1310":4,"1311":6,"1312":6,"1313":6,"1314":5,"1353":4,"1357":4,"1380":5,"1587":3,"1600":3,"1601":1,"1602":1,"1607":1,"1608":1,"1609":3,"1610":1,"1613":2,"1614":2,"1615":3,"1627":8,"1634":7,"1639":4,"1644":2,"1645":2,"1646":2}}],["refused",{"2":{"417":1}}],["refresh",{"2":{"385":1,"943":1,"1078":1}}],["reflects",{"2":{"577":1}}],["reflect",{"2":{"153":1,"1381":1}}],["reflection",{"2":{"2":1,"39":1,"125":1,"145":1,"770":1,"779":1,"958":1}}],["references",{"2":{"270":1,"344":1,"383":1,"410":1,"575":1,"1006":1}}],["reference",{"0":{"0":1,"37":1,"371":1,"1166":1,"1169":1,"1174":1,"1178":1,"1232":1,"1505":1},"1":{"1":1,"2":1,"38":1,"39":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"1167":1,"1168":1,"1170":1,"1171":1,"1172":1,"1173":1,"1175":1,"1176":1,"1177":1,"1179":1,"1180":1,"1233":1},"2":{"272":1,"410":3,"635":1,"1077":1,"1101":1,"1288":1,"1296":1}}],["pc",{"2":{"1319":2}}],["pthread",{"2":{"1020":1,"1048":1}}],["ptr",{"0":{"1161":1,"1166":1,"1167":1,"1168":1},"1":{"1167":1,"1168":1},"2":{"86":1,"292":1,"310":1,"419":1,"420":1,"421":2,"425":1,"474":1,"492":1,"893":1,"899":1,"951":1,"974":2,"1006":1,"1010":1,"1071":1,"1077":1,"1161":2,"1167":1,"1168":1,"1171":1,"1187":1,"1270":4,"1284":2,"1295":1,"1364":3,"1367":3,"1414":1,"1612":2,"1613":2,"1614":1,"1615":1,"1621":1}}],["php",{"2":{"857":1,"1651":1}}],["philosophy",{"0":{"2":1,"36":1,"39":1,"105":1,"118":1,"134":1,"143":1,"154":1,"200":1,"212":1,"553":1,"588":1,"712":1,"724":1,"745":1,"751":1,"767":1,"780":1,"958":1,"973":1,"1264":1,"1375":1,"1408":1,"1424":1,"1441":1,"1457":1,"1535":1,"1647":1,"1658":1},"2":{"330":1,"579":1}}],["pwd",{"2":{"659":1}}],["p",{"2":{"568":1,"698":1,"1124":1,"1167":2,"1168":2,"1171":2,"1240":1,"1241":2,"1295":2,"1491":4,"1542":4,"1612":2,"1613":4,"1614":3,"1621":4}}],["ps",{"2":{"1319":3,"1337":3}}],["pseudo",{"2":{"265":1,"381":1,"1022":1}}],["ps1",{"2":{"243":1}}],["pkg>",{"2":{"558":2,"646":2,"648":2}}],["pkg",{"2":{"245":1,"246":1,"1123":1}}],["p99",{"2":{"224":1}}],["p95",{"2":{"224":1}}],["p50",{"2":{"224":1}}],["plaintext",{"2":{"1089":1}}],["plain",{"0":{"803":1,"906":1,"988":1,"1643":1},"2":{"871":1,"919":1}}],["plan",{"2":{"320":1}}],["placement",{"2":{"723":1}}],["place",{"2":{"255":1,"365":1,"1321":1,"1554":1}}],["placed",{"2":{"14":1,"67":1}}],["platforms",{"2":{"383":1,"1048":1,"1305":1,"1566":1,"1657":1}}],["platform",{"0":{"302":1,"1047":1,"1481":1},"1":{"1048":1,"1049":1,"1482":1},"2":{"209":1,"240":1,"383":1,"764":1,"920":1}}],["pluggable",{"2":{"819":1,"1361":1,"1375":1}}],["plugged",{"2":{"287":1}}],["plug",{"2":{"206":1}}],["plus",{"2":{"187":1}}],["python3",{"2":{"1128":1}}],["python",{"0":{"872":1,"944":1,"946":1},"2":{"164":1,"196":1,"857":1,"871":1,"872":1,"930":1,"933":1,"1651":1}}],["pill",{"2":{"1495":1}}],["pi",{"2":{"1298":2,"1299":2,"1300":1}}],["pin",{"2":{"637":1,"645":1,"1048":1}}],["pinned",{"2":{"575":1,"641":1}}],["pinning",{"2":{"564":1}}],["pins",{"2":{"518":1,"1020":1}}],["ping",{"0":{"104":1,"477":1,"1106":1,"1351":1,"1355":1},"1":{"1352":1,"1353":1,"1354":1,"1356":1,"1357":1,"1358":1},"2":{"61":1,"104":1,"152":1,"167":1,"179":1,"182":1,"424":1,"477":4,"816":1,"922":1,"1099":1,"1106":1,"1114":1,"1115":1,"1310":3,"1311":3,"1312":3,"1352":2,"1353":1,"1356":2,"1357":1,"1612":1,"1619":1}}],["pipes",{"2":{"848":1,"853":1}}],["piped",{"2":{"845":1}}],["pipe",{"2":{"417":1,"1599":1,"1602":1}}],["pipelining",{"2":{"320":1}}],["pipeline",{"2":{"180":1,"950":2,"952":1,"953":2,"958":1,"1051":1}}],["pipelines",{"2":{"137":1,"140":1,"145":1,"817":1,"835":1,"837":1,"862":1,"869":1}}],["pieces",{"2":{"413":1}}],["picks",{"2":{"935":1}}],["pick",{"0":{"1560":1},"1":{"1561":1,"1562":1,"1563":1,"1564":1},"2":{"209":1}}],["pitfalls",{"0":{"147":1,"267":1,"344":1,"461":1},"1":{"148":1,"149":1,"150":1,"268":1,"269":1,"270":1}}],["peek",{"2":{"1414":1,"1415":1}}],["peers",{"2":{"617":1,"618":1,"620":1,"1352":1,"1353":1,"1356":1,"1357":1}}],["peer",{"2":{"104":2,"417":1,"615":2,"616":1,"1370":1,"1391":1,"1671":1}}],["penalties",{"2":{"854":1}}],["pendingtasks",{"2":{"942":1}}],["pending",{"0":{"1402":1},"2":{"256":1,"357":3,"366":2,"374":2,"375":2,"377":1,"378":1,"382":1,"478":2,"606":1,"608":1,"878":1,"884":1,"896":1,"1011":1,"1033":1,"1045":1,"1343":1,"1345":1,"1375":1,"1385":1,"1386":1,"1387":1,"1402":2,"1406":1}}],["perm",{"2":{"1378":1}}],["permanently",{"2":{"1386":1}}],["permanentfailed",{"2":{"1378":2,"1385":1,"1386":1,"1406":1}}],["permanent",{"0":{"1378":1},"2":{"1376":1,"1378":2,"1409":1,"1415":1,"1418":1,"1422":1,"1438":1}}],["permission",{"0":{"1133":1},"2":{"1533":1}}],["periodicworkers",{"2":{"1038":1}}],["periodictask",{"2":{"942":1,"1044":1}}],["periodically",{"2":{"514":1,"935":1,"1001":1,"1362":1}}],["periodic",{"0":{"1044":1},"2":{"385":1,"462":1,"931":1,"942":1,"943":1,"1007":1,"1033":1,"1038":1,"1039":1,"1044":2,"1046":1,"1052":2,"1078":1}}],["period",{"0":{"1073":1},"2":{"220":1,"943":1,"1071":1,"1073":3}}],["perfect",{"2":{"188":1}}],["performed",{"2":{"1396":1,"1546":1}}],["performs",{"2":{"637":1,"848":1,"1058":1,"1602":1}}],["perform",{"2":{"149":1,"499":1,"902":1,"1427":1}}],["performance",{"0":{"142":1,"144":1,"147":1,"204":1,"846":1,"1065":1,"1242":1,"1578":1,"1650":1},"1":{"145":1,"146":1,"147":1,"148":2,"149":2,"150":2,"151":1,"152":1,"153":1,"154":1,"847":1,"848":1},"2":{"125":1,"143":1,"144":2,"154":1,"199":1,"205":1,"836":1,"838":1,"847":1,"848":1,"854":1,"858":1,"868":2,"871":1,"872":1,"948":1,"954":1,"972":1,"984":1,"1196":1,"1207":1,"1420":1,"1472":1,"1598":1,"1638":1,"1648":2,"1650":1,"1651":1,"1653":1,"1655":1,"1656":1,"1657":1,"1658":1,"1661":1,"1668":1,"1670":1,"1673":1}}],["persist",{"2":{"1412":1,"1442":1}}],["persisted",{"0":{"1558":1},"2":{"1384":1,"1386":1,"1406":1,"1409":1,"1456":1,"1569":1,"1571":1}}],["persistence",{"2":{"509":1,"817":1,"835":1,"1411":1,"1412":1,"1416":2,"1420":1,"1424":1}}],["persistent",{"2":{"140":1}}],["persisting",{"2":{"514":1,"1116":1,"1207":1}}],["persists",{"2":{"499":1,"511":1,"1415":1}}],["personal",{"2":{"138":1}}],["per",{"0":{"1516":1,"1596":1},"1":{"1517":1,"1518":1,"1519":1},"2":{"35":1,"63":1,"142":1,"210":1,"216":1,"217":1,"223":2,"231":1,"237":2,"308":1,"317":1,"327":1,"343":1,"425":1,"447":1,"507":1,"824":1,"834":1,"854":1,"858":1,"912":1,"918":1,"931":1,"935":1,"936":1,"1001":1,"1067":1,"1087":1,"1109":1,"1328":1,"1363":2,"1366":1,"1508":1,"1581":1,"1586":1,"1597":2}}],["p2phttpoptions",{"2":{"1353":1,"1357":1}}],["p2phttp",{"2":{"1353":1,"1357":1}}],["p2pruntime",{"2":{"1351":1,"1353":1,"1355":1,"1357":1}}],["p2p",{"0":{"104":1,"613":1,"1351":1,"1355":1,"1671":1},"1":{"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"1352":1,"1353":1,"1354":1,"1356":1,"1357":1,"1358":1},"2":{"104":1,"557":2,"613":1,"614":1,"615":1,"618":1,"620":6,"621":3,"1214":1,"1351":4,"1352":4,"1353":10,"1354":1,"1355":4,"1356":4,"1357":10,"1358":1,"1361":1,"1370":1,"1390":1,"1614":1,"1617":1,"1622":1,"1649":1,"1656":1}}],["pulse",{"2":{"1503":1}}],["pulled",{"2":{"1363":1}}],["pulls",{"2":{"1361":1,"1365":1}}],["pull",{"2":{"636":1,"1359":1,"1362":1}}],["pulling",{"2":{"336":1}}],["pub",{"2":{"570":1,"701":2}}],["pubkey=",{"2":{"701":1}}],["pubkey",{"2":{"568":1,"570":1,"571":2,"698":1,"699":2,"701":1}}],["published",{"2":{"637":1,"1376":1}}],["publishes",{"2":{"632":1}}],["publishing",{"0":{"644":1},"2":{"633":1,"644":1}}],["publish",{"0":{"630":1},"1":{"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1},"2":{"320":2,"558":1,"630":1,"631":1,"632":1,"634":5,"635":1,"637":2,"644":2,"646":1}}],["public",{"0":{"258":1,"718":1,"1005":1},"1":{"259":1,"260":1,"261":1,"719":1,"720":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1},"2":{"0":1,"37":1,"88":1,"89":2,"90":1,"196":2,"289":1,"303":1,"336":1,"395":1,"412":2,"416":1,"419":1,"422":1,"468":1,"478":1,"568":1,"571":1,"579":1,"584":2,"585":1,"586":2,"587":1,"698":1,"699":1,"701":1,"715":1,"819":2,"891":1,"913":1,"1075":1,"1090":1,"1092":1,"1094":2,"1098":1,"1112":2,"1120":1,"1311":1,"1353":3,"1357":3,"1370":1,"1380":2,"1445":1,"1449":1,"1450":1,"1482":1,"1611":1}}],["purely",{"2":{"712":1}}],["pure",{"2":{"294":1,"645":1,"1439":1}}],["purpose",{"2":{"79":1,"82":1,"251":1,"890":1,"1351":1,"1355":1}}],["purposes",{"2":{"40":1,"140":1,"871":1}}],["pushing",{"2":{"945":1}}],["pushes",{"2":{"378":1,"632":1}}],["push",{"2":{"43":5,"233":1,"339":1,"634":1,"635":1,"636":1,"644":1,"1147":2,"1212":3,"1214":2,"1271":1,"1288":2,"1290":8,"1301":1,"1370":1,"1593":1}}],["putoperation",{"2":{"1447":2,"1448":1,"1452":1}}],["putting",{"2":{"959":1}}],["put",{"0":{"21":1},"2":{"21":1,"179":1,"284":1,"504":1,"505":1,"510":1,"512":2,"814":1,"936":1,"1119":1,"1126":1,"1418":1}}],["pop",{"2":{"1038":1}}],["populated",{"2":{"488":1}}],["potentially",{"2":{"366":1,"422":1,"1068":1}}],["pointers",{"2":{"1482":1}}],["pointer",{"0":{"1171":1,"1284":1,"1295":1},"2":{"885":1,"1161":1,"1167":1,"1168":1,"1187":1}}],["point",{"0":{"796":1,"1278":1},"2":{"319":1,"365":1,"426":1,"448":1,"678":1,"710":1,"733":1,"734":1,"747":1,"753":1,"755":1,"757":1,"767":1,"828":1,"1268":1,"1270":1,"1309":1,"1327":1,"1570":1,"1622":1}}],["points",{"0":{"254":1},"1":{"255":1,"256":1,"257":1},"2":{"954":1,"1167":1,"1303":1,"1620":1}}],["policies",{"2":{"901":1}}],["policy",{"0":{"842":1,"854":1,"858":1},"2":{"160":1,"225":1,"499":1,"501":1,"505":2,"512":5,"513":2,"514":1,"854":1,"859":1,"887":1,"1009":1,"1365":1,"1369":1,"1408":1,"1412":1,"1413":1,"1424":1,"1425":1,"1427":1,"1434":1,"1438":3,"1440":1}}],["polymorphic",{"2":{"359":1,"1327":1}}],["poll",{"2":{"108":2,"1627":3}}],["polling",{"0":{"79":1,"1627":1},"2":{"67":1,"79":1,"106":1,"108":4,"110":1,"1626":2,"1627":6,"1630":1}}],["pos",{"2":{"707":2,"711":1}}],["positional",{"2":{"1100":1,"1318":1}}],["position=",{"2":{"727":1}}],["position",{"2":{"703":1,"707":2,"708":2,"711":1,"727":1,"734":1}}],["posix",{"2":{"364":1,"383":3,"1482":1,"1566":1}}],["possible",{"0":{"742":1},"2":{"148":1,"152":1,"219":1,"507":1,"627":1,"751":1,"760":1,"775":1,"851":1,"889":1,"1375":1,"1423":1,"1493":1,"1632":1}}],["posting",{"0":{"349":1,"350":1,"351":1},"1":{"350":1,"351":1},"2":{"344":1,"347":1,"366":1,"378":1,"484":1}}],["posted",{"2":{"252":1,"366":1,"368":1,"376":1,"384":1,"386":1,"390":1,"411":1,"498":1,"1044":1,"1059":1,"1073":1,"1078":1}}],["posts",{"2":{"174":1,"269":1,"353":1,"406":2,"447":1,"449":1,"456":1,"461":1,"498":1,"877":1,"895":1,"916":1,"932":1,"943":2,"1044":1,"1068":1,"1071":1}}],["post",{"0":{"20":1,"877":1,"895":1},"2":{"20":1,"57":1,"62":3,"84":1,"85":1,"86":1,"108":1,"177":2,"197":1,"235":1,"265":2,"310":1,"316":2,"320":1,"323":2,"334":3,"337":1,"343":1,"348":1,"350":1,"351":1,"360":1,"372":1,"376":1,"378":1,"386":1,"388":1,"391":1,"406":1,"435":1,"449":2,"484":1,"814":3,"818":1,"871":2,"874":2,"876":1,"880":1,"881":1,"886":1,"887":1,"895":1,"936":1,"953":1,"974":1,"982":1,"1073":1,"1377":1,"1378":1,"1379":1,"1627":1}}],["power",{"2":{"859":1,"1455":1}}],["powershellget",{"2":{"243":1}}],["powershellirm",{"2":{"243":1}}],["powershell",{"0":{"243":1}}],["powerful",{"2":{"142":1,"873":1}}],["powered",{"0":{"1216":1},"1":{"1217":1,"1218":1,"1219":1},"2":{"45":1,"1209":1}}],["pong",{"2":{"104":1,"152":1,"816":1,"922":1,"1310":1,"1311":1,"1312":1}}],["pooledconn",{"2":{"1103":1,"1319":1}}],["poolconfig",{"2":{"1103":1,"1318":1}}],["pooling",{"2":{"890":1,"1670":1}}],["pools",{"2":{"361":1,"425":1,"933":1,"946":1,"1317":1,"1669":1}}],["pool",{"0":{"84":1,"301":1,"325":1,"339":1,"428":1,"1103":1,"1318":1},"1":{"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1},"2":{"69":1,"84":4,"103":1,"253":2,"297":1,"322":1,"325":3,"330":1,"331":1,"336":2,"339":6,"345":1,"361":1,"393":1,"428":2,"429":1,"433":1,"435":1,"436":1,"442":5,"443":5,"444":3,"445":2,"453":1,"461":1,"462":1,"893":1,"895":2,"897":1,"900":1,"931":1,"942":3,"945":1,"1001":1,"1033":1,"1037":1,"1038":3,"1039":1,"1040":1,"1041":1,"1043":1,"1044":2,"1048":1,"1050":1,"1051":2,"1068":1,"1078":1,"1096":1,"1103":1,"1104":2,"1106":1,"1107":3,"1108":1,"1112":4,"1117":1,"1318":3,"1319":3,"1320":3,"1321":3,"1330":1,"1335":1,"1515":1,"1628":1}}],["portability",{"0":{"1565":1},"1":{"1566":1,"1567":1},"2":{"1489":1}}],["portable",{"2":{"724":1}}],["ports",{"2":{"834":1,"1025":1}}],["port>",{"2":{"614":1,"616":2,"617":1}}],["port",{"0":{"811":1,"812":1,"1015":1,"1025":1,"1126":1},"2":{"7":2,"10":2,"11":3,"12":5,"17":1,"288":4,"289":1,"293":1,"310":1,"317":1,"415":2,"420":1,"424":1,"425":1,"466":3,"477":1,"479":1,"547":1,"616":1,"617":1,"823":4,"825":1,"826":2,"829":2,"830":1,"831":2,"833":1,"935":4,"1001":1,"1015":3,"1017":4,"1025":2,"1117":1,"1124":2,"1126":1,"1129":1,"1186":2,"1204":1,"1281":1,"1322":1,"1353":1,"1354":2,"1357":1,"1358":2,"1478":2,"1491":6,"1497":1,"1498":2,"1505":2,"1506":3,"1512":1}}],["pay",{"2":{"1597":1}}],["payloads",{"2":{"53":1,"1063":1,"1196":1,"1243":1,"1252":1,"1268":1,"1306":1,"1580":1,"1611":1}}],["payload",{"0":{"173":1,"1185":1,"1392":1},"2":{"24":1,"70":2,"74":2,"75":1,"78":1,"106":1,"107":2,"108":4,"110":1,"123":1,"230":1,"233":1,"236":2,"238":1,"567":1,"628":1,"699":1,"925":1,"926":4,"964":1,"999":1,"1206":2,"1221":1,"1260":1,"1377":1,"1378":1,"1379":1,"1384":1,"1387":1,"1411":1,"1447":1,"1448":1,"1593":1,"1617":1,"1622":1,"1625":1,"1626":2,"1627":5,"1628":2,"1629":1,"1630":1,"1647":1}}],["pagination",{"0":{"1154":1}}],["pager",{"2":{"1124":1,"1129":1,"1132":1}}],["pagestr",{"2":{"871":2}}],["page=1",{"2":{"512":1}}],["page=2",{"2":{"165":1,"507":1,"871":1,"993":2,"1551":1}}],["page",{"2":{"1":1,"2":1,"3":1,"14":1,"26":1,"38":1,"39":1,"40":1,"54":1,"67":1,"175":4,"213":1,"232":1,"239":1,"240":1,"395":1,"412":1,"480":1,"871":2,"927":1,"930":1,"962":1,"968":1,"993":4,"1154":4,"1316":1,"1359":1,"1376":1,"1382":1,"1409":1,"1425":1,"1442":1,"1551":1,"1611":1,"1634":4}}],["packs",{"2":{"569":1}}],["pack",{"0":{"622":1},"1":{"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1},"2":{"559":1,"563":1,"570":1,"572":1,"623":1,"624":1,"626":3,"627":2,"629":2,"701":2,"702":1}}],["packaging",{"0":{"559":1},"2":{"551":1,"553":1,"564":1}}],["packaged",{"2":{"567":1,"880":1,"1042":1}}],["packages",{"2":{"537":1,"572":1,"642":1,"679":1}}],["package",{"0":{"644":1},"2":{"320":1,"563":1,"565":1,"567":1,"568":1,"570":1,"622":1,"624":1,"625":2,"630":1,"638":1,"649":2,"650":1,"683":1,"685":1,"694":1,"696":2,"698":1,"701":1,"702":1}}],["pairs",{"0":{"1147":1},"2":{"1142":1,"1146":2,"1147":4,"1156":2,"1157":1,"1281":1,"1328":2,"1520":1,"1551":1}}],["pair",{"2":{"488":1,"498":1,"926":1,"1147":1,"1320":2,"1328":2,"1606":2}}],["past",{"2":{"1444":1}}],["paste",{"2":{"308":1,"1124":1,"1376":1}}],["passes",{"2":{"1019":1}}],["passed",{"2":{"277":1,"708":1,"950":1,"1151":1,"1483":1}}],["passing",{"2":{"926":1,"1305":1}}],["passthrough",{"0":{"690":1},"2":{"1339":1}}],["password",{"0":{"832":1},"2":{"610":1,"825":1,"826":1,"832":3,"834":1,"1104":1,"1106":1,"1107":1,"1108":1,"1112":1,"1117":1,"1322":1,"1347":1,"1603":4,"1604":4,"1605":2,"1606":1}}],["passwords",{"2":{"138":1,"1605":1}}],["pass>",{"2":{"610":1,"1347":1}}],["pass",{"2":{"273":1,"426":2,"475":1,"498":1,"513":1,"530":1,"547":1,"610":1,"611":1,"690":1,"777":1,"832":1,"834":1,"918":1,"983":1,"1089":1,"1115":1,"1127":1,"1314":1,"1347":1,"1348":1}}],["parent",{"2":{"1199":1}}],["part",{"2":{"523":1,"685":1,"781":1,"912":1,"915":2,"982":1,"1228":1,"1553":1}}],["parts",{"2":{"343":1,"1323":1,"1491":2,"1545":1,"1546":1}}],["partially",{"2":{"1199":1}}],["partial",{"2":{"117":1,"213":1,"214":1,"218":1,"417":1,"755":1,"766":2,"850":1}}],["parallel",{"2":{"328":1,"528":1,"530":1,"546":1,"669":1}}],["paramname",{"2":{"976":1}}],["parammap",{"2":{"916":1,"926":2}}],["params",{"0":{"916":1},"2":{"122":2,"912":1,"914":2,"916":1,"925":1,"926":1,"931":1,"1319":1,"1320":1,"1337":2,"1350":1,"1580":1,"1612":5,"1613":5,"1614":2,"1615":4,"1619":2,"1621":5}}],["param",{"2":{"25":1,"113":1,"130":1,"174":4,"178":1,"227":2,"871":1,"992":1,"1319":2,"1337":1,"1634":1,"1644":1}}],["parameter",{"0":{"25":1,"26":1,"1108":1,"1644":1,"1645":1},"2":{"975":1,"982":1,"985":1,"1100":1,"1337":1,"1434":1}}],["parameters",{"0":{"174":1,"175":1,"893":1,"976":1,"992":1,"993":1},"2":{"24":2,"69":1,"131":1,"174":1,"507":1,"751":1,"871":2,"937":1,"972":1,"1100":1,"1117":1,"1319":2}}],["parsing",{"0":{"193":1,"750":1,"765":1,"915":1,"1185":1,"1186":1,"1551":1},"2":{"53":1,"177":1,"187":1,"197":1,"219":1,"425":1,"428":1,"706":1,"713":1,"736":1,"743":1,"746":1,"753":1,"755":2,"766":1,"767":1,"768":1,"780":1,"793":1,"901":1,"914":2,"931":1,"1001":1,"1067":1,"1220":1,"1242":1,"1245":1,"1252":2,"1265":4,"1266":1,"1268":2,"1474":1,"1490":1,"1536":1,"1552":1,"1581":1,"1612":1,"1614":1,"1620":1,"1622":1,"1637":1}}],["parser",{"0":{"785":1},"2":{"708":1,"787":1,"793":1,"932":1,"936":1,"1182":1,"1242":1}}],["parsers",{"2":{"186":1,"1552":1}}],["parse",{"0":{"733":1,"746":1,"789":1,"791":1,"1259":1,"1260":1,"1461":1,"1465":1,"1612":1,"1620":1},"1":{"747":1,"748":1,"749":1,"750":1,"751":1,"752":1},"2":{"50":1,"131":1,"141":1,"149":1,"319":1,"320":1,"711":2,"726":1,"728":1,"729":1,"730":1,"733":4,"734":1,"746":1,"747":2,"748":4,"749":2,"750":1,"751":1,"752":1,"765":2,"776":2,"787":1,"833":1,"1056":1,"1216":1,"1233":1,"1248":2,"1249":1,"1251":1,"1254":1,"1256":1,"1266":1,"1306":1,"1461":1,"1465":1,"1479":1,"1480":1,"1491":2,"1551":3,"1602":1,"1611":1,"1612":3,"1616":1,"1620":3,"1625":1,"1630":1}}],["parsed",{"0":{"1602":1},"2":{"29":1,"177":1,"187":1,"188":1,"706":1,"743":1,"776":1,"829":1,"831":1,"915":1,"1182":1,"1242":1,"1478":1,"1599":1,"1602":1,"1606":1,"1610":1,"1612":3,"1620":3}}],["parses",{"2":{"4":1,"75":1,"781":1,"888":1,"917":1,"932":1,"1060":1,"1549":1,"1551":1,"1613":1}}],["patch",{"2":{"582":4,"583":2,"814":1,"936":1}}],["patterns",{"0":{"380":1,"479":1,"860":1,"1152":1,"1184":1,"1203":1,"1484":1,"1588":1},"1":{"381":1,"382":1,"861":1,"862":1,"1153":1,"1154":1,"1185":1,"1186":1,"1204":1,"1205":1,"1206":1,"1485":1,"1486":1,"1487":1,"1589":1,"1590":1,"1591":1,"1592":1},"2":{"153":1,"162":1,"164":2,"321":1,"842":1,"914":1,"929":1,"932":1,"1058":1,"1063":1,"1079":1,"1458":1,"1514":1,"1598":1,"1611":1,"1650":1,"1652":1,"1670":1,"1671":1}}],["pattern",{"0":{"12":1,"115":1,"141":1,"157":1,"179":1,"203":1,"229":1,"281":1,"307":1,"327":1,"426":1,"462":1,"721":1,"1371":1,"1506":1,"1514":1,"1604":1},"1":{"1372":1,"1373":1},"2":{"87":1,"91":1,"265":1,"327":1,"379":1,"497":1,"727":1,"832":1,"916":1,"918":1,"925":1,"927":1,"955":1,"1023":1,"1050":1,"1081":1,"1155":1,"1409":1,"1412":1,"1423":1,"1510":1,"1514":1,"1522":1,"1584":1,"1586":1,"1592":1,"1620":1,"1621":1}}],["path>",{"2":{"528":2,"568":2,"582":1,"609":2,"610":3,"625":2,"669":1,"670":1,"698":2,"1347":3}}],["paths",{"0":{"148":1},"2":{"231":1,"541":1,"826":1,"830":1,"831":1,"847":1,"848":1,"889":1,"968":1,"1052":1,"1242":1,"1354":1,"1358":1,"1381":1,"1597":1}}],["path",{"0":{"10":1,"25":1,"52":1,"61":1,"174":1,"830":1,"915":1,"976":1,"992":1,"1198":1,"1229":1,"1230":1,"1231":1,"1233":2,"1254":1,"1255":1,"1312":1,"1644":1},"2":{"3":1,"5":1,"19":1,"20":1,"21":1,"22":1,"24":1,"52":1,"61":1,"89":1,"122":1,"130":1,"138":1,"140":1,"167":1,"168":1,"174":1,"182":1,"242":1,"249":1,"319":1,"320":1,"507":1,"510":1,"511":1,"566":1,"568":1,"570":4,"572":1,"610":1,"640":2,"643":2,"687":1,"692":1,"695":1,"697":1,"698":1,"701":2,"721":2,"817":2,"819":1,"824":2,"825":1,"871":1,"912":1,"914":2,"915":1,"921":1,"924":3,"925":1,"927":1,"931":2,"932":1,"937":3,"945":1,"965":2,"966":1,"972":2,"980":1,"1004":1,"1051":1,"1065":2,"1104":1,"1112":1,"1115":1,"1201":1,"1219":1,"1221":1,"1229":1,"1231":1,"1233":1,"1240":1,"1241":3,"1242":1,"1244":3,"1308":2,"1312":1,"1346":2,"1347":1,"1377":1,"1378":3,"1379":3,"1420":3,"1445":2,"1449":2,"1450":2,"1495":1,"1497":1,"1498":2,"1505":3,"1506":1,"1567":1,"1628":1}}],["pr",{"2":{"632":1,"644":1}}],["pragma",{"2":{"584":1}}],["practices",{"0":{"284":1,"343":1,"393":1,"834":1},"2":{"142":1}}],["practice",{"2":{"133":1,"159":2,"211":1,"931":1}}],["practicality",{"2":{"1136":1}}],["practical",{"0":{"196":1,"225":1,"383":1,"848":1,"889":1,"929":1,"948":1,"1078":1,"1184":1,"1203":1},"1":{"1185":1,"1186":1,"1204":1,"1205":1,"1206":1},"2":{"98":1,"270":1,"378":1,"1221":1,"1323":1,"1339":1,"1482":1,"1508":1,"1611":1}}],["pruning",{"0":{"514":1},"2":{"514":1,"1422":1}}],["prune",{"2":{"505":1,"514":1,"1418":1,"1422":1}}],["professional",{"2":{"1660":1}}],["profile",{"2":{"52":2,"658":1,"974":1,"990":1,"1219":1,"1223":3}}],["proxies",{"2":{"1630":1}}],["proxy",{"0":{"1127":1},"2":{"161":1,"162":1,"1127":6}}],["proof",{"0":{"856":1},"1":{"857":1,"858":1},"2":{"836":1}}],["prod",{"2":{"750":3,"1215":1}}],["products",{"2":{"507":1,"512":1,"585":2,"589":1}}],["production",{"0":{"140":1,"210":1,"1032":1,"1661":1},"2":{"4":1,"12":1,"91":1,"105":1,"118":1,"135":2,"140":1,"141":1,"142":1,"151":1,"157":1,"161":1,"211":1,"224":1,"551":1,"752":1,"817":1,"835":2,"837":1,"838":1,"855":1,"862":1,"868":1,"869":1,"870":1,"873":1,"890":1,"1610":1,"1616":1,"1638":1,"1656":1,"1658":1,"1660":1}}],["produce",{"2":{"1328":2,"1598":1,"1615":2}}],["produced",{"2":{"397":1,"1156":1,"1623":1}}],["producers",{"2":{"360":1}}],["produces",{"2":{"232":1,"395":1,"1196":1,"1575":1,"1615":1,"1618":1}}],["prompted",{"2":{"601":1}}],["prompts",{"2":{"593":2}}],["prompt",{"2":{"592":1,"594":1}}],["promise",{"2":{"390":1,"399":1,"400":1,"404":1,"406":1}}],["propagate",{"2":{"385":1,"721":1,"1042":1,"1256":1}}],["propagation",{"0":{"404":1},"2":{"305":1,"306":1}}],["properties",{"2":{"397":1,"953":1,"1573":1}}],["properly",{"2":{"157":1,"161":2,"1060":1}}],["proper",{"2":{"137":1,"151":1,"204":1,"319":1,"948":1,"1062":1}}],["processed2",{"2":{"1378":2}}],["processed1",{"2":{"1378":2}}],["processed",{"2":{"1364":1,"1377":2,"1386":2,"1409":1}}],["processes",{"2":{"234":1,"335":1,"350":1,"355":1,"509":1,"1365":1,"1367":1,"1446":1}}],["processing",{"2":{"533":1,"942":1,"1361":1}}],["process",{"0":{"1627":1},"2":{"310":1,"383":1,"1199":1,"1260":1,"1363":1,"1515":1,"1570":1,"1626":1}}],["proceed",{"2":{"284":1,"1365":1,"1452":1}}],["progression",{"2":{"1433":1}}],["progressively",{"2":{"232":1}}],["progress",{"2":{"528":1}}],["programs",{"2":{"1666":1}}],["programmatically",{"2":{"1511":1,"1522":1}}],["programming",{"2":{"1251":1}}],["program",{"2":{"264":1,"323":1,"343":1,"365":2,"377":1}}],["problem",{"0":{"252":1,"365":1,"1223":1}}],["probe",{"2":{"220":1,"513":1,"1364":1,"1367":1,"1377":3,"1378":2,"1379":2}}],["project>",{"2":{"584":4,"585":2,"624":1,"625":1}}],["project",{"0":{"555":1,"556":1,"666":1,"1553":1,"1631":1,"1632":1},"1":{"1633":1,"1634":1,"1635":1,"1636":1,"1637":1},"2":{"247":1,"518":1,"524":1,"528":1,"533":1,"535":1,"539":1,"545":1,"547":1,"550":1,"553":1,"564":1,"567":1,"573":1,"577":1,"579":1,"582":3,"590":1,"592":1,"599":1,"600":1,"601":1,"610":2,"622":1,"625":2,"629":1,"647":1,"666":1,"668":1,"669":1,"678":1,"686":1,"692":1,"696":1,"1347":2,"1632":1,"1635":1,"1637":1}}],["projects",{"0":{"196":1},"2":{"244":2,"545":1,"551":1,"598":1,"1649":1}}],["provided",{"2":{"388":1,"420":1,"594":1,"697":1,"821":1,"832":1,"893":1,"916":1,"1241":1,"1474":1}}],["provide",{"2":{"383":1,"410":1,"701":1,"837":1,"887":1,"951":1,"1066":1,"1101":1,"1327":1,"1661":1}}],["provider",{"0":{"207":1,"208":1,"209":1},"2":{"206":2,"207":3,"208":1,"209":1,"210":1,"211":2,"213":1,"214":1,"215":1,"216":1,"219":1,"220":1,"221":2,"222":2,"224":2,"226":1,"238":1}}],["providers",{"0":{"206":1,"221":1},"1":{"207":1,"208":1,"209":1,"210":1,"211":1,"212":1},"2":{"206":1,"212":1,"221":1,"239":1}}],["provides",{"0":{"333":1,"386":1,"931":1,"1538":1},"1":{"334":1,"335":1,"336":1,"1539":1},"2":{"24":1,"40":1,"199":1,"285":1,"286":1,"321":1,"347":1,"352":1,"365":1,"447":1,"578":1,"688":1,"710":1,"713":1,"715":1,"722":1,"725":1,"746":1,"755":1,"825":1,"870":1,"885":1,"890":1,"899":1,"912":1,"919":1,"921":1,"949":1,"954":1,"960":1,"1003":2,"1033":1,"1067":1,"1079":1,"1085":1,"1102":1,"1116":1,"1136":1,"1158":1,"1180":1,"1188":1,"1208":1,"1209":1,"1221":1,"1245":1,"1265":1,"1271":1,"1307":1,"1338":1,"1441":1,"1445":1,"1458":1,"1474":1,"1579":1,"1599":1,"1609":1,"1627":1}}],["proto",{"2":{"1127":1}}],["prototyping",{"2":{"549":1}}],["protocols",{"2":{"80":1}}],["protocol",{"0":{"75":1,"107":1},"2":{"67":1,"102":1,"110":1,"276":1,"425":1,"427":1,"1626":1}}],["protecthome=true",{"2":{"1124":1}}],["protective",{"2":{"1058":1}}],["protecting",{"2":{"223":1,"868":1}}],["protection",{"0":{"162":1,"856":1,"1057":1},"1":{"857":1,"858":1},"2":{"924":1,"1115":1}}],["protectsystem=strict",{"2":{"1124":1}}],["protects",{"2":{"220":1,"1056":1,"1059":1,"1063":1}}],["protect",{"2":{"89":2,"230":1,"817":2,"1066":1,"1312":3}}],["protected",{"2":{"87":1,"88":1,"89":1,"90":2,"101":1,"360":1,"378":1,"511":1,"1062":1,"1312":1,"1421":1}}],["prepared",{"0":{"1108":1},"2":{"1099":1,"1100":1,"1107":1,"1317":1}}],["prepare",{"2":{"1099":1,"1107":3,"1112":2,"1318":1,"1319":1,"1321":1,"1337":1}}],["prepares",{"2":{"629":1,"925":1}}],["prevents",{"2":{"888":1,"1057":1,"1059":1,"1423":1,"1432":1,"1440":1,"1575":1}}],["preventing",{"2":{"850":1}}],["previous",{"2":{"609":1,"1346":1}}],["prettylogs",{"2":{"1490":1,"1492":2}}],["pretty>",{"2":{"674":1}}],["pretty",{"0":{"1195":1,"1494":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"511":1,"1116":1,"1192":1,"1195":1,"1208":2,"1377":1,"1378":1,"1379":1,"1420":2,"1522":2,"1523":1,"1527":1}}],["prerequisites",{"0":{"244":1},"1":{"245":1,"246":1,"247":1},"2":{"240":1}}],["pred",{"2":{"207":1,"227":1,"229":2}}],["predictability",{"2":{"266":1,"872":1}}],["predictable",{"2":{"13":1,"118":1,"119":1,"125":1,"134":1,"143":1,"144":1,"154":1,"163":1,"199":1,"213":1,"222":1,"239":1,"255":1,"307":1,"361":1,"541":1,"551":1,"662":1,"712":1,"713":1,"724":1,"745":1,"752":1,"755":1,"766":1,"767":1,"770":1,"780":1,"793":1,"799":1,"871":1,"902":1,"954":1,"958":1,"1032":1,"1187":1,"1221":1,"1244":1,"1264":1,"1272":1,"1306":1,"1307":1,"1315":1,"1322":1,"1323":1,"1440":1,"1489":1,"1535":1,"1543":1,"1552":1,"1579":1,"1647":1,"1651":1,"1658":1}}],["predictions",{"2":{"229":1}}],["prediction",{"2":{"201":2,"207":3,"227":1}}],["predict",{"2":{"201":1,"207":1,"227":2}}],["press",{"2":{"365":1,"382":1}}],["pressure",{"2":{"151":1}}],["preserved",{"2":{"978":1,"1454":1,"1552":1}}],["preserve",{"2":{"845":1,"855":2,"1418":1}}],["preserves",{"2":{"787":1,"858":1,"868":1}}],["present",{"2":{"567":1,"1586":1,"1595":1}}],["presence",{"2":{"176":1,"618":1,"1623":1}}],["preset",{"0":{"691":1},"2":{"527":1,"528":1,"530":2,"531":1,"629":1,"669":4,"676":3,"688":1,"691":4}}],["presets",{"0":{"189":1,"527":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1},"2":{"524":1,"526":1}}],["precise",{"2":{"461":1}}],["precision",{"2":{"0":1,"37":1,"764":1}}],["precomputed",{"2":{"148":1}}],["preferred",{"2":{"151":1}}],["prefer",{"2":{"91":1,"141":1,"148":1,"150":1,"221":1,"330":1,"445":1,"507":1,"734":2,"793":1,"848":1,"929":1,"1052":1,"1109":1,"1117":1,"1147":1,"1155":1,"1160":2,"1348":1,"1591":1,"1598":1}}],["prefixes",{"2":{"1315":1}}],["prefix",{"0":{"60":1,"185":2,"1311":1,"1513":1,"1542":1,"1543":1},"1":{"1543":1},"2":{"168":1,"195":1,"197":1,"706":1,"817":1,"818":1,"1308":1,"1311":1,"1315":1,"1353":1,"1357":1,"1513":1,"1536":1,"1543":1}}],["pre",{"2":{"57":1,"62":3,"953":1,"1103":1,"1547":1}}],["privileged",{"2":{"1025":1}}],["privatetmp=true",{"2":{"1124":1}}],["private",{"2":{"539":1,"579":1,"584":2,"586":1,"587":1,"1075":1,"1092":1,"1093":1,"1095":1,"1380":2,"1635":1,"1662":1,"1672":1}}],["price",{"2":{"711":2}}],["prints",{"2":{"858":1,"1495":1,"1502":1,"1504":1}}],["printer",{"2":{"727":1}}],["print",{"2":{"568":1,"616":1,"640":1,"643":1,"653":1,"659":1,"727":2,"728":1,"729":1,"730":1,"731":1,"732":3,"733":3,"1192":1,"1494":1,"1504":1,"1524":1}}],["principles",{"0":{"125":1,"361":1,"541":1},"2":{"2":1,"39":1,"214":1,"745":1}}],["priorities",{"2":{"1050":2,"1052":1}}],["priority",{"0":{"1662":1},"2":{"877":1,"882":1,"883":1,"893":1,"895":1,"899":1,"902":1,"942":2,"982":1,"1033":4,"1035":5,"1036":5,"1038":1,"1039":3,"1040":3,"1044":2,"1078":1,"1628":1}}],["prior",{"2":{"523":1,"1424":1}}],["primary",{"2":{"447":1,"847":1,"1107":1,"1112":1,"1139":1,"1303":1,"1329":1,"1577":1}}],["primitive",{"2":{"361":1,"363":1,"713":1,"1079":1,"1270":1,"1307":1,"1442":1,"1457":1}}],["primitives",{"0":{"265":1},"2":{"0":1,"14":1,"37":1,"253":1,"255":1,"270":1,"273":1,"1079":1,"1458":1,"1490":1}}],["old",{"2":{"1422":1}}],["older",{"2":{"513":1,"1418":2,"1422":2}}],["odd",{"0":{"1149":1}}],["oct",{"2":{"1556":1}}],["octal",{"2":{"793":1}}],["occurs",{"2":{"957":1,"1044":1,"1199":1}}],["occurred",{"2":{"139":1}}],["owned",{"2":{"336":1,"343":1,"344":1,"378":1,"887":1,"1363":1}}],["ownership",{"0":{"334":1,"409":1},"2":{"394":1,"397":1,"406":1,"951":1,"1416":1}}],["owner",{"0":{"1075":1},"2":{"273":1,"278":1,"397":1,"1377":1,"1378":1,"1379":1,"1413":2,"1418":1}}],["owning",{"2":{"266":1}}],["own",{"0":{"715":1},"2":{"252":3,"265":1,"303":1,"327":1,"343":1,"531":1,"873":1,"902":1,"1028":1,"1373":1,"1575":1}}],["owns",{"2":{"251":1,"253":2,"331":1,"334":1,"362":1,"394":1,"406":1,"411":1,"492":1,"893":1,"935":1,"936":1,"1054":1,"1071":1,"1103":1,"1104":1,"1133":1,"1362":1}}],["osc",{"0":{"1502":1},"2":{"1494":1,"1507":1}}],["ostringstream",{"2":{"847":1,"1567":1}}],["os>",{"2":{"569":1}}],["os",{"2":{"151":1,"384":1,"461":1,"935":1,"1455":1,"1557":1}}],["obvious",{"2":{"1598":1}}],["observable",{"2":{"767":1,"1375":1}}],["observability",{"0":{"224":1},"2":{"140":1,"214":1,"393":1,"835":1,"862":1,"1652":1,"1671":1}}],["observe",{"2":{"365":1,"373":1}}],["observed",{"2":{"355":1,"417":1,"426":1,"443":1,"459":1,"475":1}}],["observer",{"2":{"273":1,"386":1}}],["observing",{"2":{"278":1,"374":1}}],["obj",{"2":{"44":2,"52":1,"108":2,"990":1,"1161":1,"1180":2,"1183":2,"1215":2,"1219":1,"1273":1,"1281":2,"1290":1,"1294":1,"1303":1,"1304":3,"1305":1,"1307":2,"1605":3,"1612":2,"1613":3,"1614":2,"1615":6,"1621":1,"1627":2}}],["objects",{"0":{"658":1,"1146":1,"1281":1},"2":{"150":1,"265":1,"270":3,"653":1,"658":1,"826":1,"830":1,"1140":1,"1157":2,"1230":1,"1268":1,"1272":1,"1281":1,"1307":1,"1615":2,"1622":1,"1624":1}}],["object",{"0":{"46":1,"122":1,"123":1,"1172":1,"1176":1,"1180":1,"1213":1,"1217":1,"1288":1,"1301":1},"2":{"34":1,"41":1,"42":1,"44":2,"69":1,"119":2,"177":1,"228":2,"229":1,"276":1,"406":1,"871":1,"946":1,"950":1,"953":1,"966":1,"1081":1,"1140":1,"1142":1,"1146":1,"1147":2,"1167":2,"1180":2,"1181":1,"1209":1,"1210":1,"1214":1,"1216":2,"1230":3,"1231":1,"1238":1,"1270":1,"1272":1,"1273":1,"1283":1,"1284":1,"1288":3,"1290":1,"1301":1,"1577":1,"1603":1,"1612":3,"1613":4,"1614":1,"1616":1,"1619":1,"1621":4,"1622":1}}],["opaque",{"2":{"1392":1}}],["ops",{"2":{"1379":1}}],["opt",{"0":{"877":1,"895":1,"1073":1,"1162":1,"1169":1},"1":{"1170":1,"1171":1,"1172":1,"1173":1},"2":{"556":1,"876":2,"895":1,"1073":1,"1120":1,"1122":2,"1123":2,"1124":7,"1129":4,"1133":1,"1160":1,"1170":2,"1171":1,"1172":1,"1173":1,"1185":1,"1187":1,"1353":9,"1357":9,"1418":1}}],["optimization",{"0":{"1650":1},"2":{"1375":1,"1656":1,"1670":1}}],["optimized",{"2":{"515":1,"533":1,"543":1}}],["option",{"0":{"1122":1,"1123":1},"2":{"1017":1,"1163":1}}],["options",{"0":{"528":1,"546":1,"562":1,"568":1,"582":1,"592":1,"610":1,"616":1,"625":1,"669":1,"670":1,"698":1,"979":1,"1347":1,"1663":1,"1672":1},"2":{"160":2,"525":1,"544":1,"566":1,"580":1,"591":1,"603":4,"609":1,"614":1,"623":1,"664":1,"687":1,"693":1,"695":1,"814":1,"824":2,"877":1,"895":1,"968":1,"974":1,"979":1,"983":1,"1341":4,"1346":1}}],["optionally",{"2":{"364":1,"479":1,"583":1,"624":2,"926":1,"1050":1}}],["optional",{"0":{"627":1,"1128":1,"1262":1,"1590":1,"1608":1},"2":{"106":1,"108":2,"212":1,"252":1,"253":1,"320":1,"366":1,"384":1,"457":1,"477":1,"504":1,"505":1,"526":1,"596":1,"613":1,"615":2,"628":3,"696":2,"698":1,"703":1,"708":1,"774":1,"783":1,"825":1,"854":1,"931":2,"932":1,"936":1,"953":1,"955":1,"972":1,"1075":1,"1088":1,"1096":1,"1112":1,"1116":1,"1119":2,"1120":3,"1124":1,"1162":1,"1170":2,"1187":1,"1245":1,"1252":1,"1255":1,"1257":1,"1264":1,"1298":4,"1332":1,"1335":1,"1369":1,"1418":1,"1421":1,"1427":1,"1449":1,"1450":1,"1494":1,"1495":2,"1508":2,"1584":5,"1608":1,"1619":2,"1626":2,"1638":1}}],["op",{"2":{"526":1,"1048":1,"1366":1,"1370":1,"1377":5,"1378":5,"1379":5,"1380":3,"1414":1,"1418":1,"1452":1}}],["opened",{"2":{"1202":1,"1254":1}}],["openapi",{"0":{"673":1,"939":1,"961":1,"965":1,"966":1,"981":1},"1":{"940":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1},"2":{"871":1,"873":1,"931":1,"939":1,"961":1,"962":2,"964":3,"965":1,"966":6,"967":5,"968":4,"969":1,"970":2,"971":4,"972":1,"973":1,"981":1,"984":1}}],["opening",{"2":{"644":1}}],["opens",{"2":{"632":1,"1449":1}}],["openssl",{"2":{"246":1}}],["openvino",{"2":{"206":1}}],["opentelemetry",{"2":{"141":1,"837":1}}],["open",{"0":{"72":1,"472":1,"1089":1,"1126":1},"2":{"70":1,"72":1,"86":1,"220":2,"310":2,"416":1,"417":1,"419":1,"425":2,"468":1,"472":2,"476":1,"621":1,"636":1,"871":1,"1007":1,"1012":1,"1017":1,"1060":1,"1089":5,"1352":1,"1356":1,"1450":1,"1626":1,"1628":1}}],["operate",{"2":{"1539":1}}],["operation>",{"2":{"1414":1,"1418":2}}],["operationid",{"2":{"966":1}}],["operation",{"0":{"1382":1,"1387":1},"1":{"1383":1},"2":{"148":1,"273":1,"279":1,"294":1,"299":3,"475":2,"649":1,"966":1,"1008":1,"1363":1,"1369":2,"1370":1,"1377":2,"1378":2,"1379":3,"1380":1,"1382":2,"1383":1,"1384":1,"1387":1,"1389":1,"1390":1,"1392":1,"1394":1,"1397":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":2,"1411":1,"1413":1,"1414":1,"1415":2,"1418":1,"1448":2}}],["operationstatus",{"0":{"1385":1},"1":{"1386":1},"2":{"1377":1,"1378":1,"1379":3,"1385":1,"1387":2}}],["operations",{"2":{"53":1,"66":1,"152":1,"265":1,"268":1,"284":1,"415":1,"417":2,"462":1,"468":1,"475":1,"478":1,"560":1,"604":1,"719":1,"942":1,"955":1,"1081":1,"1099":1,"1100":1,"1233":1,"1335":1,"1340":1,"1350":1,"1359":1,"1361":4,"1362":1,"1363":1,"1365":3,"1366":1,"1367":1,"1375":1,"1376":1,"1409":2,"1412":1,"1413":1,"1417":1,"1422":2,"1425":1,"1454":1,"1536":1,"1623":1}}],["operator",{"0":{"408":1},"2":{"43":1,"408":2,"409":1,"719":1,"1296":1}}],["outboxstore>",{"2":{"1414":1}}],["outboxstore",{"0":{"1416":1},"1":{"1417":1,"1418":1},"2":{"1410":1,"1411":1,"1412":1,"1416":1}}],["outbox>",{"2":{"1364":1,"1367":1,"1377":1,"1378":1,"1379":1}}],["outbox",{"0":{"1409":1,"1412":1},"1":{"1410":1,"1413":1,"1414":1,"1415":1},"2":{"1359":1,"1361":3,"1362":1,"1364":2,"1365":4,"1367":2,"1369":1,"1375":1,"1376":1,"1377":10,"1378":9,"1379":10,"1381":1,"1382":1,"1389":1,"1404":1,"1406":1,"1408":1,"1409":3,"1410":5,"1411":3,"1412":2,"1416":1,"1420":1,"1422":1,"1423":1,"1424":1,"1434":1,"1439":1,"1453":1,"1454":1}}],["out2",{"2":{"1147":1}}],["outcome",{"2":{"502":1}}],["outlives",{"2":{"1077":1}}],["outlive",{"2":{"266":1}}],["outside",{"2":{"127":1,"365":1,"512":1,"851":1,"874":1,"1456":1}}],["out",{"2":{"51":2,"274":1,"299":1,"366":1,"397":1,"424":2,"442":2,"476":2,"477":2,"625":1,"832":1,"878":2,"884":1,"896":1,"929":1,"1011":1,"1033":1,"1081":1,"1083":3,"1147":2,"1158":1,"1177":1,"1218":2,"1363":1,"1422":1,"1593":18,"1613":3,"1621":1}}],["outputs",{"2":{"140":1}}],["output",{"0":{"599":1,"600":1,"1504":1},"2":{"30":1,"135":2,"201":2,"207":1,"211":1,"215":1,"223":1,"226":1,"227":2,"228":1,"308":1,"312":1,"486":1,"528":2,"529":1,"531":1,"534":1,"550":1,"552":1,"576":1,"624":1,"625":2,"654":1,"669":1,"690":2,"698":1,"817":1,"835":1,"836":1,"837":1,"838":1,"839":1,"845":1,"848":1,"859":1,"861":1,"862":1,"867":2,"1081":1,"1083":1,"1140":1,"1144":1,"1194":1,"1207":1,"1208":1,"1230":1,"1420":1,"1494":1,"1495":1,"1504":1,"1507":1,"1508":1,"1510":1,"1521":1,"1522":2,"1613":1,"1621":1}}],["others",{"2":{"422":1,"1488":1}}],["otherwise",{"2":{"378":1,"715":1,"716":1,"832":1,"833":1,"935":1,"980":1,"982":1,"1009":1,"1142":1,"1500":1,"1523":1,"1586":1,"1622":1}}],["other",{"2":{"44":1,"186":1,"343":1,"376":1,"379":1,"383":1,"393":1,"617":1,"693":1,"812":1,"855":2,"871":1,"1165":1,"1304":1,"1312":1,"1488":1,"1495":1,"1504":2,"1507":2,"1597":1}}],["o",{"0":{"852":1,"853":1,"1020":1,"1142":1,"1149":1},"1":{"853":1,"854":1,"1143":1,"1144":1},"2":{"34":1,"46":1,"95":1,"142":2,"152":1,"173":2,"252":1,"316":1,"325":1,"328":1,"376":1,"445":1,"462":1,"510":1,"836":1,"837":1,"847":1,"848":1,"867":1,"871":1,"883":1,"932":1,"933":3,"935":2,"942":1,"948":1,"998":1,"1001":1,"1003":1,"1007":1,"1012":1,"1014":1,"1020":1,"1032":2,"1051":2,"1059":2,"1065":1,"1066":1,"1142":1,"1143":3,"1144":1,"1146":3,"1147":1,"1149":3,"1150":1,"1151":1,"1153":3,"1154":2,"1155":1,"1156":1,"1157":1,"1216":1,"1217":1,"1256":1,"1288":3,"1294":3,"1295":1,"1296":2,"1297":1,"1298":4,"1299":4,"1300":6,"1305":1,"1362":1,"1427":1,"1578":1,"1638":1}}],["ok2",{"2":{"1150":1,"1530":1}}],["ok1",{"2":{"1150":1}}],["ok",{"0":{"709":1},"2":{"33":1,"89":3,"94":1,"114":1,"115":1,"123":1,"138":1,"156":1,"158":1,"160":1,"167":1,"178":1,"179":1,"182":1,"202":1,"208":1,"222":1,"228":1,"230":1,"235":1,"299":1,"309":1,"310":3,"494":2,"512":1,"700":1,"707":1,"709":2,"801":2,"802":1,"804":1,"814":1,"871":1,"904":2,"905":1,"907":1,"919":1,"923":1,"928":1,"955":1,"966":1,"989":1,"1081":2,"1083":1,"1084":2,"1088":1,"1089":1,"1092":1,"1093":1,"1094":3,"1095":1,"1112":2,"1130":1,"1143":1,"1149":1,"1153":2,"1154":1,"1179":1,"1180":1,"1205":1,"1231":2,"1252":1,"1285":1,"1298":1,"1309":1,"1310":2,"1311":3,"1312":3,"1313":3,"1314":3,"1369":2,"1377":2,"1378":2,"1379":2,"1380":4,"1491":1,"1521":1,"1528":1,"1529":2,"1530":2,"1531":1,"1532":1,"1533":1,"1586":1,"1587":1,"1600":1,"1603":1,"1609":1,"1610":1,"1639":1,"1641":1}}],["orchestrators",{"2":{"1366":2}}],["orchestrator",{"2":{"1361":1}}],["orchestration",{"2":{"376":1,"1618":1}}],["orm",{"0":{"560":1,"602":1,"1316":1,"1323":1,"1325":1,"1340":1,"1670":1},"1":{"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1324":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1},"2":{"560":1,"596":1,"603":4,"604":1,"606":1,"607":1,"608":1,"609":1,"611":6,"612":7,"1316":2,"1317":1,"1318":3,"1319":3,"1320":4,"1321":3,"1322":1,"1323":4,"1324":3,"1327":2,"1328":2,"1335":1,"1338":1,"1339":1,"1340":1,"1341":4,"1343":1,"1344":1,"1345":1,"1346":1,"1348":9,"1349":4,"1350":2,"1656":1}}],["origin",{"2":{"635":1,"644":1}}],["original",{"2":{"388":1,"391":1,"703":1,"708":1,"734":1,"787":1,"914":1,"1453":1}}],["oriented",{"2":{"463":1,"551":1,"752":1,"1552":1}}],["organizing",{"0":{"179":1},"2":{"871":1}}],["ordering",{"0":{"460":1,"855":1,"1504":1},"2":{"460":1,"855":4,"942":1,"1035":1,"1036":1,"1139":1,"1140":1,"1454":1,"1552":1,"1577":1}}],["orderedjson",{"0":{"1140":1,"1142":1},"1":{"1143":1,"1144":1},"2":{"1140":1,"1144":1,"1153":1}}],["ordered",{"0":{"1144":1},"2":{"449":1,"452":1,"460":1,"936":1,"1140":1,"1142":1,"1157":1}}],["order",{"0":{"270":1},"2":{"62":1,"66":1,"234":1,"276":2,"288":1,"355":1,"415":1,"466":1,"483":1,"569":1,"699":1,"824":1,"855":2,"954":4,"958":2,"1101":1,"1140":2,"1156":1,"1281":1,"1315":1,"1446":1,"1453":1,"1586":1}}],["or",{"0":{"1163":1,"1174":1,"1284":1,"1296":1,"1297":1,"1339":1,"1476":1,"1561":1},"1":{"1175":1,"1176":1,"1177":1},"2":{"25":1,"35":1,"42":1,"44":1,"106":1,"107":1,"110":1,"123":1,"132":1,"135":1,"148":1,"159":1,"164":1,"168":1,"175":2,"177":1,"178":1,"205":1,"213":1,"215":1,"217":1,"218":1,"221":1,"247":1,"270":1,"288":1,"290":1,"308":1,"310":1,"326":1,"328":1,"343":1,"366":1,"373":1,"375":1,"376":1,"381":1,"383":1,"385":1,"393":1,"395":2,"399":1,"408":1,"410":1,"415":1,"425":1,"427":1,"458":1,"466":2,"470":1,"471":1,"475":1,"478":1,"496":1,"503":2,"507":1,"568":2,"578":1,"615":1,"640":1,"642":2,"649":1,"654":1,"683":1,"698":1,"699":1,"723":1,"725":1,"779":1,"783":1,"787":1,"793":1,"816":1,"817":1,"825":1,"829":1,"833":1,"837":1,"838":4,"848":1,"855":1,"861":1,"862":2,"871":1,"872":1,"883":1,"902":2,"930":1,"933":1,"938":1,"943":1,"951":1,"955":1,"961":1,"965":1,"969":1,"1022":1,"1025":2,"1027":1,"1031":1,"1051":1,"1073":1,"1078":1,"1089":1,"1094":1,"1104":1,"1116":2,"1117":1,"1118":1,"1120":1,"1124":1,"1129":1,"1133":1,"1147":1,"1160":2,"1161":3,"1163":1,"1175":1,"1176":2,"1177":2,"1180":1,"1185":1,"1186":1,"1187":1,"1211":3,"1212":1,"1213":1,"1214":1,"1227":1,"1229":1,"1241":1,"1243":1,"1255":1,"1266":1,"1268":1,"1270":1,"1285":4,"1299":4,"1306":1,"1307":1,"1308":1,"1322":1,"1328":3,"1335":1,"1352":1,"1356":1,"1361":4,"1362":2,"1369":1,"1374":1,"1391":1,"1392":1,"1406":1,"1415":1,"1427":1,"1434":1,"1442":1,"1472":1,"1474":1,"1476":2,"1483":1,"1487":1,"1495":1,"1497":1,"1507":1,"1511":1,"1522":2,"1524":2,"1525":1,"1558":1,"1580":1,"1589":1,"1590":1,"1591":1,"1593":1,"1596":2,"1612":1,"1613":4,"1614":2,"1617":1,"1619":1,"1621":4,"1622":2,"1623":1,"1630":1,"1640":1,"1657":2}}],["overridden",{"2":{"1510":1}}],["overrides",{"2":{"844":1}}],["override",{"0":{"12":1,"832":1},"2":{"12":1,"548":1,"568":1,"582":1,"610":1,"668":1,"825":1,"844":1,"1112":3,"1215":2,"1347":1,"1380":1,"1488":1,"1514":1}}],["oversized",{"2":{"1063":1}}],["overloads",{"0":{"1183":1,"1201":1,"1263":1},"2":{"1039":1,"1040":1,"1102":1,"1201":1,"1263":1}}],["overload",{"0":{"777":1},"2":{"432":1,"777":1,"795":1}}],["overloaded",{"2":{"213":1,"853":1}}],["overflow",{"0":{"792":1},"2":{"299":2,"705":1,"706":1,"710":1,"729":1,"755":1,"759":1,"760":1,"766":1,"781":1,"783":1,"787":1,"792":2,"826":1,"1483":1}}],["overview",{"0":{"287":1,"297":1,"347":1,"551":1,"580":1,"736":1,"755":1,"770":1,"930":1,"1113":1,"1247":1,"1361":1,"1384":1,"1411":1,"1427":1,"1444":1},"1":{"552":1,"553":1,"581":1,"582":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"1114":1,"1115":1,"1248":1,"1249":1},"2":{"1492":1,"1611":1}}],["overhead",{"0":{"145":1},"2":{"53":1,"152":1,"359":1,"867":1,"951":1,"976":1,"983":1,"1065":1,"1209":1,"1220":1}}],["overwrites",{"2":{"375":1}}],["overwrite",{"2":{"44":1,"568":1,"570":1,"592":1,"598":1,"1551":1}}],["over",{"0":{"1206":1},"2":{"2":1,"39":1,"105":1,"221":1,"229":1,"329":1,"800":1,"887":1,"890":1,"902":1,"903":1,"1207":1,"1350":1,"1382":1,"1419":1,"1425":1,"1508":1,"1616":1}}],["on|off>",{"2":{"616":1,"617":1,"618":2}}],["online",{"2":{"502":1,"512":1,"1124":2,"1362":1,"1377":2}}],["only",{"0":{"185":1,"186":1,"1229":1,"1240":1},"2":{"60":1,"61":1,"89":1,"108":1,"122":1,"133":1,"195":1,"206":1,"209":2,"217":1,"218":1,"237":1,"260":1,"277":1,"331":1,"344":1,"359":1,"366":1,"375":1,"383":1,"393":1,"395":1,"397":1,"409":1,"432":1,"488":1,"490":1,"491":2,"498":1,"503":1,"507":1,"546":1,"592":1,"595":1,"596":1,"601":1,"616":1,"625":1,"649":2,"670":1,"672":1,"689":2,"709":1,"716":1,"718":1,"795":1,"816":1,"822":1,"845":1,"854":1,"925":1,"926":1,"953":1,"1020":1,"1027":1,"1041":1,"1044":1,"1052":1,"1068":1,"1101":1,"1120":1,"1126":1,"1127":1,"1136":1,"1137":1,"1240":1,"1266":1,"1304":1,"1308":1,"1311":2,"1312":2,"1323":1,"1408":1,"1417":1,"1427":1,"1442":1,"1444":2,"1449":1,"1450":1,"1457":1,"1474":2,"1489":1,"1510":1,"1511":1,"1532":2,"1534":1,"1536":1,"1543":1,"1554":1,"1566":1,"1567":1,"1570":1,"1572":1,"1578":1,"1579":1,"1589":1,"1595":1,"1596":1,"1616":1,"1617":1,"1618":1,"1622":1,"1638":1}}],["ongoing",{"2":{"420":1}}],["onto",{"2":{"347":1,"372":1,"376":1,"378":1,"385":1,"406":1,"428":1,"447":1,"456":1,"457":1,"461":1,"484":2,"943":1}}],["onnx",{"2":{"205":1,"206":1}}],["ones",{"2":{"382":1,"507":1}}],["one",{"0":{"1627":1},"2":{"98":1,"100":1,"200":1,"229":1,"266":1,"274":1,"290":1,"317":1,"328":1,"343":1,"344":1,"366":2,"375":1,"420":1,"425":1,"470":1,"471":1,"478":2,"564":1,"678":1,"783":1,"793":1,"825":1,"836":1,"853":1,"855":1,"936":1,"964":1,"1004":1,"1054":1,"1109":1,"1336":1,"1361":1,"1364":1,"1408":1,"1424":1,"1441":1,"1456":1,"1521":1,"1526":1,"1551":1,"1626":1,"1653":1}}],["once",{"0":{"843":1},"1":{"844":1,"845":1},"2":{"84":1,"117":1,"133":1,"210":1,"231":1,"266":1,"272":1,"379":1,"397":1,"479":1,"584":1,"834":1,"836":1,"844":1,"858":1,"870":1,"915":1,"917":1,"953":3,"1233":1,"1242":1,"1506":1,"1575":1,"1597":1,"1598":1}}],["on",{"0":{"72":1,"73":1,"74":1,"269":1,"272":1,"376":1,"812":1,"1123":1,"1155":1},"2":{"0":1,"4":1,"17":1,"37":1,"70":2,"72":1,"73":1,"75":1,"82":1,"85":1,"86":2,"88":1,"98":1,"108":1,"120":1,"125":1,"133":1,"136":1,"140":1,"161":1,"167":1,"182":1,"185":1,"197":1,"209":1,"216":1,"218":1,"235":1,"251":2,"255":1,"263":1,"265":5,"269":2,"272":2,"273":1,"294":1,"297":1,"308":1,"309":1,"310":2,"317":1,"321":1,"325":1,"326":1,"336":1,"339":2,"340":1,"341":1,"342":1,"345":1,"347":1,"353":1,"355":1,"361":1,"363":1,"364":3,"365":2,"366":4,"368":1,"369":3,"372":1,"373":1,"378":1,"379":1,"383":2,"384":2,"392":1,"393":1,"406":2,"417":1,"420":2,"426":1,"428":1,"433":1,"438":2,"442":3,"444":1,"445":1,"447":1,"449":3,"453":2,"456":1,"459":1,"461":1,"462":2,"469":1,"470":1,"471":1,"478":1,"479":1,"491":1,"492":1,"497":1,"499":1,"503":1,"505":1,"511":1,"514":1,"532":1,"549":1,"550":1,"585":1,"616":1,"617":2,"618":1,"620":1,"645":1,"651":1,"671":1,"689":2,"690":2,"692":1,"698":1,"712":1,"723":1,"733":1,"736":2,"738":1,"744":1,"764":1,"779":1,"787":1,"796":1,"814":1,"825":1,"826":1,"839":2,"859":1,"867":1,"874":1,"880":1,"915":1,"919":1,"925":1,"932":2,"933":1,"936":2,"938":1,"942":1,"943":1,"954":6,"957":3,"1001":3,"1008":1,"1012":1,"1022":1,"1031":1,"1036":1,"1037":2,"1043":1,"1044":1,"1048":2,"1049":1,"1062":2,"1068":2,"1073":1,"1089":2,"1099":1,"1103":2,"1114":1,"1115":1,"1118":2,"1120":1,"1129":1,"1136":1,"1137":1,"1158":1,"1160":1,"1180":1,"1187":1,"1188":2,"1199":2,"1230":1,"1231":2,"1233":1,"1245":1,"1248":2,"1249":1,"1252":1,"1255":1,"1266":2,"1308":1,"1309":1,"1310":1,"1314":1,"1317":1,"1335":1,"1351":1,"1353":1,"1354":1,"1355":1,"1357":1,"1358":1,"1361":1,"1369":1,"1376":1,"1377":1,"1378":1,"1379":1,"1392":1,"1393":1,"1417":1,"1420":2,"1421":2,"1445":2,"1446":2,"1449":1,"1454":1,"1455":4,"1458":1,"1477":1,"1482":1,"1489":1,"1493":1,"1494":1,"1506":1,"1512":1,"1521":1,"1523":3,"1525":1,"1539":1,"1566":1,"1611":1,"1620":1,"1626":2,"1627":1,"1628":2,"1635":1,"1638":1,"1658":1,"1663":1,"1672":1}}],["often",{"2":{"274":1,"368":1,"1223":1}}],["offer",{"0":{"1656":1}}],["offers",{"2":{"1245":1}}],["official",{"2":{"1376":1}}],["offsets",{"2":{"1442":1}}],["offset",{"2":{"708":1,"1445":1,"1446":1,"1449":1,"1450":3,"1452":1}}],["offline",{"0":{"513":1,"961":1,"968":1,"1407":1,"1423":1,"1440":1,"1456":1,"1671":1},"1":{"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1},"2":{"499":2,"502":3,"503":4,"511":1,"512":1,"513":3,"514":1,"515":1,"558":1,"577":1,"641":1,"679":1,"681":1,"685":1,"931":1,"939":1,"961":2,"1359":1,"1361":1,"1362":2,"1363":3,"1366":3,"1375":1,"1377":1,"1378":1,"1379":2,"1384":1,"1409":1,"1419":1,"1425":1,"1473":1,"1649":1,"1656":1,"1657":1}}],["offloading",{"2":{"1067":1,"1669":1}}],["offloaded",{"2":{"1064":1}}],["offload",{"2":{"322":1,"330":1,"461":1}}],["off",{"2":{"84":1,"103":1,"137":1,"618":1,"619":1,"620":1,"733":1,"739":1,"836":1,"839":1,"844":1,"847":1,"936":1,"1058":1,"1511":1}}],["of",{"0":{"137":1,"231":1,"369":1,"999":1,"1149":1,"1179":1,"1180":1,"1462":1},"2":{"0":2,"37":2,"95":1,"119":1,"127":1,"141":1,"148":1,"152":1,"206":1,"232":1,"234":1,"269":1,"277":1,"278":1,"281":1,"318":1,"328":1,"330":1,"342":1,"343":1,"345":1,"347":2,"357":1,"361":1,"363":2,"365":1,"368":1,"376":1,"377":1,"395":2,"417":2,"435":1,"440":1,"449":1,"458":1,"467":1,"470":1,"483":1,"488":1,"498":1,"510":1,"512":1,"523":1,"534":1,"542":1,"564":1,"577":1,"578":1,"632":1,"637":1,"678":1,"685":1,"708":2,"731":1,"741":1,"764":1,"767":1,"779":1,"781":1,"819":1,"832":1,"871":1,"874":1,"878":1,"880":1,"891":1,"893":1,"896":1,"912":1,"919":1,"926":1,"929":1,"950":1,"955":1,"982":1,"983":1,"985":1,"1001":1,"1035":1,"1038":1,"1067":1,"1083":1,"1109":1,"1114":1,"1115":1,"1126":1,"1136":1,"1146":1,"1149":1,"1158":2,"1160":2,"1177":1,"1188":1,"1199":1,"1245":1,"1268":1,"1317":1,"1323":1,"1361":3,"1362":1,"1363":1,"1365":1,"1375":1,"1390":1,"1395":1,"1396":1,"1407":1,"1411":1,"1420":1,"1427":1,"1430":1,"1444":1,"1449":1,"1519":1,"1535":1,"1539":1,"1553":1,"1593":1,"1597":1,"1611":1,"1615":2,"1618":1,"1622":2,"1624":1,"1670":1}}],["smoke",{"0":{"1377":1}}],["smallest",{"2":{"1377":1}}],["smaller",{"2":{"1035":1,"1036":1}}],["small",{"0":{"149":1},"2":{"13":1,"89":1,"216":1,"239":1,"281":1,"347":1,"359":1,"363":1,"364":1,"383":1,"384":1,"386":1,"412":1,"428":1,"447":1,"499":1,"502":1,"509":1,"653":1,"662":1,"712":1,"715":1,"884":1,"958":1,"999":1,"1037":1,"1052":1,"1096":1,"1100":1,"1104":1,"1221":1,"1244":1,"1247":1,"1268":1,"1315":1,"1317":1,"1323":1,"1376":1,"1474":1,"1488":1,"1489":1,"1536":1,"1580":1,"1617":1,"1627":1,"1630":1}}],["sf",{"2":{"1127":1}}],["switch",{"2":{"862":2,"1129":1,"1593":1}}],["swagger",{"0":{"961":1,"968":1},"1":{"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1},"2":{"931":1,"939":3,"961":1,"962":5,"968":4}}],["swapping",{"2":{"819":1}}],["swallows",{"2":{"390":1}}],["swallowed",{"2":{"386":1,"392":1,"393":1}}],["ssz",{"2":{"1465":1,"1556":1}}],["ssh",{"2":{"1122":1,"1129":1}}],["ss",{"2":{"839":4,"858":1,"1514":1}}],["sse",{"2":{"235":1,"239":1}}],["s2",{"2":{"732":1}}],["s1",{"2":{"732":1}}],["sqldelete",{"2":{"1334":1}}],["sqlupdate",{"2":{"1333":1}}],["sqlselect",{"2":{"1332":1}}],["sqlinsert",{"2":{"1331":1}}],["sqliteconnection",{"2":{"1114":1}}],["sqliteconfig",{"2":{"1104":1}}],["sqlite3",{"2":{"1114":1}}],["sqlite",{"0":{"1114":1},"2":{"604":1,"1097":3,"1104":1,"1115":1,"1116":1}}],["sql",{"2":{"609":1,"1058":1,"1063":1,"1099":1,"1100":2,"1102":1,"1112":3,"1116":1,"1317":1,"1319":3,"1321":1,"1322":1,"1323":1,"1336":1,"1337":4,"1346":1,"1350":1}}],["snapshots",{"2":{"1116":1,"1140":1}}],["snapshot",{"2":{"609":2,"612":1,"874":1,"878":1,"884":1,"896":1,"942":1,"965":2,"1096":1,"1116":1,"1346":2,"1349":1}}],["skills",{"2":{"1143":1,"1214":5,"1273":1}}],["skip",{"2":{"458":1,"459":1,"568":1,"698":2,"970":1}}],["skipped",{"2":{"452":1,"458":1,"459":1,"532":1}}],["skeleton",{"2":{"581":1}}],["sketch",{"2":{"477":1}}],["sdk",{"2":{"216":1}}],["spdlog",{"2":{"1508":1,"1515":1}}],["specs",{"2":{"984":1}}],["spec",{"2":{"966":2}}],["specify",{"2":{"692":1}}],["specific",{"2":{"239":1,"291":1,"478":1,"528":1,"649":1,"650":1,"690":1,"701":1,"1104":1}}],["specialize",{"2":{"1328":1}}],["specialized",{"2":{"304":1,"1329":1,"1638":1}}],["specialization",{"2":{"397":1,"1320":1,"1328":1}}],["special",{"2":{"186":1,"1006":1,"1017":1,"1026":1}}],["splits",{"2":{"915":1,"933":1}}],["split",{"0":{"1544":1,"1545":1,"1546":1},"1":{"1545":1,"1546":1,"1547":1},"2":{"428":1,"1323":1,"1490":1,"1491":1,"1536":1,"1545":2,"1546":3,"1552":1,"1637":1}}],["space",{"2":{"1200":1,"1539":2,"1550":1}}],["spaces",{"2":{"1192":1,"1193":1,"1227":1,"1474":1}}],["spam",{"0":{"856":1},"1":{"857":1,"858":1},"2":{"870":1}}],["span",{"2":{"86":2,"310":2,"416":2,"418":3,"424":2,"425":2,"427":1,"468":2,"476":2,"477":1,"1469":1}}],["span>",{"2":{"86":1,"310":1}}],["spawns",{"2":{"935":1,"1020":1,"1362":1,"1364":1}}],["spawning",{"2":{"317":1,"425":1}}],["spawn",{"0":{"385":1},"1":{"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1},"2":{"86":2,"310":2,"317":1,"322":1,"327":2,"330":1,"368":1,"385":1,"386":2,"387":1,"391":1,"392":2,"393":1,"424":3,"425":3,"457":2,"459":2,"476":2,"477":1,"497":2}}],["sortable",{"2":{"1577":1}}],["sorted",{"2":{"507":2}}],["softadastra",{"2":{"1251":1,"1423":1}}],["sock",{"2":{"476":5,"477":4}}],["socket>",{"2":{"474":1}}],["sockets",{"2":{"256":1,"260":1,"266":1,"270":1,"1003":1}}],["socket",{"0":{"468":1,"474":1,"476":1,"1028":1},"1":{"469":1,"470":1,"471":1,"472":1},"2":{"251":1,"252":1,"253":1,"272":1,"294":1,"295":1,"318":1,"412":2,"416":1,"417":1,"419":1,"463":1,"468":3,"469":1,"472":1,"474":2,"476":1,"477":1,"932":2,"936":2,"1001":1,"1008":2,"1019":3,"1028":2,"1054":1,"1057":1,"1060":2,"1062":1}}],["solve",{"0":{"365":1,"1223":1}}],["solves",{"0":{"252":1}}],["source",{"0":{"278":1,"459":1},"2":{"273":1,"274":1,"277":1,"278":1,"281":1,"282":2,"368":2,"411":1,"418":1,"426":1,"443":1,"446":1,"459":1,"475":1,"498":1,"539":1,"950":1,"1375":1,"1536":1}}],["soon",{"2":{"256":1}}],["so",{"2":{"180":1,"253":1,"256":1,"261":1,"287":1,"308":1,"319":1,"368":2,"372":1,"378":1,"391":1,"400":1,"409":1,"452":1,"461":1,"484":1,"498":1,"712":1,"717":2,"724":1,"746":1,"933":1,"936":1,"939":1,"964":1,"968":1,"969":1,"1036":1,"1109":1,"1240":1,"1241":1,"1305":1,"1396":1,"1434":1,"1495":1,"1504":2,"1522":1,"1552":1,"1561":1,"1591":1,"1592":1,"1595":1,"1597":1}}],["somewhere",{"2":{"393":1}}],["something",{"2":{"187":1,"283":1,"312":1,"350":1,"392":1,"406":1}}],["sometimes",{"2":{"168":1,"369":1}}],["some",{"2":{"148":1,"365":1,"859":1,"965":1,"1305":1,"1525":1}}],["sla",{"0":{"1663":1}}],["slack",{"2":{"1662":1}}],["slo",{"2":{"1052":1}}],["slot",{"2":{"483":1,"1230":2,"1291":2}}],["slower",{"2":{"1455":1}}],["slowloris",{"2":{"1057":1}}],["slow",{"2":{"213":1,"219":1,"237":1,"496":2,"853":1,"936":1}}],["slug",{"2":{"174":3,"1592":2}}],["sleeps",{"2":{"883":1,"1361":1}}],["sleep",{"0":{"454":2},"1":{"455":2,"456":2,"457":2},"2":{"84":2,"322":1,"324":2,"340":1,"447":1,"455":1,"457":2,"458":1,"459":6,"1038":1,"1073":2,"1363":6,"1366":6,"1379":2}}],["src",{"2":{"160":1,"282":3,"459":3,"475":3,"584":3,"586":2,"668":1}}],["say",{"2":{"1227":1}}],["says",{"2":{"366":1,"378":1}}],["salts",{"2":{"1084":1,"1095":1}}],["saturated",{"2":{"942":1,"1033":1,"1043":2,"1059":1}}],["satisfy",{"2":{"757":1,"773":1,"1375":1}}],["san",{"2":{"672":1}}],["sanitizers",{"2":{"596":1}}],["saved1",{"2":{"1378":3}}],["saved",{"2":{"1377":3,"1379":6}}],["save",{"2":{"193":1,"1533":2}}],["sampling",{"2":{"142":1,"862":1}}],["same",{"2":{"107":1,"209":1,"222":1,"272":1,"278":1,"330":1,"366":1,"397":1,"460":1,"483":1,"507":1,"540":1,"550":1,"617":1,"715":1,"732":1,"855":1,"932":1,"933":1,"962":2,"1033":1,"1035":1,"1089":2,"1095":1,"1165":1,"1199":1,"1220":1,"1336":1,"1354":1,"1358":1,"1482":1,"1570":1,"1614":1,"1637":1}}],["safer",{"2":{"1208":1}}],["safeguards",{"0":{"1063":1}}],["safely",{"0":{"1185":1,"1197":1},"1":{"1198":1,"1199":1,"1200":1,"1201":1},"2":{"277":1,"343":1,"378":1,"417":1,"655":1,"847":1,"976":1,"1028":1,"1037":1,"1056":1,"1077":1,"1188":1,"1207":1,"1244":2,"1439":1,"1613":1}}],["safety",{"0":{"266":1,"360":1,"378":1,"587":1,"849":1,"1064":1,"1077":1,"1374":1,"1504":1,"1525":1,"1575":1},"1":{"850":1,"851":1},"2":{"276":1,"310":1,"581":1,"588":1,"931":1,"1188":1,"1418":1,"1442":1,"1449":1}}],["safe",{"0":{"765":1,"822":1,"1129":1,"1199":1,"1231":1,"1260":1,"1566":1},"2":{"3":1,"13":1,"63":1,"118":1,"137":1,"214":1,"218":1,"230":1,"266":2,"271":1,"273":1,"306":1,"347":1,"360":1,"369":1,"378":1,"390":1,"448":1,"492":1,"509":1,"510":1,"541":1,"651":1,"736":1,"746":1,"752":1,"767":1,"780":1,"822":1,"825":1,"829":1,"836":3,"870":2,"881":1,"884":1,"912":1,"920":1,"927":1,"936":1,"951":1,"953":1,"958":1,"983":1,"1065":1,"1066":1,"1067":1,"1071":1,"1096":1,"1109":1,"1124":1,"1158":1,"1187":1,"1208":1,"1216":1,"1220":1,"1243":1,"1245":1,"1249":1,"1252":1,"1255":1,"1256":1,"1264":1,"1265":3,"1384":1,"1407":1,"1425":1,"1474":1,"1489":1,"1493":1,"1494":1,"1566":2,"1572":1,"1579":2,"1621":1}}],["score",{"2":{"1608":4}}],["scope",{"2":{"1321":1,"1336":1}}],["scoped",{"0":{"952":1},"2":{"950":1,"952":1,"960":1,"1516":1}}],["scientific",{"2":{"758":1}}],["screen",{"2":{"659":1,"1507":1}}],["script",{"0":{"667":1,"672":1,"675":1},"2":{"546":2,"547":3,"548":2,"549":1,"550":1,"668":1,"670":1,"671":2,"676":1,"678":1,"1058":1}}],["scripts",{"2":{"545":1}}],["sccache",{"2":{"526":1,"528":1,"530":1}}],["scheme",{"2":{"1497":1,"1498":2,"1505":2}}],["schemas",{"2":{"1116":1,"1597":1,"1598":1,"1599":1}}],["schema",{"0":{"1116":1,"1603":1},"2":{"215":1,"560":1,"602":1,"603":1,"604":1,"609":5,"612":3,"694":1,"696":1,"981":1,"1096":2,"1112":1,"1116":5,"1243":1,"1268":1,"1323":1,"1340":2,"1341":1,"1346":5,"1349":2,"1350":1,"1490":1,"1580":1,"1581":1,"1583":1,"1586":2,"1587":4,"1591":1,"1592":1,"1597":1,"1599":1,"1603":6,"1604":3,"1605":1,"1610":1}}],["scheduling",{"0":{"352":1,"405":1,"1044":1},"1":{"353":1,"406":1},"2":{"329":1,"345":2,"443":1,"461":2,"883":1,"902":1,"931":1,"945":1,"972":1,"973":1,"977":2,"985":1,"1033":1,"1073":1,"1404":1,"1411":1,"1413":1,"1416":1,"1422":1,"1427":1,"1448":1}}],["scheduled",{"2":{"395":1,"449":1,"933":1,"943":1,"1406":1,"1430":1,"1662":1}}],["schedule",{"0":{"450":1},"1":{"451":1,"452":1,"453":1},"2":{"339":1,"347":1,"352":1,"353":1,"447":1,"457":1,"497":1,"938":1,"942":1,"943":1,"1031":1}}],["schedules",{"2":{"316":1,"385":1,"397":1,"424":1,"456":1,"1004":1,"1008":1,"1011":1,"1068":1,"1415":1}}],["schedulers",{"2":{"1668":1}}],["scheduler",{"0":{"300":1,"334":1,"346":1,"406":1,"484":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1},"2":{"252":4,"253":2,"255":1,"264":1,"265":4,"269":2,"272":1,"294":1,"297":1,"331":1,"334":4,"335":1,"337":1,"339":1,"344":2,"345":1,"346":1,"347":2,"348":3,"351":1,"352":1,"353":4,"361":1,"362":2,"363":1,"364":1,"365":1,"366":1,"369":1,"372":1,"376":1,"378":4,"384":1,"385":1,"388":1,"390":1,"392":1,"393":1,"394":3,"399":1,"406":7,"411":2,"422":1,"428":2,"435":1,"438":1,"442":3,"445":1,"446":2,"447":2,"449":2,"453":1,"456":2,"457":2,"461":2,"462":1,"476":1,"480":2,"484":3,"487":1,"488":1,"492":1,"494":1,"495":1,"496":1,"497":1,"498":1,"1033":1,"1038":1,"1039":1,"1044":2,"1078":1}}],["sched",{"2":{"328":2,"348":3,"351":1,"352":1,"353":2,"357":2,"397":1,"406":5,"483":2,"486":1,"487":1,"488":1,"494":2,"495":2,"496":2}}],["scale",{"2":{"1655":1}}],["scales",{"2":{"179":1}}],["scaling",{"0":{"1043":1,"1637":1},"2":{"890":1,"901":1,"902":1,"960":1}}],["scalar",{"2":{"746":1,"1339":1}}],["scalable",{"2":{"81":1,"1649":1}}],["scenarios",{"2":{"81":1}}],["shuts",{"2":{"1199":1}}],["shutdown",{"0":{"264":1,"381":1,"859":1,"1023":1,"1046":1},"2":{"257":1,"261":1,"264":1,"274":1,"326":1,"343":1,"365":1,"366":1,"369":1,"370":1,"377":1,"379":1,"479":1,"879":1,"889":1,"897":1,"1012":1,"1028":1,"1050":1,"1052":1,"1062":1,"1364":1,"1515":1,"1669":1}}],["shutting",{"2":{"257":1,"877":1}}],["sh",{"2":{"242":1}}],["shipping",{"2":{"225":1}}],["ship",{"2":{"206":1,"320":1}}],["sharing",{"2":{"912":1}}],["share",{"0":{"188":1},"2":{"460":1,"569":1,"818":1,"929":1,"949":1}}],["shared",{"2":{"108":1,"273":1,"276":1,"278":2,"492":2,"512":1,"821":2,"838":1,"950":2,"951":4,"1001":1,"1006":1,"1010":2,"1022":1,"1037":1,"1064":1,"1071":2,"1073":1,"1270":4,"1364":3,"1367":3,"1377":4,"1378":4,"1379":4,"1414":1,"1524":1,"1627":1}}],["shas",{"2":{"645":1}}],["sha256",{"2":{"559":1,"625":1,"628":1,"696":1,"1081":1,"1083":1}}],["sha",{"0":{"1083":1},"2":{"518":1,"521":1,"635":1,"636":1,"637":1,"641":1,"1079":1,"1083":1,"1095":1}}],["shape",{"0":{"1619":1},"2":{"75":1,"235":1,"368":1,"1164":1,"1613":1,"1621":1,"1626":1}}],["show",{"2":{"528":2,"546":1,"561":1,"568":1,"582":1,"608":1,"625":2,"659":3,"689":1,"698":1,"871":1,"1345":1,"1497":1,"1498":2,"1505":2,"1506":1,"1593":1}}],["showcase",{"2":{"164":1,"165":1,"321":1,"1096":1,"1458":1}}],["shown",{"2":{"164":1}}],["showing",{"2":{"103":1}}],["shows",{"2":{"0":2,"37":2,"235":1,"308":1,"476":1,"512":1,"575":2,"1107":1,"1112":1,"1118":1,"1378":1,"1626":1,"1632":1}}],["shortcut",{"2":{"546":1}}],["short",{"2":{"81":1,"220":1,"369":1,"453":2,"462":1,"509":1,"546":1,"548":1,"671":1,"710":1,"1052":1,"1078":1,"1109":1,"1157":1,"1321":1,"1653":1}}],["should",{"0":{"265":1},"2":{"2":1,"12":1,"39":1,"66":1,"81":1,"119":1,"133":1,"149":1,"161":1,"186":1,"217":1,"230":1,"238":1,"255":1,"263":1,"266":1,"272":1,"274":1,"312":1,"325":1,"344":1,"366":2,"378":1,"417":2,"432":1,"443":1,"475":1,"478":2,"507":1,"518":1,"681":1,"767":1,"780":1,"834":1,"952":1,"970":1,"1051":1,"1078":2,"1164":1,"1180":1,"1241":1,"1309":1,"1365":1,"1379":2,"1381":1,"1430":1,"1602":1,"1613":1,"1617":1,"1622":1}}],["s",{"0":{"1657":1},"2":{"49":1,"85":4,"86":2,"108":2,"326":1,"395":1,"424":5,"425":7,"442":2,"463":1,"480":1,"491":1,"710":1,"795":1,"796":1,"861":1,"886":2,"1123":1,"1192":2,"1193":1,"1194":1,"1195":1,"1196":1,"1262":1,"1285":1,"1408":1,"1482":1,"1539":5,"1541":3,"1542":2,"1543":1,"1545":1,"1546":2,"1566":1,"1587":3,"1593":3,"1627":2}}],["suffix",{"0":{"1542":1},"1":{"1543":1},"2":{"1536":1}}],["sudden",{"2":{"1455":1}}],["sudo",{"2":{"245":1,"1123":1,"1124":4,"1126":1,"1127":2,"1128":1,"1129":5}}],["suspicious",{"2":{"936":1,"1058":1,"1063":1}}],["suspension",{"0":{"398":1},"1":{"399":1,"400":1},"2":{"329":1}}],["suspend",{"2":{"386":1,"388":1,"390":3,"391":1,"397":3,"399":2,"400":2,"406":1,"408":1}}],["suspends",{"2":{"324":1,"353":1,"375":1,"456":1}}],["suspended",{"2":{"310":1,"390":1,"395":1,"397":1}}],["suppose",{"2":{"1182":1}}],["supporting",{"0":{"370":1},"2":{"874":1}}],["support",{"0":{"1660":1,"1661":1},"1":{"1661":1,"1662":1,"1663":1,"1664":1,"1665":1},"2":{"218":1,"319":1,"320":1,"366":1,"559":1,"678":1,"1067":1,"1134":1,"1244":1,"1263":1,"1305":1,"1416":1,"1507":1,"1616":2,"1618":1,"1659":1,"1660":1,"1662":2,"1663":1,"1665":1}}],["supports",{"2":{"54":1,"171":1,"180":1,"290":1,"344":1,"447":1,"604":1,"649":1,"667":1,"715":1,"718":1,"747":1,"843":1,"919":1,"926":1,"937":1,"941":1,"1102":1,"1110":1,"1308":1,"1422":1,"1626":1}}],["supported",{"0":{"737":1,"747":1,"758":1,"926":1,"1224":1},"1":{"738":1,"739":1,"1225":1,"1226":1,"1227":1},"2":{"42":1,"302":2,"312":1,"383":1,"408":1,"558":1,"562":1,"658":1,"829":1,"844":1,"926":1,"955":1,"1181":1,"1227":1,"1339":2,"1502":1,"1534":1}}],["suppressed",{"2":{"858":3}}],["such",{"2":{"838":1,"895":1,"951":1}}],["succeeded",{"2":{"823":1}}],["succeeds",{"2":{"469":1,"797":1,"1452":1,"1506":1}}],["successfully",{"2":{"776":1,"1106":1,"1386":1,"1406":1}}],["success",{"2":{"214":1,"458":1,"512":1,"721":1,"727":1,"736":1,"746":1,"1008":1,"1081":1,"1231":1,"1361":1,"1415":1,"1528":1,"1531":1,"1533":1,"1613":1}}],["suitable",{"2":{"710":1,"751":1,"958":1,"1381":1,"1425":1,"1610":1}}],["suite",{"2":{"690":1}}],["suggestion",{"0":{"1553":1}}],["suggests",{"2":{"366":1}}],["suggested",{"0":{"271":1},"2":{"1050":1}}],["surprise",{"2":{"540":1}}],["surprises",{"2":{"273":1,"752":1,"755":1,"1552":1}}],["survive",{"2":{"511":1}}],["sure",{"2":{"379":1,"1032":1,"1077":1,"1133":1}}],["surface",{"0":{"258":1,"718":1},"1":{"259":1,"260":1,"261":1,"719":1,"720":1},"2":{"0":1,"37":1,"873":1,"887":1}}],["subtract",{"2":{"1570":1}}],["subtle",{"2":{"269":1}}],["subcommands",{"0":{"581":1,"640":1}}],["subcommand>",{"2":{"556":1,"560":1,"580":1,"639":1}}],["subsequent",{"2":{"382":1}}],["subsystem",{"2":{"303":1,"343":1,"861":1}}],["submission",{"0":{"431":1,"438":1},"2":{"301":1,"431":1}}],["submitted",{"2":{"428":1}}],["submit",{"0":{"880":1},"1":{"881":1},"2":{"84":1,"325":1,"339":1,"431":2,"433":1,"437":1,"438":1,"442":1,"443":2,"444":1,"453":1,"461":1,"874":1,"876":1,"880":2,"881":2}}],["subject",{"2":{"188":2}}],["summary",{"0":{"363":1,"384":1,"542":1,"752":1,"870":1,"960":1,"985":1,"1067":1,"1157":1,"1187":1,"1208":1,"1244":1,"1265":1,"1307":1,"1350":1,"1579":1},"2":{"858":1,"964":1,"974":1,"981":1}}],["summaries",{"2":{"233":1}}],["sum",{"2":{"84":3,"325":3,"1613":3,"1621":1}}],["sizing",{"2":{"900":1,"1104":2}}],["sizes",{"0":{"1087":1}}],["sized",{"2":{"1032":1}}],["size",{"0":{"230":1,"440":1,"1168":1},"2":{"43":1,"86":2,"108":2,"177":1,"230":2,"265":1,"310":6,"357":1,"416":2,"424":3,"425":2,"435":1,"440":2,"467":1,"468":1,"476":1,"477":1,"478":1,"488":1,"505":1,"703":1,"707":2,"772":1,"777":2,"807":1,"892":2,"898":2,"899":2,"910":1,"936":1,"996":1,"1043":2,"1053":1,"1056":2,"1058":1,"1116":1,"1207":1,"1212":2,"1291":1,"1294":1,"1319":2,"1337":2,"1363":2,"1364":1,"1366":1,"1367":1,"1380":2,"1414":1,"1417":1,"1418":2,"1584":2,"1585":2,"1593":1,"1627":2}}],["sink",{"2":{"867":1,"1522":1}}],["sinks",{"2":{"848":1}}],["since",{"2":{"515":1,"1309":1,"1376":1,"1377":1,"1378":1,"1379":1,"1439":1,"1462":1,"1467":1,"1472":1,"1570":1}}],["singleton",{"0":{"828":1},"2":{"828":1,"864":1,"1508":1,"1509":1}}],["single",{"0":{"186":1,"476":1,"1372":1,"1545":1},"2":{"80":1,"288":1,"308":1,"329":1,"346":1,"347":1,"360":1,"363":1,"365":1,"366":3,"375":1,"383":1,"394":1,"397":1,"445":1,"509":1,"510":1,"511":1,"545":1,"616":1,"620":1,"667":1,"715":1,"734":1,"828":1,"844":1,"850":1,"932":1,"936":2,"950":1,"983":1,"1053":1,"1118":1,"1196":1,"1208":1,"1308":1,"1329":1,"1374":1,"1600":1,"1611":1,"1613":1,"1616":1,"1621":1,"1627":1}}],["situation",{"2":{"1257":1}}],["sites",{"2":{"1127":3,"1305":1}}],["site",{"2":{"458":1,"1127":1,"1147":1,"1672":1}}],["sits",{"0":{"253":1}}],["side",{"0":{"1452":1},"2":{"218":1,"370":1,"955":1,"1393":1,"1425":1,"1441":1}}],["silent",{"2":{"214":1,"529":1,"751":1,"755":1,"767":1,"847":1,"868":1}}],["sigkill",{"2":{"859":1}}],["signed",{"0":{"789":1},"2":{"1478":1,"1591":1}}],["sign",{"0":{"1093":1},"2":{"625":1,"627":2,"1093":1}}],["signing",{"0":{"627":1},"2":{"625":1,"627":2}}],["signs",{"2":{"624":1}}],["signal",{"0":{"364":1,"372":1,"376":1,"381":1,"822":1},"1":{"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1},"2":{"85":4,"86":3,"253":1,"274":1,"310":2,"317":1,"322":1,"326":1,"331":1,"336":1,"341":1,"345":2,"364":5,"365":3,"366":5,"368":4,"369":1,"372":1,"373":1,"374":2,"375":3,"376":1,"378":2,"379":2,"381":1,"383":2,"384":3,"822":2,"862":1,"868":1,"1022":1,"1032":1,"1361":1,"1669":1}}],["signals",{"0":{"85":1,"326":1,"341":1,"382":1},"2":{"85":1,"86":1,"253":1,"310":1,"316":1,"322":1,"326":1,"336":1,"341":2,"362":1,"364":2,"365":2,"366":2,"368":2,"369":1,"378":1,"379":1,"382":1,"383":1,"384":2,"858":1}}],["signaturealg",{"2":{"1092":1,"1093":1,"1094":1}}],["signature",{"0":{"451":1,"455":1,"532":1,"699":1,"740":1},"2":{"56":1,"64":1,"74":1,"181":1,"182":1,"406":1,"526":1,"528":2,"532":1,"567":1,"568":2,"570":2,"571":1,"572":1,"628":1,"698":3,"699":1,"701":3,"702":1,"817":1,"1092":1,"1093":1,"1094":2,"1613":1}}],["signatures",{"0":{"815":1,"926":1,"1090":1},"1":{"1091":1,"1092":1,"1093":1,"1094":1},"2":{"1":1,"38":1,"696":1,"1079":1,"1090":1,"1095":1}}],["sigs",{"2":{"368":5,"369":4,"375":1,"381":1,"382":1}}],["sig",{"0":{"373":1,"374":1},"2":{"85":5,"86":4,"310":4,"326":5,"341":2,"368":2,"369":1,"375":2,"381":1,"382":1,"698":1,"1093":2,"1094":1}}],["sigterm",{"0":{"85":1},"2":{"85":2,"86":1,"308":1,"310":2,"317":1,"326":2,"369":1,"373":1,"822":1}}],["sigint",{"0":{"85":1},"2":{"85":2,"86":1,"308":1,"310":1,"317":1,"326":2,"365":1,"368":3,"369":1,"373":1,"822":1}}],["similar",{"2":{"946":1,"954":1,"1149":1}}],["simply",{"2":{"206":1}}],["simplicity",{"2":{"134":1,"154":1,"209":1,"1419":1}}],["simplest",{"2":{"1632":1}}],["simpler",{"2":{"1147":1}}],["simple",{"0":{"41":1,"1129":1,"1181":1,"1182":1,"1210":1,"1266":1,"1268":1,"1306":1,"1600":1},"1":{"42":1,"43":1,"44":1,"1182":1,"1183":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1267":1,"1268":1,"1269":1,"1270":1,"1271":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1301":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1,"1601":1},"2":{"40":2,"41":1,"42":1,"43":1,"44":1,"53":1,"89":1,"101":1,"104":1,"108":1,"126":1,"146":1,"196":1,"200":1,"226":1,"265":1,"276":1,"392":1,"415":1,"425":1,"445":1,"491":1,"509":1,"542":1,"871":1,"873":1,"886":1,"927":1,"931":1,"943":1,"946":1,"960":1,"1043":1,"1102":1,"1118":1,"1158":1,"1181":1,"1182":3,"1187":2,"1208":1,"1209":3,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1220":1,"1245":1,"1265":1,"1266":1,"1267":1,"1268":1,"1304":2,"1306":1,"1307":3,"1408":1,"1419":1,"1515":1,"1579":1,"1580":1,"1589":1,"1612":1,"1613":1,"1614":1,"1615":1,"1626":1,"1637":1}}],["simulates",{"2":{"1379":1}}],["simulated",{"2":{"115":1,"139":1,"201":1,"202":1,"227":1,"228":1,"229":1,"1380":1}}],["simulate",{"0":{"1379":1},"2":{"79":1}}],["symmetry",{"2":{"678":1}}],["sysroot",{"2":{"528":2}}],["systemctl",{"2":{"1124":3,"1127":1,"1129":3,"1135":1}}],["systemd",{"0":{"1124":1},"1":{"1125":1},"2":{"1118":1,"1124":1}}],["systems",{"0":{"1670":1},"2":{"81":1,"119":1,"140":1,"143":1,"145":1,"203":1,"274":1,"499":1,"515":1,"958":1,"1090":1,"1143":1,"1381":1,"1425":1,"1473":2,"1610":2,"1648":1,"1649":2,"1655":1,"1657":1,"1673":1}}],["system",{"0":{"1569":1},"2":{"3":1,"54":1,"66":1,"86":4,"91":1,"118":1,"220":1,"287":1,"291":1,"296":1,"297":1,"305":1,"361":1,"368":1,"417":2,"420":3,"432":1,"443":2,"459":1,"469":1,"470":1,"471":1,"475":1,"502":1,"535":1,"542":1,"556":1,"579":1,"688":1,"837":1,"949":1,"960":1,"1124":1,"1268":1,"1309":1,"1407":1,"1441":1,"1558":2,"1569":1,"1577":1,"1599":1,"1606":1,"1628":1,"1651":1,"1656":1}}],["syntax",{"0":{"1224":1,"1240":1,"1241":1},"1":{"1225":1,"1226":1,"1227":1},"2":{"662":1,"871":1,"1156":1,"1230":1,"1231":1,"1233":1,"1241":1}}],["synthetic",{"2":{"153":1}}],["sync=0",{"2":{"1524":1}}],["sync=1",{"2":{"1524":1}}],["syncworker",{"0":{"1365":1},"1":{"1366":1,"1367":1},"2":{"1360":1,"1361":2,"1362":1,"1365":1,"1380":1}}],["syncengine",{"0":{"1362":1},"1":{"1363":1,"1364":1},"2":{"1360":1,"1361":2,"1362":1,"1372":2,"1376":1,"1377":3,"1378":3,"1379":3,"1382":1}}],["synced",{"2":{"633":1,"644":1,"681":1}}],["synchronize",{"2":{"1524":1}}],["synchronized",{"2":{"1442":1}}],["synchronization",{"0":{"1524":1},"2":{"874":1,"897":1,"1359":1,"1508":1}}],["synchronous",{"2":{"504":1,"854":1}}],["synchronously",{"2":{"35":1,"131":1}}],["sync",{"0":{"519":1,"682":1,"1359":1,"1376":1},"1":{"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1},"2":{"518":1,"519":1,"523":1,"530":1,"633":1,"641":1,"642":1,"643":2,"644":1,"645":1,"681":1,"682":1,"684":1,"1359":2,"1360":3,"1362":1,"1364":1,"1367":1,"1370":1,"1372":3,"1373":1,"1376":1,"1377":6,"1378":6,"1379":6,"1380":4,"1382":1,"1383":2,"1407":1,"1409":1,"1410":4,"1411":1,"1413":1,"1425":1,"1426":2,"1442":1,"1443":5,"1454":1,"1457":1,"1524":1}}],["st",{"2":{"491":2,"1107":7,"1108":3,"1318":5,"1319":3,"1337":3}}],["stuck",{"2":{"1379":2}}],["stub",{"2":{"383":1}}],["studio",{"2":{"247":1}}],["steadyclock",{"0":{"1472":1},"2":{"1472":2,"1473":1}}],["steady",{"2":{"448":2,"1377":1,"1378":1,"1379":1,"1557":1,"1561":1}}],["stealing",{"2":{"361":1}}],["step2",{"2":{"495":2}}],["step1",{"2":{"495":2}}],["steps",{"0":{"205":1,"320":1},"2":{"284":1,"599":1,"600":1,"603":1,"607":2,"612":1,"1341":1,"1344":2,"1349":1}}],["step",{"0":{"129":2,"642":1,"1620":1,"1621":1,"1622":1},"1":{"130":2,"131":2,"132":2},"2":{"215":1,"542":1,"1372":1}}],["still",{"2":{"270":1,"491":1,"816":1,"844":1,"848":1,"926":1,"933":1,"1026":1,"1099":1,"1109":1}}],["style",{"0":{"95":1,"172":1,"173":1,"211":1,"1606":1},"2":{"164":1,"196":1,"208":1,"235":1,"307":1,"477":1,"478":1,"515":1,"586":1,"721":1,"723":1,"724":1,"890":1,"926":2,"929":1,"1057":1,"1187":1,"1243":1,"1423":1,"1490":1,"1599":1,"1610":1}}],["styles",{"0":{"431":1},"2":{"54":1,"171":1,"180":1,"815":1,"1110":1,"1245":1,"1308":1}}],["stoi",{"2":{"833":1}}],["stod",{"0":{"766":1},"2":{"755":1,"766":1}}],["stof",{"2":{"755":1}}],["stop=true",{"2":{"1073":1,"1077":1}}],["stop=false",{"2":{"1073":1}}],["stopnow",{"2":{"1071":2,"1075":1,"1076":1,"1077":1}}],["stopperiodic",{"2":{"1044":1,"1046":1}}],["stopped",{"2":{"85":1,"86":1,"270":1,"284":1,"300":2,"1046":1}}],["stopping",{"2":{"85":2,"86":1,"1046":1}}],["stop",{"0":{"84":1,"257":1,"261":1,"270":1,"356":1,"377":1,"439":1,"822":1,"1012":1,"1013":1,"1027":2,"1076":1},"2":{"84":2,"85":2,"86":2,"91":1,"219":1,"220":1,"236":1,"257":2,"261":2,"264":2,"266":1,"271":2,"274":3,"308":1,"310":4,"316":1,"323":1,"326":1,"329":1,"330":1,"331":2,"335":2,"337":1,"343":2,"355":2,"356":2,"364":2,"366":2,"374":1,"379":2,"381":1,"384":2,"436":1,"439":1,"449":1,"616":1,"689":1,"692":1,"813":1,"822":1,"935":2,"1000":1,"1008":1,"1012":1,"1013":4,"1018":2,"1023":3,"1027":4,"1032":2,"1044":1,"1046":2,"1071":1,"1075":1,"1129":1,"1308":1,"1313":1,"1353":1,"1357":1,"1362":1,"1364":3,"1373":1,"1374":2}}],["stops",{"2":{"66":1,"264":1,"271":1,"316":1,"381":1,"420":1,"449":1,"811":1,"935":1,"943":1,"953":1,"1012":2,"1013":1,"1018":1,"1039":1,"1046":1,"1071":2,"1073":1,"1075":1,"1076":1,"1315":1}}],["storms",{"2":{"1440":1}}],["store>",{"2":{"569":1}}],["stores",{"0":{"508":1},"1":{"509":1,"510":1,"511":1},"2":{"366":1,"375":1,"400":1,"408":1,"504":1,"831":1,"887":1,"915":1,"964":1,"1006":1,"1017":1,"1270":1,"1482":1,"1597":1}}],["stored",{"2":{"350":1,"359":1,"375":1,"460":1,"491":1,"492":1,"505":1,"521":1,"937":1,"952":1,"975":2,"1031":1,"1035":1,"1268":2,"1271":1,"1272":1,"1277":1,"1328":1,"1596":1}}],["store",{"0":{"569":1,"1075":1,"1314":1,"1564":1},"2":{"168":1,"188":1,"265":1,"491":1,"505":1,"509":1,"510":1,"511":1,"512":2,"514":1,"515":2,"558":1,"565":1,"567":2,"568":2,"569":1,"572":1,"802":1,"905":1,"1112":1,"1207":1,"1314":2,"1370":1,"1376":1,"1377":4,"1378":3,"1379":5,"1381":1,"1414":1,"1473":1,"1558":1}}],["storing",{"2":{"63":1,"181":1,"273":1,"344":1,"723":1}}],["storage",{"0":{"63":1},"2":{"41":1,"44":1,"140":1,"151":1,"168":1,"188":1,"504":1,"912":1,"918":1,"960":1,"1196":1,"1210":1,"1220":1,"1294":1,"1307":1}}],["stars",{"2":{"1147":2}}],["started",{"2":{"839":2,"1512":1,"1517":1}}],["starting",{"2":{"319":1}}],["start",{"0":{"165":1,"399":1,"406":1,"563":1,"654":1,"809":1,"839":1,"1008":1,"1462":1,"1491":1,"1587":1,"1638":1},"1":{"1639":1,"1640":1,"1641":1,"1642":1,"1643":1,"1644":1,"1645":1,"1646":1,"1647":1},"2":{"109":1,"219":1,"235":2,"265":1,"310":1,"316":1,"366":1,"368":1,"373":1,"395":1,"397":1,"399":2,"406":5,"409":1,"432":1,"442":1,"443":1,"492":2,"498":1,"616":1,"935":1,"948":1,"1018":1,"1020":1,"1039":1,"1075":1,"1119":1,"1129":1,"1353":1,"1357":1,"1362":1,"1364":3,"1373":1,"1374":2,"1472":2,"1506":1,"1570":1}}],["starts",{"0":{"1132":1},"2":{"17":1,"120":2,"213":1,"234":1,"259":1,"271":1,"310":1,"323":1,"390":1,"399":1,"420":1,"432":1,"449":1,"483":2,"615":1,"811":1,"812":1,"935":1,"936":1,"1007":5,"1008":1,"1057":1,"1073":1,"1361":1,"1542":2,"1543":2,"1637":1}}],["startups",{"2":{"1657":1}}],["startup",{"2":{"13":1,"210":1,"211":1,"263":1,"514":1,"825":1,"834":2,"836":1,"844":1,"861":1,"1052":1,"1494":1,"1504":1,"1506":2}}],["stalled",{"2":{"936":1,"1057":1}}],["stale",{"2":{"499":1,"503":6,"512":2,"513":4}}],["stand",{"0":{"886":1},"2":{"886":1}}],["standardized",{"2":{"960":1,"1061":1}}],["standardize",{"2":{"949":1}}],["standardizes",{"2":{"717":1,"956":1}}],["standard",{"0":{"956":1},"2":{"273":1,"279":1,"297":1,"715":1,"842":1,"891":1,"978":1,"1049":1,"1554":1,"1591":1,"1635":2}}],["standalone",{"0":{"70":1,"1628":1},"2":{"1626":1}}],["stability",{"2":{"844":1}}],["stable",{"0":{"843":1},"1":{"844":1,"845":1},"2":{"297":1,"306":1,"412":1,"422":1,"427":1,"460":1,"507":1,"703":1,"710":2,"712":1,"834":1,"836":1,"839":1,"869":1,"870":1,"919":1,"942":1,"966":1,"1140":1,"1144":1,"1156":1,"1305":1,"1554":1}}],["stay",{"2":{"325":1}}],["stays",{"2":{"154":1,"196":1,"200":1,"209":1,"236":1,"256":1,"271":1,"933":1,"1317":1,"1322":1,"1504":1,"1521":1,"1637":1,"1647":1}}],["stacking",{"2":{"954":1}}],["stacks",{"2":{"872":1}}],["stack",{"2":{"36":1,"159":1,"874":1,"1457":1}}],["stats",{"2":{"615":1,"616":4,"1313":5,"1353":1,"1357":1}}],["static=on",{"2":{"528":1,"597":1}}],["static",{"0":{"777":1,"819":1,"924":1,"1133":1},"2":{"84":1,"85":1,"86":2,"108":5,"179":1,"310":4,"337":1,"410":1,"424":2,"425":3,"442":1,"453":1,"457":2,"459":2,"476":1,"477":1,"512":1,"528":1,"530":2,"596":1,"597":1,"731":1,"776":1,"815":1,"819":5,"912":1,"919":1,"921":1,"1107":2,"1108":1,"1120":1,"1251":1,"1309":1,"1320":8,"1328":3,"1353":1,"1357":1,"1377":1,"1378":2,"1379":2,"1380":1,"1561":1,"1593":2,"1603":1,"1604":1,"1627":5}}],["status",{"0":{"31":1,"96":1,"178":1,"608":1,"801":1,"904":1,"928":1,"991":1,"1345":1,"1398":1,"1646":1},"2":{"31":2,"35":1,"89":2,"95":1,"96":2,"108":1,"109":2,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"123":1,"131":1,"139":1,"156":1,"157":1,"158":1,"159":2,"172":3,"173":1,"174":1,"178":3,"182":1,"195":2,"197":1,"224":1,"227":1,"228":1,"229":1,"230":1,"279":1,"501":1,"512":2,"528":2,"560":1,"603":1,"608":1,"612":2,"800":1,"801":5,"808":2,"814":1,"871":5,"903":1,"904":5,"911":2,"912":3,"921":5,"922":1,"923":2,"926":2,"927":1,"928":4,"929":1,"948":1,"955":1,"956":2,"991":2,"992":1,"998":1,"999":1,"1124":1,"1126":1,"1129":1,"1135":1,"1143":1,"1153":2,"1154":1,"1205":1,"1308":1,"1310":1,"1311":1,"1312":1,"1313":2,"1314":2,"1341":1,"1345":1,"1349":2,"1352":1,"1353":1,"1356":1,"1357":1,"1384":1,"1386":1,"1387":1,"1401":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":2,"1495":1,"1497":1,"1498":1,"1505":1,"1506":1,"1521":1,"1627":3,"1634":1,"1646":1,"1647":1}}],["stateless",{"2":{"1439":1}}],["statements",{"2":{"1107":1,"1317":1}}],["statement",{"0":{"1100":1},"2":{"1096":1,"1099":1,"1100":2,"1102":1}}],["states",{"2":{"861":1}}],["stateful",{"2":{"661":1}}],["state",{"0":{"63":1,"276":1,"952":1,"1531":1},"2":{"2":1,"13":1,"39":1,"53":1,"63":5,"66":1,"125":1,"181":3,"188":3,"218":1,"220":1,"273":2,"277":1,"278":3,"378":3,"417":1,"491":1,"492":1,"499":1,"513":1,"535":1,"577":1,"578":1,"662":1,"838":1,"878":1,"896":1,"912":1,"914":3,"918":2,"950":1,"952":3,"958":1,"1064":1,"1071":3,"1073":1,"1077":1,"1207":1,"1220":1,"1314":5,"1361":1,"1365":1,"1381":1,"1384":1,"1398":1,"1407":1,"1408":1,"1417":1,"1423":1,"1441":1,"1442":1,"1444":1,"1447":1,"1453":2,"1454":2,"1456":2,"1534":1}}],["stdexcept>",{"2":{"404":1}}],["stderr",{"2":{"137":1,"139":1,"836":1,"842":1,"853":1,"855":3,"867":1,"1495":1,"1503":1}}],["stdout",{"2":{"137":1,"139":1,"677":1,"836":1,"842":1,"853":1,"855":3,"867":1,"1524":1}}],["std",{"0":{"137":1,"376":1,"486":1,"716":1,"766":1,"1167":1,"1168":1,"1233":1,"1251":1,"1252":1,"1339":1},"2":{"11":2,"12":2,"34":1,"42":1,"70":2,"84":5,"85":4,"86":20,"89":1,"108":11,"113":1,"114":2,"130":1,"156":1,"157":1,"158":2,"174":1,"175":1,"177":3,"181":1,"182":5,"185":1,"192":1,"195":1,"201":2,"207":2,"208":2,"227":2,"230":1,"265":2,"273":1,"282":1,"283":1,"288":2,"289":3,"291":1,"294":1,"297":1,"298":1,"303":3,"304":2,"310":17,"324":1,"327":1,"334":1,"337":1,"348":1,"353":1,"357":1,"359":1,"360":2,"366":1,"397":1,"399":2,"404":2,"406":2,"410":2,"415":2,"416":6,"417":2,"418":5,"419":1,"420":3,"421":1,"424":10,"425":9,"427":2,"431":1,"432":1,"435":2,"437":1,"438":1,"442":4,"443":2,"448":1,"453":1,"457":2,"459":3,"460":1,"466":2,"467":1,"468":5,"469":1,"470":1,"471":1,"475":1,"476":6,"477":5,"486":3,"487":4,"488":6,"492":1,"494":2,"495":3,"496":3,"507":4,"512":6,"703":2,"705":1,"707":4,"711":5,"715":2,"716":3,"717":3,"722":1,"727":1,"732":3,"740":1,"743":2,"747":1,"755":2,"756":1,"757":1,"760":1,"762":1,"763":1,"764":1,"765":2,"766":1,"771":1,"772":2,"773":1,"776":3,"777":2,"785":2,"786":6,"789":2,"790":1,"791":2,"792":1,"794":1,"795":2,"796":2,"805":2,"807":1,"817":2,"821":1,"829":1,"832":1,"871":4,"876":3,"880":2,"881":1,"882":2,"884":3,"892":2,"895":1,"898":1,"899":3,"908":2,"910":1,"918":3,"926":2,"927":2,"951":2,"952":1,"992":1,"993":3,"994":2,"996":1,"1006":1,"1009":1,"1011":1,"1022":1,"1033":1,"1035":1,"1036":1,"1042":2,"1071":2,"1075":1,"1081":1,"1083":3,"1084":1,"1088":6,"1089":1,"1102":5,"1106":2,"1107":7,"1108":2,"1112":6,"1117":1,"1142":2,"1145":1,"1147":4,"1151":3,"1153":2,"1154":1,"1155":1,"1162":2,"1167":1,"1170":1,"1173":2,"1182":1,"1185":1,"1186":2,"1190":1,"1192":2,"1201":2,"1202":3,"1205":1,"1211":3,"1212":2,"1213":1,"1214":1,"1215":1,"1217":1,"1218":1,"1219":3,"1223":3,"1229":3,"1230":1,"1233":1,"1235":2,"1236":2,"1238":1,"1241":2,"1242":1,"1248":1,"1249":1,"1252":3,"1254":1,"1255":3,"1256":2,"1261":2,"1262":2,"1270":6,"1271":1,"1277":1,"1279":1,"1280":1,"1284":1,"1285":2,"1294":1,"1299":1,"1305":1,"1309":5,"1310":1,"1311":1,"1314":3,"1318":3,"1319":5,"1320":20,"1321":3,"1322":1,"1328":12,"1330":1,"1332":2,"1333":1,"1334":1,"1337":2,"1339":5,"1363":5,"1364":5,"1366":4,"1367":5,"1369":1,"1372":1,"1377":7,"1378":12,"1379":12,"1380":14,"1385":1,"1387":10,"1404":2,"1405":1,"1413":1,"1414":13,"1417":2,"1418":20,"1420":1,"1428":6,"1436":1,"1437":1,"1438":1,"1445":5,"1447":7,"1449":2,"1450":4,"1460":1,"1461":1,"1462":1,"1464":1,"1465":1,"1467":1,"1468":1,"1471":1,"1472":1,"1474":1,"1476":1,"1478":1,"1479":1,"1480":1,"1482":2,"1487":1,"1491":1,"1526":1,"1529":1,"1535":1,"1539":9,"1541":5,"1542":6,"1543":3,"1545":5,"1546":6,"1547":7,"1549":4,"1550":3,"1551":7,"1552":1,"1557":1,"1558":1,"1561":1,"1562":1,"1563":2,"1564":2,"1566":1,"1567":1,"1574":3,"1575":1,"1580":3,"1581":1,"1583":5,"1584":9,"1585":7,"1586":5,"1587":5,"1592":1,"1593":5,"1597":2,"1600":2,"1602":1,"1603":5,"1604":4,"1606":8,"1608":1,"1609":1,"1612":6,"1613":4,"1614":3,"1615":2,"1620":2,"1622":1,"1627":11,"1628":2,"1634":3,"1644":1,"1645":1}}],["strtod",{"2":{"1480":1}}],["str",{"2":{"1102":1,"1328":1,"1585":1}}],["strategies",{"2":{"1671":1}}],["strategy",{"0":{"209":1,"1651":1},"2":{"217":1,"427":1,"1198":1,"1652":1,"1661":1,"1670":1}}],["strand",{"2":{"936":2,"1061":1,"1062":1,"1064":1}}],["structs",{"2":{"1339":1}}],["struct",{"0":{"1603":1},"2":{"771":1,"884":1,"1314":2,"1320":3,"1328":1,"1380":1,"1445":1,"1449":1,"1599":1,"1603":1,"1604":1}}],["structured",{"0":{"141":1,"869":1,"1520":1},"1":{"1521":1,"1522":1},"2":{"135":1,"140":1,"141":2,"150":1,"215":1,"224":1,"330":1,"370":1,"553":1,"615":1,"703":1,"741":1,"817":1,"835":1,"837":1,"838":1,"862":1,"869":1,"949":1,"957":1,"958":1,"960":1,"1233":1,"1266":1,"1268":1,"1307":1,"1508":1,"1599":1,"1602":1,"1606":1,"1612":1,"1620":1,"1666":1,"1669":1}}],["structures",{"0":{"1214":1},"2":{"52":1,"658":1,"662":1}}],["structure",{"0":{"1":1,"38":1,"116":1,"556":1,"586":1,"1387":1,"1428":1,"1633":1},"2":{"111":1,"196":1,"203":1,"323":1,"327":1,"564":1,"587":1,"601":1,"696":1,"1243":1,"1306":1,"1354":1,"1358":1,"1444":1,"1632":1}}],["streams",{"2":{"223":1,"270":1}}],["streamed",{"2":{"219":1,"238":1}}],["stream",{"0":{"416":1},"1":{"417":1,"418":1},"2":{"215":1,"218":1,"219":2,"234":1,"235":2,"237":2,"238":1,"251":1,"272":1,"295":1,"412":2,"416":3,"420":1,"421":1,"424":1,"842":1,"847":1,"855":2}}],["streaming",{"0":{"219":1,"232":1,"233":1},"1":{"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"2":{"205":1,"213":1,"214":1,"218":1,"219":2,"222":1,"223":1,"224":1,"225":1,"232":2,"233":1,"234":1,"235":2,"237":1,"239":3,"1268":1}}],["stream>>",{"2":{"419":1}}],["stream>",{"2":{"86":1,"310":1,"421":1,"425":1}}],["stronger",{"2":{"1078":1,"1420":1,"1449":1,"1455":1}}],["strong",{"2":{"53":1,"526":1,"532":1}}],["strongly",{"2":{"3":1,"366":1,"746":1,"752":1,"770":1,"794":1,"799":1,"918":1,"952":1,"958":1}}],["stripping",{"2":{"983":1}}],["stripped",{"2":{"978":1}}],["stringify",{"2":{"1216":1,"1593":1}}],["stringification",{"2":{"780":1}}],["string>",{"2":{"108":2,"113":1,"114":1,"156":1,"177":1,"201":1,"207":1,"208":1,"227":1,"230":1,"310":1,"424":1,"442":1,"494":1,"507":1,"512":1,"805":1,"807":1,"908":1,"910":1,"992":1,"993":1,"994":1,"996":1,"1107":1,"1112":1,"1170":2,"1185":1,"1186":1,"1219":1,"1223":2,"1229":1,"1235":1,"1236":1,"1298":1,"1309":1,"1310":1,"1311":1,"1312":1,"1313":1,"1314":1,"1320":1,"1380":1,"1545":1,"1546":1,"1547":1,"1551":1,"1563":1,"1583":1,"1586":1,"1587":1,"1593":1,"1603":2,"1604":2,"1627":2,"1628":1}}],["strings",{"0":{"1248":1,"1250":1,"1279":1,"1556":1,"1567":1},"1":{"1251":1,"1252":1},"2":{"52":1,"710":2,"725":1,"728":1,"732":1,"770":1,"1219":1,"1339":1,"1549":1}}],["string",{"0":{"6":1,"710":1,"732":1,"794":1,"1167":1,"1191":1,"1251":1,"1252":1,"1259":1,"1536":2,"1546":1,"1551":1,"1562":1,"1595":1,"1602":1},"1":{"795":1,"796":1,"797":1,"798":1,"799":1,"1192":1,"1193":1,"1194":1,"1195":1,"1196":1,"1537":2,"1538":2,"1539":2,"1540":2,"1541":2,"1542":2,"1543":2,"1544":2,"1545":2,"1546":2,"1547":2,"1548":2,"1549":2,"1550":2,"1551":2,"1552":2,"1553":2},"2":{"5":1,"6":2,"10":1,"11":2,"25":1,"28":1,"34":1,"42":1,"43":2,"44":3,"49":1,"50":1,"70":1,"74":1,"89":1,"108":12,"113":1,"114":2,"130":1,"148":1,"156":1,"157":1,"158":2,"174":1,"175":1,"177":3,"182":3,"201":2,"207":2,"208":2,"227":2,"230":1,"288":1,"289":1,"310":7,"415":2,"424":2,"442":2,"466":2,"476":1,"478":1,"494":1,"501":1,"507":2,"512":2,"616":1,"703":1,"706":1,"707":2,"710":3,"711":2,"717":1,"727":1,"729":1,"731":1,"732":7,"740":1,"746":1,"747":1,"756":1,"762":1,"763":1,"764":1,"770":1,"771":2,"772":1,"776":1,"777":1,"779":1,"781":1,"785":1,"786":4,"794":2,"795":3,"796":2,"797":2,"798":1,"805":2,"807":1,"829":1,"832":1,"833":1,"871":4,"908":2,"910":1,"913":2,"914":2,"915":1,"918":1,"921":1,"928":2,"951":1,"983":1,"992":1,"993":3,"994":2,"996":1,"1083":2,"1088":2,"1089":3,"1093":1,"1102":2,"1107":1,"1112":1,"1116":2,"1142":1,"1147":2,"1151":4,"1153":1,"1155":1,"1167":1,"1181":2,"1186":1,"1188":1,"1192":1,"1193":1,"1194":1,"1195":1,"1196":1,"1201":1,"1206":1,"1211":2,"1212":3,"1213":2,"1214":4,"1216":1,"1233":1,"1260":1,"1263":1,"1265":2,"1268":1,"1270":2,"1272":1,"1273":1,"1279":1,"1283":1,"1284":1,"1285":2,"1287":1,"1288":2,"1290":1,"1298":1,"1299":2,"1300":1,"1301":1,"1309":3,"1310":1,"1311":1,"1314":2,"1319":2,"1320":4,"1328":3,"1330":1,"1337":1,"1339":3,"1369":1,"1380":5,"1387":6,"1404":1,"1413":1,"1414":5,"1418":8,"1447":2,"1460":1,"1461":1,"1464":1,"1465":1,"1474":1,"1476":2,"1478":1,"1482":1,"1483":1,"1487":1,"1490":3,"1491":2,"1492":2,"1529":1,"1536":3,"1537":1,"1539":10,"1541":5,"1542":7,"1543":4,"1545":3,"1546":4,"1547":5,"1549":5,"1550":4,"1551":7,"1553":1,"1554":1,"1563":1,"1574":1,"1576":1,"1578":1,"1580":3,"1583":2,"1584":1,"1585":5,"1586":1,"1587":1,"1591":1,"1592":1,"1593":5,"1598":1,"1600":1,"1602":3,"1603":2,"1604":2,"1606":4,"1609":1,"1612":2,"1614":1,"1619":1,"1621":1,"1627":12,"1628":1,"1634":3,"1644":1,"1645":1}}],["strictness",{"0":{"1160":1},"1":{"1161":1,"1162":1,"1163":1,"1164":1},"2":{"1160":1}}],["strictly",{"0":{"1186":1},"2":{"210":1,"901":1,"1446":1}}],["strict",{"0":{"759":1,"1179":1,"1180":1},"2":{"2":1,"39":1,"579":2,"698":1,"699":1,"701":1,"713":1,"724":1,"753":1,"755":1,"766":1,"767":1,"768":1,"778":1,"781":1,"793":1,"855":1,"936":1,"1058":1,"1164":1,"1187":1,"1243":1,"1264":1,"1265":2}}],["sep",{"2":{"1545":1,"1546":2,"1547":1}}],["separating",{"2":{"941":1}}],["separation",{"2":{"252":1,"526":1,"888":1,"983":1,"1051":1,"1059":1}}],["separator",{"0":{"1546":1},"2":{"675":1,"1480":1}}],["separated",{"2":{"1551":1}}],["separately",{"2":{"1026":1}}],["separate",{"2":{"200":1,"203":1,"793":1,"1068":1,"1078":1,"1319":1}}],["separates",{"2":{"135":1,"973":1}}],["semantic",{"2":{"1327":1}}],["semantics",{"0":{"840":1},"1":{"841":1,"842":1},"2":{"294":1,"359":1,"383":1,"417":1,"499":1,"836":1,"855":1,"953":1,"978":1,"1078":1,"1099":1,"1199":1}}],["sequentially",{"2":{"1449":1}}],["sequential",{"2":{"1444":1,"1450":1}}],["sequencing",{"2":{"370":1}}],["sequences",{"2":{"879":1,"1550":2,"1575":1}}],["sequence",{"2":{"234":1,"264":1,"460":1,"942":1,"1033":1,"1036":1}}],["seq",{"2":{"1033":1,"1035":2,"1036":1}}],["segment",{"2":{"972":2,"975":1,"976":1,"982":1,"1242":1}}],["segments",{"2":{"924":1,"937":1,"975":1,"976":1,"1545":1,"1546":1,"1552":1}}],["segfault",{"2":{"839":2}}],["severe",{"2":{"854":1}}],["several",{"2":{"529":1}}],["sealed",{"2":{"1088":2,"1089":1}}],["seal",{"0":{"1088":1},"2":{"1088":2}}],["seamlessly",{"2":{"303":1,"693":1}}],["searches",{"2":{"645":1,"827":1}}],["searched",{"2":{"522":1}}],["searching",{"2":{"642":1,"681":1}}],["search",{"0":{"679":1},"1":{"680":1,"681":1,"682":1,"683":1,"684":1,"685":1},"2":{"165":1,"175":1,"538":1,"539":1,"558":2,"643":2,"646":1,"679":1,"680":1,"681":1,"683":4,"684":1,"685":2,"871":2,"993":3,"1634":1,"1645":2}}],["selects",{"2":{"723":1}}],["selected",{"2":{"507":1}}],["select",{"0":{"1108":1},"2":{"215":1,"1058":1,"1100":1,"1101":1,"1107":1,"1108":1,"1337":1,"1522":1}}],["selection",{"0":{"209":1,"1487":1}}],["self",{"2":{"98":1,"160":1,"390":2,"391":1,"406":1,"1373":1}}],["seeded",{"2":{"1575":1}}],["seek",{"2":{"1450":1}}],["sees",{"2":{"318":1}}],["see",{"2":{"197":1,"312":1,"366":1,"478":1,"1045":1,"1097":1,"1309":1,"1507":1,"1522":1,"1620":1,"1659":1,"1664":1}}],["sessions",{"2":{"91":1,"108":1,"210":1,"514":1,"1004":1,"1028":1,"1064":1,"1626":1,"1627":1,"1672":1}}],["session",{"0":{"936":1,"1019":1,"1053":1},"1":{"1054":1,"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1,"1065":1,"1066":1,"1067":1},"2":{"70":4,"72":2,"73":1,"74":1,"661":1,"826":1,"873":1,"931":1,"932":8,"935":1,"936":1,"938":1,"1001":4,"1004":2,"1019":4,"1031":1,"1051":1,"1053":1,"1054":2,"1056":1,"1058":1,"1059":1,"1060":1,"1062":1,"1063":1,"1064":1,"1066":1,"1067":1,"1627":1,"1628":4}}],["serving",{"2":{"199":1,"205":1,"921":1,"1626":1}}],["services",{"0":{"336":1,"338":1,"951":1,"1655":1},"1":{"339":1,"340":1,"341":1,"342":1,"1656":1,"1657":1,"1658":1,"1659":1},"2":{"253":1,"271":1,"331":2,"343":1,"344":1,"362":1,"393":1,"394":1,"411":1,"445":1,"949":1,"950":2,"951":4,"952":1,"958":1,"1129":1,"1649":1}}],["service",{"0":{"251":1,"1124":1,"1132":1,"1659":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"1125":1},"2":{"179":1,"206":1,"217":1,"251":3,"252":2,"253":1,"255":1,"256":1,"259":1,"264":3,"265":1,"271":2,"272":1,"336":2,"342":2,"345":1,"447":1,"645":1,"804":1,"907":1,"989":1,"1059":1,"1119":1,"1124":2,"1628":1,"1639":1,"1641":1}}],["served",{"2":{"931":1,"939":1,"962":2,"968":1,"1036":1}}],["serves",{"2":{"819":1,"924":1,"961":1,"1627":1}}],["serve",{"2":{"40":1,"80":1,"106":1,"108":1,"140":1,"512":2,"1627":1}}],["serverprettylogs",{"2":{"1494":1,"1496":1,"1497":1,"1498":1}}],["serverreadyinfo",{"2":{"1494":1,"1497":2,"1498":1,"1505":1,"1506":2}}],["serverless",{"2":{"641":1}}],["servers",{"2":{"327":1,"425":2,"479":1,"549":1,"850":1,"871":1}}],["server",{"0":{"68":1,"86":1,"115":1,"308":1,"317":1,"327":1,"425":1,"831":1,"987":1,"1000":2,"1051":1,"1075":1,"1122":1,"1123":1,"1494":1,"1506":1,"1628":1,"1639":1},"1":{"69":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"1001":2,"1002":2,"1003":2,"1004":2,"1005":2,"1006":2,"1007":2,"1008":2,"1009":2,"1010":2,"1011":2,"1012":2,"1013":2,"1014":2,"1015":2,"1016":2,"1017":2,"1018":2,"1019":2,"1020":2,"1021":2,"1022":2,"1023":2,"1024":2,"1025":2,"1026":2,"1027":2,"1028":2,"1029":2,"1030":2,"1031":2,"1032":2,"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1},"2":{"1":1,"6":1,"7":1,"11":2,"12":1,"17":1,"38":1,"67":2,"68":1,"70":1,"86":4,"92":1,"93":1,"100":1,"107":1,"115":1,"120":1,"139":1,"159":1,"179":2,"218":2,"232":1,"233":1,"234":3,"308":1,"310":3,"312":2,"317":1,"320":1,"425":5,"476":3,"546":2,"547":5,"548":2,"671":2,"811":2,"812":2,"821":1,"823":1,"825":1,"826":1,"829":2,"830":1,"831":1,"839":2,"857":1,"871":1,"874":1,"888":1,"912":2,"913":1,"919":1,"931":1,"933":1,"967":1,"971":5,"1000":3,"1001":3,"1007":1,"1022":4,"1023":1,"1056":1,"1118":2,"1119":1,"1120":1,"1122":2,"1127":1,"1129":2,"1351":1,"1353":1,"1355":1,"1357":1,"1372":1,"1490":1,"1494":1,"1495":2,"1497":1,"1498":1,"1501":1,"1504":1,"1506":3,"1512":1,"1626":1,"1628":4,"1639":1}}],["serialization",{"2":{"145":1,"150":1,"204":1,"1188":1,"1208":1,"1209":1}}],["serialized",{"2":{"449":1,"936":1,"1061":1,"1064":1,"1392":1,"1448":1,"1449":1}}],["serialize",{"0":{"1191":1},"1":{"1192":1,"1193":1,"1194":1,"1195":1,"1196":1},"2":{"49":1,"375":1,"1155":1,"1188":1,"1266":1,"1306":1,"1625":1}}],["sensible",{"2":{"1163":1}}],["sensitive",{"2":{"848":1,"1050":1,"1196":1}}],["sensitivity",{"0":{"778":1}}],["sent",{"2":{"35":1,"95":1,"97":1,"123":1,"132":1,"133":2,"173":1,"197":1,"470":1,"926":1,"1377":1,"1622":1}}],["sendresult",{"0":{"1368":1,"1369":1},"1":{"1369":1,"1370":1},"2":{"1369":1,"1370":1,"1380":3}}],["sender",{"2":{"467":1,"471":1,"476":1}}],["sending",{"0":{"803":1,"804":1,"906":1,"907":1,"1206":1},"2":{"117":1,"133":1,"220":1,"309":1,"1207":1,"1313":1,"1365":1,"1412":1}}],["sendstatus",{"2":{"921":1}}],["sends",{"2":{"95":1,"107":1,"123":1,"128":1,"132":1,"173":1,"232":1,"234":1,"470":1,"477":1,"808":1,"816":1,"871":1,"911":1,"923":1,"1315":1,"1361":1,"1365":1}}],["send",{"0":{"32":1,"33":1,"34":1,"95":1,"173":1,"470":1,"816":1},"2":{"23":1,"32":1,"35":1,"57":1,"64":1,"89":1,"93":1,"95":1,"108":2,"117":1,"123":2,"127":1,"131":1,"132":4,"133":1,"141":1,"149":1,"173":1,"219":1,"222":1,"235":1,"238":1,"239":1,"463":1,"468":1,"470":1,"476":2,"477":3,"478":1,"479":1,"803":1,"808":1,"809":1,"814":1,"816":3,"906":1,"911":1,"912":1,"921":2,"922":1,"923":1,"926":3,"929":1,"946":1,"950":1,"998":2,"999":1,"1206":1,"1310":1,"1311":1,"1312":1,"1361":1,"1370":1,"1379":1,"1380":1,"1625":1,"1627":4,"1629":1}}],["setformat",{"2":{"1522":1}}],["setcontext",{"2":{"1517":1}}],["setasync",{"2":{"1515":2}}],["setaffinity",{"2":{"1020":1,"1048":1}}],["setpattern",{"2":{"1514":1}}],["setlevel",{"2":{"1511":1}}],["setrulefortarget",{"2":{"1380":1}}],["setruleforkind",{"2":{"1380":1}}],["setdefault",{"2":{"1380":1}}],["setdevmode",{"2":{"820":1}}],["setnotfoundhandler",{"2":{"1006":1}}],["settable",{"2":{"1112":1}}],["setters",{"0":{"1287":1,"1300":1},"2":{"921":1}}],["settings",{"0":{"1262":1},"2":{"834":1,"1225":1,"1229":2,"1235":2,"1262":2}}],["setting",{"0":{"801":1,"802":1,"904":1,"905":1},"2":{"181":1,"1048":1}}],["setserverport",{"2":{"831":1,"833":1}}],["sets",{"2":{"276":1,"356":1,"808":2,"822":1,"911":2,"924":1,"925":1,"968":1,"1012":1,"1046":1,"1077":1}}],["setups",{"2":{"1626":1}}],["setup",{"0":{"1022":1,"1631":1,"1632":1},"1":{"1633":1,"1634":1,"1635":1,"1636":1,"1637":1},"2":{"97":1,"475":1,"1377":1,"1618":1,"1635":1}}],["set",{"0":{"372":1,"1297":1,"1517":1,"1607":1},"2":{"31":1,"44":4,"117":1,"123":1,"131":2,"160":4,"216":1,"235":1,"253":1,"336":1,"341":1,"345":1,"364":1,"365":1,"366":2,"368":3,"369":1,"378":1,"384":1,"491":1,"802":2,"808":1,"816":1,"819":1,"832":1,"844":1,"845":1,"881":1,"905":2,"911":1,"912":1,"914":1,"918":1,"921":1,"923":1,"935":1,"948":1,"1009":1,"1017":1,"1020":1,"1032":1,"1061":1,"1127":4,"1129":1,"1213":3,"1214":1,"1273":1,"1287":9,"1288":2,"1296":1,"1297":2,"1300":7,"1301":1,"1308":1,"1314":1,"1319":1,"1333":1,"1362":1,"1488":3,"1497":1,"1500":2,"1502":1,"1503":1,"1505":1,"1511":2,"1519":1,"1522":1,"1523":1,"1576":2,"1607":1,"1635":2}}],["sec",{"2":{"826":1}}],["seckey=",{"2":{"627":1}}],["seckey=path",{"2":{"627":1}}],["second",{"2":{"488":1,"858":1,"1587":1,"1593":1}}],["seconds>",{"2":{"616":1,"618":1}}],["seconds",{"2":{"108":1,"216":3,"453":1,"459":1,"529":1,"616":1,"620":1,"1011":2,"1075":1,"1432":1,"1462":1,"1466":1,"1467":1,"1468":2,"1470":1,"1471":1,"1627":1}}],["secret",{"2":{"157":1}}],["secrets",{"2":{"12":1,"832":1,"834":1,"1095":1}}],["secure",{"2":{"156":1,"185":1,"194":1,"534":1,"559":1,"564":1,"1079":1,"1084":1}}],["security",{"0":{"155":1,"160":1,"163":1,"190":1,"559":1,"571":1,"1063":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1},"2":{"155":2,"160":2,"161":1,"163":1,"184":2,"190":1,"553":1,"698":1,"968":1,"1058":1,"1652":1,"1661":1}}],["section",{"2":{"0":3,"1":1,"37":3,"38":1,"98":1,"119":1,"199":1,"205":1,"1659":1,"1664":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/assets/chunks/@localSearchIndexroot.Br7dyOPC.js b/docs/assets/chunks/@localSearchIndexroot.Br7dyOPC.js deleted file mode 100644 index 696583d18..000000000 --- a/docs/assets/chunks/@localSearchIndexroot.Br7dyOPC.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":887,"nextId":887,"documentIds":{"0":"/docs/api.html#api-reference","1":"/docs/api.html#structure","2":"/docs/api.html#philosophy","3":"/docs/api/config.html#config-api","4":"/docs/api/config.html#constructor","5":"/docs/api/config.html#getters","6":"/docs/api/config.html#get-string","7":"/docs/api/config.html#get-int","8":"/docs/api/config.html#get-bool","9":"/docs/api/config.html#get-double","10":"/docs/api/config.html#dot-path-access","11":"/docs/api/config.html#minimal-usage-example","12":"/docs/api/config.html#environment-override-pattern","13":"/docs/api/config.html#design-notes","14":"/docs/api/http.html#http-api","15":"/docs/api/http.html#app","16":"/docs/api/http.html#constructor","17":"/docs/api/http.html#run","18":"/docs/api/http.html#routing-methods","19":"/docs/api/http.html#get","20":"/docs/api/http.html#post","21":"/docs/api/http.html#put","22":"/docs/api/http.html#delete","23":"/docs/api/http.html#minimal-example","24":"/docs/api/http.html#request","25":"/docs/api/http.html#path-parameter","26":"/docs/api/http.html#query-parameter","27":"/docs/api/http.html#headers","28":"/docs/api/http.html#body","29":"/docs/api/http.html#json","30":"/docs/api/http.html#response","31":"/docs/api/http.html#status","32":"/docs/api/http.html#send-text","33":"/docs/api/http.html#send-json","34":"/docs/api/http.html#auto-send-return","35":"/docs/api/http.html#behavior-notes","36":"/docs/api/http.html#design-philosophy","37":"/docs/api/#api-reference","38":"/docs/api/#structure","39":"/docs/api/#philosophy","40":"/docs/api/json.html#json-api","41":"/docs/api/json.html#_1-simple-json","42":"/docs/api/json.html#token","43":"/docs/api/json.html#array-t","44":"/docs/api/json.html#kvs","45":"/docs/api/json.html#_2-high-level-json","46":"/docs/api/json.html#object-builder","47":"/docs/api/json.html#array-builder","48":"/docs/api/json.html#kv-initializer","49":"/docs/api/json.html#dumps","50":"/docs/api/json.html#loads","51":"/docs/api/json.html#file-io","52":"/docs/api/json.html#jset-jget-path-access","53":"/docs/api/json.html#design-notes","54":"/docs/api/middleware.html#middleware-api","55":"/docs/api/middleware.html#headers","56":"/docs/api/middleware.html#_1-context-middleware-recommended","57":"/docs/api/middleware.html#minimal-example","58":"/docs/api/middleware.html#registering-middleware","59":"/docs/api/middleware.html#global","60":"/docs/api/middleware.html#prefix","61":"/docs/api/middleware.html#exact-path","62":"/docs/api/middleware.html#chaining-middleware","63":"/docs/api/middleware.html#request-state-storage","64":"/docs/api/middleware.html#_2-legacy-http-middleware","65":"/docs/api/middleware.html#adapters","66":"/docs/api/middleware.html#behavior-notes","67":"/docs/examples/async.html#async-worker","68":"/docs/examples/async.html#run","69":"/docs/examples/async.html#example-timer-cpu-pool-stop","70":"/docs/examples/async.html#example-signals-sigint-sigterm","71":"/docs/examples/async.html#example-tcp-echo-server-async-accept-read-write","72":"/docs/api/websocket.html#websocket-api","73":"/docs/api/websocket.html#server","74":"/docs/api/websocket.html#constructor","75":"/docs/api/websocket.html#minimal-standalone-example","76":"/docs/api/websocket.html#event-hooks","77":"/docs/api/websocket.html#on-open","78":"/docs/api/websocket.html#on-close","79":"/docs/api/websocket.html#on-typed-message","80":"/docs/api/websocket.html#typed-message-protocol","81":"/docs/api/websocket.html#broadcast","82":"/docs/api/websocket.html#broadcast-to-all","83":"/docs/api/websocket.html#broadcast-to-room","84":"/docs/api/websocket.html#long-polling-bridge","85":"/docs/api/websocket.html#http-ws-combined","86":"/docs/api/websocket.html#notes","87":"/docs/examples/auth.html#auth","88":"/docs/examples/auth.html#goal","89":"/docs/examples/auth.html#full-example","90":"/docs/examples/auth.html#test-with-curl","91":"/docs/examples/auth.html#notes","92":"/docs/examples/hello-http.html#hello-http","93":"/docs/examples/hello-http.html#minimal-hello-world","94":"/docs/examples/hello-http.html#returning-json","95":"/docs/examples/hello-http.html#auto-send-return-style","96":"/docs/examples/hello-http.html#status-codes","97":"/docs/examples/hello-http.html#what-this-example-teaches","98":"/docs/examples/#examples","99":"/docs/examples/#available-examples","100":"/docs/examples/#hello-http","101":"/docs/examples/#auth","102":"/docs/examples/#ws-chat","103":"/docs/examples/#async-worker","104":"/docs/examples/#p2p-ping","105":"/docs/examples/#philosophy","106":"/docs/examples/ws-chat.html#ws-chat","107":"/docs/examples/ws-chat.html#chat-protocol","108":"/docs/examples/ws-chat.html#full-example","109":"/docs/examples/ws-chat.html#test-quickly","110":"/docs/examples/ws-chat.html#notes","111":"/docs/fundamentals/errors.html#errors","112":"/docs/fundamentals/errors.html#basic-error-response","113":"/docs/fundamentals/errors.html#_404-example","114":"/docs/fundamentals/errors.html#validation-error","115":"/docs/fundamentals/errors.html#internal-server-error-pattern","116":"/docs/fundamentals/errors.html#error-structure-consistency","117":"/docs/fundamentals/errors.html#important-rules","118":"/docs/fundamentals/errors.html#philosophy","119":"/docs/fundamentals/#fundamentals","120":"/docs/fundamentals/#the-runtime","121":"/docs/fundamentals/#the-execution-model","122":"/docs/fundamentals/#the-request-object","123":"/docs/fundamentals/#the-response-object","124":"/docs/fundamentals/#minimal-complete-example","125":"/docs/fundamentals/#design-principles","126":"/docs/fundamentals/lifecycle.html#lifecycle","127":"/docs/fundamentals/lifecycle.html#high-level-flow","128":"/docs/fundamentals/lifecycle.html#minimal-example","129":"/docs/fundamentals/lifecycle.html#step-by-step-breakdown","130":"/docs/fundamentals/lifecycle.html#_1-route-matching","131":"/docs/fundamentals/lifecycle.html#_2-handler-execution","132":"/docs/fundamentals/lifecycle.html#_3-response-finalization","133":"/docs/fundamentals/lifecycle.html#important-rules","134":"/docs/fundamentals/lifecycle.html#lifecycle-philosophy","135":"/docs/fundamentals/logging.html#logging","136":"/docs/fundamentals/logging.html#minimal-logging-example","137":"/docs/fundamentals/logging.html#logging-request-data","138":"/docs/fundamentals/logging.html#logging-errors","139":"/docs/fundamentals/logging.html#structured-logging-pattern","140":"/docs/fundamentals/logging.html#production-logging","141":"/docs/fundamentals/logging.html#performance-considerations","142":"/docs/fundamentals/logging.html#philosophy","143":"/docs/fundamentals/performance.html#performance","144":"/docs/fundamentals/performance.html#minimal-overhead-model","145":"/docs/fundamentals/performance.html#minimal-example","146":"/docs/fundamentals/performance.html#avoiding-performance-pitfalls","147":"/docs/fundamentals/performance.html#_1-avoid-heavy-allocations-in-hot-paths","148":"/docs/fundamentals/performance.html#_2-keep-handlers-small","149":"/docs/fundamentals/performance.html#_3-avoid-unnecessary-json-depth","150":"/docs/fundamentals/performance.html#hardware-considerations","151":"/docs/fundamentals/performance.html#throughput-mindset","152":"/docs/fundamentals/performance.html#benchmarking-rule","153":"/docs/fundamentals/performance.html#philosophy","154":"/docs/fundamentals/security.html#security","155":"/docs/fundamentals/security.html#basic-header-check","156":"/docs/fundamentals/security.html#token-validation-pattern","157":"/docs/fundamentals/security.html#input-validation","158":"/docs/fundamentals/security.html#avoid-leaking-internal-details","159":"/docs/fundamentals/security.html#security-headers","160":"/docs/fundamentals/security.html#https","161":"/docs/fundamentals/security.html#rate-limiting-and-protection","162":"/docs/fundamentals/security.html#security-mindset","163":"/docs/guide.html#routes-and-middleware","164":"/docs/guide.html#_1-quick-start","165":"/docs/guide.html#_2-core-mental-model","166":"/docs/guide.html#routes","167":"/docs/guide.html#middleware","168":"/docs/guide.html#_3-routes","169":"/docs/guide.html#_3-1-minimal-route","170":"/docs/guide.html#_3-2-return-values-vs-using-res","171":"/docs/guide.html#style-a-explicit-res","172":"/docs/guide.html#style-b-return-payload-auto-send","173":"/docs/guide.html#_3-3-path-parameters","174":"/docs/guide.html#_3-4-query-parameters","175":"/docs/guide.html#_3-5-headers","176":"/docs/guide.html#_3-6-request-body-and-json","177":"/docs/guide.html#_3-7-status-codes","178":"/docs/guide.html#_4-organizing-routes-recommended-pattern","179":"/docs/guide.html#_5-middleware","180":"/docs/guide.html#_5-1-context-based-middleware-recommended","181":"/docs/guide.html#_5-2-legacy-httpmiddleware","182":"/docs/guide.html#_6-where-middleware-runs","183":"/docs/guide.html#_6-1-global-middleware-runs-for-all-routes","184":"/docs/guide.html#_6-2-prefix-middleware-runs-only-for-routes-under-a-prefix","185":"/docs/guide.html#_6-3-exact-middleware-runs-only-for-a-single-route","186":"/docs/guide.html#_7-chaining-middleware","187":"/docs/guide.html#_8-using-requeststate-share-data-across-middleware-and-handlers","188":"/docs/guide.html#_9-common-presets-what-you-typically-want","189":"/docs/guide.html#security-headers","190":"/docs/guide.html#cors-dev","191":"/docs/guide.html#rate-limit","192":"/docs/guide.html#json-form-multipart-parsing","193":"/docs/guide.html#api-key-auth-dev","194":"/docs/guide.html#http-get-cache-middleware","195":"/docs/guide.html#_10-a-practical-layout-for-real-projects","196":"/docs/guide.html#_11-troubleshooting-tips","197":"/docs/inference/#inference","198":"/docs/inference/#inference-1","199":"/docs/inference/#philosophy","200":"/docs/inference/#minimal-inference-endpoint","201":"/docs/inference/#json-based-inference","202":"/docs/inference/#architecture-pattern","203":"/docs/inference/#performance-mindset","204":"/docs/inference/#next-steps","205":"/docs/inference/providers.html#providers","206":"/docs/inference/providers.html#minimal-provider-concept","207":"/docs/inference/providers.html#provider-with-json-input","208":"/docs/inference/providers.html#provider-selection-strategy","209":"/docs/inference/providers.html#production-notes","210":"/docs/inference/providers.html#common-integration-style","211":"/docs/inference/providers.html#philosophy","212":"/docs/inference/reliability.html#reliability","213":"/docs/inference/reliability.html#reliability-goals","214":"/docs/inference/reliability.html#request-lifecycle","215":"/docs/inference/reliability.html#timeouts","216":"/docs/inference/reliability.html#retries","217":"/docs/inference/reliability.html#idempotency","218":"/docs/inference/reliability.html#streaming-reliability","219":"/docs/inference/reliability.html#circuit-breaker","220":"/docs/inference/reliability.html#fallback-providers","221":"/docs/inference/reliability.html#error-format","222":"/docs/inference/reliability.html#limits","223":"/docs/inference/reliability.html#observability","224":"/docs/inference/reliability.html#practical-checklist","225":"/docs/inference/routing.html#routing-for-inference","226":"/docs/inference/routing.html#query-based-inference","227":"/docs/inference/routing.html#json-based-inference","228":"/docs/inference/routing.html#batch-inference-pattern","229":"/docs/inference/routing.html#input-size-guard","230":"/docs/inference/routing.html#rule-of-thumb","231":"/docs/inference/streaming.html#streaming","232":"/docs/inference/streaming.html#when-to-use-streaming","233":"/docs/inference/streaming.html#core-idea","234":"/docs/inference/streaming.html#minimal-http-example","235":"/docs/inference/streaming.html#recommended-chunk-format","236":"/docs/inference/streaming.html#backpressure","237":"/docs/inference/streaming.html#error-handling","238":"/docs/inference/streaming.html#notes","239":"/docs/install.html#install","240":"/docs/install.html#install-vix-cli","241":"/docs/install.html#linux-macos","242":"/docs/install.html#windows-powershell","243":"/docs/install.html#build-prerequisites","244":"/docs/install.html#ubuntu-example","245":"/docs/install.html#macos-homebrew","246":"/docs/install.html#windows","247":"/docs/install.html#troubleshooting","248":"/docs/install.html#vix-not-found","249":"/docs/install.html#download-failures","250":"/docs/modules/async/#async","251":"/docs/modules/async/#core-concepts","252":"/docs/modules/async/#_1-event-loop-and-task","253":"/docs/modules/async/#_2-timers","254":"/docs/modules/async/#_3-cpu-pool","255":"/docs/modules/async/#_4-signals","256":"/docs/modules/async/#_5-tcp-server-pattern","257":"/docs/modules/async/#_6-when-all-and-when-any","258":"/docs/modules/async/#execution-model","259":"/docs/modules/async/#recommended-usage","260":"/docs/modules/cli/commands/build.html#vix-build","261":"/docs/modules/cli/commands/build.html#usage","262":"/docs/modules/cli/commands/build.html#description","263":"/docs/modules/cli/commands/build.html#presets","264":"/docs/modules/cli/commands/build.html#options","265":"/docs/modules/cli/commands/build.html#environment-variables","266":"/docs/modules/cli/commands/build.html#examples","267":"/docs/modules/cli/commands/build.html#logs","268":"/docs/modules/cli/commands/build.html#signature-cache","269":"/docs/modules/cli/commands/build.html#fast-mode","270":"/docs/modules/cli/commands/build.html#design-goals","271":"/docs/modules/cli/commands/dev.html#vix-dev","272":"/docs/modules/cli/commands/dev.html#usage","273":"/docs/modules/cli/commands/dev.html#description","274":"/docs/modules/cli/commands/dev.html#options","275":"/docs/modules/cli/commands/dev.html#examples","276":"/docs/modules/cli/commands/dev.html#mode-classification","277":"/docs/modules/cli/commands/dev.html#when-to-use-vix-dev","278":"/docs/modules/cli/commands/dev.html#design-goals","279":"/docs/modules/cli/commands/new.html#vix-new","280":"/docs/modules/cli/commands/new.html#usage","281":"/docs/modules/cli/commands/new.html#options","282":"/docs/modules/cli/commands/new.html#environment-variables","283":"/docs/modules/cli/commands/new.html#interactive-mode","284":"/docs/modules/cli/commands/new.html#template","285":"/docs/modules/cli/commands/new.html#features-application","286":"/docs/modules/cli/commands/new.html#advanced","287":"/docs/modules/cli/commands/new.html#examples","288":"/docs/modules/cli/commands/new.html#output-example-application","289":"/docs/modules/cli/commands/new.html#output-example-library","290":"/docs/modules/cli/commands/new.html#behavior-notes","291":"/docs/modules/cli/commands/run.html#vix-run","292":"/docs/modules/cli/commands/run.html#usage","293":"/docs/modules/cli/commands/run.html#modes","294":"/docs/modules/cli/commands/run.html#_1-project-mode","295":"/docs/modules/cli/commands/run.html#_2-script-mode-cpp","296":"/docs/modules/cli/commands/run.html#_3-manifest-mode-vix","297":"/docs/modules/cli/commands/run.html#options","298":"/docs/modules/cli/commands/run.html#runtime-options","299":"/docs/modules/cli/commands/run.html#watch-mode","300":"/docs/modules/cli/commands/run.html#script-mode-flags","301":"/docs/modules/cli/commands/run.html#documentation-openapi","302":"/docs/modules/cli/commands/run.html#logging","303":"/docs/modules/cli/commands/run.html#compiler-linker-flags-script-mode","304":"/docs/modules/cli/commands/run.html#examples","305":"/docs/modules/cli/commands/run.html#environment-variables","306":"/docs/modules/cli/commands/run.html#design-goals","307":"/docs/modules/cli/commands/tests.html#vix-tests","308":"/docs/modules/cli/commands/tests.html#usage","309":"/docs/modules/cli/commands/tests.html#description","310":"/docs/modules/cli/commands/tests.html#test-flags","311":"/docs/modules/cli/commands/tests.html#ctest-passthrough","312":"/docs/modules/cli/commands/tests.html#preset-behavior","313":"/docs/modules/cli/commands/tests.html#examples","314":"/docs/modules/cli/commands/tests.html#notes","315":"/docs/modules/cli/extras/orm.html#vix-orm","316":"/docs/modules/cli/extras/orm.html#usage","317":"/docs/modules/cli/extras/orm.html#description","318":"/docs/modules/cli/extras/orm.html#commands","319":"/docs/modules/cli/extras/orm.html#migrate","320":"/docs/modules/cli/extras/orm.html#rollback","321":"/docs/modules/cli/extras/orm.html#status","322":"/docs/modules/cli/extras/orm.html#makemigrations","323":"/docs/modules/cli/extras/orm.html#common-options","324":"/docs/modules/cli/extras/orm.html#environment-defaults","325":"/docs/modules/cli/extras/orm.html#examples","326":"/docs/modules/cli/extras/p2p.html#vix-p2p","327":"/docs/modules/cli/extras/p2p.html#usage","328":"/docs/modules/cli/extras/p2p.html#description","329":"/docs/modules/cli/extras/p2p.html#core-options","330":"/docs/modules/cli/extras/p2p.html#discovery-udp","331":"/docs/modules/cli/extras/p2p.html#bootstrap-http-registry","332":"/docs/modules/cli/extras/p2p.html#logging","333":"/docs/modules/cli/extras/p2p.html#examples","334":"/docs/modules/cli/extras/p2p.html#typical-workflow","335":"/docs/modules/cli/#cli-overview","336":"/docs/modules/cli/#version-example","337":"/docs/modules/cli/#core-philosophy","338":"/docs/modules/cli/#command-categories","339":"/docs/modules/cli/#_1-project","340":"/docs/modules/cli/#_2-project-structure-modules","341":"/docs/modules/cli/#_3-network","342":"/docs/modules/cli/#_4-registry","343":"/docs/modules/cli/#_5-packaging-security","344":"/docs/modules/cli/#_6-database-orm","345":"/docs/modules/cli/#_7-info","346":"/docs/modules/cli/#global-options","347":"/docs/modules/cli/#quick-start-example","348":"/docs/modules/cli/#design-goals","349":"/docs/modules/cli/packaging/install.html#vix-install","350":"/docs/modules/cli/packaging/install.html#usage","351":"/docs/modules/cli/packaging/install.html#description","352":"/docs/modules/cli/packaging/install.html#options","353":"/docs/modules/cli/packaging/install.html#store-location","354":"/docs/modules/cli/packaging/install.html#examples","355":"/docs/modules/cli/packaging/install.html#security-notes","356":"/docs/modules/cli/packaging/install.html#typical-workflow","357":"/docs/modules/cli/packaging/pack.html#vix-pack","358":"/docs/modules/cli/packaging/pack.html#usage","359":"/docs/modules/cli/packaging/pack.html#description","360":"/docs/modules/cli/packaging/pack.html#options","361":"/docs/modules/cli/packaging/pack.html#basic-example","362":"/docs/modules/cli/packaging/pack.html#signing-optional","363":"/docs/modules/cli/packaging/pack.html#what-gets-generated","364":"/docs/modules/cli/packaging/pack.html#typical-workflow","365":"/docs/modules/cli/packaging/verify.html#vix-verify","366":"/docs/modules/cli/packaging/verify.html#usage","367":"/docs/modules/cli/packaging/verify.html#description","368":"/docs/modules/cli/packaging/verify.html#auto-detection-rules","369":"/docs/modules/cli/packaging/verify.html#options","370":"/docs/modules/cli/packaging/verify.html#signature-behavior","371":"/docs/modules/cli/packaging/verify.html#exit-codes","372":"/docs/modules/cli/packaging/verify.html#examples","373":"/docs/modules/cli/packaging/verify.html#typical-workflow","374":"/docs/modules/cli/registry/add.html#vix-add","375":"/docs/modules/cli/registry/add.html#usage","376":"/docs/modules/cli/registry/add.html#description","377":"/docs/modules/cli/registry/add.html#sync-registry","378":"/docs/modules/cli/registry/add.html#example","379":"/docs/modules/cli/registry/add.html#versioning-rules","380":"/docs/modules/cli/registry/add.html#what-happens-internally","381":"/docs/modules/cli/registry/add.html#notes","382":"/docs/modules/cli/registry/list.html#vix-list","383":"/docs/modules/cli/registry/list.html#usage","384":"/docs/modules/cli/registry/list.html#description","385":"/docs/modules/cli/registry/list.html#example","386":"/docs/modules/cli/registry/list.html#behavior-notes","387":"/docs/modules/cli/registry/list.html#typical-workflow","388":"/docs/modules/cli/registry/publish.html#vix-publish","389":"/docs/modules/cli/registry/publish.html#usage","390":"/docs/modules/cli/registry/publish.html#description","391":"/docs/modules/cli/registry/publish.html#requirements","392":"/docs/modules/cli/registry/publish.html#examples","393":"/docs/modules/cli/registry/publish.html#version-rules","394":"/docs/modules/cli/registry/publish.html#what-happens-internally","395":"/docs/modules/cli/registry/publish.html#notes","396":"/docs/modules/cli/registry/registry.html#vix-registry","397":"/docs/modules/cli/registry/registry.html#usage","398":"/docs/modules/cli/registry/registry.html#subcommands","399":"/docs/modules/cli/registry/registry.html#description","400":"/docs/modules/cli/registry/registry.html#first-step","401":"/docs/modules/cli/registry/registry.html#examples","402":"/docs/modules/cli/registry/registry.html#publishing-a-package","403":"/docs/modules/cli/registry/registry.html#registry-design-v1","404":"/docs/modules/cli/registry/registry.html#related-commands","405":"/docs/modules/cli/registry/remove.html#vix-remove","406":"/docs/modules/cli/registry/remove.html#usage","407":"/docs/modules/cli/registry/remove.html#description","408":"/docs/modules/cli/registry/remove.html#examples","409":"/docs/modules/cli/registry/remove.html#behavior-notes","410":"/docs/modules/cli/registry/remove.html#typical-workflow","411":"/docs/modules/cli/registry/search.html#vix-search","412":"/docs/modules/cli/registry/search.html#usage","413":"/docs/modules/cli/registry/search.html#description","414":"/docs/modules/cli/registry/search.html#sync-registry","415":"/docs/modules/cli/registry/search.html#examples","416":"/docs/modules/cli/registry/search.html#behavior-notes","417":"/docs/modules/cli/registry/search.html#design-goals","418":"/docs/modules/cli/repl.html#repl","419":"/docs/modules/cli/repl.html#start-the-repl","420":"/docs/modules/cli/repl.html#basic-math","421":"/docs/modules/cli/repl.html#variables","422":"/docs/modules/cli/repl.html#arrays","423":"/docs/modules/cli/repl.html#objects","424":"/docs/modules/cli/repl.html#built-in-commands","425":"/docs/modules/cli/repl.html#history","426":"/docs/modules/cli/repl.html#behavior-notes","427":"/docs/modules/cli/repl.html#when-to-use-repl","428":"/docs/modules/conversion/#conversion","429":"/docs/modules/conversion/#include","430":"/docs/modules/conversion/#result-model","431":"/docs/modules/conversion/#to-bool","432":"/docs/modules/conversion/#to-int","433":"/docs/modules/conversion/#to-float","434":"/docs/modules/conversion/#to-enum","435":"/docs/modules/conversion/#to-string","436":"/docs/modules/conversion/#parse-lt-t-gt","437":"/docs/modules/conversion/#notes","438":"/docs/modules/core/api.html#http","439":"/docs/modules/core/api.html#setting-status-codes","440":"/docs/modules/core/api.html#setting-headers","441":"/docs/modules/core/api.html#sending-plain-text","442":"/docs/modules/core/api.html#sending-json","443":"/docs/modules/core/api.html#reading-request-headers","444":"/docs/modules/core/api.html#checking-header-existence","445":"/docs/modules/core/api.html#raw-body-access","446":"/docs/modules/core/api.html#content-behavior-rule","447":"/docs/modules/core/app.html#app","448":"/docs/modules/core/app.html#quick-start","449":"/docs/modules/core/app.html#lifecycle","450":"/docs/modules/core/app.html#run-port","451":"/docs/modules/core/app.html#listen-port-on-listen","452":"/docs/modules/core/app.html#close-and-wait","453":"/docs/modules/core/app.html#routing","454":"/docs/modules/core/app.html#handler-signatures","455":"/docs/modules/core/app.html#auto-send-behavior","456":"/docs/modules/core/app.html#middleware","457":"/docs/modules/core/app.html#groups","458":"/docs/modules/core/app.html#static-files","459":"/docs/modules/core/app.html#dev-mode","460":"/docs/modules/core/app.html#executor-and-concurrency","461":"/docs/modules/core/app.html#signal-safe-stop","462":"/docs/modules/core/app.html#introspection","463":"/docs/modules/core/app.html#notes","464":"/docs/modules/core/config.html#configuration","465":"/docs/modules/core/config.html#_1-config-file-format","466":"/docs/modules/core/config.html#_2-loading-config","467":"/docs/modules/core/config.html#singleton-access","468":"/docs/modules/core/config.html#_3-typed-getters-with-defaults","469":"/docs/modules/core/config.html#_4-dot-path-lookup","470":"/docs/modules/core/config.html#_5-convenience-getters-server-logging-waf","471":"/docs/modules/core/config.html#_6-environment-override-db-password","472":"/docs/modules/core/config.html#_7-defaults-and-validation-behavior","473":"/docs/modules/core/config.html#best-practices","474":"/docs/modules/core/console.html#vix-console-core","475":"/docs/modules/core/console.html#goals-what-vix-console-guarantees","476":"/docs/modules/core/console.html#non-goals-what-it-is-not","477":"/docs/modules/core/console.html#what-vix-console-is-not-by-design","478":"/docs/modules/core/console.html#quick-start","479":"/docs/modules/core/console.html#api-and-semantics","480":"/docs/modules/core/console.html#methods","481":"/docs/modules/core/console.html#level-policy","482":"/docs/modules/core/console.html#environment-variables-read-once-stable","483":"/docs/modules/core/console.html#vix-console-level","484":"/docs/modules/core/console.html#color-control","485":"/docs/modules/core/console.html#performance-model-critical-contract","486":"/docs/modules/core/console.html#the-golden-rule","487":"/docs/modules/core/console.html#practical-guidance","488":"/docs/modules/core/console.html#thread-safety-and-atomic-lines","489":"/docs/modules/core/console.html#guarantee","490":"/docs/modules/core/console.html#implication","491":"/docs/modules/core/console.html#i-o-behavior-and-constraints-important","492":"/docs/modules/core/console.html#best-effort-i-o","493":"/docs/modules/core/console.html#flush-policy","494":"/docs/modules/core/console.html#ordering-guarantees","495":"/docs/modules/core/console.html#anti-spam-protection-dev-proof","496":"/docs/modules/core/console.html#why-it-exists","497":"/docs/modules/core/console.html#policy","498":"/docs/modules/core/console.html#reliability-notes-crash-shutdown","499":"/docs/modules/core/console.html#recommended-usage-patterns","500":"/docs/modules/core/console.html#good","501":"/docs/modules/core/console.html#avoid","502":"/docs/modules/core/console.html#integration","503":"/docs/modules/core/console.html#include","504":"/docs/modules/core/console.html#umbrella-headers","505":"/docs/modules/core/console.html#faq","506":"/docs/modules/core/console.html#is-vix-console-asynchronous","507":"/docs/modules/core/console.html#why-not-auto-enable-debug-by-default","508":"/docs/modules/core/console.html#why-not-structured-json-by-default","509":"/docs/modules/core/console.html#summary","510":"/docs/modules/core/example.html#vix-cpp-examples-guide-beginner-friendly","511":"/docs/modules/core/example.html#mental-model-for-python-node-developers","512":"/docs/modules/core/example.html#where-to-go-next","513":"/docs/modules/core/executor.html#executor","514":"/docs/modules/core/executor.html#iexecutor","515":"/docs/modules/core/executor.html#core-api","516":"/docs/modules/core/executor.html#post-fn-opt","517":"/docs/modules/core/executor.html#metrics","518":"/docs/modules/core/executor.html#wait-idle","519":"/docs/modules/core/executor.html#futures-with-submit","520":"/docs/modules/core/executor.html#rejection-behavior","521":"/docs/modules/core/executor.html#taskoptions","522":"/docs/modules/core/executor.html#fields","523":"/docs/modules/core/executor.html#metrics-1","524":"/docs/modules/core/executor.html#lightweight-wrappers","525":"/docs/modules/core/executor.html#stand","526":"/docs/modules/core/executor.html#limitedexecutor","527":"/docs/modules/core/executor.html#how-it-fits-in-core","528":"/docs/modules/core/executor.html#practical-guidance","529":"/docs/modules/core/experimental.html#experimental-threadpoolexecutor","530":"/docs/modules/core/experimental.html#threadpoolexecutor","531":"/docs/modules/core/experimental.html#construction","532":"/docs/modules/core/experimental.html#parameters","533":"/docs/modules/core/experimental.html#core-api","534":"/docs/modules/core/experimental.html#post-fn-opt","535":"/docs/modules/core/experimental.html#metrics","536":"/docs/modules/core/experimental.html#wait-idle","537":"/docs/modules/core/experimental.html#introspection","538":"/docs/modules/core/experimental.html#factory-helper","539":"/docs/modules/core/experimental.html#how-it-integrates-with-app","540":"/docs/modules/core/experimental.html#design-notes","541":"/docs/modules/core/experimental.html#when-to-use-it","542":"/docs/modules/core/guide.html#http","543":"/docs/modules/core/guide.html#setting-status-codes","544":"/docs/modules/core/guide.html#setting-headers","545":"/docs/modules/core/guide.html#sending-plain-text","546":"/docs/modules/core/guide.html#sending-json","547":"/docs/modules/core/guide.html#reading-request-headers","548":"/docs/modules/core/guide.html#checking-header-existence","549":"/docs/modules/core/guide.html#raw-body-access","550":"/docs/modules/core/guide.html#content-behavior-rule","551":"/docs/modules/core/http.html#http-core","552":"/docs/modules/core/http.html#irequesthandler","553":"/docs/modules/core/http.html#request","554":"/docs/modules/core/http.html#path-and-query-parsing","555":"/docs/modules/core/http.html#route-params","556":"/docs/modules/core/http.html#json-caching","557":"/docs/modules/core/http.html#requeststate","558":"/docs/modules/core/http.html#response","559":"/docs/modules/core/http.html#http-date-formatting","560":"/docs/modules/core/http.html#responsewrapper","561":"/docs/modules/core/http.html#common-usage","562":"/docs/modules/core/http.html#auto-default-behavior","563":"/docs/modules/core/http.html#static-files","564":"/docs/modules/core/http.html#requesthandler","565":"/docs/modules/core/http.html#supported-handler-signatures","566":"/docs/modules/core/http.html#error-handling","567":"/docs/modules/core/http.html#status","568":"/docs/modules/core/http.html#practical-guidance","569":"/docs/modules/core/#core-overview","570":"/docs/modules/core/#what-the-core-provides","571":"/docs/modules/core/#request-lifecycle-end-to-end","572":"/docs/modules/core/#why-this-architecture-exists","573":"/docs/modules/core/#core-components","574":"/docs/modules/core/#httpserver","575":"/docs/modules/core/#session","576":"/docs/modules/core/#router","577":"/docs/modules/core/#heavy-routes","578":"/docs/modules/core/#openapi-and-docs","579":"/docs/modules/core/#disable-auto-docs","580":"/docs/modules/core/#executor-threadpool-and-timers","581":"/docs/modules/core/#threadpool","582":"/docs/modules/core/#interval-timer","583":"/docs/modules/core/#mental-mapping-for-node-js-and-python-developers","584":"/docs/modules/core/#node-js-mapping-express","585":"/docs/modules/core/#python-mapping-fastapi","586":"/docs/modules/core/#minimal-example","587":"/docs/modules/core/#practical-recommendations","588":"/docs/modules/core/middleware.html#middleware-core","589":"/docs/modules/core/middleware.html#_1-context","590":"/docs/modules/core/middleware.html#_2-services","591":"/docs/modules/core/middleware.html#_3-request-scoped-state","592":"/docs/modules/core/middleware.html#_4-next-continuation-control","593":"/docs/modules/core/middleware.html#_5-hooks","594":"/docs/modules/core/middleware.html#_6-result-and-error","595":"/docs/modules/core/middleware.html#_7-standard-error-model","596":"/docs/modules/core/middleware.html#_8-typical-middleware-flow","597":"/docs/modules/core/middleware.html#design-philosophy","598":"/docs/modules/core/middleware.html#when-to-use-middleware","599":"/docs/modules/core/middleware.html#summary","600":"/docs/modules/core/openapi.html#openapi-and-docs-ui-offline-swagger","601":"/docs/modules/core/openapi.html#what-you-get","602":"/docs/modules/core/openapi.html#core-types","603":"/docs/modules/core/openapi.html#routedoc","604":"/docs/modules/core/openapi.html#openapi-registry","605":"/docs/modules/core/openapi.html#build-openapi-json","606":"/docs/modules/core/openapi.html#register-the-docs-routes","607":"/docs/modules/core/openapi.html#offline-swagger-ui-behavior","608":"/docs/modules/core/openapi.html#heavy-routes-metadata","609":"/docs/modules/core/openapi.html#disable-auto-docs","610":"/docs/modules/core/openapi.html#minimal-integration-example","611":"/docs/modules/core/router.html#router-core","612":"/docs/modules/core/router.html#design-philosophy","613":"/docs/modules/core/router.html#basic-route-registration","614":"/docs/modules/core/router.html#route-tree-model","615":"/docs/modules/core/router.html#path-parameters","616":"/docs/modules/core/router.html#heavy-routes","617":"/docs/modules/core/router.html#head-fallback","618":"/docs/modules/core/router.html#options-handling","619":"/docs/modules/core/router.html#_404-handling","620":"/docs/modules/core/router.html#openapi-integration","621":"/docs/modules/core/router.html#matching-rules","622":"/docs/modules/core/router.html#guarantees","623":"/docs/modules/core/router.html#when-to-use","624":"/docs/modules/core/router.html#summary","625":"/docs/modules/core/routing.html#routing","626":"/docs/modules/core/routing.html#minimal-server","627":"/docs/modules/core/routing.html#plain-text","628":"/docs/modules/core/routing.html#json-response","629":"/docs/modules/core/routing.html#nested-json","630":"/docs/modules/core/routing.html#status-codes","631":"/docs/modules/core/routing.html#path-parameters","632":"/docs/modules/core/routing.html#query-parameters","633":"/docs/modules/core/routing.html#headers","634":"/docs/modules/core/routing.html#request-body","635":"/docs/modules/core/routing.html#raw-body","636":"/docs/modules/core/routing.html#json-body","637":"/docs/modules/core/routing.html#mixed-behavior","638":"/docs/modules/core/routing.html#rule-of-thumb","639":"/docs/modules/core/server.html#http-server-guide-vix-server-httpserver","640":"/docs/modules/core/server.html#what-httpserver-is","641":"/docs/modules/core/server.html#key-dependencies","642":"/docs/modules/core/server.html#boost","643":"/docs/modules/core/server.html#vix-components","644":"/docs/modules/core/server.html#public-api","645":"/docs/modules/core/server.html#constructor","646":"/docs/modules/core/server.html#run","647":"/docs/modules/core/server.html#start-accept","648":"/docs/modules/core/server.html#calculate-io-thread-count","649":"/docs/modules/core/server.html#getrouter","650":"/docs/modules/core/server.html#monitor-metrics","651":"/docs/modules/core/server.html#stop-async","652":"/docs/modules/core/server.html#stop-blocking","653":"/docs/modules/core/server.html#join-threads","654":"/docs/modules/core/server.html#bound-port","655":"/docs/modules/core/server.html#internal-flow","656":"/docs/modules/core/server.html#_1-acceptor-initialization","657":"/docs/modules/core/server.html#_2-accept-loop","658":"/docs/modules/core/server.html#_3-session-creation","659":"/docs/modules/core/server.html#_4-i-o-threads","660":"/docs/modules/core/server.html#typical-usage","661":"/docs/modules/core/server.html#setup-and-run","662":"/docs/modules/core/server.html#graceful-shutdown","663":"/docs/modules/core/server.html#notes-and-gotchas","664":"/docs/modules/core/server.html#port-validation","665":"/docs/modules/core/server.html#head-requests","666":"/docs/modules/core/server.html#stop-blocking-does-not-stop","667":"/docs/modules/core/server.html#close-socket","668":"/docs/modules/core/server.html#how-to-extend","669":"/docs/modules/core/server.html#custom-404","670":"/docs/modules/core/server.html#dedicated-executors-heavy-routes","671":"/docs/modules/core/server.html#checklist-for-production","672":"/docs/modules/core/session.html#session-core","673":"/docs/modules/core/session.html#architecture-role","674":"/docs/modules/core/session.html#responsibilities","675":"/docs/modules/core/session.html#_1-asynchronous-request-reading","676":"/docs/modules/core/session.html#_2-timeout-protection","677":"/docs/modules/core/session.html#_3-basic-waf-web-application-firewall","678":"/docs/modules/core/session.html#light-vs-heavy-routes","679":"/docs/modules/core/session.html#keep-alive-handling","680":"/docs/modules/core/session.html#response-flow","681":"/docs/modules/core/session.html#error-handling-guarantees","682":"/docs/modules/core/session.html#security-safeguards","683":"/docs/modules/core/session.html#thread-safety","684":"/docs/modules/core/session.html#performance-model","685":"/docs/modules/core/session.html#when-to-use","686":"/docs/modules/core/session.html#summary","687":"/docs/modules/core/threadpool.html#threadpool-vix-threadpool","688":"/docs/modules/core/threadpool.html#components","689":"/docs/modules/core/threadpool.html#_1-task","690":"/docs/modules/core/threadpool.html#_2-taskcmp","691":"/docs/modules/core/threadpool.html#_3-taskguard","692":"/docs/modules/core/threadpool.html#_4-threadpool","693":"/docs/modules/core/threadpool.html#construction","694":"/docs/modules/core/threadpool.html#enqueueing-work","695":"/docs/modules/core/threadpool.html#timeout-behavior","696":"/docs/modules/core/threadpool.html#return-values","697":"/docs/modules/core/threadpool.html#auto-scaling","698":"/docs/modules/core/threadpool.html#periodic-scheduling","699":"/docs/modules/core/threadpool.html#idle-waiting","700":"/docs/modules/core/threadpool.html#shutdown-and-lifetime","701":"/docs/modules/core/threadpool.html#platform-notes","702":"/docs/modules/core/threadpool.html#linux-cpu-affinity","703":"/docs/modules/core/threadpool.html#windows-macros","704":"/docs/modules/core/threadpool.html#usage-example","705":"/docs/modules/core/threadpool.html#integration-note-for-vix-server","706":"/docs/modules/core/threadpool.html#quick-checklist","707":"/docs/modules/core/timers.html#timers-interval","708":"/docs/modules/core/timers.html#files","709":"/docs/modules/core/timers.html#key-types","710":"/docs/modules/core/timers.html#vix-timers-intervalhandle","711":"/docs/modules/core/timers.html#api","712":"/docs/modules/core/timers.html#intervalhandle-interval-iexecutor-exec-milliseconds-period-function-void-fn-taskoptions-opt","713":"/docs/modules/core/timers.html#typical-usage","714":"/docs/modules/core/timers.html#_1-store-the-handle-in-a-long-lived-owner-server-app","715":"/docs/modules/core/timers.html#_2-stop-explicitly","716":"/docs/modules/core/timers.html#concurrency-and-safety","717":"/docs/modules/core/timers.html#practical-guidance","718":"/docs/modules/crypto/#crypto","719":"/docs/modules/crypto/#include","720":"/docs/modules/crypto/#result-model","721":"/docs/modules/crypto/#_1-hashing","722":"/docs/modules/crypto/#sha-256","723":"/docs/modules/crypto/#_2-randomness","724":"/docs/modules/crypto/#_3-authenticated-encryption-aead","725":"/docs/modules/crypto/#algorithms","726":"/docs/modules/crypto/#key-and-nonce-sizes","727":"/docs/modules/crypto/#seal-encrypt","728":"/docs/modules/crypto/#open-decrypt","729":"/docs/modules/crypto/#_4-digital-signatures","730":"/docs/modules/crypto/#algorithms-1","731":"/docs/modules/crypto/#key-generation","732":"/docs/modules/crypto/#sign","733":"/docs/modules/crypto/#verify","734":"/docs/modules/crypto/#recommended-usage","735":"/docs/modules/db/#database","736":"/docs/modules/db/#_1-build-and-feature-flags","737":"/docs/modules/db/#_2-core-model","738":"/docs/modules/db/#connection","739":"/docs/modules/db/#statement","740":"/docs/modules/db/#resultset-and-resultrow","741":"/docs/modules/db/#_3-dbvalue-and-binding","742":"/docs/modules/db/#_4-connection-pool","743":"/docs/modules/db/#_5-database-facade-and-config","744":"/docs/modules/db/#_6-minimal-examples","745":"/docs/modules/db/#_6-1-connect-and-ping","746":"/docs/modules/db/#_6-2-transaction-create-table-insert-query","747":"/docs/modules/db/#_6-3-prepared-select-with-parameter","748":"/docs/modules/db/#_7-transactions","749":"/docs/modules/db/#_8-migrations","750":"/docs/modules/db/#code-migrations","751":"/docs/modules/db/#file-migrations","752":"/docs/modules/db/#_9-drivers-overview","753":"/docs/modules/db/#sqlite-driver","754":"/docs/modules/db/#mysql-driver","755":"/docs/modules/db/#_10-schema-utilities","756":"/docs/modules/db/#_11-common-errors","757":"/docs/modules/deploy/#deploy-vix-cpp","758":"/docs/modules/deploy/#goal","759":"/docs/modules/deploy/#folder-layout","760":"/docs/modules/deploy/#_1-build-and-copy-the-binary","761":"/docs/modules/deploy/#option-a-build-locally-copy-to-server","762":"/docs/modules/deploy/#option-b-build-on-the-server","763":"/docs/modules/deploy/#_2-systemd-service","764":"/docs/modules/deploy/#logs","765":"/docs/modules/deploy/#_3-open-the-port-firewall","766":"/docs/modules/deploy/#_4-nginx-reverse-proxy-recommended","767":"/docs/modules/deploy/#_5-tls-with-certbot-optional","768":"/docs/modules/deploy/#_6-deploy-update-workflow-simple-and-safe","769":"/docs/modules/deploy/#_7-health-check-ideas","770":"/docs/modules/deploy/#common-issues","771":"/docs/modules/deploy/#service-starts-then-exits","772":"/docs/modules/deploy/#permission-errors-static-files-uploads","773":"/docs/modules/deploy/#wrong-client-ip-inside-the-app","774":"/docs/modules/deploy/#minimal-checklist","775":"/docs/modules/json/#json","776":"/docs/modules/json/#_1-simple-json","777":"/docs/modules/json/#token","778":"/docs/modules/json/#array-t","779":"/docs/modules/json/#kvs-object","780":"/docs/modules/json/#nested-structures","781":"/docs/modules/json/#merge-and-erase","782":"/docs/modules/json/#_2-high-level-json-nlohmann-powered","783":"/docs/modules/json/#object-array-builders","784":"/docs/modules/json/#file-io","785":"/docs/modules/json/#jpath-navigation","786":"/docs/modules/json/#when-to-use-which","787":"/docs/modules/middleware/#middleware","788":"/docs/modules/middleware/#context-based-middleware-recommended","789":"/docs/modules/middleware/#legacy-http-middleware","790":"/docs/modules/middleware/#prefix-middleware","791":"/docs/modules/middleware/#exact-path-middleware","792":"/docs/modules/middleware/#chaining-and-early-return","793":"/docs/modules/middleware/#requeststate-store-data-across-middleware-and-handlers","794":"/docs/modules/middleware/#notes","795":"/docs/modules/orm/#orm","796":"/docs/modules/orm/#concepts","797":"/docs/modules/orm/#_1-connection-pool-basic-insert-transaction","798":"/docs/modules/orm/#_2-querybuilder-update","799":"/docs/modules/orm/#_3-repository-crud","800":"/docs/modules/orm/#_4-unitofwork","801":"/docs/modules/orm/#common-errors","802":"/docs/modules/p2p/#p2p-ping","803":"/docs/modules/p2p/#run","804":"/docs/modules/p2p/#example","805":"/docs/modules/p2p/#notes","806":"/docs/modules/p2p_http/#p2p-ping","807":"/docs/modules/p2p_http/#run","808":"/docs/modules/p2p_http/#example","809":"/docs/modules/p2p_http/#notes","810":"/docs/modules/time/#time","811":"/docs/modules/time/#_1-date","812":"/docs/modules/time/#create-current-date","813":"/docs/modules/time/#parse-a-date","814":"/docs/modules/time/#convert-date-to-timestamp-start-of-day-utc","815":"/docs/modules/time/#_2-datetime-utc","816":"/docs/modules/time/#current-utc-datetime","817":"/docs/modules/time/#parse-iso-8601-utc-z","818":"/docs/modules/time/#_3-timestamp","819":"/docs/modules/time/#get-current-timestamp","820":"/docs/modules/time/#timestamp-arithmetic","821":"/docs/modules/time/#_4-duration","822":"/docs/modules/time/#create-durations","823":"/docs/modules/time/#inspect-duration","824":"/docs/modules/time/#_5-measuring-elapsed-time-steadyclock","825":"/docs/modules/time/#recommended-usage","826":"/docs/modules/validation/#validation","827":"/docs/modules/validation/#_1-validating-a-simple-value","828":"/docs/modules/validation/#numeric-example","829":"/docs/modules/validation/#_2-parsed-validation-string-→-typed-value","830":"/docs/modules/validation/#_3-schema-based-struct-validation","831":"/docs/modules/validation/#_4-basemodel-pattern","832":"/docs/modules/validation/#_5-custom-cross-field-validation","833":"/docs/modules/validation/#_6-validating-http-style-form-input","834":"/docs/modules/validation/#_7-allowed-values-in-set","835":"/docs/modules/validation/#_8-optional-values","836":"/docs/modules/validation/#error-model","837":"/docs/modules/validation/#recommended-usage","838":"/docs/modules/websocket/#websocket","839":"/docs/modules/websocket/#_1-http-ws-in-one-process-with-long-polling-bridge","840":"/docs/modules/websocket/#_2-standalone-websocket-server","841":"/docs/modules/websocket/#minimal-client-message","842":"/docs/modules/websocket/#notes","843":"/docs/project-setup.html#project-setup","844":"/docs/project-setup.html#project-setup-1","845":"/docs/project-setup.html#_1-minimal-structure","846":"/docs/project-setup.html#_2-main-cpp-example","847":"/docs/project-setup.html#_3-minimal-cmakelists-txt","848":"/docs/project-setup.html#_4-build-manually","849":"/docs/project-setup.html#_5-scaling-later","850":"/docs/quick-start.html#quick-start","851":"/docs/quick-start.html#_1-minimal-server","852":"/docs/quick-start.html#_2-run","853":"/docs/quick-start.html#_3-test","854":"/docs/quick-start.html#_4-minimal-route-examples","855":"/docs/quick-start.html#plain-text","856":"/docs/quick-start.html#path-parameter","857":"/docs/quick-start.html#query-parameter","858":"/docs/quick-start.html#status-code","859":"/docs/quick-start.html#philosophy","860":"/docs/services/consulting.html#consulting","861":"/docs/services/consulting.html#architecture-design","862":"/docs/services/consulting.html#performance-optimization","863":"/docs/services/consulting.html#migration-strategy","864":"/docs/services/consulting.html#codebase-audit","865":"/docs/services/consulting.html#engagement-models","866":"/docs/services/consulting.html#contact","867":"/docs/services/#services","868":"/docs/services/#what-we-offer","869":"/docs/services/#who-it-s-for","870":"/docs/services/#philosophy","871":"/docs/services/#available-service-categories","872":"/docs/services/support.html#support","873":"/docs/services/support.html#production-support","874":"/docs/services/support.html#priority-channels","875":"/docs/services/support.html#sla-options","876":"/docs/services/support.html#what-is-not-included","877":"/docs/services/support.html#contact","878":"/docs/services/training.html#training","879":"/docs/services/training.html#core-training-tracks","880":"/docs/services/training.html#_1-modern-c-backend-foundations","881":"/docs/services/training.html#_2-async-concurrency-mastery","882":"/docs/services/training.html#_3-database-orm-systems","883":"/docs/services/training.html#_4-p2p-offline-first-architecture","884":"/docs/services/training.html#format-options","885":"/docs/services/training.html#who-this-is-for","886":"/docs/services/training.html#contact"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,40],"1":[1,2,25],"2":[1,2,35],"3":[2,1,36],"4":[1,1,29],"5":[1,1,9],"6":[2,1,12],"7":[2,1,9],"8":[2,1,9],"9":[2,1,10],"10":[3,1,26],"11":[3,1,25],"12":[3,1,37],"13":[2,1,29],"14":[2,1,26],"15":[1,1,11],"16":[1,1,3],"17":[1,1,13],"18":[2,1,1],"19":[1,2,5],"20":[1,2,5],"21":[1,2,5],"22":[1,2,5],"23":[2,2,21],"24":[1,1,14],"25":[2,1,10],"26":[2,1,6],"27":[1,1,8],"28":[1,1,6],"29":[1,1,14],"30":[1,1,7],"31":[1,1,7],"32":[2,1,4],"33":[2,1,5],"34":[3,1,25],"35":[2,1,32],"36":[2,1,22],"37":[2,1,40],"38":[1,2,25],"39":[1,2,35],"40":[2,1,26],"41":[3,1,23],"42":[1,3,41],"43":[2,3,29],"44":[1,3,41],"45":[4,1,17],"46":[2,4,21],"47":[2,4,8],"48":[2,4,9],"49":[1,4,11],"50":[1,4,10],"51":[2,4,11],"52":[5,4,22],"53":[2,1,27],"54":[2,1,25],"55":[1,1,12],"56":[5,1,12],"57":[2,5,34],"58":[2,1,1],"59":[1,2,8],"60":[1,2,10],"61":[2,2,11],"62":[2,1,20],"63":[3,1,25],"64":[4,1,35],"65":[1,1,15],"66":[2,1,34],"67":[2,1,14],"68":[1,2,7],"69":[6,2,80],"70":[5,2,52],"71":[9,2,98],"72":[2,1,30],"73":[1,1,12],"74":[1,1,11],"75":[3,1,43],"76":[2,1,1],"77":[2,2,14],"78":[2,2,13],"79":[3,2,18],"80":[3,1,18],"81":[1,1,1],"82":[3,1,10],"83":[3,1,9],"84":[3,1,25],"85":[4,1,24],"86":[1,1,32],"87":[1,1,22],"88":[1,1,17],"89":[2,1,81],"90":[3,1,18],"91":[1,1,31],"92":[2,1,26],"93":[3,2,29],"94":[2,2,28],"95":[4,2,46],"96":[2,2,25],"97":[4,2,17],"98":[1,1,28],"99":[2,1,1],"100":[2,2,14],"101":[1,2,12],"102":[2,2,14],"103":[2,2,20],"104":[2,2,16],"105":[1,1,23],"106":[2,1,34],"107":[2,2,22],"108":[2,2,112],"109":[2,2,18],"110":[1,2,31],"111":[1,1,22],"112":[3,1,25],"113":[2,1,41],"114":[2,1,42],"115":[4,1,34],"116":[3,1,19],"117":[2,1,20],"118":[1,1,20],"119":[1,1,32],"120":[2,1,23],"121":[3,1,23],"122":[3,1,26],"123":[3,1,35],"124":[3,1,22],"125":[2,1,24],"126":[1,1,15],"127":[3,1,30],"128":[2,1,38],"129":[4,1,1],"130":[3,5,38],"131":[3,5,25],"132":[3,5,36],"133":[2,1,28],"134":[2,1,24],"135":[1,1,22],"136":[3,1,35],"137":[3,1,39],"138":[2,1,23],"139":[3,1,26],"140":[2,1,22],"141":[2,1,25],"142":[1,1,17],"143":[1,1,24],"144":[3,1,31],"145":[2,1,36],"146":[3,1,1],"147":[7,4,19],"148":[4,4,15],"149":[5,4,13],"150":[2,1,30],"151":[2,1,37],"152":[2,1,22],"153":[1,1,23],"154":[1,1,20],"155":[3,1,39],"156":[3,1,33],"157":[2,1,32],"158":[4,1,21],"159":[2,1,30],"160":[1,1,33],"161":[4,1,20],"162":[2,1,25],"163":[3,1,37],"164":[3,3,34],"165":[4,3,1],"166":[1,7,26],"167":[1,7,44],"168":[2,3,1],"169":[4,4,11],"170":[7,4,5],"171":[5,10,18],"172":[7,10,43],"173":[3,4,45],"174":[4,4,29],"175":[3,4,27],"176":[6,4,45],"177":[4,4,22],"178":[6,3,41],"179":[2,3,29],"180":[7,4,49],"181":[4,4,52],"182":[4,3,8],"183":[9,7,16],"184":[12,7,29],"185":[11,7,24],"186":[3,3,34],"187":[10,3,60],"188":[8,3,9],"189":[2,11,10],"190":[3,11,8],"191":[2,11,15],"192":[4,11,18],"193":[5,11,11],"194":[4,11,50],"195":[7,3,36],"196":[3,3,56],"197":[1,1,1],"198":[1,1,41],"199":[1,1,22],"200":[3,1,37],"201":[3,1,31],"202":[2,1,17],"203":[2,1,23],"204":[2,1,23],"205":[1,1,36],"206":[3,1,47],"207":[4,1,37],"208":[3,1,25],"209":[2,1,28],"210":[3,1,24],"211":[1,1,12],"212":[1,1,49],"213":[2,1,34],"214":[2,1,34],"215":[1,1,41],"216":[1,1,50],"217":[1,1,45],"218":[2,1,52],"219":[2,1,36],"220":[2,1,37],"221":[2,1,34],"222":[1,1,29],"223":[1,1,37],"224":[2,1,32],"225":[3,1,28],"226":[3,3,51],"227":[3,3,42],"228":[3,3,53],"229":[3,3,49],"230":[3,3,25],"231":[1,1,29],"232":[4,1,27],"233":[2,1,23],"234":[3,1,90],"235":[3,1,25],"236":[1,1,31],"237":[2,1,24],"238":[1,1,28],"239":[1,1,13],"240":[3,1,1],"241":[2,3,26],"242":[3,3,14],"243":[2,1,16],"244":[2,3,18],"245":[3,3,10],"246":[1,3,19],"247":[1,1,1],"248":[5,2,19],"249":[2,2,18],"250":[1,1,31],"251":[2,1,43],"252":[5,1,49],"253":[2,1,26],"254":[3,1,54],"255":[2,1,27],"256":[4,1,50],"257":[5,1,38],"258":[2,1,32],"259":[2,1,43],"260":[2,1,11],"261":[1,2,6],"262":[1,2,36],"263":[1,1,12],"264":[1,1,86],"265":[2,1,14],"266":[1,1,36],"267":[1,1,21],"268":[2,1,25],"269":[2,1,25],"270":[2,1,25],"271":[2,1,21],"272":[1,2,7],"273":[1,2,26],"274":[1,2,44],"275":[1,2,25],"276":[2,2,24],"277":[5,2,17],"278":[2,2,25],"279":[2,1,6],"280":[1,2,6],"281":[1,2,31],"282":[2,2,7],"283":[2,1,10],"284":[1,2,5],"285":[3,2,11],"286":[1,2,10],"287":[1,1,19],"288":[4,1,16],"289":[4,1,14],"290":[2,1,36],"291":[2,1,9],"292":[1,2,10],"293":[1,1,1],"294":[3,1,15],"295":[5,1,18],"296":[5,1,24],"297":[1,1,30],"298":[2,1,26],"299":[2,1,18],"300":[3,1,8],"301":[3,1,8],"302":[1,1,20],"303":[6,1,18],"304":[1,1,25],"305":[2,1,9],"306":[2,1,33],"307":[2,1,6],"308":[1,2,5],"309":[1,2,32],"310":[2,1,24],"311":[2,1,19],"312":[2,1,17],"313":[1,1,24],"314":[1,1,29],"315":[2,1,6],"316":[1,2,15],"317":[1,2,17],"318":[1,2,1],"319":[1,3,7],"320":[1,3,14],"321":[1,3,9],"322":[1,3,30],"323":[2,2,28],"324":[2,2,10],"325":[1,2,40],"326":[2,1,11],"327":[1,2,10],"328":[1,2,32],"329":[2,2,51],"330":[3,2,27],"331":[4,2,32],"332":[1,2,15],"333":[1,2,30],"334":[2,2,25],"335":[2,1,24],"336":[2,2,14],"337":[2,2,25],"338":[2,1,1],"339":[2,2,17],"340":[5,2,14],"341":[2,2,12],"342":[2,2,24],"343":[4,2,15],"344":[4,2,12],"345":[2,2,7],"346":[2,1,20],"347":[3,1,14],"348":[2,1,39],"349":[2,1,9],"350":[1,2,8],"351":[1,2,29],"352":[1,2,46],"353":[2,2,22],"354":[1,2,25],"355":[2,2,24],"356":[2,2,23],"357":[2,1,8],"358":[1,2,4],"359":[1,2,26],"360":[1,2,49],"361":[2,2,14],"362":[3,2,25],"363":[3,2,22],"364":[2,2,19],"365":[2,1,11],"366":[1,2,9],"367":[1,2,27],"368":[3,2,19],"369":[1,2,38],"370":[2,2,27],"371":[2,2,6],"372":[1,2,37],"373":[2,2,16],"374":[2,1,8],"375":[1,2,7],"376":[1,2,32],"377":[2,2,4],"378":[1,2,7],"379":[2,2,28],"380":[3,2,21],"381":[1,2,27],"382":[2,1,7],"383":[1,2,3],"384":[1,2,23],"385":[1,2,13],"386":[2,2,19],"387":[2,2,21],"388":[2,1,9],"389":[1,2,8],"390":[1,2,36],"391":[1,2,22],"392":[1,2,18],"393":[2,2,30],"394":[3,2,22],"395":[1,2,30],"396":[2,1,9],"397":[1,2,5],"398":[1,2,13],"399":[1,2,34],"400":[2,2,15],"401":[1,2,18],"402":[3,2,41],"403":[4,2,29],"404":[2,2,23],"405":[2,1,8],"406":[1,2,7],"407":[1,2,31],"408":[1,2,12],"409":[2,2,21],"410":[2,2,14],"411":[2,1,9],"412":[1,2,5],"413":[1,2,27],"414":[2,2,4],"415":[1,2,12],"416":[2,2,22],"417":[2,2,19],"418":[1,1,32],"419":[3,1,20],"420":[2,1,22],"421":[1,1,12],"422":[1,1,8],"423":[1,1,25],"424":[3,1,25],"425":[1,1,11],"426":[2,1,27],"427":[4,1,34],"428":[1,1,33],"429":[1,1,21],"430":[2,1,46],"431":[2,1,20],"432":[2,1,33],"433":[2,1,27],"434":[2,1,45],"435":[2,1,39],"436":[5,1,36],"437":[1,1,40],"438":[1,1,20],"439":[3,1,28],"440":[2,1,38],"441":[3,1,24],"442":[2,1,25],"443":[3,1,35],"444":[3,1,31],"445":[3,1,31],"446":[3,1,21],"447":[1,1,35],"448":[2,1,22],"449":[1,1,1],"450":[3,2,14],"451":[4,2,24],"452":[4,2,17],"453":[1,1,41],"454":[2,2,28],"455":[3,1,45],"456":[1,1,63],"457":[1,1,28],"458":[2,1,32],"459":[2,1,21],"460":[3,1,39],"461":[3,1,25],"462":[1,1,24],"463":[1,1,27],"464":[1,1,53],"465":[4,1,54],"466":[3,1,27],"467":[2,3,27],"468":[5,1,50],"469":[4,1,26],"470":[7,1,50],"471":[6,1,38],"472":[5,1,36],"473":[2,1,39],"474":[4,1,41],"475":[6,4,90],"476":[7,4,42],"477":[8,4,54],"478":[2,4,43],"479":[3,4,1],"480":[1,6,7],"481":[2,6,28],"482":[6,4,10],"483":[3,9,75],"484":[2,9,42],"485":[5,4,1],"486":[3,8,52],"487":[2,8,47],"488":[5,4,1],"489":[1,8,26],"490":[1,8,17],"491":[7,4,1],"492":[4,10,54],"493":[2,10,33],"494":[2,4,37],"495":[6,4,1],"496":[3,9,27],"497":[1,9,53],"498":[5,4,38],"499":[3,4,1],"500":[1,6,24],"501":[1,6,47],"502":[1,4,1],"503":[1,4,14],"504":[2,4,23],"505":[1,4,1],"506":[5,4,33],"507":[8,4,22],"508":[7,4,20],"509":[1,4,40],"510":[7,1,188],"511":[6,7,42],"512":[4,7,37],"513":[1,1,48],"514":[1,1,10],"515":[2,2,38],"516":[4,2,28],"517":[2,2,21],"518":[3,2,25],"519":[3,1,34],"520":[2,4,34],"521":[1,1,23],"522":[1,2,34],"523":[1,1,28],"524":[2,1,11],"525":[1,3,16],"526":[1,3,40],"527":[5,1,31],"528":[2,1,34],"529":[2,1,40],"530":[1,2,23],"531":[1,2,9],"532":[1,3,33],"533":[2,2,1],"534":[4,4,31],"535":[2,4,17],"536":[3,4,17],"537":[1,2,18],"538":[2,2,37],"539":[5,2,35],"540":[2,2,21],"541":[4,2,44],"542":[1,1,20],"543":[3,1,28],"544":[2,1,38],"545":[3,1,24],"546":[2,1,25],"547":[3,1,35],"548":[3,1,31],"549":[3,1,31],"550":[3,1,21],"551":[3,1,73],"552":[1,3,51],"553":[1,3,51],"554":[4,3,23],"555":[2,3,24],"556":[2,3,15],"557":[1,3,58],"558":[1,3,47],"559":[3,3,17],"560":[1,3,45],"561":[2,3,16],"562":[3,3,29],"563":[2,3,27],"564":[1,3,38],"565":[3,3,61],"566":[2,3,38],"567":[1,3,48],"568":[2,3,34],"569":[2,1,27],"570":[4,2,70],"571":[5,2,72],"572":[4,7,56],"573":[2,2,1],"574":[1,2,75],"575":[1,2,93],"576":[1,2,53],"577":[2,3,41],"578":[3,2,44],"579":[3,5,17],"580":[4,2,11],"581":[1,2,76],"582":[2,2,57],"583":[8,2,1],"584":[5,2,23],"585":[4,2,24],"586":[2,2,25],"587":[2,2,46],"588":[3,1,54],"589":[2,3,67],"590":[2,3,55],"591":[4,3,52],"592":[5,3,45],"593":[2,3,40],"594":[4,3,55],"595":[4,3,39],"596":[4,3,26],"597":[2,3,40],"598":[4,3,23],"599":[1,3,29],"600":[7,1,34],"601":[3,7,41],"602":[2,7,1],"603":[1,8,40],"604":[2,8,42],"605":[3,7,56],"606":[4,7,26],"607":[4,7,74],"608":[3,7,31],"609":[3,7,28],"610":[3,7,33],"611":[3,1,43],"612":[2,3,32],"613":[3,3,32],"614":[3,3,22],"615":[2,3,23],"616":[2,3,28],"617":[2,3,29],"618":[2,3,17],"619":[2,3,24],"620":[2,3,31],"621":[2,3,22],"622":[1,3,28],"623":[3,3,20],"624":[1,3,21],"625":[1,1,14],"626":[2,1,22],"627":[2,1,23],"628":[2,1,23],"629":[2,1,36],"630":[2,1,31],"631":[2,1,48],"632":[2,1,44],"633":[1,1,49],"634":[2,1,1],"635":[2,3,31],"636":[2,3,23],"637":[2,1,37],"638":[3,1,20],"639":[7,1,27],"640":[3,7,60],"641":[2,7,1],"642":[1,8,24],"643":[2,8,33],"644":[2,7,1],"645":[1,8,48],"646":[2,8,34],"647":[3,8,26],"648":[5,8,24],"649":[2,8,19],"650":[3,8,26],"651":[3,8,31],"652":[3,8,27],"653":[3,8,7],"654":[3,8,15],"655":[2,7,1],"656":[3,8,32],"657":[3,8,21],"658":[3,8,27],"659":[4,8,28],"660":[2,7,1],"661":[3,8,45],"662":[2,8,15],"663":[3,7,1],"664":[2,9,28],"665":[2,9,33],"666":[4,9,31],"667":[3,9,26],"668":[3,7,1],"669":[2,9,14],"670":[5,9,27],"671":[3,7,44],"672":[3,1,40],"673":[2,3,18],"674":[1,3,1],"675":[4,3,32],"676":[3,3,23],"677":[7,3,49],"678":[4,3,38],"679":[3,3,22],"680":[2,3,23],"681":[3,3,23],"682":[2,3,27],"683":[2,3,23],"684":[2,3,29],"685":[3,3,26],"686":[1,3,36],"687":[4,1,66],"688":[1,4,1],"689":[2,4,44],"690":[2,4,37],"691":[2,4,31],"692":[2,4,42],"693":[1,4,47],"694":[2,4,13],"695":[2,5,22],"696":[2,5,28],"697":[2,5,38],"698":[2,4,56],"699":[2,4,35],"700":[3,4,51],"701":[2,4,1],"702":[3,5,35],"703":[2,5,18],"704":[2,4,31],"705":[5,4,45],"706":[2,4,39],"707":[2,1,38],"708":[1,2,5],"709":[2,2,1],"710":[3,4,45],"711":[1,2,1],"712":[16,3,62],"713":[2,2,1],"714":[12,4,39],"715":[3,4,15],"716":[3,2,37],"717":[2,2,50],"718":[1,1,37],"719":[1,1,10],"720":[2,1,30],"721":[2,1,1],"722":[2,2,51],"723":[2,1,38],"724":[5,1,10],"725":[1,5,7],"726":[4,5,18],"727":[3,5,43],"728":[3,5,44],"729":[3,1,11],"730":[1,3,5],"731":[2,3,16],"732":[1,3,21],"733":[1,3,18],"734":[2,1,51],"735":[1,1,71],"736":[5,1,37],"737":[3,1,10],"738":[1,4,35],"739":[1,4,38],"740":[3,4,42],"741":[4,1,46],"742":[3,1,42],"743":[5,1,60],"744":[3,1,1],"745":[5,4,47],"746":[7,4,112],"747":[6,4,66],"748":[2,1,44],"749":[2,1,5],"750":[2,3,15],"751":[2,3,121],"752":[3,1,1],"753":[2,4,19],"754":[2,4,41],"755":[3,1,56],"756":[3,1,41],"757":[4,1,27],"758":[1,4,22],"759":[2,4,25],"760":[6,4,1],"761":[7,9,12],"762":[6,9,39],"763":[3,4,80],"764":[1,6,6],"765":[6,4,25],"766":[6,4,65],"767":[6,4,21],"768":[8,4,49],"769":[4,4,19],"770":[2,4,1],"771":[4,5,19],"772":[6,5,17],"773":[6,5,21],"774":[2,4,18],"775":[1,1,35],"776":[3,1,22],"777":[1,3,39],"778":[2,3,36],"779":[3,3,31],"780":[2,3,37],"781":[3,3,36],"782":[7,1,31],"783":[4,7,30],"784":[2,7,34],"785":[2,7,41],"786":[4,1,37],"787":[1,1,54],"788":[5,1,86],"789":[3,1,68],"790":[2,1,72],"791":[3,1,60],"792":[4,1,72],"793":[8,1,92],"794":[1,1,31],"795":[1,1,37],"796":[1,1,35],"797":[8,1,82],"798":[3,1,87],"799":[3,1,105],"800":[2,1,77],"801":[2,1,40],"802":[2,1,35],"803":[1,2,25],"804":[1,2,74],"805":[1,2,46],"806":[2,1,35],"807":[1,2,25],"808":[1,2,74],"809":[1,2,46],"810":[1,1,45],"811":[2,1,7],"812":[3,2,12],"813":[3,2,19],"814":[9,2,15],"815":[4,1,7],"816":[3,4,12],"817":[6,4,23],"818":[2,1,8],"819":[3,2,13],"820":[2,2,17],"821":[2,1,5],"822":[2,2,10],"823":[2,2,11],"824":[6,1,41],"825":[2,1,32],"826":[1,1,46],"827":[5,1,40],"828":[2,5,16],"829":[8,1,45],"830":[5,1,56],"831":[3,1,41],"832":[5,1,33],"833":[6,1,53],"834":[6,1,13],"835":[3,1,17],"836":[2,1,30],"837":[2,1,37],"838":[1,1,72],"839":[12,1,130],"840":[4,1,80],"841":[3,1,22],"842":[1,1,32],"843":[2,1,1],"844":[2,1,17],"845":[3,2,11],"846":[4,2,54],"847":[4,2,32],"848":[3,2,10],"849":[3,2,36],"850":[2,1,42],"851":[3,2,40],"852":[2,2,18],"853":[2,2,18],"854":[4,2,1],"855":[2,6,11],"856":[2,6,24],"857":[2,6,25],"858":[2,6,14],"859":[1,2,18],"860":[1,1,13],"861":[2,1,23],"862":[2,1,19],"863":[2,1,21],"864":[2,1,18],"865":[2,1,14],"866":[1,1,4],"867":[1,1,19],"868":[3,1,28],"869":[4,1,28],"870":[1,1,17],"871":[3,1,10],"872":[1,1,10],"873":[2,1,15],"874":[2,1,16],"875":[2,1,15],"876":[4,1,15],"877":[1,1,7],"878":[1,1,18],"879":[3,1,1],"880":[5,3,18],"881":[5,3,21],"882":[5,3,16],"883":[6,3,14],"884":[2,1,18],"885":[4,1,14],"886":[1,1,4]},"averageFieldLength":[2.5490417136414893,2.459977452085683,27.72942502818489],"storedFields":{"0":{"title":"API Reference","titles":[]},"1":{"title":"Structure","titles":["API Reference"]},"2":{"title":"Philosophy","titles":["API Reference"]},"3":{"title":"Config API","titles":[]},"4":{"title":"Constructor","titles":[]},"5":{"title":"Getters","titles":[]},"6":{"title":"get_string","titles":["Getters"]},"7":{"title":"get_int","titles":["Getters"]},"8":{"title":"get_bool","titles":["Getters"]},"9":{"title":"get_double","titles":["Getters"]},"10":{"title":"Dot Path Access","titles":[]},"11":{"title":"Minimal Usage Example","titles":[]},"12":{"title":"Environment Override Pattern","titles":[]},"13":{"title":"Design Notes","titles":[]},"14":{"title":"HTTP API","titles":[]},"15":{"title":"App","titles":[]},"16":{"title":"Constructor","titles":["App"]},"17":{"title":"Run","titles":["App"]},"18":{"title":"Routing Methods","titles":[]},"19":{"title":"GET","titles":["Routing Methods"]},"20":{"title":"POST","titles":["Routing Methods"]},"21":{"title":"PUT","titles":["Routing Methods"]},"22":{"title":"DELETE","titles":["Routing Methods"]},"23":{"title":"Minimal Example","titles":["Routing Methods"]},"24":{"title":"Request","titles":[]},"25":{"title":"Path parameter","titles":["Request"]},"26":{"title":"Query parameter","titles":["Request"]},"27":{"title":"Headers","titles":["Request"]},"28":{"title":"Body","titles":["Request"]},"29":{"title":"JSON","titles":["Request"]},"30":{"title":"Response","titles":[]},"31":{"title":"Status","titles":["Response"]},"32":{"title":"Send text","titles":["Response"]},"33":{"title":"Send JSON","titles":["Response"]},"34":{"title":"Auto-send return","titles":["Response"]},"35":{"title":"Behavior Notes","titles":[]},"36":{"title":"Design Philosophy","titles":[]},"37":{"title":"API Reference","titles":[]},"38":{"title":"Structure","titles":["API Reference"]},"39":{"title":"Philosophy","titles":["API Reference"]},"40":{"title":"JSON API","titles":[]},"41":{"title":"1) Simple JSON","titles":[]},"42":{"title":"token","titles":["1) Simple JSON"]},"43":{"title":"array_t","titles":["1) Simple JSON"]},"44":{"title":"kvs","titles":["1) Simple JSON"]},"45":{"title":"2) High-Level JSON","titles":[]},"46":{"title":"Object Builder","titles":["2) High-Level JSON"]},"47":{"title":"Array Builder","titles":["2) High-Level JSON"]},"48":{"title":"kv initializer","titles":["2) High-Level JSON"]},"49":{"title":"dumps","titles":["2) High-Level JSON"]},"50":{"title":"loads","titles":["2) High-Level JSON"]},"51":{"title":"File IO","titles":["2) High-Level JSON"]},"52":{"title":"jset / jget (Path Access)","titles":["2) High-Level JSON"]},"53":{"title":"Design Notes","titles":[]},"54":{"title":"Middleware API","titles":[]},"55":{"title":"Headers","titles":[]},"56":{"title":"1) Context Middleware (Recommended)","titles":[]},"57":{"title":"Minimal Example","titles":["1) Context Middleware (Recommended)"]},"58":{"title":"Registering Middleware","titles":[]},"59":{"title":"Global","titles":["Registering Middleware"]},"60":{"title":"Prefix","titles":["Registering Middleware"]},"61":{"title":"Exact Path","titles":["Registering Middleware"]},"62":{"title":"Chaining Middleware","titles":[]},"63":{"title":"Request State Storage","titles":[]},"64":{"title":"2) Legacy HTTP Middleware","titles":[]},"65":{"title":"Adapters","titles":[]},"66":{"title":"Behavior Notes","titles":[]},"67":{"title":"async-worker","titles":[]},"68":{"title":"Run","titles":["async-worker"]},"69":{"title":"Example: timer + cpu_pool + stop","titles":["async-worker"]},"70":{"title":"Example: signals (SIGINT/SIGTERM)","titles":["async-worker"]},"71":{"title":"Example: tcp echo server (async accept/read/write)","titles":["async-worker"]},"72":{"title":"WebSocket API","titles":[]},"73":{"title":"Server","titles":[]},"74":{"title":"Constructor","titles":["Server"]},"75":{"title":"Minimal Standalone Example","titles":[]},"76":{"title":"Event Hooks","titles":[]},"77":{"title":"on_open","titles":["Event Hooks"]},"78":{"title":"on_close","titles":["Event Hooks"]},"79":{"title":"on_typed_message","titles":["Event Hooks"]},"80":{"title":"Typed Message Protocol","titles":[]},"81":{"title":"Broadcast","titles":[]},"82":{"title":"Broadcast to all","titles":["Broadcast"]},"83":{"title":"Broadcast to room","titles":["Broadcast"]},"84":{"title":"Long Polling Bridge","titles":[]},"85":{"title":"HTTP + WS Combined","titles":[]},"86":{"title":"Notes","titles":[]},"87":{"title":"Auth","titles":[]},"88":{"title":"Goal","titles":["Auth"]},"89":{"title":"Full Example","titles":["Auth"]},"90":{"title":"Test with curl","titles":["Auth"]},"91":{"title":"Notes","titles":["Auth"]},"92":{"title":"Hello HTTP","titles":[]},"93":{"title":"Minimal Hello World","titles":["Hello HTTP"]},"94":{"title":"Returning JSON","titles":["Hello HTTP"]},"95":{"title":"Auto-send Return Style","titles":["Hello HTTP"]},"96":{"title":"Status Codes","titles":["Hello HTTP"]},"97":{"title":"What this example teaches","titles":["Hello HTTP"]},"98":{"title":"Examples","titles":[]},"99":{"title":"Available Examples","titles":["Examples"]},"100":{"title":"hello-http","titles":["Examples","Available Examples"]},"101":{"title":"auth","titles":["Examples","Available Examples"]},"102":{"title":"ws-chat","titles":["Examples","Available Examples"]},"103":{"title":"async-worker","titles":["Examples","Available Examples"]},"104":{"title":"p2p-ping","titles":["Examples","Available Examples"]},"105":{"title":"Philosophy","titles":["Examples"]},"106":{"title":"WS Chat","titles":[]},"107":{"title":"Chat protocol","titles":["WS Chat"]},"108":{"title":"Full example","titles":["WS Chat"]},"109":{"title":"Test quickly","titles":["WS Chat"]},"110":{"title":"Notes","titles":["WS Chat"]},"111":{"title":"Errors","titles":[]},"112":{"title":"Basic error response","titles":["Errors"]},"113":{"title":"404 example","titles":["Errors"]},"114":{"title":"Validation error","titles":["Errors"]},"115":{"title":"Internal server error pattern","titles":["Errors"]},"116":{"title":"Error structure consistency","titles":["Errors"]},"117":{"title":"Important rules","titles":["Errors"]},"118":{"title":"Philosophy","titles":["Errors"]},"119":{"title":"Fundamentals","titles":[]},"120":{"title":"The Runtime","titles":["Fundamentals"]},"121":{"title":"The Execution Model","titles":["Fundamentals"]},"122":{"title":"The Request Object","titles":["Fundamentals"]},"123":{"title":"The Response Object","titles":["Fundamentals"]},"124":{"title":"Minimal complete example","titles":["Fundamentals"]},"125":{"title":"Design Principles","titles":["Fundamentals"]},"126":{"title":"Lifecycle","titles":[]},"127":{"title":"High-level flow","titles":["Lifecycle"]},"128":{"title":"Minimal example","titles":["Lifecycle"]},"129":{"title":"Step-by-step breakdown","titles":["Lifecycle"]},"130":{"title":"1. Route matching","titles":["Lifecycle","Step-by-step breakdown"]},"131":{"title":"2. Handler execution","titles":["Lifecycle","Step-by-step breakdown"]},"132":{"title":"3. Response finalization","titles":["Lifecycle","Step-by-step breakdown"]},"133":{"title":"Important rules","titles":["Lifecycle"]},"134":{"title":"Lifecycle philosophy","titles":["Lifecycle"]},"135":{"title":"Logging","titles":[]},"136":{"title":"Minimal logging example","titles":["Logging"]},"137":{"title":"Logging request data","titles":["Logging"]},"138":{"title":"Logging errors","titles":["Logging"]},"139":{"title":"Structured logging pattern","titles":["Logging"]},"140":{"title":"Production logging","titles":["Logging"]},"141":{"title":"Performance considerations","titles":["Logging"]},"142":{"title":"Philosophy","titles":["Logging"]},"143":{"title":"Performance","titles":[]},"144":{"title":"Minimal overhead model","titles":["Performance"]},"145":{"title":"Minimal example","titles":["Performance"]},"146":{"title":"Avoiding performance pitfalls","titles":["Performance"]},"147":{"title":"1. Avoid heavy allocations in hot paths","titles":["Performance","Avoiding performance pitfalls"]},"148":{"title":"2. Keep handlers small","titles":["Performance","Avoiding performance pitfalls"]},"149":{"title":"3. Avoid unnecessary JSON depth","titles":["Performance","Avoiding performance pitfalls"]},"150":{"title":"Hardware considerations","titles":["Performance"]},"151":{"title":"Throughput mindset","titles":["Performance"]},"152":{"title":"Benchmarking rule","titles":["Performance"]},"153":{"title":"Philosophy","titles":["Performance"]},"154":{"title":"Security","titles":[]},"155":{"title":"Basic header check","titles":["Security"]},"156":{"title":"Token validation pattern","titles":["Security"]},"157":{"title":"Input validation","titles":["Security"]},"158":{"title":"Avoid leaking internal details","titles":["Security"]},"159":{"title":"Security headers","titles":["Security"]},"160":{"title":"HTTPS","titles":["Security"]},"161":{"title":"Rate limiting and protection","titles":["Security"]},"162":{"title":"Security mindset","titles":["Security"]},"163":{"title":"Routes and Middleware","titles":[]},"164":{"title":"1) Quick start","titles":["Routes and Middleware"]},"165":{"title":"2) Core mental model","titles":["Routes and Middleware"]},"166":{"title":"Routes","titles":["Routes and Middleware","2) Core mental model"]},"167":{"title":"Middleware","titles":["Routes and Middleware","2) Core mental model"]},"168":{"title":"3) Routes","titles":["Routes and Middleware"]},"169":{"title":"3.1 Minimal route","titles":["Routes and Middleware","3) Routes"]},"170":{"title":"3.2 Return values vs using res","titles":["Routes and Middleware","3) Routes"]},"171":{"title":"Style A: explicit res.*","titles":["Routes and Middleware","3) Routes","3.2 Return values vs using res"]},"172":{"title":"Style B: return payload (auto-send)","titles":["Routes and Middleware","3) Routes","3.2 Return values vs using res"]},"173":{"title":"3.3 Path parameters","titles":["Routes and Middleware","3) Routes"]},"174":{"title":"3.4 Query parameters","titles":["Routes and Middleware","3) Routes"]},"175":{"title":"3.5 Headers","titles":["Routes and Middleware","3) Routes"]},"176":{"title":"3.6 Request body and JSON","titles":["Routes and Middleware","3) Routes"]},"177":{"title":"3.7 Status codes","titles":["Routes and Middleware","3) Routes"]},"178":{"title":"4) Organizing routes (recommended pattern)","titles":["Routes and Middleware"]},"179":{"title":"5) Middleware","titles":["Routes and Middleware"]},"180":{"title":"5.1 Context-based middleware (recommended)","titles":["Routes and Middleware","5) Middleware"]},"181":{"title":"5.2 Legacy HttpMiddleware","titles":["Routes and Middleware","5) Middleware"]},"182":{"title":"6) Where middleware runs","titles":["Routes and Middleware"]},"183":{"title":"6.1 Global middleware (runs for all routes)","titles":["Routes and Middleware","6) Where middleware runs"]},"184":{"title":"6.2 Prefix middleware (runs only for routes under a prefix)","titles":["Routes and Middleware","6) Where middleware runs"]},"185":{"title":"6.3 Exact middleware (runs only for a single route)","titles":["Routes and Middleware","6) Where middleware runs"]},"186":{"title":"7) Chaining middleware","titles":["Routes and Middleware"]},"187":{"title":"8) Using RequestState (share data across middleware and handlers)","titles":["Routes and Middleware"]},"188":{"title":"9) Common presets (what you typically want)","titles":["Routes and Middleware"]},"189":{"title":"Security headers","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"190":{"title":"CORS (dev)","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"191":{"title":"Rate limit","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"192":{"title":"JSON/Form/Multipart parsing","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"193":{"title":"API key auth (dev)","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"194":{"title":"HTTP GET cache middleware","titles":["Routes and Middleware","9) Common presets (what you typically want)"]},"195":{"title":"10) A practical layout for real projects","titles":["Routes and Middleware"]},"196":{"title":"11) Troubleshooting tips","titles":["Routes and Middleware"]},"197":{"title":"inference","titles":[]},"198":{"title":"Inference","titles":[]},"199":{"title":"Philosophy","titles":["Inference"]},"200":{"title":"Minimal inference endpoint","titles":["Inference"]},"201":{"title":"JSON-based inference","titles":["Inference"]},"202":{"title":"Architecture pattern","titles":["Inference"]},"203":{"title":"Performance mindset","titles":["Inference"]},"204":{"title":"Next steps","titles":["Inference"]},"205":{"title":"Providers","titles":[]},"206":{"title":"Minimal provider concept","titles":["Providers"]},"207":{"title":"Provider with JSON input","titles":["Providers"]},"208":{"title":"Provider selection strategy","titles":["Providers"]},"209":{"title":"Production notes","titles":["Providers"]},"210":{"title":"Common integration style","titles":["Providers"]},"211":{"title":"Philosophy","titles":["Providers"]},"212":{"title":"Reliability","titles":[]},"213":{"title":"Reliability goals","titles":["Reliability"]},"214":{"title":"Request lifecycle","titles":["Reliability"]},"215":{"title":"Timeouts","titles":["Reliability"]},"216":{"title":"Retries","titles":["Reliability"]},"217":{"title":"Idempotency","titles":["Reliability"]},"218":{"title":"Streaming reliability","titles":["Reliability"]},"219":{"title":"Circuit breaker","titles":["Reliability"]},"220":{"title":"Fallback providers","titles":["Reliability"]},"221":{"title":"Error format","titles":["Reliability"]},"222":{"title":"Limits","titles":["Reliability"]},"223":{"title":"Observability","titles":["Reliability"]},"224":{"title":"Practical checklist","titles":["Reliability"]},"225":{"title":"Routing for inference","titles":[]},"226":{"title":"Query-based inference","titles":["Routing for inference"]},"227":{"title":"JSON-based inference","titles":["Routing for inference"]},"228":{"title":"Batch inference pattern","titles":["Routing for inference"]},"229":{"title":"Input size guard","titles":["Routing for inference"]},"230":{"title":"Rule of thumb","titles":["Routing for inference"]},"231":{"title":"Streaming","titles":[]},"232":{"title":"When to use streaming","titles":["Streaming"]},"233":{"title":"Core idea","titles":["Streaming"]},"234":{"title":"Minimal HTTP example","titles":["Streaming"]},"235":{"title":"Recommended chunk format","titles":["Streaming"]},"236":{"title":"Backpressure","titles":["Streaming"]},"237":{"title":"Error handling","titles":["Streaming"]},"238":{"title":"Notes","titles":["Streaming"]},"239":{"title":"Install","titles":[]},"240":{"title":"Install Vix CLI","titles":["Install"]},"241":{"title":"Linux / macOS","titles":["Install","Install Vix CLI"]},"242":{"title":"Windows (PowerShell)","titles":["Install","Install Vix CLI"]},"243":{"title":"Build prerequisites","titles":["Install"]},"244":{"title":"Ubuntu example","titles":["Install","Build prerequisites"]},"245":{"title":"macOS (Homebrew)","titles":["Install","Build prerequisites"]},"246":{"title":"Windows","titles":["Install","Build prerequisites"]},"247":{"title":"Troubleshooting","titles":["Install"]},"248":{"title":""vix not found"","titles":["Install","Troubleshooting"]},"249":{"title":"Download failures","titles":["Install","Troubleshooting"]},"250":{"title":"Async","titles":[]},"251":{"title":"Core Concepts","titles":[]},"252":{"title":"1. Event loop and task","titles":[]},"253":{"title":"2. Timers","titles":[]},"254":{"title":"3. CPU pool","titles":[]},"255":{"title":"4. Signals","titles":[]},"256":{"title":"5. TCP server pattern","titles":[]},"257":{"title":"6. when_all and when_any","titles":[]},"258":{"title":"Execution Model","titles":[]},"259":{"title":"Recommended Usage","titles":[]},"260":{"title":"vix build","titles":[]},"261":{"title":"Usage","titles":["vix build"]},"262":{"title":"Description","titles":["vix build"]},"263":{"title":"Presets","titles":[]},"264":{"title":"Options","titles":[]},"265":{"title":"Environment Variables","titles":[]},"266":{"title":"Examples","titles":[]},"267":{"title":"Logs","titles":[]},"268":{"title":"Signature Cache","titles":[]},"269":{"title":"Fast Mode","titles":[]},"270":{"title":"Design Goals","titles":[]},"271":{"title":"vix dev","titles":[]},"272":{"title":"Usage","titles":["vix dev"]},"273":{"title":"Description","titles":["vix dev"]},"274":{"title":"Options","titles":["vix dev"]},"275":{"title":"Examples","titles":["vix dev"]},"276":{"title":"Mode Classification","titles":["vix dev"]},"277":{"title":"When To Use vix dev","titles":["vix dev"]},"278":{"title":"Design Goals","titles":["vix dev"]},"279":{"title":"vix new","titles":[]},"280":{"title":"Usage","titles":["vix new"]},"281":{"title":"Options","titles":["vix new"]},"282":{"title":"Environment Variables","titles":["vix new"]},"283":{"title":"Interactive Mode","titles":[]},"284":{"title":"Template","titles":["Interactive Mode"]},"285":{"title":"Features (Application)","titles":["Interactive Mode"]},"286":{"title":"Advanced","titles":["Interactive Mode"]},"287":{"title":"Examples","titles":[]},"288":{"title":"Output Example (Application)","titles":[]},"289":{"title":"Output Example (Library)","titles":[]},"290":{"title":"Behavior Notes","titles":[]},"291":{"title":"vix run","titles":[]},"292":{"title":"Usage","titles":["vix run"]},"293":{"title":"Modes","titles":[]},"294":{"title":"1) Project Mode","titles":["Modes"]},"295":{"title":"2) Script Mode (.cpp)","titles":["Modes"]},"296":{"title":"3) Manifest Mode (.vix)","titles":["Modes"]},"297":{"title":"Options","titles":[]},"298":{"title":"Runtime Options","titles":[]},"299":{"title":"Watch Mode","titles":[]},"300":{"title":"Script Mode Flags","titles":[]},"301":{"title":"Documentation (OpenAPI)","titles":[]},"302":{"title":"Logging","titles":[]},"303":{"title":"Compiler / Linker Flags (Script Mode)","titles":[]},"304":{"title":"Examples","titles":[]},"305":{"title":"Environment Variables","titles":[]},"306":{"title":"Design Goals","titles":[]},"307":{"title":"vix tests","titles":[]},"308":{"title":"Usage","titles":["vix tests"]},"309":{"title":"Description","titles":["vix tests"]},"310":{"title":"Test Flags","titles":[]},"311":{"title":"CTest Passthrough","titles":[]},"312":{"title":"Preset Behavior","titles":[]},"313":{"title":"Examples","titles":[]},"314":{"title":"Notes","titles":[]},"315":{"title":"vix orm","titles":[]},"316":{"title":"Usage","titles":["vix orm"]},"317":{"title":"Description","titles":["vix orm"]},"318":{"title":"Commands","titles":["vix orm"]},"319":{"title":"Migrate","titles":["vix orm","Commands"]},"320":{"title":"Rollback","titles":["vix orm","Commands"]},"321":{"title":"Status","titles":["vix orm","Commands"]},"322":{"title":"Makemigrations","titles":["vix orm","Commands"]},"323":{"title":"Common Options","titles":["vix orm"]},"324":{"title":"Environment Defaults","titles":["vix orm"]},"325":{"title":"Examples","titles":["vix orm"]},"326":{"title":"vix p2p","titles":[]},"327":{"title":"Usage","titles":["vix p2p"]},"328":{"title":"Description","titles":["vix p2p"]},"329":{"title":"Core Options","titles":["vix p2p"]},"330":{"title":"Discovery (UDP)","titles":["vix p2p"]},"331":{"title":"Bootstrap (HTTP Registry)","titles":["vix p2p"]},"332":{"title":"Logging","titles":["vix p2p"]},"333":{"title":"Examples","titles":["vix p2p"]},"334":{"title":"Typical Workflow","titles":["vix p2p"]},"335":{"title":"CLI Overview","titles":[]},"336":{"title":"Version Example","titles":["CLI Overview"]},"337":{"title":"Core Philosophy","titles":["CLI Overview"]},"338":{"title":"Command Categories","titles":[]},"339":{"title":"1. Project","titles":["Command Categories"]},"340":{"title":"2. Project Structure (Modules)","titles":["Command Categories"]},"341":{"title":"3. Network","titles":["Command Categories"]},"342":{"title":"4. Registry","titles":["Command Categories"]},"343":{"title":"5. Packaging & Security","titles":["Command Categories"]},"344":{"title":"6. Database (ORM)","titles":["Command Categories"]},"345":{"title":"7. Info","titles":["Command Categories"]},"346":{"title":"Global Options","titles":[]},"347":{"title":"Quick Start Example","titles":[]},"348":{"title":"Design Goals","titles":[]},"349":{"title":"vix install","titles":[]},"350":{"title":"Usage","titles":["vix install"]},"351":{"title":"Description","titles":["vix install"]},"352":{"title":"Options","titles":["vix install"]},"353":{"title":"Store Location","titles":["vix install"]},"354":{"title":"Examples","titles":["vix install"]},"355":{"title":"Security Notes","titles":["vix install"]},"356":{"title":"Typical Workflow","titles":["vix install"]},"357":{"title":"vix pack","titles":[]},"358":{"title":"Usage","titles":["vix pack"]},"359":{"title":"Description","titles":["vix pack"]},"360":{"title":"Options","titles":["vix pack"]},"361":{"title":"Basic Example","titles":["vix pack"]},"362":{"title":"Signing (Optional)","titles":["vix pack"]},"363":{"title":"What Gets Generated","titles":["vix pack"]},"364":{"title":"Typical Workflow","titles":["vix pack"]},"365":{"title":"vix verify","titles":[]},"366":{"title":"Usage","titles":["vix verify"]},"367":{"title":"Description","titles":["vix verify"]},"368":{"title":"Auto-detection Rules","titles":["vix verify"]},"369":{"title":"Options","titles":["vix verify"]},"370":{"title":"Signature Behavior","titles":["vix verify"]},"371":{"title":"Exit Codes","titles":["vix verify"]},"372":{"title":"Examples","titles":["vix verify"]},"373":{"title":"Typical Workflow","titles":["vix verify"]},"374":{"title":"vix add","titles":[]},"375":{"title":"Usage","titles":["vix add"]},"376":{"title":"Description","titles":["vix add"]},"377":{"title":"Sync Registry","titles":["vix add"]},"378":{"title":"Example","titles":["vix add"]},"379":{"title":"Versioning Rules","titles":["vix add"]},"380":{"title":"What Happens Internally","titles":["vix add"]},"381":{"title":"Notes","titles":["vix add"]},"382":{"title":"vix list","titles":[]},"383":{"title":"Usage","titles":["vix list"]},"384":{"title":"Description","titles":["vix list"]},"385":{"title":"Example","titles":["vix list"]},"386":{"title":"Behavior Notes","titles":["vix list"]},"387":{"title":"Typical Workflow","titles":["vix list"]},"388":{"title":"vix publish","titles":[]},"389":{"title":"Usage","titles":["vix publish"]},"390":{"title":"Description","titles":["vix publish"]},"391":{"title":"Requirements","titles":["vix publish"]},"392":{"title":"Examples","titles":["vix publish"]},"393":{"title":"Version Rules","titles":["vix publish"]},"394":{"title":"What Happens Internally","titles":["vix publish"]},"395":{"title":"Notes","titles":["vix publish"]},"396":{"title":"vix registry","titles":[]},"397":{"title":"Usage","titles":["vix registry"]},"398":{"title":"Subcommands","titles":["vix registry"]},"399":{"title":"Description","titles":["vix registry"]},"400":{"title":"First Step","titles":["vix registry"]},"401":{"title":"Examples","titles":["vix registry"]},"402":{"title":"Publishing a Package","titles":["vix registry"]},"403":{"title":"Registry Design (V1)","titles":["vix registry"]},"404":{"title":"Related Commands","titles":["vix registry"]},"405":{"title":"vix remove","titles":[]},"406":{"title":"Usage","titles":["vix remove"]},"407":{"title":"Description","titles":["vix remove"]},"408":{"title":"Examples","titles":["vix remove"]},"409":{"title":"Behavior Notes","titles":["vix remove"]},"410":{"title":"Typical Workflow","titles":["vix remove"]},"411":{"title":"vix search","titles":[]},"412":{"title":"Usage","titles":["vix search"]},"413":{"title":"Description","titles":["vix search"]},"414":{"title":"Sync Registry","titles":["vix search"]},"415":{"title":"Examples","titles":["vix search"]},"416":{"title":"Behavior Notes","titles":["vix search"]},"417":{"title":"Design Goals","titles":["vix search"]},"418":{"title":"REPL","titles":[]},"419":{"title":"Start the REPL","titles":["REPL"]},"420":{"title":"Basic Math","titles":["REPL"]},"421":{"title":"Variables","titles":["REPL"]},"422":{"title":"Arrays","titles":["REPL"]},"423":{"title":"Objects","titles":["REPL"]},"424":{"title":"Built-in Commands","titles":["REPL"]},"425":{"title":"History","titles":["REPL"]},"426":{"title":"Behavior Notes","titles":["REPL"]},"427":{"title":"When To Use REPL","titles":["REPL"]},"428":{"title":"Conversion","titles":[]},"429":{"title":"Include","titles":["Conversion"]},"430":{"title":"Result model","titles":[]},"431":{"title":"to_bool","titles":[]},"432":{"title":"to_int","titles":[]},"433":{"title":"to_float","titles":[]},"434":{"title":"to_enum","titles":[]},"435":{"title":"to_string","titles":[]},"436":{"title":"parse<T>","titles":[]},"437":{"title":"Notes","titles":[]},"438":{"title":"HTTP","titles":[]},"439":{"title":"Setting status codes","titles":["HTTP"]},"440":{"title":"Setting headers","titles":["HTTP"]},"441":{"title":"Sending plain text","titles":["HTTP"]},"442":{"title":"Sending JSON","titles":["HTTP"]},"443":{"title":"Reading request headers","titles":["HTTP"]},"444":{"title":"Checking header existence","titles":["HTTP"]},"445":{"title":"Raw body access","titles":["HTTP"]},"446":{"title":"Content behavior rule","titles":["HTTP"]},"447":{"title":"App","titles":[]},"448":{"title":"Quick Start","titles":["App"]},"449":{"title":"Lifecycle","titles":["App"]},"450":{"title":"run(port)","titles":["App","Lifecycle"]},"451":{"title":"listen(port, on_listen)","titles":["App","Lifecycle"]},"452":{"title":"close() and wait()","titles":["App","Lifecycle"]},"453":{"title":"Routing","titles":["App"]},"454":{"title":"Handler Signatures","titles":["App","Routing"]},"455":{"title":"Auto-send Behavior","titles":["App"]},"456":{"title":"Middleware","titles":["App"]},"457":{"title":"Groups","titles":["App"]},"458":{"title":"Static Files","titles":["App"]},"459":{"title":"Dev Mode","titles":["App"]},"460":{"title":"Executor and Concurrency","titles":["App"]},"461":{"title":"Signal-safe Stop","titles":["App"]},"462":{"title":"Introspection","titles":["App"]},"463":{"title":"Notes","titles":["App"]},"464":{"title":"Configuration","titles":[]},"465":{"title":"1. Config file format","titles":[]},"466":{"title":"2. Loading config","titles":[]},"467":{"title":"Singleton access","titles":["2. Loading config"]},"468":{"title":"3. Typed getters with defaults","titles":[]},"469":{"title":"4. Dot-path lookup","titles":[]},"470":{"title":"5. Convenience getters (server, logging, waf)","titles":[]},"471":{"title":"6. Environment override (DB password)","titles":[]},"472":{"title":"7. Defaults and validation behavior","titles":[]},"473":{"title":"Best practices","titles":[]},"474":{"title":"Vix Console (core)","titles":[]},"475":{"title":"Goals (what Vix Console guarantees)","titles":["Vix Console (core)"]},"476":{"title":"Non-goals (what it is not)","titles":["Vix Console (core)"]},"477":{"title":"What Vix Console is NOT (by design)","titles":["Vix Console (core)"]},"478":{"title":"Quick start","titles":["Vix Console (core)"]},"479":{"title":"API and semantics","titles":["Vix Console (core)"]},"480":{"title":"Methods","titles":["Vix Console (core)","API and semantics"]},"481":{"title":"Level policy","titles":["Vix Console (core)","API and semantics"]},"482":{"title":"Environment variables (read once, stable)","titles":["Vix Console (core)"]},"483":{"title":"VIX_CONSOLE_LEVEL","titles":["Vix Console (core)","Environment variables (read once, stable)"]},"484":{"title":"Color control","titles":["Vix Console (core)","Environment variables (read once, stable)"]},"485":{"title":"Performance model (critical contract)","titles":["Vix Console (core)"]},"486":{"title":"The golden rule","titles":["Vix Console (core)","Performance model (critical contract)"]},"487":{"title":"Practical guidance","titles":["Vix Console (core)","Performance model (critical contract)"]},"488":{"title":"Thread safety and atomic lines","titles":["Vix Console (core)"]},"489":{"title":"Guarantee","titles":["Vix Console (core)","Thread safety and atomic lines"]},"490":{"title":"Implication","titles":["Vix Console (core)","Thread safety and atomic lines"]},"491":{"title":"I/O behavior and constraints (important)","titles":["Vix Console (core)"]},"492":{"title":"Best-effort I/O","titles":["Vix Console (core)","I/O behavior and constraints (important)"]},"493":{"title":"Flush policy","titles":["Vix Console (core)","I/O behavior and constraints (important)"]},"494":{"title":"Ordering guarantees","titles":["Vix Console (core)"]},"495":{"title":"Anti-spam protection (dev-proof)","titles":["Vix Console (core)"]},"496":{"title":"Why it exists","titles":["Vix Console (core)","Anti-spam protection (dev-proof)"]},"497":{"title":"Policy","titles":["Vix Console (core)","Anti-spam protection (dev-proof)"]},"498":{"title":"Reliability notes (crash/shutdown)","titles":["Vix Console (core)"]},"499":{"title":"Recommended usage patterns","titles":["Vix Console (core)"]},"500":{"title":"Good","titles":["Vix Console (core)","Recommended usage patterns"]},"501":{"title":"Avoid","titles":["Vix Console (core)","Recommended usage patterns"]},"502":{"title":"Integration","titles":["Vix Console (core)"]},"503":{"title":"Include","titles":["Vix Console (core)","Integration"]},"504":{"title":"Umbrella headers","titles":["Vix Console (core)","Integration"]},"505":{"title":"FAQ","titles":["Vix Console (core)"]},"506":{"title":"Is Vix Console asynchronous?","titles":["Vix Console (core)","FAQ"]},"507":{"title":"Why not auto-enable debug by default?","titles":["Vix Console (core)","FAQ"]},"508":{"title":"Why not structured JSON by default?","titles":["Vix Console (core)","FAQ"]},"509":{"title":"Summary","titles":["Vix Console (core)"]},"510":{"title":"Vix.cpp Examples Guide (Beginner Friendly)","titles":[]},"511":{"title":"Mental Model for Python / Node Developers","titles":["Vix.cpp Examples Guide (Beginner Friendly)"]},"512":{"title":"Where to Go Next","titles":["Vix.cpp Examples Guide (Beginner Friendly)"]},"513":{"title":"Executor","titles":[]},"514":{"title":"IExecutor","titles":["Executor"]},"515":{"title":"Core API","titles":["Executor","IExecutor"]},"516":{"title":"post(fn, opt)","titles":["Executor","IExecutor"]},"517":{"title":"metrics()","titles":["Executor","IExecutor"]},"518":{"title":"wait_idle()","titles":["Executor","IExecutor"]},"519":{"title":"Futures with submit","titles":["Executor"]},"520":{"title":"Rejection behavior","titles":["Executor","Futures with submit"]},"521":{"title":"TaskOptions","titles":["Executor"]},"522":{"title":"Fields","titles":["Executor","TaskOptions"]},"523":{"title":"Metrics","titles":["Executor"]},"524":{"title":"Lightweight wrappers","titles":["Executor"]},"525":{"title":"Stand","titles":["Executor","Lightweight wrappers"]},"526":{"title":"LimitedExecutor","titles":["Executor","Lightweight wrappers"]},"527":{"title":"How it fits in core","titles":["Executor"]},"528":{"title":"Practical guidance","titles":["Executor"]},"529":{"title":"Experimental: ThreadPoolExecutor","titles":[]},"530":{"title":"ThreadPoolExecutor","titles":["Experimental: ThreadPoolExecutor"]},"531":{"title":"Construction","titles":["Experimental: ThreadPoolExecutor"]},"532":{"title":"Parameters","titles":["Experimental: ThreadPoolExecutor","Construction"]},"533":{"title":"Core API","titles":["Experimental: ThreadPoolExecutor"]},"534":{"title":"post(fn, opt)","titles":["Experimental: ThreadPoolExecutor","Core API"]},"535":{"title":"metrics()","titles":["Experimental: ThreadPoolExecutor","Core API"]},"536":{"title":"wait_idle()","titles":["Experimental: ThreadPoolExecutor","Core API"]},"537":{"title":"Introspection","titles":["Experimental: ThreadPoolExecutor"]},"538":{"title":"Factory Helper","titles":["Experimental: ThreadPoolExecutor"]},"539":{"title":"How it integrates with App","titles":["Experimental: ThreadPoolExecutor"]},"540":{"title":"Design Notes","titles":["Experimental: ThreadPoolExecutor"]},"541":{"title":"When to use it","titles":["Experimental: ThreadPoolExecutor"]},"542":{"title":"HTTP","titles":[]},"543":{"title":"Setting status codes","titles":["HTTP"]},"544":{"title":"Setting headers","titles":["HTTP"]},"545":{"title":"Sending plain text","titles":["HTTP"]},"546":{"title":"Sending JSON","titles":["HTTP"]},"547":{"title":"Reading request headers","titles":["HTTP"]},"548":{"title":"Checking header existence","titles":["HTTP"]},"549":{"title":"Raw body access","titles":["HTTP"]},"550":{"title":"Content behavior rule","titles":["HTTP"]},"551":{"title":"HTTP (core)","titles":[]},"552":{"title":"IRequestHandler","titles":["HTTP (core)"]},"553":{"title":"Request","titles":["HTTP (core)"]},"554":{"title":"Path and query parsing","titles":["HTTP (core)","Request"]},"555":{"title":"Route params","titles":["HTTP (core)","Request"]},"556":{"title":"JSON caching","titles":["HTTP (core)","Request"]},"557":{"title":"RequestState","titles":["HTTP (core)"]},"558":{"title":"Response","titles":["HTTP (core)"]},"559":{"title":"HTTP date formatting","titles":["HTTP (core)","Response"]},"560":{"title":"ResponseWrapper","titles":["HTTP (core)"]},"561":{"title":"Common usage","titles":["HTTP (core)","ResponseWrapper"]},"562":{"title":"Auto default behavior","titles":["HTTP (core)","ResponseWrapper"]},"563":{"title":"Static files","titles":["HTTP (core)","ResponseWrapper"]},"564":{"title":"RequestHandler","titles":["HTTP (core)"]},"565":{"title":"Supported handler signatures","titles":["HTTP (core)","RequestHandler"]},"566":{"title":"Error handling","titles":["HTTP (core)","RequestHandler"]},"567":{"title":"Status","titles":["HTTP (core)"]},"568":{"title":"Practical guidance","titles":["HTTP (core)"]},"569":{"title":"Core Overview","titles":[]},"570":{"title":"What the core provides","titles":["Core Overview"]},"571":{"title":"Request lifecycle (end to end)","titles":["Core Overview"]},"572":{"title":"Why this architecture exists","titles":["Core Overview","Request lifecycle (end to end)"]},"573":{"title":"Core components","titles":["Core Overview"]},"574":{"title":"HTTPServer","titles":["Core Overview"]},"575":{"title":"Session","titles":["Core Overview"]},"576":{"title":"Router","titles":["Core Overview"]},"577":{"title":"Heavy routes","titles":["Core Overview","Router"]},"578":{"title":"OpenAPI and Docs","titles":["Core Overview"]},"579":{"title":"Disable auto docs","titles":["Core Overview","OpenAPI and Docs"]},"580":{"title":"Executor, ThreadPool, and timers","titles":["Core Overview"]},"581":{"title":"ThreadPool","titles":["Core Overview"]},"582":{"title":"interval() timer","titles":["Core Overview"]},"583":{"title":"Mental mapping for Node.js and Python developers","titles":["Core Overview"]},"584":{"title":"Node.js mapping (Express)","titles":["Core Overview"]},"585":{"title":"Python mapping (FastAPI)","titles":["Core Overview"]},"586":{"title":"Minimal example","titles":["Core Overview"]},"587":{"title":"Practical recommendations","titles":["Core Overview"]},"588":{"title":"Middleware (core)","titles":[]},"589":{"title":"1. Context","titles":["Middleware (core)"]},"590":{"title":"2. Services","titles":["Middleware (core)"]},"591":{"title":"3. Request-Scoped State","titles":["Middleware (core)"]},"592":{"title":"4. Next (Continuation Control)","titles":["Middleware (core)"]},"593":{"title":"5. Hooks","titles":["Middleware (core)"]},"594":{"title":"6. Result and Error","titles":["Middleware (core)"]},"595":{"title":"7. Standard Error Model","titles":["Middleware (core)"]},"596":{"title":"8. Typical Middleware Flow","titles":["Middleware (core)"]},"597":{"title":"Design Philosophy","titles":["Middleware (core)"]},"598":{"title":"When to Use Middleware","titles":["Middleware (core)"]},"599":{"title":"Summary","titles":["Middleware (core)"]},"600":{"title":"OpenAPI and Docs UI (offline Swagger)","titles":[]},"601":{"title":"What you get","titles":["OpenAPI and Docs UI (offline Swagger)"]},"602":{"title":"Core types","titles":["OpenAPI and Docs UI (offline Swagger)"]},"603":{"title":"RouteDoc","titles":["OpenAPI and Docs UI (offline Swagger)","Core types"]},"604":{"title":"OpenAPI Registry","titles":["OpenAPI and Docs UI (offline Swagger)","Core types"]},"605":{"title":"Build OpenAPI JSON","titles":["OpenAPI and Docs UI (offline Swagger)"]},"606":{"title":"Register the docs routes","titles":["OpenAPI and Docs UI (offline Swagger)"]},"607":{"title":"Offline Swagger UI behavior","titles":["OpenAPI and Docs UI (offline Swagger)"]},"608":{"title":"Heavy routes metadata","titles":["OpenAPI and Docs UI (offline Swagger)"]},"609":{"title":"Disable auto docs","titles":["OpenAPI and Docs UI (offline Swagger)"]},"610":{"title":"Minimal integration example","titles":["OpenAPI and Docs UI (offline Swagger)"]},"611":{"title":"Router (core)","titles":[]},"612":{"title":"Design Philosophy","titles":["Router (core)"]},"613":{"title":"Basic Route Registration","titles":["Router (core)"]},"614":{"title":"Route Tree Model","titles":["Router (core)"]},"615":{"title":"Path Parameters","titles":["Router (core)"]},"616":{"title":"Heavy Routes","titles":["Router (core)"]},"617":{"title":"HEAD Fallback","titles":["Router (core)"]},"618":{"title":"OPTIONS Handling","titles":["Router (core)"]},"619":{"title":"404 Handling","titles":["Router (core)"]},"620":{"title":"OpenAPI Integration","titles":["Router (core)"]},"621":{"title":"Matching Rules","titles":["Router (core)"]},"622":{"title":"Guarantees","titles":["Router (core)"]},"623":{"title":"When To Use","titles":["Router (core)"]},"624":{"title":"Summary","titles":["Router (core)"]},"625":{"title":"Routing","titles":[]},"626":{"title":"Minimal server","titles":["Routing"]},"627":{"title":"Plain text","titles":["Routing"]},"628":{"title":"JSON response","titles":["Routing"]},"629":{"title":"Nested JSON","titles":["Routing"]},"630":{"title":"Status codes","titles":["Routing"]},"631":{"title":"Path parameters","titles":["Routing"]},"632":{"title":"Query parameters","titles":["Routing"]},"633":{"title":"Headers","titles":["Routing"]},"634":{"title":"Request body","titles":["Routing"]},"635":{"title":"Raw body","titles":["Routing","Request body"]},"636":{"title":"JSON body","titles":["Routing","Request body"]},"637":{"title":"Mixed behavior","titles":["Routing"]},"638":{"title":"Rule of thumb","titles":["Routing"]},"639":{"title":"HTTP Server Guide (vix::server::HTTPServer)","titles":[]},"640":{"title":"What HTTPServer is","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"641":{"title":"Key dependencies","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"642":{"title":"Boost","titles":["HTTP Server Guide (vix::server::HTTPServer)","Key dependencies"]},"643":{"title":"Vix components","titles":["HTTP Server Guide (vix::server::HTTPServer)","Key dependencies"]},"644":{"title":"Public API","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"645":{"title":"Constructor","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"646":{"title":"run()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"647":{"title":"start_accept()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"648":{"title":"calculate_io_thread_count()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"649":{"title":"getRouter()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"650":{"title":"monitor_metrics()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"651":{"title":"stop_async()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"652":{"title":"stop_blocking()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"653":{"title":"join_threads()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"654":{"title":"bound_port()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Public API"]},"655":{"title":"Internal flow","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"656":{"title":"1) Acceptor initialization","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"657":{"title":"2) Accept loop","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"658":{"title":"3) Session creation","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"659":{"title":"4) I/O threads","titles":["HTTP Server Guide (vix::server::HTTPServer)","Internal flow"]},"660":{"title":"Typical usage","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"661":{"title":"Setup and run","titles":["HTTP Server Guide (vix::server::HTTPServer)","Typical usage"]},"662":{"title":"Graceful shutdown","titles":["HTTP Server Guide (vix::server::HTTPServer)","Typical usage"]},"663":{"title":"Notes and gotchas","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"664":{"title":"Port validation","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"665":{"title":"HEAD requests","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"666":{"title":"stop_blocking() does not stop","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"667":{"title":"close_socket()","titles":["HTTP Server Guide (vix::server::HTTPServer)","Notes and gotchas"]},"668":{"title":"How to extend","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"669":{"title":"Custom 404","titles":["HTTP Server Guide (vix::server::HTTPServer)","How to extend"]},"670":{"title":"Dedicated executors (heavy routes)","titles":["HTTP Server Guide (vix::server::HTTPServer)","How to extend"]},"671":{"title":"Checklist for production","titles":["HTTP Server Guide (vix::server::HTTPServer)"]},"672":{"title":"Session (core)","titles":[]},"673":{"title":"Architecture Role","titles":["Session (core)"]},"674":{"title":"Responsibilities","titles":["Session (core)"]},"675":{"title":"1. Asynchronous Request Reading","titles":["Session (core)","Responsibilities"]},"676":{"title":"2. Timeout Protection","titles":["Session (core)","Responsibilities"]},"677":{"title":"3. Basic WAF (Web Application Firewall)","titles":["Session (core)","Responsibilities"]},"678":{"title":"Light vs Heavy Routes","titles":["Session (core)"]},"679":{"title":"Keep-Alive Handling","titles":["Session (core)"]},"680":{"title":"Response Flow","titles":["Session (core)"]},"681":{"title":"Error Handling Guarantees","titles":["Session (core)"]},"682":{"title":"Security Safeguards","titles":["Session (core)"]},"683":{"title":"Thread Safety","titles":["Session (core)"]},"684":{"title":"Performance Model","titles":["Session (core)"]},"685":{"title":"When To Use","titles":["Session (core)"]},"686":{"title":"Summary","titles":["Session (core)"]},"687":{"title":"ThreadPool (vix::threadpool)","titles":[]},"688":{"title":"Components","titles":["ThreadPool (vix::threadpool)"]},"689":{"title":"1) Task","titles":["ThreadPool (vix::threadpool)","Components"]},"690":{"title":"2) TaskCmp","titles":["ThreadPool (vix::threadpool)","Components"]},"691":{"title":"3) TaskGuard","titles":["ThreadPool (vix::threadpool)","Components"]},"692":{"title":"4) ThreadPool","titles":["ThreadPool (vix::threadpool)","Components"]},"693":{"title":"Construction","titles":["ThreadPool (vix::threadpool)"]},"694":{"title":"Enqueueing work","titles":["ThreadPool (vix::threadpool)"]},"695":{"title":"Timeout behavior","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"696":{"title":"Return values","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"697":{"title":"Auto-scaling","titles":["ThreadPool (vix::threadpool)","Enqueueing work"]},"698":{"title":"Periodic scheduling","titles":["ThreadPool (vix::threadpool)"]},"699":{"title":"Idle waiting","titles":["ThreadPool (vix::threadpool)"]},"700":{"title":"Shutdown and lifetime","titles":["ThreadPool (vix::threadpool)"]},"701":{"title":"Platform notes","titles":["ThreadPool (vix::threadpool)"]},"702":{"title":"Linux CPU affinity","titles":["ThreadPool (vix::threadpool)","Platform notes"]},"703":{"title":"Windows macros","titles":["ThreadPool (vix::threadpool)","Platform notes"]},"704":{"title":"Usage example","titles":["ThreadPool (vix::threadpool)"]},"705":{"title":"Integration note for Vix server","titles":["ThreadPool (vix::threadpool)"]},"706":{"title":"Quick checklist","titles":["ThreadPool (vix::threadpool)"]},"707":{"title":"Timers: interval","titles":[]},"708":{"title":"Files","titles":["Timers: interval"]},"709":{"title":"Key types","titles":["Timers: interval"]},"710":{"title":"vix::timers::IntervalHandle","titles":["Timers: interval","Key types"]},"711":{"title":"API","titles":["Timers: interval"]},"712":{"title":"IntervalHandle interval(IExecutor& exec, milliseconds period, function<void()> fn, TaskOptions opt = {})","titles":["Timers: interval","API"]},"713":{"title":"Typical usage","titles":["Timers: interval"]},"714":{"title":"1) Store the handle in a long-lived owner (server, app)","titles":["Timers: interval","Typical usage"]},"715":{"title":"2) Stop explicitly","titles":["Timers: interval","Typical usage"]},"716":{"title":"Concurrency and safety","titles":["Timers: interval"]},"717":{"title":"Practical guidance","titles":["Timers: interval"]},"718":{"title":"Crypto","titles":[]},"719":{"title":"Include","titles":["Crypto"]},"720":{"title":"Result model","titles":[]},"721":{"title":"1. Hashing","titles":[]},"722":{"title":"SHA-256","titles":["1. Hashing"]},"723":{"title":"2. Randomness","titles":[]},"724":{"title":"3. Authenticated encryption (AEAD)","titles":[]},"725":{"title":"Algorithms","titles":["3. Authenticated encryption (AEAD)"]},"726":{"title":"Key and nonce sizes","titles":["3. Authenticated encryption (AEAD)"]},"727":{"title":"Seal (encrypt)","titles":["3. Authenticated encryption (AEAD)"]},"728":{"title":"Open (decrypt)","titles":["3. Authenticated encryption (AEAD)"]},"729":{"title":"4. Digital signatures","titles":[]},"730":{"title":"Algorithms","titles":["4. Digital signatures"]},"731":{"title":"Key generation","titles":["4. Digital signatures"]},"732":{"title":"Sign","titles":["4. Digital signatures"]},"733":{"title":"Verify","titles":["4. Digital signatures"]},"734":{"title":"Recommended usage","titles":[]},"735":{"title":"Database","titles":[]},"736":{"title":"1) Build and feature flags","titles":["Database"]},"737":{"title":"2) Core model","titles":["Database"]},"738":{"title":"Connection","titles":["Database","2) Core model"]},"739":{"title":"Statement","titles":["Database","2) Core model"]},"740":{"title":"ResultSet and ResultRow","titles":["Database","2) Core model"]},"741":{"title":"3) DbValue and binding","titles":["Database"]},"742":{"title":"4) Connection pool","titles":["Database"]},"743":{"title":"5) Database facade and config","titles":["Database"]},"744":{"title":"6) Minimal examples","titles":["Database"]},"745":{"title":"6.1 Connect and ping","titles":["Database","6) Minimal examples"]},"746":{"title":"6.2 Transaction, create table, insert, query","titles":["Database","6) Minimal examples"]},"747":{"title":"6.3 Prepared SELECT with parameter","titles":["Database","6) Minimal examples"]},"748":{"title":"7) Transactions","titles":["Database"]},"749":{"title":"8) Migrations","titles":["Database"]},"750":{"title":"Code migrations","titles":["Database","8) Migrations"]},"751":{"title":"File migrations","titles":["Database","8) Migrations"]},"752":{"title":"9) Drivers overview","titles":["Database"]},"753":{"title":"SQLite driver","titles":["Database","9) Drivers overview"]},"754":{"title":"MySQL driver","titles":["Database","9) Drivers overview"]},"755":{"title":"10) Schema utilities","titles":["Database"]},"756":{"title":"11) Common errors","titles":["Database"]},"757":{"title":"Deploy (Vix.cpp)","titles":[]},"758":{"title":"Goal","titles":["Deploy (Vix.cpp)"]},"759":{"title":"Folder layout","titles":["Deploy (Vix.cpp)"]},"760":{"title":"1) Build and copy the binary","titles":["Deploy (Vix.cpp)"]},"761":{"title":"Option A: build locally, copy to server","titles":["Deploy (Vix.cpp)","1) Build and copy the binary"]},"762":{"title":"Option B: build on the server","titles":["Deploy (Vix.cpp)","1) Build and copy the binary"]},"763":{"title":"2) systemd service","titles":["Deploy (Vix.cpp)"]},"764":{"title":"Logs","titles":["Deploy (Vix.cpp)","2) systemd service"]},"765":{"title":"3) Open the port (firewall)","titles":["Deploy (Vix.cpp)"]},"766":{"title":"4) Nginx reverse proxy (recommended)","titles":["Deploy (Vix.cpp)"]},"767":{"title":"5) TLS with Certbot (optional)","titles":["Deploy (Vix.cpp)"]},"768":{"title":"6) Deploy update workflow (simple and safe)","titles":["Deploy (Vix.cpp)"]},"769":{"title":"7) Health check ideas","titles":["Deploy (Vix.cpp)"]},"770":{"title":"Common issues","titles":["Deploy (Vix.cpp)"]},"771":{"title":"Service starts then exits","titles":["Deploy (Vix.cpp)","Common issues"]},"772":{"title":"Permission errors (static files, uploads)","titles":["Deploy (Vix.cpp)","Common issues"]},"773":{"title":"Wrong client IP inside the app","titles":["Deploy (Vix.cpp)","Common issues"]},"774":{"title":"Minimal checklist","titles":["Deploy (Vix.cpp)"]},"775":{"title":"JSON","titles":[]},"776":{"title":"1) Simple JSON","titles":[]},"777":{"title":"token","titles":["1) Simple JSON"]},"778":{"title":"array_t","titles":["1) Simple JSON"]},"779":{"title":"kvs (object)","titles":["1) Simple JSON"]},"780":{"title":"Nested structures","titles":["1) Simple JSON"]},"781":{"title":"Merge and erase","titles":["1) Simple JSON"]},"782":{"title":"2) High-level JSON (nlohmann powered)","titles":[]},"783":{"title":"Object + array builders","titles":["2) High-level JSON (nlohmann powered)"]},"784":{"title":"File IO","titles":["2) High-level JSON (nlohmann powered)"]},"785":{"title":"JPath navigation","titles":["2) High-level JSON (nlohmann powered)"]},"786":{"title":"When to use which","titles":[]},"787":{"title":"Middleware","titles":[]},"788":{"title":"Context-based middleware (recommended)","titles":["Middleware"]},"789":{"title":"Legacy HTTP middleware","titles":["Middleware"]},"790":{"title":"Prefix middleware","titles":["Middleware"]},"791":{"title":"Exact-path middleware","titles":["Middleware"]},"792":{"title":"Chaining and early return","titles":["Middleware"]},"793":{"title":"RequestState (store data across middleware and handlers)","titles":["Middleware"]},"794":{"title":"Notes","titles":["Middleware"]},"795":{"title":"ORM","titles":[]},"796":{"title":"Concepts","titles":["ORM"]},"797":{"title":"1) Connection pool + basic insert (transaction)","titles":["ORM"]},"798":{"title":"2) QueryBuilder UPDATE","titles":["ORM"]},"799":{"title":"3) Repository CRUD","titles":["ORM"]},"800":{"title":"4) UnitOfWork","titles":["ORM"]},"801":{"title":"Common errors","titles":["ORM"]},"802":{"title":"p2p-ping","titles":[]},"803":{"title":"Run","titles":["p2p-ping"]},"804":{"title":"Example","titles":["p2p-ping"]},"805":{"title":"Notes","titles":["p2p-ping"]},"806":{"title":"p2p-ping","titles":[]},"807":{"title":"Run","titles":["p2p-ping"]},"808":{"title":"Example","titles":["p2p-ping"]},"809":{"title":"Notes","titles":["p2p-ping"]},"810":{"title":"Time","titles":[]},"811":{"title":"1. Date","titles":[]},"812":{"title":"Create current date","titles":["1. Date"]},"813":{"title":"Parse a date","titles":["1. Date"]},"814":{"title":"Convert Date to Timestamp (start of day UTC)","titles":["1. Date"]},"815":{"title":"2. DateTime (UTC)","titles":[]},"816":{"title":"Current UTC datetime","titles":["2. DateTime (UTC)"]},"817":{"title":"Parse ISO-8601 (UTC Z)","titles":["2. DateTime (UTC)"]},"818":{"title":"3. Timestamp","titles":[]},"819":{"title":"Get current timestamp","titles":["3. Timestamp"]},"820":{"title":"Timestamp arithmetic","titles":["3. Timestamp"]},"821":{"title":"4. Duration","titles":[]},"822":{"title":"Create durations","titles":["4. Duration"]},"823":{"title":"Inspect duration","titles":["4. Duration"]},"824":{"title":"5. Measuring elapsed time (SteadyClock)","titles":[]},"825":{"title":"Recommended Usage","titles":[]},"826":{"title":"Validation","titles":[]},"827":{"title":"1. Validating a simple value","titles":[]},"828":{"title":"Numeric example","titles":["1. Validating a simple value"]},"829":{"title":"2. Parsed validation (string → typed value)","titles":[]},"830":{"title":"3. Schema-based struct validation","titles":[]},"831":{"title":"4. BaseModel pattern","titles":[]},"832":{"title":"5. Custom cross-field validation","titles":[]},"833":{"title":"6. Validating HTTP-style form input","titles":[]},"834":{"title":"7. Allowed values (in_set)","titles":[]},"835":{"title":"8. Optional values","titles":[]},"836":{"title":"Error Model","titles":[]},"837":{"title":"Recommended Usage","titles":[]},"838":{"title":"WebSocket","titles":[]},"839":{"title":"1) HTTP + WS in one process (with long polling bridge)","titles":["WebSocket"]},"840":{"title":"2) Standalone WebSocket server","titles":["WebSocket"]},"841":{"title":"Minimal client message","titles":["WebSocket"]},"842":{"title":"Notes","titles":["WebSocket"]},"843":{"title":"project-setup","titles":[]},"844":{"title":"Project setup","titles":[]},"845":{"title":"1. Minimal structure","titles":["Project setup"]},"846":{"title":"2. main.cpp example","titles":["Project setup"]},"847":{"title":"3. Minimal CMakeLists.txt","titles":["Project setup"]},"848":{"title":"4. Build manually","titles":["Project setup"]},"849":{"title":"5. Scaling later","titles":["Project setup"]},"850":{"title":"Quick start","titles":[]},"851":{"title":"1. Minimal server","titles":["Quick start"]},"852":{"title":"2. Run","titles":["Quick start"]},"853":{"title":"3. Test","titles":["Quick start"]},"854":{"title":"4. Minimal route examples","titles":["Quick start"]},"855":{"title":"Plain text","titles":["Quick start","4. Minimal route examples"]},"856":{"title":"Path parameter","titles":["Quick start","4. Minimal route examples"]},"857":{"title":"Query parameter","titles":["Quick start","4. Minimal route examples"]},"858":{"title":"Status code","titles":["Quick start","4. Minimal route examples"]},"859":{"title":"Philosophy","titles":["Quick start"]},"860":{"title":"Consulting","titles":[]},"861":{"title":"Architecture Design","titles":["Consulting"]},"862":{"title":"Performance Optimization","titles":["Consulting"]},"863":{"title":"Migration Strategy","titles":["Consulting"]},"864":{"title":"Codebase Audit","titles":["Consulting"]},"865":{"title":"Engagement Models","titles":["Consulting"]},"866":{"title":"Contact","titles":["Consulting"]},"867":{"title":"Services","titles":[]},"868":{"title":"What We Offer","titles":["Services"]},"869":{"title":"Who It’s For","titles":["Services"]},"870":{"title":"Philosophy","titles":["Services"]},"871":{"title":"Available Service Categories","titles":["Services"]},"872":{"title":"Support","titles":[]},"873":{"title":"Production Support","titles":["Support"]},"874":{"title":"Priority Channels","titles":["Support"]},"875":{"title":"SLA Options","titles":["Support"]},"876":{"title":"What Is Not Included","titles":["Support"]},"877":{"title":"Contact","titles":["Support"]},"878":{"title":"Training","titles":[]},"879":{"title":"Core Training Tracks","titles":["Training"]},"880":{"title":"1. Modern C++ Backend Foundations","titles":["Training","Core Training Tracks"]},"881":{"title":"2. Async & Concurrency Mastery","titles":["Training","Core Training Tracks"]},"882":{"title":"3. Database & ORM Systems","titles":["Training","Core Training Tracks"]},"883":{"title":"4. P2P & Offline-First Architecture","titles":["Training","Core Training Tracks"]},"884":{"title":"Format Options","titles":["Training"]},"885":{"title":"Who This Is For","titles":["Training"]},"886":{"title":"Contact","titles":["Training"]}},"dirtCount":0,"index":[["$scheme",{"2":{"766":1}}],["$proxy",{"2":{"766":1}}],["$path",{"2":{"241":1}}],["$remote",{"2":{"766":1}}],["$host",{"2":{"766":1}}],["└──",{"2":{"614":3}}],["z",{"0":{"817":1}}],["zip",{"2":{"360":1,"361":1}}],["zeroize",{"2":{"734":1}}],["zero",{"2":{"36":1,"151":1,"278":1,"348":1,"420":2,"475":2,"486":1,"509":1,"740":1}}],["✔",{"2":{"288":1,"289":1}}],["~irequesthandler",{"2":{"552":1}}],["~iexecutor",{"2":{"515":1}}],["~",{"2":{"241":1,"248":1,"353":1,"390":1}}],["|",{"2":{"241":1,"242":1,"264":8,"274":5,"332":6,"346":5,"360":2}}],["||",{"2":{"228":2}}],["9003",{"2":{"805":1,"809":1}}],["9002",{"2":{"333":1,"334":1,"805":1,"809":1}}],["9001",{"2":{"333":6,"334":2,"804":1,"808":1}}],["9090",{"2":{"71":2,"256":1}}],["9",{"0":{"188":1,"752":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"753":1,"754":1}}],["64",{"2":{"526":1,"830":1}}],["65535",{"2":{"472":1,"664":1}}],["6",{"0":{"176":1,"182":1,"183":1,"184":1,"185":1,"257":1,"344":1,"471":1,"594":1,"744":1,"745":1,"746":1,"747":1,"768":1,"833":1},"1":{"183":1,"184":1,"185":1,"745":1,"746":1,"747":1}}],["60",{"2":{"108":1,"839":1}}],["yyyy",{"2":{"813":1,"817":1}}],["yet",{"2":{"455":1,"646":1,"654":1}}],["yes",{"2":{"431":1}}],["year",{"2":{"173":3}}],["y",{"2":{"244":1,"762":1,"766":1,"767":1}}],["yourself",{"2":{"501":1}}],["your",{"2":{"127":1,"131":1,"152":1,"178":1,"199":2,"203":1,"208":1,"219":1,"234":1,"239":1,"241":1,"246":1,"248":1,"249":2,"251":1,"259":1,"276":1,"364":1,"376":1,"387":1,"390":1,"391":1,"395":1,"402":1,"470":1,"472":1,"501":1,"512":1,"541":3,"581":1,"600":1,"603":1,"609":1,"610":1,"669":1,"671":2,"706":1,"717":1,"734":1,"743":2,"758":1,"759":1,"761":2,"766":1,"767":2,"768":2,"773":1,"787":1,"799":1,"805":2,"809":2,"847":1,"849":1,"850":1,"852":1,"863":1,"875":1,"884":1}}],["you",{"0":{"188":1,"601":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1},"2":{"36":1,"92":1,"95":1,"111":1,"118":1,"119":1,"121":1,"122":1,"123":3,"127":1,"131":2,"132":4,"135":1,"142":1,"144":1,"153":1,"154":1,"159":1,"161":1,"166":1,"167":1,"171":1,"172":1,"179":1,"182":1,"186":1,"204":1,"205":1,"209":1,"210":1,"211":1,"217":2,"220":2,"223":1,"225":1,"232":1,"236":1,"243":1,"252":1,"258":1,"276":1,"290":1,"376":1,"391":1,"402":1,"413":1,"416":1,"418":1,"420":1,"426":1,"437":2,"438":2,"466":1,"467":1,"501":1,"510":3,"511":1,"520":1,"541":2,"542":2,"552":2,"562":1,"570":1,"572":3,"574":1,"579":1,"581":1,"589":1,"609":1,"613":1,"616":1,"620":1,"637":1,"638":2,"652":1,"666":1,"671":1,"685":1,"696":1,"712":1,"717":1,"722":1,"728":2,"735":2,"736":1,"743":1,"750":1,"751":1,"754":1,"757":2,"763":1,"765":2,"768":3,"773":1,"775":2,"786":6,"787":1,"788":1,"790":1,"793":1,"797":1,"798":1,"800":1,"805":1,"809":1,"838":1,"839":1,"840":1,"849":1,"852":1,"859":2,"861":1,"863":2}}],["qb",{"2":{"798":4}}],["q",{"2":{"174":4,"264":1,"274":1,"510":3,"632":4,"846":3,"857":4}}],["q=vix",{"2":{"164":1,"510":1,"632":2,"857":1}}],["queued",{"2":{"717":1}}],["queue",{"2":{"465":1,"469":1,"516":1,"522":1,"687":1,"689":2,"690":2,"697":1,"700":1,"742":1}}],["queries",{"2":{"413":1}}],["querybuilder",{"0":{"798":1},"2":{"798":2}}],["query>",{"2":{"342":1,"404":1,"412":1}}],["query",{"0":{"26":1,"174":1,"226":1,"554":1,"632":1,"746":1,"857":1},"2":{"24":1,"26":1,"114":1,"122":1,"131":1,"157":1,"174":5,"200":1,"206":1,"226":2,"510":4,"551":1,"553":4,"554":3,"564":1,"622":1,"632":3,"739":1,"740":1,"787":1,"846":3,"857":1,"862":1,"882":1}}],["quiet",{"2":{"264":1,"274":1,"302":1,"329":1,"346":1}}],["quick",{"0":{"164":1,"347":1,"448":1,"478":1,"706":1,"850":1},"1":{"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1},"2":{"426":1,"474":1,"500":1}}],["quickly",{"0":{"109":1},"2":{"218":1,"418":1,"427":1,"587":1}}],["quot",{"0":{"248":2},"2":{"87":2,"106":6,"130":2,"212":2,"456":6,"510":2,"520":2,"558":4,"567":2,"584":2,"607":2,"614":2,"615":2,"690":2,"769":2,"805":4,"809":4}}],["8601",{"0":{"817":1}}],["80",{"2":{"765":1,"766":1}}],["8080",{"2":{"7":1,"11":1,"12":1,"17":1,"23":1,"57":1,"64":1,"89":1,"90":3,"93":2,"94":1,"95":1,"96":1,"109":2,"112":1,"113":1,"114":1,"115":1,"120":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"164":4,"166":1,"178":1,"194":3,"195":1,"196":1,"200":1,"201":1,"206":1,"207":1,"226":2,"227":1,"228":1,"229":1,"234":1,"275":1,"331":1,"439":1,"440":2,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"450":1,"451":1,"465":1,"468":1,"478":2,"510":4,"543":1,"544":2,"545":1,"546":1,"547":1,"548":1,"549":1,"586":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":2,"632":2,"633":2,"635":1,"636":1,"637":1,"763":1,"765":1,"766":1,"769":1,"774":1,"788":2,"789":3,"790":4,"791":1,"792":4,"793":3,"846":1,"851":1,"853":2,"856":1,"857":1}}],["8",{"0":{"187":1,"596":1,"749":1,"835":1},"1":{"750":1,"751":1},"2":{"75":1,"266":1,"746":1,"797":1,"798":1,"799":1,"800":1,"830":1,"831":1,"840":1}}],["7231",{"2":{"559":1}}],["7",{"0":{"177":1,"186":1,"345":1,"472":1,"595":1,"748":1,"769":1,"834":1},"2":{"69":1,"254":1,"421":1,"432":1}}],[">name",{"2":{"799":1}}],[">next",{"2":{"746":1,"747":1}}],[">get",{"2":{"785":1}}],[">prepare",{"2":{"747":1}}],[">ping",{"2":{"745":1}}],[">row",{"2":{"746":1,"747":1}}],[">query",{"2":{"746":1,"747":1}}],[">bind",{"2":{"746":3,"747":1,"797":3,"798":1,"800":3}}],[">exec",{"2":{"746":2,"751":2,"797":1,"798":1,"800":1}}],[">setnotfoundhandler",{"2":{"669":1}}],[">session",{"2":{"108":1,"839":1}}],[">add",{"2":{"661":1}}],[">async",{"2":{"71":4,"256":2}}],[">>",{"2":{"515":1,"661":1}}],[">>>",{"2":{"419":1,"420":4,"421":5,"422":2,"423":3,"425":2}}],[">close",{"2":{"71":2}}],[">is",{"2":{"71":1}}],[">=",{"2":{"69":1,"177":1,"746":1}}],[">",{"2":{"69":1,"70":2,"71":1,"229":1,"263":3,"399":1,"456":2,"515":2,"534":1,"747":1,"799":1}}],["+x",{"2":{"761":1,"762":1,"768":1}}],["+=",{"2":{"69":1,"108":1,"254":1,"712":2,"839":1}}],["++i",{"2":{"69":1,"234":1,"254":1,"778":1,"798":1,"824":1}}],["+",{"0":{"69":2,"85":1,"783":1,"797":1,"839":1},"2":{"108":2,"113":1,"173":1,"200":1,"206":1,"213":1,"226":1,"262":2,"263":3,"266":1,"300":1,"306":1,"313":1,"326":2,"360":1,"407":1,"420":2,"421":2,"481":3,"510":1,"553":1,"570":3,"571":1,"576":1,"605":1,"610":1,"611":1,"631":1,"643":1,"712":1,"715":1,"734":1,"788":2,"798":1,"815":1,"820":1,"838":1,"839":2,"846":1}}],["31",{"2":{"799":1}}],["32>",{"2":{"722":1,"723":1,"727":1}}],["32",{"2":{"661":1,"722":1,"726":1}}],["37020",{"2":{"330":1}}],["304",{"2":{"562":1}}],["30",{"2":{"215":1,"779":1,"799":1,"817":1}}],["300",{"2":{"177":1,"465":1}}],["3",{"0":{"132":1,"149":1,"168":1,"169":1,"170":1,"173":2,"174":1,"175":1,"176":1,"177":1,"185":1,"254":1,"296":1,"341":1,"468":1,"591":1,"658":1,"677":1,"691":1,"724":1,"741":1,"747":1,"765":1,"799":1,"818":1,"830":1,"847":1,"853":1,"882":1},"1":{"169":1,"170":1,"171":2,"172":2,"173":1,"174":1,"175":1,"176":1,"177":1,"725":1,"726":1,"727":1,"728":1,"819":1,"820":1},"2":{"47":1,"216":1,"234":1,"243":1,"245":1,"385":1,"420":2,"421":2,"422":2,"425":1,"433":1,"436":1,"600":1,"601":2,"777":1,"783":2,"797":2,"799":1,"800":1,"847":1}}],["3306",{"2":{"10":1,"465":1,"745":1,"746":1,"747":1,"751":1,"797":1,"798":1,"799":1,"800":1}}],["24",{"2":{"875":1}}],["29",{"2":{"798":1}}],["22",{"2":{"751":1,"800":1}}],["26",{"2":{"423":2}}],["250",{"2":{"804":1,"808":1,"822":1}}],["250ms",{"2":{"715":1}}],["255",{"2":{"746":1,"751":1}}],["25",{"2":{"194":1,"797":1,"829":1}}],["256",{"0":{"722":1},"2":{"108":1,"718":1,"722":1,"725":1,"726":1,"727":1,"734":2,"839":1}}],["2",{"0":{"45":1,"64":1,"131":1,"148":1,"165":1,"170":1,"181":1,"184":1,"253":1,"295":1,"340":1,"466":1,"590":1,"657":1,"676":1,"690":1,"715":1,"723":1,"737":1,"746":1,"763":1,"782":1,"798":1,"815":1,"829":1,"840":1,"846":1,"852":1,"881":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"166":1,"167":1,"171":1,"172":1,"467":1,"738":1,"739":1,"740":1,"764":1,"783":1,"784":1,"785":1,"816":1,"817":1},"2":{"47":1,"49":1,"51":1,"108":1,"215":1,"216":1,"228":1,"234":1,"334":1,"385":1,"392":3,"393":3,"402":4,"420":4,"422":2,"425":1,"746":2,"783":2,"784":2,"785":3,"797":2,"799":1,"800":1,"839":1}}],["204",{"2":{"562":1,"567":1,"618":1}}],["20+",{"2":{"243":1}}],["2026",{"2":{"173":1,"751":1,"813":1,"817":1}}],["20",{"2":{"172":1,"746":1,"784":1,"847":2}}],["20000",{"2":{"465":1}}],["2000",{"2":{"330":1,"465":1,"468":1}}],["200",{"2":{"35":1,"95":1,"123":1,"177":3,"439":1,"543":1,"561":1,"562":1,"567":1,"605":1,"771":1}}],["201",{"2":{"31":1,"96":1,"171":2,"172":1,"439":1,"453":1,"510":2,"543":1,"567":1,"630":1,"637":1}}],["48",{"2":{"875":1}}],["443",{"2":{"765":1}}],["413",{"2":{"229":1}}],["4xx",{"2":{"222":1}}],["4",{"0":{"174":1,"178":1,"255":1,"342":1,"469":1,"592":1,"659":1,"692":1,"729":1,"742":1,"766":1,"800":1,"821":1,"831":1,"848":1,"854":1,"883":1},"1":{"730":1,"731":1,"732":1,"733":1,"822":1,"823":1,"855":1,"856":1,"857":1,"858":1},"2":{"75":1,"234":1,"420":3,"421":1,"422":2,"538":1,"661":1,"693":1,"751":1,"840":1,"875":1}}],["400",{"2":{"112":1,"114":1,"116":3,"157":1,"167":1,"216":1,"226":1,"227":1,"228":1,"510":1,"567":1}}],["403",{"2":{"87":1,"89":1,"156":1,"167":1,"196":1,"216":1,"792":1}}],["401",{"2":{"87":1,"89":1,"101":1,"155":1,"167":1,"181":1,"196":1,"216":1,"589":1,"594":1,"595":1,"789":1,"790":1,"791":1,"792":1,"793":1}}],["4096",{"2":{"71":1,"465":1}}],["404",{"0":{"113":1,"619":1,"669":1},"2":{"31":1,"113":1,"173":1,"216":1,"567":2,"576":1,"611":1,"630":1,"631":1,"645":1,"846":1,"858":1}}],["422",{"2":{"216":1}}],["429",{"2":{"216":1}}],["42",{"2":{"42":1,"63":1,"130":2,"164":1,"173":1,"435":1,"478":1,"510":1,"519":1,"557":1,"591":1,"629":1,"631":2,"777":1,"856":1}}],["kp",{"2":{"731":4,"732":1,"733":1}}],["k=v>",{"2":{"298":1}}],["k",{"2":{"108":2,"781":2,"839":2}}],["keeping",{"2":{"435":1,"798":1}}],["keeps",{"2":{"126":1,"325":1,"403":1,"410":1,"471":1,"483":1,"679":1,"690":1,"705":1,"707":1,"796":1}}],["keep",{"0":{"148":1,"679":1},"2":{"110":1,"116":1,"151":1,"160":1,"178":1,"199":2,"202":1,"210":1,"218":1,"225":1,"230":1,"234":1,"238":1,"473":1,"487":1,"510":1,"512":1,"528":1,"564":1,"568":1,"571":1,"575":1,"582":1,"587":3,"598":1,"638":1,"661":1,"672":1,"679":1,"680":1,"686":1,"689":1,"706":1,"717":1,"748":1,"772":1,"794":1,"805":1,"809":1,"838":1,"842":1}}],["kept",{"2":{"67":1,"802":1,"806":1}}],["keygen",{"2":{"731":1}}],["keywords",{"2":{"677":1}}],["keyed",{"2":{"557":1,"576":1}}],["keys",{"2":{"44":1,"354":1,"362":1,"372":2,"590":1,"723":1,"734":2,"781":1}}],["key",{"0":{"193":1,"641":1,"709":1,"726":1,"731":1},"1":{"642":1,"643":1,"710":1},"2":{"43":1,"44":9,"91":1,"108":2,"174":1,"184":2,"193":2,"217":1,"222":1,"352":1,"355":1,"362":2,"369":1,"370":2,"372":1,"468":1,"472":1,"574":1,"575":1,"576":1,"581":1,"621":1,"687":1,"723":2,"726":2,"727":3,"728":3,"729":1,"731":2,"732":1,"733":2,"734":2,"738":1,"739":1,"746":1,"751":1,"776":1,"790":10,"839":2}}],["kv|json|json",{"2":{"302":1}}],["kv",{"0":{"48":1},"2":{"48":1,"108":1,"476":1,"782":1,"839":1}}],["kvs",{"0":{"44":1,"779":1},"2":{"41":1,"44":1,"75":1,"79":1,"108":5,"776":1,"779":1,"780":2,"781":2,"839":5,"840":1}}],["kinds",{"2":{"42":1,"296":1,"692":1}}],["utc",{"0":{"814":1,"815":1,"816":1,"817":1},"1":{"816":1,"817":1},"2":{"810":1,"811":1,"814":1,"815":1,"816":2,"817":1,"825":1}}],["utility",{"2":{"707":1}}],["utilities",{"0":{"755":1},"2":{"560":1,"570":1,"735":1}}],["utilization",{"2":{"203":1}}],["utils",{"2":{"456":2,"474":2,"476":1,"477":1,"501":2,"508":1,"509":1,"566":1}}],["uow",{"2":{"800":3}}],["ufw",{"2":{"765":2}}],["u",{"2":{"557":1,"764":1,"771":1,"774":1,"799":16,"830":4}}],["umbrella",{"0":{"504":1},"2":{"504":1,"735":1}}],["ua",{"2":{"443":2,"510":2,"547":2,"633":2}}],["ug",{"2":{"423":1}}],["urls",{"2":{"805":1,"809":1}}],["url",{"2":{"571":1,"575":1}}],["url>",{"2":{"331":1}}],["uri",{"2":{"323":1}}],["uri>",{"2":{"323":1}}],["udp",{"0":{"330":1},"2":{"328":1}}],["ubsan",{"2":{"295":1,"300":3}}],["ubuntu",{"0":{"244":1}}],["ultra",{"2":{"262":1}}],["uintptr",{"2":{"788":1}}],["uint8",{"2":{"722":1,"723":1,"727":2}}],["uint64",{"2":{"523":3}}],["ui",{"0":{"600":1,"607":1},"1":{"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1},"2":{"232":1,"570":1,"578":4,"600":1,"601":5,"607":3,"802":1,"804":1,"806":1,"808":1}}],["upgrade",{"2":{"873":1}}],["upgrades",{"2":{"379":1,"409":1}}],["upstream",{"2":{"768":1}}],["upper",{"2":{"693":1}}],["up",{"2":{"264":2,"269":1,"581":1,"582":1,"687":1,"690":1,"707":1,"710":1,"750":1,"751":2}}],["updatebyid",{"2":{"799":1}}],["update",{"0":{"768":1,"798":1},"2":{"244":1,"394":1,"398":1,"613":1,"692":1,"739":1,"762":1,"767":1,"772":1,"798":1}}],["updates",{"2":{"232":1,"390":1,"400":1,"402":1,"407":1,"613":1}}],["updated",{"2":{"160":1}}],["uploads",{"0":{"772":1},"2":{"192":1,"772":1}}],["undefines",{"2":{"703":1}}],["underlying",{"2":{"536":1}}],["underneath",{"2":{"512":1}}],["understanding",{"2":{"126":1}}],["understand",{"2":{"105":1,"119":1,"195":1}}],["under",{"0":{"184":1},"2":{"60":1,"89":1,"212":1,"458":1,"476":1,"511":1,"597":1,"606":1,"787":1,"790":1,"802":1,"806":1,"862":1}}],["uncaught",{"2":{"681":1}}],["unconditionally",{"2":{"484":1}}],["unexpected",{"2":{"500":1}}],["unset",{"2":{"483":1}}],["unsafe",{"2":{"477":1}}],["unitofwork",{"0":{"800":1},"2":{"800":2}}],["unit",{"2":{"689":1,"748":1,"763":1,"882":1}}],["union",{"2":{"677":1}}],["uniform",{"2":{"551":1}}],["unix",{"2":{"481":1}}],["unique",{"2":{"71":1,"532":1,"538":1,"726":1}}],["unpredictable",{"2":{"477":1}}],["until",{"2":{"450":1,"518":1,"536":1,"652":1,"692":1,"699":1,"712":2}}],["unavailable",{"2":{"216":1,"678":1}}],["unauthorized",{"2":{"181":1,"216":1,"589":1,"594":1,"595":2,"789":1,"790":1,"791":1,"793":1}}],["unnecessary",{"0":{"149":1},"2":{"151":1}}],["unknown",{"2":{"139":1,"176":1,"619":1,"840":2}}],["unless",{"2":{"35":1,"123":1,"142":1,"290":1,"664":1}}],["usable",{"2":{"475":1,"738":1}}],["usage",{"0":{"11":1,"259":1,"261":1,"272":1,"280":1,"292":1,"308":1,"316":1,"327":1,"350":1,"358":1,"366":1,"375":1,"383":1,"389":1,"397":1,"406":1,"412":1,"499":1,"561":1,"660":1,"704":1,"713":1,"734":1,"825":1,"837":1},"1":{"500":1,"501":1,"661":1,"662":1,"714":1,"715":1},"2":{"1":1,"38":1,"103":1,"430":1,"470":1,"509":1,"589":1,"704":1,"810":1,"862":1}}],["usually",{"2":{"217":1}}],["using",{"0":{"170":1,"187":1},"1":{"171":1,"172":1},"2":{"10":1,"23":1,"42":1,"43":1,"44":1,"46":1,"52":1,"57":1,"64":1,"69":2,"70":2,"71":2,"87":1,"89":1,"93":1,"94":1,"95":1,"96":1,"101":1,"102":1,"106":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"126":1,"128":1,"136":1,"137":1,"145":1,"155":1,"163":1,"172":1,"181":1,"198":1,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":1,"229":1,"234":1,"246":1,"252":2,"260":1,"296":1,"307":1,"325":1,"359":1,"372":1,"434":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"456":1,"460":1,"478":1,"501":2,"510":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"566":1,"576":1,"577":1,"581":1,"585":1,"586":1,"591":1,"593":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"650":1,"656":1,"658":1,"659":1,"683":1,"687":1,"698":1,"712":1,"722":1,"745":1,"746":1,"747":1,"751":1,"757":1,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":2,"788":2,"789":1,"790":1,"791":1,"792":1,"793":1,"797":1,"798":1,"799":1,"800":1,"804":1,"808":1,"827":1,"829":1,"839":1,"840":1,"846":1,"851":1}}],["uses",{"2":{"219":1,"309":1,"413":1,"472":1,"513":1,"559":1,"572":2,"574":2,"575":2,"576":1,"601":1,"607":1,"648":1,"650":1,"664":1,"675":1,"679":1,"694":1,"702":1,"716":1,"754":1,"788":1,"789":1,"794":1}}],["used",{"2":{"97":1,"188":1,"231":1,"290":1,"331":1,"339":1,"429":1,"447":1,"452":1,"460":1,"466":1,"478":2,"490":1,"510":2,"532":1,"551":3,"552":1,"560":1,"609":1,"619":1,"640":1,"643":1,"667":1,"685":1,"687":1,"689":2,"691":1,"693":1,"728":1,"735":1}}],["useful",{"2":{"53":1,"257":1,"386":1,"462":1,"467":1,"518":1,"536":1,"574":1,"608":1,"654":1,"755":1,"793":1,"839":1,"840":1}}],["user=www",{"2":{"763":1}}],["user>",{"2":{"591":2,"799":2,"830":2}}],["userid",{"2":{"555":1}}],["users",{"2":{"113":1,"130":2,"164":1,"173":1,"325":1,"457":3,"460":1,"478":2,"483":1,"510":3,"553":1,"555":1,"611":1,"613":2,"614":2,"615":1,"621":2,"631":2,"746":3,"747":1,"751":3,"795":1,"797":1,"798":1,"799":1,"800":1,"846":1,"856":2}}],["user",{"2":{"27":1,"52":2,"82":1,"89":2,"107":1,"113":2,"137":2,"139":2,"157":1,"173":2,"175":2,"187":1,"288":1,"289":1,"323":2,"324":1,"423":2,"434":4,"443":2,"457":1,"465":1,"510":3,"527":1,"539":1,"547":2,"551":1,"564":1,"591":3,"594":1,"613":2,"629":1,"631":2,"633":2,"743":1,"745":1,"746":1,"747":1,"751":1,"754":1,"756":1,"761":2,"763":1,"768":2,"779":5,"780":4,"785":3,"793":7,"799":7,"801":1,"830":4,"834":1,"840":1,"841":1,"846":2}}],["use",{"0":{"232":1,"277":1,"427":1,"541":1,"598":1,"623":1,"685":1,"786":1},"2":{"0":1,"37":1,"57":1,"59":1,"60":1,"61":1,"62":1,"64":1,"65":2,"85":1,"86":2,"105":1,"110":1,"138":1,"140":1,"141":1,"150":3,"160":1,"161":2,"173":1,"180":1,"183":2,"189":1,"190":1,"196":1,"209":1,"217":1,"232":1,"235":1,"246":1,"253":1,"254":1,"259":2,"298":2,"303":1,"311":1,"456":4,"457":1,"474":1,"475":1,"477":1,"483":1,"494":1,"503":1,"509":1,"510":1,"513":1,"528":2,"541":1,"568":3,"579":1,"581":1,"582":1,"587":2,"589":1,"591":1,"598":1,"605":1,"623":1,"638":1,"649":1,"656":1,"670":1,"671":1,"680":1,"706":3,"717":1,"718":1,"722":1,"723":1,"729":1,"735":1,"743":1,"748":1,"756":1,"759":1,"768":1,"773":1,"775":2,"786":2,"788":1,"789":1,"790":1,"791":1,"792":2,"793":1,"798":1,"799":1,"800":1,"810":1,"824":1,"825":4,"827":1,"830":1,"832":2,"833":1,"837":4,"842":1,"850":1}}],["→",{"0":{"829":1},"2":{"34":2,"41":3,"74":2,"79":2,"134":3,"144":4,"202":3,"251":6,"296":2,"368":3,"475":2,"481":2,"611":1,"621":1,"673":4,"776":3,"782":6,"829":1}}],["jpath",{"0":{"785":1}}],["javascript",{"2":{"477":1}}],["john",{"2":{"827":1}}],["journalctl",{"2":{"771":1,"774":1}}],["journald",{"2":{"492":1,"759":1}}],["job",{"2":{"698":1}}],["jobs",{"2":{"264":2,"266":1,"274":2,"297":2,"570":1,"581":1,"582":1}}],["joinable",{"2":{"716":1}}],["join",{"0":{"653":1},"2":{"652":1}}],["joins",{"2":{"452":1,"574":1,"582":1,"653":1,"666":1,"693":1,"700":2,"710":2,"715":1,"716":1}}],["just",{"2":{"427":1,"810":1,"851":1}}],["jitter",{"2":{"216":1,"717":1}}],["jwt",{"2":{"91":1}}],["jget",{"0":{"52":1},"2":{"52":1,"785":2}}],["js",{"0":{"583":1,"584":1},"2":{"163":1,"474":1,"496":1,"510":4,"569":1,"572":1,"578":1,"601":2,"607":2,"841":1,"863":1,"869":1}}],["jset",{"0":{"52":1},"2":{"52":1,"785":3}}],["json>",{"2":{"316":1,"322":1}}],["json",{"0":{"29":1,"33":1,"40":1,"41":1,"45":1,"94":1,"149":1,"176":1,"192":1,"201":1,"207":1,"227":1,"442":1,"508":1,"546":1,"556":1,"605":1,"628":1,"629":1,"636":1,"775":1,"776":1,"782":1},"1":{"42":1,"43":1,"44":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":1},"2":{"0":1,"1":1,"3":1,"4":2,"10":2,"11":1,"12":1,"24":1,"29":3,"33":1,"34":3,"35":1,"37":1,"38":1,"40":7,"41":5,"42":3,"43":3,"44":2,"45":4,"46":3,"51":2,"53":3,"75":2,"79":1,"80":1,"82":1,"83":1,"89":4,"92":1,"94":2,"95":3,"96":1,"97":1,"102":1,"107":1,"108":9,"112":1,"113":2,"114":2,"115":2,"116":2,"123":1,"124":1,"128":2,"130":1,"131":1,"132":1,"136":1,"137":1,"138":1,"145":1,"147":1,"149":1,"151":1,"155":2,"156":2,"157":2,"158":2,"159":1,"166":1,"169":1,"171":1,"172":2,"173":3,"174":1,"175":2,"176":7,"177":1,"178":1,"181":1,"185":2,"186":4,"187":2,"192":2,"196":6,"200":1,"201":2,"206":1,"207":2,"210":1,"212":1,"221":1,"226":2,"227":4,"228":5,"229":2,"235":2,"237":1,"304":1,"309":1,"314":1,"322":1,"325":2,"368":3,"385":1,"394":1,"418":1,"423":1,"427":1,"439":3,"440":1,"442":2,"443":1,"444":1,"445":1,"446":2,"453":1,"455":1,"464":2,"465":3,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"475":1,"476":1,"510":17,"543":3,"544":1,"546":2,"547":1,"548":1,"549":1,"550":2,"551":2,"553":3,"556":1,"558":4,"560":1,"561":2,"566":1,"576":1,"578":1,"581":1,"585":1,"586":1,"595":2,"601":2,"605":1,"606":1,"607":2,"608":1,"619":2,"626":1,"628":2,"629":2,"630":2,"631":2,"632":1,"633":1,"635":1,"636":3,"637":1,"638":1,"645":1,"743":1,"755":4,"759":1,"775":7,"776":4,"777":2,"778":2,"779":2,"780":2,"781":2,"782":2,"783":3,"784":5,"785":4,"786":3,"788":1,"789":2,"790":3,"791":3,"792":3,"793":3,"838":3,"839":9,"840":5,"841":1,"846":4,"851":2,"853":2,"856":1,"857":1,"858":1}}],["j2",{"2":{"51":1,"784":2}}],["j",{"2":{"29":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":3,"176":9,"201":2,"207":2,"227":3,"228":7,"264":1,"266":1,"274":1,"297":1,"510":3,"629":3,"783":2,"784":2,"785":5}}],["xss",{"2":{"682":1}}],["x+1",{"2":{"425":1}}],["x=3",{"2":{"425":1}}],["xdg",{"2":{"353":1}}],["x",{"2":{"123":1,"159":2,"180":1,"181":1,"194":4,"196":1,"336":2,"419":2,"421":6,"440":1,"478":1,"519":1,"544":1,"577":1,"603":2,"605":1,"607":1,"608":2,"741":4,"766":4,"773":2,"788":2,"789":3,"790":4,"791":2,"792":6,"793":4}}],["x26",{"2":{"23":2,"29":1,"34":2,"56":1,"57":3,"63":1,"64":6,"69":1,"70":3,"71":8,"75":4,"77":1,"78":1,"85":2,"89":6,"93":2,"94":2,"95":2,"96":2,"108":23,"112":2,"113":2,"114":2,"115":2,"122":2,"124":2,"128":2,"130":2,"132":4,"136":2,"137":2,"138":2,"145":2,"151":2,"155":2,"156":2,"157":2,"159":2,"164":2,"166":2,"169":2,"171":2,"172":6,"173":4,"174":2,"175":4,"176":9,"177":4,"178":3,"180":2,"181":4,"187":3,"200":2,"201":3,"206":2,"207":3,"226":2,"227":3,"228":3,"229":2,"234":2,"252":1,"255":2,"430":1,"439":6,"440":2,"441":2,"442":2,"443":2,"444":2,"445":2,"448":2,"453":4,"454":4,"455":2,"456":4,"457":2,"467":1,"470":1,"471":1,"510":21,"515":4,"543":6,"544":2,"545":2,"546":2,"547":2,"548":2,"549":2,"552":2,"557":1,"560":1,"561":4,"586":2,"589":3,"591":1,"592":1,"626":2,"627":2,"628":2,"629":2,"630":4,"631":2,"632":6,"633":2,"635":2,"636":2,"637":2,"645":1,"669":2,"714":2,"743":1,"746":2,"747":1,"751":4,"780":2,"781":1,"788":4,"789":4,"790":6,"791":6,"792":6,"793":5,"797":2,"798":2,"799":4,"800":2,"804":4,"808":4,"827":1,"830":3,"831":2,"832":2,"833":1,"836":1,"839":23,"840":6,"846":6,"851":4,"855":2,"856":2,"857":2,"858":2}}],["x3c",{"2":{"3":1,"11":10,"12":2,"15":1,"23":1,"41":1,"42":6,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"63":3,"64":2,"69":21,"70":22,"71":50,"73":1,"75":3,"84":1,"89":2,"93":1,"94":1,"95":2,"96":1,"108":13,"112":1,"113":2,"114":2,"115":1,"124":1,"128":1,"136":6,"137":12,"138":4,"139":14,"145":1,"155":2,"176":2,"177":1,"180":2,"187":3,"200":2,"201":1,"206":2,"207":2,"226":2,"227":1,"228":1,"229":2,"234":2,"252":3,"254":1,"264":8,"274":2,"280":1,"281":1,"297":5,"298":3,"302":3,"316":2,"320":2,"322":5,"323":7,"327":2,"329":7,"330":4,"331":4,"332":1,"339":1,"340":1,"342":5,"344":1,"346":1,"350":1,"352":3,"353":5,"359":1,"360":5,"363":2,"366":1,"369":2,"375":3,"389":1,"397":1,"399":3,"404":5,"406":3,"412":1,"424":2,"429":8,"430":15,"432":1,"433":1,"434":2,"436":3,"439":1,"440":1,"441":1,"442":1,"443":2,"444":1,"445":2,"448":1,"456":2,"460":1,"464":1,"478":1,"503":1,"510":1,"515":4,"532":1,"534":1,"538":1,"543":1,"544":1,"545":1,"546":1,"547":2,"548":1,"549":2,"552":2,"557":2,"560":1,"586":1,"590":2,"591":2,"605":1,"606":1,"607":1,"610":2,"626":1,"627":1,"628":1,"629":1,"630":1,"631":2,"632":2,"633":2,"635":2,"636":1,"637":1,"645":1,"649":1,"661":2,"714":1,"719":1,"720":4,"722":5,"723":1,"727":2,"735":1,"745":6,"746":26,"747":12,"751":14,"776":1,"777":14,"778":7,"779":6,"780":6,"781":6,"782":1,"783":6,"784":6,"785":11,"788":6,"789":3,"790":2,"791":2,"792":2,"793":5,"795":1,"797":8,"798":13,"799":33,"800":8,"804":5,"808":5,"810":1,"812":4,"813":4,"814":4,"816":4,"817":4,"819":4,"820":4,"823":8,"824":5,"826":5,"827":9,"829":2,"830":13,"831":6,"833":13,"835":2,"836":14,"839":12,"840":4,"846":1,"851":1}}],["5180",{"2":{"805":1,"809":1}}],["5179",{"2":{"805":1,"809":1}}],["5178",{"2":{"803":5,"804":3,"807":5,"808":3}}],["599",{"2":{"567":1}}],["503",{"2":{"216":1,"220":1,"678":1}}],["500",{"2":{"115":1,"138":1,"158":2,"439":1,"543":1,"567":1,"793":1}}],["50",{"2":{"69":1,"253":1,"704":1}}],["50ms",{"2":{"69":1}}],["5432",{"2":{"10":1}}],["5",{"0":{"175":1,"179":1,"180":1,"181":1,"256":1,"343":1,"470":1,"593":1,"743":1,"767":1,"824":1,"832":1,"849":1},"1":{"180":1,"181":1},"2":{"9":1,"215":2,"234":1,"650":2,"714":1,"820":1}}],["17",{"2":{"828":1}}],["16",{"2":{"538":1}}],["14",{"2":{"436":1,"777":1}}],["1e",{"2":{"433":1}}],["1+2",{"2":{"425":1}}],["18",{"2":{"420":1,"746":1,"747":1,"828":1,"829":1}}],["15z",{"2":{"817":1}}],["153",{"2":{"497":1}}],["15",{"2":{"215":1,"331":1}}],["11",{"0":{"196":1,"756":1}}],["100",{"2":{"567":1,"704":1}}],["1000",{"2":{"329":1}}],["100000",{"2":{"69":1,"254":1}}],["1048576",{"2":{"465":1}}],["1024",{"2":{"185":2,"186":1,"192":4,"229":2,"472":1,"664":2}}],["10",{"0":{"195":1,"755":1},"2":{"174":2,"192":1,"333":2,"421":1,"632":1,"675":1,"704":1,"784":1,"822":1}}],["12>",{"2":{"727":1}}],["12",{"2":{"726":1}}],["123",{"2":{"184":1,"193":1,"436":1,"790":4,"830":1,"831":1,"833":1}}],["120",{"2":{"184":1,"191":1,"215":1,"827":1,"828":1,"829":1,"830":1}}],["128",{"2":{"71":1,"256":1}}],["127",{"2":{"6":1,"10":1,"90":3,"109":2,"164":4,"194":3,"196":1,"226":1,"331":1,"333":1,"334":1,"440":1,"544":1,"631":1,"632":1,"633":1,"745":1,"746":1,"747":1,"751":1,"766":1,"769":1,"774":1,"788":1,"789":2,"790":3,"792":3,"793":2,"797":1,"798":1,"799":1,"800":1,"803":5,"804":1,"807":5,"808":1,"853":2,"856":1,"857":1}}],["1",{"0":{"41":1,"56":1,"130":1,"147":1,"164":1,"169":1,"180":1,"183":1,"252":1,"294":1,"339":1,"465":1,"589":1,"656":1,"675":1,"689":1,"714":1,"721":1,"736":1,"745":1,"760":1,"776":1,"797":1,"811":1,"827":1,"839":1,"845":1,"851":1,"880":1},"1":{"42":1,"43":1,"44":1,"57":1,"722":1,"761":1,"762":1,"777":1,"778":1,"779":1,"780":1,"781":1,"812":1,"813":1,"814":1,"828":1},"2":{"6":1,"10":1,"26":1,"43":1,"46":1,"47":1,"48":1,"50":1,"90":3,"108":2,"109":2,"164":4,"174":2,"181":1,"184":1,"191":1,"194":3,"196":1,"226":1,"228":1,"234":1,"325":1,"331":1,"333":1,"334":2,"347":1,"354":4,"356":2,"360":1,"361":1,"364":2,"371":1,"372":2,"373":1,"378":1,"385":1,"387":1,"401":1,"408":1,"420":1,"421":1,"422":2,"425":1,"440":1,"442":1,"510":1,"544":1,"546":1,"631":1,"632":2,"633":1,"648":1,"693":3,"720":1,"745":2,"746":6,"747":3,"751":3,"766":3,"769":1,"774":1,"778":1,"783":1,"784":1,"788":1,"789":5,"790":3,"791":2,"792":6,"793":2,"797":6,"798":4,"799":4,"800":4,"803":5,"804":1,"807":5,"808":1,"824":1,"839":2,"846":1,"853":2,"856":1,"857":1}}],["07t10",{"2":{"817":1}}],["07",{"2":{"813":1}}],["02",{"2":{"813":1,"817":1}}],["01",{"2":{"751":1}}],["000",{"2":{"194":1,"824":2}}],["0",{"2":{"6":2,"9":1,"10":2,"11":5,"25":1,"42":2,"43":1,"44":1,"46":1,"69":4,"70":1,"71":11,"75":2,"89":1,"90":6,"93":1,"94":1,"95":1,"96":1,"108":3,"109":4,"113":2,"130":1,"164":8,"173":2,"178":1,"194":6,"195":1,"196":2,"226":2,"234":2,"254":2,"256":4,"331":2,"333":2,"334":2,"347":2,"354":8,"356":4,"360":2,"361":2,"364":4,"371":1,"372":4,"373":2,"378":2,"385":3,"387":2,"392":6,"393":4,"401":2,"402":6,"408":2,"420":1,"440":2,"462":2,"465":1,"472":1,"510":1,"515":3,"521":3,"523":3,"538":1,"544":2,"552":1,"574":1,"586":1,"601":1,"605":3,"606":3,"610":4,"631":4,"632":2,"633":2,"648":1,"654":2,"661":1,"664":2,"699":2,"745":3,"746":4,"747":4,"751":3,"766":2,"769":2,"774":2,"777":2,"778":2,"779":1,"780":2,"781":1,"783":1,"784":1,"785":1,"788":3,"789":5,"790":7,"791":1,"792":7,"793":5,"797":3,"798":4,"799":7,"800":3,"803":10,"804":2,"807":10,"808":2,"824":1,"839":3,"840":2,"846":2,"853":4,"856":3,"857":2}}],["=1024",{"2":{"664":1}}],["=>",{"2":{"510":1}}],["=mode",{"2":{"360":1}}],["==",{"2":{"71":1,"108":1,"113":1,"114":1,"157":1,"173":2,"481":1,"509":1,"631":2,"699":2,"839":1,"840":1,"846":1}}],["=",{"0":{"712":1},"2":{"6":1,"7":1,"8":1,"9":1,"11":2,"12":3,"28":1,"29":1,"42":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":2,"57":1,"62":1,"63":2,"64":1,"65":2,"69":5,"70":3,"71":6,"75":1,"89":3,"108":8,"113":1,"114":1,"115":1,"130":1,"147":1,"155":1,"156":2,"157":1,"173":1,"174":3,"176":6,"177":1,"180":1,"181":4,"187":1,"194":9,"200":2,"201":1,"206":2,"207":3,"226":2,"227":1,"228":2,"229":1,"234":1,"252":1,"254":3,"255":1,"256":2,"257":2,"296":2,"421":2,"422":1,"423":2,"430":2,"431":2,"432":2,"433":2,"434":3,"435":6,"436":3,"443":2,"444":1,"445":1,"456":2,"460":1,"467":1,"468":4,"469":1,"470":3,"471":2,"475":1,"478":1,"510":5,"515":6,"519":2,"521":2,"525":1,"526":1,"528":1,"534":1,"538":1,"547":2,"548":1,"549":1,"552":2,"557":1,"567":6,"577":1,"589":2,"590":1,"591":1,"605":1,"607":1,"608":1,"610":2,"613":3,"615":2,"616":1,"629":1,"631":1,"632":3,"633":3,"635":1,"651":1,"661":2,"697":4,"700":2,"712":1,"714":1,"715":1,"720":1,"722":2,"723":1,"727":4,"728":2,"731":1,"732":2,"733":1,"745":6,"746":11,"747":9,"751":7,"777":4,"778":1,"780":2,"781":2,"783":1,"784":2,"785":2,"788":1,"789":2,"790":2,"791":1,"792":2,"793":4,"797":5,"798":4,"799":7,"800":2,"804":10,"808":10,"812":1,"813":1,"814":1,"816":1,"817":1,"819":1,"820":3,"822":2,"824":3,"827":2,"828":2,"829":2,"830":3,"831":3,"832":1,"833":3,"834":1,"835":2,"839":8,"840":1,"846":3,"856":1,"857":1}}],["volume",{"2":{"497":1}}],["void>",{"2":{"69":1,"70":1,"71":2,"252":1}}],["void",{"0":{"712":1},"2":{"64":2,"75":4,"89":1,"178":1,"234":1,"430":1,"455":1,"456":2,"515":2,"534":1,"552":1,"565":5,"594":1,"689":1,"714":3,"751":2,"840":2}}],["vhttp",{"2":{"454":1,"552":1,"553":1,"558":2,"560":1,"564":1,"567":1,"661":1}}],["v0",{"2":{"393":2,"402":2}}],["v2",{"2":{"359":1,"363":1,"365":1,"367":1}}],["v1",{"0":{"403":1},"2":{"331":1,"336":1,"376":1,"379":1,"419":1,"478":2}}],["vcpkg",{"2":{"246":1}}],["vs",{"0":{"170":1,"678":1},"1":{"171":1,"172":1},"2":{"623":1,"671":1,"672":1}}],["varchar",{"2":{"746":1,"751":1,"755":1}}],["variants",{"2":{"559":1}}],["variant>",{"2":{"108":1}}],["variable",{"2":{"298":1,"372":1,"471":1}}],["variables",{"0":{"265":1,"282":1,"305":1,"421":1,"482":1},"1":{"483":1,"484":1},"2":{"325":1,"418":1,"426":1,"473":1,"475":1,"483":1,"763":1}}],["vary",{"2":{"194":1}}],["validity",{"2":{"753":1}}],["valid",{"2":{"238":1,"369":1,"595":1,"831":1}}],["validating",{"0":{"827":1,"833":1},"1":{"828":1},"2":{"340":1,"830":1}}],["validationerrorcode",{"2":{"832":1}}],["validationerrors",{"2":{"832":1}}],["validation",{"0":{"114":1,"156":1,"157":1,"472":1,"664":1,"826":1,"829":1,"830":1,"832":1},"2":{"154":1,"202":1,"216":1,"224":1,"348":1,"395":1,"591":1,"598":1,"620":1,"677":2,"826":8,"827":3,"829":2,"830":5,"831":6,"832":3,"833":3,"836":1,"837":2}}],["validates",{"2":{"367":1,"454":1,"472":1}}],["validate",{"2":{"4":1,"110":1,"114":1,"156":1,"157":1,"209":1,"214":1,"225":1,"230":1,"394":1,"427":1,"473":1,"826":1,"827":3,"828":1,"829":2,"830":2,"831":2,"833":2,"834":1,"835":1,"837":1,"842":1}}],["value>",{"2":{"298":1}}],["values",{"0":{"170":1,"696":1,"834":1,"835":1},"1":{"171":1,"172":1},"2":{"35":1,"174":1,"257":1,"296":1,"421":1,"435":1,"464":1,"470":1,"483":1,"637":1,"739":1,"746":1,"797":1,"800":1,"826":2}}],["value",{"0":{"827":1,"829":1},"1":{"828":1},"2":{"5":1,"6":1,"25":1,"26":1,"35":1,"41":1,"42":1,"44":4,"52":1,"63":1,"95":1,"114":1,"132":2,"157":1,"172":2,"174":4,"180":3,"187":1,"194":1,"200":1,"206":1,"226":1,"428":1,"430":3,"431":1,"432":1,"433":1,"434":2,"435":3,"455":2,"468":1,"471":1,"510":3,"557":1,"565":1,"594":1,"632":3,"648":1,"720":1,"728":2,"731":2,"732":1,"733":2,"735":1,"739":1,"776":2,"827":1,"846":2,"857":1}}],["vendor",{"2":{"603":1,"605":1,"620":1}}],["verbosity",{"2":{"483":1}}],["verbose",{"2":{"264":1,"274":1,"302":1,"346":1,"352":1,"360":1,"369":1,"372":2}}],["verb",{"2":{"453":1,"612":1,"613":2,"624":1,"661":1}}],["ver>",{"2":{"360":1}}],["verified",{"2":{"356":1,"423":1}}],["verifies",{"2":{"351":2,"728":1}}],["verification",{"2":{"343":1,"351":1,"352":1,"354":1,"355":2,"369":3,"371":2,"728":1}}],["verify",{"0":{"365":1,"733":1},"1":{"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1},"2":{"241":1,"242":1,"249":1,"343":1,"347":2,"352":1,"355":1,"356":1,"364":1,"365":1,"366":2,"367":1,"368":3,"372":10,"373":2,"733":1,"756":1,"801":1}}],["verifying",{"2":{"239":1}}],["very",{"2":{"89":1}}],["versioning",{"0":{"379":1}}],["version>",{"2":{"342":2,"353":1,"363":1,"375":1,"389":1,"399":1,"404":2,"406":1}}],["versioned",{"2":{"325":1,"343":1}}],["versions",{"2":{"262":1,"384":1}}],["version",{"0":{"336":1,"393":1},"2":{"46":1,"234":1,"241":1,"242":1,"268":3,"336":1,"345":2,"346":1,"347":1,"348":1,"356":1,"359":1,"360":2,"361":2,"363":1,"364":1,"373":1,"376":1,"379":3,"380":1,"381":2,"388":1,"390":2,"391":1,"392":1,"393":2,"395":1,"402":1,"407":1,"408":1,"424":2,"442":1,"546":1,"605":1,"606":1,"607":1,"766":1,"847":1}}],["vector",{"2":{"71":1,"799":2,"833":2}}],["vector>",{"2":{"71":1}}],["v",{"2":{"52":1,"63":1,"69":3,"108":1,"346":1,"391":1,"393":1,"402":1,"431":1,"432":1,"433":1,"434":1,"785":2,"789":2,"839":1}}],["video",{"2":{"874":1}}],["virtual",{"2":{"515":4,"552":2}}],["view>>",{"2":{"833":2}}],["view>",{"2":{"722":1}}],["view",{"2":{"387":1,"432":1,"526":1,"722":1,"727":2,"732":1,"833":2}}],["visibility",{"2":{"481":1,"493":1}}],["visible",{"2":{"2":1,"39":1,"220":1,"481":1,"498":1,"796":1}}],["visual",{"2":{"246":1}}],["vip",{"2":{"173":1,"176":7,"196":1,"629":1,"631":1}}],["via",{"2":{"3":1,"258":1,"331":1,"342":1,"380":1,"435":1,"454":1,"458":1,"465":1,"471":1,"472":1,"527":1,"528":1,"532":1,"539":1,"552":1,"568":1,"574":1,"577":1,"581":1,"590":1,"620":1,"645":1,"676":1,"687":1,"705":2,"751":1,"754":1}}],["vixdb",{"2":{"745":1,"746":1,"747":1,"751":1,"795":1,"797":1,"798":1,"799":1,"800":1}}],["vixpkg",{"2":{"352":1,"354":2,"356":1,"359":1,"360":1,"363":1,"369":1,"372":1}}],["vixpkg>",{"2":{"350":1,"366":1}}],["vixcpp",{"2":{"241":1,"242":1,"762":1}}],["vix",{"0":{"240":1,"248":1,"260":1,"271":1,"277":1,"279":1,"291":1,"296":1,"307":1,"315":1,"326":1,"349":1,"357":1,"365":1,"374":1,"382":1,"388":1,"396":1,"405":1,"411":1,"474":1,"475":1,"477":1,"483":1,"506":1,"510":1,"639":1,"643":1,"687":1,"705":1,"710":1,"757":1},"1":{"241":1,"242":1,"261":1,"262":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"280":1,"281":1,"282":1,"292":1,"308":1,"309":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"383":1,"384":1,"385":1,"386":1,"387":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"406":1,"407":1,"408":1,"409":1,"410":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"475":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"511":1,"512":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"704":1,"705":1,"706":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1},"2":{"0":2,"2":1,"3":2,"11":2,"12":2,"14":1,"15":1,"23":2,"34":1,"37":2,"39":1,"40":4,"41":1,"42":2,"43":2,"44":3,"45":1,"46":3,"54":2,"55":2,"57":6,"62":1,"64":3,"65":2,"67":1,"69":6,"70":5,"71":10,"72":1,"73":1,"75":7,"79":1,"80":1,"84":1,"89":2,"92":1,"93":3,"94":3,"95":5,"96":2,"97":1,"98":1,"106":1,"108":15,"111":1,"112":2,"113":2,"114":2,"115":2,"118":1,"119":2,"120":1,"123":1,"124":2,"125":1,"126":2,"128":2,"130":1,"134":1,"135":2,"136":2,"137":2,"142":1,"143":2,"144":1,"145":2,"150":1,"153":2,"154":2,"155":2,"160":1,"161":1,"162":1,"163":4,"164":1,"169":1,"170":1,"172":2,"179":1,"180":6,"181":8,"184":1,"186":1,"189":1,"190":1,"191":1,"192":5,"193":1,"194":5,"195":1,"198":2,"199":1,"200":2,"201":2,"203":1,"205":2,"206":2,"207":2,"208":1,"211":1,"212":1,"213":1,"214":1,"218":1,"225":1,"226":2,"227":2,"228":3,"229":2,"231":1,"234":2,"239":1,"241":2,"242":2,"243":1,"248":2,"250":1,"251":1,"252":4,"258":1,"259":1,"260":1,"262":1,"264":1,"265":1,"268":1,"269":2,"270":2,"271":2,"273":2,"276":1,"278":1,"279":1,"282":1,"283":1,"286":1,"288":3,"289":1,"290":1,"291":1,"292":1,"294":2,"296":2,"301":1,"302":3,"303":1,"305":5,"306":2,"309":3,"314":3,"316":3,"317":1,"324":5,"325":2,"326":1,"328":1,"333":1,"334":1,"335":2,"336":1,"339":7,"340":2,"341":1,"342":8,"343":3,"344":1,"345":2,"347":2,"348":1,"349":1,"351":2,"353":3,"354":1,"355":1,"356":4,"357":1,"359":1,"362":2,"364":3,"365":2,"366":1,"367":1,"370":1,"372":3,"373":2,"374":1,"376":2,"379":1,"380":1,"381":3,"382":1,"384":2,"386":1,"387":2,"388":1,"390":2,"393":1,"395":2,"396":1,"399":1,"402":2,"404":5,"406":1,"407":2,"409":1,"410":3,"413":1,"416":1,"417":2,"418":1,"419":1,"423":1,"427":1,"428":1,"429":9,"438":1,"439":2,"440":3,"441":3,"442":3,"443":2,"444":2,"445":2,"447":2,"448":3,"451":1,"454":3,"455":2,"456":3,"459":1,"462":1,"464":3,"465":1,"474":2,"475":2,"476":2,"477":2,"478":2,"482":1,"483":6,"484":2,"486":1,"492":1,"496":1,"497":2,"498":1,"501":3,"503":1,"504":3,"506":1,"508":1,"509":2,"510":15,"511":1,"512":1,"513":1,"514":1,"524":1,"525":1,"526":1,"529":1,"530":3,"532":1,"538":4,"539":1,"542":1,"543":2,"544":3,"545":3,"546":3,"547":2,"548":2,"549":2,"551":1,"552":2,"553":1,"558":2,"560":1,"564":1,"565":1,"566":1,"567":1,"569":1,"570":1,"572":2,"577":1,"578":2,"580":1,"586":3,"588":1,"589":1,"590":1,"592":1,"593":1,"594":3,"597":1,"600":1,"603":2,"604":1,"605":4,"606":3,"607":2,"608":1,"610":6,"611":1,"624":2,"625":1,"626":2,"627":2,"628":3,"629":3,"630":2,"631":2,"632":2,"633":2,"635":2,"636":2,"637":3,"639":3,"640":4,"643":3,"645":2,"649":1,"658":1,"661":3,"686":1,"687":1,"707":1,"708":1,"714":5,"715":1,"718":1,"719":2,"722":2,"735":4,"736":4,"739":1,"743":4,"745":2,"746":2,"747":2,"749":1,"751":2,"755":1,"757":1,"758":1,"759":1,"761":2,"762":4,"763":10,"764":1,"766":3,"768":7,"771":1,"772":1,"774":2,"775":3,"776":1,"777":2,"778":2,"779":2,"780":2,"781":2,"782":1,"783":2,"784":2,"785":2,"787":2,"788":8,"789":8,"790":2,"791":2,"792":2,"793":3,"795":1,"796":2,"797":2,"798":2,"799":3,"800":2,"801":1,"802":1,"804":12,"806":1,"808":12,"810":3,"826":6,"827":2,"829":2,"830":5,"831":6,"832":2,"833":1,"838":2,"839":16,"840":7,"844":1,"845":1,"846":3,"847":6,"848":1,"850":1,"851":4,"852":1,"853":2,"860":1,"867":1,"872":1,"878":1}}],["f64",{"2":{"741":1}}],["fn",{"0":{"516":1,"534":1,"712":1},"2":{"515":1,"534":1,"712":1}}],["few",{"2":{"737":1}}],["fewer",{"2":{"698":1}}],["fetches",{"2":{"607":1}}],["feed",{"2":{"754":1}}],["feedback",{"2":{"474":1}}],["feels",{"2":{"584":1}}],["fearing",{"2":{"486":1}}],["features",{"0":{"285":1},"2":{"477":1,"687":1,"786":1}}],["feature",{"0":{"736":1},"2":{"162":1,"224":1,"773":1,"876":1}}],["fssl",{"2":{"241":1}}],["fluent",{"2":{"551":1,"560":1,"568":1}}],["flushing",{"2":{"492":1,"493":1}}],["flush",{"0":{"493":1},"2":{"215":1,"234":2,"236":1,"493":2,"498":1,"506":1}}],["flight",{"2":{"483":1}}],["floating",{"2":{"433":1}}],["float",{"0":{"433":1},"2":{"433":1,"437":1}}],["flow",{"0":{"127":1,"596":1,"655":1,"680":1},"1":{"656":1,"657":1,"658":1,"659":1},"2":{"119":1,"127":1,"144":1,"252":1,"571":1}}],["flags",{"0":{"300":1,"303":1,"310":1,"736":1},"2":{"292":1,"295":1,"296":1,"298":1,"461":1,"756":1}}],["flag",{"2":{"283":1,"459":1,"710":1}}],["flask",{"2":{"163":1,"510":1}}],["flat",{"2":{"108":1,"839":1}}],["fixed",{"2":{"687":1,"712":1}}],["fifo",{"2":{"687":1}}],["five",{"2":{"588":1}}],["fill",{"2":{"723":1}}],["filter",{"2":{"677":1}}],["filtering",{"2":{"501":1,"677":1,"686":1}}],["filtered",{"2":{"475":1,"486":1,"509":1}}],["file>",{"2":{"795":1}}],["filemigrationsrunner",{"2":{"751":2}}],["filesystem",{"2":{"751":1}}],["filesystem>",{"2":{"751":1}}],["files",{"0":{"458":1,"563":1,"708":1,"772":1},"2":{"12":1,"140":1,"310":1,"352":1,"360":1,"363":1,"458":1,"464":1,"471":1,"475":1,"476":1,"484":1,"551":1,"751":2,"759":1,"849":1}}],["file",{"0":{"51":1,"465":1,"751":1,"784":1},"2":{"4":2,"51":2,"53":1,"164":1,"262":1,"268":1,"273":1,"295":1,"296":1,"299":1,"386":1,"458":1,"464":1,"466":1,"472":1,"560":2,"563":2,"735":1,"763":1,"782":3,"784":2,"786":1,"804":2,"808":2,"851":1}}],["firewall",{"0":{"677":1,"765":1},"2":{"682":1}}],["fire",{"2":{"251":1,"259":1}}],["first",{"0":{"400":1,"883":1},"2":{"215":1,"217":1,"232":1,"234":1,"257":1,"310":1,"313":1,"348":1,"413":1,"417":1,"475":1,"483":1,"554":1,"652":1,"682":1,"689":3,"690":2,"728":1,"794":2,"801":1,"825":2,"861":1,"868":1,"869":1}}],["fits",{"0":{"527":1}}],["fit",{"2":{"250":1,"588":1}}],["fingerprints",{"2":{"734":1}}],["finishing",{"2":{"699":1}}],["finishes",{"2":{"695":1}}],["finished",{"2":{"257":1}}],["finish",{"2":{"662":1}}],["final",{"2":{"223":1,"329":1,"353":1,"463":1,"530":2,"751":1}}],["finalize",{"2":{"214":1}}],["finalized",{"2":{"121":1,"127":1,"132":1}}],["finalization",{"0":{"132":1}}],["findbyid",{"2":{"799":1}}],["find",{"2":{"114":1,"157":1,"501":1,"706":1}}],["field=",{"2":{"836":1}}],["field",{"0":{"832":1},"2":{"114":1,"680":1,"827":3,"830":5,"831":4,"832":1,"833":2,"836":2,"837":1,"842":1}}],["fields",{"0":{"522":1},"2":{"110":1,"176":1,"223":1,"501":1,"535":1,"605":1}}],["f",{"2":{"108":4,"515":4,"694":3,"764":1,"774":1,"831":4,"839":4}}],["front",{"2":{"758":1,"765":1}}],["fromrow",{"2":{"799":1}}],["from",{"2":{"44":1,"69":1,"108":1,"143":1,"153":1,"163":1,"199":1,"212":1,"219":1,"249":1,"309":1,"312":1,"314":1,"322":1,"374":1,"382":1,"405":1,"407":1,"416":1,"432":1,"441":1,"456":1,"461":1,"472":1,"496":1,"501":1,"510":1,"527":1,"540":2,"545":1,"553":1,"569":1,"572":2,"578":1,"580":1,"600":1,"605":3,"609":1,"621":1,"675":1,"684":1,"707":1,"743":2,"746":1,"747":1,"755":1,"773":1,"781":1,"782":1,"793":1,"798":1,"839":2,"863":1,"869":1}}],["frequently",{"2":{"523":1}}],["frequency",{"2":{"487":1,"501":1}}],["free",{"2":{"139":1,"487":1,"509":1,"876":1}}],["friction",{"2":{"278":1}}],["friendly",{"0":{"510":1},"1":{"511":1,"512":1},"2":{"271":1,"428":1,"454":1,"551":1}}],["frame",{"2":{"159":1}}],["framework",{"2":{"94":1,"162":1,"198":1,"510":1}}],["fut",{"2":{"519":2}}],["futures",{"0":{"519":1},"1":{"520":1}}],["future",{"2":{"513":1,"515":1,"519":1,"520":2,"696":3}}],["func",{"2":{"689":1,"698":2}}],["function",{"0":{"712":1},"2":{"456":2,"515":1,"534":1,"581":1,"582":1,"689":1,"742":1,"787":1}}],["functions",{"2":{"72":1,"178":1,"430":1,"585":1}}],["fundamentally",{"2":{"506":1}}],["fundamentals",{"0":{"119":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1},"2":{"124":1,"125":1,"880":1}}],["fully",{"2":{"123":1,"171":1,"251":1,"342":1,"399":1,"407":1,"413":1,"600":1}}],["full",{"0":{"89":1,"108":1},"2":{"231":1,"232":1,"250":1,"264":1,"269":1,"286":2,"290":1,"426":1,"477":1,"497":1,"516":1,"638":1,"677":1,"682":1,"775":1,"830":1,"864":1,"876":1}}],["faq",{"0":{"505":1},"1":{"506":1,"507":1,"508":1}}],["familiar",{"2":{"475":1}}],["factories",{"2":{"754":2}}],["factory",{"0":{"538":1},"2":{"538":1,"742":1,"754":2,"797":3,"798":3,"799":3,"800":3}}],["facing",{"2":{"456":1,"474":1,"553":1}}],["facilities",{"2":{"40":1}}],["facade",{"0":{"743":1},"2":{"454":1,"551":2,"553":1,"564":1,"565":2,"568":1,"743":1}}],["fake",{"2":{"206":1,"234":1}}],["fastapi",{"0":{"585":1},"2":{"163":1,"510":1,"569":1,"572":1}}],["fastify",{"2":{"163":1,"195":1}}],["fast",{"0":{"269":1},"2":{"145":1,"150":1,"203":1,"213":1,"230":1,"262":2,"264":1,"266":2,"269":1,"270":1,"295":1,"310":1,"313":1,"417":1,"510":1,"582":1,"684":1,"850":1}}],["failover",{"2":{"220":1}}],["failing",{"2":{"219":1}}],["fail",{"2":{"212":1,"220":2,"310":1,"313":1,"352":1,"362":1,"369":1,"594":1}}],["fails",{"2":{"196":1,"212":1,"214":1,"220":1,"249":1,"500":1,"656":1,"693":1,"702":1,"728":1}}],["failed",{"2":{"139":2,"371":1,"745":1}}],["failures",{"0":{"249":1},"2":{"138":1,"216":1,"223":1,"520":1,"801":1}}],["failure",{"2":{"115":3,"212":2,"213":1,"218":1,"219":2,"310":1,"311":2,"313":1,"430":1,"681":1,"883":1}}],["false",{"2":{"8":1,"89":2,"176":1,"181":1,"183":1,"187":1,"189":1,"221":1,"223":1,"516":1,"521":1,"534":1,"777":1,"781":1,"789":1,"790":1,"791":1,"792":2,"793":3}}],["fallback",{"0":{"220":1,"617":1},"2":{"3":1,"5":1,"13":1,"25":1,"44":1,"84":1,"108":1,"110":1,"174":1,"576":1,"611":1,"839":2}}],["focus",{"2":{"870":1}}],["focused",{"2":{"98":1}}],["focuses",{"2":{"0":1,"37":1,"160":1,"250":1,"810":1}}],["folders",{"2":{"772":1}}],["folder|artifact",{"2":{"350":1,"366":1}}],["folder",{"0":{"759":1},"2":{"281":1,"352":1,"354":1,"360":2,"369":1,"372":1}}],["follow",{"2":{"256":1}}],["follows",{"2":{"2":1,"39":1,"199":1,"259":1,"483":1,"484":1,"492":1,"617":1}}],["foundations",{"0":{"880":1}}],["foundation",{"2":{"270":1}}],["found",{"0":{"248":1},"2":{"113":1,"173":1,"216":1,"416":1,"466":2,"567":2,"576":2,"595":1,"619":1,"630":2,"631":1,"665":2,"799":1,"846":1,"858":1}}],["forward",{"2":{"593":1,"740":1}}],["forwarding",{"2":{"525":1}}],["forwarded",{"2":{"303":1,"312":1,"314":1,"766":3,"773":2}}],["forces",{"2":{"648":1}}],["force",{"2":{"264":1,"274":4,"275":4,"276":2,"281":1,"287":2,"290":1,"299":4,"323":1,"352":1,"354":2,"484":1}}],["forget",{"2":{"251":1,"259":1}}],["forever",{"2":{"218":1,"756":1}}],["forms",{"2":{"565":1,"624":1,"686":1}}],["form",{"0":{"192":1,"833":1},"2":{"185":2,"192":2,"826":2,"833":3}}],["formats",{"2":{"559":1,"722":1}}],["formatting",{"0":{"559":1},"2":{"202":1,"264":1,"475":1,"477":1,"486":1}}],["format",{"0":{"221":1,"235":1,"465":1,"884":1},"2":{"111":1,"116":1,"208":1,"225":1,"302":2,"305":1,"478":1,"813":1,"817":1,"859":1}}],["forbidden",{"2":{"156":1,"216":1,"595":1}}],["for",{"0":{"183":1,"184":1,"185":1,"195":1,"225":1,"511":1,"583":1,"671":1,"705":1,"869":1,"885":1},"1":{"226":1,"227":1,"228":1,"229":1,"230":1},"2":{"53":1,"66":1,"67":1,"69":3,"70":1,"86":1,"91":1,"108":2,"110":1,"116":1,"127":1,"138":1,"140":1,"143":1,"150":1,"160":1,"161":1,"167":1,"183":1,"184":1,"185":1,"187":1,"194":1,"196":1,"200":1,"202":1,"204":1,"212":1,"213":2,"216":1,"219":1,"221":1,"230":1,"231":1,"234":1,"253":3,"254":1,"257":2,"262":1,"264":1,"265":1,"269":1,"271":2,"273":2,"274":1,"297":2,"298":2,"306":1,"314":1,"328":1,"333":1,"335":1,"340":1,"364":1,"386":1,"390":1,"413":1,"424":1,"426":1,"433":1,"437":1,"447":1,"456":2,"461":1,"463":1,"464":1,"474":2,"477":1,"483":1,"487":1,"493":1,"497":1,"501":1,"509":2,"510":2,"512":1,"513":1,"516":1,"518":1,"524":1,"527":1,"529":1,"536":1,"537":1,"539":1,"551":2,"552":1,"557":1,"562":1,"567":1,"568":3,"569":1,"570":1,"571":1,"572":2,"574":1,"575":2,"579":1,"581":1,"585":1,"587":1,"589":1,"590":1,"591":1,"593":1,"594":1,"595":1,"597":1,"598":1,"600":1,"603":2,"604":2,"607":1,"608":1,"611":1,"640":2,"643":1,"662":1,"665":2,"666":1,"671":1,"672":1,"687":2,"690":2,"692":1,"693":1,"695":1,"700":1,"704":1,"706":1,"717":1,"718":1,"723":1,"726":2,"729":1,"734":1,"740":1,"741":3,"755":1,"756":1,"757":1,"766":2,"773":1,"778":1,"781":1,"790":2,"794":1,"796":1,"798":1,"802":1,"806":1,"810":1,"824":2,"825":5,"826":2,"827":2,"830":1,"832":1,"833":1,"837":6,"838":1,"839":1,"842":1,"849":1,"850":2,"860":1,"863":1,"871":1,"872":1,"878":1,"884":1}}],["blue",{"2":{"768":1}}],["blob",{"2":{"741":2}}],["blog",{"2":{"287":1,"294":1,"313":1,"325":3,"354":4,"356":1,"361":1,"364":1,"372":2}}],["blocks",{"2":{"86":1,"105":1,"119":1,"250":1,"450":1,"518":1,"536":1,"652":1,"699":1,"742":1,"756":1}}],["blocked",{"2":{"84":1,"527":1,"838":1,"842":1}}],["block",{"2":{"66":1,"69":1,"167":1,"253":1,"254":1,"487":1,"492":1,"521":1,"522":2,"528":2,"539":1,"541":1,"587":1,"646":1}}],["blocking",{"0":{"652":1,"666":1},"2":{"17":1,"75":1,"86":2,"103":1,"140":1,"151":1,"476":1,"506":1,"528":1,"534":1,"572":2,"574":1,"581":1,"585":1,"652":2,"662":1,"666":2,"671":1,"678":1,"705":1,"840":1}}],["bigint",{"2":{"746":1,"751":1}}],["bindnull",{"2":{"739":1}}],["bind",{"2":{"656":2,"739":1,"741":8,"756":1,"801":2}}],["binds",{"2":{"574":1,"646":1,"739":3}}],["binding",{"0":{"741":1},"2":{"462":2,"640":1,"741":1,"746":1,"797":1,"833":1}}],["binarydir",{"2":{"314":1}}],["binary",{"0":{"760":1},"1":{"761":1,"762":1},"2":{"286":1,"757":1,"759":1,"768":1,"771":1,"839":1}}],["bin",{"2":{"241":1,"248":1,"759":1,"761":2,"762":2,"763":2,"768":4}}],["batch",{"0":{"228":1},"2":{"204":1,"228":2}}],["bad",{"2":{"112":1,"158":1,"216":2,"230":1,"567":1,"595":1,"830":1,"831":1,"833":1}}],["backlog",{"2":{"581":1,"697":2}}],["backed",{"2":{"529":1,"612":1,"705":1}}],["backends",{"2":{"736":1}}],["backend",{"0":{"880":1},"2":{"277":1,"336":1,"419":1,"825":1,"826":1,"837":2,"861":1,"869":1,"878":1,"885":1}}],["backbone",{"2":{"348":1,"624":1}}],["backpressure",{"0":{"236":1},"2":{"218":1}}],["backoff",{"2":{"216":1}}],["back",{"2":{"107":1,"571":1,"575":1,"748":2,"797":1}}],["background",{"2":{"103":1,"337":1,"451":1,"452":1,"518":1,"536":1,"582":1,"687":1,"704":1,"717":1}}],["basemodel",{"0":{"831":1},"2":{"826":1,"831":3,"837":1}}],["baserepository",{"2":{"799":1}}],["base",{"2":{"281":2,"607":1,"781":4}}],["based",{"0":{"180":1,"201":1,"226":1,"227":1,"788":1,"830":1},"2":{"3":1,"54":2,"88":1,"167":1,"179":1,"187":1,"208":1,"234":1,"250":1,"251":1,"268":1,"294":1,"342":1,"396":1,"398":1,"436":1,"513":1,"564":1,"581":1,"611":1,"612":1,"624":1,"687":1,"735":1,"740":1,"787":1,"797":1,"810":1,"826":1,"861":2}}],["basic",{"0":{"112":1,"155":1,"361":1,"420":1,"613":1,"677":1,"797":1},"2":{"102":1,"104":1,"108":1,"266":1,"313":1,"465":1,"468":1,"528":1,"563":1,"570":1,"571":1,"575":1,"672":1,"677":1,"682":1}}],["bashmkdir",{"2":{"848":1}}],["bashjournalctl",{"2":{"764":1}}],["bashgit",{"2":{"402":1}}],["bashscp",{"2":{"761":1,"768":1}}],["bashsync",{"2":{"398":1}}],["bashsudo",{"2":{"244":1,"762":1,"763":2,"765":1,"766":3,"767":1}}],["bashbrew",{"2":{"245":1}}],["bashwhich",{"2":{"241":1}}],["bashecho",{"2":{"241":1}}],["bash",{"2":{"241":1,"320":1,"322":1,"323":1,"329":1,"330":1,"331":1,"332":1,"352":1,"360":1,"369":1,"510":4,"759":1,"848":1}}],["bashcurl",{"2":{"90":3,"109":2,"164":1,"194":1,"196":1,"226":1,"241":1,"440":1,"544":1,"631":1,"632":1,"633":1,"769":1,"788":1,"789":1,"790":1,"792":1,"793":1,"803":1,"807":1,"853":1,"856":1,"857":1}}],["bashvix",{"2":{"68":1,"109":1,"164":2,"261":1,"266":8,"272":1,"275":6,"280":1,"287":4,"292":1,"294":1,"295":1,"296":1,"303":1,"304":4,"308":1,"311":2,"312":1,"313":6,"316":1,"319":1,"320":1,"321":1,"322":1,"324":1,"325":5,"327":1,"333":5,"334":2,"336":1,"347":2,"350":1,"354":4,"356":1,"358":1,"361":3,"362":2,"364":1,"366":1,"372":7,"373":1,"375":1,"377":1,"378":1,"380":1,"383":1,"385":1,"387":1,"389":1,"391":1,"392":3,"397":1,"400":1,"401":4,"402":1,"404":1,"406":1,"407":1,"408":2,"410":1,"412":1,"414":1,"415":2,"419":1,"483":1,"579":1,"609":1,"795":1,"803":1,"807":1,"852":1}}],["browser",{"2":{"841":1}}],["broadcast|multicast>",{"2":{"330":1}}],["broadcasts",{"2":{"107":1}}],["broadcasting",{"2":{"86":1,"838":1}}],["broadcast",{"0":{"81":1,"82":1,"83":1},"1":{"82":1,"83":1},"2":{"72":1,"82":1,"83":1,"86":1,"102":1,"106":1,"108":2,"330":1,"838":3,"839":2,"840":3,"842":2}}],["branch",{"2":{"390":1,"394":1,"402":1}}],["bring",{"2":{"211":1}}],["bridge",{"0":{"84":1,"839":1},"2":{"72":1,"84":3,"106":1,"108":6,"802":1,"806":1,"838":2,"839":6,"842":1}}],["breaker",{"0":{"219":1},"2":{"219":1,"224":1}}],["breakdown",{"0":{"129":1},"1":{"130":1,"131":1,"132":1}}],["break",{"2":{"71":4}}],["busy",{"2":{"697":1}}],["business",{"2":{"598":1,"832":1}}],["bundle",{"2":{"578":1,"601":2,"607":1}}],["budget",{"2":{"216":1}}],["but",{"2":{"149":1,"217":1,"271":1,"309":1,"506":1,"526":1,"667":1,"677":1,"758":1,"805":1,"809":1,"829":1,"849":1,"850":1}}],["built",{"0":{"424":1},"2":{"98":1,"125":1,"306":1,"418":1,"475":1,"519":1,"588":1,"640":1,"735":1,"736":1,"737":1,"757":1,"796":1,"802":1,"806":1,"860":1}}],["builds",{"2":{"270":1,"273":1,"348":1,"379":1,"399":1,"526":1,"555":1,"566":2,"614":1}}],["building",{"2":{"105":1,"119":2,"250":1,"335":1,"447":1,"490":1,"512":1,"623":1,"697":1,"755":1,"869":2,"885":1}}],["build",{"0":{"243":1,"260":1,"605":1,"736":1,"760":1,"761":1,"762":1,"848":1},"1":{"244":1,"245":1,"246":1,"261":1,"262":1,"761":1,"762":1},"2":{"92":1,"127":1,"198":1,"244":2,"246":1,"260":1,"261":1,"262":1,"263":3,"264":2,"265":2,"266":10,"267":3,"269":2,"270":1,"288":1,"291":1,"297":1,"306":1,"309":2,"314":1,"339":1,"364":1,"410":1,"426":1,"466":1,"551":1,"558":1,"605":2,"669":1,"757":1,"762":7,"786":1,"798":1,"805":1,"809":1,"848":3,"867":1}}],["builders",{"0":{"783":1},"2":{"53":1,"775":1,"786":1}}],["builder",{"0":{"46":1,"47":1},"2":{"604":1,"782":2}}],["buffered",{"2":{"492":2,"839":1}}],["buffering",{"2":{"232":1,"494":1}}],["buffer",{"2":{"214":1,"723":1}}],["buffers",{"2":{"209":1}}],["buf",{"2":{"71":4,"723":1}}],["b",{"0":{"172":1,"762":1},"2":{"48":1,"108":4,"257":2,"333":1,"334":1,"435":4,"436":3,"741":1,"762":1,"784":1,"805":1,"809":1,"822":1,"823":1,"839":4}}],["bypasses",{"2":{"268":1}}],["bypass",{"2":{"194":5}}],["bytes",{"2":{"176":1,"218":1,"222":1,"229":1,"236":1,"445":1,"465":1,"469":1,"549":1,"575":1,"635":1,"722":2,"723":3,"726":2,"727":2,"734":1,"741":2}}],["byte>",{"2":{"71":3}}],["by",{"0":{"129":1,"477":1,"507":1,"508":1},"1":{"130":1,"131":1,"132":1},"2":{"36":1,"45":1,"66":1,"86":1,"91":1,"105":1,"123":1,"246":1,"251":1,"290":1,"351":1,"355":1,"367":1,"370":1,"402":1,"404":1,"407":2,"408":1,"415":2,"420":2,"460":2,"475":2,"476":1,"478":1,"483":1,"486":1,"490":1,"492":1,"504":1,"506":1,"510":1,"516":1,"520":1,"526":1,"527":1,"529":1,"551":3,"552":1,"555":1,"557":1,"565":1,"576":1,"578":1,"590":1,"607":2,"611":1,"613":1,"643":1,"665":1,"685":1,"687":1,"689":2,"693":1,"698":1,"705":1,"716":1,"740":1,"743":1,"753":1,"775":1,"787":1,"792":1,"793":1,"824":1,"842":1}}],["bottlenecks",{"2":{"862":1}}],["both",{"2":{"54":1,"85":1,"179":1,"215":1,"238":1,"565":1,"597":1,"606":1,"699":2,"751":1,"786":1}}],["boilerplate",{"2":{"851":1}}],["bobby",{"2":{"799":1}}],["bob",{"2":{"799":3}}],["bodies",{"2":{"562":1}}],["body>",{"2":{"552":2,"560":1}}],["body",{"0":{"28":1,"176":1,"445":1,"549":1,"634":1,"635":1,"636":1},"1":{"635":1,"636":1},"2":{"24":1,"28":2,"122":1,"131":1,"167":1,"176":7,"187":1,"222":1,"229":4,"438":1,"445":5,"455":1,"465":1,"469":1,"510":1,"542":1,"549":5,"553":1,"556":2,"562":1,"565":1,"571":2,"575":2,"603":1,"617":1,"618":1,"620":1,"635":6,"645":1,"665":1,"672":1,"675":3,"677":1,"682":1,"684":1,"787":1}}],["bounded",{"2":{"706":1}}],["boundary",{"2":{"686":1}}],["boundaries",{"2":{"685":1}}],["bound",{"0":{"654":1},"2":{"462":3,"506":1,"574":1,"575":1,"654":2,"656":1,"671":2,"693":1}}],["boring",{"2":{"212":1}}],["boost",{"0":{"642":1},"2":{"245":1,"551":1,"553":1,"558":1,"570":2,"640":2,"642":2,"661":1,"675":1}}],["boolean",{"2":{"176":1,"431":1}}],["bool>",{"2":{"108":1,"176":1,"436":1,"839":1}}],["bool",{"0":{"8":1,"431":1},"2":{"8":1,"42":1,"43":1,"44":1,"115":1,"176":1,"431":2,"437":1,"444":1,"468":1,"515":1,"521":1,"548":1,"633":1,"741":2,"777":2,"778":1,"779":1,"793":1}}],["bootcamps",{"2":{"884":1}}],["boots",{"2":{"802":1,"806":1}}],["bootstrap",{"0":{"331":1},"2":{"326":1,"328":1,"331":1,"333":2}}],["bootstraps",{"2":{"290":1}}],["boot",{"2":{"4":1,"331":1,"473":1}}],["begins",{"2":{"748":1}}],["begin",{"2":{"593":2,"596":1,"738":1}}],["beginner",{"0":{"510":1},"1":{"511":1,"512":1},"2":{"454":1}}],["beginners",{"2":{"163":1,"195":1,"569":1,"587":1}}],["beast",{"2":{"551":1,"553":1,"558":1,"570":1,"571":1,"640":1,"642":1,"661":1,"675":1}}],["bearer",{"2":{"88":1,"89":2,"90":1,"156":1,"633":1}}],["being",{"2":{"527":1}}],["belong",{"2":{"508":1}}],["between",{"2":{"428":1,"475":1,"494":1,"622":1,"686":1,"829":1}}],["better",{"2":{"158":1,"511":1}}],["because",{"2":{"217":1,"487":1,"507":1,"508":1,"690":1}}],["become",{"2":{"178":1,"492":1,"666":1}}],["becomes",{"2":{"130":1,"497":1,"518":1,"536":1,"539":1,"692":1,"698":1}}],["behind",{"2":{"160":1,"487":1}}],["behaviors",{"2":{"574":1,"575":1,"581":1}}],["behavioral",{"2":{"1":1,"38":1,"700":1}}],["behavior",{"0":{"35":1,"66":1,"290":1,"312":1,"370":1,"386":1,"409":1,"416":1,"426":1,"446":1,"455":1,"472":1,"491":1,"520":1,"550":1,"562":1,"607":1,"637":1,"695":1},"1":{"492":1,"493":1},"2":{"0":1,"2":1,"4":1,"13":1,"37":1,"39":1,"84":1,"104":1,"125":1,"133":1,"134":1,"153":1,"162":1,"212":2,"220":1,"224":1,"276":1,"278":1,"337":1,"427":1,"434":1,"458":1,"472":1,"475":1,"483":2,"497":1,"510":1,"541":1,"593":1,"596":1,"622":1,"666":1,"687":1,"693":1,"712":1}}],["benchmarks",{"2":{"152":1}}],["benchmark",{"2":{"152":1,"677":1}}],["benchmarking",{"0":{"152":1},"2":{"810":1}}],["best",{"0":{"473":1,"492":1},"2":{"133":1,"141":1,"437":1,"472":1,"492":1,"687":1,"875":1}}],["before",{"2":{"66":1,"119":1,"167":1,"217":1,"224":1,"297":1,"329":1,"376":1,"391":1,"400":1,"413":1,"463":1,"493":1,"518":1,"554":1,"588":1,"649":1,"666":1,"677":1,"693":1,"787":1}}],["be",{"2":{"2":1,"4":1,"10":1,"39":1,"54":1,"62":1,"86":1,"110":1,"133":1,"135":1,"137":1,"142":1,"160":1,"215":1,"216":1,"220":1,"237":1,"281":1,"290":1,"314":1,"335":1,"381":1,"391":2,"402":2,"456":1,"457":1,"459":1,"468":1,"471":1,"473":1,"476":1,"487":2,"492":1,"493":1,"498":3,"507":1,"508":1,"565":1,"577":1,"592":1,"593":1,"616":1,"625":1,"677":1,"705":1,"722":1,"726":1,"736":1,"748":1,"828":1,"829":1}}],["cxx",{"2":{"847":3}}],["cvperiodic",{"2":{"700":1}}],["cvidle",{"2":{"692":1,"699":1}}],["c",{"2":{"436":3,"560":1,"742":1,"751":4,"797":2,"800":2,"805":1,"809":1}}],["centralized",{"2":{"403":1}}],["central",{"2":{"335":1}}],["certbot",{"0":{"767":1},"2":{"758":1,"767":4}}],["certificates",{"2":{"160":1}}],["cerr",{"2":{"138":1,"720":1,"745":1,"746":1,"751":1,"797":1,"798":1,"799":1,"800":1}}],["cwd",{"2":{"298":1,"304":1}}],["cdn",{"2":{"600":1}}],["cdns",{"2":{"578":1}}],["cd",{"2":{"288":1,"289":1,"347":1,"424":1,"762":1,"848":1}}],["ciphertext",{"2":{"728":1}}],["ci",{"2":{"290":1,"314":1,"484":1,"492":1}}],["ci=1",{"2":{"282":1}}],["circuit",{"0":{"219":1},"2":{"219":1,"224":1}}],["crud",{"0":{"799":1}}],["crypto",{"0":{"718":1},"1":{"719":1},"2":{"718":1,"719":3,"720":1,"722":3}}],["cryptographically",{"2":{"723":1}}],["cryptographic",{"2":{"355":1,"718":1}}],["cr",{"2":{"575":1}}],["crashes",{"2":{"492":1,"493":1}}],["crash",{"0":{"498":1},"2":{"472":1,"478":2,"498":1}}],["creation",{"0":{"658":1},"2":{"693":1}}],["creating",{"2":{"402":1,"640":1}}],["createuserstable",{"2":{"751":2}}],["create",{"0":{"746":1,"812":1,"822":1},"2":{"252":2,"256":1,"279":1,"287":3,"325":1,"339":1,"360":1,"457":1,"493":1,"610":1,"704":1,"746":1,"751":2,"763":1,"766":1,"799":1,"801":1,"851":1}}],["created",{"2":{"96":2,"171":2,"172":1,"256":1,"281":1,"288":1,"289":1,"439":2,"453":1,"510":2,"543":2,"567":1,"571":1,"596":1,"604":1,"630":2,"637":1,"799":1}}],["creates",{"2":{"85":1,"120":1,"359":2,"390":1,"564":1,"582":1,"645":2,"647":1,"658":1,"697":1,"698":1,"712":1,"742":1}}],["critical",{"0":{"485":1},"1":{"486":1,"487":1},"2":{"274":1,"332":1,"346":1,"473":1,"875":1}}],["cross",{"0":{"832":1},"2":{"264":3,"266":1,"270":1,"304":1,"588":1,"837":1}}],["ccache",{"2":{"262":1,"264":1}}],["cmakecmake",{"2":{"847":1}}],["cmakelists",{"0":{"847":1},"2":{"368":1,"845":1}}],["cmakepresets",{"2":{"309":1,"314":1}}],["cmake",{"2":{"243":1,"244":1,"245":1,"260":1,"261":1,"262":2,"264":3,"266":1,"268":2,"273":1,"290":1,"294":1,"762":3,"847":2,"848":2,"861":1}}],["cutting",{"2":{"588":1}}],["curriculum",{"2":{"884":1}}],["currently",{"2":{"517":1,"671":1}}],["current",{"0":{"812":1,"816":1,"819":1},"2":{"275":1,"360":1,"368":3,"381":1,"450":1,"589":3,"639":1,"652":1,"666":1,"740":1}}],["curl",{"0":{"90":1},"2":{"164":3,"194":2,"196":1,"774":1,"789":1,"790":2,"792":2,"793":1,"803":2,"805":1,"807":2,"809":1,"853":1}}],["customizable",{"2":{"576":1}}],["custom",{"0":{"669":1,"832":1},"2":{"161":1,"186":1,"204":1,"205":1,"295":1,"446":1,"460":1,"541":1,"550":1,"619":1,"826":1,"832":1,"868":1,"876":1,"884":1}}],["c++20",{"2":{"243":1}}],["c++",{"0":{"880":1},"2":{"153":2,"198":1,"204":1,"205":1,"243":1,"285":1,"336":1,"419":1,"428":1,"477":1,"496":1,"510":2,"629":1,"741":1,"754":1,"780":1,"796":1,"838":1,"852":1,"860":1,"863":1,"867":1,"869":1,"876":1,"878":1,"885":1}}],["clock",{"2":{"788":1,"824":1}}],["clones",{"2":{"400":1}}],["clone",{"2":{"390":1,"398":1,"762":1}}],["closed",{"2":{"618":1,"679":1}}],["closes",{"2":{"574":1,"575":1,"651":1,"676":1}}],["close",{"0":{"78":1,"452":1,"667":1},"2":{"78":1,"236":1,"452":2,"666":1,"667":1,"681":1}}],["cl",{"2":{"246":1}}],["clamped",{"2":{"693":3}}],["class",{"2":{"434":1,"464":1,"467":1,"515":2,"714":1,"750":1,"751":1}}],["classification",{"0":{"276":1},"2":{"274":2}}],["clang",{"2":{"246":1}}],["clarity",{"2":{"125":1}}],["cliff",{"2":{"493":1}}],["cliffs",{"2":{"486":1,"506":1}}],["cli",{"0":{"240":1,"335":1},"1":{"241":1,"242":1,"336":1,"337":1},"2":{"239":1,"296":1,"335":1,"337":1,"348":1,"390":1,"418":1,"419":1,"424":1,"483":1,"609":1,"852":1}}],["clients",{"2":{"212":2,"236":1,"590":1}}],["client",{"0":{"773":1,"841":1},"2":{"71":12,"77":1,"78":1,"107":1,"128":1,"215":1,"217":1,"218":2,"233":2,"236":1,"256":4,"571":1,"575":2,"581":1,"608":1,"640":1,"643":1,"647":1,"658":1,"672":1,"673":1,"839":1,"841":1}}],["cleanly",{"2":{"588":1,"639":1}}],["cleaner",{"2":{"309":1}}],["clean",{"2":{"178":1,"198":1,"255":1,"262":1,"264":1,"268":1,"270":1,"278":1,"306":1,"314":1,"348":1,"390":1,"510":1,"518":1,"587":1,"622":1,"652":1,"870":1,"880":1}}],["cleanup",{"2":{"78":1,"582":1}}],["clearer",{"2":{"656":1}}],["cleared",{"2":{"562":1}}],["clear=never",{"2":{"297":1}}],["clear",{"2":{"117":1,"142":1,"213":1,"222":1,"297":3,"424":4,"425":2,"801":1}}],["ctos",{"2":{"885":1}}],["ctrl+d",{"2":{"419":1}}],["ctrl+c",{"2":{"70":1,"419":1}}],["ctest",{"0":{"311":1},"2":{"307":1,"309":1,"310":1,"311":1}}],["ctx",{"2":{"56":1,"57":1,"63":2,"65":2,"69":8,"70":8,"71":11,"180":8,"186":1,"252":6,"253":2,"254":1,"255":2,"256":3,"589":4,"590":1,"591":1,"592":1,"788":6}}],["css",{"2":{"578":1,"601":2,"607":2}}],["cstdint>",{"2":{"722":1,"746":1,"747":1,"788":1}}],["cstddef>",{"2":{"71":1}}],["cstdlib>",{"2":{"12":1}}],["csignal>",{"2":{"70":1,"71":1}}],["chmod",{"2":{"761":1,"762":1,"768":1}}],["cheap",{"2":{"523":1}}],["checking",{"0":{"444":1,"548":1}}],["checklist",{"0":{"224":1,"671":1,"706":1,"774":1}}],["checksums",{"2":{"351":1,"360":1,"363":1,"367":2,"369":1}}],["checks",{"2":{"130":1,"185":1,"352":1,"355":1,"570":1,"571":1,"575":3,"672":1,"677":1,"684":1,"697":1,"738":1,"792":1}}],["check",{"0":{"155":1,"769":1},"2":{"89":1,"109":2,"175":2,"196":1,"249":1,"264":1,"309":1,"310":1,"314":1,"339":1,"444":1,"548":1,"616":1,"720":1,"723":1,"734":1,"753":1,"771":1,"832":2,"837":1}}],["chown",{"2":{"763":1}}],["chooses",{"2":{"436":1}}],["choices",{"2":{"150":1}}],["chunked",{"2":{"238":1}}],["chunks",{"2":{"231":1,"233":3,"234":1,"236":1,"238":1}}],["chunk",{"0":{"235":1},"2":{"215":1,"218":1,"234":1,"235":1}}],["chrono",{"2":{"69":1,"108":1,"184":1,"191":1,"253":1,"521":2,"650":1,"714":1,"788":1,"824":1,"839":1}}],["chrono>",{"2":{"69":1,"108":1,"788":1,"839":1}}],["channel",{"2":{"874":1}}],["channels",{"0":{"874":1}}],["changing",{"2":{"458":1,"483":1}}],["change",{"2":{"278":1,"394":1,"424":1,"763":1,"805":1,"809":1}}],["changes",{"2":{"208":1,"273":1,"299":1,"310":1,"407":1,"482":1,"483":1,"824":1}}],["changed",{"2":{"35":1,"268":1}}],["chat",{"0":{"102":1,"106":1,"107":1},"1":{"107":1,"108":1,"109":1,"110":1},"2":{"82":1,"83":1,"86":1,"91":1,"102":2,"106":1,"107":1,"108":3,"109":1,"232":1,"838":1,"839":3,"840":4,"841":1,"842":1}}],["chains",{"2":{"134":1,"143":1,"463":1}}],["chain",{"2":{"62":1,"66":1,"91":1,"186":1,"557":1,"592":1,"596":1,"673":1,"792":1,"794":1}}],["chaining",{"0":{"62":1,"186":1,"792":1}}],["chained",{"2":{"54":1,"62":3}}],["charlie",{"2":{"800":2}}],["character",{"2":{"677":1,"682":1}}],["characteristics",{"2":{"590":1}}],["characters",{"2":{"432":1}}],["char",{"2":{"12":1,"741":1}}],["cp",{"2":{"762":1}}],["cpus",{"2":{"150":1}}],["cpu",{"0":{"69":1,"254":1,"702":1},"2":{"69":3,"208":1,"251":2,"254":4,"258":1,"259":1,"264":1,"541":1,"572":1,"577":1,"581":1,"587":1,"616":1,"659":1,"671":1,"678":1,"687":1,"702":1,"850":1,"881":1}}],["cppfor",{"2":{"836":1}}],["cppuser",{"2":{"830":1}}],["cppusing",{"2":{"180":1,"181":1,"184":1,"186":1,"429":1,"456":1,"464":1,"496":1,"719":1,"735":1,"810":1,"833":1}}],["cpptimestamp",{"2":{"814":1,"819":1,"820":1}}],["cppthreadpoolexecutor",{"2":{"531":1}}],["cppexplicit",{"2":{"645":1}}],["cppenum",{"2":{"434":1}}],["cpprouteoptions",{"2":{"616":1}}],["cpprouter",{"2":{"613":2,"616":1,"620":1}}],["cppreturn",{"2":{"594":2}}],["cppres",{"2":{"31":1,"32":1,"33":1,"116":1,"123":1,"158":2}}],["cppreq",{"2":{"25":1,"26":1,"27":1}}],["cpphttp",{"2":{"560":1}}],["cppvoid",{"2":{"510":1,"589":1,"592":1}}],["cppvix",{"2":{"3":1,"4":1,"15":1,"24":1,"30":1,"41":1,"45":1,"56":1,"64":1,"73":1,"85":1,"191":1,"192":1,"193":1,"194":1,"503":1,"529":1,"535":1,"558":1,"650":1,"661":1}}],["cpp|manifest",{"2":{"292":1}}],["cppws",{"2":{"77":1,"78":1,"82":1,"83":1,"84":1}}],["cppsignaturealg",{"2":{"730":1}}],["cppservices",{"2":{"590":1}}],["cppserver",{"2":{"74":1,"662":1,"669":1}}],["cppstruct",{"2":{"515":1,"521":1,"523":1,"557":1}}],["cppstatic",{"2":{"178":1,"180":1,"181":1,"430":1}}],["cppstd",{"2":{"6":1,"28":1,"49":1,"139":2,"147":1,"532":1,"537":1,"538":1,"649":1,"723":1,"732":1,"823":1,"833":1,"835":1}}],["cppinstall",{"2":{"185":1}}],["cppint",{"2":{"7":1,"195":1,"254":1,"828":1}}],["cppif",{"2":{"63":1,"469":1}}],["cppduration",{"2":{"822":1}}],["cppdump",{"2":{"51":1}}],["cppdatetime",{"2":{"816":1,"817":1}}],["cppdate",{"2":{"812":1,"813":1}}],["cppdbconfig",{"2":{"743":1}}],["cppdouble",{"2":{"9":1}}],["cppaeadalg",{"2":{"725":1}}],["cppauto",{"2":{"47":1,"48":1,"50":1,"62":1,"65":2,"255":1,"256":1,"257":2,"430":1,"431":1,"432":1,"433":1,"435":2,"436":1,"460":1,"467":1,"470":1,"471":1,"519":1,"525":1,"526":1,"538":1,"590":1,"591":1,"715":1,"720":1,"728":1,"731":1,"733":1,"824":1,"834":1}}],["cppapp",{"2":{"16":1,"17":1,"19":1,"20":1,"21":1,"22":1,"34":1,"59":1,"60":1,"61":1,"120":2,"122":1,"130":1,"132":2,"138":1,"151":1,"156":1,"157":1,"159":1,"166":1,"169":1,"171":1,"172":2,"173":2,"174":1,"175":2,"176":2,"177":1,"183":1,"187":1,"189":1,"190":1,"450":1,"451":1,"452":1,"453":1,"455":1,"456":1,"457":1,"458":1,"459":1,"462":1,"510":7,"561":1,"855":1,"856":1,"857":1,"858":1}}],["cppjson",{"2":{"45":1,"52":1}}],["cppclass",{"2":{"530":1,"552":1}}],["cppconfig",{"2":{"466":1,"468":1}}],["cppconstexpr",{"2":{"727":1}}],["cppconst",{"2":{"29":1}}],["cppco",{"2":{"253":1}}],["cppctx",{"2":{"63":1,"187":1,"591":1}}],["cppcfg",{"2":{"10":1}}],["cppbool",{"2":{"8":1,"534":1}}],["cpp",{"0":{"295":1,"510":1,"757":1,"846":1},"1":{"511":1,"512":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1},"2":{"3":1,"11":1,"12":1,"15":1,"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"55":2,"56":1,"57":1,"64":2,"68":1,"69":1,"70":1,"71":1,"73":1,"75":1,"79":1,"84":1,"89":1,"93":1,"94":2,"95":1,"96":1,"108":2,"109":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"163":3,"164":2,"180":1,"181":1,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":1,"229":1,"234":1,"252":1,"273":1,"275":4,"291":1,"295":1,"296":2,"303":2,"304":2,"336":1,"419":1,"423":1,"429":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"454":2,"464":1,"478":1,"503":1,"510":4,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"569":1,"579":1,"586":1,"605":1,"606":1,"607":1,"609":1,"610":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"639":1,"667":1,"714":1,"719":1,"722":1,"735":1,"745":1,"746":1,"747":1,"751":1,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":2,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"795":1,"797":1,"798":1,"799":1,"800":1,"803":1,"804":2,"807":1,"808":2,"810":1,"826":1,"827":1,"829":1,"830":1,"831":1,"832":1,"839":2,"840":1,"845":1,"846":1,"847":1,"850":1,"851":2,"852":1,"860":1,"867":1,"872":1,"878":1}}],["cadence",{"2":{"712":1}}],["caddy",{"2":{"160":1}}],["carries",{"2":{"603":1}}],["careful",{"2":{"137":1}}],["carefully",{"2":{"86":1,"259":1}}],["causes",{"2":{"651":1}}],["cause",{"2":{"483":1}}],["categories",{"0":{"338":1,"871":1},"1":{"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1}}],["catches",{"2":{"566":1}}],["catch",{"2":{"71":3,"746":1,"751":1,"797":1,"798":1,"799":1,"800":1}}],["calendar",{"2":{"811":1,"825":1}}],["calculate",{"0":{"648":1},"2":{"574":1}}],["calculates",{"2":{"268":1}}],["callback",{"2":{"707":1,"712":1,"717":1}}],["callbacks",{"2":{"329":1,"681":1,"717":1}}],["callable",{"2":{"519":1,"696":2}}],["callers",{"2":{"756":1}}],["caller",{"2":{"518":1}}],["called",{"2":{"35":1,"66":1,"77":1,"78":1,"79":1,"592":1}}],["calls",{"2":{"128":1,"647":2,"657":1,"658":1,"659":1,"710":1,"874":1}}],["calling",{"2":{"91":1,"95":1,"609":1,"649":1,"792":1}}],["call",{"2":{"17":1,"132":2,"167":1,"210":1,"225":1,"252":1,"475":2,"486":1,"489":1,"562":1,"592":2,"606":1,"646":1,"652":2,"666":1,"671":1,"702":1,"706":1,"710":1,"787":1,"794":1,"797":1}}],["captures",{"2":{"716":1}}],["captured",{"2":{"462":1}}],["capable",{"2":{"624":1}}],["cap",{"2":{"218":1,"236":1}}],["caches",{"2":{"556":1,"590":1,"734":1}}],["cache",{"0":{"194":1,"268":1},"2":{"194":9,"196":1,"234":2,"262":1,"264":3,"268":1,"440":1,"544":1,"563":1,"582":1,"607":1,"717":1}}],["cached",{"2":{"147":1}}],["caching",{"0":{"556":1},"2":{"184":1}}],["case",{"2":{"416":1,"431":1,"434":1,"645":1}}],["cascading",{"2":{"219":1}}],["cast",{"2":{"108":2,"746":2,"747":1,"788":1,"799":5,"839":2}}],["cassert>",{"2":{"69":1}}],["cancel",{"2":{"218":1,"695":1,"700":1,"717":1}}],["candidates",{"2":{"216":2}}],["can",{"2":{"10":1,"40":1,"54":1,"62":1,"66":1,"91":1,"92":1,"110":1,"131":1,"141":1,"159":1,"161":1,"167":2,"179":1,"186":1,"217":1,"220":1,"276":1,"420":1,"456":1,"457":1,"459":1,"460":1,"466":1,"471":1,"486":1,"487":2,"492":2,"493":1,"496":1,"498":1,"510":2,"522":1,"565":1,"574":1,"576":1,"577":1,"578":2,"581":2,"585":1,"592":1,"593":1,"603":1,"613":1,"616":2,"620":2,"670":1,"677":1,"696":1,"705":1,"736":1,"757":1,"768":1,"786":1,"787":2,"790":1,"792":1,"841":1,"849":1,"874":1}}],["cannot",{"2":{"4":1,"468":1,"700":1,"756":1,"801":1}}],["cfg",{"2":{"4":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":3,"12":2,"74":2,"75":2,"194":11,"466":1,"467":1,"468":5,"469":2,"470":4,"471":2,"610":2,"661":2,"743":1,"745":7,"746":9,"747":7,"751":9,"797":4,"804":4,"805":2,"808":4,"809":2,"840":2}}],["copied",{"2":{"352":1,"360":1,"605":1}}],["copies",{"2":{"351":1}}],["copyable",{"2":{"463":1,"523":1,"716":1}}],["copying",{"2":{"151":1,"203":1}}],["copy",{"0":{"760":1,"761":1},"1":{"761":1,"762":1},"2":{"98":1,"523":1}}],["cooperative",{"2":{"258":1}}],["coordination",{"2":{"254":1}}],["cooldown",{"2":{"219":1}}],["column",{"2":{"740":1,"755":2}}],["columns",{"2":{"740":1}}],["collectmetrics",{"2":{"714":2}}],["collector",{"2":{"511":1}}],["collectors",{"2":{"484":1,"487":1,"492":1,"494":1}}],["collected",{"2":{"463":1}}],["collection",{"2":{"143":1,"511":1}}],["color=auto|always|never",{"2":{"484":1}}],["colors",{"2":{"484":5}}],["color",{"0":{"484":1},"2":{"302":3,"305":1,"484":1}}],["cold",{"2":{"212":1}}],["cost",{"2":{"149":1,"475":1,"486":1}}],["correlation",{"2":{"591":1}}],["correct",{"2":{"436":1,"771":1}}],["correctly",{"2":{"126":1,"810":1}}],["corruption",{"2":{"489":1}}],["coroutines",{"2":{"880":1}}],["coroutine",{"2":{"250":1,"251":3,"252":1,"253":1,"254":1,"256":1,"258":1,"861":1,"881":1}}],["cors",{"0":{"190":1},"2":{"183":2,"190":1,"598":1}}],["core",{"0":{"165":1,"233":1,"251":1,"329":1,"337":1,"474":1,"515":1,"527":1,"533":1,"551":1,"569":1,"570":1,"573":1,"588":1,"602":1,"611":1,"672":1,"737":1,"879":1},"1":{"166":1,"167":1,"475":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"534":1,"535":1,"536":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"603":1,"604":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"738":1,"739":1,"740":1,"880":1,"881":1,"882":1,"883":1},"2":{"0":1,"3":1,"14":1,"15":1,"37":1,"41":1,"45":1,"69":6,"70":5,"71":7,"73":1,"119":1,"150":1,"250":1,"252":4,"504":1,"540":1,"551":1,"557":1,"569":1,"570":2,"576":1,"580":1,"588":1,"604":1,"702":2,"735":1,"849":1,"850":1}}],["country",{"2":{"423":1}}],["counts",{"2":{"223":1}}],["counter",{"2":{"219":1,"691":1}}],["counters",{"2":{"161":1,"501":1,"714":1}}],["count",{"0":{"648":1},"2":{"108":1,"223":1,"264":1,"392":1,"477":1,"574":1,"648":1,"671":1,"704":1,"783":1,"788":1,"820":1,"823":2,"824":1,"839":1}}],["cout",{"2":{"11":1,"42":1,"69":4,"70":4,"71":8,"136":1,"137":2,"139":2,"430":1,"745":1,"746":2,"747":1,"751":2,"777":3,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":2,"797":1,"798":1,"799":3,"800":1,"812":1,"813":1,"814":1,"816":1,"817":1,"819":1,"820":1,"823":2,"824":1,"827":1,"830":1,"833":1,"836":1}}],["come",{"2":{"416":1,"572":2,"743":1}}],["comes",{"2":{"143":1,"153":1}}],["com",{"2":{"241":1,"242":1,"762":1,"766":1,"767":1,"797":1,"798":1,"799":2,"800":1,"827":1,"866":1,"877":1,"886":1}}],["commentid",{"2":{"555":1}}],["comments",{"2":{"555":1}}],["committing",{"2":{"748":1}}],["committed",{"2":{"381":1,"746":1,"800":1}}],["commits",{"2":{"390":1}}],["commit",{"2":{"376":1,"379":2,"380":1,"384":1,"393":1,"394":2,"395":1,"399":2,"403":1,"409":1,"738":1,"746":1,"748":1,"751":2,"797":2,"800":1}}],["command>",{"2":{"424":1}}],["commands",{"0":{"318":1,"404":1,"424":1},"1":{"319":1,"320":1,"321":1,"322":1},"2":{"426":1,"805":1,"809":1}}],["command",{"0":{"338":1},"1":{"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1},"2":{"242":1,"248":1,"278":1,"290":1,"306":1,"384":1,"424":2}}],["common",{"0":{"188":1,"210":1,"323":1,"561":1,"756":1,"770":1,"801":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"771":1,"772":1,"773":1},"2":{"222":1,"234":1,"428":1,"431":1,"466":1,"481":1,"558":1,"567":1,"595":1,"736":1,"741":1,"758":1}}],["communication",{"2":{"104":1,"861":1}}],["combine",{"2":{"186":1}}],["combined",{"0":{"85":1}}],["coming",{"2":{"163":1,"496":1,"510":1,"569":1}}],["company",{"2":{"884":1}}],["companies",{"2":{"869":1,"885":1}}],["comparator",{"2":{"690":1}}],["compares",{"2":{"690":2}}],["compatible",{"2":{"612":1,"787":1}}],["compatibility",{"2":{"208":1}}],["complex",{"2":{"599":1,"873":1}}],["completion",{"2":{"518":1}}],["completed",{"2":{"698":1}}],["completes",{"2":{"257":1}}],["complete",{"0":{"124":1},"2":{"851":1}}],["compete",{"2":{"476":1}}],["compiled",{"2":{"759":1}}],["compile",{"2":{"266":1,"274":1,"295":1,"434":1,"454":1,"852":1}}],["compiler",{"0":{"303":1},"2":{"243":1,"268":1,"292":1,"298":1,"303":1}}],["compilation",{"2":{"264":1,"270":1}}],["computation",{"2":{"203":1}}],["computes",{"2":{"712":1}}],["compute",{"2":{"199":1,"850":1}}],["composition",{"2":{"597":1}}],["composed",{"2":{"258":1}}],["composable",{"2":{"66":1,"826":1,"837":1}}],["components",{"0":{"573":1,"643":1,"688":1},"1":{"689":1,"690":1,"691":1,"692":1},"2":{"148":1,"251":1}}],["component",{"2":{"2":1,"39":1,"672":1}}],["co",{"2":{"69":3,"70":2,"71":6,"252":1,"254":1,"255":1,"256":2,"257":2,"258":1}}],["coexist",{"2":{"40":1,"786":1}}],["covers",{"2":{"14":1,"72":1,"198":1,"239":1}}],["conn",{"2":{"745":2,"746":3,"747":2,"751":2,"797":1,"800":1}}],["connector",{"2":{"754":1}}],["connect",{"0":{"745":1},"2":{"215":1,"329":6,"333":2,"334":1,"512":1,"756":1,"801":1,"803":1,"804":2,"807":1,"808":2}}],["connectionfactory",{"2":{"754":2}}],["connectionpool",{"2":{"735":1,"742":1,"743":1,"754":1,"797":1,"798":1,"799":1,"800":1}}],["connections",{"2":{"527":1,"575":1,"590":1,"640":1,"651":1,"672":1,"676":1,"742":2,"756":2,"838":1}}],["connection",{"0":{"738":1,"742":1,"797":1},"2":{"121":1,"127":2,"216":1,"234":1,"249":1,"256":1,"570":1,"571":1,"574":1,"575":1,"618":1,"640":1,"643":1,"672":1,"673":1,"675":1,"680":1,"685":1,"686":1,"735":2,"738":2,"742":2,"751":2,"753":1,"754":1,"796":1,"882":1}}],["connects",{"2":{"77":1,"348":1,"639":1}}],["connected",{"2":{"71":1,"745":1}}],["condition",{"2":{"700":1}}],["conditions",{"2":{"699":1}}],["conflicts",{"2":{"703":1}}],["conflict",{"2":{"595":1}}],["confidentiality",{"2":{"724":1}}],["confirmation",{"2":{"832":1}}],["confirm",{"2":{"196":1,"832":2}}],["configurable",{"2":{"571":1,"676":1}}],["configuration",{"0":{"464":1},"2":{"0":1,"3":2,"4":1,"12":1,"13":1,"37":1,"74":1,"270":1,"290":1,"473":1,"482":1,"590":1,"743":1,"851":1,"873":1,"883":1}}],["configures",{"2":{"273":1}}],["configure",{"2":{"220":1,"260":1,"267":1,"268":1,"291":1,"297":1,"470":1}}],["configured",{"2":{"160":1,"224":1,"537":1,"574":1,"640":1,"678":1}}],["config",{"0":{"3":1,"465":1,"466":1,"743":1},"1":{"467":1},"2":{"1":1,"3":4,"4":3,"11":5,"12":5,"13":2,"38":1,"75":5,"194":1,"244":1,"245":1,"304":2,"464":7,"465":3,"466":3,"467":4,"468":2,"470":4,"471":4,"473":2,"475":1,"509":2,"574":1,"610":2,"645":4,"648":1,"654":1,"658":1,"661":2,"664":1,"671":1,"676":1,"743":10,"759":2,"762":1,"766":1,"767":1,"840":7}}],["convention",{"2":{"704":1}}],["conventions",{"2":{"484":1}}],["convenience",{"0":{"470":1},"2":{"524":1,"538":1,"601":1,"741":1,"742":1}}],["converts",{"2":{"567":1}}],["convert",{"0":{"814":1},"2":{"434":1,"435":1}}],["conversionerror",{"2":{"428":1,"429":1,"430":2,"432":1}}],["conversions",{"2":{"428":1}}],["conversion",{"0":{"428":1},"1":{"429":1},"2":{"428":2,"429":9,"430":1,"436":1}}],["concrete",{"2":{"529":1}}],["concatenation",{"2":{"486":1}}],["concurrency",{"0":{"460":1,"716":1,"881":1},"2":{"259":1,"529":1,"539":1,"540":1,"541":1,"570":1,"574":1,"648":1,"692":1,"702":1,"706":1,"864":1,"868":1,"881":1}}],["concurrently",{"2":{"257":1,"581":1}}],["concurrent",{"2":{"222":1,"693":1}}],["concerns",{"2":{"202":1,"588":1}}],["conceptually",{"2":{"585":1}}],["concepts",{"0":{"251":1,"796":1},"2":{"100":1,"588":1,"737":1}}],["concept",{"0":{"206":1},"2":{"98":1,"105":1}}],["consulting",{"0":{"860":1},"1":{"861":1,"862":1,"863":1,"864":1,"865":1,"866":1},"2":{"860":1,"868":1,"871":1}}],["conscious",{"2":{"612":1}}],["console",{"0":{"474":1,"475":1,"477":1,"483":1,"506":1},"1":{"475":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1},"2":{"267":1,"451":1,"456":2,"459":1,"462":1,"474":2,"475":2,"476":1,"477":6,"478":6,"480":5,"482":1,"483":5,"484":1,"486":2,"487":2,"489":1,"492":1,"496":1,"497":4,"498":1,"501":3,"503":2,"504":1,"506":2,"508":1,"509":2,"804":2,"808":2}}],["considerations",{"0":{"141":1,"150":1}}],["consistently",{"2":{"706":1}}],["consistent",{"2":{"116":1,"230":1,"235":1,"348":1,"526":1}}],["consistency",{"0":{"116":1}}],["constexpr",{"2":{"434":1}}],["constants",{"2":{"551":1,"567":1}}],["constant",{"2":{"215":1,"684":1}}],["constraint",{"2":{"522":1}}],["constraints",{"0":{"491":1},"1":{"492":1,"493":1},"2":{"208":1,"516":1,"832":1,"837":1}}],["constructs",{"2":{"564":1}}],["construction",{"0":{"531":1,"693":1},"1":{"532":1},"2":{"4":1,"486":1,"691":1,"742":1,"775":1}}],["constructors",{"2":{"595":1}}],["constructor",{"0":{"4":1,"16":1,"74":1,"645":1},"2":{"466":1,"554":1,"693":1,"748":1}}],["const",{"2":{"12":1,"71":4,"75":2,"89":1,"108":8,"113":1,"114":1,"130":1,"132":1,"155":1,"156":1,"157":1,"172":2,"173":1,"174":3,"176":2,"177":1,"181":1,"187":1,"200":1,"201":1,"206":1,"207":1,"226":2,"227":1,"228":1,"229":1,"430":1,"443":2,"444":1,"445":1,"454":1,"515":1,"535":1,"537":2,"547":2,"548":1,"549":1,"552":1,"565":4,"627":1,"631":1,"632":3,"633":3,"635":1,"741":1,"743":1,"746":2,"747":1,"751":2,"788":1,"789":1,"790":1,"793":1,"797":1,"798":2,"799":4,"800":1,"827":1,"830":1,"832":1,"833":1,"836":1,"839":8,"840":2,"846":3,"855":1,"856":1,"857":1}}],["contact",{"0":{"866":1,"877":1,"886":1}}],["container",{"2":{"557":1,"589":1,"590":1,"594":1}}],["contained",{"2":{"98":1}}],["contains",{"2":{"98":1,"176":2,"228":2,"368":2,"428":1,"594":1,"755":2}}],["contain",{"2":{"12":1}}],["continuation",{"0":{"592":1},"2":{"592":1,"599":1}}],["continue",{"2":{"2":1,"39":1,"89":1,"167":1,"589":1,"592":1,"787":1,"788":1}}],["contract",{"0":{"485":1},"1":{"486":1,"487":1},"2":{"475":1}}],["contributions",{"2":{"390":1}}],["controlled",{"2":{"123":1,"251":1,"528":1,"529":1,"539":1,"706":1}}],["control",{"0":{"484":1,"592":1},"2":{"36":1,"53":1,"121":1,"131":1,"143":1,"154":1,"160":1,"171":1,"198":1,"234":1,"252":1,"258":1,"259":1,"381":1,"438":2,"440":1,"483":1,"511":1,"529":1,"541":1,"542":2,"544":1,"563":1,"592":1,"599":2,"638":1,"677":1,"682":1,"717":1,"775":1,"859":2}}],["controls",{"2":{"30":1,"446":1,"483":1,"550":1,"712":1}}],["contention",{"2":{"850":1,"862":1}}],["content",{"0":{"446":1,"550":1},"2":{"159":2,"196":2,"234":1,"438":1,"446":2,"455":1,"542":1,"550":2,"567":1,"607":1,"617":1,"618":1,"734":1}}],["context",{"0":{"56":1,"180":1,"589":1,"788":1},"1":{"57":1},"2":{"35":1,"54":1,"55":1,"56":1,"57":1,"63":1,"65":2,"69":4,"70":4,"71":4,"179":2,"180":2,"251":1,"252":6,"259":2,"447":1,"461":1,"574":3,"588":1,"589":3,"591":1,"592":1,"596":1,"640":1,"642":1,"645":1,"646":1,"651":2,"659":1,"666":1,"727":1,"787":1,"788":3,"881":1}}],["code=",{"2":{"836":1}}],["codebase",{"0":{"864":1},"2":{"706":1,"736":1}}],["codes",{"0":{"96":1,"177":1,"371":1,"439":1,"543":1,"630":1},"2":{"213":1,"438":1,"510":1,"542":1,"551":1,"566":1,"567":1,"587":1,"595":1,"859":1}}],["code",{"0":{"750":1,"858":1},"2":{"2":1,"39":1,"67":1,"71":3,"111":1,"116":2,"117":1,"177":7,"199":2,"205":1,"221":1,"232":1,"430":1,"437":1,"470":1,"482":1,"486":1,"513":1,"539":1,"560":1,"594":1,"595":1,"639":1,"718":1,"735":1,"751":1,"802":1,"806":1,"810":1,"836":2,"870":1}}],["np",{"2":{"659":1,"702":1}}],["npos",{"2":{"114":1,"157":1}}],["ndebug",{"2":{"566":1}}],["numeric",{"0":{"828":1},"2":{"551":1,"567":1,"829":1,"837":1}}],["number",{"2":{"532":1,"581":1,"687":1,"689":1,"690":1,"829":2}}],["nums",{"2":{"422":2}}],["nullopt",{"2":{"835":1}}],["nullptr",{"2":{"741":1}}],["null",{"2":{"42":1,"575":1,"739":1,"740":1,"741":2,"746":2,"751":2,"756":1,"777":1}}],["n>",{"2":{"264":1,"274":1,"297":1,"316":1,"320":2}}],["ninja",{"2":{"243":1,"244":1,"245":1,"262":1,"263":5,"264":4,"269":1,"297":1,"304":2,"309":1,"312":1,"762":2}}],["nginxserver",{"2":{"766":1}}],["nginx",{"0":{"766":1},"2":{"160":1,"758":1,"765":1,"766":7,"767":3,"768":1,"773":1,"774":1}}],["nvme",{"2":{"150":1}}],["navigation",{"0":{"785":1}}],["nano",{"2":{"763":1,"766":1}}],["naturally",{"2":{"496":1}}],["native",{"2":{"110":1,"404":1}}],["name|file",{"2":{"292":1}}],["name|path>",{"2":{"280":1}}],["named",{"2":{"275":1}}],["name>",{"2":{"264":2,"297":2,"323":2,"339":1,"353":1,"360":1,"363":1,"375":1,"399":1}}],["names",{"2":{"234":1}}],["namespace>",{"2":{"375":1,"399":1}}],["namespace",{"2":{"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"57":1,"64":1,"89":1,"93":1,"94":1,"95":1,"96":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"180":1,"181":1,"184":1,"186":1,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":2,"229":1,"234":1,"415":1,"429":2,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"464":1,"478":1,"496":1,"510":1,"529":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"586":1,"626":1,"627":1,"628":1,"629":2,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"719":2,"722":1,"735":2,"745":1,"746":1,"747":1,"751":1,"755":1,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":1,"788":2,"789":1,"790":1,"791":1,"792":1,"793":1,"797":1,"798":1,"799":2,"800":1,"804":1,"808":1,"810":2,"827":1,"829":1,"839":1,"846":1,"851":1}}],["name",{"2":{"44":1,"46":1,"52":2,"80":1,"113":1,"173":2,"176":7,"196":1,"272":1,"322":1,"323":1,"325":1,"359":1,"360":3,"361":2,"363":1,"407":1,"415":1,"423":3,"435":1,"465":1,"510":1,"553":2,"557":1,"576":1,"629":1,"631":1,"746":3,"747":1,"751":1,"766":1,"779":2,"780":1,"785":1,"795":1,"797":1,"799":6,"800":1,"801":1,"846":1}}],["nlohmann",{"0":{"782":1},"1":{"783":1,"784":1,"785":1},"2":{"45":1,"558":1,"605":1,"775":1}}],["n",{"2":{"11":1,"42":1,"69":4,"70":4,"71":12,"234":9,"320":1,"329":1,"430":1,"526":1,"659":1,"720":1,"745":2,"746":3,"747":1,"751":3,"755":1,"771":1,"777":3,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":2,"797":2,"798":2,"799":4,"800":2,"812":1,"813":1,"814":1,"816":1,"817":1,"819":1,"820":1,"823":2,"824":1,"827":1,"830":1,"833":1,"836":1}}],["new",{"0":{"279":1},"1":{"280":1,"281":1,"282":1},"2":{"236":1,"279":1,"280":1,"287":4,"316":1,"322":3,"325":2,"339":1,"347":1,"390":2,"651":1,"697":1,"700":1,"768":3,"838":1}}],["needs",{"2":{"501":1,"875":1}}],["needed",{"2":{"273":1,"582":1,"772":1}}],["need",{"2":{"223":1,"232":1,"243":1,"518":1,"541":1,"671":1,"717":1,"722":1,"763":1,"786":2}}],["never",{"2":{"157":1,"212":1,"360":1,"362":1,"484":1,"492":1,"497":1,"498":1,"728":1,"734":1,"756":1}}],["near",{"2":{"151":1,"475":1,"486":1,"509":1}}],["necessary",{"2":{"141":1}}],["networks",{"2":{"842":1}}],["network",{"0":{"341":1},"2":{"199":1,"212":1,"216":1,"249":1,"330":1,"337":1,"384":1,"413":1,"572":1,"686":1,"859":1}}],["networking",{"2":{"143":1,"328":1,"348":1,"513":1,"527":1,"539":1,"568":1,"570":1,"572":1}}],["net",{"2":{"71":3,"629":1,"642":1}}],["nested",{"0":{"629":1,"780":1},"2":{"10":1,"52":1,"149":1,"423":1,"457":1,"465":1,"469":1,"593":1,"785":1}}],["next",{"0":{"204":1,"512":1,"592":1},"2":{"2":1,"39":1,"56":2,"57":3,"64":3,"66":1,"89":3,"91":2,"97":1,"110":1,"167":2,"179":2,"180":6,"181":6,"238":1,"288":1,"289":1,"456":5,"571":1,"588":1,"589":3,"592":6,"603":1,"647":1,"679":1,"692":1,"698":1,"712":5,"740":2,"787":1,"788":4,"789":4,"790":3,"791":3,"792":7,"793":3,"794":1}}],["now",{"2":{"559":1,"667":1,"712":1,"763":1,"788":3,"812":1,"816":3,"819":1,"820":1,"824":1}}],["noexcept",{"2":{"537":2,"552":1}}],["normalized",{"2":{"595":1,"794":1}}],["normalizes",{"2":{"563":1}}],["normally",{"2":{"510":1,"852":1}}],["normal",{"2":{"225":1,"704":1,"839":2}}],["nodeconfig",{"2":{"804":1,"808":1}}],["nodes",{"2":{"328":1,"670":1,"805":1,"809":1}}],["node",{"0":{"511":1,"583":1,"584":1},"2":{"163":1,"195":1,"326":1,"327":1,"328":1,"329":2,"331":1,"333":1,"341":1,"474":1,"475":2,"496":1,"509":1,"510":3,"511":1,"569":1,"572":2,"802":1,"804":5,"805":1,"806":1,"808":5,"809":1,"841":1,"863":1,"869":1,"883":1}}],["nosniff",{"2":{"159":1,"607":1}}],["nonce",{"0":{"726":1},"2":{"726":2,"727":3,"728":3}}],["nonces",{"2":{"723":1,"734":2}}],["noninteractive=1",{"2":{"282":1}}],["nonewprivileges=true",{"2":{"763":1}}],["none",{"2":{"264":1,"532":1}}],["non",{"0":{"476":1},"2":{"86":1,"103":1,"463":3,"476":1,"506":1,"528":1,"702":1,"739":1}}],["notfound",{"2":{"858":1}}],["notify",{"2":{"692":1,"699":1}}],["note",{"0":{"705":1},"2":{"456":1,"483":1,"526":1,"652":1,"699":1,"791":1}}],["notes",{"0":{"13":1,"35":1,"53":1,"66":1,"86":1,"91":1,"110":1,"209":1,"238":1,"290":1,"314":1,"355":1,"381":1,"386":1,"395":1,"409":1,"416":1,"426":1,"437":1,"463":1,"498":1,"540":1,"663":1,"701":1,"794":1,"805":1,"809":1,"842":1},"1":{"664":1,"665":1,"666":1,"667":1,"702":1,"703":1},"2":{"1":1,"38":1,"389":1,"392":2,"484":1,"605":1,"712":1,"722":1,"797":1}}],["nothing",{"2":{"35":1,"95":1,"123":1,"127":1,"133":1,"142":1,"162":2,"252":1,"268":1,"438":1,"542":1,"748":1,"796":1,"849":1}}],["not",{"0":{"248":1,"476":1,"477":1,"507":1,"508":1,"666":1,"876":1},"2":{"12":1,"66":2,"69":1,"91":2,"105":1,"113":1,"118":1,"135":1,"137":1,"150":1,"152":1,"153":1,"154":1,"158":1,"161":1,"162":1,"173":1,"185":1,"198":1,"205":1,"212":1,"216":1,"217":1,"218":1,"221":1,"224":1,"230":1,"250":1,"253":1,"254":1,"352":1,"355":1,"360":2,"362":1,"384":1,"395":1,"409":1,"426":1,"474":1,"476":1,"477":1,"483":1,"494":1,"497":1,"506":1,"539":1,"552":1,"562":1,"567":2,"571":1,"576":2,"581":1,"587":1,"591":1,"592":1,"595":1,"604":1,"612":1,"619":1,"630":2,"631":1,"646":2,"647":1,"652":1,"654":1,"664":1,"665":3,"666":1,"667":1,"677":1,"678":1,"679":1,"682":1,"695":1,"698":2,"700":1,"712":1,"716":1,"735":1,"746":3,"751":3,"786":1,"791":1,"792":1,"794":1,"797":1,"824":1,"832":1,"846":1,"858":1}}],["notation",{"2":{"3":1,"10":1}}],["no",{"2":{"2":2,"13":2,"39":2,"111":1,"121":1,"125":3,"143":2,"144":1,"145":1,"213":1,"234":1,"251":1,"256":1,"259":1,"262":1,"264":3,"281":1,"283":1,"297":1,"301":1,"302":1,"304":1,"329":1,"337":1,"352":1,"355":1,"360":2,"361":1,"368":1,"369":2,"379":2,"392":1,"399":2,"403":2,"409":1,"413":1,"416":1,"427":2,"437":1,"440":1,"455":2,"466":1,"472":1,"475":9,"484":1,"486":7,"492":1,"493":1,"498":1,"506":1,"510":3,"511":2,"544":1,"562":1,"567":1,"579":1,"590":1,"601":1,"605":1,"609":2,"617":1,"618":2,"619":1,"621":1,"622":1,"645":1,"665":1,"681":2,"683":1,"684":1,"699":1,"702":1,"742":1,"763":1,"768":1,"771":1,"775":1,"810":2,"826":1,"844":1,"851":2,"859":1,"870":1}}],["mv",{"2":{"768":1}}],["mkdir",{"2":{"763":1}}],["m1",{"2":{"751":2}}],["mb",{"2":{"675":1}}],["mm",{"2":{"478":4,"497":1,"813":1,"817":2}}],["mydatabase>",{"2":{"590":2}}],["mydb",{"2":{"465":1}}],["my",{"2":{"589":1,"847":3,"848":1}}],["myuser",{"2":{"465":1}}],["myexecutor>",{"2":{"460":1}}],["myserver",{"2":{"714":2}}],["mysqlconfig",{"2":{"743":1}}],["mysql|sqlite>",{"2":{"322":1}}],["mysql",{"0":{"754":1},"2":{"317":1,"322":1,"323":1,"325":1,"736":2,"743":1,"745":5,"746":7,"747":5,"751":7,"754":2,"755":1,"795":1,"797":1,"798":1,"799":1,"800":1}}],["mysuite",{"2":{"311":1}}],["msg",{"2":{"720":1,"727":2,"732":2,"733":1}}],["ms>",{"2":{"329":2,"330":1}}],["msvc",{"2":{"246":1}}],["ms",{"2":{"194":1,"223":1,"468":1,"788":2,"804":1,"808":1,"823":1,"824":1}}],["mobile",{"2":{"841":1}}],["monotonic",{"2":{"687":1,"810":1,"824":1}}],["monitor",{"0":{"650":1},"2":{"574":1}}],["monitoring",{"2":{"537":1}}],["more",{"2":{"498":1,"522":1,"849":1,"867":1,"871":1}}],["moving",{"2":{"863":1}}],["movable",{"2":{"463":1,"716":1}}],["moves",{"2":{"356":1}}],["move",{"2":{"71":1,"75":1,"148":1,"180":1,"181":2,"194":1,"256":1,"538":1,"793":1,"840":1}}],["mount",{"2":{"458":1}}],["mold",{"2":{"262":1,"264":1,"266":1}}],["most",{"2":{"92":1,"186":1,"483":1,"497":1,"568":1,"765":1}}],["modular",{"2":{"335":1,"340":1,"861":1,"870":1,"880":1}}],["module",{"2":{"211":1,"234":1,"250":1,"428":1,"529":1,"600":1,"687":1,"718":1,"735":1,"795":1,"810":1,"826":1,"868":1}}],["modules",{"0":{"340":1},"2":{"91":1,"340":2,"456":1,"474":1,"578":1,"604":1}}],["mode",{"0":{"269":1,"276":1,"283":1,"294":1,"295":1,"296":1,"299":1,"300":1,"303":1,"459":1},"1":{"284":1,"285":1,"286":1},"2":{"275":3,"290":1,"298":1,"304":1,"305":1,"306":1,"313":1,"328":1,"330":1,"372":1,"459":2,"465":1,"468":2,"500":1,"575":1,"677":1}}],["mode>",{"2":{"264":2}}],["modes",{"0":{"293":1},"1":{"294":1,"295":1,"296":1},"2":{"218":1,"278":1,"362":1,"677":1}}],["modern",{"0":{"880":1},"2":{"153":1,"243":1,"336":1,"419":1,"510":1,"718":1,"850":1,"878":1}}],["models",{"0":{"865":1},"2":{"204":1,"230":1,"826":1,"837":1}}],["model",{"0":{"121":1,"144":1,"165":1,"258":1,"430":1,"485":1,"511":1,"595":1,"614":1,"684":1,"720":1,"737":1,"836":1},"1":{"166":1,"167":1,"486":1,"487":1,"738":1,"739":1,"740":1},"2":{"119":1,"198":1,"199":1,"200":1,"202":1,"203":1,"204":1,"205":1,"207":4,"208":1,"209":2,"212":1,"214":1,"223":2,"225":1,"231":1,"306":1,"342":1,"376":1,"381":1,"403":1,"417":1,"435":1,"575":1,"595":1,"735":2,"741":1,"755":1,"864":1,"880":1}}],["modifications",{"2":{"133":1}}],["modifying",{"2":{"395":1}}],["modify",{"2":{"66":1,"409":1}}],["mw3",{"2":{"62":3}}],["mw2",{"2":{"62":3}}],["mw1",{"2":{"62":3}}],["mw",{"2":{"57":2,"59":1,"60":1,"61":1,"64":2,"65":2,"180":2,"181":2,"186":1,"456":4,"457":1,"589":1,"590":1,"592":1,"593":1,"594":3}}],["might",{"2":{"604":1}}],["migrating",{"2":{"869":1,"885":1}}],["migration",{"0":{"863":1},"2":{"317":1,"322":2,"325":1,"750":1,"751":1,"755":1}}],["migrationsrunner",{"2":{"750":1,"751":1}}],["migrations",{"0":{"749":1,"750":1,"751":1},"1":{"750":1,"751":1},"2":{"315":1,"317":1,"319":1,"320":1,"321":1,"323":1,"325":5,"337":1,"344":1,"735":1,"751":6,"801":1,"882":1}}],["migrator",{"2":{"323":1}}],["migrate",{"0":{"319":1},"2":{"316":1,"319":1,"325":2}}],["mime",{"2":{"563":1}}],["mismatch",{"2":{"756":1,"801":1}}],["misuse",{"2":{"497":1}}],["missing",{"2":{"89":1,"155":1,"226":1,"352":1,"369":1,"370":1,"464":1,"468":1,"472":2,"563":1,"589":1,"792":1,"793":1,"801":1}}],["mid",{"2":{"217":1,"218":2,"475":1,"483":1}}],["middlewares",{"2":{"195":5,"456":1}}],["middlewarefn",{"2":{"56":1,"57":1,"180":1}}],["middleware",{"0":{"54":1,"56":1,"58":1,"62":1,"64":1,"163":1,"167":1,"179":1,"180":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"194":1,"456":1,"588":1,"596":1,"598":1,"787":1,"788":1,"789":1,"790":1,"791":1,"793":1},"1":{"57":1,"59":1,"60":1,"61":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":2,"181":2,"182":1,"183":2,"184":2,"185":2,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1},"2":{"36":1,"54":4,"55":4,"56":1,"57":5,"62":2,"65":2,"66":4,"87":1,"89":2,"91":1,"101":1,"125":1,"134":1,"143":1,"161":1,"163":4,"164":3,"167":3,"176":1,"179":3,"180":7,"181":4,"182":1,"184":1,"186":3,"188":1,"189":1,"190":1,"191":2,"192":6,"193":2,"194":2,"196":2,"447":1,"456":1,"457":1,"463":1,"511":1,"551":1,"557":2,"568":1,"588":1,"589":3,"590":1,"592":2,"593":1,"595":1,"596":1,"597":1,"598":2,"599":1,"787":6,"788":9,"789":5,"790":1,"791":1,"792":1,"793":2,"794":3,"849":1}}],["mirrors",{"2":{"195":1}}],["min",{"2":{"703":1,"742":1,"746":1,"751":1,"797":1,"828":1,"830":1,"831":1,"840":1}}],["minisig",{"2":{"370":1}}],["minisign",{"2":{"343":1,"352":1,"355":1,"359":1,"362":2,"363":1,"367":1,"369":1,"370":1,"372":1}}],["minimum",{"2":{"483":1,"648":1,"847":1}}],["minimizes",{"2":{"506":1}}],["minimized",{"2":{"490":1}}],["minimize",{"2":{"151":1}}],["minimalism",{"2":{"475":1}}],["minimal",{"0":{"11":1,"23":1,"57":1,"75":1,"93":1,"124":1,"128":1,"136":1,"144":1,"145":1,"169":1,"200":1,"206":1,"234":1,"586":1,"610":1,"626":1,"744":1,"774":1,"841":1,"845":1,"847":1,"851":1,"854":1},"1":{"745":1,"746":1,"747":1,"855":1,"856":1,"857":1,"858":1},"2":{"1":1,"2":1,"14":1,"36":1,"38":1,"39":1,"53":1,"67":1,"72":1,"86":1,"87":1,"92":1,"97":1,"98":2,"100":1,"102":1,"104":1,"105":1,"106":1,"142":1,"143":1,"148":1,"203":1,"206":1,"207":1,"210":1,"219":1,"223":1,"252":1,"264":1,"267":1,"404":1,"427":1,"430":1,"470":1,"497":1,"508":1,"509":1,"510":1,"523":1,"590":1,"597":1,"625":1,"684":1,"704":1,"718":1,"720":1,"735":1,"755":1,"763":1,"775":2,"786":1,"788":1,"789":1,"793":1,"795":1,"801":1,"802":1,"806":1,"810":1,"833":1,"838":2,"844":1}}],["minute",{"2":{"222":1}}],["minutes",{"2":{"184":1,"191":1}}],["mindset",{"0":{"151":1,"162":1,"203":1}}],["mixed",{"0":{"637":1}}],["mix",{"2":{"132":1,"172":1,"637":1}}],["milliseconds>",{"2":{"788":1}}],["milliseconds",{"0":{"712":1},"2":{"69":1,"253":1,"521":2,"822":1}}],["mutex",{"2":{"490":2}}],["mutation",{"2":{"785":1}}],["mutating",{"2":{"575":1}}],["mutate",{"2":{"52":1,"217":1}}],["mutable",{"2":{"13":1,"181":1,"477":1,"683":1}}],["multipart",{"0":{"192":1},"2":{"192":2}}],["multiple",{"2":{"62":1,"173":1,"220":1,"228":1,"257":1,"574":1,"575":1,"710":1,"755":1,"805":1,"809":1,"849":1}}],["multi",{"2":{"150":1,"477":1,"489":1,"832":1,"842":1,"850":1}}],["must",{"2":{"35":1,"215":1,"218":1,"220":1,"236":1,"237":1,"381":1,"391":3,"393":2,"402":3,"483":1,"498":1,"722":1,"726":1,"828":1,"829":1}}],["messaging",{"2":{"838":1}}],["message=",{"2":{"836":1}}],["messages",{"2":{"102":1,"106":1,"110":1,"213":1,"235":1,"500":1,"734":1,"838":1,"839":1}}],["message",{"0":{"79":1,"80":1,"841":1},"2":{"33":1,"34":1,"71":3,"72":1,"75":1,"79":1,"80":2,"82":1,"83":1,"89":1,"94":1,"95":1,"104":1,"107":1,"108":6,"111":1,"116":1,"117":1,"124":1,"128":1,"136":1,"145":1,"151":1,"169":1,"171":1,"172":1,"221":1,"237":1,"486":1,"510":3,"558":2,"561":1,"586":1,"594":1,"595":1,"626":1,"630":1,"656":1,"720":2,"722":1,"726":1,"727":1,"734":1,"783":1,"788":1,"827":1,"830":1,"833":1,"836":2,"838":3,"839":6,"840":4,"841":2,"846":1,"851":1,"853":1}}],["members",{"2":{"710":1}}],["memory",{"2":{"150":1,"203":1,"511":1,"675":1,"850":1,"862":1,"880":1}}],["memory>",{"2":{"71":1,"108":1,"839":1}}],["mechanisms",{"2":{"487":1}}],["measuring",{"0":{"824":1}}],["measurement",{"2":{"593":1,"824":1,"825":1}}],["measure",{"2":{"152":1}}],["meant",{"2":{"508":1,"526":1}}],["means",{"2":{"228":1,"522":1,"577":1,"664":1,"696":1}}],["mental",{"0":{"165":1,"511":1,"583":1},"1":{"166":1,"167":1},"2":{"575":1,"735":1}}],["mega",{"2":{"163":1,"164":2,"188":1}}],["meta",{"2":{"370":1,"423":1}}],["metadata",{"0":{"608":1},"2":{"187":1,"359":1,"363":1,"369":1,"390":1,"578":1,"591":1,"603":1,"611":1,"612":1,"620":1,"727":1}}],["method",{"2":{"130":1,"166":1,"456":1,"551":1,"553":1,"566":1,"570":1,"571":1,"576":2,"604":2,"605":1,"611":1,"619":1,"621":1,"643":1,"645":1}}],["methods",{"0":{"18":1,"480":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1},"2":{"1":2,"14":1,"38":2,"43":1,"44":1,"537":1,"575":1,"710":1,"740":1}}],["metrics",{"0":{"517":1,"523":1,"535":1,"650":1},"2":{"108":2,"183":1,"214":1,"220":1,"223":1,"224":1,"513":2,"515":2,"523":2,"528":1,"535":2,"574":2,"581":1,"582":1,"593":1,"640":1,"643":1,"646":1,"650":1,"671":1,"687":1,"695":1,"714":3,"717":1,"839":2}}],["me",{"2":{"88":1,"89":4,"90":2}}],["merges",{"2":{"604":1}}],["merged",{"2":{"593":1}}],["merge",{"0":{"781":1},"2":{"44":1,"593":1,"781":1}}],["merging",{"2":{"13":1}}],["malformed",{"2":{"682":1}}],["mastery",{"0":{"881":1}}],["master",{"2":{"558":1,"878":1}}],["mapper",{"2":{"799":2}}],["mapping",{"0":{"583":1,"584":1,"585":1},"2":{"796":1}}],["mappings",{"2":{"302":1}}],["map",{"2":{"594":1,"603":1}}],["maps",{"2":{"286":1,"301":1,"399":1,"563":1,"743":1}}],["manually",{"0":{"848":1},"2":{"685":1}}],["manual",{"2":{"483":1}}],["managing",{"2":{"335":1,"623":1,"672":1}}],["managed",{"2":{"753":1}}],["manage",{"2":{"339":1,"344":1,"396":1,"588":1,"589":1,"667":1,"738":1}}],["manages",{"2":{"317":1,"342":1}}],["management",{"2":{"315":1,"337":1,"410":1}}],["manifest",{"0":{"296":1},"2":{"296":3,"306":1,"359":1,"363":1,"365":1,"367":1,"368":3}}],["manifests",{"2":{"273":1}}],["many",{"2":{"216":1,"496":1,"511":1}}],["macro",{"2":{"736":1}}],["macros",{"0":{"703":1},"2":{"703":1,"736":1}}],["macos",{"0":{"241":1,"245":1},"2":{"248":1}}],["machine",{"2":{"198":1,"594":1}}],["machines",{"2":{"125":1}}],["maxthreadcount",{"2":{"693":1}}],["maxthreads",{"2":{"531":1,"532":1,"538":1,"581":1,"687":1,"697":1,"706":1}}],["maxperiodic",{"2":{"693":1}}],["maxperiodicthreads",{"2":{"692":1,"698":1}}],["maxpending",{"2":{"526":1}}],["maximum",{"2":{"522":1,"532":1,"675":1,"693":1}}],["maximize",{"2":{"151":1}}],["max",{"2":{"216":1,"222":6,"236":1,"465":3,"469":2,"537":1,"538":1,"575":1,"607":1,"703":1,"742":1,"746":1,"751":1,"756":1,"797":1,"827":1,"828":1,"830":2,"839":1,"840":1}}],["marks",{"2":{"748":2}}],["marked",{"2":{"571":1,"577":1,"615":1,"616":1}}],["marker",{"2":{"186":1}}],["mark",{"2":{"186":1,"453":1,"528":1,"587":1}}],["may",{"2":{"152":1,"234":1,"314":1,"455":1,"487":1,"492":1,"493":1,"497":1,"498":1,"504":1,"521":1,"522":2,"528":2,"541":1,"565":1,"575":1}}],["math",{"0":{"420":1},"2":{"427":1}}],["matters",{"2":{"152":1,"794":1}}],["matter",{"2":{"150":1}}],["match",{"2":{"144":1,"393":1,"571":1,"617":1,"621":3,"622":1,"665":1,"740":1,"832":1}}],["matcher",{"2":{"611":1}}],["matches",{"2":{"130":1,"555":1,"576":1,"615":1,"619":1,"639":1,"643":1,"791":1}}],["matched",{"2":{"121":1,"127":1,"128":1}}],["matching",{"0":{"130":1,"621":1},"2":{"570":1,"611":1,"612":1,"621":1,"622":1,"623":1,"794":1}}],["makemigrations",{"0":{"322":1},"2":{"316":1,"322":1,"325":1}}],["makestand",{"2":{"525":1}}],["makes",{"2":{"118":1,"162":1,"570":1}}],["make",{"2":{"71":1,"75":1,"108":1,"256":1,"460":1,"504":1,"506":1,"538":2,"590":1,"661":2,"671":1,"716":1,"743":1,"754":2,"772":1,"797":1,"798":1,"799":1,"800":1,"804":1,"808":1,"839":1,"840":1}}],["main",{"0":{"846":1},"2":{"11":1,"12":1,"14":1,"23":1,"42":1,"43":1,"44":1,"46":1,"57":1,"64":1,"67":1,"69":1,"70":1,"71":1,"72":1,"75":1,"87":1,"89":1,"92":1,"93":1,"94":1,"95":1,"96":1,"98":1,"103":1,"106":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"178":2,"195":2,"200":1,"201":1,"206":2,"207":1,"226":1,"227":1,"228":1,"229":1,"234":1,"251":1,"252":1,"295":1,"296":1,"303":2,"304":1,"306":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"447":1,"448":1,"478":1,"510":5,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"586":1,"610":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"661":1,"692":1,"698":1,"700":1,"743":1,"745":1,"746":1,"747":1,"751":1,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"797":1,"798":1,"799":1,"800":1,"802":1,"804":1,"806":1,"808":1,"826":1,"838":1,"839":1,"840":1,"845":1,"846":2,"847":1,"849":1,"851":2,"852":1}}],["magical",{"2":{"475":1}}],["magic",{"2":{"2":1,"39":1,"121":1,"134":1,"153":1,"259":1,"427":1,"506":1,"510":1,"511":1,"597":1,"859":1,"870":1}}],["dto",{"2":{"837":1}}],["dt",{"2":{"817":2}}],["ddthh",{"2":{"817":1}}],["dd",{"2":{"813":1}}],["ddebug",{"2":{"303":1}}],["day",{"0":{"814":1}}],["daemon",{"2":{"763":1}}],["datetime",{"0":{"815":1,"816":1},"1":{"816":1,"817":1},"2":{"810":1,"816":1,"817":1,"825":1}}],["dates",{"2":{"810":1}}],["date",{"0":{"559":1,"811":1,"812":1,"813":1,"814":1},"1":{"812":1,"813":1,"814":1},"2":{"264":2,"269":1,"558":2,"559":2,"811":1,"812":1,"813":1,"815":1,"825":1}}],["data",{"0":{"137":1,"187":1,"793":1},"2":{"71":2,"122":1,"137":1,"147":2,"167":1,"234":3,"236":1,"304":1,"353":1,"413":1,"551":1,"557":1,"558":1,"568":1,"588":1,"589":1,"591":1,"734":1,"763":4,"772":1,"793":1}}],["database",{"0":{"344":1,"735":1,"743":1,"882":1},"1":{"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1},"2":{"10":3,"152":1,"285":1,"315":1,"317":1,"323":3,"325":1,"337":1,"464":1,"465":1,"469":3,"471":1,"512":1,"590":1,"735":1,"738":1,"743":2,"745":2,"746":2,"747":2,"751":2,"756":1,"795":1,"801":1,"849":1,"862":1,"864":1,"868":1}}],["dcmake",{"2":{"762":1}}],["dx",{"2":{"475":1}}],["drift",{"2":{"712":1}}],["drivers",{"0":{"752":1},"1":{"753":1,"754":1}}],["driver",{"0":{"753":1,"754":1},"2":{"735":1,"736":3,"738":1,"754":1,"756":1}}],["drives",{"2":{"643":1}}],["driven",{"2":{"482":1,"869":1}}],["drains",{"2":{"700":1}}],["draining",{"2":{"518":1,"536":1}}],["drop",{"2":{"465":1,"677":1,"712":1,"751":1}}],["dry",{"2":{"264":2,"389":1,"392":2,"395":1}}],["dbconfig",{"2":{"743":1,"745":1,"746":1,"747":1,"751":1}}],["dbvalue",{"0":{"741":1},"2":{"735":1,"739":1,"741":1}}],["db=blog",{"2":{"325":1}}],["db",{"0":{"471":1},"2":{"323":1,"324":1,"325":7,"464":1,"471":3,"473":1,"572":1,"577":1,"581":2,"590":1,"616":1,"678":1,"735":5,"736":4,"743":2,"745":7,"746":6,"747":5,"751":6,"754":1,"755":1,"796":1}}],["dvix",{"2":{"266":1}}],["dns",{"2":{"249":1}}],["dump",{"2":{"782":1,"784":1}}],["dumps",{"0":{"49":1},"2":{"49":1,"782":1,"783":1,"784":1,"785":1}}],["due",{"2":{"494":1}}],["durations",{"0":{"822":1},"2":{"810":1}}],["duration",{"0":{"821":1,"823":1},"1":{"822":1,"823":1},"2":{"222":1,"236":1,"490":1,"820":2,"822":3,"824":1,"825":1}}],["during",{"2":{"212":1,"278":1,"474":1,"483":1,"604":1,"622":1,"704":1}}],["duplicate",{"2":{"217":1,"604":1}}],["d",{"2":{"196":1,"264":1,"281":1,"287":1,"297":1,"360":1,"767":1,"813":2,"814":1}}],["dive",{"2":{"881":1}}],["division",{"2":{"420":2}}],["digital",{"0":{"729":1},"1":{"730":1,"731":1,"732":1,"733":1},"2":{"718":1}}],["digest",{"2":{"351":1,"370":1,"722":1}}],["diffing",{"2":{"755":1}}],["diff",{"2":{"322":1}}],["differ",{"2":{"234":1}}],["difference",{"2":{"225":1}}],["differently",{"2":{"492":1,"522":1}}],["different",{"2":{"40":1,"621":1,"736":1,"768":1,"805":1,"809":1}}],["dialect",{"2":{"322":2,"325":1,"755":1}}],["dialects",{"2":{"317":1}}],["diagnostics",{"2":{"187":1,"537":1}}],["dir>",{"2":{"281":1,"352":1,"424":1}}],["direct",{"2":{"684":1}}],["directory",{"2":{"264":1,"267":1,"281":2,"287":1,"290":1,"297":1,"298":1,"309":1,"314":1,"323":1,"360":3,"368":3,"424":2,"458":1,"563":1}}],["directly",{"2":{"164":1,"311":1,"420":1,"466":1,"510":1,"552":1,"765":1,"846":1}}],["dir",{"2":{"264":1,"281":1,"294":1,"297":1,"323":2,"324":1,"325":4,"360":1,"458":2,"804":1,"808":1}}],["disabling",{"2":{"510":1}}],["disables",{"2":{"355":1,"484":1}}],["disabled",{"2":{"290":1,"426":1,"484":1,"486":1,"487":1,"677":1,"736":1}}],["disable",{"0":{"579":1,"609":1},"2":{"264":3,"282":2,"304":1,"329":1,"333":1,"361":1,"362":1,"484":1,"510":1,"579":1,"609":1}}],["display",{"2":{"607":1,"825":1}}],["displays",{"2":{"384":1}}],["dispatcher",{"2":{"611":1,"670":1}}],["dispatches",{"2":{"576":1}}],["dispatching",{"2":{"570":1,"672":1}}],["dispatch",{"2":{"447":1,"640":1,"684":2}}],["dist",{"2":{"354":3,"356":1,"359":2,"360":1,"363":2,"364":1,"368":3,"372":2}}],["distribution",{"2":{"364":1,"373":1}}],["distributions",{"2":{"343":1}}],["distributable",{"2":{"357":1}}],["distributed",{"2":{"328":1,"334":1}}],["disc",{"2":{"330":3}}],["discord",{"2":{"874":1}}],["discover",{"2":{"330":1,"331":1,"587":1}}],["discovery",{"0":{"330":1},"2":{"326":1,"328":1,"330":1,"333":2,"341":1,"417":1,"883":1}}],["disconnect",{"2":{"218":1}}],["disconnects",{"2":{"78":1,"212":1,"218":3,"236":1}}],["disconnected",{"2":{"71":1}}],["did",{"2":{"221":1}}],["dynamic",{"2":{"43":1,"144":1,"511":1,"615":1}}],["domain",{"2":{"766":1,"767":1,"837":1}}],["doubt",{"2":{"741":1,"801":1}}],["double>",{"2":{"433":1,"436":1}}],["double",{"0":{"9":1},"2":{"9":1,"42":1,"433":2,"592":1,"681":1,"741":2,"777":1}}],["downtime",{"2":{"768":1}}],["down",{"2":{"516":1,"557":1,"750":1,"751":2}}],["downgrades",{"2":{"409":1}}],["download",{"0":{"249":1}}],["doc",{"2":{"603":1,"604":1}}],["docker",{"2":{"492":1}}],["docsui",{"2":{"607":1}}],["docs=0|1|true|false",{"2":{"301":1}}],["docs",{"0":{"578":1,"579":1,"600":1,"606":1,"609":1},"1":{"579":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1},"2":{"301":3,"304":2,"305":1,"510":3,"512":1,"577":1,"578":7,"579":2,"587":1,"601":7,"604":2,"606":5,"607":4,"609":4,"610":3}}],["document",{"2":{"588":1,"600":1,"601":1,"605":1}}],["documentation",{"0":{"301":1},"2":{"603":1,"612":1,"613":1,"620":1,"624":1}}],["documents",{"2":{"0":1,"3":1,"14":1,"37":1,"40":1,"54":1,"72":1}}],["do",{"2":{"118":1,"158":1,"210":1,"218":1,"225":1,"360":2,"451":1,"510":1,"552":1,"581":1,"587":1,"786":1,"797":1,"824":1,"832":1}}],["done",{"2":{"69":2,"234":1}}],["does",{"0":{"666":1},"2":{"69":1,"118":1,"135":1,"150":1,"154":1,"161":1,"198":1,"205":1,"217":1,"253":1,"384":1,"409":1,"476":1,"477":1,"506":1,"539":1,"645":1,"646":1,"652":1,"665":1,"666":1,"695":1,"698":1,"700":1,"712":1,"748":1,"794":1}}],["dottedkey",{"2":{"468":4}}],["dot",{"0":{"10":1,"469":1},"2":{"3":1,"5":1,"10":1,"464":1,"465":1,"469":1,"470":1}}],["deep",{"2":{"881":1}}],["deeply",{"2":{"149":1}}],["declarative",{"2":{"826":1}}],["decrypt",{"0":{"728":1},"2":{"728":1}}],["decrements",{"2":{"691":1}}],["decisions",{"2":{"616":1}}],["decision",{"2":{"162":1}}],["decide",{"2":{"111":1,"118":1,"123":1,"135":1,"258":1,"670":1}}],["deadline",{"2":{"521":1,"522":1}}],["derived",{"2":{"314":1,"605":1}}],["define",{"2":{"799":1}}],["defines",{"2":{"690":1}}],["defined",{"2":{"224":1,"517":1,"522":3,"618":1,"619":1}}],["defense",{"2":{"682":1}}],["defaultpriority",{"2":{"531":1,"532":1,"538":1}}],["defaultvalue",{"2":{"468":3}}],["default",{"0":{"507":1,"508":1,"562":1},"2":{"36":1,"159":1,"224":1,"263":1,"264":2,"274":1,"290":1,"297":1,"309":1,"312":1,"322":3,"329":2,"330":4,"331":4,"351":1,"353":1,"355":1,"359":1,"360":5,"367":1,"370":2,"434":1,"460":1,"464":1,"465":1,"468":2,"469":3,"472":2,"475":3,"476":1,"478":1,"481":1,"483":1,"484":1,"486":1,"492":1,"493":1,"504":1,"507":1,"510":1,"515":1,"532":1,"538":1,"552":1,"562":1,"576":1,"605":1,"619":1,"645":1,"669":1,"675":1,"693":1,"694":1,"840":1}}],["defaults",{"0":{"324":1,"468":1,"472":1},"2":{"3":1,"35":1,"133":1,"464":1,"466":1,"472":1,"473":1,"475":1,"509":1,"558":1,"562":1,"693":1,"740":1,"763":1}}],["deny",{"2":{"159":1}}],["deploy",{"0":{"757":1,"768":1},"1":{"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1},"2":{"512":1}}],["deployment",{"2":{"160":1,"208":1,"600":1,"757":1,"873":1}}],["deprecated",{"2":{"478":2,"500":1}}],["deps",{"2":{"342":1,"380":1,"407":1,"410":1}}],["depend",{"2":{"738":1,"805":1,"809":1}}],["depending",{"2":{"498":1,"875":1}}],["dependent",{"2":{"492":1,"493":1,"738":1}}],["dependency",{"2":{"337":1,"348":1,"374":1,"376":2,"379":1,"381":1,"386":1,"387":1,"401":1,"403":2,"405":1,"407":1,"410":1,"417":1,"590":1,"599":1,"775":1}}],["dependencies",{"0":{"641":1},"1":{"642":1,"643":1},"2":{"246":1,"334":1,"342":1,"380":1,"382":1,"384":1,"475":1}}],["depends",{"2":{"4":1,"133":1,"215":1,"506":1,"850":1}}],["depth",{"0":{"149":1}}],["dedicated",{"0":{"670":1},"2":{"91":1,"148":1,"470":1,"487":1,"572":1,"616":1,"707":1,"840":1,"874":1}}],["developers",{"0":{"511":1,"583":1},"2":{"486":1,"496":1,"510":1}}],["developer",{"2":{"271":1,"309":1,"337":1,"348":1,"456":1,"474":1,"507":1,"552":1,"553":1,"560":1}}],["development",{"2":{"270":1,"271":1,"277":2,"278":2,"314":1,"348":1,"474":1,"868":1,"876":1}}],["dev",{"0":{"190":1,"193":1,"271":1,"277":1,"459":1,"495":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"496":1,"497":1},"2":{"89":1,"90":1,"183":2,"184":3,"185":2,"186":1,"189":1,"190":1,"191":1,"192":3,"193":2,"244":3,"263":5,"264":2,"267":2,"269":1,"272":1,"273":1,"274":1,"275":6,"278":1,"288":1,"297":1,"304":2,"309":1,"312":1,"339":1,"347":1,"459":2,"475":1,"500":1,"509":1,"528":1,"762":2,"790":4}}],["demonstrate",{"2":{"427":1}}],["demonstrates",{"2":{"87":1,"92":1,"106":1}}],["demonstrations",{"2":{"105":1}}],["demonstrating",{"2":{"104":1}}],["demo",{"2":{"89":2,"91":1,"181":1,"194":3,"207":1,"510":1,"789":3,"791":2,"792":4}}],["detects",{"2":{"276":1,"367":1}}],["detected",{"2":{"264":1,"294":1,"372":1,"478":2,"670":1}}],["detection",{"0":{"368":1},"2":{"262":2,"323":1,"724":1}}],["detect",{"2":{"218":1,"716":1}}],["deterministic",{"2":{"2":1,"13":1,"36":1,"39":1,"53":1,"258":1,"270":1,"351":1,"379":1,"381":1,"387":1,"390":1,"399":1,"404":1,"409":1,"417":1,"473":1,"518":1,"536":1,"587":1,"597":1,"612":1,"622":1,"623":1,"689":1,"722":1,"734":1}}],["detail",{"2":{"689":1}}],["detailed",{"2":{"135":1,"352":1,"369":1}}],["details",{"0":{"158":1},"2":{"116":1,"511":1,"566":1,"574":1,"594":1,"595":1,"607":1,"698":1,"871":1}}],["detached",{"2":{"71":1,"251":1,"256":1,"259":1}}],["delta",{"2":{"820":2}}],["delegates",{"2":{"640":1}}],["deleted",{"2":{"799":1}}],["delete",{"0":{"22":1},"2":{"575":1,"739":1}}],["delay",{"2":{"329":2}}],["delays",{"2":{"152":1,"253":1}}],["del",{"2":{"22":1,"453":1}}],["destructor",{"2":{"700":1,"710":1,"714":1,"748":2,"753":1}}],["destruction",{"2":{"582":1,"691":1,"716":1,"742":1}}],["destroyed",{"2":{"710":1}}],["destroy",{"2":{"496":1}}],["description=vix",{"2":{"763":1}}],["description",{"0":{"262":1,"273":1,"309":1,"317":1,"328":1,"351":1,"359":1,"367":1,"376":1,"384":1,"390":1,"399":1,"407":1,"413":1},"2":{"603":1,"613":1,"620":1}}],["describes",{"2":{"1":1,"38":1,"755":1}}],["designed",{"2":{"143":1,"213":1,"262":1,"314":1,"328":1,"335":1,"390":1,"426":1,"437":1,"461":1,"464":1,"474":1,"487":1,"509":1,"510":1,"557":1,"590":1,"599":1,"600":1,"611":1,"625":1,"748":1,"826":1}}],["design",{"0":{"13":1,"36":1,"53":1,"125":1,"270":1,"278":1,"306":1,"348":1,"403":1,"417":1,"477":1,"540":1,"597":1,"612":1,"861":1},"2":{"66":1,"86":1,"105":1,"404":1,"458":1,"707":1,"861":1,"867":1,"868":2,"870":1,"880":1,"882":1}}],["debugging",{"2":{"474":1,"477":1,"873":1}}],["debug",{"0":{"507":1},"2":{"8":2,"194":2,"223":1,"263":2,"274":2,"285":1,"332":1,"346":1,"427":1,"459":1,"475":3,"478":2,"480":1,"481":2,"483":1,"486":2,"487":1,"566":1,"567":1,"671":1,"781":2}}],["edge",{"2":{"861":1,"869":1}}],["ed25519",{"2":{"718":1,"730":1,"731":1,"732":1,"733":1,"734":1}}],["epoch",{"2":{"788":1,"810":1,"814":1,"818":1,"819":1}}],["ephemeral",{"2":{"462":1,"574":1,"654":1}}],["equal",{"2":{"690":1}}],["equivalent",{"2":{"271":1,"309":1}}],["escalation",{"2":{"874":1}}],["escape",{"2":{"681":1}}],["essential",{"2":{"126":1,"244":1,"762":1}}],["elapsed",{"0":{"824":1},"2":{"810":1,"824":2}}],["element",{"2":{"690":1}}],["elk",{"2":{"476":1}}],["elsewhere",{"2":{"604":1}}],["else",{"2":{"108":1,"839":1}}],["either",{"2":{"428":1,"455":1,"510":1,"594":1}}],["ecosystem",{"2":{"395":1}}],["echo",{"0":{"71":1},"2":{"71":1,"176":2,"185":2,"186":1,"192":3,"196":1,"445":1,"510":1,"549":1,"635":1,"636":1}}],["evolve",{"2":{"540":1}}],["evolution",{"2":{"317":1,"325":1}}],["evaluation",{"2":{"427":1}}],["evaluate",{"2":{"418":1,"420":1}}],["eval",{"2":{"418":1}}],["even",{"2":{"210":1,"267":1,"510":1,"578":1,"691":1}}],["events",{"2":{"218":1,"839":1}}],["event",{"0":{"76":1,"252":1},"1":{"77":1,"78":1,"79":1},"2":{"69":2,"72":1,"80":1,"139":1,"218":1,"224":1,"234":4,"235":2,"237":1,"238":1,"251":2,"254":2,"258":1,"572":2,"642":1,"880":1}}],["everywhere",{"2":{"850":1}}],["every",{"2":{"120":1,"127":1,"135":1,"223":1,"252":1,"329":1,"493":1,"582":1,"650":1,"710":1,"800":1,"804":1,"808":1,"836":1}}],["everyone",{"2":{"106":1}}],["everything",{"2":{"2":1,"39":1,"87":1,"89":1,"92":1,"98":1,"106":1,"119":1,"131":1,"144":1,"162":1,"303":1,"337":1,"446":1,"494":1,"510":1,"511":1,"550":1,"625":1,"700":1,"790":1,"796":1,"838":1,"844":2}}],["effort",{"0":{"492":1},"2":{"437":1,"472":1,"492":1,"687":1,"875":1}}],["effective",{"2":{"656":1}}],["effect",{"2":{"232":1,"594":1}}],["efficiency",{"2":{"153":1}}],["efficient",{"2":{"151":1,"153":2,"203":1}}],["etc",{"2":{"160":1,"464":1,"476":1,"516":1,"588":1,"595":1,"677":1,"714":1,"763":1,"766":3}}],["emergency",{"2":{"874":1}}],["emission",{"2":{"755":1}}],["emits",{"2":{"233":1,"475":1,"489":1}}],["emit",{"2":{"214":1,"234":1}}],["embedded",{"2":{"260":1,"262":1,"601":2,"865":1,"876":1}}],["embed",{"2":{"198":1}}],["email=",{"2":{"798":1}}],["email",{"2":{"114":7,"157":4,"795":1,"797":1,"799":6,"800":1,"827":4,"830":6,"831":6,"833":2,"874":1}}],["empty",{"2":{"89":1,"108":1,"155":1,"226":1,"455":1,"556":1,"565":1,"618":1,"645":1,"699":1,"793":1,"839":1}}],["emplace",{"2":{"63":1,"180":1,"187":1,"557":2,"591":1,"793":1}}],["earlier",{"2":{"689":1}}],["early",{"0":{"792":1},"2":{"167":1,"222":1,"230":1,"787":1,"792":1}}],["easier",{"2":{"139":1,"162":1}}],["easy",{"2":{"105":1,"775":1}}],["each",{"2":{"1":1,"36":1,"38":1,"98":1,"136":1,"256":1,"267":1,"330":1,"428":1,"463":1,"475":1,"489":1,"620":1,"640":1,"659":2,"673":1,"676":1,"683":1,"697":1,"698":1,"718":1,"836":1,"871":1}}],["e",{"2":{"71":6,"158":1,"312":1,"430":4,"504":1,"567":1,"746":2,"751":2,"768":1,"797":2,"798":2,"799":2,"800":2,"827":3,"830":3,"833":3,"836":4}}],["err",{"2":{"430":2,"431":1,"432":1,"433":1,"434":1,"435":3,"436":3}}],["errors",{"0":{"111":1,"138":1,"756":1,"772":1,"801":1},"1":{"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1},"2":{"209":1,"213":1,"216":1,"218":1,"221":1,"237":1,"274":1,"437":1,"595":2,"681":1,"826":1,"827":1,"829":1,"830":1,"832":2,"833":1,"836":2}}],["error",{"0":{"112":1,"114":1,"115":1,"116":1,"221":1,"237":1,"566":1,"594":1,"595":1,"681":1,"836":1},"2":{"71":6,"89":2,"111":2,"112":2,"113":1,"114":1,"115":2,"116":2,"117":1,"118":1,"138":5,"154":1,"155":1,"156":1,"157":1,"158":3,"173":1,"181":1,"213":1,"214":1,"218":1,"220":1,"221":3,"222":1,"223":1,"226":1,"227":1,"228":1,"229":1,"237":1,"274":1,"332":1,"346":1,"370":1,"420":1,"430":4,"431":1,"432":1,"433":1,"434":1,"435":4,"436":3,"437":2,"439":3,"475":2,"478":2,"480":1,"481":2,"483":1,"493":1,"497":1,"498":1,"500":1,"510":1,"520":1,"543":3,"558":1,"566":3,"567":1,"588":2,"589":1,"593":2,"594":3,"595":2,"596":2,"599":1,"619":1,"630":1,"631":1,"680":1,"720":3,"722":1,"723":1,"727":1,"728":1,"731":1,"732":1,"746":1,"751":1,"789":1,"790":1,"791":1,"792":2,"793":2,"833":1,"836":1,"846":1,"858":1}}],["error>",{"2":{"71":1}}],["erased",{"2":{"735":1,"739":1}}],["erase",{"0":{"781":1},"2":{"44":1,"781":1}}],["engagement",{"0":{"865":1}}],["engineer",{"2":{"876":1}}],["engineers",{"2":{"869":1,"878":1,"885":1}}],["engine",{"2":{"205":1,"686":1,"738":1,"743":2,"745":2,"746":2,"747":2,"751":2}}],["enough",{"2":{"845":1,"850":1}}],["enqueues",{"2":{"698":1}}],["enqueueing",{"0":{"694":1},"1":{"695":1,"696":1,"697":1}}],["enqueued",{"2":{"689":1}}],["enqueue",{"2":{"687":1,"692":1,"693":1,"694":3,"696":1,"697":1,"698":1,"700":2,"704":1}}],["encrypts",{"2":{"727":1}}],["encrypt",{"0":{"727":1},"2":{"728":1,"734":1}}],["encryption",{"0":{"724":1},"1":{"725":1,"726":1,"727":1,"728":1},"2":{"718":1,"724":1}}],["encapsulate",{"2":{"685":1}}],["encourages",{"2":{"594":1}}],["encoding",{"2":{"194":1}}],["enforcing",{"2":{"672":1}}],["enforcement",{"2":{"526":1,"686":1}}],["enforces",{"2":{"355":1,"575":1}}],["enforced",{"2":{"215":1,"224":1}}],["enforce",{"2":{"110":1,"161":1,"236":1,"675":1}}],["enrichment",{"2":{"598":1}}],["enumentry",{"2":{"434":2}}],["enum",{"0":{"434":1},"2":{"434":2,"435":1,"437":1,"743":1}}],["enterprise",{"2":{"875":1}}],["entity",{"2":{"799":3}}],["entirely",{"2":{"14":1}}],["entries",{"2":{"604":2}}],["entry",{"2":{"296":2,"306":1,"380":1,"393":1,"407":1,"436":1,"437":1,"447":1}}],["entrypoint",{"2":{"271":1}}],["enables",{"2":{"265":1,"334":1,"481":1,"620":1,"736":2}}],["enable",{"0":{"507":1},"2":{"264":1,"274":1,"300":2,"333":1,"512":1,"756":1,"763":1,"766":1,"804":5,"808":5}}],["enabled",{"2":{"224":3,"351":1,"571":1,"575":1,"587":1,"601":1,"766":1}}],["endl",{"2":{"136":1,"137":2,"138":1,"139":2}}],["end",{"0":{"571":2},"1":{"572":2},"2":{"134":1,"144":1,"218":2,"224":1,"234":3,"235":2,"237":2,"238":1,"593":2,"596":1,"690":1,"748":1}}],["ends",{"2":{"128":1,"233":1}}],["endpoint",{"0":{"200":1},"2":{"89":1,"331":1,"656":1}}],["endpoints",{"2":{"84":1,"106":1,"108":1,"185":1,"198":1,"225":1,"229":1,"587":1,"805":1,"809":1,"839":2}}],["ensured",{"2":{"463":1}}],["ensures",{"2":{"373":1,"379":1,"520":1,"539":1,"593":1,"698":1}}],["ensure",{"2":{"44":2,"241":1,"248":1,"249":1,"416":1,"595":1,"671":1,"680":1,"771":1,"773":1,"780":2}}],["envelope",{"2":{"221":2,"235":1}}],["env",{"2":{"12":2,"298":1,"763":1,"781":2}}],["environmentfile=",{"2":{"763":1}}],["environment=vix",{"2":{"763":1}}],["environments",{"2":{"290":1,"476":1,"508":1,"529":1,"600":1,"838":1}}],["environment",{"0":{"12":1,"265":1,"282":1,"305":1,"324":1,"471":1,"482":1},"1":{"483":1,"484":1},"2":{"13":1,"298":1,"302":1,"325":1,"362":1,"372":1,"418":1,"464":1,"471":1,"473":1,"475":1,"482":1,"483":2,"492":1,"498":1,"509":1,"734":1,"763":1}}],["ex",{"2":{"519":1,"525":1,"526":2}}],["exits",{"0":{"771":1},"2":{"269":1,"712":1}}],["exit",{"0":{"371":1},"2":{"262":1,"264":1,"419":2,"424":2,"426":1,"518":1,"666":1,"700":1}}],["existence",{"0":{"444":1,"548":1}}],["exist",{"2":{"179":1,"391":1,"393":1,"402":1,"595":1,"699":1}}],["exists",{"0":{"496":1,"572":1},"2":{"0":1,"37":1,"52":1,"63":1,"281":1,"290":1,"362":1,"368":1,"394":1,"617":1,"665":1,"685":1,"716":1,"742":2,"746":1,"751":2,"795":1}}],["extend",{"0":{"668":1},"1":{"669":1,"670":1}}],["extensions",{"2":{"563":1,"603":1,"620":1}}],["external",{"2":{"152":1,"334":1,"578":1,"590":1,"775":1}}],["extracts",{"2":{"564":2}}],["extracted",{"2":{"553":1}}],["extraction",{"2":{"108":1}}],["extra",{"2":{"145":1,"218":1,"578":1,"604":1}}],["exceed",{"2":{"706":1}}],["excessive",{"2":{"497":1}}],["exceptions",{"2":{"428":1,"437":1,"498":1,"594":1,"681":1,"696":1,"826":1}}],["exception",{"2":{"111":1,"520":1,"566":1,"656":1,"700":1,"746":1,"748":1,"751":1,"754":1,"797":1,"798":1,"799":1,"800":1}}],["exchange",{"2":{"104":1}}],["execstart=",{"2":{"763":2}}],["exec",{"0":{"712":1},"2":{"75":2,"460":2,"538":2,"610":2,"645":1,"661":2,"712":2,"714":5,"715":1,"716":2,"739":1,"840":2}}],["executing",{"2":{"517":1}}],["execution",{"0":{"121":1,"131":1,"258":1},"2":{"62":1,"66":1,"103":1,"119":1,"153":1,"306":1,"426":1,"447":1,"475":1,"511":1,"512":1,"514":1,"516":1,"521":1,"529":1,"593":1,"597":1,"622":1,"673":1,"683":1,"686":1,"707":1}}],["executable",{"2":{"323":1,"771":1,"847":1}}],["executors",{"0":{"670":1},"2":{"522":1}}],["executor",{"0":{"460":1,"513":1,"580":1},"1":{"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1,"528":1},"2":{"74":3,"75":1,"447":1,"460":3,"513":2,"514":1,"516":1,"517":1,"518":1,"520":1,"524":1,"525":1,"526":3,"527":1,"529":1,"530":3,"532":1,"535":2,"538":3,"539":1,"540":1,"568":1,"570":1,"571":1,"572":2,"574":2,"575":1,"577":1,"582":2,"587":1,"610":1,"616":1,"639":1,"640":1,"643":1,"645":2,"650":3,"652":1,"658":1,"661":1,"666":1,"670":1,"671":1,"678":2,"683":1,"684":1,"705":3,"707":2,"714":2,"717":3,"840":2}}],["executed",{"2":{"121":1,"131":1,"460":1,"463":1,"527":1,"575":1,"678":1,"689":1,"705":1}}],["executes",{"2":{"66":1,"127":1,"144":1,"309":1,"581":1,"596":1}}],["execute",{"2":{"35":1,"214":1,"513":1,"596":2,"692":1}}],["expired",{"2":{"676":1}}],["exponential",{"2":{"216":1}}],["exposing",{"2":{"513":1,"640":1}}],["exposes",{"2":{"453":1,"467":1,"470":1,"503":1,"530":1,"553":1,"567":1,"577":1,"805":1,"809":1}}],["expose",{"2":{"158":1,"528":1,"537":1,"578":1,"765":2}}],["exposure",{"2":{"154":1}}],["expressions",{"2":{"418":1,"420":1,"427":1}}],["expressive",{"2":{"53":1,"775":2,"786":1}}],["express",{"0":{"584":1},"2":{"163":1,"195":1,"510":3,"526":1,"569":1,"584":1}}],["explore",{"2":{"418":1,"512":1}}],["explains",{"2":{"119":1,"163":1,"212":1,"231":1,"250":1,"569":1,"588":1,"639":1,"718":1,"735":1}}],["explicitly",{"0":{"715":1},"2":{"95":1,"123":1,"132":1,"133":1,"159":1,"259":1,"455":1,"637":1,"671":1,"748":1}}],["explicit",{"0":{"171":1},"2":{"2":1,"36":1,"39":1,"53":1,"66":1,"105":1,"110":1,"111":1,"119":1,"125":1,"126":1,"132":1,"135":1,"143":1,"145":1,"153":1,"154":1,"162":1,"198":1,"218":1,"238":1,"251":1,"258":1,"259":1,"270":1,"306":1,"325":1,"335":1,"337":1,"348":1,"361":1,"395":1,"410":1,"427":1,"428":1,"437":2,"438":1,"446":1,"487":1,"510":1,"511":1,"520":1,"529":1,"541":1,"542":1,"550":1,"592":1,"594":1,"597":1,"599":1,"618":1,"625":1,"638":1,"693":1,"714":1,"718":1,"735":1,"787":1,"795":1,"796":1,"801":1,"810":1,"825":1,"826":1,"837":1,"844":1,"849":1,"859":1,"870":1}}],["expert",{"2":{"483":1}}],["experiment",{"2":{"427":1}}],["experimentation",{"2":{"334":1,"426":1}}],["experimental",{"0":{"529":1},"1":{"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1},"2":{"75":2,"529":2,"538":1,"661":1,"840":2}}],["experience",{"2":{"348":1}}],["expectations",{"2":{"481":1}}],["expected",{"2":{"80":1,"181":4,"227":1,"228":1,"428":1,"429":1,"430":1,"435":1,"478":1,"853":1}}],["expensive",{"2":{"147":1,"487":1,"568":1,"581":1}}],["exact",{"0":{"61":1,"185":1,"791":1},"2":{"61":2,"89":2,"181":1,"185":2,"186":1,"192":3,"234":1,"376":1,"379":1,"381":1,"384":1,"386":1,"393":1,"403":1,"456":2,"621":1,"791":2,"805":1,"809":1}}],["exactly",{"2":{"0":1,"36":1,"37":1,"787":1,"791":1}}],["example",{"0":{"11":1,"23":1,"57":1,"69":1,"70":1,"71":1,"75":1,"89":1,"97":1,"108":1,"113":1,"124":1,"128":1,"136":1,"145":1,"234":1,"244":1,"288":1,"289":1,"336":1,"347":1,"361":1,"378":1,"385":1,"586":1,"610":1,"704":1,"804":1,"808":1,"828":1,"846":1},"2":{"12":1,"34":1,"42":1,"43":1,"44":1,"64":1,"87":1,"89":1,"91":1,"97":1,"98":1,"101":1,"102":1,"103":1,"104":1,"106":1,"110":1,"116":1,"128":1,"130":1,"132":1,"151":1,"164":2,"180":1,"181":1,"186":1,"188":1,"196":1,"206":2,"220":1,"234":1,"235":1,"237":1,"312":1,"336":1,"362":1,"385":1,"393":1,"419":1,"433":1,"455":1,"456":1,"464":1,"465":1,"471":1,"472":1,"473":1,"486":1,"497":1,"510":2,"538":1,"557":1,"558":1,"589":1,"594":1,"603":1,"614":1,"661":1,"704":1,"725":1,"730":1,"736":1,"751":1,"755":1,"759":1,"762":1,"766":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"797":1,"798":1,"799":2,"800":1,"802":2,"805":3,"806":2,"809":3,"827":1,"833":1,"836":1,"840":1}}],["examples",{"0":{"98":1,"99":1,"266":1,"275":1,"287":1,"304":1,"313":1,"325":1,"333":1,"354":1,"372":1,"392":1,"401":1,"408":1,"415":1,"510":1,"744":1,"854":1},"1":{"99":1,"100":2,"101":2,"102":2,"103":2,"104":2,"105":1,"511":1,"512":1,"745":1,"746":1,"747":1,"855":1,"856":1,"857":1,"858":1},"2":{"1":1,"14":1,"38":1,"67":1,"68":1,"72":1,"98":1,"105":1,"109":1,"163":2,"164":2,"178":1,"205":1,"294":1,"313":1,"429":1,"469":1,"483":1,"735":2,"795":2,"803":1,"807":1,"838":1}}],["ln",{"2":{"766":1}}],["lf",{"2":{"575":1}}],["lcrypto",{"2":{"303":1}}],["lssl",{"2":{"303":1}}],["lld",{"2":{"262":1,"264":1}}],["langs",{"2":{"785":2}}],["language",{"2":{"510":1}}],["languages",{"2":{"510":1,"847":1}}],["launches",{"2":{"574":1}}],["launcher",{"2":{"264":1,"266":2}}],["lazily",{"2":{"554":1}}],["lazy",{"2":{"467":1,"553":2}}],["label",{"2":{"322":1}}],["label>",{"2":{"322":1}}],["lastinsertid",{"2":{"738":1}}],["last",{"2":{"320":1,"462":1,"738":1}}],["latest",{"2":{"368":2}}],["later",{"0":{"849":1},"2":{"187":1,"253":1,"591":1,"603":1}}],["latency",{"2":{"152":1,"223":2,"232":1,"511":1,"678":1,"704":1,"825":1,"862":1}}],["layout",{"0":{"195":1,"759":1},"2":{"351":1,"353":1,"759":1,"844":1}}],["layouts",{"2":{"149":1}}],["layers",{"2":{"2":1,"39":1,"40":1,"143":1,"144":1,"145":1,"154":1,"588":1,"593":1,"775":1,"786":1,"849":1,"861":1}}],["layer",{"2":{"0":1,"29":1,"36":1,"37":1,"111":1,"121":1,"199":2,"203":1,"285":1,"438":1,"542":1,"551":1,"570":1,"597":1,"665":1,"677":1,"682":1,"686":1,"735":1,"755":1,"796":1,"859":1}}],["largest",{"2":{"690":1}}],["large",{"2":{"147":2,"229":1,"581":1,"597":1}}],["larger",{"2":{"119":1}}],["lambdas",{"2":{"849":1}}],["lambda",{"2":{"121":1,"127":1,"128":1,"131":1,"145":1,"254":1}}],["lt",{"0":{"436":1,"712":1},"2":{"88":1,"251":1,"359":2,"363":2,"391":1,"393":1,"402":1,"428":1,"430":1,"434":1,"435":1,"436":1,"437":1,"475":1,"553":4,"557":5,"558":1,"560":1,"564":1,"565":2,"594":2,"607":1,"664":2,"687":1,"689":1,"696":1,"697":1,"710":1,"751":2,"799":1,"830":1,"831":1,"833":1,"837":3}}],["less",{"2":{"768":1}}],["len",{"2":{"465":1}}],["length",{"2":{"455":1,"575":1,"617":1,"677":1,"827":1,"830":3,"831":1}}],["lets",{"2":{"793":1}}],["let",{"2":{"455":1}}],["leadership",{"2":{"865":1}}],["least",{"2":{"693":3,"742":1}}],["leave",{"2":{"486":1}}],["leaves",{"2":{"392":1}}],["learn",{"2":{"204":1}}],["learning",{"2":{"198":1}}],["leaking",{"0":{"158":1},"2":{"209":1}}],["legacy",{"0":{"64":1,"181":1,"789":1},"2":{"54":1,"55":1,"65":2,"179":1,"787":1,"789":1}}],["level=info",{"2":{"763":1}}],["level=off",{"2":{"483":1}}],["level=warn",{"2":{"483":1}}],["level=debug",{"2":{"483":1}}],["levels",{"2":{"332":1,"346":1}}],["level>",{"2":{"274":1,"302":1,"332":1,"346":1}}],["level",{"0":{"45":1,"127":1,"481":1,"483":1,"782":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"783":1,"784":1,"785":1},"2":{"29":1,"40":1,"53":1,"160":1,"215":2,"274":1,"302":2,"305":1,"332":1,"346":1,"475":2,"483":4,"486":2,"504":1,"551":1,"552":1,"569":1,"671":1,"717":1,"775":2,"786":1}}],["lifetime",{"0":{"700":1},"2":{"712":1,"753":1}}],["lifecycle",{"0":{"126":1,"134":1,"214":1,"449":1,"571":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"450":1,"451":1,"452":1,"572":1},"2":{"125":1,"126":2,"128":1,"134":1,"258":1,"337":1,"589":1,"593":1,"596":1,"599":1,"667":1,"685":1,"881":1,"883":1}}],["light",{"0":{"678":1},"2":{"623":1,"672":1,"684":1,"825":1}}],["lightly",{"2":{"492":1}}],["lightweight",{"0":{"524":1},"1":{"525":1,"526":1},"2":{"151":1,"198":1,"474":1,"513":1,"524":1,"580":1,"590":1,"611":1,"677":1,"687":1,"753":1,"775":1,"810":1}}],["list",{"0":{"382":1},"1":{"383":1,"384":1,"385":1,"386":1,"387":1},"2":{"264":1,"310":2,"313":2,"342":1,"382":1,"383":1,"384":1,"385":1,"387":2,"404":1,"782":1}}],["listening",{"2":{"71":1,"804":1,"808":1}}],["listen",{"0":{"451":2},"2":{"71":1,"75":1,"86":1,"256":2,"327":1,"329":2,"333":6,"334":2,"447":1,"451":1,"452":1,"462":1,"656":1,"766":1,"804":2,"805":2,"808":2,"809":2,"840":1}}],["listener",{"2":{"71":5,"256":5}}],["lines",{"0":{"488":1},"1":{"489":1,"490":1},"2":{"494":4,"497":2,"498":1,"509":1}}],["line",{"2":{"329":1,"475":1,"489":2,"490":1,"492":1,"493":2,"497":1}}],["linker",{"0":{"303":1},"2":{"264":1,"266":2,"268":1,"292":1,"295":1,"298":1}}],["link",{"2":{"264":1,"286":1,"847":2}}],["linux",{"0":{"241":1,"702":1},"2":{"248":1,"266":1,"659":1,"687":1,"702":2,"757":1}}],["lib",{"2":{"281":1,"287":1,"289":2}}],["libsqlite3",{"2":{"244":1}}],["libssl",{"2":{"244":1,"762":1}}],["libboost",{"2":{"244":1,"762":1}}],["libraries",{"2":{"198":1,"847":1}}],["library",{"0":{"289":1},"2":{"140":1,"203":1,"281":1,"284":1,"287":1,"290":1,"390":1,"391":1,"395":1,"402":1,"703":1}}],["lived",{"0":{"714":1},"2":{"274":2,"276":1,"299":2}}],["live",{"2":{"232":1,"277":1,"328":1,"329":1,"591":1,"717":1,"738":1,"804":1,"808":1,"884":1}}],["limitedexecutor",{"0":{"526":1}}],["limited",{"2":{"216":1,"526":3,"600":1}}],["limit",{"0":{"191":1},"2":{"174":4,"184":1,"191":1,"224":1,"497":2,"526":2,"571":1,"591":1,"632":4,"684":1,"692":1}}],["limit=5",{"2":{"164":1,"632":2}}],["limiting",{"0":{"161":1},"2":{"161":2,"184":1,"588":1,"598":1}}],["limits",{"0":{"222":1},"2":{"9":1,"110":1,"150":1,"212":1,"214":1,"222":1,"473":1,"537":1,"541":1,"672":1,"675":1}}],["likely",{"2":{"498":1,"667":1}}],["like",{"2":{"44":1,"118":1,"276":2,"418":1,"423":1,"474":1,"475":2,"507":1,"509":1,"510":1,"553":1,"555":1,"558":1,"575":1,"584":4,"585":1,"607":1,"769":1}}],["lost",{"2":{"498":1}}],["loss",{"2":{"498":1}}],["locking",{"2":{"862":1}}],["locks",{"2":{"522":1}}],["lockfiles",{"2":{"395":1,"403":1}}],["lockfile",{"2":{"381":1,"405":1,"407":1}}],["lock",{"2":{"376":1,"379":1,"380":1,"382":1,"384":1,"386":1,"407":1,"409":1,"475":1,"486":1,"487":1,"490":1}}],["locations",{"2":{"370":1,"466":1}}],["location",{"0":{"353":1},"2":{"288":1,"289":1,"766":1}}],["locally",{"0":{"761":1},"2":{"328":1,"380":1,"401":1,"413":1,"570":1,"578":1,"601":2,"795":1}}],["local",{"2":{"220":1,"241":1,"248":1,"349":1,"351":1,"353":1,"376":1,"384":1,"390":1,"398":1,"400":1,"401":1,"403":1,"409":1,"411":1,"413":1,"416":1,"417":1,"474":1,"601":1,"606":1,"656":1}}],["localhost",{"2":{"10":1,"93":1,"465":1,"469":1,"510":2}}],["lowercase",{"2":{"722":1}}],["lower",{"2":{"511":1,"722":2}}],["low",{"2":{"232":1,"552":1}}],["logger",{"2":{"456":1,"470":1,"474":2,"476":1,"477":1,"494":1,"497":1,"501":2,"508":1,"509":1,"566":1}}],["logged",{"2":{"142":1,"695":1}}],["logging",{"0":{"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"302":1,"332":1,"470":1},"1":{"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1},"2":{"135":1,"140":2,"141":4,"142":1,"183":1,"306":1,"328":1,"456":1,"465":1,"468":1,"469":1,"470":1,"476":1,"487":1,"508":1,"509":1,"582":1,"588":1,"593":1,"598":1,"671":1,"717":1,"864":1}}],["login",{"2":{"139":2}}],["logic",{"2":{"57":2,"148":2,"158":1,"206":1,"252":1,"255":1,"277":1,"418":1,"427":1,"581":1,"592":2,"598":1,"657":1,"686":1,"717":1,"825":1,"832":1}}],["logs",{"0":{"267":1,"764":1},"2":{"135":1,"136":1,"139":3,"140":1,"213":1,"220":1,"223":1,"224":1,"267":1,"274":1,"474":1,"501":1,"566":1,"574":1,"650":1,"671":1,"702":1,"759":1,"763":1,"771":1,"804":2,"808":2}}],["log",{"2":{"135":3,"137":1,"141":1,"142":1,"223":1,"262":1,"267":2,"274":1,"302":5,"305":2,"332":1,"346":2,"468":1,"475":2,"478":1,"480":1,"481":2,"483":2,"484":1,"487":1,"489":1,"496":1,"497":4,"714":1,"763":1}}],["lookup",{"0":{"469":1}}],["look",{"2":{"194":1}}],["looks",{"2":{"97":1,"118":1}}],["loops",{"2":{"141":1,"262":1,"269":1,"487":1,"501":1,"539":1,"712":1,"880":1}}],["loop",{"0":{"252":1,"657":1},"2":{"69":2,"234":1,"251":2,"252":1,"254":2,"256":1,"258":1,"266":1,"278":1,"418":1,"447":1,"572":2,"574":1,"575":1,"642":1,"646":1,"657":1,"707":1,"710":1,"715":1,"716":1}}],["longpollingbridge>",{"2":{"108":1,"839":1}}],["longpollingbridge",{"2":{"84":1,"108":1,"839":1}}],["long",{"0":{"84":1,"714":1,"839":1},"2":{"66":1,"72":1,"84":1,"106":1,"108":4,"110":1,"176":2,"229":2,"232":1,"274":1,"276":1,"299":1,"445":2,"549":2,"607":1,"635":2,"788":4,"838":2,"839":6,"842":1,"865":1}}],["loading",{"0":{"466":1},"1":{"467":1}}],["load",{"2":{"51":1,"86":1,"209":1,"230":1,"464":1,"467":1,"473":1,"511":1,"763":1,"782":1,"784":1,"840":1,"862":1}}],["loaded",{"2":{"4":1,"607":1}}],["loader",{"2":{"1":1,"3":1,"38":1,"743":1}}],["loads",{"0":{"50":1},"2":{"4":1,"50":1,"464":1,"466":1,"782":1,"784":1}}],["www",{"2":{"763":2,"772":1}}],["wcount",{"2":{"697":4}}],["would",{"2":{"507":1}}],["world",{"0":{"93":1},"2":{"172":1,"212":1,"510":1,"627":1,"850":1,"855":1}}],["workingdirectory",{"2":{"771":1}}],["workingdirectory=",{"2":{"763":1}}],["working",{"2":{"298":1,"424":1,"851":1}}],["workflows",{"2":{"271":1,"348":1}}],["workflow",{"0":{"334":1,"356":1,"364":1,"373":1,"387":1,"410":1,"768":1},"2":{"270":1,"306":1,"314":1,"381":1,"417":1}}],["workload",{"2":{"152":1,"215":1,"671":1}}],["workloads",{"2":{"150":1,"203":1,"496":1,"507":1,"529":1,"570":1,"687":1,"850":2}}],["workshops",{"2":{"868":1,"884":1}}],["works",{"2":{"97":1,"179":2,"273":1,"376":1,"386":1,"409":1,"413":1,"569":1,"600":1,"607":1,"639":1}}],["work",{"0":{"694":1},"1":{"695":1,"696":1,"697":1},"2":{"69":1,"218":1,"251":1,"254":2,"258":1,"259":1,"418":1,"451":1,"453":1,"461":1,"513":1,"518":1,"525":1,"526":1,"527":1,"541":1,"568":1,"570":1,"572":2,"578":1,"580":1,"581":2,"582":1,"584":1,"585":1,"587":1,"643":1,"687":2,"689":1,"695":2,"704":1,"707":1,"717":1,"748":1,"824":1,"882":1}}],["workers",{"2":{"692":1,"693":1,"697":2,"699":1,"700":3}}],["worker",{"0":{"67":1,"103":1},"1":{"68":1,"69":1,"70":1,"71":1},"2":{"68":1,"103":1,"110":1,"254":1,"529":1,"532":2,"574":1,"582":1,"584":1,"646":1,"653":1,"687":2,"689":1,"692":1,"693":2,"697":1,"702":1,"710":1,"716":1}}],["wrapper",{"2":{"525":1,"526":2,"739":1}}],["wrappers",{"0":{"524":1},"1":{"525":1,"526":1},"2":{"524":1,"570":1}}],["wraps",{"2":{"262":1,"519":1,"530":1,"551":1,"553":1,"560":1,"589":1,"696":1}}],["wrong",{"0":{"773":1},"2":{"472":1,"728":3,"733":1}}],["writing",{"2":{"484":1,"510":1,"672":1,"686":1,"800":1}}],["written",{"2":{"267":1,"380":1,"569":1,"575":1,"615":1,"680":1,"690":1}}],["writes",{"2":{"492":1,"571":2,"575":2,"643":1,"680":1,"681":1,"683":1}}],["write",{"0":{"71":1},"2":{"71":2,"140":1,"144":1,"153":1,"163":1,"166":1,"180":1,"234":6,"476":1,"496":1,"570":1,"589":1,"665":1,"681":1,"705":1,"750":1}}],["wildcard",{"2":{"576":1}}],["will",{"2":{"204":1,"210":1,"281":1,"283":1,"290":1,"393":1,"395":1,"496":1,"577":1,"735":1,"736":1,"767":1}}],["widely",{"2":{"484":1}}],["wires",{"2":{"447":1}}],["windows",{"0":{"242":1,"246":1,"703":1},"2":{"248":1,"703":1}}],["window",{"2":{"219":1}}],["within",{"2":{"426":1,"494":1}}],["without",{"2":{"90":1,"232":1,"269":1,"334":1,"395":1,"458":1,"482":1,"486":1,"497":1,"553":1,"564":1,"578":1,"594":1,"600":1,"615":1,"693":1,"800":1}}],["with",{"0":{"90":1,"207":1,"468":1,"519":1,"539":1,"747":1,"767":1,"839":1},"1":{"520":1},"2":{"2":1,"3":1,"39":1,"49":1,"89":1,"90":1,"92":1,"98":1,"100":1,"120":2,"173":1,"174":1,"179":2,"180":1,"198":1,"214":1,"220":2,"222":1,"228":1,"235":1,"252":1,"256":1,"262":1,"266":1,"271":1,"275":1,"276":1,"277":1,"304":1,"309":1,"328":1,"341":1,"370":1,"376":1,"392":1,"418":1,"427":1,"447":1,"456":3,"467":1,"475":1,"476":2,"481":1,"494":1,"510":1,"520":1,"521":1,"541":1,"557":1,"562":1,"566":1,"570":1,"572":1,"578":1,"587":2,"607":1,"608":1,"612":1,"656":1,"690":1,"692":1,"703":1,"704":2,"706":1,"712":1,"718":1,"720":3,"723":1,"728":1,"734":1,"736":2,"739":1,"743":2,"750":1,"754":1,"755":1,"758":1,"775":1,"782":1,"795":2,"798":1,"802":1,"806":1,"838":2,"852":1,"860":1}}],["wall",{"2":{"824":1}}],["warmup",{"2":{"742":1,"797":1,"798":1,"799":1,"800":1}}],["warns",{"2":{"698":1}}],["warning",{"2":{"370":1,"695":2,"702":1}}],["warnings",{"2":{"274":1,"500":1,"706":1}}],["warn",{"2":{"274":1,"332":1,"346":1,"475":2,"478":2,"480":1,"481":2,"483":1,"497":2}}],["wakes",{"2":{"582":1,"700":1,"707":1,"710":1}}],["way",{"2":{"577":1,"588":1}}],["ways",{"2":{"182":1}}],["waf",{"0":{"470":1,"677":1},"2":{"465":1,"468":2,"469":1,"470":1,"571":1,"575":2,"672":1,"677":1,"686":1}}],["watches",{"2":{"273":1}}],["watch",{"0":{"299":1},"2":{"271":1,"274":1,"299":2,"304":2,"306":1,"310":2,"313":2}}],["was",{"2":{"95":1,"452":1}}],["wantedby=multi",{"2":{"763":1}}],["wants=network",{"2":{"763":1}}],["wanting",{"2":{"501":1}}],["want",{"0":{"188":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1},"2":{"88":1,"437":2,"467":1,"541":1,"572":1,"579":1,"581":1,"604":1,"609":1,"638":2,"666":1,"743":1,"768":1,"775":2,"786":3,"798":1,"800":1,"839":1,"840":1,"878":1}}],["waiters",{"2":{"700":1}}],["waituntilidle",{"2":{"699":1,"706":1}}],["waits",{"2":{"257":1,"574":1,"666":1,"700":1}}],["wait",{"0":{"452":1,"518":1,"536":1},"2":{"70":2,"255":1,"451":1,"452":2,"513":1,"515":1,"528":1,"652":1,"661":1,"662":1,"692":1,"704":1,"804":1,"808":1}}],["waiting",{"0":{"699":1},"2":{"70":1,"231":1,"517":1}}],["weak",{"2":{"716":1}}],["web",{"0":{"677":1}}],["websocketmetrics",{"2":{"108":1,"839":1}}],["websocket",{"0":{"72":1,"838":1,"840":1},"1":{"839":1,"840":1,"841":1,"842":1},"2":{"0":1,"1":1,"37":1,"38":1,"53":1,"72":2,"73":2,"75":2,"84":3,"85":1,"86":2,"102":1,"106":1,"108":7,"110":1,"235":1,"238":1,"838":3,"839":8,"840":3,"842":1,"880":1}}],["welcome",{"2":{"510":1,"840":1,"846":1}}],["well",{"2":{"178":1}}],["were",{"2":{"455":1}}],["we",{"0":{"868":1},"2":{"88":1,"861":1,"862":1,"863":1,"867":1,"870":1,"873":1}}],["ws",{"0":{"85":1,"102":1,"106":1,"839":1},"1":{"107":1,"108":1,"109":1,"110":1},"2":{"74":1,"75":4,"85":2,"91":1,"106":1,"108":18,"109":2,"215":1,"839":21,"840":10}}],["why",{"0":{"496":1,"507":1,"508":1,"572":1}}],["whitespace",{"2":{"432":1,"433":1}}],["which",{"0":{"786":1},"2":{"196":1,"248":1,"257":1,"477":1,"483":1,"555":1,"670":1}}],["while",{"2":{"71":2,"256":1,"435":1,"483":1,"496":1,"507":1,"599":1,"746":1,"747":1,"798":1}}],["whoami",{"2":{"793":3}}],["who",{"0":{"869":1,"885":1},"2":{"187":1,"878":1}}],["whole",{"2":{"184":1}}],["whether",{"2":{"276":1}}],["where",{"0":{"182":1,"512":1},"1":{"183":1,"184":1,"185":1},"2":{"258":1,"281":1,"587":1,"600":1,"746":1,"747":1,"798":1,"833":1,"838":1}}],["whenever",{"2":{"699":1}}],["when",{"0":{"232":1,"257":2,"277":1,"427":1,"541":1,"598":1,"623":1,"685":1,"786":1},"2":{"77":1,"78":1,"79":1,"84":1,"121":1,"128":1,"130":1,"132":1,"135":1,"147":1,"151":1,"176":2,"178":1,"209":1,"218":1,"231":1,"232":1,"236":2,"254":1,"257":3,"258":1,"259":2,"265":1,"283":1,"367":1,"368":1,"426":1,"437":2,"452":1,"455":1,"462":2,"467":1,"483":1,"484":2,"486":1,"487":1,"490":1,"497":2,"500":1,"516":1,"528":1,"532":1,"539":1,"541":1,"563":1,"565":1,"581":2,"582":1,"601":1,"609":1,"623":1,"638":2,"654":1,"658":1,"687":1,"692":1,"697":1,"698":1,"699":1,"710":1,"722":1,"741":1,"743":1,"768":1,"775":2,"786":2,"791":1,"798":1,"800":1,"801":1,"829":1,"830":1,"839":1,"840":1,"842":1,"849":1,"881":2}}],["what",{"0":{"97":1,"188":1,"363":1,"380":1,"394":1,"475":1,"476":1,"477":1,"570":1,"601":1,"640":1,"868":1,"876":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1},"2":{"0":1,"36":1,"37":1,"118":1,"135":1,"141":1,"144":1,"152":1,"158":1,"225":1,"500":1,"577":1,"645":1,"705":1,"746":1,"751":1,"754":1,"797":1,"798":1,"799":1,"800":1,"839":1}}],["t0",{"2":{"820":3}}],["t5",{"2":{"777":2}}],["t4",{"2":{"777":1}}],["t3",{"2":{"777":2}}],["t2",{"2":{"777":2}}],["t1",{"2":{"777":1,"820":2}}],["t>",{"2":{"746":2,"747":1,"799":4}}],["tx",{"2":{"746":5,"751":6,"797":3}}],["txtmy",{"2":{"845":1}}],["txt",{"0":{"847":1},"2":{"172":1,"368":1,"627":1,"845":1,"855":1}}],["tty",{"2":{"329":1,"484":1,"492":1}}],["ttl",{"2":{"194":1,"839":1}}],["tutoring",{"2":{"876":1}}],["turning",{"2":{"497":1}}],["tui",{"2":{"328":1,"329":1}}],["tuple",{"2":{"257":1,"565":1}}],["tup",{"2":{"257":1}}],["tuning",{"2":{"150":1,"204":1,"873":1}}],["tampered",{"2":{"728":1}}],["tamper",{"2":{"724":1}}],["tables",{"2":{"501":1}}],["table",{"0":{"746":1},"2":{"434":1,"435":1,"477":1,"746":1,"751":2,"755":2,"795":1,"801":2}}],["tags",{"2":{"423":1,"603":1,"620":1,"629":1}}],["tag",{"2":{"391":1,"393":3,"394":2,"402":2}}],["take",{"2":{"468":1}}],["taken",{"2":{"312":1}}],["takes",{"2":{"206":1}}],["target",{"2":{"264":4,"266":1,"297":1,"465":1,"553":1,"554":1,"564":1,"677":1,"755":1,"763":3,"847":1}}],["targets",{"2":{"208":1,"264":1}}],["taskcmp",{"0":{"690":1},"2":{"687":1,"690":1}}],["taskguard",{"0":{"691":1},"2":{"581":1,"691":1}}],["taskoptions",{"0":{"521":1,"712":1},"1":{"522":1},"2":{"515":2,"521":2,"528":1,"534":1,"714":1}}],["taskstimedout",{"2":{"695":1}}],["tasks",{"2":{"257":2,"258":1,"513":1,"517":3,"528":1,"536":1,"572":1,"581":3,"582":1,"689":1,"690":1,"692":1,"697":1,"699":2,"700":2,"704":3,"706":2,"717":1}}],["task",{"0":{"252":1,"689":1},"2":{"69":4,"70":3,"71":4,"103":1,"251":2,"252":4,"256":1,"257":1,"514":1,"516":2,"519":1,"520":1,"521":1,"522":1,"532":1,"534":3,"582":1,"687":1,"689":1,"691":1,"692":2,"696":1,"698":1,"699":1,"710":1}}],["tls",{"0":{"767":1},"2":{"160":1,"758":1}}],["typing",{"2":{"232":1}}],["typically",{"0":{"188":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1},"2":{"182":1,"483":1,"484":1,"492":1,"552":1,"566":1,"652":1,"736":1}}],["typical",{"0":{"334":1,"356":1,"364":1,"373":1,"387":1,"410":1,"596":1,"660":1,"713":1},"1":{"661":1,"662":1,"714":1,"715":1},"2":{"144":1,"194":1,"214":1,"535":1,"662":1}}],["type=simple",{"2":{"763":1}}],["type=release",{"2":{"762":1}}],["types",{"0":{"602":1,"709":1},"1":{"603":1,"604":1,"710":1},"2":{"41":1,"179":1,"428":1,"563":1,"642":1,"741":1,"776":1,"796":1}}],["typed",{"0":{"79":1,"80":1,"468":1,"829":1},"2":{"3":1,"63":1,"72":1,"75":1,"79":1,"80":1,"102":1,"106":1,"108":2,"110":1,"235":2,"464":1,"557":1,"568":1,"591":1,"594":1,"597":1,"599":2,"793":1,"838":3,"839":2,"840":1,"841":1}}],["type",{"2":{"3":1,"15":1,"24":1,"30":1,"45":1,"56":1,"64":1,"73":1,"75":2,"79":2,"80":1,"106":1,"107":1,"108":2,"159":1,"167":1,"187":2,"196":2,"234":1,"235":2,"237":1,"419":1,"432":1,"433":1,"438":1,"446":1,"454":1,"472":1,"542":1,"550":1,"551":1,"557":1,"560":1,"565":1,"590":2,"594":1,"607":1,"735":1,"739":1,"742":1,"755":2,"786":1,"793":1,"838":2,"839":2,"840":5,"841":1}}],["title",{"2":{"605":1,"606":1,"607":1}}],["tiny",{"2":{"582":1,"707":1,"735":1}}],["tick",{"2":{"496":1,"692":1,"698":2}}],["tip",{"2":{"288":1}}],["tips",{"0":{"196":1}}],["timing",{"2":{"477":1,"707":1}}],["timings",{"2":{"187":1}}],["times",{"2":{"710":1}}],["timestamps",{"2":{"810":1}}],["timestamp",{"0":{"814":1,"818":1,"819":1,"820":1},"1":{"819":1,"820":1},"2":{"475":1,"486":1,"814":1,"819":1,"820":2,"825":1}}],["timedouttasks",{"2":{"581":1}}],["timed",{"2":{"517":2,"523":1,"535":1,"650":1,"687":1}}],["timeout",{"0":{"676":1,"695":1},"2":{"215":3,"220":1,"221":1,"237":1,"465":2,"468":2,"521":1,"522":1,"571":1,"575":1,"684":1,"686":1,"694":1,"695":2,"706":1}}],["timeoutstopsec=10",{"2":{"763":1}}],["timeouts",{"0":{"215":1},"2":{"212":1,"214":1,"215":3,"216":1,"224":1,"257":1,"473":1,"570":1,"672":1,"824":1,"825":1}}],["timers",{"0":{"253":1,"580":1,"707":1,"710":1},"1":{"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1},"2":{"69":1,"251":1,"253":2,"501":1,"643":1,"650":1,"707":1,"708":1,"714":3,"715":1}}],["timer",{"0":{"69":1,"582":1},"2":{"69":3,"571":1,"575":1,"582":1,"650":1,"676":1,"707":2,"712":1,"717":1}}],["time",{"0":{"810":1,"824":1},"2":{"4":1,"221":1,"413":1,"434":1,"454":1,"464":1,"477":1,"492":1,"516":1,"522":2,"684":1,"698":1,"765":1,"788":2,"810":6,"815":1,"818":1,"821":1,"825":1,"838":1,"865":1,"876":1}}],["tight",{"2":{"141":1,"269":1}}],["team",{"2":{"868":1,"884":1}}],["teams",{"2":{"867":1,"869":1,"872":1,"878":1,"885":1}}],["teaches",{"0":{"97":1}}],["technical",{"2":{"865":1}}],["term",{"2":{"865":2}}],["terminals",{"2":{"334":1}}],["terminal",{"2":{"248":1,"297":1,"334":2}}],["termination",{"2":{"213":1,"498":1}}],["terminate",{"2":{"160":1}}],["temporarily",{"2":{"703":1}}],["template",{"0":{"284":1},"2":{"281":2,"283":1,"290":2,"515":1,"799":1}}],["templates",{"2":{"105":1}}],["telemetry",{"2":{"487":1}}],["tells",{"2":{"257":1}}],["tensorrt",{"2":{"205":1}}],["tests",{"0":{"307":1},"1":{"308":1,"309":1},"2":{"289":1,"307":1,"308":1,"309":2,"310":3,"311":2,"312":1,"313":8,"314":1,"339":1,"518":1,"528":1}}],["tests=on",{"2":{"266":1}}],["testing",{"2":{"277":1,"328":1}}],["test",{"0":{"90":1,"109":1,"310":1,"853":1},"2":{"164":1,"194":1,"226":1,"289":2,"311":1,"418":1,"427":1,"440":1,"510":1,"512":1,"536":1,"544":1,"631":1,"632":1,"633":2,"788":1,"789":1,"790":1,"792":1,"793":1,"803":1,"807":1,"856":1,"857":1}}],["text",{"0":{"32":1,"441":1,"545":1,"627":1,"855":1},"2":{"34":1,"82":1,"92":1,"107":1,"123":1,"132":1,"139":1,"217":1,"234":1,"235":1,"441":1,"510":3,"545":1,"551":1,"558":1,"560":1,"562":1,"838":1,"840":1,"841":1}}],["tcp",{"0":{"71":1,"256":1},"2":{"71":3,"256":1,"326":1,"328":1,"329":1,"341":1,"571":1,"574":1,"640":1,"642":1,"647":1,"673":1,"745":1,"746":1,"747":1,"751":1,"765":1,"797":1,"798":1,"799":1,"800":1,"804":1,"808":1}}],["triggers",{"2":{"700":1}}],["triple",{"2":{"264":1}}],["triple>",{"2":{"264":1}}],["treat",{"2":{"734":1}}],["treats",{"2":{"299":2,"665":1}}],["tree",{"0":{"614":1},"2":{"287":1,"378":1,"385":1,"387":1,"401":2,"408":2,"410":1,"415":1,"576":2,"611":1,"612":1,"614":1,"621":1,"624":1}}],["troubleshooting",{"0":{"196":1,"247":1},"1":{"248":1,"249":1}}],["truth",{"2":{"589":1}}],["trusted",{"2":{"509":1}}],["trust",{"2":{"157":1,"475":1}}],["true",{"2":{"48":1,"89":1,"94":1,"114":1,"115":2,"123":1,"137":1,"155":1,"157":1,"159":1,"166":1,"172":1,"178":1,"185":3,"186":2,"187":1,"192":3,"194":3,"196":1,"221":1,"223":1,"229":1,"423":1,"435":1,"440":1,"442":1,"453":1,"459":1,"465":2,"468":1,"510":2,"516":1,"528":1,"544":1,"546":1,"558":1,"577":2,"608":2,"613":1,"615":1,"616":1,"628":1,"629":1,"637":1,"651":1,"657":1,"698":1,"699":2,"700":2,"769":1,"777":1,"778":1,"779":1,"781":2,"788":1,"789":2,"790":4,"791":3,"792":2,"793":2,"804":5,"808":5,"851":1,"853":1}}],["training",{"0":{"878":1,"879":1},"1":{"879":1,"880":2,"881":2,"882":2,"883":2,"884":1,"885":1,"886":1},"2":{"868":1,"871":1,"876":1,"878":1,"884":1}}],["trail",{"2":{"501":1}}],["track",{"2":{"691":1}}],["tracks",{"0":{"879":1},"1":{"880":1,"881":1,"882":1,"883":1},"2":{"581":1}}],["tracing",{"2":{"593":1,"598":1}}],["trace",{"2":{"274":1,"332":1,"346":1}}],["traces",{"2":{"158":1}}],["traversal",{"2":{"563":1}}],["traverse",{"2":{"469":1}}],["traffic",{"2":{"152":1,"219":1}}],["transactional",{"2":{"800":1}}],["transaction",{"0":{"746":1,"797":1},"2":{"735":1,"746":2,"748":3,"751":2,"797":2}}],["transactions",{"0":{"748":1},"2":{"735":1,"738":1,"754":1,"796":1,"801":1,"882":1}}],["transient",{"2":{"213":1,"216":1}}],["transformations",{"2":{"134":1}}],["transparent",{"2":{"118":1,"403":1}}],["transport",{"2":{"108":1,"110":1,"160":1,"215":1,"238":1,"328":1,"341":1}}],["translation",{"2":{"111":1}}],["trying",{"2":{"665":1}}],["try",{"2":{"63":1,"71":3,"89":1,"220":1,"553":1,"557":1,"632":1,"746":1,"751":1,"797":1,"798":1,"799":1,"800":1}}],["t",{"0":{"43":1,"436":1,"778":1},"2":{"41":1,"42":3,"43":1,"69":2,"70":2,"71":3,"108":3,"251":1,"252":2,"428":1,"430":1,"432":1,"434":1,"436":2,"437":1,"515":1,"523":3,"531":2,"537":2,"538":2,"553":4,"557":5,"594":2,"710":1,"722":1,"723":1,"727":2,"741":3,"756":1,"766":1,"774":1,"776":1,"778":2,"780":1,"788":1,"798":1,"799":2,"801":1,"814":2,"819":2,"830":1,"831":1,"833":1,"837":3,"839":3}}],["two",{"2":{"40":1,"43":1,"54":1,"170":1,"179":1,"333":1,"334":1,"454":1,"689":1,"692":1,"699":1,"749":1,"768":1,"775":1,"778":1,"787":1,"792":1,"838":1}}],["today",{"2":{"812":2}}],["toupdateparams",{"2":{"799":1}}],["toinsertparams",{"2":{"799":1}}],["toint",{"2":{"429":1}}],["top",{"2":{"513":1,"519":1,"558":1,"690":2,"753":1,"754":1,"796":1}}],["toggling",{"2":{"754":1}}],["toggled",{"2":{"459":1}}],["together",{"2":{"250":1,"447":1,"570":1,"588":1}}],["tostring",{"2":{"429":1}}],["toenum",{"2":{"429":1}}],["tofloat",{"2":{"429":1}}],["tobool",{"2":{"429":1}}],["tooling",{"2":{"337":1,"528":1,"608":1,"755":1}}],["toolchains",{"2":{"264":1}}],["toolchain",{"2":{"264":1,"852":1}}],["tool",{"2":{"262":1,"275":1,"323":1,"324":1}}],["tools",{"2":{"246":1,"620":1}}],["too",{"2":{"216":1,"229":1}}],["total",{"2":{"215":1,"218":1,"236":1}}],["tokens",{"2":{"156":1,"217":1,"222":2,"231":1,"575":1,"578":1,"723":1,"734":1}}],["token>",{"2":{"89":1}}],["token",{"0":{"42":1,"156":1,"777":1},"2":{"41":1,"42":1,"88":1,"89":2,"90":3,"108":5,"155":2,"156":2,"215":1,"217":1,"218":1,"232":1,"234":1,"235":1,"589":1,"594":1,"595":1,"776":1,"777":5,"839":4}}],["to",{"0":{"82":1,"83":1,"232":1,"277":1,"427":1,"431":1,"432":1,"433":1,"434":1,"435":1,"512":1,"541":1,"571":1,"598":1,"623":1,"668":1,"685":1,"761":1,"786":1,"814":1},"1":{"572":1,"669":1,"670":1},"2":{"0":1,"24":1,"35":1,"37":1,"59":1,"60":1,"61":1,"65":2,"80":1,"98":1,"104":1,"105":1,"106":2,"107":1,"108":3,"110":1,"122":1,"126":1,"135":2,"136":1,"137":1,"139":1,"140":1,"151":1,"163":1,"167":3,"174":2,"177":1,"187":1,"196":1,"198":1,"215":3,"217":1,"219":1,"223":1,"254":1,"255":1,"258":1,"259":1,"264":2,"269":1,"271":1,"286":1,"301":1,"303":1,"309":1,"311":2,"328":1,"329":1,"330":1,"331":1,"335":1,"339":1,"376":1,"379":1,"380":2,"381":1,"388":1,"390":1,"407":1,"409":1,"418":1,"430":2,"431":1,"432":1,"433":1,"434":2,"435":5,"437":4,"447":1,"456":2,"460":1,"461":1,"462":1,"472":1,"473":1,"476":2,"484":3,"487":1,"489":1,"492":1,"493":2,"494":4,"498":1,"501":3,"504":1,"506":1,"508":2,"510":4,"512":2,"513":2,"517":1,"523":2,"526":1,"528":1,"534":1,"540":2,"551":2,"557":1,"558":1,"559":1,"562":1,"563":1,"567":3,"568":1,"571":3,"572":1,"574":1,"575":2,"576":1,"577":1,"579":1,"581":2,"582":1,"585":1,"588":1,"589":1,"593":1,"595":1,"599":2,"603":1,"604":1,"605":1,"607":1,"609":1,"617":1,"625":1,"639":2,"640":2,"645":1,"649":1,"651":1,"659":1,"662":1,"665":1,"666":2,"667":1,"670":2,"671":1,"672":1,"675":1,"678":1,"680":1,"683":1,"685":1,"687":1,"689":1,"691":1,"693":4,"696":1,"700":2,"702":2,"703":1,"706":1,"707":1,"710":1,"712":2,"716":1,"718":1,"722":1,"723":1,"740":2,"742":1,"743":1,"748":1,"754":1,"755":1,"787":1,"788":3,"789":1,"791":1,"793":2,"795":1,"796":1,"798":1,"799":3,"810":1,"812":1,"813":1,"814":1,"816":1,"817":1,"836":1,"838":4,"839":4,"840":1,"842":1,"846":1,"847":1,"850":1,"869":1,"877":1,"878":1,"885":1}}],["than",{"2":{"698":1,"867":1}}],["that",{"2":{"2":1,"39":1,"118":1,"123":1,"132":1,"134":1,"162":1,"185":1,"195":1,"196":2,"205":1,"428":1,"453":1,"459":1,"517":1,"518":1,"528":1,"551":1,"564":1,"565":1,"570":1,"571":2,"574":1,"581":1,"582":3,"592":1,"594":1,"600":1,"646":1,"648":1,"664":1,"687":1,"690":1,"691":1,"698":1,"705":1,"706":1,"707":1,"710":2,"712":1,"717":1,"743":2,"751":1,"773":1,"787":1,"839":1,"845":1}}],["though",{"2":{"510":1}}],["those",{"2":{"477":1,"754":1}}],["things",{"2":{"570":1}}],["think",{"2":{"510":1}}],["this",{"0":{"97":1,"572":1,"885":1},"2":{"0":2,"1":1,"3":1,"14":1,"37":2,"38":1,"40":1,"54":1,"72":1,"80":1,"85":1,"87":1,"89":1,"91":1,"92":1,"98":1,"106":1,"119":1,"120":1,"127":1,"136":1,"151":1,"163":1,"178":1,"195":1,"204":1,"212":1,"219":1,"231":1,"234":1,"235":1,"239":1,"250":1,"253":1,"254":1,"255":1,"256":1,"268":1,"276":1,"290":1,"379":1,"384":1,"399":1,"400":1,"403":1,"458":1,"462":1,"467":1,"470":1,"471":1,"481":1,"483":1,"486":1,"489":1,"496":1,"497":1,"501":1,"503":1,"510":2,"511":1,"512":1,"518":1,"520":1,"523":1,"527":1,"529":1,"539":1,"551":1,"552":1,"569":1,"571":1,"577":2,"588":1,"591":1,"593":1,"594":1,"596":1,"600":1,"603":1,"606":1,"608":1,"616":1,"617":1,"620":1,"639":2,"649":1,"650":1,"651":1,"675":1,"676":1,"677":1,"678":1,"687":1,"691":1,"696":1,"697":1,"705":1,"707":1,"714":1,"718":1,"723":1,"735":1,"746":1,"755":1,"757":1,"793":1,"795":1,"802":1,"806":1,"810":1,"824":1,"829":1,"832":1,"838":2,"839":2,"840":1,"844":1,"851":1}}],["thumb",{"0":{"230":1,"638":1}}],["throws",{"2":{"664":1,"691":1}}],["thrown",{"2":{"656":1,"696":1}}],["throw",{"2":{"492":1,"498":2,"755":1}}],["through",{"2":{"214":1,"530":1,"571":1,"589":1,"591":1,"604":1,"696":1,"739":1,"750":1}}],["throughput",{"0":{"151":1},"2":{"141":1,"151":1,"496":1,"862":1}}],["three",{"2":{"182":1,"694":1}}],["threadcount",{"2":{"693":1,"706":1}}],["threaded",{"2":{"477":1,"489":1}}],["threads",{"0":{"653":1,"659":1},"2":{"251":1,"256":1,"465":1,"470":1,"475":1,"489":1,"527":1,"531":1,"532":3,"537":2,"538":3,"539":1,"568":1,"572":3,"574":4,"581":2,"587":1,"640":1,"646":2,"651":1,"652":1,"653":1,"659":2,"662":1,"666":2,"678":1,"684":1,"685":1,"687":2,"692":3,"693":3,"698":2,"700":1,"702":1,"705":2,"840":2}}],["threadpool>",{"2":{"532":1}}],["threadpool",{"0":{"580":1,"581":1,"687":2,"692":1},"1":{"688":2,"689":2,"690":2,"691":2,"692":2,"693":2,"694":2,"695":2,"696":2,"697":2,"698":2,"699":2,"700":2,"701":2,"702":2,"703":2,"704":2,"705":2,"706":2},"2":{"75":1,"512":1,"529":2,"530":2,"532":1,"538":2,"661":1,"700":1,"840":1}}],["threadpoolexecutor",{"0":{"529":1,"530":1},"1":{"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1},"2":{"75":1,"530":2,"541":1,"840":1}}],["thread",{"0":{"488":1,"648":1,"683":1},"1":{"489":1,"490":1},"2":{"69":3,"74":1,"86":1,"103":2,"253":1,"254":1,"450":1,"451":1,"452":1,"475":1,"509":1,"529":1,"532":1,"534":1,"570":1,"571":1,"572":1,"574":1,"575":1,"582":1,"585":1,"648":2,"659":2,"671":1,"678":1,"684":1,"687":1,"697":1,"698":1,"704":1,"705":1,"707":2,"710":3,"712":2,"715":1,"716":2,"735":1,"840":1,"862":1,"881":1}}],["their",{"2":{"667":1}}],["these",{"2":{"188":1,"202":1,"213":1,"537":1,"570":1,"601":1}}],["there",{"2":{"111":1,"121":1,"144":1,"667":1,"694":1,"698":1,"699":1,"743":1}}],["themselves",{"2":{"702":1}}],["theme",{"2":{"578":1}}],["them",{"2":{"105":1,"575":1,"587":1,"590":1,"751":1}}],["then",{"0":{"771":1},"2":{"69":1,"164":1,"194":1,"195":1,"237":2,"574":1,"575":1,"652":1,"671":1,"690":1,"697":1,"700":1,"712":1,"750":1,"751":1,"763":1,"768":1,"769":1,"803":1,"807":1}}],["they",{"2":{"40":1,"105":1,"231":1,"250":1,"576":1,"587":1,"588":2,"604":1,"699":1}}],["the",{"0":{"120":1,"121":1,"122":1,"123":1,"419":1,"486":1,"570":1,"606":1,"714":1,"760":1,"762":1,"765":1,"773":1},"1":{"761":1,"762":1},"2":{"0":4,"2":2,"3":2,"4":2,"13":1,"14":1,"17":2,"35":1,"36":1,"37":4,"39":2,"40":1,"53":1,"54":1,"61":1,"66":2,"69":3,"72":1,"86":2,"91":1,"92":1,"93":1,"103":1,"107":2,"110":1,"111":3,"117":1,"118":1,"119":6,"120":3,"121":4,"125":1,"126":2,"127":5,"128":4,"130":3,"132":1,"134":1,"145":1,"163":1,"167":3,"171":1,"172":1,"173":1,"179":1,"180":1,"187":1,"188":1,"196":1,"198":1,"199":2,"203":1,"205":1,"208":2,"209":1,"210":1,"212":3,"217":2,"218":1,"221":1,"224":1,"225":3,"229":1,"231":3,"233":2,"234":1,"236":2,"237":1,"239":1,"250":2,"252":2,"253":2,"254":5,"257":1,"259":4,"269":1,"270":2,"273":1,"278":1,"281":1,"290":1,"303":1,"306":2,"309":1,"314":1,"330":1,"335":2,"337":1,"348":2,"349":1,"351":1,"356":1,"365":1,"367":1,"374":1,"376":3,"379":1,"381":1,"384":2,"386":2,"388":1,"390":3,"391":2,"393":1,"395":3,"396":1,"398":1,"399":1,"400":1,"402":1,"404":1,"405":1,"407":2,"409":1,"411":1,"413":4,"416":1,"417":1,"418":1,"426":1,"427":1,"428":1,"435":1,"436":2,"437":1,"438":1,"447":1,"450":3,"451":1,"452":1,"453":1,"454":1,"455":2,"458":1,"460":3,"462":1,"463":1,"464":1,"466":1,"467":1,"468":3,"471":1,"472":1,"475":1,"477":1,"483":2,"486":2,"490":3,"494":1,"498":1,"503":1,"506":1,"507":1,"510":1,"511":1,"512":1,"513":5,"514":1,"516":1,"518":2,"519":2,"520":2,"522":1,"526":4,"527":5,"529":1,"530":1,"532":2,"534":3,"536":1,"539":1,"540":2,"542":1,"551":3,"552":2,"553":1,"554":4,"555":1,"556":3,"557":1,"560":1,"563":1,"564":3,"565":1,"566":1,"568":1,"569":1,"570":2,"571":10,"572":2,"574":6,"575":3,"576":2,"577":4,"578":3,"581":2,"582":1,"587":2,"588":2,"589":7,"591":1,"592":3,"595":1,"597":2,"599":1,"603":1,"604":2,"605":2,"607":4,"608":1,"609":1,"611":1,"612":1,"614":1,"615":1,"617":2,"621":1,"622":1,"624":3,"639":3,"640":3,"642":1,"643":1,"645":2,"646":3,"647":1,"649":1,"650":1,"651":1,"652":1,"654":1,"656":1,"657":1,"658":2,"664":1,"665":2,"666":4,"669":1,"672":2,"673":1,"675":1,"676":1,"678":1,"686":3,"687":1,"689":4,"690":5,"691":1,"692":5,"693":1,"695":4,"696":3,"697":2,"698":7,"700":2,"702":2,"703":1,"705":7,"706":1,"707":4,"710":4,"712":6,"716":4,"717":2,"718":1,"727":1,"728":2,"734":1,"735":4,"736":2,"737":1,"738":2,"740":3,"741":1,"742":2,"743":1,"748":4,"753":1,"755":1,"756":1,"757":1,"759":1,"763":1,"765":2,"771":2,"786":1,"787":1,"788":1,"791":1,"792":1,"793":1,"794":1,"795":1,"796":1,"798":1,"799":1,"801":1,"802":1,"803":1,"805":5,"806":1,"807":1,"809":5,"810":1,"825":1,"826":1,"833":1,"837":1,"840":1,"842":1,"844":1,"849":3,"859":1}}],["href=",{"2":{"607":1}}],["human",{"2":{"567":1,"594":1}}],["huge",{"2":{"236":1}}],["html",{"2":{"563":1,"566":1,"578":1,"601":2,"607":3,"804":2,"808":2}}],["httpcacheappconfig",{"2":{"194":1}}],["httpserver",{"0":{"574":1,"639":1,"640":1},"1":{"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1},"2":{"571":1,"610":2,"639":2,"640":1,"645":1,"661":1,"667":1,"685":1}}],["https",{"0":{"160":1},"2":{"160":1,"241":1,"242":1,"762":1}}],["httpapi",{"2":{"108":1,"839":1}}],["httpmiddleware",{"0":{"181":1},"2":{"55":1,"64":3,"181":1}}],["http",{"0":{"14":1,"64":1,"85":1,"92":1,"100":1,"194":1,"234":1,"331":1,"438":1,"542":1,"551":1,"559":1,"639":1,"789":1,"833":1,"839":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1},"2":{"0":1,"14":1,"17":1,"30":1,"36":1,"37":1,"54":1,"55":1,"64":1,"84":1,"85":2,"90":3,"92":1,"93":1,"100":1,"106":1,"108":4,"109":3,"120":1,"127":1,"130":1,"163":1,"164":5,"179":1,"194":4,"196":1,"198":1,"203":1,"205":1,"215":2,"226":1,"238":1,"328":1,"331":1,"438":1,"440":1,"446":1,"447":2,"453":1,"460":1,"510":3,"513":1,"527":1,"529":1,"539":1,"540":1,"542":1,"544":1,"550":1,"551":2,"552":4,"554":1,"559":1,"560":2,"567":1,"570":1,"571":2,"576":1,"594":1,"595":1,"604":1,"611":1,"612":1,"613":2,"617":1,"624":1,"629":1,"631":1,"632":1,"633":1,"639":1,"640":2,"642":2,"643":1,"661":1,"672":2,"675":1,"705":1,"757":1,"766":3,"769":1,"774":1,"787":1,"788":1,"789":2,"790":3,"792":3,"793":2,"802":3,"803":5,"804":4,"805":2,"806":3,"807":5,"808":4,"809":2,"826":1,"838":1,"839":7,"853":2,"856":1,"857":1,"880":1}}],["hh",{"2":{"478":4,"497":1}}],["h",{"2":{"90":1,"194":1,"196":1,"264":1,"336":1,"346":1,"352":1,"360":1,"369":1,"633":1,"715":2,"789":1,"790":1,"792":3,"793":2}}],["hpp",{"2":{"40":2,"475":1,"504":2,"639":1,"708":1,"775":2}}],["hpp>",{"2":{"3":1,"11":1,"12":1,"15":1,"23":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"64":2,"69":4,"70":3,"71":5,"73":1,"75":3,"84":1,"89":1,"93":1,"94":1,"95":2,"96":1,"108":4,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":1,"229":1,"234":1,"252":2,"429":8,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"464":1,"478":1,"503":1,"510":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"586":1,"605":1,"606":1,"607":1,"610":2,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"714":1,"719":1,"722":1,"735":1,"745":1,"746":1,"747":1,"751":1,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"788":2,"789":2,"790":1,"791":1,"792":1,"793":1,"797":1,"798":1,"799":1,"800":1,"804":5,"808":5,"810":1,"826":5,"827":1,"829":1,"830":1,"831":1,"839":4,"840":3,"846":1,"851":1}}],["hides",{"2":{"511":1}}],["hidden",{"2":{"2":1,"36":1,"39":1,"111":1,"121":1,"125":1,"134":1,"143":1,"144":1,"162":1,"251":1,"256":1,"259":1,"337":1,"348":1,"427":1,"438":1,"481":1,"510":1,"511":1,"542":1,"597":1,"796":1,"844":1,"859":1,"870":1}}],["history",{"0":{"425":1},"2":{"317":1,"424":4,"425":3}}],["hints",{"2":{"521":1,"534":1,"611":1,"612":1}}],["hint",{"2":{"89":2,"522":1,"632":1,"789":1,"790":1,"791":1}}],["highest",{"2":{"692":1}}],["higher",{"2":{"504":1,"511":1,"522":1,"689":1,"690":1,"717":1}}],["high",{"0":{"45":1,"127":1,"782":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"783":1,"784":1,"785":1},"2":{"29":1,"40":1,"53":1,"86":1,"143":1,"198":1,"487":1,"501":1,"551":1,"569":1,"611":1,"623":1,"775":2,"786":1,"860":1,"867":1,"869":1,"885":1}}],["hazard",{"2":{"507":1}}],["happening",{"2":{"500":1}}],["happens",{"0":{"380":1,"394":1},"2":{"2":1,"36":1,"39":1,"127":1,"565":1,"625":1,"658":1}}],["hardening",{"2":{"763":1}}],["hard",{"2":{"498":1}}],["hardware",{"0":{"150":1},"2":{"150":1,"203":1,"574":1,"648":1,"702":1,"850":2}}],["have",{"2":{"236":1,"581":1,"689":1,"768":1,"852":1}}],["half",{"2":{"219":1}}],["handling",{"0":{"237":1,"566":1,"618":1,"619":1,"679":1,"681":1},"2":{"85":1,"111":1,"198":2,"203":1,"204":1,"251":1,"437":1,"570":1,"580":1,"588":1,"594":1,"598":1,"599":1,"611":1,"612":1,"622":1,"640":1,"656":1,"665":1,"672":1,"756":1,"881":1,"883":1}}],["handled",{"2":{"256":1,"420":1,"679":1}}],["handles",{"2":{"203":2,"205":1,"570":1,"643":1,"833":1}}],["handle",{"0":{"714":1},"2":{"69":1,"70":1,"71":3,"108":2,"210":1,"236":1,"252":2,"255":1,"256":1,"552":1,"575":1,"582":1,"647":1,"658":1,"675":1,"710":2,"712":3,"716":2,"722":1,"723":1,"727":1,"731":1,"732":1,"838":2,"839":2}}],["handlers",{"0":{"148":1,"187":1,"793":1},"2":{"35":1,"85":1,"86":1,"103":1,"122":1,"148":1,"447":1,"460":2,"461":1,"513":1,"528":1,"539":1,"541":1,"551":1,"560":1,"565":2,"577":1,"590":1,"598":1,"625":1,"638":1,"793":1,"842":1,"849":1}}],["handler",{"0":{"131":1,"454":1,"565":1},"2":{"19":1,"20":1,"21":1,"22":1,"34":1,"35":1,"36":1,"62":1,"66":1,"108":1,"121":1,"127":1,"134":1,"144":1,"145":1,"166":1,"167":2,"187":1,"210":1,"225":2,"454":4,"455":2,"457":2,"458":2,"463":1,"527":2,"529":1,"557":1,"564":2,"565":1,"568":1,"571":1,"576":2,"584":1,"588":1,"596":1,"613":2,"619":1,"643":1,"645":1,"665":2,"671":1,"673":1,"787":1,"839":1}}],["hasauth",{"2":{"444":2,"548":2,"633":2}}],["hashing",{"0":{"721":1},"1":{"722":1},"2":{"581":1,"718":1,"734":1}}],["hash",{"2":{"360":1,"369":1}}],["hashes",{"2":{"262":1,"268":1}}],["has",{"2":{"27":1,"151":1,"175":2,"187":1,"218":1,"267":1,"444":2,"468":1,"469":1,"548":2,"553":1,"557":1,"572":1,"576":1,"589":1,"605":1,"633":2,"665":1,"692":1,"736":3,"793":1,"836":1,"838":1}}],["hour",{"2":{"875":3}}],["housekeeping",{"2":{"717":1}}],["holding",{"2":{"743":1}}],["holds",{"2":{"594":1}}],["hop",{"2":{"684":1}}],["home",{"2":{"288":1,"289":1,"353":1}}],["homebrew",{"0":{"245":1}}],["hot",{"0":{"147":1},"2":{"140":1,"230":1,"274":1,"487":1,"501":1}}],["hooks",{"0":{"76":1,"593":1},"1":{"77":1,"78":1,"79":1},"2":{"72":1,"588":1,"593":4,"596":3}}],["host",{"2":{"6":1,"10":2,"11":3,"175":2,"323":1,"324":1,"329":1,"443":4,"464":1,"465":1,"469":4,"547":4,"633":4,"743":1,"745":1,"746":1,"747":1,"751":1,"754":1,"756":1,"766":1,"801":1}}],["how",{"0":{"527":1,"539":1,"668":1},"1":{"669":1,"670":1},"2":{"0":1,"37":1,"97":4,"135":1,"163":1,"198":1,"250":1,"258":1,"510":1,"569":1,"588":1,"639":3,"718":1,"810":1}}],["hex",{"2":{"722":4}}],["heuristic",{"2":{"697":1}}],["heap",{"2":{"486":1}}],["head",{"0":{"617":1,"665":1},"2":{"453":1,"576":2,"611":1,"617":2,"622":1,"645":1,"665":4,"679":1}}],["headers",{"0":{"27":1,"55":1,"159":1,"175":1,"189":1,"440":1,"443":1,"504":1,"544":1,"547":1,"633":1},"2":{"24":1,"87":1,"101":1,"122":1,"131":2,"154":1,"159":1,"167":2,"175":2,"183":2,"189":1,"194":1,"196":1,"234":1,"438":1,"440":2,"446":1,"504":1,"510":2,"542":1,"544":2,"550":1,"551":2,"564":1,"568":1,"607":2,"633":2,"675":1,"680":1,"703":1,"773":1,"787":2,"826":1}}],["header",{"0":{"155":1,"444":1,"548":1},"2":{"3":1,"15":1,"27":2,"41":1,"45":1,"73":1,"84":1,"88":1,"89":2,"123":1,"137":1,"155":2,"156":1,"159":3,"175":4,"180":2,"181":8,"194":3,"234":3,"281":1,"284":1,"290":1,"440":2,"443":2,"444":1,"446":1,"510":1,"544":2,"547":2,"548":1,"550":1,"553":2,"560":2,"589":1,"607":1,"633":3,"703":1,"735":1,"736":1,"766":4,"788":3,"789":3,"790":2,"791":2,"792":2,"793":2,"810":1}}],["heartbeat",{"2":{"265":1}}],["heartbeat=1",{"2":{"265":1}}],["healthcheck",{"2":{"768":1}}],["healthy",{"2":{"510":1}}],["health",{"0":{"769":1},"2":{"164":1,"453":1,"510":1,"528":1,"661":1,"769":2,"774":1,"851":1,"853":1}}],["heavy",{"0":{"147":1,"577":1,"608":1,"616":1,"670":1,"678":1},"2":{"141":1,"148":1,"230":1,"254":2,"259":1,"453":3,"461":1,"475":1,"477":1,"541":1,"570":2,"571":2,"572":3,"575":1,"577":5,"580":1,"581":1,"582":1,"584":1,"585":1,"587":3,"603":1,"608":2,"611":1,"612":1,"613":1,"616":2,"623":1,"670":3,"672":1,"678":3,"683":1,"684":1,"686":1,"687":1,"705":2,"717":2}}],["here",{"2":{"69":1,"234":1,"252":1,"510":1,"610":1}}],["help",{"2":{"264":2,"345":2,"346":1,"352":2,"360":2,"369":2,"424":4,"587":1,"861":1,"863":1,"867":1}}],["helper",{"0":{"538":1},"2":{"85":1,"234":1,"392":1,"519":1,"595":1,"667":1,"691":1,"740":1,"743":1,"839":1}}],["helpers",{"2":{"1":1,"38":1,"45":1,"97":1,"108":1,"186":1,"453":1,"551":2,"558":2,"560":1,"567":1,"699":1,"741":1,"755":1,"756":1,"782":1,"796":1,"831":1,"849":1}}],["hello",{"0":{"92":1,"93":1,"100":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1},"2":{"23":1,"32":1,"57":1,"64":1,"69":1,"82":1,"93":1,"94":1,"107":1,"108":1,"136":1,"169":1,"172":3,"173":1,"234":1,"235":1,"441":1,"448":1,"478":2,"510":3,"545":1,"561":1,"586":1,"626":1,"627":1,"722":1,"727":1,"732":1,"777":1,"783":1,"838":1,"839":1,"841":1,"851":1,"853":1,"855":1}}],["gmail",{"2":{"866":1,"877":1,"886":1}}],["gmtime",{"2":{"559":1}}],["gmt",{"2":{"558":1,"559":1}}],["gcm",{"2":{"725":1,"726":1,"727":1,"734":1}}],["gh",{"2":{"390":1,"394":1}}],["g",{"2":{"312":1,"457":4,"504":1,"567":1,"762":1}}],["gnu",{"2":{"266":1}}],["git",{"2":{"342":1,"391":2,"393":3,"394":1,"396":1,"398":1,"399":2,"402":2,"403":1,"404":1,"762":2}}],["github",{"2":{"249":1,"762":1}}],["gives",{"2":{"122":1,"438":1,"511":1,"542":1,"838":1}}],["given",{"2":{"10":1,"17":1,"726":1}}],["guest",{"2":{"834":1}}],["guidance",{"0":{"487":1,"528":1,"568":1,"717":1},"2":{"873":1}}],["guideline",{"2":{"748":1}}],["guide",{"0":{"510":1,"639":1},"1":{"511":1,"512":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1},"2":{"0":1,"37":1,"163":1,"250":1,"510":1,"512":1,"639":2,"718":1,"735":1,"757":1,"795":1,"810":1,"838":1,"844":1}}],["guaranteed",{"2":{"494":2}}],["guarantee",{"0":{"489":1},"2":{"476":1}}],["guarantees",{"0":{"475":1,"494":1,"622":1,"681":1},"2":{"212":1,"399":1,"486":1,"592":1,"596":1,"622":1,"681":1}}],["guarded",{"2":{"736":1}}],["guardrails",{"2":{"509":1}}],["guards",{"2":{"487":1}}],["guard",{"0":{"229":1}}],["gpus",{"2":{"212":1}}],["gpu",{"2":{"208":1,"850":1}}],["gaspardkirira9",{"2":{"866":1,"877":1,"886":1}}],["gaspardkirira",{"2":{"378":1,"385":1,"387":1,"401":1,"408":2,"410":1,"415":1}}],["gaspard",{"2":{"187":1,"423":3,"780":1,"785":1,"793":1}}],["garbage",{"2":{"143":1,"511":2}}],["green",{"2":{"768":1}}],["grows",{"2":{"697":1,"849":1}}],["growth",{"2":{"687":1,"693":1,"706":1}}],["grow",{"2":{"581":1}}],["grouping",{"2":{"825":1}}],["group=www",{"2":{"763":1}}],["grouped",{"2":{"501":1}}],["groups",{"0":{"457":1},"2":{"447":1,"457":2}}],["group",{"2":{"184":1,"457":2,"477":1}}],["grade",{"2":{"474":1,"477":1,"837":1}}],["gracefully",{"2":{"679":1}}],["graceful",{"0":{"662":1},"2":{"452":1,"681":1,"881":1}}],["graph",{"2":{"386":1}}],["granted",{"2":{"156":1}}],["gt",{"0":{"436":1,"712":1},"2":{"88":1,"166":1,"251":1,"359":2,"363":2,"391":1,"393":1,"402":1,"428":1,"430":1,"434":1,"435":1,"436":1,"437":1,"475":1,"553":4,"557":5,"558":1,"560":1,"564":1,"565":2,"574":1,"594":2,"607":1,"645":1,"646":1,"647":1,"648":1,"650":1,"651":1,"652":1,"658":1,"659":1,"664":2,"687":1,"689":1,"696":1,"697":2,"710":1,"751":2,"799":1,"830":1,"831":1,"833":1,"837":3}}],["gone",{"2":{"712":1}}],["go",{"0":{"512":1},"2":{"863":1,"869":1}}],["golden",{"0":{"486":1}}],["goes",{"2":{"214":1,"254":1,"571":1}}],["good",{"0":{"500":1},"2":{"183":1,"184":1,"185":1,"216":1}}],["gotchas",{"0":{"663":1},"1":{"664":1,"665":1,"666":1,"667":1}}],["got",{"2":{"70":1,"181":2}}],["goals",{"0":{"213":1,"270":1,"278":1,"306":1,"348":1,"417":1,"475":1,"476":1}}],["goal",{"0":{"88":1,"758":1},"2":{"0":1,"37":1,"125":1,"212":2,"510":1}}],["generating",{"2":{"623":1}}],["generation",{"0":{"731":1},"2":{"343":1,"486":1,"603":1,"604":1,"608":1,"609":1,"612":1,"620":1}}],["generations",{"2":{"232":1}}],["generates",{"2":{"359":1,"552":1,"600":1}}],["generated",{"0":{"363":1},"2":{"217":1,"578":1,"601":1,"607":1,"738":1}}],["generate",{"2":{"180":1,"281":2,"322":1,"325":1,"360":1,"510":1,"605":1}}],["general",{"2":{"107":1,"529":1,"838":1,"841":1,"876":1}}],["generic",{"2":{"41":1,"436":1,"437":1,"514":1,"776":1}}],["getxor",{"2":{"756":1}}],["getdoubleor",{"2":{"740":1}}],["getdouble",{"2":{"740":1}}],["getdbpasswordfromenv",{"2":{"471":2}}],["getrouter",{"0":{"649":1},"2":{"606":1,"610":1,"649":1,"661":1,"669":1}}],["getrequesttimeout",{"2":{"470":1}}],["getwafmaxbodybytes",{"2":{"470":1}}],["getwafmaxtargetlen",{"2":{"470":1}}],["getwafmode",{"2":{"470":1}}],["getlogdroponoverflow",{"2":{"470":1}}],["getlogqueuemax",{"2":{"470":1}}],["getlogasync",{"2":{"470":2}}],["getiothreads",{"2":{"470":2,"648":1,"671":1}}],["getint64or",{"2":{"740":1,"799":2}}],["getint64",{"2":{"740":1,"746":2,"747":1}}],["getint",{"2":{"468":3,"473":1}}],["getinstance",{"2":{"467":1,"470":1,"471":1}}],["getbool",{"2":{"468":2,"473":1}}],["getsessiontimeoutsec",{"2":{"470":1}}],["getserverport",{"2":{"470":2}}],["getstringor",{"2":{"740":1,"799":2}}],["getstring",{"2":{"468":2,"469":1,"473":1,"740":1,"746":1,"747":1}}],["gets",{"0":{"363":1},"2":{"554":1}}],["getenv",{"2":{"12":1}}],["get",{"0":{"6":1,"7":1,"8":1,"9":1,"19":1,"194":1,"601":1,"819":1},"2":{"6":1,"7":1,"8":1,"9":1,"10":2,"11":2,"12":1,"19":1,"23":1,"34":1,"44":1,"57":1,"64":1,"89":3,"92":1,"93":1,"94":1,"95":1,"96":1,"100":1,"108":6,"112":1,"113":1,"114":1,"115":1,"122":1,"124":1,"128":1,"130":2,"132":2,"136":1,"137":1,"138":1,"145":1,"151":1,"155":1,"156":1,"157":1,"159":1,"166":1,"169":1,"171":1,"172":3,"173":2,"174":1,"175":2,"176":2,"177":1,"178":1,"187":1,"194":1,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":1,"229":1,"248":1,"439":3,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"453":3,"455":1,"457":1,"510":12,"519":1,"520":1,"543":3,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"557":2,"561":2,"572":1,"576":1,"578":4,"584":1,"586":1,"590":1,"601":6,"611":1,"613":1,"614":2,"617":1,"619":1,"621":1,"626":1,"627":1,"628":1,"629":1,"630":2,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"661":1,"665":1,"696":1,"728":1,"769":1,"779":1,"788":1,"789":1,"790":2,"791":2,"792":1,"793":1,"798":1,"804":2,"808":2,"839":6,"846":3,"851":2,"855":1,"856":1,"857":1,"858":1}}],["getters",{"0":{"5":1,"468":1,"470":1},"1":{"6":1,"7":1,"8":1,"9":1},"2":{"5":1,"468":1,"470":1}}],["globally",{"2":{"167":1,"180":1,"456":1,"787":1}}],["global",{"0":{"59":1,"183":1,"346":1},"2":{"2":1,"13":1,"39":1,"107":1,"195":2,"458":1,"467":1,"503":1,"591":1,"597":1,"604":1,"788":1}}],["ip",{"0":{"773":1},"2":{"766":1,"773":1}}],["irequesthandler",{"0":{"552":1},"2":{"551":2,"552":2,"612":1}}],["image",{"2":{"581":1}}],["immutable",{"2":{"399":1,"607":1}}],["immediately",{"2":{"264":1,"269":1,"451":1,"475":1,"571":1,"678":1,"693":1}}],["improve",{"2":{"862":1}}],["improves",{"2":{"489":1}}],["impose",{"2":{"150":1}}],["important",{"0":{"117":1,"133":1,"491":1},"1":{"492":1,"493":1},"2":{"172":1,"298":1,"472":1,"522":1,"575":1,"582":1,"592":1,"607":1,"646":1,"689":1,"698":1,"710":2}}],["implications",{"2":{"700":1}}],["implication",{"0":{"490":1}}],["implicit",{"2":{"13":1,"125":1,"134":1,"379":1,"409":1,"477":1,"597":1}}],["implements",{"2":{"753":1,"754":1}}],["implemented",{"2":{"224":1,"458":1,"519":1,"557":1,"754":1}}],["implement",{"2":{"161":1,"541":1,"552":1,"671":1}}],["implementations",{"2":{"458":1}}],["implementation",{"2":{"4":1,"472":1,"493":1,"517":1,"522":3,"526":1,"529":1,"530":1,"607":1,"652":1,"699":1,"705":1,"805":1,"809":1}}],["ignore",{"2":{"264":1}}],["ignored",{"2":{"35":1,"132":2,"133":1,"172":3,"604":1,"637":2}}],["iexecutor>",{"2":{"538":1,"645":1}}],["iexecutor",{"0":{"514":1,"712":1},"1":{"515":1,"516":1,"517":1,"518":1},"2":{"460":1,"513":1,"514":1,"515":1,"529":1,"530":2,"540":1,"541":1,"643":1,"714":2}}],["iex",{"2":{"242":1}}],["i",{"0":{"491":1,"492":1,"659":1},"1":{"492":1,"493":1},"2":{"69":3,"90":3,"108":5,"109":2,"140":1,"141":1,"151":1,"164":4,"194":3,"196":2,"234":2,"254":4,"257":1,"440":1,"475":1,"476":1,"486":1,"487":1,"506":1,"522":1,"544":1,"571":1,"572":3,"574":2,"581":1,"587":1,"640":1,"642":1,"646":1,"651":1,"653":1,"659":2,"671":2,"678":2,"684":1,"685":1,"705":2,"740":3,"756":1,"769":1,"774":1,"778":4,"788":1,"789":2,"790":3,"792":3,"793":2,"798":4,"803":3,"807":3,"824":2,"839":5,"850":1}}],["io",{"0":{"51":1,"648":1,"784":1},"2":{"69":4,"70":4,"71":4,"251":1,"252":6,"259":1,"465":1,"470":1,"574":5,"640":1,"642":1,"645":1,"646":1,"651":2,"659":2,"666":1,"782":1,"786":1,"881":1}}],["iostream>",{"2":{"11":1,"42":1,"69":1,"70":1,"71":1,"136":1,"137":1,"745":1,"746":1,"747":1,"751":1,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":1,"797":1,"798":1,"799":1,"800":1}}],["i64",{"2":{"42":2,"741":1,"777":1}}],["id=",{"2":{"799":1}}],["idx",{"2":{"739":2,"741":6}}],["ids",{"2":{"591":1,"734":1}}],["idle",{"0":{"518":1,"536":1,"699":1},"2":{"513":2,"515":1,"518":1,"528":1,"536":1,"574":1,"652":1,"666":1,"692":1,"704":1,"742":2}}],["id>",{"2":{"327":1,"329":1}}],["identity",{"2":{"729":1,"734":1}}],["idempotent",{"2":{"716":1}}],["idempotency",{"0":{"217":1},"2":{"217":1}}],["ideal",{"2":{"591":1,"593":1}}],["ideas",{"0":{"769":1},"2":{"427":1,"576":1}}],["idea",{"0":{"233":1},"2":{"572":1,"849":1}}],["id",{"2":{"25":1,"113":9,"130":6,"172":1,"173":10,"180":5,"183":1,"187":2,"196":1,"213":1,"221":1,"223":2,"327":1,"329":2,"333":6,"334":2,"510":8,"553":1,"555":1,"557":1,"611":1,"613":2,"614":1,"615":2,"629":1,"631":10,"702":1,"738":1,"746":2,"747":1,"750":1,"751":4,"788":3,"795":1,"799":8,"804":1,"805":1,"808":1,"809":1,"846":7,"856":5}}],["ini",{"2":{"763":1}}],["init",{"2":{"656":1}}],["initialization",{"0":{"656":1}}],["initializes",{"2":{"574":1,"646":1}}],["initialize",{"2":{"210":1}}],["initializer",{"0":{"48":1},"2":{"782":1}}],["initial",{"2":{"483":1,"532":1,"538":1,"693":1}}],["inactive",{"2":{"748":2}}],["indicates",{"2":{"522":1,"755":1}}],["independently",{"2":{"540":1}}],["independent",{"2":{"494":1,"683":1}}],["indexes",{"2":{"740":1}}],["index",{"2":{"257":2,"376":1,"380":1,"390":1,"396":1,"398":2,"400":1,"411":1,"413":1,"416":1,"557":1,"563":1,"578":1,"601":1,"702":1,"740":1,"755":1,"804":1,"808":1}}],["indentation",{"2":{"49":1,"782":1}}],["inherently",{"2":{"492":1}}],["ingestion",{"2":{"474":1,"476":1,"501":1}}],["infrastructure",{"2":{"869":1,"885":1}}],["information",{"2":{"345":1}}],["info",{"0":{"345":1},"2":{"220":1,"274":1,"332":1,"346":1,"451":1,"456":1,"462":3,"475":3,"478":3,"480":1,"481":3,"483":1,"487":1,"497":4,"507":1,"591":1,"804":1,"808":1,"840":1}}],["infer",{"2":{"201":1,"207":1,"227":1,"234":1}}],["inference",{"0":{"197":1,"198":1,"200":1,"201":1,"225":1,"226":1,"227":1,"228":1},"1":{"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"226":1,"227":1,"228":1,"229":1,"230":1},"2":{"198":2,"199":1,"200":1,"201":1,"202":1,"203":1,"204":2,"205":3,"208":1,"211":1,"212":2,"213":1,"214":1,"217":1,"218":5,"221":1,"225":2,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"233":1,"234":1,"235":2,"237":2,"868":1}}],["injects",{"2":{"608":1}}],["injection",{"2":{"597":1,"599":1,"677":1,"682":2}}],["injected",{"2":{"539":1}}],["inject",{"2":{"154":1,"460":1,"541":1}}],["invocation",{"2":{"592":1}}],["invoked",{"2":{"592":1}}],["invokes",{"2":{"564":1,"643":1}}],["invoke",{"2":{"515":1}}],["involved",{"2":{"145":1}}],["invalid",{"2":{"89":1,"114":1,"116":1,"157":1,"212":1,"213":1,"352":1,"432":1,"464":1,"510":1,"566":1,"594":1,"595":1,"733":1}}],["increment",{"2":{"746":1,"751":1}}],["incremented",{"2":{"695":1}}],["increments",{"2":{"691":1}}],["increasing",{"2":{"689":1}}],["increases",{"2":{"581":1}}],["increase",{"2":{"149":1,"493":1}}],["incoming",{"2":{"122":1,"127":1,"136":1}}],["included",{"0":{"876":1}}],["includes",{"2":{"222":1,"290":1,"418":1,"551":1,"864":1}}],["include",{"0":{"429":1,"503":1,"719":1},"2":{"3":1,"11":2,"12":2,"15":1,"23":1,"41":1,"42":2,"43":1,"44":1,"45":1,"46":1,"55":2,"57":2,"64":2,"69":7,"70":5,"71":12,"73":1,"75":3,"84":1,"89":1,"93":1,"94":1,"95":2,"96":1,"108":8,"112":1,"113":2,"114":2,"115":1,"124":1,"128":1,"136":2,"137":2,"145":1,"155":2,"200":2,"201":1,"206":2,"207":2,"226":2,"227":1,"228":1,"229":2,"234":1,"252":2,"429":8,"437":1,"439":1,"440":1,"441":1,"442":1,"443":2,"444":1,"445":2,"448":1,"464":2,"475":1,"478":1,"501":1,"503":1,"504":1,"510":1,"543":1,"544":1,"545":1,"546":1,"547":2,"548":1,"549":2,"586":1,"605":1,"606":1,"607":1,"610":2,"626":1,"627":1,"628":1,"629":1,"630":1,"631":2,"632":2,"633":2,"635":2,"636":1,"637":1,"677":1,"714":1,"719":1,"722":4,"735":2,"745":2,"746":4,"747":3,"751":4,"776":2,"777":2,"778":2,"779":2,"780":2,"781":2,"782":2,"783":2,"784":2,"785":2,"788":5,"789":3,"790":2,"791":2,"792":2,"793":2,"797":2,"798":2,"799":3,"800":2,"804":5,"808":5,"810":1,"826":5,"827":1,"829":1,"830":1,"831":1,"839":7,"840":4,"842":1,"846":1,"851":1,"874":1}}],["input=",{"2":{"430":1}}],["input=hello",{"2":{"226":1}}],["inputs",{"2":{"228":7,"230":1,"826":1}}],["input",{"0":{"157":1,"207":1,"229":1,"833":1},"2":{"116":1,"148":1,"157":1,"200":5,"206":6,"207":1,"209":1,"214":1,"222":1,"224":1,"225":1,"226":7,"227":1,"430":2,"436":1,"437":1,"829":3,"833":5,"837":1}}],["inserted",{"2":{"797":1}}],["insert",{"0":{"746":1,"797":1},"2":{"739":1,"746":1,"797":1,"800":1}}],["insensitive",{"2":{"416":1,"431":1,"434":1}}],["inspection",{"2":{"144":1}}],["inspect",{"0":{"823":1},"2":{"137":2,"418":1,"443":1,"547":1,"837":1}}],["instrumentation",{"2":{"477":1}}],["instant",{"2":{"818":1}}],["instantiate",{"2":{"685":1}}],["instantaneous",{"2":{"517":1}}],["instance",{"2":{"120":1,"673":1}}],["installs",{"2":{"351":1,"645":1}}],["installation",{"2":{"239":1,"241":1,"249":1}}],["installing",{"2":{"239":1}}],["installed",{"2":{"176":1,"196":2,"352":1,"380":1,"394":1,"794":1,"852":1}}],["install",{"0":{"239":1,"240":1,"349":1},"1":{"240":1,"241":2,"242":2,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1},"2":{"167":1,"179":1,"180":1,"181":2,"182":1,"184":2,"185":1,"186":2,"191":1,"192":3,"193":1,"194":1,"195":5,"241":1,"242":1,"244":1,"245":1,"246":1,"343":1,"349":1,"350":1,"351":1,"354":6,"356":2,"762":1,"763":1,"766":2,"767":2,"788":1,"789":1}}],["instead",{"2":{"95":1,"139":1,"147":1,"198":1,"205":1,"231":1,"477":1,"510":1,"565":1}}],["inside",{"0":{"773":1},"2":{"14":1,"67":1,"72":1,"87":1,"92":1,"98":1,"106":1,"122":1,"131":1,"141":1,"206":1,"221":1,"225":1,"287":1,"363":1,"367":1,"391":1,"402":1,"426":1,"589":1,"590":1,"625":1,"658":1,"667":1,"687":1,"696":1,"802":1,"806":1,"832":1,"846":1}}],["introspection",{"0":{"462":1,"537":1}}],["into",{"2":{"148":1,"179":1,"314":1,"349":1,"351":2,"356":1,"357":1,"395":1,"497":1,"519":1,"539":1,"541":1,"551":1,"572":1,"582":1,"584":1,"605":1,"608":1,"692":1,"698":2,"746":1,"797":1,"800":1,"849":1}}],["int>",{"2":{"63":3,"108":1,"430":1,"432":1,"436":1,"799":1,"829":1,"835":2,"839":1}}],["integers",{"2":{"741":1,"801":1}}],["integer",{"2":{"432":1,"689":1,"756":1}}],["integrity",{"2":{"355":1,"367":1,"373":1,"724":1,"729":1}}],["integrate",{"2":{"476":1}}],["integrates",{"0":{"539":1},"2":{"309":1,"314":1,"395":1}}],["integrating",{"2":{"204":1}}],["integration",{"0":{"210":1,"502":1,"610":1,"620":1,"705":1},"1":{"503":1,"504":1},"2":{"198":1,"314":1,"541":1,"593":1,"736":2}}],["intensive",{"2":{"616":1,"884":1}}],["intent",{"2":{"437":1,"526":1}}],["intentional",{"2":{"134":1,"142":1}}],["intentionally",{"2":{"13":1,"427":1,"474":1,"477":1,"492":1,"523":1,"664":1,"741":1}}],["intended",{"2":{"234":1,"456":1,"529":1}}],["intercept",{"2":{"588":1}}],["interleaving",{"2":{"475":1,"489":1,"492":1}}],["interface",{"2":{"309":1,"335":1,"348":1,"514":1,"519":1,"530":1,"551":1,"552":1}}],["interactively",{"2":{"427":1}}],["interactive",{"0":{"283":1},"1":{"284":1,"285":1,"286":1},"2":{"282":2,"290":1}}],["internet",{"2":{"249":1,"600":1}}],["internally",{"0":{"380":1,"394":1},"2":{"271":1,"490":1,"532":1,"576":1,"591":1,"614":2}}],["internals",{"2":{"209":1,"880":1}}],["internal",{"0":{"115":1,"158":1,"655":1},"1":{"656":1,"657":1,"658":1,"659":1},"2":{"53":1,"115":2,"138":1,"158":2,"439":1,"453":1,"543":1,"551":1,"567":1,"595":1,"689":1}}],["intervalhandle",{"0":{"710":1,"712":1},"2":{"710":1,"712":1,"714":1,"716":1}}],["intervals",{"2":{"687":1}}],["interval",{"0":{"582":1,"707":1,"712":1},"1":{"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1},"2":{"215":1,"329":1,"330":1,"331":1,"582":1,"650":1,"698":1,"707":1,"708":1,"712":1,"714":2,"715":1,"716":1}}],["int64",{"2":{"42":1,"741":3,"746":2,"747":1,"756":1,"777":1,"799":5,"801":1}}],["int",{"0":{"7":1,"432":1},"2":{"7":1,"10":1,"11":3,"12":3,"23":1,"42":1,"43":3,"44":2,"46":1,"57":1,"63":1,"64":1,"69":5,"70":3,"71":2,"75":1,"89":1,"93":1,"94":1,"95":1,"96":1,"108":1,"112":1,"113":1,"114":1,"115":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"174":4,"177":2,"178":2,"200":1,"201":1,"206":1,"207":1,"226":1,"227":1,"228":1,"229":1,"234":2,"252":1,"254":2,"255":1,"430":2,"432":2,"437":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"462":1,"468":2,"470":2,"472":1,"478":1,"510":2,"519":1,"521":1,"531":1,"538":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"557":1,"560":1,"567":2,"586":1,"610":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"741":1,"745":1,"746":2,"747":1,"751":2,"777":1,"778":2,"779":2,"780":1,"781":1,"783":1,"784":1,"785":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"797":1,"798":1,"799":2,"800":1,"804":1,"808":1,"824":1,"829":1,"839":1,"840":1,"846":1,"851":1}}],["in",{"0":{"147":1,"424":1,"527":1,"714":1,"834":1,"839":1},"2":{"1":1,"2":1,"3":1,"4":1,"12":1,"14":1,"36":1,"38":1,"39":1,"40":1,"54":1,"66":1,"72":1,"86":1,"89":1,"106":1,"111":1,"119":1,"135":1,"140":1,"141":1,"142":1,"143":1,"153":1,"154":1,"156":1,"162":1,"163":2,"167":1,"173":1,"178":1,"180":1,"182":1,"187":1,"188":1,"195":1,"199":1,"204":1,"205":1,"209":1,"210":2,"212":2,"219":1,"220":1,"221":1,"223":1,"230":1,"231":1,"233":1,"241":1,"248":1,"251":1,"254":1,"256":1,"259":1,"274":1,"290":1,"306":1,"340":1,"348":1,"376":1,"379":2,"381":2,"411":1,"418":1,"429":1,"451":1,"461":1,"463":1,"470":1,"473":1,"477":1,"486":1,"487":1,"489":1,"492":3,"496":1,"498":1,"500":1,"501":1,"504":2,"507":1,"510":6,"511":2,"513":1,"519":1,"528":2,"560":1,"566":2,"567":1,"570":1,"576":1,"577":1,"588":1,"591":2,"592":1,"597":1,"598":2,"607":1,"608":1,"639":1,"652":1,"656":2,"664":1,"670":1,"677":1,"678":1,"689":1,"691":1,"696":1,"705":2,"706":1,"717":2,"735":2,"736":1,"741":1,"748":2,"758":1,"765":1,"772":1,"786":1,"792":1,"800":1,"801":1,"802":1,"805":2,"806":1,"809":2,"811":1,"815":1,"818":1,"833":2,"834":1,"838":2,"842":1,"863":1,"872":1}}],["if",{"2":{"0":1,"4":1,"12":1,"34":1,"35":2,"37":1,"42":1,"52":1,"66":1,"71":1,"89":2,"95":2,"108":5,"113":1,"114":1,"115":1,"130":1,"132":1,"133":1,"153":1,"155":1,"156":1,"157":1,"172":1,"173":1,"176":3,"181":1,"187":1,"196":2,"214":1,"217":2,"218":1,"219":1,"220":3,"226":1,"227":1,"228":1,"229":1,"246":1,"249":1,"264":1,"267":1,"268":1,"269":1,"273":1,"281":1,"290":1,"351":1,"352":2,"362":2,"368":3,"370":1,"390":1,"394":1,"416":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":3,"436":3,"455":2,"459":1,"466":2,"468":1,"470":1,"471":1,"475":1,"484":1,"486":1,"494":1,"501":2,"510":2,"516":1,"520":1,"534":1,"541":1,"556":1,"562":2,"563":1,"571":3,"572":2,"574":2,"575":1,"576":1,"579":1,"581":1,"582":1,"589":1,"592":1,"596":1,"605":1,"608":1,"609":1,"617":1,"618":1,"619":2,"631":1,"637":1,"645":1,"646":1,"647":1,"648":1,"651":1,"654":1,"656":1,"657":1,"664":1,"665":1,"666":1,"671":1,"676":1,"678":3,"679":2,"689":1,"691":1,"693":1,"695":1,"697":1,"698":1,"702":1,"712":2,"716":2,"717":2,"720":1,"722":1,"723":1,"727":1,"728":3,"731":1,"732":1,"733":1,"734":1,"736":2,"738":1,"742":1,"745":1,"746":1,"748":1,"751":2,"763":1,"765":1,"768":1,"773":1,"778":1,"785":1,"789":1,"790":1,"791":1,"792":2,"793":3,"794":1,"797":1,"799":1,"805":2,"809":2,"827":1,"830":1,"832":1,"833":1,"839":5,"840":1,"846":1,"852":1,"863":1}}],["iso",{"0":{"817":1}}],["isolation",{"2":{"616":1,"678":1,"684":1}}],["isolate",{"2":{"577":1}}],["isolates",{"2":{"540":1}}],["isolated",{"2":{"199":1}}],["issues",{"0":{"770":1},"1":{"771":1,"772":1,"773":1},"2":{"873":1}}],["isnull",{"2":{"756":1}}],["isvalid",{"2":{"754":1}}],["isidle",{"2":{"699":1}}],["isparam",{"2":{"615":1}}],["isdevmode",{"2":{"459":1}}],["is",{"0":{"476":1,"477":1,"506":1,"640":1,"876":1,"885":1},"2":{"0":1,"3":1,"13":2,"35":2,"36":1,"37":1,"42":1,"53":1,"66":2,"67":1,"71":1,"77":1,"79":1,"84":1,"86":1,"87":1,"91":1,"92":2,"98":1,"106":1,"111":2,"119":1,"121":4,"122":1,"123":2,"125":1,"126":1,"127":2,"128":1,"130":1,"131":1,"132":2,"133":1,"134":2,"135":1,"141":2,"142":1,"143":1,"144":2,"145":1,"153":1,"154":1,"162":5,"166":1,"172":1,"176":5,"187":2,"196":3,"205":1,"211":2,"212":2,"213":1,"217":1,"219":1,"224":2,"225":1,"227":1,"228":2,"231":1,"233":1,"234":1,"238":1,"241":1,"248":1,"251":1,"254":1,"256":2,"258":1,"265":1,"267":1,"268":1,"269":1,"270":1,"276":1,"278":1,"283":1,"290":3,"303":1,"306":1,"309":1,"312":1,"314":1,"335":2,"337":2,"348":1,"351":1,"362":1,"368":1,"370":1,"379":2,"380":3,"381":1,"390":1,"394":1,"395":1,"399":1,"404":1,"416":1,"417":1,"420":1,"426":1,"427":1,"432":1,"433":1,"434":1,"436":1,"438":1,"446":1,"447":1,"451":1,"455":1,"456":1,"458":1,"459":1,"460":2,"461":1,"462":1,"463":2,"464":1,"465":1,"466":1,"467":1,"468":2,"474":2,"475":4,"478":1,"483":3,"484":1,"486":4,"487":1,"490":2,"494":3,"498":1,"501":1,"506":1,"508":1,"510":6,"511":2,"512":1,"513":1,"514":1,"518":1,"519":1,"520":1,"523":3,"525":1,"526":2,"527":1,"529":1,"530":1,"532":1,"539":1,"542":1,"550":1,"552":1,"553":1,"554":1,"556":1,"557":2,"560":1,"562":1,"563":1,"564":1,"565":1,"569":1,"570":1,"571":3,"574":1,"575":2,"576":2,"577":1,"578":1,"581":1,"584":3,"588":1,"589":2,"590":2,"591":2,"592":2,"594":2,"596":1,"597":2,"599":1,"600":2,"604":1,"605":4,"607":1,"608":2,"609":1,"611":2,"612":1,"614":1,"615":1,"616":1,"617":3,"618":2,"619":1,"621":2,"624":1,"640":2,"645":1,"647":1,"648":1,"654":1,"656":1,"657":1,"658":1,"664":1,"667":2,"670":1,"671":2,"672":1,"673":1,"677":1,"678":4,"679":1,"682":1,"683":2,"685":1,"686":1,"689":1,"690":2,"691":2,"695":3,"697":2,"698":1,"700":1,"702":2,"705":1,"707":1,"710":1,"712":3,"716":2,"717":1,"718":1,"723":1,"727":1,"735":2,"736":2,"737":1,"738":1,"741":1,"742":1,"743":3,"748":1,"753":2,"755":1,"771":2,"778":1,"787":2,"793":1,"795":2,"796":2,"797":1,"802":1,"806":1,"824":1,"825":1,"826":1,"829":1,"831":1,"833":1,"835":1,"837":1,"838":1,"839":1,"840":1,"842":1,"844":2,"845":1,"850":1,"851":1,"867":1}}],["items",{"2":{"453":1}}],["iterating",{"2":{"277":1,"746":1}}],["iteration",{"2":{"262":1,"270":1,"295":1}}],["its",{"2":{"196":1,"256":1,"267":1,"736":1}}],["itself",{"2":{"150":1,"657":1,"698":1}}],["it",{"0":{"476":1,"496":1,"527":1,"539":1,"541":1,"869":1},"2":{"0":1,"14":1,"37":1,"72":1,"92":1,"95":1,"122":1,"123":1,"131":1,"142":1,"153":1,"162":1,"167":1,"172":1,"173":1,"181":1,"187":2,"198":1,"217":2,"219":1,"220":1,"224":1,"250":1,"273":2,"309":1,"335":1,"348":1,"367":1,"399":1,"418":1,"428":1,"436":1,"447":1,"455":2,"461":1,"464":1,"474":1,"487":2,"498":1,"504":1,"506":1,"507":1,"510":2,"519":1,"522":1,"523":1,"530":2,"540":2,"541":1,"551":1,"553":1,"556":1,"557":1,"558":2,"560":1,"562":2,"566":2,"569":1,"571":1,"574":1,"575":1,"576":4,"577":1,"581":1,"582":2,"588":1,"589":2,"590":2,"592":1,"597":1,"598":1,"599":1,"600":1,"603":1,"607":3,"608":1,"611":1,"612":1,"624":1,"639":2,"640":1,"645":2,"646":1,"648":2,"658":1,"664":1,"665":1,"666":1,"667":1,"672":1,"682":1,"685":2,"686":2,"691":1,"692":1,"697":2,"698":2,"700":1,"710":1,"712":2,"717":3,"718":1,"734":1,"735":1,"743":1,"748":2,"750":1,"757":1,"768":1,"787":1,"788":1,"789":1,"810":1,"824":1,"826":1}}],["aad",{"2":{"727":3,"728":4}}],["aarch64",{"2":{"266":1}}],["aes",{"2":{"725":1,"726":1,"727":1,"734":1}}],["aeadalg",{"2":{"727":2}}],["aead",{"0":{"724":1},"1":{"725":1,"726":1,"727":1,"728":1},"2":{"718":1,"724":1,"727":1,"728":1,"734":2}}],["aware",{"2":{"612":1,"624":2}}],["await",{"2":{"69":2,"70":1,"71":4,"253":1,"254":1,"255":1,"256":2,"257":2,"258":1}}],["abuse",{"2":{"675":1}}],["absolute",{"2":{"522":1}}],["abstract",{"2":{"105":1}}],["abstraction",{"2":{"2":1,"39":1,"143":1,"513":1,"705":1,"735":1}}],["about",{"2":{"500":1}}],["abrupt",{"2":{"498":1}}],["abnormal",{"2":{"497":1}}],["aggressive",{"2":{"492":1}}],["age=",{"2":{"798":1}}],["age=31536000",{"2":{"607":1}}],["age",{"2":{"423":2,"746":4,"747":1,"751":1,"779":1,"795":1,"797":1,"799":6,"800":1,"828":3,"829":2}}],["agent",{"2":{"27":1,"137":2,"175":2,"443":2,"510":2,"547":2,"633":2}}],["against",{"2":{"365":1,"592":1,"682":1}}],["aim",{"2":{"476":1}}],["ai",{"2":{"198":1,"868":1,"869":1}}],["affinity",{"0":{"702":1},"2":{"659":1,"687":1,"702":2}}],["affected",{"2":{"497":2,"798":1,"824":1}}],["affect",{"2":{"185":1}}],["after=network",{"2":{"763":1}}],["after",{"2":{"69":1,"133":1,"167":1,"241":1,"275":1,"303":1,"310":1,"329":2,"387":1,"399":1,"403":1,"409":1,"473":1,"475":1,"493":1,"512":1,"554":1,"695":1,"699":1,"700":2}}],["audits",{"2":{"868":1}}],["audit",{"0":{"864":1},"2":{"501":1,"864":1,"865":1}}],["auditing",{"2":{"162":1,"386":1}}],["audience",{"2":{"163":1}}],["authuser>",{"2":{"557":2}}],["authuser",{"2":{"557":2}}],["authoring",{"2":{"570":1}}],["authorization",{"2":{"27":1,"88":1,"89":4,"90":1,"154":1,"155":2,"156":1,"175":2,"444":2,"548":2,"589":1,"598":1,"633":3}}],["author",{"2":{"415":1}}],["authenticity",{"2":{"728":1,"729":1,"734":1}}],["authenticate",{"2":{"734":1}}],["authenticates",{"2":{"727":1}}],["authenticated",{"0":{"724":1},"1":{"725":1,"726":1,"727":1,"728":1},"2":{"591":1,"718":1,"727":1}}],["authentication",{"2":{"101":1,"154":1,"399":1,"598":1,"724":1}}],["authed",{"2":{"187":3,"793":3}}],["authinfo",{"2":{"187":1,"793":3}}],["authinfo>",{"2":{"187":3,"793":3}}],["auth",{"0":{"87":1,"101":1,"193":1},"1":{"88":1,"89":1,"90":1,"91":1},"2":{"87":1,"88":1,"89":6,"91":2,"97":1,"175":1,"184":1,"187":1,"444":1,"457":1,"548":1,"588":1}}],["autocommit",{"2":{"754":1}}],["auto|always|never>",{"2":{"297":1,"302":1}}],["automatic",{"2":{"162":1,"278":1,"395":1,"511":1,"579":1,"611":1,"687":1}}],["automatically",{"2":{"80":1,"95":1,"135":1,"154":1,"161":1,"172":1,"252":1,"273":1,"276":1,"446":1,"463":1,"510":1,"550":1,"562":1,"604":1,"617":1,"676":1,"680":1,"685":1,"797":1}}],["auto",{"0":{"34":1,"95":1,"172":1,"368":1,"455":1,"507":1,"562":1,"579":1,"609":1,"697":1},"2":{"29":1,"34":2,"46":1,"51":1,"52":1,"63":1,"64":1,"69":1,"70":2,"71":4,"75":3,"77":1,"78":1,"85":2,"95":2,"108":15,"123":1,"132":2,"134":1,"176":1,"187":1,"201":1,"207":1,"227":1,"228":1,"252":1,"256":1,"262":2,"264":2,"271":1,"277":1,"294":1,"304":1,"322":1,"329":3,"330":1,"360":2,"362":1,"367":1,"372":1,"434":1,"435":1,"436":2,"455":2,"469":1,"484":2,"510":4,"515":1,"557":1,"565":2,"585":1,"589":2,"605":1,"607":1,"610":2,"638":1,"661":2,"669":2,"693":1,"722":2,"723":1,"727":1,"732":1,"745":1,"746":5,"747":4,"751":1,"758":2,"767":1,"781":1,"783":1,"784":2,"785":1,"793":1,"797":3,"798":3,"799":3,"800":2,"804":1,"808":1,"827":2,"828":1,"829":1,"830":2,"831":1,"833":2,"835":1,"836":1,"839":15,"840":3}}],["avoiding",{"0":{"146":1},"1":{"147":1,"148":1,"149":1}}],["avoids",{"2":{"134":1,"428":1,"461":1,"470":1,"489":1,"492":1,"506":1,"597":1,"676":1}}],["avoid",{"0":{"147":1,"149":1,"158":1,"501":1},"2":{"117":1,"140":2,"141":1,"150":1,"151":1,"209":2,"230":1,"236":1,"473":1,"493":1,"572":1,"598":1,"703":1,"705":1,"850":1}}],["available",{"0":{"99":1,"871":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1},"2":{"1":1,"38":1,"40":1,"176":1,"390":1,"504":1,"766":2}}],["acquires",{"2":{"742":1}}],["acquire",{"2":{"742":1,"745":1,"747":1}}],["acquisition",{"2":{"486":1}}],["actual",{"2":{"654":1,"707":1}}],["activetasks",{"2":{"581":1,"691":1,"692":1,"697":1,"699":2}}],["active",{"2":{"77":1,"497":1,"517":1,"523":1,"535":1,"581":1,"650":1,"687":1,"698":1,"748":1,"779":1}}],["according",{"2":{"559":1,"847":1}}],["acceleration",{"2":{"208":1,"850":1}}],["accessors",{"2":{"464":1,"468":1,"553":1}}],["accessible",{"2":{"249":1}}],["accessed",{"2":{"10":1,"465":1}}],["access",{"0":{"10":1,"52":1,"445":1,"467":1,"549":1},"2":{"10":1,"13":1,"24":1,"63":1,"122":1,"156":1,"384":1,"464":1,"554":1,"589":1,"600":1,"864":1}}],["acceptor",{"0":{"656":1},"2":{"574":3,"640":1,"642":1,"646":1,"647":1,"651":1,"656":1,"666":1}}],["accepting",{"2":{"513":1,"640":1,"651":1}}],["accepted",{"2":{"432":1,"433":1,"516":1,"565":1,"658":1}}],["accepts",{"2":{"127":1,"454":1,"527":1,"571":1,"657":1}}],["accept",{"0":{"71":1,"647":1,"657":1},"2":{"5":1,"71":2,"175":2,"194":2,"256":2,"539":1,"574":2,"642":1,"646":1,"647":3,"657":2}}],["across",{"0":{"187":1,"793":1},"2":{"278":1,"328":1,"489":1,"508":1,"588":1,"683":1,"706":1}}],["advisory",{"2":{"865":1}}],["advances",{"2":{"740":1}}],["advanced",{"0":{"286":1},"2":{"454":1,"460":1,"477":1,"483":1,"512":1,"565":1,"786":1}}],["adult",{"2":{"828":1}}],["adjust",{"2":{"805":1,"809":1}}],["adheres",{"2":{"540":1}}],["adopted",{"2":{"484":1}}],["admin",{"2":{"156":1,"187":1,"195":2,"434":3,"435":1,"456":1,"792":3,"793":1,"834":1}}],["addr",{"2":{"766":1}}],["address",{"2":{"656":1}}],["address=true",{"2":{"656":1}}],["addressable",{"2":{"3":1}}],["added",{"2":{"605":1}}],["adds",{"2":{"376":1,"831":1}}],["adding",{"2":{"340":1,"376":1,"387":1,"400":1}}],["additional",{"2":{"133":1}}],["add",{"0":{"374":1},"1":{"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1},"2":{"70":2,"71":2,"167":1,"194":1,"255":2,"342":1,"374":1,"375":1,"376":1,"378":1,"381":1,"387":1,"392":1,"401":2,"404":1,"512":1,"604":2,"613":2,"751":1,"758":1,"766":1,"769":1,"788":1,"832":1,"847":1,"849":3}}],["adastra",{"2":{"385":1}}],["adapt",{"2":{"65":4,"180":1,"181":2,"186":1,"788":2,"789":2}}],["adapter",{"2":{"180":1,"551":2,"555":1,"564":1,"566":1,"788":1,"789":1}}],["adapters",{"0":{"65":1},"2":{"179":1,"552":1}}],["adapted",{"2":{"54":1,"65":4}}],["ada",{"2":{"52":1,"196":1,"557":1,"591":1,"629":1}}],["asks",{"2":{"571":1,"678":1}}],["asio",{"2":{"570":1,"572":1,"640":1,"642":1,"683":1}}],["assumptions",{"2":{"795":1}}],["assumes",{"2":{"757":1}}],["assume",{"2":{"735":1}}],["assets",{"2":{"570":1,"578":1,"600":1,"601":1,"606":1,"607":1}}],["asserts",{"2":{"567":1}}],["assert",{"2":{"69":1,"454":1}}],["associated",{"2":{"521":1}}],["assign",{"2":{"421":1}}],["asan",{"2":{"295":1,"300":1}}],["asynchronously",{"2":{"640":1,"680":1}}],["asynchronous",{"0":{"506":1,"675":1},"2":{"250":1,"640":1}}],["async",{"0":{"67":1,"71":1,"103":1,"250":1,"651":1,"881":1},"1":{"68":1,"69":1,"70":1,"71":1},"2":{"67":1,"68":1,"69":10,"70":11,"71":18,"103":1,"110":1,"134":1,"141":1,"250":1,"251":2,"252":6,"253":1,"255":1,"256":3,"258":1,"259":1,"277":1,"465":1,"468":2,"470":1,"511":1,"541":1,"572":1,"574":2,"642":1,"646":1,"647":2,"652":2,"657":1,"662":1,"666":1,"671":1,"675":1,"681":1,"685":1,"686":1,"861":1,"868":1,"880":1}}],["as",{"2":{"42":1,"105":1,"231":1,"237":1,"259":2,"274":2,"299":2,"453":1,"477":1,"501":1,"519":1,"534":1,"552":1,"553":1,"576":1,"577":1,"587":1,"590":1,"601":2,"605":1,"607":1,"614":2,"615":2,"616":1,"670":1,"734":1,"758":1,"777":3,"778":1,"780":1,"801":1,"825":1}}],["another",{"2":{"541":1,"705":1}}],["anti",{"0":{"495":1},"1":{"496":1,"497":1},"2":{"509":1}}],["analysis",{"2":{"477":1,"864":1}}],["analyze",{"2":{"139":1,"862":1}}],["announce",{"2":{"331":1}}],["an",{"2":{"117":1,"118":1,"162":1,"164":1,"205":1,"217":1,"218":1,"220":1,"237":1,"238":1,"252":1,"281":1,"287":1,"376":1,"428":1,"432":1,"434":1,"437":1,"447":1,"456":1,"459":1,"460":1,"463":1,"483":1,"492":1,"501":1,"513":2,"517":1,"520":1,"524":1,"526":1,"551":1,"552":1,"568":1,"571":1,"572":3,"574":2,"582":2,"587":1,"594":1,"596":1,"600":2,"640":1,"645":1,"647":1,"693":1,"700":1,"705":1,"707":1,"728":1,"793":1,"802":2,"806":2,"818":1}}],["any>>",{"2":{"799":2}}],["any",{"0":{"257":1},"2":{"42":1,"214":1,"257":1,"259":1,"557":1,"578":1,"581":1,"591":1,"795":1,"841":1,"881":1}}],["and",{"0":{"161":1,"163":1,"176":1,"187":1,"252":1,"257":1,"452":1,"460":1,"472":1,"479":1,"488":1,"491":1,"554":1,"578":1,"580":1,"583":1,"594":1,"600":1,"661":1,"663":1,"700":1,"716":1,"726":1,"736":1,"740":1,"741":1,"743":1,"745":1,"760":1,"768":1,"781":1,"792":1,"793":1},"1":{"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"480":1,"481":1,"489":1,"490":1,"492":1,"493":1,"579":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"664":1,"665":1,"666":1,"667":1,"761":1,"762":1},"2":{"4":1,"13":1,"14":1,"40":1,"53":3,"54":1,"66":1,"72":1,"80":1,"85":1,"86":1,"87":1,"98":1,"106":1,"108":1,"110":1,"119":1,"125":1,"126":1,"127":1,"130":2,"139":1,"145":1,"150":1,"162":1,"163":1,"167":1,"173":1,"179":1,"180":1,"185":1,"187":1,"195":1,"196":1,"198":1,"206":1,"209":1,"212":1,"213":1,"214":3,"215":1,"216":1,"217":1,"218":2,"220":1,"223":1,"224":1,"238":3,"250":1,"251":1,"253":1,"254":1,"259":1,"260":1,"270":1,"273":1,"274":1,"278":1,"291":1,"295":1,"299":1,"306":1,"310":1,"315":1,"317":1,"321":1,"325":1,"335":1,"337":1,"339":1,"340":1,"341":1,"343":1,"344":1,"345":1,"347":1,"348":1,"351":1,"352":1,"361":1,"373":1,"399":1,"402":1,"403":1,"404":1,"410":1,"427":1,"428":1,"432":1,"437":1,"447":1,"450":1,"451":1,"455":3,"456":1,"457":1,"460":1,"461":1,"463":2,"464":1,"466":1,"470":1,"473":1,"474":2,"481":1,"489":1,"492":3,"494":2,"497":1,"498":1,"506":2,"508":2,"511":1,"512":2,"513":1,"516":1,"519":1,"520":1,"523":1,"526":1,"527":1,"528":1,"530":1,"534":1,"537":1,"541":1,"551":3,"553":1,"555":1,"556":1,"559":1,"560":1,"562":1,"564":1,"565":2,"566":1,"570":4,"571":2,"572":2,"574":3,"575":3,"576":1,"578":1,"581":1,"582":2,"587":2,"590":1,"591":1,"597":1,"600":1,"603":1,"605":1,"606":3,"607":4,"609":2,"610":1,"611":1,"613":1,"617":1,"622":2,"625":1,"638":1,"639":3,"640":2,"642":1,"643":3,"645":1,"646":2,"648":1,"651":1,"652":1,"657":1,"664":1,"666":1,"667":1,"670":1,"675":1,"684":1,"686":1,"687":1,"691":1,"693":1,"695":2,"696":1,"697":3,"699":2,"700":2,"703":1,"706":1,"707":2,"710":3,"723":1,"724":1,"727":1,"729":1,"734":3,"735":2,"739":1,"740":1,"742":3,"743":3,"746":1,"748":1,"755":1,"756":2,"765":1,"766":1,"767":1,"771":1,"773":1,"775":2,"785":1,"786":1,"788":1,"792":1,"794":2,"796":1,"797":1,"801":1,"810":1,"824":1,"825":3,"831":1,"837":1,"838":1,"839":1,"842":1,"850":2,"860":1,"861":2,"862":1,"864":1,"867":1,"868":2,"869":2,"878":2,"880":4,"881":2,"882":1,"883":1}}],["arithmetic",{"0":{"820":1}}],["arming",{"2":{"657":1}}],["arms",{"2":{"657":1}}],["architectural",{"2":{"860":1}}],["architecture",{"0":{"202":1,"572":1,"673":1,"861":1,"883":1},"2":{"150":1,"162":1,"864":1,"865":1,"868":1,"870":1,"878":1,"880":1,"884":1}}],["archive",{"2":{"354":1,"359":1,"361":1,"363":1,"372":1}}],["arch>",{"2":{"353":1}}],["artifact",{"2":{"343":1,"348":1,"352":1,"357":1,"369":1}}],["artifacts",{"2":{"270":1}}],["artificial",{"2":{"150":1}}],["argument",{"2":{"298":1}}],["arguments",{"2":{"266":1,"298":1,"306":1,"311":1}}],["args>",{"2":{"515":1}}],["args",{"2":{"261":1,"272":1,"275":1,"298":2,"304":3,"312":1,"515":3,"694":3,"763":1}}],["around",{"2":{"213":1,"337":1,"475":1,"524":1,"588":1,"735":1,"737":1}}],["arrive",{"2":{"231":1}}],["arrives",{"2":{"121":1,"130":1,"596":1}}],["arr",{"2":{"43":3,"47":1,"778":7,"783":1}}],["array>",{"2":{"722":1}}],["arrays",{"0":{"422":1}}],["array",{"0":{"43":1,"47":1,"778":1,"783":1},"2":{"41":2,"42":1,"43":2,"44":1,"228":2,"629":1,"722":1,"723":1,"727":2,"776":2,"778":1,"780":2,"782":1}}],["are",{"2":{"14":1,"35":1,"72":1,"97":2,"105":2,"120":1,"125":1,"133":1,"139":1,"144":1,"145":1,"188":1,"211":1,"225":1,"238":1,"243":1,"249":1,"256":1,"258":1,"267":1,"380":1,"403":1,"416":1,"423":1,"426":2,"460":1,"463":1,"465":1,"466":1,"475":1,"477":1,"484":1,"492":1,"497":1,"511":1,"520":1,"521":1,"555":1,"562":1,"575":1,"576":2,"585":2,"593":1,"595":1,"601":1,"604":1,"607":2,"614":1,"625":1,"637":1,"664":1,"670":1,"679":1,"680":2,"683":1,"684":1,"694":1,"698":1,"699":2,"705":1,"740":2,"754":2,"838":1,"849":2,"859":1}}],["a",{"0":{"171":1,"184":1,"185":1,"195":1,"402":1,"714":1,"761":1,"813":1,"827":1},"1":{"828":1},"2":{"34":1,"35":1,"47":1,"48":1,"50":1,"77":1,"78":1,"79":1,"85":1,"87":1,"88":3,"91":2,"95":1,"100":1,"101":1,"102":1,"103":1,"104":1,"106":2,"116":1,"117":1,"121":1,"123":1,"128":1,"130":1,"132":3,"133":2,"140":1,"144":1,"145":1,"160":1,"161":1,"162":1,"166":1,"167":3,"172":2,"178":1,"180":2,"181":2,"184":1,"186":1,"187":6,"194":1,"195":1,"196":1,"198":1,"205":4,"206":2,"209":1,"211":2,"214":2,"219":4,"221":1,"222":1,"224":1,"227":1,"233":3,"234":1,"235":1,"243":1,"250":1,"252":1,"254":1,"257":3,"260":1,"268":1,"279":1,"281":1,"287":2,"291":1,"294":1,"295":1,"296":1,"309":1,"326":1,"328":1,"333":5,"334":1,"341":1,"342":1,"349":1,"351":1,"357":2,"359":2,"365":1,"367":1,"374":1,"376":2,"379":1,"380":1,"386":1,"387":1,"388":1,"390":3,"399":1,"402":2,"405":1,"407":1,"418":1,"424":1,"426":1,"428":2,"430":2,"432":2,"433":1,"434":2,"435":4,"436":3,"437":1,"451":1,"452":1,"453":1,"455":3,"456":1,"458":3,"460":1,"461":1,"464":1,"466":1,"467":3,"468":1,"474":2,"475":2,"476":1,"477":1,"483":1,"484":1,"486":2,"489":1,"490":1,"492":2,"493":1,"494":1,"497":3,"498":1,"500":1,"501":1,"507":1,"509":1,"510":1,"512":1,"513":2,"516":1,"519":3,"520":2,"521":1,"523":1,"525":1,"526":2,"527":1,"529":1,"530":2,"534":1,"535":1,"538":1,"551":3,"553":1,"555":2,"557":1,"559":1,"562":1,"563":1,"564":2,"565":2,"566":2,"567":1,"569":1,"571":3,"572":1,"574":2,"575":6,"576":4,"577":1,"579":1,"581":3,"582":3,"584":1,"585":1,"588":1,"589":1,"590":1,"592":1,"594":2,"597":1,"604":1,"605":2,"608":1,"611":1,"614":1,"615":1,"617":1,"637":1,"638":1,"640":4,"645":1,"647":1,"650":1,"656":1,"658":2,"659":1,"661":1,"662":1,"665":1,"667":2,"670":1,"671":1,"672":1,"676":1,"677":2,"682":2,"687":3,"689":1,"691":2,"692":1,"695":1,"696":2,"697":2,"698":1,"699":1,"702":3,"704":2,"705":1,"706":1,"707":4,"710":2,"712":2,"716":1,"717":1,"718":1,"720":1,"722":2,"723":1,"726":1,"728":1,"735":6,"736":1,"737":1,"738":2,"739":6,"740":1,"742":3,"743":3,"748":1,"750":1,"753":1,"754":2,"755":1,"757":3,"758":1,"763":1,"766":1,"768":2,"769":1,"782":1,"783":1,"784":1,"787":3,"788":1,"789":1,"790":1,"792":3,"793":10,"794":2,"795":1,"799":1,"800":1,"802":1,"804":1,"806":1,"808":1,"811":1,"821":1,"822":1,"823":1,"826":1,"829":3,"830":1,"838":3,"839":2,"840":1,"841":1,"842":1,"850":1,"851":2,"867":1}}],["alg",{"2":{"727":2,"728":1}}],["algorithm",{"2":{"725":1,"730":1}}],["algorithms",{"0":{"725":1,"730":1}}],["almost",{"2":{"487":1}}],["also",{"2":{"467":1,"470":1,"504":1,"577":1,"613":1,"714":1,"741":1,"743":1}}],["aligns",{"2":{"481":1}}],["alias",{"2":{"297":1}}],["alive",{"0":{"679":1},"2":{"234":1,"564":1,"571":1,"575":1,"587":1,"661":1,"672":1,"679":1,"680":1,"686":1}}],["alice",{"2":{"82":1,"107":1,"746":1,"779":1,"797":2,"798":1,"841":1}}],["already",{"2":{"172":1,"269":1,"352":1,"393":1,"520":1,"665":1,"717":1,"757":1}}],["allocation",{"2":{"428":1,"486":1,"612":1,"825":1}}],["allocations",{"0":{"147":1},"2":{"230":1}}],["allowed",{"0":{"834":1},"2":{"522":1,"532":1}}],["allowing",{"2":{"483":1,"513":1}}],["allow",{"2":{"194":1,"516":1,"706":1,"765":1,"785":1}}],["allows",{"2":{"63":1,"255":1,"330":1,"418":1,"458":1,"540":1,"590":1,"616":1,"678":1}}],["all",{"0":{"82":1,"183":1,"257":1},"2":{"5":1,"14":1,"59":1,"67":1,"72":1,"220":1,"244":1,"257":2,"259":1,"384":1,"403":1,"430":1,"476":1,"539":1,"620":1,"653":1,"658":1,"680":1,"697":1,"700":1,"735":1,"762":1,"787":1,"802":1,"806":1,"827":1,"830":1,"833":1,"836":2,"838":2,"846":1,"881":1}}],["always",{"2":{"4":1,"13":1,"117":2,"133":1,"152":1,"156":1,"160":1,"215":1,"218":1,"238":1,"259":1,"267":1,"468":1,"473":1,"484":1,"520":1,"587":1,"671":1,"723":1,"728":1,"734":1,"837":1}}],["atomic",{"0":{"488":1},"1":{"489":1,"490":1},"2":{"475":1,"489":1,"509":1,"691":1}}],["atoi",{"2":{"12":1}}],["attacks",{"2":{"676":1}}],["attached",{"2":{"108":1,"187":1,"456":1,"839":1}}],["attachedruntime",{"2":{"108":1,"839":1}}],["attach",{"2":{"84":2,"108":1,"163":1,"613":1,"787":1,"790":1,"839":1}}],["attempt",{"2":{"506":1,"700":1,"702":1}}],["attempts",{"2":{"216":1,"220":1,"617":1,"682":1}}],["at",{"2":{"4":2,"13":1,"160":1,"209":1,"210":1,"215":2,"454":1,"464":1,"473":2,"492":1,"497":1,"512":1,"569":1,"578":1,"616":1,"687":1,"690":1,"693":3,"742":2,"748":1}}],["apt",{"2":{"244":2,"762":2,"766":1,"767":1}}],["appear",{"2":{"697":1}}],["appears",{"2":{"608":1}}],["append",{"2":{"560":1}}],["approach",{"2":{"492":1}}],["appropriately",{"2":{"717":1}}],["appropriate",{"2":{"117":1,"587":1,"671":1}}],["applyall",{"2":{"751":1}}],["applying",{"2":{"672":1}}],["apply",{"2":{"319":1,"325":1,"407":1,"497":1}}],["applied",{"2":{"320":1,"321":1,"493":1}}],["applies",{"2":{"59":1,"60":1,"61":1,"558":1,"571":1}}],["application",{"0":{"285":1,"288":1,"677":1},"2":{"120":1,"196":2,"281":1,"284":1,"287":1,"290":1,"291":1,"426":1,"459":1,"541":1,"686":1,"786":1}}],["applications",{"2":{"116":1,"140":1,"250":1,"271":1,"339":1,"504":1,"599":1}}],["apps",{"2":{"110":1,"551":1,"568":1,"735":1}}],["app",{"0":{"15":1,"447":1,"539":1,"714":1,"773":1},"1":{"16":1,"17":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1},"2":{"1":1,"14":1,"15":1,"16":1,"23":4,"38":1,"57":5,"62":1,"64":5,"65":2,"69":2,"70":2,"85":1,"89":8,"92":2,"93":4,"94":4,"95":4,"96":4,"100":2,"108":5,"112":4,"113":4,"114":4,"115":4,"119":1,"120":2,"123":1,"124":4,"128":4,"136":4,"137":4,"145":4,"155":4,"166":4,"172":1,"178":7,"179":1,"180":2,"181":2,"183":1,"184":3,"185":2,"186":2,"189":1,"190":1,"191":3,"192":9,"193":3,"194":3,"195":13,"200":4,"201":4,"206":4,"207":4,"226":4,"227":4,"228":4,"229":4,"234":4,"252":2,"272":1,"275":1,"276":1,"281":1,"299":2,"439":6,"440":5,"441":4,"442":4,"443":4,"444":4,"445":4,"447":1,"448":4,"450":2,"451":3,"452":1,"453":4,"456":3,"457":3,"458":1,"459":1,"460":2,"463":1,"483":3,"492":1,"510":14,"513":1,"538":2,"539":1,"541":1,"543":6,"544":5,"545":4,"546":4,"547":4,"548":4,"549":4,"552":1,"561":1,"568":1,"584":1,"586":4,"609":1,"626":4,"627":4,"628":4,"629":4,"630":5,"631":4,"632":4,"633":4,"635":4,"636":4,"637":4,"759":2,"761":5,"762":5,"763":14,"764":1,"766":3,"768":12,"771":1,"772":1,"773":1,"774":2,"788":8,"789":8,"790":7,"791":7,"792":8,"793":6,"802":1,"804":8,"805":1,"806":1,"808":8,"809":1,"839":5,"845":1,"846":6,"847":3,"848":1,"851":5}}],["apis",{"2":{"403":1,"500":1,"623":1,"735":1,"869":1}}],["api",{"0":{"0":1,"3":1,"14":1,"37":1,"40":1,"54":1,"72":1,"193":1,"479":1,"515":1,"533":1,"644":1,"711":1},"1":{"1":1,"2":1,"38":1,"39":1,"480":1,"481":1,"534":1,"535":1,"536":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"712":1},"2":{"0":2,"2":2,"13":1,"37":2,"39":2,"53":2,"60":2,"72":1,"86":1,"91":1,"152":1,"178":3,"181":1,"184":4,"185":2,"186":1,"187":1,"191":1,"192":3,"193":2,"194":4,"195":4,"196":1,"221":1,"275":1,"277":1,"287":2,"288":2,"294":1,"296":1,"304":3,"347":2,"399":1,"456":2,"457":1,"458":1,"477":1,"478":2,"510":1,"512":1,"513":1,"520":1,"526":1,"551":1,"557":1,"560":1,"579":1,"587":1,"605":1,"606":1,"607":1,"609":1,"610":2,"737":1,"786":1,"787":1,"790":10,"791":4,"792":6,"793":4,"794":1,"802":2,"803":4,"804":2,"805":1,"806":2,"807":4,"808":2,"809":1,"825":1,"837":1}}],["amp",{"0":{"343":1,"712":1,"881":1,"882":1,"883":1},"2":{"0":1,"37":1,"430":2,"434":2,"435":2,"436":2,"437":2,"510":1,"565":10,"868":3}}],["rs",{"2":{"746":3,"747":3}}],["risk",{"2":{"864":1}}],["right",{"2":{"667":1}}],["rid",{"2":{"180":3,"788":2}}],["rfc",{"2":{"559":1}}],["rfc7231",{"2":{"558":1}}],["rarely",{"2":{"685":1}}],["raii",{"2":{"581":1,"582":1,"691":1,"710":2,"735":1,"742":1,"746":1,"796":1}}],["random",{"2":{"723":3,"727":2,"734":1}}],["randomness",{"0":{"723":1},"2":{"718":1}}],["range",{"2":{"472":1,"566":1}}],["ranges",{"2":{"379":1}}],["ran",{"2":{"416":1,"788":1}}],["rapid",{"2":{"277":1}}],["rawrequest",{"2":{"454":1,"565":2}}],["raw",{"0":{"445":1,"549":1,"635":1},"2":{"176":2,"266":1,"311":1,"446":1,"454":1,"550":1,"553":1,"554":2,"565":2,"636":1,"798":1,"826":1,"833":1}}],["rates",{"2":{"223":1}}],["rate",{"0":{"161":1,"191":1},"2":{"161":2,"184":2,"191":1,"212":1,"224":1,"497":2,"588":1,"591":1,"598":1}}],["ratio",{"2":{"9":2}}],["rule",{"0":{"152":1,"230":1,"446":1,"486":1,"550":1,"638":1},"2":{"199":1,"254":1,"483":1,"582":1,"835":1}}],["rules",{"0":{"117":1,"133":1,"368":1,"379":1,"393":1,"621":1},"2":{"218":1,"236":1,"571":1,"728":1,"734":1,"826":2,"829":1,"835":1}}],["runall",{"2":{"751":1}}],["runner",{"2":{"751":6}}],["running",{"2":{"71":1,"256":1,"271":1,"276":1,"335":1,"539":1,"640":1,"700":1,"795":1,"872":1}}],["runs",{"0":{"182":1,"183":1,"184":1,"185":1},"1":{"183":1,"184":1,"185":1},"2":{"128":1,"167":1,"205":1,"252":1,"254":1,"258":1,"273":1,"294":1,"355":1,"571":1,"574":1,"596":1,"689":2,"707":2,"739":2,"787":1,"790":1,"794":1,"850":1}}],["run",{"0":{"17":1,"68":1,"291":1,"450":1,"646":1,"661":1,"803":1,"807":1,"852":1},"1":{"292":1},"2":{"17":1,"23":1,"57":1,"64":1,"68":1,"69":2,"70":1,"71":1,"89":1,"92":1,"93":2,"94":1,"95":1,"96":1,"98":1,"100":1,"109":1,"112":1,"113":1,"114":1,"115":1,"120":1,"124":1,"128":1,"136":1,"137":1,"145":1,"155":1,"160":1,"164":3,"166":1,"178":3,"195":1,"200":1,"201":1,"206":1,"207":1,"225":1,"226":1,"227":1,"228":1,"229":1,"234":1,"248":2,"252":2,"257":1,"264":2,"271":1,"275":2,"288":1,"291":1,"292":1,"294":3,"295":2,"296":2,"297":2,"303":2,"304":6,"306":2,"307":1,"310":3,"311":1,"313":3,"326":1,"329":1,"333":2,"339":1,"341":1,"367":1,"389":1,"392":2,"395":1,"407":1,"426":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"447":1,"448":1,"450":1,"460":1,"510":5,"513":1,"517":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"574":1,"579":2,"586":1,"596":1,"609":1,"610":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"639":1,"646":2,"649":1,"651":1,"658":1,"659":1,"661":1,"664":1,"698":1,"705":1,"712":1,"750":1,"751":1,"758":1,"763":1,"768":1,"788":1,"789":1,"790":1,"791":2,"792":1,"793":1,"795":2,"801":1,"803":1,"804":1,"805":1,"807":1,"808":1,"809":1,"846":1,"848":1,"851":1,"852":1}}],["runtime",{"0":{"120":1,"298":1},"2":{"0":1,"2":1,"8":1,"37":1,"39":1,"69":1,"85":1,"119":1,"120":1,"125":1,"127":1,"133":1,"144":1,"145":1,"160":1,"205":1,"211":1,"229":1,"250":1,"259":2,"275":1,"285":1,"298":2,"304":1,"306":1,"310":1,"313":1,"336":1,"337":1,"348":1,"403":1,"419":1,"427":1,"460":1,"470":1,"474":1,"477":1,"483":1,"507":1,"509":1,"510":1,"511":1,"520":1,"522":1,"528":1,"540":1,"541":1,"570":1,"590":1,"597":1,"616":2,"620":1,"624":1,"686":1,"804":4,"808":4,"849":1,"867":1,"883":1}}],["rows",{"2":{"796":1,"798":1}}],["row",{"2":{"740":3,"746":4,"747":3,"756":1,"799":6}}],["rolls",{"2":{"748":2,"797":1}}],["rollback",{"0":{"320":1},"2":{"316":1,"317":1,"320":2,"325":2,"344":1,"738":1,"748":1}}],["roles",{"2":{"434":2,"435":1}}],["role>",{"2":{"434":2}}],["role",{"0":{"673":1},"2":{"89":1,"187":3,"434":4,"435":1,"574":1,"575":1,"576":1,"581":1,"582":1,"792":2,"793":6,"834":2}}],["root",{"2":{"259":1,"323":1,"352":1,"614":1,"745":1,"746":1,"747":1,"751":1,"780":2,"797":1,"798":1,"799":1,"800":1}}],["rooms",{"2":{"102":1,"842":1}}],["room1",{"2":{"83":1}}],["room",{"0":{"83":1},"2":{"83":1,"86":1,"106":1,"107":2,"108":5,"838":3,"839":5,"841":1,"842":2}}],["rotating",{"2":{"140":1}}],["routedoc",{"0":{"603":1},"2":{"603":1,"605":1,"608":1,"612":1,"613":1,"620":1}}],["routeoptions",{"2":{"577":1,"608":1,"613":1}}],["router>",{"2":{"649":1}}],["router",{"0":{"576":1,"611":1},"1":{"577":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1},"2":{"447":1,"453":1,"527":1,"551":2,"552":1,"570":1,"571":1,"577":1,"578":1,"600":1,"603":2,"604":2,"605":4,"606":1,"608":1,"611":1,"612":1,"614":1,"615":1,"617":1,"618":1,"622":1,"623":1,"624":1,"639":1,"640":2,"643":2,"645":2,"649":2,"658":2,"665":2,"670":2,"672":1,"673":1,"678":2,"684":1}}],["routes",{"0":{"163":1,"166":1,"168":1,"178":1,"183":1,"184":1,"577":1,"606":1,"608":1,"616":1,"670":1,"678":1},"1":{"164":1,"165":1,"166":1,"167":1,"168":1,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":2,"177":2,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1},"2":{"59":1,"60":1,"80":1,"85":1,"87":1,"101":1,"120":1,"163":3,"164":2,"166":1,"178":2,"195":5,"225":1,"447":1,"453":1,"457":1,"510":3,"512":1,"570":1,"572":1,"575":2,"579":1,"585":2,"587":1,"601":1,"604":3,"610":1,"612":1,"616":1,"620":2,"623":1,"625":1,"649":1,"670":1,"672":1,"684":1,"705":1,"717":1,"787":1,"802":1,"806":1,"839":1,"846":1,"849":2,"851":1,"859":1}}],["route",{"0":{"130":1,"169":1,"185":1,"555":1,"613":1,"614":1,"854":1},"1":{"855":1,"856":1,"857":1,"858":1},"2":{"34":1,"88":2,"89":2,"92":1,"100":2,"108":1,"121":1,"127":1,"128":1,"130":1,"144":1,"151":2,"166":1,"167":1,"196":2,"210":1,"225":1,"453":1,"463":2,"494":1,"522":1,"539":1,"553":1,"555":2,"564":2,"565":1,"566":1,"570":1,"571":3,"576":2,"577":2,"584":1,"603":2,"605":1,"608":1,"611":2,"613":2,"617":1,"618":1,"619":2,"620":1,"661":1,"665":1,"678":2,"683":1,"686":1,"705":1,"717":1,"769":1,"787":1,"839":1}}],["routing",{"0":{"18":1,"225":1,"453":1,"625":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"226":1,"227":1,"228":1,"229":1,"230":1,"454":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1},"2":{"0":1,"1":1,"14":1,"37":1,"38":1,"97":1,"119":1,"163":1,"199":1,"230":1,"238":1,"481":2,"541":1,"611":1,"612":1,"622":1,"658":1,"677":1,"868":1}}],["r",{"2":{"50":1,"311":1,"430":6,"431":4,"432":4,"433":4,"434":4,"435":4,"610":2,"661":2,"720":3,"722":2,"723":2,"763":1,"784":1,"830":3,"831":1,"833":3}}],["review",{"2":{"864":2,"865":1,"873":2}}],["reverse",{"0":{"766":1},"2":{"160":1,"161":1,"593":2}}],["reusable",{"2":{"826":1}}],["reuses",{"2":{"742":1}}],["reuse",{"2":{"151":1,"209":1,"576":1,"656":1,"728":1,"734":1}}],["renewal",{"2":{"767":1}}],["regex",{"2":{"612":1,"615":1,"622":1}}],["registry",{"0":{"331":1,"342":1,"377":1,"396":1,"403":1,"414":1,"604":1},"1":{"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1},"2":{"328":1,"331":2,"342":2,"348":1,"374":1,"376":3,"377":1,"380":1,"381":2,"388":1,"390":4,"391":2,"393":1,"394":2,"395":1,"396":1,"397":1,"398":2,"399":1,"400":2,"401":4,"402":3,"404":1,"409":1,"411":1,"413":3,"414":1,"416":2,"417":1,"604":5}}],["registration",{"0":{"613":1},"2":{"66":1,"178":1,"457":1}}],["registerform>",{"2":{"831":3,"833":1}}],["registerform",{"2":{"831":4}}],["registerroutes",{"2":{"804":1,"808":1}}],["registers",{"2":{"606":1}}],["registered",{"2":{"120":1,"576":1,"578":1,"601":1,"608":1,"620":1,"643":1}}],["register",{"0":{"606":1},"2":{"85":2,"178":2,"195":5,"331":1,"453":1,"510":2,"604":1,"606":3,"609":1,"610":4,"620":1,"649":1}}],["registering",{"0":{"58":1},"1":{"59":1,"60":1,"61":1},"2":{"590":1}}],["redesign",{"2":{"863":1}}],["redirect",{"2":{"560":1,"601":1}}],["redirects",{"2":{"558":1}}],["redirection",{"2":{"481":1}}],["reduce",{"2":{"141":1,"492":1,"712":1}}],["remains",{"2":{"492":1}}],["remain",{"2":{"461":1,"539":1,"575":1,"599":1}}],["removal",{"2":{"409":2}}],["removing",{"2":{"387":1,"407":1}}],["removebyid",{"2":{"799":1}}],["removes",{"2":{"407":1}}],["remove",{"0":{"405":1},"1":{"406":1,"407":1,"408":1,"409":1,"410":1},"2":{"342":1,"404":1,"405":1,"406":2,"407":1,"408":4,"410":2}}],["remote",{"2":{"205":1,"220":1,"331":1,"390":1,"403":1,"884":1}}],["re",{"2":{"310":1,"657":2,"863":1}}],["rebuild",{"2":{"277":1,"278":1}}],["rebuilds",{"2":{"273":1,"299":1}}],["rejects",{"2":{"520":1,"534":1,"563":1}}],["rejection",{"0":{"520":1},"2":{"677":1}}],["rejected",{"2":{"516":1,"520":1,"664":1}}],["reject",{"2":{"222":1,"230":1}}],["reporting",{"2":{"500":1,"640":1,"646":1,"833":1}}],["reports",{"2":{"269":1}}],["repo",{"2":{"402":1,"799":5}}],["repository",{"0":{"799":1},"2":{"391":1,"399":1,"799":1,"882":1}}],["replicate",{"2":{"477":1}}],["replace",{"2":{"476":1,"669":1}}],["replay",{"2":{"217":1}}],["repl",{"0":{"418":1,"419":1,"427":1},"1":{"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1},"2":{"339":1,"418":1,"423":1,"424":1,"426":2,"427":1}}],["repeating",{"2":{"470":1,"582":1,"707":1}}],["repeatable",{"2":{"298":2}}],["repeatedly",{"2":{"219":1}}],["represent",{"2":{"829":1}}],["represented",{"2":{"576":1,"743":1}}],["represents",{"2":{"42":1,"122":1,"672":1,"811":1,"815":1,"818":1,"821":1}}],["reproducible",{"2":{"270":1,"348":1,"356":1,"364":1,"373":1,"379":1,"399":1,"403":1,"410":1}}],["rethrow",{"2":{"696":1}}],["rethrowing",{"2":{"693":1}}],["retention",{"2":{"501":1}}],["retrieve",{"2":{"620":1}}],["retrieving",{"2":{"590":1}}],["retries",{"0":{"216":1},"2":{"213":1,"216":1,"217":1}}],["retryable",{"2":{"221":1}}],["retry",{"2":{"216":3,"217":3,"223":2,"224":1,"825":1}}],["returntype",{"2":{"696":1}}],["returnable",{"2":{"565":1}}],["returning",{"0":{"94":1},"2":{"172":1,"510":2,"565":1,"585":1,"739":1}}],["returned",{"2":{"35":1,"132":1,"172":1,"468":1,"607":1,"637":1}}],["returns",{"2":{"25":1,"29":1,"34":1,"196":1,"206":1,"214":1,"217":1,"221":1,"257":2,"428":1,"451":1,"455":1,"462":1,"471":1,"472":1,"516":2,"517":1,"519":1,"520":1,"534":1,"535":1,"556":1,"566":2,"567":1,"582":1,"618":1,"645":1,"646":1,"649":1,"654":2,"678":1,"696":1,"699":1,"712":1,"738":2,"739":1,"740":1,"742":1,"754":2,"769":1}}],["return",{"0":{"34":1,"95":1,"170":1,"172":1,"696":1,"792":1},"1":{"171":1,"172":1},"2":{"11":1,"12":1,"34":1,"35":1,"42":1,"43":1,"44":1,"46":1,"69":3,"70":2,"71":3,"75":1,"89":3,"93":1,"94":1,"95":3,"96":1,"108":6,"113":1,"114":1,"115":1,"117":1,"123":1,"132":3,"155":1,"156":1,"157":1,"167":1,"172":3,"173":1,"178":2,"180":1,"181":2,"186":1,"187":1,"195":1,"210":1,"220":1,"226":1,"227":1,"228":1,"229":1,"234":1,"252":1,"254":1,"430":2,"431":1,"432":2,"433":1,"434":1,"435":3,"455":3,"510":5,"519":1,"565":2,"586":1,"589":1,"610":1,"627":1,"631":1,"637":1,"638":1,"651":1,"705":1,"712":1,"720":2,"745":2,"746":2,"747":1,"751":3,"777":1,"778":1,"779":1,"780":1,"781":1,"783":1,"784":1,"785":1,"788":2,"789":2,"790":2,"791":2,"792":3,"793":3,"797":2,"798":2,"799":5,"800":2,"829":1,"830":1,"831":1,"839":6,"840":2,"846":1,"855":1}}],["relative",{"2":{"494":2,"607":1}}],["related",{"0":{"404":1},"2":{"159":1}}],["reload",{"2":{"271":1,"274":2,"275":1,"299":1,"763":1,"766":2}}],["reloading",{"2":{"209":1}}],["relevant",{"2":{"268":1}}],["release",{"2":{"263":3,"264":1,"266":4,"312":2,"364":1,"566":1,"742":1,"756":1}}],["releases",{"2":{"249":1,"742":1}}],["reliable",{"2":{"221":1,"757":1}}],["reliability",{"0":{"212":1,"213":1,"218":1,"498":1},"1":{"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1},"2":{"212":1,"222":1,"224":1,"868":1,"883":1}}],["reached",{"2":{"756":1}}],["reach",{"2":{"588":1}}],["reasoning",{"2":{"232":1}}],["reason",{"2":{"223":1,"235":1,"486":1}}],["reasons",{"2":{"212":1}}],["reasonable",{"2":{"149":1,"704":1}}],["real",{"0":{"195":1},"2":{"91":1,"110":1,"116":1,"140":1,"152":2,"178":1,"202":1,"209":1,"212":1,"512":1,"526":1,"735":1,"766":1,"773":1,"838":1,"850":1}}],["readwritepaths",{"2":{"772":1}}],["readwritepaths=",{"2":{"763":1}}],["readability",{"2":{"484":1,"489":1}}],["readable",{"2":{"195":1,"475":1,"567":1,"594":2}}],["reading",{"0":{"443":1,"547":1,"675":1},"2":{"473":1,"510":2,"672":1}}],["reads",{"2":{"384":1,"571":2,"575":1,"643":1,"650":1,"773":1}}],["readers",{"2":{"218":1}}],["ready",{"2":{"98":1,"254":1,"270":1,"451":1,"462":2,"624":1,"826":1,"861":1,"870":1}}],["read",{"0":{"71":1,"482":1},"1":{"483":1,"484":1},"2":{"13":1,"71":2,"122":1,"131":3,"167":1,"173":1,"174":1,"175":1,"180":1,"187":1,"394":1,"418":1,"475":1,"483":1,"509":1,"523":1,"574":1,"589":1,"603":1,"675":1,"681":1,"714":1,"720":2,"740":1,"787":1,"839":1}}],["receive",{"2":{"839":1}}],["received",{"2":{"70":1,"71":1,"79":1,"201":1,"510":1,"617":1}}],["recurring",{"2":{"650":1}}],["record",{"2":{"603":1}}],["recommendations",{"0":{"587":1}}],["recommended",{"0":{"56":1,"178":1,"180":1,"235":1,"259":1,"499":1,"734":1,"766":1,"788":1,"825":1,"837":1},"1":{"57":1,"500":1,"501":1},"2":{"54":1,"179":1,"202":1,"215":1,"216":1,"218":1,"221":1,"236":1,"243":1,"278":1,"352":1,"355":1,"430":1,"565":1,"577":1,"787":1}}],["reconfiguration",{"2":{"475":1}}],["reconfigure",{"2":{"264":1}}],["req",{"2":{"27":1,"28":1,"29":1,"64":2,"89":4,"108":4,"113":2,"114":2,"122":2,"130":2,"137":2,"155":2,"156":2,"157":2,"173":6,"174":5,"175":6,"176":5,"177":2,"180":3,"181":3,"187":4,"200":2,"201":2,"206":2,"207":2,"226":2,"227":2,"228":2,"229":2,"234":2,"443":3,"444":2,"445":2,"456":3,"510":10,"547":3,"548":2,"549":2,"552":1,"557":2,"575":1,"584":1,"589":3,"631":2,"632":4,"633":4,"635":2,"636":2,"669":1,"670":1,"789":2,"790":2,"791":2,"792":4,"793":7,"839":4,"846":5,"856":2,"857":2}}],["requiring",{"2":{"529":1,"623":1}}],["requirements",{"0":{"391":1},"2":{"402":1,"850":1}}],["required",{"2":{"246":1,"320":1,"322":1,"329":2,"352":1,"360":1,"362":1,"379":1,"381":1,"413":1,"437":1,"494":1,"723":1,"792":1,"827":1,"830":2,"831":2,"834":1,"835":2,"847":2,"850":1}}],["require",{"2":{"89":2,"181":3,"203":1,"352":1,"354":2,"355":1,"356":1,"369":2,"370":1,"372":3,"373":1,"477":1,"789":1}}],["requires",{"2":{"13":1,"376":1,"381":1,"386":1,"541":1,"734":1,"790":1}}],["requested",{"2":{"647":1,"651":1,"657":1}}],["requestbody",{"2":{"603":1}}],["requesthandler",{"0":{"564":1},"1":{"565":1,"566":1},"2":{"551":1,"552":1,"555":1,"564":1,"661":1}}],["requests",{"0":{"665":1},"2":{"210":1,"213":1,"216":1,"219":1,"222":1,"452":1,"527":1,"575":2,"588":1,"640":1,"651":1,"672":1,"679":1,"682":1}}],["requeststate",{"0":{"187":1,"557":1,"793":1},"2":{"167":1,"187":1,"551":1,"553":1,"557":1,"564":1,"568":1,"591":1}}],["requestid>",{"2":{"180":2}}],["requestid",{"2":{"180":1}}],["request",{"0":{"24":1,"63":1,"122":1,"137":1,"176":1,"214":1,"443":1,"547":1,"553":1,"571":1,"591":1,"634":1,"675":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"554":1,"555":1,"556":1,"572":1,"635":1,"636":1},"2":{"0":1,"1":1,"14":1,"23":1,"24":1,"34":1,"35":1,"37":1,"38":1,"54":1,"57":1,"63":1,"64":3,"66":1,"89":3,"93":1,"94":1,"95":1,"96":1,"103":1,"112":2,"113":1,"114":1,"115":1,"119":1,"121":1,"122":2,"124":1,"126":1,"127":1,"128":2,"130":3,"131":1,"132":2,"134":1,"135":1,"136":3,"137":1,"138":1,"144":2,"145":1,"151":1,"155":1,"156":1,"157":1,"159":1,"166":1,"167":3,"169":1,"171":1,"172":3,"173":2,"174":1,"175":2,"176":2,"177":1,"178":1,"179":1,"180":5,"181":2,"183":1,"187":3,"196":2,"198":1,"200":1,"201":1,"202":1,"206":1,"207":1,"209":1,"213":1,"214":1,"215":1,"216":2,"221":1,"222":1,"223":2,"226":1,"227":1,"228":2,"229":1,"230":1,"233":1,"234":1,"236":1,"394":1,"413":1,"439":3,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"447":1,"448":1,"453":2,"454":1,"455":1,"456":2,"460":1,"461":1,"465":1,"468":1,"473":1,"510":10,"513":1,"527":1,"528":1,"543":3,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"551":3,"552":2,"553":3,"556":1,"557":1,"561":2,"564":1,"565":4,"567":1,"570":1,"571":4,"575":3,"580":1,"584":1,"586":1,"589":4,"591":1,"595":1,"596":1,"598":2,"599":2,"603":1,"616":1,"617":1,"620":1,"626":1,"627":1,"628":1,"629":1,"630":2,"631":1,"632":1,"633":1,"635":1,"636":1,"637":1,"640":1,"642":1,"645":1,"658":1,"662":1,"675":1,"676":1,"677":1,"678":1,"679":2,"787":1,"788":4,"789":3,"790":3,"791":3,"792":4,"793":3,"804":2,"808":2,"846":3,"851":2,"855":1,"856":1,"857":1,"858":1,"877":1}}],["research",{"2":{"869":1}}],["resetpassword",{"2":{"832":1}}],["resets",{"2":{"675":1}}],["reset",{"2":{"216":1,"426":1}}],["respect",{"2":{"680":1}}],["respects",{"2":{"534":1}}],["responsibilities",{"0":{"674":1},"1":{"675":1,"676":1,"677":1}}],["responsible",{"2":{"513":1,"539":1,"640":1,"672":1}}],["responsive",{"2":{"539":1,"572":1,"705":1}}],["responsewrapper",{"0":{"560":1},"1":{"561":1,"562":1,"563":1},"2":{"551":1,"560":1,"561":2,"565":5,"568":1,"589":1}}],["responses",{"2":{"53":1,"87":1,"97":1,"101":1,"117":1,"204":1,"212":1,"230":1,"551":1,"558":4,"575":2,"587":1,"589":1,"595":1,"603":2,"605":1,"620":1,"672":1,"680":2,"786":1}}],["response",{"0":{"30":1,"112":1,"123":1,"132":1,"558":1,"628":1,"680":1},"1":{"31":1,"32":1,"33":1,"34":1,"559":1},"2":{"0":1,"1":1,"14":1,"23":1,"30":1,"34":3,"37":1,"38":1,"54":1,"57":1,"64":3,"89":3,"92":2,"93":1,"94":1,"95":2,"96":1,"100":1,"112":1,"113":1,"114":1,"115":1,"117":1,"119":1,"121":1,"122":1,"123":1,"124":1,"127":1,"128":2,"130":1,"131":1,"132":5,"133":2,"134":1,"136":1,"137":1,"138":1,"144":1,"145":1,"148":1,"151":1,"155":1,"156":1,"157":1,"159":1,"166":1,"167":1,"169":1,"171":2,"172":4,"173":2,"174":1,"175":2,"176":2,"177":1,"178":1,"179":1,"181":2,"187":1,"196":1,"198":1,"200":1,"201":1,"202":1,"206":1,"207":1,"223":1,"226":1,"227":1,"228":1,"229":1,"231":1,"233":1,"234":1,"439":3,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"448":1,"453":2,"454":2,"455":2,"456":2,"510":11,"543":3,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"551":1,"552":1,"558":3,"560":1,"565":1,"566":1,"570":1,"571":2,"584":1,"586":1,"605":1,"617":1,"619":1,"626":1,"627":1,"628":1,"629":1,"630":2,"631":1,"632":1,"633":1,"635":1,"636":1,"637":2,"642":1,"669":1,"673":1,"686":1,"705":1,"788":2,"789":3,"790":3,"791":3,"792":4,"793":2,"794":1,"804":2,"808":2,"846":3,"851":2,"855":1,"856":1,"857":1,"858":1,"875":3}}],["respond",{"2":{"221":1}}],["rest",{"2":{"259":1,"623":1}}],["restart=always",{"2":{"763":1}}],["restartsec=2",{"2":{"763":1}}],["restarts",{"2":{"273":1,"299":1}}],["restart",{"2":{"248":1,"758":1}}],["resolved",{"2":{"376":1,"379":1,"380":1,"384":1}}],["resolves",{"2":{"309":1,"527":1}}],["resolution",{"2":{"249":1,"348":1,"353":1,"355":1,"370":1,"379":1,"403":1}}],["resources",{"2":{"151":1,"222":1}}],["resultrow",{"0":{"740":1},"2":{"740":1,"799":1}}],["resultset",{"0":{"740":1},"2":{"739":1,"740":2}}],["results",{"2":{"187":1,"257":1,"416":2,"591":1,"740":1,"746":1}}],["result",{"0":{"430":1,"594":1,"720":1},"2":{"69":1,"201":1,"207":3,"227":1,"254":2,"515":1,"556":1,"588":1,"594":3,"597":1,"720":1,"827":1,"828":1,"829":1,"834":1,"835":1,"836":1}}],["resumes",{"2":{"253":1,"254":1}}],["resume",{"2":{"69":1}}],["res",{"0":{"170":1,"171":1},"1":{"171":1,"172":1},"2":{"23":2,"31":1,"35":2,"57":2,"64":4,"89":7,"93":2,"94":2,"95":1,"96":2,"108":8,"112":2,"113":3,"114":3,"115":3,"122":1,"123":3,"124":2,"128":3,"130":2,"132":4,"136":2,"137":2,"138":2,"145":2,"147":1,"151":2,"155":3,"156":3,"157":3,"159":5,"166":2,"169":2,"171":2,"172":3,"173":5,"174":2,"175":4,"176":4,"177":2,"178":2,"180":2,"181":3,"187":3,"200":2,"201":2,"206":2,"207":2,"226":3,"227":3,"228":3,"229":3,"234":13,"439":6,"440":4,"441":2,"442":2,"443":2,"444":2,"445":2,"446":4,"448":2,"453":4,"455":2,"456":1,"510":20,"543":6,"544":4,"545":2,"546":2,"547":2,"548":2,"549":2,"550":4,"552":1,"558":1,"561":4,"575":1,"584":1,"586":2,"589":2,"626":2,"628":2,"629":2,"630":4,"631":3,"632":2,"633":2,"635":2,"636":2,"637":2,"638":1,"669":1,"788":3,"789":4,"790":6,"791":6,"792":6,"793":5,"804":4,"808":4,"827":3,"828":1,"829":1,"834":1,"835":1,"836":3,"837":1,"839":8,"846":7,"851":4,"856":2,"857":2,"858":2}}],["refresh",{"2":{"582":1,"717":1}}],["reflects",{"2":{"386":1}}],["reflect",{"2":{"152":1}}],["reflection",{"2":{"2":1,"39":1,"125":1,"144":1,"597":1}}],["references",{"2":{"384":1,"645":1}}],["reference",{"0":{"0":1,"37":1},"1":{"1":1,"2":1,"38":1,"39":1},"2":{"393":1,"716":1,"740":1}}],["pc",{"2":{"798":2}}],["ps",{"2":{"798":3}}],["pseudo",{"2":{"661":1}}],["ps1",{"2":{"242":1}}],["pthread",{"2":{"659":1,"702":1}}],["ptr",{"2":{"71":1,"532":1,"538":1,"590":1,"613":2,"645":1,"649":1,"710":1,"716":1}}],["php",{"2":{"496":1,"863":1}}],["philosophy",{"0":{"2":1,"36":1,"39":1,"105":1,"118":1,"134":1,"142":1,"153":1,"199":1,"211":1,"337":1,"597":1,"612":1,"859":1,"870":1},"2":{"259":1}}],["pwd",{"2":{"424":1}}],["p",{"2":{"352":1,"369":1,"763":1}}],["pkg>",{"2":{"342":2,"404":2,"406":2}}],["pkg",{"2":{"244":1,"245":1,"762":1}}],["p99",{"2":{"223":1}}],["p95",{"2":{"223":1}}],["p50",{"2":{"223":1}}],["place",{"2":{"800":1}}],["placed",{"2":{"14":1,"72":1}}],["plaintext",{"2":{"728":1}}],["plain",{"0":{"441":1,"545":1,"627":1,"855":1},"2":{"510":1,"558":1}}],["platforms",{"2":{"702":1,"869":1}}],["platform",{"0":{"701":1},"1":{"702":1,"703":1},"2":{"208":1,"239":1,"559":1}}],["pluggable",{"2":{"458":1}}],["plug",{"2":{"205":1}}],["plus",{"2":{"186":1}}],["python3",{"2":{"767":1}}],["python",{"0":{"511":1,"583":1,"585":1},"2":{"163":1,"195":1,"496":1,"510":1,"511":1,"569":1,"572":1,"863":1}}],["pipe",{"2":{"826":1,"829":1}}],["pipes",{"2":{"487":1,"492":1}}],["piped",{"2":{"484":1}}],["pipeline",{"2":{"179":1,"589":2,"591":1,"592":2,"597":1,"705":1}}],["pipelines",{"2":{"144":1,"456":1,"474":1,"476":1,"501":1,"508":1}}],["pin",{"2":{"395":1,"403":1,"702":1}}],["pinned",{"2":{"384":1,"399":1}}],["pinning",{"2":{"348":1}}],["pins",{"2":{"376":1,"659":1}}],["ping",{"0":{"104":1,"745":1,"802":1,"806":1},"1":{"803":1,"804":1,"805":1,"807":1,"808":1,"809":1},"2":{"61":1,"104":1,"151":1,"166":1,"178":1,"181":1,"455":1,"561":1,"738":1,"745":1,"753":1,"754":1,"789":3,"790":3,"791":3,"803":2,"804":1,"807":2,"808":1}}],["picks",{"2":{"574":1}}],["pick",{"2":{"208":1}}],["pitfalls",{"0":{"146":1},"1":{"147":1,"148":1,"149":1}}],["penalties",{"2":{"493":1}}],["pendingtasks",{"2":{"581":1}}],["pending",{"2":{"319":1,"321":1,"517":1,"523":1,"535":1,"650":1,"687":1,"699":1}}],["peers",{"2":{"330":1,"331":1,"333":1,"803":1,"804":1,"807":1,"808":1}}],["peer",{"2":{"104":2,"328":2,"329":1,"883":1}}],["permission",{"0":{"772":1}}],["persisting",{"2":{"755":1}}],["persistence",{"2":{"456":1,"474":1}}],["periodicworkers",{"2":{"692":1}}],["periodictask",{"2":{"581":1,"698":1}}],["periodically",{"2":{"574":1,"640":1}}],["periodic",{"0":{"698":1},"2":{"570":1,"581":1,"582":1,"646":1,"687":1,"692":1,"693":1,"698":2,"700":1,"706":2,"717":1}}],["period",{"0":{"712":1},"2":{"219":1,"582":1,"710":1,"712":3}}],["perfect",{"2":{"187":1}}],["performs",{"2":{"395":1,"487":1,"677":1,"829":1}}],["perform",{"2":{"148":1,"541":1}}],["performance",{"0":{"141":1,"143":1,"146":1,"203":1,"485":1,"684":1,"862":1},"1":{"144":1,"145":1,"146":1,"147":2,"148":2,"149":2,"150":1,"151":1,"152":1,"153":1,"486":1,"487":1},"2":{"125":1,"143":2,"153":1,"198":1,"204":1,"475":1,"477":1,"486":1,"487":1,"493":1,"497":1,"507":2,"510":1,"511":1,"587":1,"593":1,"611":1,"623":1,"824":1,"850":1,"860":2,"862":1,"863":1,"865":1,"867":1,"868":1,"869":1,"870":1,"873":1,"880":1,"882":1,"885":1}}],["per",{"2":{"35":1,"63":1,"209":1,"215":1,"216":1,"222":2,"230":1,"236":2,"256":1,"463":1,"473":1,"493":1,"497":1,"551":1,"557":1,"570":1,"574":1,"575":1,"640":1,"686":1,"726":1,"748":1}}],["p2phttpoptions",{"2":{"804":1,"808":1}}],["p2phttp",{"2":{"804":1,"808":1}}],["p2pruntime",{"2":{"802":1,"804":1,"806":1,"808":1}}],["p2p",{"0":{"104":1,"326":1,"802":1,"806":1,"883":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"803":1,"804":1,"805":1,"807":1,"808":1,"809":1},"2":{"104":1,"326":1,"327":1,"328":1,"331":1,"333":6,"334":3,"341":2,"780":1,"802":4,"803":4,"804":10,"805":1,"806":4,"807":4,"808":10,"809":1,"861":1,"868":1}}],["pure",{"2":{"403":1}}],["purpose",{"2":{"67":1,"84":1,"529":1,"802":1,"806":1}}],["purposes",{"2":{"40":1,"510":1}}],["pull",{"2":{"394":1}}],["pub",{"2":{"354":1,"372":2}}],["pubkey=",{"2":{"372":1}}],["pubkey",{"2":{"352":1,"354":1,"355":2,"369":1,"370":2,"372":1}}],["published",{"2":{"395":1}}],["publishes",{"2":{"390":1}}],["publishing",{"0":{"402":1},"2":{"391":1,"402":1}}],["publish",{"0":{"388":1},"1":{"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1},"2":{"342":1,"388":1,"389":1,"390":1,"392":5,"393":1,"395":2,"402":2,"404":1}}],["public",{"0":{"644":1},"1":{"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1},"2":{"0":1,"37":1,"88":1,"89":2,"90":1,"195":2,"352":1,"355":1,"369":1,"370":1,"372":1,"458":2,"530":1,"552":1,"714":1,"729":1,"731":1,"733":2,"737":1,"751":2,"759":1,"790":1,"804":3,"808":3}}],["pushing",{"2":{"584":1}}],["pushes",{"2":{"390":1}}],["push",{"2":{"43":5,"232":1,"392":1,"393":1,"394":1,"402":1,"778":3,"780":2}}],["putting",{"2":{"598":1}}],["put",{"0":{"21":1},"2":{"21":1,"178":1,"453":1,"575":1,"758":1,"765":1}}],["potentially",{"2":{"707":1}}],["pop",{"2":{"692":1}}],["points",{"2":{"593":1}}],["pointer",{"2":{"524":1}}],["point",{"2":{"306":1,"436":1,"437":1,"447":1,"467":1,"788":1}}],["powerful",{"2":{"512":1}}],["power",{"2":{"498":1}}],["powershellget",{"2":{"242":1}}],["powershellirm",{"2":{"242":1}}],["powershell",{"0":{"242":1}}],["powered",{"0":{"782":1},"1":{"783":1,"784":1,"785":1},"2":{"45":1,"775":1}}],["policies",{"2":{"540":1}}],["policy",{"0":{"481":1,"493":1,"497":1},"2":{"159":1,"224":1,"493":1,"498":1,"526":1,"648":1}}],["poll",{"2":{"108":2,"839":3}}],["polling",{"0":{"84":1,"839":1},"2":{"72":1,"84":1,"106":1,"108":4,"110":1,"838":2,"839":6,"842":1}}],["positional",{"2":{"739":1,"797":1}}],["position",{"2":{"430":1,"437":1}}],["position=",{"2":{"430":1}}],["possible",{"2":{"147":1,"151":1,"218":1,"362":1,"490":1,"528":1,"844":1}}],["posted",{"2":{"678":1,"698":1,"712":1,"717":1}}],["posts",{"2":{"173":1,"516":1,"534":1,"555":1,"571":1,"582":2,"698":1,"707":1,"710":1}}],["post",{"0":{"20":1,"516":1,"534":1},"2":{"20":1,"57":1,"62":3,"69":1,"70":1,"71":1,"108":1,"176":2,"196":1,"234":1,"252":2,"453":3,"457":1,"510":2,"513":2,"515":1,"519":1,"520":1,"525":1,"526":1,"534":1,"575":1,"592":1,"613":1,"621":1,"712":1,"839":1}}],["pong",{"2":{"104":1,"151":1,"455":1,"561":1,"789":1,"790":1,"791":1}}],["pooledconn",{"2":{"742":1,"798":1}}],["poolconfig",{"2":{"742":1,"797":1}}],["pools",{"2":{"572":1,"585":1,"796":1,"881":1}}],["pooling",{"2":{"529":1,"882":1}}],["pool",{"0":{"69":1,"254":1,"742":1,"797":1},"2":{"69":4,"74":1,"103":1,"251":1,"254":3,"259":1,"532":1,"534":2,"536":1,"539":1,"570":1,"581":3,"584":1,"640":1,"687":1,"691":1,"692":3,"693":1,"694":1,"695":1,"697":1,"698":2,"702":1,"704":1,"705":2,"707":1,"717":1,"735":1,"742":1,"743":2,"745":1,"746":3,"747":1,"751":4,"756":1,"797":3,"798":3,"799":3,"800":3,"840":1}}],["ports",{"2":{"473":1,"664":1}}],["port>",{"2":{"327":1,"329":2,"330":1}}],["port",{"0":{"450":1,"451":1,"654":1,"664":1,"765":1},"2":{"7":2,"10":2,"11":3,"12":5,"17":1,"275":1,"329":1,"330":1,"462":4,"464":1,"465":2,"468":2,"469":1,"470":2,"472":1,"574":4,"640":1,"654":3,"656":4,"664":2,"756":1,"763":2,"765":1,"768":1,"801":1,"804":1,"805":2,"808":1,"809":2}}],["paste",{"2":{"763":1}}],["passes",{"2":{"658":1}}],["passed",{"2":{"589":1}}],["passing",{"2":{"565":1}}],["passwords",{"2":{"832":1}}],["password",{"0":{"471":1},"2":{"323":1,"464":1,"465":1,"471":3,"473":1,"743":1,"745":1,"746":1,"747":1,"751":1,"756":1,"801":1,"830":4,"831":4,"832":2,"833":1}}],["pass>",{"2":{"323":1}}],["passthrough",{"0":{"311":1}}],["pass",{"2":{"266":1,"275":1,"311":1,"323":1,"324":1,"471":1,"473":1,"557":1,"622":1,"728":1,"754":1,"766":1,"793":1}}],["pair",{"2":{"565":1,"799":2,"833":2}}],["packs",{"2":{"353":1}}],["packages",{"2":{"356":1,"400":1,"411":1}}],["packaged",{"2":{"351":1,"519":1,"696":1}}],["package",{"0":{"402":1},"2":{"347":1,"349":1,"351":1,"352":1,"354":1,"357":1,"359":1,"360":2,"365":1,"367":2,"369":1,"372":1,"373":1,"388":1,"396":1,"407":2,"408":1,"415":1,"417":1}}],["packaging",{"0":{"343":1},"2":{"335":1,"337":1,"348":1}}],["pack",{"0":{"357":1},"1":{"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1},"2":{"343":1,"347":1,"354":1,"356":1,"358":1,"359":1,"361":3,"362":2,"364":2,"372":2,"373":1}}],["payloads",{"2":{"53":1,"682":1}}],["payload",{"0":{"172":1},"2":{"24":1,"75":2,"79":2,"80":1,"83":1,"106":1,"107":2,"108":4,"110":1,"123":1,"229":1,"232":1,"235":2,"237":1,"351":1,"363":1,"370":1,"564":1,"565":4,"603":1,"638":1,"838":2,"839":5,"840":2,"841":1,"842":1,"859":1}}],["part",{"2":{"381":1,"417":1,"551":1,"554":2,"621":1}}],["partial",{"2":{"117":1,"212":1,"213":1,"217":1,"489":1}}],["parallel",{"2":{"257":1,"264":1,"266":1,"274":1,"297":1}}],["paramname",{"2":{"615":1}}],["parammap",{"2":{"555":1,"565":2}}],["params",{"0":{"555":1},"2":{"122":2,"551":1,"553":2,"555":1,"564":1,"565":1,"570":1,"798":1,"799":1}}],["param",{"2":{"25":1,"113":1,"130":1,"173":4,"177":1,"226":2,"510":1,"631":1,"798":2,"846":1,"856":1}}],["parameter",{"0":{"25":1,"26":1,"747":1,"856":1,"857":1},"2":{"614":1,"621":1,"624":1,"739":1}}],["parameters",{"0":{"173":1,"174":1,"532":1,"615":1,"631":1,"632":1},"2":{"24":2,"74":1,"131":1,"173":1,"510":2,"576":1,"611":1,"739":1,"756":1,"798":2}}],["parsing",{"0":{"192":1,"554":1},"2":{"53":1,"176":1,"186":1,"196":1,"218":1,"540":1,"553":2,"570":1,"640":1,"686":1,"786":1,"849":1}}],["parser",{"2":{"571":1,"575":1}}],["parsers",{"2":{"185":1}}],["parse",{"0":{"436":1,"813":1,"817":1},"2":{"50":1,"131":1,"139":1,"148":1,"429":1,"431":1,"432":1,"433":1,"436":4,"437":1,"472":1,"675":1,"782":1,"813":1,"817":1,"829":1,"842":1}}],["parsed",{"0":{"829":1},"2":{"29":1,"176":1,"186":1,"187":1,"468":1,"470":1,"554":1,"826":1,"829":1,"833":1,"837":1}}],["parses",{"2":{"4":1,"80":1,"527":1,"556":1,"571":1,"679":1}}],["patch",{"2":{"453":1,"575":1}}],["patterns",{"0":{"499":1},"1":{"500":1,"501":1},"2":{"152":1,"161":1,"163":2,"250":1,"481":1,"553":1,"568":1,"571":1,"677":1,"682":1,"718":1,"810":1,"862":1,"864":1,"882":1,"883":1}}],["pattern",{"0":{"12":1,"115":1,"139":1,"156":1,"178":1,"202":1,"228":1,"256":1,"831":1},"2":{"87":1,"91":1,"256":1,"430":1,"471":1,"555":1,"557":1,"564":1,"566":1,"594":1,"662":1,"704":1,"720":1}}],["path>",{"2":{"264":2,"297":1,"298":1,"322":2,"323":3,"352":2,"360":2,"369":2}}],["paths",{"0":{"147":1},"2":{"140":1,"230":1,"465":1,"469":1,"470":1,"486":1,"487":1,"528":1,"607":1,"706":1,"805":1,"809":1}}],["path",{"0":{"10":1,"25":1,"52":1,"61":1,"173":1,"469":1,"554":1,"615":1,"631":1,"791":1,"856":1},"2":{"3":1,"5":1,"19":1,"20":1,"21":1,"22":1,"24":1,"52":1,"61":1,"89":1,"122":1,"130":1,"137":1,"166":1,"167":1,"173":1,"181":1,"241":1,"248":1,"308":1,"313":1,"323":1,"350":1,"352":1,"354":4,"356":1,"366":1,"368":1,"369":1,"372":2,"398":2,"401":2,"456":2,"458":1,"463":2,"464":1,"510":1,"551":1,"553":2,"554":1,"560":1,"563":3,"564":1,"566":1,"570":2,"571":1,"576":3,"584":1,"604":2,"605":1,"611":2,"619":1,"643":1,"684":2,"705":1,"743":1,"751":1,"754":1,"785":1,"787":2,"791":1,"840":1}}],["pager",{"2":{"763":1,"768":1,"771":1}}],["pagestr",{"2":{"510":2}}],["page=2",{"2":{"164":1,"510":1,"632":2}}],["page",{"2":{"1":1,"2":1,"3":1,"14":1,"26":1,"38":1,"39":1,"40":1,"54":1,"72":1,"174":4,"212":1,"231":1,"238":1,"239":1,"510":2,"566":1,"569":1,"601":1,"607":1,"632":4,"795":1,"846":4}}],["pr",{"2":{"390":1,"402":1}}],["practices",{"0":{"473":1},"2":{"141":1}}],["practice",{"2":{"133":1,"158":2,"210":1,"570":1}}],["practical",{"0":{"195":1,"224":1,"487":1,"528":1,"568":1,"587":1,"717":1},"2":{"98":1}}],["professional",{"2":{"872":1}}],["profile",{"2":{"52":2,"423":1,"613":1,"629":1,"785":1}}],["proxies",{"2":{"842":1}}],["proxy",{"0":{"766":1},"2":{"160":1,"161":1,"766":6}}],["prod",{"2":{"781":1}}],["produces",{"2":{"231":1}}],["production",{"0":{"140":1,"209":1,"671":1,"873":1},"2":{"4":1,"12":1,"91":1,"105":1,"118":1,"141":1,"150":1,"156":1,"160":1,"210":1,"223":1,"335":1,"456":1,"474":2,"476":1,"477":1,"494":1,"501":1,"507":1,"508":1,"509":1,"512":1,"529":1,"837":1,"850":1,"868":1,"870":1,"872":1}}],["propagate",{"2":{"696":1}}],["properties",{"2":{"592":1}}],["properly",{"2":{"156":1,"160":2,"679":1}}],["proper",{"2":{"140":1,"150":1,"203":1,"587":1,"681":1}}],["proof",{"0":{"495":1},"1":{"496":1,"497":1},"2":{"475":1}}],["prompted",{"2":{"290":1}}],["prompts",{"2":{"282":2}}],["prompt",{"2":{"281":1,"283":1}}],["process",{"0":{"839":1},"2":{"838":1}}],["processing",{"2":{"269":1,"581":1}}],["processes",{"2":{"233":1}}],["progress",{"2":{"264":1}}],["progressively",{"2":{"231":1}}],["programs",{"2":{"878":1}}],["program",{"2":{"252":1}}],["project>",{"2":{"359":1,"360":1}}],["project",{"0":{"294":1,"339":1,"340":1,"843":1,"844":1},"1":{"845":1,"846":1,"847":1,"848":1,"849":1},"2":{"246":1,"260":1,"264":1,"269":1,"273":1,"275":1,"278":1,"279":1,"281":1,"288":1,"289":1,"290":1,"294":1,"296":1,"297":1,"306":1,"307":1,"313":1,"323":2,"337":1,"348":1,"351":1,"357":1,"360":2,"364":1,"367":1,"376":1,"382":1,"386":1,"405":1,"844":1,"847":1,"849":1}}],["projects",{"0":{"195":1},"2":{"243":2,"273":1,"287":1,"335":1,"861":1}}],["probe",{"2":{"219":1}}],["provide",{"2":{"372":1,"476":1,"526":1,"590":1,"685":1,"740":1,"873":1}}],["provided",{"2":{"283":1,"368":1,"460":1,"471":1,"532":1,"555":1}}],["provider",{"0":{"206":1,"207":1,"208":1},"2":{"205":2,"206":3,"207":1,"208":1,"209":1,"210":2,"212":1,"213":1,"214":1,"215":1,"218":1,"219":1,"220":2,"221":2,"223":2,"225":1,"237":1}}],["providers",{"0":{"205":1,"220":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1,"211":1},"2":{"205":1,"211":1,"220":1,"238":1}}],["provides",{"0":{"570":1},"2":{"24":1,"40":1,"198":1,"250":1,"309":1,"387":1,"428":1,"464":1,"509":1,"524":1,"529":1,"538":1,"551":1,"558":1,"560":1,"588":1,"593":1,"599":1,"642":2,"686":1,"687":1,"718":1,"724":1,"741":1,"755":1,"775":1,"810":1,"826":1,"836":1,"839":1}}],["proto",{"2":{"766":1}}],["prototyping",{"2":{"277":1}}],["protocols",{"2":{"85":1}}],["protocol",{"0":{"80":1,"107":1},"2":{"72":1,"102":1,"110":1,"838":1}}],["protecthome=true",{"2":{"763":1}}],["protective",{"2":{"677":1}}],["protecting",{"2":{"222":1,"507":1}}],["protection",{"0":{"161":1,"495":1,"676":1},"1":{"496":1,"497":1},"2":{"563":1,"754":1}}],["protectsystem=strict",{"2":{"763":1}}],["protects",{"2":{"219":1,"675":1,"678":1,"682":1}}],["protect",{"2":{"89":2,"229":1,"456":2,"685":1,"791":3}}],["protected",{"2":{"87":1,"88":1,"89":1,"90":2,"101":1,"681":1,"791":1}}],["pretty",{"2":{"755":1}}],["pretty>",{"2":{"302":1}}],["prepared",{"0":{"747":1},"2":{"738":1,"739":1,"746":1,"796":1}}],["prepare",{"2":{"738":1,"746":3,"751":2,"797":1,"798":1,"800":1}}],["prepares",{"2":{"364":1,"564":1}}],["prevents",{"2":{"527":1,"676":1,"678":1}}],["preventing",{"2":{"489":1}}],["previous",{"2":{"322":1}}],["prerequisites",{"0":{"243":1},"1":{"244":1,"245":1,"246":1},"2":{"239":1}}],["pred",{"2":{"206":1,"226":1,"228":2}}],["predictability",{"2":{"511":1}}],["predictable",{"2":{"13":1,"118":1,"119":1,"125":1,"134":1,"143":1,"153":1,"162":1,"198":1,"212":1,"221":1,"238":1,"335":1,"427":1,"510":1,"541":1,"593":1,"597":1,"671":1,"794":1,"801":1,"859":1,"863":1,"870":1}}],["predictions",{"2":{"228":1}}],["prediction",{"2":{"200":2,"206":3,"226":1}}],["predict",{"2":{"200":1,"206":1,"226":2}}],["preserved",{"2":{"617":1}}],["preserves",{"2":{"497":1,"507":1}}],["preserve",{"2":{"484":1,"494":2}}],["present",{"2":{"351":1}}],["presence",{"2":{"175":1,"331":1}}],["preset",{"0":{"312":1},"2":{"263":1,"264":1,"266":2,"267":1,"297":4,"304":3,"309":1,"312":4,"364":1}}],["presets",{"0":{"188":1,"263":1},"1":{"189":1,"190":1,"191":1,"192":1,"193":1,"194":1},"2":{"260":1,"262":1}}],["pressure",{"2":{"150":1}}],["precomputed",{"2":{"147":1}}],["precision",{"2":{"0":1,"37":1}}],["preferred",{"2":{"150":1}}],["prefer",{"2":{"91":1,"139":1,"147":1,"149":1,"220":1,"259":1,"437":2,"487":1,"568":1,"706":1,"748":1,"756":1}}],["prefixes",{"2":{"794":1}}],["prefix",{"0":{"60":1,"184":2,"790":1},"2":{"167":1,"194":1,"196":1,"456":1,"457":1,"787":1,"790":1,"794":1,"804":1,"808":1}}],["pre",{"2":{"57":1,"62":3,"592":1,"742":1}}],["privatetmp=true",{"2":{"763":1}}],["private",{"2":{"714":1,"731":1,"732":1,"734":1,"847":1,"874":1,"884":1}}],["privileged",{"2":{"664":1}}],["primitive",{"2":{"718":1}}],["primitives",{"2":{"0":1,"14":1,"37":1,"718":1,"810":1}}],["primary",{"2":{"486":1,"746":1,"751":1}}],["priorities",{"2":{"704":2,"706":1}}],["priority",{"0":{"874":1},"2":{"516":1,"521":1,"522":1,"532":1,"534":1,"538":1,"541":1,"581":2,"621":1,"687":4,"689":5,"690":5,"692":1,"693":3,"694":3,"698":2,"717":1,"840":1}}],["prior",{"2":{"381":1}}],["prints",{"2":{"497":1}}],["printer",{"2":{"430":1}}],["print",{"2":{"329":1,"352":1,"398":1,"401":1,"418":1,"424":1,"430":2,"431":1,"432":1,"433":1,"434":1,"435":3,"436":3}}],["principles",{"0":{"125":1},"2":{"2":1,"39":1,"213":1}}],["occurs",{"2":{"596":1,"698":1}}],["occurred",{"2":{"138":1}}],["owner",{"0":{"714":1}}],["ownership",{"2":{"590":1}}],["owned",{"2":{"526":1}}],["owns",{"2":{"447":1,"532":1,"574":1,"575":1,"673":1,"710":1,"742":1,"743":1,"772":1}}],["own",{"2":{"256":1,"267":1,"512":1,"541":1,"667":1}}],["observability",{"0":{"223":1},"2":{"213":1,"474":1,"501":1,"864":1,"883":1}}],["obj",{"2":{"44":2,"52":1,"108":2,"629":1,"781":2,"785":1,"832":3,"839":2}}],["objects",{"0":{"423":1},"2":{"149":1,"418":1,"423":1,"465":1,"469":1}}],["object",{"0":{"46":1,"122":1,"123":1,"779":1,"783":1},"2":{"34":1,"41":1,"42":1,"44":2,"74":1,"119":2,"176":1,"227":2,"228":1,"510":1,"585":1,"589":1,"592":1,"605":1,"720":1,"775":1,"776":1,"780":1,"782":2,"830":1}}],["ostringstream",{"2":{"486":1}}],["os>",{"2":{"353":1}}],["os",{"2":{"150":1,"574":1}}],["opt",{"0":{"516":1,"534":1,"712":1},"2":{"340":1,"515":2,"534":1,"712":1,"759":1,"761":2,"762":2,"763":7,"768":4,"772":1,"804":9,"808":9}}],["optimization",{"0":{"862":1},"2":{"868":1,"882":1}}],["optimized",{"2":{"269":1,"271":1}}],["option",{"0":{"761":1,"762":1},"2":{"656":1}}],["options",{"0":{"264":1,"274":1,"281":1,"297":1,"298":1,"323":1,"329":1,"346":1,"352":1,"360":1,"369":1,"618":1,"875":1,"884":1},"2":{"159":2,"261":1,"272":1,"280":1,"292":1,"308":1,"314":1,"316":4,"322":1,"327":1,"350":1,"358":1,"366":1,"453":1,"463":2,"516":1,"534":1,"607":1,"613":1,"618":1,"622":1}}],["optionally",{"2":{"359":2,"565":1,"704":1}}],["optional",{"0":{"362":1,"767":1,"835":1},"2":{"106":1,"108":2,"211":1,"262":1,"285":1,"326":1,"328":2,"363":3,"367":2,"369":1,"464":1,"493":1,"570":2,"571":1,"575":1,"592":1,"594":1,"611":1,"714":1,"727":1,"735":1,"751":1,"755":1,"758":2,"759":3,"763":1,"835":1,"838":2,"850":1}}],["op",{"2":{"262":1,"702":1}}],["opentelemetry",{"2":{"476":1}}],["opening",{"2":{"402":1}}],["opens",{"2":{"390":1}}],["openssl",{"2":{"245":1}}],["openapi",{"0":{"301":1,"578":1,"600":1,"604":1,"605":1,"620":1},"1":{"579":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1},"2":{"510":1,"512":1,"570":1,"578":1,"600":1,"601":2,"603":3,"604":1,"605":6,"606":5,"607":4,"608":1,"609":2,"610":4,"611":1,"612":1,"620":1,"623":1}}],["openvino",{"2":{"205":1}}],["open",{"0":{"77":1,"728":1,"765":1},"2":{"71":1,"75":1,"77":1,"219":2,"334":1,"394":1,"510":1,"646":1,"651":1,"656":1,"679":1,"728":5,"803":1,"807":1,"838":1,"840":1}}],["operationid",{"2":{"605":1}}],["operation",{"2":{"147":1,"407":1,"605":1,"647":1}}],["operations",{"2":{"53":1,"66":1,"151":1,"317":1,"344":1,"581":1,"594":1,"720":1,"738":1,"739":1}}],["operator",{"2":{"43":1}}],["outlives",{"2":{"716":1}}],["outside",{"2":{"127":1,"490":1,"513":1}}],["out",{"2":{"51":2,"360":1,"471":1,"517":2,"523":1,"535":1,"568":1,"650":1,"687":1,"720":1,"722":3,"784":2}}],["output",{"0":{"288":1,"289":1},"2":{"30":1,"136":1,"200":2,"206":1,"210":1,"214":1,"222":1,"225":1,"226":2,"227":1,"264":2,"265":1,"267":1,"270":1,"278":1,"297":1,"311":2,"336":1,"359":1,"360":2,"369":1,"385":1,"419":1,"456":1,"474":1,"475":1,"476":1,"477":1,"478":1,"484":1,"487":1,"498":1,"500":1,"501":1,"506":2,"720":1,"722":1}}],["otherwise",{"2":{"471":1,"472":1,"574":1,"619":1,"621":1,"648":1}}],["other",{"2":{"44":1,"185":1,"314":1,"330":1,"451":1,"494":2,"510":1,"791":1}}],["o",{"0":{"491":1,"492":1,"659":1},"1":{"492":1,"493":1},"2":{"34":1,"46":1,"95":1,"140":1,"141":1,"151":1,"172":2,"254":1,"257":1,"475":1,"476":1,"486":1,"487":1,"506":1,"510":1,"522":1,"571":1,"572":3,"574":2,"581":1,"587":1,"637":1,"640":1,"642":1,"646":1,"651":1,"653":1,"659":1,"671":2,"678":2,"684":1,"685":1,"705":2,"782":1,"783":1,"850":1}}],["ok",{"2":{"33":1,"89":3,"94":1,"114":1,"115":1,"123":1,"137":1,"155":1,"157":1,"159":1,"166":1,"177":1,"178":1,"181":1,"201":1,"207":1,"221":1,"227":1,"229":1,"234":1,"371":1,"439":2,"440":1,"442":1,"453":1,"510":1,"543":2,"544":1,"546":1,"558":1,"562":1,"567":1,"594":1,"605":1,"628":1,"720":2,"722":1,"723":2,"727":1,"728":1,"731":1,"732":1,"733":3,"734":1,"751":2,"769":1,"788":1,"789":2,"790":3,"791":3,"792":3,"793":3,"827":1,"830":1,"836":1,"837":1,"851":1,"853":1}}],["original",{"2":{"437":1,"553":1}}],["origin",{"2":{"393":1,"402":1}}],["oriented",{"2":{"335":1}}],["orm",{"0":{"315":1,"344":1,"795":1,"882":1},"1":{"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1},"2":{"285":1,"316":4,"317":1,"319":1,"320":1,"321":1,"322":1,"324":6,"325":7,"344":1,"795":2,"796":1,"797":3,"798":3,"799":4,"800":3,"801":1,"868":1}}],["organizing",{"0":{"178":1},"2":{"510":1}}],["ordered",{"2":{"575":1}}],["ordering",{"0":{"494":1},"2":{"494":4,"581":1,"689":1,"690":1}}],["order",{"2":{"62":1,"66":1,"233":1,"353":1,"370":1,"463":1,"494":2,"593":4,"597":2,"740":1,"794":1}}],["or",{"2":{"25":1,"35":1,"42":1,"44":1,"106":1,"107":1,"110":1,"123":1,"132":1,"147":1,"158":1,"163":1,"167":1,"174":2,"176":1,"177":1,"204":1,"212":1,"214":1,"216":1,"217":1,"220":1,"246":1,"255":1,"257":1,"328":1,"352":2,"369":1,"370":1,"387":1,"398":1,"400":2,"407":1,"415":1,"419":1,"428":1,"455":1,"456":1,"464":1,"468":1,"472":1,"476":1,"477":4,"487":1,"494":1,"500":1,"501":2,"510":1,"511":1,"522":1,"541":2,"569":1,"572":1,"577":1,"582":1,"590":1,"594":1,"600":1,"604":1,"608":1,"661":1,"664":2,"666":1,"670":1,"705":1,"712":1,"717":1,"728":1,"733":1,"743":1,"755":2,"756":1,"757":1,"759":1,"763":1,"768":1,"772":1,"777":3,"778":1,"779":1,"780":1,"787":1,"801":1,"803":1,"807":1,"824":1,"842":1,"852":1,"869":2}}],["overloads",{"2":{"693":1,"694":1,"741":1}}],["overloaded",{"2":{"212":1,"492":1}}],["oversized",{"2":{"682":1}}],["overflow",{"2":{"432":1,"465":1}}],["overview",{"0":{"335":1,"569":1,"752":1},"1":{"336":1,"337":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"753":1,"754":1}}],["overhead",{"0":{"144":1},"2":{"53":1,"151":1,"506":1,"590":1,"615":1,"622":1,"684":1,"775":1,"786":1}}],["overwrite",{"2":{"44":1,"281":1,"287":1,"352":1,"354":1}}],["overrides",{"2":{"483":1}}],["override",{"0":{"12":1,"471":1},"2":{"12":1,"276":1,"296":1,"323":1,"352":1,"464":1,"483":1,"751":3,"781":2}}],["over",{"2":{"2":1,"39":1,"105":1,"220":1,"228":1,"258":1,"438":1,"526":1,"529":1,"541":1,"542":1}}],["online",{"2":{"763":2}}],["only",{"0":{"184":1,"185":1},"2":{"60":1,"61":1,"89":1,"108":1,"122":1,"133":1,"141":1,"194":1,"205":1,"208":2,"216":1,"217":1,"236":1,"274":1,"281":1,"284":1,"285":1,"290":1,"298":1,"300":1,"310":2,"329":1,"360":1,"407":2,"455":1,"461":1,"484":1,"493":1,"564":1,"565":1,"592":1,"659":1,"666":1,"695":1,"698":1,"706":1,"707":1,"740":1,"759":1,"765":1,"766":1,"787":1,"790":2,"791":2,"850":1}}],["onto",{"2":{"582":1}}],["on|off>",{"2":{"329":1,"330":1,"331":2}}],["onnx",{"2":{"204":1,"205":1}}],["one",{"0":{"839":1},"2":{"98":1,"100":1,"199":1,"228":1,"257":1,"306":1,"348":1,"464":1,"475":1,"492":1,"494":1,"575":1,"603":1,"643":1,"673":1,"748":1,"838":1,"865":1}}],["once",{"0":{"482":1},"1":{"483":1,"484":1},"2":{"69":1,"117":1,"133":1,"209":1,"230":1,"473":1,"475":1,"483":1,"497":1,"509":1,"554":1,"556":1,"592":3}}],["on",{"0":{"77":1,"78":1,"79":1,"451":1,"762":1},"2":{"0":1,"4":1,"17":1,"37":1,"67":1,"70":1,"71":2,"75":2,"77":1,"78":1,"80":1,"88":1,"98":1,"108":1,"120":1,"125":1,"133":1,"136":1,"160":1,"166":1,"181":1,"184":1,"196":1,"208":1,"215":1,"217":1,"234":1,"250":1,"254":1,"255":1,"268":1,"277":1,"278":1,"299":1,"310":2,"311":2,"313":1,"329":1,"330":2,"331":1,"333":1,"369":1,"403":1,"409":1,"436":1,"453":1,"464":1,"465":1,"478":2,"498":1,"506":1,"513":1,"519":1,"554":1,"558":1,"564":1,"571":2,"572":1,"575":2,"577":1,"581":1,"582":1,"593":6,"596":3,"640":3,"647":1,"651":1,"661":1,"670":1,"681":2,"690":1,"691":2,"697":1,"698":1,"702":2,"703":1,"707":2,"712":1,"728":2,"738":1,"742":2,"753":1,"754":1,"757":2,"759":1,"768":1,"787":1,"788":1,"789":1,"793":1,"796":1,"802":1,"804":1,"805":1,"806":1,"808":1,"809":1,"810":1,"838":2,"839":1,"840":2,"847":1,"850":1,"870":1,"875":1,"884":1}}],["offer",{"0":{"868":1}}],["offline",{"0":{"600":1,"607":1,"883":1},"1":{"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1},"2":{"342":1,"386":1,"399":1,"411":1,"413":1,"417":1,"570":1,"578":1,"600":2,"825":1,"861":1,"868":1,"869":1}}],["offloading",{"2":{"686":1,"881":1}}],["offloaded",{"2":{"683":1}}],["offload",{"2":{"251":1,"259":1}}],["off",{"2":{"69":1,"103":1,"331":1,"332":1,"333":1,"436":1,"475":1,"478":1,"483":1,"486":1,"575":1,"677":1}}],["of",{"0":{"230":1,"638":1,"814":1},"2":{"0":2,"37":2,"95":1,"119":1,"127":1,"139":1,"147":1,"151":1,"205":1,"231":1,"233":1,"257":1,"259":1,"270":1,"306":1,"348":1,"381":1,"386":1,"387":1,"390":1,"395":1,"417":1,"434":1,"458":1,"471":1,"510":1,"513":1,"517":1,"519":1,"530":1,"532":1,"535":1,"551":1,"558":1,"565":1,"568":1,"589":1,"594":1,"621":1,"622":1,"624":1,"640":1,"686":1,"689":1,"692":1,"722":1,"748":1,"753":1,"754":1,"765":1,"796":1,"882":1}}],["skills",{"2":{"780":5}}],["skip",{"2":{"352":1,"369":2,"609":1}}],["skipped",{"2":{"268":1}}],["sf",{"2":{"766":1}}],["swagger",{"0":{"600":1,"607":1},"1":{"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1},"2":{"570":1,"578":3,"600":1,"601":5,"607":4}}],["swapping",{"2":{"458":1}}],["switch",{"2":{"501":2,"768":1}}],["ssz",{"2":{"817":1}}],["ssh",{"2":{"761":1,"768":1}}],["ss",{"2":{"478":4,"497":1}}],["sse",{"2":{"234":1,"238":1}}],["s2",{"2":{"435":1}}],["s1",{"2":{"435":1}}],["sql",{"2":{"322":1,"677":1,"682":1,"738":1,"739":2,"741":1,"751":3,"755":1,"796":1,"798":3,"800":1,"801":1}}],["sqliteconnection",{"2":{"753":1}}],["sqliteconfig",{"2":{"743":1}}],["sqlite3",{"2":{"753":1}}],["sqlite",{"0":{"753":1},"2":{"317":1,"736":3,"743":1,"754":1,"755":1}}],["snapshots",{"2":{"755":1}}],["snapshot",{"2":{"322":2,"325":1,"513":1,"517":1,"523":1,"535":1,"581":1,"604":2,"735":1,"755":1}}],["sdk",{"2":{"215":1}}],["split",{"2":{"849":1}}],["splits",{"2":{"554":1,"572":1}}],["specs",{"2":{"623":1}}],["spec",{"2":{"605":2}}],["specify",{"2":{"313":1}}],["specific",{"2":{"238":1,"264":1,"311":1,"372":1,"407":1,"408":1,"743":1}}],["specialized",{"2":{"850":1}}],["specialization",{"2":{"799":1}}],["special",{"2":{"185":1,"645":1,"656":1,"665":1}}],["spam",{"0":{"495":1},"1":{"496":1,"497":1},"2":{"509":1}}],["span",{"2":{"71":2,"821":1}}],["span>",{"2":{"71":1}}],["spawns",{"2":{"574":1,"659":1}}],["spawn",{"2":{"71":2,"251":1,"256":2,"259":1}}],["source",{"2":{"589":1}}],["sockets",{"2":{"642":1}}],["socket",{"0":{"667":1},"2":{"571":2,"575":2,"640":1,"647":2,"658":3,"667":2,"673":1,"676":1,"679":2,"681":1}}],["so",{"2":{"179":1,"572":1,"575":1,"578":1,"603":1,"607":1,"608":1,"690":1,"748":1}}],["something",{"2":{"186":1}}],["sometimes",{"2":{"167":1}}],["some",{"2":{"147":1,"498":1,"604":1}}],["sla",{"0":{"875":1}}],["slack",{"2":{"874":1}}],["slo",{"2":{"706":1}}],["slowloris",{"2":{"676":1}}],["slow",{"2":{"212":1,"218":1,"236":1,"492":1,"575":1}}],["slug",{"2":{"173":3}}],["sleeps",{"2":{"522":1}}],["sleep",{"2":{"69":2,"251":1,"253":2,"692":1,"712":2}}],["src",{"2":{"159":1,"296":1}}],["salts",{"2":{"723":1,"734":1}}],["saturated",{"2":{"581":1,"678":1,"687":1,"697":2}}],["sampling",{"2":{"501":1}}],["same",{"2":{"107":1,"208":1,"221":1,"259":1,"278":1,"330":1,"435":1,"494":1,"571":1,"572":1,"601":2,"687":1,"689":1,"728":2,"734":1,"786":1,"805":1,"809":1,"849":1}}],["san",{"2":{"300":1}}],["sanitizers",{"2":{"285":1}}],["save",{"2":{"192":1}}],["safeguards",{"0":{"682":1}}],["safety",{"0":{"488":1,"683":1,"716":1},"1":{"489":1,"490":1},"2":{"570":1}}],["safely",{"2":{"420":1,"486":1,"615":1,"667":1,"675":1,"691":1,"716":1}}],["safe",{"0":{"461":1,"768":1},"2":{"3":1,"13":1,"63":1,"118":1,"213":1,"217":1,"229":1,"409":1,"461":1,"464":1,"468":1,"475":3,"509":2,"520":1,"523":1,"551":1,"559":1,"566":1,"575":1,"590":1,"592":1,"597":1,"622":1,"684":1,"685":1,"686":1,"710":1,"735":1,"748":1,"763":1,"782":1,"786":1}}],["score",{"2":{"835":4}}],["scope",{"2":{"800":1}}],["scoped",{"0":{"591":1},"2":{"589":1,"591":1,"599":1}}],["screen",{"2":{"424":1}}],["script",{"0":{"295":1,"300":1,"303":1},"2":{"274":2,"275":3,"276":2,"277":1,"278":1,"296":1,"298":1,"299":2,"304":1,"306":1,"677":1}}],["scripts",{"2":{"273":1}}],["sccache",{"2":{"262":1,"264":1,"266":1}}],["schedulers",{"2":{"880":1}}],["scheduler",{"2":{"687":1,"692":1,"693":1,"698":2,"717":1}}],["schedules",{"2":{"643":1,"647":1,"650":1,"707":1}}],["schedule",{"2":{"577":1,"581":1,"582":1,"670":1}}],["scheduled",{"2":{"572":1,"582":1,"874":1}}],["scheduling",{"0":{"698":1},"2":{"258":1,"522":1,"541":1,"570":1,"584":1,"611":1,"612":1,"616":2,"624":1,"687":1,"712":1}}],["sched",{"2":{"257":2}}],["schemas",{"2":{"755":1,"826":1}}],["schema",{"0":{"755":1,"830":1},"2":{"214":1,"315":1,"316":1,"317":1,"322":5,"325":3,"344":1,"365":1,"367":1,"620":1,"735":2,"751":1,"755":5,"826":1,"830":6,"831":3,"832":1,"837":1}}],["scale",{"2":{"867":1}}],["scales",{"2":{"178":1}}],["scaling",{"0":{"697":1,"849":1},"2":{"529":1,"540":1,"541":1,"599":1}}],["scalable",{"2":{"86":1,"861":1}}],["scenarios",{"2":{"86":1}}],["shutting",{"2":{"516":1}}],["shutdown",{"0":{"498":1,"662":1,"700":1},"2":{"255":1,"518":1,"528":1,"536":1,"651":1,"667":1,"681":1,"704":1,"706":1,"881":1}}],["sh",{"2":{"241":1}}],["shipping",{"2":{"224":1}}],["ship",{"2":{"205":1}}],["sharing",{"2":{"551":1}}],["share",{"0":{"187":1},"2":{"353":1,"457":1,"568":1,"588":1}}],["shared",{"2":{"108":1,"460":2,"477":1,"589":2,"590":4,"640":1,"645":1,"649":2,"661":1,"683":1,"691":1,"710":2,"712":1,"839":1}}],["shas",{"2":{"403":1}}],["sha",{"0":{"722":1},"2":{"376":1,"379":1,"393":1,"394":1,"395":1,"399":1,"718":1,"722":1,"734":1}}],["sha256",{"2":{"343":1,"360":1,"363":1,"367":1,"720":1,"722":1}}],["shape",{"2":{"80":1,"234":1,"838":1}}],["show",{"2":{"264":2,"274":1,"310":1,"321":1,"345":1,"352":1,"360":2,"369":1,"424":3,"510":1}}],["showcase",{"2":{"163":1,"164":1,"250":1,"735":1,"810":1}}],["shown",{"2":{"163":1}}],["showing",{"2":{"103":1}}],["shows",{"2":{"0":2,"37":2,"234":1,"384":2,"746":1,"751":1,"757":1,"838":1,"844":1}}],["shortcut",{"2":{"274":1}}],["short",{"2":{"86":1,"219":1,"274":1,"276":1,"299":1,"706":1,"717":1,"748":1,"800":1,"865":1}}],["should",{"2":{"2":1,"12":1,"39":1,"66":1,"86":1,"119":1,"133":1,"135":1,"142":1,"148":1,"160":1,"185":1,"216":1,"229":1,"237":1,"254":1,"376":1,"413":1,"473":1,"591":1,"609":1,"705":1,"717":2,"788":1,"829":1}}],["s",{"0":{"869":1},"2":{"49":1,"70":4,"71":2,"108":2,"255":1,"500":1,"525":2,"762":1,"839":2}}],["suggested",{"2":{"704":1}}],["sure",{"2":{"671":1,"716":1,"772":1}}],["surface",{"2":{"0":1,"37":1,"512":1,"526":1}}],["suitable",{"2":{"597":1,"837":1}}],["suite",{"2":{"311":1}}],["suspicious",{"2":{"575":1,"677":1,"682":1}}],["suspension",{"2":{"258":1}}],["suspends",{"2":{"253":1}}],["suppressed",{"2":{"497":3}}],["supporting",{"2":{"513":1}}],["support",{"0":{"872":1,"873":1},"1":{"873":1,"874":1,"875":1,"876":1,"877":1},"2":{"217":1,"306":1,"343":1,"686":1,"773":1,"871":1,"872":1,"874":2,"875":1,"877":1}}],["supports",{"2":{"54":1,"170":1,"179":1,"295":1,"317":1,"407":1,"482":1,"558":1,"565":1,"576":1,"580":1,"741":1,"749":1,"787":1,"838":1}}],["supported",{"0":{"565":1},"2":{"42":1,"342":1,"346":1,"423":1,"468":1,"483":1,"565":1,"594":1}}],["such",{"2":{"477":1,"534":1,"590":1}}],["succeeded",{"2":{"462":1}}],["successfully",{"2":{"745":1}}],["success",{"2":{"213":1,"430":1,"647":1,"720":1}}],["sudo",{"2":{"244":1,"762":1,"763":4,"765":1,"766":2,"767":1,"768":5}}],["subsystem",{"2":{"500":1}}],["subcommands",{"0":{"398":1}}],["subcommand>",{"2":{"340":1,"344":1,"397":1}}],["subject",{"2":{"187":2}}],["submit",{"0":{"519":1},"1":{"520":1},"2":{"69":1,"254":1,"513":1,"515":1,"519":2,"520":2}}],["summary",{"0":{"509":1,"599":1,"624":1,"686":1},"2":{"497":1,"603":1,"613":1,"620":1}}],["summaries",{"2":{"232":1}}],["sum",{"2":{"69":3,"254":3}}],["sites",{"2":{"766":3}}],["site",{"2":{"766":1,"884":1}}],["sizing",{"2":{"539":1,"743":2}}],["sizes",{"0":{"726":1}}],["sized",{"2":{"671":1}}],["size",{"0":{"229":1},"2":{"43":1,"71":2,"108":2,"176":1,"229":2,"445":1,"531":2,"537":2,"538":2,"549":1,"575":1,"635":1,"672":1,"675":2,"677":1,"697":2,"755":1,"778":2,"798":2,"839":2}}],["since",{"2":{"788":1,"814":1,"819":1,"824":1}}],["sink",{"2":{"506":1}}],["sinks",{"2":{"487":1}}],["singleton",{"0":{"467":1},"2":{"467":1,"503":1}}],["single",{"0":{"185":1},"2":{"85":1,"258":1,"273":1,"295":1,"329":1,"333":1,"437":1,"467":1,"483":1,"489":1,"571":1,"575":2,"589":1,"622":1,"672":1,"757":1,"787":1,"827":1,"839":1}}],["side",{"2":{"217":1,"594":1}}],["silent",{"2":{"213":1,"265":1,"486":1,"507":1}}],["similar",{"2":{"585":1,"593":1}}],["simply",{"2":{"205":1}}],["simplicity",{"2":{"134":1,"153":1,"208":1}}],["simplest",{"2":{"844":1}}],["simple",{"0":{"41":1,"768":1,"776":1,"827":1},"1":{"42":1,"43":1,"44":1,"777":1,"778":1,"779":1,"780":1,"781":1,"828":1},"2":{"40":2,"41":1,"42":1,"43":1,"44":1,"53":1,"89":1,"101":1,"104":1,"108":1,"126":1,"145":1,"195":1,"199":1,"225":1,"510":1,"512":1,"525":1,"566":1,"570":1,"582":1,"585":1,"599":1,"697":1,"741":1,"757":1,"775":3,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"786":1,"838":1,"849":1}}],["simulated",{"2":{"115":1,"138":1,"200":1,"201":1,"226":1,"227":1,"228":1}}],["simulate",{"2":{"84":1}}],["sigkill",{"2":{"498":1}}],["sign",{"0":{"732":1},"2":{"360":1,"362":2,"732":1}}],["signing",{"0":{"362":1},"2":{"360":1,"362":2}}],["signs",{"2":{"359":1}}],["signal",{"0":{"461":1},"2":{"70":4,"71":3,"251":1,"255":1,"461":2,"501":1,"507":1,"661":1,"671":1,"881":1}}],["signals",{"0":{"70":1,"255":1},"2":{"70":1,"71":1,"251":1,"255":1,"497":1}}],["signaturealg",{"2":{"731":1,"732":1,"733":1}}],["signature",{"0":{"268":1,"370":1},"2":{"56":1,"64":1,"79":1,"180":1,"181":1,"262":1,"264":2,"268":1,"351":1,"352":2,"354":2,"355":1,"356":1,"363":1,"369":3,"370":1,"372":3,"373":1,"456":1,"731":1,"732":1,"733":2}}],["signatures",{"0":{"454":1,"565":1,"729":1},"1":{"730":1,"731":1,"732":1,"733":1},"2":{"1":1,"38":1,"367":1,"718":1,"729":1,"734":1}}],["sig",{"2":{"70":5,"71":4,"255":5,"369":1,"732":2,"733":1}}],["sigterm",{"0":{"70":1},"2":{"70":2,"71":1,"255":2,"461":1}}],["sigint",{"0":{"70":1},"2":{"70":2,"71":1,"255":2,"461":1}}],["symmetry",{"2":{"306":1}}],["sysroot",{"2":{"264":2}}],["systemctl",{"2":{"763":3,"766":1,"768":3,"774":1}}],["systemd",{"0":{"763":1},"1":{"764":1},"2":{"757":1,"763":1}}],["systems",{"0":{"882":1},"2":{"86":1,"119":1,"144":1,"202":1,"597":1,"729":1,"825":2,"837":2,"860":1,"861":2,"867":1,"869":1,"885":1}}],["system",{"2":{"3":1,"54":1,"66":1,"71":4,"91":1,"118":1,"219":1,"309":1,"340":1,"476":1,"588":1,"599":1,"763":1,"788":1,"826":1,"833":1,"840":1,"863":1,"868":1}}],["syntax",{"2":{"427":1,"510":1}}],["synthetic",{"2":{"152":1}}],["synchronization",{"2":{"513":1,"536":1}}],["synchronous",{"2":{"493":1}}],["synchronously",{"2":{"35":1,"131":1}}],["synced",{"2":{"391":1,"402":1,"413":1}}],["sync",{"0":{"377":1,"414":1},"2":{"266":1,"376":1,"377":1,"381":1,"391":1,"399":1,"400":1,"401":2,"402":1,"403":1,"413":1,"414":1,"416":1}}],["smaller",{"2":{"689":1,"690":1}}],["small",{"0":{"148":1},"2":{"13":1,"89":1,"215":1,"238":1,"418":1,"427":1,"523":1,"597":1,"638":1,"691":1,"706":1,"735":1,"739":1,"743":1,"794":1,"796":1,"839":1,"842":1}}],["steadyclock",{"0":{"824":1},"2":{"824":2,"825":1}}],["steps",{"0":{"204":1},"2":{"288":1,"289":1,"316":1,"320":2,"325":1}}],["step",{"0":{"129":2,"400":1},"1":{"130":2,"131":2,"132":2},"2":{"214":1}}],["st",{"2":{"746":7,"747":3,"797":5,"798":3}}],["still",{"2":{"455":1,"483":1,"487":1,"565":1,"572":1,"665":1,"738":1,"748":1}}],["studio",{"2":{"246":1}}],["style",{"0":{"95":1,"171":1,"172":1,"210":1,"833":1},"2":{"163":1,"195":1,"207":1,"234":1,"529":1,"565":2,"568":1,"676":1,"826":1,"837":1}}],["styles",{"2":{"54":1,"170":1,"179":1,"454":1,"749":1,"787":1}}],["stoi",{"2":{"472":1}}],["stop=true",{"2":{"712":1,"716":1}}],["stop=false",{"2":{"712":1}}],["stopnow",{"2":{"710":2,"714":1,"715":1,"716":1}}],["stopperiodic",{"2":{"698":1,"700":1}}],["stopped",{"2":{"70":1,"71":1,"700":1}}],["stopping",{"2":{"70":2,"71":1,"700":1}}],["stop",{"0":{"69":1,"461":1,"651":1,"652":1,"666":2,"715":1},"2":{"69":2,"70":2,"71":2,"91":1,"218":1,"219":1,"235":1,"252":1,"255":1,"258":1,"259":1,"310":1,"313":1,"329":1,"452":1,"461":1,"574":2,"639":1,"647":1,"651":1,"652":4,"657":2,"662":3,"666":4,"671":2,"698":1,"700":2,"710":1,"714":1,"768":1,"787":1,"792":1,"804":1,"808":1}}],["stops",{"2":{"66":1,"450":1,"574":1,"582":1,"592":1,"651":2,"652":1,"657":1,"693":1,"700":1,"710":2,"712":1,"714":1,"715":1,"794":1}}],["stores",{"2":{"470":1,"526":1,"554":1,"603":1,"645":1,"656":1}}],["stored",{"2":{"379":1,"576":1,"591":1,"614":2,"670":1,"689":1}}],["store>",{"2":{"353":1}}],["store",{"0":{"353":1,"714":1,"793":1},"2":{"167":1,"187":1,"342":1,"349":1,"351":2,"352":2,"353":1,"356":1,"440":1,"544":1,"751":1,"793":2,"825":1}}],["storing",{"2":{"63":1,"180":1}}],["storage",{"0":{"63":1},"2":{"41":1,"44":1,"150":1,"167":1,"187":1,"551":1,"557":1,"599":1,"776":1,"786":1}}],["stalled",{"2":{"575":1,"676":1}}],["stand",{"0":{"525":1},"2":{"525":1}}],["standardized",{"2":{"599":1,"680":1}}],["standardizes",{"2":{"595":1}}],["standardize",{"2":{"588":1}}],["standard",{"0":{"595":1},"2":{"136":1,"481":1,"530":1,"617":1,"703":1,"847":2}}],["standalone",{"0":{"75":1,"840":1},"2":{"838":1}}],["stability",{"2":{"483":1}}],["stable",{"0":{"482":1},"1":{"483":1,"484":1},"2":{"473":1,"475":1,"478":1,"508":1,"509":1,"558":1,"581":1,"605":1}}],["stay",{"2":{"254":1}}],["stays",{"2":{"153":1,"195":1,"199":1,"208":1,"235":1,"572":1,"796":1,"801":1,"849":1,"859":1}}],["stacking",{"2":{"593":1}}],["stacks",{"2":{"511":1}}],["stack",{"2":{"36":1,"158":1,"513":1}}],["stats",{"2":{"328":1,"329":4,"792":5,"804":1,"808":1}}],["static=on",{"2":{"264":1,"286":1}}],["static",{"0":{"458":1,"563":1,"772":1},"2":{"69":1,"70":1,"71":2,"108":5,"178":1,"264":1,"266":2,"285":1,"286":1,"434":1,"454":1,"458":5,"551":1,"558":1,"560":1,"746":2,"747":1,"759":1,"788":1,"799":8,"804":1,"808":1,"830":1,"831":1,"839":5}}],["status",{"0":{"31":1,"96":1,"177":1,"321":1,"439":1,"543":1,"567":1,"630":1,"858":1},"2":{"31":2,"35":1,"89":2,"95":1,"96":2,"108":1,"109":2,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"123":1,"131":1,"138":1,"155":1,"156":1,"157":1,"158":2,"171":3,"172":1,"173":1,"177":3,"181":1,"194":2,"196":1,"223":1,"226":1,"227":1,"228":1,"229":1,"264":2,"316":1,"321":1,"325":2,"344":1,"438":1,"439":5,"446":2,"453":1,"510":5,"542":1,"543":5,"550":2,"551":3,"560":5,"561":1,"562":2,"565":2,"566":1,"567":4,"568":1,"587":1,"594":1,"595":2,"630":2,"631":1,"637":1,"638":1,"763":1,"765":1,"768":1,"774":1,"787":1,"789":1,"790":1,"791":1,"792":2,"793":2,"803":1,"804":1,"807":1,"808":1,"839":3,"846":1,"858":1,"859":1}}],["statements",{"2":{"746":1,"796":1}}],["statement",{"0":{"739":1},"2":{"735":1,"738":1,"739":2,"741":1}}],["states",{"2":{"500":1}}],["stateful",{"2":{"426":1}}],["state",{"0":{"63":1,"591":1},"2":{"2":1,"13":1,"39":1,"53":1,"63":5,"66":1,"125":1,"180":3,"187":3,"217":1,"219":1,"386":1,"387":1,"427":1,"477":1,"517":1,"535":1,"551":1,"553":3,"557":2,"589":1,"591":3,"597":1,"683":1,"710":3,"712":1,"716":1,"786":1,"793":5}}],["started",{"2":{"478":2}}],["start",{"0":{"164":1,"347":1,"419":1,"448":1,"478":1,"647":1,"814":1,"850":1},"1":{"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1},"2":{"109":1,"218":1,"234":2,"329":1,"574":1,"587":1,"657":1,"659":1,"693":1,"714":1,"758":1,"768":1,"804":1,"808":1,"824":2}}],["starts",{"0":{"771":1},"2":{"17":1,"120":2,"212":1,"233":1,"252":1,"328":1,"450":1,"451":1,"574":1,"575":1,"646":5,"647":1,"676":1,"712":1,"849":1}}],["startups",{"2":{"869":1}}],["startup",{"2":{"13":1,"209":1,"210":1,"464":1,"473":2,"475":1,"483":1,"500":1,"706":1}}],["stderr",{"2":{"475":1,"481":1,"492":1,"494":3,"506":1}}],["stdout",{"2":{"305":1,"475":1,"481":1,"492":1,"494":3,"506":1}}],["std",{"2":{"11":2,"12":2,"34":1,"42":1,"69":5,"70":4,"71":20,"75":2,"89":1,"108":11,"113":1,"114":2,"130":1,"136":2,"137":4,"138":2,"139":2,"155":1,"156":1,"157":2,"173":1,"174":1,"176":3,"180":1,"181":5,"184":1,"191":1,"194":1,"200":2,"206":2,"207":2,"226":2,"229":1,"253":1,"256":1,"430":1,"435":3,"443":2,"445":1,"456":2,"460":1,"468":1,"471":1,"510":4,"515":3,"519":2,"520":1,"521":2,"523":3,"531":2,"534":1,"537":1,"538":3,"547":2,"549":1,"557":3,"565":2,"566":2,"590":2,"591":1,"631":1,"632":3,"633":2,"635":1,"645":1,"648":1,"650":1,"661":1,"687":1,"689":1,"690":1,"696":2,"710":2,"714":1,"720":1,"722":3,"723":1,"727":6,"728":1,"741":5,"745":2,"746":7,"747":2,"751":6,"756":1,"777":3,"778":2,"779":1,"780":1,"781":1,"783":1,"784":1,"785":3,"788":5,"789":1,"790":1,"793":3,"797":3,"798":5,"799":20,"800":3,"801":1,"812":1,"813":1,"814":1,"816":1,"817":1,"819":1,"820":1,"823":1,"824":1,"827":2,"829":1,"830":5,"831":4,"833":8,"835":1,"836":1,"839":11,"840":2,"846":3,"856":1,"857":1}}],["str",{"2":{"741":1}}],["strategies",{"2":{"883":1}}],["strategy",{"0":{"208":1,"863":1},"2":{"216":1,"864":1,"873":1,"882":1}}],["strand",{"2":{"575":2,"680":1,"681":1,"683":1}}],["struct",{"0":{"830":1},"2":{"523":1,"793":2,"799":3,"826":1,"830":1,"831":1}}],["structured",{"0":{"139":1,"508":1},"2":{"139":2,"149":1,"214":1,"223":1,"259":1,"328":1,"337":1,"456":1,"474":1,"476":1,"477":1,"501":1,"508":1,"588":1,"596":1,"597":1,"599":1,"826":1,"829":1,"833":1,"878":1,"881":1}}],["structures",{"0":{"780":1},"2":{"52":1,"423":1,"427":1}}],["structure",{"0":{"1":1,"38":1,"116":1,"340":1,"845":1},"2":{"111":1,"195":1,"202":1,"252":1,"256":1,"290":1,"348":1,"367":1,"805":1,"809":1,"844":1}}],["streamed",{"2":{"218":1,"237":1}}],["stream",{"2":{"214":1,"217":1,"218":2,"233":1,"234":2,"236":2,"237":1,"481":1,"486":1,"494":2}}],["streaming",{"0":{"218":1,"231":1,"232":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1},"2":{"204":1,"212":1,"213":1,"217":1,"218":2,"221":1,"222":1,"223":1,"224":1,"231":2,"232":1,"233":1,"234":2,"236":1,"238":3}}],["streams",{"2":{"138":1,"222":1}}],["stream>",{"2":{"71":1}}],["stronger",{"2":{"717":1}}],["strong",{"2":{"53":1,"262":1,"268":1}}],["strongly",{"2":{"3":1,"557":1,"591":1,"597":1}}],["stripping",{"2":{"622":1}}],["stripped",{"2":{"617":1}}],["stringify",{"2":{"782":1}}],["string>",{"2":{"108":2,"113":1,"114":1,"155":1,"176":1,"200":1,"206":1,"207":1,"226":1,"229":1,"443":1,"445":1,"547":1,"549":1,"631":1,"632":1,"633":1,"635":1,"746":1,"751":1,"785":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"799":1,"830":2,"831":2,"839":2,"840":1}}],["strings",{"2":{"52":1,"428":1,"431":1,"435":1,"785":1}}],["string",{"0":{"6":1,"435":1,"829":1},"2":{"5":1,"6":2,"10":1,"11":2,"25":1,"28":1,"34":1,"42":1,"43":2,"44":3,"49":1,"50":1,"75":1,"79":1,"89":1,"108":12,"113":1,"114":2,"130":1,"147":1,"155":1,"156":1,"157":2,"173":1,"174":1,"176":3,"181":3,"200":2,"206":2,"207":2,"226":2,"229":1,"329":1,"430":1,"432":1,"434":1,"435":7,"443":2,"445":1,"468":1,"471":1,"472":1,"510":4,"547":2,"549":1,"552":2,"553":2,"554":1,"557":1,"560":1,"567":2,"590":1,"622":1,"631":1,"632":3,"633":2,"635":1,"722":2,"727":2,"728":3,"732":1,"741":2,"746":1,"751":1,"755":2,"777":2,"778":3,"779":2,"780":4,"782":1,"788":3,"789":1,"790":1,"793":2,"798":2,"799":4,"812":1,"813":1,"816":1,"817":1,"827":1,"829":3,"830":2,"831":2,"833":4,"836":1,"839":12,"840":1,"846":3,"856":1,"857":1}}],["strictly",{"2":{"209":1,"540":1}}],["strict",{"2":{"2":1,"39":1,"369":1,"370":1,"372":1,"494":1,"575":1,"677":1}}],["seq",{"2":{"687":1,"689":2,"690":1}}],["sequences",{"2":{"518":1}}],["sequence",{"2":{"233":1,"581":1,"687":1,"690":1}}],["segment",{"2":{"611":2,"614":1,"615":1,"621":1}}],["segments",{"2":{"563":1,"576":1,"614":1,"615":1}}],["segfault",{"2":{"478":2}}],["severe",{"2":{"493":1}}],["several",{"2":{"265":1}}],["semantics",{"0":{"479":1},"1":{"480":1,"481":1},"2":{"475":1,"494":1,"592":1,"617":1,"717":1,"738":1}}],["sealed",{"2":{"727":2,"728":1}}],["seal",{"0":{"727":1},"2":{"727":2}}],["seamlessly",{"2":{"314":1}}],["searches",{"2":{"403":1,"466":1}}],["searched",{"2":{"380":1}}],["searching",{"2":{"400":1,"413":1}}],["search",{"0":{"411":1},"1":{"412":1,"413":1,"414":1,"415":1,"416":1,"417":1},"2":{"164":1,"174":1,"342":2,"401":2,"404":1,"411":1,"412":1,"413":1,"415":4,"416":1,"417":2,"510":2,"632":3,"846":1,"857":2}}],["separating",{"2":{"580":1}}],["separation",{"2":{"262":1,"527":1,"622":1,"678":1,"705":1}}],["separator",{"2":{"303":1}}],["separately",{"2":{"665":1}}],["separates",{"2":{"612":1}}],["separate",{"2":{"199":1,"202":1,"707":1,"717":1,"798":1}}],["select",{"0":{"747":1},"2":{"214":1,"677":1,"739":1,"740":1,"746":1,"747":1}}],["selection",{"0":{"208":1}}],["self",{"2":{"98":1,"159":1}}],["see",{"2":{"196":1,"699":1,"736":1,"788":1,"871":1,"876":1}}],["sessions",{"2":{"91":1,"108":1,"209":1,"643":1,"667":1,"683":1,"838":1,"839":1,"884":1}}],["session",{"0":{"575":1,"658":1,"672":1},"1":{"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1},"2":{"75":4,"77":2,"78":1,"79":1,"426":1,"465":1,"512":1,"570":1,"571":8,"574":1,"575":1,"577":1,"640":4,"643":2,"658":4,"670":1,"672":1,"673":2,"675":1,"677":1,"678":1,"679":1,"681":1,"682":1,"683":1,"685":1,"686":1,"705":1,"839":1,"840":4}}],["serving",{"2":{"198":1,"204":1,"560":1,"838":1}}],["services",{"0":{"590":1,"867":1},"1":{"868":1,"869":1,"870":1,"871":1},"2":{"588":1,"589":2,"590":4,"591":1,"597":1,"768":1,"861":1}}],["service",{"0":{"763":1,"771":1,"871":1},"1":{"764":1},"2":{"178":1,"205":1,"216":1,"403":1,"442":1,"546":1,"628":1,"678":1,"758":1,"763":2,"840":1,"851":1,"853":1}}],["served",{"2":{"570":1,"578":1,"601":2,"607":1,"690":1}}],["serves",{"2":{"458":1,"563":1,"600":1,"839":1}}],["serve",{"2":{"40":1,"85":1,"106":1,"108":1,"839":1}}],["serverless",{"2":{"399":1}}],["servers",{"2":{"256":1,"277":1,"489":1,"510":1}}],["server",{"0":{"71":1,"73":1,"115":1,"256":1,"470":1,"626":1,"639":2,"705":1,"714":1,"761":1,"762":1,"840":1,"851":1},"1":{"74":1,"640":2,"641":2,"642":2,"643":2,"644":2,"645":2,"646":2,"647":2,"648":2,"649":2,"650":2,"651":2,"652":2,"653":2,"654":2,"655":2,"656":2,"657":2,"658":2,"659":2,"660":2,"661":2,"662":2,"663":2,"664":2,"665":2,"666":2,"667":2,"668":2,"669":2,"670":2,"671":2},"2":{"1":1,"6":1,"7":1,"11":2,"12":1,"17":1,"38":1,"71":4,"72":2,"73":1,"75":1,"92":1,"93":1,"100":1,"107":1,"115":1,"120":1,"138":1,"158":1,"178":2,"217":2,"231":1,"232":1,"233":3,"274":2,"275":5,"276":2,"299":2,"447":2,"450":2,"451":2,"460":1,"462":1,"464":1,"465":1,"468":2,"469":1,"470":1,"478":2,"496":1,"510":1,"513":1,"527":1,"551":2,"552":1,"558":1,"570":1,"572":1,"606":1,"610":5,"639":3,"640":3,"646":1,"661":4,"662":1,"675":1,"757":2,"758":1,"759":1,"761":2,"766":1,"768":2,"802":1,"804":1,"806":1,"808":1,"838":1,"840":4,"851":1}}],["serialization",{"2":{"144":1,"149":1,"203":1,"775":1}}],["serialized",{"2":{"575":1,"680":1,"683":1}}],["serialize",{"2":{"49":1}}],["sensitive",{"2":{"137":1,"487":1,"704":1}}],["sent",{"2":{"35":1,"95":1,"97":1,"123":1,"132":1,"133":2,"172":1,"196":1,"565":1}}],["sending",{"0":{"441":1,"442":1,"545":1,"546":1},"2":{"117":1,"133":1,"219":1,"792":1}}],["sendstatus",{"2":{"560":1}}],["sends",{"2":{"95":1,"107":1,"123":1,"128":1,"132":1,"172":1,"231":1,"233":1,"446":1,"455":1,"510":1,"550":1,"562":1,"794":1}}],["send",{"0":{"32":1,"33":1,"34":1,"95":1,"172":1,"455":1},"2":{"23":1,"32":1,"35":1,"57":1,"64":1,"89":1,"93":1,"95":1,"108":2,"117":1,"123":2,"127":1,"131":1,"132":4,"133":1,"148":1,"172":1,"218":1,"221":1,"234":1,"237":1,"238":1,"441":1,"446":1,"448":1,"453":1,"455":3,"545":1,"550":1,"551":1,"560":2,"561":1,"562":1,"565":3,"568":1,"585":1,"589":1,"637":2,"638":1,"789":1,"790":1,"791":1,"839":4,"841":1}}],["setaffinity",{"2":{"659":1,"702":1}}],["setnotfoundhandler",{"2":{"645":1}}],["settable",{"2":{"751":1}}],["setters",{"2":{"560":1}}],["settings",{"2":{"473":1}}],["setting",{"0":{"439":1,"440":1,"543":1,"544":1},"2":{"180":1,"702":1}}],["setdevmode",{"2":{"459":1}}],["setserverport",{"2":{"470":1,"472":1}}],["sets",{"2":{"446":2,"461":1,"550":2,"563":1,"564":1,"607":1,"651":1,"700":1,"716":1}}],["setups",{"2":{"141":1,"838":1}}],["setup",{"0":{"661":1,"843":1,"844":1},"1":{"845":1,"846":1,"847":1,"848":1,"849":1},"2":{"97":1,"847":1}}],["set",{"0":{"834":1},"2":{"31":1,"44":4,"117":1,"123":1,"131":2,"159":4,"215":1,"234":1,"440":2,"446":1,"455":1,"458":1,"471":1,"483":1,"484":1,"520":1,"544":2,"550":1,"551":1,"553":1,"557":1,"560":1,"562":1,"574":1,"587":1,"648":1,"656":1,"659":1,"671":1,"680":1,"766":4,"768":1,"779":3,"780":1,"787":1,"793":1,"798":1,"834":1,"847":2}}],["second",{"2":{"497":1}}],["seconds>",{"2":{"329":1,"331":1}}],["seconds",{"2":{"108":1,"215":3,"265":1,"329":1,"333":1,"650":2,"714":1,"814":1,"818":1,"819":1,"820":2,"822":1,"823":1,"839":1}}],["sec",{"2":{"465":1}}],["seckey=",{"2":{"362":1}}],["seckey=path",{"2":{"362":1}}],["secret",{"2":{"156":1}}],["secrets",{"2":{"12":1,"140":1,"471":1,"473":1,"734":1}}],["security",{"0":{"154":1,"159":1,"162":1,"189":1,"343":1,"355":1,"682":1},"1":{"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1},"2":{"154":2,"159":2,"160":1,"162":1,"183":2,"189":1,"337":1,"369":1,"607":1,"677":1,"864":1,"873":1}}],["secure",{"2":{"142":1,"155":1,"184":1,"193":1,"270":1,"343":1,"348":1,"718":1,"723":1}}],["section",{"2":{"0":3,"1":1,"37":3,"38":1,"98":1,"119":1,"198":1,"204":1,"871":1,"876":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/assets/chunks/VPLocalSearchBox.B1oEVdpW.js b/docs/assets/chunks/VPLocalSearchBox.B1oEVdpW.js deleted file mode 100644 index 36f8c2970..000000000 --- a/docs/assets/chunks/VPLocalSearchBox.B1oEVdpW.js +++ /dev/null @@ -1,9 +0,0 @@ -var Ot=Object.defineProperty;var At=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>At(a,typeof e!="symbol"?e+"":e,t);import{V as Ct,q as Be,ah as Mt,h as be,ai as nt,aj as Lt,ak as Dt,al as Pt,G as ce,d as zt,am as rt,p as he,an as Vt,ao as jt,s as $t,ap as Bt,v as Le,P as ve,O as xe,aq as Wt,ar as Kt,W as Jt,R as qt,$ as Ut,o as q,b as Ht,j as T,a0 as Gt,k as P,as as Qt,at as Yt,au as Zt,c as Q,n as st,e as _e,B as it,F as at,a as pe,t as me,av as Xt,aw as ot,ax as en,a6 as tn,ab as nn,ay as rn,_ as sn}from"./framework.jUmBZPH5.js";import{u as an,c as on}from"./theme.CYllfLRE.js";const ln={root:()=>Ct(()=>import("./@localSearchIndexroot.Br7dyOPC.js"),[])};/*! -* tabbable 6.4.0 -* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var gt=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],ke=gt.join(","),bt=typeof Element>"u",ae=bt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!bt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function(e,t){var n;t===void 0&&(t=!0);var r=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),i=r===""||r==="true",s=i||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Fe(e.parentNode));return s},cn=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},yt=function(e,t,n){if(Fe(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(ke));return t&&ae.call(e,ke)&&r.unshift(e),r=r.filter(n),r},Re=function(e,t,n){for(var r=[],i=Array.from(e);i.length;){var s=i.shift();if(!Fe(s,!1))if(s.tagName==="SLOT"){var o=s.assignedElements(),l=o.length?o:s.children,c=Re(l,!0,n);n.flatten?r.push.apply(r,c):r.push({scopeParent:s,candidates:c})}else{var h=ae.call(s,ke);h&&n.filter(s)&&(t||!e.includes(s))&&r.push(s);var m=s.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(s),p=!Fe(m,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(s));if(m&&p){var b=Re(m===!0?s.children:m.children,!0,n);n.flatten?r.push.apply(r,b):r.push({scopeParent:s,candidates:b})}else i.unshift.apply(i,s.children)}}return r},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||cn(e))&&!wt(e)?0:e.tabIndex},un=function(e,t){var n=ie(e);return n<0&&t&&!wt(e)?0:n},dn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},St=function(e){return e.tagName==="INPUT"},fn=function(e){return St(e)&&e.type==="hidden"},hn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},vn=function(e,t){for(var n=0;nsummary:first-of-type"),o=s?e.parentElement:e;if(ae.call(o,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof r=="function"){for(var l=e;e;){var c=e.parentElement,h=Ne(e);if(c&&!c.shadowRoot&&r(c)===!0)return lt(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(bn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return lt(e);return!1},wn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},xt=function(e){var t=[],n=[];return e.forEach(function(r,i){var s=!!r.scopeParent,o=s?r.scopeParent:r,l=un(o,s),c=s?xt(r.candidates):o;l===0?s?t.push.apply(t,c):t.push(o):n.push({documentOrder:i,tabIndex:l,item:r,isScope:s,content:c})}),n.sort(dn).reduce(function(r,i){return i.isScope?r.push.apply(r,i.content):r.push(i.content),r},[]).concat(t)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:Sn}):n=yt(e,t.includeContainer,We.bind(null,t)),xt(n)},_n=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:Oe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=yt(e,t.includeContainer,Oe.bind(null,t)),n},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,ke)===!1?!1:We(t,e)},Tn=gt.concat("iframe:not([inert]):not([inert] *)").join(","),De=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Tn)===!1?!1:Oe(t,e)};/*! -* focus-trap 7.8.0 -* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function Ke(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t=a.length?{done:!0}:{done:!1,value:a[n++]}},e:function(l){throw l},f:r}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,s=!0,o=!1;return{s:function(){t=t.call(a)},n:function(){var l=t.next();return s=l.done,l},e:function(l){o=!0,i=l},f:function(){try{s||t.return==null||t.return()}finally{if(o)throw i}}}}function In(a,e,t){return(e=On(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function kn(a){if(typeof Symbol<"u"&&a[Symbol.iterator]!=null||a["@@iterator"]!=null)return Array.from(a)}function Nn(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ut(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(a,r).enumerable})),t.push.apply(t,n)}return t}function dt(a){for(var e=1;e0?e[e.length-1]:null},activateTrap:function(e,t){var n=U.getActiveTrap(e);t!==n&&U.pauseTrap(e);var r=e.indexOf(t);r===-1||e.splice(r,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),U.unpauseTrap(e)},pauseTrap:function(e){var t=U.getActiveTrap(e);t==null||t._setPausedState(!0)},unpauseTrap:function(e){var t=U.getActiveTrap(e);t&&!t._isManuallyPaused()&&t._setPausedState(!1)}},An=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Cn=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ye=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Mn=function(e){return ye(e)&&!e.shiftKey},Ln=function(e){return ye(e)&&e.shiftKey},ft=function(e){return setTimeout(e,0)},ge=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1&&arguments[1]!==void 0?arguments[1]:{},g=f.hasFallback,E=g===void 0?!1:g,_=f.params,I=_===void 0?[]:_,S=i[u];if(typeof S=="function"&&(S=S.apply(void 0,Fn(I))),S===!0&&(S=void 0),!S){if(S===void 0||S===!1)return S;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var v=S;if(typeof S=="string"){try{v=n.querySelector(S)}catch(d){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(d.message,'"'))}if(!v&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return v},m=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!De(u,i.tabbableOptions))if(c(n.activeElement)>=0)u=n.activeElement;else{var f=s.tabbableGroups[0],g=f&&f.firstTabbableNode;u=g||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},p=function(){if(s.containerGroups=s.containers.map(function(u){var f=xn(u,i.tabbableOptions),g=_n(u,i.tabbableOptions),E=f.length>0?f[0]:void 0,_=f.length>0?f[f.length-1]:void 0,I=g.find(function(d){return oe(d)}),S=g.slice().reverse().find(function(d){return oe(d)}),v=!!f.find(function(d){return ie(d)>0});return{container:u,tabbableNodes:f,focusableNodes:g,posTabIndexesFound:v,firstTabbableNode:E,lastTabbableNode:_,firstDomTabbableNode:I,lastDomTabbableNode:S,nextTabbableNode:function(x){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,A=f.indexOf(x);return A<0?R?g.slice(g.indexOf(x)+1).find(function(C){return oe(C)}):g.slice(0,g.indexOf(x)).reverse().find(function(C){return oe(C)}):f[A+(R?1:-1)]}}}),s.tabbableGroups=s.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),s.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(s.containerGroups.find(function(u){return u.posTabIndexesFound})&&s.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(u){var f=u.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?b(f.shadowRoot):f},w=function(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){w(m());return}u.focus({preventScroll:!!i.preventScroll}),s.mostRecentlyFocusedNode=u,An(u)&&u.select()}},k=function(u){var f=h("setReturnFocus",{params:[u]});return f||(f===!1?!1:u)},y=function(u){var f=u.target,g=u.event,E=u.isBackward,_=E===void 0?!1:E;f=f||Te(g),p();var I=null;if(s.tabbableGroups.length>0){var S=c(f,g),v=S>=0?s.containerGroups[S]:void 0;if(S<0)_?I=s.tabbableGroups[s.tabbableGroups.length-1].lastTabbableNode:I=s.tabbableGroups[0].firstTabbableNode;else if(_){var d=s.tabbableGroups.findIndex(function(F){var V=F.firstTabbableNode;return f===V});if(d<0&&(v.container===f||De(f,i.tabbableOptions)&&!oe(f,i.tabbableOptions)&&!v.nextTabbableNode(f,!1))&&(d=S),d>=0){var x=d===0?s.tabbableGroups.length-1:d-1,R=s.tabbableGroups[x];I=ie(f)>=0?R.lastTabbableNode:R.lastDomTabbableNode}else ye(g)||(I=v.nextTabbableNode(f,!1))}else{var A=s.tabbableGroups.findIndex(function(F){var V=F.lastTabbableNode;return f===V});if(A<0&&(v.container===f||De(f,i.tabbableOptions)&&!oe(f,i.tabbableOptions)&&!v.nextTabbableNode(f))&&(A=S),A>=0){var C=A===s.tabbableGroups.length-1?0:A+1,D=s.tabbableGroups[C];I=ie(f)>=0?D.firstTabbableNode:D.firstDomTabbableNode}else ye(g)||(I=v.nextTabbableNode(f))}}else I=h("fallbackFocus");return I},O=function(u){var f=Te(u);if(!(c(f,u)>=0)){if(ge(i.clickOutsideDeactivates,u)){o.deactivate({returnFocus:i.returnFocusOnDeactivate});return}ge(i.allowOutsideClick,u)||u.preventDefault()}},L=function(u){var f=Te(u),g=c(f,u)>=0;if(g||f instanceof Document)g&&(s.mostRecentlyFocusedNode=f);else{u.stopImmediatePropagation();var E,_=!0;if(s.mostRecentlyFocusedNode)if(ie(s.mostRecentlyFocusedNode)>0){var I=c(s.mostRecentlyFocusedNode),S=s.containerGroups[I].tabbableNodes;if(S.length>0){var v=S.findIndex(function(d){return d===s.mostRecentlyFocusedNode});v>=0&&(i.isKeyForward(s.recentNavEvent)?v+1=0&&(E=S[v-1],_=!1))}}else s.containerGroups.some(function(d){return d.tabbableNodes.some(function(x){return ie(x)>0})})||(_=!1);else _=!1;_&&(E=y({target:s.mostRecentlyFocusedNode,isBackward:i.isKeyBackward(s.recentNavEvent)})),w(E||s.mostRecentlyFocusedNode||m())}s.recentNavEvent=void 0},K=function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;s.recentNavEvent=u;var g=y({event:u,isBackward:f});g&&(ye(u)&&u.preventDefault(),w(g))},H=function(u){(i.isKeyForward(u)||i.isKeyBackward(u))&&K(u,i.isKeyBackward(u))},W=function(u){Cn(u)&&ge(i.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},j=function(u){var f=Te(u);c(f,u)>=0||ge(i.clickOutsideDeactivates,u)||ge(i.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},$=function(){if(s.active)return U.activateTrap(r,o),s.delayInitialFocusTimer=i.delayInitialFocus?ft(function(){w(m())}):w(m()),n.addEventListener("focusin",L,!0),n.addEventListener("mousedown",O,{capture:!0,passive:!1}),n.addEventListener("touchstart",O,{capture:!0,passive:!1}),n.addEventListener("click",j,{capture:!0,passive:!1}),n.addEventListener("keydown",H,{capture:!0,passive:!1}),n.addEventListener("keydown",W),o},Ce=function(u){s.active&&!s.paused&&o._setSubtreeIsolation(!1),s.adjacentElements.clear(),s.alreadySilent.clear();var f=new Set,g=new Set,E=ct(u),_;try{for(E.s();!(_=E.n()).done;){var I=_.value;f.add(I);for(var S=typeof ShadowRoot<"u"&&I.getRootNode()instanceof ShadowRoot,v=I;v;){f.add(v);var d=v.parentElement,x=[];d?x=d.children:!d&&S&&(x=v.getRootNode().children,d=v.getRootNode().host,S=typeof ShadowRoot<"u"&&d.getRootNode()instanceof ShadowRoot);var R=ct(x),A;try{for(R.s();!(A=R.n()).done;){var C=A.value;g.add(C)}}catch(D){R.e(D)}finally{R.f()}v=d}}}catch(D){E.e(D)}finally{E.f()}f.forEach(function(D){g.delete(D)}),s.adjacentElements=g},M=function(){if(s.active)return n.removeEventListener("focusin",L,!0),n.removeEventListener("mousedown",O,!0),n.removeEventListener("touchstart",O,!0),n.removeEventListener("click",j,!0),n.removeEventListener("keydown",H,!0),n.removeEventListener("keydown",W),o},Z=function(u){var f=u.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(_){return _===s.mostRecentlyFocusedNode})});f&&w(m())},X=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(Z):void 0,ee=function(){X&&(X.disconnect(),s.active&&!s.paused&&s.containers.map(function(u){X.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return s.active},get paused(){return s.paused},activate:function(u){if(s.active)return this;var f=l(u,"onActivate"),g=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap"),_=U.getActiveTrap(r),I=!1;if(_&&!_.paused){var S;(S=_._setSubtreeIsolation)===null||S===void 0||S.call(_,!1),I=!0}try{E||p(),s.active=!0,s.paused=!1,s.nodeFocusedBeforeActivation=b(n),f==null||f();var v=function(){E&&p(),$(),ee(),i.isolateSubtrees&&o._setSubtreeIsolation(!0),g==null||g()};if(E)return E(s.containers.concat()).then(v,v),this;v()}catch(x){if(_===U.getActiveTrap(r)&&I){var d;(d=_._setSubtreeIsolation)===null||d===void 0||d.call(_,!0)}throw x}return this},deactivate:function(u){if(!s.active)return this;var f=dt({onDeactivate:i.onDeactivate,onPostDeactivate:i.onPostDeactivate,checkCanReturnFocus:i.checkCanReturnFocus},u);clearTimeout(s.delayInitialFocusTimer),s.delayInitialFocusTimer=void 0,s.paused||o._setSubtreeIsolation(!1),s.alreadySilent.clear(),M(),s.active=!1,s.paused=!1,ee(),U.deactivateTrap(r,o);var g=l(f,"onDeactivate"),E=l(f,"onPostDeactivate"),_=l(f,"checkCanReturnFocus"),I=l(f,"returnFocus","returnFocusOnDeactivate");g==null||g();var S=function(){ft(function(){I&&w(k(s.nodeFocusedBeforeActivation)),E==null||E()})};return I&&_?(_(k(s.nodeFocusedBeforeActivation)).then(S,S),this):(S(),this)},pause:function(u){return s.active?(s.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return s.active?(s.manuallyPaused=!1,r[r.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var f=[].concat(u).filter(Boolean);return s.containers=f.map(function(g){return typeof g=="string"?n.querySelector(g):g}),i.isolateSubtrees&&Ce(s.containers),s.active&&(p(),i.isolateSubtrees&&!s.paused&&o._setSubtreeIsolation(!0)),ee(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return s.manuallyPaused}},_setPausedState:{value:function(u,f){if(s.paused===u)return this;if(s.paused=u,u){var g=l(f,"onPause"),E=l(f,"onPostPause");g==null||g(),M(),ee(),o._setSubtreeIsolation(!1),E==null||E()}else{var _=l(f,"onUnpause"),I=l(f,"onPostUnpause");_==null||_(),o._setSubtreeIsolation(!0),p(),$(),ee(),I==null||I()}return this}},_setSubtreeIsolation:{value:function(u){i.isolateSubtrees&&s.adjacentElements.forEach(function(f){var g;if(u)switch(i.isolateSubtrees){case"aria-hidden":(f.ariaHidden==="true"||((g=f.getAttribute("aria-hidden"))===null||g===void 0?void 0:g.toLowerCase())==="true")&&s.alreadySilent.add(f),f.setAttribute("aria-hidden","true");break;default:(f.inert||f.hasAttribute("inert"))&&s.alreadySilent.add(f),f.setAttribute("inert",!0);break}else if(!s.alreadySilent.has(f))switch(i.isolateSubtrees){case"aria-hidden":f.removeAttribute("aria-hidden");break;default:f.removeAttribute("inert");break}})}}}),o.updateContainerElements(e),o};function zn(a,e={}){let t;const{immediate:n,...r}=e,i=ce(!1),s=ce(!1),o=p=>t&&t.activate(p),l=p=>t&&t.deactivate(p),c=()=>{t&&(t.pause(),s.value=!0)},h=()=>{t&&(t.unpause(),s.value=!1)},m=be(()=>{const p=nt(a);return Lt(p).map(b=>{const w=nt(b);return typeof w=="string"?w:Dt(w)}).filter(Pt)});return Be(m,p=>{p.length&&(t=Pn(p,{...r,onActivate(){i.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){i.value=!1,e.onDeactivate&&e.onDeactivate()}}),n&&o())},{flush:"post"}),Mt(()=>l()),{hasFocus:i,isPaused:s,activate:o,deactivate:l,pause:c,unpause:h}}class ue{constructor(e,t=!0,n=[],r=5e3){this.ctx=e,this.iframes=t,this.exclude=n,this.iframesTimeout=r}static matches(e,t){const n=typeof t=="string"?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){let i=!1;return n.every(s=>r.call(e,s)?(i=!0,!1):!0),i}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(n=>{const r=t.filter(i=>i.contains(n)).length>0;t.indexOf(n)===-1&&!r&&t.push(n)}),t}getIframeContents(e,t,n=()=>{}){let r;try{const i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch{n()}r&&t(r)}isIframeBlank(e){const t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}observeIframeLoad(e,t,n){let r=!1,i=null;const s=()=>{if(!r){r=!0,clearTimeout(i);try{this.isIframeBlank(e)||(e.removeEventListener("load",s),this.getIframeContents(e,t,n))}catch{n()}}};e.addEventListener("load",s),i=setTimeout(s,this.iframesTimeout)}onIframeReady(e,t,n){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch{n()}}waitForIframes(e,t){let n=0;this.forEachIframe(e,()=>!0,r=>{n++,this.waitForIframes(r.querySelector("html"),()=>{--n||t()})},r=>{r||t()})}forEachIframe(e,t,n,r=()=>{}){let i=e.querySelectorAll("iframe"),s=i.length,o=0;i=Array.prototype.slice.call(i);const l=()=>{--s<=0&&r(o)};s||l(),i.forEach(c=>{ue.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,n(h)),l()},l)})}createIterator(e,t,n){return document.createNodeIterator(e,t,n,!1)}createInstanceOnIframe(e){return new ue(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,n){const r=e.compareDocumentPosition(n),i=Node.DOCUMENT_POSITION_PRECEDING;if(r&i)if(t!==null){const s=t.compareDocumentPosition(n),o=Node.DOCUMENT_POSITION_FOLLOWING;if(s&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let n;return t===null?n=e.nextNode():n=e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}checkIframeFilter(e,t,n,r){let i=!1,s=!1;return r.forEach((o,l)=>{o.val===n&&(i=l,s=o.handled)}),this.compareNodeIframe(e,t,n)?(i===!1&&!s?r.push({val:n,handled:!0}):i!==!1&&!s&&(r[i].handled=!0),!0):(i===!1&&r.push({val:n,handled:!1}),!1)}handleOpenIframes(e,t,n,r){e.forEach(i=>{i.handled||this.getIframeContents(i.val,s=>{this.createInstanceOnIframe(s).forEachNode(t,n,r)})})}iterateThroughNodes(e,t,n,r,i){const s=this.createIterator(t,e,r);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(s),c);for(;m();)this.iframes&&this.forEachIframe(t,p=>this.checkIframeFilter(c,h,p,o),p=>{this.createInstanceOnIframe(p).forEachNode(e,b=>l.push(b),r)}),l.push(c);l.forEach(p=>{n(p)}),this.iframes&&this.handleOpenIframes(o,e,n,r),i()}forEachNode(e,t,n,r=()=>{}){const i=this.getContexts();let s=i.length;s||r(),i.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,n,()=>{--s<=0&&r()})};this.iframes?this.waitForIframes(o,l):l()})}}let Vn=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ue(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const n=this.opt.log;this.opt.debug&&typeof n=="object"&&typeof n[t]=="function"&&n[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let i in t)if(t.hasOwnProperty(i)){const s=t[i],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(s):this.escapeStr(s);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${n}`),r+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+r))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,n,r)=>{let i=r.charAt(n+1);return/[(|)\\]/.test(i)||i===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let r=[];return e.split("").forEach(i=>{n.every(s=>{if(s.indexOf(i)!==-1){if(r.indexOf(s)>-1)return!1;e=e.replace(new RegExp(`[${s}]`,`gm${t}`),`[${s}]`),r.push(s)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let n=this.opt.accuracy,r=typeof n=="string"?n:n.value,i=typeof n=="string"?[]:n.limiters,s="";switch(i.forEach(o=>{s+=`|${this.escapeStr(o)}`}),r){case"partially":default:return`()(${e})`;case"complementary":return s="\\s"+(s||this.escapeStr(t)),`()([^${s}]*${e}[^${s}]*)`;case"exactly":return`(^|\\s${s})(${e})(?=$|\\s${s})`}}getSeparatedKeywords(e){let t=[];return e.forEach(n=>{this.opt.separateWordSearch?n.split(" ").forEach(r=>{r.trim()&&t.indexOf(r)===-1&&t.push(r)}):n.trim()&&t.indexOf(n)===-1&&t.push(n)}),{keywords:t.sort((n,r)=>r.length-n.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let n=0;return e.sort((r,i)=>r.start-i.start).forEach(r=>{let{start:i,end:s,valid:o}=this.callNoMatchOnInvalidRanges(r,n);o&&(r.start=i,r.length=s-i,t.push(r),n=s)}),t}callNoMatchOnInvalidRanges(e,t){let n,r,i=!1;return e&&typeof e.start<"u"?(n=parseInt(e.start,10),r=n+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:n,end:r,valid:i}}checkWhitespaceRanges(e,t,n){let r,i=!0,s=n.length,o=t-s,l=parseInt(e.start,10)-o;return l=l>s?s:l,r=l+parseInt(e.length,10),r>s&&(r=s,this.log(`End range automatically set to the max value of ${s}`)),l<0||r-l<0||l>s||r>s?(i=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):n.substring(l,r).replace(/\s+/g,"")===""&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:i}}getTextNodes(e){let t="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,r=>{n.push({start:t.length,end:(t+=r.textContent).length,node:r})},r=>this.matchesExclude(r.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:n})})}matchesExclude(e){return ue.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,n){const r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),s=i.splitText(n-t);let o=document.createElement(r);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=i.textContent,i.parentNode.replaceChild(o,i),s}wrapRangeInMappedTextNode(e,t,n,r,i){e.nodes.every((s,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!r(s.node))return!1;const c=t-s.start,h=(n>s.end?s.end:n)-s.start,m=e.value.substr(0,s.start),p=e.value.substr(h+s.start);if(s.node=this.wrapRangeInTextNode(s.node,c,h),e.value=m+p,e.nodes.forEach((b,w)=>{w>=o&&(e.nodes[w].start>0&&w!==o&&(e.nodes[w].start-=h),e.nodes[w].end-=h)}),n-=h,i(s.node.previousSibling,s.start),n>s.end)t=s.end;else return!1}return!0})}wrapMatches(e,t,n,r,i){const s=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[s]!=="";){if(!n(c[s],l))continue;let h=c.index;if(s!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[s]!=="";){let c=l.index;if(s!==0)for(let m=1;mn(l[s],m),(m,p)=>{e.lastIndex=p,r(m)})}i()})}wrapRangeFromIndex(e,t,n,r){this.getTextNodes(i=>{const s=i.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,s,i.value);m&&this.wrapRangeInMappedTextNode(i,c,h,p=>t(p,o,i.value.substring(c,h),l),p=>{n(p,o)})}),r()})}unwrapMatches(e){const t=e.parentNode;let n=document.createDocumentFragment();for(;e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let n=0,r="wrapMatches";const i=s=>{n++,this.opt.each(s)};this.opt.acrossElements&&(r="wrapMatchesAcrossElements"),this[r](e,this.opt.ignoreGroups,(s,o)=>this.opt.filter(o,s,n),i,()=>{n===0&&this.opt.noMatch(e),this.opt.done(n)})}mark(e,t){this.opt=t;let n=0,r="wrapMatches";const{keywords:i,length:s}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[r](h,1,(p,b)=>this.opt.filter(b,c,n,m),p=>{m++,n++,this.opt.each(p)},()=>{m===0&&this.opt.noMatch(c),i[s-1]===c?this.opt.done(n):l(i[i.indexOf(c)+1])})};this.opt.acrossElements&&(r="wrapMatchesAcrossElements"),s===0?this.opt.done(n):l(i[0])}markRanges(e,t){this.opt=t;let n=0,r=this.checkRanges(e);r&&r.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(r)),this.wrapRangeFromIndex(r,(i,s,o,l)=>this.opt.filter(i,s,o,l),(i,s)=>{n++,this.opt.each(i,s)},()=>{this.opt.done(n)})):this.opt.done(n)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,n=>{this.unwrapMatches(n)},n=>{const r=ue.matches(n,t),i=this.matchesExclude(n);return!r||i?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function jn(a){const e=new Vn(a);return this.mark=(t,n)=>(e.mark(t,n),this),this.markRegExp=(t,n)=>(e.markRegExp(t,n),this),this.markRanges=(t,n)=>(e.markRanges(t,n),this),this.unmark=t=>(e.unmark(t),this),this}const $n="ENTRIES",Tt="KEYS",Et="VALUES",z="";class Pe{constructor(e,t){const n=e._tree,r=Array.from(n.keys());this.set=e,this._type=t,this._path=r.length>0?[{node:n,keys:r}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=le(this._path);if(le(t)===z)return{done:!1,value:this.result()};const n=e.get(le(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=le(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>le(e)).filter(e=>e!==z).join("")}value(){return le(this._path).node.get(z)}result(){switch(this._type){case Et:return this.value();case Tt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const le=a=>a[a.length-1],Bn=(a,e,t)=>{const n=new Map;if(e===void 0)return n;const r=e.length+1,i=r+t,s=new Uint8Array(i*r).fill(t+1);for(let o=0;o{const l=i*s;e:for(const c of a.keys())if(c===z){const h=r[l-1];h<=t&&n.set(o,[a.get(c),h])}else{let h=i;for(let m=0;mt)continue e}It(a.get(c),e,t,n,r,h,s,o+c)}};class Y{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=Ae(this._tree,e.slice(this._prefix.length));if(t===void 0){const[r,i]=He(n);for(const s of r.keys())if(s!==z&&s.startsWith(i)){const o=new Map;return o.set(s.slice(i.length),r.get(s)),new Y(o,e)}}return new Y(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Wn(this._tree,e)}entries(){return new Pe(this,$n)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return Bn(this._tree,e,t)}get(e){const t=Je(this._tree,e);return t!==void 0?t.get(z):void 0}has(e){const t=Je(this._tree,e);return t!==void 0&&t.has(z)}keys(){return new Pe(this,Tt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,ze(this._tree,e).set(z,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=ze(this._tree,e);return n.set(z,t(n.get(z))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=ze(this._tree,e);let r=n.get(z);return r===void 0&&n.set(z,r=t()),r}values(){return new Pe(this,Et)}[Symbol.iterator](){return this.entries()}static from(e){const t=new Y;for(const[n,r]of e)t.set(n,r);return t}static fromObject(e){return Y.from(Object.entries(e))}}const Ae=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const n of a.keys())if(n!==z&&e.startsWith(n))return t.push([a,n]),Ae(a.get(n),e.slice(n.length),t);return t.push([a,e]),Ae(void 0,"",t)},Je=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==z&&e.startsWith(t))return Je(a.get(t),e.slice(t.length))},ze=(a,e)=>{const t=e.length;e:for(let n=0;a&&n{const[t,n]=Ae(a,e);if(t!==void 0){if(t.delete(z),t.size===0)kt(n);else if(t.size===1){const[r,i]=t.entries().next().value;Nt(n,r,i)}}},kt=a=>{if(a.length===0)return;const[e,t]=He(a);if(e.delete(t),e.size===0)kt(a.slice(0,-1));else if(e.size===1){const[n,r]=e.entries().next().value;n!==z&&Nt(a.slice(0,-1),n,r)}},Nt=(a,e,t)=>{if(a.length===0)return;const[n,r]=He(a);n.set(r+e,t),n.delete(r)},He=a=>a[a.length-1],Ge="or",Ft="and",Kn="and_not";class de{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?$e:e.autoVacuum;this._options={...je,...e,autoVacuum:t,searchOptions:{...ht,...e.searchOptions||{}},autoSuggestOptions:{...Gn,...e.autoSuggestOptions||{}}},this._index=new Y,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ue,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:n,tokenize:r,processTerm:i,fields:s,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const h of s){const m=t(e,h);if(m==null)continue;const p=r(n(m,h),h),b=this._fieldIds[h],w=new Set(p).size;this.addFieldLength(c,b,this._documentCount-1,w);for(const k of p){const y=i(k,h);if(Array.isArray(y))for(const O of y)this.addTerm(b,c,O);else y&&this.addTerm(b,c,y)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,r={chunk:[],promise:Promise.resolve()},{chunk:i,promise:s}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%n===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),r);return s.then(()=>this.addAll(i))}remove(e){const{tokenize:t,processTerm:n,extractField:r,stringifyField:i,fields:s,idField:o}=this._options,l=r(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const h of s){const m=r(e,h);if(m==null)continue;const p=t(i(m,h),h),b=this._fieldIds[h],w=new Set(p).size;this.removeFieldLength(c,b,this._documentCount,w);for(const k of p){const y=n(k,h);if(Array.isArray(y))for(const O of y)this.removeTerm(b,c,O);else y&&this.removeTerm(b,c,y)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Y,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,r)=>{this.removeFieldLength(t,r,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:r}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:r},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,r=n(e,t);this.discard(r),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ue,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const r=e.batchSize||qe.batchSize,i=e.batchWait||qe.batchWait;let s=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),s%r===0&&await new Promise(c=>setTimeout(c,i)),s+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||$e.minDirtCount,n=n||$e.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,r={...n,...t},i=this.executeQuery(e,t),s=[];for(const[o,{score:l,terms:c,match:h}]of i){const m=c.length||1,p={id:this._documentIds.get(o),score:l*m,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(p,this._storedFields.get(o)),(r.filter==null||r.filter(p))&&s.push(p)}return e===de.wildcard&&r.boostDocument==null||s.sort(pt),s}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:i,terms:s}of this.search(e,t)){const o=s.join(" "),l=n.get(o);l!=null?(l.score+=i,l.count+=1):n.set(o,{score:i,terms:s,count:1})}const r=[];for(const[i,{score:s,terms:o,count:l}]of n)r.push({suggestion:i,terms:o,score:s/l});return r.sort(pt),r}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(je.hasOwnProperty(e))return Ve(je,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:r,fieldLength:i,storedFields:s,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Ee(r),l._fieldLength=Ee(i),l._storedFields=Ee(s);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of n){const m=new Map;for(const p of Object.keys(h)){let b=h[p];o===1&&(b=b.ds),m.set(parseInt(p,10),Ee(b))}l._index.set(c,m)}return l}static async loadJSAsync(e,t){const{index:n,documentIds:r,fieldLength:i,storedFields:s,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await Ie(r),l._fieldLength=await Ie(i),l._storedFields=await Ie(s);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of n){const p=new Map;for(const b of Object.keys(m)){let w=m[b];o===1&&(w=w.ds),p.set(parseInt(b,10),await Ie(w))}++c%1e3===0&&await Rt(0),l._index.set(h,p)}return l}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:r,fieldIds:i,averageFieldLength:s,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new de(t);return c._documentCount=n,c._nextId=r,c._idToShortId=new Map,c._fieldIds=i,c._avgFieldLength=s,c._dirtCount=o||0,c._index=new Y,c}executeQuery(e,t={}){if(e===de.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const p={...t,...e,queries:void 0},b=e.queries.map(w=>this.executeQuery(w,p));return this.combineResults(b,p.combineWith)}const{tokenize:n,processTerm:r,searchOptions:i}=this._options,s={tokenize:n,processTerm:r,...i,...t},{tokenize:o,processTerm:l}=s,m=o(e).flatMap(p=>l(p)).filter(p=>!!p).map(Hn(s)).map(p=>this.executeQuerySpec(p,s));return this.combineResults(m,s.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},r=(n.fields||this._options.fields).reduce((k,y)=>({...k,[y]:Ve(n.boost,y)||1}),{}),{boostDocument:i,weights:s,maxFuzzy:o,bm25:l}=n,{fuzzy:c,prefix:h}={...ht.weights,...s},m=this._index.get(e.term),p=this.termResults(e.term,e.term,1,e.termBoost,m,r,i,l);let b,w;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const k=e.fuzzy===!0?.2:e.fuzzy,y=k<1?Math.min(o,Math.round(e.term.length*k)):k;y&&(w=this._index.fuzzyGet(e.term,y))}if(b)for(const[k,y]of b){const O=k.length-e.term.length;if(!O)continue;w==null||w.delete(k);const L=h*k.length/(k.length+.3*O);this.termResults(e.term,k,L,e.termBoost,y,r,i,l,p)}if(w)for(const k of w.keys()){const[y,O]=w.get(k);if(!O)continue;const L=c*k.length/(k.length+O);this.termResults(e.term,k,L,e.termBoost,y,r,i,l,p)}return p}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[r,i]of this._documentIds){const s=n.boostDocument?n.boostDocument(i,"",this._storedFields.get(r)):1;t.set(r,{score:s,terms:[],match:{}})}return t}combineResults(e,t=Ge){if(e.length===0)return new Map;const n=t.toLowerCase(),r=Jn[n];if(!r)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(r)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const r={};for(const[i,s]of n)r[i]=Object.fromEntries(s);e.push([t,r])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,r,i,s,o,l,c=new Map){if(i==null)return c;for(const h of Object.keys(s)){const m=s[h],p=this._fieldIds[h],b=i.get(p);if(b==null)continue;let w=b.size;const k=this._avgFieldLength[p];for(const y of b.keys()){if(!this._documentIds.has(y)){this.removeTerm(p,y,t),w-=1;continue}const O=o?o(this._documentIds.get(y),t,this._storedFields.get(y)):1;if(!O)continue;const L=b.get(y),K=this._fieldLength.get(y)[p],H=Un(L,w,this._documentCount,K,k,l),W=n*r*m*O*H,j=c.get(y);if(j){j.score+=W,Qn(j.terms,e);const $=Ve(j.match,t);$?$.push(h):j.match[t]=[h]}else c.set(y,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,n){const r=this._index.fetch(n,mt);let i=r.get(e);if(i==null)i=new Map,i.set(t,1),r.set(e,i);else{const s=i.get(t);i.set(t,(s||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const r=this._index.fetch(n,mt),i=r.get(e);i==null||i.get(t)==null?this.warnDocumentChanged(t,e,n):i.get(t)<=1?i.size<=1?r.delete(e):i.delete(t):i.set(t,i.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const r of Object.keys(this._fieldIds))if(this._fieldIds[r]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${r}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Jn={[Ge]:(a,e)=>{for(const t of e.keys()){const n=a.get(t);if(n==null)a.set(t,e.get(t));else{const{score:r,terms:i,match:s}=e.get(t);n.score=n.score+r,n.match=Object.assign(n.match,s),vt(n.terms,i)}}return a},[Ft]:(a,e)=>{const t=new Map;for(const n of e.keys()){const r=a.get(n);if(r==null)continue;const{score:i,terms:s,match:o}=e.get(n);vt(r.terms,s),t.set(n,{score:r.score+i,terms:r.terms,match:Object.assign(r.match,o)})}return t},[Kn]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},qn={k:1.2,b:.7,d:.5},Un=(a,e,t,n,r,i)=>{const{k:s,b:o,d:l}=i;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(s+1)/(a+s*(1-o+o*n/r)))},Hn=a=>(e,t,n)=>{const r=typeof a.fuzzy=="function"?a.fuzzy(e,t,n):a.fuzzy||!1,i=typeof a.prefix=="function"?a.prefix(e,t,n):a.prefix===!0,s=typeof a.boostTerm=="function"?a.boostTerm(e,t,n):1;return{term:e,fuzzy:r,prefix:i,termBoost:s}},je={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split(Yn),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:Ge,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:qn},Gn={combineWith:Ft,prefix:(a,e,t)=>e===t.length-1},qe={batchSize:1e3,batchWait:10},Ue={minDirtFactor:.1,minDirtCount:20},$e={...qe,...Ue},Qn=(a,e)=>{a.includes(e)||a.push(e)},vt=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,mt=()=>new Map,Ee=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ie=async a=>{const e=new Map;let t=0;for(const n of Object.keys(a))e.set(parseInt(n,10),a[n]),++t%1e3===0&&await Rt(0);return e},Rt=a=>new Promise(e=>setTimeout(e,a)),Yn=/[\n\r\p{Z}\p{P}]+/u;class Zn{constructor(e=10){Me(this,"max");Me(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Xn=["aria-owns"],er={class:"shell"},tr=["title"],nr={class:"search-actions before"},rr=["title"],sr=["aria-activedescendant","aria-controls","placeholder"],ir={class:"search-actions"},ar=["title"],or=["disabled","title"],lr=["id","role","aria-labelledby"],cr=["id","aria-selected"],ur=["href","aria-label","onMouseenter","onFocusin","data-index"],dr={class:"titles"},fr=["innerHTML"],hr={class:"title main"},vr=["innerHTML"],pr={key:0,class:"excerpt-wrapper"},mr={key:0,class:"excerpt",inert:""},gr=["innerHTML"],br={key:0,class:"no-results"},yr={class:"search-keyboard-shortcuts"},wr=["aria-label"],Sr=["aria-label"],xr=["aria-label"],_r=["aria-label"],Tr=zt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var I,S;const t=e,n=ce(),r=ce(),i=ce(ln),s=an(),{activate:o}=zn(n,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=s,h=rt(async()=>{var v,d,x,R,A,C,D,F,V;return ot(de.loadJSON((x=await((d=(v=i.value)[l.value])==null?void 0:d.call(v)))==null?void 0:x.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((R=c.value.search)==null?void 0:R.provider)==="local"&&((C=(A=c.value.search.options)==null?void 0:A.miniSearch)==null?void 0:C.searchOptions)},...((D=c.value.search)==null?void 0:D.provider)==="local"&&((V=(F=c.value.search.options)==null?void 0:F.miniSearch)==null?void 0:V.options)}))}),p=be(()=>{var v,d;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((d=c.value.search.options)==null?void 0:d.disableQueryPersistence)===!0}).value?he(""):Vt("vitepress:local-search-filter",""),b=jt("vitepress:local-search-detailed-list",((I=c.value.search)==null?void 0:I.provider)==="local"&&((S=c.value.search.options)==null?void 0:S.detailedView)===!0),w=be(()=>{var v,d,x;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((d=c.value.search.options)==null?void 0:d.disableDetailedView)===!0||((x=c.value.search.options)==null?void 0:x.detailedView)===!1)}),k=be(()=>{var d,x,R,A,C,D,F;const v=((d=c.value.search)==null?void 0:d.options)??c.value.algolia;return((C=(A=(R=(x=v==null?void 0:v.locales)==null?void 0:x[l.value])==null?void 0:R.translations)==null?void 0:A.button)==null?void 0:C.buttonText)||((F=(D=v==null?void 0:v.translations)==null?void 0:D.button)==null?void 0:F.buttonText)||"Search"});$t(()=>{w.value&&(b.value=!1)});const y=ce([]),O=he(!1);Be(p,()=>{O.value=!1});const L=rt(async()=>{if(r.value)return ot(new jn(r.value))},null),K=new Zn(16);Bt(()=>[h.value,p.value,b.value],async([v,d,x],R,A)=>{var te,we,Qe,Ye;(R==null?void 0:R[0])!==v&&K.clear();let C=!1;if(A(()=>{C=!0}),!v)return;y.value=v.search(d).slice(0,16),O.value=!0;const D=x?await Promise.all(y.value.map(B=>H(B.id))):[];if(C)return;for(const{id:B,mod:ne}of D){const re=B.slice(0,B.indexOf("#"));let G=K.get(re);if(G)continue;G=new Map,K.set(re,G);const J=ne.default??ne;if(J!=null&&J.render||J!=null&&J.setup){const se=en(J);se.config.warnHandler=()=>{},se.provide(tn,s),Object.defineProperties(se.config.globalProperties,{$frontmatter:{get(){return s.frontmatter.value}},$params:{get(){return s.page.value.params}}});const Ze=document.createElement("div");se.mount(Ze),Ze.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(fe=>{var tt;const Se=(tt=fe.querySelector("a"))==null?void 0:tt.getAttribute("href"),Xe=(Se==null?void 0:Se.startsWith("#"))&&Se.slice(1);if(!Xe)return;let et="";for(;(fe=fe.nextElementSibling)&&!/^h[1-6]$/i.test(fe.tagName);)et+=fe.outerHTML;G.set(Xe,et)}),se.unmount()}if(C)return}const F=new Set;if(y.value=y.value.map(B=>{const[ne,re]=B.id.split("#"),G=K.get(ne),J=(G==null?void 0:G.get(re))??"";for(const se in B.match)F.add(se);return{...B,text:J}}),await ve(),C)return;await new Promise(B=>{var ne;(ne=L.value)==null||ne.unmark({done:()=>{var re;(re=L.value)==null||re.markRegExp(E(F),{done:B})}})});const V=((te=n.value)==null?void 0:te.querySelectorAll(".result .excerpt"))??[];for(const B of V)(we=B.querySelector('mark[data-markjs="true"]'))==null||we.scrollIntoView({block:"center"});(Ye=(Qe=r.value)==null?void 0:Qe.firstElementChild)==null||Ye.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function H(v){const d=nn(v.slice(0,v.indexOf("#")));try{if(!d)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(d)}}catch(x){return console.error(x),{id:v,mod:{}}}}const W=he(),j=be(()=>{var v;return((v=p.value)==null?void 0:v.length)<=0});function $(v=!0){var d,x;(d=W.value)==null||d.focus(),v&&((x=W.value)==null||x.select())}Le(()=>{$()});function Ce(v){v.pointerType==="mouse"&&$()}const M=he(-1),Z=he(!0);Be(y,v=>{M.value=v.length?0:-1,X()});function X(){ve(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}xe("ArrowUp",v=>{v.preventDefault(),M.value--,M.value<0&&(M.value=y.value.length-1),Z.value=!0,X()}),xe("ArrowDown",v=>{v.preventDefault(),M.value++,M.value>=y.value.length&&(M.value=0),Z.value=!0,X()});const ee=Wt();xe("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const d=y.value[M.value];if(v.target instanceof HTMLInputElement&&!d){v.preventDefault();return}d&&(ee.go(d.id),t("close"))}),xe("Escape",()=>{t("close")});const u=on({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Le(()=>{window.history.pushState(null,"",null)}),Kt("popstate",v=>{v.preventDefault(),t("close")});const f=Jt(qt?document.body:null);Le(()=>{ve(()=>{f.value=!0,ve().then(()=>o())})}),Ut(()=>{f.value=!1});function g(){p.value="",ve().then(()=>$(!1))}function E(v){return new RegExp([...v].sort((d,x)=>x.length-d.length).map(d=>`(${rn(d)})`).join("|"),"gi")}function _(v){var R;if(!Z.value)return;const d=(R=v.target)==null?void 0:R.closest(".result"),x=Number.parseInt(d==null?void 0:d.dataset.index);x>=0&&x!==M.value&&(M.value=x),Z.value=!1}return(v,d)=>{var x,R,A,C,D;return q(),Ht(Xt,{to:"body"},[T("div",{ref_key:"el",ref:n,role:"button","aria-owns":(x=y.value)!=null&&x.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[T("div",{class:"backdrop",onClick:d[0]||(d[0]=F=>v.$emit("close"))}),T("div",er,[T("form",{class:"search-bar",onPointerup:d[4]||(d[4]=F=>Ce(F)),onSubmit:d[5]||(d[5]=Gt(()=>{},["prevent"]))},[T("label",{title:k.value,id:"localsearch-label",for:"localsearch-input"},[...d[7]||(d[7]=[T("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)])],8,tr),T("div",nr,[T("button",{class:"back-button",title:P(u)("modal.backButtonTitle"),onClick:d[1]||(d[1]=F=>v.$emit("close"))},[...d[8]||(d[8]=[T("span",{class:"vpi-arrow-left local-search-icon"},null,-1)])],8,rr)]),Qt(T("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":d[2]||(d[2]=F=>Zt(p)?p.value=F:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(R=y.value)!=null&&R.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:k.value,spellcheck:"false",type:"search"},null,8,sr),[[Yt,P(p)]]),T("div",ir,[w.value?_e("",!0):(q(),Q("button",{key:0,class:st(["toggle-layout-button",{"detailed-list":P(b)}]),type:"button",title:P(u)("modal.displayDetails"),onClick:d[3]||(d[3]=F=>M.value>-1&&(b.value=!P(b)))},[...d[9]||(d[9]=[T("span",{class:"vpi-layout-list local-search-icon"},null,-1)])],10,ar)),T("button",{class:"clear-button",type:"reset",disabled:j.value,title:P(u)("modal.resetButtonTitle"),onClick:g},[...d[10]||(d[10]=[T("span",{class:"vpi-delete local-search-icon"},null,-1)])],8,or)])],32),T("ul",{ref_key:"resultsEl",ref:r,id:(A=y.value)!=null&&A.length?"localsearch-list":void 0,role:(C=y.value)!=null&&C.length?"listbox":void 0,"aria-labelledby":(D=y.value)!=null&&D.length?"localsearch-label":void 0,class:"results",onMousemove:_},[(q(!0),Q(at,null,it(y.value,(F,V)=>(q(),Q("li",{key:F.id,id:"localsearch-item-"+V,"aria-selected":M.value===V?"true":"false",role:"option"},[T("a",{href:F.id,class:st(["result",{selected:M.value===V}]),"aria-label":[...F.titles,F.title].join(" > "),onMouseenter:te=>!Z.value&&(M.value=V),onFocusin:te=>M.value=V,onClick:d[6]||(d[6]=te=>v.$emit("close")),"data-index":V},[T("div",null,[T("div",dr,[d[12]||(d[12]=T("span",{class:"title-icon"},"#",-1)),(q(!0),Q(at,null,it(F.titles,(te,we)=>(q(),Q("span",{key:we,class:"title"},[T("span",{class:"text",innerHTML:te},null,8,fr),d[11]||(d[11]=T("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),T("span",hr,[T("span",{class:"text",innerHTML:F.title},null,8,vr)])]),P(b)?(q(),Q("div",pr,[F.text?(q(),Q("div",mr,[T("div",{class:"vp-doc",innerHTML:F.text},null,8,gr)])):_e("",!0),d[13]||(d[13]=T("div",{class:"excerpt-gradient-bottom"},null,-1)),d[14]||(d[14]=T("div",{class:"excerpt-gradient-top"},null,-1))])):_e("",!0)])],42,ur)],8,cr))),128)),P(p)&&!y.value.length&&O.value?(q(),Q("li",br,[pe(me(P(u)("modal.noResultsText"))+' "',1),T("strong",null,me(P(p)),1),d[15]||(d[15]=pe('" ',-1))])):_e("",!0)],40,lr),T("div",yr,[T("span",null,[T("kbd",{"aria-label":P(u)("modal.footer.navigateUpKeyAriaLabel")},[...d[16]||(d[16]=[T("span",{class:"vpi-arrow-up navigate-icon"},null,-1)])],8,wr),T("kbd",{"aria-label":P(u)("modal.footer.navigateDownKeyAriaLabel")},[...d[17]||(d[17]=[T("span",{class:"vpi-arrow-down navigate-icon"},null,-1)])],8,Sr),pe(" "+me(P(u)("modal.footer.navigateText")),1)]),T("span",null,[T("kbd",{"aria-label":P(u)("modal.footer.selectKeyAriaLabel")},[...d[18]||(d[18]=[T("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)])],8,xr),pe(" "+me(P(u)("modal.footer.selectText")),1)]),T("span",null,[T("kbd",{"aria-label":P(u)("modal.footer.closeKeyAriaLabel")},"esc",8,_r),pe(" "+me(P(u)("modal.footer.closeText")),1)])])])],8,Xn)])}}}),Rr=sn(Tr,[["__scopeId","data-v-ce626c7c"]]);export{Rr as default}; diff --git a/docs/assets/chunks/framework.jUmBZPH5.js b/docs/assets/chunks/framework.jUmBZPH5.js deleted file mode 100644 index 54dd35256..000000000 --- a/docs/assets/chunks/framework.jUmBZPH5.js +++ /dev/null @@ -1,19 +0,0 @@ -/** -* @vue/shared v3.5.27 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Us(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const te={},Lt=[],Be=()=>{},gi=()=>!1,ln=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Bs=e=>e.startsWith("onUpdate:"),ue=Object.assign,Ks=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},rl=Object.prototype.hasOwnProperty,Q=(e,t)=>rl.call(e,t),K=Array.isArray,It=e=>Wn(e)==="[object Map]",mi=e=>Wn(e)==="[object Set]",q=e=>typeof e=="function",le=e=>typeof e=="string",tt=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",vi=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),yi=Object.prototype.toString,Wn=e=>yi.call(e),il=e=>Wn(e).slice(8,-1),_i=e=>Wn(e)==="[object Object]",Un=e=>le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,yt=Us(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ol=/-\w/g,Ie=Bn(e=>e.replace(ol,t=>t.slice(1).toUpperCase())),ll=/\B([A-Z])/g,ut=Bn(e=>e.replace(ll,"-$1").toLowerCase()),Kn=Bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Cn=Bn(e=>e?`on${Kn(e)}`:""),lt=(e,t)=>!Object.is(e,t),An=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},qs=e=>{const t=parseFloat(e);return isNaN(t)?e:t},cl=e=>{const t=le(e)?Number(e):NaN;return isNaN(t)?e:t};let vr;const qn=()=>vr||(vr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Gs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(fl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Xs(e){let t="";if(le(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),gl=e=>le(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===yi||!q(e.toString))?Si(e)?gl(e.value):JSON.stringify(e,Ti,2):String(e),Ti=(e,t)=>Si(t)?Ti(e,t.value):It(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ls(s,i)+" =>"]=r,n),{})}:mi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ls(n))}:tt(t)?ls(t):ne(t)&&!K(t)&&!_i(t)?String(t):t,ls=(e,t="")=>{var n;return tt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.27 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let me;class ml{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=me,!t&&me&&(this.index=(me.scopes||(me.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(me=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(qt){let t=qt;for(qt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Kt;){let t=Kt;for(Kt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ri(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Mi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),zs(s),yl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ms(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Oi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Oi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Qt)||(e.globalVersion=Qt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ms(e))))return;e.flags|=2;const t=e.dep,n=re,s=Fe;re=e,Fe=!0;try{Ri(e);const r=e.fn(e._value);(t.version===0||lt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{re=n,Fe=s,Mi(e),e.flags&=-3}}function zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function yl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Pi=[];function ze(){Pi.push(Fe),Fe=!1}function Qe(){const e=Pi.pop();Fe=e===void 0?!0:e}function yr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=re;re=void 0;try{t()}finally{re=n}}}let Qt=0;class _l{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Gn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!re||!Fe||re===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==re)n=this.activeLink=new _l(re,this),re.deps?(n.prevDep=re.depsTail,re.depsTail.nextDep=n,re.depsTail=n):re.deps=re.depsTail=n,Li(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=re.depsTail,n.nextDep=void 0,re.depsTail.nextDep=n,re.depsTail=n,re.deps===n&&(re.deps=s)}return n}trigger(t){this.version++,Qt++,this.notify(t)}notify(t){Ys();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Js()}}}function Li(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Li(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const In=new WeakMap,_t=Symbol(""),Os=Symbol(""),Zt=Symbol("");function ye(e,t,n){if(Fe&&re){let s=In.get(e);s||In.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Gn),r.map=s,r.key=n),r.track()}}function Ye(e,t,n,s,r,i){const o=In.get(e);if(!o){Qt++;return}const l=c=>{c&&c.trigger()};if(Ys(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&Un(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,m)=>{(m==="length"||m===Zt||!tt(m)&&m>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(Zt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"delete":c||(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"set":It(e)&&l(o.get(_t));break}}Js()}function bl(e,t){const n=In.get(e);return n&&n.get(t)}function At(e){const t=z(e);return t===e?t:(ye(t,"iterate",Zt),Re(e)?t:t.map(De))}function Xn(e){return ye(e=z(e),"iterate",Zt),e}function rt(e,t){return Ze(e)?Dt(ct(e)?De(t):t):De(t)}const wl={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,e=>rt(this,e))},concat(...e){return At(this).concat(...e.map(t=>K(t)?At(t):t))},entries(){return as(this,"entries",e=>(e[1]=rt(this,e[1]),e))},every(e,t){return Ke(this,"every",e,t,void 0,arguments)},filter(e,t){return Ke(this,"filter",e,t,n=>n.map(s=>rt(this,s)),arguments)},find(e,t){return Ke(this,"find",e,t,n=>rt(this,n),arguments)},findIndex(e,t){return Ke(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ke(this,"findLast",e,t,n=>rt(this,n),arguments)},findLastIndex(e,t){return Ke(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ke(this,"forEach",e,t,void 0,arguments)},includes(...e){return fs(this,"includes",e)},indexOf(...e){return fs(this,"indexOf",e)},join(e){return At(this).join(e)},lastIndexOf(...e){return fs(this,"lastIndexOf",e)},map(e,t){return Ke(this,"map",e,t,void 0,arguments)},pop(){return Wt(this,"pop")},push(...e){return Wt(this,"push",e)},reduce(e,...t){return _r(this,"reduce",e,t)},reduceRight(e,...t){return _r(this,"reduceRight",e,t)},shift(){return Wt(this,"shift")},some(e,t){return Ke(this,"some",e,t,void 0,arguments)},splice(...e){return Wt(this,"splice",e)},toReversed(){return At(this).toReversed()},toSorted(e){return At(this).toSorted(e)},toSpliced(...e){return At(this).toSpliced(...e)},unshift(...e){return Wt(this,"unshift",e)},values(){return as(this,"values",e=>rt(this,e))}};function as(e,t,n){const s=Xn(e),r=s[t]();return s!==e&&!Re(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Sl=Array.prototype;function Ke(e,t,n,s,r,i){const o=Xn(e),l=o!==e&&!Re(e),c=o[t];if(c!==Sl[t]){const d=c.apply(e,i);return l?De(d):d}let f=n;o!==e&&(l?f=function(d,m){return n.call(this,rt(e,d),m,e)}:n.length>2&&(f=function(d,m){return n.call(this,d,m,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function _r(e,t,n,s){const r=Xn(e);let i=n;return r!==e&&(Re(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,rt(e,l),c,e)}),r[t](i,...s)}function fs(e,t,n){const s=z(e);ye(s,"iterate",Zt);const r=s[t](...n);return(r===-1||r===!1)&&Yn(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Wt(e,t,n=[]){ze(),Ys();const s=z(e)[t].apply(e,n);return Js(),Qe(),s}const Tl=Us("__proto__,__v_isRef,__isVue"),Ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(tt));function xl(e){tt(e)||(e=String(e));const t=z(this);return ye(t,"has",e),t.hasOwnProperty(e)}class Ni{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Nl:$i:i?Di:Hi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=wl[n]))return c;if(n==="hasOwnProperty")return xl}const l=Reflect.get(t,n,ae(t)?t:s);if((tt(n)?Ii.has(n):Tl(n))||(r||ye(t,"get",n),i))return l;if(ae(l)){const c=o&&Un(n)?l:l.value;return r&&ne(c)?en(c):c}return ne(l)?r?en(l):Ht(l):l}}class Fi extends Ni{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=K(t)&&Un(n);if(!this._isShallow){const f=Ze(i);if(!Re(s)&&!Ze(s)&&(i=z(i),s=z(s)),!o&&ae(i)&&!ae(s))return f||(i.value=s),!0}const l=o?Number(n)e,pn=e=>Reflect.getPrototypeOf(e);function Ml(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=It(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ps:t?Dt:De;return!t&&ye(i,"iterate",c?Os:_t),ue(Object.create(f),{next(){const{value:d,done:m}=f.next();return m?{value:d,done:m}:{value:l?[a(d[0]),a(d[1])]:a(d),done:m}}})}}function gn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ol(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(lt(r,l)&&ye(o,"get",r),ye(o,"get",l));const{has:c}=pn(o),f=t?Ps:e?Dt:De;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ye(z(r),"iterate",_t),r.size},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(lt(r,l)&&ye(o,"has",r),ye(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),f=t?Ps:e?Dt:De;return!e&&ye(c,"iterate",_t),l.forEach((a,d)=>r.call(i,f(a),f(d),o))}};return ue(n,e?{add:gn("add"),set:gn("set"),delete:gn("delete"),clear:gn("clear")}:{add(r){!t&&!Re(r)&&!Ze(r)&&(r=z(r));const i=z(this);return pn(i).has.call(i,r)||(i.add(r),Ye(i,"add",r,r)),this},set(r,i){!t&&!Re(i)&&!Ze(i)&&(i=z(i));const o=z(this),{has:l,get:c}=pn(o);let f=l.call(o,r);f||(r=z(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?lt(i,a)&&Ye(o,"set",r,i):Ye(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=pn(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&Ye(i,"delete",r,void 0),f},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&Ye(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Ml(r,e,t)}),n}function Qs(e,t){const n=Ol(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const Pl={get:Qs(!1,!1)},Ll={get:Qs(!1,!0)},Il={get:Qs(!0,!1)};const Hi=new WeakMap,Di=new WeakMap,$i=new WeakMap,Nl=new WeakMap;function Fl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Hl(e){return e.__v_skip||!Object.isExtensible(e)?0:Fl(il(e))}function Ht(e){return Ze(e)?e:Zs(e,!1,Cl,Pl,Hi)}function Dl(e){return Zs(e,!1,Rl,Ll,Di)}function en(e){return Zs(e,!0,Al,Il,$i)}function Zs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Hl(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ct(e){return Ze(e)?ct(e.__v_raw):!!(e&&e.__v_isReactive)}function Ze(e){return!!(e&&e.__v_isReadonly)}function Re(e){return!!(e&&e.__v_isShallow)}function Yn(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Rn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&bi(e,"__v_skip",!0),e}const De=e=>ne(e)?Ht(e):e,Dt=e=>ne(e)?en(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function He(e){return ji(e,!1)}function xe(e){return ji(e,!0)}function ji(e,t){return ae(e)?e:new $l(e,t)}class $l{constructor(t,n){this.dep=new Gn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:De(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Re(t)||Ze(t);t=s?t:z(t),lt(t,n)&&(this._rawValue=t,this._value=s?t:De(t),this.dep.trigger())}}function Jn(e){return ae(e)?e.value:e}function ce(e){return q(e)?e():Jn(e)}const jl={get:(e,t,n)=>t==="__v_raw"?e:Jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Vi(e){return ct(e)?e:new Proxy(e,jl)}class Vl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Gn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function kl(e){return new Vl(e)}class Wl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=z(t);let r=!0,i=t;if(!K(t)||!Un(String(n)))do r=!Yn(i)||Re(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=Jn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ae(this._raw[this._key])){const n=this._object[this._key];if(ae(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return bl(this._raw,this._key)}}class Ul{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Bl(e,t,n){return ae(e)?e:q(e)?new Ul(e):ne(e)&&arguments.length>1?Kl(e,t,n):He(e)}function Kl(e,t,n){return new Wl(e,t,n)}class ql{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Gn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Qt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&re!==this)return Ai(this,!0),!0}get value(){const t=this.dep.track();return Oi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Gl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new ql(s,r,n)}const mn={},Nn=new WeakMap;let mt;function Xl(e,t=!1,n=mt){if(n){let s=Nn.get(n);s||Nn.set(n,s=[]),s.push(e)}}function Yl(e,t,n=te){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=g=>r?g:Re(g)||r===!1||r===0?Je(g,1):Je(g);let a,d,m,v,b=!1,_=!1;if(ae(e)?(d=()=>e.value,b=Re(e)):ct(e)?(d=()=>f(e),b=!0):K(e)?(_=!0,b=e.some(g=>ct(g)||Re(g)),d=()=>e.map(g=>{if(ae(g))return g.value;if(ct(g))return f(g);if(q(g))return c?c(g,2):g()})):q(e)?t?d=c?()=>c(e,2):e:d=()=>{if(m){ze();try{m()}finally{Qe()}}const g=mt;mt=a;try{return c?c(e,3,[v]):e(v)}finally{mt=g}}:d=Be,t&&r){const g=d,M=r===!0?1/0:r;d=()=>Je(g(),M)}const H=xi(),A=()=>{a.stop(),H&&H.active&&Ks(H.effects,a)};if(i&&t){const g=t;t=(...M)=>{g(...M),A()}}let $=_?new Array(e.length).fill(mn):mn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const M=a.run();if(r||b||(_?M.some((j,O)=>lt(j,$[O])):lt(M,$))){m&&m();const j=mt;mt=a;try{const O=[M,$===mn?void 0:_&&$[0]===mn?[]:$,v];$=M,c?c(t,3,O):t(...O)}finally{mt=j}}}else a.run()};return l&&l(p),a=new Ei(d),a.scheduler=o?()=>o(p,!1):p,v=g=>Xl(g,!1,a),m=a.onStop=()=>{const g=Nn.get(a);if(g){if(c)c(g,4);else for(const M of g)M();Nn.delete(a)}},t?s?p(!0):$=a.run():o?o(p.bind(null,!0),!0):a.run(),A.pause=a.pause.bind(a),A.resume=a.resume.bind(a),A.stop=A,A}function Je(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))Je(e.value,t,n);else if(K(e))for(let s=0;s{Je(s,t,n)});else if(_i(e)){for(const s in e)Je(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Je(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.27 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function cn(e,t,n,s){try{return s?e(...s):e()}catch(r){an(r,t,n)}}function $e(e,t,n,s){if(q(e)){const r=cn(e,t,n,s);return r&&vi(r)&&r.catch(i=>{an(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=tn(r);i=tn(n)?Se.push(e):Se.splice(zl(t),0,e),e.flags|=1,Wi()}}function Wi(){Fn||(Fn=ki.then(Ui))}function Ql(e){K(e)?Nt.push(...e):it&&e.id===-1?it.splice(Mt+1,0,e):e.flags&1||(Nt.push(e),e.flags|=1),Wi()}function br(e,t,n=We+1){for(;ntn(n)-tn(s));if(Nt.length=0,it){it.push(...t);return}for(it=t,Mt=0;Mte.id==null?e.flags&2?-1:1/0:e.id;function Ui(e){try{for(We=0;We{s._d&&Vn(-1);const i=Dn(t);let o;try{o=e(...r)}finally{Dn(i),s._d&&Vn(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function $f(e,t){if(pe===null)return e;const n=ns(pe),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&q(t)?t.call(s&&s.proxy):t}}function Ki(){return!!(Et()||St)}const tc=Symbol.for("v-scx"),nc=()=>bt(tc);function tr(e,t){return Qn(e,null,t)}function jf(e,t){return Qn(e,null,{flush:"post"})}function Le(e,t,n){return Qn(e,t,n)}function Qn(e,t,n=te){const{immediate:s,deep:r,flush:i,once:o}=n,l=ue({},n),c=t&&s||!t&&i!=="post";let f;if($t){if(i==="sync"){const v=nc();f=v.__watcherHandles||(v.__watcherHandles=[])}else if(!c){const v=()=>{};return v.stop=Be,v.resume=Be,v.pause=Be,v}}const a=he;l.call=(v,b,_)=>$e(v,a,b,_);let d=!1;i==="post"?l.scheduler=v=>{we(v,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(v,b)=>{b?v():er(v)}),l.augmentJob=v=>{t&&(v.flags|=4),d&&(v.flags|=2,a&&(v.id=a.uid,v.i=a))};const m=Yl(e,t,l);return $t&&(f?f.push(m):c&&m()),m}function sc(e,t,n){const s=this.proxy,r=le(e)?e.includes(".")?qi(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=un(this),l=Qn(r,i.bind(s),n);return o(),l}function qi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Gt=e=>e&&(e.disabled||e.disabled===""),wr=e=>e&&(e.defer||e.defer===""),Sr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Tr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ls=(e,t)=>{const n=e&&e.to;return le(n)?t?t(n):null:n},Yi={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:d,pbc:m,o:{insert:v,querySelector:b,createText:_,createComment:H}}=f,A=Gt(t.props);let{shapeFlag:$,children:p,dynamicChildren:g}=t;if(e==null){const M=t.el=_(""),j=t.anchor=_("");v(M,n,s),v(j,n,s);const O=(E,P)=>{$&16&&a(p,E,P,r,i,o,l,c)},k=()=>{const E=t.target=Ls(t.props,b),P=Ji(E,t,_,v);E&&(o!=="svg"&&Sr(E)?o="svg":o!=="mathml"&&Tr(E)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(E),A||(O(E,P),Mn(t,!1)))};A&&(O(n,j),Mn(t,!0)),wr(t.props)?(t.el.__isMounted=!1,we(()=>{k(),delete t.el.__isMounted},i)):k()}else{if(wr(t.props)&&e.el.__isMounted===!1){we(()=>{Yi.process(e,t,n,s,r,i,o,l,c,f)},i);return}t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,j=t.target=e.target,O=t.targetAnchor=e.targetAnchor,k=Gt(e.props),E=k?n:j,P=k?M:O;if(o==="svg"||Sr(j)?o="svg":(o==="mathml"||Tr(j))&&(o="mathml"),g?(m(e.dynamicChildren,g,E,r,i,o,l),or(e,t,!0)):c||d(e,t,E,P,r,i,o,l,!1),A)k?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):vn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=t.target=Ls(t.props,b);R&&vn(t,R,null,f,0)}else k&&vn(t,j,O,f,1);Mn(t,A)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:d,props:m}=e;if(d&&(r(f),r(a)),i&&r(c),o&16){const v=i||!Gt(m);for(let b=0;b{e.isMounted=!0}),so(()=>{e.isUnmounting=!0}),e}const Me=[Function,Array],zi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Me,onEnter:Me,onAfterEnter:Me,onEnterCancelled:Me,onBeforeLeave:Me,onLeave:Me,onAfterLeave:Me,onLeaveCancelled:Me,onBeforeAppear:Me,onAppear:Me,onAfterAppear:Me,onAppearCancelled:Me},Qi=e=>{const t=e.subTree;return t.component?Qi(t.component):t},oc={name:"BaseTransition",props:zi,setup(e,{slots:t}){const n=Et(),s=ic();return()=>{const r=t.default&&to(t.default(),!0);if(!r||!r.length)return;const i=Zi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return us(i);const c=xr(i);if(!c)return us(i);let f=Is(c,o,s,n,d=>f=d);c.type!==de&&nn(c,f);let a=n.subTree&&xr(n.subTree);if(a&&a.type!==de&&!vt(a,c)&&Qi(n).type!==de){let d=Is(a,o,s,n);if(nn(a,d),l==="out-in"&&c.type!==de)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},us(i);l==="in-out"&&c.type!==de?d.delayLeave=(m,v,b)=>{const _=eo(s,a);_[String(a.key)]=a,m[Xe]=()=>{v(),m[Xe]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{b(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Zi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==de){t=n;break}}return t}const lc=oc;function eo(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Is(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:m,onLeave:v,onAfterLeave:b,onLeaveCancelled:_,onBeforeAppear:H,onAppear:A,onAfterAppear:$,onAppearCancelled:p}=t,g=String(e.key),M=eo(n,e),j=(E,P)=>{E&&$e(E,s,9,P)},O=(E,P)=>{const R=P[1];j(E,P),K(E)?E.every(w=>w.length<=1)&&R():E.length<=1&&R()},k={mode:o,persisted:l,beforeEnter(E){let P=c;if(!n.isMounted)if(i)P=H||c;else return;E[Xe]&&E[Xe](!0);const R=M[g];R&&vt(e,R)&&R.el[Xe]&&R.el[Xe](),j(P,[E])},enter(E){let P=f,R=a,w=d;if(!n.isMounted)if(i)P=A||f,R=$||a,w=p||d;else return;let F=!1;const Y=E[yn]=oe=>{F||(F=!0,oe?j(w,[E]):j(R,[E]),k.delayedLeave&&k.delayedLeave(),E[yn]=void 0)};P?O(P,[E,Y]):Y()},leave(E,P){const R=String(e.key);if(E[yn]&&E[yn](!0),n.isUnmounting)return P();j(m,[E]);let w=!1;const F=E[Xe]=Y=>{w||(w=!0,P(),Y?j(_,[E]):j(b,[E]),E[Xe]=void 0,M[R]===e&&delete M[R])};M[R]=e,v?O(v,[E,F]):F()},clone(E){const P=Is(E,t,n,s,r);return r&&r(P),P}};return k}function us(e){if(fn(e))return e=at(e),e.children=null,e}function xr(e){if(!fn(e))return Xi(e.type)&&e.children?Zi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,nn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function to(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iFt(b,t&&(K(t)?t[_]:t),n,s,r));return}if(wt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ft(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ns(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===te?l.refs={}:l.refs,d=l.setupState,m=z(d),v=d===te?gi:b=>Q(m,b);if(f!=null&&f!==c){if(Er(t),le(f))a[f]=null,v(f)&&(d[f]=null);else if(ae(f)){f.value=null;const b=t;b.k&&(a[b.k]=null)}}if(q(c))cn(c,l,12,[o,a]);else{const b=le(c),_=ae(c);if(b||_){const H=()=>{if(e.f){const A=b?v(c)?d[c]:a[c]:c.value;if(r)K(A)&&Ks(A,i);else if(K(A))A.includes(i)||A.push(i);else if(b)a[c]=[i],v(c)&&(d[c]=a[c]);else{const $=[i];c.value=$,e.k&&(a[e.k]=$)}}else b?(a[c]=o,v(c)&&(d[c]=o)):_&&(c.value=o,e.k&&(a[e.k]=o))};if(o){const A=()=>{H(),$n.delete(e)};A.id=-1,$n.set(e,A),we(A,n)}else Er(e),H()}}}function Er(e){const t=$n.get(e);t&&(t.flags|=8,$n.delete(e))}let Cr=!1;const Rt=()=>{Cr||(console.error("Hydration completed but contains mismatches."),Cr=!0)},cc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",ac=e=>e.namespaceURI.includes("MathML"),_n=e=>{if(e.nodeType===1){if(cc(e))return"svg";if(ac(e))return"mathml"}},Pt=e=>e.nodeType===8;function fc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Hn(),g._vnode=p;return}d(g.firstChild,p,null,null,null),Hn(),g._vnode=p},d=(p,g,M,j,O,k=!1)=>{k=k||!!g.dynamicChildren;const E=Pt(p)&&p.data==="[",P=()=>_(p,g,M,j,O,E),{type:R,ref:w,shapeFlag:F,patchFlag:Y}=g;let oe=p.nodeType;g.el=p,Y===-2&&(k=!1,g.dynamicChildren=null);let U=null;switch(R){case Tt:oe!==3?g.children===""?(c(g.el=r(""),o(p),p),U=p):U=P():(p.data!==g.children&&(Rt(),p.data=g.children),U=i(p));break;case de:$(p)?(U=i(p),A(g.el=p.content.firstChild,p,M)):oe!==8||E?U=P():U=i(p);break;case Yt:if(E&&(p=i(p),oe=p.nodeType),oe===1||oe===3){U=p;const X=!g.children.length;for(let V=0;V{k=k||!!g.dynamicChildren;const{type:E,props:P,patchFlag:R,shapeFlag:w,dirs:F,transition:Y}=g,oe=E==="input"||E==="option";if(oe||R!==-1){F&&Ue(g,null,M,"created");let U=!1;if($(p)){U=To(null,Y)&&M&&M.vnode.props&&M.vnode.props.appear;const V=p.content.firstChild;if(U){const ee=V.getAttribute("class");ee&&(V.$cls=ee),Y.beforeEnter(V)}A(V,p,M),g.el=p=V}if(w&16&&!(P&&(P.innerHTML||P.textContent))){let V=v(p.firstChild,g,p,M,j,O,k);for(;V;){bn(p,1)||Rt();const ee=V;V=V.nextSibling,l(ee)}}else if(w&8){let V=g.children;V[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1));const{textContent:ee}=p;ee!==V&&ee!==V.replace(/\r\n|\r/g,` -`)&&(bn(p,0)||Rt(),p.textContent=g.children)}if(P){if(oe||!k||R&48){const V=p.tagName.includes("-");for(const ee in P)(oe&&(ee.endsWith("value")||ee==="indeterminate")||ln(ee)&&!yt(ee)||ee[0]==="."||V&&!yt(ee))&&s(p,ee,null,P[ee],void 0,M)}else if(P.onClick)s(p,"onClick",null,P.onClick,void 0,M);else if(R&4&&ct(P.style))for(const V in P.style)P.style[V]}let X;(X=P&&P.onVnodeBeforeMount)&&Oe(X,M,g),F&&Ue(g,null,M,"beforeMount"),((X=P&&P.onVnodeMounted)||F||U)&&Ao(()=>{X&&Oe(X,M,g),U&&Y.enter(p),F&&Ue(g,null,M,"mounted")},j)}return p.nextSibling},v=(p,g,M,j,O,k,E)=>{E=E||!!g.dynamicChildren;const P=g.children,R=P.length;for(let w=0;w{const{slotScopeIds:E}=g;E&&(O=O?O.concat(E):E);const P=o(p),R=v(i(p),g,P,M,j,O,k);return R&&Pt(R)&&R.data==="]"?i(g.anchor=R):(Rt(),c(g.anchor=f("]"),P,R),R)},_=(p,g,M,j,O,k)=>{if(bn(p.parentElement,1)||Rt(),g.el=null,k){const R=H(p);for(;;){const w=i(p);if(w&&w!==R)l(w);else break}}const E=i(p),P=o(p);return l(p),n(null,g,P,E,M,j,_n(P),O),M&&(M.vnode.el=g.el,ho(M,g.el)),E},H=(p,g="[",M="]")=>{let j=0;for(;p;)if(p=i(p),p&&Pt(p)&&(p.data===g&&j++,p.data===M)){if(j===0)return i(p);j--}return p},A=(p,g,M)=>{const j=g.parentNode;j&&j.replaceChild(p,g);let O=M;for(;O;)O.vnode.el===g&&(O.vnode.el=O.subTree.el=p),O=O.parent},$=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const Ar="data-allow-mismatch",uc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function bn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Ar);)e=e.parentElement;const n=e&&e.getAttribute(Ar);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(uc[t])}}qn().requestIdleCallback;qn().cancelIdleCallback;function dc(e,t){if(Pt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Pt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const wt=e=>!!e.type.__asyncLoader;function kf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,d=0;const m=()=>(d++,f=null,v()),v=()=>{let b;return f||(b=f=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),c)return new Promise((H,A)=>{c(_,()=>H(m()),()=>A(_),d+1)});throw _}).then(_=>b!==f&&f?f:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),a=_,_)))};return nr({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(b,_,H){let A=!1;(_.bu||(_.bu=[])).push(()=>A=!0);const $=()=>{A||H()},p=i?()=>{const g=i($,M=>dc(b,M));g&&(_.bum||(_.bum=[])).push(g)}:$;a?p():v().then(()=>!_.isUnmounted&&p())},get __asyncResolved(){return a},setup(){const b=he;if(sr(b),a)return()=>wn(a,b);const _=p=>{f=null,an(p,b,13,!s)};if(l&&b.suspense||$t)return v().then(p=>()=>wn(p,b)).catch(p=>(_(p),()=>s?fe(s,{error:p}):null));const H=He(!1),A=He(),$=He(!!r);return r&&setTimeout(()=>{$.value=!1},r),o!=null&&setTimeout(()=>{if(!H.value&&!A.value){const p=new Error(`Async component timed out after ${o}ms.`);_(p),A.value=p}},o),v().then(()=>{H.value=!0,b.parent&&fn(b.parent.vnode)&&b.parent.update()}).catch(p=>{_(p),A.value=p}),()=>{if(H.value&&a)return wn(a,b);if(A.value&&s)return fe(s,{error:A.value});if(n&&!$.value)return wn(n,b)}}})}function wn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=fe(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const fn=e=>e.type.__isKeepAlive;function hc(e,t){no(e,"a",t)}function pc(e,t){no(e,"da",t)}function no(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Zn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)fn(r.parent.vnode)&&gc(s,t,n,r),r=r.parent}}function gc(e,t,n,s){const r=Zn(t,e,s,!0);es(()=>{Ks(s[t],r)},n)}function Zn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ze();const l=un(n),c=$e(t,n,e,o);return l(),Qe(),c});return s?r.unshift(i):r.push(i),i}}const nt=e=>(t,n=he)=>{(!$t||e==="sp")&&Zn(e,(...s)=>t(...s),n)},mc=nt("bm"),jt=nt("m"),vc=nt("bu"),yc=nt("u"),so=nt("bum"),es=nt("um"),_c=nt("sp"),bc=nt("rtg"),wc=nt("rtc");function Sc(e,t=he){Zn("ec",e,t)}const ro="components";function Wf(e,t){return oo(ro,e,!0,t)||e}const io=Symbol.for("v-ndc");function Uf(e){return le(e)?oo(ro,e,!1)||e:e||io}function oo(e,t,n=!0,s=!1){const r=pe||he;if(r){const i=r.type;{const l=sa(i,!1);if(l&&(l===t||l===Ie(t)||l===Kn(Ie(t))))return i}const o=Rr(r[e]||i[e],t)||Rr(r.appContext[e],t);return!o&&s?i:o}}function Rr(e,t){return e&&(e[t]||e[Ie(t)]||e[Kn(Ie(t))])}function Bf(e,t,n,s){let r;const i=n,o=K(e);if(o||le(e)){const l=o&&ct(e);let c=!1,f=!1;l&&(c=!Re(e),f=Ze(e),e=Xn(e)),r=new Array(e.length);for(let a=0,d=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;c0;return t!=="default"&&(n.name=t),$s(),js(_e,null,[fe("slot",n,s&&s())],f?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),$s();const o=i&&lo(i(n)),l=n.key||o&&o.key,c=js(_e,{key:(l&&!tt(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function lo(e){return e.some(t=>rn(t)?!(t.type===de||t.type===_e&&!lo(t.children)):!0)?e:null}function qf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:Cn(s)]=e[s];return n}const Ns=e=>e?Lo(e)?ns(e):Ns(e.parent):null,Xt=ue(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ns(e.parent),$root:e=>Ns(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ao(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=zn.bind(e.proxy)),$watch:e=>sc.bind(e)}),ds=(e,t)=>e!==te&&!e.__isScriptSetup&&Q(e,t),Tc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return o[t]=1,s[t];if(r!==te&&Q(r,t))return o[t]=2,r[t];if(Q(i,t))return o[t]=3,i[t];if(n!==te&&Q(n,t))return o[t]=4,n[t];Fs&&(o[t]=0)}}const f=Xt[t];let a,d;if(f)return t==="$attrs"&&ye(e.attrs,"get",""),f(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==te&&Q(n,t))return o[t]=4,n[t];if(d=c.config.globalProperties,Q(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ds(r,t)?(r[t]=n,!0):s!==te&&Q(s,t)?(s[t]=n,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==te&&l[0]!=="$"&&Q(e,l)||ds(t,l)||Q(i,l)||Q(s,l)||Q(Xt,l)||Q(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Gf(){return xc().slots}function xc(e){const t=Et();return t.setupContext||(t.setupContext=No(t))}function Mr(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Fs=!0;function Ec(e){const t=ao(e),n=e.proxy,s=e.ctx;Fs=!1,t.beforeCreate&&Or(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:d,mounted:m,beforeUpdate:v,updated:b,activated:_,deactivated:H,beforeDestroy:A,beforeUnmount:$,destroyed:p,unmounted:g,render:M,renderTracked:j,renderTriggered:O,errorCaptured:k,serverPrefetch:E,expose:P,inheritAttrs:R,components:w,directives:F,filters:Y}=t;if(f&&Cc(f,s,null),o)for(const X in o){const V=o[X];q(V)&&(s[X]=V.bind(n))}if(r){const X=r.call(n,n);ne(X)&&(e.data=Ht(X))}if(Fs=!0,i)for(const X in i){const V=i[X],ee=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):Be,dn=!q(V)&&q(V.set)?V.set.bind(n):Be,dt=ie({get:ee,set:dn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>dt.value,set:Ve=>dt.value=Ve})}if(l)for(const X in l)co(l[X],s,n,X);if(c){const X=q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{ec(V,X[V])})}a&&Or(a,e,"c");function U(X,V){K(V)?V.forEach(ee=>X(ee.bind(n))):V&&X(V.bind(n))}if(U(mc,d),U(jt,m),U(vc,v),U(yc,b),U(hc,_),U(pc,H),U(Sc,k),U(wc,j),U(bc,O),U(so,$),U(es,g),U(_c,E),K(P))if(P.length){const X=e.exposed||(e.exposed={});P.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:ee=>n[V]=ee,enumerable:!0})})}else e.exposed||(e.exposed={});M&&e.render===Be&&(e.render=M),R!=null&&(e.inheritAttrs=R),w&&(e.components=w),F&&(e.directives=F),E&&sr(e)}function Cc(e,t,n=Be){K(e)&&(e=Hs(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=bt(r.from||s,r.default,!0):i=bt(r.from||s):i=bt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Or(e,t,n){$e(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function co(e,t,n,s){let r=s.includes(".")?qi(n,s):()=>n[s];if(le(e)){const i=t[e];q(i)&&Le(r,i)}else if(q(e))Le(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>co(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Le(r,i,e)}}function ao(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>jn(c,f,o,!0)),jn(c,t,o)),ne(t)&&i.set(t,c),c}function jn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&jn(e,i,n,!0),r&&r.forEach(o=>jn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Ac[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Ac={data:Pr,props:Lr,emits:Lr,methods:Bt,computed:Bt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Bt,directives:Bt,watch:Mc,provide:Pr,inject:Rc};function Pr(e,t){return t?e?function(){return ue(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Rc(e,t){return Bt(Hs(e),Hs(t))}function Hs(e){if(K(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${ut(t)}Modifiers`];function Ic(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||te;let r=n;const i=t.startsWith("update:"),o=i&&Lc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>le(a)?a.trim():a)),o.number&&(r=n.map(qs)));let l,c=s[l=Cn(t)]||s[l=Cn(Ie(t))];!c&&i&&(c=s[l=Cn(ut(t))]),c&&$e(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,$e(f,e,6,r)}}const Nc=new WeakMap;function uo(e,t,n=!1){const s=n?Nc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=uo(f,t,!0);a&&(l=!0,ue(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):ue(o,i),ne(e)&&s.set(e,o),o)}function ts(e,t){return!e||!ln(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,ut(t))||Q(e,t))}function hs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:d,data:m,setupState:v,ctx:b,inheritAttrs:_}=e,H=Dn(e);let A,$;try{if(n.shapeFlag&4){const g=r||s,M=g;A=Pe(f.call(M,g,a,d,v,m,b)),$=l}else{const g=t;A=Pe(g.length>1?g(d,{attrs:l,slots:o,emit:c}):g(d,null)),$=t.props?l:Fc(l)}}catch(g){Jt.length=0,an(g,e,1),A=fe(de)}let p=A;if($&&_!==!1){const g=Object.keys($),{shapeFlag:M}=p;g.length&&M&7&&(i&&g.some(Bs)&&($=Hc($,i)),p=at(p,$,!1,!0))}return n.dirs&&(p=at(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&nn(p,n.transition),A=p,Dn(H),A}const Fc=e=>{let t;for(const n in e)(n==="class"||n==="style"||ln(n))&&((t||(t={}))[n]=e[n]);return t},Hc=(e,t)=>{const n={};for(const s in e)(!Bs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Dc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Ir(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;dObject.create(po),mo=e=>Object.getPrototypeOf(e)===po;function $c(e,t,n,s=!1){const r={},i=go();e.propsDefaults=Object.create(null),vo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Dl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function jc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[m,v]=yo(d,t,!0);ue(o,m),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Lt),Lt;if(K(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",ir=e=>K(e)?e.map(Pe):[Pe(e)],kc=(e,t,n)=>{if(t._n)return t;const s=Zl((...r)=>ir(t(...r)),n);return s._c=!1,s},_o=(e,t,n)=>{const s=e._ctx;for(const r in e){if(rr(r))continue;const i=e[r];if(q(i))t[r]=kc(r,i,s);else if(i!=null){const o=ir(i);t[r]=()=>o}}},bo=(e,t)=>{const n=ir(t);e.slots.default=()=>n},wo=(e,t,n)=>{for(const s in t)(n||!rr(s))&&(e[s]=t[s])},Wc=(e,t,n)=>{const s=e.slots=go();if(e.vnode.shapeFlag&32){const r=t._;r?(wo(s,t,n),n&&bi(s,"_",r,!0)):_o(t,s)}else t&&bo(e,t)},Uc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:wo(r,t,n):(i=!t.$stable,_o(t,r)),o=t}else t&&(bo(e,t),o={default:1});if(i)for(const l in r)!rr(l)&&o[l]==null&&delete r[l]},we=Ao;function Bc(e){return So(e)}function Kc(e){return So(e,fc)}function So(e,t){const n=qn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:d,nextSibling:m,setScopeId:v=Be,insertStaticContent:b}=e,_=(u,h,y,C=null,S=null,T=null,N=void 0,I=null,L=!!h.dynamicChildren)=>{if(u===h)return;u&&!vt(u,h)&&(C=hn(u),Ve(u,S,T,!0),u=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:x,ref:B,shapeFlag:D}=h;switch(x){case Tt:H(u,h,y,C);break;case de:A(u,h,y,C);break;case Yt:u==null&&$(h,y,C,N);break;case _e:w(u,h,y,C,S,T,N,I,L);break;default:D&1?M(u,h,y,C,S,T,N,I,L):D&6?F(u,h,y,C,S,T,N,I,L):(D&64||D&128)&&x.process(u,h,y,C,S,T,N,I,L,Ct)}B!=null&&S?Ft(B,u&&u.ref,T,h||u,!h):B==null&&u&&u.ref!=null&&Ft(u.ref,null,T,u,!0)},H=(u,h,y,C)=>{if(u==null)s(h.el=l(h.children),y,C);else{const S=h.el=u.el;h.children!==u.children&&f(S,h.children)}},A=(u,h,y,C)=>{u==null?s(h.el=c(h.children||""),y,C):h.el=u.el},$=(u,h,y,C)=>{[u.el,u.anchor]=b(u.children,h,y,C,u.el,u.anchor)},p=({el:u,anchor:h},y,C)=>{let S;for(;u&&u!==h;)S=m(u),s(u,y,C),u=S;s(h,y,C)},g=({el:u,anchor:h})=>{let y;for(;u&&u!==h;)y=m(u),r(u),u=y;r(h)},M=(u,h,y,C,S,T,N,I,L)=>{if(h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),u==null)j(h,y,C,S,T,N,I,L);else{const x=u.el&&u.el._isVueCE?u.el:null;try{x&&x._beginPatch(),E(u,h,S,T,N,I,L)}finally{x&&x._endPatch()}}},j=(u,h,y,C,S,T,N,I)=>{let L,x;const{props:B,shapeFlag:D,transition:W,dirs:G}=u;if(L=u.el=o(u.type,T,B&&B.is,B),D&8?a(L,u.children):D&16&&k(u.children,L,null,C,S,ps(u,T),N,I),G&&Ue(u,null,C,"created"),O(L,u,u.scopeId,N,C),B){for(const se in B)se!=="value"&&!yt(se)&&i(L,se,null,B[se],T,C);"value"in B&&i(L,"value",null,B.value,T),(x=B.onVnodeBeforeMount)&&Oe(x,C,u)}G&&Ue(u,null,C,"beforeMount");const J=To(S,W);J&&W.beforeEnter(L),s(L,h,y),((x=B&&B.onVnodeMounted)||J||G)&&we(()=>{x&&Oe(x,C,u),J&&W.enter(L),G&&Ue(u,null,C,"mounted")},S)},O=(u,h,y,C,S)=>{if(y&&v(u,y),C)for(let T=0;T{for(let x=L;x{const I=h.el=u.el;let{patchFlag:L,dynamicChildren:x,dirs:B}=h;L|=u.patchFlag&16;const D=u.props||te,W=h.props||te;let G;if(y&&ht(y,!1),(G=W.onVnodeBeforeUpdate)&&Oe(G,y,h,u),B&&Ue(h,u,y,"beforeUpdate"),y&&ht(y,!0),(D.innerHTML&&W.innerHTML==null||D.textContent&&W.textContent==null)&&a(I,""),x?P(u.dynamicChildren,x,I,y,C,ps(h,S),T):N||V(u,h,I,null,y,C,ps(h,S),T,!1),L>0){if(L&16)R(I,D,W,y,S);else if(L&2&&D.class!==W.class&&i(I,"class",null,W.class,S),L&4&&i(I,"style",D.style,W.style,S),L&8){const J=h.dynamicProps;for(let se=0;se{G&&Oe(G,y,h,u),B&&Ue(h,u,y,"updated")},C)},P=(u,h,y,C,S,T,N)=>{for(let I=0;I{if(h!==y){if(h!==te)for(const T in h)!yt(T)&&!(T in y)&&i(u,T,h[T],null,S,C);for(const T in y){if(yt(T))continue;const N=y[T],I=h[T];N!==I&&T!=="value"&&i(u,T,I,N,S,C)}"value"in y&&i(u,"value",h.value,y.value,S)}},w=(u,h,y,C,S,T,N,I,L)=>{const x=h.el=u?u.el:l(""),B=h.anchor=u?u.anchor:l("");let{patchFlag:D,dynamicChildren:W,slotScopeIds:G}=h;G&&(I=I?I.concat(G):G),u==null?(s(x,y,C),s(B,y,C),k(h.children||[],y,B,S,T,N,I,L)):D>0&&D&64&&W&&u.dynamicChildren&&u.dynamicChildren.length===W.length?(P(u.dynamicChildren,W,y,S,T,N,I),(h.key!=null||S&&h===S.subTree)&&or(u,h,!0)):V(u,h,y,B,S,T,N,I,L)},F=(u,h,y,C,S,T,N,I,L)=>{h.slotScopeIds=I,u==null?h.shapeFlag&512?S.ctx.activate(h,y,C,N,L):Y(h,y,C,S,T,N,L):oe(u,h,L)},Y=(u,h,y,C,S,T,N)=>{const I=u.component=Zc(u,C,S);if(fn(u)&&(I.ctx.renderer=Ct),ea(I,!1,N),I.asyncDep){if(S&&S.registerDep(I,U,N),!u.el){const L=I.subTree=fe(de);A(null,L,h,y),u.placeholder=L.el}}else U(I,u,h,y,S,T,N)},oe=(u,h,y)=>{const C=h.component=u.component;if(Dc(u,h,y))if(C.asyncDep&&!C.asyncResolved){X(C,h,y);return}else C.next=h,C.update();else h.el=u.el,C.vnode=h},U=(u,h,y,C,S,T,N)=>{const I=()=>{if(u.isMounted){let{next:D,bu:W,u:G,parent:J,vnode:se}=u;{const Ee=xo(u);if(Ee){D&&(D.el=se.el,X(u,D,N)),Ee.asyncDep.then(()=>{u.isUnmounted||I()});return}}let Z=D,Te;ht(u,!1),D?(D.el=se.el,X(u,D,N)):D=se,W&&An(W),(Te=D.props&&D.props.onVnodeBeforeUpdate)&&Oe(Te,J,D,se),ht(u,!0);const ge=hs(u),Ne=u.subTree;u.subTree=ge,_(Ne,ge,d(Ne.el),hn(Ne),u,S,T),D.el=ge.el,Z===null&&ho(u,ge.el),G&&we(G,S),(Te=D.props&&D.props.onVnodeUpdated)&&we(()=>Oe(Te,J,D,se),S)}else{let D;const{el:W,props:G}=h,{bm:J,m:se,parent:Z,root:Te,type:ge}=u,Ne=wt(h);if(ht(u,!1),J&&An(J),!Ne&&(D=G&&G.onVnodeBeforeMount)&&Oe(D,Z,h),ht(u,!0),W&&os){const Ee=()=>{u.subTree=hs(u),os(W,u.subTree,u,S,null)};Ne&&ge.__asyncHydrate?ge.__asyncHydrate(W,u,Ee):Ee()}else{Te.ce&&Te.ce._def.shadowRoot!==!1&&Te.ce._injectChildStyle(ge);const Ee=u.subTree=hs(u);_(null,Ee,y,C,u,S,T),h.el=Ee.el}if(se&&we(se,S),!Ne&&(D=G&&G.onVnodeMounted)){const Ee=h;we(()=>Oe(D,Z,Ee),S)}(h.shapeFlag&256||Z&&wt(Z.vnode)&&Z.vnode.shapeFlag&256)&&u.a&&we(u.a,S),u.isMounted=!0,h=y=C=null}};u.scope.on();const L=u.effect=new Ei(I);u.scope.off();const x=u.update=L.run.bind(L),B=u.job=L.runIfDirty.bind(L);B.i=u,B.id=u.uid,L.scheduler=()=>er(B),ht(u,!0),x()},X=(u,h,y)=>{h.component=u;const C=u.vnode.props;u.vnode=h,u.next=null,jc(u,h.props,C,y),Uc(u,h.children,y),ze(),br(u),Qe()},V=(u,h,y,C,S,T,N,I,L=!1)=>{const x=u&&u.children,B=u?u.shapeFlag:0,D=h.children,{patchFlag:W,shapeFlag:G}=h;if(W>0){if(W&128){dn(x,D,y,C,S,T,N,I,L);return}else if(W&256){ee(x,D,y,C,S,T,N,I,L);return}}G&8?(B&16&&Vt(x,S,T),D!==x&&a(y,D)):B&16?G&16?dn(x,D,y,C,S,T,N,I,L):Vt(x,S,T,!0):(B&8&&a(y,""),G&16&&k(D,y,C,S,T,N,I,L))},ee=(u,h,y,C,S,T,N,I,L)=>{u=u||Lt,h=h||Lt;const x=u.length,B=h.length,D=Math.min(x,B);let W;for(W=0;WB?Vt(u,S,T,!0,!1,D):k(h,y,C,S,T,N,I,L,D)},dn=(u,h,y,C,S,T,N,I,L)=>{let x=0;const B=h.length;let D=u.length-1,W=B-1;for(;x<=D&&x<=W;){const G=u[x],J=h[x]=L?ot(h[x]):Pe(h[x]);if(vt(G,J))_(G,J,y,null,S,T,N,I,L);else break;x++}for(;x<=D&&x<=W;){const G=u[D],J=h[W]=L?ot(h[W]):Pe(h[W]);if(vt(G,J))_(G,J,y,null,S,T,N,I,L);else break;D--,W--}if(x>D){if(x<=W){const G=W+1,J=GW)for(;x<=D;)Ve(u[x],S,T,!0),x++;else{const G=x,J=x,se=new Map;for(x=J;x<=W;x++){const Ce=h[x]=L?ot(h[x]):Pe(h[x]);Ce.key!=null&&se.set(Ce.key,x)}let Z,Te=0;const ge=W-J+1;let Ne=!1,Ee=0;const kt=new Array(ge);for(x=0;x=ge){Ve(Ce,S,T,!0);continue}let ke;if(Ce.key!=null)ke=se.get(Ce.key);else for(Z=J;Z<=W;Z++)if(kt[Z-J]===0&&vt(Ce,h[Z])){ke=Z;break}ke===void 0?Ve(Ce,S,T,!0):(kt[ke-J]=x+1,ke>=Ee?Ee=ke:Ne=!0,_(Ce,h[ke],y,null,S,T,N,I,L),Te++)}const pr=Ne?qc(kt):Lt;for(Z=pr.length-1,x=ge-1;x>=0;x--){const Ce=J+x,ke=h[Ce],gr=h[Ce+1],mr=Ce+1{const{el:T,type:N,transition:I,children:L,shapeFlag:x}=u;if(x&6){dt(u.component.subTree,h,y,C);return}if(x&128){u.suspense.move(h,y,C);return}if(x&64){N.move(u,h,y,Ct);return}if(N===_e){s(T,h,y);for(let D=0;DI.enter(T),S);else{const{leave:D,delayLeave:W,afterLeave:G}=I,J=()=>{u.ctx.isUnmounted?r(T):s(T,h,y)},se=()=>{T._isLeaving&&T[Xe](!0),D(T,()=>{J(),G&&G()})};W?W(T,J,se):se()}else s(T,h,y)},Ve=(u,h,y,C=!1,S=!1)=>{const{type:T,props:N,ref:I,children:L,dynamicChildren:x,shapeFlag:B,patchFlag:D,dirs:W,cacheIndex:G}=u;if(D===-2&&(S=!1),I!=null&&(ze(),Ft(I,null,y,u,!0),Qe()),G!=null&&(h.renderCache[G]=void 0),B&256){h.ctx.deactivate(u);return}const J=B&1&&W,se=!wt(u);let Z;if(se&&(Z=N&&N.onVnodeBeforeUnmount)&&Oe(Z,h,u),B&6)sl(u.component,y,C);else{if(B&128){u.suspense.unmount(y,C);return}J&&Ue(u,null,h,"beforeUnmount"),B&64?u.type.remove(u,h,y,Ct,C):x&&!x.hasOnce&&(T!==_e||D>0&&D&64)?Vt(x,h,y,!1,!0):(T===_e&&D&384||!S&&B&16)&&Vt(L,h,y),C&&dr(u)}(se&&(Z=N&&N.onVnodeUnmounted)||J)&&we(()=>{Z&&Oe(Z,h,u),J&&Ue(u,null,h,"unmounted")},y)},dr=u=>{const{type:h,el:y,anchor:C,transition:S}=u;if(h===_e){nl(y,C);return}if(h===Yt){g(u);return}const T=()=>{r(y),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(u.shapeFlag&1&&S&&!S.persisted){const{leave:N,delayLeave:I}=S,L=()=>N(y,T);I?I(u.el,T,L):L()}else T()},nl=(u,h)=>{let y;for(;u!==h;)y=m(u),r(u),u=y;r(h)},sl=(u,h,y)=>{const{bum:C,scope:S,job:T,subTree:N,um:I,m:L,a:x}=u;Fr(L),Fr(x),C&&An(C),S.stop(),T&&(T.flags|=8,Ve(N,u,h,y)),I&&we(I,h),we(()=>{u.isUnmounted=!0},h)},Vt=(u,h,y,C=!1,S=!1,T=0)=>{for(let N=T;N{if(u.shapeFlag&6)return hn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=m(u.anchor||u.el),y=h&&h[Gi];return y?m(y):h};let rs=!1;const hr=(u,h,y)=>{let C;u==null?h._vnode&&(Ve(h._vnode,null,null,!0),C=h._vnode.component):_(h._vnode||null,u,h,null,null,null,y),h._vnode=u,rs||(rs=!0,br(C),Hn(),rs=!1)},Ct={p:_,um:Ve,m:dt,r:dr,mt:Y,mc:k,pc:V,pbc:P,n:hn,o:e};let is,os;return t&&([is,os]=t(Ct)),{render:hr,hydrate:is,createApp:Pc(hr,is)}}function ps({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ht({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function To(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function or(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function xo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:xo(t)}function Fr(e){if(e)for(let t=0;te.__isSuspense;function Ao(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Ql(e)}const _e=Symbol.for("v-fgt"),Tt=Symbol.for("v-txt"),de=Symbol.for("v-cmt"),Yt=Symbol.for("v-stc"),Jt=[];let Ae=null;function $s(e=!1){Jt.push(Ae=e?null:[])}function Gc(){Jt.pop(),Ae=Jt[Jt.length-1]||null}let sn=1;function Vn(e,t=!1){sn+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function Ro(e){return e.dynamicChildren=sn>0?Ae||Lt:null,Gc(),sn>0&&Ae&&Ae.push(e),e}function Xf(e,t,n,s,r,i){return Ro(Oo(e,t,n,s,r,i,!0))}function js(e,t,n,s,r){return Ro(fe(e,t,n,s,r,!0))}function rn(e){return e?e.__v_isVNode===!0:!1}function vt(e,t){return e.type===t.type&&e.key===t.key}const Mo=({key:e})=>e??null,On=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?le(e)||ae(e)||q(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function Oo(e,t=null,n=null,s=0,r=null,i=e===_e?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Mo(t),ref:t&&On(t),scopeId:Bi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:pe};return l?(lr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=le(n)?8:16),sn>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const fe=Xc;function Xc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===io)&&(e=de),rn(e)){const l=at(e,t,!0);return n&&lr(l,n),sn>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(ra(e)&&(e=e.__vccOpts),t){t=Yc(t);let{class:l,style:c}=t;l&&!le(l)&&(t.class=Xs(l)),ne(c)&&(Yn(c)&&!K(c)&&(c=ue({},c)),t.style=Gs(c))}const o=le(e)?1:Co(e)?128:Xi(e)?64:ne(e)?4:q(e)?2:0;return Oo(e,t,n,s,r,o,i,!0)}function Yc(e){return e?Yn(e)||mo(e)?ue({},e):e:null}function at(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Jc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&Mo(f),ref:t&&t.ref?n&&i?K(i)?i.concat(On(t)):[i,On(t)]:On(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&at(e.ssContent),ssFallback:e.ssFallback&&at(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&nn(a,c.clone(a)),a}function Po(e=" ",t=0){return fe(Tt,null,e,t)}function Yf(e,t){const n=fe(Yt,null,e);return n.staticCount=t,n}function Jf(e="",t=!1){return t?($s(),js(de,null,e)):fe(de,null,e)}function Pe(e){return e==null||typeof e=="boolean"?fe(de):K(e)?fe(_e,null,e.slice()):rn(e)?ot(e):fe(Tt,null,String(e))}function ot(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:at(e)}function lr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),lr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!mo(t)?t._ctx=pe:r===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),s&64?(n=16,t=[Po(t)]):n=8);e.children=t,e.shapeFlag|=n}function Jc(...e){const t={};for(let n=0;nhe||pe;let kn,Vs;{const e=qn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};kn=t("__VUE_INSTANCE_SETTERS__",n=>he=n),Vs=t("__VUE_SSR_SETTERS__",n=>$t=n)}const un=e=>{const t=he;return kn(e),e.scope.on(),()=>{e.scope.off(),kn(t)}},Hr=()=>{he&&he.scope.off(),kn(null)};function Lo(e){return e.vnode.shapeFlag&4}let $t=!1;function ea(e,t=!1,n=!1){t&&Vs(t);const{props:s,children:r}=e.vnode,i=Lo(e);$c(e,s,i,t),Wc(e,r,n||t);const o=i?ta(e,t):void 0;return t&&Vs(!1),o}function ta(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Tc);const{setup:s}=n;if(s){ze();const r=e.setupContext=s.length>1?No(e):null,i=un(e),o=cn(s,e,0,[e.props,r]),l=vi(o);if(Qe(),i(),(l||e.sp)&&!wt(e)&&sr(e),l){if(o.then(Hr,Hr),t)return o.then(c=>{Dr(e,c)}).catch(c=>{an(c,e,0)});e.asyncDep=o}else Dr(e,o)}else Io(e)}function Dr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Vi(t)),Io(e)}function Io(e,t,n){const s=e.type;e.render||(e.render=s.render||Be);{const r=un(e);ze();try{Ec(e)}finally{Qe(),r()}}}const na={get(e,t){return ye(e,"get",""),e[t]}};function No(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,na),slots:e.slots,emit:e.emit,expose:t}}function ns(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vi(Rn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Xt)return Xt[n](e)},has(t,n){return n in t||n in Xt}})):e.proxy}function sa(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function ra(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Gl(e,t,$t);function ks(e,t,n){try{Vn(-1);const s=arguments.length;return s===2?ne(t)&&!K(t)?rn(t)?fe(e,null,[t]):fe(e,t):fe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&rn(n)&&(n=[n]),fe(e,t,n))}finally{Vn(1)}}const ia="3.5.27";/** -* @vue/runtime-dom v3.5.27 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ws;const $r=typeof window<"u"&&window.trustedTypes;if($r)try{Ws=$r.createPolicy("vue",{createHTML:e=>e})}catch{}const Fo=Ws?e=>Ws.createHTML(e):e=>e,oa="http://www.w3.org/2000/svg",la="http://www.w3.org/1998/Math/MathML",Ge=typeof document<"u"?document:null,jr=Ge&&Ge.createElement("template"),ca={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ge.createElementNS(oa,e):t==="mathml"?Ge.createElementNS(la,e):n?Ge.createElement(e,{is:n}):Ge.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ge.createTextNode(e),createComment:e=>Ge.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ge.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{jr.innerHTML=Fo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=jr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},st="transition",Ut="animation",on=Symbol("_vtc"),Ho={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},aa=ue({},zi,Ho),fa=e=>(e.displayName="Transition",e.props=aa,e),zf=fa((e,{slots:t})=>ks(lc,ua(e),t)),pt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Vr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function ua(e){const t={};for(const w in e)w in Ho||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,b=da(r),_=b&&b[0],H=b&&b[1],{onBeforeEnter:A,onEnter:$,onEnterCancelled:p,onLeave:g,onLeaveCancelled:M,onBeforeAppear:j=A,onAppear:O=$,onAppearCancelled:k=p}=t,E=(w,F,Y,oe)=>{w._enterCancelled=oe,gt(w,F?a:l),gt(w,F?f:o),Y&&Y()},P=(w,F)=>{w._isLeaving=!1,gt(w,d),gt(w,v),gt(w,m),F&&F()},R=w=>(F,Y)=>{const oe=w?O:$,U=()=>E(F,w,Y);pt(oe,[F,U]),kr(()=>{gt(F,w?c:i),qe(F,w?a:l),Vr(oe)||Wr(F,s,_,U)})};return ue(t,{onBeforeEnter(w){pt(A,[w]),qe(w,i),qe(w,o)},onBeforeAppear(w){pt(j,[w]),qe(w,c),qe(w,f)},onEnter:R(!1),onAppear:R(!0),onLeave(w,F){w._isLeaving=!0;const Y=()=>P(w,F);qe(w,d),w._enterCancelled?(qe(w,m),Kr(w)):(Kr(w),qe(w,m)),kr(()=>{w._isLeaving&&(gt(w,d),qe(w,v),Vr(g)||Wr(w,s,H,Y))}),pt(g,[w,Y])},onEnterCancelled(w){E(w,!1,void 0,!0),pt(p,[w])},onAppearCancelled(w){E(w,!0,void 0,!0),pt(k,[w])},onLeaveCancelled(w){P(w),pt(M,[w])}})}function da(e){if(e==null)return null;if(ne(e))return[gs(e.enter),gs(e.leave)];{const t=gs(e);return[t,t]}}function gs(e){return cl(e)}function qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[on]||(e[on]=new Set)).add(t)}function gt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[on];n&&(n.delete(t),n.size||(e[on]=void 0))}function kr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ha=0;function Wr(e,t,n,s){const r=e._endId=++ha,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=pa(e,t);if(!o)return s();const f=o+"end";let a=0;const d=()=>{e.removeEventListener(f,m),i()},m=v=>{v.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[b]||"").split(", "),r=s(`${st}Delay`),i=s(`${st}Duration`),o=Ur(r,i),l=s(`${Ut}Delay`),c=s(`${Ut}Duration`),f=Ur(l,c);let a=null,d=0,m=0;t===st?o>0&&(a=st,d=o,m=i.length):t===Ut?f>0&&(a=Ut,d=f,m=c.length):(d=Math.max(o,f),a=d>0?o>f?st:Ut:null,m=a?a===st?i.length:c.length:0);const v=a===st&&/\b(?:transform|all)(?:,|$)/.test(s(`${st}Property`).toString());return{type:a,timeout:d,propCount:m,hasTransform:v}}function Ur(e,t){for(;e.lengthBr(n)+Br(e[s])))}function Br(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Kr(e){return(e?e.ownerDocument:document).body.offsetHeight}function ga(e,t,n){const s=e[on];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const qr=Symbol("_vod"),ma=Symbol("_vsh"),va=Symbol(""),ya=/(?:^|;)\s*display\s*:/;function _a(e,t,n){const s=e.style,r=le(n);let i=!1;if(n&&!r){if(t)if(le(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Pn(s,l,"")}else for(const o in t)n[o]==null&&Pn(s,o,"");for(const o in n)o==="display"&&(i=!0),Pn(s,o,n[o])}else if(r){if(t!==n){const o=s[va];o&&(n+=";"+o),s.cssText=n,i=ya.test(n)}}else t&&e.removeAttribute("style");qr in e&&(e[qr]=i?s.display:"",e[ma]&&(s.display="none"))}const Gr=/\s*!important$/;function Pn(e,t,n){if(K(n))n.forEach(s=>Pn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ba(e,t);Gr.test(n)?e.setProperty(ut(s),n.replace(Gr,""),"important"):e[s]=n}}const Xr=["Webkit","Moz","ms"],ms={};function ba(e,t){const n=ms[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return ms[t]=s;s=Kn(s);for(let r=0;rvs||(xa.then(()=>vs=0),vs=Date.now());function Ca(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;$e(Aa(s,n.value),t,5,[s])};return n.value=e,n.attached=Ea(),n}function Aa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ga(e,s,o):t==="style"?_a(e,n,s):ln(t)?Bs(t)||Sa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ma(e,t,s,o))?(zr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Jr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!le(s))?zr(e,Ie(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Jr(e,t,s,o))};function Ma(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ei(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ei(t)&&le(n)?!1:t in e}const ti=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>An(t,n):t};function Oa(e){e.target.composing=!0}function ni(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ys=Symbol("_assign");function si(e,t,n){return t&&(e=e.trim()),n&&(e=qs(e)),e}const Qf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[ys]=ti(r);const i=s||r.props&&r.props.type==="number";Ot(e,t?"change":"input",o=>{o.target.composing||e[ys](si(e.value,n,i))}),(n||i)&&Ot(e,"change",()=>{e.value=si(e.value,n,i)}),t||(Ot(e,"compositionstart",Oa),Ot(e,"compositionend",ni),Ot(e,"change",ni))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[ys]=ti(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?qs(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Pa=["ctrl","shift","alt","meta"],La={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pa.some(n=>e[`${n}Key`]&&!t.includes(n))},Zf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ut(r.key);if(t.some(o=>o===i||Ia[o]===i))return e(r)})},Do=ue({patchProp:Ra},ca);let zt,ri=!1;function Na(){return zt||(zt=Bc(Do))}function Fa(){return zt=ri?zt:Kc(Do),ri=!0,zt}const tu=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=jo(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,$o(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},nu=(...e)=>{const t=Fa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=jo(s);if(r)return n(r,!0,$o(r))},t};function $o(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function jo(e){return le(e)?document.querySelector(e):e}const Ha=window.__VP_SITE_DATA__;function Vo(e){return xi()?(vl(e),!0):!1}const _s=new WeakMap,Da=(...e)=>{var t;const n=e[0],s=(t=Et())==null?void 0:t.proxy;if(s==null&&!Ki())throw new Error("injectLocal must be called in setup");return s&&_s.has(s)&&n in _s.get(s)?_s.get(s)[n]:bt(...e)},ko=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const su=e=>e!=null,$a=Object.prototype.toString,ja=e=>$a.call(e)==="[object Object]",ft=()=>{},ii=Va();function Va(){var e,t;return ko&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function cr(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Wo=e=>e();function Uo(e,t={}){let n,s,r=ft;const i=c=>{clearTimeout(c),r(),r=ft};let o;return c=>{const f=ce(e),a=ce(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,m)=>{r=t.rejectOnCancel?m:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},f)})}}function ka(...e){let t=0,n,s=!0,r=ft,i,o,l,c,f;!ae(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[o,l=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=ft)};return m=>{const v=ce(o),b=Date.now()-t,_=()=>i=m();return a(),v<=0?(t=Date.now(),_()):(b>v&&(c||!s)?(t=Date.now(),_()):l&&(i=new Promise((H,A)=>{r=f?A:H,n=setTimeout(()=>{t=Date.now(),s=!0,H(_()),a()},Math.max(0,v-b))})),!c&&!n&&(n=setTimeout(()=>s=!0,v)),s=!1,i)}}function Wa(e=Wo,t={}){const{initialState:n="active"}=t,s=ar(n==="active");function r(){s.value=!1}function i(){s.value=!0}return{isActive:en(s),pause:r,resume:i,eventFilter:(...l)=>{s.value&&e(...l)}}}function oi(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Ua(e){return Et()}function bs(e){return Array.isArray(e)?e:[e]}function ar(...e){if(e.length!==1)return Bl(...e);const t=e[0];return typeof t=="function"?en(kl(()=>({get:t,set:ft}))):He(t)}function Ba(e,t=200,n={}){return cr(Uo(t,n),e)}function Ka(e,t=200,n=!1,s=!0,r=!1){return cr(ka(t,n,s,r),e)}function Bo(e,t,n={}){const{eventFilter:s=Wo,...r}=n;return Le(e,cr(s,t),r)}function qa(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:f}=Wa(s,{initialState:r});return{stop:Bo(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:f}}function ss(e,t=!0,n){Ua()?jt(e,n):t?e():zn(e)}function ru(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Bo(e,t,{...i,eventFilter:Uo(s,{maxWait:r})})}function Ga(e,t,n){return Le(e,t,{...n,immediate:!0})}function iu(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=ft}=s,c=xe(!r),f=o?xe(t):He(t);let a=0;return tr(async d=>{if(!c.value)return;a++;const m=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const b=await e(_=>{d(()=>{i&&(i.value=!1),v||_()})});m===a&&(f.value=b)}catch(b){l(b)}finally{i&&m===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const je=ko?window:void 0;function fr(e){var t;const n=ce(e);return(t=n==null?void 0:n.$el)!=null?t:n}function et(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,f,a)=>(l.addEventListener(c,f,a),()=>l.removeEventListener(c,f,a)),r=ie(()=>{const l=bs(ce(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Ga(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(f=>fr(f)))!=null?c:[je].filter(f=>f!=null),bs(ce(r.value?e[1]:e[0])),bs(Jn(r.value?e[2]:e[1])),ce(r.value?e[3]:e[2])]},([l,c,f,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const d=ja(a)?{...a}:a;t.push(...l.flatMap(m=>c.flatMap(v=>f.map(b=>s(m,v,b,d)))))},{flush:"post"}),o=()=>{i(),n()};return Vo(n),o}function Xa(){const e=xe(!1),t=Et();return t&&jt(()=>{e.value=!0},t),e}function Ya(e){const t=Xa();return ie(()=>(t.value,!!e()))}function Ja(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ou(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Ja(t);return et(r,i,a=>{a.repeat&&ce(l)||c(a)&&n(a)},o)}const za=Symbol("vueuse-ssr-width");function Qa(){const e=Ki()?Da(za,null):null;return typeof e=="number"?e:void 0}function Ko(e,t={}){const{window:n=je,ssrWidth:s=Qa()}=t,r=Ya(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=xe(typeof s=="number"),o=xe(),l=xe(!1),c=f=>{l.value=f.matches};return tr(()=>{if(i.value){i.value=!r.value;const f=ce(e).split(",");l.value=f.some(a=>{const d=a.includes("not all"),m=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),v=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let b=!!(m||v);return m&&b&&(b=s>=oi(m[1])),v&&b&&(b=s<=oi(v[1])),d?!b:b});return}r.value&&(o.value=n.matchMedia(ce(e)),l.value=o.value.matches)}),et(o,"change",c,{passive:!0}),ie(()=>l.value)}const Sn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Tn="__vueuse_ssr_handlers__",Za=ef();function ef(){return Tn in Sn||(Sn[Tn]=Sn[Tn]||{}),Sn[Tn]}function qo(e,t){return Za[e]||t}function Go(e){return Ko("(prefers-color-scheme: dark)",e)}function tf(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const nf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},li="vueuse-storage";function ur(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:d=je,eventFilter:m,onError:v=R=>{console.error(R)},initOnMounted:b}=s,_=(a?xe:He)(typeof t=="function"?t():t),H=ie(()=>ce(e));if(!n)try{n=qo("getDefaultStorage",()=>{var R;return(R=je)==null?void 0:R.localStorage})()}catch(R){v(R)}if(!n)return _;const A=ce(t),$=tf(A),p=(r=s.serializer)!=null?r:nf[$],{pause:g,resume:M}=qa(_,()=>O(_.value),{flush:i,deep:o,eventFilter:m});Le(H,()=>E(),{flush:i}),d&&l&&ss(()=>{n instanceof Storage?et(d,"storage",E,{passive:!0}):et(d,li,P),b&&E()}),b||E();function j(R,w){if(d){const F={key:H.value,oldValue:R,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",F):new CustomEvent(li,{detail:F}))}}function O(R){try{const w=n.getItem(H.value);if(R==null)j(w,null),n.removeItem(H.value);else{const F=p.write(R);w!==F&&(n.setItem(H.value,F),j(w,F))}}catch(w){v(w)}}function k(R){const w=R?R.newValue:n.getItem(H.value);if(w==null)return c&&A!=null&&n.setItem(H.value,p.write(A)),A;if(!R&&f){const F=p.read(w);return typeof f=="function"?f(F,A):$==="object"&&!Array.isArray(F)?{...A,...F}:F}else return typeof w!="string"?w:p.read(w)}function E(R){if(!(R&&R.storageArea!==n)){if(R&&R.key==null){_.value=A;return}if(!(R&&R.key!==H.value)){g();try{(R==null?void 0:R.newValue)!==p.write(_.value)&&(_.value=k(R))}catch(w){v(w)}finally{R?zn(M):M()}}}}function P(R){E(R.detail)}return _}const sf="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function rf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},m=Go({window:r}),v=ie(()=>m.value?"dark":"light"),b=c||(o==null?ar(s):ur(o,s,i,{window:r,listenToStorageChanges:l})),_=ie(()=>b.value==="auto"?v.value:b.value),H=qo("updateHTMLAttrs",(g,M,j)=>{const O=typeof g=="string"?r==null?void 0:r.document.querySelector(g):fr(g);if(!O)return;const k=new Set,E=new Set;let P=null;if(M==="class"){const w=j.split(/\s/g);Object.values(d).flatMap(F=>(F||"").split(/\s/g)).filter(Boolean).forEach(F=>{w.includes(F)?k.add(F):E.add(F)})}else P={key:M,value:j};if(k.size===0&&E.size===0&&P===null)return;let R;a&&(R=r.document.createElement("style"),R.appendChild(document.createTextNode(sf)),r.document.head.appendChild(R));for(const w of k)O.classList.add(w);for(const w of E)O.classList.remove(w);P&&O.setAttribute(P.key,P.value),a&&(r.getComputedStyle(R).opacity,document.head.removeChild(R))});function A(g){var M;H(t,n,(M=d[g])!=null?M:g)}function $(g){e.onChanged?e.onChanged(g,A):A(g)}Le(_,$,{flush:"post",immediate:!0}),ss(()=>$(_.value));const p=ie({get(){return f?b.value:_.value},set(g){b.value=g}});return Object.assign(p,{store:b,system:v,state:_})}function of(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=rf({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function ws(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const ci=1;function lf(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=ft,onScroll:i=ft,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:f=je,onError:a=O=>{console.error(O)}}=t,d=xe(0),m=xe(0),v=ie({get(){return d.value},set(O){_(O,void 0)}}),b=ie({get(){return m.value},set(O){_(void 0,O)}});function _(O,k){var E,P,R,w;if(!f)return;const F=ce(e);if(!F)return;(R=F instanceof Document?f.document.body:F)==null||R.scrollTo({top:(E=ce(k))!=null?E:b.value,left:(P=ce(O))!=null?P:v.value,behavior:ce(c)});const Y=((w=F==null?void 0:F.document)==null?void 0:w.documentElement)||(F==null?void 0:F.documentElement)||F;v!=null&&(d.value=Y.scrollLeft),b!=null&&(m.value=Y.scrollTop)}const H=xe(!1),A=Ht({left:!0,right:!1,top:!0,bottom:!1}),$=Ht({left:!1,right:!1,top:!1,bottom:!1}),p=O=>{H.value&&(H.value=!1,$.left=!1,$.right=!1,$.top=!1,$.bottom=!1,r(O))},g=Ba(p,n+s),M=O=>{var k;if(!f)return;const E=((k=O==null?void 0:O.document)==null?void 0:k.documentElement)||(O==null?void 0:O.documentElement)||fr(O),{display:P,flexDirection:R,direction:w}=getComputedStyle(E),F=w==="rtl"?-1:1,Y=E.scrollLeft;$.left=Yd.value;const oe=Math.abs(Y*F)<=(o.left||0),U=Math.abs(Y*F)+E.clientWidth>=E.scrollWidth-(o.right||0)-ci;P==="flex"&&R==="row-reverse"?(A.left=U,A.right=oe):(A.left=oe,A.right=U),d.value=Y;let X=E.scrollTop;O===f.document&&!X&&(X=f.document.body.scrollTop),$.top=Xm.value;const V=Math.abs(X)<=(o.top||0),ee=Math.abs(X)+E.clientHeight>=E.scrollHeight-(o.bottom||0)-ci;P==="flex"&&R==="column-reverse"?(A.top=ee,A.bottom=V):(A.top=V,A.bottom=ee),m.value=X},j=O=>{var k;if(!f)return;const E=(k=O.target.documentElement)!=null?k:O.target;M(E),H.value=!0,g(O),i(O)};return et(e,"scroll",n?Ka(j,n,!0,!1):j,l),ss(()=>{try{const O=ce(e);if(!O)return;M(O)}catch(O){a(O)}}),et(e,"scrollend",p,l),{x:v,y:b,isScrolling:H,arrivedState:A,directions:$,measure(){const O=ce(e);f&&O&&M(O)}}}function lu(e,t,n={}){const{window:s=je}=n;return ur(e,t,s==null?void 0:s.localStorage,n)}function Xo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Ss=new WeakMap;function cu(e,t=!1){const n=xe(t);let s=null,r="";Le(ar(e),l=>{const c=ws(ce(l));if(c){const f=c;if(Ss.get(f)||Ss.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ws(ce(e));!l||n.value||(ii&&(s=et(l,"touchmove",c=>{cf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ws(ce(e));!l||!n.value||(ii&&(s==null||s()),l.style.overflow=r,Ss.delete(l),n.value=!1)};return Vo(o),ie({get(){return n.value},set(l){l?i():o()}})}function au(e,t,n={}){const{window:s=je}=n;return ur(e,t,s==null?void 0:s.sessionStorage,n)}function fu(e={}){const{window:t=je,...n}=e;return lf(t,n)}function uu(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=xe(n),c=xe(s),f=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:m,scale:v}=t.visualViewport;l.value=Math.round(d*v),c.value=Math.round(m*v)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),ss(f);const a={passive:!0};if(et("resize",f,a),t&&o==="visual"&&t.visualViewport&&et(t.visualViewport,"resize",f,a),r){const d=Ko("(orientation: portrait)");Le(d,()=>f())}return{width:l,height:c}}const Ts={};var xs={};const Yo=/^(?:[a-z]+:|\/\/)/i,af="vitepress-theme-appearance",ff=/#.*$/,uf=/[?#].*$/,df=/(?:(^|\/)index)?\.(?:md|html)$/,ve=typeof document<"u",Jo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function hf(e,t,n=!1){if(t===void 0)return!1;if(e=ai(`/${e}`),n)return new RegExp(t).test(e);if(ai(t)!==e)return!1;const s=t.match(ff);return s?(ve?location.hash:"")===s[0]:!0}function ai(e){return decodeURI(e).replace(uf,"").replace(df,"$1")}function pf(e){return Yo.test(e)}function gf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!pf(n)&&hf(t,`/${n}/`,!0))||"root"}function mf(e,t){var s,r,i,o,l,c,f;const n=gf(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Qo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function zo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=vf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function vf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function yf(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Qo(e,t){return[...e.filter(n=>!yf(t,n)),...t]}const _f=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,bf=/^[a-z]:/i;function fi(e){const t=bf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(_f,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Es=new Set;function wf(e){if(Es.size===0){const n=typeof process=="object"&&(xs==null?void 0:xs.VITE_EXTRA_EXTENSIONS)||(Ts==null?void 0:Ts.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Es.add(s))}const t=e.split(".").pop();return t==null||!Es.has(t.toLowerCase())}function du(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Sf=Symbol(),xt=xe(Ha);function hu(e){const t=ie(()=>mf(xt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?He(!0):n==="force-auto"?Go():n?of({storageKey:af,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):He(!1),r=He(ve?location.hash:"");return ve&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Le(()=>e.data,()=>{r.value=ve?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>zo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function Tf(){const e=bt(Sf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function xf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ui(e){return Yo.test(e)||!e.startsWith("/")?e:xf(xt.value.base,e)}function Ef(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ve){const n="/docs/";t=fi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${fi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Ln=[];function pu(e){Ln.push(e),es(()=>{Ln=Ln.filter(t=>t!==e)})}function Cf(){let e=xt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=di(e,n);else if(Array.isArray(e))for(const s of e){const r=di(s,n);if(r){t=r;break}}return t}function di(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Af=Symbol(),Zo="http://a.com",Rf=()=>({path:"/",component:null,data:Jo});function gu(e,t){const n=Ht(Rf()),s={route:n,go:r};async function r(l=ve?location.href:"/"){var c,f;l=Cs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ve&&l!==Cs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(l)))}let i=null;async function o(l,c=0,f=!1){var m,v;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const a=new URL(l,Zo),d=i=a.pathname;try{let b=await e(d);if(!b)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:_,__pageData:H}=b;if(!_)throw new Error(`Invalid route component: ${_}`);await((v=s.onAfterPageLoad)==null?void 0:v.call(s,l)),n.path=ve?d:ui(d),n.component=Rn(_),n.data=Rn(H),ve&&zn(()=>{let A=xt.value.base+H.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!xt.value.cleanUrls&&!A.endsWith("/")&&(A+=".html"),A!==a.pathname&&(a.pathname=A,l=A+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let $=null;try{$=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if($){hi($,a.hash);return}}window.scrollTo(0,c)})}}catch(b){if(!/fetch|Page not found/.test(b.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(b),!f)try{const _=await fetch(xt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=ve?d:ui(d),n.component=t?Rn(t):null;const _=ve?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Jo,relativePath:_}}}}return ve&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:d,pathname:m,hash:v,search:b}=new URL(f,c.baseURI),_=new URL(location.href);d===_.origin&&wf(m)&&(l.preventDefault(),m===_.pathname&&b===_.search?(v!==_.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:_.href,newURL:a}))),v?hi(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var f;if(l.state===null)return;const c=Cs(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Mf(){const e=bt(Af);if(!e)throw new Error("useRouter() is called without provider.");return e}function el(){return Mf().route}function hi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Cf()+i;requestAnimationFrame(r)}}function Cs(e){const t=new URL(e,Zo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),xt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const xn=()=>Ln.forEach(e=>e()),mu=nr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=el(),{frontmatter:n,site:s}=Tf();return Le(n,xn,{deep:!0,flush:"post"}),()=>ks(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?ks(t.component,{onVnodeMounted:xn,onVnodeUpdated:xn,onVnodeUnmounted:xn}):"404 Page Not Found"])}}),vu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Of="modulepreload",Pf=function(e){return"/docs/"+e},pi={},yu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Pf(c),c in pi)return;pi[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=f?"stylesheet":Of,f||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),f)return new Promise((m,v)=>{d.addEventListener("load",m),d.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},_u=nr({setup(e,{slots:t}){const n=He(!1);return jt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function bu(){ve&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function wu(){if(ve){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Lf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Lf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Su(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=As(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(As);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};tr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=zo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):As(["meta",{name:"description",content:a}]),r(Qo(o.head,Nf(c)))})}function As([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function If(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Nf(e){return e.filter(t=>!If(t))}const Rs=new Set,tl=()=>document.createElement("link"),Ff=e=>{const t=tl();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Hf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let En;const Df=ve&&(En=tl())&&En.relList&&En.relList.supports&&En.relList.supports("prefetch")?Ff:Hf;function Tu(){if(!ve||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Rs.has(c)){Rs.add(c);const f=Ef(c);f&&Df(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Rs.add(l))})})};jt(s);const r=el();Le(()=>r.path,s),es(()=>{n&&n.disconnect()})}export{so as $,Cf as A,Bf as B,Wf as C,pu as D,fe as E,_e as F,xe as G,Uf as H,Yo as I,el as J,Jc as K,bt as L,uu as M,Gs as N,ou as O,zn as P,fu as Q,ve as R,en as S,zf as T,kf as U,yu as V,cu as W,ec as X,qf as Y,eu as Z,vu as _,Po as a,Zf as a0,Gf as a1,Yf as a2,Su as a3,Af as a4,hu as a5,Sf as a6,mu as a7,_u as a8,xt as a9,gu as aa,Ef as ab,nu as ac,Tu as ad,wu as ae,bu as af,ks as ag,Vo as ah,ce as ai,bs as aj,fr as ak,su as al,iu as am,au as an,lu as ao,ru as ap,Mf as aq,et as ar,$f as as,Qf as at,ae as au,Vf as av,Rn as aw,tu as ax,du as ay,js as b,Xf as c,nr as d,Jf as e,wf as f,ui as g,ie as h,pf as i,Oo as j,Jn as k,hf as l,Ko as m,Xs as n,$s as o,He as p,Le as q,Kf as r,tr as s,gl as t,Tf as u,jt as v,Zl as w,es as x,jf as y,yc as z}; diff --git a/docs/assets/chunks/markjs.l6TISjdC.js b/docs/assets/chunks/markjs.l6TISjdC.js new file mode 100644 index 000000000..3a5ca1c82 --- /dev/null +++ b/docs/assets/chunks/markjs.l6TISjdC.js @@ -0,0 +1 @@ +class u{constructor(e,t=!0,s=[],i=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=i}static matches(e,t){const s=typeof t=="string"?[t]:t,i=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(i){let a=!1;return s.every(r=>i.call(e,r)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const i=t.filter(a=>a.contains(s)).length>0;t.indexOf(s)===-1&&!i&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let i;try{const a=e.contentWindow;if(i=a.document,!a||!i)throw new Error("iframe inaccessible")}catch{s()}i&&t(i)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let i=!1,a=null;const r=()=>{if(!i){i=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",r),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",r),a=setTimeout(r,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,i=>{s++,this.waitForIframes(i.querySelector("html"),()=>{--s||t()})},i=>{i||t()})}forEachIframe(e,t,s,i=()=>{}){let a=e.querySelectorAll("iframe"),r=a.length,o=0;a=Array.prototype.slice.call(a);const n=()=>{--r<=0&&i(o)};r||n(),a.forEach(l=>{u.matches(l,this.exclude)?n():this.onIframeReady(l,h=>{t(l)&&(o++,s(h)),n()},n)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new u(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const i=e.compareDocumentPosition(s),a=Node.DOCUMENT_POSITION_PRECEDING;if(i&a)if(t!==null){const r=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(r&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,i){let a=!1,r=!1;return i.forEach((o,n)=>{o.val===s&&(a=n,r=o.handled)}),this.compareNodeIframe(e,t,s)?(a===!1&&!r?i.push({val:s,handled:!0}):a!==!1&&!r&&(i[a].handled=!0),!0):(a===!1&&i.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,i){e.forEach(a=>{a.handled||this.getIframeContents(a.val,r=>{this.createInstanceOnIframe(r).forEachNode(t,s,i)})})}iterateThroughNodes(e,t,s,i,a){const r=this.createIterator(t,e,i);let o=[],n=[],l,h,c=()=>({prevNode:h,node:l}=this.getIteratorNode(r),l);for(;c();)this.iframes&&this.forEachIframe(t,p=>this.checkIframeFilter(l,h,p,o),p=>{this.createInstanceOnIframe(p).forEachNode(e,f=>n.push(f),i)}),n.push(l);n.forEach(p=>{s(p)}),this.iframes&&this.handleOpenIframes(o,e,s,i),a()}forEachNode(e,t,s,i=()=>{}){const a=this.getContexts();let r=a.length;r||i(),a.forEach(o=>{const n=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--r<=0&&i()})};this.iframes?this.waitForIframes(o,n):n()})}}let m=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new u(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",i=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const r=t[a],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),n=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r);o!==""&&n!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(n)})`,`gm${s}`),i+`(${this.processSynomyms(o)}|${this.processSynomyms(n)})`+i))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,i)=>{let a=i.charAt(s+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let i=[];return e.split("").forEach(a=>{s.every(r=>{if(r.indexOf(a)!==-1){if(i.indexOf(r)>-1)return!1;e=e.replace(new RegExp(`[${r}]`,`gm${t}`),`[${r}]`),i.push(r)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,i=typeof s=="string"?s:s.value,a=typeof s=="string"?[]:s.limiters,r="";switch(a.forEach(o=>{r+=`|${this.escapeStr(o)}`}),i){case"partially":default:return`()(${e})`;case"complementary":return r="\\s"+(r||this.escapeStr(t)),`()([^${r}]*${e}[^${r}]*)`;case"exactly":return`(^|\\s${r})(${e})(?=$|\\s${r})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(i=>{i.trim()&&t.indexOf(i)===-1&&t.push(i)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,i)=>i.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((i,a)=>i.start-a.start).forEach(i=>{let{start:a,end:r,valid:o}=this.callNoMatchOnInvalidRanges(i,s);o&&(i.start=a,i.length=r-a,t.push(i),s=r)}),t}callNoMatchOnInvalidRanges(e,t){let s,i,a=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),i=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&i-t>0&&i-s>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:i,valid:a}}checkWhitespaceRanges(e,t,s){let i,a=!0,r=s.length,o=t-r,n=parseInt(e.start,10)-o;return n=n>r?r:n,i=n+parseInt(e.length,10),i>r&&(i=r,this.log(`End range automatically set to the max value of ${r}`)),n<0||i-n<0||n>r||i>r?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(n,i).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:i,valid:a}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,i=>{s.push({start:t.length,end:(t+=i.textContent).length,node:i})},i=>this.matchesExclude(i.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return u.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const i=this.opt.element?this.opt.element:"mark",a=e.splitText(t),r=a.splitText(s-t);let o=document.createElement(i);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=a.textContent,a.parentNode.replaceChild(o,a),r}wrapRangeInMappedTextNode(e,t,s,i,a){e.nodes.every((r,o)=>{const n=e.nodes[o+1];if(typeof n>"u"||n.start>t){if(!i(r.node))return!1;const l=t-r.start,h=(s>r.end?r.end:s)-r.start,c=e.value.substr(0,r.start),p=e.value.substr(h+r.start);if(r.node=this.wrapRangeInTextNode(r.node,l,h),e.value=c+p,e.nodes.forEach((f,d)=>{d>=o&&(e.nodes[d].start>0&&d!==o&&(e.nodes[d].start-=h),e.nodes[d].end-=h)}),s-=h,a(r.node.previousSibling,r.start),s>r.end)t=r.end;else return!1}return!0})}wrapMatches(e,t,s,i,a){const r=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(n=>{n=n.node;let l;for(;(l=e.exec(n.textContent))!==null&&l[r]!=="";){if(!s(l[r],n))continue;let h=l.index;if(r!==0)for(let c=1;c{let n;for(;(n=e.exec(o.value))!==null&&n[r]!=="";){let l=n.index;if(r!==0)for(let c=1;cs(n[r],c),(c,p)=>{e.lastIndex=p,i(c)})}a()})}wrapRangeFromIndex(e,t,s,i){this.getTextNodes(a=>{const r=a.value.length;e.forEach((o,n)=>{let{start:l,end:h,valid:c}=this.checkWhitespaceRanges(o,r,a.value);c&&this.wrapRangeInMappedTextNode(a,l,h,p=>t(p,o,a.value.substring(l,h),n),p=>{s(p,o)})}),i()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,i="wrapMatches";const a=r=>{s++,this.opt.each(r)};this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),this[i](e,this.opt.ignoreGroups,(r,o)=>this.opt.filter(o,r,s),a,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,i="wrapMatches";const{keywords:a,length:r}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",n=l=>{let h=new RegExp(this.createRegExp(l),`gm${o}`),c=0;this.log(`Searching with expression "${h}"`),this[i](h,1,(p,f)=>this.opt.filter(f,l,s,c),p=>{c++,s++,this.opt.each(p)},()=>{c===0&&this.opt.noMatch(l),a[r-1]===l?this.opt.done(s):n(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),r===0?this.opt.done(s):n(a[0])}markRanges(e,t){this.opt=t;let s=0,i=this.checkRanges(e);i&&i.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(i)),this.wrapRangeFromIndex(i,(a,r,o,n)=>this.opt.filter(a,r,o,n),(a,r)=>{s++,this.opt.each(a,r)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const i=u.matches(s,t),a=this.matchesExclude(s);return!i||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function E(g){const e=new m(g);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}export{E as M}; diff --git a/docs/assets/chunks/minisearch.DigTKvvb.js b/docs/assets/chunks/minisearch.DigTKvvb.js new file mode 100644 index 000000000..396eb5729 --- /dev/null +++ b/docs/assets/chunks/minisearch.DigTKvvb.js @@ -0,0 +1 @@ +const H="ENTRIES",B="KEYS",U="VALUES",p="";class O{constructor(t,e){const s=t._tree,n=Array.from(s.keys());this.set=t,this._type=e,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const t=this.dive();return this.backtrack(),t}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:t,keys:e}=S(this._path);if(S(e)===p)return{done:!1,value:this.result()};const s=t.get(S(e));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const t=S(this._path).keys;t.pop(),!(t.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:t})=>S(t)).filter(t=>t!==p).join("")}value(){return S(this._path).node.get(p)}result(){switch(this._type){case U:return this.value();case B:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const S=i=>i[i.length-1],X=(i,t,e)=>{const s=new Map;if(t===void 0)return s;const n=t.length+1,o=n+e,r=new Uint8Array(o*n).fill(e+1);for(let c=0;c{const d=o*r;t:for(const u of i.keys())if(u===p){const h=n[d-1];h<=e&&s.set(c,[i.get(u),h])}else{let h=o;for(let l=0;le)continue t}q(i.get(u),t,e,s,n,h,r,c+u)}};class y{constructor(t=new Map,e=""){this._size=void 0,this._tree=t,this._prefix=e}atPrefix(t){if(!t.startsWith(this._prefix))throw new Error("Mismatched prefix");const[e,s]=k(this._tree,t.slice(this._prefix.length));if(e===void 0){const[n,o]=W(s);for(const r of n.keys())if(r!==p&&r.startsWith(o)){const c=new Map;return c.set(r.slice(o.length),n.get(r)),new y(c,t)}}return new y(e,t)}clear(){this._size=void 0,this._tree.clear()}delete(t){return this._size=void 0,tt(this._tree,t)}entries(){return new O(this,H)}forEach(t){for(const[e,s]of this)t(e,s,this)}fuzzyGet(t,e){return X(this._tree,t,e)}get(t){const e=D(this._tree,t);return e!==void 0?e.get(p):void 0}has(t){const e=D(this._tree,t);return e!==void 0&&e.has(p)}keys(){return new O(this,B)}set(t,e){if(typeof t!="string")throw new Error("key must be a string");return this._size=void 0,L(this._tree,t).set(p,e),this}get size(){if(this._size)return this._size;this._size=0;const t=this.entries();for(;!t.next().done;)this._size+=1;return this._size}update(t,e){if(typeof t!="string")throw new Error("key must be a string");this._size=void 0;const s=L(this._tree,t);return s.set(p,e(s.get(p))),this}fetch(t,e){if(typeof t!="string")throw new Error("key must be a string");this._size=void 0;const s=L(this._tree,t);let n=s.get(p);return n===void 0&&s.set(p,n=e()),n}values(){return new O(this,U)}[Symbol.iterator](){return this.entries()}static from(t){const e=new y;for(const[s,n]of t)e.set(s,n);return e}static fromObject(t){return y.from(Object.entries(t))}}const k=(i,t,e=[])=>{if(t.length===0||i==null)return[i,e];for(const s of i.keys())if(s!==p&&t.startsWith(s))return e.push([i,s]),k(i.get(s),t.slice(s.length),e);return e.push([i,t]),k(void 0,"",e)},D=(i,t)=>{if(t.length===0||i==null)return i;for(const e of i.keys())if(e!==p&&t.startsWith(e))return D(i.get(e),t.slice(e.length))},L=(i,t)=>{const e=t.length;t:for(let s=0;i&&s{const[e,s]=k(i,t);if(e!==void 0){if(e.delete(p),e.size===0)K(s);else if(e.size===1){const[n,o]=e.entries().next().value;G(s,n,o)}}},K=i=>{if(i.length===0)return;const[t,e]=W(i);if(t.delete(e),t.size===0)K(i.slice(0,-1));else if(t.size===1){const[s,n]=t.entries().next().value;s!==p&&G(i.slice(0,-1),s,n)}},G=(i,t,e)=>{if(i.length===0)return;const[s,n]=W(i);s.set(n+t,e),s.delete(n)},W=i=>i[i.length-1],P="or",Y="and",et="and_not";class F{constructor(t){if((t==null?void 0:t.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const e=t.autoVacuum==null||t.autoVacuum===!0?A:t.autoVacuum;this._options={...E,...t,autoVacuum:e,searchOptions:{...R,...t.searchOptions||{}},autoSuggestOptions:{...rt,...t.autoSuggestOptions||{}}},this._index=new y,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=N,this.addFields(this._options.fields)}add(t){const{extractField:e,stringifyField:s,tokenize:n,processTerm:o,fields:r,idField:c}=this._options,d=e(t,c);if(d==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);if(this._idToShortId.has(d))throw new Error(`MiniSearch: duplicate ID ${d}`);const u=this.addDocumentId(d);this.saveStoredFields(u,t);for(const h of r){const l=e(t,h);if(l==null)continue;const a=n(s(l,h),h),f=this._fieldIds[h],_=new Set(a).size;this.addFieldLength(u,f,this._documentCount-1,_);for(const g of a){const m=o(g,h);if(Array.isArray(m))for(const w of m)this.addTerm(f,u,w);else m&&this.addTerm(f,u,m)}}}addAll(t){for(const e of t)this.add(e)}addAllAsync(t,e={}){const{chunkSize:s=10}=e,n={chunk:[],promise:Promise.resolve()},{chunk:o,promise:r}=t.reduce(({chunk:c,promise:d},u,h)=>(c.push(u),(h+1)%s===0?{chunk:[],promise:d.then(()=>new Promise(l=>setTimeout(l,0))).then(()=>this.addAll(c))}:{chunk:c,promise:d}),n);return r.then(()=>this.addAll(o))}remove(t){const{tokenize:e,processTerm:s,extractField:n,stringifyField:o,fields:r,idField:c}=this._options,d=n(t,c);if(d==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);const u=this._idToShortId.get(d);if(u==null)throw new Error(`MiniSearch: cannot remove document with ID ${d}: it is not in the index`);for(const h of r){const l=n(t,h);if(l==null)continue;const a=e(o(l,h),h),f=this._fieldIds[h],_=new Set(a).size;this.removeFieldLength(u,f,this._documentCount,_);for(const g of a){const m=s(g,h);if(Array.isArray(m))for(const w of m)this.removeTerm(f,u,w);else m&&this.removeTerm(f,u,m)}}this._storedFields.delete(u),this._documentIds.delete(u),this._idToShortId.delete(d),this._fieldLength.delete(u),this._documentCount-=1}removeAll(t){if(t)for(const e of t)this.remove(e);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new y,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(t){const e=this._idToShortId.get(t);if(e==null)throw new Error(`MiniSearch: cannot discard document with ID ${t}: it is not in the index`);this._idToShortId.delete(t),this._documentIds.delete(e),this._storedFields.delete(e),(this._fieldLength.get(e)||[]).forEach((s,n)=>{this.removeFieldLength(e,n,this._documentCount,s)}),this._fieldLength.delete(e),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:t,minDirtCount:e,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:e,minDirtFactor:t})}discardAll(t){const e=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of t)this.discard(s)}finally{this._options.autoVacuum=e}this.maybeAutoVacuum()}replace(t){const{idField:e,extractField:s}=this._options,n=s(t,e);this.discard(n),this.add(t)}vacuum(t={}){return this.conditionalVacuum(t)}conditionalVacuum(t,e){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&e,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=N,this.performVacuuming(t,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(e)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(t),this._currentVacuum)}async performVacuuming(t,e){const s=this._dirtCount;if(this.vacuumConditionsMet(e)){const n=t.batchSize||j.batchSize,o=t.batchWait||j.batchWait;let r=1;for(const[c,d]of this._index){for(const[u,h]of d)for(const[l]of h)this._documentIds.has(l)||(h.size<=1?d.delete(u):h.delete(l));this._index.get(c).size===0&&this._index.delete(c),r%n===0&&await new Promise(u=>setTimeout(u,o)),r+=1}this._dirtCount-=s}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(t){if(t==null)return!0;let{minDirtCount:e,minDirtFactor:s}=t;return e=e||A.minDirtCount,s=s||A.minDirtFactor,this.dirtCount>=e&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(t){return this._idToShortId.has(t)}getStoredFields(t){const e=this._idToShortId.get(t);if(e!=null)return this._storedFields.get(e)}search(t,e={}){const{searchOptions:s}=this._options,n={...s,...e},o=this.executeQuery(t,e),r=[];for(const[c,{score:d,terms:u,match:h}]of o){const l=u.length||1,a={id:this._documentIds.get(c),score:d*l,terms:Object.keys(h),queryTerms:u,match:h};Object.assign(a,this._storedFields.get(c)),(n.filter==null||n.filter(a))&&r.push(a)}return t===F.wildcard&&n.boostDocument==null||r.sort($),r}autoSuggest(t,e={}){e={...this._options.autoSuggestOptions,...e};const s=new Map;for(const{score:o,terms:r}of this.search(t,e)){const c=r.join(" "),d=s.get(c);d!=null?(d.score+=o,d.count+=1):s.set(c,{score:o,terms:r,count:1})}const n=[];for(const[o,{score:r,terms:c,count:d}]of s)n.push({suggestion:o,terms:c,score:r/d});return n.sort($),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(t,e){if(e==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(t),e)}static async loadJSONAsync(t,e){if(e==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(t),e)}static getDefault(t){if(E.hasOwnProperty(t))return T(E,t);throw new Error(`MiniSearch: unknown option "${t}"`)}static loadJS(t,e){const{index:s,documentIds:n,fieldLength:o,storedFields:r,serializationVersion:c}=t,d=this.instantiateMiniSearch(t,e);d._documentIds=b(n),d._fieldLength=b(o),d._storedFields=b(r);for(const[u,h]of d._documentIds)d._idToShortId.set(h,u);for(const[u,h]of s){const l=new Map;for(const a of Object.keys(h)){let f=h[a];c===1&&(f=f.ds),l.set(parseInt(a,10),b(f))}d._index.set(u,l)}return d}static async loadJSAsync(t,e){const{index:s,documentIds:n,fieldLength:o,storedFields:r,serializationVersion:c}=t,d=this.instantiateMiniSearch(t,e);d._documentIds=await M(n),d._fieldLength=await M(o),d._storedFields=await M(r);for(const[h,l]of d._documentIds)d._idToShortId.set(l,h);let u=0;for(const[h,l]of s){const a=new Map;for(const f of Object.keys(l)){let _=l[f];c===1&&(_=_.ds),a.set(parseInt(f,10),await M(_))}++u%1e3===0&&await Z(0),d._index.set(h,a)}return d}static instantiateMiniSearch(t,e){const{documentCount:s,nextId:n,fieldIds:o,averageFieldLength:r,dirtCount:c,serializationVersion:d}=t;if(d!==1&&d!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const u=new F(e);return u._documentCount=s,u._nextId=n,u._idToShortId=new Map,u._fieldIds=o,u._avgFieldLength=r,u._dirtCount=c||0,u._index=new y,u}executeQuery(t,e={}){if(t===F.wildcard)return this.executeWildcardQuery(e);if(typeof t!="string"){const a={...e,...t,queries:void 0},f=t.queries.map(_=>this.executeQuery(_,a));return this.combineResults(f,a.combineWith)}const{tokenize:s,processTerm:n,searchOptions:o}=this._options,r={tokenize:s,processTerm:n,...o,...e},{tokenize:c,processTerm:d}=r,l=c(t).flatMap(a=>d(a)).filter(a=>!!a).map(ot(r)).map(a=>this.executeQuerySpec(a,r));return this.combineResults(l,r.combineWith)}executeQuerySpec(t,e){const s={...this._options.searchOptions,...e},n=(s.fields||this._options.fields).reduce((g,m)=>({...g,[m]:T(s.boost,m)||1}),{}),{boostDocument:o,weights:r,maxFuzzy:c,bm25:d}=s,{fuzzy:u,prefix:h}={...R.weights,...r},l=this._index.get(t.term),a=this.termResults(t.term,t.term,1,t.termBoost,l,n,o,d);let f,_;if(t.prefix&&(f=this._index.atPrefix(t.term)),t.fuzzy){const g=t.fuzzy===!0?.2:t.fuzzy,m=g<1?Math.min(c,Math.round(t.term.length*g)):g;m&&(_=this._index.fuzzyGet(t.term,m))}if(f)for(const[g,m]of f){const w=g.length-t.term.length;if(!w)continue;_==null||_.delete(g);const z=h*g.length/(g.length+.3*w);this.termResults(t.term,g,z,t.termBoost,m,n,o,d,a)}if(_)for(const g of _.keys()){const[m,w]=_.get(g);if(!w)continue;const z=u*g.length/(g.length+w);this.termResults(t.term,g,z,t.termBoost,m,n,o,d,a)}return a}executeWildcardQuery(t){const e=new Map,s={...this._options.searchOptions,...t};for(const[n,o]of this._documentIds){const r=s.boostDocument?s.boostDocument(o,"",this._storedFields.get(n)):1;e.set(n,{score:r,terms:[],match:{}})}return e}combineResults(t,e=P){if(t.length===0)return new Map;const s=e.toLowerCase(),n=st[s];if(!n)throw new Error(`Invalid combination operator: ${e}`);return t.reduce(n)||new Map}toJSON(){const t=[];for(const[e,s]of this._index){const n={};for(const[o,r]of s)n[o]=Object.fromEntries(r);t.push([e,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:t,serializationVersion:2}}termResults(t,e,s,n,o,r,c,d,u=new Map){if(o==null)return u;for(const h of Object.keys(r)){const l=r[h],a=this._fieldIds[h],f=o.get(a);if(f==null)continue;let _=f.size;const g=this._avgFieldLength[a];for(const m of f.keys()){if(!this._documentIds.has(m)){this.removeTerm(a,m,e),_-=1;continue}const w=c?c(this._documentIds.get(m),e,this._storedFields.get(m)):1;if(!w)continue;const z=f.get(m),V=this._fieldLength.get(m)[a],C=it(z,_,this._documentCount,V,g,d),v=s*n*l*w*C,I=u.get(m);if(I){I.score+=v,ct(I.terms,t);const x=T(I.match,e);x?x.push(h):I.match[e]=[h]}else u.set(m,{score:v,terms:[t],match:{[e]:[h]}})}}return u}addTerm(t,e,s){const n=this._index.fetch(s,Q);let o=n.get(t);if(o==null)o=new Map,o.set(e,1),n.set(t,o);else{const r=o.get(e);o.set(e,(r||0)+1)}}removeTerm(t,e,s){if(!this._index.has(s)){this.warnDocumentChanged(e,t,s);return}const n=this._index.fetch(s,Q),o=n.get(t);o==null||o.get(e)==null?this.warnDocumentChanged(e,t,s):o.get(e)<=1?o.size<=1?n.delete(t):o.delete(e):o.set(e,o.get(e)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(t,e,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===e){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(t)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(t){const e=this._nextId;return this._idToShortId.set(t,e),this._documentIds.set(e,t),this._documentCount+=1,this._nextId+=1,e}addFields(t){for(let e=0;eObject.prototype.hasOwnProperty.call(i,t)?i[t]:void 0,st={[P]:(i,t)=>{for(const e of t.keys()){const s=i.get(e);if(s==null)i.set(e,t.get(e));else{const{score:n,terms:o,match:r}=t.get(e);s.score=s.score+n,s.match=Object.assign(s.match,r),J(s.terms,o)}}return i},[Y]:(i,t)=>{const e=new Map;for(const s of t.keys()){const n=i.get(s);if(n==null)continue;const{score:o,terms:r,match:c}=t.get(s);J(n.terms,r),e.set(s,{score:n.score+o,terms:n.terms,match:Object.assign(n.match,c)})}return e},[et]:(i,t)=>{for(const e of t.keys())i.delete(e);return i}},nt={k:1.2,b:.7,d:.5},it=(i,t,e,s,n,o)=>{const{k:r,b:c,d}=o;return Math.log(1+(e-t+.5)/(t+.5))*(d+i*(r+1)/(i+r*(1-c+c*s/n)))},ot=i=>(t,e,s)=>{const n=typeof i.fuzzy=="function"?i.fuzzy(t,e,s):i.fuzzy||!1,o=typeof i.prefix=="function"?i.prefix(t,e,s):i.prefix===!0,r=typeof i.boostTerm=="function"?i.boostTerm(t,e,s):1;return{term:t,fuzzy:n,prefix:o,termBoost:r}},E={idField:"id",extractField:(i,t)=>i[t],stringifyField:(i,t)=>i.toString(),tokenize:i=>i.split(dt),processTerm:i=>i.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(i,t)=>{typeof(console==null?void 0:console[i])=="function"&&console[i](t)},autoVacuum:!0},R={combineWith:P,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:nt},rt={combineWith:Y,prefix:(i,t,e)=>t===e.length-1},j={batchSize:1e3,batchWait:10},N={minDirtFactor:.1,minDirtCount:20},A={...j,...N},ct=(i,t)=>{i.includes(t)||i.push(t)},J=(i,t)=>{for(const e of t)i.includes(e)||i.push(e)},$=({score:i},{score:t})=>t-i,Q=()=>new Map,b=i=>{const t=new Map;for(const e of Object.keys(i))t.set(parseInt(e,10),i[e]);return t},M=async i=>{const t=new Map;let e=0;for(const s of Object.keys(i))t.set(parseInt(s,10),i[s]),++e%1e3===0&&await Z(0);return t},Z=i=>new Promise(t=>setTimeout(t,i)),dt=/[\n\r\p{Z}\p{P}]+/u;export{F as M}; diff --git a/docs/assets/chunks/theme.CYllfLRE.js b/docs/assets/chunks/theme.CYllfLRE.js deleted file mode 100644 index a5571a96c..000000000 --- a/docs/assets/chunks/theme.CYllfLRE.js +++ /dev/null @@ -1,36 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.B1oEVdpW.js","assets/chunks/framework.jUmBZPH5.js"])))=>i.map(i=>d[i]); -import{d as k,c,r as d,n as E,o,a as ee,t as T,b as y,w as h,T as ye,e as m,_ as x,u as et,i as tt,f as nt,g as Pe,h as g,j as i,k as r,l as ae,m as _e,p as N,q as J,s as ue,v as se,x as xe,y as Le,z as st,A as at,F as I,B as U,C as oe,D as de,E as b,G as He,H as X,I as Be,J as ve,K as ne,L as fe,M as ot,N as Se,O as ke,P as Ee,Q as De,R as he,S as it,U as lt,V as rt,W as Fe,X as Oe,Y as ct,Z as ut,$ as dt,a0 as vt,a1 as ft,a2 as ht}from"./framework.jUmBZPH5.js";const pt=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(o(),c("span",{class:E(["VPBadge",e.type])},[d(t.$slots,"default",{},()=>[ee(T(e.text),1)])],2))}}),mt={key:0,class:"VPBackdrop"},_t=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(o(),y(ye,{name:"fade"},{default:h(()=>[e.show?(o(),c("div",mt)):m("",!0)]),_:1}))}}),kt=x(_t,[["__scopeId","data-v-c79a1216"]]),M=et;function gt(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function ge(e){return e.startsWith("/")?e:`/${e}`}function Ve(e){const{pathname:t,search:n,hash:s,protocol:a}=new URL(e,"http://a.com");if(tt(e)||e.startsWith("#")||!a.startsWith("http")||!nt(t))return e;const{site:l}=M(),u=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,l.value.cleanUrls?"":".html")}${n}${s}`);return Pe(u)}function ie({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:a,hash:l}=M(),u=g(()=>{var f,L;return{label:(f=t.value.locales[n.value])==null?void 0:f.label,link:((L=t.value.locales[n.value])==null?void 0:L.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([f,L])=>u.value.label===L.label?[]:{text:L.label,link:bt(L.link||(f==="root"?"/":`/${f}/`),a.value.i18nRouting!==!1&&e,s.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+l.value})),currentLang:u}}function bt(e,t,n,s){return t?e.replace(/\/$/,"")+ge(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const $t={class:"NotFound"},yt={class:"code"},Pt={class:"title"},xt={class:"quote"},Lt={class:"action"},St=["href","aria-label"],Vt=k({__name:"NotFound",setup(e){const{theme:t}=M(),{currentLang:n}=ie();return(s,a)=>{var l,u,v,f,L;return o(),c("div",$t,[i("p",yt,T(((l=r(t).notFound)==null?void 0:l.code)??"404"),1),i("h1",Pt,T(((u=r(t).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),a[0]||(a[0]=i("div",{class:"divider"},null,-1)),i("blockquote",xt,T(((v=r(t).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),i("div",Lt,[i("a",{class:"link",href:r(Pe)(r(n).link),"aria-label":((f=r(t).notFound)==null?void 0:f.linkLabel)??"go to home"},T(((L=r(t).notFound)==null?void 0:L.linkText)??"Take me home"),9,St)])])}}}),wt=x(Vt,[["__scopeId","data-v-d6be1790"]]);function je(e,t){if(Array.isArray(e))return re(e);if(e==null)return[];t=ge(t);const n=Object.keys(e).sort((a,l)=>l.split("/").length-a.split("/").length).find(a=>t.startsWith(ge(a))),s=n?e[n]:[];return Array.isArray(s)?re(s):re(s.items,s.base)}function Tt(e){const t=[];let n=0;for(const s in e){const a=e[s];if(a.items){n=t.push(a);continue}t[n]||t.push({items:[]}),t[n].items.push(a)}return t}function Mt(e){const t=[];function n(s){for(const a of s)a.text&&a.link&&t.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&n(a.items)}return n(e),t}function be(e,t){return Array.isArray(t)?t.some(n=>be(e,n)):ae(e,t.link)?!0:t.items?be(e,t.items):!1}function re(e,t){return[...e].map(n=>{const s={...n},a=s.base||t;return a&&s.link&&(s.link=a+s.link),s.items&&(s.items=re(s.items,a)),s})}function te(){const{frontmatter:e,page:t,theme:n}=M(),s=_e("(min-width: 960px)"),a=N(!1),l=g(()=>{const A=n.value.sidebar,O=t.value.relativePath;return A?je(A,O):[]}),u=N(l.value);J(l,(A,O)=>{JSON.stringify(A)!==JSON.stringify(O)&&(u.value=l.value)});const v=g(()=>e.value.sidebar!==!1&&u.value.length>0&&e.value.layout!=="home"),f=g(()=>L?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),L=g(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),w=g(()=>v.value&&s.value),p=g(()=>v.value?Tt(u.value):[]);function $(){a.value=!0}function S(){a.value=!1}function C(){a.value?S():$()}return{isOpen:a,sidebar:u,sidebarGroups:p,hasSidebar:v,hasAside:L,leftAside:f,isSidebarEnabled:w,open:$,close:S,toggle:C}}function Ct(e,t){let n;ue(()=>{n=e.value?document.activeElement:void 0}),se(()=>{window.addEventListener("keyup",s)}),xe(()=>{window.removeEventListener("keyup",s)});function s(a){a.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Nt(e){const{page:t,hash:n}=M(),s=N(!1),a=g(()=>e.value.collapsed!=null),l=g(()=>!!e.value.link),u=N(!1),v=()=>{u.value=ae(t.value.relativePath,e.value.link)};J([t,e,n],v),se(v);const f=g(()=>u.value?!0:e.value.items?be(t.value.relativePath,e.value.items):!1),L=g(()=>!!(e.value.items&&e.value.items.length));ue(()=>{s.value=!!(a.value&&e.value.collapsed)}),Le(()=>{(u.value||f.value)&&(s.value=!1)});function w(){a.value&&(s.value=!s.value)}return{collapsed:s,collapsible:a,isLink:l,isActiveLink:u,hasActiveLink:f,hasChildren:L,toggle:w}}function At(){const{hasSidebar:e}=te(),t=_e("(min-width: 960px)"),n=_e("(min-width: 1280px)");return{isAsideEnabled:g(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const It=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,$e=[];function ze(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function we(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:Ht(n),link:"#"+n.id,level:s}});return Bt(t,e)}function Ht(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(It.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function Bt(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,a]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return Ft(e,s,a)}function Et(e,t){const{isAsideEnabled:n}=At(),s=gt(l,100);let a=null;se(()=>{requestAnimationFrame(l),window.addEventListener("scroll",s)}),st(()=>{u(location.hash)}),xe(()=>{window.removeEventListener("scroll",s)});function l(){if(!n.value)return;const v=window.scrollY,f=window.innerHeight,L=document.body.offsetHeight,w=Math.abs(v+f-L)<1,p=$e.map(({element:S,link:C})=>({link:C,top:Dt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,C)=>S.top-C.top);if(!p.length){u(null);return}if(v<1){u(null);return}if(w){u(p[p.length-1].link);return}let $=null;for(const{link:S,top:C}of p){if(C>v+at()+4)break;$=S}u($)}function u(v){a&&a.classList.remove("active"),v==null?a=null:a=e.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const f=a;f?(f.classList.add("active"),t.value.style.top=f.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function Dt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function Ft(e,t,n){$e.length=0;const s=[],a=[];return e.forEach(l=>{const u={...l,children:[]};let v=a[a.length-1];for(;v&&v.level>=u.level;)a.pop(),v=a[a.length-1];if(u.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){a.push({level:u.level,shouldIgnore:!0});return}u.level>n||u.level{const a=oe("VPDocOutlineItem",!0);return o(),c("ul",{class:E(["VPDocOutlineItem",e.root?"root":"nested"])},[(o(!0),c(I,null,U(e.headers,({children:l,link:u,title:v})=>(o(),c("li",null,[i("a",{class:"outline-link",href:u,onClick:t,title:v},T(v),9,Ot),l!=null&&l.length?(o(),y(a,{key:0,headers:l},null,8,["headers"])):m("",!0)]))),256))],2)}}}),Ge=x(jt,[["__scopeId","data-v-b933a997"]]),zt={class:"content"},Gt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ut=k({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=M(),s=He([]);de(()=>{s.value=we(t.value.outline??n.value.outline)});const a=N(),l=N();return Et(a,l),(u,v)=>(o(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:E(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:a},[i("div",zt,[i("div",{class:"outline-marker",ref_key:"marker",ref:l},null,512),i("div",Gt,T(r(ze)(r(n))),1),b(Ge,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),qt=x(Ut,[["__scopeId","data-v-a5bbad30"]]),Rt={class:"VPDocAsideCarbonAds"},Wt=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(o(),c("div",Rt,[b(r(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Kt={class:"VPDocAside"},Zt=k({__name:"VPDocAside",setup(e){const{theme:t}=M();return(n,s)=>(o(),c("div",Kt,[d(n.$slots,"aside-top",{},void 0,!0),d(n.$slots,"aside-outline-before",{},void 0,!0),b(qt),d(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=i("div",{class:"spacer"},null,-1)),d(n.$slots,"aside-ads-before",{},void 0,!0),r(t).carbonAds?(o(),y(Wt,{key:0,"carbon-ads":r(t).carbonAds},null,8,["carbon-ads"])):m("",!0),d(n.$slots,"aside-ads-after",{},void 0,!0),d(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Jt=x(Zt,[["__scopeId","data-v-3f215769"]]);function Xt(){const{theme:e,page:t}=M();return g(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let a;return typeof s=="function"?a=s(t.value):a=s.replace(/:path/g,t.value.filePath),{url:a,text:n}})}function Yt(){const{page:e,theme:t,frontmatter:n}=M();return g(()=>{var L,w,p,$,S,C,A,O;const s=je(t.value.sidebar,e.value.relativePath),a=Mt(s),l=Qt(a,j=>j.link.replace(/[?#].*$/,"")),u=l.findIndex(j=>ae(e.value.relativePath,j.link)),v=((L=t.value.docFooter)==null?void 0:L.prev)===!1&&!n.value.prev||n.value.prev===!1,f=((w=t.value.docFooter)==null?void 0:w.next)===!1&&!n.value.next||n.value.next===!1;return{prev:v?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((p=l[u-1])==null?void 0:p.docFooterText)??(($=l[u-1])==null?void 0:$.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((S=l[u-1])==null?void 0:S.link)},next:f?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((C=l[u+1])==null?void 0:C.docFooterText)??((A=l[u+1])==null?void 0:A.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((O=l[u+1])==null?void 0:O.link)}}})}function Qt(e,t){const n=new Set;return e.filter(s=>{const a=t(s);return n.has(a)?!1:n.add(a)})}const Y=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.tag??(t.href?"a":"span")),s=g(()=>t.href&&Be.test(t.href)||t.target==="_blank");return(a,l)=>(o(),y(X(n.value),{class:E(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?r(Ve)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:h(()=>[d(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),en={class:"VPLastUpdated"},tn=["datetime"],nn=k({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=M(),a=g(()=>new Date(n.value.lastUpdated)),l=g(()=>a.value.toISOString()),u=N("");return se(()=>{ue(()=>{var v,f,L;u.value=new Intl.DateTimeFormat((f=(v=t.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&f.forceLocale?s.value:void 0,((L=t.value.lastUpdated)==null?void 0:L.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(a.value)})}),(v,f)=>{var L;return o(),c("p",en,[ee(T(((L=r(t).lastUpdated)==null?void 0:L.text)||r(t).lastUpdatedText||"Last updated")+": ",1),i("time",{datetime:l.value},T(u.value),9,tn)])}}}),sn=x(nn,[["__scopeId","data-v-e98dd255"]]),an={key:0,class:"VPDocFooter"},on={key:0,class:"edit-info"},ln={key:0,class:"edit-link"},rn={key:1,class:"last-updated"},cn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},un={class:"pager"},dn=["innerHTML"],vn=["innerHTML"],fn={class:"pager"},hn=["innerHTML"],pn=["innerHTML"],mn=k({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=M(),a=Xt(),l=Yt(),u=g(()=>t.value.editLink&&s.value.editLink!==!1),v=g(()=>n.value.lastUpdated),f=g(()=>u.value||v.value||l.value.prev||l.value.next);return(L,w)=>{var p,$,S,C;return f.value?(o(),c("footer",an,[d(L.$slots,"doc-footer-before",{},void 0,!0),u.value||v.value?(o(),c("div",on,[u.value?(o(),c("div",ln,[b(Y,{class:"edit-link-button",href:r(a).url,"no-icon":!0},{default:h(()=>[w[0]||(w[0]=i("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ee(" "+T(r(a).text),1)]),_:1},8,["href"])])):m("",!0),v.value?(o(),c("div",rn,[b(sn)])):m("",!0)])):m("",!0),(p=r(l).prev)!=null&&p.link||($=r(l).next)!=null&&$.link?(o(),c("nav",cn,[w[1]||(w[1]=i("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),i("div",un,[(S=r(l).prev)!=null&&S.link?(o(),y(Y,{key:0,class:"pager-link prev",href:r(l).prev.link},{default:h(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=r(t).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,dn),i("span",{class:"title",innerHTML:r(l).prev.text},null,8,vn)]}),_:1},8,["href"])):m("",!0)]),i("div",fn,[(C=r(l).next)!=null&&C.link?(o(),y(Y,{key:0,class:"pager-link next",href:r(l).next.link},{default:h(()=>{var A;return[i("span",{class:"desc",innerHTML:((A=r(t).docFooter)==null?void 0:A.next)||"Next page"},null,8,hn),i("span",{class:"title",innerHTML:r(l).next.text},null,8,pn)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),_n=x(mn,[["__scopeId","data-v-e257564d"]]),kn={class:"container"},gn={class:"aside-container"},bn={class:"aside-content"},$n={class:"content"},yn={class:"content-container"},Pn={class:"main"},xn=k({__name:"VPDoc",setup(e){const{theme:t}=M(),n=ve(),{hasSidebar:s,hasAside:a,leftAside:l}=te(),u=g(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,f)=>{const L=oe("Content");return o(),c("div",{class:E(["VPDoc",{"has-sidebar":r(s),"has-aside":r(a)}])},[d(v.$slots,"doc-top",{},void 0,!0),i("div",kn,[r(a)?(o(),c("div",{key:0,class:E(["aside",{"left-aside":r(l)}])},[f[0]||(f[0]=i("div",{class:"aside-curtain"},null,-1)),i("div",gn,[i("div",bn,[b(Jt,null,{"aside-top":h(()=>[d(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[d(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[d(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),i("div",$n,[i("div",yn,[d(v.$slots,"doc-before",{},void 0,!0),i("main",Pn,[b(L,{class:E(["vp-doc",[u.value,r(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(_n,null,{"doc-footer-before":h(()=>[d(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),d(v.$slots,"doc-after",{},void 0,!0)])])]),d(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ln=x(xn,[["__scopeId","data-v-39a288b8"]]),Sn=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.href&&Be.test(t.href)),s=g(()=>t.tag||(t.href?"a":"button"));return(a,l)=>(o(),y(X(s.value),{class:E(["VPButton",[e.size,e.theme]]),href:e.href?r(Ve)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[ee(T(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),Vn=x(Sn,[["__scopeId","data-v-fa7799d5"]]),wn=["src","alt"],Tn=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=oe("VPImage",!0);return e.image?(o(),c(I,{key:0},[typeof e.image=="string"||"src"in e.image?(o(),c("img",ne({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:r(Pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,wn)):(o(),c(I,{key:1},[b(s,ne({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),b(s,ne({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),ce=x(Tn,[["__scopeId","data-v-8426fc1a"]]),Mn={class:"container"},Cn={class:"main"},Nn={class:"heading"},An=["innerHTML"],In=["innerHTML"],Hn=["innerHTML"],Bn={key:0,class:"actions"},En={key:0,class:"image"},Dn={class:"image-container"},Fn=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=fe("hero-image-slot-exists");return(n,s)=>(o(),c("div",{class:E(["VPHero",{"has-image":e.image||r(t)}])},[i("div",Mn,[i("div",Cn,[d(n.$slots,"home-hero-info-before",{},void 0,!0),d(n.$slots,"home-hero-info",{},()=>[i("h1",Nn,[e.name?(o(),c("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,An)):m("",!0),e.text?(o(),c("span",{key:1,innerHTML:e.text,class:"text"},null,8,In)):m("",!0)]),e.tagline?(o(),c("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,Hn)):m("",!0)],!0),d(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(o(),c("div",Bn,[(o(!0),c(I,null,U(e.actions,a=>(o(),c("div",{key:a.link,class:"action"},[b(Vn,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link,target:a.target,rel:a.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),d(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||r(t)?(o(),c("div",En,[i("div",Dn,[s[0]||(s[0]=i("div",{class:"image-bg"},null,-1)),d(n.$slots,"home-hero-image",{},()=>[e.image?(o(),y(ce,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),On=x(Fn,[["__scopeId","data-v-4f9c455b"]]),jn=k({__name:"VPHomeHero",setup(e){const{frontmatter:t}=M();return(n,s)=>r(t).hero?(o(),y(On,{key:0,class:"VPHomeHero",name:r(t).hero.name,text:r(t).hero.text,tagline:r(t).hero.tagline,image:r(t).hero.image,actions:r(t).hero.actions},{"home-hero-info-before":h(()=>[d(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[d(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[d(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[d(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[d(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),zn={class:"box"},Gn={key:0,class:"icon"},Un=["innerHTML"],qn=["innerHTML"],Rn=["innerHTML"],Wn={key:4,class:"link-text"},Kn={class:"link-text-value"},Zn=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(o(),y(Y,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[i("article",zn,[typeof e.icon=="object"&&e.icon.wrap?(o(),c("div",Gn,[b(ce,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(o(),y(ce,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(o(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Un)):m("",!0),i("h2",{class:"title",innerHTML:e.title},null,8,qn),e.details?(o(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Rn)):m("",!0),e.linkText?(o(),c("div",Wn,[i("p",Kn,[ee(T(e.linkText)+" ",1),n[0]||(n[0]=i("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Jn=x(Zn,[["__scopeId","data-v-a3976bdc"]]),Xn={key:0,class:"VPFeatures"},Yn={class:"container"},Qn={class:"items"},es=k({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=g(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,a)=>e.features?(o(),c("div",Xn,[i("div",Yn,[i("div",Qn,[(o(!0),c(I,null,U(e.features,l=>(o(),c("div",{key:l.title,class:E(["item",[n.value]])},[b(Jn,{icon:l.icon,title:l.title,details:l.details,link:l.link,"link-text":l.linkText,rel:l.rel,target:l.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):m("",!0)}}),ts=x(es,[["__scopeId","data-v-a6181336"]]),ns=k({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=M();return(n,s)=>r(t).features?(o(),y(ts,{key:0,class:"VPHomeFeatures",features:r(t).features},null,8,["features"])):m("",!0)}}),ss=k({__name:"VPHomeContent",setup(e){const{width:t}=ot({initialWidth:0,includeScrollbar:!1});return(n,s)=>(o(),c("div",{class:"vp-doc container",style:Se(r(t)?{"--vp-offset":`calc(50% - ${r(t)/2}px)`}:{})},[d(n.$slots,"default",{},void 0,!0)],4))}}),as=x(ss,[["__scopeId","data-v-8e2d4988"]]),os=k({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=M();return(s,a)=>{const l=oe("Content");return o(),c("div",{class:E(["VPHome",{"external-link-icon-enabled":r(n).externalLinkIcon}])},[d(s.$slots,"home-hero-before",{},void 0,!0),b(jn,null,{"home-hero-info-before":h(()=>[d(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),d(s.$slots,"home-hero-after",{},void 0,!0),d(s.$slots,"home-features-before",{},void 0,!0),b(ns),d(s.$slots,"home-features-after",{},void 0,!0),r(t).markdownStyles!==!1?(o(),y(as,{key:0},{default:h(()=>[b(l)]),_:1})):(o(),y(l,{key:1}))],2)}}}),is=x(os,[["__scopeId","data-v-8b561e3d"]]),ls={},rs={class:"VPPage"};function cs(e,t){const n=oe("Content");return o(),c("div",rs,[d(e.$slots,"page-top"),b(n),d(e.$slots,"page-bottom")])}const us=x(ls,[["render",cs]]),ds=k({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=M(),{hasSidebar:s}=te();return(a,l)=>(o(),c("div",{class:E(["VPContent",{"has-sidebar":r(s),"is-home":r(n).layout==="home"}]),id:"VPContent"},[r(t).isNotFound?d(a.$slots,"not-found",{key:0},()=>[b(wt)],!0):r(n).layout==="page"?(o(),y(us,{key:1},{"page-top":h(()=>[d(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[d(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(n).layout==="home"?(o(),y(is,{key:2},{"home-hero-before":h(()=>[d(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[d(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[d(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[d(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[d(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(n).layout&&r(n).layout!=="doc"?(o(),y(X(r(n).layout),{key:3})):(o(),y(Ln,{key:4},{"doc-top":h(()=>[d(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[d(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[d(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[d(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[d(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[d(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[d(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[d(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),vs=x(ds,[["__scopeId","data-v-1428d186"]]),fs={class:"container"},hs=["innerHTML"],ps=["innerHTML"],ms=k({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=M(),{hasSidebar:s}=te();return(a,l)=>r(t).footer&&r(n).footer!==!1?(o(),c("footer",{key:0,class:E(["VPFooter",{"has-sidebar":r(s)}])},[i("div",fs,[r(t).footer.message?(o(),c("p",{key:0,class:"message",innerHTML:r(t).footer.message},null,8,hs)):m("",!0),r(t).footer.copyright?(o(),c("p",{key:1,class:"copyright",innerHTML:r(t).footer.copyright},null,8,ps)):m("",!0)])],2)):m("",!0)}}),_s=x(ms,[["__scopeId","data-v-e315a0ad"]]);function ks(){const{theme:e,frontmatter:t}=M(),n=He([]),s=g(()=>n.value.length>0);return de(()=>{n.value=we(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:s}}const gs={class:"menu-text"},bs={class:"header"},$s={class:"outline"},ys=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=M(),s=N(!1),a=N(0),l=N(),u=N();function v(p){var $;($=l.value)!=null&&$.contains(p.target)||(s.value=!1)}J(s,p=>{if(p){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ke("Escape",()=>{s.value=!1}),de(()=>{s.value=!1});function f(){s.value=!s.value,a.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function L(p){p.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Ee(()=>{s.value=!1}))}function w(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(p,$)=>(o(),c("div",{class:"VPLocalNavOutlineDropdown",style:Se({"--vp-vh":a.value+"px"}),ref_key:"main",ref:l},[e.headers.length>0?(o(),c("button",{key:0,onClick:f,class:E({open:s.value})},[i("span",gs,T(r(ze)(r(n))),1),$[0]||($[0]=i("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(o(),c("button",{key:1,onClick:w},T(r(n).returnToTopLabel||"Return to top"),1)),b(ye,{name:"flyout"},{default:h(()=>[s.value?(o(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:L},[i("div",bs,[i("a",{class:"top-link",href:"#",onClick:w},T(r(n).returnToTopLabel||"Return to top"),1)]),i("div",$s,[b(Ge,{headers:e.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),Ps=x(ys,[["__scopeId","data-v-8a42e2b4"]]),xs={class:"container"},Ls=["aria-expanded"],Ss={class:"menu-text"},Vs=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=M(),{hasSidebar:s}=te(),{headers:a}=ks(),{y:l}=De(),u=N(0);se(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),de(()=>{a.value=we(n.value.outline??t.value.outline)});const v=g(()=>a.value.length===0),f=g(()=>v.value&&!s.value),L=g(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:f.value}));return(w,p)=>r(n).layout!=="home"&&(!f.value||r(l)>=u.value)?(o(),c("div",{key:0,class:E(L.value)},[i("div",xs,[r(s)?(o(),c("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:p[0]||(p[0]=$=>w.$emit("open-menu"))},[p[1]||(p[1]=i("span",{class:"vpi-align-left menu-icon"},null,-1)),i("span",Ss,T(r(t).sidebarMenuLabel||"Menu"),1)],8,Ls)):m("",!0),b(Ps,{headers:r(a),navHeight:u.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),ws=x(Vs,[["__scopeId","data-v-a6f0e41e"]]);function Ts(){const e=N(!1);function t(){e.value=!0,window.addEventListener("resize",a)}function n(){e.value=!1,window.removeEventListener("resize",a)}function s(){e.value?n():t()}function a(){window.outerWidth>=768&&n()}const l=ve();return J(()=>l.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const Ms={},Cs={class:"VPSwitch",type:"button",role:"switch"},Ns={class:"check"},As={key:0,class:"icon"};function Is(e,t){return o(),c("button",Cs,[i("span",Ns,[e.$slots.default?(o(),c("span",As,[d(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const Hs=x(Ms,[["render",Is],["__scopeId","data-v-1d5665e3"]]),Bs=k({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=M(),s=fe("toggle-appearance",()=>{t.value=!t.value}),a=N("");return Le(()=>{a.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(l,u)=>(o(),y(Hs,{title:a.value,class:"VPSwitchAppearance","aria-checked":r(t),onClick:r(s)},{default:h(()=>[...u[0]||(u[0]=[i("span",{class:"vpi-sun sun"},null,-1),i("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),Te=x(Bs,[["__scopeId","data-v-5337faa4"]]),Es={key:0,class:"VPNavBarAppearance"},Ds=k({__name:"VPNavBarAppearance",setup(e){const{site:t}=M();return(n,s)=>r(t).appearance&&r(t).appearance!=="force-dark"&&r(t).appearance!=="force-auto"?(o(),c("div",Es,[b(Te)])):m("",!0)}}),Fs=x(Ds,[["__scopeId","data-v-6c893767"]]),Me=N();let Ue=!1,me=0;function Os(e){const t=N(!1);if(he){!Ue&&js(),me++;const n=J(Me,s=>{var a,l,u;s===e.el.value||(a=e.el.value)!=null&&a.contains(s)?(t.value=!0,(l=e.onFocus)==null||l.call(e)):(t.value=!1,(u=e.onBlur)==null||u.call(e))});xe(()=>{n(),me--,me||zs()})}return it(t)}function js(){document.addEventListener("focusin",qe),Ue=!0,Me.value=document.activeElement}function zs(){document.removeEventListener("focusin",qe)}function qe(){Me.value=document.activeElement}const Gs={class:"VPMenuLink"},Us=["innerHTML"],qs=k({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=M();return(n,s)=>(o(),c("div",Gs,[b(Y,{class:E({active:r(ae)(r(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[i("span",{innerHTML:e.item.text},null,8,Us)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),pe=x(qs,[["__scopeId","data-v-35975db6"]]),Rs={class:"VPMenuGroup"},Ws={key:0,class:"title"},Ks=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),c("div",Rs,[e.text?(o(),c("p",Ws,T(e.text),1)):m("",!0),(o(!0),c(I,null,U(e.items,s=>(o(),c(I,null,["link"in s?(o(),y(pe,{key:0,item:s},null,8,["item"])):m("",!0)],64))),256))]))}}),Zs=x(Ks,[["__scopeId","data-v-69e747b5"]]),Js={class:"VPMenu"},Xs={key:0,class:"items"},Ys=k({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(o(),c("div",Js,[e.items?(o(),c("div",Xs,[(o(!0),c(I,null,U(e.items,s=>(o(),c(I,{key:JSON.stringify(s)},["link"in s?(o(),y(pe,{key:0,item:s},null,8,["item"])):"component"in s?(o(),y(X(s.component),ne({key:1,ref_for:!0},s.props),null,16)):(o(),y(Zs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0),d(t.$slots,"default",{},void 0,!0)]))}}),Qs=x(Ys,[["__scopeId","data-v-b98bc113"]]),ea=["aria-expanded","aria-label"],ta={key:0,class:"text"},na=["innerHTML"],sa={key:1,class:"vpi-more-horizontal icon"},aa={class:"menu"},oa=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=N(!1),n=N();Os({el:n,onBlur:s});function s(){t.value=!1}return(a,l)=>(o(),c("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:l[1]||(l[1]=u=>t.value=!0),onMouseleave:l[2]||(l[2]=u=>t.value=!1)},[i("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:l[0]||(l[0]=u=>t.value=!t.value)},[e.button||e.icon?(o(),c("span",ta,[e.icon?(o(),c("span",{key:0,class:E([e.icon,"option-icon"])},null,2)):m("",!0),e.button?(o(),c("span",{key:1,innerHTML:e.button},null,8,na)):m("",!0),l[3]||(l[3]=i("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(o(),c("span",sa))],8,ea),i("div",aa,[b(Qs,{items:e.items},{default:h(()=>[d(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ce=x(oa,[["__scopeId","data-v-cf11d7a2"]]),ia=["href","aria-label","innerHTML"],la=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=N();se(async()=>{var l;await Ee();const a=(l=n.value)==null?void 0:l.children[0];a instanceof HTMLElement&&a.className.startsWith("vpi-social-")&&(getComputedStyle(a).maskImage||getComputedStyle(a).webkitMaskImage)==="none"&&a.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=g(()=>typeof t.icon=="object"?t.icon.svg:``);return(a,l)=>(o(),c("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,ia))}}),ra=x(la,[["__scopeId","data-v-bd121fe5"]]),ca={class:"VPSocialLinks"},ua=k({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(o(),c("div",ca,[(o(!0),c(I,null,U(e.links,({link:s,icon:a,ariaLabel:l})=>(o(),y(ra,{key:s,icon:a,link:s,ariaLabel:l},null,8,["icon","link","ariaLabel"]))),128))]))}}),Ne=x(ua,[["__scopeId","data-v-7bc22406"]]),da={key:0,class:"group translations"},va={class:"trans-title"},fa={key:1,class:"group"},ha={class:"item appearance"},pa={class:"label"},ma={class:"appearance-action"},_a={key:2,class:"group"},ka={class:"item social-links"},ga=k({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=M(),{localeLinks:s,currentLang:a}=ie({correspondingLink:!0}),l=g(()=>s.value.length&&a.value.label||t.value.appearance||n.value.socialLinks);return(u,v)=>l.value?(o(),y(Ce,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[r(s).length&&r(a).label?(o(),c("div",da,[i("p",va,T(r(a).label),1),(o(!0),c(I,null,U(r(s),f=>(o(),y(pe,{key:f.link,item:f},null,8,["item"]))),128))])):m("",!0),r(t).appearance&&r(t).appearance!=="force-dark"&&r(t).appearance!=="force-auto"?(o(),c("div",fa,[i("div",ha,[i("p",pa,T(r(n).darkModeSwitchLabel||"Appearance"),1),i("div",ma,[b(Te)])])])):m("",!0),r(n).socialLinks?(o(),c("div",_a,[i("div",ka,[b(Ne,{class:"social-links-list",links:r(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),ba=x(ga,[["__scopeId","data-v-bb2aa2f0"]]),$a=["aria-expanded"],ya=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(o(),c("button",{type:"button",class:E(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[i("span",{class:"container"},[i("span",{class:"top"}),i("span",{class:"middle"}),i("span",{class:"bottom"})],-1)])],10,$a))}}),Pa=x(ya,[["__scopeId","data-v-e5dd9c1c"]]),xa=["innerHTML"],La=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=M();return(n,s)=>(o(),y(Y,{class:E({VPNavBarMenuLink:!0,active:r(ae)(r(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[i("span",{innerHTML:e.item.text},null,8,xa)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Sa=x(La,[["__scopeId","data-v-e56f3d57"]]),Va=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=M(),s=l=>"component"in l?!1:"link"in l?ae(n.value.relativePath,l.link,!!t.item.activeMatch):l.items.some(s),a=g(()=>s(t.item));return(l,u)=>(o(),y(Ce,{class:E({VPNavBarMenuGroup:!0,active:r(ae)(r(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||a.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),wa={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ta=k({__name:"VPNavBarMenu",setup(e){const{theme:t}=M();return(n,s)=>r(t).nav?(o(),c("nav",wa,[s[0]||(s[0]=i("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(o(!0),c(I,null,U(r(t).nav,a=>(o(),c(I,{key:JSON.stringify(a)},["link"in a?(o(),y(Sa,{key:0,item:a},null,8,["item"])):"component"in a?(o(),y(X(a.component),ne({key:1,ref_for:!0},a.props),null,16)):(o(),y(Va,{key:2,item:a},null,8,["item"]))],64))),128))])):m("",!0)}}),Ma=x(Ta,[["__scopeId","data-v-dc692963"]]);function Ca(e){const{localeIndex:t,theme:n}=M();function s(a){var C,A,O;const l=a.split("."),u=(C=n.value.search)==null?void 0:C.options,v=u&&typeof u=="object",f=v&&((O=(A=u.locales)==null?void 0:A[t.value])==null?void 0:O.translations)||null,L=v&&u.translations||null;let w=f,p=L,$=e;const S=l.pop();for(const j of l){let F=null;const P=$==null?void 0:$[j];P&&(F=$=P);const _=p==null?void 0:p[j];_&&(F=p=_);const G=w==null?void 0:w[j];G&&(F=w=G),P||($=F),_||(p=F),G||(w=F)}return(w==null?void 0:w[S])??(p==null?void 0:p[S])??($==null?void 0:$[S])??""}return s}const Na=["aria-label"],Aa={class:"DocSearch-Button-Container"},Ia={class:"DocSearch-Button-Placeholder"},Ie=k({__name:"VPNavBarSearchButton",setup(e){const n=Ca({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,a)=>(o(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(n)("button.buttonAriaLabel")},[i("span",Aa,[a[0]||(a[0]=i("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),i("span",Ia,T(r(n)("button.buttonText")),1)]),a[1]||(a[1]=i("span",{class:"DocSearch-Button-Keys"},[i("kbd",{class:"DocSearch-Button-Key"}),i("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,Na))}}),Ha={class:"VPNavBarSearch"},Ba={id:"local-search"},Ea={key:1,id:"docsearch"},Da=k({__name:"VPNavBarSearch",setup(e){const t=lt(()=>rt(()=>import("./VPLocalSearchBox.B1oEVdpW.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:s}=M(),a=N(!1),l=N(!1);se(()=>{});function u(){a.value||(a.value=!0,setTimeout(v,16))}function v(){const p=new Event("keydown");p.key="k",p.metaKey=!0,window.dispatchEvent(p),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function f(p){const $=p.target,S=$.tagName;return $.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const L=N(!1);ke("k",p=>{(p.ctrlKey||p.metaKey)&&(p.preventDefault(),L.value=!0)}),ke("/",p=>{f(p)||(p.preventDefault(),L.value=!0)});const w="local";return(p,$)=>{var S;return o(),c("div",Ha,[r(w)==="local"?(o(),c(I,{key:0},[L.value?(o(),y(r(t),{key:0,onClose:$[0]||($[0]=C=>L.value=!1)})):m("",!0),i("div",Ba,[b(Ie,{onClick:$[1]||($[1]=C=>L.value=!0)})])],64)):r(w)==="algolia"?(o(),c(I,{key:1},[a.value?(o(),y(r(n),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:$[2]||($[2]=C=>l.value=!0)},null,8,["algolia"])):m("",!0),l.value?m("",!0):(o(),c("div",Ea,[b(Ie,{onClick:u})]))],64)):m("",!0)])}}}),Fa=k({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=M();return(n,s)=>r(t).socialLinks?(o(),y(Ne,{key:0,class:"VPNavBarSocialLinks",links:r(t).socialLinks},null,8,["links"])):m("",!0)}}),Oa=x(Fa,[["__scopeId","data-v-0394ad82"]]),ja=["href","rel","target"],za=["innerHTML"],Ga={key:2},Ua=k({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=M(),{hasSidebar:s}=te(),{currentLang:a}=ie(),l=g(()=>{var f;return typeof n.value.logoLink=="string"?n.value.logoLink:(f=n.value.logoLink)==null?void 0:f.link}),u=g(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.rel}),v=g(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.target});return(f,L)=>(o(),c("div",{class:E(["VPNavBarTitle",{"has-sidebar":r(s)}])},[i("a",{class:"title",href:l.value??r(Ve)(r(a).link),rel:u.value,target:v.value},[d(f.$slots,"nav-bar-title-before",{},void 0,!0),r(n).logo?(o(),y(ce,{key:0,class:"logo",image:r(n).logo},null,8,["image"])):m("",!0),r(n).siteTitle?(o(),c("span",{key:1,innerHTML:r(n).siteTitle},null,8,za)):r(n).siteTitle===void 0?(o(),c("span",Ga,T(r(t).title),1)):m("",!0),d(f.$slots,"nav-bar-title-after",{},void 0,!0)],8,ja)],2))}}),qa=x(Ua,[["__scopeId","data-v-1168a8e4"]]),Ra={class:"items"},Wa={class:"title"},Ka=k({__name:"VPNavBarTranslations",setup(e){const{theme:t}=M(),{localeLinks:n,currentLang:s}=ie({correspondingLink:!0});return(a,l)=>r(n).length&&r(s).label?(o(),y(Ce,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(t).langMenuLabel||"Change language"},{default:h(()=>[i("div",Ra,[i("p",Wa,T(r(s).label),1),(o(!0),c(I,null,U(r(n),u=>(o(),y(pe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),Za=x(Ka,[["__scopeId","data-v-88af2de4"]]),Ja={class:"wrapper"},Xa={class:"container"},Ya={class:"title"},Qa={class:"content"},eo={class:"content-body"},to=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=De(),{hasSidebar:s}=te(),{frontmatter:a}=M(),l=N({});return Le(()=>{l.value={"has-sidebar":s.value,home:a.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(u,v)=>(o(),c("div",{class:E(["VPNavBar",l.value])},[i("div",Ja,[i("div",Xa,[i("div",Ya,[b(qa,null,{"nav-bar-title-before":h(()=>[d(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),i("div",Qa,[i("div",eo,[d(u.$slots,"nav-bar-content-before",{},void 0,!0),b(Da,{class:"search"}),b(Ma,{class:"menu"}),b(Za,{class:"translations"}),b(Fs,{class:"appearance"}),b(Oa,{class:"social-links"}),b(ba,{class:"extra"}),d(u.$slots,"nav-bar-content-after",{},void 0,!0),b(Pa,{class:"hamburger",active:e.isScreenOpen,onClick:v[0]||(v[0]=f=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=i("div",{class:"divider"},[i("div",{class:"divider-line"})],-1))],2))}}),no=x(to,[["__scopeId","data-v-6aa21345"]]),so={key:0,class:"VPNavScreenAppearance"},ao={class:"text"},oo=k({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=M();return(s,a)=>r(t).appearance&&r(t).appearance!=="force-dark"&&r(t).appearance!=="force-auto"?(o(),c("div",so,[i("p",ao,T(r(n).darkModeSwitchLabel||"Appearance"),1),b(Te)])):m("",!0)}}),io=x(oo,[["__scopeId","data-v-b44890b2"]]),lo=["innerHTML"],ro=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=fe("close-screen");return(n,s)=>(o(),y(Y,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:r(t)},{default:h(()=>[i("span",{innerHTML:e.item.text},null,8,lo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),co=x(ro,[["__scopeId","data-v-df37e6dd"]]),uo=["innerHTML"],vo=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=fe("close-screen");return(n,s)=>(o(),y(Y,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:r(t)},{default:h(()=>[i("span",{innerHTML:e.item.text},null,8,uo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Re=x(vo,[["__scopeId","data-v-3e9c20e4"]]),fo={class:"VPNavScreenMenuGroupSection"},ho={key:0,class:"title"},po=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),c("div",fo,[e.text?(o(),c("p",ho,T(e.text),1)):m("",!0),(o(!0),c(I,null,U(e.items,s=>(o(),y(Re,{key:s.text,item:s},null,8,["item"]))),128))]))}}),mo=x(po,[["__scopeId","data-v-8133b170"]]),_o=["aria-controls","aria-expanded"],ko=["innerHTML"],go=["id"],bo={key:0,class:"item"},$o={key:1,class:"item"},yo={key:2,class:"group"},Po=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=N(!1),s=g(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function a(){n.value=!n.value}return(l,u)=>(o(),c("div",{class:E(["VPNavScreenMenuGroup",{open:n.value}])},[i("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:a},[i("span",{class:"button-text",innerHTML:e.text},null,8,ko),u[0]||(u[0]=i("span",{class:"vpi-plus button-icon"},null,-1))],8,_o),i("div",{id:s.value,class:"items"},[(o(!0),c(I,null,U(e.items,v=>(o(),c(I,{key:JSON.stringify(v)},["link"in v?(o(),c("div",bo,[b(Re,{item:v},null,8,["item"])])):"component"in v?(o(),c("div",$o,[(o(),y(X(v.component),ne({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(o(),c("div",yo,[b(mo,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,go)],2))}}),xo=x(Po,[["__scopeId","data-v-b9ab8c58"]]),Lo={key:0,class:"VPNavScreenMenu"},So=k({__name:"VPNavScreenMenu",setup(e){const{theme:t}=M();return(n,s)=>r(t).nav?(o(),c("nav",Lo,[(o(!0),c(I,null,U(r(t).nav,a=>(o(),c(I,{key:JSON.stringify(a)},["link"in a?(o(),y(co,{key:0,item:a},null,8,["item"])):"component"in a?(o(),y(X(a.component),ne({key:1,ref_for:!0},a.props,{"screen-menu":""}),null,16)):(o(),y(xo,{key:2,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),Vo=k({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=M();return(n,s)=>r(t).socialLinks?(o(),y(Ne,{key:0,class:"VPNavScreenSocialLinks",links:r(t).socialLinks},null,8,["links"])):m("",!0)}}),wo={class:"list"},To=k({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=ie({correspondingLink:!0}),s=N(!1);function a(){s.value=!s.value}return(l,u)=>r(t).length&&r(n).label?(o(),c("div",{key:0,class:E(["VPNavScreenTranslations",{open:s.value}])},[i("button",{class:"title",onClick:a},[u[0]||(u[0]=i("span",{class:"vpi-languages icon lang"},null,-1)),ee(" "+T(r(n).label)+" ",1),u[1]||(u[1]=i("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),i("ul",wo,[(o(!0),c(I,null,U(r(t),v=>(o(),c("li",{key:v.link,class:"item"},[b(Y,{class:"link",href:v.link},{default:h(()=>[ee(T(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),Mo=x(To,[["__scopeId","data-v-858fe1a4"]]),Co={class:"container"},No=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=N(null),n=Fe(he?document.body:null);return(s,a)=>(o(),y(ye,{name:"fade",onEnter:a[0]||(a[0]=l=>n.value=!0),onAfterLeave:a[1]||(a[1]=l=>n.value=!1)},{default:h(()=>[e.open?(o(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[i("div",Co,[d(s.$slots,"nav-screen-content-before",{},void 0,!0),b(So,{class:"menu"}),b(Mo,{class:"translations"}),b(io,{class:"appearance"}),b(Vo,{class:"social-links"}),d(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),Ao=x(No,[["__scopeId","data-v-f2779853"]]),Io={key:0,class:"VPNav"},Ho=k({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=Ts(),{frontmatter:a}=M(),l=g(()=>a.value.navbar!==!1);return Oe("close-screen",n),ue(()=>{he&&document.documentElement.classList.toggle("hide-nav",!l.value)}),(u,v)=>l.value?(o(),c("header",Io,[b(no,{"is-screen-open":r(t),onToggleScreen:r(s)},{"nav-bar-title-before":h(()=>[d(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[d(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[d(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(Ao,{open:r(t)},{"nav-screen-content-before":h(()=>[d(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[d(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),Bo=x(Ho,[["__scopeId","data-v-ae24b3ad"]]),Eo=["role","tabindex"],Do={key:1,class:"items"},Fo=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:a,isActiveLink:l,hasActiveLink:u,hasChildren:v,toggle:f}=Nt(g(()=>t.item)),L=g(()=>v.value?"section":"div"),w=g(()=>a.value?"a":"div"),p=g(()=>v.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),$=g(()=>a.value?void 0:"button"),S=g(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":a.value},{"is-active":l.value},{"has-active":u.value}]);function C(O){"key"in O&&O.key!=="Enter"||!t.item.link&&f()}function A(){t.item.link&&f()}return(O,j)=>{const F=oe("VPSidebarItem",!0);return o(),y(X(L.value),{class:E(["VPSidebarItem",S.value])},{default:h(()=>[e.item.text?(o(),c("div",ne({key:0,class:"item",role:$.value},ct(e.item.items?{click:C,keydown:C}:{},!0),{tabindex:e.item.items&&0}),[j[1]||(j[1]=i("div",{class:"indicator"},null,-1)),e.item.link?(o(),y(Y,{key:0,tag:w.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(o(),y(X(p.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(o(),y(X(p.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(o(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:ut(A,["enter"]),tabindex:"0"},[...j[0]||(j[0]=[i("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):m("",!0)],16,Eo)):m("",!0),e.item.items&&e.item.items.length?(o(),c("div",Do,[e.depth<5?(o(!0),c(I,{key:0},U(e.item.items,P=>(o(),y(F,{key:P.text,item:P,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),Oo=x(Fo,[["__scopeId","data-v-b3fd67f8"]]),jo=k({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=N(!0);let n=null;return se(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),dt(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,a)=>(o(!0),c(I,null,U(e.items,l=>(o(),c("div",{key:l.text,class:E(["group",{"no-transition":t.value}])},[b(Oo,{item:l,depth:0},null,8,["item"])],2))),128))}}),zo=x(jo,[["__scopeId","data-v-c40bc020"]]),Go={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Uo=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=te(),s=e,a=N(null),l=Fe(he?document.body:null);J([s,a],()=>{var v;s.open?(l.value=!0,(v=a.value)==null||v.focus()):l.value=!1},{immediate:!0,flush:"post"});const u=N(0);return J(t,()=>{u.value+=1},{deep:!0}),(v,f)=>r(n)?(o(),c("aside",{key:0,class:E(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:a,onClick:f[0]||(f[0]=vt(()=>{},["stop"]))},[f[2]||(f[2]=i("div",{class:"curtain"},null,-1)),i("nav",Go,[f[1]||(f[1]=i("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),d(v.$slots,"sidebar-nav-before",{},void 0,!0),(o(),y(zo,{items:r(t),key:u.value},null,8,["items"])),d(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),qo=x(Uo,[["__scopeId","data-v-319d5ca6"]]),Ro=k({__name:"VPSkipLink",setup(e){const{theme:t}=M(),n=ve(),s=N();J(()=>n.path,()=>s.value.focus());function a({target:l}){const u=document.getElementById(decodeURIComponent(l.hash).slice(1));if(u){const v=()=>{u.removeAttribute("tabindex"),u.removeEventListener("blur",v)};u.setAttribute("tabindex","-1"),u.addEventListener("blur",v),u.focus(),window.scrollTo(0,0)}}return(l,u)=>(o(),c(I,null,[i("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),i("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:a},T(r(t).skipToContentLabel||"Skip to content"),1)],64))}}),Wo=x(Ro,[["__scopeId","data-v-0b0ada53"]]),Ko=k({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=te(),a=ve();J(()=>a.path,s),Ct(t,s);const{frontmatter:l}=M(),u=ft(),v=g(()=>!!u["home-hero-image"]);return Oe("hero-image-slot-exists",v),(f,L)=>{const w=oe("Content");return r(l).layout!==!1?(o(),c("div",{key:0,class:E(["Layout",r(l).pageClass])},[d(f.$slots,"layout-top",{},void 0,!0),b(Wo),b(kt,{class:"backdrop",show:r(t),onClick:r(s)},null,8,["show","onClick"]),b(Bo,null,{"nav-bar-title-before":h(()=>[d(f.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(f.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[d(f.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[d(f.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[d(f.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[d(f.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(ws,{open:r(t),onOpenMenu:r(n)},null,8,["open","onOpenMenu"]),b(qo,{open:r(t)},{"sidebar-nav-before":h(()=>[d(f.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[d(f.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(vs,null,{"page-top":h(()=>[d(f.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[d(f.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[d(f.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[d(f.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[d(f.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(f.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(f.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(f.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(f.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[d(f.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[d(f.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[d(f.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[d(f.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[d(f.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[d(f.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[d(f.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[d(f.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[d(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[d(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[d(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(_s),d(f.$slots,"layout-bottom",{},void 0,!0)],2)):(o(),y(w,{key:1}))}}}),Zo=x(Ko,[["__scopeId","data-v-5d98c3a5"]]),We={Layout:Zo,enhanceApp:({app:e})=>{e.component("Badge",pt)}},Jo={class:"vix-footerbar",role:"contentinfo"},Xo={class:"vix-footerbar__inner"},Yo={class:"vix-footerbar__nav","aria-label":"Footer"},Qo=["href"],ei={__name:"Layout",setup(e){const{Layout:t}=We,n=[{text:"Docs",href:"/docs"},{text:"Guides",href:"/docs/guide"},{text:"Registry",href:"/registry"},{text:"Examples",href:"/docs/examples"},{text:"Services",href:"/services"}];return(s,a)=>(o(),y(r(t),null,{"layout-bottom":h(()=>[i("footer",Jo,[i("div",Xo,[a[0]||(a[0]=i("div",{class:"vix-footerbar__brand"},"Vix.cpp",-1)),i("nav",Yo,[(o(),c(I,null,U(n,l=>i("a",{key:l.text,class:"vix-footerbar__link",href:l.href},T(l.text),9,Qo)),64))]),a[1]||(a[1]=i("div",{class:"vix-footerbar__social","aria-label":"Social links"},[i("a",{class:"vix-footerbar__icon",href:"https://github.com/vixcpp",target:"_blank",rel:"noreferrer","aria-label":"GitHub"},[i("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[i("path",{d:`M12 2C6.48 2 2 6.58 2 12.26c0 4.54 2.87 8.39 6.84 9.75.5.1.68-.22.68-.48 - 0-.24-.01-.88-.01-1.73-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.49-1.11-1.49 - -.9-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.57 2.34 1.12 2.91.86 - .09-.66.35-1.12.63-1.38-2.22-.26-4.56-1.14-4.56-5.06 0-1.12.39-2.04 1.03-2.76 - -.1-.26-.45-1.3.1-2.71 0 0 .84-.27 2.75 1.05A9.2 9.2 0 0 1 12 7.07c.85 0 1.71.12 - 2.51.35 1.9-1.32 2.74-1.05 2.74-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.64 1.03 2.76 - 0 3.93-2.34 4.79-4.57 5.05.36.32.68.95.68 1.92 0 1.38-.01 2.5-.01 2.84 - 0 .27.18.59.69.48A10.04 10.04 0 0 0 22 12.26C22 6.58 17.52 2 12 2z`})])]),i("a",{class:"vix-footerbar__icon",href:"https://discord.gg/XXXX",target:"_blank",rel:"noreferrer","aria-label":"Discord"},[i("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[i("path",{d:`M20 4.5a16.3 16.3 0 0 0-4-1.3l-.2.4a15.5 15.5 0 0 1 3 1.2 - 11.9 11.9 0 0 0-3.7-1.1c-.6.8-1 1.7-1.2 2.1a14.5 14.5 0 0 0-3.8 0 - c-.2-.4-.6-1.3-1.2-2.1A11.9 11.9 0 0 0 5.2 4.8a15.5 15.5 0 0 1 3-1.2l-.2-.4 - a16.3 16.3 0 0 0-4 1.3C2.4 7 1.8 9.4 2 12c1.3 2 3.3 3.2 5.6 3.7 - l.4-.6a9.4 9.4 0 0 1-1.8-.9l.4-.3c1.1.5 2.3.9 3.5 1.1a13 13 0 0 0 4.8 0 - c1.2-.2 2.4-.6 3.5-1.1l.4.3c-.6.4-1.2.7-1.8.9l.4.6c2.3-.5 4.3-1.7 5.6-3.7 - .3-2.6-.4-5-2-7.5ZM9.2 12.9c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4 - 1.3.6 1.3 1.4-.6 1.4-1.3 1.4Zm5.6 0c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4 - 1.3.6 1.3 1.4-.6 1.4-1.3 1.4Z`})])]),i("a",{class:"vix-footerbar__icon",href:"https://x.com/vixcpp",target:"_blank",rel:"noreferrer","aria-label":"X"},[i("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[i("path",{d:"M18.9 2H22l-6.8 7.8L23 22h-6.7l-5.2-6.8L5.3 22H2l7.3-8.4L1.7 2h6.9l4.7 6.1L18.9 2Zm-1.2 18h1.7L7.7 3.9H5.9L17.7 20Z"})])]),i("a",{class:"vix-footerbar__icon",href:"https://www.youtube.com/@vixcpp",target:"_blank",rel:"noreferrer","aria-label":"YouTube"},[i("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor","aria-hidden":"true"},[i("path",{d:`M21.6 7.2a2.7 2.7 0 0 0-1.9-1.9C18 4.9 12 4.9 12 4.9s-6 0-7.7.4 - A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8 - 2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9 - A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z`})])])],-1))])])]),_:1}))}},ti={class:"code-head"},ni={class:"head-left"},si={class:"head-title"},ai={key:0,class:"chips"},oi={class:"head-right"},ii={key:0,class:"tabs"},li=["onClick"],ri=["title"],ci={key:0,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},ui={key:1,class:"ico",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},di={class:"code-pre"},vi=["innerHTML"],fi={key:0,class:"code-foot"},hi={class:"code-note"},Ke={__name:"CodeBlock",props:{title:{type:String,default:""},code:{type:String,default:""},run:{type:String,default:""},out:{type:String,default:""},note:{type:String,default:""},lang:{type:String,default:""},chips:{type:Array,default:()=>[]},maxHeight:{type:[Number,String],default:380}},setup(e){const t=e,n=N(!1),s=N("code"),a=N(!1),l=g(()=>{var _,G,Q;const P=[];return(_=t.code)!=null&&_.trim()&&P.push({key:"code",label:"Code",text:t.code,lang:$("code")}),(G=t.run)!=null&&G.trim()&&P.push({key:"run",label:"Run",text:t.run,lang:"shell"}),(Q=t.out)!=null&&Q.trim()&&P.push({key:"out",label:"Output",text:t.out,lang:"shell"}),P});J(()=>l.value.map(P=>P.key).join(","),()=>{var P;l.value.find(_=>_.key===s.value)||(s.value=((P=l.value[0])==null?void 0:P.key)||"code")},{immediate:!0});const u=g(()=>l.value.find(P=>P.key===s.value)||l.value[0]),v=g(()=>{var P;return((P=u.value)==null?void 0:P.text)||""}),f=g(()=>{var P;return((P=u.value)==null?void 0:P.lang)||$(s.value)}),L=g(()=>s.value==="run"?"Run":s.value==="out"?"Output":f.value==="shell"?"Shell":"C++"),w=g(()=>(t.chips||[]).filter(Boolean)),p=g(()=>{const P=t.maxHeight;return typeof P=="number"?`${P}px`:typeof P=="string"&&P.trim()?P:"380px"});function $(P){if(t.lang)return t.lang;if(P==="run"||P==="out")return"shell";const _=(t.code||"").trim();return _.includes("#include")||_.includes("int main")||_.includes("std::")?"cpp":_.startsWith("~$")||_.includes(" vix ")||_.includes("$ ")?"shell":"cpp"}function S(P){return String(P).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function C(P){return String(P??"").split(` -`).map(G=>{let Q=G.replace(/^\s*>\s?/,"");return Q=Q.replace(/\s*>\s*:(\d{2,5})/g," :$1"),Q}).join(` -`)}function A(P){const G=String(P??"").split(` -`),Q=new Set(["alignas","alignof","and","and_eq","asm","auto","bitand","bitor","bool","break","case","catch","char","char8_t","char16_t","char32_t","class","compl","concept","const","consteval","constexpr","constinit","const_cast","continue","co_await","co_return","co_yield","decltype","default","delete","do","double","dynamic_cast","else","enum","explicit","export","extern","false","float","for","friend","goto","if","inline","int","long","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","private","protected","public","register","reinterpret_cast","requires","return","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","while","xor","xor_eq"]),Ze=new Set(["size_t","ssize_t","string","string_view","vector","map","unordered_map","set","unordered_set","optional","variant","expected","unique_ptr","shared_ptr","weak_ptr","App","Request","Response","Context"]),Je=new Set(["std","vix","asio","net","http","ws"]);function W(V,H){return`${S(H)}`}function Xe(V){let H=!1,B=!1;for(let R=0;R\n]*>)(.*)$/);if(z)return q+=S(z[1]),q+=W("cpp-include",z[2]),q+=le(z[3]||""),q;const D=R.match(/^(\s*)("([^"\\]|\\.)*")(.*)$/);return D?(q+=S(D[1]),q+=W("cpp-include",D[2]),q+=le(D[4]||""),q):(q+=le(R),q)}function le(V){let H="",B=0;const R=z=>/[A-Za-z_]/.test(z),q=z=>/[A-Za-z0-9_]/.test(z);for(;B{for(let Z=B-1;Z>=0;Z--)if(V[Z]!==" "&&V[Z]!==" ")return V[Z];return""})(),Qe=(()=>{for(let Z=D;Z"?H+=W("cpp-member",K):H+=W("cpp-ident",K),B=D;continue}if(/[\(\)\{\}\[\]\;\,\.\:\=\+\-\*\/\<\>\!\&\|\?]/.test(z)){if(V.startsWith("::",B)){H+=W("cpp-op","::"),B+=2;continue}if(V.startsWith("->",B)){H+=W("cpp-op","->"),B+=2;continue}H+=W("cpp-op",z),B++;continue}H+=S(z),B++}return H=H.replace(/(https?:\/\/[^\s<]+)/g,'$1'),H}return G.map(V=>{const{code:H,comment:B}=Xe(V),q=Ye(H)??le(H),z=B?`${S(B)}`:"";return q+z}).join(` -`)}function O(P){let _=S(C(P));return _=_.replace(/^(\s*(?:~|\/[^$]*)?\s*\$)/gm,'$1'),_=_.replace(/(^\s*(?:.*?<\/span>\s*)?)([a-zA-Z0-9_.\/-]+)(\s+)/gm,'$1$2$3'),_=_.replace(/(\s--?[a-zA-Z0-9_-]+(?:=[^\s]+)?)/g,'$1'),_=_.replace(/(https?:\/\/[^\s]+)/g,'$1'),_=_.replace(/(\s(?:\.{0,2}\/[^\s]+))/g,'$1'),_=_.replace(/(:\d{2,5}\b)/g,'$1'),_=_.replace(/(\s\|\|\s|\s\|\s)/g,'$1'),_=_.replace(/^(HTTP\/\d\.\d\s+\d+\s+.*)$/gm,'$1'),_=_.replace(/^([A-Za-z-]+:\s*)(.*)$/gm,'$1$2'),_}const j=g(()=>{const P=v.value||"";return f.value==="shell"?O(P):A(P)});async function F(P){try{await navigator.clipboard.writeText(P),n.value=!0,window.clearTimeout(F._t),F._t=window.setTimeout(()=>n.value=!1,900)}catch{const _=document.createElement("textarea");_.value=P,_.style.position="fixed",_.style.opacity="0",document.body.appendChild(_),_.focus(),_.select();try{document.execCommand("copy"),n.value=!0,window.clearTimeout(F._t),F._t=window.setTimeout(()=>n.value=!1,900)}finally{document.body.removeChild(_)}}}return(P,_)=>(o(),c("div",{class:"code-card",onMouseenter:_[1]||(_[1]=G=>a.value=!0),onMouseleave:_[2]||(_[2]=G=>a.value=!1)},[i("div",ti,[i("div",ni,[_[3]||(_[3]=i("span",{class:"dot dot-red"},null,-1)),_[4]||(_[4]=i("span",{class:"dot dot-yellow"},null,-1)),_[5]||(_[5]=i("span",{class:"dot dot-green"},null,-1)),i("span",si,T(e.title||L.value),1),w.value.length?(o(),c("div",ai,[(o(!0),c(I,null,U(w.value,G=>(o(),c("span",{key:G,class:"chip"},T(G),1))),128))])):m("",!0)]),i("div",oi,[l.value.length>1?(o(),c("div",ii,[(o(!0),c(I,null,U(l.value,G=>(o(),c("button",{key:G.key,type:"button",class:E(["tab",{active:s.value===G.key}]),onClick:Q=>s.value=G.key},T(G.label),11,li))),128))])):m("",!0),v.value?(o(),c("button",{key:1,type:"button",class:"copy-btn",onClick:_[0]||(_[0]=G=>F(v.value)),title:n.value?"Copied":"Copy","aria-label":"Copy"},[n.value?(o(),c("svg",ui,[..._[7]||(_[7]=[i("path",{d:"M20 7L10 17l-4-4",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(o(),c("svg",ci,[..._[6]||(_[6]=[i("path",{d:"M9 9h10v10H9V9Z",stroke:"currentColor","stroke-width":"1.7","stroke-linejoin":"round"},null,-1),i("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1",stroke:"currentColor","stroke-width":"1.7","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))],8,ri)):m("",!0)])]),i("div",{class:"code-body",style:Se({maxHeight:p.value}),role:"region","aria-label":"Code block"},[i("pre",di,[i("code",{class:"code-code",innerHTML:j.value},null,8,vi)])],4),e.note?(o(),c("div",fi,[i("p",hi,T(e.note),1)])):m("",!0)],32))}},pi={class:"vix-docs-hero"},mi={class:"vix-docs-hero__right"},_i={class:"vix-hero-cards"},ki=["href"],gi={class:"vix-hero-card__top"},bi={class:"vix-hero-card__icon","aria-hidden":"true"},$i={viewBox:"0 0 24 24",fill:"none"},yi=["d"],Pi={class:"vix-hero-card__title"},xi={class:"vix-hero-card__desc"},Li=`#include -using namespace vix; - -int main() -{ - App app; - - app.get("/", [](Request&, Response& res){ - res.send("Hello"); - }); - - app.run(8080); -}`,Si={__name:"DocsHomeHero",setup(e){const t=[{title:"HTTP APIs",desc:"Build fast endpoints with explicit routing, predictable performance, and zero hidden magic.",icon:"swap",href:"/docs/api"},{title:"WebSockets",desc:"Real time channels with robust connection handling and backpressure friendly design.",icon:"bolt",href:"/docs/guide"},{title:"Async Tasks",desc:"A unified runtime for scheduling, timers, and concurrency in performance critical workloads.",icon:"chip",href:"/docs/tutorial"},{title:"P2P",desc:"Peer to peer communication primitives designed for unstable networks and local first systems.",icon:"p2p",href:"/docs/p2p"}];function n(s){return s==="swap"?"M7 7h11l-2-2m2 2l-2 2M17 17H6l2 2m-2-2l2-2":s==="bolt"?"M13 2L4 14h7l-1 8 9-12h-7l1-8z":s==="chip"?"M9 9h6v6H9V9zm-5 3h2m12 0h2M12 4v2m0 12v2M6.5 6.5l1.4 1.4m8.2 8.2l1.4 1.4m0-12.4l-1.4 1.4M7.9 16.1l-1.4 1.4":"M6 12a2 2 0 114 0 2 2 0 01-4 0zm8-6a2 2 0 114 0 2 2 0 01-4 0zm0 12a2 2 0 114 0 2 2 0 01-4 0zM10 12l4-6M10 12l4 6"}return(s,a)=>(o(),c(I,null,[i("div",pi,[a[1]||(a[1]=ht('

Vix.cpp Documentation

A modern C++ runtime for building fast, explicit, and offline-first applications.

Vix.cpp is designed for real-world conditions: unstable networks, constrained environments, and performance-critical workloads. It provides a unified runtime for HTTP APIs, WebSockets, async tasks, and local-first systems, without garbage collection or hidden magic.

',1)),i("div",mi,[a[0]||(a[0]=i("div",{class:"vix-hero-annot vix-hint"},[ee(" Your runtime endpoint "),i("br"),ee(" works with the Vix.cpp API ")],-1)),b(Ke,{title:"main.cpp",lang:"cpp",chips:["http"],code:Li,maxHeight:360})])]),i("div",_i,[(o(),c(I,null,U(t,l=>i("a",{key:l.title,class:"vix-hero-card",href:l.href},[i("div",gi,[i("div",bi,[(o(),c("svg",$i,[i("path",{d:n(l.icon),stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},null,8,yi)]))]),a[2]||(a[2]=i("div",{class:"vix-hero-card__arrow","aria-hidden":"true"},[i("svg",{viewBox:"0 0 24 24",fill:"none"},[i("path",{d:"M9 6l6 6-6 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1))]),i("div",Pi,T(l.title),1),i("div",xi,T(l.desc),1)],8,ki)),64))])],64))}},Vi={class:"vix-code-tabs"},wi={class:"vix-code-tabs__head"},Ti={class:"vix-code-tabs__meta"},Mi={class:"vix-code-tabs__title"},Ci={key:0,class:"vix-code-tabs__subtitle"},Ni=["aria-selected","tabindex","data-key","onClick"],Ai={class:"vix-code-tabs__body"},Ii={key:0,class:"vix-code-tabs__file"},Hi={class:"vix-code-tabs__badge"},Bi={class:"vix-code-tabs__filename"},Ei={__name:"CodeTabs",props:{title:{type:String,default:"Examples"},subtitle:{type:String,default:""},examples:{type:Array,required:!0},defaultKey:{type:String,default:""}},setup(e){var L,w;const t=e,n=N(t.defaultKey||(((w=(L=t.examples)==null?void 0:L[0])==null?void 0:w.key)??""));J(()=>{var p;return[t.defaultKey,(p=t.examples)==null?void 0:p.map($=>$.key).join("|")].join("::")},()=>{var S,C,A;const p=t.defaultKey||n.value,$=(S=t.examples)==null?void 0:S.some(O=>O.key===p);n.value=$?p:((A=(C=t.examples)==null?void 0:C[0])==null?void 0:A.key)??""},{immediate:!0});const s=g(()=>t.examples.find(p=>p.key===n.value)||t.examples[0]||null);function a(p){n.value=p}function l(p){var O,j,F,P;const $=((O=t.examples)==null?void 0:O.map(_=>_.key))??[];if(!$.length)return;const S=Math.max(0,$.indexOf(n.value));let C=S;if(p.key==="ArrowRight")C=(S+1)%$.length;else if(p.key==="ArrowLeft")C=(S-1+$.length)%$.length;else if(p.key==="Home")C=0;else if(p.key==="End")C=$.length-1;else return;p.preventDefault(),n.value=$[C];const A=(F=(j=p.currentTarget)==null?void 0:j.querySelector)==null?void 0:F.call(j,`button[data-key="${n.value}"]`);(P=A==null?void 0:A.focus)==null||P.call(A)}const u=g(()=>{const p=s.value;return p&&(p.title||p.file||p.label)||""}),v=g(()=>{var p;return((p=s.value)==null?void 0:p.lang)||""}),f=g(()=>{var p;return Array.isArray((p=s.value)==null?void 0:p.chips)?s.value.chips:[]});return(p,$)=>{var S,C,A,O,j;return o(),c("div",Vi,[i("div",wi,[i("div",Ti,[i("div",Mi,T(e.title),1),e.subtitle?(o(),c("div",Ci,T(e.subtitle),1)):m("",!0)]),i("div",{class:"vix-code-tabs__tabs",role:"tablist","aria-label":"Code examples",onKeydown:l},[(o(!0),c(I,null,U(e.examples,F=>(o(),c("button",{key:F.key,class:E(["vix-code-tabs__tab",{"is-active":F.key===n.value}]),"aria-selected":F.key===n.value,tabindex:F.key===n.value?0:-1,role:"tab",type:"button","data-key":F.key,onClick:P=>a(F.key)},T(F.label),11,Ni))),128))],32)]),i("div",Ai,[(S=s.value)!=null&&S.file?(o(),c("div",Ii,[i("span",Hi,T(s.value.lang||"txt"),1),i("span",Bi,T(s.value.file),1)])):m("",!0),b(Ke,{title:u.value,lang:v.value,chips:f.value,code:((C=s.value)==null?void 0:C.code)||"",run:((A=s.value)==null?void 0:A.run)||"",out:((O=s.value)==null?void 0:O.out)||"",note:((j=s.value)==null?void 0:j.note)||"",maxHeight:420},null,8,["title","lang","chips","code","run","out","note"])])])}}},Di=x(Ei,[["__scopeId","data-v-85e456b0"]]),Oi={...We,Layout:ei,enhanceApp({app:e}){e.component("DocsHomeHero",Si),e.component("CodeTabs",Di)}};export{Oi as R,Ca as c,M as u}; diff --git a/docs/assets/examples_async.md.DC-C3EKa.js b/docs/assets/examples_async.md.CYRqsL5r.js similarity index 96% rename from docs/assets/examples_async.md.DC-C3EKa.js rename to docs/assets/examples_async.md.CYRqsL5r.js index 926b8c9cd..ad5c9615c 100644 --- a/docs/assets/examples_async.md.DC-C3EKa.js +++ b/docs/assets/examples_async.md.CYRqsL5r.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"async-worker","description":"","frontmatter":{},"headers":[],"relativePath":"examples/async.md","filePath":"examples/async.md","lastUpdated":1770798288000}'),k={name:"examples/async.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

async-worker ​

Minimal examples for Vix async. All code is kept inside main() on purpose.

Run ​

bash
vix run examples/async-worker.cpp

Example: timer + cpu_pool + stop ​

cpp
#include <cassert>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"async-worker","description":"","frontmatter":{},"headers":[],"relativePath":"examples/async.md","filePath":"examples/async.md","lastUpdated":1770798288000}'),k={name:"examples/async.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

async-worker ​

Minimal examples for Vix async. All code is kept inside main() on purpose.

Run ​

bash
vix run examples/async-worker.cpp

Example: timer + cpu_pool + stop ​

cpp
#include <cassert>
 #include <chrono>
 #include <iostream>
 
@@ -192,4 +192,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
 
   std::cout << "[async] server stopped\\n";
   return 0;
-}
`,10)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; +}
`,10)])])}const c=i(k,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/examples_async.md.CYRqsL5r.lean.js b/docs/assets/examples_async.md.CYRqsL5r.lean.js new file mode 100644 index 000000000..d8004f724 --- /dev/null +++ b/docs/assets/examples_async.md.CYRqsL5r.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"async-worker","description":"","frontmatter":{},"headers":[],"relativePath":"examples/async.md","filePath":"examples/async.md","lastUpdated":1770798288000}'),k={name:"examples/async.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",10)])])}const c=i(k,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/examples_async.md.DC-C3EKa.lean.js b/docs/assets/examples_async.md.DC-C3EKa.lean.js deleted file mode 100644 index 1335d9777..000000000 --- a/docs/assets/examples_async.md.DC-C3EKa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"async-worker","description":"","frontmatter":{},"headers":[],"relativePath":"examples/async.md","filePath":"examples/async.md","lastUpdated":1770798288000}'),k={name:"examples/async.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",10)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/examples_auth.md.O7WdPNBR.js b/docs/assets/examples_auth.md.CgElZaK2.js similarity index 90% rename from docs/assets/examples_auth.md.O7WdPNBR.js rename to docs/assets/examples_auth.md.CgElZaK2.js index 5a8f1d90d..80717c988 100644 --- a/docs/assets/examples_auth.md.O7WdPNBR.js +++ b/docs/assets/examples_auth.md.CgElZaK2.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"examples/auth.md","filePath":"examples/auth.md","lastUpdated":1770798288000}'),t={name:"examples/auth.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Auth ​

This example demonstrates a minimal "auth" pattern using:

  • Middleware
  • Headers
  • Protected routes
  • 401 and 403 responses

Everything is inside main().


Goal ​

We want:

  • a public route: /
  • a protected route: /me
  • auth based on a header: Authorization: Bearer <token>

Full Example ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"examples/auth.md","filePath":"examples/auth.md","lastUpdated":1770798288000}'),t={name:"examples/auth.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Auth ​

This example demonstrates a minimal "auth" pattern using:

  • Middleware
  • Headers
  • Protected routes
  • 401 and 403 responses

Everything is inside main().


Goal ​

We want:

  • a public route: /
  • a protected route: /me
  • auth based on a header: Authorization: Bearer <token>

Full Example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -62,4 +62,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
 
   app.run(8080);
   return 0;
-}

Test with curl ​

Public:

bash
curl -i http://127.0.0.1:8080/

Protected without token:

bash
curl -i http://127.0.0.1:8080/me

Protected with token:

bash
curl -i -H "Authorization: Bearer dev_token" http://127.0.0.1:8080/me

Notes ​

  • This is a demo pattern, not a production auth system.
  • For real auth, prefer dedicated modules (API key, JWT, sessions).
  • Middleware can stop the chain by not calling next().

Next example: ws-chat.

`,23)])])}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; +}

Test with curl ​

Public:

bash
curl -i http://127.0.0.1:8080/

Protected without token:

bash
curl -i http://127.0.0.1:8080/me

Protected with token:

bash
curl -i -H "Authorization: Bearer dev_token" http://127.0.0.1:8080/me

Notes ​

  • This is a demo pattern, not a production auth system.
  • For real auth, prefer dedicated modules (API key, JWT, sessions).
  • Middleware can stop the chain by not calling next().

Next example: ws-chat.

`,23)])])}const F=i(t,[["render",l]]);export{y as __pageData,F as default}; diff --git a/docs/assets/examples_auth.md.CgElZaK2.lean.js b/docs/assets/examples_auth.md.CgElZaK2.lean.js new file mode 100644 index 000000000..0969d2c47 --- /dev/null +++ b/docs/assets/examples_auth.md.CgElZaK2.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"examples/auth.md","filePath":"examples/auth.md","lastUpdated":1770798288000}'),t={name:"examples/auth.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",23)])])}const F=i(t,[["render",l]]);export{y as __pageData,F as default}; diff --git a/docs/assets/examples_auth.md.O7WdPNBR.lean.js b/docs/assets/examples_auth.md.O7WdPNBR.lean.js deleted file mode 100644 index 0ca562f07..000000000 --- a/docs/assets/examples_auth.md.O7WdPNBR.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"examples/auth.md","filePath":"examples/auth.md","lastUpdated":1770798288000}'),t={name:"examples/auth.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",23)])])}const o=i(t,[["render",l]]);export{g as __pageData,o as default}; diff --git a/docs/assets/examples_hello-http.md.Bs36fnd8.js b/docs/assets/examples_hello-http.md.BEf9uPoV.js similarity index 91% rename from docs/assets/examples_hello-http.md.Bs36fnd8.js rename to docs/assets/examples_hello-http.md.BEf9uPoV.js index 6c582a0c2..d9f7cad34 100644 --- a/docs/assets/examples_hello-http.md.Bs36fnd8.js +++ b/docs/assets/examples_hello-http.md.BEf9uPoV.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Hello HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"examples/hello-http.md","filePath":"examples/hello-http.md","lastUpdated":1770798288000}'),l={name:"examples/hello-http.md"};function h(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Hello HTTP ​

This is the most minimal HTTP server you can build with Vix.

It demonstrates:

  • App
  • GET route
  • Text response
  • JSON response
  • app.run()

Everything is inside main().


Minimal Hello World ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Hello HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"examples/hello-http.md","filePath":"examples/hello-http.md","lastUpdated":1770798288000}'),l={name:"examples/hello-http.md"};function h(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Hello HTTP ​

This is the most minimal HTTP server you can build with Vix.

It demonstrates:

  • App
  • GET route
  • Text response
  • JSON response
  • app.run()

Everything is inside main().


Minimal Hello World ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -69,4 +69,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
 
   app.run(8080);
   return 0;
-}

What this example teaches ​

  • How routing works
  • How responses are sent
  • How JSON helpers are used
  • How minimal Vix setup looks

Next example: auth.

`,24)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; +}

What this example teaches ​

  • How routing works
  • How responses are sent
  • How JSON helpers are used
  • How minimal Vix setup looks

Next example: auth.

`,24)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/examples_hello-http.md.BEf9uPoV.lean.js b/docs/assets/examples_hello-http.md.BEf9uPoV.lean.js new file mode 100644 index 000000000..d82890779 --- /dev/null +++ b/docs/assets/examples_hello-http.md.BEf9uPoV.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Hello HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"examples/hello-http.md","filePath":"examples/hello-http.md","lastUpdated":1770798288000}'),l={name:"examples/hello-http.md"};function h(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",24)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/examples_hello-http.md.Bs36fnd8.lean.js b/docs/assets/examples_hello-http.md.Bs36fnd8.lean.js deleted file mode 100644 index 958f8df03..000000000 --- a/docs/assets/examples_hello-http.md.Bs36fnd8.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Hello HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"examples/hello-http.md","filePath":"examples/hello-http.md","lastUpdated":1770798288000}'),l={name:"examples/hello-http.md"};function h(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",24)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/examples_index.md.CrxQfvun.js b/docs/assets/examples_index.md.CrxQfvun.js deleted file mode 100644 index b36311b40..000000000 --- a/docs/assets/examples_index.md.CrxQfvun.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as l,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1770798288000}'),o={name:"examples/index.md"};function r(n,a,s,p,h,c){return l(),i("div",null,[...a[0]||(a[0]=[t('

Examples ​

This section contains practical, minimal examples built with Vix.

Each example is:

  • Self-contained
  • Minimal
  • Focused on one concept
  • Everything inside main()
  • Ready to copy and run

Available Examples ​

hello-http ​

A minimal HTTP server with one route.

Concepts:

  • App
  • GET route
  • Response
  • app.run()

auth ​

A simple authentication example using:

  • Headers
  • Middleware
  • 401 responses
  • Protected routes

ws-chat ​

A minimal WebSocket chat example using:

  • Typed messages
  • broadcast_json
  • Rooms
  • Basic chat protocol

async-worker ​

A background async worker example showing:

  • Thread pool usage
  • Non-blocking handlers
  • Task execution off the main request thread

p2p-ping ​

A minimal peer-to-peer example demonstrating:

  • Basic P2P communication
  • Message exchange
  • Simple ping/pong behavior

Philosophy ​

Examples are not production templates.

They are:

  • Concept demonstrations
  • Minimal by design
  • Explicit over abstract
  • Easy to understand

Use them as building blocks.

',32)])])}const u=e(o,[["render",r]]);export{m as __pageData,u as default}; diff --git a/docs/assets/examples_index.md.CrxQfvun.lean.js b/docs/assets/examples_index.md.CrxQfvun.lean.js deleted file mode 100644 index 6763e5a6e..000000000 --- a/docs/assets/examples_index.md.CrxQfvun.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as l,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1770798288000}'),o={name:"examples/index.md"};function r(n,a,s,p,h,c){return l(),i("div",null,[...a[0]||(a[0]=[t("",32)])])}const u=e(o,[["render",r]]);export{m as __pageData,u as default}; diff --git a/docs/assets/examples_index.md.DPfJojLT.js b/docs/assets/examples_index.md.DPfJojLT.js new file mode 100644 index 000000000..ac666d5e7 --- /dev/null +++ b/docs/assets/examples_index.md.DPfJojLT.js @@ -0,0 +1 @@ +import{_ as e,o as l,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const x=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1770798288000}'),o={name:"examples/index.md"};function r(n,a,s,p,h,c){return l(),i("div",null,[...a[0]||(a[0]=[t('

Examples ​

This section contains practical, minimal examples built with Vix.

Each example is:

  • Self-contained
  • Minimal
  • Focused on one concept
  • Everything inside main()
  • Ready to copy and run

Available Examples ​

hello-http ​

A minimal HTTP server with one route.

Concepts:

  • App
  • GET route
  • Response
  • app.run()

auth ​

A simple authentication example using:

  • Headers
  • Middleware
  • 401 responses
  • Protected routes

ws-chat ​

A minimal WebSocket chat example using:

  • Typed messages
  • broadcast_json
  • Rooms
  • Basic chat protocol

async-worker ​

A background async worker example showing:

  • Thread pool usage
  • Non-blocking handlers
  • Task execution off the main request thread

p2p-ping ​

A minimal peer-to-peer example demonstrating:

  • Basic P2P communication
  • Message exchange
  • Simple ping/pong behavior

Philosophy ​

Examples are not production templates.

They are:

  • Concept demonstrations
  • Minimal by design
  • Explicit over abstract
  • Easy to understand

Use them as building blocks.

',32)])])}const b=e(o,[["render",r]]);export{x as __pageData,b as default}; diff --git a/docs/assets/examples_index.md.DPfJojLT.lean.js b/docs/assets/examples_index.md.DPfJojLT.lean.js new file mode 100644 index 000000000..9080fdd1b --- /dev/null +++ b/docs/assets/examples_index.md.DPfJojLT.lean.js @@ -0,0 +1 @@ +import{_ as e,o as l,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const x=JSON.parse('{"title":"Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples/index.md","filePath":"examples/index.md","lastUpdated":1770798288000}'),o={name:"examples/index.md"};function r(n,a,s,p,h,c){return l(),i("div",null,[...a[0]||(a[0]=[t("",32)])])}const b=e(o,[["render",r]]);export{x as __pageData,b as default}; diff --git a/docs/assets/examples_ws-chat.md.eDbQjLWx.js b/docs/assets/examples_ws-chat.md.HMvyKNE_.js similarity index 95% rename from docs/assets/examples_ws-chat.md.eDbQjLWx.js rename to docs/assets/examples_ws-chat.md.HMvyKNE_.js index f1120a41b..afcd61e41 100644 --- a/docs/assets/examples_ws-chat.md.eDbQjLWx.js +++ b/docs/assets/examples_ws-chat.md.HMvyKNE_.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"WS Chat","description":"","frontmatter":{},"headers":[],"relativePath":"examples/ws-chat.md","filePath":"examples/ws-chat.md","lastUpdated":1770798288000}'),k={name:"examples/ws-chat.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

WS Chat ​

This example demonstrates a minimal WebSocket chat in Vix using:

  • serve_http_and_ws
  • Typed messages: { "type": "...", "payload": {...} }
  • Broadcast to everyone or to a room
  • Optional long-polling bridge endpoints

Everything is inside main().


Chat protocol ​

Client sends:

json
{
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"WS Chat","description":"","frontmatter":{},"headers":[],"relativePath":"examples/ws-chat.md","filePath":"examples/ws-chat.md","lastUpdated":1770798288000}'),k={name:"examples/ws-chat.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

WS Chat ​

This example demonstrates a minimal WebSocket chat in Vix using:

  • serve_http_and_ws
  • Typed messages: { "type": "...", "payload": {...} }
  • Broadcast to everyone or to a room
  • Optional long-polling bridge endpoints

Everything is inside main().


Chat protocol ​

Client sends:

json
{
   "type": "chat.message",
   "payload": {
     "room": "general",
@@ -95,4 +95,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   });
 
   return 0;
-}

Test quickly ​

Start:

bash
vix run examples/ws_chat.cpp

Check HTTP:

bash
curl -i http://127.0.0.1:8080/

Check status:

bash
curl -i http://127.0.0.1:8080/ws/status

Notes ​

  • The transport can be native WebSocket or long-polling fallback.
  • Use typed messages to keep protocol explicit.
  • For real apps, validate payload fields and enforce limits.

Next example: async-worker.

`,24)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; +}

Test quickly ​

Start:

bash
vix run examples/ws_chat.cpp

Check HTTP:

bash
curl -i http://127.0.0.1:8080/

Check status:

bash
curl -i http://127.0.0.1:8080/ws/status

Notes ​

  • The transport can be native WebSocket or long-polling fallback.
  • Use typed messages to keep protocol explicit.
  • For real apps, validate payload fields and enforce limits.

Next example: async-worker.

`,24)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/examples_ws-chat.md.HMvyKNE_.lean.js b/docs/assets/examples_ws-chat.md.HMvyKNE_.lean.js new file mode 100644 index 000000000..8933b65bb --- /dev/null +++ b/docs/assets/examples_ws-chat.md.HMvyKNE_.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"WS Chat","description":"","frontmatter":{},"headers":[],"relativePath":"examples/ws-chat.md","filePath":"examples/ws-chat.md","lastUpdated":1770798288000}'),k={name:"examples/ws-chat.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",24)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/examples_ws-chat.md.eDbQjLWx.lean.js b/docs/assets/examples_ws-chat.md.eDbQjLWx.lean.js deleted file mode 100644 index dae7bd7aa..000000000 --- a/docs/assets/examples_ws-chat.md.eDbQjLWx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"WS Chat","description":"","frontmatter":{},"headers":[],"relativePath":"examples/ws-chat.md","filePath":"examples/ws-chat.md","lastUpdated":1770798288000}'),k={name:"examples/ws-chat.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",24)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/fundamentals_errors.md.CbEZeIqV.js b/docs/assets/fundamentals_errors.md.CKqZQisS.js similarity index 94% rename from docs/assets/fundamentals_errors.md.CbEZeIqV.js rename to docs/assets/fundamentals_errors.md.CKqZQisS.js index f8217477c..471896715 100644 --- a/docs/assets/fundamentals_errors.md.CbEZeIqV.js +++ b/docs/assets/fundamentals_errors.md.CKqZQisS.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Errors","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/errors.md","filePath":"fundamentals/errors.md","lastUpdated":1770798288000}'),h={name:"fundamentals/errors.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Errors ​

Error handling in Vix is explicit.

There is no hidden exception translation layer. You decide:

  • The status code
  • The error structure
  • The message format

Basic error response ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Errors","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/errors.md","filePath":"fundamentals/errors.md","lastUpdated":1770798288000}'),h={name:"fundamentals/errors.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Errors ​

Error handling in Vix is explicit.

There is no hidden exception translation layer. You decide:

  • The status code
  • The error structure
  • The message format

Basic error response ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -100,4 +100,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
 }

Example:

cpp
res.status(400).json({
   "error", "Invalid input",
   "code", 400
-});

Important rules ​

  • Always set an appropriate status code.
  • Always return a clear error message.
  • Avoid sending partial responses.
  • Send the response once.

Philosophy ​

Vix does not decide what an error looks like.

You do.

That makes the system:

  • Predictable
  • Transparent
  • Production-safe
`,31)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; +});

Important rules ​

  • Always set an appropriate status code.
  • Always return a clear error message.
  • Avoid sending partial responses.
  • Send the response once.

Philosophy ​

Vix does not decide what an error looks like.

You do.

That makes the system:

  • Predictable
  • Transparent
  • Production-safe
`,31)])])}const o=i(h,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/fundamentals_errors.md.CKqZQisS.lean.js b/docs/assets/fundamentals_errors.md.CKqZQisS.lean.js new file mode 100644 index 000000000..c42b6dcb9 --- /dev/null +++ b/docs/assets/fundamentals_errors.md.CKqZQisS.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Errors","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/errors.md","filePath":"fundamentals/errors.md","lastUpdated":1770798288000}'),h={name:"fundamentals/errors.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",31)])])}const o=i(h,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/fundamentals_errors.md.CbEZeIqV.lean.js b/docs/assets/fundamentals_errors.md.CbEZeIqV.lean.js deleted file mode 100644 index 2a3ffd043..000000000 --- a/docs/assets/fundamentals_errors.md.CbEZeIqV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Errors","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/errors.md","filePath":"fundamentals/errors.md","lastUpdated":1770798288000}'),h={name:"fundamentals/errors.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",31)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/fundamentals_index.md.BZGGmGIw.lean.js b/docs/assets/fundamentals_index.md.BZGGmGIw.lean.js deleted file mode 100644 index 3ed115a22..000000000 --- a/docs/assets/fundamentals_index.md.BZGGmGIw.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Fundamentals","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/index.md","filePath":"fundamentals/index.md","lastUpdated":1770798288000}'),t={name:"fundamentals/index.md"};function l(p,s,h,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",37)])])}const c=i(t,[["render",l]]);export{o as __pageData,c as default}; diff --git a/docs/assets/fundamentals_index.md.BZGGmGIw.js b/docs/assets/fundamentals_index.md.DlOPBm_y.js similarity index 63% rename from docs/assets/fundamentals_index.md.BZGGmGIw.js rename to docs/assets/fundamentals_index.md.DlOPBm_y.js index f48be6cf9..68693b3d9 100644 --- a/docs/assets/fundamentals_index.md.BZGGmGIw.js +++ b/docs/assets/fundamentals_index.md.DlOPBm_y.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Fundamentals","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/index.md","filePath":"fundamentals/index.md","lastUpdated":1770798288000}'),t={name:"fundamentals/index.md"};function l(p,s,h,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

Fundamentals ​

This section explains the core building blocks of Vix.

Before building larger systems, you should understand:

  • The App runtime
  • The Request object
  • The Response object
  • The routing model
  • The execution flow

Everything in Vix is explicit and predictable.


The Runtime ​

Every Vix application starts with:

cpp
App app;

This creates the HTTP runtime.

Routes are registered on the app instance.

The server starts with:

cpp
app.run(8080);

The Execution Model ​

When a request arrives:

  1. The route is matched.
  2. The handler lambda is executed.
  3. You control the response.
  4. The connection is finalized.

There is no hidden magic layer.


The Request Object ​

Inside handlers:

cpp
app.get("/", [](Request& req, Response& res) {
+import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Fundamentals","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/index.md","filePath":"fundamentals/index.md","lastUpdated":1770798288000}'),t={name:"fundamentals/index.md"};function l(p,s,h,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

Fundamentals ​

This section explains the core building blocks of Vix.

Before building larger systems, you should understand:

  • The App runtime
  • The Request object
  • The Response object
  • The routing model
  • The execution flow

Everything in Vix is explicit and predictable.


The Runtime ​

Every Vix application starts with:

cpp
App app;

This creates the HTTP runtime.

Routes are registered on the app instance.

The server starts with:

cpp
app.run(8080);

The Execution Model ​

When a request arrives:

  1. The route is matched.
  2. The handler lambda is executed.
  3. You control the response.
  4. The connection is finalized.

There is no hidden magic layer.


The Request Object ​

Inside handlers:

cpp
app.get("/", [](Request& req, Response& res) {
   // req gives you access to:
   // - path params
   // - query params
@@ -20,4 +20,4 @@ import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const o
   });
 
   app.run(8080);
-}

Design Principles ​

Vix fundamentals are built on:

  • Explicit behavior
  • Predictable lifecycle
  • No implicit middleware
  • No runtime reflection
  • No hidden state machines

The goal is clarity and performance.

`,37)])])}const c=i(t,[["render",l]]);export{o as __pageData,c as default}; +}

Design Principles ​

Vix fundamentals are built on:

  • Explicit behavior
  • Predictable lifecycle
  • No implicit middleware
  • No runtime reflection
  • No hidden state machines

The goal is clarity and performance.

`,37)])])}const u=i(t,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/assets/fundamentals_index.md.DlOPBm_y.lean.js b/docs/assets/fundamentals_index.md.DlOPBm_y.lean.js new file mode 100644 index 000000000..fcb733207 --- /dev/null +++ b/docs/assets/fundamentals_index.md.DlOPBm_y.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Fundamentals","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/index.md","filePath":"fundamentals/index.md","lastUpdated":1770798288000}'),t={name:"fundamentals/index.md"};function l(p,s,h,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",37)])])}const u=i(t,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.js b/docs/assets/fundamentals_lifecycle.md.BdTmKarV.js similarity index 85% rename from docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.js rename to docs/assets/fundamentals_lifecycle.md.BdTmKarV.js index afe1ccdf1..a517caedd 100644 --- a/docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.js +++ b/docs/assets/fundamentals_lifecycle.md.BdTmKarV.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Lifecycle","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/lifecycle.md","filePath":"fundamentals/lifecycle.md","lastUpdated":1770798288000}'),l={name:"fundamentals/lifecycle.md"};function t(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

Lifecycle ​

Understanding the request lifecycle is essential to using Vix correctly.

Vix keeps the lifecycle simple and explicit.


High-level flow ​

For every incoming HTTP request:

  1. The runtime accepts the connection.
  2. The route is matched.
  3. Your handler lambda executes.
  4. You build and send the response.
  5. The connection is finalized.

Nothing happens outside of this flow.


Minimal example ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Lifecycle","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/lifecycle.md","filePath":"fundamentals/lifecycle.md","lastUpdated":1770798288000}'),l={name:"fundamentals/lifecycle.md"};function t(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

Lifecycle ​

Understanding the request lifecycle is essential to using Vix correctly.

Vix keeps the lifecycle simple and explicit.


High-level flow ​

For every incoming HTTP request:

  1. The runtime accepts the connection.
  2. The route is matched.
  3. Your handler lambda executes.
  4. You build and send the response.
  5. The connection is finalized.

Nothing happens outside of this flow.


Minimal example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -20,4 +20,4 @@ import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E
 });

If you explicitly send a response:

cpp
app.get("/mix", [](Request&, Response& res) {
   res.send("Explicit send");
   return "ignored";
-});

The returned value is ignored.


Important rules ​

  • A response should only be sent once.
  • After sending, additional modifications are ignored.
  • If nothing is sent, behavior depends on runtime defaults.

Best practice: always explicitly send a response.


Lifecycle philosophy ​

Vix avoids:

  • Hidden middleware chains
  • Implicit async behavior
  • Magic auto transformations

The lifecycle is predictable:

Request → Handler → Response → End

That simplicity is intentional.

`,48)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; +});

The returned value is ignored.


Important rules ​

  • A response should only be sent once.
  • After sending, additional modifications are ignored.
  • If nothing is sent, behavior depends on runtime defaults.

Best practice: always explicitly send a response.


Lifecycle philosophy ​

Vix avoids:

  • Hidden middleware chains
  • Implicit async behavior
  • Magic auto transformations

The lifecycle is predictable:

Request → Handler → Response → End

That simplicity is intentional.

`,48)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/fundamentals_lifecycle.md.BdTmKarV.lean.js b/docs/assets/fundamentals_lifecycle.md.BdTmKarV.lean.js new file mode 100644 index 000000000..0ec9c3bf9 --- /dev/null +++ b/docs/assets/fundamentals_lifecycle.md.BdTmKarV.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Lifecycle","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/lifecycle.md","filePath":"fundamentals/lifecycle.md","lastUpdated":1770798288000}'),l={name:"fundamentals/lifecycle.md"};function t(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",48)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.lean.js b/docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.lean.js deleted file mode 100644 index 7d5cdcb31..000000000 --- a/docs/assets/fundamentals_lifecycle.md.Cc4uOTIK.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Lifecycle","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/lifecycle.md","filePath":"fundamentals/lifecycle.md","lastUpdated":1770798288000}'),l={name:"fundamentals/lifecycle.md"};function t(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",48)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; diff --git a/docs/assets/fundamentals_logging.md.B-jikizr.js b/docs/assets/fundamentals_logging.md.B-jikizr.js deleted file mode 100644 index a65d53638..000000000 --- a/docs/assets/fundamentals_logging.md.B-jikizr.js +++ /dev/null @@ -1,43 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Logging","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/logging.md","filePath":"fundamentals/logging.md","lastUpdated":1770798288000}'),t={name:"fundamentals/logging.md"};function h(p,s,e,k,r,g){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Logging ​

Logging in Vix is explicit.

Vix does not automatically log every request. You decide:

  • What to log
  • When to log
  • How detailed logs should be

Minimal logging example ​

cpp
#include <vix.hpp>
-#include <iostream>
-
-using namespace vix;
-
-int main()
-{
-  App app;
-
-  app.get("/", [](Request&, Response& res) {
-    std::cout << "Incoming request on /" << std::endl;
-
-    res.json({"message", "Hello"});
-  });
-
-  app.run(8080);
-}

This logs each request to standard output.


Logging request data ​

cpp
#include <vix.hpp>
-#include <iostream>
-
-using namespace vix;
-
-int main()
-{
-  App app;
-
-  app.get("/inspect", [](Request& req, Response& res) {
-    std::cout << "Path: /inspect" << std::endl;
-    std::cout << "User-Agent: " << req.header("User-Agent") << std::endl;
-
-    res.json({"ok", true});
-  });
-
-  app.run(8080);
-}

Be careful not to log sensitive data.


Logging errors ​

cpp
app.get("/error", [](Request&, Response& res) {
-  std::cerr << "Simulated error occurred" << std::endl;
-
-  res.status(500).json({
-    "error", "Internal server error"
-  });
-});

Use error streams for failures.


Structured logging pattern ​

Instead of free text logs:

cpp
std::cout << "User login failed" << std::endl;

Prefer structured logs:

cpp
std::cout << "{"
-          << ""event":"login_failed","
-          << ""user":"unknown""
-          << "}" << std::endl;

Structured logs are easier to parse and analyze.


Production logging ​

For real applications:

  • Use a proper logging library
  • Write logs to rotating files
  • Avoid blocking I/O in hot paths
  • Avoid logging secrets

Performance considerations ​

Logging is I/O.

Heavy logging can reduce throughput.

Best practices:

  • Log only what is necessary
  • Avoid logging inside tight loops
  • Use async logging in production setups

Philosophy ​

Logging should be:

  • Intentional
  • Clear
  • Minimal
  • Secure

In Vix, nothing is logged unless you log it.

`,38)])])}const o=i(t,[["render",h]]);export{E as __pageData,o as default}; diff --git a/docs/assets/fundamentals_logging.md.B-jikizr.lean.js b/docs/assets/fundamentals_logging.md.B-jikizr.lean.js deleted file mode 100644 index a9fa4cfaf..000000000 --- a/docs/assets/fundamentals_logging.md.B-jikizr.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Logging","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/logging.md","filePath":"fundamentals/logging.md","lastUpdated":1770798288000}'),t={name:"fundamentals/logging.md"};function h(p,s,e,k,r,g){return a(),n("div",null,[...s[0]||(s[0]=[l("",38)])])}const o=i(t,[["render",h]]);export{E as __pageData,o as default}; diff --git a/docs/assets/fundamentals_logging.md.EdECFWjO.js b/docs/assets/fundamentals_logging.md.EdECFWjO.js new file mode 100644 index 000000000..829149d77 --- /dev/null +++ b/docs/assets/fundamentals_logging.md.EdECFWjO.js @@ -0,0 +1,43 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Logging (Core)","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/logging.md","filePath":"fundamentals/logging.md","lastUpdated":1771056697000}'),e={name:"fundamentals/logging.md"};function t(p,s,h,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Logging (Core) ​

Logging in Vix is explicit and layered.

Vix does not automatically log every request. You decide:

  • What to log
  • When to log
  • Whether it is dev output (vix::console)
  • Or production logging (vix::utils::Logger)

Vix intentionally separates:

  • Console → developer-facing runtime output
  • Logger → structured, production-grade logging

1. Development logging (vix::console) ​

For quick debugging and local feedback, use:

cpp
#include <vix.hpp>
+
+using namespace vix;
+
+int main()
+{
+  App app;
+
+  app.get("/", [](Request&, Response& res) {
+    console.info("Incoming request on /");
+    res.json({"message", "Hello"});
+  });
+
+  app.run(8080);
+}

Why use console instead of std::cout? ​

  • Thread-safe atomic lines
  • Level filtering (debug off by default)
  • Proper stdout/stderr routing
  • Near-zero cost when filtered
  • Environment-controlled verbosity

Console is designed for developer ergonomics, not ingestion pipelines.


2. Logging request data ​

cpp
app.get("/inspect", [](Request& req, Response& res) {
+
+  console.debug("Path:", "/inspect");
+  console.debug("User-Agent:", req.header("User-Agent"));
+
+  res.json({"ok", true});
+});

Be careful not to log:

  • Authorization headers
  • Tokens
  • Passwords
  • Personal data

3. Logging errors (dev mode) ​

cpp
app.get("/error", [](Request&, Response& res) {
+
+  console.error("Simulated error occurred");
+
+  res.status(500).json({
+    "error", "Internal server error"
+  });
+});

Console automatically routes:

  • warn / error → stderr
  • log / info / debug → stdout

4. Production logging (vix::utils::Logger) ​

For real systems, do not rely on console.

Use vix::utils::Logger for:

  • Structured logs (JSON / key-value)
  • File outputs
  • Ingestion pipelines
  • Production observability
  • Rotating logs
  • Persistent storage

Example (illustrative):

cpp
#include <vix/utils/logger.hpp>
+
+using namespace vix::utils;
+
+int main()
+{
+  Logger logger;
+
+  logger.info({
+    {"event", "request_received"},
+    {"path", "/inspect"}
+  });
+}

Console and Logger serve different purposes by design.


5. Structured logging pattern ​

Instead of:

cpp
console.info("User login failed");

Prefer structured logging in production:

cpp
logger.warn({
+  {"event", "login_failed"},
+  {"user", "unknown"}
+});

Structured logs are easier to:

  • Parse
  • Filter
  • Aggregate
  • Send to ELK / Loki / OpenTelemetry

6. Performance considerations ​

Logging is I/O.

Best practices:

  • Do not log inside hot loops
  • Avoid per-request heavy logs under high load
  • Keep debug logs disabled in production
  • Use sampling if traffic is extreme
  • Avoid blocking file I/O in request threads

Remember:

  • Console is cheap when filtered
  • Logger is more powerful but must be configured responsibly

7. Philosophy ​

Logging in Vix is:

  • Explicit
  • Layered
  • Predictable
  • Performance-aware

Nothing is logged unless you log it.

Console is for developers. Logger is for systems.

`,52)])])}const u=i(e,[["render",t]]);export{c as __pageData,u as default}; diff --git a/docs/assets/fundamentals_logging.md.EdECFWjO.lean.js b/docs/assets/fundamentals_logging.md.EdECFWjO.lean.js new file mode 100644 index 000000000..0ecc1f283 --- /dev/null +++ b/docs/assets/fundamentals_logging.md.EdECFWjO.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Logging (Core)","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/logging.md","filePath":"fundamentals/logging.md","lastUpdated":1771056697000}'),e={name:"fundamentals/logging.md"};function t(p,s,h,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[l("",52)])])}const u=i(e,[["render",t]]);export{c as __pageData,u as default}; diff --git a/docs/assets/fundamentals_performance.md.DPHEfGaR.js b/docs/assets/fundamentals_performance.md.C-jWstpX.js similarity index 81% rename from docs/assets/fundamentals_performance.md.DPHEfGaR.js rename to docs/assets/fundamentals_performance.md.C-jWstpX.js index bd00eb5a1..2066f600e 100644 --- a/docs/assets/fundamentals_performance.md.DPHEfGaR.js +++ b/docs/assets/fundamentals_performance.md.C-jWstpX.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Performance","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/performance.md","filePath":"fundamentals/performance.md","lastUpdated":1770798288000}'),l={name:"fundamentals/performance.md"};function t(p,i,h,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[n(`

Performance ​

Vix is designed for predictable, high-performance networking.

Performance in Vix comes from:

  • Explicit control
  • Minimal abstraction layers
  • No garbage collection
  • No hidden middleware chains

Minimal overhead model ​

A typical Vix request flow is:

Request → Route match → Handler → Response → End

There are no:

  • Reflection systems
  • Dynamic runtime inspection layers
  • Hidden serialization pipelines

Everything you write is what executes.


Minimal example ​

cpp
#include <vix.hpp>
+import{_ as s,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Performance","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/performance.md","filePath":"fundamentals/performance.md","lastUpdated":1770798288000}'),l={name:"fundamentals/performance.md"};function t(p,i,h,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[n(`

Performance ​

Vix is designed for predictable, high-performance networking.

Performance in Vix comes from:

  • Explicit control
  • Minimal abstraction layers
  • No garbage collection
  • No hidden middleware chains

Minimal overhead model ​

A typical Vix request flow is:

Request → Route match → Handler → Response → End

There are no:

  • Reflection systems
  • Dynamic runtime inspection layers
  • Hidden serialization pipelines

Everything you write is what executes.


Minimal example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -14,4 +14,4 @@ import{_ as s,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const c
 }

The handler is a simple lambda. No extra runtime layers are involved.


Avoiding performance pitfalls ​

1. Avoid heavy allocations in hot paths ​

Instead of:

cpp
std::string large = some_expensive_operation();
 res.json({"data", large});

Prefer precomputed or cached data when possible.


2. Keep handlers small ​

Handlers should:

  • Parse input
  • Perform minimal logic
  • Send response

Move heavy logic into dedicated components.


3. Avoid unnecessary JSON depth ​

Deeply nested objects increase serialization cost.

Prefer structured but reasonable JSON layouts.


Hardware considerations ​

For production workloads:

  • Use multi-core CPUs
  • Use fast storage (NVMe preferred)
  • Avoid memory pressure
  • Use proper OS tuning

Vix itself does not impose artificial limits. Hardware and architecture choices matter.


Throughput mindset ​

To maximize throughput:

  • Minimize blocking operations
  • Avoid unnecessary copying
  • Reuse resources when possible
  • Keep I/O efficient

Example of lightweight route:

cpp
app.get("/ping", [](Request&, Response& res) {
   res.json({"message", "pong"});
-});

This route has near-zero overhead.


Benchmarking rule ​

Always benchmark your real workload.

Synthetic benchmarks may not reflect:

  • Real traffic patterns
  • Database latency
  • External API delays

Measure what matters.


Philosophy ​

Performance in Vix is not magic.

It comes from:

  • Simplicity
  • Explicit behavior
  • Predictable execution
  • Modern C++ efficiency

If you write efficient C++, Vix stays efficient.

`,54)])])}const E=s(l,[["render",t]]);export{c as __pageData,E as default}; +});

This route has near-zero overhead.


Benchmarking rule ​

Always benchmark your real workload.

Synthetic benchmarks may not reflect:

  • Real traffic patterns
  • Database latency
  • External API delays

Measure what matters.


Philosophy ​

Performance in Vix is not magic.

It comes from:

  • Simplicity
  • Explicit behavior
  • Predictable execution
  • Modern C++ efficiency

If you write efficient C++, Vix stays efficient.

`,54)])])}const u=s(l,[["render",t]]);export{g as __pageData,u as default}; diff --git a/docs/assets/fundamentals_performance.md.C-jWstpX.lean.js b/docs/assets/fundamentals_performance.md.C-jWstpX.lean.js new file mode 100644 index 000000000..a1f0b57e7 --- /dev/null +++ b/docs/assets/fundamentals_performance.md.C-jWstpX.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Performance","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/performance.md","filePath":"fundamentals/performance.md","lastUpdated":1770798288000}'),l={name:"fundamentals/performance.md"};function t(p,i,h,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[n("",54)])])}const u=s(l,[["render",t]]);export{g as __pageData,u as default}; diff --git a/docs/assets/fundamentals_performance.md.DPHEfGaR.lean.js b/docs/assets/fundamentals_performance.md.DPHEfGaR.lean.js deleted file mode 100644 index fe3ccfef8..000000000 --- a/docs/assets/fundamentals_performance.md.DPHEfGaR.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Performance","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/performance.md","filePath":"fundamentals/performance.md","lastUpdated":1770798288000}'),l={name:"fundamentals/performance.md"};function t(p,i,h,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[n("",54)])])}const E=s(l,[["render",t]]);export{c as __pageData,E as default}; diff --git a/docs/assets/fundamentals_security.md.BxSXY79x.lean.js b/docs/assets/fundamentals_security.md.BxSXY79x.lean.js deleted file mode 100644 index a03a28c91..000000000 --- a/docs/assets/fundamentals_security.md.BxSXY79x.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Security","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/security.md","filePath":"fundamentals/security.md","lastUpdated":1770798288000}'),h={name:"fundamentals/security.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",43)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/fundamentals_security.md.BxSXY79x.js b/docs/assets/fundamentals_security.md.bAQnvSYa.js similarity index 93% rename from docs/assets/fundamentals_security.md.BxSXY79x.js rename to docs/assets/fundamentals_security.md.bAQnvSYa.js index d2789b11c..4625e77c8 100644 --- a/docs/assets/fundamentals_security.md.BxSXY79x.js +++ b/docs/assets/fundamentals_security.md.bAQnvSYa.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Security","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/security.md","filePath":"fundamentals/security.md","lastUpdated":1770798288000}'),h={name:"fundamentals/security.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Security ​

Security in Vix is explicit.

Vix does not automatically inject security layers. You control:

  • Authentication
  • Authorization
  • Validation
  • Headers
  • Error exposure

Basic header check ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Security","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/security.md","filePath":"fundamentals/security.md","lastUpdated":1770798288000}'),h={name:"fundamentals/security.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Security ​

Security in Vix is explicit.

Vix does not automatically inject security layers. You control:

  • Authentication
  • Authorization
  • Validation
  • Headers
  • Error exposure

Basic header check ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -56,4 +56,4 @@ import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g
   res.set_header("Content-Security-Policy", "default-src 'self'");
 
   res.json({"ok", true});
-});

HTTPS ​

For production:

  • Always run behind HTTPS
  • Use a reverse proxy (Nginx, Caddy, etc.)
  • Terminate TLS properly
  • Keep certificates updated

Vix focuses on runtime control. Transport security should be properly configured at deployment level.


Rate limiting and protection ​

Vix does not enforce rate limiting automatically.

You can:

  • Implement custom counters
  • Use middleware patterns
  • Use a reverse proxy for rate limiting

Security mindset ​

Security is not a framework feature.

It is an architecture decision.

In Vix:

  • Nothing is automatic
  • Nothing is hidden
  • Everything is explicit

That makes auditing easier and behavior predictable.

`,43)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; +});

HTTPS ​

For production:

  • Always run behind HTTPS
  • Use a reverse proxy (Nginx, Caddy, etc.)
  • Terminate TLS properly
  • Keep certificates updated

Vix focuses on runtime control. Transport security should be properly configured at deployment level.


Rate limiting and protection ​

Vix does not enforce rate limiting automatically.

You can:

  • Implement custom counters
  • Use middleware patterns
  • Use a reverse proxy for rate limiting

Security mindset ​

Security is not a framework feature.

It is an architecture decision.

In Vix:

  • Nothing is automatic
  • Nothing is hidden
  • Everything is explicit

That makes auditing easier and behavior predictable.

`,43)])])}const F=i(h,[["render",l]]);export{o as __pageData,F as default}; diff --git a/docs/assets/fundamentals_security.md.bAQnvSYa.lean.js b/docs/assets/fundamentals_security.md.bAQnvSYa.lean.js new file mode 100644 index 000000000..b8c9801cf --- /dev/null +++ b/docs/assets/fundamentals_security.md.bAQnvSYa.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Security","description":"","frontmatter":{},"headers":[],"relativePath":"fundamentals/security.md","filePath":"fundamentals/security.md","lastUpdated":1770798288000}'),h={name:"fundamentals/security.md"};function l(p,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",43)])])}const F=i(h,[["render",l]]);export{o as __pageData,F as default}; diff --git a/docs/assets/guide.md.CSYCL_01.js b/docs/assets/guide.md.BwxMTnfu.js similarity index 98% rename from docs/assets/guide.md.CSYCL_01.js rename to docs/assets/guide.md.BwxMTnfu.js index ea9f9784b..6037168cc 100644 --- a/docs/assets/guide.md.CSYCL_01.js +++ b/docs/assets/guide.md.BwxMTnfu.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as h,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routes and Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1770798288000}'),n={name:"guide.md"};function p(k,s,l,e,E,r){return a(),h("div",null,[...s[0]||(s[0]=[t(`

Routes and Middleware ​

This guide explains how to write routes and attach middleware in Vix.cpp, using the style shown in:

  • vix/examples/vix_routes_showcase.cpp (routing patterns)
  • vix/examples/http_middleware/mega_middleware_routes.cpp (middleware patterns)

Audience: beginners coming from Node.js (Express, Fastify) or Python (Flask, FastAPI).


1) Quick start ​

Run an example file directly:

bash
vix run examples/vix_routes_showcase.cpp

Then test:

bash
curl -i http://127.0.0.1:8080/
+import{_ as i,o as a,c as h,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routes and Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1770805184000}'),n={name:"guide.md"};function p(k,s,l,e,E,r){return a(),h("div",null,[...s[0]||(s[0]=[t(`

Routes and Middleware ​

This guide explains how to write routes and attach middleware in Vix.cpp, using the style shown in:

  • vix/examples/vix_routes_showcase.cpp (routing patterns)
  • vix/examples/http_middleware/mega_middleware_routes.cpp (middleware patterns)

Audience: beginners coming from Node.js (Express, Fastify) or Python (Flask, FastAPI).


1) Quick start ​

Run an example file directly:

bash
vix run examples/vix_routes_showcase.cpp

Then test:

bash
curl -i http://127.0.0.1:8080/
 curl -i http://127.0.0.1:8080/health
 curl -i http://127.0.0.1:8080/users/42
 curl -i "http://127.0.0.1:8080/search?q=vix&page=2&limit=5"

Middleware mega example:

bash
vix run examples/http_middleware/mega_middleware_routes.cpp

2) Core mental model ​

Routes ​

A route is (method, path) -> handler.

You write routes on App:

cpp
App app;
@@ -160,4 +160,4 @@ import{_ as i,o as a,c as h,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g
 
   app.run(8080);
   return 0;
-}

This mirrors Express/Fastify and stays readable.


11) Troubleshooting tips ​

  • Use curl -i to see response headers (request id, cache status).
  • If a route returns 401/403, check which middleware is installed for its prefix.
  • If JSON parsing fails, confirm the JSON middleware is installed on that route and that Content-Type: application/json is sent.

Example JSON request:

bash
curl -i -X POST http://127.0.0.1:8080/api/echo/json   -H "Content-Type: application/json"   -d '{"name":"Ada","vip":true}'
`,136)])])}const y=i(n,[["render",p]]);export{g as __pageData,y as default}; +}

This mirrors Express/Fastify and stays readable.


11) Troubleshooting tips ​

  • Use curl -i to see response headers (request id, cache status).
  • If a route returns 401/403, check which middleware is installed for its prefix.
  • If JSON parsing fails, confirm the JSON middleware is installed on that route and that Content-Type: application/json is sent.

Example JSON request:

bash
curl -i -X POST http://127.0.0.1:8080/api/echo/json   -H "Content-Type: application/json"   -d '{"name":"Ada","vip":true}'
`,136)])])}const o=i(n,[["render",p]]);export{F as __pageData,o as default}; diff --git a/docs/assets/guide.md.BwxMTnfu.lean.js b/docs/assets/guide.md.BwxMTnfu.lean.js new file mode 100644 index 000000000..65fcabe3a --- /dev/null +++ b/docs/assets/guide.md.BwxMTnfu.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as h,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routes and Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1770805184000}'),n={name:"guide.md"};function p(k,s,l,e,E,r){return a(),h("div",null,[...s[0]||(s[0]=[t("",136)])])}const o=i(n,[["render",p]]);export{F as __pageData,o as default}; diff --git a/docs/assets/guide.md.CSYCL_01.lean.js b/docs/assets/guide.md.CSYCL_01.lean.js deleted file mode 100644 index 300c332f7..000000000 --- a/docs/assets/guide.md.CSYCL_01.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as h,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routes and Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1770798288000}'),n={name:"guide.md"};function p(k,s,l,e,E,r){return a(),h("div",null,[...s[0]||(s[0]=[t("",136)])])}const y=i(n,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/index.md.BqjVkdBh.js b/docs/assets/index.md.BqjVkdBh.js deleted file mode 100644 index 62fc1b34e..000000000 --- a/docs/assets/index.md.BqjVkdBh.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,C as o,o as n,c as a,E as c}from"./chunks/framework.jUmBZPH5.js";const f=JSON.parse('{"title":"Vix.cpp Documentation","description":"","frontmatter":{"title":"Vix.cpp Documentation","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1770650387000}'),s={name:"index.md"};function r(i,p,d,m,l,_){const e=o("DocsHomeHero");return n(),a("div",null,[c(e)])}const u=t(s,[["render",r]]);export{f as __pageData,u as default}; diff --git a/docs/assets/index.md.BqjVkdBh.lean.js b/docs/assets/index.md.BqjVkdBh.lean.js deleted file mode 100644 index 62fc1b34e..000000000 --- a/docs/assets/index.md.BqjVkdBh.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,C as o,o as n,c as a,E as c}from"./chunks/framework.jUmBZPH5.js";const f=JSON.parse('{"title":"Vix.cpp Documentation","description":"","frontmatter":{"title":"Vix.cpp Documentation","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1770650387000}'),s={name:"index.md"};function r(i,p,d,m,l,_){const e=o("DocsHomeHero");return n(),a("div",null,[c(e)])}const u=t(s,[["render",r]]);export{f as __pageData,u as default}; diff --git a/docs/assets/index.md.DpgZ_kGK.js b/docs/assets/index.md.DpgZ_kGK.js new file mode 100644 index 000000000..410379ff2 --- /dev/null +++ b/docs/assets/index.md.DpgZ_kGK.js @@ -0,0 +1 @@ +import{_ as t,r as o,o as n,c as a,b as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const h=JSON.parse('{"title":"Vix.cpp Documentation","description":"","frontmatter":{"title":"Vix.cpp Documentation","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1770650387000}'),c={name:"index.md"};function s(i,p,m,d,l,_){const e=o("DocsHomeHero");return n(),a("div",null,[r(e)])}const D=t(c,[["render",s]]);export{h as __pageData,D as default}; diff --git a/docs/assets/index.md.DpgZ_kGK.lean.js b/docs/assets/index.md.DpgZ_kGK.lean.js new file mode 100644 index 000000000..410379ff2 --- /dev/null +++ b/docs/assets/index.md.DpgZ_kGK.lean.js @@ -0,0 +1 @@ +import{_ as t,r as o,o as n,c as a,b as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const h=JSON.parse('{"title":"Vix.cpp Documentation","description":"","frontmatter":{"title":"Vix.cpp Documentation","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1770650387000}'),c={name:"index.md"};function s(i,p,m,d,l,_){const e=o("DocsHomeHero");return n(),a("div",null,[r(e)])}const D=t(c,[["render",s]]);export{h as __pageData,D as default}; diff --git a/docs/assets/inference_index.md.CPSHgl8p.lean.js b/docs/assets/inference_index.md.CPSHgl8p.lean.js deleted file mode 100644 index 1a5297f45..000000000 --- a/docs/assets/inference_index.md.CPSHgl8p.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/index.md","filePath":"inference/index.md","lastUpdated":1770798288000}'),l={name:"inference/index.md"};function p(t,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",31)])])}const c=i(l,[["render",p]]);export{o as __pageData,c as default}; diff --git a/docs/assets/inference_index.md.CPSHgl8p.js b/docs/assets/inference_index.md.DWGy9uNN.js similarity index 82% rename from docs/assets/inference_index.md.CPSHgl8p.js rename to docs/assets/inference_index.md.DWGy9uNN.js index 0cd479e47..01f235924 100644 --- a/docs/assets/inference_index.md.CPSHgl8p.js +++ b/docs/assets/inference_index.md.DWGy9uNN.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/index.md","filePath":"inference/index.md","lastUpdated":1770798288000}'),l={name:"inference/index.md"};function p(t,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

inference ​

Inference ​

The Inference section covers how to build lightweight AI and model-serving endpoints using Vix.

Vix does not embed a machine learning framework.

Instead, it provides:

  • High-performance HTTP handling
  • Explicit request control
  • Predictable response handling
  • Clean integration with C++ inference libraries

Philosophy ​

Inference in Vix follows one rule:

Keep the network layer simple. Keep the compute layer isolated.

Your model code stays separate from your routing code.


Minimal inference endpoint ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/index.md","filePath":"inference/index.md","lastUpdated":1770798288000}'),l={name:"inference/index.md"};function p(t,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

inference ​

Inference ​

The Inference section covers how to build lightweight AI and model-serving endpoints using Vix.

Vix does not embed a machine learning framework.

Instead, it provides:

  • High-performance HTTP handling
  • Explicit request control
  • Predictable response handling
  • Clean integration with C++ inference libraries

Philosophy ​

Inference in Vix follows one rule:

Keep the network layer simple. Keep the compute layer isolated.

Your model code stays separate from your routing code.


Minimal inference endpoint ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -39,4 +39,4 @@ import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o
   });
 
   app.run(8080);
-}

Architecture pattern ​

Recommended structure for real systems:

Request → Validation → Model inference → Response formatting

Keep these concerns separate.


Performance mindset ​

Inference workloads require:

  • Efficient memory handling
  • Minimal copying
  • Fast serialization
  • Proper hardware utilization

Vix handles the HTTP layer. Your model library handles computation.


Next steps ​

In this section you will learn:

  • Integrating ONNX or custom C++ models
  • Handling batch inference
  • Streaming inference responses
  • Performance tuning for model serving
`,31)])])}const c=i(l,[["render",p]]);export{o as __pageData,c as default}; +}

Architecture pattern ​

Recommended structure for real systems:

Request → Validation → Model inference → Response formatting

Keep these concerns separate.


Performance mindset ​

Inference workloads require:

  • Efficient memory handling
  • Minimal copying
  • Fast serialization
  • Proper hardware utilization

Vix handles the HTTP layer. Your model library handles computation.


Next steps ​

In this section you will learn:

  • Integrating ONNX or custom C++ models
  • Handling batch inference
  • Streaming inference responses
  • Performance tuning for model serving
`,31)])])}const y=i(l,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/inference_index.md.DWGy9uNN.lean.js b/docs/assets/inference_index.md.DWGy9uNN.lean.js new file mode 100644 index 000000000..25a39f3d9 --- /dev/null +++ b/docs/assets/inference_index.md.DWGy9uNN.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/index.md","filePath":"inference/index.md","lastUpdated":1770798288000}'),l={name:"inference/index.md"};function p(t,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",31)])])}const y=i(l,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/inference_providers.md.DNBRKKVi.js b/docs/assets/inference_providers.md.CHOD8HLE.js similarity index 87% rename from docs/assets/inference_providers.md.DNBRKKVi.js rename to docs/assets/inference_providers.md.CHOD8HLE.js index 2c5715f3c..2adb75ddb 100644 --- a/docs/assets/inference_providers.md.DNBRKKVi.js +++ b/docs/assets/inference_providers.md.CHOD8HLE.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Providers","description":"","frontmatter":{},"headers":[],"relativePath":"inference/providers.md","filePath":"inference/providers.md","lastUpdated":1770798288000}'),p={name:"inference/providers.md"};function t(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Providers ​

Vix does not ship an inference engine.

Instead, you plug in a provider.

A provider is simply the code that runs inference.

Examples of providers:

  • ONNX Runtime
  • TensorRT
  • OpenVINO
  • A custom C++ model
  • A remote inference service

Vix only handles HTTP.


Minimal provider concept ​

A provider takes input and returns output.

Example: a fake provider inside main.

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Providers","description":"","frontmatter":{},"headers":[],"relativePath":"inference/providers.md","filePath":"inference/providers.md","lastUpdated":1770798288000}'),p={name:"inference/providers.md"};function t(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Providers ​

Vix does not ship an inference engine.

Instead, you plug in a provider.

A provider is simply the code that runs inference.

Examples of providers:

  • ONNX Runtime
  • TensorRT
  • OpenVINO
  • A custom C++ model
  • A remote inference service

Vix only handles HTTP.


Minimal provider concept ​

A provider takes input and returns output.

Example: a fake provider inside main.

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -44,4 +44,4 @@ import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o
   });
 
   app.run(8080);
-}

Provider selection strategy ​

Pick based on your constraints:

  • CPU-only inference
  • GPU acceleration
  • Platform targets
  • Model format compatibility
  • Deployment simplicity

Vix stays the same. Only the provider changes.


Production notes ​

When you use a real provider:

  • Load the model once at startup
  • Reuse sessions and buffers
  • Avoid reloading per request
  • Validate input strictly
  • Avoid leaking model internals in errors

Common integration style ​

In practice you will do:

  • Initialize provider at startup
  • Handle requests
  • Call provider
  • Return JSON output

Even in production, keep the route handler minimal.


Philosophy ​

Providers are optional.

Vix is a runtime. Inference is a module you bring.

`,33)])])}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; +}

Provider selection strategy ​

Pick based on your constraints:

  • CPU-only inference
  • GPU acceleration
  • Platform targets
  • Model format compatibility
  • Deployment simplicity

Vix stays the same. Only the provider changes.


Production notes ​

When you use a real provider:

  • Load the model once at startup
  • Reuse sessions and buffers
  • Avoid reloading per request
  • Validate input strictly
  • Avoid leaking model internals in errors

Common integration style ​

In practice you will do:

  • Initialize provider at startup
  • Handle requests
  • Call provider
  • Return JSON output

Even in production, keep the route handler minimal.


Philosophy ​

Providers are optional.

Vix is a runtime. Inference is a module you bring.

`,33)])])}const c=i(p,[["render",t]]);export{y as __pageData,c as default}; diff --git a/docs/assets/inference_providers.md.CHOD8HLE.lean.js b/docs/assets/inference_providers.md.CHOD8HLE.lean.js new file mode 100644 index 000000000..cb4633095 --- /dev/null +++ b/docs/assets/inference_providers.md.CHOD8HLE.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Providers","description":"","frontmatter":{},"headers":[],"relativePath":"inference/providers.md","filePath":"inference/providers.md","lastUpdated":1770798288000}'),p={name:"inference/providers.md"};function t(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",33)])])}const c=i(p,[["render",t]]);export{y as __pageData,c as default}; diff --git a/docs/assets/inference_providers.md.DNBRKKVi.lean.js b/docs/assets/inference_providers.md.DNBRKKVi.lean.js deleted file mode 100644 index 491a7662e..000000000 --- a/docs/assets/inference_providers.md.DNBRKKVi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Providers","description":"","frontmatter":{},"headers":[],"relativePath":"inference/providers.md","filePath":"inference/providers.md","lastUpdated":1770798288000}'),p={name:"inference/providers.md"};function t(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",33)])])}const g=i(p,[["render",t]]);export{o as __pageData,g as default}; diff --git a/docs/assets/inference_reliability.md.D5UpzuBY.js b/docs/assets/inference_reliability.md.D5UpzuBY.js new file mode 100644 index 000000000..20f7cd352 --- /dev/null +++ b/docs/assets/inference_reliability.md.D5UpzuBY.js @@ -0,0 +1,9 @@ +import{_ as e,o as l,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"Reliability","description":"","frontmatter":{},"headers":[],"relativePath":"inference/reliability.md","filePath":"inference/reliability.md","lastUpdated":1770798288000}'),r={name:"inference/reliability.md"};function s(n,i,o,p,d,c){return l(),a("div",null,[...i[0]||(i[0]=[t(`

Reliability ​

This page explains reliability guarantees and failure behavior in Vix Inference.

Inference in the real world fails for boring reasons:

  • provider rate limits
  • network timeouts
  • model cold starts
  • overloaded GPUs
  • partial responses during streaming
  • invalid JSON from clients
  • slow clients or disconnects

The goal is not "never fail". The goal is predictable behavior under failure.


Reliability goals ​

Vix Inference is designed around these principles:

  • Fast failure for invalid requests
  • Retries for transient provider errors
  • Clear error codes and messages
  • Safe streaming termination
  • Observability (logs + request id)
  • No silent partial success

Request lifecycle ​

A typical request goes through:

  1. validate input (schema and limits)
  2. select provider and model
  3. execute inference with timeouts
  4. stream or buffer output
  5. finalize and emit metrics

If any step fails, Vix returns a structured error.


Timeouts ​

Always set timeouts.

Recommended timeouts:

  • connect timeout: 2 to 5 seconds
  • first token timeout: 5 to 15 seconds
  • total request timeout: 30 to 120 seconds (depends on workload)
  • per chunk flush interval: small and constant

Timeouts must be enforced both:

  • at transport level (HTTP / WS)
  • at provider level (SDK / HTTP client)

Retries ​

Retries should be limited and only for transient failures.

Good retry candidates:

  • 429 Too Many Requests
  • 503 Service Unavailable
  • network timeouts
  • connection reset

Bad retry candidates:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 422 Validation errors

Recommended strategy:

  • max attempts: 2 or 3
  • exponential backoff
  • jitter
  • retry budget per request

Idempotency ​

Inference is usually safe to retry because:

  • it does not mutate server state
  • it returns generated text

But streaming can duplicate partial tokens if you retry mid-stream.

If you support retries on the client:

  • retry only before the first token
  • or use an idempotency key and server-side replay

Streaming reliability ​

Streaming has extra failure modes:

  • client disconnects mid-stream
  • provider disconnects mid-stream
  • chunk parsing errors
  • backpressure and slow readers

Rules:

  • detect disconnect and cancel inference
  • always send an explicit end event when possible
  • do not keep streaming forever
  • cap total streamed bytes

Recommended events:

  • inference.start
  • inference.token
  • inference.error
  • inference.end

If the client disconnects, Vix must stop work quickly.


Circuit breaker ​

If a provider is failing repeatedly, stop sending traffic to it.

A minimal circuit breaker uses:

  • failure counter in a short window
  • open state for a cooldown period
  • half-open probe requests

This protects your system from cascading failure.


Fallback providers ​

If you configure multiple providers, you can fail over.

Example behavior:

  • prefer local provider
  • if it fails with timeout or 503, try remote provider
  • if all fail, return an error with attempts info

Failover must be visible in logs and metrics.


Error format ​

A reliable API returns predictable errors.

Recommended error envelope:

json
{
+  "ok": false,
+  "error": {
+    "code": "provider_timeout",
+    "message": "Provider did not respond in time",
+    "retryable": true
+  },
+  "request_id": "...."
+}

For streaming, send the same envelope inside inference.error.


Limits ​

Reliability includes protecting resources.

Common limits:

  • max input tokens
  • max output tokens
  • max request body bytes
  • max concurrent streams
  • max requests per minute per key
  • max streaming duration

Reject early with a clear 4xx error.


Observability ​

To debug production failures you need:

  • request id in every response
  • structured logs (provider, model, latency)
  • metrics (p50/p95/p99, error rates)
  • retry counts and final reason

Minimal log fields:

  • request_id
  • provider
  • model
  • status
  • latency_ms
  • retry_count
  • streaming (true/false)

Practical checklist ​

Before shipping:

  • timeouts configured
  • input validation enforced
  • retry policy defined
  • streaming end event implemented
  • circuit breaker enabled
  • rate limit enabled
  • logs and metrics enabled

Reliability is not a feature. It is the default behavior.

`,81)])])}const f=e(r,[["render",s]]);export{k as __pageData,f as default}; diff --git a/docs/assets/inference_reliability.md.D5UpzuBY.lean.js b/docs/assets/inference_reliability.md.D5UpzuBY.lean.js new file mode 100644 index 000000000..987bde47f --- /dev/null +++ b/docs/assets/inference_reliability.md.D5UpzuBY.lean.js @@ -0,0 +1 @@ +import{_ as e,o as l,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"Reliability","description":"","frontmatter":{},"headers":[],"relativePath":"inference/reliability.md","filePath":"inference/reliability.md","lastUpdated":1770798288000}'),r={name:"inference/reliability.md"};function s(n,i,o,p,d,c){return l(),a("div",null,[...i[0]||(i[0]=[t("",81)])])}const f=e(r,[["render",s]]);export{k as __pageData,f as default}; diff --git a/docs/assets/inference_reliability.md.DSHpFJl4.js b/docs/assets/inference_reliability.md.DSHpFJl4.js deleted file mode 100644 index 83e050ba5..000000000 --- a/docs/assets/inference_reliability.md.DSHpFJl4.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as e,o as l,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const h=JSON.parse('{"title":"Reliability","description":"","frontmatter":{},"headers":[],"relativePath":"inference/reliability.md","filePath":"inference/reliability.md","lastUpdated":1770798288000}'),r={name:"inference/reliability.md"};function s(n,i,o,p,d,c){return l(),a("div",null,[...i[0]||(i[0]=[t(`

Reliability ​

This page explains reliability guarantees and failure behavior in Vix Inference.

Inference in the real world fails for boring reasons:

  • provider rate limits
  • network timeouts
  • model cold starts
  • overloaded GPUs
  • partial responses during streaming
  • invalid JSON from clients
  • slow clients or disconnects

The goal is not "never fail". The goal is predictable behavior under failure.


Reliability goals ​

Vix Inference is designed around these principles:

  • Fast failure for invalid requests
  • Retries for transient provider errors
  • Clear error codes and messages
  • Safe streaming termination
  • Observability (logs + request id)
  • No silent partial success

Request lifecycle ​

A typical request goes through:

  1. validate input (schema and limits)
  2. select provider and model
  3. execute inference with timeouts
  4. stream or buffer output
  5. finalize and emit metrics

If any step fails, Vix returns a structured error.


Timeouts ​

Always set timeouts.

Recommended timeouts:

  • connect timeout: 2 to 5 seconds
  • first token timeout: 5 to 15 seconds
  • total request timeout: 30 to 120 seconds (depends on workload)
  • per chunk flush interval: small and constant

Timeouts must be enforced both:

  • at transport level (HTTP / WS)
  • at provider level (SDK / HTTP client)

Retries ​

Retries should be limited and only for transient failures.

Good retry candidates:

  • 429 Too Many Requests
  • 503 Service Unavailable
  • network timeouts
  • connection reset

Bad retry candidates:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 422 Validation errors

Recommended strategy:

  • max attempts: 2 or 3
  • exponential backoff
  • jitter
  • retry budget per request

Idempotency ​

Inference is usually safe to retry because:

  • it does not mutate server state
  • it returns generated text

But streaming can duplicate partial tokens if you retry mid-stream.

If you support retries on the client:

  • retry only before the first token
  • or use an idempotency key and server-side replay

Streaming reliability ​

Streaming has extra failure modes:

  • client disconnects mid-stream
  • provider disconnects mid-stream
  • chunk parsing errors
  • backpressure and slow readers

Rules:

  • detect disconnect and cancel inference
  • always send an explicit end event when possible
  • do not keep streaming forever
  • cap total streamed bytes

Recommended events:

  • inference.start
  • inference.token
  • inference.error
  • inference.end

If the client disconnects, Vix must stop work quickly.


Circuit breaker ​

If a provider is failing repeatedly, stop sending traffic to it.

A minimal circuit breaker uses:

  • failure counter in a short window
  • open state for a cooldown period
  • half-open probe requests

This protects your system from cascading failure.


Fallback providers ​

If you configure multiple providers, you can fail over.

Example behavior:

  • prefer local provider
  • if it fails with timeout or 503, try remote provider
  • if all fail, return an error with attempts info

Failover must be visible in logs and metrics.


Error format ​

A reliable API returns predictable errors.

Recommended error envelope:

json
{
-  "ok": false,
-  "error": {
-    "code": "provider_timeout",
-    "message": "Provider did not respond in time",
-    "retryable": true
-  },
-  "request_id": "...."
-}

For streaming, send the same envelope inside inference.error.


Limits ​

Reliability includes protecting resources.

Common limits:

  • max input tokens
  • max output tokens
  • max request body bytes
  • max concurrent streams
  • max requests per minute per key
  • max streaming duration

Reject early with a clear 4xx error.


Observability ​

To debug production failures you need:

  • request id in every response
  • structured logs (provider, model, latency)
  • metrics (p50/p95/p99, error rates)
  • retry counts and final reason

Minimal log fields:

  • request_id
  • provider
  • model
  • status
  • latency_ms
  • retry_count
  • streaming (true/false)

Practical checklist ​

Before shipping:

  • timeouts configured
  • input validation enforced
  • retry policy defined
  • streaming end event implemented
  • circuit breaker enabled
  • rate limit enabled
  • logs and metrics enabled

Reliability is not a feature. It is the default behavior.

`,81)])])}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; diff --git a/docs/assets/inference_reliability.md.DSHpFJl4.lean.js b/docs/assets/inference_reliability.md.DSHpFJl4.lean.js deleted file mode 100644 index 0292f2c8d..000000000 --- a/docs/assets/inference_reliability.md.DSHpFJl4.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as l,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const h=JSON.parse('{"title":"Reliability","description":"","frontmatter":{},"headers":[],"relativePath":"inference/reliability.md","filePath":"inference/reliability.md","lastUpdated":1770798288000}'),r={name:"inference/reliability.md"};function s(n,i,o,p,d,c){return l(),a("div",null,[...i[0]||(i[0]=[t("",81)])])}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; diff --git a/docs/assets/inference_routing.md.CI_DheLZ.js b/docs/assets/inference_routing.md.BQCjVlll.js similarity index 94% rename from docs/assets/inference_routing.md.CI_DheLZ.js rename to docs/assets/inference_routing.md.BQCjVlll.js index ea318a0dd..f7ab75da4 100644 --- a/docs/assets/inference_routing.md.CI_DheLZ.js +++ b/docs/assets/inference_routing.md.BQCjVlll.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routing for inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/routing.md","filePath":"inference/routing.md","lastUpdated":1770798288000}'),p={name:"inference/routing.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Routing for inference ​

Inference endpoints are normal Vix routes.

The difference is what you do inside the handler:

  • Validate input
  • Run model inference (provider call)
  • Format output

Keep the route handler simple.


Query-based inference ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routing for inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/routing.md","filePath":"inference/routing.md","lastUpdated":1770798288000}'),p={name:"inference/routing.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Routing for inference ​

Inference endpoints are normal Vix routes.

The difference is what you do inside the handler:

  • Validate input
  • Run model inference (provider call)
  • Format output

Keep the route handler simple.


Query-based inference ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -108,4 +108,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   });
 
   app.run(8080);
-}

Rule of thumb ​

For inference routing:

  • Validate early
  • Reject bad inputs fast
  • Keep responses consistent
  • Avoid heavy allocations in hot paths
  • Load models once, not per request
`,25)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; +}

Rule of thumb ​

For inference routing:

  • Validate early
  • Reject bad inputs fast
  • Keep responses consistent
  • Avoid heavy allocations in hot paths
  • Load models once, not per request
`,25)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/inference_routing.md.BQCjVlll.lean.js b/docs/assets/inference_routing.md.BQCjVlll.lean.js new file mode 100644 index 000000000..dcc90c0a6 --- /dev/null +++ b/docs/assets/inference_routing.md.BQCjVlll.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routing for inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/routing.md","filePath":"inference/routing.md","lastUpdated":1770798288000}'),p={name:"inference/routing.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",25)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/inference_routing.md.CI_DheLZ.lean.js b/docs/assets/inference_routing.md.CI_DheLZ.lean.js deleted file mode 100644 index 550258c22..000000000 --- a/docs/assets/inference_routing.md.CI_DheLZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routing for inference","description":"","frontmatter":{},"headers":[],"relativePath":"inference/routing.md","filePath":"inference/routing.md","lastUpdated":1770798288000}'),p={name:"inference/routing.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",25)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/inference_streaming.md.BZGaEXyE.lean.js b/docs/assets/inference_streaming.md.BZGaEXyE.lean.js deleted file mode 100644 index 7b1346f07..000000000 --- a/docs/assets/inference_streaming.md.BZGaEXyE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Streaming","description":"","frontmatter":{},"headers":[],"relativePath":"inference/streaming.md","filePath":"inference/streaming.md","lastUpdated":1770798288000}'),t={name:"inference/streaming.md"};function h(l,s,p,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[e("",38)])])}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/docs/assets/inference_streaming.md.BZGaEXyE.js b/docs/assets/inference_streaming.md.DXA_Ltlu.js similarity index 86% rename from docs/assets/inference_streaming.md.BZGaEXyE.js rename to docs/assets/inference_streaming.md.DXA_Ltlu.js index 9d96ea3be..3a170c1f7 100644 --- a/docs/assets/inference_streaming.md.BZGaEXyE.js +++ b/docs/assets/inference_streaming.md.DXA_Ltlu.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Streaming","description":"","frontmatter":{},"headers":[],"relativePath":"inference/streaming.md","filePath":"inference/streaming.md","lastUpdated":1770798288000}'),t={name:"inference/streaming.md"};function h(l,s,p,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Streaming ​

This page explains streaming in Vix Inference.

Streaming is used when the model produces tokens progressively. Instead of waiting for the full response, the server sends chunks as they arrive.


When to use streaming ​

Use streaming when you need:

  • low latency first token
  • live UI updates (chat typing effect)
  • long generations (summaries, code, reasoning)
  • server push without buffering full payload

Core idea ​

A streaming response is a sequence of chunks:

  1. client sends a request
  2. server starts inference
  3. server emits chunks
  4. server ends the stream

The client processes chunks in order.


Minimal HTTP example ​

This example shows the intended shape. Exact helper names may differ based on your inference module version.

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Streaming","description":"","frontmatter":{},"headers":[],"relativePath":"inference/streaming.md","filePath":"inference/streaming.md","lastUpdated":1770798288000}'),t={name:"inference/streaming.md"};function h(l,s,p,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Streaming ​

This page explains streaming in Vix Inference.

Streaming is used when the model produces tokens progressively. Instead of waiting for the full response, the server sends chunks as they arrive.


When to use streaming ​

Use streaming when you need:

  • low latency first token
  • live UI updates (chat typing effect)
  • long generations (summaries, code, reasoning)
  • server push without buffering full payload

Core idea ​

A streaming response is a sequence of chunks:

  1. client sends a request
  2. server starts inference
  3. server emits chunks
  4. server ends the stream

The client processes chunks in order.


Minimal HTTP example ​

This example shows the intended shape. Exact helper names may differ based on your inference module version.

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -51,4 +51,4 @@ import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o
   "payload": {
     "message": "provider timeout"
   }
-}

Then send inference.end.


Notes ​

  • Streaming is transport specific: HTTP streaming (SSE, chunked) and WebSocket streaming are both valid.
  • Keep chunks small and predictable.
  • Always send an explicit end event.

Next page: providers and routing.

`,38)])])}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; +}

Then send inference.end.


Notes ​

  • Streaming is transport specific: HTTP streaming (SSE, chunked) and WebSocket streaming are both valid.
  • Keep chunks small and predictable.
  • Always send an explicit end event.

Next page: providers and routing.

`,38)])])}const c=i(t,[["render",h]]);export{y as __pageData,c as default}; diff --git a/docs/assets/inference_streaming.md.DXA_Ltlu.lean.js b/docs/assets/inference_streaming.md.DXA_Ltlu.lean.js new file mode 100644 index 000000000..a1b30ed62 --- /dev/null +++ b/docs/assets/inference_streaming.md.DXA_Ltlu.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Streaming","description":"","frontmatter":{},"headers":[],"relativePath":"inference/streaming.md","filePath":"inference/streaming.md","lastUpdated":1770798288000}'),t={name:"inference/streaming.md"};function h(l,s,p,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[e("",38)])])}const c=i(t,[["render",h]]);export{y as __pageData,c as default}; diff --git a/docs/assets/install.md.T1PZj5vZ.js b/docs/assets/install.md.D8fkr2ls.js similarity index 69% rename from docs/assets/install.md.T1PZj5vZ.js rename to docs/assets/install.md.D8fkr2ls.js index ff303a53e..8545273ec 100644 --- a/docs/assets/install.md.T1PZj5vZ.js +++ b/docs/assets/install.md.D8fkr2ls.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,a2 as l}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md","lastUpdated":1770798288000}'),t={name:"install.md"};function n(h,i,p,o,r,d){return a(),e("div",null,[...i[0]||(i[0]=[l(`

Install ​

This page covers:

  • Installing the Vix CLI
  • Platform prerequisites
  • Verifying your installation

Install Vix CLI ​

Linux / macOS ​

bash
curl -fsSL https://vixcpp.com/install.sh | bash

After installation, ensure ~/.local/bin is in your PATH:

bash
echo $PATH

Verify:

bash
which vix
+import{_ as s,o as a,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md","lastUpdated":1770798288000}'),t={name:"install.md"};function n(h,i,p,o,r,d){return a(),e("div",null,[...i[0]||(i[0]=[l(`

Install ​

This page covers:

  • Installing the Vix CLI
  • Platform prerequisites
  • Verifying your installation

Install Vix CLI ​

Linux / macOS ​

bash
curl -fsSL https://vixcpp.com/install.sh | bash

After installation, ensure ~/.local/bin is in your PATH:

bash
echo $PATH

Verify:

bash
which vix
 vix --version

Windows (PowerShell) ​

powershell
irm https://vixcpp.com/install.ps1 | iex

Verify:

powershell
Get-Command vix
 vix --version

Build prerequisites ​

Vix projects are modern C++ projects. You need:

  • A C++20 compiler
  • CMake 3.20+
  • Ninja (recommended)

Ubuntu example ​

bash
sudo apt update
-sudo apt install -y   build-essential cmake ninja-build pkg-config   libboost-all-dev libssl-dev libsqlite3-dev

macOS (Homebrew) ​

bash
brew install cmake ninja pkg-config boost openssl@3

Windows ​

Use:

  • Visual Studio Build Tools (MSVC)
    or
  • clang-cl

Install dependencies using vcpkg if required by your project.


Troubleshooting ​

"vix not found" ​

  • Restart your terminal
  • Ensure ~/.local/bin is in PATH
  • Run which vix (Linux/macOS)
  • Run Get-Command vix (Windows)

Download failures ​

If installation fails:

  • Check your internet connection
  • Verify DNS resolution
  • Ensure GitHub releases are accessible from your network
`,39)])])}const u=s(t,[["render",n]]);export{c as __pageData,u as default}; +sudo apt install -y build-essential cmake ninja-build pkg-config libboost-all-dev libssl-dev libsqlite3-dev

macOS (Homebrew) ​

bash
brew install cmake ninja pkg-config boost openssl@3

Windows ​

Use:

  • Visual Studio Build Tools (MSVC)
    or
  • clang-cl

Install dependencies using vcpkg if required by your project.


Troubleshooting ​

"vix not found" ​

  • Restart your terminal
  • Ensure ~/.local/bin is in PATH
  • Run which vix (Linux/macOS)
  • Run Get-Command vix (Windows)

Download failures ​

If installation fails:

  • Check your internet connection
  • Verify DNS resolution
  • Ensure GitHub releases are accessible from your network
`,39)])])}const b=s(t,[["render",n]]);export{g as __pageData,b as default}; diff --git a/docs/assets/install.md.D8fkr2ls.lean.js b/docs/assets/install.md.D8fkr2ls.lean.js new file mode 100644 index 000000000..cbcd0e0f8 --- /dev/null +++ b/docs/assets/install.md.D8fkr2ls.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md","lastUpdated":1770798288000}'),t={name:"install.md"};function n(h,i,p,o,r,d){return a(),e("div",null,[...i[0]||(i[0]=[l("",39)])])}const b=s(t,[["render",n]]);export{g as __pageData,b as default}; diff --git a/docs/assets/install.md.T1PZj5vZ.lean.js b/docs/assets/install.md.T1PZj5vZ.lean.js deleted file mode 100644 index baa17d4d1..000000000 --- a/docs/assets/install.md.T1PZj5vZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as l}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md","lastUpdated":1770798288000}'),t={name:"install.md"};function n(h,i,p,o,r,d){return a(),e("div",null,[...i[0]||(i[0]=[l("",39)])])}const u=s(t,[["render",n]]);export{c as __pageData,u as default}; diff --git a/docs/assets/modules_async_api.md.D827Gq6h.js b/docs/assets/modules_async_api.md.D827Gq6h.js new file mode 100644 index 000000000..f7f0361e2 --- /dev/null +++ b/docs/assets/modules_async_api.md.D827Gq6h.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/api.md","filePath":"modules/async/api.md","lastUpdated":1770805184000}'),s={name:"modules/async/api.md"};function o(r,c,n,p,i,d){return a(),t("div")}const u=e(s,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_async_api.md.D827Gq6h.lean.js b/docs/assets/modules_async_api.md.D827Gq6h.lean.js new file mode 100644 index 000000000..f7f0361e2 --- /dev/null +++ b/docs/assets/modules_async_api.md.D827Gq6h.lean.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/api.md","filePath":"modules/async/api.md","lastUpdated":1770805184000}'),s={name:"modules/async/api.md"};function o(r,c,n,p,i,d){return a(),t("div")}const u=e(s,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_async_api.md.kfA574cs.js b/docs/assets/modules_async_api.md.kfA574cs.js deleted file mode 100644 index 7697b12cd..000000000 --- a/docs/assets/modules_async_api.md.kfA574cs.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/api.md","filePath":"modules/async/api.md","lastUpdated":null}'),s={name:"modules/async/api.md"};function o(n,c,r,p,d,i){return a(),t("div")}const _=e(s,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_async_api.md.kfA574cs.lean.js b/docs/assets/modules_async_api.md.kfA574cs.lean.js deleted file mode 100644 index 7697b12cd..000000000 --- a/docs/assets/modules_async_api.md.kfA574cs.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/api.md","filePath":"modules/async/api.md","lastUpdated":null}'),s={name:"modules/async/api.md"};function o(n,c,r,p,d,i){return a(),t("div")}const _=e(s,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_async_asio.md.Bsgq9u72.js b/docs/assets/modules_async_asio.md.Bsgq9u72.js new file mode 100644 index 000000000..64069edb7 --- /dev/null +++ b/docs/assets/modules_async_asio.md.Bsgq9u72.js @@ -0,0 +1,6 @@ +import{_ as i,o as t,c as s,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"asio_net_service","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/asio.md","filePath":"modules/async/asio.md","lastUpdated":1770965504000}'),o={name:"modules/async/asio.md"};function n(r,e,l,d,c,h){return t(),s("div",null,[...e[0]||(e[0]=[a(`

asio_net_service ​

asio_net_service is an internal networking service used by the Vix async runtime. It owns an independent asio::io_context that runs on a dedicated network thread, and it is created lazily by vix::async::core::io_context::net().

This file lives in the detail namespace on purpose. End users typically interact with higher-level networking APIs (tcp_stream, udp_socket, dns_resolver, etc.), not with asio_net_service directly.


What problem it solves ​

Networking backends like Asio need an event loop (asio::io_context::run()) to drive async I/O completions.

Vix already has its own scheduler (vix::async::core::scheduler) for coroutine continuations and posted tasks. Rather than mixing scheduler internals with socket readiness, asio_net_service isolates networking into:

  • its own asio::io_context
  • its own dedicated thread that runs ioc_.run()
  • a work guard to keep run() alive

This separation keeps the core scheduler minimal and makes the networking backend an optional service.


Where it sits in the architecture ​

  • vix::async::core::io_context
    • owns a scheduler (core coroutine resumption and task queue)
    • lazily owns services:
      • thread_pool (CPU jobs)
      • timer (deadlines)
      • signal_set (signals)
      • net() -> asio_net_service (network backend)

So the model is:

  • scheduler thread: your main event loop calling io_context.run()
  • network thread: Asio loop used by socket primitives
  • worker threads: optional thread pool (CPU compute)

Key design points ​

1) Dedicated thread for networking ​

asio_net_service runs:

  • net_thread_ calls ioc_.run()

This means networking completions happen on the net thread. Concrete networking primitives should then "bridge back" to the Vix scheduler thread to resume user coroutines in a predictable place.

2) Work guard keeps Asio alive ​

Without a guard, asio::io_context::run() returns as soon as there is no pending work.

The service keeps a executor_work_guard alive so the Asio loop stays running even when no sockets are active yet.

3) stop() is explicit ​

stop() is responsible for shutting down the Asio loop and letting the net thread exit. Destruction calls stop and joins the thread, guaranteeing a clean shutdown when io_context is destroyed.


Public surface ​

Constructor ​

cpp
explicit asio_net_service(vix::async::core::io_context& ctx);
  • binds to the core io_context
  • creates a work guard
  • starts the network thread

Accessor ​

cpp
asio::io_context& asio_ctx() noexcept;

Used only by internal implementations to bind sockets, resolvers, timers, etc.

stop() ​

cpp
void stop() noexcept;
  • releases the guard (so Asio is allowed to finish)
  • calls ioc_.stop()
  • requests thread shutdown

Typical lifecycle ​

Lazy creation ​

io_context should create it on first ctx.net() call. This keeps startup cheap if the app never uses networking.

Shutdown behavior ​

A typical shutdown sequence is:

  1. app calls ctx.stop() (stops Vix scheduler loop)
  2. io_context destructor triggers service cleanup
  3. asio_net_service::~asio_net_service() calls stop() and joins net_thread_

Because net_thread_ runs independently, joining is important to avoid a dangling thread during program exit.


How networking primitives should integrate with it ​

Concrete networking types (TCP/UDP/DNS implementations) will usually:

  1. create Asio objects bound to asio_net_service::asio_ctx()
  2. start async operations on the net thread
  3. when Asio completes, post the continuation to the Vix scheduler thread

Example pattern (conceptual):

cpp
// PSEUDO CODE for a TCP read awaitable
+void on_asio_complete(std::error_code ec, std::size_t n) {
+  // store ec/n
+  // then resume coroutine on Vix scheduler thread
+  ctx.get_scheduler().post(h);
+}

This keeps the rule simple for users:

  • your coroutines resume on the Vix scheduler thread
  • networking backends run on their own threads

Threading model and safety notes ​

  • asio::io_context is safe to use from multiple threads, but Vix uses one dedicated net thread for predictability.
  • asio_ctx() must outlive any sockets/resolvers created from it.
  • stop() must be safe to call more than once (idempotent behavior is recommended).
  • Avoid calling join() from the net thread itself. Destruction should happen from the owning context thread.

Common pitfalls ​

1) Forgetting the guard ​

If you do not keep the work guard alive, ioc_.run() may immediately return and networking operations will never complete.

2) Resuming coroutines on the wrong thread ​

If you resume user continuations directly from the net thread, you can create subtle race conditions because the rest of Vix assumes resumption happens on the scheduler thread.

The recommended rule is:

  • Asio callbacks run on net thread
  • coroutine resumption posts back to ctx.get_scheduler()

3) stop order ​

If io_context is destroyed while networking primitives still hold references to Asio objects, you can get crashes.

Practical rule:

  • destroy all network objects (streams, listeners, sockets) before io_context destruction
  • or ensure those objects internally handle asio_ctx().stopped() and early exit

Suggested testing checklist ​

When implementing the .cpp for asio_net_service, verify:

  • creating the service starts the thread and ioc_.run() stays alive
  • stop() stops ioc_ and the thread exits
  • stop() is safe to call multiple times
  • destructor always joins the thread
  • lazy creation from io_context::net() works and does not create services unless needed

Next docs that depend on this ​

Once asio_net_service exists, it becomes the backend for:

  • tcp_stream and tcp_listener implementations
  • udp_socket implementation
  • dns_resolver implementation

Those guides should reference the same threading rule: Asio completes on net thread, coroutine resumes on scheduler thread.

`,76)])])}const m=i(o,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_async_asio.md.Bsgq9u72.lean.js b/docs/assets/modules_async_asio.md.Bsgq9u72.lean.js new file mode 100644 index 000000000..b52201dde --- /dev/null +++ b/docs/assets/modules_async_asio.md.Bsgq9u72.lean.js @@ -0,0 +1 @@ +import{_ as i,o as t,c as s,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"asio_net_service","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/asio.md","filePath":"modules/async/asio.md","lastUpdated":1770965504000}'),o={name:"modules/async/asio.md"};function n(r,e,l,d,c,h){return t(),s("div",null,[...e[0]||(e[0]=[a("",76)])])}const m=i(o,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_async_cancel.md.BEL027yq.js b/docs/assets/modules_async_cancel.md.BEL027yq.js new file mode 100644 index 000000000..d40eb53c7 --- /dev/null +++ b/docs/assets/modules_async_cancel.md.BEL027yq.js @@ -0,0 +1,45 @@ +import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"async/core cancel","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/cancel.md","filePath":"modules/async/cancel.md","lastUpdated":1770918867000}'),l={name:"modules/async/cancel.md"};function t(h,s,p,c,r,k){return i(),e("div",null,[...s[0]||(s[0]=[n(`

async/core cancel ​

Cooperative cancellation primitives for Vix.cpp async code.

This header defines a tiny cancellation model:

  • cancel_source: the owner that can request cancellation
  • cancel_token: a cheap observer you pass into async work
  • cancel_state: shared state storing the atomic cancellation flag
  • cancelled_ec(): a standard std::error_code for “operation canceled”

The design is intentionally minimal and deterministic: no callbacks, no allocations on cancel, no surprises. It is safe to use across threads.


Why this exists ​

In async systems, you often need a way to stop work early:

  • user closes a request
  • shutdown begins
  • a timeout expires
  • one branch in a fan-out fails and you want to cancel the rest

cancel_token gives every task a fast “should I stop?” check. cancel_source lets a controller signal that stop.


Key types ​

cancel_state ​

Shared internal object that holds the cancellation flag.

  • request_cancel() sets an atomic boolean to true
  • is_cancelled() reads it

Thread safety:

  • writes use memory_order_release
  • reads use memory_order_acquire

That is enough for a simple “flag” protocol across threads.

cancel_token ​

Read-only view of a cancellation state.

  • Default constructed tokens are “empty” (non-cancelable).
  • Tokens are cheap to copy.
  • Tokens can be passed across threads safely.

Methods:

  • can_cancel() returns true if it is linked to a source
  • is_cancelled() returns true if cancellation has been requested

cancel_source ​

Owner of the shared state.

  • Constructing a source creates a new shared state.
  • token() returns a cancel_token observing the same state.
  • request_cancel() flips the flag (idempotent).
  • is_cancelled() reads the flag.

Error model ​

cancelled_ec() returns a standard error code representing a cancelled operation:

cpp
std::error_code ec = vix::async::core::cancelled_ec();

It uses make_error_code(errc::canceled) from vix/async/core/error.hpp.

Use this when you want to return an explicit “canceled” status from functions that use error codes.


Usage ​

1) Basic pattern (cooperative loop) ​

cpp
#include <vix/async/core/cancel.hpp>
+
+using vix::async::core::cancel_source;
+using vix::async::core::cancel_token;
+
+void do_work(cancel_token ct)
+{
+  while (!ct.is_cancelled())
+  {
+    // ... do a chunk of work ...
+    // keep chunks small enough that cancellation is responsive
+  }
+}

2) Cancel from another thread ​

cpp
#include <thread>
+#include <vix/async/core/cancel.hpp>
+
+using vix::async::core::cancel_source;
+
+void run()
+{
+  cancel_source src;
+  auto tok = src.token();
+
+  std::thread worker([tok] {
+    while (!tok.is_cancelled())
+    {
+      // work
+    }
+  });
+
+  // later
+  src.request_cancel();
+
+  worker.join();
+}

3) Return cancellation as an error code ​

cpp
#include <vix/async/core/cancel.hpp>
+
+using vix::async::core::cancel_token;
+
+std::error_code read_something(cancel_token ct)
+{
+  if (ct.is_cancelled())
+    return vix::async::core::cancelled_ec();
+
+  // do work...
+  return {};
+}

Notes and best practices ​

  • Cancellation is cooperative: nothing is forcibly stopped. Your code must check the token.
  • Checkpoints matter: put checks at boundaries (loop iterations, before expensive steps, before blocking operations).
  • Empty tokens are valid: treat them as “never canceled” and proceed normally.
  • request_cancel() is idempotent: calling it multiple times is fine.

  • vix/async/core/error.hpp provides the error category and errc::canceled.
`,46)])])}const g=a(l,[["render",t]]);export{y as __pageData,g as default}; diff --git a/docs/assets/modules_async_cancel.md.BEL027yq.lean.js b/docs/assets/modules_async_cancel.md.BEL027yq.lean.js new file mode 100644 index 000000000..42d969fd3 --- /dev/null +++ b/docs/assets/modules_async_cancel.md.BEL027yq.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"async/core cancel","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/cancel.md","filePath":"modules/async/cancel.md","lastUpdated":1770918867000}'),l={name:"modules/async/cancel.md"};function t(h,s,p,c,r,k){return i(),e("div",null,[...s[0]||(s[0]=[n("",46)])])}const g=a(l,[["render",t]]);export{y as __pageData,g as default}; diff --git a/docs/assets/modules_async_dns.md.K54qDAiB.js b/docs/assets/modules_async_dns.md.K54qDAiB.js new file mode 100644 index 000000000..436e68307 --- /dev/null +++ b/docs/assets/modules_async_dns.md.K54qDAiB.js @@ -0,0 +1,32 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"dns","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/dns.md","filePath":"modules/async/dns.md","lastUpdated":1770965504000}'),t={name:"modules/async/dns.md"};function l(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

dns ​

The dns module defines the asynchronous hostname resolution interface used by Vix async networking.

It provides an abstract, coroutine-friendly resolver that integrates with io_context and the async runtime.


Overview ​

Header: vix/async/net/dns.hpp Namespace: vix::async::net

Main components:

  • resolved_address
  • dns_resolver (abstract interface)
  • make_dns_resolver(io_context&)

This layer is intentionally abstract so that different backends (Asio, system resolver, custom cache, etc.) can be plugged in without changing user code.


resolved_address ​

cpp
struct resolved_address {
+  std::string ip;
+  std::uint16_t port{0};
+};

Represents a single resolved endpoint:

  • ip: textual IPv4 or IPv6 address
  • port: port in host byte order

Example:

cpp
resolved_address a;
+a.ip = "93.184.216.34";
+a.port = 80;

dns_resolver ​

cpp
class dns_resolver {
+public:
+  virtual ~dns_resolver() = default;
+
+  virtual core::task<std::vector<resolved_address>> async_resolve(
+      std::string host,
+      std::uint16_t port,
+      core::cancel_token ct = {}) = 0;
+};

Contract ​

  • Resolves a hostname (e.g. "example.com")
  • Returns one or more resolved IP addresses
  • Supports cooperative cancellation
  • Uses task<> for coroutine-based integration

Error Model ​

async_resolve may:

  • throw std::system_error
  • throw runtime-specific resolution errors
  • throw cancellation error if cancel_token is triggered

Exceptions are rethrown when the awaiting coroutine resumes.


Factory ​

cpp
std::unique_ptr<dns_resolver>
+make_dns_resolver(core::io_context& ctx);

Creates the default resolver implementation associated with the given io_context.

The actual backend is runtime-defined (typically Asio-backed).


Example ​

cpp
#include <vix/async/net/dns.hpp>
+#include <vix/async/core/io_context.hpp>
+
+using namespace vix::async;
+
+core::task<void> resolve_example(core::io_context& ctx)
+{
+  auto resolver = net::make_dns_resolver(ctx);
+
+  auto results = co_await resolver->async_resolve("example.com", 80);
+
+  for (auto& r : results)
+  {
+    // r.ip and r.port available
+  }
+
+  co_return;
+}

Design Notes ​

  • DNS is modeled as a pure async operation returning task<std::vector<resolved_address>>.
  • No blocking APIs are exposed.
  • No dependency on concrete socket types.
  • Fully compatible with cancellation and scheduler semantics.

  • tcp_stream
  • udp_socket
  • io_context
  • task<T>
  • cancel_token
`,39)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_dns.md.K54qDAiB.lean.js b/docs/assets/modules_async_dns.md.K54qDAiB.lean.js new file mode 100644 index 000000000..2b968d0e0 --- /dev/null +++ b/docs/assets/modules_async_dns.md.K54qDAiB.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"dns","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/dns.md","filePath":"modules/async/dns.md","lastUpdated":1770965504000}'),t={name:"modules/async/dns.md"};function l(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",39)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_error.md.DDFpXxgq.js b/docs/assets/modules_async_error.md.DDFpXxgq.js new file mode 100644 index 000000000..8e46682f4 --- /dev/null +++ b/docs/assets/modules_async_error.md.DDFpXxgq.js @@ -0,0 +1,16 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"async/core/error","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/error.md","filePath":"modules/async/error.md","lastUpdated":1770918867000}'),n={name:"modules/async/error.md"};function l(r,s,p,h,o,d){return a(),e("div",null,[...s[0]||(s[0]=[t(`

async/core/error ​

Error handling system for the Vix async runtime.

Overview ​

The error.hpp file defines the error model used across:

  • Scheduler
  • Thread pool
  • Runtime
  • Timers
  • Cancellation system

It is based on:

  • std::error_code
  • A custom async error category
  • A compact enum class errc

The design is:

  • Lightweight
  • Allocation-free
  • Stable
  • Compatible with standard C++ error handling

Error Enumeration ​

cpp
enum class errc : std::uint8_t

Generic errors ​

Code Meaning


ok No error invalid_argument Invalid input not_ready Operation not ready timeout Operation timed out canceled Operation canceled closed Resource closed overflow Capacity overflow

Runtime / Scheduler ​

Code Meaning


stopped Runtime stopped queue_full Task queue full

Thread Pool ​

Code Meaning


rejected Task submission rejected

Platform ​

Code Meaning


not_supported Feature not supported

Error Category ​

The async subsystem defines its own std::error_category.

cpp
class error_category : public std::error_category

Category name:

cpp
"async"

This integrates seamlessly with std::error_code.

Creating Error Codes ​

cpp
using namespace vix::async::core;
+
+std::error_code ec = make_error_code(errc::timeout);
+
+if (ec)
+{
+    std::cout << ec.message(); // "timeout"
+}

Because is_error_code_enum is specialized, you can write:

cpp
std::error_code ec = errc::canceled;

Cancellation Integration ​

The cancellation system uses:

cpp
errc::canceled

Helper:

cpp
std::error_code cancelled_ec();

This ensures consistent error propagation across the async runtime.

Design Goals ​

  • No exceptions required
  • Thread-safe propagation
  • Zero dynamic allocation
  • Deterministic behavior
  • Stable ABI-friendly enum

Typical Usage Pattern ​

cpp
std::error_code ec;
+
+if (queue_full)
+    ec = errc::queue_full;
+
+if (ec)
+{
+    return ec;
+}

This style makes async code:

  • Explicit
  • Predictable
  • Composable

The async error model keeps the runtime deterministic and fully compatible with modern C++ error handling.

`,50)])])}const E=i(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_async_error.md.DDFpXxgq.lean.js b/docs/assets/modules_async_error.md.DDFpXxgq.lean.js new file mode 100644 index 000000000..946566b7b --- /dev/null +++ b/docs/assets/modules_async_error.md.DDFpXxgq.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"async/core/error","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/error.md","filePath":"modules/async/error.md","lastUpdated":1770918867000}'),n={name:"modules/async/error.md"};function l(r,s,p,h,o,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",50)])])}const E=i(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_async_example.md.Cw48IPlQ.js b/docs/assets/modules_async_example.md.Cw48IPlQ.js deleted file mode 100644 index 564728fe0..000000000 --- a/docs/assets/modules_async_example.md.Cw48IPlQ.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t}from"./chunks/framework.jUmBZPH5.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/example.md","filePath":"modules/async/example.md","lastUpdated":null}'),s={name:"modules/async/example.md"};function o(n,c,r,l,m,p){return a(),t("div")}const i=e(s,[["render",o]]);export{_ as __pageData,i as default}; diff --git a/docs/assets/modules_async_example.md.Cw48IPlQ.lean.js b/docs/assets/modules_async_example.md.Cw48IPlQ.lean.js deleted file mode 100644 index 564728fe0..000000000 --- a/docs/assets/modules_async_example.md.Cw48IPlQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t}from"./chunks/framework.jUmBZPH5.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/example.md","filePath":"modules/async/example.md","lastUpdated":null}'),s={name:"modules/async/example.md"};function o(n,c,r,l,m,p){return a(),t("div")}const i=e(s,[["render",o]]);export{_ as __pageData,i as default}; diff --git a/docs/assets/modules_async_example.md.DvBEIddd.js b/docs/assets/modules_async_example.md.DvBEIddd.js new file mode 100644 index 000000000..578eadb40 --- /dev/null +++ b/docs/assets/modules_async_example.md.DvBEIddd.js @@ -0,0 +1,98 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Minimal HTTP Server (Vix async)","description":"","frontmatter":{"title":"Minimal HTTP Server (Vix async)"},"headers":[],"relativePath":"modules/async/example.md","filePath":"modules/async/example.md","lastUpdated":1770881294000}'),h={name:"modules/async/example.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Minimal HTTP Server (Vix async) ​

This example shows how to build a tiny HTTP server using Vix async:

  • single io_context event loop
  • tcp_listener accept loop
  • per-connection coroutine handler
  • graceful stop on SIGINT / SIGTERM
  • log output via vix::console

It is intentionally minimal so you can copy/paste it into a demo or evolve it into a real HTTP module.


What you get ​

  • Listens on 0.0.0.0:8080
  • Accepts multiple clients
  • Reads the HTTP headers until \\r\\n\\r\\n
  • Responds with a fixed 200 OK and the body:
Hello from Vix async
  • Closes the connection after sending the response

Full code ​

cpp
#include <cstddef>
+#include <csignal>
+#include <memory>
+#include <span>
+#include <string>
+#include <vector>
+
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/signal.hpp>
+#include <vix/async/core/spawn.hpp>
+#include <vix/async/core/task.hpp>
+#include <vix/async/net/tcp.hpp>
+#include <vix/console.hpp>
+
+using vix::async::core::io_context;
+using vix::async::core::task;
+
+namespace
+{
+  static std::string ok(std::string_view body)
+  {
+    std::string r;
+    r += "HTTP/1.1 200 OK\\r\\n";
+    r += "Content-Length: " + std::to_string(body.size()) + "\\r\\n";
+    r += "Connection: close\\r\\n\\r\\n";
+    r.append(body.data(), body.size());
+    return r;
+  }
+
+  static task<void> client(std::unique_ptr<vix::async::net::tcp_stream> c)
+  {
+    if (!c || !c->is_open())
+      co_return;
+
+    std::vector<std::byte> buf(2048);
+    std::string req;
+
+    while (c->is_open() && req.find("\\r\\n\\r\\n") == std::string::npos)
+    {
+      std::size_t n = co_await c->async_read(std::span<std::byte>(buf.data(), buf.size()));
+      if (n == 0)
+        break;
+
+      req.append(reinterpret_cast<const char *>(buf.data()), n);
+
+      // Safety cap to avoid unbounded memory growth for this demo
+      if (req.size() > 64 * 1024)
+        break;
+    }
+
+    const std::string resp = ok("Hello from Vix async\\n");
+    co_await c->async_write(std::span<const std::byte>(
+        reinterpret_cast<const std::byte *>(resp.data()), resp.size()));
+
+    c->close();
+    co_return;
+  }
+
+  static task<void> server(io_context &ctx)
+  {
+    // Stop cleanly on Ctrl+C or a SIGTERM from a process manager
+    auto &sig = ctx.signals();
+    sig.add(SIGINT);
+    sig.add(SIGTERM);
+    sig.on_signal([&](int)
+                  { vix::console.warn("[http] stop"); ctx.stop(); });
+
+    auto l = vix::async::net::make_tcp_listener(ctx);
+
+    // Note: the endpoint expects a uint16_t port, hence the cast
+    co_await l->async_listen({"0.0.0.0", static_cast<uint16_t>(8080)}, 128);
+
+    vix::console.log("[http] ready http://0.0.0.0:8080");
+
+    while (ctx.is_running())
+    {
+      auto c = co_await l->async_accept();
+      vix::async::core::spawn_detached(ctx, client(std::move(c)));
+    }
+
+    l->close();
+    co_return;
+  }
+
+} // namespace
+
+int main()
+{
+  io_context ctx;
+
+  // Start the server coroutine (task starts suspended in Vix async)
+  auto t = server(ctx);
+  ctx.post(t.handle());
+
+  // Run the event loop until ctx.stop()
+  ctx.run();
+  return 0;
+}

Run it ​

1) Compile and run with Vix ​

bash
vix run server.cpp

If you want colored console output (when supported):

bash
vix run server.cpp --log-color=always

You should see something like:

[http] ready http://0.0.0.0:8080

2) Test with curl ​

bash
curl -i http://127.0.0.1:8080

3) Test with HTTPie ​

bash
http :8080

How it works ​

io_context ​

io_context is the runtime event loop. We post the coroutine handle and then run the loop:

  • ctx.post(t.handle()) schedules the coroutine to start
  • ctx.run() drives I/O, timers, and coroutine resumes
  • ctx.stop() stops the loop (triggered by signals in this example)

server() coroutine ​

The server coroutine is responsible for:

  1. Installing signal handlers (SIGINT, SIGTERM)
  2. Listening on an address and port (async_listen)
  3. Accepting connections (async_accept)
  4. Spawning one detached coroutine per connection (spawn_detached)

client() coroutine ​

The client handler does:

  1. Read data until it sees \\r\\n\\r\\n (end of headers)
  2. Write a minimal HTTP response
  3. Close the socket

Notes and limitations ​

This is a minimal demo, so it does not:

  • parse request method/path
  • handle request bodies (Content-Length)
  • support keep-alive
  • implement timeouts
  • implement proper HTTP header handling

It is meant to be a clear starting point.


Next steps ​

If you want to evolve this into a real HTTP server, the next upgrades are:

  1. Parse the request line (GET /path HTTP/1.1)
  2. Add routing (/, /health, /metrics)
  3. Support Content-Length for POST bodies
  4. Add read/write timeouts
  5. Keep-alive and request pipelining (optional)

If you plan to publish this as a reusable example, you can also package it for the Vix Registry and ship it with vix publish.

`,45)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_async_example.md.DvBEIddd.lean.js b/docs/assets/modules_async_example.md.DvBEIddd.lean.js new file mode 100644 index 000000000..db982adfa --- /dev/null +++ b/docs/assets/modules_async_example.md.DvBEIddd.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Minimal HTTP Server (Vix async)","description":"","frontmatter":{"title":"Minimal HTTP Server (Vix async)"},"headers":[],"relativePath":"modules/async/example.md","filePath":"modules/async/example.md","lastUpdated":1770881294000}'),h={name:"modules/async/example.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t("",45)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_async_guide.md.Da2LEsgM.js b/docs/assets/modules_async_guide.md.Da2LEsgM.js deleted file mode 100644 index dbd472d02..000000000 --- a/docs/assets/modules_async_guide.md.Da2LEsgM.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/guide.md","filePath":"modules/async/guide.md","lastUpdated":null}'),s={name:"modules/async/guide.md"};function o(d,n,c,r,i,l){return t(),a("div")}const u=e(s,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_async_guide.md.Da2LEsgM.lean.js b/docs/assets/modules_async_guide.md.Da2LEsgM.lean.js deleted file mode 100644 index dbd472d02..000000000 --- a/docs/assets/modules_async_guide.md.Da2LEsgM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/guide.md","filePath":"modules/async/guide.md","lastUpdated":null}'),s={name:"modules/async/guide.md"};function o(d,n,c,r,i,l){return t(),a("div")}const u=e(s,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_async_index.md.DmqdB3H-.lean.js b/docs/assets/modules_async_index.md.DmqdB3H-.lean.js deleted file mode 100644 index 5b583de48..000000000 --- a/docs/assets/modules_async_index.md.DmqdB3H-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Async","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/index.md","filePath":"modules/async/index.md","lastUpdated":null}'),t={name:"modules/async/index.md"};function e(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l("",61)])])}const c=i(t,[["render",e]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_async_index.md.DmqdB3H-.js b/docs/assets/modules_async_index.md.Duci8b_Q.js similarity index 89% rename from docs/assets/modules_async_index.md.DmqdB3H-.js rename to docs/assets/modules_async_index.md.Duci8b_Q.js index 9fdb72a24..6aad665a2 100644 --- a/docs/assets/modules_async_index.md.DmqdB3H-.js +++ b/docs/assets/modules_async_index.md.Duci8b_Q.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Async","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/index.md","filePath":"modules/async/index.md","lastUpdated":null}'),t={name:"modules/async/index.md"};function e(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Async ​

The vix::async module provides a coroutine-based asynchronous runtime.

This guide explains the core building blocks and how they fit together. It focuses on patterns, not full showcase applications.


Core Concepts ​

Main components:

  • io_context → event loop
  • task<T> → coroutine task
  • timers() → async sleep
  • cpu_pool() → offload CPU work
  • signals() → signal handling
  • spawn_detached() → fire-and-forget coroutine

Async in Vix is:

  • Explicit
  • Coroutine-based
  • No hidden threads
  • Fully controlled by your event loop

1. Event loop and task ​

Every async program starts with an io_context.

Minimal structure:

cpp
#include <vix/async/core/io_context.hpp>
+import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Async","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/index.md","filePath":"modules/async/index.md","lastUpdated":1770805184000}'),t={name:"modules/async/index.md"};function e(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Async ​

The vix::async module provides a coroutine-based asynchronous runtime.

This guide explains the core building blocks and how they fit together. It focuses on patterns, not full showcase applications.


Core Concepts ​

Main components:

  • io_context → event loop
  • task<T> → coroutine task
  • timers() → async sleep
  • cpu_pool() → offload CPU work
  • signals() → signal handling
  • spawn_detached() → fire-and-forget coroutine

Async in Vix is:

  • Explicit
  • Coroutine-based
  • No hidden threads
  • Fully controlled by your event loop

1. Event loop and task ​

Every async program starts with an io_context.

Minimal structure:

cpp
#include <vix/async/core/io_context.hpp>
 #include <vix/async/core/task.hpp>
 
 using vix::async::core::io_context;
@@ -47,4 +47,4 @@ import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o
     handle_client(std::move(client))
   );
 }

Each client is handled in its own coroutine. No hidden threads are created.


6. when_all and when_any ​

Run multiple tasks concurrently.

cpp
auto tup = co_await when_all(sched, a(), b());
  • Waits for all tasks
  • Returns a tuple of results
cpp
auto [index, values] =
-  co_await when_any(sched, a(), b());
  • Returns when the first task completes
  • index tells which one finished

Useful for parallel I/O or timeouts.


Execution Model ​

Vix async is:

  • Single explicit event loop
  • Cooperative scheduling
  • Coroutine suspension via co_await
  • Deterministic control over lifecycle

You decide:

  • When to stop
  • Where CPU work runs
  • How tasks are composed

Recommended Usage ​

  • Use io_context as your runtime root
  • Offload heavy work to cpu_pool()
  • Always stop the context explicitly
  • Prefer structured concurrency (when_all, when_any)
  • Use spawn_detached carefully (fire-and-forget)

Async in Vix follows the same philosophy as the rest of the runtime:

Explicit control. No hidden magic.

`,61)])])}const c=i(t,[["render",e]]);export{o as __pageData,c as default}; + co_await when_any(sched, a(), b());
  • Returns when the first task completes
  • index tells which one finished

Useful for parallel I/O or timeouts.


Execution Model ​

Vix async is:

  • Single explicit event loop
  • Cooperative scheduling
  • Coroutine suspension via co_await
  • Deterministic control over lifecycle

You decide:

  • When to stop
  • Where CPU work runs
  • How tasks are composed

Recommended Usage ​

  • Use io_context as your runtime root
  • Offload heavy work to cpu_pool()
  • Always stop the context explicitly
  • Prefer structured concurrency (when_all, when_any)
  • Use spawn_detached carefully (fire-and-forget)

Async in Vix follows the same philosophy as the rest of the runtime:

Explicit control. No hidden magic.

`,61)])])}const y=i(t,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_index.md.Duci8b_Q.lean.js b/docs/assets/modules_async_index.md.Duci8b_Q.lean.js new file mode 100644 index 000000000..7ca872623 --- /dev/null +++ b/docs/assets/modules_async_index.md.Duci8b_Q.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Async","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/index.md","filePath":"modules/async/index.md","lastUpdated":1770805184000}'),t={name:"modules/async/index.md"};function e(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[l("",61)])])}const y=i(t,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_io.md.nWfUc4dk.js b/docs/assets/modules_async_io.md.nWfUc4dk.js new file mode 100644 index 000000000..6b302e977 --- /dev/null +++ b/docs/assets/modules_async_io.md.nWfUc4dk.js @@ -0,0 +1,52 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"io_context","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/io.md","filePath":"modules/async/io.md","lastUpdated":1770918867000}'),e={name:"modules/async/io.md"};function l(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

io_context ​

vix::async::core::io_context is the core runtime context for Vix async. It owns a scheduler and exposes lazy services used by higher-level features: CPU thread pool, timers, signal handling, and networking.

This type is designed to be:

  • Explicit: you drive it via run() and stop it via stop()
  • Deterministic: no hidden background loops
  • Lightweight: services are created only when you ask for them

cpp
#include <vix/async/core/io_context.hpp>

What it provides ​

1) Scheduler ownership ​

io_context owns a scheduler instance and exposes it via:

cpp
scheduler&       get_scheduler() noexcept;
+const scheduler& get_scheduler() const noexcept;

You can also post work directly:

cpp
template <typename Fn>
+void post(Fn&& fn);
+
+void post(std::coroutine_handle<> h);

2) Event loop control ​

cpp
void run();           // processes queued tasks, typically blocks
+void stop() noexcept; // requests the scheduler to stop
+bool is_running() const noexcept;

3) Lazy services ​

These are created on first access and owned by the io_context:

cpp
thread_pool& cpu_pool();
+timer&       timers();
+signal_set&  signals();
+vix::async::net::detail::asio_net_service& net();

Notes:

  • net() returns an internal service type in a detail namespace. The goal is to keep the public API light and avoid pulling networking details into headers.

Minimal example ​

cpp
#include <iostream>
+#include <vix/async/core/io_context.hpp>
+
+static void demo_basic(vix::async::core::io_context& ctx)
+{
+  ctx.post([&]{
+    std::cout << "hello from scheduler\\n";
+    ctx.stop();
+  });
+
+  ctx.run();
+}
+
+int main()
+{
+  vix::async::core::io_context ctx;
+  demo_basic(ctx);
+  return 0;
+}

Using lazy services ​

CPU pool (compute-bound work) ​

You typically keep IO on the scheduler and push heavy CPU work to the pool.

cpp
static void demo_cpu_pool(vix::async::core::io_context& ctx)
+{
+  auto& pool = ctx.cpu_pool(); // created here if needed
+  (void)pool;
+
+  // Example usage depends on thread_pool API (submit, schedule, etc.)
+}

Timers ​

cpp
static void demo_timers(vix::async::core::io_context& ctx)
+{
+  auto& t = ctx.timers(); // created here if needed
+  (void)t;
+
+  // Example usage depends on timer API (sleep_for, at, etc.)
+}

Signals ​

cpp
static void demo_signals(vix::async::core::io_context& ctx)
+{
+  auto& sig = ctx.signals(); // created here if needed
+  (void)sig;
+
+  // Example usage depends on signal_set API.
+}

Networking ​

cpp
static void demo_net(vix::async::core::io_context& ctx)
+{
+  auto& n = ctx.net(); // internal Asio-backed service
+  (void)n;
+
+  // Networking APIs are intentionally built on top of this service.
+}

Lifecycle rules and best practices ​

  • Create one io_context per subsystem that needs a runtime loop.
  • Call run() from the thread you want to own the loop.
  • Use post() to inject work safely from other parts of the program.
  • Stop the loop using stop() (or a higher-level shutdown mechanism).
  • Avoid constructing lazy services unless you need them. They are owned by the context and destroyed with it.

Common pitfalls ​

  • Forgetting to call run(): posting tasks does nothing until the scheduler is driven.
  • Calling run() twice concurrently: only one thread should drive a given context loop unless the scheduler explicitly supports multi-threaded driving.
  • Storing references to lazy services after context destruction: they are owned by io_context.

  • scheduler (task queue + coroutine resumption)
  • thread_pool (compute scheduling)
  • timer (time-based scheduling)
  • signal_set (signal handling)
  • Networking module built on top of net() service
`,44)])])}const y=i(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_io.md.nWfUc4dk.lean.js b/docs/assets/modules_async_io.md.nWfUc4dk.lean.js new file mode 100644 index 000000000..4eb5bc77e --- /dev/null +++ b/docs/assets/modules_async_io.md.nWfUc4dk.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"io_context","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/io.md","filePath":"modules/async/io.md","lastUpdated":1770918867000}'),e={name:"modules/async/io.md"};function l(h,s,p,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",44)])])}const y=i(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_scheduler.md.CuyRQcwC.js b/docs/assets/modules_async_scheduler.md.CuyRQcwC.js new file mode 100644 index 000000000..dd3753309 --- /dev/null +++ b/docs/assets/modules_async_scheduler.md.CuyRQcwC.js @@ -0,0 +1,22 @@ +import{_ as s,o as a,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"scheduler","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/scheduler.md","filePath":"modules/async/scheduler.md","lastUpdated":1770918867000}'),n={name:"modules/async/scheduler.md"};function t(h,i,p,d,r,o){return a(),e("div",null,[...i[0]||(i[0]=[l(`

scheduler ​

Minimal single-thread scheduler for async tasks and coroutine resumption.


Overview ​

scheduler is the core execution engine of the Vix async runtime.

It provides:

  • A thread-safe FIFO job queue
  • An event loop (run())
  • Posting of:
    • Generic callables
    • Coroutine continuations
  • An awaitable (schedule()) to hop onto the scheduler thread

It is intentionally:

  • Small
  • Deterministic
  • Single-threaded (run() executes on the calling thread)
  • Designed to be embedded inside io_context

Basic Usage ​

cpp
#include <vix/async/core/scheduler.hpp>
+
+using namespace vix::async::core;
+
+int main()
+{
+    scheduler sched;
+
+    sched.post([] {
+        std::cout << "Hello from scheduler\\n";
+    });
+
+    sched.run(); // blocks
+}

Posting Work ​

1. Posting a Callable ​

cpp
sched.post([] {
+    do_something();
+});

The callable is:

  • Stored in a type-erased job
  • Enqueued
  • Executed when run() processes it

2. Posting a Coroutine Handle ​

cpp
std::coroutine_handle<> h = ...;
+sched.post(h);

The scheduler wraps the handle into a job that resumes the coroutine.


Awaitable Scheduling ​

The scheduler provides:

cpp
co_await sched.schedule();

What it does ​

  • Always suspends
  • Posts the continuation to the scheduler queue
  • Resumes execution on the scheduler thread

Example:

cpp
task<void> my_task(scheduler& sched)
+{
+    co_await sched.schedule();
+    std::cout << "Now running inside scheduler thread\\n";
+}

Event Loop ​

run() ​

cpp
sched.run();

Behavior:

  • Blocks the calling thread
  • Waits on condition_variable
  • Processes jobs in FIFO order
  • Exits when:
    • stop() is requested
    • Queue is empty and stop flag observed

stop() ​

cpp
sched.stop();
  • Sets stop flag
  • Wakes all waiters
  • Allows run() to exit cleanly

Introspection ​

cpp
bool running = sched.is_running();
+std::size_t pending = sched.pending();
  • is_running() → whether run() loop is active
  • pending() → number of queued jobs

Internal Design ​

Job Queue ​

Jobs are stored as:

cpp
std::deque<job>

Each job contains:

  • A small type-erased callable holder
  • Move-only semantics
  • Virtual dispatch through a lightweight polymorphic base

This avoids std::function overhead while remaining generic.


Thread Safety ​

Protected by:

  • std::mutex
  • std::condition_variable

Safe for:

  • Multiple producers calling post()
  • Single consumer running run()

Design Principles ​

scheduler is intentionally:

  • Minimal
  • Predictable
  • Not a thread pool
  • Not a work-stealing system
  • Not multi-threaded

Higher-level concurrency (CPU pools, networking, timers) is built on top of this primitive.


Typical Role in Vix ​

scheduler is embedded inside:

cpp
io_context

The io_context:

  • Owns a scheduler
  • Exposes higher-level async services
  • Coordinates timers, signals, networking

Summary ​

scheduler is the lowest-level execution primitive of the Vix async core:

  • FIFO task execution
  • Coroutine resumption
  • Deterministic single-thread loop
  • Foundation for the entire runtime

It is small by design — everything else builds on top of it.

`,74)])])}const E=s(n,[["render",t]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_async_scheduler.md.CuyRQcwC.lean.js b/docs/assets/modules_async_scheduler.md.CuyRQcwC.lean.js new file mode 100644 index 000000000..225f3d3c1 --- /dev/null +++ b/docs/assets/modules_async_scheduler.md.CuyRQcwC.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"scheduler","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/scheduler.md","filePath":"modules/async/scheduler.md","lastUpdated":1770918867000}'),n={name:"modules/async/scheduler.md"};function t(h,i,p,d,r,o){return a(),e("div",null,[...i[0]||(i[0]=[l("",74)])])}const E=s(n,[["render",t]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_async_signal.md.BstbyWYL.js b/docs/assets/modules_async_signal.md.BstbyWYL.js new file mode 100644 index 000000000..8b9e9fada --- /dev/null +++ b/docs/assets/modules_async_signal.md.BstbyWYL.js @@ -0,0 +1,62 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"signal","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/signal.md","filePath":"modules/async/signal.md","lastUpdated":1770918867000}'),t={name:"modules/async/signal.md"};function l(h,s,p,o,r,c){return a(),n("div",null,[...s[0]||(s[0]=[e(`

signal ​

signal_set is a small asynchronous signal watcher designed to integrate POSIX signals into the Vix async runtime (io_context + scheduler).

It lets you:

  • register signals you care about (add, remove)
  • co_await the next signal via async_wait()
  • optionally run a callback on each received signal (on_signal)
  • stop the watcher (stop())

This guide focuses on how to use the API, how it behaves, and what the important constraints are.


What problem does this solve? ​

Signals (like SIGINT when you press Ctrl+C) arrive outside your normal program flow.

If you want a clean shutdown in an async program, you typically want:

  • a single place to observe signals
  • a way to co_await a signal in coroutines
  • delivery of completions on your scheduler thread (not on some random signal context)

signal_set provides that integration point.


Design model ​

signal_set is:

  • bound to an io_context
  • potentially backed by a dedicated worker thread (lazy start)
  • able to deliver signal events to:
    • a single awaiting coroutine (single waiter model)
    • an optional callback

Important behaviors implied by the header:

  1. Single waiter model

    • signal_set stores one std::coroutine_handle<> waiter_ and bool waiter_active_.
    • That strongly suggests only one async_wait() is intended at a time.
    • If you need multiple consumers, build a fan-out layer (e.g. channel/queue) on top.
  2. Queue for pending signals

    • Captured signals are buffered in pending_.
    • If a signal arrives before you call async_wait(), it can be consumed later.
  3. Callbacks run on the scheduler thread

    • on_signal(fn) says the callback is posted via io_context posting mechanism.
    • That means your callback runs on the same thread that executes ctx.run().
  4. Cancellation support

    • async_wait(cancel_token) integrates with Vix cancellation.
    • If cancellation is requested, the task should complete with a cancellation error or equivalent behavior (see your task<> contract).
  5. Stop is explicit

    • stop() requests shutdown and should wake any active waiter.

Typical usage ​

1) Basic Ctrl+C handling ​

In an async app, you often want Ctrl+C to request cancellation and let your tasks unwind.

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/signal.hpp>
+#include <vix/async/core/cancel.hpp>
+#include <vix/async/core/task.hpp>
+
+using namespace vix::async::core;
+
+task<void> app_main(io_context& ctx, signal_set& sigs, cancel_source& cs)
+{
+  // Wait for SIGINT (Ctrl+C)
+  int sig = co_await sigs.async_wait(cs.token());
+  (void)sig;
+
+  // Request cancellation for the rest of the system
+  cs.request_cancel();
+
+  co_return;
+}
+
+int main()
+{
+  io_context ctx;
+
+  // signal_set is a lazy watcher bound to ctx
+  signal_set sigs(ctx);
+
+  // Register SIGINT
+  sigs.add(SIGINT);
+
+  cancel_source cs;
+
+  // Start your app tasks (depends on your task runner API)
+  // Example shape:
+  // vix::async::core::spawn(ctx, app_main(ctx, sigs, cs));
+
+  ctx.run();
+  return 0;
+}

Notes:

  • Register signals early (before run) so you do not miss early signals.
  • Ensure ctx.run() is running so posted completions can execute.

2) Using a callback instead of awaiting ​

Sometimes you just want a lightweight handler that flips a flag and triggers shutdown.

cpp
signal_set sigs(ctx);
+sigs.add(SIGINT);
+sigs.add(SIGTERM);
+
+sigs.on_signal([&](int sig){
+  // Runs on the scheduler thread
+  // Keep it short and safe.
+  cs.request_cancel();
+});

This is convenient when you do not want a dedicated coroutine waiting on signals.

3) Supporting both callback and coroutine wait ​

You can do both:

  • callback for immediate side effects
  • coroutine wait for structured shutdown sequencing

Be careful to avoid duplicate actions (e.g. requesting cancel twice is usually fine).


API reference ​

signal_set(io_context& ctx) ​

Binds the signal watcher to a runtime context.

The watcher can post completions and callbacks back onto ctx so they execute on the scheduler thread.

void add(int sig) ​

Register a signal number (e.g. SIGINT, SIGTERM) to observe.

The implementation may start the internal worker thread lazily on first registration or first wait.

void remove(int sig) ​

Stop observing a given signal number.

If the signal is already pending in the queue, removal does not necessarily remove it from the pending queue.

task<int> async_wait(cancel_token ct = {}) ​

Asynchronously wait for the next received signal.

Key behaviors:

  • If pending_ already contains a signal, the task can complete quickly by consuming it.
  • If no pending signal exists, the coroutine suspends and waiter_ is stored.
  • Cancellation token may cancel the wait.

Because the header stores a single waiter handle, assume:

  • only one active async_wait() at a time
  • calling async_wait() again concurrently is either rejected, undefined, or causes overwrites

If you need multiple waits, serialize them:

cpp
for (;;)
+{
+  int sig = co_await sigs.async_wait(ct);
+  // handle sig
+}

void on_signal(std::function<void(int)> fn) ​

Register a callback invoked for each received signal.

The callback is posted onto the scheduler thread.

Rules of thumb:

  • Keep it fast (no blocking I/O, no heavy work).
  • Delegate heavy work to other tasks using ctx.post(...) or your coroutine orchestration.

void stop() noexcept ​

Requests shutdown of the internal worker (if any) and wakes the active waiter (if any).

Use this if your program is exiting and you want to ensure:

  • worker thread terminates
  • pending tasks can unblock

Threading and safety notes ​

  • Internal state is protected by a mutex (m_).
  • The worker thread captures signals and pushes them to pending_.
  • Delivery to coroutines/callbacks is done by posting onto io_context (scheduler thread).

Practical implications:

  • You should treat signal_set methods as thread-safe unless your implementation says otherwise.
  • Your callback runs on the scheduler thread, so it can safely touch scheduler-owned state if that state is also scheduler-thread-confined.
  • Do not assume callbacks run immediately after the signal arrives: they are queued via ctx_post.

Cancellation behavior ​

async_wait(cancel_token) indicates waiters can be cancelled.

Make sure your shutdown logic accounts for:

  • cancellation requested before a signal arrives
  • stop() called while waiting
  • multiple signals arriving quickly

A robust pattern is:

  • request cancellation on signal
  • let other tasks watch the cancel token
  • stop the io_context once tasks have drained

Common patterns ​

Graceful shutdown: signal cancels, main loop exits ​

  • signal triggers cancellation
  • your main coroutine or control loop stops the context

Pseudo:

cpp
int sig = co_await sigs.async_wait(ct);
+cs.request_cancel();
+// wait for tasks to finish if you have a join mechanism
+ctx.stop();

Coalesce repeated signals ​

If you press Ctrl+C multiple times, you may get multiple pending signals.

You can ignore subsequent ones:

cpp
bool first = true;
+for (;;)
+{
+  int sig = co_await sigs.async_wait(ct);
+  if (first)
+  {
+    first = false;
+    cs.request_cancel();
+  }
+}

Practical limitations ​

  1. POSIX-only by intent

    • The header references POSIX signals (<csignal>).
    • On non-POSIX platforms, you may provide a stub or use errc::not_supported.
  2. Signal semantics are platform-dependent

    • Delivery rules depend on process/thread masks.
    • If you do signal masking in other threads, document your expectation.
  3. Single waiter model

    • If you need multiple consumers, build a small channel around it.

Summary ​

signal_set is the async bridge from OS signals to Vix coroutines:

  • register signals (add)
  • await the next signal (async_wait)
  • optional callback (on_signal) posted on the scheduler thread
  • stop cleanly (stop)

It is small, explicit, and integrates into io_context without hiding complex behavior.

`,90)])])}const E=i(t,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_async_signal.md.BstbyWYL.lean.js b/docs/assets/modules_async_signal.md.BstbyWYL.lean.js new file mode 100644 index 000000000..8690288f1 --- /dev/null +++ b/docs/assets/modules_async_signal.md.BstbyWYL.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"signal","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/signal.md","filePath":"modules/async/signal.md","lastUpdated":1770918867000}'),t={name:"modules/async/signal.md"};function l(h,s,p,o,r,c){return a(),n("div",null,[...s[0]||(s[0]=[e("",90)])])}const E=i(t,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_async_spawn.md.Cg5_83J6.js b/docs/assets/modules_async_spawn.md.Cg5_83J6.js new file mode 100644 index 000000000..108352698 --- /dev/null +++ b/docs/assets/modules_async_spawn.md.Cg5_83J6.js @@ -0,0 +1,26 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"spawn","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/spawn.md","filePath":"modules/async/spawn.md","lastUpdated":1770918867000}'),n={name:"modules/async/spawn.md"};function l(h,s,p,d,o,k){return i(),e("div",null,[...s[0]||(s[0]=[t(`

spawn ​

spawn is the tiny "fire and forget" helper for Vix async tasks.

It takes a task<void>, schedules it onto an io_context scheduler, and lets it run without returning anything to the caller.

This is useful for background work where you do not want to propagate a result, for example telemetry, cache warmups, periodic refresh, or "best effort" cleanup.

What it provides ​

  • vix::async::core::spawn_detached(io_context&, task<void>)
  • An internal helper coroutine type: detail::detached_task

spawn_detached is intentionally small and deterministic:

  • The coroutine is posted to io_context via ctx.post(handle).
  • The coroutine frame destroys itself at the end (final suspend).
  • Exceptions are swallowed by design (detached tasks have no observer).

API ​

cpp
namespace vix::async::core {
+  inline void spawn_detached(io_context& ctx, task<void> t);
+}

Behavior ​

  1. Wrap the provided task<void> into an internal coroutine (make_detached).
  2. Post the wrapper coroutine handle to the io_context scheduler.
  3. The wrapper co_awaits the original task.
  4. At completion, final_suspend destroys the wrapper frame.

How it works internally ​

detail::detached_task ​

detached_task is a dedicated coroutine type with a promise that:

  • starts suspended (initial_suspend = suspend_always)
  • self-destroys at final suspend
  • swallows exceptions in unhandled_exception()

That makes it safe as a scheduler posted coroutine handle:

  • it will not leak (self-destruction)
  • it will not crash the runtime due to an unobserved exception

detail::make_detached(task<void>) ​

cpp
inline detached_task make_detached(task<void> t) {
+  co_await t;
+  co_return;
+}

This wrapper exists so spawn_detached can post a coroutine handle that has a self-destroying final suspend, even if the original task implementation is updated later.

Example ​

A simple "background job" that runs on the scheduler thread:

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/spawn.hpp>
+
+using namespace vix::async::core;
+
+task<void> background()
+{
+  // do something best-effort
+  // if you throw here, it will be swallowed (detached)
+  co_return;
+}
+
+int main()
+{
+  io_context ctx;
+
+  spawn_detached(ctx, background());
+
+  ctx.run();
+  return 0;
+}

Notes and best practices ​

  • spawn_detached is for task<void> only. If you need a value, return a task<T> and co_await it somewhere.
  • Because exceptions are swallowed, treat detached tasks as "best effort".
    • If you need observability, add logging inside the task body or later connect unhandled_exception() to the logger.
  • The work runs on the scheduler thread unless the task uses other services (cpu pool, timers, net) and awaits them.
  • task<T>: coroutine result type and ownership model
  • scheduler: single-thread scheduler queue and event loop
  • io_context: runtime context that owns the scheduler and lazy services
`,28)])])}const g=a(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_async_spawn.md.Cg5_83J6.lean.js b/docs/assets/modules_async_spawn.md.Cg5_83J6.lean.js new file mode 100644 index 000000000..3b32f5fd7 --- /dev/null +++ b/docs/assets/modules_async_spawn.md.Cg5_83J6.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"spawn","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/spawn.md","filePath":"modules/async/spawn.md","lastUpdated":1770918867000}'),n={name:"modules/async/spawn.md"};function l(h,s,p,d,o,k){return i(),e("div",null,[...s[0]||(s[0]=[t("",28)])])}const g=a(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_async_task.md.mGpBxUHC.js b/docs/assets/modules_async_task.md.mGpBxUHC.js new file mode 100644 index 000000000..31cf877ff --- /dev/null +++ b/docs/assets/modules_async_task.md.mGpBxUHC.js @@ -0,0 +1,73 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"task","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/task.md","filePath":"modules/async/task.md","lastUpdated":1770918867000}'),e={name:"modules/async/task.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

task ​

Coroutine task type for the async core runtime.

task<T> is Vix.cpp’s minimal coroutine return type: it represents an asynchronous computation that eventually produces a value of type T (or throws). Tasks are lazy by default: they start suspended and only run when awaited or explicitly scheduled.

This page documents the public behavior of vix::async::core::task as implemented in task.hpp.


cpp
#include <vix/async/core/task.hpp>

Namespace:

cpp
vix::async::core

What task<T> is ​

task<T> is a move-only coroutine handle owner with these properties:

  • Lazy: created suspended (initial_suspend() is suspend_always).
  • Single-consumer result: the produced value is moved out once in await_resume().
  • Exception-aware: exceptions are captured and rethrown from await_resume().
  • Continuation-based: co_await task resumes the awaiting coroutine at final suspend.
  • Detachable: std::move(t).start(sched) schedules the coroutine and releases ownership.

There is also a specialization:

  • task<void>: same behavior, but no value.

Lifecycle and suspension model ​

Lazy start ​

A task does not start running when you create it. It starts when:

  • You co_await it, or
  • You call std::move(task).start(scheduler).

This comes from:

  • promise_common::initial_suspend() returns std::suspend_always.

Continuation wiring ​

When you co_await a task:

  1. The awaiter stores the awaiting coroutine handle into promise.continuation.
  2. The runtime resumes the task coroutine.
  3. At final_suspend, the task returns the continuation handle so the runtime resumes it.

If there is no continuation and the task is detached, the coroutine frame destroys itself at final suspend.


Basic usage ​

Await a task that returns a value ​

cpp
#include <vix/async/core/task.hpp>
+
+using vix::async::core::task;
+
+task<int> compute()
+{
+  co_return 42;
+}
+
+task<void> demo()
+{
+  int v = co_await compute();
+  (void)v;
+  co_return;
+}

Await a task that returns void ​

cpp
using vix::async::core::task;
+
+task<void> do_work()
+{
+  co_return;
+}
+
+task<void> demo()
+{
+  co_await do_work();
+  co_return;
+}

Error propagation ​

If a task throws, the exception is captured in the promise via unhandled_exception() and rethrown in await_resume().

Example:

cpp
#include <stdexcept>
+#include <vix/async/core/task.hpp>
+
+using vix::async::core::task;
+
+task<int> fails()
+{
+  throw std::runtime_error("boom");
+  co_return 0;
+}
+
+task<void> demo()
+{
+  try
+  {
+    int x = co_await fails();
+    (void)x;
+  }
+  catch (const std::exception &)
+  {
+    // handle error
+  }
+  co_return;
+}

Detaching and scheduling ​

start(scheduler&) ​

start() detaches the task and posts it onto a scheduler:

  • Marks promise.detached = true
  • Posts the coroutine handle to scheduler::post(handle)
  • Releases ownership (task becomes empty)

Signature (both task<T> and task<void>):

cpp
void start(scheduler &sched) && noexcept;

Important implications:

  • You must call it on an rvalue: std::move(t).start(sched).
  • After start(), the task object no longer owns the coroutine frame.
  • If nobody awaits it (no continuation), the frame self-destroys at final suspend.

Example:

cpp
#include <vix/async/core/scheduler.hpp>
+#include <vix/async/core/task.hpp>
+
+using vix::async::core::scheduler;
+using vix::async::core::task;
+
+task<void> background_job()
+{
+  // do something
+  co_return;
+}
+
+void run_detached()
+{
+  scheduler sched;
+
+  // fire-and-forget
+  std::move(background_job()).start(sched);
+
+  // drive the scheduler on this thread
+  sched.run();
+}

Awaiting from coroutines ​

operator co_await ​

Both lvalue and rvalue co_await are supported:

cpp
auto operator co_await() & noexcept;
+auto operator co_await() && noexcept;

Behavior:

  • await_ready() is true if the handle is empty or already completed.
  • await_suspend(awaiting) stores the continuation and resumes the task.
  • await_resume() rethrows captured exceptions and returns/moves the result.

Ownership rules ​

  • task is move-only (copy is deleted).
  • Destroying a non-detached task destroys its coroutine frame (h_.destroy()).
  • After start(), the task releases its handle, so its destructor does nothing.

You can inspect:

cpp
bool valid() const noexcept;
+explicit operator bool() const noexcept;
+handle_type handle() const noexcept;

Notes and constraints ​

  • task<T> rejects reference result types at compile time:

    static_assert(!std::is_reference_v<T>)

    If you need to return references, use task<std::reference_wrapper<T>>.

  • The implementation is intentionally minimal: it does not provide cancellation, timeouts, or executors directly. Those are built around it (e.g. cancel_token, io_context, timers).


  • scheduler for driving posted tasks and coroutine resumptions
  • io_context as the higher-level runtime that owns a scheduler and services
  • cancel_source / cancel_token for cooperative cancellation
`,65)])])}const y=i(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_task.md.mGpBxUHC.lean.js b/docs/assets/modules_async_task.md.mGpBxUHC.lean.js new file mode 100644 index 000000000..526830ab3 --- /dev/null +++ b/docs/assets/modules_async_task.md.mGpBxUHC.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"task","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/task.md","filePath":"modules/async/task.md","lastUpdated":1770918867000}'),e={name:"modules/async/task.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",65)])])}const y=i(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_tcp.md.FPY9UMv7.js b/docs/assets/modules_async_tcp.md.FPY9UMv7.js new file mode 100644 index 000000000..29b220b46 --- /dev/null +++ b/docs/assets/modules_async_tcp.md.FPY9UMv7.js @@ -0,0 +1,149 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"TCP (async/net)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/tcp.md","filePath":"modules/async/tcp.md","lastUpdated":1770965504000}'),l={name:"modules/async/tcp.md"};function h(p,s,k,e,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

TCP (async/net) ​

This page documents the public TCP interfaces in vix::async::net.

These types are intentionally small and abstract:

  • tcp_stream represents a connected TCP socket.
  • tcp_listener represents a listening socket that accepts connections.
  • make_tcp_stream() and make_tcp_listener() create runtime-backed implementations (typically Asio-backed) that integrate with vix::async::core::io_context.

The design goal is to keep the public API stable while allowing the internal networking backend to evolve without leaking implementation details into user code.


Files ​

Typical include:

cpp
#include <vix/async/net/tcp.hpp>

Related core pieces used by the TCP layer:

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/task.hpp>
+#include <vix/async/core/cancel.hpp>
+#include <vix/async/core/error.hpp>

Types ​

tcp_endpoint ​

A simple endpoint description used by both connect and listen operations.

cpp
struct tcp_endpoint {
+  std::string host;
+  std::uint16_t port{0};
+};

Notes:

  • host can be a DNS name ("example.com") or an IP string ("127.0.0.1", "::1").
  • port is in host byte order.

tcp_stream ​

tcp_stream is an abstract interface for a connected TCP socket.

cpp
class tcp_stream {
+public:
+  virtual ~tcp_stream() = default;
+
+  virtual core::task<void> async_connect(
+      const tcp_endpoint& ep,
+      core::cancel_token ct = {}) = 0;
+
+  virtual core::task<std::size_t> async_read(
+      std::span<std::byte> buf,
+      core::cancel_token ct = {}) = 0;
+
+  virtual core::task<std::size_t> async_write(
+      std::span<const std::byte> buf,
+      core::cancel_token ct = {}) = 0;
+
+  virtual void close() noexcept = 0;
+  virtual bool is_open() const noexcept = 0;
+};

Behavior rules ​

  • Coroutine-based: all async operations return core::task<...>.
  • Cancellation: operations accept a core::cancel_token.
    • If cancellation is observed, implementations should fail with std::system_error(cancelled_ec()).
  • Errors: networking failures should be reported via std::system_error (e.g. connect refused, host not found, broken pipe).
  • Partial IO: async_read and async_write return the number of bytes actually transferred.
    • A return value of 0 from async_read() typically indicates "peer closed" (EOF), depending on backend semantics.
  • Idempotent close: close() may be called multiple times safely.
  • State: is_open() reports whether the underlying socket is usable.

Buffer types ​

The API uses std::span:

  • Read: std::span<std::byte> (mutable destination buffer)
  • Write: std::span<const std::byte> (immutable source buffer)

This allows callers to manage buffers explicitly and avoids hidden allocations.


tcp_listener ​

tcp_listener is an abstract interface for a listening socket that accepts connections.

cpp
class tcp_listener {
+public:
+  virtual ~tcp_listener() = default;
+
+  virtual core::task<void> async_listen(
+      const tcp_endpoint& bind_ep,
+      int backlog = 128) = 0;
+
+  virtual core::task<std::unique_ptr<tcp_stream>> async_accept(
+      core::cancel_token ct = {}) = 0;
+
+  virtual void close() noexcept = 0;
+  virtual bool is_open() const noexcept = 0;
+};

Behavior rules ​

  • async_listen():

    • Binds to bind_ep.host:bind_ep.port
    • Starts listening with the provided backlog
    • Fails with std::system_error on bind/listen errors
  • async_accept():

    • Waits for one incoming connection and returns a std::unique_ptr<tcp_stream>
    • Accept can be canceled via cancel_token
    • Accept can fail with std::system_error (closed listener, system error, etc.)
  • close():

    • Stops accepting new connections
    • Wakes an ongoing async_accept() depending on backend behavior

Factories ​

These functions create concrete runtime-backed implementations that are associated with an io_context.

cpp
std::unique_ptr<tcp_stream> make_tcp_stream(core::io_context& ctx);
+std::unique_ptr<tcp_listener> make_tcp_listener(core::io_context& ctx);

Why factories ​

  • Keeps the public API minimal and stable
  • Allows different backends (Asio today, potentially others later)
  • Centralizes integration with the scheduler in io_context

Usage examples ​

1) Connect + write + read (client) ​

cpp
#include <array>
+#include <cstddef>
+#include <string>
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/spawn.hpp>
+#include <vix/async/net/tcp.hpp>
+
+using namespace vix::async;
+
+static core::task<void> client(core::io_context& ctx)
+{
+  auto s = net::make_tcp_stream(ctx);
+
+  net::tcp_endpoint ep;
+  ep.host = "127.0.0.1";
+  ep.port = 8080;
+
+  co_await s->async_connect(ep);
+
+  const std::string msg = "ping\\n";
+  std::span<const std::byte> out{
+      reinterpret_cast<const std::byte*>(msg.data()),
+      msg.size()
+  };
+
+  (void)co_await s->async_write(out);
+
+  std::array<std::byte, 1024> buf{};
+  const std::size_t n = co_await s->async_read(std::span<std::byte>{buf.data(), buf.size()});
+
+  // You decide how to interpret bytes (text, binary, framing, etc).
+  (void)n;
+
+  s->close();
+  co_return;
+}
+
+static void run_client()
+{
+  core::io_context ctx;
+  core::spawn_detached(ctx, client(ctx));
+  ctx.run();
+}
+
+int main()
+{
+  run_client();
+}

Notes:

  • spawn_detached() schedules a task<void> without returning a join handle.
  • IO is buffer-explicit; conversions from std::string to bytes are done explicitly.

2) Listen + accept loop (server) ​

cpp
#include <array>
+#include <cstddef>
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/spawn.hpp>
+#include <vix/async/net/tcp.hpp>
+
+using namespace vix::async;
+
+static core::task<void> handle_client(std::unique_ptr<net::tcp_stream> s)
+{
+  std::array<std::byte, 1024> buf{};
+
+  while (s->is_open())
+  {
+    const std::size_t n = co_await s->async_read(std::span<std::byte>{buf.data(), buf.size()});
+    if (n == 0)
+      break;
+
+    // echo back
+    (void)co_await s->async_write(std::span<const std::byte>{buf.data(), n});
+  }
+
+  s->close();
+  co_return;
+}
+
+static core::task<void> server(core::io_context& ctx)
+{
+  auto l = net::make_tcp_listener(ctx);
+
+  net::tcp_endpoint bind;
+  bind.host = "0.0.0.0";
+  bind.port = 8080;
+
+  co_await l->async_listen(bind, 128);
+
+  while (l->is_open())
+  {
+    auto s = co_await l->async_accept();
+    core::spawn_detached(ctx, handle_client(std::move(s)));
+  }
+
+  co_return;
+}
+
+static void run_server()
+{
+  core::io_context ctx;
+  core::spawn_detached(ctx, server(ctx));
+  ctx.run();
+}
+
+int main()
+{
+  run_server();
+}

Notes:

  • This is a minimal echo server. Real servers add framing, protocol parsing, backpressure, and timeouts.
  • Spawning one detached coroutine per accepted connection is a simple model. Higher-level servers may use connection limits or pools.

Cancellation pattern ​

Cancellation is cooperative: you pass a cancel_token into async calls.

cpp
#include <vix/async/core/cancel.hpp>
+
+vix::async::core::cancel_source cs;
+auto ct = cs.token();
+
+// Later: request cancellation from any thread
+cs.request_cancel();
+
+// Then pass ct into async_connect/read/write/accept

The exact point where cancellation is observed depends on the backend implementation.


Design notes ​

  • The TCP API is intentionally low-level: it does not impose framing, buffering strategy, or protocol rules.
  • std::span<std::byte> makes IO explicit and avoids implicit conversions.
  • Abstract interfaces + factories keep user code stable while allowing backend improvements.
`,59)])])}const o=i(l,[["render",h]]);export{y as __pageData,o as default}; diff --git a/docs/assets/modules_async_tcp.md.FPY9UMv7.lean.js b/docs/assets/modules_async_tcp.md.FPY9UMv7.lean.js new file mode 100644 index 000000000..d010c5a1e --- /dev/null +++ b/docs/assets/modules_async_tcp.md.FPY9UMv7.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"TCP (async/net)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/tcp.md","filePath":"modules/async/tcp.md","lastUpdated":1770965504000}'),l={name:"modules/async/tcp.md"};function h(p,s,k,e,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",59)])])}const o=i(l,[["render",h]]);export{y as __pageData,o as default}; diff --git a/docs/assets/modules_async_threadpool.md.BuaQkRGD.js b/docs/assets/modules_async_threadpool.md.BuaQkRGD.js new file mode 100644 index 000000000..7598bc280 --- /dev/null +++ b/docs/assets/modules_async_threadpool.md.BuaQkRGD.js @@ -0,0 +1,86 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"thread_pool (async/core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/threadpool.md","filePath":"modules/async/threadpool.md","lastUpdated":1770918867000}'),l={name:"modules/async/threadpool.md"};function e(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

thread_pool (async/core) ​

vix::async::core::thread_pool is a small CPU thread pool designed to work with io_context. It runs submitted jobs on worker threads and resumes awaiting coroutines back onto the io_context scheduler thread.

This gives you a clean split:

  • Worker threads: do compute work (hashing, parsing, compression, DB client CPU work, etc.)
  • Scheduler thread: resumes coroutines and continues async flows
cpp
#include <vix/async/core/thread_pool.hpp>

Concepts ​

Two submission styles ​

  1. Fire-and-forget
  • submit(std::function<void()>)
  • No result
  • Useful for background work where you do not need to await completion
  1. Coroutine-friendly submission
  • submit(Fn, cancel_token) -> task<R>
  • Lets you co_await the result
  • Captures exceptions from the worker and rethrows them when resuming

Cancellation model ​

The coroutine-friendly overload accepts a cancel_token.

  • If cancellation is already requested when the worker starts executing the job, the job fails with a cancellation error.
  • That cancellation error is std::system_error(cancelled_ec()) where cancelled_ec() is the async cancellation error code.

Important: cancellation here is cooperative and checked only at job start. If your job is long-running, you should also check ct.is_cancelled() inside the job body and return early.

Exception model ​

  • Any exception thrown by the job on a worker thread is captured.
  • When the awaiting coroutine resumes, await_resume() rethrows that exception.

That means your coroutine can use normal try/catch around co_await pool.submit(...).

API ​

Construction ​

cpp
explicit thread_pool(io_context& ctx,
+                     std::size_t threads = std::thread::hardware_concurrency());
  • ctx is used to post coroutine continuations back to the scheduler.
  • threads controls the number of worker threads.

Destruction ​

cpp
~thread_pool();
  • Requests stop and joins all worker threads.

Fire-and-forget ​

cpp
void submit(std::function<void()> fn);

Awaitable submission ​

cpp
template <typename Fn>
+auto submit(Fn&& fn, cancel_token ct = {})
+  -> task<std::invoke_result_t<Fn>>;
  • Fn runs on a worker thread.
  • The awaiting coroutine resumes on the io_context scheduler thread.

Stop ​

cpp
void stop() noexcept;

Requests workers to exit.

Size ​

cpp
std::size_t size() const noexcept;

Returns number of worker threads.

Usage ​

Example 1: Await a compute result ​

cpp
#include <iostream>
+#include <string>
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/thread_pool.hpp>
+#include <vix/async/core/task.hpp>
+
+using namespace vix::async::core;
+
+task<void> app(io_context& ctx)
+{
+  // Lazily creates the pool in io_context in your codebase,
+  // but you can also create it directly.
+  auto& pool = ctx.cpu_pool();
+
+  std::string input = "hello";
+
+  // Run on worker threads
+  auto out = co_await pool.submit([s = input]() {
+    // Heavy compute goes here
+    std::string r = s;
+    for (auto& c : r) c = static_cast<char>(c - 32);
+    return r;
+  });
+
+  // Resumed on scheduler thread here
+  std::cout << out << "\\n";
+  co_return;
+}
+
+int main()
+{
+  io_context ctx;
+
+  // Run the coroutine on the scheduler thread
+  auto t = app(ctx);
+  std::move(t).start(ctx.get_scheduler());
+
+  ctx.run();
+}

Example 2: Cancellation ​

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/thread_pool.hpp>
+#include <vix/async/core/cancel.hpp>
+
+using namespace vix::async::core;
+
+task<void> work(io_context& ctx)
+{
+  auto& pool = ctx.cpu_pool();
+
+  cancel_source cs;
+  auto ct = cs.token();
+
+  // Request cancellation before scheduling
+  cs.request_cancel();
+
+  try
+  {
+    auto v = co_await pool.submit([=]() -> int {
+      // This will not run if cancellation is observed at start
+      return 42;
+    }, ct);
+
+    (void)v;
+  }
+  catch (const std::system_error& e)
+  {
+    // e.code() should equal cancelled_ec()
+  }
+
+  co_return;
+}

If you want deeper cooperative cancellation for long jobs, check the token inside the job:

cpp
auto v = co_await pool.submit([ct]() -> int {
+  for (int i = 0; i < 10'000'000; ++i)
+  {
+    if (ct.is_cancelled())
+      throw std::system_error(cancelled_ec());
+    // do work...
+  }
+  return 1;
+}, ct);

Example 3: Fire-and-forget ​

cpp
auto& pool = ctx.cpu_pool();
+
+pool.submit([] {
+  // runs on a worker thread
+  // no awaiting, no result
+});

Notes ​

  • thread_pool is intended for CPU-bound work. For I/O-bound work, prefer your async networking and timers services.
  • Awaited jobs always resume on the io_context scheduler thread. This keeps coroutine code deterministic and reduces locking in user code.
  • The pool uses a single mutex and a FIFO job queue. This keeps behavior explicit and simple.
  • cancel_source, cancel_token in vix::async::core::cancel
  • scheduler in vix::async::core::scheduler
  • task<T> in vix::async::core::task
  • io_context in vix::async::core::io_context
`,50)])])}const y=i(l,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_threadpool.md.BuaQkRGD.lean.js b/docs/assets/modules_async_threadpool.md.BuaQkRGD.lean.js new file mode 100644 index 000000000..560fde3b6 --- /dev/null +++ b/docs/assets/modules_async_threadpool.md.BuaQkRGD.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"thread_pool (async/core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/threadpool.md","filePath":"modules/async/threadpool.md","lastUpdated":1770918867000}'),l={name:"modules/async/threadpool.md"};function e(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",50)])])}const y=i(l,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_timer.md.Box51WSH.js b/docs/assets/modules_async_timer.md.Box51WSH.js new file mode 100644 index 000000000..ffbea098e --- /dev/null +++ b/docs/assets/modules_async_timer.md.Box51WSH.js @@ -0,0 +1,93 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Timer","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/timer.md","filePath":"modules/async/timer.md","lastUpdated":1770918867000}'),l={name:"modules/async/timer.md"};function t(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Timer ​

vix::async::core::timer is a small timer service integrated with io_context.

It provides two primary features:

  • after(): schedule a callback to run after a delay
  • sleep_for(): coroutine-friendly delay that resumes on the io_context scheduler thread

The timer is designed to be explicit and deterministic:

  • it uses a dedicated worker thread to wait for deadlines
  • it posts completions back onto the io_context scheduler thread
  • it supports per-entry cancellation via cancel_token

Key types ​

  • timer::clock: std::chrono::steady_clock (monotonic, safe for timeouts)
  • timer::time_point: deadline timestamp
  • timer::duration: delay duration

Because the clock is steady, timers are not affected by wall clock changes.


Lifecycle and threading model ​

When you construct a timer, it starts a worker thread that:

  1. Waits until the earliest deadline in the ordered queue.
  2. When a deadline fires, it checks cancellation.
  3. If not cancelled, it posts the job back to the io_context scheduler thread.

Important:

  • Scheduled callbacks do NOT run on the timer worker thread.
  • They run on the scheduler thread via io_context::post() (through ctx_post()).
  • This keeps all your async callbacks serialized on the runtime thread, matching the rest of the async core.

Destruction:

  • ~timer() stops the worker and releases queued jobs.
  • You can also call stop() explicitly.

Schedule a callback with after() ​

Signature ​

cpp
template <typename Fn>
+void after(duration d, Fn&& fn, cancel_token ct = {});

Behavior ​

  • Computes deadline = clock::now() + d
  • Wraps your callable into a type-erased job
  • Inserts it into the ordered queue
  • Wakes the worker so it can recalculate the next deadline
  • If ct.is_cancelled() is true when the deadline fires, the job is skipped

Example ​

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/timer.hpp>
+
+using namespace vix::async::core;
+
+static void run_example()
+{
+  io_context ctx;
+  auto& t = ctx.timers();
+
+  t.after(std::chrono::seconds(1), [&]()
+  {
+    // Runs on the io_context scheduler thread
+    // not on the timer worker thread
+    // Do short work here
+  });
+
+  ctx.run();
+}
+
+int main()
+{
+  run_example();
+}

Tip:

  • Keep after() callbacks short. If you need CPU-heavy work, submit it to ctx.cpu_pool() and continue from there.

Coroutine sleep with sleep_for() ​

Signature ​

cpp
task<void> sleep_for(duration d, cancel_token ct = {});

Behavior ​

  • Suspends the awaiting coroutine
  • Schedules a timer entry that posts the coroutine handle back onto the scheduler thread
  • When resumed, it continues on the io_context scheduler thread

This gives you an ergonomic delay inside coroutines without blocking any thread.

Example ​

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/task.hpp>
+#include <vix/async/core/timer.hpp>
+#include <vix/async/core/spawn.hpp>
+
+using namespace vix::async::core;
+
+static task<void> job(io_context& ctx)
+{
+  auto& t = ctx.timers();
+
+  // Hop onto scheduler thread (optional but common in this design)
+  co_await ctx.get_scheduler().schedule();
+
+  co_await t.sleep_for(std::chrono::milliseconds(250));
+  co_await t.sleep_for(std::chrono::milliseconds(250));
+
+  co_return;
+}
+
+static void run_example()
+{
+  io_context ctx;
+
+  // Run coroutine in detached mode
+  spawn_detached(ctx, job(ctx));
+
+  ctx.run();
+}
+
+int main()
+{
+  run_example();
+}

Cancellation ​

Both after() and sleep_for() accept a cancel_token.

  • If the token is cancelled before the deadline, the entry is skipped.
  • If you want cancellation errors (instead of "skip"), implement that at the call site:
    • request cancel
    • decide whether you treat "not fired" as success or as cancellation

Example with cancel_source ​

cpp
#include <vix/async/core/cancel.hpp>
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/task.hpp>
+#include <vix/async/core/timer.hpp>
+#include <vix/async/core/spawn.hpp>
+
+using namespace vix::async::core;
+
+static task<void> cancellable_sleep(io_context& ctx)
+{
+  cancel_source src;
+  cancel_token ct = src.token();
+
+  // Cancel after 100ms
+  ctx.timers().after(std::chrono::milliseconds(100), [&]()
+  {
+    src.request_cancel();
+  });
+
+  // This sleep will be skipped if cancellation is observed before firing
+  co_await ctx.timers().sleep_for(std::chrono::seconds(1), ct);
+
+  co_return;
+}
+
+static void run_example()
+{
+  io_context ctx;
+  spawn_detached(ctx, cancellable_sleep(ctx));
+  ctx.run();
+}
+
+int main()
+{
+  run_example();
+}

Note:

  • The current timer contract is "skip on cancel".
  • If you want sleep_for() to throw std::system_error(cancelled_ec()), you can implement that in sleep_for() by checking the token and capturing an exception for the awaiting coroutine.

Ordering and tie breaking ​

Timer entries are stored in a std::multiset ordered by:

  1. when (deadline time)
  2. id (monotonic sequence number)

This makes ordering stable even when multiple entries share the same deadline.


Common pitfalls ​

  • Using long work inside after() callback
    • Fix: offload to cpu_pool().submit(...) and resume later.
  • Forgetting to run the scheduler
    • timer posts completions onto the scheduler thread, so you must call ctx.run().
  • Expecting exact timing
    • Like any timer, wakeups depend on OS scheduling and load. Use it for delays and timeouts, not for precise real-time scheduling.

Use the timer for:

  • timeouts around I/O
  • retries with backoff
  • periodic tasks (reschedule inside the callback)
  • coroutine delays

Keep business logic:

  • on the scheduler thread for short operations
  • on the CPU pool for heavy compute
`,59)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_timer.md.Box51WSH.lean.js b/docs/assets/modules_async_timer.md.Box51WSH.lean.js new file mode 100644 index 000000000..88c51aa0b --- /dev/null +++ b/docs/assets/modules_async_timer.md.Box51WSH.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Timer","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/timer.md","filePath":"modules/async/timer.md","lastUpdated":1770918867000}'),l={name:"modules/async/timer.md"};function t(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",59)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_udp.md.D_6r8ACo.js b/docs/assets/modules_async_udp.md.D_6r8ACo.js new file mode 100644 index 000000000..65a15cfb9 --- /dev/null +++ b/docs/assets/modules_async_udp.md.D_6r8ACo.js @@ -0,0 +1,100 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"UDP (async/net)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/udp.md","filePath":"modules/async/udp.md","lastUpdated":1770965504000}'),h={name:"modules/async/udp.md"};function l(p,s,e,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

UDP (async/net) ​

udp.hpp defines Vix.cpp's coroutine-first UDP abstraction: endpoints, datagram metadata, and an udp_socket interface that can be implemented by a runtime backend (typically Asio) and integrated with vix::async::core::io_context.

UDP is message oriented: you send and receive datagrams. There is no connection and no delivery guarantee. This API models that directly.

cpp
#include <vix/async/net/udp.hpp>

Namespace: vix::async::net

Related core types:

  • vix::async::core::task<T>
  • vix::async::core::cancel_token
  • vix::async::core::io_context

Types ​

udp_endpoint ​

Represents a UDP endpoint by host and port.

cpp
struct udp_endpoint {
+  std::string host;
+  std::uint16_t port{0};
+};

Notes:

  • host can be a hostname or an IP string (IPv4 or IPv6).
  • port is in host byte order.

udp_datagram ​

Metadata returned by async_recv_from().

cpp
struct udp_datagram {
+  udp_endpoint from;
+  std::size_t bytes{0};
+};

Meaning:

  • from: the sender endpoint.
  • bytes: number of bytes written into the receive buffer.

udp_socket ​

udp_socket is the abstract interface for coroutine-based UDP operations.

cpp
class udp_socket {
+public:
+  virtual ~udp_socket() = default;
+
+  virtual core::task<void> async_bind(const udp_endpoint& bind_ep) = 0;
+
+  virtual core::task<std::size_t> async_send_to(
+    std::span<const std::byte> buf,
+    const udp_endpoint& to,
+    core::cancel_token ct = {}
+  ) = 0;
+
+  virtual core::task<udp_datagram> async_recv_from(
+    std::span<std::byte> buf,
+    core::cancel_token ct = {}
+  ) = 0;
+
+  virtual void close() noexcept = 0;
+  virtual bool is_open() const noexcept = 0;
+};

async_bind(bind_ep) ​

Binds the socket to a local endpoint.

  • Completes when binding succeeds.
  • Throws std::system_error on failure.

async_send_to(buf, to, ct) ​

Sends one datagram.

  • Returns the number of bytes sent.
  • Throws std::system_error on send failure or cancellation.

async_recv_from(buf, ct) ​

Receives one datagram into buf.

  • Returns udp_datagram with sender + byte count.
  • Throws std::system_error on receive failure or cancellation.

close() and is_open() ​

  • close() is idempotent.
  • is_open() reports whether the underlying socket is open.

Factory ​

make_udp_socket(ctx) ​

Creates a UDP socket associated with a core io_context.

cpp
std::unique_ptr<udp_socket> make_udp_socket(core::io_context& ctx);

The concrete type is runtime dependent and typically backed by Asio.


Cancellation ​

Most operations accept core::cancel_token:

  • If cancellation is observed, the implementation should fail the operation by throwing std::system_error(core::cancelled_ec()).
  • If you pass a default token {}, the operation is not cancel aware.

Example token setup:

cpp
vix::async::core::cancel_source src;
+auto ct = src.token();
+
+// later, from another context or thread:
+src.request_cancel();

Example: UDP echo (single socket) ​

This example shows:

  • bind
  • recv_from
  • send_to back to sender
cpp
#include <array>
+#include <cstddef>
+#include <string_view>
+
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/net/udp.hpp>
+
+using namespace vix::async;
+
+static core::task<void> udp_echo_server(core::io_context& ctx)
+{
+  auto sock = net::make_udp_socket(ctx);
+
+  co_await sock->async_bind(net::udp_endpoint{"0.0.0.0", 9000});
+
+  std::array<std::byte, 2048> buf{};
+
+  while (sock->is_open())
+  {
+    auto dg = co_await sock->async_recv_from(std::span<std::byte>(buf.data(), buf.size()));
+
+    // echo back exactly what we received
+    std::span<const std::byte> out(buf.data(), dg.bytes);
+    co_await sock->async_send_to(out, dg.from);
+  }
+
+  co_return;
+}
+
+int main()
+{
+  core::io_context ctx;
+
+  // Spawn the server and run the scheduler
+  core::spawn_detached(ctx, udp_echo_server(ctx));
+  ctx.run();
+
+  return 0;
+}

Example: UDP discovery ping ​

A typical use case in Vix style is discovery and heartbeats. This sketch sends a ping datagram to a known endpoint.

cpp
#include <array>
+#include <cstddef>
+#include <cstring>
+
+#include <vix/async/core/io_context.hpp>
+#include <vix/async/net/udp.hpp>
+
+using namespace vix::async;
+
+static core::task<void> send_ping(core::io_context& ctx)
+{
+  auto sock = net::make_udp_socket(ctx);
+
+  // Optional: bind to an ephemeral port
+  co_await sock->async_bind(net::udp_endpoint{"0.0.0.0", 0});
+
+  std::array<std::byte, 4> msg{};
+  std::memcpy(msg.data(), "PING", 4);
+
+  std::span<const std::byte> out(msg.data(), msg.size());
+  co_await sock->async_send_to(out, net::udp_endpoint{"127.0.0.1", 37020});
+
+  sock->close();
+  co_return;
+}
+
+int main()
+{
+  core::io_context ctx;
+  core::spawn_detached(ctx, send_ping(ctx));
+  ctx.run();
+  return 0;
+}

Behavior and design notes ​

  • UDP is datagram based: each async_send_to() corresponds to one datagram, and async_recv_from() returns one datagram.
  • Your receive buffer size matters: if the datagram is larger than the buffer, the backend may truncate it (backend specific).
  • udp_endpoint.host is a string in the public API. Backend implementations usually resolve it to an address internally.
  • close() should wake any pending operations according to backend rules. If a pending coroutine resumes, it should see an error (for example errc::closed) or a cancellation style error depending on implementation.

Common patterns ​

  • Bind once, then loop on async_recv_from() for servers.
  • For clients: optionally bind to port 0, then send and receive.
  • Combine UDP with timer for retry windows, and with cancel_token for shutdown.
`,62)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_udp.md.D_6r8ACo.lean.js b/docs/assets/modules_async_udp.md.D_6r8ACo.lean.js new file mode 100644 index 000000000..d6e286003 --- /dev/null +++ b/docs/assets/modules_async_udp.md.D_6r8ACo.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"UDP (async/net)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/udp.md","filePath":"modules/async/udp.md","lastUpdated":1770965504000}'),h={name:"modules/async/udp.md"};function l(p,s,e,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",62)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_async_when.md.ZzMz6UdY.js b/docs/assets/modules_async_when.md.ZzMz6UdY.js new file mode 100644 index 000000000..b951a3d81 --- /dev/null +++ b/docs/assets/modules_async_when.md.ZzMz6UdY.js @@ -0,0 +1,92 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"when","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/when.md","filePath":"modules/async/when.md","lastUpdated":1770918867000}'),h={name:"modules/async/when.md"};function l(e,s,k,p,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

when ​

This page documents when_all() and when_any() from vix::async::core.

They let you run multiple task<T> concurrently and wait for:

  • all tasks to finish (when_all)
  • the first task to finish (when_any)

Both utilities are scheduler-driven and integrate with Vix's task and scheduler types.

cpp
#include <vix/async/core/when.hpp>

Mental model ​

What these functions do ​

  • when_all(sched, t1, t2, ...)

    • starts all tasks concurrently
    • resumes when every task finishes
    • returns a tuple of results in the same order as inputs
  • when_any(sched, t1, t2, ...)

    • starts all tasks concurrently
    • resumes when the first task finishes
    • returns:
      • the winner index
      • a tuple where the winner slot contains its result

Why the scheduler is required ​

Both functions:

  • post work onto the scheduler
  • resume the awaiting coroutine by posting the continuation back onto the scheduler thread

So the scheduler is the "home thread" for resumption and coordination.

Return types ​

void tasks are mapped to std::monostate ​

To keep a consistent tuple type, task<void> results become std::monostate in output tuples.

Example:

cpp
task<void> a();
+task<int>  b();
+
+auto tup = co_await when_all(sched, a(), b());
+// type: std::tuple<std::monostate, int>

when_all return type ​

cpp
template <typename... Ts>
+task<std::tuple<std::conditional_t<std::is_void_v<Ts>, std::monostate, Ts>...>>
+when_all(scheduler& sched, task<Ts>... ts);

when_any return type ​

cpp
template <typename... Ts>
+task<std::pair<std::size_t,
+               std::tuple<std::conditional_t<std::is_void_v<Ts>, std::monostate, Ts>...>>>
+when_any(scheduler& sched, task<Ts>... ts);
  • .first is the winner index in [0..N-1]
  • .second is the tuple of results (only the winner is guaranteed to be populated meaningfully)

Exception behavior ​

when_all ​

  • each runner captures exceptions
  • the first captured exception is rethrown when when_all resumes
  • result tuple is returned only if no exception was captured

when_any ​

  • an exception captured by any runner is stored in st->ex
  • the awaiter rethrows if st->ex is set when resuming

Important:

  • This design is simple and deterministic.
  • It means a losing task that throws could still cause when_any to throw, depending on timing.
  • If you want "only winner decides", evolve the state to store the winner's exception only.

Concurrency and lifetime notes ​

  • Internally, both functions start runner coroutines in detached mode using task<void>::start(scheduler&).
  • Shared state (std::shared_ptr) owns:
    • remaining counters / done flag
    • continuation handle
    • stored results
    • first exception (if any)

This keeps coordination safe even if tasks finish on different timings.

Examples ​

Example 1: when_all with values ​

cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/task.hpp>
+#include <vix/async/core/when.hpp>
+
+using vix::async::core::task;
+
+task<int> fetch_a()
+{
+  co_return 10;
+}
+
+task<std::string> fetch_b()
+{
+  co_return std::string("ok");
+}
+
+task<void> demo(vix::async::core::io_context& ctx)
+{
+  auto& sched = ctx.get_scheduler();
+
+  auto [a, b] = co_await when_all(sched, fetch_a(), fetch_b());
+  // a == 10
+  // b == "ok"
+
+  co_return;
+}

Example 2: when_all with void tasks ​

cpp
task<void> step1()
+{
+  co_return;
+}
+
+task<int> step2()
+{
+  co_return 42;
+}
+
+task<void> demo(vix::async::core::io_context& ctx)
+{
+  auto& sched = ctx.get_scheduler();
+
+  auto tup = co_await when_all(sched, step1(), step2());
+  // type: std::tuple<std::monostate, int>
+
+  auto x = std::get<1>(tup); // 42
+  (void)x;
+
+  co_return;
+}

Example 3: when_any (race) ​

cpp
task<int> fast()
+{
+  co_return 1;
+}
+
+task<int> slow()
+{
+  co_return 2;
+}
+
+task<void> demo(vix::async::core::io_context& ctx)
+{
+  auto& sched = ctx.get_scheduler();
+
+  auto [idx, tup] = co_await when_any(sched, slow(), fast());
+
+  // idx is either 0 or 1
+  // winner result is in std::get<idx>(tup)
+
+  int winner = (idx == 0) ? std::get<0>(tup) : std::get<1>(tup);
+  (void)winner;
+
+  co_return;
+}

Example 4: running end-to-end ​

Minimal pattern:

  • build your top-level coroutine
  • schedule it on the scheduler
  • run the context loop
cpp
#include <vix/async/core/io_context.hpp>
+#include <vix/async/core/spawn.hpp>
+
+vix::async::core::task<void> main_task(vix::async::core::io_context& ctx);
+
+int main()
+{
+  vix::async::core::io_context ctx;
+
+  vix::async::core::spawn_detached(ctx, main_task(ctx));
+  ctx.run();
+
+  return 0;
+}

Design notes ​

  • when_all uses a remaining counter and resumes the continuation when it reaches zero.
  • when_any uses an atomic done flag and only the first finisher posts the continuation.
  • Resumption is posted back to the scheduler so you get deterministic thread affinity.

If you later want cancellation of losers for when_any, pair it with cancel_source and pass cancel_token into the tasks you start, then cancel the losers when the winner completes.

`,48)])])}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_async_when.md.ZzMz6UdY.lean.js b/docs/assets/modules_async_when.md.ZzMz6UdY.lean.js new file mode 100644 index 000000000..a4ad3a46e --- /dev/null +++ b/docs/assets/modules_async_when.md.ZzMz6UdY.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"when","description":"","frontmatter":{},"headers":[],"relativePath":"modules/async/when.md","filePath":"modules/async/when.md","lastUpdated":1770918867000}'),h={name:"modules/async/when.md"};function l(e,s,k,p,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",48)])])}const c=i(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_cache_guide.md.DElCExp9.js b/docs/assets/modules_cache_guide.md.DElCExp9.js deleted file mode 100644 index 0aeda31ea..000000000 --- a/docs/assets/modules_cache_guide.md.DElCExp9.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/guide.md","filePath":"modules/cache/guide.md","lastUpdated":null}'),c={name:"modules/cache/guide.md"};function o(s,d,r,n,i,l){return t(),a("div")}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_cache_guide.md.DElCExp9.lean.js b/docs/assets/modules_cache_guide.md.DElCExp9.lean.js deleted file mode 100644 index 0aeda31ea..000000000 --- a/docs/assets/modules_cache_guide.md.DElCExp9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/guide.md","filePath":"modules/cache/guide.md","lastUpdated":null}'),c={name:"modules/cache/guide.md"};function o(s,d,r,n,i,l){return t(),a("div")}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_cache_guide.md.DOdFN22S.js b/docs/assets/modules_cache_guide.md.DOdFN22S.js new file mode 100644 index 000000000..f17ea07e7 --- /dev/null +++ b/docs/assets/modules_cache_guide.md.DOdFN22S.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/guide.md","filePath":"modules/cache/guide.md","lastUpdated":1770805184000}'),o={name:"modules/cache/guide.md"};function c(r,s,d,i,n,m){return t(),a("div")}const f=e(o,[["render",c]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_cache_guide.md.DOdFN22S.lean.js b/docs/assets/modules_cache_guide.md.DOdFN22S.lean.js new file mode 100644 index 000000000..f17ea07e7 --- /dev/null +++ b/docs/assets/modules_cache_guide.md.DOdFN22S.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/guide.md","filePath":"modules/cache/guide.md","lastUpdated":1770805184000}'),o={name:"modules/cache/guide.md"};function c(r,s,d,i,n,m){return t(),a("div")}const f=e(o,[["render",c]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_cache_index.md.9-JGe5nQ.js b/docs/assets/modules_cache_index.md.9-JGe5nQ.js new file mode 100644 index 000000000..8231e9aa6 --- /dev/null +++ b/docs/assets/modules_cache_index.md.9-JGe5nQ.js @@ -0,0 +1,73 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Cache","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/index.md","filePath":"modules/cache/index.md","lastUpdated":1770918867000}'),t={name:"modules/cache/index.md"};function l(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n(`

Cache ​

The cache module is a small, explicit, policy driven cache layer designed for offline first systems.

It is built around three ideas:

  • A CacheStore persists entries (memory, file, etc).
  • A CachePolicy decides freshness and stale reuse rules.
  • A CacheContext carries runtime semantics (offline, network error) that influence decisions.

This module is intentionally deterministic: the cache does not perform network IO, does not hide state transitions, and makes reuse decisions based on explicit inputs.


Concepts ​

CacheEntry ​

A cached response entry.

Fields (typical HTTP use):

  • status (int)
  • body (string)
  • headers (map)
  • created_at_ms (int64)

This is the minimal metadata required for policy decisions.

CacheContext ​

A small runtime context used during get():

  • offline: true when the system is considered offline
  • network_error: true when the last request failed due to network issues

Helpers:

  • CacheContext::Online()
  • CacheContext::Offline()
  • CacheContext::NetworkError()

There is also CacheContextMapper to derive context from vix::net::NetworkProbe and a request outcome.

CachePolicy ​

Defines freshness and stale reuse rules, using only entry age:

  • ttl_ms: entry is fresh when age_ms <= ttl_ms
  • stale_if_error_ms: maximum age allowed when network_error is true
  • stale_if_offline_ms: maximum age allowed when offline is true
  • flags to enable or disable stale reuse on error or offline

Helpers:

  • is_fresh(age_ms)
  • allow_stale_error(age_ms)
  • allow_stale_offline(age_ms)

CacheStore ​

Storage backend interface:

  • put(key, entry)
  • get(key) -> optional
  • erase(key)
  • clear()

Stores are synchronous by design to keep behavior explicit and testable.

Cache facade ​

Cache composes a policy and a store:

  • get(key, now_ms, ctx) -> optional<CacheEntry>
  • put(key, entry)
  • prune(now_ms) -> size_t

Policy is consulted on get() to decide whether the stored entry is usable for the given context.


Cache keys ​

CacheKey ​

A deterministic key builder for request based caching.

It normalizes:

  • method uppercased
  • query parameters sorted
  • selected header names lowercased
  • header values trimmed

Key format:

METHOD path?sorted_query |h:header=value;header=value;

Use it for HTTP GET caching where equivalent requests must map to the same cache entry.

Example:

cpp
#include <vix/cache/CacheKey.hpp>
+
+std::unordered_map<std::string, std::string> headers = {
+  {"Accept", "application/json"},
+  {"Authorization", "Bearer X"} // typically excluded
+};
+
+std::string key = vix::cache::CacheKey::fromRequest(
+  "GET",
+  "/api/products",
+  "page=2&limit=20",
+  headers,
+  {"accept"} // include only what should vary the cache
+);

Tip: include as few headers as possible. Prefer stable headers like accept or a locale header. Avoid volatile ones like authorization unless you really need per user caching.


Stores ​

MemoryStore ​

Simple hash map store.

  • Thread safe via a single mutex
  • No eviction
  • No persistence

Good for tests, small caches, and short lived processes.

LruMemoryStore ​

An in memory LRU store.

  • O(1) average put get erase
  • Fixed max number of entries
  • Thread safe via a single mutex

Good for hot path caching where you want bounded memory.

FileStore ​

A file backed store that persists all entries into a single JSON file.

  • Loads lazily on first access
  • Keeps an in memory map protected by a mutex
  • Any mutation triggers a flush to disk

Config:

  • file_path (default ./.vix/cache_http.json)
  • pretty_json (debug friendly, larger file)

This is best for durable local caching (offline first HTTP cache) when you want the cache to survive restarts.


Typical usage ​

This example shows the intended workflow for HTTP GET caching:

  1. Build a deterministic key.
  2. Try cache.get() with the current context.
  3. If cache hit, serve it.
  4. If miss, fetch from network, then cache.put().
cpp
#include <vix/cache/Cache.hpp>
+#include <vix/cache/CacheEntry.hpp>
+#include <vix/cache/CacheKey.hpp>
+#include <vix/cache/CachePolicy.hpp>
+#include <vix/cache/LruMemoryStore.hpp>
+
+using vix::cache::Cache;
+using vix::cache::CacheContext;
+using vix::cache::CacheEntry;
+using vix::cache::CachePolicy;
+using vix::cache::LruMemoryStore;
+
+static std::int64_t now_ms(); // your clock helper
+
+int main()
+{
+  CachePolicy policy;
+  policy.ttl_ms = 30'000;
+  policy.stale_if_error_ms = 5 * 60'000;
+  policy.stale_if_offline_ms = 30 * 60'000;
+
+  auto store = std::make_shared<LruMemoryStore>(LruMemoryStore::Config{.max_entries = 2048});
+  Cache cache(policy, store);
+
+  std::unordered_map<std::string, std::string> headers = {{"Accept", "application/json"}};
+
+  std::string key = vix::cache::CacheKey::fromRequest(
+    "GET",
+    "/api/products",
+    "page=1&limit=20",
+    headers,
+    {"accept"}
+  );
+
+  CacheContext ctx = CacheContext::Online();
+  if (auto hit = cache.get(key, now_ms(), ctx))
+  {
+    // Serve from cache
+    // status = hit->status
+    // body = hit->body
+    // headers = hit->headers
+    return 0;
+  }
+
+  // Network fetch happens outside of cache.
+  // After success:
+  CacheEntry e;
+  e.status = 200;
+  e.body = "{\\"ok\\":true}";
+  e.created_at_ms = now_ms();
+
+  cache.put(key, e);
+  return 0;
+}

Offline and network error behavior ​

The cache does not detect offline state by itself. You pass it in via CacheContext.

  • When ctx.offline == true, policy may allow stale reuse up to stale_if_offline_ms.
  • When ctx.network_error == true, policy may allow stale reuse up to stale_if_error_ms.

If neither applies and the entry is older than ttl_ms, the cache returns nullopt.

To derive context from vix::net::NetworkProbe, use CacheContextMapper:

cpp
#include <vix/cache/CacheContextMapper.hpp>
+
+auto ctx = vix::cache::contextFromProbeAndOutcome(
+  probe,
+  now_ms,
+  vix::cache::RequestOutcome::NetworkError
+);

Pruning ​

Cache::prune(now_ms) removes expired entries according to the policy.

Call it:

  • at startup
  • periodically (timer)
  • before persisting big batches
  • after long offline sessions

Exact pruning behavior depends on the store implementation and the Cache facade implementation.


Design notes ​

  • This cache layer is optimized for explicitness, determinism, and offline first correctness.
  • It is ideal for HTTP GET caching and store and forward style systems.
  • If you need advanced validation (ETag, If-Modified-Since), keep it explicit at the HTTP layer and store any validation metadata in CacheEntry::headers.
`,80)])])}const g=i(t,[["render",l]]);export{y as __pageData,g as default}; diff --git a/docs/assets/modules_cache_index.md.9-JGe5nQ.lean.js b/docs/assets/modules_cache_index.md.9-JGe5nQ.lean.js new file mode 100644 index 000000000..44ac36257 --- /dev/null +++ b/docs/assets/modules_cache_index.md.9-JGe5nQ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Cache","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/index.md","filePath":"modules/cache/index.md","lastUpdated":1770918867000}'),t={name:"modules/cache/index.md"};function l(h,s,p,k,r,d){return a(),e("div",null,[...s[0]||(s[0]=[n("",80)])])}const g=i(t,[["render",l]]);export{y as __pageData,g as default}; diff --git a/docs/assets/modules_cache_index.md.Cs9PvDQM.js b/docs/assets/modules_cache_index.md.Cs9PvDQM.js deleted file mode 100644 index b15afc6fd..000000000 --- a/docs/assets/modules_cache_index.md.Cs9PvDQM.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/index.md","filePath":"modules/cache/index.md","lastUpdated":null}'),c={name:"modules/cache/index.md"};function n(o,s,d,r,i,l){return t(),a("div")}const _=e(c,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_cache_index.md.Cs9PvDQM.lean.js b/docs/assets/modules_cache_index.md.Cs9PvDQM.lean.js deleted file mode 100644 index b15afc6fd..000000000 --- a/docs/assets/modules_cache_index.md.Cs9PvDQM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cache/index.md","filePath":"modules/cache/index.md","lastUpdated":null}'),c={name:"modules/cache/index.md"};function n(o,s,d,r,i,l){return t(),a("div")}const _=e(c,[["render",n]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_cli_add.md.C6fDVReL.js b/docs/assets/modules_cli_add.md.C6fDVReL.js new file mode 100644 index 000000000..87b4a5e65 --- /dev/null +++ b/docs/assets/modules_cli_add.md.C6fDVReL.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix add","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/add.md","filePath":"modules/cli/add.md","lastUpdated":1770806195000}'),l={name:"modules/cli/add.md"};function n(r,i,d,h,o,p){return a(),e("div",null,[...i[0]||(i[0]=[t('

vix add ​

Add a dependency from the Vix registry.


Usage ​

bash
vix add <namespace>/<name>@<version>

Description ​

vix add:

  • Adds a dependency to your project
  • Requires an exact version (V1 registry model)
  • Pins the resolved commit SHA in vix.lock
  • Works with the local registry index

Before adding a dependency, you should sync the registry.


Sync Registry ​

bash
vix registry sync

Example ​

bash
vix add gaspardkirira/tree@0.1.0

Versioning Rules ​

  • Exact version required
  • No version ranges in V1
  • Version is resolved to a commit SHA
  • The commit is stored in vix.lock

This ensures:

  • Reproducible builds
  • Deterministic dependency resolution
  • No implicit upgrades

What Happens Internally ​

  1. Registry index is searched locally
  2. Version is resolved to a commit
  3. Entry is written to vix.lock
  4. Dependencies are installed via:
bash
vix deps

Notes ​

  • Requires prior vix registry sync
  • Lockfile must be committed to version control
  • Exact version required in current registry model

vix add is part of the deterministic dependency workflow in Vix.

',30)])])}const y=s(l,[["render",n]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_cli_add.md.C6fDVReL.lean.js b/docs/assets/modules_cli_add.md.C6fDVReL.lean.js new file mode 100644 index 000000000..14752cd43 --- /dev/null +++ b/docs/assets/modules_cli_add.md.C6fDVReL.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix add","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/add.md","filePath":"modules/cli/add.md","lastUpdated":1770806195000}'),l={name:"modules/cli/add.md"};function n(r,i,d,h,o,p){return a(),e("div",null,[...i[0]||(i[0]=[t("",30)])])}const y=s(l,[["render",n]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_cli_commands_build.md.Dg08vAVb.js b/docs/assets/modules_cli_build.md.CaGQ3TGZ.js similarity index 80% rename from docs/assets/modules_cli_commands_build.md.Dg08vAVb.js rename to docs/assets/modules_cli_build.md.CaGQ3TGZ.js index d0c04de5b..0c81596c5 100644 --- a/docs/assets/modules_cli_commands_build.md.Dg08vAVb.js +++ b/docs/assets/modules_cli_build.md.CaGQ3TGZ.js @@ -1,4 +1,4 @@ -import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix build","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/build.md","filePath":"modules/cli/commands/build.md","lastUpdated":null}'),t={name:"modules/cli/commands/build.md"};function l(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[n(`

vix build ​

Configure and build a Vix project using embedded CMake presets.


Usage ​

bash
vix build [options] -- [cmake args...]

Description ​

vix build wraps CMake + Ninja with:

  • Embedded presets
  • Strong signature cache (tool versions + CMake file hashes)
  • Optional fast no-op exit
  • Auto sccache / ccache detection
  • Auto mold / lld detection
  • Clean log separation

Designed for ultra-fast iteration loops.


Presets ​

dev        -> Ninja + Debug   (build-dev)
+import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"vix build","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/build.md","filePath":"modules/cli/build.md","lastUpdated":1770806195000}'),t={name:"modules/cli/build.md"};function l(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[n(`

vix build ​

Configure and build a Vix project using embedded CMake presets.


Usage ​

bash
vix build [options] -- [cmake args...]

Description ​

vix build wraps CMake + Ninja with:

  • Embedded presets
  • Strong signature cache (tool versions + CMake file hashes)
  • Optional fast no-op exit
  • Auto sccache / ccache detection
  • Auto mold / lld detection
  • Clean log separation

Designed for ultra-fast iteration loops.


Presets ​

dev        -> Ninja + Debug   (build-dev)
 dev-ninja  -> Ninja + Debug   (build-dev-ninja)
 release    -> Ninja + Release (build-release)

Default preset: dev


Options ​

--preset <name>       dev | dev-ninja | release
 --target <triple>     Cross-compilation target triple
@@ -18,4 +18,4 @@ import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u
 --cmake-verbose       Show full CMake output
 --build-target <name> Build specific CMake target
 -h, --help            Show help

Environment Variables ​

VIX_BUILD_HEARTBEAT=1

Enables heartbeat output when build is silent for several seconds.


Examples ​

Basic build:

bash
vix build

Fast loop:

bash
vix build --fast

Release:

bash
vix build --preset release

Static release:

bash
vix build --preset release --static

With launcher + linker:

bash
vix build --launcher sccache --linker mold

Cross-compile:

bash
vix build --target aarch64-linux-gnu

Pass raw CMake arguments:

bash
vix build -- -DVIX_SYNC_BUILD_TESTS=ON

Parallel jobs:

bash
vix build -j 8

Logs ​

Each preset has its own directory:

build-dev*/configure.log
-build-dev*/build.log

Logs are always written even if console output is minimal.


Signature Cache ​

Vix calculates a strong signature based on:

  • Compiler version
  • CMake version
  • Linker version
  • Relevant CMake file hashes

If nothing changed, configure is skipped.

--clean bypasses this cache.


Fast Mode ​

vix build --fast

If Ninja reports the project is already up-to-date, Vix exits immediately without full build processing.

Optimized for tight dev loops.


Design Goals ​

  • Deterministic builds
  • Fast iteration
  • Clean output
  • Explicit configuration
  • Cross-compilation ready
  • Secure and reproducible artifacts

vix build is the foundation of the Vix development workflow.

`,60)])])}const g=a(t,[["render",l]]);export{u as __pageData,g as default}; +build-dev*/build.log

Logs are always written even if console output is minimal.


Signature Cache ​

Vix calculates a strong signature based on:

  • Compiler version
  • CMake version
  • Linker version
  • Relevant CMake file hashes

If nothing changed, configure is skipped.

--clean bypasses this cache.


Fast Mode ​

vix build --fast

If Ninja reports the project is already up-to-date, Vix exits immediately without full build processing.

Optimized for tight dev loops.


Design Goals ​

  • Deterministic builds
  • Fast iteration
  • Clean output
  • Explicit configuration
  • Cross-compilation ready
  • Secure and reproducible artifacts

vix build is the foundation of the Vix development workflow.

`,60)])])}const b=a(t,[["render",l]]);export{k as __pageData,b as default}; diff --git a/docs/assets/modules_cli_build.md.CaGQ3TGZ.lean.js b/docs/assets/modules_cli_build.md.CaGQ3TGZ.lean.js new file mode 100644 index 000000000..e6de314aa --- /dev/null +++ b/docs/assets/modules_cli_build.md.CaGQ3TGZ.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"vix build","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/build.md","filePath":"modules/cli/build.md","lastUpdated":1770806195000}'),t={name:"modules/cli/build.md"};function l(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[n("",60)])])}const b=a(t,[["render",l]]);export{k as __pageData,b as default}; diff --git a/docs/assets/modules_cli_commands_build.md.Dg08vAVb.lean.js b/docs/assets/modules_cli_commands_build.md.Dg08vAVb.lean.js deleted file mode 100644 index ef630fbe1..000000000 --- a/docs/assets/modules_cli_commands_build.md.Dg08vAVb.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix build","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/build.md","filePath":"modules/cli/commands/build.md","lastUpdated":null}'),t={name:"modules/cli/commands/build.md"};function l(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[n("",60)])])}const g=a(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_cli_commands_dev.md.BULdG2aa.lean.js b/docs/assets/modules_cli_commands_dev.md.BULdG2aa.lean.js deleted file mode 100644 index 0c6ad035f..000000000 --- a/docs/assets/modules_cli_commands_dev.md.BULdG2aa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const v=JSON.parse('{"title":"vix dev","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/dev.md","filePath":"modules/cli/commands/dev.md","lastUpdated":null}'),l={name:"modules/cli/commands/dev.md"};function n(p,s,o,d,h,r){return i(),e("div",null,[...s[0]||(s[0]=[t("",45)])])}const k=a(l,[["render",n]]);export{v as __pageData,k as default}; diff --git a/docs/assets/modules_cli_commands_new.md.MeHmPVZ5.lean.js b/docs/assets/modules_cli_commands_new.md.MeHmPVZ5.lean.js deleted file mode 100644 index d093293cc..000000000 --- a/docs/assets/modules_cli_commands_new.md.MeHmPVZ5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix new","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/new.md","filePath":"modules/cli/commands/new.md","lastUpdated":null}'),n={name:"modules/cli/commands/new.md"};function l(p,a,o,r,h,d){return e(),i("div",null,[...a[0]||(a[0]=[t("",44)])])}const b=s(n,[["render",l]]);export{u as __pageData,b as default}; diff --git a/docs/assets/modules_cli_commands_run.md.DWge70uW.lean.js b/docs/assets/modules_cli_commands_run.md.DWge70uW.lean.js deleted file mode 100644 index 49c162620..000000000 --- a/docs/assets/modules_cli_commands_run.md.DWge70uW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix run","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/run.md","filePath":"modules/cli/commands/run.md","lastUpdated":null}'),t={name:"modules/cli/commands/run.md"};function p(l,s,h,o,r,d){return i(),e("div",null,[...s[0]||(s[0]=[n("",71)])])}const g=a(t,[["render",p]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.lean.js b/docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.lean.js deleted file mode 100644 index acccb21e7..000000000 --- a/docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix tests","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/tests.md","filePath":"modules/cli/commands/tests.md","lastUpdated":null}'),l={name:"modules/cli/commands/tests.md"};function n(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t("",45)])])}const g=a(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_deps.md.-zhh57cO.js b/docs/assets/modules_cli_deps.md.-zhh57cO.js new file mode 100644 index 000000000..4e2c306b6 --- /dev/null +++ b/docs/assets/modules_cli_deps.md.-zhh57cO.js @@ -0,0 +1,7 @@ +import{_ as i,o as e,c as s,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Dependencies","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/deps.md","filePath":"modules/cli/deps.md","lastUpdated":1770827001000}'),l={name:"modules/cli/deps.md"};function n(p,a,d,o,h,c){return e(),s("div",null,[...a[0]||(a[0]=[t(`

Dependencies ​

The vix deps command installs project dependencies defined in vix.lock into a local directory and generates a CMake include file.

This system is:

  • Deterministic (lockfile-based)
  • Local (no global state)
  • CMake-native
  • Explicit

Command ​

bash
vix deps

What it does ​

When executed, Vix:

  1. Reads vix.lock
  2. Downloads required packages
  3. Installs them into:
text
./.vix/deps
  1. Generates:
text
./.vix/vix_deps.cmake

You must include this file in your root CMakeLists.txt.


Typical workflow ​

Add dependencies:

bash
vix add gaspardkirira/tree@0.4.0
+vix add gaspardkirira/binary_search@0.1.1

Install them:

bash
vix deps

CMake integration ​

In your root CMakeLists.txt:

cmake
include(\${CMAKE_SOURCE_DIR}/.vix/vix_deps.cmake)

This makes dependency targets available to your project.

Example usage:

cmake
target_link_libraries(my_app
+  PRIVATE
+    tree
+    binary_search
+)

vix.lock ​

The vix.lock file ensures:

  • Exact version resolution
  • Reproducible builds
  • No surprise upgrades
  • Same dependency graph across machines

Never edit this file manually.


Design principles ​

  • No global install directory
  • No implicit include paths
  • No hidden transitive linkage
  • Fully explicit linking in CMake

This keeps builds predictable and safe.


Summary ​

vix deps is the install step of the Vix dependency system.

It transforms:

text
vix.lock

into:

text
./.vix/deps
+./.vix/vix_deps.cmake

Simple. Deterministic. CMake-native.

`,45)])])}const m=i(l,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_cli_deps.md.-zhh57cO.lean.js b/docs/assets/modules_cli_deps.md.-zhh57cO.lean.js new file mode 100644 index 000000000..d50f1c22d --- /dev/null +++ b/docs/assets/modules_cli_deps.md.-zhh57cO.lean.js @@ -0,0 +1 @@ +import{_ as i,o as e,c as s,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Dependencies","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/deps.md","filePath":"modules/cli/deps.md","lastUpdated":1770827001000}'),l={name:"modules/cli/deps.md"};function n(p,a,d,o,h,c){return e(),s("div",null,[...a[0]||(a[0]=[t("",45)])])}const m=i(l,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_cli_commands_dev.md.BULdG2aa.js b/docs/assets/modules_cli_dev.md.Chf2fWNI.js similarity index 67% rename from docs/assets/modules_cli_commands_dev.md.BULdG2aa.js rename to docs/assets/modules_cli_dev.md.Chf2fWNI.js index 6de3f7fb1..bf06d0341 100644 --- a/docs/assets/modules_cli_commands_dev.md.BULdG2aa.js +++ b/docs/assets/modules_cli_dev.md.Chf2fWNI.js @@ -1,8 +1,8 @@ -import{_ as a,o as i,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const v=JSON.parse('{"title":"vix dev","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/dev.md","filePath":"modules/cli/commands/dev.md","lastUpdated":null}'),l={name:"modules/cli/commands/dev.md"};function n(p,s,o,d,h,r){return i(),e("div",null,[...s[0]||(s[0]=[t(`

vix dev ​

Developer-friendly entrypoint for running Vix applications with auto-reload.

Internally equivalent to:

vix run --watch

But optimized for development workflows.


Usage ​

bash
vix dev [name] [options] [-- app-args...]

Description ​

vix dev:

  • Configures the project (if needed)
  • Builds it
  • Runs it
  • Watches for file changes
  • Automatically rebuilds and restarts

Works for:

  • CMake projects
  • Single .cpp scripts
  • .vix manifests

Options ​

--force-server           Force classification as long-lived server
+import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix dev","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/dev.md","filePath":"modules/cli/dev.md","lastUpdated":1770806195000}'),l={name:"modules/cli/dev.md"};function n(p,s,o,h,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t(`

vix dev ​

Developer-friendly entrypoint for running Vix applications with auto-reload.

Internally equivalent to:

vix run --watch

But optimized for development workflows.


Usage ​

bash
vix dev [name] [options] [-- app-args...]

Description ​

vix dev:

  • Configures the project (if needed)
  • Builds it
  • Runs it
  • Watches for file changes
  • Automatically rebuilds and restarts

Works for:

  • CMake projects
  • Single .cpp scripts
  • .vix manifests

Options ​

--force-server           Force classification as long-lived server
 --force-script           Force classification as short-lived script
 --watch, --reload        Enable hot reload (default in dev)
 -j, --jobs <n>           Parallel compile jobs
 --log-level <level>      trace | debug | info | warn | error | critical
 --verbose                Shortcut for debug logs
 -q, --quiet              Show warnings and errors only

Examples ​

Run current project:

bash
vix dev

Run named app:

bash
vix dev api

Script mode with reload:

bash
vix dev server.cpp

Pass runtime args (after --):

bash
vix dev server.cpp -- --port 8080

Force server mode:

bash
vix dev server.cpp --force-server

Force script mode:

bash
vix dev tool.cpp --force-script

Mode Classification ​

Vix automatically detects whether your app is:

  • Server-like (long-running)
  • Script-like (short-lived)

You can override this behavior with:

--force-server
---force-script

When To Use vix dev ​

  • Backend API development
  • Rapid prototyping
  • Iterating on async servers
  • Testing script logic
  • Live development with auto-rebuild

Design Goals ​

  • Zero friction development loop
  • Automatic rebuild on change
  • Clean output
  • Same behavior across project and script modes

vix dev is the recommended command during development.

`,45)])])}const k=a(l,[["render",n]]);export{v as __pageData,k as default}; +--force-script

When To Use vix dev ​

  • Backend API development
  • Rapid prototyping
  • Iterating on async servers
  • Testing script logic
  • Live development with auto-rebuild

Design Goals ​

  • Zero friction development loop
  • Automatic rebuild on change
  • Clean output
  • Same behavior across project and script modes

vix dev is the recommended command during development.

`,45)])])}const u=a(l,[["render",n]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_cli_dev.md.Chf2fWNI.lean.js b/docs/assets/modules_cli_dev.md.Chf2fWNI.lean.js new file mode 100644 index 000000000..6d7c675cb --- /dev/null +++ b/docs/assets/modules_cli_dev.md.Chf2fWNI.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix dev","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/dev.md","filePath":"modules/cli/dev.md","lastUpdated":1770806195000}'),l={name:"modules/cli/dev.md"};function n(p,s,o,h,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t("",45)])])}const u=a(l,[["render",n]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_cli_extras_orm.md.DeYZTOzV.lean.js b/docs/assets/modules_cli_extras_orm.md.DeYZTOzV.lean.js deleted file mode 100644 index d5ff4248f..000000000 --- a/docs/assets/modules_cli_extras_orm.md.DeYZTOzV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"vix orm","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/extras/orm.md","filePath":"modules/cli/extras/orm.md","lastUpdated":null}'),n={name:"modules/cli/extras/orm.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[h("",51)])])}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.lean.js b/docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.lean.js deleted file mode 100644 index 75e382a88..000000000 --- a/docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"vix p2p","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/extras/p2p.md","filePath":"modules/cli/extras/p2p.md","lastUpdated":null}'),n={name:"modules/cli/extras/p2p.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",48)])])}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; diff --git a/docs/assets/modules_cli_index.md.EAGt8RMj.js b/docs/assets/modules_cli_index.md.BQ5oOyda.js similarity index 82% rename from docs/assets/modules_cli_index.md.EAGt8RMj.js rename to docs/assets/modules_cli_index.md.BQ5oOyda.js index d7b58918f..1c187fe7e 100644 --- a/docs/assets/modules_cli_index.md.EAGt8RMj.js +++ b/docs/assets/modules_cli_index.md.BQ5oOyda.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as i,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"CLI Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/index.md","filePath":"modules/cli/index.md","lastUpdated":null}'),t={name:"modules/cli/index.md"};function l(p,a,o,r,c,d){return e(),i("div",null,[...a[0]||(a[0]=[n(`

CLI Overview ​

The Vix CLI is the central interface for building, running, packaging, and managing Vix projects.

It is designed to be:

  • Explicit
  • Predictable
  • Modular
  • Production-oriented

Version Example ​

bash
vix -h

Example output:

Vix.cpp — Modern C++ backend runtime
+import{_ as s,o as e,c as i,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"CLI Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/index.md","filePath":"modules/cli/index.md","lastUpdated":1770805184000}'),t={name:"modules/cli/index.md"};function l(p,a,o,r,c,d){return e(),i("div",null,[...a[0]||(a[0]=[n(`

CLI Overview ​

The Vix CLI is the central interface for building, running, packaging, and managing Vix projects.

It is designed to be:

  • Explicit
  • Predictable
  • Modular
  • Production-oriented

Version Example ​

bash
vix -h

Example output:

Vix.cpp — Modern C++ backend runtime
 Version: v1.x.x

Core Philosophy ​

The CLI is structured around:

  • Project lifecycle
  • Dependency management
  • Packaging and security
  • Network runtime
  • Database migrations
  • Developer tooling

Everything is explicit. No hidden background behavior.


Command Categories ​

1. Project ​

vix new <name>
 vix build
 vix run
@@ -22,4 +22,4 @@ import{_ as s,o as e,c as i,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u
 -v / --version

Supported log levels:

trace | debug | info | warn | error | critical

Quick Start Example ​

bash
vix new api
 cd api
 vix dev

Package and verify:

bash
vix pack --version 1.0.0
-vix verify

Design Goals ​

  • Zero hidden dependency resolution
  • Reproducible builds
  • Explicit version pinning
  • Secure artifact validation
  • Clean project structure
  • Developer-first experience

The CLI is the backbone of Vix workflows.

It connects development, packaging, registry, networking, and runtime in one consistent interface.

`,61)])])}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; +vix verify

Design Goals ​

  • Zero hidden dependency resolution
  • Reproducible builds
  • Explicit version pinning
  • Secure artifact validation
  • Clean project structure
  • Developer-first experience

The CLI is the backbone of Vix workflows.

It connects development, packaging, registry, networking, and runtime in one consistent interface.

`,61)])])}const k=s(t,[["render",l]]);export{v as __pageData,k as default}; diff --git a/docs/assets/modules_cli_index.md.BQ5oOyda.lean.js b/docs/assets/modules_cli_index.md.BQ5oOyda.lean.js new file mode 100644 index 000000000..60d4608fa --- /dev/null +++ b/docs/assets/modules_cli_index.md.BQ5oOyda.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as i,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"CLI Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/index.md","filePath":"modules/cli/index.md","lastUpdated":1770805184000}'),t={name:"modules/cli/index.md"};function l(p,a,o,r,c,d){return e(),i("div",null,[...a[0]||(a[0]=[n("",61)])])}const k=s(t,[["render",l]]);export{v as __pageData,k as default}; diff --git a/docs/assets/modules_cli_index.md.EAGt8RMj.lean.js b/docs/assets/modules_cli_index.md.EAGt8RMj.lean.js deleted file mode 100644 index 5551e5048..000000000 --- a/docs/assets/modules_cli_index.md.EAGt8RMj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as i,a2 as n}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"CLI Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/index.md","filePath":"modules/cli/index.md","lastUpdated":null}'),t={name:"modules/cli/index.md"};function l(p,a,o,r,c,d){return e(),i("div",null,[...a[0]||(a[0]=[n("",61)])])}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.js b/docs/assets/modules_cli_install.md.MeguFU09.js similarity index 72% rename from docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.js rename to docs/assets/modules_cli_install.md.MeguFU09.js index 6d2599f9f..f2cd192ce 100644 --- a/docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.js +++ b/docs/assets/modules_cli_install.md.MeguFU09.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as t,a2 as l}from"./chunks/framework.jUmBZPH5.js";const F=JSON.parse('{"title":"vix install","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/install.md","filePath":"modules/cli/packaging/install.md","lastUpdated":null}'),e={name:"modules/cli/packaging/install.md"};function h(n,i,p,k,r,d){return a(),t("div",null,[...i[0]||(i[0]=[l(`

vix install ​

Install a Vix package into the local store.


Usage ​

bash
vix install --path <folder|artifact.vixpkg> [options]

Description ​

vix install:

  • Installs a packaged project into the local Vix store
  • Verifies payload digest and checksums
  • Verifies signature (if present)
  • Copies package into deterministic store layout

By default, verification is enabled.


Options ​

bash
-p, --path <path>          Package folder or .vixpkg artifact (required)
+import{_ as s,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix install","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/install.md","filePath":"modules/cli/install.md","lastUpdated":1770806195000}'),e={name:"modules/cli/install.md"};function h(n,i,p,k,r,d){return a(),t("div",null,[...i[0]||(i[0]=[l(`

vix install ​

Install a Vix package into the local store.


Usage ​

bash
vix install --path <folder|artifact.vixpkg> [options]

Description ​

vix install:

  • Installs a packaged project into the local Vix store
  • Verifies payload digest and checksums
  • Verifies signature (if present)
  • Copies package into deterministic store layout

By default, verification is enabled.


Options ​

bash
-p, --path <path>          Package folder or .vixpkg artifact (required)
 --store <dir>              Override store root
 --force                    Overwrite if already installed
 --no-verify                Skip verification (NOT recommended)
@@ -7,4 +7,4 @@ import{_ as s,o as a,c as t,a2 as l}from"./chunks/framework.jUmBZPH5.js";const F
 --pubkey <path>            minisign public key
 -h, --help                 Show help

Store Location ​

Default resolution order:

  1. VIX_STORE
  2. XDG_DATA_HOME/vix
  3. ~/.local/share/vix

Final layout:

<store>/packs/<name>/<version>/<os>-<arch>/

Examples ​

Install archive:

bash
vix install --path ./dist/blog@1.0.0.vixpkg

Install folder package:

bash
vix install --path ./dist/blog@1.0.0

Force overwrite:

bash
vix install --path ./dist/blog@1.0.0 --force

Require signature verification:

bash
vix install --path ./blog@1.0.0.vixpkg --require-signature --pubkey ./keys/vix-pack.pub

Security Notes ​

  • Verification runs by default
  • --no-verify disables integrity checks (not recommended)
  • --require-signature enforces cryptographic verification
  • Public key resolution:
    • --pubkey
    • VIX_MINISIGN_PUBKEY

Typical Workflow ​

bash
vix pack --version 1.0.0
 vix verify --require-signature
-vix install --path ./dist/blog@1.0.0.vixpkg

vix install moves verified packages into the reproducible Vix store.

`,37)])])}const g=s(e,[["render",h]]);export{F as __pageData,g as default}; +vix install --path ./dist/blog@1.0.0.vixpkg

vix install moves verified packages into the reproducible Vix store.

`,37)])])}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_cli_install.md.MeguFU09.lean.js b/docs/assets/modules_cli_install.md.MeguFU09.lean.js new file mode 100644 index 000000000..a3784a149 --- /dev/null +++ b/docs/assets/modules_cli_install.md.MeguFU09.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix install","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/install.md","filePath":"modules/cli/install.md","lastUpdated":1770806195000}'),e={name:"modules/cli/install.md"};function h(n,i,p,k,r,d){return a(),t("div",null,[...i[0]||(i[0]=[l("",37)])])}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_cli_list.md.B33Jyujx.js b/docs/assets/modules_cli_list.md.B33Jyujx.js new file mode 100644 index 000000000..0cbc55f19 --- /dev/null +++ b/docs/assets/modules_cli_list.md.B33Jyujx.js @@ -0,0 +1,3 @@ +import{_ as e,o as i,c as s,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"vix list","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/list.md","filePath":"modules/cli/list.md","lastUpdated":1770806195000}'),l={name:"modules/cli/list.md"};function o(n,a,p,r,d,h){return i(),s("div",null,[...a[0]||(a[0]=[t(`

vix list ​

List project dependencies from vix.lock.


Usage ​

bash
vix list

Description ​

vix list:

  • Reads the local vix.lock
  • Displays all pinned dependencies
  • Shows exact versions
  • Shows resolved commit references

This command does not access the network.


Example ​

bash
vix list

Example output:

gaspardkirira/tree@0.1.0
+adastra/json@0.3.2

Behavior Notes ​

  • Works offline
  • Requires a vix.lock file
  • Reflects the exact state of the project
  • Useful for auditing dependency graph

Typical Workflow ​

After adding or removing:

bash
vix add gaspardkirira/tree@0.1.0
+vix list

vix list provides a deterministic view of your dependency state.

`,24)])])}const g=e(l,[["render",o]]);export{v as __pageData,g as default}; diff --git a/docs/assets/modules_cli_list.md.B33Jyujx.lean.js b/docs/assets/modules_cli_list.md.B33Jyujx.lean.js new file mode 100644 index 000000000..6c1733d50 --- /dev/null +++ b/docs/assets/modules_cli_list.md.B33Jyujx.lean.js @@ -0,0 +1 @@ +import{_ as e,o as i,c as s,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"vix list","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/list.md","filePath":"modules/cli/list.md","lastUpdated":1770806195000}'),l={name:"modules/cli/list.md"};function o(n,a,p,r,d,h){return i(),s("div",null,[...a[0]||(a[0]=[t("",24)])])}const g=e(l,[["render",o]]);export{v as __pageData,g as default}; diff --git a/docs/assets/modules_cli_modules.md.-1Z4WyCg.js b/docs/assets/modules_cli_modules.md.-1Z4WyCg.js new file mode 100644 index 000000000..724e915bf --- /dev/null +++ b/docs/assets/modules_cli_modules.md.-1Z4WyCg.js @@ -0,0 +1,36 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Vix Modules","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/modules.md","filePath":"modules/cli/modules.md","lastUpdated":1770827001000}'),l={name:"modules/cli/modules.md"};function n(p,s,h,d,o,c){return i(),e("div",null,[...s[0]||(s[0]=[t(`

Vix Modules ​

The vix modules command enables a strict, app-first module system for any CMake project.

The design is inspired by Go modules philosophy:

  • Explicit dependencies
  • Strict public/private boundaries
  • No accidental header leakage
  • Enforced architectural discipline

Command Overview ​

bash
vix modules <subcommand> [options]

Subcommands ​

text
init                 Initialize modules mode
+add <name>           Create a module skeleton
+check                Validate module safety rules

Global Options ​

text
-d, --dir <path>         Project root (default: current)
+--project <name>         Override project name
+--no-patch               Do not patch root CMakeLists.txt
+--patch                  Patch root CMakeLists.txt (default)
+--no-link                Do not auto-link module into main target
+--link                   Auto-link module into main target (default)
+-h, --help               Show help

1. Initialize Modules Mode ​

bash
vix modules init

This creates:

text
modules/
+cmake/vix_modules.cmake

It can optionally patch your root CMakeLists.txt.

Example root patch:

cmake
include(cmake/vix_modules.cmake)
+vix_modules_enable()

2. Add a Module ​

bash
vix modules add auth

Creates:

text
modules/auth/
+  include/auth/
+  src/
+  CMakeLists.txt

Public header example:

cpp
// modules/auth/include/auth/api.hpp
+#pragma once
+
+namespace auth {
+  void login();
+}

Private implementation:

cpp
// modules/auth/src/api.cpp
+#include <auth/api.hpp>
+
+namespace auth {
+  void login() {}
+}

Generated CMake target:

cmake
add_library(<project>_auth)
+add_library(<project>::auth ALIAS <project>_auth)
+
+target_include_directories(<project>_auth
+  PUBLIC modules/auth/include
+  PRIVATE modules/auth/src
+)

3. Explicit Cross-Module Dependency ​

If products depends on auth, you must declare it explicitly:

cmake
target_link_libraries(<project>_products
+  PUBLIC <project>::auth
+)

No implicit dependency resolution is allowed.


4. Module Structure Contract ​

Each module must follow:

text
modules/<m>/include/<m>/...   public headers
+modules/<m>/src/...           private implementation

Public include style:

cpp
#include <auth/api.hpp>

Never:

cpp
#include "modules/auth/src/internal.hpp"

5. Validate Module Safety ​

bash
vix modules check

This validates:

  • Public headers do not include private headers
  • Cross-module usage is explicitly linked
  • Include structure follows contract
  • No accidental boundary violations

Design Philosophy ​

Vix modules enforce:

  • Architectural clarity
  • Dependency correctness
  • Long-term maintainability
  • Build-time safety

Everything must be explicit. Nothing is automatic. No hidden coupling.


Minimal Workflow Example ​

bash
vix modules init
+vix modules add auth
+vix modules add products
+vix modules check

This results in a clean, explicit, Go-like module architecture for C++.

`,57)])])}const m=a(l,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_cli_modules.md.-1Z4WyCg.lean.js b/docs/assets/modules_cli_modules.md.-1Z4WyCg.lean.js new file mode 100644 index 000000000..3d998d8fc --- /dev/null +++ b/docs/assets/modules_cli_modules.md.-1Z4WyCg.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Vix Modules","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/modules.md","filePath":"modules/cli/modules.md","lastUpdated":1770827001000}'),l={name:"modules/cli/modules.md"};function n(p,s,h,d,o,c){return i(),e("div",null,[...s[0]||(s[0]=[t("",57)])])}const m=a(l,[["render",n]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_cli_commands_new.md.MeHmPVZ5.js b/docs/assets/modules_cli_new.md.Ck2bvgek.js similarity index 76% rename from docs/assets/modules_cli_commands_new.md.MeHmPVZ5.js rename to docs/assets/modules_cli_new.md.Ck2bvgek.js index feb93570b..99a4ceff9 100644 --- a/docs/assets/modules_cli_commands_new.md.MeHmPVZ5.js +++ b/docs/assets/modules_cli_new.md.Ck2bvgek.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix new","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/new.md","filePath":"modules/cli/commands/new.md","lastUpdated":null}'),n={name:"modules/cli/commands/new.md"};function l(p,a,o,r,h,d){return e(),i("div",null,[...a[0]||(a[0]=[t(`

vix new ​

Create a new Vix project.


Usage ​

bash
vix new <name|path> [options]

Options ​

-d, --dir <base_dir>    Base directory where the project folder will be created
+import{_ as s,o as e,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"vix new","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/new.md","filePath":"modules/cli/new.md","lastUpdated":1770806195000}'),n={name:"modules/cli/new.md"};function p(l,a,r,o,h,d){return e(),i("div",null,[...a[0]||(a[0]=[t(`

vix new ​

Create a new Vix project.


Usage ​

bash
vix new <name|path> [options]

Options ​

-d, --dir <base_dir>    Base directory where the project folder will be created
 --app                   Generate an application template
 --lib                   Generate a library template (header-only)
 --force                 Overwrite if directory exists (no prompt)

Environment Variables ​

VIX_NONINTERACTIVE=1    Disable interactive prompts
@@ -13,4 +13,4 @@ import{_ as s,o as e,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u
 
 Next steps:
   cd test_lib/
-  vix tests

Behavior Notes ​

  • If directory exists, you will be prompted unless --force is used.
  • Library template is header-only by default.
  • Application template includes CMake configuration.
  • Interactive mode is disabled in CI environments.

This command bootstraps the full Vix project structure.

`,44)])])}const b=s(n,[["render",l]]);export{u as __pageData,b as default}; + vix tests

Behavior Notes ​

  • If directory exists, you will be prompted unless --force is used.
  • Library template is header-only by default.
  • Application template includes CMake configuration.
  • Interactive mode is disabled in CI environments.

This command bootstraps the full Vix project structure.

`,44)])])}const g=s(n,[["render",p]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_new.md.Ck2bvgek.lean.js b/docs/assets/modules_cli_new.md.Ck2bvgek.lean.js new file mode 100644 index 000000000..b9422a5f1 --- /dev/null +++ b/docs/assets/modules_cli_new.md.Ck2bvgek.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"vix new","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/new.md","filePath":"modules/cli/new.md","lastUpdated":1770806195000}'),n={name:"modules/cli/new.md"};function p(l,a,r,o,h,d){return e(),i("div",null,[...a[0]||(a[0]=[t("",44)])])}const g=s(n,[["render",p]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_extras_orm.md.DeYZTOzV.js b/docs/assets/modules_cli_orm.md.DCvX6uTf.js similarity index 93% rename from docs/assets/modules_cli_extras_orm.md.DeYZTOzV.js rename to docs/assets/modules_cli_orm.md.DCvX6uTf.js index e4468cf32..28fcea3c4 100644 --- a/docs/assets/modules_cli_extras_orm.md.DeYZTOzV.js +++ b/docs/assets/modules_cli_orm.md.DCvX6uTf.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"vix orm","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/extras/orm.md","filePath":"modules/cli/extras/orm.md","lastUpdated":null}'),n={name:"modules/cli/extras/orm.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix orm ​

Database migrations and schema management.


Usage ​

bash
vix orm migrate   [options]
+import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"vix orm","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/orm.md","filePath":"modules/cli/orm.md","lastUpdated":1770806195000}'),n={name:"modules/cli/orm.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix orm ​

Database migrations and schema management.


Usage ​

bash
vix orm migrate   [options]
 vix orm rollback  --steps <n> [options]
 vix orm status    [options]
 vix orm makemigrations --new <schema.json> [options]

Description ​

vix orm manages:

  • Database migrations
  • Schema evolution
  • Migration history
  • Rollback operations

Supports MySQL and SQLite dialects.


Commands ​

Migrate ​

bash
vix orm migrate

Apply pending migrations.


Rollback ​

bash
vix orm rollback --steps <n>

Rollback last N applied migrations.

Required:

bash
--steps <n>

Status ​

bash
vix orm status

Show applied and pending migrations.


Makemigrations ​

bash
vix orm makemigrations --new <schema.json>

Generate migration from schema diff.

Options:

bash
--new <path>          New schema (required)
@@ -15,4 +15,4 @@ import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
 VIX_ORM_PASS
 VIX_ORM_DB
 VIX_ORM_DIR
-VIX_ORM_TOOL

Examples ​

Apply migrations:

bash
vix orm migrate --db blog_db --dir ./migrations

Rollback:

bash
vix orm rollback --steps 1 --db blog_db --dir ./migrations

Status:

bash
vix orm status --db blog_db

Using environment variables:

bash
VIX_ORM_DB=blog_db vix orm migrate --dir ./migrations

Generate migration:

bash
vix orm makemigrations   --new ./schema.new.json   --snapshot ./schema.json   --dir ./migrations   --name create_users   --dialect mysql

vix orm keeps database schema evolution explicit and versioned.

`,51)])])}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; +VIX_ORM_TOOL

Examples ​

Apply migrations:

bash
vix orm migrate --db blog_db --dir ./migrations

Rollback:

bash
vix orm rollback --steps 1 --db blog_db --dir ./migrations

Status:

bash
vix orm status --db blog_db

Using environment variables:

bash
VIX_ORM_DB=blog_db vix orm migrate --dir ./migrations

Generate migration:

bash
vix orm makemigrations   --new ./schema.new.json   --snapshot ./schema.json   --dir ./migrations   --name create_users   --dialect mysql

vix orm keeps database schema evolution explicit and versioned.

`,51)])])}const c=i(n,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_cli_orm.md.DCvX6uTf.lean.js b/docs/assets/modules_cli_orm.md.DCvX6uTf.lean.js new file mode 100644 index 000000000..3fe4a0101 --- /dev/null +++ b/docs/assets/modules_cli_orm.md.DCvX6uTf.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"vix orm","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/orm.md","filePath":"modules/cli/orm.md","lastUpdated":1770806195000}'),n={name:"modules/cli/orm.md"};function l(p,s,e,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[h("",51)])])}const c=i(n,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.js b/docs/assets/modules_cli_p2p.md.D1r7loys.js similarity index 83% rename from docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.js rename to docs/assets/modules_cli_p2p.md.D1r7loys.js index de7e55142..3502aa615 100644 --- a/docs/assets/modules_cli_extras_p2p.md.CYBUIKVI.js +++ b/docs/assets/modules_cli_p2p.md.D1r7loys.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"vix p2p","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/extras/p2p.md","filePath":"modules/cli/extras/p2p.md","lastUpdated":null}'),n={name:"modules/cli/extras/p2p.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix p2p ​

Run a Vix P2P node (TCP + discovery + optional bootstrap).


Usage ​

bash
vix p2p --id <node_id> --listen <port> [options]

Description ​

vix p2p starts a peer-to-peer node with:

  • TCP transport
  • Optional UDP discovery
  • Optional HTTP bootstrap registry
  • Live stats (TUI mode)
  • Structured logging

Designed for testing distributed networking locally or across nodes.


Core Options ​

bash
--id <node_id>                 Node id (string, required)
+import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"vix p2p","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/p2p.md","filePath":"modules/cli/p2p.md","lastUpdated":1770806195000}'),n={name:"modules/cli/p2p.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix p2p ​

Run a Vix P2P node (TCP + discovery + optional bootstrap).


Usage ​

bash
vix p2p --id <node_id> --listen <port> [options]

Description ​

vix p2p starts a peer-to-peer node with:

  • TCP transport
  • Optional UDP discovery
  • Optional HTTP bootstrap registry
  • Live stats (TUI mode)
  • Structured logging

Designed for testing distributed networking locally or across nodes.


Core Options ​

bash
--id <node_id>                 Node id (string, required)
 --listen <port>                TCP listen port (required)
 --connect <host:port>          Connect to peer after start
 --connect-delay <ms>           Delay before connect()
@@ -13,4 +13,4 @@ import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
 --registry <url>               Default: http://127.0.0.1:8080/p2p/v1
 --boot-interval <seconds>      Default: 15
 --announce <on|off>            Default: on

Used to:

  • Register node presence
  • Discover remote peers via registry endpoint

Logging ​

bash
--log-level <level>

Levels:

trace | debug | info | warn | error | critical | off

Examples ​

Single node:

bash
vix p2p --id A --listen 9001

Connect two peers:

bash
vix p2p --id A --listen 9001
-vix p2p --id B --listen 9002 --connect 127.0.0.1:9001

Run for 10 seconds:

bash
vix p2p --id A --listen 9001 --run 10

Disable discovery:

bash
vix p2p --id A --listen 9001 --discovery off

Enable bootstrap:

bash
vix p2p --id A --listen 9001 --bootstrap on

Typical Workflow ​

Open two terminals:

Terminal 1:

bash
vix p2p --id A --listen 9001

Terminal 2:

bash
vix p2p --id B --listen 9002 --connect 127.0.0.1:9001

vix p2p enables distributed experimentation without external dependencies.

`,48)])])}const o=i(n,[["render",l]]);export{g as __pageData,o as default}; +vix p2p --id B --listen 9002 --connect 127.0.0.1:9001

Run for 10 seconds:

bash
vix p2p --id A --listen 9001 --run 10

Disable discovery:

bash
vix p2p --id A --listen 9001 --discovery off

Enable bootstrap:

bash
vix p2p --id A --listen 9001 --bootstrap on

Typical Workflow ​

Open two terminals:

Terminal 1:

bash
vix p2p --id A --listen 9001

Terminal 2:

bash
vix p2p --id B --listen 9002 --connect 127.0.0.1:9001

vix p2p enables distributed experimentation without external dependencies.

`,48)])])}const c=i(n,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_cli_p2p.md.D1r7loys.lean.js b/docs/assets/modules_cli_p2p.md.D1r7loys.lean.js new file mode 100644 index 000000000..24d989713 --- /dev/null +++ b/docs/assets/modules_cli_p2p.md.D1r7loys.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"vix p2p","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/p2p.md","filePath":"modules/cli/p2p.md","lastUpdated":1770806195000}'),n={name:"modules/cli/p2p.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",48)])])}const c=i(n,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.js b/docs/assets/modules_cli_pack.md.uo9HnDO2.js similarity index 76% rename from docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.js rename to docs/assets/modules_cli_pack.md.uo9HnDO2.js index f2a82b786..660154a31 100644 --- a/docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.js +++ b/docs/assets/modules_cli_pack.md.uo9HnDO2.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const F=JSON.parse('{"title":"vix pack","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/pack.md","filePath":"modules/cli/packaging/pack.md","lastUpdated":null}'),n={name:"modules/cli/packaging/pack.md"};function e(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix pack ​

Package a Vix project into a distributable artifact.


Usage ​

bash
vix pack [options]

Description ​

vix pack:

  • Creates dist/<name>@<version>
  • Generates a manifest v2 package
  • Optionally creates a .vixpkg archive
  • Optionally signs metadata using minisign

Default output:

<project>/dist/

Options ​

bash
-d, --dir <path>        Project directory (default: current directory)
+import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"vix pack","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/pack.md","filePath":"modules/cli/pack.md","lastUpdated":1770806195000}'),n={name:"modules/cli/pack.md"};function e(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

vix pack ​

Package a Vix project into a distributable artifact.


Usage ​

bash
vix pack [options]

Description ​

vix pack:

  • Creates dist/<name>@<version>
  • Generates a manifest v2 package
  • Optionally creates a .vixpkg archive
  • Optionally signs metadata using minisign

Default output:

<project>/dist/

Options ​

bash
-d, --dir <path>        Project directory (default: current directory)
 --out <path>            Output directory (default: <project>/dist)
 --name <name>           Package name (default: project folder name)
 --version <ver>         Package version (default: 0.1.0)
@@ -8,4 +8,4 @@ import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const F
 --sign[=mode]           auto | never | required (default: auto)
 -h, --help              Show help

Basic Example ​

bash
vix pack

Explicit name and version:

bash
vix pack --name blog --version 1.0.0

Disable archive:

bash
vix pack --no-zip

Signing (Optional) ​

Environment:

bash
VIX_MINISIGN_SECKEY=path

Example:

bash
VIX_MINISIGN_SECKEY=./keys/vix-pack.key vix pack --sign

Modes:

  • auto Sign if key exists
  • never Disable signing
  • required Fail if signing is not possible

What Gets Generated ​

Inside dist/<name>@<version>:

  • Manifest v2 metadata
  • Payload files
  • Optional checksums.sha256
  • Optional minisign signature

Optional archive:

dist/<name>@<version>.vixpkg

Typical Workflow ​

bash
vix build --preset release
 vix pack --version 1.0.0
-vix verify dist/blog@1.0.0

vix pack prepares your project for reproducible distribution.

`,40)])])}const o=i(n,[["render",e]]);export{F as __pageData,o as default}; +vix verify dist/blog@1.0.0

vix pack prepares your project for reproducible distribution.

`,40)])])}const y=i(n,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_cli_pack.md.uo9HnDO2.lean.js b/docs/assets/modules_cli_pack.md.uo9HnDO2.lean.js new file mode 100644 index 000000000..0c0bb05c4 --- /dev/null +++ b/docs/assets/modules_cli_pack.md.uo9HnDO2.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"vix pack","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/pack.md","filePath":"modules/cli/pack.md","lastUpdated":1770806195000}'),n={name:"modules/cli/pack.md"};function e(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",40)])])}const y=i(n,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.lean.js b/docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.lean.js deleted file mode 100644 index 169350790..000000000 --- a/docs/assets/modules_cli_packaging_install.md.Ct8ALnKY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as t,a2 as l}from"./chunks/framework.jUmBZPH5.js";const F=JSON.parse('{"title":"vix install","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/install.md","filePath":"modules/cli/packaging/install.md","lastUpdated":null}'),e={name:"modules/cli/packaging/install.md"};function h(n,i,p,k,r,d){return a(),t("div",null,[...i[0]||(i[0]=[l("",37)])])}const g=s(e,[["render",h]]);export{F as __pageData,g as default}; diff --git a/docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.lean.js b/docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.lean.js deleted file mode 100644 index 0e9a42f75..000000000 --- a/docs/assets/modules_cli_packaging_pack.md.BGyyTeP3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const F=JSON.parse('{"title":"vix pack","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/pack.md","filePath":"modules/cli/packaging/pack.md","lastUpdated":null}'),n={name:"modules/cli/packaging/pack.md"};function e(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",40)])])}const o=i(n,[["render",e]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.lean.js b/docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.lean.js deleted file mode 100644 index 972cf3915..000000000 --- a/docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"vix verify","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/verify.md","filePath":"modules/cli/packaging/verify.md","lastUpdated":null}'),n={name:"modules/cli/packaging/verify.md"};function h(l,i,p,k,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",46)])])}const F=s(n,[["render",h]]);export{c as __pageData,F as default}; diff --git a/docs/assets/modules_cli_publish.md.BXzn09wt.js b/docs/assets/modules_cli_publish.md.BXzn09wt.js new file mode 100644 index 000000000..f5100e644 --- /dev/null +++ b/docs/assets/modules_cli_publish.md.BXzn09wt.js @@ -0,0 +1,3 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix publish","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/publish.md","filePath":"modules/cli/publish.md","lastUpdated":1770806195000}'),l={name:"modules/cli/publish.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix publish ​

Publish a package version to the Vix Registry.


Usage ​

bash
vix publish <version> [--notes "..."] [--dry-run]

Description ​

vix publish:

  • Publishes a new version of your library
  • Updates the local registry clone (~/.vix/registry/index)
  • Creates a new branch
  • Commits the version metadata
  • Pushes to the registry remote
  • Opens a PR (if gh CLI is available)

Designed for clean, deterministic registry contributions.


Requirements ​

Before publishing:

  • You must be inside your library Git repository
  • The Git tag must exist: v<version>
  • The registry must be synced
bash
vix registry sync

Examples ​

Publish version:

bash
vix publish 0.2.0

Publish with notes:

bash
vix publish 0.2.0 --notes "Add count_leaves helper"

Dry run (no push):

bash
vix publish 0.2.0 --dry-run

Version Rules ​

  • Version must match Git tag v<version>
  • Tag must already exist
  • Registry entry will reference the exact commit SHA

Example:

git tag v0.2.0
+git push origin v0.2.0
+vix publish 0.2.0

What Happens Internally ​

  1. Validate Git tag exists
  2. Read tag commit SHA
  3. Update registry JSON
  4. Commit registry change
  5. Push branch
  6. Open Pull Request (if gh is installed)

Notes ​

  • --dry-run performs validation without modifying registry
  • Publish is explicit, not automatic
  • Lockfiles will pin the commit SHA of the published version

vix publish integrates your library into the Vix ecosystem.

`,36)])])}const b=s(l,[["render",n]]);export{g as __pageData,b as default}; diff --git a/docs/assets/modules_cli_publish.md.BXzn09wt.lean.js b/docs/assets/modules_cli_publish.md.BXzn09wt.lean.js new file mode 100644 index 000000000..09b72af52 --- /dev/null +++ b/docs/assets/modules_cli_publish.md.BXzn09wt.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix publish","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/publish.md","filePath":"modules/cli/publish.md","lastUpdated":1770806195000}'),l={name:"modules/cli/publish.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",36)])])}const b=s(l,[["render",n]]);export{g as __pageData,b as default}; diff --git a/docs/assets/modules_cli_registry_registry.md.BZCFpJE-.js b/docs/assets/modules_cli_registry.md.BtRGA52T.js similarity index 78% rename from docs/assets/modules_cli_registry_registry.md.BZCFpJE-.js rename to docs/assets/modules_cli_registry.md.BtRGA52T.js index cc9f31a30..84441b384 100644 --- a/docs/assets/modules_cli_registry_registry.md.BZCFpJE-.js +++ b/docs/assets/modules_cli_registry.md.BtRGA52T.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"vix registry","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/registry.md","filePath":"modules/cli/registry/registry.md","lastUpdated":null}'),n={name:"modules/cli/registry/registry.md"};function l(h,s,p,r,k,d){return a(),e("div",null,[...s[0]||(s[0]=[t(`

vix registry ​

Manage the Vix Registry (Git-based package index).


Usage ​

bash
vix registry <subcommand>

Subcommands ​

bash
sync        Clone or update the registry index (git-based)
+import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"vix registry","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry.md","filePath":"modules/cli/registry.md","lastUpdated":1770806195000}'),n={name:"modules/cli/registry.md"};function h(l,s,p,r,k,d){return a(),e("div",null,[...s[0]||(s[0]=[t(`

vix registry ​

Manage the Vix Registry (Git-based package index).


Usage ​

bash
vix registry <subcommand>

Subcommands ​

bash
sync        Clone or update the registry index (git-based)
 path        Print local registry index path

Description ​

The Vix Registry is:

  • A Git repository
  • Fully offline after sync
  • Serverless (no API, no authentication)
  • Deterministic and commit-pinned

It maps:

<namespace>/<name>@<version> -> immutable git commit SHA

This guarantees reproducible builds.


First Step ​

Before searching or adding packages:

bash
vix registry sync

This clones or updates the local registry index.


Examples ​

Sync registry:

bash
vix registry sync

Print local registry path:

bash
vix registry path

Search locally:

bash
vix search tree

Add dependency:

bash
vix add gaspardkirira/tree@0.1.0

Publishing a Package ​

Publishing updates the registry by creating a branch and opening a PR.

bash
vix publish 0.2.0

Requirements:

  • You must be inside your library Git repo
  • Tag must exist: v<version>
  • Registry must be synced
bash
git tag v0.2.0
 git push origin v0.2.0
 vix registry sync
@@ -6,4 +6,4 @@ import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const o
 vix add <pkg>@<version>
 vix list
 vix remove <pkg>
-vix publish <version>

The Vix registry is minimal, deterministic, and Git-native by design.

`,46)])])}const c=i(n,[["render",l]]);export{o as __pageData,c as default}; +vix publish <version>

The Vix registry is minimal, deterministic, and Git-native by design.

`,46)])])}const y=i(n,[["render",h]]);export{F as __pageData,y as default}; diff --git a/docs/assets/modules_cli_registry.md.BtRGA52T.lean.js b/docs/assets/modules_cli_registry.md.BtRGA52T.lean.js new file mode 100644 index 000000000..39858455b --- /dev/null +++ b/docs/assets/modules_cli_registry.md.BtRGA52T.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"vix registry","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry.md","filePath":"modules/cli/registry.md","lastUpdated":1770806195000}'),n={name:"modules/cli/registry.md"};function h(l,s,p,r,k,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",46)])])}const y=i(n,[["render",h]]);export{F as __pageData,y as default}; diff --git a/docs/assets/modules_cli_registry_add.md.CWt21p6x.js b/docs/assets/modules_cli_registry_add.md.CWt21p6x.js deleted file mode 100644 index 855e090fa..000000000 --- a/docs/assets/modules_cli_registry_add.md.CWt21p6x.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix add","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/add.md","filePath":"modules/cli/registry/add.md","lastUpdated":null}'),l={name:"modules/cli/registry/add.md"};function n(r,i,d,h,o,p){return a(),e("div",null,[...i[0]||(i[0]=[t('

vix add ​

Add a dependency from the Vix registry.


Usage ​

bash
vix add <namespace>/<name>@<version>

Description ​

vix add:

  • Adds a dependency to your project
  • Requires an exact version (V1 registry model)
  • Pins the resolved commit SHA in vix.lock
  • Works with the local registry index

Before adding a dependency, you should sync the registry.


Sync Registry ​

bash
vix registry sync

Example ​

bash
vix add gaspardkirira/tree@0.1.0

Versioning Rules ​

  • Exact version required
  • No version ranges in V1
  • Version is resolved to a commit SHA
  • The commit is stored in vix.lock

This ensures:

  • Reproducible builds
  • Deterministic dependency resolution
  • No implicit upgrades

What Happens Internally ​

  1. Registry index is searched locally
  2. Version is resolved to a commit
  3. Entry is written to vix.lock
  4. Dependencies are installed via:
bash
vix deps

Notes ​

  • Requires prior vix registry sync
  • Lockfile must be committed to version control
  • Exact version required in current registry model

vix add is part of the deterministic dependency workflow in Vix.

',30)])])}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_registry_add.md.CWt21p6x.lean.js b/docs/assets/modules_cli_registry_add.md.CWt21p6x.lean.js deleted file mode 100644 index 34b5570d0..000000000 --- a/docs/assets/modules_cli_registry_add.md.CWt21p6x.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix add","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/add.md","filePath":"modules/cli/registry/add.md","lastUpdated":null}'),l={name:"modules/cli/registry/add.md"};function n(r,i,d,h,o,p){return a(),e("div",null,[...i[0]||(i[0]=[t("",30)])])}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_registry_list.md.CQAG-5CY.js b/docs/assets/modules_cli_registry_list.md.CQAG-5CY.js deleted file mode 100644 index 803fb7ef0..000000000 --- a/docs/assets/modules_cli_registry_list.md.CQAG-5CY.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as e,o as i,c as s,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix list","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/list.md","filePath":"modules/cli/registry/list.md","lastUpdated":null}'),l={name:"modules/cli/registry/list.md"};function o(n,a,r,p,d,h){return i(),s("div",null,[...a[0]||(a[0]=[t(`

vix list ​

List project dependencies from vix.lock.


Usage ​

bash
vix list

Description ​

vix list:

  • Reads the local vix.lock
  • Displays all pinned dependencies
  • Shows exact versions
  • Shows resolved commit references

This command does not access the network.


Example ​

bash
vix list

Example output:

gaspardkirira/tree@0.1.0
-adastra/json@0.3.2

Behavior Notes ​

  • Works offline
  • Requires a vix.lock file
  • Reflects the exact state of the project
  • Useful for auditing dependency graph

Typical Workflow ​

After adding or removing:

bash
vix add gaspardkirira/tree@0.1.0
-vix list

vix list provides a deterministic view of your dependency state.

`,24)])])}const u=e(l,[["render",o]]);export{k as __pageData,u as default}; diff --git a/docs/assets/modules_cli_registry_list.md.CQAG-5CY.lean.js b/docs/assets/modules_cli_registry_list.md.CQAG-5CY.lean.js deleted file mode 100644 index ef876ad0d..000000000 --- a/docs/assets/modules_cli_registry_list.md.CQAG-5CY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as i,c as s,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix list","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/list.md","filePath":"modules/cli/registry/list.md","lastUpdated":null}'),l={name:"modules/cli/registry/list.md"};function o(n,a,r,p,d,h){return i(),s("div",null,[...a[0]||(a[0]=[t("",24)])])}const u=e(l,[["render",o]]);export{k as __pageData,u as default}; diff --git a/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.js b/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.js deleted file mode 100644 index 358460aa6..000000000 --- a/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix publish","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/publish.md","filePath":"modules/cli/registry/publish.md","lastUpdated":null}'),l={name:"modules/cli/registry/publish.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix publish ​

Publish a package version to the Vix Registry.


Usage ​

bash
vix publish <version> [--notes "..."] [--dry-run]

Description ​

vix publish:

  • Publishes a new version of your library
  • Updates the local registry clone (~/.vix/registry/index)
  • Creates a new branch
  • Commits the version metadata
  • Pushes to the registry remote
  • Opens a PR (if gh CLI is available)

Designed for clean, deterministic registry contributions.


Requirements ​

Before publishing:

  • You must be inside your library Git repository
  • The Git tag must exist: v<version>
  • The registry must be synced
bash
vix registry sync

Examples ​

Publish version:

bash
vix publish 0.2.0

Publish with notes:

bash
vix publish 0.2.0 --notes "Add count_leaves helper"

Dry run (no push):

bash
vix publish 0.2.0 --dry-run

Version Rules ​

  • Version must match Git tag v<version>
  • Tag must already exist
  • Registry entry will reference the exact commit SHA

Example:

git tag v0.2.0
-git push origin v0.2.0
-vix publish 0.2.0

What Happens Internally ​

  1. Validate Git tag exists
  2. Read tag commit SHA
  3. Update registry JSON
  4. Commit registry change
  5. Push branch
  6. Open Pull Request (if gh is installed)

Notes ​

  • --dry-run performs validation without modifying registry
  • Publish is explicit, not automatic
  • Lockfiles will pin the commit SHA of the published version

vix publish integrates your library into the Vix ecosystem.

`,36)])])}const k=s(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.lean.js b/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.lean.js deleted file mode 100644 index 049deff34..000000000 --- a/docs/assets/modules_cli_registry_publish.md.CJqbPsuu.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"vix publish","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/publish.md","filePath":"modules/cli/registry/publish.md","lastUpdated":null}'),l={name:"modules/cli/registry/publish.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",36)])])}const k=s(l,[["render",n]]);export{u as __pageData,k as default}; diff --git a/docs/assets/modules_cli_registry_registry.md.BZCFpJE-.lean.js b/docs/assets/modules_cli_registry_registry.md.BZCFpJE-.lean.js deleted file mode 100644 index bdd4e9cf3..000000000 --- a/docs/assets/modules_cli_registry_registry.md.BZCFpJE-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"vix registry","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/registry.md","filePath":"modules/cli/registry/registry.md","lastUpdated":null}'),n={name:"modules/cli/registry/registry.md"};function l(h,s,p,r,k,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",46)])])}const c=i(n,[["render",l]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_cli_registry_remove.md.BjsMQNKw.lean.js b/docs/assets/modules_cli_registry_remove.md.BjsMQNKw.lean.js deleted file mode 100644 index 193f890d5..000000000 --- a/docs/assets/modules_cli_registry_remove.md.BjsMQNKw.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"vix remove","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/remove.md","filePath":"modules/cli/registry/remove.md","lastUpdated":null}'),l={name:"modules/cli/registry/remove.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",25)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/docs/assets/modules_cli_registry_search.md.I6GCFzGx.js b/docs/assets/modules_cli_registry_search.md.I6GCFzGx.js deleted file mode 100644 index 6a7303c47..000000000 --- a/docs/assets/modules_cli_registry_search.md.I6GCFzGx.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix search","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/search.md","filePath":"modules/cli/registry/search.md","lastUpdated":null}'),l={name:"modules/cli/registry/search.md"};function r(h,a,n,o,c,p){return e(),i("div",null,[...a[0]||(a[0]=[t('

vix search ​

Search packages in the local registry index (offline).


Usage ​

bash
vix search <query>

Description ​

vix search queries the local registry index.

  • Works fully offline
  • No network request required
  • Uses the locally synced registry data

Before searching for the first time, you should sync the registry.


Sync Registry ​

bash
vix registry sync

Examples ​

Search by package name:

bash
vix search tree

Search by namespace or author:

bash
vix search gaspardkirira

Behavior Notes ​

  • Results come from the local registry index.
  • If no results are found, ensure you ran vix registry sync.
  • Search is case-insensitive.

Design Goals ​

  • Fast local search
  • Offline-first dependency model
  • Deterministic package discovery

vix search is part of the Vix registry workflow.

',27)])])}const g=s(l,[["render",r]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_registry_search.md.I6GCFzGx.lean.js b/docs/assets/modules_cli_registry_search.md.I6GCFzGx.lean.js deleted file mode 100644 index 3ce6b7128..000000000 --- a/docs/assets/modules_cli_registry_search.md.I6GCFzGx.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix search","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/search.md","filePath":"modules/cli/registry/search.md","lastUpdated":null}'),l={name:"modules/cli/registry/search.md"};function r(h,a,n,o,c,p){return e(),i("div",null,[...a[0]||(a[0]=[t("",27)])])}const g=s(l,[["render",r]]);export{k as __pageData,g as default}; diff --git a/docs/assets/modules_cli_registry_remove.md.BjsMQNKw.js b/docs/assets/modules_cli_remove.md.DWyVAWBf.js similarity index 73% rename from docs/assets/modules_cli_registry_remove.md.BjsMQNKw.js rename to docs/assets/modules_cli_remove.md.DWyVAWBf.js index a83c5ccd0..1a041d6c7 100644 --- a/docs/assets/modules_cli_registry_remove.md.BjsMQNKw.js +++ b/docs/assets/modules_cli_remove.md.DWyVAWBf.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"vix remove","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/registry/remove.md","filePath":"modules/cli/registry/remove.md","lastUpdated":null}'),l={name:"modules/cli/registry/remove.md"};function n(h,i,p,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix remove ​

Remove a dependency from the project lockfile.


Usage ​

bash
vix remove <pkg>
+import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"vix remove","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/remove.md","filePath":"modules/cli/remove.md","lastUpdated":1770806195000}'),l={name:"modules/cli/remove.md"};function n(p,i,h,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix remove ​

Remove a dependency from the project lockfile.


Usage ​

bash
vix remove <pkg>
 vix remove <pkg>@<version>

Description ​

vix remove:

  • Removes a dependency entry from vix.lock
  • Supports removing by package name only
  • Or by package + specific version

The operation updates the lockfile only. To fully apply changes, run:

bash
vix deps

Examples ​

Remove by package:

bash
vix remove gaspardkirira/tree

Remove specific version:

bash
vix remove gaspardkirira/tree@0.1.0

Behavior Notes ​

  • Works on the local vix.lock
  • Does not modify registry
  • Deterministic removal (no implicit upgrades/downgrades)
  • Safe to commit after removal

Typical Workflow ​

bash
vix remove gaspardkirira/tree
 vix deps
-vix build

vix remove keeps dependency management explicit and reproducible.

`,25)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default}; +vix build

vix remove keeps dependency management explicit and reproducible.

`,25)])])}const m=s(l,[["render",n]]);export{v as __pageData,m as default}; diff --git a/docs/assets/modules_cli_remove.md.DWyVAWBf.lean.js b/docs/assets/modules_cli_remove.md.DWyVAWBf.lean.js new file mode 100644 index 000000000..e0816faa1 --- /dev/null +++ b/docs/assets/modules_cli_remove.md.DWyVAWBf.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const v=JSON.parse('{"title":"vix remove","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/remove.md","filePath":"modules/cli/remove.md","lastUpdated":1770806195000}'),l={name:"modules/cli/remove.md"};function n(p,i,h,r,o,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",25)])])}const m=s(l,[["render",n]]);export{v as __pageData,m as default}; diff --git a/docs/assets/modules_cli_repl.md.BXuKpEyc.lean.js b/docs/assets/modules_cli_repl.md.BXuKpEyc.lean.js deleted file mode 100644 index 19b126897..000000000 --- a/docs/assets/modules_cli_repl.md.BXuKpEyc.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as n,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"REPL","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/repl.md","filePath":"modules/cli/repl.md","lastUpdated":null}'),i={name:"modules/cli/repl.md"};function p(l,a,o,r,c,h){return n(),e("div",null,[...a[0]||(a[0]=[t("",45)])])}const g=s(i,[["render",p]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_cli_repl.md.BXuKpEyc.js b/docs/assets/modules_cli_repl.md.DdLFhj6c.js similarity index 79% rename from docs/assets/modules_cli_repl.md.BXuKpEyc.js rename to docs/assets/modules_cli_repl.md.DdLFhj6c.js index bfdf6c772..6c973033a 100644 --- a/docs/assets/modules_cli_repl.md.BXuKpEyc.js +++ b/docs/assets/modules_cli_repl.md.DdLFhj6c.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"REPL","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/repl.md","filePath":"modules/cli/repl.md","lastUpdated":null}'),i={name:"modules/cli/repl.md"};function p(l,a,o,r,c,h){return n(),e("div",null,[...a[0]||(a[0]=[t(`

REPL ​

Vix CLI includes a built-in REPL (Read-Eval-Print Loop).

It allows you to:

  • Evaluate expressions
  • Test small logic
  • Work with variables
  • Inspect JSON-like objects
  • Explore the environment quickly

Start the REPL ​

bash
vix

Example output:

Vix.cpp v1.x.x (CLI) — Modern C++ backend runtime
+import{_ as s,o as n,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const b=JSON.parse('{"title":"REPL","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/repl.md","filePath":"modules/cli/repl.md","lastUpdated":1770805184000}'),i={name:"modules/cli/repl.md"};function p(l,a,o,r,c,h){return n(),e("div",null,[...a[0]||(a[0]=[t(`

REPL ​

Vix CLI includes a built-in REPL (Read-Eval-Print Loop).

It allows you to:

  • Evaluate expressions
  • Test small logic
  • Work with variables
  • Inspect JSON-like objects
  • Explore the environment quickly

Start the REPL ​

bash
vix

Example output:

Vix.cpp v1.x.x (CLI) — Modern C++ backend runtime
 Exit: Ctrl+C / Ctrl+D or type exit
 >>>

Basic Math ​

You can evaluate expressions directly:

>>> 1 + 2
 3
@@ -32,4 +32,4 @@ import{_ as s,o as n,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u
 exit                    Exit REPL

History ​

>>> history
 1  1+2
 2  x=3
-3  x+1

Clear history:

>>> history clear

Behavior Notes ​

  • The REPL is stateful within a session.
  • Variables are reset when you exit.
  • Build/run commands are disabled inside REPL.
  • Designed for quick experimentation, not full application execution.

When To Use REPL ​

  • Test math logic
  • Validate JSON structures
  • Experiment with expressions
  • Debug small ideas quickly
  • Demonstrate Vix syntax interactively

The REPL is intentionally minimal and predictable.

No hidden behavior. No magic runtime state. Just explicit evaluation.

`,45)])])}const g=s(i,[["render",p]]);export{u as __pageData,g as default}; +3 x+1

Clear history:

>>> history clear

Behavior Notes ​

  • The REPL is stateful within a session.
  • Variables are reset when you exit.
  • Build/run commands are disabled inside REPL.
  • Designed for quick experimentation, not full application execution.

When To Use REPL ​

  • Test math logic
  • Validate JSON structures
  • Experiment with expressions
  • Debug small ideas quickly
  • Demonstrate Vix syntax interactively

The REPL is intentionally minimal and predictable.

No hidden behavior. No magic runtime state. Just explicit evaluation.

`,45)])])}const m=s(i,[["render",p]]);export{b as __pageData,m as default}; diff --git a/docs/assets/modules_cli_repl.md.DdLFhj6c.lean.js b/docs/assets/modules_cli_repl.md.DdLFhj6c.lean.js new file mode 100644 index 000000000..634f2d255 --- /dev/null +++ b/docs/assets/modules_cli_repl.md.DdLFhj6c.lean.js @@ -0,0 +1 @@ +import{_ as s,o as n,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const b=JSON.parse('{"title":"REPL","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/repl.md","filePath":"modules/cli/repl.md","lastUpdated":1770805184000}'),i={name:"modules/cli/repl.md"};function p(l,a,o,r,c,h){return n(),e("div",null,[...a[0]||(a[0]=[t("",45)])])}const m=s(i,[["render",p]]);export{b as __pageData,m as default}; diff --git a/docs/assets/modules_cli_commands_run.md.DWge70uW.js b/docs/assets/modules_cli_run.md.BpedUxL4.js similarity index 84% rename from docs/assets/modules_cli_commands_run.md.DWge70uW.js rename to docs/assets/modules_cli_run.md.BpedUxL4.js index 267a6e541..e0afa1c95 100644 --- a/docs/assets/modules_cli_commands_run.md.DWge70uW.js +++ b/docs/assets/modules_cli_run.md.BpedUxL4.js @@ -1,4 +1,4 @@ -import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix run","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/run.md","filePath":"modules/cli/commands/run.md","lastUpdated":null}'),t={name:"modules/cli/commands/run.md"};function p(l,s,h,o,r,d){return i(),e("div",null,[...s[0]||(s[0]=[n(`

vix run ​

Configure, build, and run a Vix.cpp application.


Usage ​

bash
vix run [name|file.cpp|manifest.vix] [options] [-- compiler/linker flags]

Modes ​

1) Project Mode ​

Runs a CMake-based project (auto-detected).

bash
vix run
+import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix run","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/run.md","filePath":"modules/cli/run.md","lastUpdated":1770806195000}'),t={name:"modules/cli/run.md"};function p(l,s,h,o,r,d){return i(),e("div",null,[...s[0]||(s[0]=[n(`

vix run ​

Configure, build, and run a Vix.cpp application.


Usage ​

bash
vix run [name|file.cpp|manifest.vix] [options] [-- compiler/linker flags]

Modes ​

1) Project Mode ​

Runs a CMake-based project (auto-detected).

bash
vix run
 vix run api
 vix run --dir ./examples/blog

2) Script Mode (.cpp) ​

Compile and run a single file.

bash
vix run main.cpp

Supports:

  • ASan / UBSan
  • Custom linker flags
  • Fast iteration

3) Manifest Mode (.vix) ​

Run using a .vix manifest.

bash
vix run api.vix

Manifest kinds:

  • script → entry = .cpp file
  • project → entry = src/main.cpp

CLI flags override manifest values.


Options ​

-d, --dir <path>              Project directory
 --preset <name>               Configure preset (default: dev-ninja)
@@ -25,4 +25,4 @@ import{_ as a,o as i,c as e,a2 as n}from"./chunks/framework.jUmBZPH5.js";const k
 VIX_LOG_LEVEL
 VIX_LOG_FORMAT
 VIX_COLOR
-VIX_STDOUT_MODE

Design Goals ​

  • One command for build + run
  • Script and project symmetry
  • Manifest support
  • Explicit runtime arguments
  • Clean logging model
  • Watch mode built-in

vix run is the main execution entry point of the Vix workflow.

`,71)])])}const g=a(t,[["render",p]]);export{k as __pageData,g as default}; +VIX_STDOUT_MODE

Design Goals ​

  • One command for build + run
  • Script and project symmetry
  • Manifest support
  • Explicit runtime arguments
  • Clean logging model
  • Watch mode built-in

vix run is the main execution entry point of the Vix workflow.

`,71)])])}const b=a(t,[["render",p]]);export{u as __pageData,b as default}; diff --git a/docs/assets/modules_cli_run.md.BpedUxL4.lean.js b/docs/assets/modules_cli_run.md.BpedUxL4.lean.js new file mode 100644 index 000000000..00207d657 --- /dev/null +++ b/docs/assets/modules_cli_run.md.BpedUxL4.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix run","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/run.md","filePath":"modules/cli/run.md","lastUpdated":1770806195000}'),t={name:"modules/cli/run.md"};function p(l,s,h,o,r,d){return i(),e("div",null,[...s[0]||(s[0]=[n("",71)])])}const b=a(t,[["render",p]]);export{u as __pageData,b as default}; diff --git a/docs/assets/modules_cli_search.md.CYhejKRR.js b/docs/assets/modules_cli_search.md.CYhejKRR.js new file mode 100644 index 000000000..10075e7ef --- /dev/null +++ b/docs/assets/modules_cli_search.md.CYhejKRR.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix search","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/search.md","filePath":"modules/cli/search.md","lastUpdated":1770806195000}'),l={name:"modules/cli/search.md"};function r(h,a,n,o,c,p){return e(),i("div",null,[...a[0]||(a[0]=[t('

vix search ​

Search packages in the local registry index (offline).


Usage ​

bash
vix search <query>

Description ​

vix search queries the local registry index.

  • Works fully offline
  • No network request required
  • Uses the locally synced registry data

Before searching for the first time, you should sync the registry.


Sync Registry ​

bash
vix registry sync

Examples ​

Search by package name:

bash
vix search tree

Search by namespace or author:

bash
vix search gaspardkirira

Behavior Notes ​

  • Results come from the local registry index.
  • If no results are found, ensure you ran vix registry sync.
  • Search is case-insensitive.

Design Goals ​

  • Fast local search
  • Offline-first dependency model
  • Deterministic package discovery

vix search is part of the Vix registry workflow.

',27)])])}const y=s(l,[["render",r]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_cli_search.md.CYhejKRR.lean.js b/docs/assets/modules_cli_search.md.CYhejKRR.lean.js new file mode 100644 index 000000000..3f92a84ef --- /dev/null +++ b/docs/assets/modules_cli_search.md.CYhejKRR.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix search","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/search.md","filePath":"modules/cli/search.md","lastUpdated":1770806195000}'),l={name:"modules/cli/search.md"};function r(h,a,n,o,c,p){return e(),i("div",null,[...a[0]||(a[0]=[t("",27)])])}const y=s(l,[["render",r]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.js b/docs/assets/modules_cli_tests.md.Coxnd4_C.js similarity index 70% rename from docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.js rename to docs/assets/modules_cli_tests.md.Coxnd4_C.js index bb473e9b4..7955b6e1b 100644 --- a/docs/assets/modules_cli_commands_tests.md.CfNsP6Qi.js +++ b/docs/assets/modules_cli_tests.md.Coxnd4_C.js @@ -1,4 +1,4 @@ -import{_ as a,o as i,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"vix tests","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/commands/tests.md","filePath":"modules/cli/commands/tests.md","lastUpdated":null}'),l={name:"modules/cli/commands/tests.md"};function n(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t(`

vix tests ​

Run project tests using CTest.


Usage ​

bash
vix tests [path] [options]

Description ​

vix tests:

  • Resolves build directory from CMakePresets.json
  • Uses the preset (default: dev-ninja)
  • Executes CTest
  • Integrates with Vix build system

It is equivalent to:

vix check --tests

But provides a cleaner developer interface.


Test Flags ​

--watch         Watch files and re-run tests on changes
+import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix tests","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/tests.md","filePath":"modules/cli/tests.md","lastUpdated":1770806195000}'),l={name:"modules/cli/tests.md"};function n(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t(`

vix tests ​

Run project tests using CTest.


Usage ​

bash
vix tests [path] [options]

Description ​

vix tests:

  • Resolves build directory from CMakePresets.json
  • Uses the preset (default: dev-ninja)
  • Executes CTest
  • Integrates with Vix build system

It is equivalent to:

vix check --tests

But provides a cleaner developer interface.


Test Flags ​

--watch         Watch files and re-run tests on changes
 --list          List tests only (ctest --show-only)
 --fail-fast     Stop on first failure
---run           Run runtime check after tests

CTest Passthrough ​

Use -- to pass raw arguments directly to CTest:

bash
vix tests -- --output-on-failure

Run specific test suite:

bash
vix tests -- --output-on-failure -R MySuite

Preset Behavior ​

  • Preset is taken from forwarded args (e.g. --preset release)
  • Default preset: dev-ninja

Example:

bash
vix tests --preset release

Examples ​

Basic run:

bash
vix tests

Watch mode:

bash
vix tests --watch

List tests:

bash
vix tests --list

Stop on first failure:

bash
vix tests --fail-fast

Run tests + runtime:

bash
vix tests --run

Specify project path:

bash
vix tests ./examples/blog

Notes ​

  • Build directory is derived from CMakePresets.json (binaryDir).
  • Other vix check options may be forwarded.
  • Designed for clean CI integration.

vix tests integrates seamlessly into the Vix development workflow.

`,45)])])}const g=a(l,[["render",n]]);export{k as __pageData,g as default}; +--run Run runtime check after tests

CTest Passthrough ​

Use -- to pass raw arguments directly to CTest:

bash
vix tests -- --output-on-failure

Run specific test suite:

bash
vix tests -- --output-on-failure -R MySuite

Preset Behavior ​

  • Preset is taken from forwarded args (e.g. --preset release)
  • Default preset: dev-ninja

Example:

bash
vix tests --preset release

Examples ​

Basic run:

bash
vix tests

Watch mode:

bash
vix tests --watch

List tests:

bash
vix tests --list

Stop on first failure:

bash
vix tests --fail-fast

Run tests + runtime:

bash
vix tests --run

Specify project path:

bash
vix tests ./examples/blog

Notes ​

  • Build directory is derived from CMakePresets.json (binaryDir).
  • Other vix check options may be forwarded.
  • Designed for clean CI integration.

vix tests integrates seamlessly into the Vix development workflow.

`,45)])])}const b=a(l,[["render",n]]);export{u as __pageData,b as default}; diff --git a/docs/assets/modules_cli_tests.md.Coxnd4_C.lean.js b/docs/assets/modules_cli_tests.md.Coxnd4_C.lean.js new file mode 100644 index 000000000..dd714ca3b --- /dev/null +++ b/docs/assets/modules_cli_tests.md.Coxnd4_C.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"vix tests","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/tests.md","filePath":"modules/cli/tests.md","lastUpdated":1770806195000}'),l={name:"modules/cli/tests.md"};function n(p,s,h,o,d,r){return i(),e("div",null,[...s[0]||(s[0]=[t("",45)])])}const b=a(l,[["render",n]]);export{u as __pageData,b as default}; diff --git a/docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.js b/docs/assets/modules_cli_verify.md.vhHUHivE.js similarity index 89% rename from docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.js rename to docs/assets/modules_cli_verify.md.vhHUHivE.js index 8a47a948a..1109c23f1 100644 --- a/docs/assets/modules_cli_packaging_verify.md.XPNTRqgM.js +++ b/docs/assets/modules_cli_verify.md.vhHUHivE.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"vix verify","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/packaging/verify.md","filePath":"modules/cli/packaging/verify.md","lastUpdated":null}'),n={name:"modules/cli/packaging/verify.md"};function h(l,i,p,k,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix verify ​

Verify a Vix package against the vix.manifest.v2 schema.


Usage ​

bash
vix verify [options]
+import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix verify","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/verify.md","filePath":"modules/cli/verify.md","lastUpdated":1770806195000}'),n={name:"modules/cli/verify.md"};function h(l,i,p,k,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

vix verify ​

Verify a Vix package against the vix.manifest.v2 schema.


Usage ​

bash
vix verify [options]
 vix verify --path <folder|artifact.vixpkg>

Description ​

vix verify validates:

  • Manifest structure (v2 schema)
  • Package integrity
  • Optional checksums (checksums.sha256)
  • Optional minisign signatures

By default, it auto-detects the package when run inside a project.


Auto-detection Rules ​

When no --path is provided:

  1. If current directory contains manifest.json → verify current directory

  2. If current directory contains CMakeLists.txt → verify latest dist/*/manifest.json

  3. If ./dist exists → verify latest dist/*/manifest.json


Options ​

bash
-p, --path <path>          Package folder or .vixpkg artifact
 --pubkey <path>            minisign public key
 --verbose                  Detailed verification output
@@ -8,4 +8,4 @@ import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
 --no-hash                  Skip checksums verification
 -h, --help                 Show help

Signature Behavior ​

  • If meta/payload.digest.minisig is missing:
    • Warning by default
    • Error with --require-signature or --strict

Public key resolution order:

  1. --pubkey
  2. VIX_MINISIGN_PUBKEY
  3. Default key locations

Exit Codes ​

0  Verification OK
 1  Verification failed

Examples ​

Verify auto-detected package:

bash
vix verify

Verbose mode:

bash
vix verify --verbose

Verify specific folder:

bash
vix verify --path ./dist/blog@1.0.0

Require signature:

bash
vix verify --require-signature

Verify archive:

bash
vix verify --path ./dist/blog@1.0.0.vixpkg

Provide public key:

bash
vix verify --pubkey ./keys/vix-pack.pub --require-signature

Using environment variable:

bash
VIX_MINISIGN_PUBKEY=./keys/vix-pack.pub vix verify --strict

Typical Workflow ​

bash
vix pack --version 1.0.0
-vix verify --require-signature

vix verify ensures package integrity and reproducible distribution.

`,46)])])}const F=s(n,[["render",h]]);export{c as __pageData,F as default}; +vix verify --require-signature

vix verify ensures package integrity and reproducible distribution.

`,46)])])}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_cli_verify.md.vhHUHivE.lean.js b/docs/assets/modules_cli_verify.md.vhHUHivE.lean.js new file mode 100644 index 000000000..ce8d45d22 --- /dev/null +++ b/docs/assets/modules_cli_verify.md.vhHUHivE.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"vix verify","description":"","frontmatter":{},"headers":[],"relativePath":"modules/cli/verify.md","filePath":"modules/cli/verify.md","lastUpdated":1770806195000}'),n={name:"modules/cli/verify.md"};function h(l,i,p,k,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",46)])])}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_error.md.VHV7LHeU.js b/docs/assets/modules_conversion_error.md.VHV7LHeU.js new file mode 100644 index 000000000..702960c4c --- /dev/null +++ b/docs/assets/modules_conversion_error.md.VHV7LHeU.js @@ -0,0 +1,67 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"ConversionError","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/error.md","filePath":"modules/conversion/error.md","lastUpdated":1771056697000}'),t={name:"modules/conversion/error.md"};function e(p,s,h,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[l(`

ConversionError ​

ConversionError is the structured, allocation-free error type used by Vix conversion APIs.

It carries:

  • a stable error code (ConversionErrorCode)
  • the original input (std::string_view)
  • an optional position hint (std::size_t)

This is designed for logs and diagnostics, not end-user UI messages.


cpp
#include <vix/conversion/ConversionError.hpp>

Namespace:

cpp
vix::conversion

ConversionErrorCode ​

cpp
enum class ConversionErrorCode : std::uint8_t
+{
+    None = 0,
+
+    // Generic
+    EmptyInput,
+    InvalidCharacter,
+    TrailingCharacters,
+
+    // Numeric
+    Overflow,
+    Underflow,
+
+    // Boolean
+    InvalidBoolean,
+
+    // Enum
+    UnknownEnumValue,
+
+    // Float
+    InvalidFloat
+};

Meaning ​

  • None: no error
  • EmptyInput: input is empty after trimming
  • InvalidCharacter: unexpected character for the target type
  • TrailingCharacters: a valid prefix was parsed but extra characters remained
  • Overflow: value is above representable range
  • Underflow: value is below representable range
  • InvalidBoolean: boolean string did not match accepted tokens
  • UnknownEnumValue: enum mapping table contains no match
  • InvalidFloat: float parsing failed (format is not a valid float)

ConversionError ​

cpp
struct ConversionError
+{
+    ConversionErrorCode code{ConversionErrorCode::None};
+    std::string_view input{};
+    std::size_t position{0};
+
+    constexpr ConversionError() = default;
+
+    constexpr ConversionError(
+        ConversionErrorCode c,
+        std::string_view in,
+        std::size_t pos = 0) noexcept
+        : code(c), input(in), position(pos)
+    {
+    }
+
+    [[nodiscard]] constexpr bool ok() const noexcept
+    {
+        return code == ConversionErrorCode::None;
+    }
+};

Fields ​

  • code: the classification of failure
  • input: the original input passed to the conversion API
  • position: optional index hint into input (0 when not applicable)

position is useful when a parser detects the exact character offset of a failure.


ok() ​

cpp
if (err.ok()) { /* no error */ }

ok() is a convenience method. It returns true only when:

cpp
err.code == ConversionErrorCode::None

to_string(ConversionErrorCode) ​

Vix provides a stable, short, non-localized string for logs:

cpp
std::string_view s = to_string(err.code);

Implementation notes:

  • Not localized
  • Not user-facing UI text
  • Intended for developer diagnostics and logs
  • Returns stable strings suitable for metrics keys and debugging

Example strings:

  • "empty input"
  • "trailing characters"
  • "numeric overflow"
  • "invalid floating-point value"

Typical Usage with expected ​

Most conversion functions return:

cpp
expected<T, ConversionError>

Example:

cpp
#include <vix/conversion/ToFloat.hpp>
+#include <vix/conversion/ConversionError.hpp>
+#include <iostream>
+
+using namespace vix::conversion;
+
+void parse_price(std::string_view input)
+{
+    auto r = to_float64(input);
+
+    if (!r)
+    {
+        const auto &e = r.error();
+        std::cout << "code: " << to_string(e.code) << "\\n";
+        std::cout << "input: " << e.input << "\\n";
+        std::cout << "pos: " << e.position << "\\n";
+        return;
+    }
+
+    std::cout << "value: " << r.value() << "\\n";
+}
+
+int main()
+{
+    parse_price("12.3abc");
+}

Design Philosophy ​

Conversion errors must be:

  • purely technical (no business logic)
  • allocation-free
  • stable and inspectable
  • easy to map into domain-level errors

ConversionError is intentionally small and predictable, so higher layers can build richer validation and user-facing messages on top.

`,45)])])}const y=i(t,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_error.md.VHV7LHeU.lean.js b/docs/assets/modules_conversion_error.md.VHV7LHeU.lean.js new file mode 100644 index 000000000..ff49f4886 --- /dev/null +++ b/docs/assets/modules_conversion_error.md.VHV7LHeU.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"ConversionError","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/error.md","filePath":"modules/conversion/error.md","lastUpdated":1771056697000}'),t={name:"modules/conversion/error.md"};function e(p,s,h,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[l("",45)])])}const y=i(t,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_expected.md.C49ixy1V.js b/docs/assets/modules_conversion_expected.md.C49ixy1V.js new file mode 100644 index 000000000..c73a21c52 --- /dev/null +++ b/docs/assets/modules_conversion_expected.md.C49ixy1V.js @@ -0,0 +1,24 @@ +import{_ as i,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"expected","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/expected.md","filePath":"modules/conversion/expected.md","lastUpdated":1771056697000}'),n={name:"modules/conversion/expected.md"};function l(p,s,h,d,r,o){return e(),a("div",null,[...s[0]||(s[0]=[t(`

expected ​

expected<T, E> is the error-handling primitive used by Vix conversion APIs.

It provides a predictable alternative to exceptions and integrates cleanly with strict parsing functions like to_int, to_float, and to_enum.

cpp
#include <vix/conversion/Expected.hpp>

Namespace:

cpp
vix::conversion

Why Vix Has Its Own expected ​

Vix conversion targets C++20, but std::expected is a C++23 feature.

This header provides a single abstraction:

  • Use std::expected when the standard library actually supports it
  • Otherwise use a small C++20 fallback that implements the minimal API Vix needs

This guarantees the same public API for conversions across toolchains and language modes.

When std::expected Is Used ​

Vix will alias std::expected only if:

  • <expected> header exists
  • The library feature macro __cpp_lib_expected is defined
  • __cpp_lib_expected >= 202202L

When those conditions are met:

cpp
template <typename T, typename E>
+using expected = std::expected<T, E>;
+
+template <typename E>
+using unexpected = std::unexpected<E>;

Otherwise, Vix uses its fallback types.

constexpr Behavior ​

In C++23 mode with std::expected, functions returning expected can be constexpr.

In fallback mode (C++20), the type is not a literal type, so constexpr would warn.

Vix standardizes this using:

cpp
#if VIX_CONVERSION_EXPECTED_IS_STD
+#define VIX_EXPECTED_CONSTEXPR constexpr
+#else
+#define VIX_EXPECTED_CONSTEXPR inline
+#endif

So conversion APIs can write:

cpp
[[nodiscard]] VIX_EXPECTED_CONSTEXPR expected<int, ConversionError>
+to_int32(std::string_view input) noexcept;

Public API Surface ​

The Vix fallback is intentionally minimal. It supports only what conversion code needs.

expected<T, E> ​

Main operations:

  • has_value()
  • operator bool()
  • value() accessors
  • error() accessors

unexpected<E> ​

Used to carry an error value:

  • error() accessors
  • make_unexpected(E) helper

Basic Usage Pattern ​

cpp
auto r = vix::conversion::to_float64("3.14");
+
+if (!r)
+{
+    // failure path
+    auto err = r.error();
+    // inspect err.code, err.input, etc.
+    return;
+}
+
+// success path
+double v = r.value();

This style is:

  • explicit
  • branch-friendly
  • exception-free
  • easy to propagate

Creating Errors with make_unexpected ​

Vix provides a helper to build unexpected<E> consistently:

cpp
return make_unexpected(ConversionError{
+    ConversionErrorCode::InvalidFloat,
+    input
+});

This works in both modes:

  • std::expected mode
  • fallback mode

Notes About the Fallback Implementation ​

The fallback expected<T, E> is implemented as:

  • A union storing either T or E
  • A boolean flag has_ that selects which member is active
  • Placement-new constructors
  • A destructor that destroys the active member
  • assert(...) guards on value() and error() access

Important behavior:

  • value() asserts that the expected holds a value
  • error() asserts that the expected holds an error

This matches the "debug-checked" style used in Vix: if you misuse the API, you get a clear assertion failure during development.

Design Philosophy ​

Vix conversion APIs are strict.

So error handling must be:

  • explicit
  • typed
  • predictable
  • portable across C++20 and C++23

expected<T, E> is the foundation that enables this style.

`,53)])])}const u=i(n,[["render",l]]);export{E as __pageData,u as default}; diff --git a/docs/assets/modules_conversion_expected.md.C49ixy1V.lean.js b/docs/assets/modules_conversion_expected.md.C49ixy1V.lean.js new file mode 100644 index 000000000..4bff87ead --- /dev/null +++ b/docs/assets/modules_conversion_expected.md.C49ixy1V.lean.js @@ -0,0 +1 @@ +import{_ as i,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"expected","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/expected.md","filePath":"modules/conversion/expected.md","lastUpdated":1771056697000}'),n={name:"modules/conversion/expected.md"};function l(p,s,h,d,r,o){return e(),a("div",null,[...s[0]||(s[0]=[t("",53)])])}const u=i(n,[["render",l]]);export{E as __pageData,u as default}; diff --git a/docs/assets/modules_conversion_guide.md.BamEiujU.js b/docs/assets/modules_conversion_guide.md.BamEiujU.js deleted file mode 100644 index 55cfd41ef..000000000 --- a/docs/assets/modules_conversion_guide.md.BamEiujU.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/guide.md","filePath":"modules/conversion/guide.md","lastUpdated":null}'),s={name:"modules/conversion/guide.md"};function a(n,r,d,c,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_conversion_guide.md.BamEiujU.lean.js b/docs/assets/modules_conversion_guide.md.BamEiujU.lean.js deleted file mode 100644 index 55cfd41ef..000000000 --- a/docs/assets/modules_conversion_guide.md.BamEiujU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/guide.md","filePath":"modules/conversion/guide.md","lastUpdated":null}'),s={name:"modules/conversion/guide.md"};function a(n,r,d,c,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_conversion_index.md.DEWhRPse.js b/docs/assets/modules_conversion_index.md.BINl9IJE.js similarity index 95% rename from docs/assets/modules_conversion_index.md.DEWhRPse.js rename to docs/assets/modules_conversion_index.md.BINl9IJE.js index 5ef034e14..6618e1fb4 100644 --- a/docs/assets/modules_conversion_index.md.DEWhRPse.js +++ b/docs/assets/modules_conversion_index.md.BINl9IJE.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Conversion","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/index.md","filePath":"modules/conversion/index.md","lastUpdated":null}'),h={name:"modules/conversion/index.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Conversion ​

The vix::conversion module provides explicit, allocation-friendly conversions between strings and common C++ types. It avoids exceptions: each conversion returns an Expected<T> that contains either a value or a ConversionError.

Include ​

cpp
#include <vix/conversion/Parse.hpp>
+import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Conversion","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/index.md","filePath":"modules/conversion/index.md","lastUpdated":1770805184000}'),h={name:"modules/conversion/index.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Conversion ​

The vix::conversion module provides explicit, allocation-friendly conversions between strings and common C++ types. It avoids exceptions: each conversion returns an Expected<T> that contains either a value or a ConversionError.

Include ​

cpp
#include <vix/conversion/Parse.hpp>
 #include <vix/conversion/ToBool.hpp>
 #include <vix/conversion/ToInt.hpp>
 #include <vix/conversion/ToFloat.hpp>
@@ -55,4 +55,4 @@ import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g
 
 if (!a) print_err(a.error());
 if (!b) print_err(b.error());
-if (!c) print_err(c.error());

Notes ​

  • Designed for explicit error handling: no exceptions required.
  • Errors include an error code, best-effort position, and the original input.
  • Prefer parse&lt;T&gt; when you want a single generic entry point.
  • Prefer to_int / to_float / to_bool / to_enum when you want explicit intent.
`,43)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; +if (!c) print_err(c.error());

Notes ​

  • Designed for explicit error handling: no exceptions required.
  • Errors include an error code, best-effort position, and the original input.
  • Prefer parse&lt;T&gt; when you want a single generic entry point.
  • Prefer to_int / to_float / to_bool / to_enum when you want explicit intent.
`,43)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_conversion_index.md.BINl9IJE.lean.js b/docs/assets/modules_conversion_index.md.BINl9IJE.lean.js new file mode 100644 index 000000000..4a3c0b46a --- /dev/null +++ b/docs/assets/modules_conversion_index.md.BINl9IJE.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Conversion","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/index.md","filePath":"modules/conversion/index.md","lastUpdated":1770805184000}'),h={name:"modules/conversion/index.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t("",43)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_conversion_index.md.DEWhRPse.lean.js b/docs/assets/modules_conversion_index.md.DEWhRPse.lean.js deleted file mode 100644 index fd1f51590..000000000 --- a/docs/assets/modules_conversion_index.md.DEWhRPse.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Conversion","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/index.md","filePath":"modules/conversion/index.md","lastUpdated":null}'),h={name:"modules/conversion/index.md"};function l(p,s,k,e,r,E){return a(),n("div",null,[...s[0]||(s[0]=[t("",43)])])}const o=i(h,[["render",l]]);export{g as __pageData,o as default}; diff --git a/docs/assets/modules_conversion_parse.md.Btbwr_6K.js b/docs/assets/modules_conversion_parse.md.Btbwr_6K.js new file mode 100644 index 000000000..9770b9fa7 --- /dev/null +++ b/docs/assets/modules_conversion_parse.md.Btbwr_6K.js @@ -0,0 +1,28 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"vix::conversion::parse","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/parse.md","filePath":"modules/conversion/parse.md","lastUpdated":1771056697000}'),t={name:"modules/conversion/parse.md"};function e(p,s,h,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[l(`

vix::conversion::parse ​

The parse API provides a strongly-typed, safe, and explicit way to convert string input into scalar C++ types.

It returns an expected<T, ConversionError> so parsing is never implicit and never throws. You always handle success and failure explicitly.

Supported Types ​

parse<T>(std::string_view) supports:

  • bool
  • Integral types (int, long, uint32_t, etc.)
  • Floating point types (float, double, etc.)

For enums, use:

  • parse_enum<T>(...)

Basic Usage ​

cpp
#include <vix/conversion/Parse.hpp>
+
+using namespace vix::conversion;
+
+void example()
+{
+    auto i = parse<int>("42");
+    auto f = parse<double>("3.14");
+    auto b = parse<bool>("true");
+
+    if (i)
+    {
+        int value = i.value();
+    }
+}

Error Handling ​

parse returns:

expected<T, ConversionError>

Always check before accessing the value:

cpp
auto result = parse<int>("abc");
+
+if (!result)
+{
+    auto err = result.error();
+    // inspect ConversionError
+}

No exceptions. No undefined behavior. Explicit failure.

Enum Parsing ​

Enums require an explicit mapping table.

cpp
enum class Mode { Dev, Prod };
+
+constexpr EnumEntry<Mode> entries[] = {
+    {"dev", Mode::Dev},
+    {"prod", Mode::Prod}
+};
+
+auto m = parse_enum<Mode>("dev", entries);

Case-insensitive matching is enabled by default.

Design Philosophy ​

  • No implicit conversions
  • No silent truncation
  • No throwing for control flow
  • Fully constexpr-compatible where possible

This makes parse suitable for:

  • CLI arguments
  • Environment variables
  • HTTP query parameters
  • Configuration files

Summary ​

vix::conversion::parse is:

  • Safe
  • Explicit
  • Predictable
  • Production-oriented

It turns text into strongly typed values without surprises.

`,28)])])}const y=i(t,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_parse.md.Btbwr_6K.lean.js b/docs/assets/modules_conversion_parse.md.Btbwr_6K.lean.js new file mode 100644 index 000000000..fbb0568b0 --- /dev/null +++ b/docs/assets/modules_conversion_parse.md.Btbwr_6K.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"vix::conversion::parse","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/parse.md","filePath":"modules/conversion/parse.md","lastUpdated":1771056697000}'),t={name:"modules/conversion/parse.md"};function e(p,s,h,k,r,E){return a(),n("div",null,[...s[0]||(s[0]=[l("",28)])])}const y=i(t,[["render",e]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_bool.md.DtoX76ig.js b/docs/assets/modules_conversion_to_bool.md.DtoX76ig.js new file mode 100644 index 000000000..693f99f4a --- /dev/null +++ b/docs/assets/modules_conversion_to_bool.md.DtoX76ig.js @@ -0,0 +1,15 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"to_bool","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_bool.md","filePath":"modules/conversion/to_bool.md","lastUpdated":1771056697000}'),l={name:"modules/conversion/to_bool.md"};function n(o,i,h,p,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

to_bool ​

Overview ​

to_bool converts a textual input into a bool value in a safe and explicit way.

It returns:

  • expected<bool, ConversionError> on success
  • A ConversionError on failure

The input is trimmed before parsing, and keyword matching is ASCII case-insensitive.


Supported Inputs ​

The following values are accepted:

True values ​

  • "true"
  • "1"
  • "yes"
  • "on"

False values ​

  • "false"
  • "0"
  • "no"
  • "off"

Matching is case-insensitive for keyword forms.


Function Signature ​

cpp
[[nodiscard]] VIX_EXPECTED_CONSTEXPR expected<bool, ConversionError>
+to_bool(std::string_view input) noexcept;

Error Handling ​

to_bool returns structured errors instead of throwing.

Possible Error Codes ​

Error CodeDescription
EmptyInputInput is empty after trimming
InvalidBooleanInput does not match any accepted value

Example Usage ​

cpp
#include <vix/conversion/ToBool.hpp>
+#include <iostream>
+
+using namespace vix::conversion;
+
+void example()
+{
+    auto v = to_bool("YES");
+
+    if (v)
+        std::cout << "Parsed value: " << (*v ? "true" : "false") << "\\n";
+    else
+        std::cout << "Error parsing boolean\\n";
+}

Implementation Notes ​

  • Input is trimmed before evaluation.
  • Comparison is ASCII case-insensitive using a lightweight internal helper.
  • No heap allocations.
  • Fully constexpr-compatible (depending on build configuration).
  • No exceptions are thrown.

Design Philosophy ​

to_bool follows Vix principles:

  • Explicit results via expected
  • No hidden conversions
  • No implicit exceptions
  • Clear, predictable behavior
`,32)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_conversion_to_bool.md.DtoX76ig.lean.js b/docs/assets/modules_conversion_to_bool.md.DtoX76ig.lean.js new file mode 100644 index 000000000..0deaa15ff --- /dev/null +++ b/docs/assets/modules_conversion_to_bool.md.DtoX76ig.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"to_bool","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_bool.md","filePath":"modules/conversion/to_bool.md","lastUpdated":1771056697000}'),l={name:"modules/conversion/to_bool.md"};function n(o,i,h,p,r,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",32)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_conversion_to_enum.md.CxUDoY24.js b/docs/assets/modules_conversion_to_enum.md.CxUDoY24.js new file mode 100644 index 000000000..2d1a2273e --- /dev/null +++ b/docs/assets/modules_conversion_to_enum.md.CxUDoY24.js @@ -0,0 +1,51 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"to_enum","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_enum.md","filePath":"modules/conversion/to_enum.md","lastUpdated":1771056697000}'),l={name:"modules/conversion/to_enum.md"};function p(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

to_enum ​

Strict enum parsing utilities for Vix.cpp.

cpp
#include <vix/conversion/ToEnum.hpp>

Namespace:

cpp
vix::conversion

Overview ​

to_enum converts string input into a strongly-typed enum value using an explicit mapping table.

Design goals:

  • No reflection
  • No magic
  • Explicit mapping
  • Predictable behavior
  • Typed error handling

You define exactly which strings map to which enum values.

EnumEntry ​

cpp
template <typename Enum>
+struct EnumEntry
+{
+    std::string_view name;
+    Enum value;
+};

Each entry maps a string name to an enum value.

Core API ​

cpp
template <typename Enum>
+expected<Enum, ConversionError>
+to_enum(
+    std::string_view input,
+    const EnumEntry<Enum>* entries,
+    std::size_t count,
+    bool case_insensitive = true) noexcept;

Constraints ​

cpp
Enum must satisfy std::is_enum_v<Enum>

Behavior ​

  • Input is ASCII-trimmed
  • Matching is exact length
  • Optional ASCII case-insensitive comparison
  • First matching entry wins
  • Entire input must match an entry name

Error Handling ​

Return type:

cpp
expected<Enum, ConversionError>

Possible error codes:

  • EmptyInput
  • UnknownEnumValue

Example ​

cpp
#include <vix/conversion/ToEnum.hpp>
+#include <iostream>
+
+using namespace vix::conversion;
+
+enum class Role
+{
+    Admin,
+    User,
+    Guest
+};
+
+static constexpr EnumEntry<Role> roles[] = {
+    {"admin", Role::Admin},
+    {"user",  Role::User},
+    {"guest", Role::Guest}
+};
+
+void parse_role(std::string_view input)
+{
+    auto r = to_enum(input, roles);
+
+    if (!r)
+    {
+        std::cout << "Invalid role\\n";
+        return;
+    }
+
+    std::cout << "Parsed successfully\\n";
+}
+
+int main()
+{
+    parse_role("Admin");
+}

Static Array Overload ​

You can use the overload that deduces the array size automatically:

cpp
template <typename Enum, std::size_t N>
+expected<Enum, ConversionError>
+to_enum(
+    std::string_view input,
+    const EnumEntry<Enum>(&entries)[N],
+    bool case_insensitive = true) noexcept;

No need to manually pass the count.

Case Sensitivity ​

By default:

cpp
case_insensitive = true

To require strict case matching:

cpp
auto r = to_enum(input, roles, false);

Why Explicit Mapping? ​

C++ has no built-in reflection for enums.

Instead of relying on macros or unsafe tricks, Vix uses:

  • Compile-time tables
  • Explicit string definitions
  • Deterministic matching
  • Clear error reporting

You control the mapping fully.

Design Philosophy ​

Enum parsing should be:

  • Explicit
  • Safe
  • Deterministic
  • Transparent

No hidden global registry.
No implicit stringification.
No undefined behavior.

Just predictable enum conversion.

`,46)])])}const y=i(l,[["render",p]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_enum.md.CxUDoY24.lean.js b/docs/assets/modules_conversion_to_enum.md.CxUDoY24.lean.js new file mode 100644 index 000000000..111ed87fb --- /dev/null +++ b/docs/assets/modules_conversion_to_enum.md.CxUDoY24.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"to_enum","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_enum.md","filePath":"modules/conversion/to_enum.md","lastUpdated":1771056697000}'),l={name:"modules/conversion/to_enum.md"};function p(e,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",46)])])}const y=i(l,[["render",p]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.js b/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.js new file mode 100644 index 000000000..6e59382fa --- /dev/null +++ b/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.js @@ -0,0 +1,31 @@ +import{_ as i,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"to_float","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_float.md","filePath":"modules/conversion/to_float.md","lastUpdated":1771056697000}'),n={name:"modules/conversion/to_float.md"};function e(p,s,h,k,r,o){return a(),t("div",null,[...s[0]||(s[0]=[l(`

to_float ​

Strict floating-point parsing utilities for Vix.cpp.

cpp
#include <vix/conversion/ToFloat.hpp>

Namespace:

cpp
vix::conversion

Overview ​

to_float provides strict, predictable, no-magic floating-point parsing.

It is designed for:

  • Deterministic behavior
  • Explicit error handling
  • No silent truncation
  • No partial parsing surprises

Unlike std::stof / std::stod, it:

  • Trims ASCII whitespace
  • Requires the entire input to be consumed
  • Detects overflow and underflow
  • Returns expected<T, ConversionError>

Template API ​

cpp
template <typename Float>
+expected<Float, ConversionError>
+to_float(std::string_view input) noexcept;

Constraints ​

cpp
Float must satisfy std::is_floating_point_v<Float>

Supported Formats ​

  • Decimal notation: 123.45
  • Integer form: 42
  • Scientific notation: 1.23e10, 4.5E-3
  • Leading / trailing ASCII whitespace allowed

Example:

cpp
auto r = to_float<double>("  3.1415  ");

Strict Rules ​

  1. Input is ASCII-trimmed.
  2. The entire trimmed input must represent a valid number.
  3. No trailing characters allowed.
  4. Overflow and underflow are detected.
  5. Errors are explicit and typed.

Error Handling ​

Return type:

cpp
expected<Float, ConversionError>

Possible error codes:

  • EmptyInput
  • InvalidFloat
  • TrailingCharacters
  • Overflow
  • Underflow

Example:

cpp
auto r = to_float<double>("12.3abc");
+
+if (!r) {
+    std::cout << r.error().message();
+}

Convenience Wrappers ​

to_float32 ​

cpp
expected<float, ConversionError>
+to_float32(std::string_view input);

to_float64 ​

cpp
expected<double, ConversionError>
+to_float64(std::string_view input);

to_float80 ​

cpp
expected<long double, ConversionError>
+to_float80(std::string_view input);

Note: actual precision of long double depends on platform ABI.

Example: Safe Parsing ​

cpp
#include <vix/conversion/ToFloat.hpp>
+#include <iostream>
+
+using namespace vix::conversion;
+
+void parse_example()
+{
+    auto r = to_float64("2.5e3");
+
+    if (!r)
+    {
+        std::cout << "Error: " << r.error().message() << "\\n";
+        return;
+    }
+
+    std::cout << "Value: " << r.value() << "\\n";
+}
+
+int main()
+{
+    parse_example();
+}

Comparison with std::stod ​

Feature std::stod vix::conversion::to_float


Throws exceptions Yes No Partial parsing allowed Yes No Typed error codes No Yes Strict full consumption No Yes Overflow detection Partial Explicit Predictable behavior No Yes

Design Philosophy ​

Floating point parsing should be:

  • Explicit
  • Safe
  • Strict
  • Observable

No hidden behavior.
No silent acceptance of invalid input.
No exception-driven control flow.

Just predictable conversion.

`,48)])])}const y=i(n,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.lean.js b/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.lean.js new file mode 100644 index 000000000..4db3ce4a9 --- /dev/null +++ b/docs/assets/modules_conversion_to_float.md.DqU7Fpyb.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"to_float","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_float.md","filePath":"modules/conversion/to_float.md","lastUpdated":1771056697000}'),n={name:"modules/conversion/to_float.md"};function e(p,s,h,k,r,o){return a(),t("div",null,[...s[0]||(s[0]=[l("",48)])])}const y=i(n,[["render",e]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_int.md.COFqEJde.js b/docs/assets/modules_conversion_to_int.md.COFqEJde.js new file mode 100644 index 000000000..fb2f047e5 --- /dev/null +++ b/docs/assets/modules_conversion_to_int.md.COFqEJde.js @@ -0,0 +1,64 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"to_int","description":"","frontmatter":{"title":"to_int"},"headers":[],"relativePath":"modules/conversion/to_int.md","filePath":"modules/conversion/to_int.md","lastUpdated":1771056697000}'),h={name:"modules/conversion/to_int.md"};function l(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

to_int ​

to_int parses a base-10 integer from a string, with strict validation and overflow checks.

It is part of vix::conversion and returns an expected<T, ConversionError>.

cpp
#include <vix/conversion/ToInt.hpp>

What it does ​

Rules implemented by to_int<T>():

  • Input is ASCII-trimmed (leading and trailing whitespace removed)
  • Optional leading + or -
  • At least one digit is required
  • The entire trimmed input must be numeric (no trailing characters)
  • Overflow and underflow are detected for the target type

API ​

Generic parser ​

cpp
template <typename Int>
+expected<Int, ConversionError> to_int(std::string_view input) noexcept;

Constraints:

  • Int must be an integral type (std::is_integral_v<Int>)

Convenience helpers ​

cpp
expected<int,        ConversionError> to_int32 (std::string_view input) noexcept;
+expected<std::int64_t, ConversionError> to_int64 (std::string_view input) noexcept;
+
+expected<unsigned,      ConversionError> to_uint32(std::string_view input) noexcept;
+expected<std::uint64_t, ConversionError> to_uint64(std::string_view input) noexcept;

Error behavior ​

On failure, to_int returns make_unexpected(ConversionError{...}).

Typical error codes:

  • EmptyInput if the trimmed input is empty
  • InvalidCharacter if a non-digit appears where a digit is expected
  • TrailingCharacters if extra characters remain after the number
  • Overflow or Underflow if the value does not fit the target type

Note: the parser uses the trimmed view to parse, but preserves the original input inside the returned ConversionError to improve diagnostics upstream.

Examples ​

Parse signed integer ​

cpp
#include <vix/conversion/ToInt.hpp>
+#include <iostream>
+
+using vix::conversion::to_int;
+
+void example_basic()
+{
+  auto r = to_int<int>("  -42  ");
+  if (!r)
+  {
+    std::cout << "error: " << r.error().message() << "\\n";
+    return;
+  }
+
+  std::cout << "value: " << r.value() << "\\n";
+}

Reject trailing characters ​

cpp
#include <vix/conversion/ToInt.hpp>
+#include <iostream>
+
+using vix::conversion::to_int;
+
+void example_trailing()
+{
+  auto r = to_int<int>("12px");
+  if (!r)
+  {
+    // TrailingCharacters
+    std::cout << r.error().message() << "\\n";
+    return;
+  }
+}

Parse unsigned integer ​

cpp
#include <vix/conversion/ToInt.hpp>
+#include <iostream>
+
+using vix::conversion::to_uint64;
+
+void example_unsigned()
+{
+  auto r = to_uint64("18446744073709551615");
+  if (!r)
+  {
+    std::cout << "error: " << r.error().message() << "\\n";
+    return;
+  }
+
+  std::cout << "value: " << r.value() << "\\n";
+}

Overflow detection ​

cpp
#include <vix/conversion/ToInt.hpp>
+#include <iostream>
+
+using vix::conversion::to_int32;
+
+void example_overflow()
+{
+  auto r = to_int32("999999999999");
+  if (!r)
+  {
+    // Overflow
+    std::cout << r.error().message() << "\\n";
+    return;
+  }
+}

Tips ​

  • Prefer the typed helpers (to_int32, to_uint64, etc.) when your intent is fixed.
  • If you need different bases (hex, octal) or relaxed parsing, implement a separate parser to keep this one strict and predictable.
`,31)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_conversion_to_int.md.COFqEJde.lean.js b/docs/assets/modules_conversion_to_int.md.COFqEJde.lean.js new file mode 100644 index 000000000..55d110ce8 --- /dev/null +++ b/docs/assets/modules_conversion_to_int.md.COFqEJde.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"to_int","description":"","frontmatter":{"title":"to_int"},"headers":[],"relativePath":"modules/conversion/to_int.md","filePath":"modules/conversion/to_int.md","lastUpdated":1771056697000}'),h={name:"modules/conversion/to_int.md"};function l(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",31)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_conversion_to_string.md.BG3HJ06l.js b/docs/assets/modules_conversion_to_string.md.BG3HJ06l.js new file mode 100644 index 000000000..3bf4a4c23 --- /dev/null +++ b/docs/assets/modules_conversion_to_string.md.BG3HJ06l.js @@ -0,0 +1,16 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"to_string","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_string.md","filePath":"modules/conversion/to_string.md","lastUpdated":1771056697000}'),e={name:"modules/conversion/to_string.md"};function l(h,s,p,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[t(`

to_string ​

Header: <vix/conversion/ToString.hpp>

The to_string utilities convert strongly typed values into textual representations using fast, allocation-aware formatting.

The API returns:

expected<std::string, ConversionError>

This keeps conversion explicit and failure-aware.


Integral Types ​

cpp
auto r = to_string(42);
+if (r) {
+    std::string s = r.value(); // "42"
+}

Characteristics:

  • Uses std::to_chars
  • Base 10 formatting
  • No heap allocation during formatting (only final string construction)
  • bool is excluded from this overload

Floating Point Types ​

cpp
auto r = to_string(3.14159);
+if (r) {
+    std::string s = r.value();
+}

Notes:

  • Uses std::to_chars
  • Returns InvalidFloat on formatting failure

Boolean ​

cpp
auto r1 = to_string(true);   // "true"
+auto r2 = to_string(false);  // "false"

Always succeeds.


Enum Conversion (Mapping Table) ​

cpp
enum class Color { Red, Green, Blue };
+
+constexpr EnumEntry<Color> entries[] = {
+    {"red", Color::Red},
+    {"green", Color::Green},
+    {"blue", Color::Blue}
+};
+
+auto r = to_string(Color::Green, entries);

If the enum value is not found, returns:

ConversionErrorCode::UnknownEnumValue

Design Notes ​

  • Explicit failure reporting
  • No exceptions
  • Predictable formatting behavior
  • Strongly typed enum mapping
`,28)])])}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_conversion_to_string.md.BG3HJ06l.lean.js b/docs/assets/modules_conversion_to_string.md.BG3HJ06l.lean.js new file mode 100644 index 000000000..34f4ea5e3 --- /dev/null +++ b/docs/assets/modules_conversion_to_string.md.BG3HJ06l.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"to_string","description":"","frontmatter":{},"headers":[],"relativePath":"modules/conversion/to_string.md","filePath":"modules/conversion/to_string.md","lastUpdated":1771056697000}'),e={name:"modules/conversion/to_string.md"};function l(h,s,p,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[t("",28)])])}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_core_api.md.BbsUZ1SP.lean.js b/docs/assets/modules_core_api.md.BbsUZ1SP.lean.js deleted file mode 100644 index 03c1c6d62..000000000 --- a/docs/assets/modules_core_api.md.BbsUZ1SP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/api.md","filePath":"modules/core/api.md","lastUpdated":null}'),p={name:"modules/core/api.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_guide.md.4tll-nJ1.js b/docs/assets/modules_core_api.md.LouFtZGp.js similarity index 96% rename from docs/assets/modules_core_guide.md.4tll-nJ1.js rename to docs/assets/modules_core_api.md.LouFtZGp.js index 44305e77c..8f1ff471c 100644 --- a/docs/assets/modules_core_guide.md.4tll-nJ1.js +++ b/docs/assets/modules_core_api.md.LouFtZGp.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/guide.md","filePath":"modules/core/guide.md","lastUpdated":null}'),p={name:"modules/core/guide.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

HTTP ​

Vix gives you explicit control over the HTTP layer.

You control:

  • Status codes
  • Headers
  • Body
  • Content type

Nothing is hidden.


Setting status codes ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/api.md","filePath":"modules/core/api.md","lastUpdated":1770805184000}'),p={name:"modules/core/api.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

HTTP ​

Vix gives you explicit control over the HTTP layer.

You control:

  • Status codes
  • Headers
  • Body
  • Content type

Nothing is hidden.


Setting status codes ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -121,4 +121,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   });
 
   app.run(8080);
-}

Content behavior rule ​

  • res.send() sends raw content
  • res.json() sets JSON content type automatically
  • res.status() controls HTTP status
  • res.set_header() sets custom headers

Everything is explicit.

`,32)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; +}

Content behavior rule ​

  • res.send() sends raw content
  • res.json() sets JSON content type automatically
  • res.status() controls HTTP status
  • res.set_header() sets custom headers

Everything is explicit.

`,32)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_core_api.md.LouFtZGp.lean.js b/docs/assets/modules_core_api.md.LouFtZGp.lean.js new file mode 100644 index 000000000..5fa526a1d --- /dev/null +++ b/docs/assets/modules_core_api.md.LouFtZGp.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/api.md","filePath":"modules/core/api.md","lastUpdated":1770805184000}'),p={name:"modules/core/api.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_core_app.md.C1supGhj.lean.js b/docs/assets/modules_core_app.md.C1supGhj.lean.js deleted file mode 100644 index c26142626..000000000 --- a/docs/assets/modules_core_app.md.C1supGhj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"App","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/app.md","filePath":"modules/core/app.md","lastUpdated":null}'),t={name:"modules/core/app.md"};function p(h,s,l,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[e("",79)])])}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_core_app.md.C1supGhj.js b/docs/assets/modules_core_app.md.TkIlM-6q.js similarity index 95% rename from docs/assets/modules_core_app.md.C1supGhj.js rename to docs/assets/modules_core_app.md.TkIlM-6q.js index b73422cdb..739f2e6c8 100644 --- a/docs/assets/modules_core_app.md.C1supGhj.js +++ b/docs/assets/modules_core_app.md.TkIlM-6q.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"App","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/app.md","filePath":"modules/core/app.md","lastUpdated":null}'),t={name:"modules/core/app.md"};function p(h,s,l,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[e(`

App ​

vix::App is the main entry point for building an HTTP server with Vix.

It owns and wires together:

  • Router (routes, middleware, groups)
  • HTTP server (listen loop, request dispatch)
  • Execution context (executor used to run handlers)

Quick Start ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/app.md","filePath":"modules/core/app.md","lastUpdated":1770832828000}'),t={name:"modules/core/app.md"};function p(h,s,l,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[e(`

vix::App is the main entry point for building an HTTP server with Vix.

It owns and wires together:

  • Router (routes, middleware, groups)
  • HTTP server (listen loop, request dispatch)
  • Execution context (executor used to run handlers)

Quick Start ​

cpp
#include <vix.hpp>
 using namespace vix;
 
 int main()
@@ -48,4 +48,4 @@ import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const o
 }

Executor and Concurrency ​

Handlers are executed using an IExecutor.

  • Default executor is provided by the runtime.
  • Advanced users can inject a custom executor:
cpp
auto exec = std::make_shared<MyExecutor>();
 App app(exec);

The executor is shared by the HTTP server and used to run request handlers.


Signal-safe Stop ​

request_stop_from_signal() is designed for SIGINT/SIGTERM handlers.

It only sets flags and avoids heavy work, to remain safe in a signal context.


Introspection ​

server_ready_info() returns the last ready info captured when binding succeeded. This is useful when binding to port 0 (ephemeral port).

cpp
app.listen_port(0, [](int bound){
   vix::console.info("bound port:", bound);
-});

Notes ​

  • App is non-copyable and non-movable.
  • An OPTIONS route is automatically ensured for each non-OPTIONS route path.
  • Middleware chains are collected per path and executed in order before the final handler.
`,79)])])}const c=i(t,[["render",p]]);export{o as __pageData,c as default}; +});

Notes ​

  • App is non-copyable and non-movable.
  • An OPTIONS route is automatically ensured for each non-OPTIONS route path.
  • Middleware chains are collected per path and executed in order before the final handler.
`,78)])])}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_app.md.TkIlM-6q.lean.js b/docs/assets/modules_core_app.md.TkIlM-6q.lean.js new file mode 100644 index 000000000..46082a88a --- /dev/null +++ b/docs/assets/modules_core_app.md.TkIlM-6q.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/app.md","filePath":"modules/core/app.md","lastUpdated":1770832828000}'),t={name:"modules/core/app.md"};function p(h,s,l,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[e("",78)])])}const y=i(t,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_config.md.B1mOmTE3.lean.js b/docs/assets/modules_core_config.md.B1mOmTE3.lean.js deleted file mode 100644 index 3762b52ea..000000000 --- a/docs/assets/modules_core_config.md.B1mOmTE3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/config.md","filePath":"modules/core/config.md","lastUpdated":null}'),e={name:"modules/core/config.md"};function l(h,s,p,k,o,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",61)])])}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_core_config.md.B1mOmTE3.js b/docs/assets/modules_core_config.md.B2U8OuTc.js similarity index 88% rename from docs/assets/modules_core_config.md.B1mOmTE3.js rename to docs/assets/modules_core_config.md.B2U8OuTc.js index ccd1a3350..695716c3c 100644 --- a/docs/assets/modules_core_config.md.B1mOmTE3.js +++ b/docs/assets/modules_core_config.md.B2U8OuTc.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/config.md","filePath":"modules/core/config.md","lastUpdated":null}'),e={name:"modules/core/config.md"};function l(h,s,p,k,o,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Configuration ​

The vix::config::Config class loads a JSON file and provides safe, typed accessors. It is designed for:

  • JSON config files
  • Dot-path access (server.port, database.default.host, etc.)
  • Defaults on missing or invalid values
  • One-time load at startup
  • Optional environment override (example: DB_PASSWORD)

Include:

cpp
#include <vix/config/Config.hpp>

Namespace:

cpp
using vix::config::Config;

1. Config file format ​

Vix config is JSON. Nested objects are accessed via dot paths.

Example config/config.json:

json
{
+import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/config.md","filePath":"modules/core/config.md","lastUpdated":1770805184000}'),e={name:"modules/core/config.md"};function l(h,s,p,k,o,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Configuration ​

The vix::config::Config class loads a JSON file and provides safe, typed accessors. It is designed for:

  • JSON config files
  • Dot-path access (server.port, database.default.host, etc.)
  • Defaults on missing or invalid values
  • One-time load at startup
  • Optional environment override (example: DB_PASSWORD)

Include:

cpp
#include <vix/config/Config.hpp>

Namespace:

cpp
using vix::config::Config;

1. Config file format ​

Vix config is JSON. Nested objects are accessed via dot paths.

Example config/config.json:

json
{
   "server": {
     "port": 8080,
     "request_timeout": 2000,
@@ -43,4 +43,4 @@ import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.jUmBZPH5.js";const E
   // configure async logger
 }

6. Environment override (DB password) ​

Database password can be provided via environment variable:

  • DB_PASSWORD

getDbPasswordFromEnv() returns:

  • DB_PASSWORD if set
  • otherwise the config value

Example pattern:

cpp
auto& cfg = Config::getInstance("config/config.json");
 
-std::string db_pass = cfg.getDbPasswordFromEnv();

This keeps secrets out of files.


7. Defaults and validation behavior ​

Important behavior from the implementation:

  • Missing file: uses defaults (no crash)
  • Missing key: returns your default
  • Wrong type: best-effort parse (example: string to int via stoi), otherwise default
  • setServerPort(port) validates range (0 or 1024..65535)

Best practices ​

  • Load config once at startup.
  • Always pass defaults to getInt/getBool/getString.
  • Keep secrets in environment variables (example: DB_PASSWORD).
  • Validate critical settings at boot (ports, timeouts, limits).
  • Avoid reading config per request.

Configuration should be stable and deterministic after startup.

`,61)])])}const g=i(e,[["render",l]]);export{E as __pageData,g as default}; +std::string db_pass = cfg.getDbPasswordFromEnv();

This keeps secrets out of files.


7. Defaults and validation behavior ​

Important behavior from the implementation:

  • Missing file: uses defaults (no crash)
  • Missing key: returns your default
  • Wrong type: best-effort parse (example: string to int via stoi), otherwise default
  • setServerPort(port) validates range (0 or 1024..65535)

Best practices ​

  • Load config once at startup.
  • Always pass defaults to getInt/getBool/getString.
  • Keep secrets in environment variables (example: DB_PASSWORD).
  • Validate critical settings at boot (ports, timeouts, limits).
  • Avoid reading config per request.

Configuration should be stable and deterministic after startup.

`,61)])])}const u=i(e,[["render",l]]);export{c as __pageData,u as default}; diff --git a/docs/assets/modules_core_config.md.B2U8OuTc.lean.js b/docs/assets/modules_core_config.md.B2U8OuTc.lean.js new file mode 100644 index 000000000..e726839d2 --- /dev/null +++ b/docs/assets/modules_core_config.md.B2U8OuTc.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/config.md","filePath":"modules/core/config.md","lastUpdated":1770805184000}'),e={name:"modules/core/config.md"};function l(h,s,p,k,o,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",61)])])}const u=i(e,[["render",l]]);export{c as __pageData,u as default}; diff --git a/docs/assets/modules_core_console.md.CydlS58g.js b/docs/assets/modules_core_console.md.CifUgNpe.js similarity index 82% rename from docs/assets/modules_core_console.md.CydlS58g.js rename to docs/assets/modules_core_console.md.CifUgNpe.js index 9ff65973b..a9212ebab 100644 --- a/docs/assets/modules_core_console.md.CydlS58g.js +++ b/docs/assets/modules_core_console.md.CifUgNpe.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as s,a2 as o}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"Vix Console (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/console.md","filePath":"modules/core/console.md","lastUpdated":null}'),l={name:"modules/core/console.md"};function n(t,e,r,d,c,h){return a(),s("div",null,[...e[0]||(e[0]=[o(`

Vix Console (core) ​

Vix Console is a Node.js-like runtime console designed for developer-facing output: quick feedback, local debugging, and lightweight observability during development.

It is intentionally not a production logger. For structured logs, persistence, ingestion, and production-grade pipelines, use vix::utils::Logger (modules/utils).


Goals (what Vix Console guarantees) ​

Vix Console is built around a “Dev-proof / Node-like trust contract”:

  • Zero-config: usable immediately after #include <vix/console.hpp>.
  • Node-like DX: log/info/warn/error/debug with familiar semantics.
  • Safe defaults:
    • Default level = info
    • debug is OFF by default
    • warn/error → stderr
    • log/info/debug → stdout
  • Stable behavior:
    • Environment variables are read once (startup / first use).
    • No “magical reconfiguration” mid-execution.
  • Performance-safe:
    • If a level is filtered, the call is near-zero cost (no formatting, no timestamp, no lock, no I/O).
  • Thread-safe, readable output:
    • Each call emits one atomic line (no interleaving between threads).
  • Minimalism:
    • No files, no JSON by default, no heavy dependencies.

Non-goals (what it is not) ​

Vix Console does not aim to:

  • be a production logging system
  • write to files
  • provide JSON/KV structured output by default
  • integrate with ingestion pipelines (ELK, OpenTelemetry, etc.)
  • guarantee non-blocking I/O under all environments
  • replace or compete with vix::utils::Logger

What Vix Console is NOT (by design) ​

Vix Console intentionally does not replicate the full JavaScript console.* API such as console.table, console.group, console.time, or console.count.

Those features require shared mutable state, heavy formatting, or implicit timing, which are unsafe or unpredictable in a multi-threaded C++ runtime.

For advanced debugging, structured output, performance analysis, or production-grade instrumentation, use vix::utils::Logger instead.


Quick start ​

cpp
#include <vix/console.hpp>
+import{_ as i,o as a,c as s,a as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"Vix Console (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/console.md","filePath":"modules/core/console.md","lastUpdated":1770805184000}'),l={name:"modules/core/console.md"};function t(n,e,r,d,c,h){return a(),s("div",null,[...e[0]||(e[0]=[o(`

Vix Console (core) ​

Vix Console is a Node.js-like runtime console designed for developer-facing output: quick feedback, local debugging, and lightweight observability during development.

It is intentionally not a production logger. For structured logs, persistence, ingestion, and production-grade pipelines, use vix::utils::Logger (modules/utils).


Goals (what Vix Console guarantees) ​

Vix Console is built around a “Dev-proof / Node-like trust contract”:

  • Zero-config: usable immediately after #include <vix/console.hpp>.
  • Node-like DX: log/info/warn/error/debug with familiar semantics.
  • Safe defaults:
    • Default level = info
    • debug is OFF by default
    • warn/error → stderr
    • log/info/debug → stdout
  • Stable behavior:
    • Environment variables are read once (startup / first use).
    • No “magical reconfiguration” mid-execution.
  • Performance-safe:
    • If a level is filtered, the call is near-zero cost (no formatting, no timestamp, no lock, no I/O).
  • Thread-safe, readable output:
    • Each call emits one atomic line (no interleaving between threads).
  • Minimalism:
    • No files, no JSON by default, no heavy dependencies.

Non-goals (what it is not) ​

Vix Console does not aim to:

  • be a production logging system
  • write to files
  • provide JSON/KV structured output by default
  • integrate with ingestion pipelines (ELK, OpenTelemetry, etc.)
  • guarantee non-blocking I/O under all environments
  • replace or compete with vix::utils::Logger

What Vix Console is NOT (by design) ​

Vix Console intentionally does not replicate the full JavaScript console.* API such as console.table, console.group, console.time, or console.count.

Those features require shared mutable state, heavy formatting, or implicit timing, which are unsafe or unpredictable in a multi-threaded C++ runtime.

For advanced debugging, structured output, performance analysis, or production-grade instrumentation, use vix::utils::Logger instead.


Quick start ​

cpp
#include <vix/console.hpp>
 using namespace vix;
 
 int main() {
@@ -15,4 +15,4 @@ import{_ as i,o as a,c as s,a2 as o}from"./chunks/framework.jUmBZPH5.js";const u
 VIX_CONSOLE_LEVEL=off   ./app

Stability rule: environment is read once (startup / first use). Changing environment variables during runtime must not cause “mid-flight” behavior changes.

Color control ​

Vix Console follows widely adopted conventions:

  • NO_COLOR If set, colors are disabled unconditionally.
  • VIX_COLOR=auto|always|never
    • auto (default): colors only when writing to a TTY
    • always: force colors
    • never: disable colors

Notes:

  • When output is piped to files / CI log collectors, auto typically disables colors to preserve readability.

Performance model (critical contract) ​

The golden rule ​

If a level is filtered, the call is near-zero cost.

When a level is disabled (example: debug off by default), Vix Console guarantees:

  • no message construction
  • no heap allocation
  • no concatenation
  • no formatting stream (ostringstream)
  • no timestamp generation
  • no lock acquisition
  • no I/O

This is the primary reason developers can safely leave console.debug(...) in code paths without fearing “silent performance cliffs”.

Practical guidance ​

  • console.debug(...) is designed to be “almost free” when disabled.
  • console.info/log(...) in hot loops can still be expensive because:
    • it performs I/O
    • it may lock
    • output sinks can block (pipes, collectors)

For performance-sensitive paths, keep high-frequency logging behind explicit guards or prefer dedicated telemetry mechanisms.


Thread safety and atomic lines ​

Guarantee ​

Each call to console.* emits a single atomic line, preventing log interleaving across threads.

This improves readability in multi-threaded servers and avoids partial line corruption.

Implication ​

  • A mutex is used internally.
  • The mutex duration is minimized by building the line outside the lock when possible.

I/O behavior and constraints (important) ​

Best-effort I/O ​

stdout and stderr are inherently environment-dependent:

  • In TTY: typically buffered lightly
  • In pipes / Docker / CI / journald: may be buffered differently and can block
  • In overloaded collectors: can become slow

Vix Console follows a best-effort approach:

  • avoids aggressive flushing by default
  • writes one line at a time to reduce interleaving
  • remains no-throw and never crashes an app intentionally

Flush policy ​

Flushing after every line can create a severe performance cliff.

Default policy:

  • No flush per line (to avoid synchronous penalties)
  • Optional flush may be applied for error only (implementation-dependent) to increase visibility before crashes

Ordering guarantees ​

  • Ordering is guaranteed within the same stream:
    • stdout lines preserve order relative to other stdout lines
    • stderr lines preserve order relative to other stderr lines
  • Ordering between stdout and stderr is not guaranteed due to independent buffering and collectors.

If strict ordering is required, route everything to one stream (or use a production logger with ordering semantics).


Anti-spam protection (dev-proof) ​

Why it exists ​

Many developers coming from Node.js/Python/PHP will naturally write:

cpp
using namespace vix;
 while (...) {
   console.log("tick");
-}

In C++ server workloads, this can destroy throughput.

Policy ​

Vix Console may apply a minimal rate limit for log/info when volume becomes abnormal.

  • Affected: log, info
  • Not affected: warn, error (never suppressed)
  • Behavior when active:
    • excessive log/info lines are suppressed
    • at most once per second, Vix Console prints a summary line:

Example:

HH:MM:SS [warn] (console) suppressed 153 log/info lines (rate limit)

This preserves performance and signals misuse without turning console into a full logger.


Reliability notes (crash/shutdown) ​

  • Vix Console is no-throw (it must never throw exceptions).
  • In a hard crash (SIGKILL, power loss, abrupt termination), some output can be lost.
  • error lines may be more likely to be visible depending on the environment and flush policy.

Good ​

  • quick startup messages
  • “what’s happening” output in dev mode
  • warnings about deprecated APIs or unexpected states
  • error reporting when a subsystem fails

Avoid ​

  • high-frequency logs in hot loops
  • using console as an audit trail
  • using console for production observability pipelines

If your needs include retention, filtering, sampling, structured fields, or ingestion, switch to vix::utils::Logger. If you find yourself wanting tables, counters, timers, or grouped output, this is a signal to switch from vix::console to vix::utils::Logger.


Integration ​

Include ​

Use:

cpp
#include <vix/console.hpp>

This exposes the global singleton:

cpp
vix::console

Umbrella headers ​

Vix may also include console in higher-level umbrella headers (e.g., core.hpp / vix.hpp) to make it available by default in Vix applications.


FAQ ​

Is Vix Console asynchronous? ​

No. Console output is fundamentally I/O-bound and depends on the output sink. Vix Console minimizes overhead and avoids flush cliffs, but it does not attempt to make stdout/stderr non-blocking “by magic”.

Why not auto-enable debug by default? ​

Because it would be a silent performance hazard in production-like workloads. The default (info) preserves developer signal while protecting runtime performance.

Why not structured JSON by default? ​

Because console is meant to be minimal and stable across environments. Production logging and structured pipelines belong to vix::utils::Logger.


Summary ​

Vix Console provides a safe, stable, zero-config, Node-like console designed for runtime/dev usage:

  • trusted defaults
  • filtered == near-free
  • thread-safe atomic lines
  • environment config read once
  • minimal anti-spam guardrails

For production logging, use vix::utils::Logger.

`,119)])])}const g=i(l,[["render",n]]);export{u as __pageData,g as default}; +}

In C++ server workloads, this can destroy throughput.

Policy ​

Vix Console may apply a minimal rate limit for log/info when volume becomes abnormal.

  • Affected: log, info
  • Not affected: warn, error (never suppressed)
  • Behavior when active:
    • excessive log/info lines are suppressed
    • at most once per second, Vix Console prints a summary line:

Example:

HH:MM:SS [warn] (console) suppressed 153 log/info lines (rate limit)

This preserves performance and signals misuse without turning console into a full logger.


Reliability notes (crash/shutdown) ​

  • Vix Console is no-throw (it must never throw exceptions).
  • In a hard crash (SIGKILL, power loss, abrupt termination), some output can be lost.
  • error lines may be more likely to be visible depending on the environment and flush policy.

Good ​

  • quick startup messages
  • “what’s happening” output in dev mode
  • warnings about deprecated APIs or unexpected states
  • error reporting when a subsystem fails

Avoid ​

  • high-frequency logs in hot loops
  • using console as an audit trail
  • using console for production observability pipelines

If your needs include retention, filtering, sampling, structured fields, or ingestion, switch to vix::utils::Logger. If you find yourself wanting tables, counters, timers, or grouped output, this is a signal to switch from vix::console to vix::utils::Logger.


Integration ​

Include ​

Use:

cpp
#include <vix/console.hpp>

This exposes the global singleton:

cpp
vix::console

Umbrella headers ​

Vix may also include console in higher-level umbrella headers (e.g., core.hpp / vix.hpp) to make it available by default in Vix applications.


FAQ ​

Is Vix Console asynchronous? ​

No. Console output is fundamentally I/O-bound and depends on the output sink. Vix Console minimizes overhead and avoids flush cliffs, but it does not attempt to make stdout/stderr non-blocking “by magic”.

Why not auto-enable debug by default? ​

Because it would be a silent performance hazard in production-like workloads. The default (info) preserves developer signal while protecting runtime performance.

Why not structured JSON by default? ​

Because console is meant to be minimal and stable across environments. Production logging and structured pipelines belong to vix::utils::Logger.


Summary ​

Vix Console provides a safe, stable, zero-config, Node-like console designed for runtime/dev usage:

  • trusted defaults
  • filtered == near-free
  • thread-safe atomic lines
  • environment config read once
  • minimal anti-spam guardrails

For production logging, use vix::utils::Logger.

`,119)])])}const m=i(l,[["render",t]]);export{k as __pageData,m as default}; diff --git a/docs/assets/modules_core_console.md.CifUgNpe.lean.js b/docs/assets/modules_core_console.md.CifUgNpe.lean.js new file mode 100644 index 000000000..3a7d89d32 --- /dev/null +++ b/docs/assets/modules_core_console.md.CifUgNpe.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as s,a as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"Vix Console (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/console.md","filePath":"modules/core/console.md","lastUpdated":1770805184000}'),l={name:"modules/core/console.md"};function t(n,e,r,d,c,h){return a(),s("div",null,[...e[0]||(e[0]=[o("",119)])])}const m=i(l,[["render",t]]);export{k as __pageData,m as default}; diff --git a/docs/assets/modules_core_console.md.CydlS58g.lean.js b/docs/assets/modules_core_console.md.CydlS58g.lean.js deleted file mode 100644 index ad99d6031..000000000 --- a/docs/assets/modules_core_console.md.CydlS58g.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as s,a2 as o}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"Vix Console (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/console.md","filePath":"modules/core/console.md","lastUpdated":null}'),l={name:"modules/core/console.md"};function n(t,e,r,d,c,h){return a(),s("div",null,[...e[0]||(e[0]=[o("",119)])])}const g=i(l,[["render",n]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_core_example.md.BLpJxPzf.lean.js b/docs/assets/modules_core_example.md.BLpJxPzf.lean.js deleted file mode 100644 index 3b5a49b50..000000000 --- a/docs/assets/modules_core_example.md.BLpJxPzf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Vix.cpp Examples Guide (Beginner Friendly)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/example.md","filePath":"modules/core/example.md","lastUpdated":null}'),h={name:"modules/core/example.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",84)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_example.md.BLpJxPzf.js b/docs/assets/modules_core_example.md.BOCl1fwq.js similarity index 93% rename from docs/assets/modules_core_example.md.BLpJxPzf.js rename to docs/assets/modules_core_example.md.BOCl1fwq.js index 3171deea3..4ec5794e4 100644 --- a/docs/assets/modules_core_example.md.BLpJxPzf.js +++ b/docs/assets/modules_core_example.md.BOCl1fwq.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Vix.cpp Examples Guide (Beginner Friendly)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/example.md","filePath":"modules/core/example.md","lastUpdated":null}'),h={name:"modules/core/example.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Vix.cpp Examples Guide (Beginner Friendly) ​

Welcome to Vix.cpp.

This guide is designed for developers coming from:

  • Python (FastAPI, Flask)
  • Node.js (Express)
  • Simple HTTP servers in other languages

The goal is to show you how to think in Vix.

Vix is:

  • Explicit
  • Predictable
  • No magic
  • No hidden runtime behavior
  • C++ performance with modern syntax

  1. Minimal Server (Hello World)

In Node.js (Express):

js
    app.get("/", (req, res) => {
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Vix.cpp Examples Guide (Beginner Friendly)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/example.md","filePath":"modules/core/example.md","lastUpdated":1770805184000}'),h={name:"modules/core/example.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

Vix.cpp Examples Guide (Beginner Friendly) ​

Welcome to Vix.cpp.

This guide is designed for developers coming from:

  • Python (FastAPI, Flask)
  • Node.js (Express)
  • Simple HTTP servers in other languages

The goal is to show you how to think in Vix.

Vix is:

  • Explicit
  • Predictable
  • No magic
  • No hidden runtime behavior
  • C++ performance with modern syntax

  1. Minimal Server (Hello World)

In Node.js (Express):

js
    app.get("/", (req, res) => {
         res.json({ message: "Hello" });
     });

In Vix:

cpp
#include <vix.hpp>
 
@@ -79,4 +79,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
     App app;
     register_routes(app);
     app.run(8080);
-}

Keep main() clean.


  1. Disabling Auto Docs

By default Vix can generate OpenAPI docs.

To disable:

bash
    vix run api.cpp --no-docs

Mental Model for Python / Node Developers ​

In Python or Node:

  • The runtime hides many details.
  • Middleware stacks are dynamic.
  • Garbage collection is automatic.

In Vix:

  • Everything is explicit.
  • No garbage collector.
  • No hidden async magic.
  • You control memory and execution.

This gives:

  • Lower latency
  • Higher predictability
  • Better performance under load

Where to Go Next ​

After this guide:

  • Explore Session and ThreadPool for advanced execution
  • Enable OpenAPI and test /docs
  • Add your own real API routes
  • Connect to a database
  • Deploy to production

Vix is simple at the surface. Powerful underneath.

Keep building.

`,84)])])}const y=i(h,[["render",l]]);export{g as __pageData,y as default}; +}

Keep main() clean.


  1. Disabling Auto Docs

By default Vix can generate OpenAPI docs.

To disable:

bash
    vix run api.cpp --no-docs

Mental Model for Python / Node Developers ​

In Python or Node:

  • The runtime hides many details.
  • Middleware stacks are dynamic.
  • Garbage collection is automatic.

In Vix:

  • Everything is explicit.
  • No garbage collector.
  • No hidden async magic.
  • You control memory and execution.

This gives:

  • Lower latency
  • Higher predictability
  • Better performance under load

Where to Go Next ​

After this guide:

  • Explore Session and ThreadPool for advanced execution
  • Enable OpenAPI and test /docs
  • Add your own real API routes
  • Connect to a database
  • Deploy to production

Vix is simple at the surface. Powerful underneath.

Keep building.

`,84)])])}const F=i(h,[["render",l]]);export{o as __pageData,F as default}; diff --git a/docs/assets/modules_core_example.md.BOCl1fwq.lean.js b/docs/assets/modules_core_example.md.BOCl1fwq.lean.js new file mode 100644 index 000000000..244991ca6 --- /dev/null +++ b/docs/assets/modules_core_example.md.BOCl1fwq.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Vix.cpp Examples Guide (Beginner Friendly)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/example.md","filePath":"modules/core/example.md","lastUpdated":1770805184000}'),h={name:"modules/core/example.md"};function l(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",84)])])}const F=i(h,[["render",l]]);export{o as __pageData,F as default}; diff --git a/docs/assets/modules_core_executor.md.DpwifgZB.js b/docs/assets/modules_core_executor.md.DR0MZmw1.js similarity index 90% rename from docs/assets/modules_core_executor.md.DpwifgZB.js rename to docs/assets/modules_core_executor.md.DR0MZmw1.js index c1622431f..184fb8dee 100644 --- a/docs/assets/modules_core_executor.md.DpwifgZB.js +++ b/docs/assets/modules_core_executor.md.DR0MZmw1.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Executor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/executor.md","filePath":"modules/core/executor.md","lastUpdated":null}'),n={name:"modules/core/executor.md"};function l(h,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[e(`

Executor ​

Vix uses an executor abstraction to run work outside the networking code.

The executor is responsible for:

  • accepting tasks (post)
  • exposing a lightweight metrics snapshot (metrics)
  • allowing idle synchronization (wait_idle)
  • supporting a future-based API (submit) on top of post

In the HTTP stack, the server and the App use an IExecutor to execute request handlers.


IExecutor ​

vix::executor::IExecutor is the generic task execution interface.

Core API ​

cpp
struct IExecutor
+import{_ as i,o as a,c as t,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Executor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/executor.md","filePath":"modules/core/executor.md","lastUpdated":1770805184000}'),n={name:"modules/core/executor.md"};function h(l,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[e(`

Executor ​

Vix uses an executor abstraction to run work outside the networking code.

The executor is responsible for:

  • accepting tasks (post)
  • exposing a lightweight metrics snapshot (metrics)
  • allowing idle synchronization (wait_idle)
  • supporting a future-based API (submit) on top of post

In the HTTP stack, the server and the App use an IExecutor to execute request handlers.


IExecutor ​

vix::executor::IExecutor is the generic task execution interface.

Core API ​

cpp
struct IExecutor
 {
   virtual ~IExecutor() = default;
 
@@ -30,4 +30,4 @@ import{_ as i,o as a,c as t,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c
 });

LimitedExecutor ​

limit(ex, n) builds a limited view over an executor.

cpp
auto limited = vix::executor::limit(ex, 64);
 limited.post([]{
   // work
-});

Note: the wrapper stores maxPending, but the real enforcement policy is owned by the executor implementation. The wrapper is meant to express intent and provide a consistent API surface.


How it fits in core ​

  • The HTTP server accepts connections and parses requests.
  • The router resolves a handler for the request.
  • The handler is executed via the executor.
  • This separation prevents networking threads from being blocked by user work.

Practical guidance ​

  • Keep request handlers non-blocking when possible.
  • Mark tasks that may block via TaskOptions{ .may_block = true }.
  • Use wait_idle() in tests and controlled shutdown paths.
  • Use metrics() to expose basic runtime health in dev tooling.
`,57)])])}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; +});

Note: the wrapper stores maxPending, but the real enforcement policy is owned by the executor implementation. The wrapper is meant to express intent and provide a consistent API surface.


How it fits in core ​

  • The HTTP server accepts connections and parses requests.
  • The router resolves a handler for the request.
  • The handler is executed via the executor.
  • This separation prevents networking threads from being blocked by user work.

Practical guidance ​

  • Keep request handlers non-blocking when possible.
  • Mark tasks that may block via TaskOptions{ .may_block = true }.
  • Use wait_idle() in tests and controlled shutdown paths.
  • Use metrics() to expose basic runtime health in dev tooling.
`,57)])])}const u=i(n,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_executor.md.DR0MZmw1.lean.js b/docs/assets/modules_core_executor.md.DR0MZmw1.lean.js new file mode 100644 index 000000000..73f99a3bc --- /dev/null +++ b/docs/assets/modules_core_executor.md.DR0MZmw1.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Executor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/executor.md","filePath":"modules/core/executor.md","lastUpdated":1770805184000}'),n={name:"modules/core/executor.md"};function h(l,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[e("",57)])])}const u=i(n,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_executor.md.DpwifgZB.lean.js b/docs/assets/modules_core_executor.md.DpwifgZB.lean.js deleted file mode 100644 index ce07c448d..000000000 --- a/docs/assets/modules_core_executor.md.DpwifgZB.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Executor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/executor.md","filePath":"modules/core/executor.md","lastUpdated":null}'),n={name:"modules/core/executor.md"};function l(h,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[e("",57)])])}const E=i(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/docs/assets/modules_core_experimental.md.C_DmqMFd.js b/docs/assets/modules_core_experimental.md.8MGM-V3E.js similarity index 78% rename from docs/assets/modules_core_experimental.md.C_DmqMFd.js rename to docs/assets/modules_core_experimental.md.8MGM-V3E.js index d74c6c907..1364bd1f6 100644 --- a/docs/assets/modules_core_experimental.md.C_DmqMFd.js +++ b/docs/assets/modules_core_experimental.md.8MGM-V3E.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Experimental: ThreadPoolExecutor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/experimental.md","filePath":"modules/core/experimental.md","lastUpdated":null}'),n={name:"modules/core/experimental.md"};function l(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t(`

Experimental: ThreadPoolExecutor ​

The experimental module provides a concrete IExecutor implementation backed by vix::threadpool::ThreadPool.

This executor is intended for:

  • general-purpose HTTP handler execution
  • controlled concurrency environments
  • production-style workloads requiring thread pooling
  • explicit control over worker scaling

Namespace:

cpp
vix::experimental

ThreadPoolExecutor ​

ThreadPoolExecutor is a final implementation of vix::executor::IExecutor.

cpp
class ThreadPoolExecutor final : public vix::executor::IExecutor

It wraps a vix::threadpool::ThreadPool and exposes it through the standard executor interface.


Construction ​

cpp
ThreadPoolExecutor(
+import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Experimental: ThreadPoolExecutor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/experimental.md","filePath":"modules/core/experimental.md","lastUpdated":1770805184000}'),n={name:"modules/core/experimental.md"};function l(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t(`

Experimental: ThreadPoolExecutor ​

The experimental module provides a concrete IExecutor implementation backed by vix::threadpool::ThreadPool.

This executor is intended for:

  • general-purpose HTTP handler execution
  • controlled concurrency environments
  • production-style workloads requiring thread pooling
  • explicit control over worker scaling

Namespace:

cpp
vix::experimental

ThreadPoolExecutor ​

ThreadPoolExecutor is a final implementation of vix::executor::IExecutor.

cpp
class ThreadPoolExecutor final : public vix::executor::IExecutor

It wraps a vix::threadpool::ThreadPool and exposes it through the standard executor interface.


Construction ​

cpp
ThreadPoolExecutor(
   std::size_t threads,
   std::size_t maxThreads,
   int defaultPriority
@@ -14,4 +14,4 @@ import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
   0       // default priority
 );
 
-vix::App app(std::move(exec));

How it integrates with App ​

When injected into vix::App, the executor becomes responsible for running all HTTP route handlers.

This ensures:

  • networking threads remain responsive
  • user code does not block accept loops
  • concurrency is controlled via pool sizing

Design Notes ​

  • The executor strictly adheres to IExecutor.
  • It isolates concurrency from HTTP parsing.
  • It allows scaling policies to evolve independently from the core runtime.

When to use it ​

Use ThreadPoolExecutor when:

  • you need predictable concurrency limits
  • your handlers may block or perform CPU-heavy work
  • you want explicit control over scaling behavior

If your application requires custom scheduling, priority routing, or integration with another async runtime, implement your own IExecutor and inject it into App.

`,58)])])}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; +vix::App app(std::move(exec));

How it integrates with App ​

When injected into vix::App, the executor becomes responsible for running all HTTP route handlers.

This ensures:

  • networking threads remain responsive
  • user code does not block accept loops
  • concurrency is controlled via pool sizing

Design Notes ​

  • The executor strictly adheres to IExecutor.
  • It isolates concurrency from HTTP parsing.
  • It allows scaling policies to evolve independently from the core runtime.

When to use it ​

Use ThreadPoolExecutor when:

  • you need predictable concurrency limits
  • your handlers may block or perform CPU-heavy work
  • you want explicit control over scaling behavior

If your application requires custom scheduling, priority routing, or integration with another async runtime, implement your own IExecutor and inject it into App.

`,58)])])}const u=s(n,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_experimental.md.8MGM-V3E.lean.js b/docs/assets/modules_core_experimental.md.8MGM-V3E.lean.js new file mode 100644 index 000000000..8a2d90594 --- /dev/null +++ b/docs/assets/modules_core_experimental.md.8MGM-V3E.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Experimental: ThreadPoolExecutor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/experimental.md","filePath":"modules/core/experimental.md","lastUpdated":1770805184000}'),n={name:"modules/core/experimental.md"};function l(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t("",58)])])}const u=s(n,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_experimental.md.C_DmqMFd.lean.js b/docs/assets/modules_core_experimental.md.C_DmqMFd.lean.js deleted file mode 100644 index db1a35704..000000000 --- a/docs/assets/modules_core_experimental.md.C_DmqMFd.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Experimental: ThreadPoolExecutor","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/experimental.md","filePath":"modules/core/experimental.md","lastUpdated":null}'),n={name:"modules/core/experimental.md"};function l(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t("",58)])])}const E=s(n,[["render",l]]);export{c as __pageData,E as default}; diff --git a/docs/assets/modules_core_guide.md.4tll-nJ1.lean.js b/docs/assets/modules_core_guide.md.4tll-nJ1.lean.js deleted file mode 100644 index 413e2a0b5..000000000 --- a/docs/assets/modules_core_guide.md.4tll-nJ1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/guide.md","filePath":"modules/core/guide.md","lastUpdated":null}'),p={name:"modules/core/guide.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_api.md.BbsUZ1SP.js b/docs/assets/modules_core_guide.md.BvajaPmN.js similarity index 96% rename from docs/assets/modules_core_api.md.BbsUZ1SP.js rename to docs/assets/modules_core_guide.md.BvajaPmN.js index 3fd295340..a82cf947d 100644 --- a/docs/assets/modules_core_api.md.BbsUZ1SP.js +++ b/docs/assets/modules_core_guide.md.BvajaPmN.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/api.md","filePath":"modules/core/api.md","lastUpdated":null}'),p={name:"modules/core/api.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

HTTP ​

Vix gives you explicit control over the HTTP layer.

You control:

  • Status codes
  • Headers
  • Body
  • Content type

Nothing is hidden.


Setting status codes ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/guide.md","filePath":"modules/core/guide.md","lastUpdated":1770805184000}'),p={name:"modules/core/guide.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

HTTP ​

Vix gives you explicit control over the HTTP layer.

You control:

  • Status codes
  • Headers
  • Body
  • Content type

Nothing is hidden.


Setting status codes ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -121,4 +121,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   });
 
   app.run(8080);
-}

Content behavior rule ​

  • res.send() sends raw content
  • res.json() sets JSON content type automatically
  • res.status() controls HTTP status
  • res.set_header() sets custom headers

Everything is explicit.

`,32)])])}const y=i(p,[["render",l]]);export{g as __pageData,y as default}; +}

Content behavior rule ​

  • res.send() sends raw content
  • res.json() sets JSON content type automatically
  • res.status() controls HTTP status
  • res.set_header() sets custom headers

Everything is explicit.

`,32)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_core_guide.md.BvajaPmN.lean.js b/docs/assets/modules_core_guide.md.BvajaPmN.lean.js new file mode 100644 index 000000000..c3eba343f --- /dev/null +++ b/docs/assets/modules_core_guide.md.BvajaPmN.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"HTTP","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/guide.md","filePath":"modules/core/guide.md","lastUpdated":1770805184000}'),p={name:"modules/core/guide.md"};function l(k,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const c=i(p,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_core_http.md.DVyBwQtC.lean.js b/docs/assets/modules_core_http.md.DVyBwQtC.lean.js deleted file mode 100644 index 211526817..000000000 --- a/docs/assets/modules_core_http.md.DVyBwQtC.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"HTTP (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/http.md","filePath":"modules/core/http.md","lastUpdated":null}'),l={name:"modules/core/http.md"};function n(p,s,d,h,r,o){return a(),i("div",null,[...s[0]||(s[0]=[t("",87)])])}const u=e(l,[["render",n]]);export{k as __pageData,u as default}; diff --git a/docs/assets/modules_core_http.md.DVyBwQtC.js b/docs/assets/modules_core_http.md.Gz1OQYD1.js similarity index 90% rename from docs/assets/modules_core_http.md.DVyBwQtC.js rename to docs/assets/modules_core_http.md.Gz1OQYD1.js index 74b7b1c16..6539275c9 100644 --- a/docs/assets/modules_core_http.md.DVyBwQtC.js +++ b/docs/assets/modules_core_http.md.Gz1OQYD1.js @@ -1,4 +1,4 @@ -import{_ as e,o as a,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"HTTP (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/http.md","filePath":"modules/core/http.md","lastUpdated":null}'),l={name:"modules/core/http.md"};function n(p,s,d,h,r,o){return a(),i("div",null,[...s[0]||(s[0]=[t(`

HTTP (core) ​

This part of core provides the HTTP facade used by Vix apps and the internal adapter layer used by the router/server.

It includes:

  • IRequestHandler: a uniform interface used by router/server
  • Request: a high-level request facade (method, path, params, query, headers, JSON, state)
  • RequestHandler: an adapter that wraps user handlers into IRequestHandler
  • RequestState: type-safe per-request storage for middleware data sharing
  • Response: static helpers to build Boost.Beast responses
  • ResponseWrapper: a friendly fluent API to set status/headers and send text/JSON/files
  • Status: numeric constants and helpers for HTTP status codes

IRequestHandler ​

vix::vhttp::IRequestHandler is the low-level interface used by the router/server.

cpp
class IRequestHandler
+import{_ as e,o as a,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/http.md","filePath":"modules/core/http.md","lastUpdated":1770805184000}'),l={name:"modules/core/http.md"};function n(p,s,d,h,r,o){return a(),i("div",null,[...s[0]||(s[0]=[t(`

HTTP (core) ​

This part of core provides the HTTP facade used by Vix apps and the internal adapter layer used by the router/server.

It includes:

  • IRequestHandler: a uniform interface used by router/server
  • Request: a high-level request facade (method, path, params, query, headers, JSON, state)
  • RequestHandler: an adapter that wraps user handlers into IRequestHandler
  • RequestState: type-safe per-request storage for middleware data sharing
  • Response: static helpers to build Boost.Beast responses
  • ResponseWrapper: a friendly fluent API to set status/headers and send text/JSON/files
  • Status: numeric constants and helpers for HTTP status codes

IRequestHandler ​

vix::vhttp::IRequestHandler is the low-level interface used by the router/server.

cpp
class IRequestHandler
 {
 public:
   virtual void handle_request(
@@ -18,4 +18,4 @@ import{_ as e,o as a,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k
 
 app.get("/json", [](Request&, ResponseWrapper& res) {
   res.json({ "message", "Hello" });
-});

Auto default behavior ​

  • If status is not set, it defaults to 200 OK.
  • For 204 and 304, bodies are cleared automatically.
  • If you call send() with no body, it sends a default status text.

Static files ​

file(path):

  • normalizes the path
  • rejects .. segments (basic traversal protection)
  • maps file extensions to MIME types
  • serves index.html when path is a directory
  • sets Cache-Control if missing

RequestHandler ​

vix::vhttp::RequestHandler<Handler> is the adapter that:

  1. extracts path_only (target without query)
  2. extracts route params based on the route pattern
  3. creates a RequestState
  4. constructs a Request facade
  5. invokes the user handler
  6. sets keep-alive headers and prepares payload

Supported handler signatures ​

Vix supports both facade and raw handlers, and optionally passing route params.

Facade style (recommended):

  • void(Request&, ResponseWrapper&)
  • void(Request&, ResponseWrapper&, const Request::ParamMap&)

Raw style (advanced):

  • void(const RawRequest&, ResponseWrapper&)
  • void(const RawRequest&, ResponseWrapper&, const Request::ParamMap&)

Returnable handlers (auto-send)

Instead of returning void, a handler may return a value that can be sent.

Supported return forms:

  • payload type accepted by ResponseWrapper::send(payload)
  • std::pair<status, payload>
  • std::tuple<status, payload>

Auto-send only happens when the response body is still empty.

Error handling ​

The adapter catches:

  • std::range_error (typically invalid status codes)
  • std::exception

In debug builds (!NDEBUG), it returns a simple HTML error page with:

  • route pattern
  • method
  • path

In release builds, it returns a safe JSON error response and logs details using vix::utils::Logger.


Status ​

vix::vhttp::Status exposes numeric constants for common codes:

  • OK = 200, CREATED = 201, NO_CONTENT = 204, ...
  • BAD_REQUEST = 400, NOT_FOUND = 404, ...
  • INTERNAL_ERROR = 500, ...

Helpers:

  • to_status(int) converts 100..599 to http::status (asserts in debug)
  • status_to_string(int) returns a human-readable string (e.g. "404 Not Found")

Practical guidance ​

  • Prefer the facade handler style for most apps.
  • Use RequestState for middleware to share typed data.
  • Use ResponseWrapper for fluent status/headers/send patterns.
  • Keep expensive work out of networking threads (use an executor via App).
`,87)])])}const u=e(l,[["render",n]]);export{k as __pageData,u as default}; +});

Auto default behavior ​

  • If status is not set, it defaults to 200 OK.
  • For 204 and 304, bodies are cleared automatically.
  • If you call send() with no body, it sends a default status text.

Static files ​

file(path):

  • normalizes the path
  • rejects .. segments (basic traversal protection)
  • maps file extensions to MIME types
  • serves index.html when path is a directory
  • sets Cache-Control if missing

RequestHandler ​

vix::vhttp::RequestHandler<Handler> is the adapter that:

  1. extracts path_only (target without query)
  2. extracts route params based on the route pattern
  3. creates a RequestState
  4. constructs a Request facade
  5. invokes the user handler
  6. sets keep-alive headers and prepares payload

Supported handler signatures ​

Vix supports both facade and raw handlers, and optionally passing route params.

Facade style (recommended):

  • void(Request&, ResponseWrapper&)
  • void(Request&, ResponseWrapper&, const Request::ParamMap&)

Raw style (advanced):

  • void(const RawRequest&, ResponseWrapper&)
  • void(const RawRequest&, ResponseWrapper&, const Request::ParamMap&)

Returnable handlers (auto-send)

Instead of returning void, a handler may return a value that can be sent.

Supported return forms:

  • payload type accepted by ResponseWrapper::send(payload)
  • std::pair<status, payload>
  • std::tuple<status, payload>

Auto-send only happens when the response body is still empty.

Error handling ​

The adapter catches:

  • std::range_error (typically invalid status codes)
  • std::exception

In debug builds (!NDEBUG), it returns a simple HTML error page with:

  • route pattern
  • method
  • path

In release builds, it returns a safe JSON error response and logs details using vix::utils::Logger.


Status ​

vix::vhttp::Status exposes numeric constants for common codes:

  • OK = 200, CREATED = 201, NO_CONTENT = 204, ...
  • BAD_REQUEST = 400, NOT_FOUND = 404, ...
  • INTERNAL_ERROR = 500, ...

Helpers:

  • to_status(int) converts 100..599 to http::status (asserts in debug)
  • status_to_string(int) returns a human-readable string (e.g. "404 Not Found")

Practical guidance ​

  • Prefer the facade handler style for most apps.
  • Use RequestState for middleware to share typed data.
  • Use ResponseWrapper for fluent status/headers/send patterns.
  • Keep expensive work out of networking threads (use an executor via App).
`,87)])])}const E=e(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_http.md.Gz1OQYD1.lean.js b/docs/assets/modules_core_http.md.Gz1OQYD1.lean.js new file mode 100644 index 000000000..43860040e --- /dev/null +++ b/docs/assets/modules_core_http.md.Gz1OQYD1.lean.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as i,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/http.md","filePath":"modules/core/http.md","lastUpdated":1770805184000}'),l={name:"modules/core/http.md"};function n(p,s,d,h,r,o){return a(),i("div",null,[...s[0]||(s[0]=[t("",87)])])}const E=e(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_index.md.-jVG9D4L.js b/docs/assets/modules_core_index.md.-jVG9D4L.js new file mode 100644 index 000000000..b09b1323e --- /dev/null +++ b/docs/assets/modules_core_index.md.-jVG9D4L.js @@ -0,0 +1,15 @@ +import{_ as i,o as s,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Core Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/index.md","filePath":"modules/core/index.md","lastUpdated":1770805184000}'),o={name:"modules/core/index.md"};function l(n,e,r,h,d,p){return s(),a("div",null,[...e[0]||(e[0]=[t(`

Core Overview ​

This page explains how the Vix.cpp core works at a high level. It is written for beginners coming from Python (FastAPI) or Node.js (Express).

What the core provides ​

Vix core is the runtime layer that makes these things work together:

  • HTTP server (Boost.Asio + Boost.Beast)
  • Per-connection session handling (timeouts, basic safety checks)
  • Router (method + path matching, path params, optional heavy scheduling)
  • Request and response wrappers (simple route authoring)
  • Optional OpenAPI + Swagger UI (served locally with offline assets)
  • Executor and thread pool utilities for heavy workloads and periodic jobs

In practice, you write routes. The core handles networking, parsing, dispatching, and concurrency.

Request lifecycle (end to end) ​

A single HTTP request goes through this flow:

  1. HTTPServer accepts a TCP connection.
  2. Session is created for that socket.
  3. Session reads and parses an HTTP request (Beast parser).
  4. Session applies basic checks:
    • request body limit
    • timeout timer
    • optional WAF rules (URL and body patterns, configurable)
  5. Session asks the Router to match method + path.
  6. If the route is marked heavy, Session posts it to the Executor.
    • If not heavy, Session runs the route immediately on the I/O thread.
  7. The route handler writes a response.
  8. Session writes the response back to the client.
  9. If keep-alive is enabled, the same Session reads the next request on that socket.

Why this architecture exists ​

If you come from Node.js:

  • Node has an event loop. Vix uses Asio I/O threads for networking.
  • You still want to avoid blocking I/O threads with CPU or DB-heavy work.
  • Heavy routes get scheduled on a dedicated executor so the server stays responsive.

If you come from Python:

  • FastAPI uses an async event loop and thread pools for blocking work.
  • Vix splits the same idea into I/O threads (network) and an executor (heavy tasks).

Core components ​

HTTPServer ​

Role: Owns the io_context, TCP acceptor, and I/O threads.

Key behaviors:

  • Initializes the acceptor and binds to the configured port.
  • Starts an async accept loop (start_accept()).
  • Launches multiple I/O worker threads (io_context->run()).
  • Spawns a Session per connection.
  • Runs a metrics monitor that periodically logs executor metrics.

Useful details:

  • If port is 0, the OS picks an ephemeral port. You can read it via bound_port().
  • calculate_io_thread_count() uses config.io_threads if set, otherwise uses hardware concurrency.
  • stop_async() closes the acceptor and stops the io_context.
  • stop_blocking() waits for executor idle then joins threads.

Session ​

Role: Owns a single client connection, reads requests, routes them, writes responses.

Key behaviors:

  • Uses a request parser and enforces MAX_REQUEST_BODY_SIZE.
  • Starts a per-request timeout timer and closes slow/stalled connections.
  • Optional WAF checks:
    • WAF mode: off, basic, strict
    • URL checks: length, null bytes, CR/LF, suspicious tokens
    • Body checks for mutating methods (POST/PUT/PATCH/DELETE)
  • Uses a strand for serialized socket writes, so responses remain ordered and thread-safe.
  • Heavy routes are executed on the executor, then written back to the client on the strand.

Important mental model:

  • A Session is like a single req/res loop bound to one socket.
  • It may handle multiple requests if keep-alive is enabled.

Router ​

Role: Matches (HTTP method, path) and dispatches to the registered handler.

Core ideas:

  • Internally it uses a route tree, keyed by METHOD + /path/segments.
  • Path parameters are represented as {name}. They are stored in the tree using a wildcard key.
  • It supports HEAD fallback: if a HEAD route is not found, it can reuse GET.
  • It has a customizable not-found handler (default is JSON 404).

Heavy routes ​

A route can be marked as heavy using RouteOptions{ .heavy = true }.

What it means:

  • Session will schedule the route on the executor.
  • This is the recommended way to isolate CPU-heavy or DB-heavy handlers.
  • The Router also exposes this in docs via x-vix-heavy: true.

OpenAPI and Docs ​

Vix can expose:

  • GET /openapi.json generated from the Router metadata and any extra docs registered by modules.
  • Swagger UI at:
    • GET /docs
    • GET /docs/
    • GET /docs/index.html
  • Offline assets:
    • /docs/swagger-ui.css
    • /docs/swagger-ui-bundle.js

The UI is served locally, with Vix theme tokens, so the docs can work even without external CDNs.

Disable auto docs ​

If you want to disable automatic docs routes for a run, use:

bash
vix run api.cpp --no-docs

Executor, ThreadPool, and timers ​

Vix core supports separating lightweight request handling from heavy work.

ThreadPool ​

Role: Priority-based pool that executes tasks concurrently.

Key behaviors:

  • Tasks have:
    • a function
    • a priority
    • a sequence number for stable ordering
  • The pool can grow threads up to maxThreads when saturated and backlog increases.
  • TaskGuard tracks active tasks using RAII.
  • The pool can schedule periodic jobs via periodicTask().
  • Metrics snapshot:
    • pendingTasks
    • activeTasks
    • timedOutTasks

When to use it:

  • CPU heavy operations (hashing, image work, large JSON processing)
  • DB work (if your DB client is blocking)
  • Any expensive logic you do not want on I/O threads

interval() timer ​

Role: Simple repeating timer that posts work onto an executor.

interval() creates a tiny worker thread that wakes up every period and posts a task. It returns an RAII handle that stops and joins on destruction.

When to use it:

  • periodic metrics logging
  • cache refresh jobs
  • background cleanup tasks

Important rule:

  • Keep the scheduled function fast, or schedule into a heavy executor if needed.

Mental mapping for Node.js and Python developers ​

Node.js mapping (Express) ​

  • app.get("/path", handler) feels like Express.
  • Request is like req.
  • Response is like res.
  • Heavy route scheduling is like pushing work into a worker pool.

Python mapping (FastAPI) ​

  • Routes are simple functions.
  • Returning a JSON-like object can auto-send.
  • Heavy routes are conceptually similar to using thread pools for blocking work.

Minimal example ​

cpp
#include <vix.hpp>
+using namespace vix;
+
+int main()
+{
+  App app;
+
+  app.get("/", [](Request&, Response& res){
+    res.json({"message", "Hello, Vix!"});
+  });
+
+  app.run(8080);
+
+  return 0;
+}

Practical recommendations ​

  • Keep I/O threads clean: do not block them with CPU-heavy work.
  • Mark heavy endpoints as heavy and use an executor.
  • Use keep-alive where appropriate for performance.
  • Keep responses deterministic and always set proper status codes.
  • Start with the docs routes enabled. They help beginners discover the API quickly.
`,66)])])}const m=i(o,[["render",l]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_core_index.md.-jVG9D4L.lean.js b/docs/assets/modules_core_index.md.-jVG9D4L.lean.js new file mode 100644 index 000000000..b133b380c --- /dev/null +++ b/docs/assets/modules_core_index.md.-jVG9D4L.lean.js @@ -0,0 +1 @@ +import{_ as i,o as s,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Core Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/index.md","filePath":"modules/core/index.md","lastUpdated":1770805184000}'),o={name:"modules/core/index.md"};function l(n,e,r,h,d,p){return s(),a("div",null,[...e[0]||(e[0]=[t("",66)])])}const m=i(o,[["render",l]]);export{g as __pageData,m as default}; diff --git a/docs/assets/modules_core_index.md.TF2x0a-Q.js b/docs/assets/modules_core_index.md.TF2x0a-Q.js deleted file mode 100644 index a6ea38322..000000000 --- a/docs/assets/modules_core_index.md.TF2x0a-Q.js +++ /dev/null @@ -1,15 +0,0 @@ -import{_ as i,o as s,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"Core Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/index.md","filePath":"modules/core/index.md","lastUpdated":null}'),o={name:"modules/core/index.md"};function l(n,e,r,h,d,p){return s(),a("div",null,[...e[0]||(e[0]=[t(`

Core Overview ​

This page explains how the Vix.cpp core works at a high level. It is written for beginners coming from Python (FastAPI) or Node.js (Express).

What the core provides ​

Vix core is the runtime layer that makes these things work together:

  • HTTP server (Boost.Asio + Boost.Beast)
  • Per-connection session handling (timeouts, basic safety checks)
  • Router (method + path matching, path params, optional heavy scheduling)
  • Request and response wrappers (simple route authoring)
  • Optional OpenAPI + Swagger UI (served locally with offline assets)
  • Executor and thread pool utilities for heavy workloads and periodic jobs

In practice, you write routes. The core handles networking, parsing, dispatching, and concurrency.

Request lifecycle (end to end) ​

A single HTTP request goes through this flow:

  1. HTTPServer accepts a TCP connection.
  2. Session is created for that socket.
  3. Session reads and parses an HTTP request (Beast parser).
  4. Session applies basic checks:
    • request body limit
    • timeout timer
    • optional WAF rules (URL and body patterns, configurable)
  5. Session asks the Router to match method + path.
  6. If the route is marked heavy, Session posts it to the Executor.
    • If not heavy, Session runs the route immediately on the I/O thread.
  7. The route handler writes a response.
  8. Session writes the response back to the client.
  9. If keep-alive is enabled, the same Session reads the next request on that socket.

Why this architecture exists ​

If you come from Node.js:

  • Node has an event loop. Vix uses Asio I/O threads for networking.
  • You still want to avoid blocking I/O threads with CPU or DB-heavy work.
  • Heavy routes get scheduled on a dedicated executor so the server stays responsive.

If you come from Python:

  • FastAPI uses an async event loop and thread pools for blocking work.
  • Vix splits the same idea into I/O threads (network) and an executor (heavy tasks).

Core components ​

HTTPServer ​

Role: Owns the io_context, TCP acceptor, and I/O threads.

Key behaviors:

  • Initializes the acceptor and binds to the configured port.
  • Starts an async accept loop (start_accept()).
  • Launches multiple I/O worker threads (io_context->run()).
  • Spawns a Session per connection.
  • Runs a metrics monitor that periodically logs executor metrics.

Useful details:

  • If port is 0, the OS picks an ephemeral port. You can read it via bound_port().
  • calculate_io_thread_count() uses config.io_threads if set, otherwise uses hardware concurrency.
  • stop_async() closes the acceptor and stops the io_context.
  • stop_blocking() waits for executor idle then joins threads.

Session ​

Role: Owns a single client connection, reads requests, routes them, writes responses.

Key behaviors:

  • Uses a request parser and enforces MAX_REQUEST_BODY_SIZE.
  • Starts a per-request timeout timer and closes slow/stalled connections.
  • Optional WAF checks:
    • WAF mode: off, basic, strict
    • URL checks: length, null bytes, CR/LF, suspicious tokens
    • Body checks for mutating methods (POST/PUT/PATCH/DELETE)
  • Uses a strand for serialized socket writes, so responses remain ordered and thread-safe.
  • Heavy routes are executed on the executor, then written back to the client on the strand.

Important mental model:

  • A Session is like a single req/res loop bound to one socket.
  • It may handle multiple requests if keep-alive is enabled.

Router ​

Role: Matches (HTTP method, path) and dispatches to the registered handler.

Core ideas:

  • Internally it uses a route tree, keyed by METHOD + /path/segments.
  • Path parameters are represented as {name}. They are stored in the tree using a wildcard key.
  • It supports HEAD fallback: if a HEAD route is not found, it can reuse GET.
  • It has a customizable not-found handler (default is JSON 404).

Heavy routes ​

A route can be marked as heavy using RouteOptions{ .heavy = true }.

What it means:

  • Session will schedule the route on the executor.
  • This is the recommended way to isolate CPU-heavy or DB-heavy handlers.
  • The Router also exposes this in docs via x-vix-heavy: true.

OpenAPI and Docs ​

Vix can expose:

  • GET /openapi.json generated from the Router metadata and any extra docs registered by modules.
  • Swagger UI at:
    • GET /docs
    • GET /docs/
    • GET /docs/index.html
  • Offline assets:
    • /docs/swagger-ui.css
    • /docs/swagger-ui-bundle.js

The UI is served locally, with Vix theme tokens, so the docs can work even without external CDNs.

Disable auto docs ​

If you want to disable automatic docs routes for a run, use:

bash
vix run api.cpp --no-docs

Executor, ThreadPool, and timers ​

Vix core supports separating lightweight request handling from heavy work.

ThreadPool ​

Role: Priority-based pool that executes tasks concurrently.

Key behaviors:

  • Tasks have:
    • a function
    • a priority
    • a sequence number for stable ordering
  • The pool can grow threads up to maxThreads when saturated and backlog increases.
  • TaskGuard tracks active tasks using RAII.
  • The pool can schedule periodic jobs via periodicTask().
  • Metrics snapshot:
    • pendingTasks
    • activeTasks
    • timedOutTasks

When to use it:

  • CPU heavy operations (hashing, image work, large JSON processing)
  • DB work (if your DB client is blocking)
  • Any expensive logic you do not want on I/O threads

interval() timer ​

Role: Simple repeating timer that posts work onto an executor.

interval() creates a tiny worker thread that wakes up every period and posts a task. It returns an RAII handle that stops and joins on destruction.

When to use it:

  • periodic metrics logging
  • cache refresh jobs
  • background cleanup tasks

Important rule:

  • Keep the scheduled function fast, or schedule into a heavy executor if needed.

Mental mapping for Node.js and Python developers ​

Node.js mapping (Express) ​

  • app.get("/path", handler) feels like Express.
  • Request is like req.
  • Response is like res.
  • Heavy route scheduling is like pushing work into a worker pool.

Python mapping (FastAPI) ​

  • Routes are simple functions.
  • Returning a JSON-like object can auto-send.
  • Heavy routes are conceptually similar to using thread pools for blocking work.

Minimal example ​

cpp
#include <vix.hpp>
-using namespace vix;
-
-int main()
-{
-  App app;
-
-  app.get("/", [](Request&, Response& res){
-    res.json({"message", "Hello, Vix!"});
-  });
-
-  app.run(8080);
-
-  return 0;
-}

Practical recommendations ​

  • Keep I/O threads clean: do not block them with CPU-heavy work.
  • Mark heavy endpoints as heavy and use an executor.
  • Use keep-alive where appropriate for performance.
  • Keep responses deterministic and always set proper status codes.
  • Start with the docs routes enabled. They help beginners discover the API quickly.
`,66)])])}const k=i(o,[["render",l]]);export{u as __pageData,k as default}; diff --git a/docs/assets/modules_core_index.md.TF2x0a-Q.lean.js b/docs/assets/modules_core_index.md.TF2x0a-Q.lean.js deleted file mode 100644 index e697806d8..000000000 --- a/docs/assets/modules_core_index.md.TF2x0a-Q.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as s,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const u=JSON.parse('{"title":"Core Overview","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/index.md","filePath":"modules/core/index.md","lastUpdated":null}'),o={name:"modules/core/index.md"};function l(n,e,r,h,d,p){return s(),a("div",null,[...e[0]||(e[0]=[t("",66)])])}const k=i(o,[["render",l]]);export{u as __pageData,k as default}; diff --git a/docs/assets/modules_core_middleware.md.kWMBRpYJ.js b/docs/assets/modules_core_middleware.md.DiEG-jj7.js similarity index 86% rename from docs/assets/modules_core_middleware.md.kWMBRpYJ.js rename to docs/assets/modules_core_middleware.md.DiEG-jj7.js index f5949e8ae..8337da222 100644 --- a/docs/assets/modules_core_middleware.md.kWMBRpYJ.js +++ b/docs/assets/modules_core_middleware.md.DiEG-jj7.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as a,a2 as l}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Middleware (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/middleware.md","filePath":"modules/core/middleware.md","lastUpdated":null}'),t={name:"modules/core/middleware.md"};function n(h,i,p,r,d,o){return e(),a("div",null,[...i[0]||(i[0]=[l(`

Middleware (core) ​

The middleware system in Vix provides a structured way to:

  • intercept requests before they reach the handler
  • share data across layers (auth, logging, rate limiting, etc.)
  • standardize error handling
  • manage cross-cutting concerns cleanly

It is built around five core concepts:

  • Context
  • Services
  • Next
  • Hooks
  • Result / Error

This document explains how they fit together.


1. Context ​

vix::mw::Context is the object passed through the middleware pipeline.

It wraps:

  • the current Request
  • the current ResponseWrapper
  • a shared Services container

You use it to:

  • read request data
  • write responses
  • access shared services
  • manage request-scoped state

Example usage inside middleware:

cpp
void my_middleware(Context& ctx, Next next) {
+import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Middleware (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/middleware.md","filePath":"modules/core/middleware.md","lastUpdated":1770805184000}'),l={name:"modules/core/middleware.md"};function n(h,i,p,r,d,o){return e(),a("div",null,[...i[0]||(i[0]=[t(`

Middleware (core) ​

The middleware system in Vix provides a structured way to:

  • intercept requests before they reach the handler
  • share data across layers (auth, logging, rate limiting, etc.)
  • standardize error handling
  • manage cross-cutting concerns cleanly

It is built around five core concepts:

  • Context
  • Services
  • Next
  • Hooks
  • Result / Error

This document explains how they fit together.


1. Context ​

vix::mw::Context is the object passed through the middleware pipeline.

It wraps:

  • the current Request
  • the current ResponseWrapper
  • a shared Services container

You use it to:

  • read request data
  • write responses
  • access shared services
  • manage request-scoped state

Example usage inside middleware:

cpp
void my_middleware(Context& ctx, Next next) {
   auto& req = ctx.req();
   auto& res = ctx.res();
 
@@ -17,4 +17,4 @@ import{_ as s,o as e,c as a,a2 as l}from"./chunks/framework.jUmBZPH5.js";const c
   "code": "unauthorized",
   "message": "Invalid token",
   "details": {}
-}

Helper constructors exist for common HTTP errors:

  • bad_request()
  • unauthorized()
  • forbidden()
  • not_found()
  • conflict()
  • internal()
  • etc.

Errors are normalized to ensure valid status codes.


8. Typical Middleware Flow ​

  1. Request arrives.
  2. Context is created.
  3. on_begin hooks execute.
  4. Middleware chain runs.
  5. Handler executes.
  6. on_end hooks execute.
  7. If an error occurs, on_error hooks run.

This guarantees structured lifecycle behavior.


Design Philosophy ​

The Vix middleware layer is:

  • explicit
  • minimal
  • strongly typed
  • deterministic in order
  • safe under composition

It avoids:

  • hidden global state
  • magic injection
  • implicit execution order
  • runtime reflection

The result is a predictable pipeline suitable for both small services and large structured systems.


When to Use Middleware ​

Use middleware for:

  • authentication
  • authorization
  • request validation
  • rate limiting
  • logging
  • tracing
  • CORS handling
  • request enrichment

Avoid putting business logic in middleware. Keep it in handlers.


Summary ​

The middleware system provides:

  • structured request lifecycle control
  • typed dependency injection
  • typed request-scoped storage
  • explicit continuation control
  • standardized error handling

It is designed to remain simple while scaling to complex applications.

`,95)])])}const E=s(t,[["render",n]]);export{c as __pageData,E as default}; +}

Helper constructors exist for common HTTP errors:

  • bad_request()
  • unauthorized()
  • forbidden()
  • not_found()
  • conflict()
  • internal()
  • etc.

Errors are normalized to ensure valid status codes.


8. Typical Middleware Flow ​

  1. Request arrives.
  2. Context is created.
  3. on_begin hooks execute.
  4. Middleware chain runs.
  5. Handler executes.
  6. on_end hooks execute.
  7. If an error occurs, on_error hooks run.

This guarantees structured lifecycle behavior.


Design Philosophy ​

The Vix middleware layer is:

  • explicit
  • minimal
  • strongly typed
  • deterministic in order
  • safe under composition

It avoids:

  • hidden global state
  • magic injection
  • implicit execution order
  • runtime reflection

The result is a predictable pipeline suitable for both small services and large structured systems.


When to Use Middleware ​

Use middleware for:

  • authentication
  • authorization
  • request validation
  • rate limiting
  • logging
  • tracing
  • CORS handling
  • request enrichment

Avoid putting business logic in middleware. Keep it in handlers.


Summary ​

The middleware system provides:

  • structured request lifecycle control
  • typed dependency injection
  • typed request-scoped storage
  • explicit continuation control
  • standardized error handling

It is designed to remain simple while scaling to complex applications.

`,95)])])}const u=s(l,[["render",n]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_middleware.md.DiEG-jj7.lean.js b/docs/assets/modules_core_middleware.md.DiEG-jj7.lean.js new file mode 100644 index 000000000..8e6f89b1a --- /dev/null +++ b/docs/assets/modules_core_middleware.md.DiEG-jj7.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Middleware (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/middleware.md","filePath":"modules/core/middleware.md","lastUpdated":1770805184000}'),l={name:"modules/core/middleware.md"};function n(h,i,p,r,d,o){return e(),a("div",null,[...i[0]||(i[0]=[t("",95)])])}const u=s(l,[["render",n]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_core_middleware.md.kWMBRpYJ.lean.js b/docs/assets/modules_core_middleware.md.kWMBRpYJ.lean.js deleted file mode 100644 index 88d50616f..000000000 --- a/docs/assets/modules_core_middleware.md.kWMBRpYJ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as a,a2 as l}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Middleware (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/middleware.md","filePath":"modules/core/middleware.md","lastUpdated":null}'),t={name:"modules/core/middleware.md"};function n(h,i,p,r,d,o){return e(),a("div",null,[...i[0]||(i[0]=[l("",95)])])}const E=s(t,[["render",n]]);export{c as __pageData,E as default}; diff --git a/docs/assets/modules_core_openapi.md.DeqU5R4g.js b/docs/assets/modules_core_openapi.md.DAsMivtz.js similarity index 74% rename from docs/assets/modules_core_openapi.md.DeqU5R4g.js rename to docs/assets/modules_core_openapi.md.DAsMivtz.js index c66a2cd80..983e259e0 100644 --- a/docs/assets/modules_core_openapi.md.DeqU5R4g.js +++ b/docs/assets/modules_core_openapi.md.DAsMivtz.js @@ -1,4 +1,4 @@ -import{_ as i,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"OpenAPI and Docs UI (offline Swagger)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/openapi.md","filePath":"modules/core/openapi.md","lastUpdated":null}'),n={name:"modules/core/openapi.md"};function l(p,s,o,h,d,r){return e(),a("div",null,[...s[0]||(s[0]=[t(`

OpenAPI and Docs UI (offline Swagger) ​

This module generates an OpenAPI 3 document from your router and serves an offline Swagger UI that works without CDN assets.

It is designed for Vix deployment environments where internet access is limited or fully offline.

What you get ​

When enabled, these routes are registered:

  • GET /openapi.json Generated OpenAPI 3.0.3 document (JSON)

  • GET /docs Swagger UI HTML page (uses local assets)

  • GET /docs/ Same as /docs (no redirect)

  • GET /docs/index.html Same as /docs (convenience)

  • GET /docs/swagger-ui.css Embedded Swagger UI CSS (served locally)

  • GET /docs/swagger-ui-bundle.js Embedded Swagger UI JS bundle (served locally)

Core types ​

RouteDoc ​

vix::router::RouteDoc carries documentation metadata for one route:

  • summary and description
  • tags
  • request_body (OpenAPI requestBody payload)
  • responses (OpenAPI responses map)
  • x (vendor extensions, for example x-vix-heavy)

Your router stores this doc next to the route record so OpenAPI generation can read it later.

OpenAPI Registry ​

Some modules might not register routes through the core HTTP router, or they want to add docs entries for routes created elsewhere. vix::openapi::Registry is a global registry for extra docs:

  • Registry::add(method, path, doc)
  • Registry::snapshot()

During generation, the builder merges:

  1. router.routes()
  2. Registry::snapshot()

Duplicate (method, path) entries are automatically ignored.

Build OpenAPI JSON ​

Use vix::openapi::build_from_router(router, title, version) to generate the OpenAPI document:

cpp
#include <vix/openapi/OpenApi.hpp>
+import{_ as i,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"OpenAPI and Docs UI (offline Swagger)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/openapi.md","filePath":"modules/core/openapi.md","lastUpdated":1770805184000}'),n={name:"modules/core/openapi.md"};function l(p,s,o,h,d,r){return e(),a("div",null,[...s[0]||(s[0]=[t(`

OpenAPI and Docs UI (offline Swagger) ​

This module generates an OpenAPI 3 document from your router and serves an offline Swagger UI that works without CDN assets.

It is designed for Vix deployment environments where internet access is limited or fully offline.

What you get ​

When enabled, these routes are registered:

  • GET /openapi.json Generated OpenAPI 3.0.3 document (JSON)

  • GET /docs Swagger UI HTML page (uses local assets)

  • GET /docs/ Same as /docs (no redirect)

  • GET /docs/index.html Same as /docs (convenience)

  • GET /docs/swagger-ui.css Embedded Swagger UI CSS (served locally)

  • GET /docs/swagger-ui-bundle.js Embedded Swagger UI JS bundle (served locally)

Core types ​

RouteDoc ​

vix::router::RouteDoc carries documentation metadata for one route:

  • summary and description
  • tags
  • request_body (OpenAPI requestBody payload)
  • responses (OpenAPI responses map)
  • x (vendor extensions, for example x-vix-heavy)

Your router stores this doc next to the route record so OpenAPI generation can read it later.

OpenAPI Registry ​

Some modules might not register routes through the core HTTP router, or they want to add docs entries for routes created elsewhere. vix::openapi::Registry is a global registry for extra docs:

  • Registry::add(method, path, doc)
  • Registry::snapshot()

During generation, the builder merges:

  1. router.routes()
  2. Registry::snapshot()

Duplicate (method, path) entries are automatically ignored.

Build OpenAPI JSON ​

Use vix::openapi::build_from_router(router, title, version) to generate the OpenAPI document:

cpp
#include <vix/openapi/OpenApi.hpp>
 
 auto spec = vix::openapi::build_from_router(router, "Vix API", "0.0.0");
 // spec is nlohmann::json

Notes:

  • operationId is stable and derived from method + path
  • if a route has no responses, a default 200: OK response is added
  • RouteDoc::x is copied as vendor fields into the OpenAPI operation object

Register the docs routes ​

Call register_openapi_and_docs(router, title, version):

cpp
#include <vix/openapi/register_docs.hpp>
@@ -23,4 +23,4 @@ import{_ as i,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
 
   server.run();
   return 0;
-}
`,42)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; +}
`,42)])])}const E=i(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_core_openapi.md.DAsMivtz.lean.js b/docs/assets/modules_core_openapi.md.DAsMivtz.lean.js new file mode 100644 index 000000000..4db75d19c --- /dev/null +++ b/docs/assets/modules_core_openapi.md.DAsMivtz.lean.js @@ -0,0 +1 @@ +import{_ as i,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"OpenAPI and Docs UI (offline Swagger)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/openapi.md","filePath":"modules/core/openapi.md","lastUpdated":1770805184000}'),n={name:"modules/core/openapi.md"};function l(p,s,o,h,d,r){return e(),a("div",null,[...s[0]||(s[0]=[t("",42)])])}const E=i(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/docs/assets/modules_core_openapi.md.DeqU5R4g.lean.js b/docs/assets/modules_core_openapi.md.DeqU5R4g.lean.js deleted file mode 100644 index 18560da0f..000000000 --- a/docs/assets/modules_core_openapi.md.DeqU5R4g.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"OpenAPI and Docs UI (offline Swagger)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/openapi.md","filePath":"modules/core/openapi.md","lastUpdated":null}'),n={name:"modules/core/openapi.md"};function l(p,s,o,h,d,r){return e(),a("div",null,[...s[0]||(s[0]=[t("",42)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/docs/assets/modules_core_router.md.CXCzMEVA.js b/docs/assets/modules_core_router.md.CDI5Qz9L.js similarity index 81% rename from docs/assets/modules_core_router.md.CXCzMEVA.js rename to docs/assets/modules_core_router.md.CDI5Qz9L.js index 3bc12cb43..cfe72716c 100644 --- a/docs/assets/modules_core_router.md.CXCzMEVA.js +++ b/docs/assets/modules_core_router.md.CDI5Qz9L.js @@ -1,4 +1,4 @@ -import{_ as a,o as s,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Router (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/router.md","filePath":"modules/core/router.md","lastUpdated":null}'),n={name:"modules/core/router.md"};function l(h,i,r,o,p,d){return s(),e("div",null,[...i[0]||(i[0]=[t(`

Router (core) ​

The Vix Router is a lightweight HTTP route matcher and dispatcher.

It is designed for:

  • High-performance method + path matching
  • Tree-based routing (segment by segment)
  • Path parameters (/users/{id})
  • HEAD → GET fallback
  • Automatic 404 handling
  • Optional OpenAPI metadata
  • Heavy route scheduling hints

Design Philosophy ​

The router is:

  • Deterministic
  • Allocation-conscious
  • Tree-backed (not regex-based)
  • HTTP verb aware
  • Compatible with OpenAPI generation

It separates:

  • Routing (matching)
  • Handling (IRequestHandler)
  • Scheduling hints (heavy routes)
  • Documentation metadata (RouteDoc)

Basic Route Registration ​

cpp
router.add_route(
+import{_ as a,o as s,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Router (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/router.md","filePath":"modules/core/router.md","lastUpdated":1770805184000}'),n={name:"modules/core/router.md"};function l(r,i,h,o,p,d){return s(),e("div",null,[...i[0]||(i[0]=[t(`

Router (core) ​

The Vix Router is a lightweight HTTP route matcher and dispatcher.

It is designed for:

  • High-performance method + path matching
  • Tree-based routing (segment by segment)
  • Path parameters (/users/{id})
  • HEAD → GET fallback
  • Automatic 404 handling
  • Optional OpenAPI metadata
  • Heavy route scheduling hints

Design Philosophy ​

The router is:

  • Deterministic
  • Allocation-conscious
  • Tree-backed (not regex-based)
  • HTTP verb aware
  • Compatible with OpenAPI generation

It separates:

  • Routing (matching)
  • Handling (IRequestHandler)
  • Scheduling hints (heavy routes)
  • Documentation metadata (RouteDoc)

Basic Route Registration ​

cpp
router.add_route(
   http::verb::get,
   "/users",
   handler_ptr
@@ -21,4 +21,4 @@ import{_ as a,o as s,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
   "error": "Route not found",
   "method": "GET",
   "path": "/unknown"
-}

OpenAPI Integration ​

Each route can register metadata via RouteDoc:

  • summary
  • description
  • tags
  • request_body schema
  • responses
  • vendor extensions

You can retrieve all registered routes:

cpp
router.routes();

This enables:

  • OpenAPI generation
  • Runtime validation
  • Documentation tools

Matching Rules ​

Matching priority:

  1. Exact segment match
  2. Parameter match (*)
  3. Otherwise → no match

Method is part of the tree key (GET/users is different from POST/users).


Guarantees ​

The Router guarantees:

  • Single-pass matching
  • No regex overhead
  • Deterministic behavior
  • Safe handling of HEAD and OPTIONS
  • Query string stripping during match
  • Clean separation between routing and execution

When To Use ​

Use Router when:

  • Building REST APIs
  • Generating OpenAPI specs
  • Managing heavy vs light routes
  • Requiring deterministic high-performance matching

Summary ​

The Vix Router is:

  • Tree-based
  • Verb-aware
  • Parameter-capable
  • Documentation-ready
  • Scheduling-aware

It forms the backbone of the Vix HTTP runtime.

`,78)])])}const k=a(n,[["render",l]]);export{c as __pageData,k as default}; +}

OpenAPI Integration ​

Each route can register metadata via RouteDoc:

  • summary
  • description
  • tags
  • request_body schema
  • responses
  • vendor extensions

You can retrieve all registered routes:

cpp
router.routes();

This enables:

  • OpenAPI generation
  • Runtime validation
  • Documentation tools

Matching Rules ​

Matching priority:

  1. Exact segment match
  2. Parameter match (*)
  3. Otherwise → no match

Method is part of the tree key (GET/users is different from POST/users).


Guarantees ​

The Router guarantees:

  • Single-pass matching
  • No regex overhead
  • Deterministic behavior
  • Safe handling of HEAD and OPTIONS
  • Query string stripping during match
  • Clean separation between routing and execution

When To Use ​

Use Router when:

  • Building REST APIs
  • Generating OpenAPI specs
  • Managing heavy vs light routes
  • Requiring deterministic high-performance matching

Summary ​

The Vix Router is:

  • Tree-based
  • Verb-aware
  • Parameter-capable
  • Documentation-ready
  • Scheduling-aware

It forms the backbone of the Vix HTTP runtime.

`,78)])])}const E=a(n,[["render",l]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_router.md.CDI5Qz9L.lean.js b/docs/assets/modules_core_router.md.CDI5Qz9L.lean.js new file mode 100644 index 000000000..cb1a76ac5 --- /dev/null +++ b/docs/assets/modules_core_router.md.CDI5Qz9L.lean.js @@ -0,0 +1 @@ +import{_ as a,o as s,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Router (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/router.md","filePath":"modules/core/router.md","lastUpdated":1770805184000}'),n={name:"modules/core/router.md"};function l(r,i,h,o,p,d){return s(),e("div",null,[...i[0]||(i[0]=[t("",78)])])}const E=a(n,[["render",l]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_router.md.CXCzMEVA.lean.js b/docs/assets/modules_core_router.md.CXCzMEVA.lean.js deleted file mode 100644 index 994dac263..000000000 --- a/docs/assets/modules_core_router.md.CXCzMEVA.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as s,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Router (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/router.md","filePath":"modules/core/router.md","lastUpdated":null}'),n={name:"modules/core/router.md"};function l(h,i,r,o,p,d){return s(),e("div",null,[...i[0]||(i[0]=[t("",78)])])}const k=a(n,[["render",l]]);export{c as __pageData,k as default}; diff --git a/docs/assets/modules_core_routing.md.HsdCAFVu.js b/docs/assets/modules_core_routing.md.DhgGkAb8.js similarity index 97% rename from docs/assets/modules_core_routing.md.HsdCAFVu.js rename to docs/assets/modules_core_routing.md.DhgGkAb8.js index 61adf270d..9ec88834c 100644 --- a/docs/assets/modules_core_routing.md.HsdCAFVu.js +++ b/docs/assets/modules_core_routing.md.DhgGkAb8.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routing","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/routing.md","filePath":"modules/core/routing.md","lastUpdated":null}'),p={name:"modules/core/routing.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Routing ​

Vix routes are designed to be explicit and minimal.

Everything happens inside handlers.


Minimal server ​

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routing","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/routing.md","filePath":"modules/core/routing.md","lastUpdated":1770805184000}'),p={name:"modules/core/routing.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Routing ​

Vix routes are designed to be explicit and minimal.

Everything happens inside handlers.


Minimal server ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -189,4 +189,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   });
 
   app.run(8080);
-}

Rule of thumb ​

  • Use res.status(...).json(...) when you want full control
  • Return a payload when you want auto-send
  • Keep handlers small and explicit
`,47)])])}const y=i(p,[["render",k]]);export{g as __pageData,y as default}; +}

Rule of thumb ​

  • Use res.status(...).json(...) when you want full control
  • Return a payload when you want auto-send
  • Keep handlers small and explicit
`,47)])])}const o=i(p,[["render",k]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_core_routing.md.DhgGkAb8.lean.js b/docs/assets/modules_core_routing.md.DhgGkAb8.lean.js new file mode 100644 index 000000000..96137c48b --- /dev/null +++ b/docs/assets/modules_core_routing.md.DhgGkAb8.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Routing","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/routing.md","filePath":"modules/core/routing.md","lastUpdated":1770805184000}'),p={name:"modules/core/routing.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",47)])])}const o=i(p,[["render",k]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_core_routing.md.HsdCAFVu.lean.js b/docs/assets/modules_core_routing.md.HsdCAFVu.lean.js deleted file mode 100644 index 154fd9d92..000000000 --- a/docs/assets/modules_core_routing.md.HsdCAFVu.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Routing","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/routing.md","filePath":"modules/core/routing.md","lastUpdated":null}'),p={name:"modules/core/routing.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",47)])])}const y=i(p,[["render",k]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_server.md.DDt4bnG_.js b/docs/assets/modules_core_server.md.CfbMyTAs.js similarity index 82% rename from docs/assets/modules_core_server.md.DDt4bnG_.js rename to docs/assets/modules_core_server.md.CfbMyTAs.js index e993d17af..f74e257a7 100644 --- a/docs/assets/modules_core_server.md.DDt4bnG_.js +++ b/docs/assets/modules_core_server.md.CfbMyTAs.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"HTTP Server Guide (vix::server::HTTPServer)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/server.md","filePath":"modules/core/server.md","lastUpdated":null}'),l={name:"modules/core/server.md"};function n(o,i,r,h,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t(`

HTTP Server Guide (vix::server::HTTPServer) ​

This guide explains how the Vix HTTP server works, how it connects to the Router and Executor, and how to run and stop it cleanly.

This guide matches the current code in:

  • vix/server/HTTPServer.hpp
  • vix/server/HTTPServer.cpp

What HTTPServer is ​

vix::server::HTTPServer is an asynchronous HTTP server built on Boost.Asio and Boost.Beast.

It is responsible for:

  • Binding a TCP acceptor on the configured port
  • Accepting connections asynchronously
  • Creating a vix::session::Session for each client socket
  • Running the io_context on a pool of I/O threads
  • Exposing a shared vix::router::Router used to dispatch requests
  • Periodically reporting executor metrics

The server delegates request parsing and per-connection HTTP handling to vix::session::Session.


Key dependencies ​

Boost ​

  • boost::asio provides the I/O event loop (net::io_context), TCP sockets, acceptor, and async accept.
  • boost::beast::http provides HTTP request/response types.

Vix components ​

  • vix::router::Router: matches method + path and invokes the registered handler.
  • vix::executor::IExecutor: schedules work (used by sessions and for timers/metrics).
  • vix::session::Session: handles one client connection and drives HTTP reads/writes.

Public API ​

Constructor ​

cpp
explicit HTTPServer(vix::config::Config &config,
+import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP Server Guide (vix::server::HTTPServer)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/server.md","filePath":"modules/core/server.md","lastUpdated":1770805184000}'),l={name:"modules/core/server.md"};function n(o,i,r,h,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t(`

HTTP Server Guide (vix::server::HTTPServer) ​

This guide explains how the Vix HTTP server works, how it connects to the Router and Executor, and how to run and stop it cleanly.

This guide matches the current code in:

  • vix/server/HTTPServer.hpp
  • vix/server/HTTPServer.cpp

What HTTPServer is ​

vix::server::HTTPServer is an asynchronous HTTP server built on Boost.Asio and Boost.Beast.

It is responsible for:

  • Binding a TCP acceptor on the configured port
  • Accepting connections asynchronously
  • Creating a vix::session::Session for each client socket
  • Running the io_context on a pool of I/O threads
  • Exposing a shared vix::router::Router used to dispatch requests
  • Periodically reporting executor metrics

The server delegates request parsing and per-connection HTTP handling to vix::session::Session.


Key dependencies ​

Boost ​

  • boost::asio provides the I/O event loop (net::io_context), TCP sockets, acceptor, and async accept.
  • boost::beast::http provides HTTP request/response types.

Vix components ​

  • vix::router::Router: matches method + path and invokes the registered handler.
  • vix::executor::IExecutor: schedules work (used by sessions and for timers/metrics).
  • vix::session::Session: handles one client connection and drives HTTP reads/writes.

Public API ​

Constructor ​

cpp
explicit HTTPServer(vix::config::Config &config,
                     std::shared_ptr<vix::executor::IExecutor> exec);

What it does:

  • Stores references to Config and the executor
  • Creates io_context
  • Creates an empty Router
  • Installs a default JSON 404 handler via router_->setNotFoundHandler(...)
    • Special case: if the request method is HEAD, it returns no body

run() ​

Starts the server:

  • Initializes and binds the acceptor if not yet open
  • Starts the async accept loop
  • Starts periodic metrics reporting
  • Starts I/O worker threads that call io_context_->run()

Important:

  • run() does not block. It starts threads and returns.

start_accept() ​

Starts an async accept operation:

  • Creates a tcp::socket
  • Calls acceptor_->async_accept(...)
  • On success, calls handle_client(socket)
  • If stop is not requested, schedules the next accept

calculate_io_thread_count() ​

Thread count policy:

  • If config_.getIOThreads() is set and > 0, it forces that value
  • Otherwise it uses std::thread::hardware_concurrency() (minimum 1)

getRouter() ​

Returns the shared router:

cpp
std::shared_ptr<vix::router::Router> getRouter();

Use this to register routes before calling run().

monitor_metrics() ​

Schedules a recurring timer using the executor:

  • Every 5 seconds, reads executor_->metrics()
  • Logs: pending, active, timed_out

This uses:

cpp
vix::timers::interval(*executor_, std::chrono::seconds(5), ...);

stop_async() ​

Requests shutdown:

  • Sets stop_requested_ = true
  • Closes acceptor (if open)
  • Stops the io_context

This stops accepting new connections and causes io_context_->run() to return on I/O threads.

stop_blocking() ​

Stops and blocks until clean:

  • executor_->wait_idle()
  • join_threads()

Note:

  • In the current implementation, stop_blocking() does not call stop_async(). You typically call stop_async() first, then stop_blocking().

join_threads() ​

Joins all I/O worker threads.

bound_port() ​

Returns the actual bound port:

  • Useful when config port is 0 (ephemeral port)
  • Returns 0 if not bound yet

Internal flow ​

1) Acceptor initialization ​

init_acceptor(port):

  • open()
  • set_option(reuse_address=true)
  • bind()
  • listen()
  • stores the effective port in bound_port_ using local_endpoint().port()

Special handling:

  • If bind fails with address-in-use, a clearer exception message is thrown.

2) Accept loop ​

start_accept() calls async_accept and re-arms itself.

Stop logic:

  • If stop_requested_ is true, the loop stops re-arming accepts.

3) Session creation ​

When a socket is accepted:

  • handle_client(socket) creates a vix::session::Session
  • It passes:
    • socket
    • router
    • config
    • executor
  • Calls session->run()

All request routing happens inside the session using the router.

4) I/O threads ​

start_io_threads():

  • Spawns N threads
  • Each thread calls io_context_->run()

Linux only:

  • set_affinity(i) pins each I/O thread to a CPU using pthread_setaffinity_np

Typical usage ​

Setup and run ​

Pseudo example:

cpp
vix::config::Config cfg;
 auto exec = vix::experimental::make_threadpool_executor(4, 32, 0);
 
@@ -13,4 +13,4 @@ import{_ as s,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k
 // keep main alive, or wait on a signal

Graceful shutdown ​

A typical pattern:

  1. request stop
  2. wait for threads to finish
cpp
server.stop_async();
 server.stop_blocking();

Notes and gotchas ​

Port validation ​

In run():

  • If port is not 0 and < 1024, or > 65535, it throws.

That means:

  • privileged ports (<1024) are intentionally rejected unless the config uses port 0 or >=1024.

HEAD requests ​

Not found handler:

  • For HEAD, it does not write a body.

Router layer:

  • The router already has special handling for HEAD by trying to match GET if no HEAD route exists.
  • The not-found handler still treats HEAD separately.

stop_blocking() does not stop ​

Current behavior:

  • stop_blocking() only waits for the executor to become idle and joins threads.
  • It does not close the acceptor or stop the io_context.
  • Call stop_async() before stop_blocking() if you want the threads to exit.

close_socket() ​

There is a helper to shutdown and close a socket safely, but it is not used inside HTTPServer.cpp right now. Sessions likely manage their own socket lifecycle.


How to extend ​

Custom 404 ​

Replace the default:

cpp
server.getRouter()->setNotFoundHandler([](auto& req, auto& res) {
   // build your response
-});

Dedicated executors (heavy routes) ​

Heavy routes are detected and stored in Router nodes as heavy. A session or dispatcher can use:

  • router.is_heavy(req) to decide which executor to schedule on.

Checklist for production ​

  • Set config_.getIOThreads() explicitly if you need predictable I/O thread count.
  • Make sure your executor is sized for your workload (CPU-bound vs I/O-bound).
  • Always implement a signal handler to call stop_async() then stop_blocking().
  • Ensure logging level is appropriate (metrics logs currently use Debug).
`,113)])])}const u=s(l,[["render",n]]);export{k as __pageData,u as default}; +});

Dedicated executors (heavy routes) ​

Heavy routes are detected and stored in Router nodes as heavy. A session or dispatcher can use:

  • router.is_heavy(req) to decide which executor to schedule on.

Checklist for production ​

  • Set config_.getIOThreads() explicitly if you need predictable I/O thread count.
  • Make sure your executor is sized for your workload (CPU-bound vs I/O-bound).
  • Always implement a signal handler to call stop_async() then stop_blocking().
  • Ensure logging level is appropriate (metrics logs currently use Debug).
`,113)])])}const E=s(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_server.md.CfbMyTAs.lean.js b/docs/assets/modules_core_server.md.CfbMyTAs.lean.js new file mode 100644 index 000000000..0877e0054 --- /dev/null +++ b/docs/assets/modules_core_server.md.CfbMyTAs.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"HTTP Server Guide (vix::server::HTTPServer)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/server.md","filePath":"modules/core/server.md","lastUpdated":1770805184000}'),l={name:"modules/core/server.md"};function n(o,i,r,h,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t("",113)])])}const E=s(l,[["render",n]]);export{g as __pageData,E as default}; diff --git a/docs/assets/modules_core_server.md.DDt4bnG_.lean.js b/docs/assets/modules_core_server.md.DDt4bnG_.lean.js deleted file mode 100644 index 2795180cc..000000000 --- a/docs/assets/modules_core_server.md.DDt4bnG_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as e,c as a,a2 as t}from"./chunks/framework.jUmBZPH5.js";const k=JSON.parse('{"title":"HTTP Server Guide (vix::server::HTTPServer)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/server.md","filePath":"modules/core/server.md","lastUpdated":null}'),l={name:"modules/core/server.md"};function n(o,i,r,h,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t("",113)])])}const u=s(l,[["render",n]]);export{k as __pageData,u as default}; diff --git a/docs/assets/modules_core_session.md.BR1LcMfs.lean.js b/docs/assets/modules_core_session.md.BR1LcMfs.lean.js deleted file mode 100644 index 0405a5975..000000000 --- a/docs/assets/modules_core_session.md.BR1LcMfs.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as l,a2 as r}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"Session (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/session.md","filePath":"modules/core/session.md","lastUpdated":null}'),s={name:"modules/core/session.md"};function t(o,e,n,c,u,p){return a(),l("div",null,[...e[0]||(e[0]=[r("",86)])])}const f=i(s,[["render",t]]);export{d as __pageData,f as default}; diff --git a/docs/assets/modules_core_session.md.BR1LcMfs.js b/docs/assets/modules_core_session.md.y7iQf0Jp.js similarity index 51% rename from docs/assets/modules_core_session.md.BR1LcMfs.js rename to docs/assets/modules_core_session.md.y7iQf0Jp.js index 364bca5f7..6d13eb255 100644 --- a/docs/assets/modules_core_session.md.BR1LcMfs.js +++ b/docs/assets/modules_core_session.md.y7iQf0Jp.js @@ -1,2 +1,2 @@ -import{_ as i,o as a,c as l,a2 as r}from"./chunks/framework.jUmBZPH5.js";const d=JSON.parse('{"title":"Session (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/session.md","filePath":"modules/core/session.md","lastUpdated":null}'),s={name:"modules/core/session.md"};function t(o,e,n,c,u,p){return a(),l("div",null,[...e[0]||(e[0]=[r(`

Session (core) ​

The Session component represents a single client connection.

It is responsible for:

  • Reading HTTP requests
  • Enforcing limits (body size, timeouts)
  • Applying basic WAF checks
  • Dispatching to the Router
  • Handling heavy vs light routes
  • Writing HTTP responses
  • Managing keep-alive connections

Architecture Role ​

The execution chain is:

TCP Socket
→ Session
→ Router
→ Handler
→ Response

Each client connection owns one Session instance.


Responsibilities ​

1. Asynchronous Request Reading ​

Session uses Boost.Beast async read to:

  • Parse HTTP headers and body
  • Enforce body size limits
  • Handle connection resets safely

Maximum request body size (default):

10 MB

This protects the server from memory abuse.


2. Timeout Protection ​

Each request starts a timer:

  • Configurable via Config
  • Prevents stalled connections
  • Automatically closes the socket if expired

This avoids slowloris-style attacks.


3. Basic WAF (Web Application Firewall) ​

Session performs lightweight request filtering before routing.

Modes:

  • off
  • basic
  • strict

Checks include:

  • Suspicious SQL keywords (SELECT, UNION, DROP, etc.)
  • Script injection patterns
  • Body size validation
  • Target length validation
  • Control character rejection

In benchmark mode, WAF can be disabled.

This is not a full security layer, but a protective filter.


Light vs Heavy Routes ​

Session asks the router:

router.is_heavy(request)
-

If route is NOT heavy:

  • Executed immediately in I/O thread

If route IS heavy:

  • Posted to configured executor
  • Prevents blocking I/O threads
  • Allows CPU/DB isolation

If executor is saturated:

  • Returns 503 Service Unavailable

This separation protects latency.


Keep-Alive Handling ​

If request uses keep-alive:

  • Session keeps socket open
  • Parses next request

If not:

  • Socket is gracefully closed

HEAD requests are handled properly.


Response Flow ​

All responses:

  • Are written asynchronously
  • Use strand to ensure serialized writes
  • Respect keep-alive headers
  • Automatically set connection field

Error responses are standardized.


Error Handling Guarantees ​

Session guarantees:

  • No uncaught exceptions escape async callbacks
  • Graceful shutdown on read/write errors
  • Proper socket close on failure
  • No double writes (strand protected)

Security Safeguards ​

Session protects against:

  • Oversized payloads
  • Malformed requests
  • Suspicious body patterns
  • Control character injection
  • Basic SQL/XSS injection attempts

It is a first defense layer, not a full firewall.


Thread Safety ​

  • Writes are serialized using asio::strand
  • Heavy route execution is offloaded to executor
  • No shared mutable state across sessions

Each Session is independent.


Performance Model ​

Fast path (light routes):

  • No thread hop
  • Direct router dispatch
  • Minimal overhead

Heavy path:

  • Executor dispatch
  • Safe isolation from I/O threads

Timeout and body limit checks are constant-time.


When To Use ​

Session is automatically used by HTTPServer.

You rarely instantiate it manually.

It exists to:

  • Encapsulate connection lifecycle
  • Protect I/O threads
  • Provide safe async boundaries

Summary ​

Session is the per-connection runtime engine of Vix.

It provides:

  • Async parsing
  • WAF filtering
  • Heavy route offloading
  • Timeout enforcement
  • Safe response writing
  • Keep-alive support

It forms the execution boundary between the network layer and application logic.

`,86)])])}const f=i(s,[["render",t]]);export{d as __pageData,f as default}; +import{_ as i,o as a,c as l,a as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const m=JSON.parse('{"title":"Session (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/session.md","filePath":"modules/core/session.md","lastUpdated":1770805184000}'),t={name:"modules/core/session.md"};function s(o,e,n,c,u,p){return a(),l("div",null,[...e[0]||(e[0]=[r(`

Session (core) ​

The Session component represents a single client connection.

It is responsible for:

  • Reading HTTP requests
  • Enforcing limits (body size, timeouts)
  • Applying basic WAF checks
  • Dispatching to the Router
  • Handling heavy vs light routes
  • Writing HTTP responses
  • Managing keep-alive connections

Architecture Role ​

The execution chain is:

TCP Socket
→ Session
→ Router
→ Handler
→ Response

Each client connection owns one Session instance.


Responsibilities ​

1. Asynchronous Request Reading ​

Session uses Boost.Beast async read to:

  • Parse HTTP headers and body
  • Enforce body size limits
  • Handle connection resets safely

Maximum request body size (default):

10 MB

This protects the server from memory abuse.


2. Timeout Protection ​

Each request starts a timer:

  • Configurable via Config
  • Prevents stalled connections
  • Automatically closes the socket if expired

This avoids slowloris-style attacks.


3. Basic WAF (Web Application Firewall) ​

Session performs lightweight request filtering before routing.

Modes:

  • off
  • basic
  • strict

Checks include:

  • Suspicious SQL keywords (SELECT, UNION, DROP, etc.)
  • Script injection patterns
  • Body size validation
  • Target length validation
  • Control character rejection

In benchmark mode, WAF can be disabled.

This is not a full security layer, but a protective filter.


Light vs Heavy Routes ​

Session asks the router:

router.is_heavy(request)
+

If route is NOT heavy:

  • Executed immediately in I/O thread

If route IS heavy:

  • Posted to configured executor
  • Prevents blocking I/O threads
  • Allows CPU/DB isolation

If executor is saturated:

  • Returns 503 Service Unavailable

This separation protects latency.


Keep-Alive Handling ​

If request uses keep-alive:

  • Session keeps socket open
  • Parses next request

If not:

  • Socket is gracefully closed

HEAD requests are handled properly.


Response Flow ​

All responses:

  • Are written asynchronously
  • Use strand to ensure serialized writes
  • Respect keep-alive headers
  • Automatically set connection field

Error responses are standardized.


Error Handling Guarantees ​

Session guarantees:

  • No uncaught exceptions escape async callbacks
  • Graceful shutdown on read/write errors
  • Proper socket close on failure
  • No double writes (strand protected)

Security Safeguards ​

Session protects against:

  • Oversized payloads
  • Malformed requests
  • Suspicious body patterns
  • Control character injection
  • Basic SQL/XSS injection attempts

It is a first defense layer, not a full firewall.


Thread Safety ​

  • Writes are serialized using asio::strand
  • Heavy route execution is offloaded to executor
  • No shared mutable state across sessions

Each Session is independent.


Performance Model ​

Fast path (light routes):

  • No thread hop
  • Direct router dispatch
  • Minimal overhead

Heavy path:

  • Executor dispatch
  • Safe isolation from I/O threads

Timeout and body limit checks are constant-time.


When To Use ​

Session is automatically used by HTTPServer.

You rarely instantiate it manually.

It exists to:

  • Encapsulate connection lifecycle
  • Protect I/O threads
  • Provide safe async boundaries

Summary ​

Session is the per-connection runtime engine of Vix.

It provides:

  • Async parsing
  • WAF filtering
  • Heavy route offloading
  • Timeout enforcement
  • Safe response writing
  • Keep-alive support

It forms the execution boundary between the network layer and application logic.

`,86)])])}const b=i(t,[["render",s]]);export{m as __pageData,b as default}; diff --git a/docs/assets/modules_core_session.md.y7iQf0Jp.lean.js b/docs/assets/modules_core_session.md.y7iQf0Jp.lean.js new file mode 100644 index 000000000..a9b2fcfa7 --- /dev/null +++ b/docs/assets/modules_core_session.md.y7iQf0Jp.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as l,a as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const m=JSON.parse('{"title":"Session (core)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/session.md","filePath":"modules/core/session.md","lastUpdated":1770805184000}'),t={name:"modules/core/session.md"};function s(o,e,n,c,u,p){return a(),l("div",null,[...e[0]||(e[0]=[r("",86)])])}const b=i(t,[["render",s]]);export{m as __pageData,b as default}; diff --git a/docs/assets/modules_core_threadpool.md.DPg8uS7f.js b/docs/assets/modules_core_threadpool.md.DPg8uS7f.js deleted file mode 100644 index b56f2048b..000000000 --- a/docs/assets/modules_core_threadpool.md.DPg8uS7f.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,o as i,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"ThreadPool (vix::threadpool)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/threadpool.md","filePath":"modules/core/threadpool.md","lastUpdated":null}'),r={name:"modules/core/threadpool.md"};function l(d,e,s,n,c,u){return i(),t("div",null,[...e[0]||(e[0]=[a('

ThreadPool (vix::threadpool) ​

This module provides a priority-based thread pool used by Vix for background work and heavy workloads.

Key features:

  • Priority scheduling via a std::priority_queue<Task, ..., TaskCmp>
  • FIFO behavior inside the same priority using a monotonic sequence number (seq)
  • Automatic worker growth when saturated (up to maxThreads)
  • Lightweight metrics: pending, active, timed out
  • Periodic scheduler threads that enqueue work at fixed intervals
  • Linux CPU affinity for worker threads (best-effort)

Components ​

1) Task ​

Task is the unit of work stored in the internal priority queue.

  • func: std::function<void()> executed by a worker
  • priority: integer priority used by the queue
  • seq: increasing number used to keep deterministic ordering

Important detail:

  • Higher priority runs first.
  • If two tasks have the same priority, smaller seq runs first (earlier enqueued first).

2) TaskCmp ​

TaskCmp defines ordering for the priority queue.

  • First compares priority
  • Then compares seq

Because std::priority_queue keeps the "largest" element on top, the comparator is written so that:

  • tasks with higher priority end up at the top
  • for equal priority, the smaller sequence number is served first

3) TaskGuard ​

TaskGuard is a small RAII helper that increments a shared atomic counter on construction and decrements on destruction.

In this pool, it is used to track activeTasks safely even if the task throws.

4) ThreadPool ​

The pool has two kinds of threads:

  1. Worker threads (workers)

    • Wait for tasks
    • Pop the highest priority task
    • Execute it
    • Update activeTasks
    • Notify cvIdle when the pool becomes idle
  2. Periodic scheduler threads (periodicWorkers)

    • Sleep until the next tick
    • Enqueue a task into the main pool
    • Limit concurrency with maxPeriodicThreads

Construction ​

Constructor:

  • threadCount: initial worker threads (clamped to at least 1)
  • maxThreadCount: upper bound for auto-growth (clamped to at least 1)
  • priority: default priority used by enqueue() overloads without an explicit priority
  • maxPeriodic: maximum concurrent periodic scheduler threads (defaults to 4, clamped to at least 1)

Behavior:

  • Workers start immediately.
  • If worker creation fails, the pool stops and joins threads before rethrowing.

Enqueueing work ​

There are three overloads:

  1. enqueue(priority, timeout, f, args...)
  2. enqueue(priority, f, args...)
  3. enqueue(f, args...) (uses default pool priority)

Timeout behavior ​

The timeout is for warning and metrics only.

  • The pool does not cancel the work.
  • If the work finishes after timeout, a warning is logged and tasksTimedOut is incremented.

Return values ​

enqueue wraps the callable in a std::packaged_task and returns a std::future<ReturnType>.

This means:

  • Exceptions thrown inside the callable propagate through the future.
  • You can future.get() to rethrow.

Auto-scaling ​

On each enqueue, the pool checks:

  • wcount = workers.size()
  • saturated = (activeTasks >= wcount)
  • backlog = (tasks.size() > wcount)

If:

  • wcount < maxThreads and saturated and backlog

then it creates a new worker thread.

This is a simple heuristic: it grows when all workers appear busy and the queue is building.

Periodic scheduling ​

periodicTask(priority, func, interval) creates a scheduler thread that:

  • Ensures there are fewer than maxPeriodicThreads active periodic threads
  • On each tick, enqueues func into the main pool using enqueue(priority, ...)
  • Warns if the posted task is not completed by the time the next tick occurs

Important details:

  • The scheduler itself does not run the job; it only posts it into the pool.
  • Periodic threads stop when stopPeriodic becomes true.

Idle waiting ​

Two helpers exist:

  • isIdle() returns true when there are no pending tasks and activeTasks == 0
  • waitUntilIdle() blocks until both conditions are true

Implementation note:

  • Workers notify cvIdle whenever they see both tasks.empty() and activeTasks == 0 after finishing a task.

Shutdown and lifetime ​

The destructor stops everything and joins threads.

  • Sets stop = true and stopPeriodic = true
  • Wakes all waiters (condition, cvPeriodic)
  • Joins periodic workers then main workers

Behavioral implications:

  • Enqueue after stop triggers an exception (ThreadPool is stopped; cannot enqueue new tasks).
  • Stopping does not attempt to cancel running tasks; it waits for workers to exit after the queue drains.

Platform notes ​

Linux CPU affinity ​

On Linux, worker threads attempt to pin themselves to a CPU core:

  • Uses pthread_setaffinity_np
  • Core index is id % hardware_concurrency
  • If setting affinity fails, the pool logs a warning

On non-Linux platforms, the affinity call is a no-op.

Windows macros ​

On Windows, the header temporarily undefines min and max macros to avoid conflicts with standard library headers.

Usage example ​

Minimal usage pattern:

  1. Create a pool with a reasonable thread count.
  2. Enqueue work with priorities.
  3. Optionally wait for idle during shutdown.

Example priorities convention (suggested):

  • 100: latency-sensitive tasks
  • 50: normal tasks
  • 10: background tasks

Integration note for Vix server ​

In the HTTP pipeline, heavy routes are executed via an executor abstraction. The executor can be backed by this thread pool (or another implementation). A heavy route should:

  • Avoid blocking the I/O threads
  • Run in the executor/pool
  • Return the response via the session write path

That separation is what keeps the I/O threads responsive.

Quick checklist ​

  • Use a small threadCount for startup, allow growth with maxThreads.
  • Use priorities consistently across the codebase.
  • Use timeout warnings to find tasks that exceed your SLO.
  • Prefer short periodic tasks, and keep periodic concurrency bounded.
  • Call waitUntilIdle() only in controlled shutdown paths.
',76)])])}const m=o(r,[["render",l]]);export{p as __pageData,m as default}; diff --git a/docs/assets/modules_core_threadpool.md.DPg8uS7f.lean.js b/docs/assets/modules_core_threadpool.md.DPg8uS7f.lean.js deleted file mode 100644 index 170e24a68..000000000 --- a/docs/assets/modules_core_threadpool.md.DPg8uS7f.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o,o as i,c as t,a2 as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"ThreadPool (vix::threadpool)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/threadpool.md","filePath":"modules/core/threadpool.md","lastUpdated":null}'),r={name:"modules/core/threadpool.md"};function l(d,e,s,n,c,u){return i(),t("div",null,[...e[0]||(e[0]=[a("",76)])])}const m=o(r,[["render",l]]);export{p as __pageData,m as default}; diff --git a/docs/assets/modules_core_threadpool.md.HhQ5lJOP.js b/docs/assets/modules_core_threadpool.md.HhQ5lJOP.js new file mode 100644 index 000000000..31a713bec --- /dev/null +++ b/docs/assets/modules_core_threadpool.md.HhQ5lJOP.js @@ -0,0 +1 @@ +import{_ as o,o as i,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"ThreadPool (vix::threadpool)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/threadpool.md","filePath":"modules/core/threadpool.md","lastUpdated":1770805184000}'),r={name:"modules/core/threadpool.md"};function l(d,e,s,n,c,u){return i(),t("div",null,[...e[0]||(e[0]=[a('

ThreadPool (vix::threadpool) ​

This module provides a priority-based thread pool used by Vix for background work and heavy workloads.

Key features:

  • Priority scheduling via a std::priority_queue<Task, ..., TaskCmp>
  • FIFO behavior inside the same priority using a monotonic sequence number (seq)
  • Automatic worker growth when saturated (up to maxThreads)
  • Lightweight metrics: pending, active, timed out
  • Periodic scheduler threads that enqueue work at fixed intervals
  • Linux CPU affinity for worker threads (best-effort)

Components ​

1) Task ​

Task is the unit of work stored in the internal priority queue.

  • func: std::function<void()> executed by a worker
  • priority: integer priority used by the queue
  • seq: increasing number used to keep deterministic ordering

Important detail:

  • Higher priority runs first.
  • If two tasks have the same priority, smaller seq runs first (earlier enqueued first).

2) TaskCmp ​

TaskCmp defines ordering for the priority queue.

  • First compares priority
  • Then compares seq

Because std::priority_queue keeps the "largest" element on top, the comparator is written so that:

  • tasks with higher priority end up at the top
  • for equal priority, the smaller sequence number is served first

3) TaskGuard ​

TaskGuard is a small RAII helper that increments a shared atomic counter on construction and decrements on destruction.

In this pool, it is used to track activeTasks safely even if the task throws.

4) ThreadPool ​

The pool has two kinds of threads:

  1. Worker threads (workers)

    • Wait for tasks
    • Pop the highest priority task
    • Execute it
    • Update activeTasks
    • Notify cvIdle when the pool becomes idle
  2. Periodic scheduler threads (periodicWorkers)

    • Sleep until the next tick
    • Enqueue a task into the main pool
    • Limit concurrency with maxPeriodicThreads

Construction ​

Constructor:

  • threadCount: initial worker threads (clamped to at least 1)
  • maxThreadCount: upper bound for auto-growth (clamped to at least 1)
  • priority: default priority used by enqueue() overloads without an explicit priority
  • maxPeriodic: maximum concurrent periodic scheduler threads (defaults to 4, clamped to at least 1)

Behavior:

  • Workers start immediately.
  • If worker creation fails, the pool stops and joins threads before rethrowing.

Enqueueing work ​

There are three overloads:

  1. enqueue(priority, timeout, f, args...)
  2. enqueue(priority, f, args...)
  3. enqueue(f, args...) (uses default pool priority)

Timeout behavior ​

The timeout is for warning and metrics only.

  • The pool does not cancel the work.
  • If the work finishes after timeout, a warning is logged and tasksTimedOut is incremented.

Return values ​

enqueue wraps the callable in a std::packaged_task and returns a std::future<ReturnType>.

This means:

  • Exceptions thrown inside the callable propagate through the future.
  • You can future.get() to rethrow.

Auto-scaling ​

On each enqueue, the pool checks:

  • wcount = workers.size()
  • saturated = (activeTasks >= wcount)
  • backlog = (tasks.size() > wcount)

If:

  • wcount < maxThreads and saturated and backlog

then it creates a new worker thread.

This is a simple heuristic: it grows when all workers appear busy and the queue is building.

Periodic scheduling ​

periodicTask(priority, func, interval) creates a scheduler thread that:

  • Ensures there are fewer than maxPeriodicThreads active periodic threads
  • On each tick, enqueues func into the main pool using enqueue(priority, ...)
  • Warns if the posted task is not completed by the time the next tick occurs

Important details:

  • The scheduler itself does not run the job; it only posts it into the pool.
  • Periodic threads stop when stopPeriodic becomes true.

Idle waiting ​

Two helpers exist:

  • isIdle() returns true when there are no pending tasks and activeTasks == 0
  • waitUntilIdle() blocks until both conditions are true

Implementation note:

  • Workers notify cvIdle whenever they see both tasks.empty() and activeTasks == 0 after finishing a task.

Shutdown and lifetime ​

The destructor stops everything and joins threads.

  • Sets stop = true and stopPeriodic = true
  • Wakes all waiters (condition, cvPeriodic)
  • Joins periodic workers then main workers

Behavioral implications:

  • Enqueue after stop triggers an exception (ThreadPool is stopped; cannot enqueue new tasks).
  • Stopping does not attempt to cancel running tasks; it waits for workers to exit after the queue drains.

Platform notes ​

Linux CPU affinity ​

On Linux, worker threads attempt to pin themselves to a CPU core:

  • Uses pthread_setaffinity_np
  • Core index is id % hardware_concurrency
  • If setting affinity fails, the pool logs a warning

On non-Linux platforms, the affinity call is a no-op.

Windows macros ​

On Windows, the header temporarily undefines min and max macros to avoid conflicts with standard library headers.

Usage example ​

Minimal usage pattern:

  1. Create a pool with a reasonable thread count.
  2. Enqueue work with priorities.
  3. Optionally wait for idle during shutdown.

Example priorities convention (suggested):

  • 100: latency-sensitive tasks
  • 50: normal tasks
  • 10: background tasks

Integration note for Vix server ​

In the HTTP pipeline, heavy routes are executed via an executor abstraction. The executor can be backed by this thread pool (or another implementation). A heavy route should:

  • Avoid blocking the I/O threads
  • Run in the executor/pool
  • Return the response via the session write path

That separation is what keeps the I/O threads responsive.

Quick checklist ​

  • Use a small threadCount for startup, allow growth with maxThreads.
  • Use priorities consistently across the codebase.
  • Use timeout warnings to find tasks that exceed your SLO.
  • Prefer short periodic tasks, and keep periodic concurrency bounded.
  • Call waitUntilIdle() only in controlled shutdown paths.
',76)])])}const f=o(r,[["render",l]]);export{k as __pageData,f as default}; diff --git a/docs/assets/modules_core_threadpool.md.HhQ5lJOP.lean.js b/docs/assets/modules_core_threadpool.md.HhQ5lJOP.lean.js new file mode 100644 index 000000000..629ac1ce9 --- /dev/null +++ b/docs/assets/modules_core_threadpool.md.HhQ5lJOP.lean.js @@ -0,0 +1 @@ +import{_ as o,o as i,c as t,a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const k=JSON.parse('{"title":"ThreadPool (vix::threadpool)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/threadpool.md","filePath":"modules/core/threadpool.md","lastUpdated":1770805184000}'),r={name:"modules/core/threadpool.md"};function l(d,e,s,n,c,u){return i(),t("div",null,[...e[0]||(e[0]=[a("",76)])])}const f=o(r,[["render",l]]);export{k as __pageData,f as default}; diff --git a/docs/assets/modules_core_timers.md.DPXObfyk.js b/docs/assets/modules_core_timers.md.BM3bKY3s.js similarity index 66% rename from docs/assets/modules_core_timers.md.DPXObfyk.js rename to docs/assets/modules_core_timers.md.BM3bKY3s.js index 5d4c64cf1..d899f0da7 100644 --- a/docs/assets/modules_core_timers.md.DPXObfyk.js +++ b/docs/assets/modules_core_timers.md.BM3bKY3s.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Timers: interval","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/timers.md","filePath":"modules/core/timers.md","lastUpdated":null}'),l={name:"modules/core/timers.md"};function n(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t(`

Timers: interval ​

vix::timers::interval() is a tiny utility that runs a repeating timer loop on a dedicated thread, and posts the actual work to an executor.

This design keeps timing separate from execution:

  • the timer thread only wakes up and schedules
  • the executor runs the callback (potentially on a pool)

Files ​

  • vix/timers/interval.hpp

Key types ​

vix::timers::IntervalHandle ​

RAII handle that owns:

  • a shared stop flag (IntervalHandle::State)
  • a worker thread that wakes up every period and posts the task

When the handle is destroyed, it stops the loop and joins the thread.

Important members:

  • std::shared_ptr<State> state
  • std::thread t

Important methods:

  • stopNow() stops and joins (safe to call multiple times)
  • destructor calls stopNow() (RAII)

API ​

IntervalHandle interval(IExecutor& exec, milliseconds period, function<void()> fn, TaskOptions opt = {}) ​

Behavior:

  1. Creates IntervalHandle with a shared State{stop=false}
  2. Starts a thread that:
    • computes next = now + period
    • loops:
      • exits if handle is gone or stop=true
      • exec.post(fn, opt)
      • sleep_until(next)
      • next += period
  3. Returns the handle

Notes:

  • The return handle controls lifetime. If you drop it, the interval stops.
  • The callback is posted to exec. It does not run on the timer thread.
  • The scheduling is “fixed cadence” using sleep_until(next) then next += period to reduce drift.

Typical usage ​

1) Store the handle in a long-lived owner (server, app) ​

cpp
#include <vix/timers/interval.hpp>
+import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Timers: interval","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/timers.md","filePath":"modules/core/timers.md","lastUpdated":1770805184000}'),l={name:"modules/core/timers.md"};function n(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t(`

Timers: interval ​

vix::timers::interval() is a tiny utility that runs a repeating timer loop on a dedicated thread, and posts the actual work to an executor.

This design keeps timing separate from execution:

  • the timer thread only wakes up and schedules
  • the executor runs the callback (potentially on a pool)

Files ​

  • vix/timers/interval.hpp

Key types ​

vix::timers::IntervalHandle ​

RAII handle that owns:

  • a shared stop flag (IntervalHandle::State)
  • a worker thread that wakes up every period and posts the task

When the handle is destroyed, it stops the loop and joins the thread.

Important members:

  • std::shared_ptr<State> state
  • std::thread t

Important methods:

  • stopNow() stops and joins (safe to call multiple times)
  • destructor calls stopNow() (RAII)

API ​

IntervalHandle interval(IExecutor& exec, milliseconds period, function<void()> fn, TaskOptions opt = {}) ​

Behavior:

  1. Creates IntervalHandle with a shared State{stop=false}
  2. Starts a thread that:
    • computes next = now + period
    • loops:
      • exits if handle is gone or stop=true
      • exec.post(fn, opt)
      • sleep_until(next)
      • next += period
  3. Returns the handle

Notes:

  • The return handle controls lifetime. If you drop it, the interval stops.
  • The callback is posted to exec. It does not run on the timer thread.
  • The scheduling is “fixed cadence” using sleep_until(next) then next += period to reduce drift.

Typical usage ​

1) Store the handle in a long-lived owner (server, app) ​

cpp
#include <vix/timers/interval.hpp>
 
 class MyServer {
 public:
@@ -26,4 +26,4 @@ import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c
   vix::timers::IntervalHandle metrics_{};
 };

2) Stop explicitly ​

cpp
auto h = vix::timers::interval(exec, 250ms, []{ /* ... */ });
 /* ... */
-h.stopNow(); // stops loop + joins thread

Concurrency and safety ​

  • IntervalHandle is movable, not copyable.
  • stopNow() is idempotent:
    • sets stop=true if state exists
    • joins the thread if joinable
  • The worker thread captures exec by reference.
    • Make sure exec outlives the interval handle.
  • The loop uses a weak_ptr to detect handle destruction safely.

Practical guidance ​

  • Use it for “background periodic work”:
    • executor metrics logging
    • housekeeping tasks
    • cache refresh
  • Keep the posted callback short. If it is heavy, your executor should route it appropriately (priority, heavy routes, separate pool).
  • If you need stronger timer semantics (jitter control, cancel callbacks already queued), that logic should live in the executor or in a higher-level scheduler.
`,36)])])}const E=i(l,[["render",n]]);export{c as __pageData,E as default}; +h.stopNow(); // stops loop + joins thread

Concurrency and safety ​

  • IntervalHandle is movable, not copyable.
  • stopNow() is idempotent:
    • sets stop=true if state exists
    • joins the thread if joinable
  • The worker thread captures exec by reference.
    • Make sure exec outlives the interval handle.
  • The loop uses a weak_ptr to detect handle destruction safely.

Practical guidance ​

  • Use it for “background periodic work”:
    • executor metrics logging
    • housekeeping tasks
    • cache refresh
  • Keep the posted callback short. If it is heavy, your executor should route it appropriately (priority, heavy routes, separate pool).
  • If you need stronger timer semantics (jitter control, cancel callbacks already queued), that logic should live in the executor or in a higher-level scheduler.
`,36)])])}const y=s(l,[["render",n]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_timers.md.BM3bKY3s.lean.js b/docs/assets/modules_core_timers.md.BM3bKY3s.lean.js new file mode 100644 index 000000000..cef667e09 --- /dev/null +++ b/docs/assets/modules_core_timers.md.BM3bKY3s.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Timers: interval","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/timers.md","filePath":"modules/core/timers.md","lastUpdated":1770805184000}'),l={name:"modules/core/timers.md"};function n(h,i,p,r,o,k){return a(),e("div",null,[...i[0]||(i[0]=[t("",36)])])}const y=s(l,[["render",n]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_core_timers.md.DPXObfyk.lean.js b/docs/assets/modules_core_timers.md.DPXObfyk.lean.js deleted file mode 100644 index d859bb257..000000000 --- a/docs/assets/modules_core_timers.md.DPXObfyk.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as e,a2 as t}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Timers: interval","description":"","frontmatter":{},"headers":[],"relativePath":"modules/core/timers.md","filePath":"modules/core/timers.md","lastUpdated":null}'),l={name:"modules/core/timers.md"};function n(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t("",36)])])}const E=i(l,[["render",n]]);export{c as __pageData,E as default}; diff --git a/docs/assets/modules_crypto_guide.md.DsSikr4k.js b/docs/assets/modules_crypto_guide.md.DsSikr4k.js deleted file mode 100644 index 0251897fc..000000000 --- a/docs/assets/modules_crypto_guide.md.DsSikr4k.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/guide.md","filePath":"modules/crypto/guide.md","lastUpdated":null}'),a={name:"modules/crypto/guide.md"};function r(s,d,c,n,p,i){return t(),o("div")}const u=e(a,[["render",r]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_crypto_guide.md.DsSikr4k.lean.js b/docs/assets/modules_crypto_guide.md.DsSikr4k.lean.js deleted file mode 100644 index 0251897fc..000000000 --- a/docs/assets/modules_crypto_guide.md.DsSikr4k.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/guide.md","filePath":"modules/crypto/guide.md","lastUpdated":null}'),a={name:"modules/crypto/guide.md"};function r(s,d,c,n,p,i){return t(),o("div")}const u=e(a,[["render",r]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_crypto_guide.md.WXCpSF2o.js b/docs/assets/modules_crypto_guide.md.WXCpSF2o.js new file mode 100644 index 000000000..99d76b3e3 --- /dev/null +++ b/docs/assets/modules_crypto_guide.md.WXCpSF2o.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/guide.md","filePath":"modules/crypto/guide.md","lastUpdated":1770805184000}'),r={name:"modules/crypto/guide.md"};function a(s,d,c,p,i,n){return t(),o("div")}const f=e(r,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_crypto_guide.md.WXCpSF2o.lean.js b/docs/assets/modules_crypto_guide.md.WXCpSF2o.lean.js new file mode 100644 index 000000000..99d76b3e3 --- /dev/null +++ b/docs/assets/modules_crypto_guide.md.WXCpSF2o.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/guide.md","filePath":"modules/crypto/guide.md","lastUpdated":1770805184000}'),r={name:"modules/crypto/guide.md"};function a(s,d,c,p,i,n){return t(),o("div")}const f=e(r,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_crypto_index.md.-VrCImDm.lean.js b/docs/assets/modules_crypto_index.md.-VrCImDm.lean.js deleted file mode 100644 index da69c855b..000000000 --- a/docs/assets/modules_crypto_index.md.-VrCImDm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Crypto","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/index.md","filePath":"modules/crypto/index.md","lastUpdated":null}'),l={name:"modules/crypto/index.md"};function h(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",62)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_crypto_index.md.-VrCImDm.js b/docs/assets/modules_crypto_index.md.DtN-eWmL.js similarity index 89% rename from docs/assets/modules_crypto_index.md.-VrCImDm.js rename to docs/assets/modules_crypto_index.md.DtN-eWmL.js index 0b6ddb49c..86ba0fcfd 100644 --- a/docs/assets/modules_crypto_index.md.-VrCImDm.js +++ b/docs/assets/modules_crypto_index.md.DtN-eWmL.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Crypto","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/index.md","filePath":"modules/crypto/index.md","lastUpdated":null}'),l={name:"modules/crypto/index.md"};function h(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Crypto ​

The vix::crypto module provides modern, explicit cryptographic primitives for:

  • Hashing (SHA-256)
  • Authenticated encryption (AEAD)
  • Digital signatures (Ed25519)
  • Secure randomness

This is a guide: it explains how to use each primitive with minimal code patterns.

Include ​

cpp
#include <vix/crypto/crypto.hpp>

Namespace:

cpp
using namespace vix::crypto;

Result model ​

Crypto operations return a result object.

  • Check success with .ok()
  • Read output with .value()
  • Read error with .error().message

Minimal pattern:

cpp
auto r = sha256(msg, out);
+import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Crypto","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/index.md","filePath":"modules/crypto/index.md","lastUpdated":1770805184000}'),l={name:"modules/crypto/index.md"};function h(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Crypto ​

The vix::crypto module provides modern, explicit cryptographic primitives for:

  • Hashing (SHA-256)
  • Authenticated encryption (AEAD)
  • Digital signatures (Ed25519)
  • Secure randomness

This is a guide: it explains how to use each primitive with minimal code patterns.

Include ​

cpp
#include <vix/crypto/crypto.hpp>

Namespace:

cpp
using namespace vix::crypto;

Result model ​

Crypto operations return a result object.

  • Check success with .ok()
  • Read output with .value()
  • Read error with .error().message

Minimal pattern:

cpp
auto r = sha256(msg, out);
 if (!r.ok())
 {
   std::cerr << r.error().message << "\\n";
@@ -71,4 +71,4 @@ import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.jUmBZPH5.js";const g
 if (!ok.ok())
 {
   // invalid signature or wrong public key
-}

Recommended usage ​

  • SHA-256: deterministic hashing (ids, caches, content fingerprints)
  • AEAD (AES-256-GCM): encrypt + authenticate data and messages
  • Ed25519: signatures for identity and message authenticity
  • random_bytes: keys, nonces, salts, tokens

Key rules:

  • Always check .ok()
  • Never reuse AEAD nonces with the same key
  • Treat private keys as secrets and zeroize if your environment requires it
`,62)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; +}

Recommended usage ​

  • SHA-256: deterministic hashing (ids, caches, content fingerprints)
  • AEAD (AES-256-GCM): encrypt + authenticate data and messages
  • Ed25519: signatures for identity and message authenticity
  • random_bytes: keys, nonces, salts, tokens

Key rules:

  • Always check .ok()
  • Never reuse AEAD nonces with the same key
  • Treat private keys as secrets and zeroize if your environment requires it
`,62)])])}const c=i(l,[["render",h]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_crypto_index.md.DtN-eWmL.lean.js b/docs/assets/modules_crypto_index.md.DtN-eWmL.lean.js new file mode 100644 index 000000000..35e24eb83 --- /dev/null +++ b/docs/assets/modules_crypto_index.md.DtN-eWmL.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const o=JSON.parse('{"title":"Crypto","description":"","frontmatter":{},"headers":[],"relativePath":"modules/crypto/index.md","filePath":"modules/crypto/index.md","lastUpdated":1770805184000}'),l={name:"modules/crypto/index.md"};function h(e,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",62)])])}const c=i(l,[["render",h]]);export{o as __pageData,c as default}; diff --git a/docs/assets/modules_db_guide.md.Cic66hEE.js b/docs/assets/modules_db_guide.md.Cic66hEE.js new file mode 100644 index 000000000..ad8cc5759 --- /dev/null +++ b/docs/assets/modules_db_guide.md.Cic66hEE.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/guide.md","filePath":"modules/db/guide.md","lastUpdated":1770805184000}'),d={name:"modules/db/guide.md"};function o(r,s,i,c,n,m){return t(),a("div")}const f=e(d,[["render",o]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_db_guide.md.Cic66hEE.lean.js b/docs/assets/modules_db_guide.md.Cic66hEE.lean.js new file mode 100644 index 000000000..ad8cc5759 --- /dev/null +++ b/docs/assets/modules_db_guide.md.Cic66hEE.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/guide.md","filePath":"modules/db/guide.md","lastUpdated":1770805184000}'),d={name:"modules/db/guide.md"};function o(r,s,i,c,n,m){return t(),a("div")}const f=e(d,[["render",o]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_db_guide.md.DMSRMu_1.js b/docs/assets/modules_db_guide.md.DMSRMu_1.js deleted file mode 100644 index 94564fa4b..000000000 --- a/docs/assets/modules_db_guide.md.DMSRMu_1.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/guide.md","filePath":"modules/db/guide.md","lastUpdated":null}'),d={name:"modules/db/guide.md"};function o(s,r,n,c,i,l){return t(),a("div")}const u=e(d,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_db_guide.md.DMSRMu_1.lean.js b/docs/assets/modules_db_guide.md.DMSRMu_1.lean.js deleted file mode 100644 index 94564fa4b..000000000 --- a/docs/assets/modules_db_guide.md.DMSRMu_1.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/guide.md","filePath":"modules/db/guide.md","lastUpdated":null}'),d={name:"modules/db/guide.md"};function o(s,r,n,c,i,l){return t(),a("div")}const u=e(d,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_db_index.md.DEWYiZ5i.js b/docs/assets/modules_db_index.md.CEDxezRn.js similarity index 85% rename from docs/assets/modules_db_index.md.DEWYiZ5i.js rename to docs/assets/modules_db_index.md.CEDxezRn.js index e61b52a35..6deac4b6b 100644 --- a/docs/assets/modules_db_index.md.DEWYiZ5i.js +++ b/docs/assets/modules_db_index.md.CEDxezRn.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Database","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/index.md","filePath":"modules/db/index.md","lastUpdated":null}'),t={name:"modules/db/index.md"};function h(e,s,p,k,d,E){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Database ​

The vix::db module is a small, explicit database layer built around:

  • A tiny driver abstraction (Connection, Statement)
  • A thread safe connection pool (ConnectionPool)
  • RAII transactions (Transaction)
  • A minimal, type erased value model (DbValue)
  • Migrations (code and file based)
  • Optional schema snapshot utilities (vix::db::schema)

This is a guide, not a showcase: it explains the mental model and the core APIs you will use in real apps.

All examples assume you include the umbrella header:

cpp
#include <vix/db/db.hpp>

Namespace used in examples:

cpp
using namespace vix::db;

1) Build and feature flags ​

Vix DB can be built with different backends.

Common macros you will see in the codebase:

  • VIX_DB_HAS_MYSQL enables MySQL driver integration
  • VIX_DB_HAS_SQLITE enables SQLite driver integration

If a driver is disabled, its header is typically guarded with the macro (example: #if VIX_DB_HAS_SQLITE).


2) Core model ​

The public API is built around a few concepts.

Connection ​

A live database connection.

Key operations:

  • prepare(sql) returns a prepared Statement
  • begin(), commit(), rollback() manage transactions
  • lastInsertId() returns the last generated id (semantics depend on engine)
  • ping() checks if the connection is still usable (driver dependent)

Statement ​

A prepared SQL statement with positional parameters.

Key operations:

  • bind(idx, value) binds a parameter
  • bindNull(idx) binds SQL NULL
  • exec() runs a non returning statement (INSERT, UPDATE, DELETE)
  • query() runs a SELECT and returns a ResultSet

Vix binds values through a small type erased wrapper: DbValue.

ResultSet and ResultRow ​

Query results are forward only.

  • ResultSet::next() advances to the next row
  • ResultSet::row() returns a reference to the current row
  • ResultRow::getString(i), getInt64(i), getDouble(i) read columns by index
  • Helper methods getStringOr, getInt64Or, getDoubleOr provide defaults for NULL

Column indexes are zero based and match the SELECT order.


3) DbValue and binding ​

The binding model is intentionally simple.

DbValue supports:

  • nullptr for SQL NULL
  • bool
  • std::int64_t
  • double
  • std::string
  • Blob (bytes)

Helpers:

  • null(), b(x), i64(x), f64(x), str(x), blob(bytes)

Statement::bind also provides convenience overloads for common C++ types:

  • bind(idx, int), bind(idx, std::int64_t), bind(idx, double), bind(idx, bool), bind(idx, std::string), bind(idx, const char*)

When in doubt for integers, bind std::int64_t.


4) Connection pool ​

ConnectionPool owns a factory function and reuses connections.

  • acquire() blocks if the pool is at max and no idle connection exists
  • release(c) returns a connection to the idle queue
  • warmup() pre creates at least PoolConfig::min connections

A convenience RAII type exists:

  • PooledConn acquires on construction and releases on destruction

5) Database facade and config ​

Database is a small facade that owns a ConnectionPool.

The configuration is represented by:

  • Engine enum: MySQL or SQLite
  • DbConfig holding engine specific config
  • MySQLConfig with host, user, password, database, and pool sizing
  • SQLiteConfig with path and pool sizing

There is also a helper that maps your main Vix config:

cpp
DbConfig make_db_config_from_vix_config(const vix::config::Config& cfg);

Use it when you want DB config to come from config.json and your vix::config::Config loader.


6) Minimal examples ​

6.1 Connect and ping ​

cpp
#include <vix/db/db.hpp>
+import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Database","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/index.md","filePath":"modules/db/index.md","lastUpdated":1770805184000}'),t={name:"modules/db/index.md"};function h(e,s,p,k,d,E){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Database ​

The vix::db module is a small, explicit database layer built around:

  • A tiny driver abstraction (Connection, Statement)
  • A thread safe connection pool (ConnectionPool)
  • RAII transactions (Transaction)
  • A minimal, type erased value model (DbValue)
  • Migrations (code and file based)
  • Optional schema snapshot utilities (vix::db::schema)

This is a guide, not a showcase: it explains the mental model and the core APIs you will use in real apps.

All examples assume you include the umbrella header:

cpp
#include <vix/db/db.hpp>

Namespace used in examples:

cpp
using namespace vix::db;

1) Build and feature flags ​

Vix DB can be built with different backends.

Common macros you will see in the codebase:

  • VIX_DB_HAS_MYSQL enables MySQL driver integration
  • VIX_DB_HAS_SQLITE enables SQLite driver integration

If a driver is disabled, its header is typically guarded with the macro (example: #if VIX_DB_HAS_SQLITE).


2) Core model ​

The public API is built around a few concepts.

Connection ​

A live database connection.

Key operations:

  • prepare(sql) returns a prepared Statement
  • begin(), commit(), rollback() manage transactions
  • lastInsertId() returns the last generated id (semantics depend on engine)
  • ping() checks if the connection is still usable (driver dependent)

Statement ​

A prepared SQL statement with positional parameters.

Key operations:

  • bind(idx, value) binds a parameter
  • bindNull(idx) binds SQL NULL
  • exec() runs a non returning statement (INSERT, UPDATE, DELETE)
  • query() runs a SELECT and returns a ResultSet

Vix binds values through a small type erased wrapper: DbValue.

ResultSet and ResultRow ​

Query results are forward only.

  • ResultSet::next() advances to the next row
  • ResultSet::row() returns a reference to the current row
  • ResultRow::getString(i), getInt64(i), getDouble(i) read columns by index
  • Helper methods getStringOr, getInt64Or, getDoubleOr provide defaults for NULL

Column indexes are zero based and match the SELECT order.


3) DbValue and binding ​

The binding model is intentionally simple.

DbValue supports:

  • nullptr for SQL NULL
  • bool
  • std::int64_t
  • double
  • std::string
  • Blob (bytes)

Helpers:

  • null(), b(x), i64(x), f64(x), str(x), blob(bytes)

Statement::bind also provides convenience overloads for common C++ types:

  • bind(idx, int), bind(idx, std::int64_t), bind(idx, double), bind(idx, bool), bind(idx, std::string), bind(idx, const char*)

When in doubt for integers, bind std::int64_t.


4) Connection pool ​

ConnectionPool owns a factory function and reuses connections.

  • acquire() blocks if the pool is at max and no idle connection exists
  • release(c) returns a connection to the idle queue
  • warmup() pre creates at least PoolConfig::min connections

A convenience RAII type exists:

  • PooledConn acquires on construction and releases on destruction

5) Database facade and config ​

Database is a small facade that owns a ConnectionPool.

The configuration is represented by:

  • Engine enum: MySQL or SQLite
  • DbConfig holding engine specific config
  • MySQLConfig with host, user, password, database, and pool sizing
  • SQLiteConfig with path and pool sizing

There is also a helper that maps your main Vix config:

cpp
DbConfig make_db_config_from_vix_config(const vix::config::Config& cfg);

Use it when you want DB config to come from config.json and your vix::config::Config loader.


6) Minimal examples ​

6.1 Connect and ping ​

cpp
#include <vix/db/db.hpp>
 #include <iostream>
 
 int main()
@@ -189,4 +189,4 @@ import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o
     std::cerr << "ERROR: " << e.what() << "\\n";
     return 1;
   }
-}

9) Drivers overview ​

SQLite driver ​

  • Implements Connection on top of sqlite3*
  • ping() is a lightweight validity check
  • Lifetime is managed by the SQLiteConnection destructor

MySQL driver ​

  • Implements Connection on top of MySQL Connector/C++
  • ping() uses isValid() with exception protection
  • Transactions are implemented via autocommit toggling

Driver factories:

  • make_sqlite_factory(path) returns a ConnectionFactory
  • make_mysql_factory(host, user, pass, db) returns a ConnectionFactory

Those factories are what you feed to ConnectionPool.


10) Schema utilities ​

The vix::db::schema namespace provides a minimal schema model:

  • Schema contains multiple Table
  • Table contains Column and Index
  • Type describes column type with optional size (example: VARCHAR(n))
  • Dialect indicates SQL emission target (MySQL or SQLite)

JSON snapshot helpers:

  • to_json_string(schema, pretty)
  • from_json_string_or_throw(json)

This layer is useful for:

  • Persisting schema snapshots
  • Diffing schemas
  • Building migration tooling

11) Common errors ​

  • Cannot connect: verify host, port, user, password, database, and driver enable flags
  • Pool blocks forever: max connections reached and callers never release connections
  • Bind mismatch: prefer std::int64_t for integer parameters
  • NULL handling: use row.isNull(i) or the getXOr helpers
`,101)])])}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; +}

9) Drivers overview ​

SQLite driver ​

  • Implements Connection on top of sqlite3*
  • ping() is a lightweight validity check
  • Lifetime is managed by the SQLiteConnection destructor

MySQL driver ​

  • Implements Connection on top of MySQL Connector/C++
  • ping() uses isValid() with exception protection
  • Transactions are implemented via autocommit toggling

Driver factories:

  • make_sqlite_factory(path) returns a ConnectionFactory
  • make_mysql_factory(host, user, pass, db) returns a ConnectionFactory

Those factories are what you feed to ConnectionPool.


10) Schema utilities ​

The vix::db::schema namespace provides a minimal schema model:

  • Schema contains multiple Table
  • Table contains Column and Index
  • Type describes column type with optional size (example: VARCHAR(n))
  • Dialect indicates SQL emission target (MySQL or SQLite)

JSON snapshot helpers:

  • to_json_string(schema, pretty)
  • from_json_string_or_throw(json)

This layer is useful for:

  • Persisting schema snapshots
  • Diffing schemas
  • Building migration tooling

11) Common errors ​

  • Cannot connect: verify host, port, user, password, database, and driver enable flags
  • Pool blocks forever: max connections reached and callers never release connections
  • Bind mismatch: prefer std::int64_t for integer parameters
  • NULL handling: use row.isNull(i) or the getXOr helpers
`,101)])])}const y=i(t,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_db_index.md.CEDxezRn.lean.js b/docs/assets/modules_db_index.md.CEDxezRn.lean.js new file mode 100644 index 000000000..d6524c3b1 --- /dev/null +++ b/docs/assets/modules_db_index.md.CEDxezRn.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Database","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/index.md","filePath":"modules/db/index.md","lastUpdated":1770805184000}'),t={name:"modules/db/index.md"};function h(e,s,p,k,d,E){return a(),n("div",null,[...s[0]||(s[0]=[l("",101)])])}const y=i(t,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_db_index.md.DEWYiZ5i.lean.js b/docs/assets/modules_db_index.md.DEWYiZ5i.lean.js deleted file mode 100644 index e26f9769c..000000000 --- a/docs/assets/modules_db_index.md.DEWYiZ5i.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Database","description":"","frontmatter":{},"headers":[],"relativePath":"modules/db/index.md","filePath":"modules/db/index.md","lastUpdated":null}'),t={name:"modules/db/index.md"};function h(e,s,p,k,d,E){return a(),n("div",null,[...s[0]||(s[0]=[l("",101)])])}const g=i(t,[["render",h]]);export{o as __pageData,g as default}; diff --git a/docs/assets/modules_deploy_guide.md.BK450i19.js b/docs/assets/modules_deploy_guide.md.BK450i19.js deleted file mode 100644 index 8fe08d61c..000000000 --- a/docs/assets/modules_deploy_guide.md.BK450i19.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/guide.md","filePath":"modules/deploy/guide.md","lastUpdated":null}'),a={name:"modules/deploy/guide.md"};function d(s,r,l,n,c,p){return t(),o("div")}const u=e(a,[["render",d]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_deploy_guide.md.BK450i19.lean.js b/docs/assets/modules_deploy_guide.md.BK450i19.lean.js deleted file mode 100644 index 8fe08d61c..000000000 --- a/docs/assets/modules_deploy_guide.md.BK450i19.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/guide.md","filePath":"modules/deploy/guide.md","lastUpdated":null}'),a={name:"modules/deploy/guide.md"};function d(s,r,l,n,c,p){return t(),o("div")}const u=e(a,[["render",d]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_deploy_guide.md.C1tyiBpZ.js b/docs/assets/modules_deploy_guide.md.C1tyiBpZ.js new file mode 100644 index 000000000..1b6c0e9d5 --- /dev/null +++ b/docs/assets/modules_deploy_guide.md.C1tyiBpZ.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/guide.md","filePath":"modules/deploy/guide.md","lastUpdated":1770805184000}'),a={name:"modules/deploy/guide.md"};function d(r,s,p,i,c,n){return t(),o("div")}const f=e(a,[["render",d]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_deploy_guide.md.C1tyiBpZ.lean.js b/docs/assets/modules_deploy_guide.md.C1tyiBpZ.lean.js new file mode 100644 index 000000000..1b6c0e9d5 --- /dev/null +++ b/docs/assets/modules_deploy_guide.md.C1tyiBpZ.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/guide.md","filePath":"modules/deploy/guide.md","lastUpdated":1770805184000}'),a={name:"modules/deploy/guide.md"};function d(r,s,p,i,c,n){return t(),o("div")}const f=e(a,[["render",d]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_deploy_index.md.DPOp5iMh.js b/docs/assets/modules_deploy_index.md.CCrSFIVB.js similarity index 94% rename from docs/assets/modules_deploy_index.md.DPOp5iMh.js rename to docs/assets/modules_deploy_index.md.CCrSFIVB.js index 5b426defc..00b3311eb 100644 --- a/docs/assets/modules_deploy_index.md.DPOp5iMh.js +++ b/docs/assets/modules_deploy_index.md.CCrSFIVB.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Deploy (Vix.cpp)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/index.md","filePath":"modules/deploy/index.md","lastUpdated":null}'),l={name:"modules/deploy/index.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Deploy (Vix.cpp) ​

This guide shows a simple, reliable deployment for a Vix HTTP server on Linux using systemd. It assumes you already built a single binary (or you can build on the server).

Goal ​

  • Run your Vix server as a service (auto start, auto restart)
  • Put Nginx in front (optional but common)
  • Add TLS with Certbot (optional)

Folder layout ​

Example layout on the server:

bash
/opt/vix-app/
+import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Deploy (Vix.cpp)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/index.md","filePath":"modules/deploy/index.md","lastUpdated":1770805184000}'),l={name:"modules/deploy/index.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Deploy (Vix.cpp) ​

This guide shows a simple, reliable deployment for a Vix HTTP server on Linux using systemd. It assumes you already built a single binary (or you can build on the server).

Goal ​

  • Run your Vix server as a service (auto start, auto restart)
  • Put Nginx in front (optional but common)
  • Add TLS with Certbot (optional)

Folder layout ​

Example layout on the server:

bash
/opt/vix-app/
   bin/
     app            # your compiled binary
   config/
@@ -78,4 +78,4 @@ import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c
   sudo chmod +x /opt/vix-app/bin/app
   sudo systemctl start vix-app
   sudo systemctl status vix-app --no-pager
-'

If you want less downtime, you can:

  • run on a different port, healthcheck it, then switch Nginx upstream
  • or use two services (blue/green)

7) Health check ideas ​

Add a route like:

  • GET /health returns { "ok": true }

Then:

bash
curl -i http://127.0.0.1:8080/health

Common issues ​

Service starts then exits ​

  • Check logs: journalctl -u vix-app -n 200 --no-pager
  • Ensure the binary is executable and the WorkingDirectory is correct

Permission errors (static files, uploads) ​

  • Make sure www-data owns needed folders
  • Keep uploads in /opt/vix-app or update ReadWritePaths

Wrong client IP inside the app ​

  • Use X-Forwarded-For and X-Real-IP from Nginx
  • Ensure your app reads forwarded headers if you support that feature

Minimal checklist ​

  • systemctl status vix-app
  • journalctl -u vix-app -f
  • nginx -t
  • curl -i http://127.0.0.1:8080/health
`,56)])])}const F=i(l,[["render",t]]);export{c as __pageData,F as default}; +'

If you want less downtime, you can:

  • run on a different port, healthcheck it, then switch Nginx upstream
  • or use two services (blue/green)

7) Health check ideas ​

Add a route like:

  • GET /health returns { "ok": true }

Then:

bash
curl -i http://127.0.0.1:8080/health

Common issues ​

Service starts then exits ​

  • Check logs: journalctl -u vix-app -n 200 --no-pager
  • Ensure the binary is executable and the WorkingDirectory is correct

Permission errors (static files, uploads) ​

  • Make sure www-data owns needed folders
  • Keep uploads in /opt/vix-app or update ReadWritePaths

Wrong client IP inside the app ​

  • Use X-Forwarded-For and X-Real-IP from Nginx
  • Ensure your app reads forwarded headers if you support that feature

Minimal checklist ​

  • systemctl status vix-app
  • journalctl -u vix-app -f
  • nginx -t
  • curl -i http://127.0.0.1:8080/health
`,56)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_deploy_index.md.CCrSFIVB.lean.js b/docs/assets/modules_deploy_index.md.CCrSFIVB.lean.js new file mode 100644 index 000000000..ae2cfb318 --- /dev/null +++ b/docs/assets/modules_deploy_index.md.CCrSFIVB.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Deploy (Vix.cpp)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/index.md","filePath":"modules/deploy/index.md","lastUpdated":1770805184000}'),l={name:"modules/deploy/index.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",56)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_deploy_index.md.DPOp5iMh.lean.js b/docs/assets/modules_deploy_index.md.DPOp5iMh.lean.js deleted file mode 100644 index a117421a3..000000000 --- a/docs/assets/modules_deploy_index.md.DPOp5iMh.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as e}from"./chunks/framework.jUmBZPH5.js";const c=JSON.parse('{"title":"Deploy (Vix.cpp)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/deploy/index.md","filePath":"modules/deploy/index.md","lastUpdated":null}'),l={name:"modules/deploy/index.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",56)])])}const F=i(l,[["render",t]]);export{c as __pageData,F as default}; diff --git a/docs/assets/modules_json_build.md.2SIc2Cdy.js b/docs/assets/modules_json_build.md.2SIc2Cdy.js new file mode 100644 index 000000000..e975fe270 --- /dev/null +++ b/docs/assets/modules_json_build.md.2SIc2Cdy.js @@ -0,0 +1,75 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"JSON Build Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/build.md","filePath":"modules/json/build.md","lastUpdated":1770915111000}'),h={name:"modules/json/build.md"};function l(p,s,e,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`

JSON Build Helpers ​

vix/json/build.hpp provides tiny, header-only helpers to construct JSON values with less boilerplate.

It is built on top of nlohmann::json and is meant for:

  • API responses
  • tests and fixtures
  • configuration generation

The main goal is readability without losing practicality.


Include ​

cpp
#include <vix/json/build.hpp>
+using namespace vix::json;

This header only depends on nlohmann::json.


Types ​

vix::json::Json ​

Alias for the primary JSON type used across Vix.cpp:

cpp
using Json = nlohmann::json;

Use it when you do not care about key ordering.

vix::json::OrderedJson ​

Alias for a deterministic key-order JSON object:

cpp
using OrderedJson = nlohmann::ordered_json;

This is useful for:

  • stable snapshots in tests
  • deterministic API output when you want consistent ordering

Note: JSON objects are conceptually unordered, but deterministic order is very useful for logs, fixtures, and tests.


Builders ​

o(k1, v1, k2, v2, ...) -> OrderedJson ​

Build an ordered JSON object from alternating (key, value) pairs.

Rules:

  • Keys must be convertible to std::string_view
  • Argument count must be even, otherwise you get a compile-time error

Example:

cpp
auto user = o(
+  "id", 42,
+  "name", "Gaspard",
+  "active", true
+);
+
+std::cout << user.dump(2) << "\\n";

Nested example ​

cpp
auto res = o(
+  "status", "ok",
+  "data", o(
+    "user", o("id", 42, "name", "Gaspard"),
+    "skills", a("C++", "Networking", "Systems")
+  )
+);

Why ordered ​

o() returns OrderedJson to keep output stable across runs. This helps when you:

  • compare JSON dumps in tests
  • generate fixtures
  • log responses and want consistent diffs

a(v1, v2, v3, ...) -> Json ​

Build a JSON array from values.

Example:

cpp
auto xs = a(1, 2, 3, 4);
+std::cout << xs.dump() << "\\n";

Nested arrays and objects ​

cpp
auto j = o(
+  "items", a(
+    o("id", 1, "title", "A"),
+    o("id", 2, "title", "B")
+  )
+);

Build a JSON object from a list of pairs.

This is the helper you use when pairs are not known at compile time.

Example:

cpp
Json j = kv({
+  {"version", Json("1.0.0")},
+  {"debug", Json(true)}
+});

Dynamic pairs example ​

cpp
#include <vector>
+
+std::vector<std::pair<std::string_view, Json>> pairs;
+
+pairs.push_back({"name", Json("vix")});
+pairs.push_back({"stars", Json(213)});
+
+Json out = Json::object();
+for (const auto& [k, v] : pairs) out[std::string(k)] = v;
+
+// Or if you already have an initializer_list at the call site:
+Json out2 = kv({
+  {"name", Json("vix")},
+  {"stars", Json(213)}
+});

Tip: If you can write the object inline, prefer o() because it is simpler.


Common mistakes ​

1) Odd number of arguments to o() ​

This fails at compile time:

cpp
auto bad = o("a", 1, "b"); // missing value

You will get an error similar to:

  • json::o requires an even number of args: (k1,v1,k2,v2,...)

Fix:

cpp
auto ok = o("a", 1, "b", 2);

2) Using kv(1) ​

This is invalid because kv() requires the value type to be Json:

cpp
auto bad = kv({{"a", 1}}); // wrong

Fix:

cpp
auto ok1 = kv({{"a", Json(1)}});
+auto ok2 = o("a", 1); // usually the best

3) Keys that are not key-like ​

Keys passed to o() must be convertible to std::string_view.

Good:

  • string literals "id"
  • std::string
  • std::string_view

Bad:

  • integers
  • custom types without conversion

Patterns you can copy ​

API response envelope ​

cpp
OrderedJson ok(Json data)
+{
+  return o(
+    "status", "ok",
+    "data", std::move(data)
+  );
+}
+
+OrderedJson err(int code, std::string_view message)
+{
+  return o(
+    "status", "error",
+    "error", o(
+      "code", code,
+      "message", message
+    )
+  );
+}

Pagination response ​

cpp
OrderedJson page(Json items, int page, int limit, int total)
+{
+  return o(
+    "status", "ok",
+    "data", o(
+      "items", std::move(items),
+      "page", page,
+      "limit", limit,
+      "total", total
+    )
+  );
+}

Notes on conversions ​

nlohmann::json can serialize many common types automatically. For custom types, prefer explicit conversion.

A common pattern is to write a function that returns Json:

cpp
struct User
+{
+  int id;
+  std::string name;
+};
+
+Json to_json_value(const User& u)
+{
+  return o("id", u.id, "name", u.name);
+}

When to use which helper ​

Use o() when:

  • you can write pairs inline
  • you want stable key order
  • you want the cleanest syntax

Use a() when:

  • you need arrays with minimal boilerplate

Use kv() when:

  • keys and values are produced dynamically
  • you already have pairs as data

Summary ​

vix/json/build.hpp keeps JSON construction short and readable:

  • o(...) builds ordered objects
  • a(...) builds arrays
  • kv(...) builds objects from (key, Json) pairs

It is ideal for API responses, tests, and fixtures.

`,93)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_json_build.md.2SIc2Cdy.lean.js b/docs/assets/modules_json_build.md.2SIc2Cdy.lean.js new file mode 100644 index 000000000..f6f0de275 --- /dev/null +++ b/docs/assets/modules_json_build.md.2SIc2Cdy.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"JSON Build Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/build.md","filePath":"modules/json/build.md","lastUpdated":1770915111000}'),h={name:"modules/json/build.md"};function l(p,s,e,k,d,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",93)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_json_convert.md.CG5ISLgZ.js b/docs/assets/modules_json_convert.md.CG5ISLgZ.js new file mode 100644 index 000000000..51160d05a --- /dev/null +++ b/docs/assets/modules_json_convert.md.CG5ISLgZ.js @@ -0,0 +1,56 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JSON Convert Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/convert.md","filePath":"modules/json/convert.md","lastUpdated":1770915111000}'),e={name:"modules/json/convert.md"};function h(l,s,p,k,r,o){return a(),t("div",null,[...s[0]||(s[0]=[n(`

JSON Convert Helpers ​

vix/json/convert.hpp provides safe JSON accessors and converters for Vix.cpp, built on nlohmann::json.

It removes repetitive boilerplate like:

  • contains() + is_*() checks everywhere
  • try/catch around get<T>()
  • manual handling of missing keys and out-of-range indexes

It also includes helpers to convert Vix Simple JSON tokens into nlohmann::json.


Include ​

cpp
#include <vix/json/convert.hpp>
+using namespace vix::json;

Strictness levels ​

This header gives you four levels of strictness. Choose based on how much you trust the JSON.

Rule of thumb:

  • External/user input: prefer get_opt() or get_or()
  • Internal/trusted data: prefer ensure()

1) ptr() ​

Returns a pointer to an element, or nullptr if missing or invalid.

  • ptr(obj, "key") -> const Json*
  • ptr(arr, idx) -> const Json*

Use this when you want to branch without allocating, copying, or throwing.

2) get_opt<T>() ​

Returns std::optional<T>. It never throws.

It catches nlohmann::json::exception internally and returns std::nullopt if conversion fails.

3) get_or<T>() ​

Returns a value or a default when missing/invalid.

This is the most convenient option for external input when you have sensible defaults.

4) ensure<T>() ​

Strict conversion. It throws when:

  • the JSON is not the expected shape
  • a key is missing
  • the type does not match

Use it when failure should be loud and immediate.


Types ​

This header uses the same core type alias as other JSON helpers:

cpp
using Json = nlohmann::json;

ptr() reference ​

ptr(const Json& j, std::string_view key) ​

Returns a pointer to j[key] if j is an object and the key exists.

cpp
Json j = R"({"user":{"id":42}})"_json;
+
+if (const Json* p = ptr(j, "user"))
+{
+  // p points to {"id":42}
+}

Notes:

  • Returns nullptr when j is not an object
  • Returns nullptr when key does not exist
  • This implementation allocates a temporary std::string for the key for compatibility across nlohmann::json versions

ptr(const Json& j, std::size_t idx) ​

Returns a pointer to j[idx] if j is an array and idx is within bounds.

cpp
Json j = R"([10, 20, 30])"_json;
+
+if (const Json* p = ptr(j, 1))
+{
+  // *p is 20
+}

get_opt<T>() reference ​

Convert a value ​

cpp
Json j = R"({"id":42, "name":"Ada"})"_json;
+
+auto id   = get_opt<int>(j["id"]);          // optional<int>(42)
+auto name = get_opt<std::string>(j["name"]); // optional<string>("Ada")

Convert from a pointer ​

cpp
const Json* p = ptr(j, "id");
+auto id = get_opt<int>(p);

Convert an object member by key ​

cpp
auto id = get_opt<int>(j, "id");

Convert an array element by index ​

cpp
Json arr = R"([1,2,3])"_json;
+auto v = get_opt<int>(arr, 2); // 3

Behavior:

  • returns std::nullopt if j is null/discarded
  • returns std::nullopt if get<T>() throws

get_or<T>() reference ​

Convert a value with a default ​

cpp
Json j = R"({"debug":"true"})"_json;
+
+bool debug = get_or<bool>(j["debug"], false); // false (type mismatch)

Convert an object member with a default ​

cpp
Json j = R"({"user":{"id":42}})"_json;
+
+int id = get_or<int>(j["user"], "id", -1); // 42
+int age = get_or<int>(j["user"], "age", 0); // 0 (missing key)

Convert an array element with a default ​

cpp
Json xs = R"([10,20])"_json;
+
+int v0 = get_or<int>(xs, 0, -1); // 10
+int v2 = get_or<int>(xs, 2, -1); // -1 (out of bounds)

ensure<T>() reference ​

Strict conversion of a value ​

cpp
Json j = R"({"id":42})"_json;
+
+int id = ensure<int>(j["id"]); // ok

Strict conversion of an object member ​

ensure(obj, key) provides clearer errors:

  • throws if obj is not an object
  • throws if key is missing
  • throws with a message that includes the key on type mismatch
cpp
Json j = R"({"user":{"id":42}})"_json;
+
+int id = ensure<int>(j["user"], "id"); // ok

Example failure cases you should expect:

  • ensure: not an object
  • ensure: missing key 'id'
  • ensure: type error for key 'id': ...

Tip: this is ideal for trusted config files or internal data where you want hard failures.


Converting Vix Simple JSON to nlohmann::json ​

This header also converts Vix Simple tokens into nlohmann::json.

Supported conversions:

  • null -> null
  • bool -> bool
  • int64 -> integer
  • double -> float
  • string -> string
  • array/object -> deep conversion

simple_to_json(token|kvs|array_t) ​

cpp
#include <vix/json/Simple.hpp>
+#include <vix/json/convert.hpp>
+
+using namespace vix::json;
+
+// Suppose you parsed with the Simple parser:
+vix::json::token t = /* ... */;
+
+Json j = simple_to_json(t);
+std::cout << j.dump(2) << "\\n";

to_json(...) convenience overloads ​

Aliases to keep naming consistent:

cpp
Json j1 = to_json(t);
+
+vix::json::kvs obj = /* ... */;
+Json j2 = to_json(obj);
+
+vix::json::array_t arr = /* ... */;
+Json j3 = to_json(arr);

Practical patterns ​

Parsing external payload safely ​

cpp
Json body = /* request json */;
+
+auto id   = get_opt<int>(body, "id");
+auto name = get_or<std::string>(body, "name", "anonymous");
+
+if (!id)
+{
+  // return 400: missing/invalid id
+}

Trusted config parsing strictly ​

cpp
Json cfg = /* config json */;
+
+std::string host = ensure<std::string>(cfg, "host");
+int port         = ensure<int>(cfg, "port");
+bool tls         = get_or<bool>(cfg, "tls", false);

Summary ​

vix/json/convert.hpp gives you predictable, low-boilerplate JSON access:

  • ptr() for pointer-style access without throwing
  • get_opt<T>() for safe optional conversion
  • get_or<T>() for defaults on missing/invalid data
  • ensure<T>() for strict conversions with clear errors
  • simple_to_json() and to_json() for converting Vix Simple JSON into nlohmann::json
`,92)])])}const y=i(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_json_convert.md.CG5ISLgZ.lean.js b/docs/assets/modules_json_convert.md.CG5ISLgZ.lean.js new file mode 100644 index 000000000..798c62e29 --- /dev/null +++ b/docs/assets/modules_json_convert.md.CG5ISLgZ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JSON Convert Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/convert.md","filePath":"modules/json/convert.md","lastUpdated":1770915111000}'),e={name:"modules/json/convert.md"};function h(l,s,p,k,r,o){return a(),t("div",null,[...s[0]||(s[0]=[n("",92)])])}const y=i(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_json_dumps.md.3V4gNQyh.js b/docs/assets/modules_json_dumps.md.3V4gNQyh.js new file mode 100644 index 000000000..a564eb779 --- /dev/null +++ b/docs/assets/modules_json_dumps.md.3V4gNQyh.js @@ -0,0 +1,36 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"JSON Dumps Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/dumps.md","filePath":"modules/json/dumps.md","lastUpdated":1770915111000}'),l={name:"modules/json/dumps.md"};function e(p,s,h,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`

JSON Dumps Helpers ​

vix/json/dumps.hpp provides serialization helpers for Vix.cpp.

It covers two main use cases:

  1. Serialize JSON to a string
  2. Write JSON safely to disk

It is built on top of nlohmann::json and focuses on readability and safety.


Include ​

cpp
#include <vix/json/dumps.hpp>
+using namespace vix::json;

Types ​

cpp
using Json = nlohmann::json;
+namespace fs = std::filesystem;

1. Serialize JSON to string ​

dumps() ​

Pretty-print JSON (multi-line, indented).

cpp
Json j = {
+  {"app", "Vix.cpp"},
+  {"debug", true}
+};
+
+std::string s = dumps(j);
+std::cout << s << "\\n";

Default behavior:

  • indent = 2 spaces
  • ensure_ascii = false

Custom indentation ​

cpp
std::string s = dumps(j, 4); // 4 spaces

Escape non-ASCII ​

cpp
std::string s = dumps(j, 2, true);

Use this for:

  • logs
  • config files
  • debugging output
  • readable API responses

dumps_pretty() ​

Explicit alias for dumps().

cpp
std::string s = dumps_pretty(j);

This exists to make intent clear in code.


dumps_compact() ​

Compact single-line JSON.

cpp
std::string s = dumps_compact(j);

Produces:

json
{"app":"Vix.cpp","debug":true}

Use this for:

  • network payloads
  • compact storage
  • performance-sensitive logs

2. Write JSON safely to disk ​

dump_file(path, json) ​

Writes JSON using a temp-file + rename strategy.

cpp
Json j = {
+  {"app", "Vix.cpp"},
+  {"debug", true}
+};
+
+dump_file("config.json", j);

What makes it safe? ​

The function does:

  1. Creates parent directories (best-effort)
  2. Writes JSON to config.json.tmp
  3. Renames .tmp to config.json
  4. If rename fails, falls back to copy + remove

This reduces the risk of partially-written files if:

  • the process crashes
  • the machine shuts down
  • an exception occurs mid-write

Important:

  • Rename is atomic on most local filesystems when done within the same directory.
  • Atomic behavior depends on filesystem semantics.

Custom formatting ​

You can control indentation and ASCII escaping:

cpp
dump_file("config.json", j, 4);        // 4-space indent
+dump_file("config.json", j, 2, true);  // escape non-ASCII

Overloads ​

Convenience overloads exist for:

cpp
dump_file("file.json", j);
+dump_file(std::string("file.json"), j);
+dump_file(std::filesystem::path("file.json"), j);

Error handling ​

dump_file() throws std::runtime_error if:

  • temp file cannot be opened
  • write fails
  • final replacement fails

Example:

cpp
try
+{
+  dump_file("config.json", j);
+}
+catch (const std::exception& e)
+{
+  std::cerr << "Failed to write JSON: " << e.what() << "\\n";
+}

Practical patterns ​

Writing application config ​

cpp
Json cfg = {
+  {"host", "127.0.0.1"},
+  {"port", 8080},
+  {"tls", false}
+};
+
+dump_file("config/app.json", cfg);

Logging a JSON response ​

cpp
Json res = {
+  {"status", "ok"},
+  {"count", 42}
+};
+
+std::cout << dumps(res) << "\\n";

Sending compact JSON over network ​

cpp
std::string payload = dumps_compact(res);
+// send(payload)

When to use which ​

Use dumps() when:

  • humans will read the output
  • you store configuration files
  • you want clean logs

Use dumps_compact() when:

  • sending over network
  • minimizing size
  • performance matters

Use dump_file() when:

  • writing config files
  • persisting state
  • generating fixtures safely

Summary ​

vix/json/dumps.hpp provides:

  • dumps() for pretty JSON
  • dumps_pretty() explicit alias
  • dumps_compact() for single-line output
  • dump_file() for safe disk writes

It keeps serialization simple, readable, and safer by default.

`,85)])])}const u=i(l,[["render",e]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_json_dumps.md.3V4gNQyh.lean.js b/docs/assets/modules_json_dumps.md.3V4gNQyh.lean.js new file mode 100644 index 000000000..597e968e2 --- /dev/null +++ b/docs/assets/modules_json_dumps.md.3V4gNQyh.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"JSON Dumps Helpers","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/dumps.md","filePath":"modules/json/dumps.md","lastUpdated":1770915111000}'),l={name:"modules/json/dumps.md"};function e(p,s,h,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n("",85)])])}const u=i(l,[["render",e]]);export{g as __pageData,u as default}; diff --git a/docs/assets/modules_json_guide.md.-kol65xQ.js b/docs/assets/modules_json_guide.md.-kol65xQ.js new file mode 100644 index 000000000..b6ce59d14 --- /dev/null +++ b/docs/assets/modules_json_guide.md.-kol65xQ.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/guide.md","filePath":"modules/json/guide.md","lastUpdated":1770805184000}'),s={name:"modules/json/guide.md"};function a(r,d,n,i,c,m){return t(),o("div")}const f=e(s,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_json_guide.md.-kol65xQ.lean.js b/docs/assets/modules_json_guide.md.-kol65xQ.lean.js new file mode 100644 index 000000000..b6ce59d14 --- /dev/null +++ b/docs/assets/modules_json_guide.md.-kol65xQ.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/guide.md","filePath":"modules/json/guide.md","lastUpdated":1770805184000}'),s={name:"modules/json/guide.md"};function a(r,d,n,i,c,m){return t(),o("div")}const f=e(s,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_json_guide.md.DyRsYhel.js b/docs/assets/modules_json_guide.md.DyRsYhel.js deleted file mode 100644 index 04e77a4a8..000000000 --- a/docs/assets/modules_json_guide.md.DyRsYhel.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/guide.md","filePath":"modules/json/guide.md","lastUpdated":null}'),s={name:"modules/json/guide.md"};function a(d,n,r,c,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_json_guide.md.DyRsYhel.lean.js b/docs/assets/modules_json_guide.md.DyRsYhel.lean.js deleted file mode 100644 index 04e77a4a8..000000000 --- a/docs/assets/modules_json_guide.md.DyRsYhel.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/guide.md","filePath":"modules/json/guide.md","lastUpdated":null}'),s={name:"modules/json/guide.md"};function a(d,n,r,c,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_json_index.md.8gDvXYa3.lean.js b/docs/assets/modules_json_index.md.8gDvXYa3.lean.js deleted file mode 100644 index 887c84da8..000000000 --- a/docs/assets/modules_json_index.md.8gDvXYa3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"JSON","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/index.md","filePath":"modules/json/index.md","lastUpdated":null}'),l={name:"modules/json/index.md"};function k(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",48)])])}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_json_index.md.8gDvXYa3.js b/docs/assets/modules_json_index.md.BHFTvdrD.js similarity index 94% rename from docs/assets/modules_json_index.md.8gDvXYa3.js rename to docs/assets/modules_json_index.md.BHFTvdrD.js index bd466cec0..c5da29a07 100644 --- a/docs/assets/modules_json_index.md.8gDvXYa3.js +++ b/docs/assets/modules_json_index.md.BHFTvdrD.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"JSON","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/index.md","filePath":"modules/json/index.md","lastUpdated":null}'),l={name:"modules/json/index.md"};function k(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

JSON ​

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp) --- lightweight, minimal, no external dependency.
  2. High-level JSON (vix/json/json.hpp) --- powered by nlohmann::json with expressive builders.

Use Simple when you want full control and minimal overhead. Use High-level when you want expressive object construction and easy serialization.


1) Simple JSON ​

Include:

cpp
#include <vix/json/Simple.hpp>

Main types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object (key/value storage)

token ​

cpp
#include <vix/json/Simple.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"JSON","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/index.md","filePath":"modules/json/index.md","lastUpdated":1770805184000}'),l={name:"modules/json/index.md"};function k(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

JSON ​

Vix provides two JSON layers:

  1. Simple JSON (vix/json/Simple.hpp) --- lightweight, minimal, no external dependency.
  2. High-level JSON (vix/json/json.hpp) --- powered by nlohmann::json with expressive builders.

Use Simple when you want full control and minimal overhead. Use High-level when you want expressive object construction and easy serialization.


1) Simple JSON ​

Include:

cpp
#include <vix/json/Simple.hpp>

Main types:

  • token → generic JSON value
  • array_t → JSON array
  • kvs → JSON object (key/value storage)

token ​

cpp
#include <vix/json/Simple.hpp>
 #include <iostream>
 
 using namespace vix::json;
@@ -138,4 +138,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   std::cout << dumps(j, 2) << "\\n";
 
   return 0;
-}

When to use which ​

Use Simple JSON when:

  • You want minimal overhead
  • You want type-safe state storage
  • You do not need advanced JSON features

Use High-level JSON when:

  • You build API responses
  • You want expressive builders
  • You need parsing and file IO

Both layers can coexist in the same application.

`,48)])])}const y=i(l,[["render",k]]);export{g as __pageData,y as default}; +}

When to use which ​

Use Simple JSON when:

  • You want minimal overhead
  • You want type-safe state storage
  • You do not need advanced JSON features

Use High-level JSON when:

  • You build API responses
  • You want expressive builders
  • You need parsing and file IO

Both layers can coexist in the same application.

`,48)])])}const o=i(l,[["render",k]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_json_index.md.BHFTvdrD.lean.js b/docs/assets/modules_json_index.md.BHFTvdrD.lean.js new file mode 100644 index 000000000..1b02cfc49 --- /dev/null +++ b/docs/assets/modules_json_index.md.BHFTvdrD.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"JSON","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/index.md","filePath":"modules/json/index.md","lastUpdated":1770805184000}'),l={name:"modules/json/index.md"};function k(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",48)])])}const o=i(l,[["render",k]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_json_jpath.md.BieLnQ0x.js b/docs/assets/modules_json_jpath.md.BieLnQ0x.js new file mode 100644 index 000000000..109379330 --- /dev/null +++ b/docs/assets/modules_json_jpath.md.BieLnQ0x.js @@ -0,0 +1,68 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JPath Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/jpath.md","filePath":"modules/json/jpath.md","lastUpdated":1770915111000}'),e={name:"modules/json/jpath.md"};function h(l,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

JPath Guide ​

vix/json/jpath.hpp provides a minimal path language (JPath) to navigate and mutate JSON.

It is designed to be:

  • small
  • dependency-free (besides nlohmann::json)
  • beginner-friendly
  • practical for config trees and dynamic payload building

This is not a full JSONPath implementation. It is intentionally limited and predictable.


Include ​

cpp
#include <vix/json/jpath.hpp>
+using namespace vix::json;

What problem does JPath solve? ​

Without JPath, deep JSON access often looks like:

cpp
auto name = j["user"]["profile"]["name"].get<std::string>();

This is verbose, and it throws easily when intermediate keys are missing.

With JPath:

cpp
if (const Json* name = jget(j, "user.profile.name"))
+{
+  std::cout << name->get<std::string>() << "\\n";
+}

For writes, JPath can auto-create intermediate nodes:

cpp
jset(j, "user.profile.name", "Ada");
+jset(j, "user.roles[0]", "admin");

Supported syntax ​

1) Dot notation ​

text
"user.name"
+"settings.theme"

2) Array indices ​

text
"users[0].email"
+"roles[1]"

3) Quoted keys inside brackets ​

Use this when the key contains dots, spaces, or characters that are not convenient in dot notation.

text
["complex.key"].value
+["a b c"][0]

Escapes supported in quoted keys:

  • \\" for a literal quote
  • \\\\ for a literal backslash

Example:

text
["say \\"hi\\""].value

Read vs Write behavior ​

This is the most important part.

Read-only: const Json* jget(const Json&, path) ​

  • Never throws
  • Returns nullptr when path is invalid or missing
cpp
Json j = R"({"settings":{"theme":"dark"}})"_json;
+
+if (const Json* theme = jget(j, "settings.theme"))
+{
+  std::cout << theme->get<std::string>() << "\\n";
+}
+else
+{
+  std::cout << "missing theme\\n";
+}

Writable: Json* jget(Json&, path) ​

  • May throw on syntax errors
  • Auto-creates missing intermediate nodes

Creation rules:

  • Missing object keys become {} objects
  • Missing array indices grow the array and fill with nulls
cpp
Json j = Json::object();
+
+// Auto-creates: user -> object, roles -> array, then grows roles to [null, null]
+Json* slot = jget(j, "user.roles[1]");
+*slot = "editor";
+
+std::cout << j.dump(2) << "\\n";

Output will contain:

json
{
+  "user": {
+    "roles": [
+      null,
+      "editor"
+    ]
+  }
+}

Safe write wrapper: jset(Json&, path, value) ​

  • Returns true on success
  • Returns false on any syntax/assignment error
  • Never throws (errors are converted to false)
cpp
Json j = Json::object();
+
+bool ok = jset(j, "user.name", "Ada");
+if (!ok)
+{
+  // invalid path
+}

Quick reference ​

tokenize_path(path) -> std::vector<Token> ​

Tokenizes a path string into structured tokens.

  • Throws std::runtime_error on invalid syntax

This is mostly useful if you want to parse once, then apply multiple operations (advanced use).


Examples ​

Read a nested value ​

cpp
Json j = R"({
+  "user": { "name": "Ada", "roles": ["admin", "editor"] },
+  "settings": { "theme": "dark" }
+})"_json;
+
+if (const Json* theme = jget(j, "settings.theme"))
+{
+  std::cout << "theme=" << theme->get<std::string>() << "\\n";
+}

Read array element ​

cpp
if (const Json* role = jget(j, "user.roles[0]"))
+{
+  std::cout << role->get<std::string>() << "\\n";
+}

Read a key that contains a dot ​

cpp
Json j = R"({
+  "meta": {
+    "complex.key": { "value": 123 }
+  }
+})"_json;
+
+const Json* v = jget(j, "meta["complex.key"].value");

Write and auto-create ​

cpp
Json j = Json::object();
+
+jset(j, "user.name", "Ada");
+jset(j, "user.address.city", "Kampala");
+jset(j, "user.roles[1]", "developer"); // grows array
+
+std::cout << j.dump(2) << "\\n";

Error cases and behavior ​

Invalid syntax in read-only mode ​

Read-only jget(const Json&, path) returns nullptr if tokenization fails.

So this will not crash:

cpp
const Json* p = jget(j, "user..name"); // nullptr

Invalid syntax in writable mode ​

Writable jget(Json&, path) throws std::runtime_error.

So you should wrap it if the path is user-provided:

cpp
try
+{
+  Json* p = jget(j, user_path);
+  *p = 123;
+}
+catch (const std::exception& e)
+{
+  // invalid syntax
+}

Or use jset() which already converts errors to false.


Performance notes ​

  • Tokenization is done with a lightweight parser, no regex.
  • Array indices are parsed using std::from_chars (fast, locale-independent).
  • The tokenizer reserves capacity using a segment count heuristic.

For hot paths, consider:

  • parsing once with tokenize_path()
  • reusing tokens in a loop (custom logic)

When to use JPath ​

Use it when:

  • JSON structure is deep and you want readable access
  • you build dynamic payloads or config trees
  • you want safe reads without chained []
  • you want writes that auto-create intermediate nodes

Do not use it when:

  • you need full JSONPath features (filters, wildcards, recursive descent)
  • you want strict schema validation (use ensure() style checks instead)

Summary ​

JPath gives you a small, predictable path language for JSON:

  • Read safely with jget(const Json&, path) returning nullptr
  • Write with auto-create using jget(Json&, path)
  • Write safely using jset() returning true/false
  • Support for:
    • dot keys
    • [index] access
    • bracket quoted keys like ["complex.key"]
`,88)])])}const y=i(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_json_jpath.md.BieLnQ0x.lean.js b/docs/assets/modules_json_jpath.md.BieLnQ0x.lean.js new file mode 100644 index 000000000..20ee0c12f --- /dev/null +++ b/docs/assets/modules_json_jpath.md.BieLnQ0x.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JPath Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/jpath.md","filePath":"modules/json/jpath.md","lastUpdated":1770915111000}'),e={name:"modules/json/jpath.md"};function h(l,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",88)])])}const y=i(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_json_loads.md.DYBzBK6C.js b/docs/assets/modules_json_loads.md.DYBzBK6C.js new file mode 100644 index 000000000..18ce3a69f --- /dev/null +++ b/docs/assets/modules_json_loads.md.DYBzBK6C.js @@ -0,0 +1,47 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JSON Loads Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/loads.md","filePath":"modules/json/loads.md","lastUpdated":1770915111000}'),t={name:"modules/json/loads.md"};function e(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

JSON Loads Guide ​

vix/json/loads.hpp provides simple and explicit JSON parsing helpers for Vix.cpp.

It is built on top of nlohmann::json and offers two clear styles:

  • Throwing versions
  • Safe optional versions

You always choose which behavior you want.


Include ​

cpp
#include <vix/json/loads.hpp>
+using namespace vix::json;

Overview ​

The API is intentionally small.

From strings ​

  • loads() Parse JSON and throw on error.

  • try_loads() Parse JSON and return std::nullopt on failure.

From files ​

  • load_file() Load + parse JSON file, throw on error.

  • try_load_file() Safe version returning std::nullopt.


From strings ​

loads(std::string_view) ​

Throwing version.

cpp
Json j = loads(R"({"id": 1, "name": "Softadastra"})");

Behavior:

  • Throws nlohmann::json::parse_error if input is invalid.

Use this when:

  • invalid JSON is a programming error
  • tests use static trusted JSON
  • config must be valid

try_loads(std::string_view) ​

Safe version. Never throws.

cpp
if (auto maybe = try_loads(R"({"ok": true})"))
+{
+  std::cout << maybe->dump(2) << "\\n";
+}
+else
+{
+  std::cout << "Invalid JSON\\n";
+}

Behavior:

  • Returns std::nullopt on any failure.
  • Catches all exceptions internally.

Use this when:

  • parsing user input
  • parsing external API payloads
  • handling optional JSON fields

From files ​

load_file(const fs::path&) ​

Throwing version.

cpp
Json cfg = load_file("config.json");

Behavior:

  • Throws std::runtime_error if:
    • file cannot be opened
    • file is empty
  • Throws nlohmann::json::parse_error if JSON is invalid.

Important:

  • Entire file is read into memory.
  • Intended for config and metadata files.
  • Not for unbounded uploads.

try_load_file(const fs::path&) ​

Safe version.

cpp
if (auto cfg = try_load_file("optional.json"))
+{
+  std::cout << "Loaded config\\n";
+}
+else
+{
+  std::cout << "Missing or invalid config\\n";
+}

Behavior:

  • Never throws.
  • Returns std::nullopt on any failure.

Error model ​

Throwing functions propagate:

  • std::runtime_error for I/O errors
  • nlohmann::json::parse_error for invalid JSON

Safe versions:

  • Catch everything
  • Return std::nullopt

This keeps error handling explicit.


When to use what? ​

SituationRecommended
Required config fileload_file()
Optional config filetry_load_file()
User inputtry_loads()
Tests / trusted literalsloads()

Examples ​

Parse JSON from string ​

cpp
Json j = loads(R"({"user": {"id": 42}})");
+
+int id = j["user"]["id"];

Safe parse user input ​

cpp
std::string input = get_user_payload();
+
+if (auto maybe = try_loads(input))
+{
+  // process JSON
+}
+else
+{
+  // return 400 Bad Request
+}

Load configuration ​

cpp
try
+{
+  Json cfg = load_file("config/app.json");
+}
+catch (const std::exception& e)
+{
+  std::cerr << "Failed to load config: " << e.what() << "\\n";
+}

Optional settings file ​

cpp
if (auto s = try_load_file("settings.json"))
+{
+  std::cout << "Settings loaded\\n";
+}
+else
+{
+  std::cout << "Using defaults\\n";
+}

Convenience overloads ​

All helpers also support C-string overloads:

cpp
Json j = loads("{"a":1}");
+
+auto maybe = try_loads("{"a":1}");
+
+Json cfg = load_file("config.json");
+
+auto maybe_cfg = try_load_file("config.json");

Design philosophy ​

This header avoids hidden behavior.

You always choose:

  • strict (throwing)
  • safe (optional)

There is no implicit global error mode.

This keeps Vix predictable and explicit.


Summary ​

vix/json/loads.hpp provides:

  • loads() for strict string parsing
  • try_loads() for safe string parsing
  • load_file() for strict file parsing
  • try_load_file() for safe file parsing

It keeps JSON loading simple, explicit, and safe by design.

`,83)])])}const u=i(t,[["render",e]]);export{c as __pageData,u as default}; diff --git a/docs/assets/modules_json_loads.md.DYBzBK6C.lean.js b/docs/assets/modules_json_loads.md.DYBzBK6C.lean.js new file mode 100644 index 000000000..7907913fc --- /dev/null +++ b/docs/assets/modules_json_loads.md.DYBzBK6C.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"JSON Loads Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/loads.md","filePath":"modules/json/loads.md","lastUpdated":1770915111000}'),t={name:"modules/json/loads.md"};function e(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",83)])])}const u=i(t,[["render",e]]);export{c as __pageData,u as default}; diff --git a/docs/assets/modules_json_simple.md.DGDMKLyh.js b/docs/assets/modules_json_simple.md.DGDMKLyh.js new file mode 100644 index 000000000..293ec4bdd --- /dev/null +++ b/docs/assets/modules_json_simple.md.DGDMKLyh.js @@ -0,0 +1,107 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Simple JSON Model Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/simple.md","filePath":"modules/json/simple.md","lastUpdated":1770915111000}'),h={name:"modules/json/simple.md"};function l(e,s,p,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Simple JSON Model Guide ​

vix/json/Simple.hpp defines a minimal JSON-like value model for lightweight internal Vix APIs.

It is:

  • header-only
  • dependency-free (does not depend on nlohmann::json)
  • designed for structured data exchange between modules without parsing text

If you want to parse or serialize JSON text, use the regular Vix JSON helpers based on nlohmann::json.


Include ​

cpp
#include <vix/json/Simple.hpp>
+using namespace vix::json;

What is Simple? ​

Simple is a tiny DOM-like value system that can represent:

  • null
  • bool
  • integer (stored as int64)
  • floating point (stored as double)
  • string
  • arrays (array_t)
  • objects (kvs)

It is meant for:

  • internal payloads between modules
  • in-memory structured data
  • building small trees of values for adapters and bridges

It is not meant for:

  • large untrusted JSON text parsing
  • full JSON schema validation
  • streaming or incremental parsing

Core types ​

token ​

A token is a tagged variant that stores either:

  • a primitive value, or
  • a shared_ptr<array_t> / shared_ptr<kvs> for recursion

Internally:

cpp
using value_t = std::variant<
+  std::monostate,           // null
+  bool,                     // boolean
+  std::int64_t,             // integer
+  double,                   // floating point
+  std::string,              // string
+  std::shared_ptr<array_t>, // array
+  std::shared_ptr<kvs>      // object
+>;

Default token is null.

array_t ​

A JSON-like array:

  • stored as std::vector<token>
  • provides convenience methods (push_*, ensure(idx), erase_at, etc.)

kvs ​

A JSON-like object.

Important design choice:

  • objects are stored as a flat vector: key0, value0, key1, value1, ...
  • keys are typically string tokens
  • this layout keeps the model minimal and predictable

Quick example ​

cpp
using namespace vix::json;
+
+kvs user = obj({
+  "name", "Alice",
+  "age", 30,
+  "skills", array({"C++", "Networking"})
+});
+
+token root = user;
+
+root.ensure_object().set_string("country", "UG");

Creating values ​

Null ​

cpp
token a;
+token b = nullptr;

Bool ​

cpp
token t = true;

Integers ​

All integral types (except bool) are accepted and stored as int64.

cpp
token a = 42;
+token b = std::int64_t(42);

Floating point ​

cpp
token t = 3.14;

Strings ​

cpp
token a = "hello";
+token b = std::string("hello");

Arrays ​

Using initializer list:

cpp
array_t xs = array({1, 2, 3, "hi"});
+token t = xs;

Using vector:

cpp
std::vector<token> v = {1, 2, 3};
+array_t xs = array(v);
+array_t ys = array(std::move(v));

Objects ​

Objects are built with obj({ ... }) where the initializer list is flattened key/value order:

cpp
kvs cfg = obj({
+  "host", "127.0.0.1",
+  "port", 8080,
+  "tls", false
+});
+
+token t = cfg;

Important:

  • the initializer list is not nested pairs
  • it is: key, value, key, value, ...

Reading values ​

Type checks ​

cpp
token t = 42;
+
+t.is_null();
+t.is_bool();
+t.is_i64();
+t.is_f64();
+t.is_string();
+t.is_array();
+t.is_object();

Raw getters (pointer or nullptr) ​

cpp
if (const std::int64_t* x = t.as_i64())
+{
+  // *x is available
+}

Available raw getters:

  • as_bool()
  • as_i64()
  • as_f64()
  • as_string()
  • as_array_ptr()
  • as_object_ptr()

Convenience getters with default ​

cpp
bool ok = t.as_bool_or(false);
+std::int64_t n = t.as_i64_or(0);
+double d = t.as_f64_or(0.0);
+std::string s = t.as_string_or("default");

Mutating values ​

Setters ​

cpp
token t;
+
+t.set_null();
+t.set_bool(true);
+t.set_i64(123);
+t.set_int(123);
+t.set_ll(123LL);
+t.set_ull(123ULL);
+t.set_f64(3.14);
+t.set_string("hi");
+t.set_cstr("hi");

Ensure array/object ​

These helpers replace the token with an empty array/object if needed, then return a mutable reference.

cpp
token t;
+
+// becomes array if not already
+array_t& xs = t.ensure_array();
+xs.push_int(1);
+xs.push_string("two");
+
+// becomes object if not already
+kvs& o = t.ensure_object();
+o.set_string("name", "Ada");
+o.set_int("age", 42);

array_t guide ​

Append elements ​

cpp
array_t xs;
+
+xs.push_null();
+xs.push_bool(true);
+xs.push_int(1);
+xs.push_i64(2);
+xs.push_f64(3.14);
+xs.push_cstr("hi");
+xs.push_string("hello");
+xs.push_back(obj({"k", "v"})); // token from object

Ensure index ​

ensure(idx) grows the array with nulls if needed, then returns element idx.

cpp
array_t xs;
+
+token& slot = xs.ensure(3); // size becomes 4, filled with null
+slot = "value";

Remove at index ​

cpp
xs.erase_at(1);

kvs guide ​

Find and contains ​

cpp
kvs o = obj({"a", 1, "b", 2});
+
+o.contains("a");
+std::size_t i = o.find_key_index("b"); // raw index in flat storage

Get pointer ​

cpp
if (const token* p = o.get_ptr("a"))
+{
+  // p is value token
+}

Get or create ​

operator[] returns a reference to a value token. If missing, it creates key with null value.

cpp
kvs o;
+o["x"].set_int(123);

Set (insert or replace) ​

cpp
o.set("x", 123);
+o.set("name", "Ada");

Typed getters ​

cpp
auto name = o.get_string("name");  // optional<string>
+auto age  = o.get_i64("age");      // optional<int64_t>
+auto ok   = o.get_bool("active");  // optional<bool>
+auto pi   = o.get_f64("pi");       // optional<double>

Typed getters with defaults ​

cpp
std::string name = o.get_string_or("name", "unknown");
+std::int64_t age = o.get_i64_or("age", 0);
+bool active      = o.get_bool_or("active", false);
+double pi        = o.get_f64_or("pi", 0.0);

Typed setters ​

cpp
o.set_string("name", "Ada");
+o.set_bool("active", true);
+o.set_f64("pi", 3.14);
+o.set_i64("age", 42);
+o.set_int("count", 7);
+o.set_ll("big", 999LL);
+o.set_ull("ubig", 999ULL);

Ensure nested array/object ​

cpp
kvs root;
+
+kvs& user = root.ensure_object("user");
+user.set_string("name", "Ada");
+
+array_t& roles = user.ensure_array("roles");
+roles.push_cstr("admin");

Builders and aliases ​

Builders (existing API) ​

  • array(...) builds array_t
  • obj(...) builds kvs

These are the primary entry points.

Explicit aliases ​

When you also include other JSON helpers, the names obj and array may feel ambiguous.

These aliases keep intent explicit:

  • simple_obj(...)
  • simple_array(...)

They do not change behavior, they only forward to obj() and array().


Important fix: integer ambiguity ​

Some platforms define std::int64_t as long (not long long).

In those cases, passing a long long into token inside an initializer_list could become ambiguous.

This header adds explicit support for:

  • long long
  • unsigned long long

So call sites like this remain stable and unambiguous:

cpp
kvs o = obj({
+  "big", 123LL,
+  "ubig", 123ULL
+});

When to use Simple vs nlohmann::json ​

Use Simple when:

  • you need lightweight in-memory payloads between modules
  • you want a minimal value model without external dependency
  • you want predictable structure and cheap copying

Use nlohmann::json when:

  • you parse or serialize JSON text
  • you need integration with external JSON tooling
  • you want richer conversion utilities

Summary ​

vix/json/Simple.hpp provides a minimal JSON-like model for internal use:

  • token for values (primitive or recursive)
  • array_t for arrays
  • kvs for objects (flat storage)
  • builders: array(...) and obj(...)
  • explicit aliases: simple_array(...), simple_obj(...)

It keeps internal structured data easy, dependency-free, and predictable.

`,131)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_json_simple.md.DGDMKLyh.lean.js b/docs/assets/modules_json_simple.md.DGDMKLyh.lean.js new file mode 100644 index 000000000..772d363b6 --- /dev/null +++ b/docs/assets/modules_json_simple.md.DGDMKLyh.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Simple JSON Model Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/json/simple.md","filePath":"modules/json/simple.md","lastUpdated":1770915111000}'),h={name:"modules/json/simple.md"};function l(e,s,p,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[n("",131)])])}const c=i(h,[["render",l]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_middleware_guide.md.9KPPtECC.js b/docs/assets/modules_middleware_guide.md.9KPPtECC.js new file mode 100644 index 000000000..5f53505c3 --- /dev/null +++ b/docs/assets/modules_middleware_guide.md.9KPPtECC.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/guide.md","filePath":"modules/middleware/guide.md","lastUpdated":1770805184000}'),d={name:"modules/middleware/guide.md"};function r(o,s,i,m,c,n){return t(),a("div")}const f=e(d,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_middleware_guide.md.9KPPtECC.lean.js b/docs/assets/modules_middleware_guide.md.9KPPtECC.lean.js new file mode 100644 index 000000000..5f53505c3 --- /dev/null +++ b/docs/assets/modules_middleware_guide.md.9KPPtECC.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/guide.md","filePath":"modules/middleware/guide.md","lastUpdated":1770805184000}'),d={name:"modules/middleware/guide.md"};function r(o,s,i,m,c,n){return t(),a("div")}const f=e(d,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_middleware_guide.md.p0MrRzn5.js b/docs/assets/modules_middleware_guide.md.p0MrRzn5.js deleted file mode 100644 index e3bf373b4..000000000 --- a/docs/assets/modules_middleware_guide.md.p0MrRzn5.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/guide.md","filePath":"modules/middleware/guide.md","lastUpdated":null}'),d={name:"modules/middleware/guide.md"};function r(o,s,i,l,n,c){return t(),a("div")}const u=e(d,[["render",r]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_middleware_guide.md.p0MrRzn5.lean.js b/docs/assets/modules_middleware_guide.md.p0MrRzn5.lean.js deleted file mode 100644 index e3bf373b4..000000000 --- a/docs/assets/modules_middleware_guide.md.p0MrRzn5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/guide.md","filePath":"modules/middleware/guide.md","lastUpdated":null}'),d={name:"modules/middleware/guide.md"};function r(o,s,i,l,n,c){return t(),a("div")}const u=e(d,[["render",r]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_middleware_index.md.DrAWdL99.lean.js b/docs/assets/modules_middleware_index.md.DrAWdL99.lean.js deleted file mode 100644 index 156500603..000000000 --- a/docs/assets/modules_middleware_index.md.DrAWdL99.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/index.md","filePath":"modules/middleware/index.md","lastUpdated":null}'),k={name:"modules/middleware/index.md"};function p(l,s,t,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[h("",55)])])}const y=i(k,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_middleware_index.md.DrAWdL99.js b/docs/assets/modules_middleware_index.md.xeaBcSN0.js similarity index 97% rename from docs/assets/modules_middleware_index.md.DrAWdL99.js rename to docs/assets/modules_middleware_index.md.xeaBcSN0.js index ab3770f3b..a61aee2b3 100644 --- a/docs/assets/modules_middleware_index.md.DrAWdL99.js +++ b/docs/assets/modules_middleware_index.md.xeaBcSN0.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/index.md","filePath":"modules/middleware/index.md","lastUpdated":null}'),k={name:"modules/middleware/index.md"};function p(l,s,t,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Middleware ​

Vix middleware is explicit.

A middleware is a function that runs before your route handler. It can:

  • read headers, path, query, body
  • set headers or status
  • stop the request early
  • call next() to continue

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (compatible)

You can attach middleware:

  • globally (all routes)
  • by prefix (only under /api/)
  • exactly on a single path

Context middleware uses:

  • vix::middleware::Context
  • vix::middleware::Next
  • adapt_ctx() to install it on App

Minimal example: add a request id header and continue.

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/index.md","filePath":"modules/middleware/index.md","lastUpdated":1770805184000}'),p={name:"modules/middleware/index.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Middleware ​

Vix middleware is explicit.

A middleware is a function that runs before your route handler. It can:

  • read headers, path, query, body
  • set headers or status
  • stop the request early
  • call next() to continue

Vix supports two middleware styles:

  1. Context-based middleware (recommended)
  2. Legacy HTTP middleware (compatible)

You can attach middleware:

  • globally (all routes)
  • by prefix (only under /api/)
  • exactly on a single path

Context middleware uses:

  • vix::middleware::Context
  • vix::middleware::Next
  • adapt_ctx() to install it on App

Minimal example: add a request id header and continue.

cpp
#include <vix.hpp>
 #include <vix/middleware/app/adapter.hpp>
 
 #include <chrono>
@@ -248,4 +248,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
   app.run(8080);
   return 0;
 }

Test:

bash
curl -i http://127.0.0.1:8080/api/whoami
-curl -i -H "x-user: gaspard" -H "x-role: admin" http://127.0.0.1:8080/api/whoami

Notes ​

  • Middleware order matters: first installed runs first.
  • If a middleware sends a response and does not call next(), the chain stops.
  • Prefix matching uses normalized prefixes (for example /api/).
  • Keep middleware small and predictable.
`,55)])])}const y=i(k,[["render",p]]);export{g as __pageData,y as default}; +curl -i -H "x-user: gaspard" -H "x-role: admin" http://127.0.0.1:8080/api/whoami

Notes ​

  • Middleware order matters: first installed runs first.
  • If a middleware sends a response and does not call next(), the chain stops.
  • Prefix matching uses normalized prefixes (for example /api/).
  • Keep middleware small and predictable.
`,55)])])}const c=i(p,[["render",k]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_middleware_index.md.xeaBcSN0.lean.js b/docs/assets/modules_middleware_index.md.xeaBcSN0.lean.js new file mode 100644 index 000000000..9af3ecdf2 --- /dev/null +++ b/docs/assets/modules_middleware_index.md.xeaBcSN0.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"modules/middleware/index.md","filePath":"modules/middleware/index.md","lastUpdated":1770805184000}'),p={name:"modules/middleware/index.md"};function k(l,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",55)])])}const c=i(p,[["render",k]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_net_guide.md.BilUZWek.js b/docs/assets/modules_net_guide.md.BilUZWek.js deleted file mode 100644 index dfa158071..000000000 --- a/docs/assets/modules_net_guide.md.BilUZWek.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/guide.md","filePath":"modules/net/guide.md","lastUpdated":null}'),o={name:"modules/net/guide.md"};function s(d,n,r,c,i,l){return t(),a("div")}const u=e(o,[["render",s]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_net_guide.md.BilUZWek.lean.js b/docs/assets/modules_net_guide.md.BilUZWek.lean.js deleted file mode 100644 index dfa158071..000000000 --- a/docs/assets/modules_net_guide.md.BilUZWek.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/guide.md","filePath":"modules/net/guide.md","lastUpdated":null}'),o={name:"modules/net/guide.md"};function s(d,n,r,c,i,l){return t(),a("div")}const u=e(o,[["render",s]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_net_guide.md.CCIeAGSO.js b/docs/assets/modules_net_guide.md.CCIeAGSO.js new file mode 100644 index 000000000..409e06425 --- /dev/null +++ b/docs/assets/modules_net_guide.md.CCIeAGSO.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/guide.md","filePath":"modules/net/guide.md","lastUpdated":1770805184000}'),o={name:"modules/net/guide.md"};function r(s,d,n,i,c,m){return t(),a("div")}const f=e(o,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_net_guide.md.CCIeAGSO.lean.js b/docs/assets/modules_net_guide.md.CCIeAGSO.lean.js new file mode 100644 index 000000000..409e06425 --- /dev/null +++ b/docs/assets/modules_net_guide.md.CCIeAGSO.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/guide.md","filePath":"modules/net/guide.md","lastUpdated":1770805184000}'),o={name:"modules/net/guide.md"};function r(s,d,n,i,c,m){return t(),a("div")}const f=e(o,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_net_index.md.B2TTD1jE.js b/docs/assets/modules_net_index.md.B2TTD1jE.js deleted file mode 100644 index 6b0881a0c..000000000 --- a/docs/assets/modules_net_index.md.B2TTD1jE.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as n}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/index.md","filePath":"modules/net/index.md","lastUpdated":null}'),a={name:"modules/net/index.md"};function o(s,d,r,c,i,l){return t(),n("div")}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_net_index.md.B2TTD1jE.lean.js b/docs/assets/modules_net_index.md.B2TTD1jE.lean.js deleted file mode 100644 index 6b0881a0c..000000000 --- a/docs/assets/modules_net_index.md.B2TTD1jE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as n}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/index.md","filePath":"modules/net/index.md","lastUpdated":null}'),a={name:"modules/net/index.md"};function o(s,d,r,c,i,l){return t(),n("div")}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_net_index.md.CpzKor4-.js b/docs/assets/modules_net_index.md.CpzKor4-.js new file mode 100644 index 000000000..54f98ad40 --- /dev/null +++ b/docs/assets/modules_net_index.md.CpzKor4-.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/index.md","filePath":"modules/net/index.md","lastUpdated":1770805184000}'),n={name:"modules/net/index.md"};function o(r,s,d,i,c,m){return t(),a("div")}const u=e(n,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_net_index.md.CpzKor4-.lean.js b/docs/assets/modules_net_index.md.CpzKor4-.lean.js new file mode 100644 index 000000000..54f98ad40 --- /dev/null +++ b/docs/assets/modules_net_index.md.CpzKor4-.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/net/index.md","filePath":"modules/net/index.md","lastUpdated":1770805184000}'),n={name:"modules/net/index.md"};function o(r,s,d,i,c,m){return t(),a("div")}const u=e(n,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_orm_index.md.D51CAnWI.js b/docs/assets/modules_orm_examples.md.CLJTyAfR.js similarity index 95% rename from docs/assets/modules_orm_index.md.D51CAnWI.js rename to docs/assets/modules_orm_examples.md.CLJTyAfR.js index ed5f68b46..8c8bd9411 100644 --- a/docs/assets/modules_orm_index.md.D51CAnWI.js +++ b/docs/assets/modules_orm_examples.md.CLJTyAfR.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"ORM","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/index.md","filePath":"modules/orm/index.md","lastUpdated":null}'),k={name:"modules/orm/index.md"};function l(p,s,t,E,e,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

ORM ​

This page is a guide to the Vix ORM module with minimal, explicit examples.

Assumptions:

  • MySQL is running locally
  • Database: vixdb
  • Table users(id, name, email, age) exists

Run any example with:

bash
vix run examples/orm/<file>.cpp

Concepts ​

Vix ORM is built on top of the vix::db layer and keeps everything explicit:

  • Connection pools
  • Transactions (RAII)
  • Prepared statements
  • Small helpers for mapping rows to C++ types

Nothing is hidden. SQL stays visible.


1) Connection pool + basic insert (transaction) ​

cpp
#include <vix/orm/orm.hpp>
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"ORM Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/examples.md","filePath":"modules/orm/examples.md","lastUpdated":1770916748000}'),k={name:"modules/orm/examples.md"};function l(p,s,t,E,e,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

ORM Examples ​

This page is a guide to the Vix ORM module with minimal, explicit examples.

Assumptions:

  • MySQL is running locally
  • Database: vixdb
  • Table users(id, name, email, age) exists

Run any example with:

bash
vix run examples/orm/<file>.cpp

Concepts ​

Vix ORM is built on top of the vix::db layer and keeps everything explicit:

  • Connection pools
  • Transactions (RAII)
  • Prepared statements
  • Small helpers for mapping rows to C++ types

Nothing is hidden. SQL stays visible.


1) Connection pool + basic insert (transaction) ​

cpp
#include <vix/orm/orm.hpp>
 #include <iostream>
 
 using namespace vix::orm;
@@ -200,4 +200,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
     std::cerr << e.what() << "\\n";
     return 1;
   }
-}

Common errors ​

  • Cannot connect: verify host, port, user, password, and database name
  • Missing table: create the table or run migrations first
  • Bind mismatch: bind integers as std::int64_t when in doubt

Vix ORM stays minimal: explicit SQL, predictable transactions, clear failures.

`,32)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; +}

Common errors ​

  • Cannot connect: verify host, port, user, password, and database name
  • Missing table: create the table or run migrations first
  • Bind mismatch: bind integers as std::int64_t when in doubt

Vix ORM stays minimal: explicit SQL, predictable transactions, clear failures.

`,32)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_orm_examples.md.CLJTyAfR.lean.js b/docs/assets/modules_orm_examples.md.CLJTyAfR.lean.js new file mode 100644 index 000000000..a3de8531d --- /dev/null +++ b/docs/assets/modules_orm_examples.md.CLJTyAfR.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"ORM Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/examples.md","filePath":"modules/orm/examples.md","lastUpdated":1770916748000}'),k={name:"modules/orm/examples.md"};function l(p,s,t,E,e,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_orm_guide.md.eYjboWMG.js b/docs/assets/modules_orm_guide.md.eYjboWMG.js deleted file mode 100644 index 6eeadee51..000000000 --- a/docs/assets/modules_orm_guide.md.eYjboWMG.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/guide.md","filePath":"modules/orm/guide.md","lastUpdated":null}'),a={name:"modules/orm/guide.md"};function r(s,d,n,c,m,i){return t(),o("div")}const u=e(a,[["render",r]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_orm_guide.md.eYjboWMG.lean.js b/docs/assets/modules_orm_guide.md.eYjboWMG.lean.js deleted file mode 100644 index 6eeadee51..000000000 --- a/docs/assets/modules_orm_guide.md.eYjboWMG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/guide.md","filePath":"modules/orm/guide.md","lastUpdated":null}'),a={name:"modules/orm/guide.md"};function r(s,d,n,c,m,i){return t(),o("div")}const u=e(a,[["render",r]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_orm_index.md.CoxB_AMo.js b/docs/assets/modules_orm_index.md.CoxB_AMo.js new file mode 100644 index 000000000..bf493343e --- /dev/null +++ b/docs/assets/modules_orm_index.md.CoxB_AMo.js @@ -0,0 +1,80 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"ORM Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/index.md","filePath":"modules/orm/index.md","lastUpdated":1770916748000}'),l={name:"modules/orm/index.md"};function h(p,s,e,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`

ORM Guide ​

This document covers the Vix ORM module at a practical level.

It is split in two parts:

  1. ORM C++ API (entities, mappers, repositories, unit of work)
  2. vix orm CLI (migrations and schema evolution)

The ORM is intentionally minimal:

  • explicit SQL
  • predictable behavior
  • small abstractions only where they remove boilerplate

Include ​

Most users include the umbrella header:

cpp
#include <vix/orm/orm.hpp>
+using namespace vix::orm;

Internally, it includes:

  • QueryBuilder.hpp
  • Entity.hpp
  • Mapper.hpp
  • Repository.hpp
  • UnitOfWork.hpp
  • db_compat.hpp

1) ORM C++ API ​

Core building blocks ​

Entity ​

Entity is a semantic base class for ORM-managed types.

cpp
struct Entity
+{
+  virtual ~Entity() = default;
+};

It contains no data and no behavior. It exists to:

  • provide a clear extension point
  • allow polymorphic handling when needed

You do not need to inherit from it for the ORM to work, but it can be useful for consistency.


Mapper ​

Mapper<T> defines how an entity is mapped to and from the database.

It is a template that you fully specialize per entity type.

It has three responsibilities:

  • fromRow(row) Build T from a database result row

  • toInsertParams(v) Produce column/value pairs for INSERT

  • toUpdateParams(v) Produce column/value pairs for UPDATE

All values are stored as std::any to keep the mapper flexible. The ORM later converts them into vix::db::DbValue.

Example specialization:

cpp
struct User
+{
+  std::int64_t id = 0;
+  std::string name;
+  std::int64_t age = 0;
+};
+
+template<>
+struct vix::orm::Mapper<User>
+{
+  static User fromRow(const vix::db::ResultRow& row)
+  {
+    User u;
+    u.id = row.i64("id").value_or(0);
+    u.name = row.str("name").value_or("");
+    u.age = row.i64("age").value_or(0);
+    return u;
+  }
+
+  static std::vector<std::pair<std::string, std::any>>
+  toInsertParams(const User& u)
+  {
+    return {
+      {"name", u.name},
+      {"age",  u.age}
+    };
+  }
+
+  static std::vector<std::pair<std::string, std::any>>
+  toUpdateParams(const User& u)
+  {
+    return {
+      {"name", u.name},
+      {"age",  u.age}
+    };
+  }
+};

Notes:

  • toInsertParams usually excludes "id" (auto-increment).
  • toUpdateParams usually excludes immutable fields.

Repository: BaseRepository ​

BaseRepository<T> is a minimal generic CRUD repository for a single table.

Assumptions:

  • the table primary key column is named "id"
  • Mapper<T> is specialized for your entity

Constructor ​

cpp
BaseRepository(vix::db::ConnectionPool& pool, std::string table);

Create ​

cpp
std::uint64_t create(const T& v);
  • Uses Mapper<T>::toInsertParams
  • Builds:
sql
INSERT INTO table (col1,col2,...) VALUES (?,?,...)
  • Returns last insert id

Find by id ​

cpp
std::optional<T> findById(std::int64_t id);
  • Executes:
sql
SELECT * FROM table WHERE id = ? LIMIT 1
  • Returns std::nullopt if not found

Update by id ​

cpp
std::uint64_t updateById(std::int64_t id, const T& v);
  • Uses Mapper<T>::toUpdateParams
  • Builds:
sql
UPDATE table SET a=?,b=?,... WHERE id=?
  • Returns affected rows

Delete by id ​

cpp
std::uint64_t removeById(std::int64_t id);
  • Executes:
sql
DELETE FROM table WHERE id = ?

UnitOfWork ​

UnitOfWork groups operations in a transaction, using RAII:

  • transaction begins at construction
  • rollback happens on destruction unless committed
cpp
vix::orm::UnitOfWork uow(pool);
+
+try
+{
+  // do work using uow.conn() or repositories
+  uow.commit();
+}
+catch (...)
+{
+  // optional explicit rollback
+  uow.rollback();
+  throw;
+}

Access the transaction connection ​

cpp
vix::db::Connection& c = uow.conn();

Use this for:

  • multiple repositories in one transaction
  • custom SQL in the same transaction scope

QueryBuilder ​

QueryBuilder is a tiny helper to build SQL + parameter list.

It keeps:

  • sql_ as a string
  • params_ as std::vector<vix::db::DbValue>

Example:

cpp
QueryBuilder q;
+q.raw("SELECT * FROM users WHERE age > ?").param(18);
+
+auto st = conn.prepare(q.sql());
+const auto& ps = q.params();
+for (std::size_t i = 0; i < ps.size(); ++i)
+  st->bind(i + 1, ps[i]);
+
+auto rs = st->query();

This is intentionally minimal. It does not try to validate SQL.


db_compat.hpp ​

This header is a compatibility layer that re-exports the DB module types into vix::orm.

It also provides:

any_to_dbvalue_or_throw(const std::any&) ​

The ORM uses std::any in mappers. This function converts runtime values into vix::db::DbValue.

Supported types include:

  • empty std::any / nullptr_t -> NULL
  • vix::db::DbValue -> passthrough
  • bool
  • integral types -> int64 (best-effort narrowing)
  • float/double -> double
  • std::string / std::string_view / const char* -> string
  • vix::db::Blob -> blob

If the type is not supported, it throws vix::db::DBError.

Practical rule:

  • keep mapper fields to basic scalar types and strings
  • use vix::db::Blob for binary data
  • avoid custom structs inside std::any

2) CLI: vix orm ​

vix orm manages:

  • database migrations
  • schema evolution
  • migration history
  • rollback operations

It keeps schema changes explicit and versioned.

Usage ​

bash
vix orm migrate   [options]
+vix orm rollback  --steps <n> [options]
+vix orm status    [options]
+vix orm makemigrations --new <schema.json> [options]

Commands ​

migrate ​

Apply pending migrations.

bash
vix orm migrate

rollback ​

Rollback last N applied migrations.

bash
vix orm rollback --steps 1

Required:

  • --steps <n>

status ​

Show applied and pending migrations.

bash
vix orm status

makemigrations ​

Generate a migration from a schema diff.

bash
vix orm makemigrations --new ./schema.new.json

Options:

  • --new <path> New schema (required)
  • --snapshot <path> Previous schema snapshot (default: schema.json)
  • --name <label> Migration label (default: auto)
  • --dialect <mysql|sqlite> SQL dialect (default: mysql)

Common options ​

bash
--db <name>           Database name
+--dir <path>          Migrations directory
+--host <uri>          MySQL URI
+--user <name>         Database user
+--pass <pass>         Database password
+--project-dir <path>  Force project root detection
+--tool <path>         Override migrator executable path

Environment defaults ​

If you prefer env configuration:

bash
VIX_ORM_HOST
+VIX_ORM_USER
+VIX_ORM_PASS
+VIX_ORM_DB
+VIX_ORM_DIR
+VIX_ORM_TOOL

Example:

bash
VIX_ORM_DB=blog_db VIX_ORM_DIR=./migrations vix orm migrate

Examples ​

Apply migrations:

bash
vix orm migrate --db blog_db --dir ./migrations

Rollback:

bash
vix orm rollback --steps 1 --db blog_db --dir ./migrations

Status:

bash
vix orm status --db blog_db

Generate migration:

bash
vix orm makemigrations \\
+  --new ./schema.new.json \\
+  --snapshot ./schema.json \\
+  --dir ./migrations \\
+  --name create_users \\
+  --dialect mysql

Summary ​

The Vix ORM is a thin, explicit layer over vix::db:

  • Mapper<T> defines the mapping
  • BaseRepository<T> gives minimal CRUD
  • UnitOfWork groups operations transactionally
  • QueryBuilder builds SQL + params with no magic
  • vix orm CLI manages migrations and schema evolution
`,137)])])}const y=i(l,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_orm_index.md.CoxB_AMo.lean.js b/docs/assets/modules_orm_index.md.CoxB_AMo.lean.js new file mode 100644 index 000000000..befe5ab22 --- /dev/null +++ b/docs/assets/modules_orm_index.md.CoxB_AMo.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"ORM Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/index.md","filePath":"modules/orm/index.md","lastUpdated":1770916748000}'),l={name:"modules/orm/index.md"};function h(p,s,e,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n("",137)])])}const y=i(l,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_orm_index.md.D51CAnWI.lean.js b/docs/assets/modules_orm_index.md.D51CAnWI.lean.js deleted file mode 100644 index 174e8fea6..000000000 --- a/docs/assets/modules_orm_index.md.D51CAnWI.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"ORM","description":"","frontmatter":{},"headers":[],"relativePath":"modules/orm/index.md","filePath":"modules/orm/index.md","lastUpdated":null}'),k={name:"modules/orm/index.md"};function l(p,s,t,E,e,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",32)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_p2p_api.md.C5Nl_qqY.js b/docs/assets/modules_p2p_api.md.C5Nl_qqY.js deleted file mode 100644 index 3bdf4f8d2..000000000 --- a/docs/assets/modules_p2p_api.md.C5Nl_qqY.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/api.md","filePath":"modules/p2p/api.md","lastUpdated":null}'),p={name:"modules/p2p/api.md"};function o(s,r,n,c,d,i){return t(),a("div")}const _=e(p,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_p2p_api.md.C5Nl_qqY.lean.js b/docs/assets/modules_p2p_api.md.C5Nl_qqY.lean.js deleted file mode 100644 index 3bdf4f8d2..000000000 --- a/docs/assets/modules_p2p_api.md.C5Nl_qqY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/api.md","filePath":"modules/p2p/api.md","lastUpdated":null}'),p={name:"modules/p2p/api.md"};function o(s,r,n,c,d,i){return t(),a("div")}const _=e(p,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_p2p_api.md.Tiz912Jo.js b/docs/assets/modules_p2p_api.md.Tiz912Jo.js new file mode 100644 index 000000000..08623c06b --- /dev/null +++ b/docs/assets/modules_p2p_api.md.Tiz912Jo.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/api.md","filePath":"modules/p2p/api.md","lastUpdated":1770805184000}'),p={name:"modules/p2p/api.md"};function o(r,s,i,c,d,n){return t(),a("div")}const u=e(p,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_p2p_api.md.Tiz912Jo.lean.js b/docs/assets/modules_p2p_api.md.Tiz912Jo.lean.js new file mode 100644 index 000000000..08623c06b --- /dev/null +++ b/docs/assets/modules_p2p_api.md.Tiz912Jo.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/api.md","filePath":"modules/p2p/api.md","lastUpdated":1770805184000}'),p={name:"modules/p2p/api.md"};function o(r,s,i,c,d,n){return t(),a("div")}const u=e(p,[["render",o]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_p2p_guide.md.CIiyxlHt.js b/docs/assets/modules_p2p_guide.md.CIiyxlHt.js new file mode 100644 index 000000000..0a04b75c0 --- /dev/null +++ b/docs/assets/modules_p2p_guide.md.CIiyxlHt.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/guide.md","filePath":"modules/p2p/guide.md","lastUpdated":1770805184000}'),o={name:"modules/p2p/guide.md"};function p(r,s,d,i,c,n){return t(),a("div")}const f=e(o,[["render",p]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_p2p_guide.md.CIiyxlHt.lean.js b/docs/assets/modules_p2p_guide.md.CIiyxlHt.lean.js new file mode 100644 index 000000000..0a04b75c0 --- /dev/null +++ b/docs/assets/modules_p2p_guide.md.CIiyxlHt.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/guide.md","filePath":"modules/p2p/guide.md","lastUpdated":1770805184000}'),o={name:"modules/p2p/guide.md"};function p(r,s,d,i,c,n){return t(),a("div")}const f=e(o,[["render",p]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_p2p_guide.md.Da6LvVfn.js b/docs/assets/modules_p2p_guide.md.Da6LvVfn.js deleted file mode 100644 index 7c729adfc..000000000 --- a/docs/assets/modules_p2p_guide.md.Da6LvVfn.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/guide.md","filePath":"modules/p2p/guide.md","lastUpdated":null}'),o={name:"modules/p2p/guide.md"};function s(d,p,r,n,c,i){return t(),a("div")}const u=e(o,[["render",s]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_p2p_guide.md.Da6LvVfn.lean.js b/docs/assets/modules_p2p_guide.md.Da6LvVfn.lean.js deleted file mode 100644 index 7c729adfc..000000000 --- a/docs/assets/modules_p2p_guide.md.Da6LvVfn.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/guide.md","filePath":"modules/p2p/guide.md","lastUpdated":null}'),o={name:"modules/p2p/guide.md"};function s(d,p,r,n,c,i){return t(),a("div")}const u=e(o,[["render",s]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.js b/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.js new file mode 100644 index 000000000..a28e9c322 --- /dev/null +++ b/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/guide.md","filePath":"modules/p2p_http/guide.md","lastUpdated":1770805184000}'),a={name:"modules/p2p_http/guide.md"};function o(r,s,d,i,c,n){return e(),p("div")}const f=t(a,[["render",o]]);export{u as __pageData,f as default}; diff --git a/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.lean.js b/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.lean.js new file mode 100644 index 000000000..a28e9c322 --- /dev/null +++ b/docs/assets/modules_p2p_http_guide.md.CSqZCvE5.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/guide.md","filePath":"modules/p2p_http/guide.md","lastUpdated":1770805184000}'),a={name:"modules/p2p_http/guide.md"};function o(r,s,d,i,c,n){return e(),p("div")}const f=t(a,[["render",o]]);export{u as __pageData,f as default}; diff --git a/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.js b/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.js deleted file mode 100644 index 49989bab6..000000000 --- a/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/guide.md","filePath":"modules/p2p_http/guide.md","lastUpdated":null}'),p={name:"modules/p2p_http/guide.md"};function o(s,d,r,n,c,i){return t(),a("div")}const m=e(p,[["render",o]]);export{l as __pageData,m as default}; diff --git a/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.lean.js b/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.lean.js deleted file mode 100644 index 49989bab6..000000000 --- a/docs/assets/modules_p2p_http_guide.md.D1x4sCG3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/guide.md","filePath":"modules/p2p_http/guide.md","lastUpdated":null}'),p={name:"modules/p2p_http/guide.md"};function o(s,d,r,n,c,i){return t(),a("div")}const m=e(p,[["render",o]]);export{l as __pageData,m as default}; diff --git a/docs/assets/modules_p2p_http_index.md.DXm1oEWV.js b/docs/assets/modules_p2p_http_index.md.B4i7PWrx.js similarity index 86% rename from docs/assets/modules_p2p_http_index.md.DXm1oEWV.js rename to docs/assets/modules_p2p_http_index.md.B4i7PWrx.js index 9ca6db5fe..d058429da 100644 --- a/docs/assets/modules_p2p_http_index.md.DXm1oEWV.js +++ b/docs/assets/modules_p2p_http_index.md.B4i7PWrx.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/index.md","filePath":"modules/p2p_http/index.md","lastUpdated":null}'),l={name:"modules/p2p_http/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p(`

p2p-ping ​

Minimal example for Vix P2P with an HTTP UI/API bridge.

This example boots:

  • a P2P node (P2PRuntime)
  • an HTTP server (App)
  • the built-in p2p_http routes under /api/p2p

All code is kept inside main() on purpose.

Run ​

bash
vix run examples/p2p-ping.cpp

Then open:

  • http://127.0.0.1:5178/
  • http://127.0.0.1:5178/connect

Or test the API:

bash
curl -i http://127.0.0.1:5178/api/p2p/status
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/index.md","filePath":"modules/p2p_http/index.md","lastUpdated":1770805184000}'),l={name:"modules/p2p_http/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p(`

p2p-ping ​

Minimal example for Vix P2P with an HTTP UI/API bridge.

This example boots:

  • a P2P node (P2PRuntime)
  • an HTTP server (App)
  • the built-in p2p_http routes under /api/p2p

All code is kept inside main() on purpose.

Run ​

bash
vix run examples/p2p-ping.cpp

Then open:

  • http://127.0.0.1:5178/
  • http://127.0.0.1:5178/connect

Or test the API:

bash
curl -i http://127.0.0.1:5178/api/p2p/status
 curl -i http://127.0.0.1:5178/api/p2p/peers
 curl -i http://127.0.0.1:5178/api/p2p/ping

Example ​

cpp
// vix run server.cpp
 // http://127.0.0.1:5178/
@@ -52,4 +52,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
 
   app.wait();
   runtime.stop();
-}

Notes ​

  • If you run multiple nodes, change:

    • cfg.node_id (example: "B", "C")
    • cfg.listen_port (example: 9002, 9003)
    • the HTTP port in app.listen(...) (example: 5179, 5180)
  • The exact API paths depend on your p2p_http implementation. If your build exposes different endpoints, keep the same structure but adjust the URLs in the curl commands.

`,15)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; +}

Notes ​

  • If you run multiple nodes, change:

    • cfg.node_id (example: "B", "C")
    • cfg.listen_port (example: 9002, 9003)
    • the HTTP port in app.listen(...) (example: 5179, 5180)
  • The exact API paths depend on your p2p_http implementation. If your build exposes different endpoints, keep the same structure but adjust the URLs in the curl commands.

`,15)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_p2p_http_index.md.B4i7PWrx.lean.js b/docs/assets/modules_p2p_http_index.md.B4i7PWrx.lean.js new file mode 100644 index 000000000..30b8d3718 --- /dev/null +++ b/docs/assets/modules_p2p_http_index.md.B4i7PWrx.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/index.md","filePath":"modules/p2p_http/index.md","lastUpdated":1770805184000}'),l={name:"modules/p2p_http/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p("",15)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_p2p_http_index.md.DXm1oEWV.lean.js b/docs/assets/modules_p2p_http_index.md.DXm1oEWV.lean.js deleted file mode 100644 index f59f5f601..000000000 --- a/docs/assets/modules_p2p_http_index.md.DXm1oEWV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p_http/index.md","filePath":"modules/p2p_http/index.md","lastUpdated":null}'),l={name:"modules/p2p_http/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p("",15)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_p2p_index.md.DB6ma7CV.js b/docs/assets/modules_p2p_index.md.C8PPPjgZ.js similarity index 86% rename from docs/assets/modules_p2p_index.md.DB6ma7CV.js rename to docs/assets/modules_p2p_index.md.C8PPPjgZ.js index b021ff05f..ffb4ecadd 100644 --- a/docs/assets/modules_p2p_index.md.DB6ma7CV.js +++ b/docs/assets/modules_p2p_index.md.C8PPPjgZ.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/index.md","filePath":"modules/p2p/index.md","lastUpdated":null}'),l={name:"modules/p2p/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p(`

p2p-ping ​

Minimal example for Vix P2P with an HTTP UI/API bridge.

This example boots:

  • a P2P node (P2PRuntime)
  • an HTTP server (App)
  • the built-in p2p_http routes under /api/p2p

All code is kept inside main() on purpose.

Run ​

bash
vix run examples/p2p-ping.cpp

Then open:

  • http://127.0.0.1:5178/
  • http://127.0.0.1:5178/connect

Or test the API:

bash
curl -i http://127.0.0.1:5178/api/p2p/status
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/index.md","filePath":"modules/p2p/index.md","lastUpdated":1770805184000}'),l={name:"modules/p2p/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p(`

p2p-ping ​

Minimal example for Vix P2P with an HTTP UI/API bridge.

This example boots:

  • a P2P node (P2PRuntime)
  • an HTTP server (App)
  • the built-in p2p_http routes under /api/p2p

All code is kept inside main() on purpose.

Run ​

bash
vix run examples/p2p-ping.cpp

Then open:

  • http://127.0.0.1:5178/
  • http://127.0.0.1:5178/connect

Or test the API:

bash
curl -i http://127.0.0.1:5178/api/p2p/status
 curl -i http://127.0.0.1:5178/api/p2p/peers
 curl -i http://127.0.0.1:5178/api/p2p/ping

Example ​

cpp
// vix run server.cpp
 // http://127.0.0.1:5178/
@@ -52,4 +52,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
 
   app.wait();
   runtime.stop();
-}

Notes ​

  • If you run multiple nodes, change:

    • cfg.node_id (example: "B", "C")
    • cfg.listen_port (example: 9002, 9003)
    • the HTTP port in app.listen(...) (example: 5179, 5180)
  • The exact API paths depend on your p2p_http implementation. If your build exposes different endpoints, keep the same structure but adjust the URLs in the curl commands.

`,15)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; +}

Notes ​

  • If you run multiple nodes, change:

    • cfg.node_id (example: "B", "C")
    • cfg.listen_port (example: 9002, 9003)
    • the HTTP port in app.listen(...) (example: 5179, 5180)
  • The exact API paths depend on your p2p_http implementation. If your build exposes different endpoints, keep the same structure but adjust the URLs in the curl commands.

`,15)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_p2p_index.md.C8PPPjgZ.lean.js b/docs/assets/modules_p2p_index.md.C8PPPjgZ.lean.js new file mode 100644 index 000000000..41f33fc97 --- /dev/null +++ b/docs/assets/modules_p2p_index.md.C8PPPjgZ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/index.md","filePath":"modules/p2p/index.md","lastUpdated":1770805184000}'),l={name:"modules/p2p/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p("",15)])])}const o=i(l,[["render",h]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_p2p_index.md.DB6ma7CV.lean.js b/docs/assets/modules_p2p_index.md.DB6ma7CV.lean.js deleted file mode 100644 index fd0504ab4..000000000 --- a/docs/assets/modules_p2p_index.md.DB6ma7CV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"p2p-ping","description":"","frontmatter":{},"headers":[],"relativePath":"modules/p2p/index.md","filePath":"modules/p2p/index.md","lastUpdated":null}'),l={name:"modules/p2p/index.md"};function h(t,s,k,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[p("",15)])])}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_sync_engine.md.CQqU3KEJ.js b/docs/assets/modules_sync_engine.md.CQqU3KEJ.js new file mode 100644 index 000000000..c33d3a547 --- /dev/null +++ b/docs/assets/modules_sync_engine.md.CQqU3KEJ.js @@ -0,0 +1,53 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Sync Engine","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/engine.md","filePath":"modules/sync/engine.md","lastUpdated":null}'),e={name:"modules/sync/engine.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

Sync Engine ​

This page documents the sync engine layer in the sync module.

The engine layer coordinates the offline-first synchronization loop by driving workers that pull operations from the Outbox and deliver them through a transport.

Headers ​

cpp
#include <vix/sync/engine/SyncEngine.hpp>
+#include <vix/sync/engine/SyncWorker.hpp>

Namespace:

cpp
vix::sync::engine

Architecture Overview ​

The engine layer is composed of:

  • SyncEngine: orchestrator and background loop
  • SyncWorker: executes batch processing of operations
  • ISyncTransport: pluggable delivery mechanism (HTTP, WebSocket, P2P, edge, etc.)
  • NetworkProbe: connectivity signal used to adapt behavior
  • Outbox: durable queue of operations to send (local-first)

High-level control flow:

  1. SyncEngine starts (manual ticks or background thread)
  2. Each tick drives one or more SyncWorker instances
  3. Each worker pulls ready operations from the Outbox
  4. Worker sends operations via ISyncTransport
  5. Worker updates Outbox state based on success or retryability
  6. Engine sleeps differently when idle or offline

SyncEngine ​

SyncEngine is the coordinator for the offline-first sync loop.

Responsibilities:

  • Spawns and owns a set of SyncWorker instances
  • Periodically ticks workers to pull operations from the Outbox
  • Uses NetworkProbe to adapt behavior when offline or online
  • Delegates actual I/O to an ISyncTransport implementation
  • Can be run manually (tick) or as a background loop (start/stop)

Config ​

All time values are expressed in milliseconds.

cpp
struct Config
+{
+    std::size_t worker_count{1};
+    std::int64_t idle_sleep_ms{250};
+    std::int64_t offline_sleep_ms{500};
+    std::size_t batch_limit{25};
+    std::int64_t inflight_timeout_ms{10'000};
+};

Meaning:

  • worker_count: number of workers created and owned by the engine
  • idle_sleep_ms: sleep duration when there is nothing to process
  • offline_sleep_ms: sleep duration when the network is considered offline
  • batch_limit: maximum operations pulled per batch (per worker tick)
  • inflight_timeout_ms: how long an operation may remain in-flight before it can be treated as timed out

Lifecycle ​

cpp
SyncEngine(
+    Config cfg,
+    std::shared_ptr<vix::sync::outbox::Outbox> outbox,
+    std::shared_ptr<vix::net::NetworkProbe> probe,
+    std::shared_ptr<ISyncTransport> transport);
+
+~SyncEngine();
+
+std::size_t tick(std::int64_t now_ms);
+
+void start();
+void stop();
+
+bool running() const noexcept;

Important notes:

  • start() spawns an internal background thread and runs the control loop
  • stop() requests shutdown and joins the thread
  • tick(now_ms) runs one engine iteration and returns a best-effort processed count
  • Avoid calling tick() concurrently with start()/stop()

SyncWorker ​

SyncWorker is the unit that processes ready operations from the Outbox.

Responsibilities:

  • Consults NetworkProbe to decide whether sending should proceed
  • Pulls a batch of ready operations from the Outbox
  • Sends operations through ISyncTransport
  • Applies retry/backoff decisions by updating Outbox state (policy lives in Outbox)

Config ​

All time values are expressed in milliseconds.

cpp
struct Config
+{
+    std::size_t batch_limit{25};
+    std::int64_t idle_sleep_ms{250};
+    std::int64_t offline_sleep_ms{500};
+    std::int64_t inflight_timeout_ms{10'000};
+};

Meaning:

  • batch_limit: max operations per tick
  • idle_sleep_ms: recommended sleep when idle (used by orchestrators)
  • offline_sleep_ms: recommended sleep when offline (used by orchestrators)
  • inflight_timeout_ms: max time an op may remain in-flight before it becomes eligible for retry

API ​

cpp
SyncWorker(
+    Config cfg,
+    std::shared_ptr<vix::sync::outbox::Outbox> outbox,
+    std::shared_ptr<vix::net::NetworkProbe> probe,
+    std::shared_ptr<ISyncTransport> transport);
+
+std::size_t tick(std::int64_t now_ms);

tick(now_ms) processes up to batch_limit operations, best-effort.

ISyncTransport and SendResult ​

The engine is transport-agnostic.

SendResult ​

cpp
struct SendResult
+{
+    bool ok{false};
+    bool retryable{true};
+    std::string error;
+};

Meaning:

  • ok: remote accepted the operation
  • retryable: if false, the worker may drop or dead-letter the operation (depending on Outbox policy)
  • error: optional diagnostics text

Transport Interface ​

cpp
class ISyncTransport
+{
+public:
+    virtual ~ISyncTransport() = default;
+    virtual SendResult send(const vix::sync::Operation &op) = 0;
+};

Implementation targets can include:

  • HTTP batch endpoints
  • WebSocket push/ack
  • P2P peer replication
  • Edge store-and-forward gateways

Usage Pattern ​

There are two ways to drive the engine.

Manual driving (single-threaded integration) ​

Use this when you already have a loop (game loop, server loop, embedded runtime).

cpp
#include <vix/sync/engine/SyncEngine.hpp>
+
+void sync_step(vix::sync::engine::SyncEngine& engine, std::int64_t now_ms)
+{
+    engine.tick(now_ms);
+}

Background loop ​

Use this when you want the sync engine to self-manage in its own thread.

cpp
engine.start();
+
+// ... application runs ...
+
+engine.stop();

Thread-Safety Contract ​

  • start()/stop() manage an internal thread
  • tick() is intended to be called by the engine thread or by a single external driver
  • Avoid calling tick() concurrently with start()/stop()

Design Philosophy ​

The engine layer is built to satisfy offline-first requirements:

  • Outbox is the source of truth for pending operations
  • Network is an optimization, not a requirement
  • Transport is pluggable and interchangeable
  • All behavior is explicit, observable, and deterministic where possible
`,60)])])}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_sync_engine.md.CQqU3KEJ.lean.js b/docs/assets/modules_sync_engine.md.CQqU3KEJ.lean.js new file mode 100644 index 000000000..eefdcbbe8 --- /dev/null +++ b/docs/assets/modules_sync_engine.md.CQqU3KEJ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Sync Engine","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/engine.md","filePath":"modules/sync/engine.md","lastUpdated":null}'),e={name:"modules/sync/engine.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t("",60)])])}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_sync_examples.md.B9fTZdsk.js b/docs/assets/modules_sync_examples.md.B9fTZdsk.js new file mode 100644 index 000000000..b3cf87d78 --- /dev/null +++ b/docs/assets/modules_sync_examples.md.B9fTZdsk.js @@ -0,0 +1,292 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Sync Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/examples.md","filePath":"modules/sync/examples.md","lastUpdated":null}'),k={name:"modules/sync/examples.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

Sync Examples ​

This page contains minimal, copy-paste examples for the sync module.

These examples are intentionally small and based on the module tests, since official examples are not published yet.

They demonstrate:

  • Building an Outbox with a file store
  • Using a NetworkProbe
  • Wiring a SyncEngine with a transport
  • Handling permanent failure vs retryable failures
  • Re-queuing in-flight operations after a timeout

Example 1: Minimal smoke test (enqueue + tick + done) ​

This is the smallest complete setup: Outbox + File store + always-online probe + transport + engine.

cpp
#include <cassert>
+#include <chrono>
+#include <iostream>
+#include <memory>
+
+#include <vix/net/NetworkProbe.hpp>
+#include <vix/sync/engine/SyncEngine.hpp>
+#include <vix/sync/outbox/FileOutboxStore.hpp>
+#include <vix/sync/outbox/Outbox.hpp>
+
+#include "fake_http_transport.hpp"
+
+static std::int64_t now_ms()
+{
+  using namespace std::chrono;
+  return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
+}
+
+int main()
+{
+  using namespace vix::sync;
+  using namespace vix::sync::outbox;
+  using namespace vix::sync::engine;
+
+  auto store = std::make_shared<FileOutboxStore>(FileOutboxStore::Config{
+      .file_path = "./.vix_test/outbox.json",
+      .pretty_json = true,
+      .fsync_on_write = false});
+
+  auto outbox = std::make_shared<Outbox>(Outbox::Config{.owner = "test-engine"}, store);
+
+  auto probe = std::make_shared<vix::net::NetworkProbe>(
+      vix::net::NetworkProbe::Config{},
+      [] { return true; }); // always online
+
+  auto transport = std::make_shared<FakeHttpTransport>();
+  transport->setDefault({.ok = true});
+
+  SyncEngine engine(SyncEngine::Config{.worker_count = 1, .batch_limit = 10},
+                   outbox, probe, transport);
+
+  Operation op;
+  op.kind = "http.post";
+  op.target = "/api/messages";
+  op.payload = R"({"text":"hello offline"})";
+
+  const auto t0 = now_ms();
+  const auto id = outbox->enqueue(op, t0);
+
+  const auto processed = engine.tick(now_ms());
+  assert(processed >= 1);
+
+  auto saved = store->get(id);
+  assert(saved.has_value());
+  assert(saved->status == OperationStatus::Done);
+
+  std::cout << "OK: operation sent and marked Done\\n";
+  return 0;
+}

Example 2: Permanent failure (retryable = false) ​

This shows how the transport can tell the worker that the failure is not retryable. The operation must become PermanentFailed and must not be retried.

cpp
#include <cassert>
+#include <chrono>
+#include <filesystem>
+#include <iostream>
+#include <memory>
+
+#include <vix/net/NetworkProbe.hpp>
+#include <vix/sync/engine/SyncEngine.hpp>
+#include <vix/sync/outbox/FileOutboxStore.hpp>
+#include <vix/sync/outbox/Outbox.hpp>
+
+#include "fake_http_transport.hpp"
+
+static std::int64_t now_ms()
+{
+  using namespace std::chrono;
+  return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
+}
+
+static void reset_test_dir(const std::filesystem::path &dir)
+{
+  std::error_code ec;
+  std::filesystem::remove_all(dir, ec);
+  std::filesystem::create_directories(dir, ec);
+}
+
+int main()
+{
+  using namespace vix::sync;
+  using namespace vix::sync::outbox;
+  using namespace vix::sync::engine;
+
+  const std::filesystem::path test_dir = "./.vix_test_perm";
+  reset_test_dir(test_dir);
+
+  auto store = std::make_shared<FileOutboxStore>(FileOutboxStore::Config{
+      .file_path = test_dir / "outbox.json",
+      .pretty_json = true,
+      .fsync_on_write = false});
+
+  auto outbox = std::make_shared<Outbox>(Outbox::Config{.owner = "test-engine"}, store);
+
+  auto probe = std::make_shared<vix::net::NetworkProbe>(
+      vix::net::NetworkProbe::Config{},
+      [] { return true; });
+
+  auto transport = std::make_shared<FakeHttpTransport>();
+  transport->setRuleForTarget("/api/messages", FakeHttpTransport::Rule{
+      .ok = false,
+      .retryable = false,
+      .error = "bad request (permanent)"});
+
+  SyncEngine engine(SyncEngine::Config{.worker_count = 1, .batch_limit = 10},
+                   outbox, probe, transport);
+
+  Operation op;
+  op.kind = "http.post";
+  op.target = "/api/messages";
+  op.payload = R"({"text":"hello offline"})";
+
+  const auto id = outbox->enqueue(op, now_ms());
+
+  const auto processed1 = engine.tick(now_ms());
+  assert(processed1 >= 1);
+  assert(transport->callCount() == 1);
+
+  auto saved1 = store->get(id);
+  assert(saved1.has_value());
+  assert(saved1->status == OperationStatus::PermanentFailed);
+
+  const auto processed2 = engine.tick(now_ms());
+  (void)processed2;
+  assert(transport->callCount() == 1); // no retry
+
+  std::cout << "OK: permanent failure is not retried\\n";
+  return 0;
+}

Example 3: In-flight timeout requeue (simulate crash) ​

This simulates a crash after the operation is claimed but before it is completed. After inflight_timeout_ms, the engine tick should requeue the stuck operation, then the next tick should send it and mark it Done.

cpp
#include <cassert>
+#include <chrono>
+#include <filesystem>
+#include <iostream>
+#include <memory>
+
+#include <vix/net/NetworkProbe.hpp>
+#include <vix/sync/engine/SyncEngine.hpp>
+#include <vix/sync/outbox/FileOutboxStore.hpp>
+#include <vix/sync/outbox/Outbox.hpp>
+
+#include "fake_http_transport.hpp"
+
+static std::int64_t now_ms()
+{
+  using namespace std::chrono;
+  return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
+}
+
+static void reset_test_dir(const std::filesystem::path &dir)
+{
+  std::error_code ec;
+  std::filesystem::remove_all(dir, ec);
+  std::filesystem::create_directories(dir, ec);
+}
+
+int main()
+{
+  using namespace vix::sync;
+  using namespace vix::sync::outbox;
+  using namespace vix::sync::engine;
+
+  const std::filesystem::path test_dir = "./.vix_test_inflight";
+  reset_test_dir(test_dir);
+
+  auto store = std::make_shared<FileOutboxStore>(FileOutboxStore::Config{
+      .file_path = test_dir / "outbox.json",
+      .pretty_json = true,
+      .fsync_on_write = false});
+
+  auto outbox = std::make_shared<Outbox>(Outbox::Config{.owner = "test-engine"}, store);
+
+  auto probe = std::make_shared<vix::net::NetworkProbe>(
+      vix::net::NetworkProbe::Config{},
+      [] { return true; });
+
+  auto transport = std::make_shared<FakeHttpTransport>();
+  transport->setDefault({.ok = true});
+
+  SyncEngine::Config ecfg;
+  ecfg.worker_count = 1;
+  ecfg.batch_limit = 10;
+  ecfg.idle_sleep_ms = 0;
+  ecfg.offline_sleep_ms = 0;
+  ecfg.inflight_timeout_ms = 50; // 50ms for test
+
+  SyncEngine engine(ecfg, outbox, probe, transport);
+
+  Operation op;
+  op.kind = "http.post";
+  op.target = "/api/messages";
+  op.payload = R"({"text":"hello offline"})";
+
+  const auto t0 = now_ms();
+  const auto id = outbox->enqueue(op, t0);
+
+  const bool claimed = outbox->claim(id, t0);
+  assert(claimed);
+
+  {
+    auto saved = store->get(id);
+    assert(saved.has_value());
+    assert(saved->status == OperationStatus::InFlight);
+  }
+
+  const auto t1 = t0 + 60; // > 50ms timeout
+  engine.tick(t1);
+
+  {
+    auto saved = store->get(id);
+    assert(saved.has_value());
+    assert(saved->status != OperationStatus::InFlight);
+  }
+
+  engine.tick(t1 + 1);
+
+  auto final = store->get(id);
+  assert(final.has_value());
+  assert(final->status == OperationStatus::Done);
+
+  std::cout << "OK: inflight timeout requeues stuck ops and they complete\\n";
+  return 0;
+}

Appendix: Minimal Fake Transport ​

This is a tiny rule-based transport for tests and examples.

cpp
#ifndef VIX_FAKE_HTTP_TRANSPORT_HPP
+#define VIX_FAKE_HTTP_TRANSPORT_HPP
+
+#include <string>
+#include <unordered_map>
+
+#include <vix/sync/engine/SyncWorker.hpp>
+
+namespace vix::sync::engine
+{
+  class FakeHttpTransport final : public ISyncTransport
+  {
+  public:
+    struct Rule
+    {
+      bool ok{true};
+      bool retryable{true};
+      std::string error{"simulated failure"};
+    };
+
+    void setDefault(Rule r) { def_ = std::move(r); }
+
+    void setRuleForKind(std::string kind, Rule r)
+    {
+      by_kind_[std::move(kind)] = std::move(r);
+    }
+
+    void setRuleForTarget(std::string target, Rule r)
+    {
+      by_target_[std::move(target)] = std::move(r);
+    }
+
+    std::size_t callCount() const noexcept { return calls_; }
+
+    SendResult send(const vix::sync::Operation &op) override
+    {
+      ++calls_;
+
+      if (auto it = by_target_.find(op.target); it != by_target_.end())
+        return toResult(it->second);
+
+      if (auto it = by_kind_.find(op.kind); it != by_kind_.end())
+        return toResult(it->second);
+
+      return toResult(def_);
+    }
+
+  private:
+    static SendResult toResult(const Rule &r)
+    {
+      SendResult res;
+      res.ok = r.ok;
+      res.retryable = r.retryable;
+      res.error = r.ok ? "" : r.error;
+      return res;
+    }
+
+  private:
+    Rule def_{};
+    std::unordered_map<std::string, Rule> by_kind_;
+    std::unordered_map<std::string, Rule> by_target_;
+    std::size_t calls_{0};
+  };
+} // namespace vix::sync::engine
+
+#endif

Notes ​

  • These examples use assert for clarity and minimalism.
  • NetworkProbe is configured here with a lambda that always returns true.
  • For real systems, NetworkProbe should reflect actual connectivity state.
  • The Outbox store paths are local and suitable for quick testing.
`,24)])])}const c=i(k,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_sync_examples.md.B9fTZdsk.lean.js b/docs/assets/modules_sync_examples.md.B9fTZdsk.lean.js new file mode 100644 index 000000000..35dc8524c --- /dev/null +++ b/docs/assets/modules_sync_examples.md.B9fTZdsk.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Sync Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/examples.md","filePath":"modules/sync/examples.md","lastUpdated":null}'),k={name:"modules/sync/examples.md"};function l(t,s,p,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",24)])])}const c=i(k,[["render",l]]);export{F as __pageData,c as default}; diff --git a/docs/assets/modules_sync_guide.md.BQIeNLbG.js b/docs/assets/modules_sync_guide.md.BQIeNLbG.js deleted file mode 100644 index ce236750b..000000000 --- a/docs/assets/modules_sync_guide.md.BQIeNLbG.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/guide.md","filePath":"modules/sync/guide.md","lastUpdated":null}'),a={name:"modules/sync/guide.md"};function o(d,n,c,r,i,l){return t(),s("div")}const u=e(a,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_sync_guide.md.BQIeNLbG.lean.js b/docs/assets/modules_sync_guide.md.BQIeNLbG.lean.js deleted file mode 100644 index ce236750b..000000000 --- a/docs/assets/modules_sync_guide.md.BQIeNLbG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/guide.md","filePath":"modules/sync/guide.md","lastUpdated":null}'),a={name:"modules/sync/guide.md"};function o(d,n,c,r,i,l){return t(),s("div")}const u=e(a,[["render",o]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_sync_index.md.w4MN-qOC.js b/docs/assets/modules_sync_index.md.w4MN-qOC.js new file mode 100644 index 000000000..c7985c5f8 --- /dev/null +++ b/docs/assets/modules_sync_index.md.w4MN-qOC.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as s}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/index.md","filePath":"modules/sync/index.md","lastUpdated":1770805184000}'),a={name:"modules/sync/index.md"};function n(o,r,d,c,i,m){return t(),s("div")}const u=e(a,[["render",n]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_sync_index.md.w4MN-qOC.lean.js b/docs/assets/modules_sync_index.md.w4MN-qOC.lean.js new file mode 100644 index 000000000..c7985c5f8 --- /dev/null +++ b/docs/assets/modules_sync_index.md.w4MN-qOC.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as s}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/index.md","filePath":"modules/sync/index.md","lastUpdated":1770805184000}'),a={name:"modules/sync/index.md"};function n(o,r,d,c,i,m){return t(),s("div")}const u=e(a,[["render",n]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_sync_index.md.zqzLdUFH.js b/docs/assets/modules_sync_index.md.zqzLdUFH.js deleted file mode 100644 index fbe94e1af..000000000 --- a/docs/assets/modules_sync_index.md.zqzLdUFH.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as n}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/index.md","filePath":"modules/sync/index.md","lastUpdated":null}'),s={name:"modules/sync/index.md"};function a(o,d,c,r,i,l){return t(),n("div")}const _=e(s,[["render",a]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_sync_index.md.zqzLdUFH.lean.js b/docs/assets/modules_sync_index.md.zqzLdUFH.lean.js deleted file mode 100644 index fbe94e1af..000000000 --- a/docs/assets/modules_sync_index.md.zqzLdUFH.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as n}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/index.md","filePath":"modules/sync/index.md","lastUpdated":null}'),s={name:"modules/sync/index.md"};function a(o,d,c,r,i,l){return t(),n("div")}const _=e(s,[["render",a]]);export{p as __pageData,_ as default}; diff --git a/docs/assets/modules_sync_operation.md.ChVsXl6u.js b/docs/assets/modules_sync_operation.md.ChVsXl6u.js new file mode 100644 index 000000000..2a8e903c7 --- /dev/null +++ b/docs/assets/modules_sync_operation.md.ChVsXl6u.js @@ -0,0 +1,27 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"Operation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/operation.md","filePath":"modules/sync/operation.md","lastUpdated":null}'),n={name:"modules/sync/operation.md"};function l(p,i,h,r,d,o){return a(),e("div",null,[...i[0]||(i[0]=[t(`

Operation ​

This page documents the Operation type in the sync module.

Operation is the fundamental durable unit flowing through:

  • WAL
  • Outbox
  • SyncEngine
  • Transport layer

It represents what must be done, while its lifecycle fields track how it evolves over time.

cpp
#include <vix/sync/Operation.hpp>

Namespace:

cpp
vix::sync

Overview ​

An Operation is:

  • Immutable in intent (kind, target, payload)
  • Mutable in lifecycle state (status, attempts, timestamps)
  • Persisted durably before any network effect
  • Replay-safe and recovery-friendly

It is designed for offline-first correctness.

OperationStatus ​

cpp
enum class OperationStatus : std::uint8_t
+{
+    Pending = 0,
+    InFlight,
+    Done,
+    Failed,
+    PermanentFailed
+};

Meaning ​

  • Pending: persisted, waiting to be processed
  • InFlight: claimed and currently being processed
  • Done: successfully completed
  • Failed: failed but may be retried
  • PermanentFailed: failed permanently, no more retries

This status is durable and drives retry logic.

Operation Structure ​

cpp
struct Operation
+{
+    std::string id;
+    std::string kind;
+    std::string target;
+    std::string payload;
+    std::string idempotency_key;
+
+    std::int64_t created_at_ms{0};
+    std::int64_t updated_at_ms{0};
+
+    std::uint32_t attempt{0};
+    std::int64_t next_retry_at_ms{0};
+
+    OperationStatus status{OperationStatus::Pending};
+
+    std::string last_error;
+};

Fields Explained ​

id ​

Unique identifier for the operation.

Generated automatically by Outbox when configured.

kind ​

Logical category of operation.

Examples:

  • "http.request"
  • "p2p.message"
  • "db.mutation"

target ​

Destination or logical target.

Examples:

  • URL
  • Peer ID
  • Resource name

payload ​

Opaque serialized data required to execute the operation.

Interpretation depends on transport or higher layer.

idempotency_key ​

Used to deduplicate retries on the remote side.

Ensures that repeated delivery does not cause duplicate effects.

created_at_ms ​

Timestamp when operation was created.

updated_at_ms ​

Timestamp of last lifecycle transition.

attempt ​

Number of delivery attempts performed so far.

Incremented when retrying.

next_retry_at_ms ​

Time when the operation becomes eligible for retry.

Computed using RetryPolicy.

status ​

Current durable lifecycle state.

last_error ​

Most recent error message, if any.

Used for diagnostics and logging.

Lifecycle Helpers ​

is_done() ​

cpp
bool is_done() const noexcept;

Returns true if status == Done.

is_pending() ​

cpp
bool is_pending() const noexcept;

Returns true if status == Pending.

is_failed() ​

cpp
bool is_failed() const noexcept;

Returns true if status == Failed.

fail() ​

cpp
void fail(std::string err, std::int64_t now_ms);

Transitions operation to:

status = Failed
+

Updates:

  • last_error
  • updated_at_ms

Retry scheduling is handled by Outbox using RetryPolicy.

done() ​

cpp
void done(std::int64_t now_ms);

Transitions operation to:

status = Done
+

Clears:

  • last_error

Typical Lifecycle Flow ​

  1. Operation created
  2. Persisted in Outbox (status = Pending)
  3. Claimed (status = InFlight)
  4. Delivered successfully → Done or
  5. Failed → Failed → scheduled retry
  6. Exceeded retry attempts → PermanentFailed

All transitions are durable.

Offline-First Guarantees ​

Operation enables:

  • Crash-safe retries
  • Idempotent delivery
  • Deterministic replay
  • Durable state reconstruction

It is the atomic unit of convergence in the sync system.

Design Philosophy ​

Operation is:

  • Simple
  • Durable
  • Deterministic
  • Explicit
  • Policy-driven (RetryPolicy + Outbox)

One invariant:

An operation's intent never changes, only its lifecycle state evolves.

`,88)])])}const y=s(n,[["render",l]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_sync_operation.md.ChVsXl6u.lean.js b/docs/assets/modules_sync_operation.md.ChVsXl6u.lean.js new file mode 100644 index 000000000..5f16a7e35 --- /dev/null +++ b/docs/assets/modules_sync_operation.md.ChVsXl6u.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"Operation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/operation.md","filePath":"modules/sync/operation.md","lastUpdated":null}'),n={name:"modules/sync/operation.md"};function l(p,i,h,r,d,o){return a(),e("div",null,[...i[0]||(i[0]=[t("",88)])])}const y=s(n,[["render",l]]);export{u as __pageData,y as default}; diff --git a/docs/assets/modules_sync_outbox.md.-vriT0_u.js b/docs/assets/modules_sync_outbox.md.-vriT0_u.js new file mode 100644 index 000000000..c2e74b5d0 --- /dev/null +++ b/docs/assets/modules_sync_outbox.md.-vriT0_u.js @@ -0,0 +1,58 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Outbox","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/outbox.md","filePath":"modules/sync/outbox.md","lastUpdated":null}'),l={name:"modules/sync/outbox.md"};function h(e,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Outbox ​

This page documents the durable outbox layer in the sync module.

The outbox implements the core offline-first outbox pattern:

  • All operations are persisted before any network attempt
  • Operations are claimed before being processed
  • Completion, retry and permanent failure are recorded durably
  • Network failures never lose accepted local writes

Headers ​

cpp
#include <vix/sync/outbox/Outbox.hpp>
+#include <vix/sync/outbox/OutboxStore.hpp>
+#include <vix/sync/outbox/FileOutboxStore.hpp>

Namespace:

cpp
vix::sync::outbox

Architecture Overview ​

The outbox layer is composed of:

  • Outbox: high-level coordination and retry logic
  • OutboxStore: abstract persistence contract
  • FileOutboxStore: file-backed JSON implementation
  • RetryPolicy: retry scheduling logic
  • Operation: immutable sync payload unit

The Outbox itself contains no network logic. It delegates transport to the engine layer.

Outbox ​

Outbox is the high-level facade that enforces the outbox pattern.

Responsibilities:

  • Persist operations before sending
  • Generate ids and idempotency keys when required
  • Apply retry policy
  • Coordinate claim / complete / fail transitions
  • Delegate persistence to OutboxStore

Config ​

cpp
struct Config
+{
+    std::string owner{"vix-sync"};
+    RetryPolicy retry{};
+    bool auto_generate_ids{true};
+    bool auto_generate_idempotency_key{true};
+};

Meaning:

  • owner: logical worker/engine name used when claiming operations
  • retry: retry scheduling policy
  • auto_generate_ids: auto-create operation ids if missing
  • auto_generate_idempotency_key: auto-create idempotency keys if missing

Core API ​

cpp
Outbox(Config cfg, std::shared_ptr<OutboxStore> store);
+
+std::string enqueue(Operation op, std::int64_t now_ms);
+
+std::vector<Operation> peek_ready(std::int64_t now_ms, std::size_t limit = 50);
+
+bool claim(const std::string& id, std::int64_t now_ms);
+
+bool complete(const std::string& id, std::int64_t now_ms);
+
+bool fail(
+    const std::string& id,
+    const std::string& error,
+    std::int64_t now_ms,
+    bool retryable = true);

Lifecycle ​

  1. enqueue() persists operation immediately
  2. peek_ready() returns eligible candidates
  3. claim() marks operation as in-flight
  4. complete() marks success
  5. fail() schedules retry or permanent failure

OutboxStore ​

OutboxStore defines the minimal persistence contract required by Outbox.

It guarantees:

  • Durable persistence
  • Claim ownership tracking
  • Retry scheduling
  • Cleanup helpers
  • Crash recovery support

It is transport-agnostic.

ListOptions ​

cpp
struct ListOptions
+{
+    std::size_t limit{50};
+    std::int64_t now_ms{0};
+    bool only_ready{true};
+    bool include_inflight{false};
+};

Used to filter operations based on readiness and state.

Required Methods ​

cpp
virtual void put(const Operation& op) = 0;
+virtual std::optional<Operation> get(const std::string& id) = 0;
+virtual std::vector<Operation> list(const ListOptions& opt) = 0;
+
+virtual bool claim(const std::string& id,
+                   const std::string& owner,
+                   std::int64_t now_ms) = 0;
+
+virtual bool mark_done(const std::string& id,
+                       std::int64_t now_ms) = 0;
+
+virtual bool mark_failed(const std::string& id,
+                         const std::string& error,
+                         std::int64_t now_ms,
+                         std::int64_t next_retry_at_ms) = 0;
+
+virtual bool mark_permanent_failed(const std::string& id,
+                                   const std::string& error,
+                                   std::int64_t now_ms) = 0;
+
+virtual std::size_t prune_done(std::int64_t older_than_ms) = 0;
+
+virtual std::size_t requeue_inflight_older_than(std::int64_t now_ms,
+                                                std::int64_t timeout_ms) = 0;

Implementations must preserve correctness guarantees.

Thread-safety is implementation-defined.

FileOutboxStore ​

FileOutboxStore is a simple, durable JSON-based implementation.

Designed for:

  • Offline-first environments
  • Crash recovery
  • Local-first apps
  • Zero external dependencies

It favors correctness and simplicity over throughput.

Config ​

cpp
struct Config
+{
+    std::filesystem::path file_path{"./.vix/outbox.json"};
+    bool pretty_json{false};
+    bool fsync_on_write{false};
+};

Meaning:

  • file_path: persistence location
  • pretty_json: human-readable output
  • fsync_on_write: stronger durability at cost of performance

Behavior ​

  • Lazy load on first access
  • In-memory representation protected by mutex
  • Writes flushed to disk on mutation
  • Optional fsync for crash durability

Crash Recovery ​

Outbox supports:

  • Reclaiming timed-out in-flight operations
  • Retry scheduling
  • Permanent failure marking
  • Pruning old completed operations

Recovery helpers:

cpp
requeue_inflight_older_than(now_ms, timeout_ms);
+prune_done(older_than_ms);

Offline-First Guarantees ​

The outbox pattern ensures:

  • Local write is durable before network attempt
  • Network failure never discards accepted state
  • Retries are deterministic
  • Idempotency prevents duplicate effects
  • Recovery after crash is possible

This is foundational for Softadastra-style convergence.

Design Philosophy ​

Outbox is:

  • Durable first
  • Transport-agnostic
  • Deterministic
  • Explicit
  • Policy-driven (RetryPolicy)

It enforces one invariant:

No network attempt without prior durable persistence.

`,61)])])}const F=i(l,[["render",h]]);export{y as __pageData,F as default}; diff --git a/docs/assets/modules_sync_outbox.md.-vriT0_u.lean.js b/docs/assets/modules_sync_outbox.md.-vriT0_u.lean.js new file mode 100644 index 000000000..8b4e85061 --- /dev/null +++ b/docs/assets/modules_sync_outbox.md.-vriT0_u.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Outbox","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/outbox.md","filePath":"modules/sync/outbox.md","lastUpdated":null}'),l={name:"modules/sync/outbox.md"};function h(e,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",61)])])}const F=i(l,[["render",h]]);export{y as __pageData,F as default}; diff --git a/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.js b/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.js new file mode 100644 index 000000000..161a9ee92 --- /dev/null +++ b/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.js @@ -0,0 +1,28 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"RetryPolicy","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/retry_policy.md","filePath":"modules/sync/retry_policy.md","lastUpdated":null}'),l={name:"modules/sync/retry_policy.md"};function n(p,i,h,r,k,d){return a(),e("div",null,[...i[0]||(i[0]=[t(`

RetryPolicy ​

This page documents the retry policy used in the sync module.

RetryPolicy defines how failed operations are retried over time using deterministic exponential backoff.

It is:

  • Deterministic
  • Side-effect free
  • Recovery-safe
  • Suitable for durable offline-first systems
cpp
#include <vix/sync/RetryPolicy.hpp>

Namespace:

cpp
vix::sync

Overview ​

RetryPolicy controls:

  • Maximum number of retry attempts
  • Exponential backoff growth
  • Maximum delay clamp
  • Optional jitter ratio (applied by caller)

The policy itself does not perform I/O or scheduling. It only computes timing decisions.

Structure ​

cpp
struct RetryPolicy
+{
+    std::uint32_t max_attempts{8};
+    std::int64_t base_delay_ms{500};
+    std::int64_t max_delay_ms{30'000};
+    double factor{2.0};
+    double jitter_ratio{0.2};
+
+    bool can_retry(std::uint32_t attempt) const noexcept;
+    std::int64_t compute_delay_ms(std::uint32_t attempt) const noexcept;
+};

Fields Explained ​

max_attempts ​

Maximum number of retry attempts allowed.

If:

cpp
attempt >= max_attempts

No further retry should be scheduled.

base_delay_ms ​

Initial delay before the first retry.

Default:

500 ms
+

max_delay_ms ​

Upper clamp for exponential growth.

Default:

30 seconds
+

Prevents unbounded retry intervals.

factor ​

Exponential growth factor.

Delay evolves as:

base_delay_ms * (factor ^ attempt)
+

Default:

2.0
+

Example progression:

Attempt Delay (ms)


0 500 1 1000 2 2000 3 4000 4 8000 ... clamped at max_delay_ms

jitter_ratio ​

Expressed as a fraction:

  • 0.0 → no jitter
  • 0.2 → ±20% randomization window

Important:

The policy does NOT apply jitter directly.

It exposes the parameter so higher layers (Outbox or Engine) can apply randomness in a controlled, deterministic-aware manner.

Methods ​

can_retry ​

cpp
bool can_retry(std::uint32_t attempt) const noexcept;

Returns true if:

attempt < max_attempts
+

compute_delay_ms ​

cpp
std::int64_t compute_delay_ms(std::uint32_t attempt) const noexcept;

Computes exponential backoff and clamps the result between:

  • base_delay_ms
  • max_delay_ms

Behavior:

  • attempt 0 → base_delay
  • delay grows exponentially
  • final value is clamped

Example Usage ​

cpp
RetryPolicy policy;
+
+std::uint32_t attempt = 3;
+
+if (policy.can_retry(attempt))
+{
+    auto delay = policy.compute_delay_ms(attempt);
+    auto next_retry_at = now_ms + delay;
+}
+else
+{
+    // mark permanent failure
+}

Deterministic Recovery ​

A key design goal:

Retry timing must be recomputable during recovery.

Since RetryPolicy is:

  • Pure
  • Stateless
  • Deterministic

You can replay WAL records and recompute retry windows safely.

This is essential for:

  • Crash recovery
  • Outbox reconstruction
  • Distributed convergence

Offline-First Considerations ​

Exponential backoff prevents:

  • Retry storms
  • Network flooding
  • Thundering herd effects

The policy ensures:

  • Controlled retry growth
  • Upper bounded delay
  • Predictable behavior

Design Philosophy ​

RetryPolicy is:

  • Minimal
  • Deterministic
  • Side-effect free
  • Configurable
  • Durable-system friendly

It provides one invariant:

Retry timing must always be recomputable from durable state.

`,77)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.lean.js b/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.lean.js new file mode 100644 index 000000000..7bb67d876 --- /dev/null +++ b/docs/assets/modules_sync_retry_policy.md.Bvr4t1e1.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"RetryPolicy","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/retry_policy.md","filePath":"modules/sync/retry_policy.md","lastUpdated":null}'),l={name:"modules/sync/retry_policy.md"};function n(p,i,h,r,k,d){return a(),e("div",null,[...i[0]||(i[0]=[t("",77)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_sync_wal.md.7scFFzCt.js b/docs/assets/modules_sync_wal.md.7scFFzCt.js new file mode 100644 index 000000000..1bb03ccea --- /dev/null +++ b/docs/assets/modules_sync_wal.md.7scFFzCt.js @@ -0,0 +1,67 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Write-Ahead Log (WAL)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/wal.md","filePath":"modules/sync/wal.md","lastUpdated":null}'),e={name:"modules/sync/wal.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Write-Ahead Log (WAL) ​

This page documents the WAL (Write-Ahead Log) layer in the sync module.

The WAL is a foundational durability primitive used to persist state transitions before they are applied or synchronized.

It guarantees:

  • Append-only writes
  • Monotonic offsets
  • Deterministic replay
  • Crash recovery safety

Headers ​

cpp
#include <vix/sync/wal/Wal.hpp>
+#include <vix/sync/wal/WalWriter.hpp>
+#include <vix/sync/wal/WalReader.hpp>
+#include <vix/sync/wal/WalRecord.hpp>

Namespace:

cpp
vix::sync::wal

Architecture Overview ​

The WAL layer is composed of:

  • Wal: high-level append + replay interface
  • WalWriter: append-only record writer
  • WalReader: sequential forward reader
  • WalRecord: immutable record structure
  • RecordType: durable state transition classification

The WAL is append-only and does not modify past entries.

Wal ​

Wal provides a minimal high-level interface.

cpp
class Wal
+{
+public:
+    struct Config
+    {
+        std::filesystem::path file_path{"./.vix/wal.log"};
+        bool fsync_on_write{false};
+    };
+
+    explicit Wal(Config cfg);
+
+    std::int64_t append(const WalRecord& rec);
+
+    std::int64_t replay(
+        std::int64_t from_offset,
+        const std::function<void(const WalRecord&)>& on_record);
+};

Guarantees ​

  • Each append() returns a monotonically increasing offset
  • replay() processes records strictly in append order
  • Replay is deterministic
  • Durability depends on fsync_on_write

WalRecord ​

WalRecord describes a durable state transition.

cpp
enum class RecordType : std::uint8_t
+{
+    PutOperation = 1,
+    MarkDone = 2,
+    MarkFailed = 3
+};
cpp
struct WalRecord
+{
+    std::string id;
+    RecordType type{RecordType::PutOperation};
+    std::int64_t ts_ms{0};
+    std::vector<std::uint8_t> payload;
+    std::string error;
+    std::int64_t next_retry_at_ms{0};
+};

Meaning ​

  • id: operation identifier
  • type: transition category
  • ts_ms: creation timestamp
  • payload: serialized Operation (for PutOperation)
  • error: failure diagnostics (for MarkFailed)
  • next_retry_at_ms: retry scheduling timestamp

WalRecord is immutable after append.

WalWriter ​

Append-only writer.

cpp
class WalWriter
+{
+public:
+    struct Config
+    {
+        std::filesystem::path file_path;
+        bool fsync_on_write{false};
+    };
+
+    explicit WalWriter(Config cfg);
+    ~WalWriter();
+
+    std::int64_t append(const WalRecord& rec);
+    void flush();
+};

Behavior:

  • Opens file lazily
  • Appends serialized records sequentially
  • Returns byte offset of appended record
  • Optional fsync for stronger crash safety

WalReader ​

Sequential forward reader.

cpp
class WalReader
+{
+public:
+    explicit WalReader(std::filesystem::path file_path);
+
+    void seek(std::int64_t offset);
+
+    std::optional<WalRecord> next();
+
+    std::int64_t current_offset() const noexcept;
+};

Behavior:

  • Forward-only iteration
  • Lazy file open
  • Offset-based replay
  • Used during recovery

Typical Usage ​

Append before side effects ​

cpp
Wal wal({ "./.vix/wal.log", true });
+
+WalRecord rec;
+rec.id = "op-123";
+rec.type = RecordType::PutOperation;
+rec.ts_ms = now_ms;
+
+auto offset = wal.append(rec);

After append succeeds, external effects may proceed.

Replay during recovery ​

cpp
wal.replay(0, [](const WalRecord& rec)
+{
+    // Reconstruct Outbox state
+});

Replay restores state in exact original order.

Crash Recovery Model ​

WAL ensures:

  • No committed state transition is lost
  • On restart, replay rebuilds consistent state
  • In-flight operations can be reconstructed
  • Ordering is preserved

WAL is foundational for:

  • Outbox durability
  • Sync engine convergence
  • Deterministic recovery

Durability Model ​

Durability depends on configuration:

  • fsync_on_write = false
    • Fast writes
    • OS-level buffering
    • Risk window on sudden power loss
  • fsync_on_write = true
    • Stronger crash guarantees
    • Slower writes

Applications choose tradeoff.

Offline-First Guarantees ​

WAL enforces one critical invariant:

Every state transition is persisted before it can affect the outside world.

This ensures:

  • Local writes are durable
  • Replay is deterministic
  • Network failures never corrupt state
  • Crash recovery is correct

Design Philosophy ​

The WAL layer is:

  • Append-only
  • Minimal
  • Deterministic
  • Explicit
  • Transport-independent

It is the lowest-level durability primitive in the sync stack.

`,60)])])}const y=i(e,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_sync_wal.md.7scFFzCt.lean.js b/docs/assets/modules_sync_wal.md.7scFFzCt.lean.js new file mode 100644 index 000000000..5ab6b6851 --- /dev/null +++ b/docs/assets/modules_sync_wal.md.7scFFzCt.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Write-Ahead Log (WAL)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/sync/wal.md","filePath":"modules/sync/wal.md","lastUpdated":null}'),e={name:"modules/sync/wal.md"};function t(p,s,h,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",60)])])}const y=i(e,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_time_guide.md.C10Wr28a.js b/docs/assets/modules_time_guide.md.C10Wr28a.js deleted file mode 100644 index a98e370a9..000000000 --- a/docs/assets/modules_time_guide.md.C10Wr28a.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/guide.md","filePath":"modules/time/guide.md","lastUpdated":null}'),o={name:"modules/time/guide.md"};function s(d,r,i,n,c,m){return t(),a("div")}const u=e(o,[["render",s]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_time_guide.md.C10Wr28a.lean.js b/docs/assets/modules_time_guide.md.C10Wr28a.lean.js deleted file mode 100644 index a98e370a9..000000000 --- a/docs/assets/modules_time_guide.md.C10Wr28a.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/guide.md","filePath":"modules/time/guide.md","lastUpdated":null}'),o={name:"modules/time/guide.md"};function s(d,r,i,n,c,m){return t(),a("div")}const u=e(o,[["render",s]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_time_guide.md.w4VdKYSN.js b/docs/assets/modules_time_guide.md.w4VdKYSN.js new file mode 100644 index 000000000..d2e404ade --- /dev/null +++ b/docs/assets/modules_time_guide.md.w4VdKYSN.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/guide.md","filePath":"modules/time/guide.md","lastUpdated":1770805184000}'),o={name:"modules/time/guide.md"};function r(s,d,i,m,c,n){return t(),a("div")}const f=e(o,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_time_guide.md.w4VdKYSN.lean.js b/docs/assets/modules_time_guide.md.w4VdKYSN.lean.js new file mode 100644 index 000000000..d2e404ade --- /dev/null +++ b/docs/assets/modules_time_guide.md.w4VdKYSN.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/guide.md","filePath":"modules/time/guide.md","lastUpdated":1770805184000}'),o={name:"modules/time/guide.md"};function r(s,d,i,m,c,n){return t(),a("div")}const f=e(o,[["render",r]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_time_index.md.BD2PYxKm.js b/docs/assets/modules_time_index.md.B4jgBuJn.js similarity index 86% rename from docs/assets/modules_time_index.md.BD2PYxKm.js rename to docs/assets/modules_time_index.md.B4jgBuJn.js index 26de07031..a25f033df 100644 --- a/docs/assets/modules_time_index.md.BD2PYxKm.js +++ b/docs/assets/modules_time_index.md.B4jgBuJn.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/index.md","filePath":"modules/time/index.md","lastUpdated":null}'),e={name:"modules/time/index.md"};function n(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

Time ​

The vix::time module provides explicit and lightweight time primitives for:

  • Dates
  • DateTime (UTC)
  • Timestamps (epoch-based)
  • Durations
  • Monotonic elapsed time

Header:

cpp
#include <vix/time/time.hpp>

Namespace:

cpp
using namespace vix::time;

This guide focuses on minimal usage patterns. No showcase. No benchmarking code. Just how to use it correctly.


1. Date ​

Represents a calendar date in UTC.

Create current date ​

cpp
Date today = Date::now();
+import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/index.md","filePath":"modules/time/index.md","lastUpdated":1770805184000}'),e={name:"modules/time/index.md"};function n(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

Time ​

The vix::time module provides explicit and lightweight time primitives for:

  • Dates
  • DateTime (UTC)
  • Timestamps (epoch-based)
  • Durations
  • Monotonic elapsed time

Header:

cpp
#include <vix/time/time.hpp>

Namespace:

cpp
using namespace vix::time;

This guide focuses on minimal usage patterns. No showcase. No benchmarking code. Just how to use it correctly.


1. Date ​

Represents a calendar date in UTC.

Create current date ​

cpp
Date today = Date::now();
 std::cout << today.to_string() << "\\n";

Parse a date ​

Format: YYYY-MM-DD

cpp
Date d = Date::parse("2026-02-07");
 std::cout << d.to_string() << "\\n";

Convert Date to Timestamp (start of day UTC) ​

cpp
Timestamp t = d.to_timestamp_utc();
 std::cout << t.seconds_since_epoch() << "\\n";

2. DateTime (UTC) ​

Represents date + time in UTC.

Current UTC datetime ​

cpp
DateTime now = DateTime::now_utc();
@@ -16,4 +16,4 @@ import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o
 for (int i = 0; i < 1'000'000; ++i) {}
 
 Duration elapsed = SteadyClock::since(start);
-std::cout << elapsed.count_ms() << "\\n";

Recommended Usage ​

For backend systems and offline-first systems:

  • Store time as Timestamp
  • Use Date for calendar grouping
  • Use DateTime for display
  • Use Duration for retry logic and timeouts
  • Use SteadyClock for latency measurement

The API is explicit, UTC-first, and allocation-light.

`,49)])])}const g=i(e,[["render",n]]);export{o as __pageData,g as default}; +std::cout << elapsed.count_ms() << "\\n";

Recommended Usage ​

For backend systems and offline-first systems:

  • Store time as Timestamp
  • Use Date for calendar grouping
  • Use DateTime for display
  • Use Duration for retry logic and timeouts
  • Use SteadyClock for latency measurement

The API is explicit, UTC-first, and allocation-light.

`,49)])])}const y=i(e,[["render",n]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_time_index.md.B4jgBuJn.lean.js b/docs/assets/modules_time_index.md.B4jgBuJn.lean.js new file mode 100644 index 000000000..2f581514a --- /dev/null +++ b/docs/assets/modules_time_index.md.B4jgBuJn.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/index.md","filePath":"modules/time/index.md","lastUpdated":1770805184000}'),e={name:"modules/time/index.md"};function n(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",49)])])}const y=i(e,[["render",n]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_time_index.md.BD2PYxKm.lean.js b/docs/assets/modules_time_index.md.BD2PYxKm.lean.js deleted file mode 100644 index d34177263..000000000 --- a/docs/assets/modules_time_index.md.BD2PYxKm.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/time/index.md","filePath":"modules/time/index.md","lastUpdated":null}'),e={name:"modules/time/index.md"};function n(l,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",49)])])}const g=i(e,[["render",n]]);export{o as __pageData,g as default}; diff --git a/docs/assets/modules_utils_env.md.xvlt-P5t.js b/docs/assets/modules_utils_env.md.xvlt-P5t.js new file mode 100644 index 000000000..6aff58587 --- /dev/null +++ b/docs/assets/modules_utils_env.md.xvlt-P5t.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"Env utilities","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/env.md","filePath":"modules/utils/env.md","lastUpdated":1770827001000}'),l={name:"modules/utils/env.md"};function n(h,i,d,p,o,k){return e(),a("div",null,[...i[0]||(i[0]=[t('

Env utilities ​

Header: vix/utils/Env.hpp

This module provides small helpers to read environment variables and convert them into useful types (std::string, bool, int, unsigned, double).

Goals:

  • Header only
  • No exceptions
  • Safe defaults (missing or invalid values return the provided default)
  • Whitespace tolerant (leading and trailing spaces are ignored)
  • ASCII only case insensitive parsing for booleans

API ​

env_or(key, def) ​

Returns the variable value as a std::string, or def if missing.

cpp
std::string host = vix::utils::env_or("APP_HOST", "127.0.0.1");

env_bool(key, def) ​

Reads a variable as boolean.

Truthy values (case insensitive):

  • 1
  • true
  • yes
  • on

Everything else is false. Missing key returns def.

cpp
bool color = vix::utils::env_bool("VIX_COLOR", true);

env_int(key, def) ​

Reads a signed integer in base 10 using std::from_chars.

  • Trims whitespace
  • Requires the full string to be parsed (no trailing garbage)
cpp
int port = vix::utils::env_int("PORT", 8080);

env_uint(key, def) ​

Reads an unsigned integer in base 10 using std::from_chars.

  • Trims whitespace
  • Requires full parse
cpp
unsigned threads = vix::utils::env_uint("WORKERS", 4u);

env_double(key, def) ​

Reads a double using std::strtod.

  • Trims whitespace
  • Requires full parse
  • Uses . as decimal separator
cpp
double ratio = vix::utils::env_double("CACHE_RATIO", 0.25);

Platform notes ​

vix_getenv(name) ​

Internally, the helpers call vix_getenv.

  • POSIX: uses std::getenv(name).
  • Windows: uses _dupenv_s and stores the value in a thread_local std::string.
    • This avoids returning pointers to freed memory.
    • The returned const char* remains valid until the next vix_getenv call on the same thread.

Practical rule: if you need to keep the value, copy it (all public helpers already return by value).

Behavior details ​

  • Missing variable: returns the default.
  • Empty value:
    • env_or returns an empty string (unless you passed a non empty default).
    • env_bool treats empty as false. If you want empty to behave like default, do not export the variable at all.
    • env_int and env_uint return def.
    • env_double returns def.
  • Invalid numeric values (non digits, overflow, trailing characters): return def.

Example patterns ​

Feature flags ​

cpp
const bool enable_metrics = vix::utils::env_bool("VIX_METRICS", false);

Limits ​

cpp
const unsigned max_conns = vix::utils::env_uint("VIX_MAX_CONNS", 1000u);

Config selection ​

cpp
const std::string config = vix::utils::env_or("VIX_CONFIG", "config.json");

Common variables used in Vix runtime ​

These names are not required by the Env module, but they are commonly used by other Vix components.

  • NO_COLOR: disable colors when set to any non empty value.
  • VIX_COLOR: override coloring, values like never, 0, false, always, 1, true.
  • VIX_MODE: values like dev, watch, reload map to dev mode, others map to run.
  • VIX_NO_HYPERLINK: disable terminal hyperlinks when set.
  • VIX_NO_ANIM: disable small banner animations when set.
',44)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_utils_env.md.xvlt-P5t.lean.js b/docs/assets/modules_utils_env.md.xvlt-P5t.lean.js new file mode 100644 index 000000000..dc846fc7a --- /dev/null +++ b/docs/assets/modules_utils_env.md.xvlt-P5t.lean.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"Env utilities","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/env.md","filePath":"modules/utils/env.md","lastUpdated":1770827001000}'),l={name:"modules/utils/env.md"};function n(h,i,d,p,o,k){return e(),a("div",null,[...i[0]||(i[0]=[t("",44)])])}const g=s(l,[["render",n]]);export{E as __pageData,g as default}; diff --git a/docs/assets/modules_utils_guide.md.ceCAjZia.js b/docs/assets/modules_utils_guide.md.ceCAjZia.js deleted file mode 100644 index 253f1fbe1..000000000 --- a/docs/assets/modules_utils_guide.md.ceCAjZia.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/guide.md","filePath":"modules/utils/guide.md","lastUpdated":null}'),a={name:"modules/utils/guide.md"};function o(d,r,i,l,n,c){return t(),s("div")}const p=e(a,[["render",o]]);export{m as __pageData,p as default}; diff --git a/docs/assets/modules_utils_guide.md.ceCAjZia.lean.js b/docs/assets/modules_utils_guide.md.ceCAjZia.lean.js deleted file mode 100644 index 253f1fbe1..000000000 --- a/docs/assets/modules_utils_guide.md.ceCAjZia.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/guide.md","filePath":"modules/utils/guide.md","lastUpdated":null}'),a={name:"modules/utils/guide.md"};function o(d,r,i,l,n,c){return t(),s("div")}const p=e(a,[["render",o]]);export{m as __pageData,p as default}; diff --git a/docs/assets/modules_utils_index.md.B73MNLN3.js b/docs/assets/modules_utils_index.md.B73MNLN3.js new file mode 100644 index 000000000..53689cdc8 --- /dev/null +++ b/docs/assets/modules_utils_index.md.B73MNLN3.js @@ -0,0 +1,30 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Utils","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/index.md","filePath":"modules/utils/index.md","lastUpdated":1770827001000}'),t={name:"modules/utils/index.md"};function h(p,s,e,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Utils ​

Small, dependency-light building blocks used across Vix.cpp.

This module focuses on correctness, portability, and predictable behavior. Most helpers are header-only and designed to be safe in multithreaded runtimes.

What is inside ​

  • Env: environment variable helpers with type conversions (bool, int, uint, double).
  • Time: UTC timestamps (ISO-8601, RFC-1123), monotonic timers, unix epoch in ms.
  • String: trim, case helpers, split/join, URL decode, query string parsing.
  • UUID: UUID v4 generator (RFC 4122 style, thread-local RNG).
  • Result: explicit error handling without exceptions (Result<T, E>).
  • Validation: schema-based validation for string maps (required, length, numeric range, regex).
  • Logger: minimal logging primitives used by the runtime and tools.
  • PrettyLogs: server-ready banner and terminal formatting utilities.

Quick start ​

cpp
#include <vix/utils/Env.hpp>
+#include <vix/utils/Time.hpp>
+#include <vix/utils/String.hpp>
+#include <vix/utils/Result.hpp>
+
+using namespace vix::utils;
+
+Result<int> parse_port()
+{
+  int p = env_int("PORT", 8080);
+  if (p <= 0 || p > 65535)
+    return Result<int>::Err("PORT must be in range 1..65535");
+  return Result<int>::Ok(p);
+}
+
+int main()
+{
+  auto r = parse_port();
+  if (r.is_err())
+    return 1;
+
+  const int port = r.value();
+
+  const std::string ts = iso8601_now();
+  const auto parts = split("a,b,,c", ',');
+
+  (void)ts;
+  (void)parts;
+  (void)port;
+}

Guides ​

  • Overview (./guide.md)
  • Env (./env.md)
  • Time (./time.md)
  • String (./string.md)
  • UUID (./uuid.md)
  • Result (./result.md)
  • Validation (./validation.md)
  • Logger (./logger.md)
  • PrettyLogs (./prettylogs.md)

Design goals ​

  • No hidden allocations when possible
  • No exceptions required
  • Works on Linux, macOS, and Windows
  • Safe defaults and explicit control flow
`,11)])])}const c=i(t,[["render",h]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_utils_index.md.B73MNLN3.lean.js b/docs/assets/modules_utils_index.md.B73MNLN3.lean.js new file mode 100644 index 000000000..16c0bc139 --- /dev/null +++ b/docs/assets/modules_utils_index.md.B73MNLN3.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Utils","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/index.md","filePath":"modules/utils/index.md","lastUpdated":1770827001000}'),t={name:"modules/utils/index.md"};function h(p,s,e,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",11)])])}const c=i(t,[["render",h]]);export{y as __pageData,c as default}; diff --git a/docs/assets/modules_utils_index.md.CQNocCMH.js b/docs/assets/modules_utils_index.md.CQNocCMH.js deleted file mode 100644 index d83f8e420..000000000 --- a/docs/assets/modules_utils_index.md.CQNocCMH.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/index.md","filePath":"modules/utils/index.md","lastUpdated":null}'),a={name:"modules/utils/index.md"};function n(o,d,r,i,l,c){return t(),s("div")}const u=e(a,[["render",n]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_utils_index.md.CQNocCMH.lean.js b/docs/assets/modules_utils_index.md.CQNocCMH.lean.js deleted file mode 100644 index d83f8e420..000000000 --- a/docs/assets/modules_utils_index.md.CQNocCMH.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as s}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/index.md","filePath":"modules/utils/index.md","lastUpdated":null}'),a={name:"modules/utils/index.md"};function n(o,d,r,i,l,c){return t(),s("div")}const u=e(a,[["render",n]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_utils_logger.md.DiEv86_c.js b/docs/assets/modules_utils_logger.md.DiEv86_c.js new file mode 100644 index 000000000..6ae178183 --- /dev/null +++ b/docs/assets/modules_utils_logger.md.DiEv86_c.js @@ -0,0 +1,40 @@ +import{_ as i,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Logger","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/logger.md","filePath":"modules/utils/logger.md","lastUpdated":1770827001000}'),e={name:"modules/utils/logger.md"};function n(h,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[l(`

Logger ​

A practical guide to vix::utils::Logger.

This logger is a thin wrapper over spdlog with:

  • A global singleton instance
  • Level control via VIX_LOG_LEVEL
  • Optional structured logging via VIX_LOG_FORMAT
  • Per-thread context (request id, module, custom fields)
  • Optional console synchronization to avoid interleaved output

Include ​

cpp
#include <vix/utils/Logger.hpp>

Get the singleton:

cpp
auto &log = vix::utils::Logger::getInstance();

Default behavior ​

  • Output: console only (no log file is created)
  • Default level: info (can be overridden by VIX_LOG_LEVEL)
  • Default pattern: timestamp + [vix] + level + message

Logging levels ​

Available levels:

  • trace
  • debug
  • info
  • warn
  • error
  • critical
  • off

Set via environment:

bash
export VIX_LOG_LEVEL=debug

Or set programmatically:

cpp
auto &log = vix::utils::Logger::getInstance();
+log.setLevel(vix::utils::Logger::Level::Debug);

Check if a level is enabled:

cpp
if (log.enabled(vix::utils::Logger::Level::Debug))
+{
+  log.debug("Will only run when debug is enabled");
+}

Basic logging ​

cpp
auto &log = vix::utils::Logger::getInstance();
+
+log.info("Server started on port {}", 8080);
+log.warn("Cache miss for key={}", key);
+log.error("DB error: {}", err);

Module prefix ​

If you want a visible module prefix like [auth] ...:

cpp
auto &log = vix::utils::Logger::getInstance();
+
+log.logModule("auth", vix::utils::Logger::Level::Info,
+              "User {} logged in", user);

Pattern ​

Override the console pattern:

cpp
auto &log = vix::utils::Logger::getInstance();
+log.setPattern("%T [%^%l%$] %v");

Common patterns:

  • %T = HH:MM:SS
  • %l = level name
  • %^ and %$ = enable and disable level color
  • %v = message

Async mode ​

Enable async logging:

cpp
auto &log = vix::utils::Logger::getInstance();
+log.setAsync(true);

Disable async logging:

cpp
log.setAsync(false);

Notes:

  • Async mode uses an internal spdlog thread pool.
  • If you use async, keep shutdown simple. Let the process exit normally.

Per-thread context ​

Logger context is thread-local. It is designed for request scoped data.

Set context ​

cpp
auto &log = vix::utils::Logger::getInstance();
+
+vix::utils::Logger::Context ctx;
+ctx.request_id = "r-123";
+ctx.module = "http";
+ctx.fields["ip"] = "127.0.0.1";
+ctx.fields["user_id"] = "42";
+
+log.setContext(ctx);
+
+log.info("Request started");

Clear context ​

cpp
auto &log = vix::utils::Logger::getInstance();
+log.clearContext();

Read context ​

cpp
auto &log = vix::utils::Logger::getInstance();
+auto ctx = log.getContext();

Tips:

  • Set context at the beginning of a request handler.
  • Clear it when leaving the handler if the thread is reused.

Structured logging ​

You can log key/value pairs with logf().

KV format (default) ​

cpp
auto &log = vix::utils::Logger::getInstance();
+
+log.logf(vix::utils::Logger::Level::Info,
+         "Login ok",
+         "user", "alice",
+         "latency_ms", 12,
+         "status", 200);

Output stays on one line and appends fields like:

  • your kvpairs
  • rid and mod from the context
  • all custom context fields

JSON formats ​

Select output format via environment:

bash
export VIX_LOG_FORMAT=json
+# or
+export VIX_LOG_FORMAT=json_pretty

Or set programmatically:

cpp
auto &log = vix::utils::Logger::getInstance();
+log.setFormat(vix::utils::Logger::Format::JSON);

Notes:

  • JSON modes force the sink pattern to %v so the output is raw JSON.
  • Pretty JSON may include ANSI colors unless disabled (see below).

Colors and terminals ​

Pretty JSON colors are controlled by:

  • NO_COLOR set => colors disabled
  • VIX_COLOR=never|0|false => colors disabled
  • VIX_COLOR=always|1|true => colors forced on
  • Otherwise: best-effort detection (TTY on Unix, enabled on Windows)

Example:

bash
export NO_COLOR=1

Console synchronization ​

If you print banners or write to stdout from multiple threads, you can ask the logger to synchronize console writes.

Enable:

bash
export VIX_CONSOLE_SYNC=1

Disable:

bash
unset VIX_CONSOLE_SYNC
+# or
+export VIX_CONSOLE_SYNC=0

What it does:

  • Waits for banners to finish (via ConsoleMutex)
  • Locks a shared console mutex before emitting a log line

Windows macro safety ​

On Windows, some headers define macros like ERROR, DEBUG, INFO, min, max. This can break enum values or identifiers. The header temporarily undefines them and restores them after includes.

You do not need to do anything. It is handled by Logger.hpp.

Throw helpers ​

You can log and throw in one call:

cpp
auto &log = vix::utils::Logger::getInstance();
+log.throwError("Invalid config: {}", reason);

This logs at error level and throws std::runtime_error.

For typical apps:

bash
export VIX_LOG_LEVEL=info
+export VIX_LOG_FORMAT=kv

For debugging locally:

bash
export VIX_LOG_LEVEL=debug
+export VIX_LOG_FORMAT=json_pretty
`,84)])])}const y=i(e,[["render",n]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_logger.md.DiEv86_c.lean.js b/docs/assets/modules_utils_logger.md.DiEv86_c.lean.js new file mode 100644 index 000000000..120f069c6 --- /dev/null +++ b/docs/assets/modules_utils_logger.md.DiEv86_c.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Logger","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/logger.md","filePath":"modules/utils/logger.md","lastUpdated":1770827001000}'),e={name:"modules/utils/logger.md"};function n(h,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[l("",84)])])}const y=i(e,[["render",n]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.js b/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.js new file mode 100644 index 000000000..f04c06d09 --- /dev/null +++ b/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.js @@ -0,0 +1,65 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Server Pretty Logs (Runtime Banner)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/prettylogs.md","filePath":"modules/utils/prettylogs.md","lastUpdated":1770827001000}'),t={name:"modules/utils/prettylogs.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e(`

Server Pretty Logs (Runtime Banner) ​

This guide explains vix::utils::RuntimeBanner and vix::utils::ServerReadyInfo from ServerPrettyLogs.hpp.

Goal: print a clean "server ready" banner on startup, with terminal-friendly colors, optional OSC-8 hyperlinks, and safe output in multithreaded apps.

What this component does ​

When your server becomes ready, call:

  • RuntimeBanner::emit_server_ready(info)

It prints (to stderr) a banner that includes:

  • current local time (12h format)
  • app identity + mode tag (dev or run)
  • status pill (READY / RUNNING / LISTENING / WARN / ERROR)
  • HTTP URL
  • optional WebSocket URL
  • optional config path and thread hints
  • a hint line (Ctrl+C ...)

It also uses vix::utils::console_mutex() so banner output does not interleave with other threads.

Include ​

cpp
#include <vix/utils/ServerPrettyLogs.hpp>

Basic usage ​

Create a ServerReadyInfo, set fields you care about, then emit the banner.

cpp
#include <vix/utils/ServerPrettyLogs.hpp>
+
+int main()
+{
+  vix::utils::ServerReadyInfo info;
+  info.app = "my-app";
+  info.version = "v1.0.0";
+  info.mode = vix::utils::RuntimeBanner::mode_from_env(); // "run" or "dev"
+  info.status = "ready";
+
+  info.scheme = "http";
+  info.host = "127.0.0.1";
+  info.port = 8080;
+  info.base_path = "/";
+
+  info.show_ws = false; // hide WS row
+
+  vix::utils::RuntimeBanner::emit_server_ready(info);
+  return 0;
+}

HTTP + WebSocket example ​

cpp
#include <vix/utils/ServerPrettyLogs.hpp>
+
+int main()
+{
+  vix::utils::ServerReadyInfo info;
+  info.app = "vix.cpp";
+  info.version = "v1.34.0";
+  info.ready_ms = 42;
+
+  info.mode = "dev";
+  info.status = "listening";
+
+  info.scheme = "http";
+  info.host = "localhost";
+  info.port = 8080;
+  info.base_path = "/";
+
+  info.show_ws = true;
+  info.ws_scheme = "ws";
+  info.ws_host = "localhost";
+  info.ws_port = 9090;
+  info.ws_path = "/";
+
+  info.show_hints = true;
+
+  vix::utils::RuntimeBanner::emit_server_ready(info);
+  return 0;
+}

Environment controls ​

Colors ​

Colors follow these rules:

  • If NO_COLOR is set (non-empty), colors are disabled.
  • If VIX_COLOR is set:
    • never|0|false disables colors
    • always|1|true enables colors
  • Otherwise, colors are enabled by default.

Examples:

bash
# Disable colors
+vix run main.cpp --log-color=never
bash
# Force colors (even if terminal detection is weird)
+vix run main.cpp --log-color=always

Mode ​

RuntimeBanner::mode_from_env() reads VIX_MODE and normalizes it:

  • dev|watch|reload -> dev
  • everything else -> run
bash
vix dev examples/http/server.cpp

If supported, the banner prints URLs as clickable links. It is controlled by:

  • VIX_NO_HYPERLINK (set to disable)
  • terminal detection and allowlist checks
bash
VIX_NO_HYPERLINK=1 vix run main.cpp

Animations ​

The [dev] tag can pulse when animations are allowed. It is controlled by:

  • VIX_NO_ANIM (set to disable)
  • stderr must be a TTY
  • NO_COLOR disables animations too
bash
VIX_NO_ANIM=1 vix run main.cpp

Thread safety and output ordering ​

emit_server_ready() does two important things:

  1. It calls console_reset_banner() and console_mark_banner_done() so other threads can coordinate with the banner.
  2. It prints under console_mutex() so other console output will not interleave.

If you also print startup logs from worker threads, the banner stays readable.

Field reference ​

ServerReadyInfo fields you will commonly set:

  • app and version
  • ready_ms
  • mode and status
  • HTTP: scheme, host, port, base_path
  • WS: show_ws, ws_scheme, ws_host, ws_port, ws_path
  • config_path
  • threads, max_threads
  • show_hints

Typical pattern in a server ​

A clean approach is:

  1. Start the server
  2. When bind/listen succeeds, fill ServerReadyInfo
  3. Emit the banner once
cpp
void on_server_ready(int port, int startup_ms)
+{
+  vix::utils::ServerReadyInfo info;
+  info.app = "my-app";
+  info.version = "v1.0.0";
+  info.mode = vix::utils::RuntimeBanner::mode_from_env();
+  info.status = "ready";
+  info.ready_ms = startup_ms;
+
+  info.host = "0.0.0.0";
+  info.port = port;
+  info.base_path = "/";
+
+  info.show_ws = false;
+
+  vix::utils::RuntimeBanner::emit_server_ready(info);
+}

Troubleshooting ​

  • If you see no colors: check NO_COLOR and VIX_COLOR.
  • If links are not clickable: your terminal may not support OSC 8 or you are inside tmux/screen.
  • If the banner interleaves with other output: ensure other console writes also respect console_mutex() when needed.

Keep it minimal. No hidden magic. Just explicit C++.

`,49)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.lean.js b/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.lean.js new file mode 100644 index 000000000..d48a1ec67 --- /dev/null +++ b/docs/assets/modules_utils_prettylogs.md.D8mNu3ee.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as e}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Server Pretty Logs (Runtime Banner)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/prettylogs.md","filePath":"modules/utils/prettylogs.md","lastUpdated":1770827001000}'),t={name:"modules/utils/prettylogs.md"};function l(h,s,p,k,r,d){return a(),n("div",null,[...s[0]||(s[0]=[e("",49)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_utils_result.md.C-gzo_Se.js b/docs/assets/modules_utils_result.md.C-gzo_Se.js new file mode 100644 index 000000000..e6e02ec51 --- /dev/null +++ b/docs/assets/modules_utils_result.md.C-gzo_Se.js @@ -0,0 +1,29 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Result Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/result.md","filePath":"modules/utils/result.md","lastUpdated":1770827001000}'),h={name:"modules/utils/result.md"};function l(p,s,k,e,r,E){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Result Guide ​

Result&lt;T, E&gt; is a lightweight alternative to exceptions.

It represents either:

  • Ok(T) for success
  • Err(E) for failure

Designed for:

  • deterministic error handling
  • explicit control flow
  • no exceptions required

Basic usage ​

cpp
#include <vix/utils/Result.hpp>
+using vix::utils::Result;
+
+Result<int> divide(int a, int b)
+{
+  if (b == 0)
+    return Result<int>::Err("division by zero");
+
+  return Result<int>::Ok(a / b);
+}
cpp
auto r = divide(10, 2);
+
+if (r.is_ok())
+{
+    int value = r.value();
+}
+else
+{
+    std::string err = r.error();
+}

Creating Results ​

cpp
auto ok  = Result<int>::Ok(42);
+auto err = Result<int>::Err("failure");

Explicit forms:

cpp
auto ok2  = Result<int>::FromOk(10);
+auto err2 = Result<int>::FromErr("error");

Checking State ​

cpp
r.is_ok();   // true if success
+r.is_err();  // true if error

Accessing Values ​

cpp
r.value();   // valid only if is_ok()
+r.error();   // valid only if is_err()

Accessing the wrong variant triggers an assert.


Result<void> ​

Used when success carries no value.

cpp
Result<void> save()
+{
+    if (!can_save())
+        return Result<void>::Err("permission denied");
+
+    return Result<void>::Ok();
+}

Design Notes ​

  • Uses a union internally
  • No dynamic allocation inside Result itself
  • Copy and move supported
  • Explicit construction only (no default state)

Philosophy ​

Result forces error handling to be explicit.

Instead of:

cpp
throw std::runtime_error("error");

You return:

cpp
return Result<T>::Err("error");

Clear. Predictable. Exception-free.

`,38)])])}const y=i(h,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_result.md.C-gzo_Se.lean.js b/docs/assets/modules_utils_result.md.C-gzo_Se.lean.js new file mode 100644 index 000000000..10826bc01 --- /dev/null +++ b/docs/assets/modules_utils_result.md.C-gzo_Se.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Result Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/result.md","filePath":"modules/utils/result.md","lastUpdated":1770827001000}'),h={name:"modules/utils/result.md"};function l(p,s,k,e,r,E){return a(),t("div",null,[...s[0]||(s[0]=[n("",38)])])}const y=i(h,[["render",l]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_string.md.B_PjzPbc.js b/docs/assets/modules_utils_string.md.B_PjzPbc.js new file mode 100644 index 000000000..a868c0a0c --- /dev/null +++ b/docs/assets/modules_utils_string.md.B_PjzPbc.js @@ -0,0 +1,61 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"String helpers (vix::utils::String)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/string.md","filePath":"modules/utils/string.md","lastUpdated":1770827001000}'),l={name:"modules/utils/string.md"};function h(e,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n(`

String helpers (vix::utils::String) ​

Small, header-only utilities for common string operations used across Vix.cpp: trim, case transforms, prefix/suffix checks, split/join, and a few HTTP helpers (boundary extraction, URL decode, query string parsing).

Source file: String.hpp


Include ​

cpp
#include <vix/utils/String.hpp>

Namespace:

cpp
using namespace vix::utils;

What this file provides ​

Whitespace and trim (ASCII whitespace) ​

  • ltrim(std::string s) noexcept -> std::string
  • rtrim(std::string s) noexcept -> std::string
  • trim(std::string s) noexcept -> std::string

These functions operate on a copy of the input string and return by value. This is convenient for chaining:

cpp
#include <vix/utils/String.hpp>
+
+std::string cleaned()
+{
+  std::string s = "   hello  ";
+  return vix::utils::trim(std::move(s)); // "hello"
+}

Whitespace check is intentionally ASCII-focused via _is_space(): space + \\t \\n \\v \\f \\r.


Case transform ​

Lowercase (ASCII, C locale) ​

  • to_lower(std::string s) noexcept -> std::string

This is byte-wise ASCII lowering. It is not Unicode case folding.

cpp
#include <vix/utils/String.hpp>
+
+std::string key_normalize(std::string s)
+{
+  return vix::utils::to_lower(vix::utils::trim(std::move(s)));
+}

Prefix and suffix checks ​

  • starts_with(std::string_view s, std::string_view p) noexcept -> bool
  • ends_with(std::string_view s, std::string_view p) noexcept -> bool
cpp
#include <vix/utils/String.hpp>
+
+bool is_json(std::string_view p)
+{
+  return vix::utils::ends_with(p, ".json");
+}
+
+bool is_vix_module(std::string_view name)
+{
+  return vix::utils::starts_with(name, "vix");
+}

Case-insensitive prefix ​

  • starts_with_icase(std::string_view s, std::string_view prefix) -> bool

ASCII-only, predictable, fast.

cpp
#include <vix/utils/String.hpp>
+
+bool has_bearer(std::string_view header)
+{
+  return vix::utils::starts_with_icase(header, "bearer ");
+}

Split and join ​

Split by a single character ​

  • split(std::string_view s, char sep) -> std::vector<std::string>

Keeps empty segments.

cpp
#include <vix/utils/String.hpp>
+
+std::vector<std::string> parts()
+{
+  // ["a","b","","c"]
+  return vix::utils::split("a,b,,c", ',');
+}

Split by a string separator ​

  • split(std::string_view s, std::string_view sep) -> std::vector<std::string>

Keeps empty segments. If sep is empty, no split is performed (returns {s}).

cpp
#include <vix/utils/String.hpp>
+
+std::vector<std::string> parts()
+{
+  // ["a","b","","c"]
+  return vix::utils::split("a--b----c", "--");
+}

Join ​

  • join(const std::vector<std::string>& v, std::string_view sep) -> std::string

Pre-reserves capacity for fewer reallocations.

cpp
#include <vix/utils/String.hpp>
+
+std::string build()
+{
+  std::vector<std::string> v = {"a","b","","c"};
+  return vix::utils::join(v, "::"); // "a::b::::c"
+}

HTTP helpers ​

Extract multipart boundary ​

  • extract_boundary(std::string_view content_type) -> std::string

Parses strings like:

  • multipart/form-data; boundary=----WebKitFormBoundaryabc
  • multipart/form-data; boundary="----abc"
cpp
#include <vix/utils/String.hpp>
+
+std::string boundary_from_header(std::string_view ct)
+{
+  return vix::utils::extract_boundary(ct);
+}

URL decode ​

  • url_decode(std::string_view in) -> std::string

Rules:

  • + becomes space
  • %XX hex sequences are decoded
  • invalid % sequences are left as-is
cpp
#include <vix/utils/String.hpp>
+
+std::string decode_demo()
+{
+  return vix::utils::url_decode("q=hello%20world+vix"); // "q=hello world vix"
+}

Query string parsing ​

  • parse_query_string(std::string_view qs) -> std::unordered_map<std::string, std::string>

Parses key/value pairs separated by &. Keys and values are URL-decoded. If a key appears multiple times, the last one wins (map overwrite).

cpp
#include <vix/utils/String.hpp>
+
+std::unordered_map<std::string, std::string> parse()
+{
+  // { "q": "hello world", "page": "2" }
+  return vix::utils::parse_query_string("q=hello%20world&page=2");
+}

Notes and constraints ​

  • All helpers are ASCII/byte-oriented by design (predictable, fast, no locale surprises).
  • split keeps empty segments (this is intentional, useful for parsers).
  • Query parsing uses std::unordered_map, so ordering is not preserved.

File location suggestion (project) ​

If this is part of the utils module, keep it under:

txt
modules/utils/include/vix/utils/String.hpp
`,66)])])}const y=i(l,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_string.md.B_PjzPbc.lean.js b/docs/assets/modules_utils_string.md.B_PjzPbc.lean.js new file mode 100644 index 000000000..fe219adb8 --- /dev/null +++ b/docs/assets/modules_utils_string.md.B_PjzPbc.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"String helpers (vix::utils::String)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/string.md","filePath":"modules/utils/string.md","lastUpdated":1770827001000}'),l={name:"modules/utils/string.md"};function h(e,s,p,k,r,d){return a(),t("div",null,[...s[0]||(s[0]=[n("",66)])])}const y=i(l,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/assets/modules_utils_time.md.4H6XLGdj.js b/docs/assets/modules_utils_time.md.4H6XLGdj.js new file mode 100644 index 000000000..c1fff30f2 --- /dev/null +++ b/docs/assets/modules_utils_time.md.4H6XLGdj.js @@ -0,0 +1,45 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/time.md","filePath":"modules/utils/time.md","lastUpdated":1770827001000}'),e={name:"modules/utils/time.md"};function l(h,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`

Time ​

Guide for vix::utils::Time helpers (UTC timestamps, HTTP dates, monotonic timing, UNIX epoch milliseconds).

This utility is header only and designed for logging, metrics, request tracing, and any place where you need:

  • A stable duration timer (monotonic clock)
  • A real wall clock timestamp (UTC)
  • Standard string formats (ISO-8601, RFC-1123)

File: vix/utils/Time.hpp


What you get ​

1) UTC calendar time (strings) ​

  • iso8601_now() returns an ISO-8601 UTC timestamp:
    • YYYY-MM-DDTHH:MM:SSZ
  • rfc1123_now() returns an RFC-1123 HTTP date:
    • Wed, 08 Oct 2025 14:07:12 GMT

These are for logs, HTTP headers, debugging, and interoperability.

2) Monotonic milliseconds for durations ​

  • now_ms() uses std::chrono::steady_clock
  • Monotonic means it never goes backwards even if the OS clock changes
  • Use it for measuring elapsed time (latency, benchmarks, timeouts)

3) UNIX epoch milliseconds for persisted timestamps ​

  • unix_ms() uses std::chrono::system_clock
  • It can jump if the system time is adjusted
  • Use it when you need a real timestamp to store or transmit

Include and namespace ​

cpp
#include <vix/utils/Time.hpp>
+
+using namespace vix::utils;

Pick the right function ​

Measure latency or elapsed time ​

Use now_ms().

Why: steady_clock is monotonic, so time adjustments do not break your measurements.

cpp
#include <vix/utils/Time.hpp>
+#include <iostream>
+
+static void do_work()
+{
+  volatile int x = 0;
+  for (int i = 0; i < 2'000'000; ++i) x += i;
+}
+
+int main()
+{
+  const auto t0 = vix::utils::now_ms();
+  do_work();
+  const auto dt = vix::utils::now_ms() - t0;
+
+  std::cout << "elapsed_ms=" << dt << "\\n";
+  return 0;
+}

Create a timestamp string for logs ​

Use iso8601_now().

cpp
#include <vix/utils/Time.hpp>
+#include <iostream>
+
+int main()
+{
+  std::cout << vix::utils::iso8601_now() << "\\n";
+  return 0;
+}

Build HTTP Date header ​

Use rfc1123_now().

cpp
#include <vix/utils/Time.hpp>
+#include <iostream>
+#include <string>
+
+int main()
+{
+  const std::string dateHeader = "Date: " + vix::utils::rfc1123_now();
+  std::cout << dateHeader << "\\n";
+  return 0;
+}

Store an event timestamp in the database ​

Use unix_ms().

cpp
#include <vix/utils/Time.hpp>
+#include <cstdint>
+#include <iostream>
+
+int main()
+{
+  const std::uint64_t ts = vix::utils::unix_ms();
+  std::cout << "ts_ms=" << ts << "\\n";
+  return 0;
+}

Internals and portability notes ​

Thread safe UTC extraction ​

utc_tm(time_t) uses:

  • Windows: gmtime_s
  • POSIX: gmtime_r
  • Fallback: std::gmtime (not thread safe, used only on exotic targets)

This keeps formatting safe across platforms.

Strings and allocations ​

iso8601_now() and rfc1123_now() use std::ostringstream for formatting. That is fine for logging and low frequency timestamps. If you need extremely hot path formatting, keep the time in integer form (unix_ms()) and format only at the edge.


Common mistakes ​

Using system_clock for durations ​

Do not measure latency with unix_ms().

Reason: system time can jump due to NTP, VM resume, manual clock changes.

Correct:

  • durations: now_ms()
  • persisted time: unix_ms()

Expecting now_ms() to be an epoch time ​

now_ms() is time since an arbitrary start point. It is only meaningful when you subtract two values from the same process lifetime.


Quick recipe ​

  • Latency and timeouts: now_ms()
  • Log timestamps: iso8601_now()
  • HTTP date header: rfc1123_now()
  • Persisted event time: unix_ms()
`,52)])])}const y=i(e,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/assets/modules_utils_time.md.4H6XLGdj.lean.js b/docs/assets/modules_utils_time.md.4H6XLGdj.lean.js new file mode 100644 index 000000000..c618ab1ef --- /dev/null +++ b/docs/assets/modules_utils_time.md.4H6XLGdj.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const E=JSON.parse('{"title":"Time","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/time.md","filePath":"modules/utils/time.md","lastUpdated":1770827001000}'),e={name:"modules/utils/time.md"};function l(h,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n("",52)])])}const y=i(e,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/assets/modules_utils_uuid.md.DSaVBViv.js b/docs/assets/modules_utils_uuid.md.DSaVBViv.js new file mode 100644 index 000000000..7c88c48f3 --- /dev/null +++ b/docs/assets/modules_utils_uuid.md.DSaVBViv.js @@ -0,0 +1,8 @@ +import{_ as a,o as s,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"UUID Guide (vix::utils::uuid4)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/uuid.md","filePath":"modules/utils/uuid.md","lastUpdated":1770827001000}'),t={name:"modules/utils/uuid.md"};function n(r,i,h,p,d,o){return s(),e("div",null,[...i[0]||(i[0]=[l(`

UUID Guide (vix::utils::uuid4) ​

This guide explains how UUID generation works in Vix and how to use it correctly.

The implementation follows RFC 4122 version 4 (random UUID).
It is header-only and thread-safe.


What is a UUID v4? ​

A UUID v4 is a 128-bit random identifier formatted as:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Example:

550e8400-e29b-41d4-a716-446655440000

Properties:

  • 128-bit value
  • Random-based (version 4)
  • Lowercase hexadecimal
  • RFC 4122 variant compliant (10xxxxxx)

Basic Usage ​

Include the header:

cpp
#include <vix/utils/UUID.hpp>

Minimal example:

cpp
#include <vix/utils/UUID.hpp>
+#include <iostream>
+
+int main()
+{
+    std::string id = vix::utils::uuid4();
+    std::cout << id << std::endl;
+}

Run:

bash
vix run main.cpp

Thread Safety ​

The generator uses a thread-local Mersenne Twister (std::mt19937_64).

Each thread:

  • Has its own RNG
  • Is seeded once
  • Produces independent UUID sequences

This prevents cross-thread contention.


How It Works (Internally) ​

  1. Generate 16 random bytes
  2. Set version bits:
    • Byte 6 → version 4 (0100)
  3. Set variant bits:
    • Byte 8 → 10xxxxxx
  4. Format into canonical string (8-4-4-4-12)

When To Use UUID v4 ​

Use uuid4() when you need:

  • Request IDs
  • Correlation IDs
  • Database primary keys
  • Distributed system identifiers
  • Temporary object identifiers

Do NOT use UUID v4 when you need:

  • Time ordering
  • Sortable IDs
  • Cryptographic guarantees

Performance Characteristics ​

  • No dynamic allocations except final string
  • O(1) generation
  • No global locks
  • Header-only implementation

Summary ​

uuid4() provides:

  • RFC 4122 compliant UUIDs
  • Thread-safe generation
  • Simple header-only API
  • Zero configuration

Minimal. Predictable. Safe.

`,42)])])}const x=a(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/docs/assets/modules_utils_uuid.md.DSaVBViv.lean.js b/docs/assets/modules_utils_uuid.md.DSaVBViv.lean.js new file mode 100644 index 000000000..29c3461df --- /dev/null +++ b/docs/assets/modules_utils_uuid.md.DSaVBViv.lean.js @@ -0,0 +1 @@ +import{_ as a,o as s,c as e,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"UUID Guide (vix::utils::uuid4)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/uuid.md","filePath":"modules/utils/uuid.md","lastUpdated":1770827001000}'),t={name:"modules/utils/uuid.md"};function n(r,i,h,p,d,o){return s(),e("div",null,[...i[0]||(i[0]=[l("",42)])])}const x=a(t,[["render",n]]);export{g as __pageData,x as default}; diff --git a/docs/assets/modules_utils_validation.md.DnV-1MH0.js b/docs/assets/modules_utils_validation.md.DnV-1MH0.js new file mode 100644 index 000000000..b1c8441cc --- /dev/null +++ b/docs/assets/modules_utils_validation.md.DnV-1MH0.js @@ -0,0 +1,103 @@ +import{_ as i,o as a,c as h,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Validation (vix::utils::Validation)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/validation.md","filePath":"modules/utils/validation.md","lastUpdated":1770827001000}'),t={name:"modules/utils/validation.md"};function l(k,s,p,e,r,E){return a(),h("div",null,[...s[0]||(s[0]=[n(`

Validation (vix::utils::Validation) ​

Lightweight schema validation for std::unordered_map<std::string, std::string>.

This module is designed for form-like payloads or cases where you already have string values (query params, URL-encoded bodies, simple adapters from JSON). It is intentionally small and dependency-free.

What you get ​

  • Declarative Schema (field -> Rule)
  • Aggregated errors: FieldErrors (field -> message)
  • No exceptions for numeric parsing (std::from_chars)
  • First-failure per field (required, length, numeric range, regex)

API ​

Types ​

cpp
using FieldErrors = std::unordered_map<std::string, std::string>;
+using Schema      = std::unordered_map<std::string, Rule>;

Rule ​

cpp
struct Rule {
+  bool required = false;
+
+  std::optional<std::size_t> min_len{};
+  std::optional<std::size_t> max_len{};
+
+  std::optional<long long> min{};
+  std::optional<long long> max{};
+
+  std::optional<std::regex> pattern{};
+
+  std::string label; // used in error messages
+};

Builders ​

cpp
vix::utils::Rule required(std::string label = "");
+vix::utils::Rule len(std::size_t minL, std::size_t maxL, std::string lbl = "");
+vix::utils::Rule num_range(long long minV, long long maxV, std::string lbl = "");
+vix::utils::Rule match(std::string regex_str, std::string lbl = "");

validate_map ​

cpp
vix::utils::Result<void, vix::utils::FieldErrors>
+validate_map(const std::unordered_map<std::string, std::string>& data,
+             const vix::utils::Schema& schema);

Validation order per field:

  1. required (present and non-empty)
  2. length bounds (min_len, max_len)
  3. numeric range (min, max) using base-10 std::from_chars
  4. regex pattern using std::regex_match (full match)

If any field fails, you get Err(FieldErrors) with all failing fields. Otherwise Ok().

Quick start ​

cpp
#include <vix/utils/Validation.hpp>
+#include <iostream>
+
+using vix::utils::Schema;
+using vix::utils::validate_map;
+using vix::utils::required;
+using vix::utils::len;
+using vix::utils::num_range;
+using vix::utils::match;
+
+int main() {
+  std::unordered_map<std::string, std::string> data = {
+    {"name", "Ada"},
+    {"age", "21"},
+    {"email", "ada@example.com"}
+  };
+
+  Schema schema = {
+    {"name", required("Name")},
+    {"age",  num_range(18, 120, "Age")},
+    {"email", match(R"(^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$)", "Email")}
+  };
+
+  auto res = validate_map(data, schema);
+
+  if (res.is_err()) {
+    const auto& errs = res.error();
+    for (const auto& it : errs) {
+      std::cerr << it.first << ": " << it.second << "\\n";
+    }
+    return 1;
+  }
+
+  std::cout << "OK\\n";
+  return 0;
+}

Common patterns ​

1) Required + length ​

You can either keep it simple with required() only, or use len() to enforce bounds. If you want both, build the rule manually.

cpp
#include <vix/utils/Validation.hpp>
+
+vix::utils::Rule username_rule() {
+  vix::utils::Rule r = vix::utils::required("Username");
+  r.min_len = 3;
+  r.max_len = 20;
+  return r;
+}

2) Optional field with length ​

If required=false, a missing or empty field is ignored.

cpp
vix::utils::Rule bio_rule() {
+  vix::utils::Rule r;
+  r.label = "Bio";
+  r.max_len = 160;
+  return r;
+}

3) Numeric range ​

num_range(min, max) checks that the string is a valid base-10 integer and within bounds.

cpp
Schema schema = {
+  {"age", vix::utils::num_range(18, 120, "Age")}
+};

Notes:

  • from_chars rejects trailing garbage, so "21x" fails.
  • Leading + is not accepted by from_chars for signed integers in many standard libraries. Prefer "21" or "-1".

4) Regex full match ​

match() uses std::regex_match, so the entire string must match the pattern.

cpp
Schema schema = {
+  {"slug", vix::utils::match(R"(^[a-z0-9]+(?:-[a-z0-9]+)*$)", "Slug")}
+};

Working with the returned errors ​

FieldErrors is a map of field -> error_message. You can convert that into a JSON response or show a friendly UI message.

Example: build a compact JSON error payload (manual stringify, no JSON library required):

cpp
#include <vix/utils/Validation.hpp>
+#include <string>
+
+static std::string json_escape(std::string_view s) {
+  std::string out;
+  out.reserve(s.size() + 8);
+  for (char c : s) {
+    switch (c) {
+      case '\\\\': out += "\\\\\\\\"; break;
+      case '"':  out += "\\\\\\""; break;
+      case '\\n': out += "\\\\n"; break;
+      case '\\r': out += "\\\\r"; break;
+      case '\\t': out += "\\\\t"; break;
+      default: out.push_back(c); break;
+    }
+  }
+  return out;
+}
+
+static std::string errors_to_json(const vix::utils::FieldErrors& errs) {
+  std::string out = "{\\"errors\\":{";
+  bool first = true;
+  for (const auto& it : errs) {
+    if (!first) out += ",";
+    first = false;
+    out += "\\"";
+    out += json_escape(it.first);
+    out += "\\":\\"";
+    out += json_escape(it.second);
+    out += "\\"";
+  }
+  out += "}}";
+  return out;
+}

Behavior details ​

Empty string handling ​

A field is considered present only if:

  • key exists in data
  • value is not empty

So "email": "" behaves like missing.

First error per field ​

For a given field, only the first failing rule is stored:

  • if required fails, length or regex are not checked
  • if length fails, numeric or regex are not checked
  • etc

Regex cost ​

std::regex can be heavier than other checks. This module stores std::regex inside the Rule, so you pay compilation once when you build the schema (not per validation call). For hot paths, consider reusing schemas instead of rebuilding them per request.

Tips ​

  • Build schemas once and reuse them for performance.
  • Prefer label to produce user-facing messages.
  • Keep patterns anchored (^...$) even though regex_match already matches whole string. It makes intent obvious.
`,50)])])}const o=i(t,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_utils_validation.md.DnV-1MH0.lean.js b/docs/assets/modules_utils_validation.md.DnV-1MH0.lean.js new file mode 100644 index 000000000..ba6b6468e --- /dev/null +++ b/docs/assets/modules_utils_validation.md.DnV-1MH0.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as h,a as n}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Validation (vix::utils::Validation)","description":"","frontmatter":{},"headers":[],"relativePath":"modules/utils/validation.md","filePath":"modules/utils/validation.md","lastUpdated":1770827001000}'),t={name:"modules/utils/validation.md"};function l(k,s,p,e,r,E){return a(),h("div",null,[...s[0]||(s[0]=[n("",50)])])}const o=i(t,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_validation_guide.md.BTF6R-XX.js b/docs/assets/modules_validation_guide.md.BTF6R-XX.js new file mode 100644 index 000000000..2a3d29b06 --- /dev/null +++ b/docs/assets/modules_validation_guide.md.BTF6R-XX.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/guide.md","filePath":"modules/validation/guide.md","lastUpdated":1770805184000}'),o={name:"modules/validation/guide.md"};function d(i,r,s,n,c,l){return t(),a("div")}const f=e(o,[["render",d]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_validation_guide.md.BTF6R-XX.lean.js b/docs/assets/modules_validation_guide.md.BTF6R-XX.lean.js new file mode 100644 index 000000000..2a3d29b06 --- /dev/null +++ b/docs/assets/modules_validation_guide.md.BTF6R-XX.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/guide.md","filePath":"modules/validation/guide.md","lastUpdated":1770805184000}'),o={name:"modules/validation/guide.md"};function d(i,r,s,n,c,l){return t(),a("div")}const f=e(o,[["render",d]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_validation_guide.md.BsGfgOh5.js b/docs/assets/modules_validation_guide.md.BsGfgOh5.js deleted file mode 100644 index a6edf5e59..000000000 --- a/docs/assets/modules_validation_guide.md.BsGfgOh5.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/guide.md","filePath":"modules/validation/guide.md","lastUpdated":null}'),o={name:"modules/validation/guide.md"};function d(i,s,n,r,l,c){return t(),a("div")}const u=e(o,[["render",d]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_validation_guide.md.BsGfgOh5.lean.js b/docs/assets/modules_validation_guide.md.BsGfgOh5.lean.js deleted file mode 100644 index a6edf5e59..000000000 --- a/docs/assets/modules_validation_guide.md.BsGfgOh5.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/guide.md","filePath":"modules/validation/guide.md","lastUpdated":null}'),o={name:"modules/validation/guide.md"};function d(i,s,n,r,l,c){return t(),a("div")}const u=e(o,[["render",d]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_validation_index.md.CbXoKqq_.js b/docs/assets/modules_validation_index.md.BcpwyGV1.js similarity index 97% rename from docs/assets/modules_validation_index.md.CbXoKqq_.js rename to docs/assets/modules_validation_index.md.BcpwyGV1.js index 71a722003..0d8dd38ae 100644 --- a/docs/assets/modules_validation_index.md.CbXoKqq_.js +++ b/docs/assets/modules_validation_index.md.BcpwyGV1.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Validation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/index.md","filePath":"modules/validation/index.md","lastUpdated":null}'),h={name:"modules/validation/index.md"};function t(k,s,p,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Validation ​

The vix::validation module provides a declarative, composable validation system for:

  • Struct-based models
  • Raw values
  • Parsed values
  • HTTP form-style inputs
  • Custom rules

It is designed for:

  • Explicit schemas
  • Structured errors
  • No exceptions
  • Reusable rules
  • Backend-ready validation

Main headers:

cpp
#include <vix/validation/BaseModel.hpp>
+import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Validation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/index.md","filePath":"modules/validation/index.md","lastUpdated":1770805184000}'),h={name:"modules/validation/index.md"};function t(k,s,p,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

Validation ​

The vix::validation module provides a declarative, composable validation system for:

  • Struct-based models
  • Raw values
  • Parsed values
  • HTTP form-style inputs
  • Custom rules

It is designed for:

  • Explicit schemas
  • Structured errors
  • No exceptions
  • Reusable rules
  • Backend-ready validation

Main headers:

cpp
#include <vix/validation/BaseModel.hpp>
 #include <vix/validation/Schema.hpp>
 #include <vix/validation/Validate.hpp>
 #include <vix/validation/Pipe.hpp>
@@ -123,4 +123,4 @@ import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const g
             << " code=" << to_string(e.code)
             << " message=" << e.message
             << "\\n";
-}

Recommended Usage ​

For backend systems:

  • Use Schema<T> for domain models
  • Use BaseModel<T> for DTO-style validation
  • Use validate_parsed<T> for numeric input
  • Use .check() for cross-field constraints
  • Always inspect res.ok()

The API is explicit, composable, and suitable for production-grade backend validation systems.

`,60)])])}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; +}

Recommended Usage ​

For backend systems:

  • Use Schema<T> for domain models
  • Use BaseModel<T> for DTO-style validation
  • Use validate_parsed<T> for numeric input
  • Use .check() for cross-field constraints
  • Always inspect res.ok()

The API is explicit, composable, and suitable for production-grade backend validation systems.

`,60)])])}const o=i(h,[["render",t]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_validation_index.md.BcpwyGV1.lean.js b/docs/assets/modules_validation_index.md.BcpwyGV1.lean.js new file mode 100644 index 000000000..dc11c829f --- /dev/null +++ b/docs/assets/modules_validation_index.md.BcpwyGV1.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"Validation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/index.md","filePath":"modules/validation/index.md","lastUpdated":1770805184000}'),h={name:"modules/validation/index.md"};function t(k,s,p,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",60)])])}const o=i(h,[["render",t]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_validation_index.md.CbXoKqq_.lean.js b/docs/assets/modules_validation_index.md.CbXoKqq_.lean.js deleted file mode 100644 index a17c2272a..000000000 --- a/docs/assets/modules_validation_index.md.CbXoKqq_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as l}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Validation","description":"","frontmatter":{},"headers":[],"relativePath":"modules/validation/index.md","filePath":"modules/validation/index.md","lastUpdated":null}'),h={name:"modules/validation/index.md"};function t(k,s,p,e,E,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",60)])])}const y=i(h,[["render",t]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_webrpc_examples.md.DqzOtYRB.js b/docs/assets/modules_webrpc_examples.md.DqzOtYRB.js new file mode 100644 index 000000000..d026592c0 --- /dev/null +++ b/docs/assets/modules_webrpc_examples.md.DqzOtYRB.js @@ -0,0 +1,187 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"WebRPC Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/examples.md","filePath":"modules/webrpc/examples.md","lastUpdated":1770827001000}'),l={name:"modules/webrpc/examples.md"};function p(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

WebRPC Examples ​

This page is a practical overview of how to use vix::webrpc.

WebRPC is transport-agnostic:

  • You build and validate JSON-like payloads using vix::json::token
  • You parse requests into RpcRequest
  • You register methods in a Router
  • You handle single calls, notifications, and batch calls with Dispatcher

This guide focuses on the public API and common usage patterns.


1) Parse a request envelope ​

Use RpcRequest::parse() to validate and extract fields from a raw token.

What you get:

  • req.method as a string
  • req.id as a token (may be null)
  • req.params as a token (may be null)
  • helper req.has_id() to detect request/response vs notification
cpp
#include <iostream>
+
+#include <vix/webrpc/Request.hpp>
+#include <vix/json/Simple.hpp>
+
+using namespace vix::webrpc;
+using namespace vix::json;
+
+int main()
+{
+  token raw = obj({
+      "id",
+      1,
+      "method",
+      "ping",
+      "params",
+      obj({
+          "msg",
+          "hello",
+      }),
+  });
+
+  auto parsed = RpcRequest::parse(raw);
+
+  if (std::holds_alternative<RpcError>(parsed))
+  {
+    std::cerr << "Parse error\\n";
+    return 1;
+  }
+
+  const RpcRequest &req = std::get<RpcRequest>(parsed);
+
+  std::cout << "method = " << req.method << "\\n";
+  std::cout << "has id = " << req.has_id() << "\\n";
+
+  if (auto p = req.params_object_ptr())
+    std::cout << "msg = " << p->get_string_or("msg", "") << "\\n";
+
+  return 0;
+}

Notes:

  • If parsing fails, you get a structured RpcError (no exceptions)
  • params_object_ptr() returns nullptr if params is not an object

2) Register methods and dispatch with Router ​

Router is your method registry. A handler signature is:

  • input: const Context&
  • output: RpcResult which is variant<token, RpcError>

A handler should:

  • Validate params shape
  • Read fields safely
  • Return either a token (success) or RpcError (failure)
cpp
#include <iostream>
+
+#include <vix/webrpc/Router.hpp>
+#include <vix/json/Simple.hpp>
+
+using namespace vix::webrpc;
+using namespace vix::json;
+
+int main()
+{
+  Router router;
+
+  router.add("math.add", [](const Context &ctx) -> RpcResult
+  {
+    const auto *p = ctx.params_object_ptr();
+    if (!p)
+      return RpcError::invalid_params("params must be object");
+
+    const auto a = p->get_i64_or("a", 0);
+    const auto b = p->get_i64_or("b", 0);
+
+    return obj({
+        "sum", a + b,
+    });
+  });
+
+  token req = obj({
+      "id",
+      42,
+      "method",
+      "math.add",
+      "params",
+      obj({
+          "a",
+          7,
+          "b",
+          5,
+      }),
+  });
+
+  RpcResult out = router.dispatch(req);
+
+  if (std::holds_alternative<RpcError>(out))
+  {
+    std::cerr << "RPC error\\n";
+    return 1;
+  }
+
+  auto res = std::get<token>(out).as_object_ptr();
+  std::cout << "sum = " << res->get_i64_or("sum", 0) << "\\n";
+
+  return 0;
+}

Notes:

  • router.dispatch(raw_token) parses and dispatches a single request object
  • If method is not registered, result is RpcError::method_not_found(...)

3) Notifications with Dispatcher ​

A notification is a call without an id (or with id = null).

Notifications are fire-and-forget:

  • handler is executed
  • no response is returned

Dispatcher handles envelope parsing and response wrapping.

cpp
#include <iostream>
+
+#include <vix/webrpc/Dispatcher.hpp>
+#include <vix/webrpc/Router.hpp>
+#include <vix/json/Simple.hpp>
+
+using namespace vix::webrpc;
+using namespace vix::json;
+
+int main()
+{
+  Router router;
+
+  router.add("log", [](const Context &ctx) -> RpcResult
+  {
+    const auto *p = ctx.params_object_ptr();
+    if (p)
+      std::cout << "log: " << p->get_string_or("msg", "") << "\\n";
+    return token(nullptr);
+  });
+
+  Dispatcher d(router);
+
+  token notification = obj({
+      "method",
+      "log",
+      "params",
+      obj({
+          "msg",
+          "fire and forget",
+      }),
+  });
+
+  auto res = d.handle(notification);
+  if (!res.has_value())
+    std::cout << "no response (notification)\\n";
+
+  return 0;
+}

Notes:

  • Dispatcher::handle(...) returns std::nullopt for notifications
  • This is the same behavior across HTTP, WebSocket, P2P, etc.

4) Batch requests ​

A batch is an array of request objects.

Rules:

  • Each item with an id produces a response entry
  • Notifications produce no response entry
  • If all items are notifications, dispatcher returns no response
  • Empty batch is invalid and yields an error response
cpp
#include <iostream>
+
+#include <vix/webrpc/Dispatcher.hpp>
+#include <vix/webrpc/Router.hpp>
+#include <vix/json/Simple.hpp>
+
+using namespace vix::webrpc;
+using namespace vix::json;
+
+int main()
+{
+  Router router;
+
+  router.add("echo", [](const Context &ctx) -> RpcResult
+  {
+    return ctx.params;
+  });
+
+  Dispatcher d(router);
+
+  token batch = array({
+      obj({
+          "id",
+          1,
+          "method",
+          "echo",
+          "params",
+          obj({"x", 10}),
+      }),
+      obj({
+          "method",
+          "echo",
+          "params",
+          obj({"y", 20}), // notification
+      }),
+      obj({
+          "id",
+          2,
+          "method",
+          "echo",
+          "params",
+          obj({"z", 30}),
+      }),
+  });
+
+  auto res = d.handle(batch);
+
+  if (!res)
+  {
+    std::cout << "no responses\\n";
+    return 0;
+  }
+
+  auto arr = res->as_array_ptr();
+  std::cout << "responses = " << arr->size() << "\\n";
+
+  return 0;
+}

Notes:

  • The returned token is an array of response objects
  • Notifications are executed but do not produce response entries

5) When to use Router vs Dispatcher ​

Use Router when:

  • You already have a validated RpcRequest
  • You only need to handle a single request object
  • You want full control over envelope and response

Use Dispatcher when:

  • You want full envelope handling (parse + response wrapping)
  • You need notifications support
  • You need batch support

In production, most transports will call Dispatcher.

`,46)])])}const o=i(l,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/assets/modules_webrpc_examples.md.DqzOtYRB.lean.js b/docs/assets/modules_webrpc_examples.md.DqzOtYRB.lean.js new file mode 100644 index 000000000..119915a18 --- /dev/null +++ b/docs/assets/modules_webrpc_examples.md.DqzOtYRB.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"WebRPC Examples","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/examples.md","filePath":"modules/webrpc/examples.md","lastUpdated":1770827001000}'),l={name:"modules/webrpc/examples.md"};function p(t,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",46)])])}const o=i(l,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/assets/modules_webrpc_guide.md.DlP70gdU.js b/docs/assets/modules_webrpc_guide.md.DlP70gdU.js deleted file mode 100644 index 362fdf00f..000000000 --- a/docs/assets/modules_webrpc_guide.md.DlP70gdU.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/guide.md","filePath":"modules/webrpc/guide.md","lastUpdated":null}'),r={name:"modules/webrpc/guide.md"};function o(s,d,c,n,p,i){return t(),a("div")}const u=e(r,[["render",o]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_webrpc_guide.md.DlP70gdU.lean.js b/docs/assets/modules_webrpc_guide.md.DlP70gdU.lean.js deleted file mode 100644 index 362fdf00f..000000000 --- a/docs/assets/modules_webrpc_guide.md.DlP70gdU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/guide.md","filePath":"modules/webrpc/guide.md","lastUpdated":null}'),r={name:"modules/webrpc/guide.md"};function o(s,d,c,n,p,i){return t(),a("div")}const u=e(r,[["render",o]]);export{m as __pageData,u as default}; diff --git a/docs/assets/modules_webrpc_index.md.CnK8TKrJ.js b/docs/assets/modules_webrpc_index.md.CnK8TKrJ.js new file mode 100644 index 000000000..b03aabeab --- /dev/null +++ b/docs/assets/modules_webrpc_index.md.CnK8TKrJ.js @@ -0,0 +1,10 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"WebRPC Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/index.md","filePath":"modules/webrpc/index.md","lastUpdated":1770827001000}'),n={name:"modules/webrpc/index.md"};function l(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t(`

WebRPC Guide ​

This guide explains how to use vix::webrpc to build a small, explicit RPC layer.

WebRPC is transport-agnostic. It does not care if your payload comes from HTTP, WebSocket, P2P, or CLI. Your transport layer should only translate bytes to vix::json::token, call WebRPC, then translate the response back to bytes.


What you build with WebRPC ​

A typical setup has three layers:

  1. Envelope: RpcRequest and RpcResponse define what a call looks like.
  2. Methods: Router registers method handlers and executes them.
  3. Orchestration: Dispatcher adds notification and batch support, and produces response envelopes.

Inside handlers you get a Context which is a read-only view of the request.


Request shape ​

A request is a JSON object token:

  • method (required, non-empty string)
  • id (optional; null or missing means notification)
  • params (optional; any JSON-like token)

Example:

json
{ "id": 1, "method": "ping", "params": { "msg": "hello" } }

Step 1: Parse a request ​

When you want to validate a raw token and inspect fields, use RpcRequest::parse().

Key points:

  • Parsing returns a value, not exceptions.
  • On failure you get a structured RpcError.
  • Use has_id() to detect request vs notification.

Minimal pattern:

cpp
auto parsed = RpcRequest::parse(raw);
+if (std::holds_alternative<RpcError>(parsed)) {
+  // handle parse error
+}
+RpcRequest req = std::get<RpcRequest>(parsed);

For a complete runnable example, see the examples file below.


Step 2: Register methods with Router ​

A WebRPC method is a handler:

  • Input: const Context&
  • Output: RpcResult which is variant<token, RpcError>

Guidelines for a good handler:

  • Validate params shape first (object vs array vs null).
  • Read fields using safe helpers like get_i64_or, get_string_or.
  • Return RpcError::invalid_params(...) when input does not match your contract.

Minimal pattern:

cpp
router.add("math.add", [](const Context& ctx) -> RpcResult {
+  const auto* p = ctx.params_object_ptr();
+  if (!p) return RpcError::invalid_params("params must be object");
+  return vix::json::obj({ "sum", p->get_i64_or("a", 0) + p->get_i64_or("b", 0) });
+});

Router can dispatch a single raw request object:

cpp
RpcResult out = router.dispatch(raw_request_token);

Step 3: Use Dispatcher for real transports ​

Dispatcher is the recommended entry point for HTTP, WebSocket, or P2P integrations.

It handles:

  • Parsing envelopes
  • Notifications (no id -> no response)
  • Batch requests (array of request objects)
  • Wrapping results into RpcResponse JSON

You call:

cpp
Dispatcher d(router);
+auto response = d.handle(payload_token, "http", &meta);

Return value:

  • std::nullopt when no response should be sent (notification only)
  • Otherwise a token representing a response object or an array of responses

Notifications ​

A notification is a call without id (or id = null).

Rules:

  • Handler runs.
  • No response is produced.

Use notifications for fire-and-forget operations like logs, telemetry, presence.


Batch requests ​

A batch is an array of request objects.

Rules:

  • Each item with an id yields a response entry.
  • Notifications yield no response entry.
  • If every item is a notification, the dispatcher returns no response.
  • Empty batch is invalid and yields an error response with id = null.

Batch is useful when latency is high and you want fewer round-trips.


What goes in transport code ​

Keep the transport adapter thin:

  1. Receive bytes
  2. Parse into vix::json::token
  3. Call Dispatcher::handle(payload, transport, meta)
  4. If a response exists, serialize it and send it back

Business logic lives in handlers, not in the transport.

`,58)])])}const g=i(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_webrpc_index.md.CnK8TKrJ.lean.js b/docs/assets/modules_webrpc_index.md.CnK8TKrJ.lean.js new file mode 100644 index 000000000..f31f3806d --- /dev/null +++ b/docs/assets/modules_webrpc_index.md.CnK8TKrJ.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as e,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const u=JSON.parse('{"title":"WebRPC Guide","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/index.md","filePath":"modules/webrpc/index.md","lastUpdated":1770827001000}'),n={name:"modules/webrpc/index.md"};function l(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t("",58)])])}const g=i(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/docs/assets/modules_webrpc_index.md.DnAv0KkP.js b/docs/assets/modules_webrpc_index.md.DnAv0KkP.js deleted file mode 100644 index 49ddeba4f..000000000 --- a/docs/assets/modules_webrpc_index.md.DnAv0KkP.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/index.md","filePath":"modules/webrpc/index.md","lastUpdated":null}'),r={name:"modules/webrpc/index.md"};function n(o,s,d,c,p,i){return t(),a("div")}const _=e(r,[["render",n]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_webrpc_index.md.DnAv0KkP.lean.js b/docs/assets/modules_webrpc_index.md.DnAv0KkP.lean.js deleted file mode 100644 index 49ddeba4f..000000000 --- a/docs/assets/modules_webrpc_index.md.DnAv0KkP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/webrpc/index.md","filePath":"modules/webrpc/index.md","lastUpdated":null}'),r={name:"modules/webrpc/index.md"};function n(o,s,d,c,p,i){return t(),a("div")}const _=e(r,[["render",n]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_websocket_api.md.CjOYJ8HE.js b/docs/assets/modules_websocket_api.md.CjOYJ8HE.js deleted file mode 100644 index ad1086967..000000000 --- a/docs/assets/modules_websocket_api.md.CjOYJ8HE.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/api.md","filePath":"modules/websocket/api.md","lastUpdated":null}'),o={name:"modules/websocket/api.md"};function s(c,r,n,p,d,i){return t(),a("div")}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_websocket_api.md.CjOYJ8HE.lean.js b/docs/assets/modules_websocket_api.md.CjOYJ8HE.lean.js deleted file mode 100644 index ad1086967..000000000 --- a/docs/assets/modules_websocket_api.md.CjOYJ8HE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/api.md","filePath":"modules/websocket/api.md","lastUpdated":null}'),o={name:"modules/websocket/api.md"};function s(c,r,n,p,d,i){return t(),a("div")}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; diff --git a/docs/assets/modules_websocket_api.md.DuYNb75w.js b/docs/assets/modules_websocket_api.md.DuYNb75w.js new file mode 100644 index 000000000..fce9147aa --- /dev/null +++ b/docs/assets/modules_websocket_api.md.DuYNb75w.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/api.md","filePath":"modules/websocket/api.md","lastUpdated":1770805184000}'),o={name:"modules/websocket/api.md"};function s(r,c,p,i,d,n){return t(),a("div")}const u=e(o,[["render",s]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_websocket_api.md.DuYNb75w.lean.js b/docs/assets/modules_websocket_api.md.DuYNb75w.lean.js new file mode 100644 index 000000000..fce9147aa --- /dev/null +++ b/docs/assets/modules_websocket_api.md.DuYNb75w.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/api.md","filePath":"modules/websocket/api.md","lastUpdated":1770805184000}'),o={name:"modules/websocket/api.md"};function s(r,c,p,i,d,n){return t(),a("div")}const u=e(o,[["render",s]]);export{f as __pageData,u as default}; diff --git a/docs/assets/modules_websocket_example-chat.md.BykPYTdW.js b/docs/assets/modules_websocket_example-chat.md.BykPYTdW.js deleted file mode 100644 index ec9f43e40..000000000 --- a/docs/assets/modules_websocket_example-chat.md.BykPYTdW.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/example-chat.md","filePath":"modules/websocket/example-chat.md","lastUpdated":null}'),o={name:"modules/websocket/example-chat.md"};function s(c,r,l,m,n,p){return t(),a("div")}const i=e(o,[["render",s]]);export{_ as __pageData,i as default}; diff --git a/docs/assets/modules_websocket_example-chat.md.BykPYTdW.lean.js b/docs/assets/modules_websocket_example-chat.md.BykPYTdW.lean.js deleted file mode 100644 index ec9f43e40..000000000 --- a/docs/assets/modules_websocket_example-chat.md.BykPYTdW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.jUmBZPH5.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/example-chat.md","filePath":"modules/websocket/example-chat.md","lastUpdated":null}'),o={name:"modules/websocket/example-chat.md"};function s(c,r,l,m,n,p){return t(),a("div")}const i=e(o,[["render",s]]);export{_ as __pageData,i as default}; diff --git a/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.js b/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.js new file mode 100644 index 000000000..3be82218f --- /dev/null +++ b/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/example-chat.md","filePath":"modules/websocket/example-chat.md","lastUpdated":1770805184000}'),o={name:"modules/websocket/example-chat.md"};function s(c,r,m,p,d,l){return t(),a("div")}const h=e(o,[["render",s]]);export{f as __pageData,h as default}; diff --git a/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.lean.js b/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.lean.js new file mode 100644 index 000000000..3be82218f --- /dev/null +++ b/docs/assets/modules_websocket_example-chat.md.DxLD4eMF.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/example-chat.md","filePath":"modules/websocket/example-chat.md","lastUpdated":1770805184000}'),o={name:"modules/websocket/example-chat.md"};function s(c,r,m,p,d,l){return t(),a("div")}const h=e(o,[["render",s]]);export{f as __pageData,h as default}; diff --git a/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.js b/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.js deleted file mode 100644 index 0362b4965..000000000 --- a/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/guide.md","filePath":"modules/websocket/guide.md","lastUpdated":null}'),s={name:"modules/websocket/guide.md"};function a(d,c,r,n,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.lean.js b/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.lean.js deleted file mode 100644 index 0362b4965..000000000 --- a/docs/assets/modules_websocket_guide.md.6Zo_4_Sb.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as t,c as o}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/guide.md","filePath":"modules/websocket/guide.md","lastUpdated":null}'),s={name:"modules/websocket/guide.md"};function a(d,c,r,n,i,l){return t(),o("div")}const u=e(s,[["render",a]]);export{p as __pageData,u as default}; diff --git a/docs/assets/modules_websocket_guide.md.FOvYLyAR.js b/docs/assets/modules_websocket_guide.md.FOvYLyAR.js new file mode 100644 index 000000000..7f4d90cba --- /dev/null +++ b/docs/assets/modules_websocket_guide.md.FOvYLyAR.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/guide.md","filePath":"modules/websocket/guide.md","lastUpdated":1770805184000}'),s={name:"modules/websocket/guide.md"};function a(r,d,c,i,n,m){return t(),o("div")}const f=e(s,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_websocket_guide.md.FOvYLyAR.lean.js b/docs/assets/modules_websocket_guide.md.FOvYLyAR.lean.js new file mode 100644 index 000000000..7f4d90cba --- /dev/null +++ b/docs/assets/modules_websocket_guide.md.FOvYLyAR.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/guide.md","filePath":"modules/websocket/guide.md","lastUpdated":1770805184000}'),s={name:"modules/websocket/guide.md"};function a(r,d,c,i,n,m){return t(),o("div")}const f=e(s,[["render",a]]);export{_ as __pageData,f as default}; diff --git a/docs/assets/modules_websocket_index.md.B_6WmSsD.lean.js b/docs/assets/modules_websocket_index.md.B_6WmSsD.lean.js deleted file mode 100644 index adb4b9327..000000000 --- a/docs/assets/modules_websocket_index.md.B_6WmSsD.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/index.md","filePath":"modules/websocket/index.md","lastUpdated":null}'),k={name:"modules/websocket/index.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",27)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/modules_websocket_index.md.B_6WmSsD.js b/docs/assets/modules_websocket_index.md.BabQZJDy.js similarity index 97% rename from docs/assets/modules_websocket_index.md.B_6WmSsD.js rename to docs/assets/modules_websocket_index.md.BabQZJDy.js index 373a1a97d..7ca81c5a0 100644 --- a/docs/assets/modules_websocket_index.md.B_6WmSsD.js +++ b/docs/assets/modules_websocket_index.md.BabQZJDy.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/index.md","filePath":"modules/websocket/index.md","lastUpdated":null}'),k={name:"modules/websocket/index.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

WebSocket ​

Vix supports real-time messaging with a simple typed protocol.

A typed message has this shape:

json
{
+import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/index.md","filePath":"modules/websocket/index.md","lastUpdated":1770805184000}'),k={name:"modules/websocket/index.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`

WebSocket ​

Vix supports real-time messaging with a simple typed protocol.

A typed message has this shape:

json
{
   "type": "chat.message",
   "payload": { "room": "general", "text": "hello" }
 }

In C++, Vix gives you:

  • on_open(...) to handle new connections
  • on_typed_message(...) to handle {type, payload} messages
  • broadcast_json(...) to broadcast to all sessions
  • optional: room broadcasting (broadcast_room_json(...))
  • optional: Long Polling bridge for environments where WebSocket is blocked

This guide shows two minimal setups:

  1. One process serving HTTP + WebSocket (with long polling bridge)
  2. A standalone WebSocket server

All examples are minimal and keep everything in main().


1) HTTP + WS in one process (with long polling bridge) ​

This is useful when you want a single binary that serves:

  • normal HTTP routes
  • WebSocket events
  • fallback long polling endpoints
cpp
#include <vix.hpp>
@@ -147,4 +147,4 @@ import{_ as i,o as a,c as n,a2 as h}from"./chunks/framework.jUmBZPH5.js";const g
     "user": "Alice",
     "text": "Hello!"
   }
-}

Notes ​

  • Keep handlers small: parse, validate, broadcast.
  • Use the long polling bridge when WebSocket is blocked by networks or proxies.
  • For multi-room chat, include a room field in payload and broadcast to rooms.
`,27)])])}const y=i(k,[["render",l]]);export{g as __pageData,y as default}; +}

Notes ​

  • Keep handlers small: parse, validate, broadcast.
  • Use the long polling bridge when WebSocket is blocked by networks or proxies.
  • For multi-room chat, include a room field in payload and broadcast to rooms.
`,27)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/modules_websocket_index.md.BabQZJDy.lean.js b/docs/assets/modules_websocket_index.md.BabQZJDy.lean.js new file mode 100644 index 000000000..d9d495ad3 --- /dev/null +++ b/docs/assets/modules_websocket_index.md.BabQZJDy.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const F=JSON.parse('{"title":"WebSocket","description":"","frontmatter":{},"headers":[],"relativePath":"modules/websocket/index.md","filePath":"modules/websocket/index.md","lastUpdated":1770805184000}'),k={name:"modules/websocket/index.md"};function l(p,s,t,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",27)])])}const o=i(k,[["render",l]]);export{F as __pageData,o as default}; diff --git a/docs/assets/project-setup.md.BjyQZ3-_.lean.js b/docs/assets/project-setup.md.BjyQZ3-_.lean.js deleted file mode 100644 index 4031f0ad7..000000000 --- a/docs/assets/project-setup.md.BjyQZ3-_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Project setup","description":"","frontmatter":{},"headers":[],"relativePath":"project-setup.md","filePath":"project-setup.md","lastUpdated":1770798288000}'),t={name:"project-setup.md"};function l(h,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",27)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; diff --git a/docs/assets/project-setup.md.BjyQZ3-_.js b/docs/assets/project-setup.md.CqDTPKhT.js similarity index 91% rename from docs/assets/project-setup.md.BjyQZ3-_.js rename to docs/assets/project-setup.md.CqDTPKhT.js index a0964055d..8a2bfe760 100644 --- a/docs/assets/project-setup.md.BjyQZ3-_.js +++ b/docs/assets/project-setup.md.CqDTPKhT.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g=JSON.parse('{"title":"Project setup","description":"","frontmatter":{},"headers":[],"relativePath":"project-setup.md","filePath":"project-setup.md","lastUpdated":1770798288000}'),t={name:"project-setup.md"};function l(h,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

project-setup ​

Project setup ​

This guide shows the simplest possible Vix project layout.

Everything is minimal. Everything is explicit. No hidden structure.


1. Minimal structure ​

txt
my-vix-app/
+import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Project setup","description":"","frontmatter":{},"headers":[],"relativePath":"project-setup.md","filePath":"project-setup.md","lastUpdated":1770798288000}'),t={name:"project-setup.md"};function l(h,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p(`

project-setup ​

Project setup ​

This guide shows the simplest possible Vix project layout.

Everything is minimal. Everything is explicit. No hidden structure.


1. Minimal structure ​

txt
my-vix-app/
   CMakeLists.txt
   main.cpp

That is enough.


2. main.cpp example ​

All routes directly inside main.

cpp
#include <vix.hpp>
 
@@ -50,4 +50,4 @@ import{_ as i,o as a,c as n,a2 as p}from"./chunks/framework.jUmBZPH5.js";const g
 # target_link_libraries(my_vix_app PRIVATE vix::vix)

4. Build manually ​

bash
mkdir build
 cd build
 cmake ..
-cmake --build .

Run:

bash
./my_vix_app

5. Scaling later ​

When your project grows, you can:

  • Split routes into multiple files
  • Add helpers for parsing
  • Add middleware
  • Add database layers

But the core idea stays the same:

Routes are explicit. Handlers are simple lambdas. main starts the runtime.

Nothing more.

`,27)])])}const y=i(t,[["render",l]]);export{g as __pageData,y as default}; +cmake --build .

Run:

bash
./my_vix_app

5. Scaling later ​

When your project grows, you can:

  • Split routes into multiple files
  • Add helpers for parsing
  • Add middleware
  • Add database layers

But the core idea stays the same:

Routes are explicit. Handlers are simple lambdas. main starts the runtime.

Nothing more.

`,27)])])}const o=i(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/docs/assets/project-setup.md.CqDTPKhT.lean.js b/docs/assets/project-setup.md.CqDTPKhT.lean.js new file mode 100644 index 000000000..6ad78e087 --- /dev/null +++ b/docs/assets/project-setup.md.CqDTPKhT.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as n,a as p}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const c=JSON.parse('{"title":"Project setup","description":"","frontmatter":{},"headers":[],"relativePath":"project-setup.md","filePath":"project-setup.md","lastUpdated":1770798288000}'),t={name:"project-setup.md"};function l(h,s,k,e,E,r){return a(),n("div",null,[...s[0]||(s[0]=[p("",27)])])}const o=i(t,[["render",l]]);export{c as __pageData,o as default}; diff --git a/docs/assets/quick-start.md.Of-POqD6.js b/docs/assets/quick-start.md.BzLiiEmy.js similarity index 91% rename from docs/assets/quick-start.md.Of-POqD6.js rename to docs/assets/quick-start.md.BzLiiEmy.js index d010d01db..86627cdd4 100644 --- a/docs/assets/quick-start.md.Of-POqD6.js +++ b/docs/assets/quick-start.md.BzLiiEmy.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1770798288000}'),n={name:"quick-start.md"};function p(l,s,e,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[h(`

Quick start ​

Hardware requirements Vix.cpp runs everywhere, but

performance depends on your hardware.

For real-world production workloads, use a modern multi-core CPU, fast I/O, and enough memory to avoid contention. GPU acceleration is optional and only required for specialized compute workloads.

1. Minimal server ​

Create a file main.cpp:

cpp
#include <vix.hpp>
+import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1770798288000}'),n={name:"quick-start.md"};function p(l,s,e,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[h(`

Quick start ​

Hardware requirements Vix.cpp runs everywhere, but

performance depends on your hardware.

For real-world production workloads, use a modern multi-core CPU, fast I/O, and enough memory to avoid contention. GPU acceleration is optional and only required for specialized compute workloads.

1. Minimal server ​

Create a file main.cpp:

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -26,4 +26,4 @@ import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o
   res.json({"q", q});
 });

Test:

bash
curl "http://127.0.0.1:8080/search?q=vix"

Status code ​

cpp
app.get("/notfound", [](Request&, Response& res) {
   res.status(404).json({"error", "Not found"});
-});

Philosophy ​

  • Routes are explicit.
  • No hidden magic.
  • You control status codes.
  • You control payload format.
  • The network layer stays predictable.
`,37)])])}const g=i(n,[["render",p]]);export{o as __pageData,g as default}; +});

Philosophy ​

  • Routes are explicit.
  • No hidden magic.
  • You control status codes.
  • You control payload format.
  • The network layer stays predictable.
`,37)])])}const c=i(n,[["render",p]]);export{y as __pageData,c as default}; diff --git a/docs/assets/quick-start.md.BzLiiEmy.lean.js b/docs/assets/quick-start.md.BzLiiEmy.lean.js new file mode 100644 index 000000000..ed90940f4 --- /dev/null +++ b/docs/assets/quick-start.md.BzLiiEmy.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as t,a as h}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const y=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1770798288000}'),n={name:"quick-start.md"};function p(l,s,e,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[h("",37)])])}const c=i(n,[["render",p]]);export{y as __pageData,c as default}; diff --git a/docs/assets/quick-start.md.Of-POqD6.lean.js b/docs/assets/quick-start.md.Of-POqD6.lean.js deleted file mode 100644 index b5bda7009..000000000 --- a/docs/assets/quick-start.md.Of-POqD6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.jUmBZPH5.js";const o=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1770798288000}'),n={name:"quick-start.md"};function p(l,s,e,k,r,E){return a(),t("div",null,[...s[0]||(s[0]=[h("",37)])])}const g=i(n,[["render",p]]);export{o as __pageData,g as default}; diff --git a/docs/assets/services_consulting.md.BMWbz75F.js b/docs/assets/services_consulting.md.BMWbz75F.js deleted file mode 100644 index cb5c4cb4e..000000000 --- a/docs/assets/services_consulting.md.BMWbz75F.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as t,a2 as r}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Consulting","description":"","frontmatter":{},"headers":[],"relativePath":"services/consulting.md","filePath":"services/consulting.md","lastUpdated":1770798288000}'),l={name:"services/consulting.md"};function n(o,e,s,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r('

Consulting ​

Architectural and performance consulting for high-performance C++ systems built with Vix.cpp.


Architecture Design ​

We help you design:

  • Scalable backend systems
  • Modular CMake-based projects
  • Async and coroutine-based services
  • Offline-first and edge-ready systems
  • P2P communication layers

Performance Optimization ​

We analyze and improve:

  • Latency bottlenecks
  • Memory usage
  • Thread contention
  • Locking patterns
  • Database query performance
  • Throughput under load

Migration Strategy ​

If you're moving from:

  • Node.js
  • Go
  • Python
  • PHP

We help you redesign your system for predictable performance in C++.


Codebase Audit ​

Full audit includes:

  • Architecture review
  • Concurrency model review
  • Security risk analysis
  • Database access patterns
  • Logging and observability strategy

Engagement Models ​

  • One-time architecture review
  • Short-term performance audit
  • Long-term advisory
  • Embedded technical leadership

Contact ​

gaspardkirira9@gmail.com

',25)])])}const p=a(l,[["render",n]]);export{m as __pageData,p as default}; diff --git a/docs/assets/services_consulting.md.BMWbz75F.lean.js b/docs/assets/services_consulting.md.BMWbz75F.lean.js deleted file mode 100644 index 9942987b6..000000000 --- a/docs/assets/services_consulting.md.BMWbz75F.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as i,c as t,a2 as r}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Consulting","description":"","frontmatter":{},"headers":[],"relativePath":"services/consulting.md","filePath":"services/consulting.md","lastUpdated":1770798288000}'),l={name:"services/consulting.md"};function n(o,e,s,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r("",25)])])}const p=a(l,[["render",n]]);export{m as __pageData,p as default}; diff --git a/docs/assets/services_consulting.md.Cw7SBfSH.js b/docs/assets/services_consulting.md.Cw7SBfSH.js new file mode 100644 index 000000000..ae0f66374 --- /dev/null +++ b/docs/assets/services_consulting.md.Cw7SBfSH.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as t,a as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Consulting","description":"","frontmatter":{},"headers":[],"relativePath":"services/consulting.md","filePath":"services/consulting.md","lastUpdated":1770798288000}'),l={name:"services/consulting.md"};function n(o,e,s,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r('

Consulting ​

Architectural and performance consulting for high-performance C++ systems built with Vix.cpp.


Architecture Design ​

We help you design:

  • Scalable backend systems
  • Modular CMake-based projects
  • Async and coroutine-based services
  • Offline-first and edge-ready systems
  • P2P communication layers

Performance Optimization ​

We analyze and improve:

  • Latency bottlenecks
  • Memory usage
  • Thread contention
  • Locking patterns
  • Database query performance
  • Throughput under load

Migration Strategy ​

If you're moving from:

  • Node.js
  • Go
  • Python
  • PHP

We help you redesign your system for predictable performance in C++.


Codebase Audit ​

Full audit includes:

  • Architecture review
  • Concurrency model review
  • Security risk analysis
  • Database access patterns
  • Logging and observability strategy

Engagement Models ​

  • One-time architecture review
  • Short-term performance audit
  • Long-term advisory
  • Embedded technical leadership

Contact ​

gaspardkirira9@gmail.com

',25)])])}const f=a(l,[["render",n]]);export{g as __pageData,f as default}; diff --git a/docs/assets/services_consulting.md.Cw7SBfSH.lean.js b/docs/assets/services_consulting.md.Cw7SBfSH.lean.js new file mode 100644 index 000000000..0b8fef8bd --- /dev/null +++ b/docs/assets/services_consulting.md.Cw7SBfSH.lean.js @@ -0,0 +1 @@ +import{_ as a,o as i,c as t,a as r}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const g=JSON.parse('{"title":"Consulting","description":"","frontmatter":{},"headers":[],"relativePath":"services/consulting.md","filePath":"services/consulting.md","lastUpdated":1770798288000}'),l={name:"services/consulting.md"};function n(o,e,s,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r("",25)])])}const f=a(l,[["render",n]]);export{g as __pageData,f as default}; diff --git a/docs/assets/services_index.md.BOjWW12H.js b/docs/assets/services_index.md.BOjWW12H.js new file mode 100644 index 000000000..574db0f2a --- /dev/null +++ b/docs/assets/services_index.md.BOjWW12H.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as r,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md","lastUpdated":1770798288000}'),o={name:"services/index.md"};function t(s,e,n,c,d,h){return a(),r("div",null,[...e[0]||(e[0]=[l('

Services ​

Vix.cpp is more than a runtime. We help teams design, build, and scale high-performance C++ systems.


What We Offer ​

  • Production architecture design
  • Performance audits
  • Async & concurrency consulting
  • Database & ORM optimization
  • P2P and offline-first system design
  • AI inference routing & reliability
  • Custom module development
  • Team training and workshops

Who It’s For ​

  • Startups building high-performance APIs
  • Companies migrating from Node.js or Go to C++
  • Teams building offline-first or edge systems
  • Infrastructure and backend engineers
  • Research and AI-driven platforms

Philosophy ​

We focus on:

  • Explicit architecture
  • Predictable performance
  • No hidden magic
  • Clean modular design
  • Production-ready code

Available Service Categories ​

  • Support
  • Consulting
  • Training

See each section for more details.

',16)])])}const g=i(o,[["render",t]]);export{f as __pageData,g as default}; diff --git a/docs/assets/services_index.md.BOjWW12H.lean.js b/docs/assets/services_index.md.BOjWW12H.lean.js new file mode 100644 index 000000000..4069d2512 --- /dev/null +++ b/docs/assets/services_index.md.BOjWW12H.lean.js @@ -0,0 +1 @@ +import{_ as i,o as a,c as r,a as l}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md","lastUpdated":1770798288000}'),o={name:"services/index.md"};function t(s,e,n,c,d,h){return a(),r("div",null,[...e[0]||(e[0]=[l("",16)])])}const g=i(o,[["render",t]]);export{f as __pageData,g as default}; diff --git a/docs/assets/services_index.md.BP9fJoln.js b/docs/assets/services_index.md.BP9fJoln.js deleted file mode 100644 index 7f036feda..000000000 --- a/docs/assets/services_index.md.BP9fJoln.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as r,a2 as l}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"Services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md","lastUpdated":1770798288000}'),o={name:"services/index.md"};function t(s,e,n,c,d,h){return a(),r("div",null,[...e[0]||(e[0]=[l('

Services ​

Vix.cpp is more than a runtime. We help teams design, build, and scale high-performance C++ systems.


What We Offer ​

  • Production architecture design
  • Performance audits
  • Async & concurrency consulting
  • Database & ORM optimization
  • P2P and offline-first system design
  • AI inference routing & reliability
  • Custom module development
  • Team training and workshops

Who It’s For ​

  • Startups building high-performance APIs
  • Companies migrating from Node.js or Go to C++
  • Teams building offline-first or edge systems
  • Infrastructure and backend engineers
  • Research and AI-driven platforms

Philosophy ​

We focus on:

  • Explicit architecture
  • Predictable performance
  • No hidden magic
  • Clean modular design
  • Production-ready code

Available Service Categories ​

  • Support
  • Consulting
  • Training

See each section for more details.

',16)])])}const m=i(o,[["render",t]]);export{p as __pageData,m as default}; diff --git a/docs/assets/services_index.md.BP9fJoln.lean.js b/docs/assets/services_index.md.BP9fJoln.lean.js deleted file mode 100644 index b4613a777..000000000 --- a/docs/assets/services_index.md.BP9fJoln.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as a,c as r,a2 as l}from"./chunks/framework.jUmBZPH5.js";const p=JSON.parse('{"title":"Services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md","lastUpdated":1770798288000}'),o={name:"services/index.md"};function t(s,e,n,c,d,h){return a(),r("div",null,[...e[0]||(e[0]=[l("",16)])])}const m=i(o,[["render",t]]);export{p as __pageData,m as default}; diff --git a/docs/assets/services_support.md.CTKmdQvf.js b/docs/assets/services_support.md.CTKmdQvf.js deleted file mode 100644 index c69a90510..000000000 --- a/docs/assets/services_support.md.CTKmdQvf.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,o as a,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const h=JSON.parse('{"title":"Support","description":"","frontmatter":{},"headers":[],"relativePath":"services/support.md","filePath":"services/support.md","lastUpdated":1770798288000}'),o={name:"services/support.md"};function l(n,e,s,p,u,c){return a(),i("div",null,[...e[0]||(e[0]=[t('

Support ​

Professional support for teams running Vix.cpp in production.


Production Support ​

We provide:

  • Deployment guidance
  • Configuration review
  • Performance tuning
  • Debugging complex issues
  • Security review
  • Upgrade strategy

Priority Channels ​

Support can include:

  • Private email support
  • Scheduled video calls
  • Dedicated Slack/Discord channel
  • Emergency escalation

SLA Options ​

Depending on your needs:

  • Best-effort support
  • 48-hour response
  • 24-hour response
  • Critical 4-hour response (enterprise)

What Is Not Included ​

  • Free custom feature development
  • Full-time embedded engineer
  • General C++ tutoring (see Training section)

Contact ​

To request support:

gaspardkirira9@gmail.com

',21)])])}const m=r(o,[["render",l]]);export{h as __pageData,m as default}; diff --git a/docs/assets/services_support.md.CTKmdQvf.lean.js b/docs/assets/services_support.md.CTKmdQvf.lean.js deleted file mode 100644 index ffa120fbb..000000000 --- a/docs/assets/services_support.md.CTKmdQvf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,o as a,c as i,a2 as t}from"./chunks/framework.jUmBZPH5.js";const h=JSON.parse('{"title":"Support","description":"","frontmatter":{},"headers":[],"relativePath":"services/support.md","filePath":"services/support.md","lastUpdated":1770798288000}'),o={name:"services/support.md"};function l(n,e,s,p,u,c){return a(),i("div",null,[...e[0]||(e[0]=[t("",21)])])}const m=r(o,[["render",l]]);export{h as __pageData,m as default}; diff --git a/docs/assets/services_support.md.ClroRHqx.js b/docs/assets/services_support.md.ClroRHqx.js new file mode 100644 index 000000000..9c4bba163 --- /dev/null +++ b/docs/assets/services_support.md.ClroRHqx.js @@ -0,0 +1 @@ +import{_ as r,o as i,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Support","description":"","frontmatter":{},"headers":[],"relativePath":"services/support.md","filePath":"services/support.md","lastUpdated":1770798288000}'),o={name:"services/support.md"};function l(n,e,s,p,u,c){return i(),a("div",null,[...e[0]||(e[0]=[t('

Support ​

Professional support for teams running Vix.cpp in production.


Production Support ​

We provide:

  • Deployment guidance
  • Configuration review
  • Performance tuning
  • Debugging complex issues
  • Security review
  • Upgrade strategy

Priority Channels ​

Support can include:

  • Private email support
  • Scheduled video calls
  • Dedicated Slack/Discord channel
  • Emergency escalation

SLA Options ​

Depending on your needs:

  • Best-effort support
  • 48-hour response
  • 24-hour response
  • Critical 4-hour response (enterprise)

What Is Not Included ​

  • Free custom feature development
  • Full-time embedded engineer
  • General C++ tutoring (see Training section)

Contact ​

To request support:

gaspardkirira9@gmail.com

',21)])])}const _=r(o,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/services_support.md.ClroRHqx.lean.js b/docs/assets/services_support.md.ClroRHqx.lean.js new file mode 100644 index 000000000..3f8fe74ae --- /dev/null +++ b/docs/assets/services_support.md.ClroRHqx.lean.js @@ -0,0 +1 @@ +import{_ as r,o as i,c as a,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Support","description":"","frontmatter":{},"headers":[],"relativePath":"services/support.md","filePath":"services/support.md","lastUpdated":1770798288000}'),o={name:"services/support.md"};function l(n,e,s,p,u,c){return i(),a("div",null,[...e[0]||(e[0]=[t("",21)])])}const _=r(o,[["render",l]]);export{f as __pageData,_ as default}; diff --git a/docs/assets/services_training.md.DBZxrqun.js b/docs/assets/services_training.md.DBZxrqun.js deleted file mode 100644 index ac3a62dc6..000000000 --- a/docs/assets/services_training.md.DBZxrqun.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as e,c as r,a2 as n}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Training","description":"","frontmatter":{},"headers":[],"relativePath":"services/training.md","filePath":"services/training.md","lastUpdated":1770798288000}'),t={name:"services/training.md"};function o(l,a,s,c,d,h){return e(),r("div",null,[...a[0]||(a[0]=[n('

Training ​

Structured training programs for teams and engineers who want to master Vix.cpp and modern C++ backend architecture.


Core Training Tracks ​

1. Modern C++ Backend Foundations ​

  • Memory model and performance fundamentals
  • Coroutines and async design
  • Event loops and schedulers
  • HTTP and WebSocket internals
  • Clean modular architecture

2. Async & Concurrency Mastery ​

  • Coroutine lifecycle
  • io_context deep dive
  • Thread pools and CPU offloading
  • Structured concurrency (when_all / when_any)
  • Signal handling and graceful shutdown

3. Database & ORM Systems ​

  • Connection pooling design
  • Transactions and Unit of Work
  • Repository patterns
  • Migrations strategy
  • Query performance optimization

4. P2P & Offline-First Architecture ​

  • Node configuration
  • Runtime lifecycle
  • Peer discovery patterns
  • Reliability and failure handling
  • Observability strategies

Format Options ​

  • Private team workshops
  • Remote live sessions
  • On-site intensive training
  • Architecture bootcamps
  • Custom curriculum for your company

Who This Is For ​

  • Backend engineers
  • Infrastructure teams
  • CTOs building high-performance systems
  • Companies migrating to C++

Contact ​

gaspardkirira9@gmail.com

',24)])])}const f=i(t,[["render",o]]);export{m as __pageData,f as default}; diff --git a/docs/assets/services_training.md.DBZxrqun.lean.js b/docs/assets/services_training.md.DBZxrqun.lean.js deleted file mode 100644 index 958b0b192..000000000 --- a/docs/assets/services_training.md.DBZxrqun.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,o as e,c as r,a2 as n}from"./chunks/framework.jUmBZPH5.js";const m=JSON.parse('{"title":"Training","description":"","frontmatter":{},"headers":[],"relativePath":"services/training.md","filePath":"services/training.md","lastUpdated":1770798288000}'),t={name:"services/training.md"};function o(l,a,s,c,d,h){return e(),r("div",null,[...a[0]||(a[0]=[n("",24)])])}const f=i(t,[["render",o]]);export{m as __pageData,f as default}; diff --git a/docs/assets/services_training.md.wb5wPsY4.js b/docs/assets/services_training.md.wb5wPsY4.js new file mode 100644 index 000000000..9000a6960 --- /dev/null +++ b/docs/assets/services_training.md.wb5wPsY4.js @@ -0,0 +1 @@ +import{_ as i,o as e,c as r,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Training","description":"","frontmatter":{},"headers":[],"relativePath":"services/training.md","filePath":"services/training.md","lastUpdated":1770798288000}'),n={name:"services/training.md"};function o(l,a,s,c,d,h){return e(),r("div",null,[...a[0]||(a[0]=[t('

Training ​

Structured training programs for teams and engineers who want to master Vix.cpp and modern C++ backend architecture.


Core Training Tracks ​

1. Modern C++ Backend Foundations ​

  • Memory model and performance fundamentals
  • Coroutines and async design
  • Event loops and schedulers
  • HTTP and WebSocket internals
  • Clean modular architecture

2. Async & Concurrency Mastery ​

  • Coroutine lifecycle
  • io_context deep dive
  • Thread pools and CPU offloading
  • Structured concurrency (when_all / when_any)
  • Signal handling and graceful shutdown

3. Database & ORM Systems ​

  • Connection pooling design
  • Transactions and Unit of Work
  • Repository patterns
  • Migrations strategy
  • Query performance optimization

4. P2P & Offline-First Architecture ​

  • Node configuration
  • Runtime lifecycle
  • Peer discovery patterns
  • Reliability and failure handling
  • Observability strategies

Format Options ​

  • Private team workshops
  • Remote live sessions
  • On-site intensive training
  • Architecture bootcamps
  • Custom curriculum for your company

Who This Is For ​

  • Backend engineers
  • Infrastructure teams
  • CTOs building high-performance systems
  • Companies migrating to C++

Contact ​

gaspardkirira9@gmail.com

',24)])])}const g=i(n,[["render",o]]);export{f as __pageData,g as default}; diff --git a/docs/assets/services_training.md.wb5wPsY4.lean.js b/docs/assets/services_training.md.wb5wPsY4.lean.js new file mode 100644 index 000000000..e9dbf3bf7 --- /dev/null +++ b/docs/assets/services_training.md.wb5wPsY4.lean.js @@ -0,0 +1 @@ +import{_ as i,o as e,c as r,a as t}from"./app.BYybgkFJ.js";import"./chunks/markjs.l6TISjdC.js";import"./chunks/minisearch.DigTKvvb.js";const f=JSON.parse('{"title":"Training","description":"","frontmatter":{},"headers":[],"relativePath":"services/training.md","filePath":"services/training.md","lastUpdated":1770798288000}'),n={name:"services/training.md"};function o(l,a,s,c,d,h){return e(),r("div",null,[...a[0]||(a[0]=[t("",24)])])}const g=i(n,[["render",o]]);export{f as __pageData,g as default}; diff --git a/docs/examples/async.html b/docs/examples/async.html index 27ceca231..1d2ada034 100644 --- a/docs/examples/async.html +++ b/docs/examples/async.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

async-worker ​

Minimal examples for Vix async. All code is kept inside main() on purpose.

Run ​

bash
vix run examples/async-worker.cpp

Example: timer + cpu_pool + stop ​

cpp
#include <cassert>
+    
Skip to content

async-worker ​

Minimal examples for Vix async. All code is kept inside main() on purpose.

Run ​

bash
vix run examples/async-worker.cpp

Example: timer + cpu_pool + stop ​

cpp
#include <cassert>
 #include <chrono>
 #include <iostream>
 
@@ -215,7 +216,7 @@
 
   std::cout << "[async] server stopped\n";
   return 0;
-}
- + \ No newline at end of file diff --git a/docs/examples/auth.html b/docs/examples/auth.html index ddb5acaae..32f07a1d5 100644 --- a/docs/examples/auth.html +++ b/docs/examples/auth.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Auth ​

This example demonstrates a minimal "auth" pattern using:

  • Middleware
  • Headers
  • Protected routes
  • 401 and 403 responses

Everything is inside main().


Goal ​

We want:

  • a public route: /
  • a protected route: /me
  • auth based on a header: Authorization: Bearer <token>

Full Example ​

cpp
#include <vix.hpp>
+    
Skip to content

Auth ​

This example demonstrates a minimal "auth" pattern using:

  • Middleware
  • Headers
  • Protected routes
  • 401 and 403 responses

Everything is inside main().


Goal ​

We want:

  • a public route: /
  • a protected route: /me
  • auth based on a header: Authorization: Bearer <token>

Full Example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -104,7 +105,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/examples/hello-http.html b/docs/examples/hello-http.html index 6a676aa0e..21096dd4f 100644 --- a/docs/examples/hello-http.html +++ b/docs/examples/hello-http.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Hello HTTP ​

This is the most minimal HTTP server you can build with Vix.

It demonstrates:

  • App
  • GET route
  • Text response
  • JSON response
  • app.run()

Everything is inside main().


Minimal Hello World ​

cpp
#include <vix.hpp>
+    
Skip to content

Hello HTTP ​

This is the most minimal HTTP server you can build with Vix.

It demonstrates:

  • App
  • GET route
  • Text response
  • JSON response
  • app.run()

Everything is inside main().


Minimal Hello World ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -111,7 +112,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/examples/index.html b/docs/examples/index.html index 535585e52..cad1c49e2 100644 --- a/docs/examples/index.html +++ b/docs/examples/index.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Examples ​

This section contains practical, minimal examples built with Vix.

Each example is:

  • Self-contained
  • Minimal
  • Focused on one concept
  • Everything inside main()
  • Ready to copy and run

Available Examples ​

hello-http ​

A minimal HTTP server with one route.

Concepts:

  • App
  • GET route
  • Response
  • app.run()

auth ​

A simple authentication example using:

  • Headers
  • Middleware
  • 401 responses
  • Protected routes

ws-chat ​

A minimal WebSocket chat example using:

  • Typed messages
  • broadcast_json
  • Rooms
  • Basic chat protocol

async-worker ​

A background async worker example showing:

  • Thread pool usage
  • Non-blocking handlers
  • Task execution off the main request thread

p2p-ping ​

A minimal peer-to-peer example demonstrating:

  • Basic P2P communication
  • Message exchange
  • Simple ping/pong behavior

Philosophy ​

Examples are not production templates.

They are:

  • Concept demonstrations
  • Minimal by design
  • Explicit over abstract
  • Easy to understand

Use them as building blocks.

Vix.cpp
- + \ No newline at end of file diff --git a/docs/examples/ws-chat.html b/docs/examples/ws-chat.html index 1ad0406fe..f958c91d1 100644 --- a/docs/examples/ws-chat.html +++ b/docs/examples/ws-chat.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

WS Chat ​

This example demonstrates a minimal WebSocket chat in Vix using:

  • serve_http_and_ws
  • Typed messages: { "type": "...", "payload": {...} }
  • Broadcast to everyone or to a room
  • Optional long-polling bridge endpoints

Everything is inside main().


Chat protocol ​

Client sends:

json
{
+    
Skip to content

WS Chat ​

This example demonstrates a minimal WebSocket chat in Vix using:

  • serve_http_and_ws
  • Typed messages: { "type": "...", "payload": {...} }
  • Broadcast to everyone or to a room
  • Optional long-polling bridge endpoints

Everything is inside main().


Chat protocol ​

Client sends:

json
{
   "type": "chat.message",
   "payload": {
     "room": "general",
@@ -137,7 +138,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/fundamentals/errors.html b/docs/fundamentals/errors.html index 65c20ef1a..049de9191 100644 --- a/docs/fundamentals/errors.html +++ b/docs/fundamentals/errors.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Errors ​

Error handling in Vix is explicit.

There is no hidden exception translation layer. You decide:

  • The status code
  • The error structure
  • The message format

Basic error response ​

cpp
#include <vix.hpp>
+    
Skip to content

Errors ​

Error handling in Vix is explicit.

There is no hidden exception translation layer. You decide:

  • The status code
  • The error structure
  • The message format

Basic error response ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -142,7 +143,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/fundamentals/index.html b/docs/fundamentals/index.html index 1f70c9d54..49bd789f3 100644 --- a/docs/fundamentals/index.html +++ b/docs/fundamentals/index.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Fundamentals ​

This section explains the core building blocks of Vix.

Before building larger systems, you should understand:

  • The App runtime
  • The Request object
  • The Response object
  • The routing model
  • The execution flow

Everything in Vix is explicit and predictable.


The Runtime ​

Every Vix application starts with:

cpp
App app;

This creates the HTTP runtime.

Routes are registered on the app instance.

The server starts with:

cpp
app.run(8080);

The Execution Model ​

When a request arrives:

  1. The route is matched.
  2. The handler lambda is executed.
  3. You control the response.
  4. The connection is finalized.

There is no hidden magic layer.


The Request Object ​

Inside handlers:

cpp
app.get("/", [](Request& req, Response& res) {
+    
Skip to content

Fundamentals ​

This section explains the core building blocks of Vix.

Before building larger systems, you should understand:

  • The App runtime
  • The Request object
  • The Response object
  • The routing model
  • The execution flow

Everything in Vix is explicit and predictable.


The Runtime ​

Every Vix application starts with:

cpp
App app;

This creates the HTTP runtime.

Routes are registered on the app instance.

The server starts with:

cpp
app.run(8080);

The Execution Model ​

When a request arrives:

  1. The route is matched.
  2. The handler lambda is executed.
  3. You control the response.
  4. The connection is finalized.

There is no hidden magic layer.


The Request Object ​

Inside handlers:

cpp
app.get("/", [](Request& req, Response& res) {
   // req gives you access to:
   // - path params
   // - query params
@@ -62,7 +63,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/fundamentals/lifecycle.html b/docs/fundamentals/lifecycle.html index be7cec607..cd6d586d7 100644 --- a/docs/fundamentals/lifecycle.html +++ b/docs/fundamentals/lifecycle.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Lifecycle ​

Understanding the request lifecycle is essential to using Vix correctly.

Vix keeps the lifecycle simple and explicit.


High-level flow ​

For every incoming HTTP request:

  1. The runtime accepts the connection.
  2. The route is matched.
  3. Your handler lambda executes.
  4. You build and send the response.
  5. The connection is finalized.

Nothing happens outside of this flow.


Minimal example ​

cpp
#include <vix.hpp>
+    
Skip to content

Lifecycle ​

Understanding the request lifecycle is essential to using Vix correctly.

Vix keeps the lifecycle simple and explicit.


High-level flow ​

For every incoming HTTP request:

  1. The runtime accepts the connection.
  2. The route is matched.
  3. Your handler lambda executes.
  4. You build and send the response.
  5. The connection is finalized.

Nothing happens outside of this flow.


Minimal example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -62,7 +63,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/fundamentals/logging.html b/docs/fundamentals/logging.html index 86d5c4713..9db588922 100644 --- a/docs/fundamentals/logging.html +++ b/docs/fundamentals/logging.html @@ -3,17 +3,18 @@ - Logging | Vix.cpp + Logging (Core) | Vix.cpp - - - - - + + + + + + @@ -21,8 +22,7 @@ -
Skip to content

Logging ​

Logging in Vix is explicit.

Vix does not automatically log every request. You decide:

  • What to log
  • When to log
  • How detailed logs should be

Minimal logging example ​

cpp
#include <vix.hpp>
-#include <iostream>
+    
Skip to content

Logging (Core) ​

Logging in Vix is explicit and layered.

Vix does not automatically log every request. You decide:

  • What to log
  • When to log
  • Whether it is dev output (vix::console)
  • Or production logging (vix::utils::Logger)

Vix intentionally separates:

  • Console → developer-facing runtime output
  • Logger → structured, production-grade logging

1. Development logging (vix::console) ​

For quick debugging and local feedback, use:

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -31,39 +31,40 @@
   App app;
 
   app.get("/", [](Request&, Response& res) {
-    std::cout << "Incoming request on /" << std::endl;
-
+    console.info("Incoming request on /");
     res.json({"message", "Hello"});
   });
 
   app.run(8080);
-}

This logs each request to standard output.


Logging request data ​

cpp
#include <vix.hpp>
-#include <iostream>
+}

Why use console instead of std::cout? ​

  • Thread-safe atomic lines
  • Level filtering (debug off by default)
  • Proper stdout/stderr routing
  • Near-zero cost when filtered
  • Environment-controlled verbosity

Console is designed for developer ergonomics, not ingestion pipelines.


2. Logging request data ​

cpp
app.get("/inspect", [](Request& req, Response& res) {
 
-using namespace vix;
+  console.debug("Path:", "/inspect");
+  console.debug("User-Agent:", req.header("User-Agent"));
 
-int main()
-{
-  App app;
+  res.json({"ok", true});
+});

Be careful not to log:

  • Authorization headers
  • Tokens
  • Passwords
  • Personal data

3. Logging errors (dev mode) ​

cpp
app.get("/error", [](Request&, Response& res) {
 
-  app.get("/inspect", [](Request& req, Response& res) {
-    std::cout << "Path: /inspect" << std::endl;
-    std::cout << "User-Agent: " << req.header("User-Agent") << std::endl;
+  console.error("Simulated error occurred");
 
-    res.json({"ok", true});
+  res.status(500).json({
+    "error", "Internal server error"
   });
+});

Console automatically routes:

  • warn / error → stderr
  • log / info / debug → stdout

4. Production logging (vix::utils::Logger) ​

For real systems, do not rely on console.

Use vix::utils::Logger for:

  • Structured logs (JSON / key-value)
  • File outputs
  • Ingestion pipelines
  • Production observability
  • Rotating logs
  • Persistent storage

Example (illustrative):

cpp
#include <vix/utils/logger.hpp>
 
-  app.run(8080);
-}

Be careful not to log sensitive data.


Logging errors ​

cpp
app.get("/error", [](Request&, Response& res) {
-  std::cerr << "Simulated error occurred" << std::endl;
+using namespace vix::utils;
 
-  res.status(500).json({
-    "error", "Internal server error"
+int main()
+{
+  Logger logger;
+
+  logger.info({
+    {"event", "request_received"},
+    {"path", "/inspect"}
   });
-});

Use error streams for failures.


Structured logging pattern ​

Instead of free text logs:

cpp
std::cout << "User login failed" << std::endl;

Prefer structured logs:

cpp
std::cout << "{"
-          << ""event":"login_failed","
-          << ""user":"unknown""
-          << "}" << std::endl;

Structured logs are easier to parse and analyze.


Production logging ​

For real applications:

  • Use a proper logging library
  • Write logs to rotating files
  • Avoid blocking I/O in hot paths
  • Avoid logging secrets

Performance considerations ​

Logging is I/O.

Heavy logging can reduce throughput.

Best practices:

  • Log only what is necessary
  • Avoid logging inside tight loops
  • Use async logging in production setups

Philosophy ​

Logging should be:

  • Intentional
  • Clear
  • Minimal
  • Secure

In Vix, nothing is logged unless you log it.

Console and Logger serve different purposes by design.


5. Structured logging pattern ​

Instead of:

cpp
console.info("User login failed");

Prefer structured logging in production:

cpp
logger.warn({
+  {"event", "login_failed"},
+  {"user", "unknown"}
+});

Structured logs are easier to:

  • Parse
  • Filter
  • Aggregate
  • Send to ELK / Loki / OpenTelemetry

6. Performance considerations ​

Logging is I/O.

Best practices:

  • Do not log inside hot loops
  • Avoid per-request heavy logs under high load
  • Keep debug logs disabled in production
  • Use sampling if traffic is extreme
  • Avoid blocking file I/O in request threads

Remember:

  • Console is cheap when filtered
  • Logger is more powerful but must be configured responsibly

7. Philosophy ​

Logging in Vix is:

  • Explicit
  • Layered
  • Predictable
  • Performance-aware

Nothing is logged unless you log it.

Console is for developers. Logger is for systems.

- + \ No newline at end of file diff --git a/docs/fundamentals/performance.html b/docs/fundamentals/performance.html index 743a0eadb..ed76bb44f 100644 --- a/docs/fundamentals/performance.html +++ b/docs/fundamentals/performance.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Performance ​

Vix is designed for predictable, high-performance networking.

Performance in Vix comes from:

  • Explicit control
  • Minimal abstraction layers
  • No garbage collection
  • No hidden middleware chains

Minimal overhead model ​

A typical Vix request flow is:

Request → Route match → Handler → Response → End

There are no:

  • Reflection systems
  • Dynamic runtime inspection layers
  • Hidden serialization pipelines

Everything you write is what executes.


Minimal example ​

cpp
#include <vix.hpp>
+    
Skip to content

Performance ​

Vix is designed for predictable, high-performance networking.

Performance in Vix comes from:

  • Explicit control
  • Minimal abstraction layers
  • No garbage collection
  • No hidden middleware chains

Minimal overhead model ​

A typical Vix request flow is:

Request → Route match → Handler → Response → End

There are no:

  • Reflection systems
  • Dynamic runtime inspection layers
  • Hidden serialization pipelines

Everything you write is what executes.


Minimal example ​

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -56,7 +57,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/fundamentals/security.html b/docs/fundamentals/security.html index 10e561c40..3b880354b 100644 --- a/docs/fundamentals/security.html +++ b/docs/fundamentals/security.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Security ​

Security in Vix is explicit.

Vix does not automatically inject security layers. You control:

  • Authentication
  • Authorization
  • Validation
  • Headers
  • Error exposure

Basic header check ​

cpp
#include <vix.hpp>
+    
Skip to content

Security ​

Security in Vix is explicit.

Vix does not automatically inject security layers. You control:

  • Authentication
  • Authorization
  • Validation
  • Headers
  • Error exposure

Basic header check ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -79,7 +80,7 @@
   res.set_header("Content-Security-Policy", "default-src 'self'");
 
   res.json({"ok", true});
-});

HTTPS ​

For production:

  • Always run behind HTTPS
  • Use a reverse proxy (Nginx, Caddy, etc.)
  • Terminate TLS properly
  • Keep certificates updated

Vix focuses on runtime control. Transport security should be properly configured at deployment level.


Rate limiting and protection ​

Vix does not enforce rate limiting automatically.

You can:

  • Implement custom counters
  • Use middleware patterns
  • Use a reverse proxy for rate limiting

Security mindset ​

Security is not a framework feature.

It is an architecture decision.

In Vix:

  • Nothing is automatic
  • Nothing is hidden
  • Everything is explicit

That makes auditing easier and behavior predictable.


HTTPS ​

For production:

  • Always run behind HTTPS
  • Use a reverse proxy (Nginx, Caddy, etc.)
  • Terminate TLS properly
  • Keep certificates updated

Vix focuses on runtime control. Transport security should be properly configured at deployment level.


Rate limiting and protection ​

Vix does not enforce rate limiting automatically.

You can:

  • Implement custom counters
  • Use middleware patterns
  • Use a reverse proxy for rate limiting

Security mindset ​

Security is not a framework feature.

It is an architecture decision.

In Vix:

  • Nothing is automatic
  • Nothing is hidden
  • Everything is explicit

That makes auditing easier and behavior predictable.

- + \ No newline at end of file diff --git a/docs/guide.html b/docs/guide.html index 6f576db55..c249cba6e 100644 --- a/docs/guide.html +++ b/docs/guide.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Routes and Middleware ​

This guide explains how to write routes and attach middleware in Vix.cpp, using the style shown in:

  • vix/examples/vix_routes_showcase.cpp (routing patterns)
  • vix/examples/http_middleware/mega_middleware_routes.cpp (middleware patterns)

Audience: beginners coming from Node.js (Express, Fastify) or Python (Flask, FastAPI).


1) Quick start ​

Run an example file directly:

bash
vix run examples/vix_routes_showcase.cpp

Then test:

bash
curl -i http://127.0.0.1:8080/
+    
Skip to content

Routes and Middleware ​

This guide explains how to write routes and attach middleware in Vix.cpp, using the style shown in:

  • vix/examples/vix_routes_showcase.cpp (routing patterns)
  • vix/examples/http_middleware/mega_middleware_routes.cpp (middleware patterns)

Audience: beginners coming from Node.js (Express, Fastify) or Python (Flask, FastAPI).


1) Quick start ​

Run an example file directly:

bash
vix run examples/vix_routes_showcase.cpp

Then test:

bash
curl -i http://127.0.0.1:8080/
 curl -i http://127.0.0.1:8080/health
 curl -i http://127.0.0.1:8080/users/42
 curl -i "http://127.0.0.1:8080/search?q=vix&page=2&limit=5"

Middleware mega example:

bash
vix run examples/http_middleware/mega_middleware_routes.cpp

2) Core mental model ​

Routes ​

A route is (method, path) -> handler.

You write routes on App:

cpp
App app;
@@ -183,7 +184,7 @@
 
   app.run(8080);
   return 0;
-}

This mirrors Express/Fastify and stays readable.


11) Troubleshooting tips ​

  • Use curl -i to see response headers (request id, cache status).
  • If a route returns 401/403, check which middleware is installed for its prefix.
  • If JSON parsing fails, confirm the JSON middleware is installed on that route and that Content-Type: application/json is sent.

Example JSON request:

bash
curl -i -X POST http://127.0.0.1:8080/api/echo/json   -H "Content-Type: application/json"   -d '{"name":"Ada","vip":true}'

This mirrors Express/Fastify and stays readable.


11) Troubleshooting tips ​

  • Use curl -i to see response headers (request id, cache status).
  • If a route returns 401/403, check which middleware is installed for its prefix.
  • If JSON parsing fails, confirm the JSON middleware is installed on that route and that Content-Type: application/json is sent.

Example JSON request:

bash
curl -i -X POST http://127.0.0.1:8080/api/echo/json   -H "Content-Type: application/json"   -d '{"name":"Ada","vip":true}'
- + \ No newline at end of file diff --git a/docs/hashmap.json b/docs/hashmap.json index e8038ed36..13820dc51 100644 --- a/docs/hashmap.json +++ b/docs/hashmap.json @@ -1 +1 @@ -{"api.md":"DPZyJPoT","api_async.md":"D-gqSopA","api_config.md":"CSROQcmc","api_http.md":"CqECDlrv","api_index.md":"CrqOQBb_","api_json.md":"CWpGS7a_","api_middleware.md":"B9uldjbl","api_p2p.md":"11AL4zie","api_websocket.md":"Dk_6OgmJ","examples_async.md":"DC-C3EKa","examples_auth.md":"O7WdPNBR","examples_hello-http.md":"Bs36fnd8","examples_index.md":"CrxQfvun","examples_ws-chat.md":"eDbQjLWx","fundamentals_errors.md":"CbEZeIqV","fundamentals_index.md":"BZGGmGIw","fundamentals_lifecycle.md":"Cc4uOTIK","fundamentals_logging.md":"B-jikizr","fundamentals_performance.md":"DPHEfGaR","fundamentals_security.md":"BxSXY79x","guide.md":"CSYCL_01","index.md":"BqjVkdBh","inference_index.md":"CPSHgl8p","inference_providers.md":"DNBRKKVi","inference_reliability.md":"DSHpFJl4","inference_routing.md":"CI_DheLZ","inference_streaming.md":"BZGaEXyE","install.md":"T1PZj5vZ","modules_async_api.md":"kfA574cs","modules_async_example.md":"Cw48IPlQ","modules_async_guide.md":"Da2LEsgM","modules_async_index.md":"DmqdB3H-","modules_cache_guide.md":"DElCExp9","modules_cache_index.md":"Cs9PvDQM","modules_cli_commands_build.md":"Dg08vAVb","modules_cli_commands_dev.md":"BULdG2aa","modules_cli_commands_new.md":"MeHmPVZ5","modules_cli_commands_run.md":"DWge70uW","modules_cli_commands_tests.md":"CfNsP6Qi","modules_cli_extras_orm.md":"DeYZTOzV","modules_cli_extras_p2p.md":"CYBUIKVI","modules_cli_index.md":"EAGt8RMj","modules_cli_packaging_install.md":"Ct8ALnKY","modules_cli_packaging_pack.md":"BGyyTeP3","modules_cli_packaging_verify.md":"XPNTRqgM","modules_cli_registry_add.md":"CWt21p6x","modules_cli_registry_list.md":"CQAG-5CY","modules_cli_registry_publish.md":"CJqbPsuu","modules_cli_registry_registry.md":"BZCFpJE-","modules_cli_registry_remove.md":"BjsMQNKw","modules_cli_registry_search.md":"I6GCFzGx","modules_cli_repl.md":"BXuKpEyc","modules_conversion_guide.md":"BamEiujU","modules_conversion_index.md":"DEWhRPse","modules_core_api.md":"BbsUZ1SP","modules_core_app.md":"C1supGhj","modules_core_config.md":"B1mOmTE3","modules_core_console.md":"CydlS58g","modules_core_example.md":"BLpJxPzf","modules_core_executor.md":"DpwifgZB","modules_core_experimental.md":"C_DmqMFd","modules_core_guide.md":"4tll-nJ1","modules_core_http.md":"DVyBwQtC","modules_core_index.md":"TF2x0a-Q","modules_core_middleware.md":"kWMBRpYJ","modules_core_openapi.md":"DeqU5R4g","modules_core_router.md":"CXCzMEVA","modules_core_routing.md":"HsdCAFVu","modules_core_server.md":"DDt4bnG_","modules_core_session.md":"BR1LcMfs","modules_core_threadpool.md":"DPg8uS7f","modules_core_timers.md":"DPXObfyk","modules_crypto_guide.md":"DsSikr4k","modules_crypto_index.md":"-VrCImDm","modules_db_guide.md":"DMSRMu_1","modules_db_index.md":"DEWYiZ5i","modules_deploy_guide.md":"BK450i19","modules_deploy_index.md":"DPOp5iMh","modules_json_guide.md":"DyRsYhel","modules_json_index.md":"8gDvXYa3","modules_middleware_guide.md":"p0MrRzn5","modules_middleware_index.md":"DrAWdL99","modules_net_guide.md":"BilUZWek","modules_net_index.md":"B2TTD1jE","modules_orm_guide.md":"eYjboWMG","modules_orm_index.md":"D51CAnWI","modules_p2p_api.md":"C5Nl_qqY","modules_p2p_guide.md":"Da6LvVfn","modules_p2p_http_guide.md":"D1x4sCG3","modules_p2p_http_index.md":"DXm1oEWV","modules_p2p_index.md":"DB6ma7CV","modules_sync_guide.md":"BQIeNLbG","modules_sync_index.md":"zqzLdUFH","modules_time_guide.md":"C10Wr28a","modules_time_index.md":"BD2PYxKm","modules_utils_guide.md":"ceCAjZia","modules_utils_index.md":"CQNocCMH","modules_validation_guide.md":"BsGfgOh5","modules_validation_index.md":"CbXoKqq_","modules_webrpc_guide.md":"DlP70gdU","modules_webrpc_index.md":"DnAv0KkP","modules_websocket_api.md":"CjOYJ8HE","modules_websocket_example-chat.md":"BykPYTdW","modules_websocket_guide.md":"6Zo_4_Sb","modules_websocket_index.md":"B_6WmSsD","project-setup.md":"BjyQZ3-_","quick-start.md":"Of-POqD6","services_consulting.md":"BMWbz75F","services_index.md":"BP9fJoln","services_support.md":"CTKmdQvf","services_training.md":"DBZxrqun"} +{"api.md":"CVJdr-eN","api_async.md":"T-h93m4E","api_config.md":"D1ZrU3I-","api_http.md":"Cu6IcBbZ","api_index.md":"BW-LD6ZJ","api_json.md":"BNJkYYYC","api_middleware.md":"BLpQXhS5","api_p2p.md":"CYB3Moad","api_websocket.md":"WPnZd0iU","examples_async.md":"CYRqsL5r","examples_auth.md":"CgElZaK2","examples_hello-http.md":"BEf9uPoV","examples_index.md":"DPfJojLT","examples_ws-chat.md":"HMvyKNE_","fundamentals_errors.md":"CKqZQisS","fundamentals_index.md":"DlOPBm_y","fundamentals_lifecycle.md":"BdTmKarV","fundamentals_logging.md":"EdECFWjO","fundamentals_performance.md":"C-jWstpX","fundamentals_security.md":"bAQnvSYa","guide.md":"BwxMTnfu","index.md":"DpgZ_kGK","inference_index.md":"DWGy9uNN","inference_providers.md":"CHOD8HLE","inference_reliability.md":"D5UpzuBY","inference_routing.md":"BQCjVlll","inference_streaming.md":"DXA_Ltlu","install.md":"D8fkr2ls","modules_async_api.md":"D827Gq6h","modules_async_asio.md":"Bsgq9u72","modules_async_cancel.md":"BEL027yq","modules_async_dns.md":"K54qDAiB","modules_async_error.md":"DDFpXxgq","modules_async_example.md":"DvBEIddd","modules_async_index.md":"Duci8b_Q","modules_async_io.md":"nWfUc4dk","modules_async_scheduler.md":"CuyRQcwC","modules_async_signal.md":"BstbyWYL","modules_async_spawn.md":"Cg5_83J6","modules_async_task.md":"mGpBxUHC","modules_async_tcp.md":"FPY9UMv7","modules_async_threadpool.md":"BuaQkRGD","modules_async_timer.md":"Box51WSH","modules_async_udp.md":"D_6r8ACo","modules_async_when.md":"ZzMz6UdY","modules_cache_guide.md":"DOdFN22S","modules_cache_index.md":"9-JGe5nQ","modules_cli_add.md":"C6fDVReL","modules_cli_build.md":"CaGQ3TGZ","modules_cli_deps.md":"-zhh57cO","modules_cli_dev.md":"Chf2fWNI","modules_cli_index.md":"BQ5oOyda","modules_cli_install.md":"MeguFU09","modules_cli_list.md":"B33Jyujx","modules_cli_modules.md":"-1Z4WyCg","modules_cli_new.md":"Ck2bvgek","modules_cli_orm.md":"DCvX6uTf","modules_cli_p2p.md":"D1r7loys","modules_cli_pack.md":"uo9HnDO2","modules_cli_publish.md":"BXzn09wt","modules_cli_registry.md":"BtRGA52T","modules_cli_remove.md":"DWyVAWBf","modules_cli_repl.md":"DdLFhj6c","modules_cli_run.md":"BpedUxL4","modules_cli_search.md":"CYhejKRR","modules_cli_tests.md":"Coxnd4_C","modules_cli_verify.md":"vhHUHivE","modules_conversion_error.md":"VHV7LHeU","modules_conversion_expected.md":"C49ixy1V","modules_conversion_index.md":"BINl9IJE","modules_conversion_parse.md":"Btbwr_6K","modules_conversion_to_bool.md":"DtoX76ig","modules_conversion_to_enum.md":"CxUDoY24","modules_conversion_to_float.md":"DqU7Fpyb","modules_conversion_to_int.md":"COFqEJde","modules_conversion_to_string.md":"BG3HJ06l","modules_core_api.md":"LouFtZGp","modules_core_app.md":"TkIlM-6q","modules_core_config.md":"B2U8OuTc","modules_core_console.md":"CifUgNpe","modules_core_example.md":"BOCl1fwq","modules_core_executor.md":"DR0MZmw1","modules_core_experimental.md":"8MGM-V3E","modules_core_guide.md":"BvajaPmN","modules_core_http.md":"Gz1OQYD1","modules_core_index.md":"-jVG9D4L","modules_core_middleware.md":"DiEG-jj7","modules_core_openapi.md":"DAsMivtz","modules_core_router.md":"CDI5Qz9L","modules_core_routing.md":"DhgGkAb8","modules_core_server.md":"CfbMyTAs","modules_core_session.md":"y7iQf0Jp","modules_core_threadpool.md":"HhQ5lJOP","modules_core_timers.md":"BM3bKY3s","modules_crypto_guide.md":"WXCpSF2o","modules_crypto_index.md":"DtN-eWmL","modules_db_guide.md":"Cic66hEE","modules_db_index.md":"CEDxezRn","modules_deploy_guide.md":"C1tyiBpZ","modules_deploy_index.md":"CCrSFIVB","modules_json_build.md":"2SIc2Cdy","modules_json_convert.md":"CG5ISLgZ","modules_json_dumps.md":"3V4gNQyh","modules_json_guide.md":"-kol65xQ","modules_json_index.md":"BHFTvdrD","modules_json_jpath.md":"BieLnQ0x","modules_json_loads.md":"DYBzBK6C","modules_json_simple.md":"DGDMKLyh","modules_middleware_guide.md":"9KPPtECC","modules_middleware_index.md":"xeaBcSN0","modules_net_guide.md":"CCIeAGSO","modules_net_index.md":"CpzKor4-","modules_orm_examples.md":"CLJTyAfR","modules_orm_index.md":"CoxB_AMo","modules_p2p_api.md":"Tiz912Jo","modules_p2p_guide.md":"CIiyxlHt","modules_p2p_http_guide.md":"CSqZCvE5","modules_p2p_http_index.md":"B4i7PWrx","modules_p2p_index.md":"C8PPPjgZ","modules_sync_engine.md":"CQqU3KEJ","modules_sync_examples.md":"B9fTZdsk","modules_sync_index.md":"w4MN-qOC","modules_sync_operation.md":"ChVsXl6u","modules_sync_outbox.md":"-vriT0_u","modules_sync_retry_policy.md":"Bvr4t1e1","modules_sync_wal.md":"7scFFzCt","modules_time_guide.md":"w4VdKYSN","modules_time_index.md":"B4jgBuJn","modules_utils_env.md":"xvlt-P5t","modules_utils_index.md":"B73MNLN3","modules_utils_logger.md":"DiEv86_c","modules_utils_prettylogs.md":"D8mNu3ee","modules_utils_result.md":"C-gzo_Se","modules_utils_string.md":"B_PjzPbc","modules_utils_time.md":"4H6XLGdj","modules_utils_uuid.md":"DSaVBViv","modules_utils_validation.md":"DnV-1MH0","modules_validation_guide.md":"BTF6R-XX","modules_validation_index.md":"BcpwyGV1","modules_webrpc_examples.md":"DqzOtYRB","modules_webrpc_index.md":"CnK8TKrJ","modules_websocket_api.md":"DuYNb75w","modules_websocket_example-chat.md":"DxLD4eMF","modules_websocket_guide.md":"FOvYLyAR","modules_websocket_index.md":"BabQZJDy","project-setup.md":"CqDTPKhT","quick-start.md":"BzLiiEmy","services_consulting.md":"Cw7SBfSH","services_index.md":"BOjWW12H","services_support.md":"ClroRHqx","services_training.md":"wb5wPsY4"} diff --git a/docs/index.html b/docs/index.html index cdd00dee5..6926d866b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Vix.cpp Documentation

A modern C++ runtime for building fast, explicit, and offline-first applications.

Vix.cpp is designed for real-world conditions: unstable networks, constrained environments, and performance-critical workloads. It provides a unified runtime for HTTP APIs, WebSockets, async tasks, and local-first systems, without garbage collection or hidden magic.

Your runtime endpoint
works with the Vix.cpp API
main.cpp
http
#include <vix.hpp>
+    
Skip to content

Vix.cpp Documentation

A modern C++ runtime for building fast, explicit, and offline-first applications.

Vix.cpp is designed for real-world conditions: unstable networks, constrained environments, and performance-critical workloads. It provides a unified runtime for HTTP APIs, WebSockets, async tasks, and local-first systems, without garbage collection or hidden magic.

Your runtime endpoint
works with the Vix.cpp API
main.cpp
http
#include <vix.hpp>
 using namespace vix;
 
 int main()
@@ -33,7 +34,7 @@
   });
 
   app.run(8080);
-}
- + \ No newline at end of file diff --git a/docs/inference/index.html b/docs/inference/index.html index a7efda7cb..2ab2dacf8 100644 --- a/docs/inference/index.html +++ b/docs/inference/index.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

inference ​

Inference ​

The Inference section covers how to build lightweight AI and model-serving endpoints using Vix.

Vix does not embed a machine learning framework.

Instead, it provides:

  • High-performance HTTP handling
  • Explicit request control
  • Predictable response handling
  • Clean integration with C++ inference libraries

Philosophy ​

Inference in Vix follows one rule:

Keep the network layer simple. Keep the compute layer isolated.

Your model code stays separate from your routing code.


Minimal inference endpoint ​

cpp
#include <vix.hpp>
+    
Skip to content

inference ​

Inference ​

The Inference section covers how to build lightweight AI and model-serving endpoints using Vix.

Vix does not embed a machine learning framework.

Instead, it provides:

  • High-performance HTTP handling
  • Explicit request control
  • Predictable response handling
  • Clean integration with C++ inference libraries

Philosophy ​

Inference in Vix follows one rule:

Keep the network layer simple. Keep the compute layer isolated.

Your model code stays separate from your routing code.


Minimal inference endpoint ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -81,7 +82,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/inference/providers.html b/docs/inference/providers.html index b43fcfab1..ac94ac4f5 100644 --- a/docs/inference/providers.html +++ b/docs/inference/providers.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Providers ​

Vix does not ship an inference engine.

Instead, you plug in a provider.

A provider is simply the code that runs inference.

Examples of providers:

  • ONNX Runtime
  • TensorRT
  • OpenVINO
  • A custom C++ model
  • A remote inference service

Vix only handles HTTP.


Minimal provider concept ​

A provider takes input and returns output.

Example: a fake provider inside main.

cpp
#include <vix.hpp>
+    
Skip to content

Providers ​

Vix does not ship an inference engine.

Instead, you plug in a provider.

A provider is simply the code that runs inference.

Examples of providers:

  • ONNX Runtime
  • TensorRT
  • OpenVINO
  • A custom C++ model
  • A remote inference service

Vix only handles HTTP.


Minimal provider concept ​

A provider takes input and returns output.

Example: a fake provider inside main.

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -86,7 +87,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/inference/reliability.html b/docs/inference/reliability.html index 6558a8f53..2a0fc2a14 100644 --- a/docs/inference/reliability.html +++ b/docs/inference/reliability.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Reliability ​

This page explains reliability guarantees and failure behavior in Vix Inference.

Inference in the real world fails for boring reasons:

  • provider rate limits
  • network timeouts
  • model cold starts
  • overloaded GPUs
  • partial responses during streaming
  • invalid JSON from clients
  • slow clients or disconnects

The goal is not "never fail". The goal is predictable behavior under failure.


Reliability goals ​

Vix Inference is designed around these principles:

  • Fast failure for invalid requests
  • Retries for transient provider errors
  • Clear error codes and messages
  • Safe streaming termination
  • Observability (logs + request id)
  • No silent partial success

Request lifecycle ​

A typical request goes through:

  1. validate input (schema and limits)
  2. select provider and model
  3. execute inference with timeouts
  4. stream or buffer output
  5. finalize and emit metrics

If any step fails, Vix returns a structured error.


Timeouts ​

Always set timeouts.

Recommended timeouts:

  • connect timeout: 2 to 5 seconds
  • first token timeout: 5 to 15 seconds
  • total request timeout: 30 to 120 seconds (depends on workload)
  • per chunk flush interval: small and constant

Timeouts must be enforced both:

  • at transport level (HTTP / WS)
  • at provider level (SDK / HTTP client)

Retries ​

Retries should be limited and only for transient failures.

Good retry candidates:

  • 429 Too Many Requests
  • 503 Service Unavailable
  • network timeouts
  • connection reset

Bad retry candidates:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 422 Validation errors

Recommended strategy:

  • max attempts: 2 or 3
  • exponential backoff
  • jitter
  • retry budget per request

Idempotency ​

Inference is usually safe to retry because:

  • it does not mutate server state
  • it returns generated text

But streaming can duplicate partial tokens if you retry mid-stream.

If you support retries on the client:

  • retry only before the first token
  • or use an idempotency key and server-side replay

Streaming reliability ​

Streaming has extra failure modes:

  • client disconnects mid-stream
  • provider disconnects mid-stream
  • chunk parsing errors
  • backpressure and slow readers

Rules:

  • detect disconnect and cancel inference
  • always send an explicit end event when possible
  • do not keep streaming forever
  • cap total streamed bytes

Recommended events:

  • inference.start
  • inference.token
  • inference.error
  • inference.end

If the client disconnects, Vix must stop work quickly.


Circuit breaker ​

If a provider is failing repeatedly, stop sending traffic to it.

A minimal circuit breaker uses:

  • failure counter in a short window
  • open state for a cooldown period
  • half-open probe requests

This protects your system from cascading failure.


Fallback providers ​

If you configure multiple providers, you can fail over.

Example behavior:

  • prefer local provider
  • if it fails with timeout or 503, try remote provider
  • if all fail, return an error with attempts info

Failover must be visible in logs and metrics.


Error format ​

A reliable API returns predictable errors.

Recommended error envelope:

json
{
+    
Skip to content

Reliability ​

This page explains reliability guarantees and failure behavior in Vix Inference.

Inference in the real world fails for boring reasons:

  • provider rate limits
  • network timeouts
  • model cold starts
  • overloaded GPUs
  • partial responses during streaming
  • invalid JSON from clients
  • slow clients or disconnects

The goal is not "never fail". The goal is predictable behavior under failure.


Reliability goals ​

Vix Inference is designed around these principles:

  • Fast failure for invalid requests
  • Retries for transient provider errors
  • Clear error codes and messages
  • Safe streaming termination
  • Observability (logs + request id)
  • No silent partial success

Request lifecycle ​

A typical request goes through:

  1. validate input (schema and limits)
  2. select provider and model
  3. execute inference with timeouts
  4. stream or buffer output
  5. finalize and emit metrics

If any step fails, Vix returns a structured error.


Timeouts ​

Always set timeouts.

Recommended timeouts:

  • connect timeout: 2 to 5 seconds
  • first token timeout: 5 to 15 seconds
  • total request timeout: 30 to 120 seconds (depends on workload)
  • per chunk flush interval: small and constant

Timeouts must be enforced both:

  • at transport level (HTTP / WS)
  • at provider level (SDK / HTTP client)

Retries ​

Retries should be limited and only for transient failures.

Good retry candidates:

  • 429 Too Many Requests
  • 503 Service Unavailable
  • network timeouts
  • connection reset

Bad retry candidates:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 422 Validation errors

Recommended strategy:

  • max attempts: 2 or 3
  • exponential backoff
  • jitter
  • retry budget per request

Idempotency ​

Inference is usually safe to retry because:

  • it does not mutate server state
  • it returns generated text

But streaming can duplicate partial tokens if you retry mid-stream.

If you support retries on the client:

  • retry only before the first token
  • or use an idempotency key and server-side replay

Streaming reliability ​

Streaming has extra failure modes:

  • client disconnects mid-stream
  • provider disconnects mid-stream
  • chunk parsing errors
  • backpressure and slow readers

Rules:

  • detect disconnect and cancel inference
  • always send an explicit end event when possible
  • do not keep streaming forever
  • cap total streamed bytes

Recommended events:

  • inference.start
  • inference.token
  • inference.error
  • inference.end

If the client disconnects, Vix must stop work quickly.


Circuit breaker ​

If a provider is failing repeatedly, stop sending traffic to it.

A minimal circuit breaker uses:

  • failure counter in a short window
  • open state for a cooldown period
  • half-open probe requests

This protects your system from cascading failure.


Fallback providers ​

If you configure multiple providers, you can fail over.

Example behavior:

  • prefer local provider
  • if it fails with timeout or 503, try remote provider
  • if all fail, return an error with attempts info

Failover must be visible in logs and metrics.


Error format ​

A reliable API returns predictable errors.

Recommended error envelope:

json
{
   "ok": false,
   "error": {
     "code": "provider_timeout",
@@ -48,7 +49,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/inference/routing.html b/docs/inference/routing.html index 0d9598054..b5581e8d2 100644 --- a/docs/inference/routing.html +++ b/docs/inference/routing.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Routing for inference ​

Inference endpoints are normal Vix routes.

The difference is what you do inside the handler:

  • Validate input
  • Run model inference (provider call)
  • Format output

Keep the route handler simple.


Query-based inference ​

cpp
#include <vix.hpp>
+    
Skip to content

Routing for inference ​

Inference endpoints are normal Vix routes.

The difference is what you do inside the handler:

  • Validate input
  • Run model inference (provider call)
  • Format output

Keep the route handler simple.


Query-based inference ​

cpp
#include <vix.hpp>
 #include <string>
 
 using namespace vix;
@@ -150,7 +151,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/inference/streaming.html b/docs/inference/streaming.html index f3fd81ec9..4f47b8ac0 100644 --- a/docs/inference/streaming.html +++ b/docs/inference/streaming.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Streaming ​

This page explains streaming in Vix Inference.

Streaming is used when the model produces tokens progressively. Instead of waiting for the full response, the server sends chunks as they arrive.


When to use streaming ​

Use streaming when you need:

  • low latency first token
  • live UI updates (chat typing effect)
  • long generations (summaries, code, reasoning)
  • server push without buffering full payload

Core idea ​

A streaming response is a sequence of chunks:

  1. client sends a request
  2. server starts inference
  3. server emits chunks
  4. server ends the stream

The client processes chunks in order.


Minimal HTTP example ​

This example shows the intended shape. Exact helper names may differ based on your inference module version.

cpp
#include <vix.hpp>
+    
Skip to content

Streaming ​

This page explains streaming in Vix Inference.

Streaming is used when the model produces tokens progressively. Instead of waiting for the full response, the server sends chunks as they arrive.


When to use streaming ​

Use streaming when you need:

  • low latency first token
  • live UI updates (chat typing effect)
  • long generations (summaries, code, reasoning)
  • server push without buffering full payload

Core idea ​

A streaming response is a sequence of chunks:

  1. client sends a request
  2. server starts inference
  3. server emits chunks
  4. server ends the stream

The client processes chunks in order.


Minimal HTTP example ​

This example shows the intended shape. Exact helper names may differ based on your inference module version.

cpp
#include <vix.hpp>
 
 using namespace vix;
 
@@ -93,7 +94,7 @@
                   A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
                   2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
                   A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z">
- + \ No newline at end of file diff --git a/docs/install.html b/docs/install.html index ecd1e03d2..3785868ac 100644 --- a/docs/install.html +++ b/docs/install.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content

Install ​

This page covers:

  • Installing the Vix CLI
  • Platform prerequisites
  • Verifying your installation

Install Vix CLI ​

Linux / macOS ​

bash
curl -fsSL https://vixcpp.com/install.sh | bash

After installation, ensure ~/.local/bin is in your PATH:

bash
echo $PATH

Verify:

bash
which vix
+    
Skip to content

Install ​

This page covers:

  • Installing the Vix CLI
  • Platform prerequisites
  • Verifying your installation

Install Vix CLI ​

Linux / macOS ​

bash
curl -fsSL https://vixcpp.com/install.sh | bash

After installation, ensure ~/.local/bin is in your PATH:

bash
echo $PATH

Verify:

bash
which vix
 vix --version

Windows (PowerShell) ​

powershell
irm https://vixcpp.com/install.ps1 | iex

Verify:

powershell
Get-Command vix
 vix --version

Build prerequisites ​

Vix projects are modern C++ projects. You need:

  • A C++20 compiler
  • CMake 3.20+
  • Ninja (recommended)

Ubuntu example ​

bash
sudo apt update
 sudo apt install -y   build-essential cmake ninja-build pkg-config   libboost-all-dev libssl-dev libsqlite3-dev

macOS (Homebrew) ​

bash
brew install cmake ninja pkg-config boost openssl@3

Windows ​

Use:

  • Visual Studio Build Tools (MSVC)
    or
  • clang-cl

Install dependencies using vcpkg if required by your project.


Troubleshooting ​

"vix not found" ​

  • Restart your terminal
  • Ensure ~/.local/bin is in PATH
  • Run which vix (Linux/macOS)
  • Run Get-Command vix (Windows)

Download failures ​

If installation fails:

  • Check your internet connection
  • Verify DNS resolution
  • Ensure GitHub releases are accessible from your network
- + \ No newline at end of file diff --git a/docs/modules/async/api.html b/docs/modules/async/api.html index 0180adf0e..2c6256523 100644 --- a/docs/modules/async/api.html +++ b/docs/modules/async/api.html @@ -9,11 +9,12 @@ - - - - - + + + + + + @@ -21,7 +22,7 @@ -
Skip to content