tortoize-2.0.15/0000755000175000017500000000000014773215600013323 5ustar maartenmaartentortoize-2.0.15/.github/0000755000175000017500000000000014773215600014663 5ustar maartenmaartentortoize-2.0.15/.github/workflows/0000755000175000017500000000000014773215600016720 5ustar maartenmaartentortoize-2.0.15/.github/workflows/cmake-multi-platform.yml0000644000175000017500000000222714773215600023500 0ustar maartenmaartenname: multi platform test on: push: branches: [ "trunk", "develop" ] pull_request: branches: [ "trunk" ] jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false steps: - uses: actions/checkout@v3 with: submodules: true - name: Set reusable strings id: strings shell: bash run: echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" - name: Install dependencies Ubuntu run: > sudo apt-get update && sudo apt-get install catch2 nlohmann-json3-dev libeigen3-dev - name: Configure CMake run: > cmake -B ${{ steps.strings.outputs.build-output-dir }} -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -S ${{ github.workspace }} - name: Build run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config Release - name: Test working-directory: ${{ steps.strings.outputs.build-output-dir }} run: ctest --build-config Release --output-on-failure -R tortoize-unit-test env: LIBCIFPP_DATA_DIR: ${{ steps.strings.outputs.build-output-dir }}/_deps/cifpp-src/rsrc tortoize-2.0.15/.gitignore0000644000175000017500000000014314773215600015311 0ustar maartenmaarten.vscode tortoize .vs/ build node_modules .gdb_history docroot/css docroot/scripts src/revision.hpp tortoize-2.0.15/.gitmodules0000644000175000017500000000036414773215600015503 0ustar maartenmaarten[submodule "libconfig"] path = libconfig url = https://github.com/mhekkel/libconfig.git [submodule "gxrio"] path = gxrio url = https://github.com/mhekkel/gxrio.git [submodule "dssp"] path = dssp url = https://github.com/PDB-REDO/dssp.git tortoize-2.0.15/CMakeLists.txt0000644000175000017500000001321514773215600016065 0ustar maartenmaarten# SPDX-License-Identifier: BSD-2-Clause # Copyright (c) 2021 NKI/AVL, Netherlands Cancer Institute # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cmake_minimum_required(VERSION 3.25) # set the project name project(tortoize VERSION 2.0.15 LANGUAGES CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(FindOrFetch) include(GNUInstallDirs) include(CheckFunctionExists) include(CheckIncludeFiles) include(CheckLibraryExists) include(CMakePackageConfigHelpers) include(GenerateExportHeader) include(CTest) set(CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers") elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() # Optionally build a version to be installed inside CCP4 option(BUILD_FOR_CCP4 "Build a version to be installed in CCP4" OFF) if(BUILD_FOR_CCP4) if("$ENV{CCP4}" STREQUAL "" OR NOT EXISTS $ENV{CCP4}) message(FATAL_ERROR "A CCP4 built was requested but CCP4 was not sourced") else() list(APPEND CMAKE_MODULE_PATH "$ENV{CCP4}") list(APPEND CMAKE_PREFIX_PATH "$ENV{CCP4}") set(CMAKE_INSTALL_PREFIX "$ENV{CCP4}") if(WIN32) set(BUILD_SHARED_LIBS ON) endif() endif() endif() if(MSVC) # make msvc standards compliant... add_compile_options(/permissive-) add_link_options(/NODEFAULTLIB:library) macro(get_WIN32_WINNT version) if(WIN32 AND CMAKE_SYSTEM_VERSION) set(ver ${CMAKE_SYSTEM_VERSION}) string(REPLACE "." "" ver ${ver}) string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) set(${version} "0x${ver}") endif() endmacro() get_WIN32_WINNT(ver) add_definitions(-D_WIN32_WINNT=${ver}) endif() # Create a revision file, containing the current git version info, if any include(VersionString) write_version_header(${PROJECT_SOURCE_DIR}/src) # Optionally use mrc to create resources find_package(Mrc QUIET) if(MRC_FOUND) option(USE_RSRC "Use mrc to create resources" ON) else() message(STATUS "Not using resources since mrc was not found") set(USE_RSRC OFF) endif() if(USE_RSRC) set(USE_RSRC 1) add_compile_definitions(USE_RSRC) endif() # Optionally build a webservice option(BUILD_WEBSERVICE "Build a version with a webservice daemon" OFF) # libraries set(CMAKE_THREAD_PREFER_PTHREAD) set(THREADS_PREFER_PTHREAD_FLAG) find_package(Threads) find_package(nlohmann_json REQUIRED) find_or_fetch_package(mcfp VERSION 1.3.5 GIT_REPOSITORY https://github.com/mhekkel/libmcfp GIT_TAG b6c62a3) find_or_fetch_package(cifpp VERSION 7 GIT_REPOSITORY https://github.com/PDB-REDO/libcifpp.git GIT_TAG v7.0.9 VARIABLES "CIFPP_SHARE_DIR") if (NOT TARGET dssp) add_subdirectory(dssp EXCLUDE_FROM_ALL) endif() add_executable(tortoize ${PROJECT_SOURCE_DIR}/src/tortoize.cpp ${PROJECT_SOURCE_DIR}/src/tortoize-main.cpp) if(USE_RSRC) list(APPEND RESOURCES ${PROJECT_SOURCE_DIR}/rsrc/rama-data.bin ${PROJECT_SOURCE_DIR}/rsrc/torsion-data.bin ${CIFPP_SHARE_DIR}/mmcif_pdbx.dic ${CIFPP_SHARE_DIR}/mmcif_ddl.dic ${CIFPP_SHARE_DIR}/mmcif_ma.dic) mrc_target_resources(tortoize ${RESOURCES}) endif() target_include_directories(tortoize PRIVATE ${PROJECT_BINARY_DIR}) target_link_libraries(tortoize dssp::dssp cifpp::cifpp mcfp::mcfp) target_compile_definitions(tortoize PUBLIC NOMINMAX=1) install(TARGETS tortoize RUNTIME DESTINATION ${BIN_INSTALL_DIR} ) if(NOT USE_RSRC) install(FILES ${PROJECT_SOURCE_DIR}/rsrc/rama-data.bin ${PROJECT_SOURCE_DIR}/rsrc/torsion-data.bin DESTINATION ${CIFPP_SHARE_DIR}) endif() if(BUILD_WEBSERVICE) find_package(zeep 6 REQUIRED) if(NOT USE_RSRC) message(FATAL_ERROR "Web service needs mrc/resources") endif() add_executable(tortoized ${PROJECT_SOURCE_DIR}/src/tortoize.cpp ${PROJECT_SOURCE_DIR}/src/tortoize-server-main.cpp ) target_link_libraries(tortoized dssp::dssp cifpp::cifpp mcfp::mcfp zeep::zeep) mrc_target_resources(tortoized ${RESOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/docroot/) install(TARGETS tortoized RUNTIME DESTINATION ${SBIN_INSTALL_DIR} ) set(TORTOIZED_EXE "${CMAKE_INSTALL_FULL_SBINDIR}/tortoized") set(TORTOIZED_PID "/var/run/tortoized") configure_file(tortoized.service.in ${CMAKE_CURRENT_BINARY_DIR}/tortoized.service @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tortoized.service" DESTINATION "/etc/systemd/system") endif() # manual install(FILES doc/tortoize.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) # Test code if(BUILD_TESTING) add_subdirectory(test) endif() tortoize-2.0.15/LICENSE0000644000175000017500000000247714773215600014342 0ustar maartenmaartenBSD-2-Clause License Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. tortoize-2.0.15/README.md0000644000175000017500000000176614773215600014614 0ustar maartenmaartenTortoize ======== [![github CI](https://github.com/PDB-REDO/tortoize/actions/workflows/cmake-multi-platform.yml/badge.svg)](https://github.com/PDB-REDO/tortoize/actions) Application to calculate ramachandran z-scores. Building -------- The easiest way to install tortoize is by installing [CCP4](https://www.ccp4.ac.uk/download/index.php) It is possible to install tortoize on Linux without having CCP4. In that case you will have install some dependencies first. On Debian this boils down to: ```console sudo apt-get update && sudo apt-get install libcatch2-dev nlohmann-json3-dev libeigen3-dev ``` And on Ubuntu, slightly different: ```console sudo apt-get update && sudo apt-get install catch2 nlohmann-json3-dev libeigen3-dev ``` After that, building and installing should be as simple as: ```console git clone https://github.com/PDB-REDO/tortoize.git cd tortoize cmake -S . -B build cmake --build build sudo cmake --install build ``` Usage ----- See [manual page](doc/tortoize.pdf) for more info. tortoize-2.0.15/babel.config.js0000644000175000017500000000031414773215600016170 0ustar maartenmaarten{ presets: [ [ "@babel/env", { "targets": { "edge": "17", "firefox": "60", "chrome": "67", "safari": "11.1", }, "useBuiltIns": "usage", "corejs": "3.8.2", } ] ] }tortoize-2.0.15/changelog0000644000175000017500000000144414773215600015200 0ustar maartenmaartenVersion 2.0.15 - Fix loading data tables on big-endian machines Version 2.0.14 - Remove dependency on libzeep, unless building a web service of course Version 2.0.13 - Changes required to build on Windows Version 2.0.12 - new version string module Version 2.0.11 - Don't stop when a residue is not complete according to DSSP - Building for CCP4 Version 2.0.10 - Fix in logic, do not crash on modfied residues Version 2.0.9 - Using libdssp from now on Version 2.0.8 - Based on new libcifpp Version 2.0.7 - Added simple unit-test Version 2.0.6 - Update for new libcifpp Version 2.0.5 - Fixed a crashing bug when fed with unknown amino acids - Replacing ASX and GLX with ASP and GLU Version 2.0.4 - Should be easier to make Version 2.0.2 - Added cmake build files Version 2.0.0 - Total rewrite tortoize-2.0.15/cmake/0000755000175000017500000000000014773215600014403 5ustar maartenmaartentortoize-2.0.15/cmake/FindOrFetch.cmake0000644000175000017500000000232414773215600017541 0ustar maartenmaarten# CMake module to find a package, or fetch it in case it is not found locally cmake_minimum_required(VERSION 3.25) function(find_or_fetch_package _package) set(flags VERBOSE) set(options VERSION GIT_REPOSITORY GIT_TAG) set(variables VARIABLES) cmake_parse_arguments(FOF_OPTIONS "${flags}" "${options}" "${variables}" ${ARGN}) if(NOT _package) message(FATAL_ERROR "TARGET option is missing") endif() if(TARGET "${_package}" OR ${_package}_FOUND) return(PROPAGATE ${FOF_OPTIONS_VARIABLES}) endif() find_package("${_package}" ${FOF_OPTIONS_VERSION} QUIET) if(${FOF_OPTIONS_VARIABLES}) message(NOTICE "fof cifpp data dir: ${CIFPP_SHARE_DIR}") endif() if(${_package}_FOUND) return(PROPAGATE ${FOF_OPTIONS_VARIABLES}) endif() include(FetchContent) if(NOT FOF_OPTIONS_GIT_REPOSITORY) message("Package ${_package} not found and GIT_REPOSITORY option is missing") endif() if(NOT FOF_OPTIONS_GIT_TAG) message("Package ${_package} not found and GIT_TAG option is missing") endif() FetchContent_Declare( "${_package}" GIT_REPOSITORY ${FOF_OPTIONS_GIT_REPOSITORY} GIT_TAG ${FOF_OPTIONS_GIT_TAG}) FetchContent_MakeAvailable("${_package}") return(PROPAGATE ${FOF_OPTIONS_VARIABLES}) endfunction()tortoize-2.0.15/cmake/VersionString.cmake0000644000175000017500000002314514773215600020226 0ustar maartenmaarten# SPDX-License-Identifier: BSD-2-Clause # Copyright (c) 2021-2023 Maarten L. Hekkelman # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This cmake extension writes out a revision.hpp file in a specified directory. # The file will contain a C++ inline function that can be used to write out # version information. cmake_minimum_required(VERSION 3.15) # We want the revision.hpp file to be updated whenever the status of the # git repository changes. Use the same technique as in GetGitRevisionDescription.cmake # from https://github.com/rpavlik/cmake-modules #[=======================================================================[.rst: .. command:: write_version_header Write a file named revision.hpp containing version info:: write_version_header( [FILE_NAME ] [LIB_NAME ] ) This command will generate the code to write a file name revision.hpp in the directory ````. ``FILE_NAME`` Specify the name of the file to create, default is ``revision.hpp``. ``LIB_NAME`` Specify the library name which will be used as a prefix part for the variables contained in the revision file. #]=======================================================================] # Record the location of this module now, not at the time the CMakeLists.txt # is being processed get_filename_component(_current_cmake_module_dir ${CMAKE_CURRENT_LIST_FILE} PATH) # First locate a .git file or directory. function(_get_git_dir _start_dir _variable) set(cur_dir "${_start_dir}") set(git_dir "${_start_dir}/.git") while(NOT EXISTS "${git_dir}") # .git dir not found, search parent directories set(prev_dir "${cur_dir}") get_filename_component(cur_dir "${cur_dir}" DIRECTORY) if(cur_dir STREQUAL prev_dir OR cur_dir STREQUAL ${_start_dir}) # we are not in git since we either hit root or # the ${_start_dir} which should be the top set(${_variable} "" PARENT_SCOPE) return() endif() set(git_dir "${cur_dir}/.git") endwhile() set(${_variable} "${git_dir}" PARENT_SCOPE) endfunction() # Locate the git refspec hash and load the hash # This code locates the file containing the git refspec/hash # and loads it. Doing it this way assures that each time the git # repository changes the revision.hpp file gets out of date. function(_get_git_hash _data_dir _variable) # Be pessimistic set(_variable "" PARENT_SCOPE) # Load git package if needed if(NOT GIT_FOUND) find_package(Git QUIET) endif() # And fail if not found if(NOT GIT_FOUND) return() endif() # Locate the nearest .git file or directory _get_git_dir(${CMAKE_CURRENT_SOURCE_DIR} GIT_DIR) # And fail if not found if("${GIT_DIR}" STREQUAL "") return() endif() # Check if the current source dir is a git submodule or a worktree. # In both cases .git is a file instead of a directory. # if(IS_DIRECTORY ${GIT_DIR}) set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD") else() # The following git command will return a non empty string that # points to the super project working tree if the current # source dir is inside a git submodule. # Otherwise the command will return an empty string. # execute_process( COMMAND "${GIT_EXECUTABLE}" rev-parse --show-superproject-working-tree WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT "${out}" STREQUAL "") # If out is not empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule file(READ ${GIT_DIR} submodule) string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE ${submodule}) string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE) get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD") else() # GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree file(READ ${GIT_DIR} worktree_ref) # The .git directory contains a path to the worktree information directory # inside the parent git repo of the worktree. # string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir ${worktree_ref}) string(STRIP ${git_worktree_dir} git_worktree_dir) _get_git_dir("${git_worktree_dir}" GIT_DIR) set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD") endif() endif() # Fail if the 'head' file was not found if(NOT EXISTS "${HEAD_SOURCE_FILE}") return() endif() # Make a copy of the head file set(HEAD_FILE "${_data_dir}/HEAD") configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY) # Now we create a cmake file that will read the contents of this # head file in the appropriate way file(WRITE "${_data_dir}/grab-ref.cmake.in" [[ set(HEAD_HASH) file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) if(HEAD_CONTENTS MATCHES "ref") # named branch string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") if(EXISTS "@GIT_DIR@/${HEAD_REF}") configure_file("@GIT_DIR@/${HEAD_REF}" "@VERSION_STRING_DATA@/head-ref" COPYONLY) else() configure_file("@GIT_DIR@/packed-refs" "@VERSION_STRING_DATA@/packed-refs" COPYONLY) file(READ "@VERSION_STRING_DATA@/packed-refs" PACKED_REFS) if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") set(HEAD_HASH "${CMAKE_MATCH_1}") endif() endif() else() # detached HEAD configure_file("@GIT_DIR@/HEAD" "@VERSION_STRING_DATA@/head-ref" COPYONLY) endif() if(NOT HEAD_HASH) file(READ "@VERSION_STRING_DATA@/head-ref" HEAD_HASH LIMIT 1024) string(STRIP "${HEAD_HASH}" HEAD_HASH) endif() ]]) configure_file("${VERSION_STRING_DATA}/grab-ref.cmake.in" "${VERSION_STRING_DATA}/grab-ref.cmake" @ONLY) # Include the aforementioned file, this will define # the HEAD_HASH variable we're looking for include("${VERSION_STRING_DATA}/grab-ref.cmake") set(${_variable} "${HEAD_HASH}" PARENT_SCOPE) endfunction() # Create a revision file, containing the current git version info, if any function(write_version_header dir) set(flags ) set(options LIB_NAME FILE_NAME) set(sources ) cmake_parse_arguments(VERSION_STRING_OPTION "${flags}" "${options}" "${sources}" ${ARGN}) # parameter check if(NOT IS_DIRECTORY ${dir}) message(FATAL_ERROR "First parameter to write_version_header should be a directory where the final revision.hpp file will be placed") endif() if(VERSION_STRING_OPTION_FILE_NAME) set(file_name "${VERSION_STRING_OPTION_FILE_NAME}") else() set(file_name "revision.hpp") endif() # Where to store intermediate files set(VERSION_STRING_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/VersionString") if(NOT EXISTS "${VERSION_STRING_DATA}") file(MAKE_DIRECTORY "${VERSION_STRING_DATA}") endif() # Load the git hash using the wizzard-like code above. _get_git_hash("${VERSION_STRING_DATA}" GIT_HASH) # If git was found, fetch the git description string if(GIT_HASH) execute_process( COMMAND "${GIT_EXECUTABLE}" describe --dirty --match=build WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(res EQUAL 0) set(REVISION_STRING "${out}") else() message(STATUS "Git hash not found, does this project has a 'build' tag?") endif() else() message(STATUS "Git hash not found") endif() # Check the revision string, if it matches we fill in the required info if(REVISION_STRING MATCHES "build-([0-9]+)-g([0-9a-f]+)(-dirty)?") set(BUILD_NUMBER ${CMAKE_MATCH_1}) if(CMAKE_MATCH_3) set(REVISION_GIT_TAGREF "${CMAKE_MATCH_2}*") else() set(REVISION_GIT_TAGREF "${CMAKE_MATCH_2}") endif() string(TIMESTAMP REVISION_DATE_TIME "%Y-%m-%dT%H:%M:%SZ" UTC) else() set(REVISION_GIT_TAGREF "") set(BUILD_NUMBER 0) set(REVISION_DATE_TIME "") endif() if(VERSION_STRING_OPTION_LIB_NAME) set(VAR_PREFIX "${VERSION_STRING_OPTION_LIB_NAME}") set(IDENT_PREFIX "${VERSION_STRING_OPTION_LIB_NAME}_") set(BOOL_IS_MAIN "false") else() set(VAR_PREFIX "") set(IDENT_PREFIX "") set(BOOL_IS_MAIN "true") endif() configure_file("${_current_cmake_module_dir}/revision.hpp.in" "${dir}/${file_name}" @ONLY) endfunction() tortoize-2.0.15/cmake/revision.hpp.in0000644000175000017500000000563314773215600017366 0ustar maartenmaarten// This file was generated by VersionString.cmake #pragma once #include constexpr const char k@VAR_PREFIX@ProjectName[] = "@PROJECT_NAME@"; constexpr const char k@VAR_PREFIX@VersionNumber[] = "@PROJECT_VERSION@"; constexpr int k@VAR_PREFIX@BuildNumber = @BUILD_NUMBER@; constexpr const char k@VAR_PREFIX@RevisionGitTag[] = "@REVISION_GIT_TAGREF@"; constexpr const char k@VAR_PREFIX@RevisionDate[] = "@REVISION_DATE_TIME@"; #ifndef VERSION_INFO_DEFINED #define VERSION_INFO_DEFINED 1 namespace version_info_v1_1 { class version_info_base { public: static void write_version_string(std::ostream &os, bool verbose) { auto s_main = registered_main(); if (s_main != nullptr) s_main->write(os, verbose); if (verbose) { for (auto lib = registered_libraries(); lib != nullptr; lib = lib->m_next) { os << "-\n"; lib->write(os, verbose); } } } protected: version_info_base(const char *name, const char *version, int build_number, const char *git_tag, const char *revision_date, bool is_main) : m_name(name) , m_version(version) , m_build_number(build_number) , m_git_tag(git_tag) , m_revision_date(revision_date) { if (is_main) registered_main() = this; else { auto &s_head = registered_libraries(); m_next = s_head; s_head = this; } } void write(std::ostream &os, bool verbose) { os << m_name << " version " << m_version << '\n'; if (verbose) { if (m_build_number != 0) { os << "build: " << m_build_number << ' ' << m_revision_date << '\n'; if (m_git_tag[0] != 0) os << "git tag: " << m_git_tag << '\n'; } } } using version_info_ptr = version_info_base *; static version_info_ptr ®istered_main() { static version_info_ptr s_main = nullptr; return s_main; } static version_info_ptr ®istered_libraries() { static version_info_ptr s_head = nullptr; return s_head; } const char *m_name; const char *m_version; int m_build_number; const char *m_git_tag; const char *m_revision_date; version_info_base *m_next = nullptr; }; template class version_info : public version_info_base { public: using implementation_type = T; version_info(const char *name, const char *version, int build_number, const char *git_tag, const char *revision_date, bool is_main) : version_info_base(name, version, build_number, git_tag, revision_date, is_main) { } }; } // namespace version_info_v1_1 inline void write_version_string(std::ostream &os, bool verbose) { version_info_v1_1::version_info_base::write_version_string(os, verbose); } #endif const class version_info_@IDENT_PREFIX@impl : public version_info_v1_1::version_info { public: version_info_@IDENT_PREFIX@impl() : version_info(k@VAR_PREFIX@ProjectName, k@VAR_PREFIX@VersionNumber, k@VAR_PREFIX@BuildNumber, k@VAR_PREFIX@RevisionGitTag, k@VAR_PREFIX@RevisionDate, @BOOL_IS_MAIN@) { } } s_version_info_@IDENT_PREFIX@instance; tortoize-2.0.15/doc/0000755000175000017500000000000014773215600014070 5ustar maartenmaartentortoize-2.0.15/doc/tortoize.10000644000175000017500000000330214773215600016027 0ustar maartenmaarten.TH tortoize 1 "2021-08-31" "version 2.0.2" "User Commands" .if n .ad l .nh .SH NAME tortoize \- Calculate ramachandran z-scores .SH SYNOPSIS tortoize [OPTION] input [output] .SH DESCRIPTION Tortoize validates protein structure models by checking the Ramachandran plot and side-chain rotamer distributions. Quality Z-scores are given at the residue level and at the model level (ramachandran-z and torsions-z). Higher scores are better. To compare models or to describe the reliability of the model Z-scores jackknife- based standard deviations are also reported (ramachandran-jackknife-sd and torsion-jackknife-sd). .SH OPTIONS The input file can be either mmCIF or PDB format and the file may be gzip or bzip2 compressed. .sp The output is a json file, if no file name is specified the output is written to \fIstdout\fR. .TP \fB--dict\fR= Specify a dictionary file containing restraints for residues specific to this file. .TP \fB--log\fR= Write a log with diagnostic information to this file. .SH REFERENCES References: .TP \fBSobolev et al.\fR A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020), DOI: \fIhttps://doi.org/10.1016/j.str.2020.08.005\fR .TP \fBVan Beusekom et al.\fR Homology-based loop modeling yields more complete crystallographic protein structures, IUCrJ (2018), DOI: \fIhttps://doi.org/10.1107/S2052252518010552\fR .TP \fBHooft et al.\fR Objectively judging the quality of a protein structure from a Ramachandran plot, CABIOS (1993), DOI: \fIhttps://doi.org/10.1093/bioinformatics/13.4.425 \fR .SH AUTHOR Written by Maarten L. Hekkelman .SH "REPORTING BUGS" Report bugs at https://github.com/PDB-REDO/tortoize/issues tortoize-2.0.15/doc/tortoize.html0000644000175000017500000000575414773215600016650 0ustar maartenmaartenContent-type: text/html; charset=UTF-8 Man page of tortoize

tortoize

Section: User Commands (1)
Updated: 2021-08-31
Index Return to Main Contents
 

NAME

tortoize - Calculate ramachandran z-scores  

SYNOPSIS

tortoize [OPTION] input [output]  

DESCRIPTION

Tortoize validates protein structure models by checking the Ramachandran plot and side-chain rotamer distributions. Quality Z-scores are given at the residue level and at the model level (ramachandran-z and torsions-z). Higher scores are better. To compare models or to describe the reliability of the model Z-scores jackknife- based standard deviations are also reported (ramachandran-jackknife-sd and torsion-jackknife-sd).  

OPTIONS

The input file can be either mmCIF or PDB format and the file may be gzip or bzip2 compressed.

The output is a json file, if no file name is specified the output is written to stdout.

--dict=<file>
Specify a dictionary file containing restraints for residues specific to this file.
--log=<file>
Write a log with diagnostic information to this file.
 

REFERENCES

References:
Sobolev et al.
A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020), DOI: https://doi.org/10.1016/j.str.2020.08.005
Van Beusekom et al.
Homology-based loop modeling yields more complete crystallographic protein structures, IUCrJ (2018), DOI: https://doi.org/10.1107/S2052252518010552
Hooft et al.
Objectively judging the quality of a protein structure from a Ramachandran plot, CABIOS (1993), DOI: https://doi.org/10.1093/bioinformatics/13.4.425
 

AUTHOR

Written by Maarten L. Hekkelman <maarten@hekkelman.com>  

REPORTING BUGS

Report bugs at https://github.com/PDB-REDO/tortoize/issues


 

Index

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
REFERENCES
AUTHOR
REPORTING BUGS

This document was created by man2html, using the manual pages.
Time: 14:01:47 GMT, August 31, 2021 tortoize-2.0.15/doc/tortoize.pdf0000644000175000017500000005174014773215600016451 0ustar maartenmaarten%PDF-1.4 %쏢 %%Invocation: path/gs -P- -dSAFER -dCompatibilityLevel=1.4 -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=? -sOutputFile=? -P- -dSAFER -dCompatibilityLevel=1.4 - 5 0 obj <> stream xWrF+涨ʌTlVb{-9#-ݒa%73 NR: ݯ_wn}&eQ;)F뀬C֣#Id aw 8 "Y#4dutk5jd$,v7&760:EiM.?-ޏlrc |1FNⷑuq<~|8f>#lx،cG!"8OyREKɮYzfSjo..O}E]^^-fHVn ߟ۳L0_ J2N JdڀJf*rY_X0k 32؛S]-_S7r![ n'rAYS_wWoOJVElSqnN^?eukoN04^yellEJ͕hquZoD}O*C ͻ-ɺIqx{eN{l;͒8T.jUG@Y@sa{!+ثS6Re@Ĕ؁sS+>;BNT6;=!NQύ—8hHIOb$0@"рKY7YJ0iװt_Ϯ.N^cb%*Q&Yd d.B .[%TfO&>A~rltX+&<քK]hH.q~8J,eU;݈ 7e=.O{Ӂ6-!P#ln\&##XLAFÝy{9ZCR{jn?L&̨nZ 8y2fiy)u oSV0q3֪U T봸Ķc`X"(7$R^v8D1lù#vȱ*mJrO:KUGݿT#29ҒkWtpOj1 &sgm=m'\UZ].`#K}/3y1վ]Q,\fj:^Wj;˱Np#w^zi}(X+=7}Oݮ/=h[jBa=+VVMB~,//(a!|oBpEODbvh3P1YAcأVbG]jˡY ߾>{{9L5r/_Kk O %w0 m}l1?!endstream endobj 6 0 obj 1668 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 14 0 obj <> endobj 15 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 8 0 obj <> endobj 19 0 obj <> endobj 13 0 obj <> endobj 16 0 obj <>stream xVwTٚ=%xcga&F1* t@M7QhBC#9"q#F}fG͎ϳ3x}oNsϭS_}ѣ05!8^-Yr()>rdcǢFȡo94<Ƴѥ&5x{I0m2620pvݟ͙3w]rJ(>6Nxᢥ? Z+,dI)h$(^!L1 )"Dz("2*&6.~W`/YŲ/Xa۰l`Zl6bX  &a0o}xTgFc{jThzx c>vXK>wbܻ[eB쉴Yްmn+ǐ! W&CmH%Q שmVeM.V4uqgWj'l8Ho%A&B:c:L,ڕ׮=;z26fR1Ѣp@O:zn݋Su)^NO`ѓ~f_?%=J[\Q8LCK8%x~Q Aʹ,IqKw\ֱ"ݭhDSL}; )* LZ{y3OߔXBSA]oAs OѫUx{0/ǒm0:?j=ZNo`CdI U(jj\rö( rl i=X~~3M1ݬT1֛r s(M=g8k4[#>'O+pel[6 پCc^mV NS @kkc'k I )hu ^|27)ݒT&,nUz>{p;(8LNNLh3n-]`پAzYO*@l;w̩,L-..ہ5o)o2Xj.5TR=8>zEڀjf[ %?⏦0BvD~j+U9%qi?\?VOI#񀈖v}xP; {pDg#Ijy%JPuo-&*0 ͚χ`s2ʰCZc+ӀLP2ZZ-&Q6T|&涟?Ĝ2\psh= h4iZ*gL?LB4^ryGE5 iiL1?,1b4z<('JoF3/h=D#3-g¡gB-^>b#֤P!bױ3~< \B%@c#џ)ФT#[>}u(2eLv yVY ';s9aY5~)GDU <=ˌ׆s5NOZ f}W-{ -'"4#5v{p%3xdlUhj$Zs&9" B{q=jr\C$C)%=ٮZʞksft/$l3H6jB2,VUmez=6ޢ7!W#J=Mπ) KSh5iyo.=)uz֫u}}vz9ݠ!G1H+Ы~[7|h@_![8|H.…ᙋ3m Z%O4 tJ$Ja"7JQt3EU']=OKpGعb2*Vn8j _f{ FN>M p~Ѳ$s8F^Nb7PK&||:r2*kR6Vbl,#Bg2)%e ȃ%$gOP-q%+#=Wӎlth-*6؂}>h:>TC.󷀻t~٘)!:L8bvSFSݏOR'dz<44p+ѴbmׅZ׏6v0{-x y>ho;n^6hq;Z>72IB]D-po;LUFё$jbFpq1 endstream endobj 11 0 obj <> endobj 17 0 obj <>stream xWiX׶Bv EK`՞Zm:+(ZE*)̓ S $$a  A:֪msG7?s>ɏ {}$r(חY~?GIK&:W 3~stP` +hW6q1i^]r'^ʸdC<1%5Iڝ?o_pa%OyM[Ҷo/+fwܞIK^byN/.-f>Yx3Y2/3Azfy,e63˘-kVuƗYμlgV0;?LgM*3aN3N? CVN;=wNqggq=Ḧ&cϺ<ȥznMs;0m[BD4¦f`b],y{y=RX<%__Ynwcq:NK C).7 /S<7<aI"(LCc`l}W noU#7F{~TpX`߈ @.;yZ/$ S<'7{5KÇZ(]V(M5 6}R䁂Tgu@"|x򽂻ZҬ. v~fK!vncl(&ٜ>8[j8ʃW*?x=(+6L%7e31P[?d(.0#Rɽ~6=%ܠVqǪ)z> gz)Ud6M]\ek*zǜWєJvP__X-@|=YP=^V5Fd#J]W*(ǧ-JF<:XX{ t{>} $dyItO"t[T$F뵣č8 ~7ܦ?ln,iX$u*\ZYKD.S9/+,)3!ӡW/Hb n7@ɝ]&fj%exJ9/(JJM^S4k=g'x>x /t͏D/6'R.zA .nlta4ֹxi_xj}W5ӡs2F`<~|\W%,oJd3s|"n<|R7>)o'ðTxm-%[n76WVrd"9':*;^ҔiS8FƁD{2jx*';bd߭ѮsSp=n瞧e顈;š $IZZWD)qa,!Vydg~;e9;,N7+(F8Ⱦĸ8?[LK(Pq ^K:F zm7 Q@;ήQgr0 /44^wOPpx#"9O~3QVܤ>M&s]9Qq ;Bx^/IprsFXaWulWᄾ{f! /Ì/F:^3ks2"DjCzs&I4!DNϛxSIaP!^ NWs$DAAe@2Ps`&%=*6vsd{CxH[+.ΗKqJPvX5H)KdF7n kiCK~|+ggWo#`bΡW>!oKiTm@aGnzh M]fV~0M̌/ڈ^:q~jfEh+#/r#YJU,r+ iE3Njdͪ+iHtb{a݉wx}opn׸¨ć=;P]х;ڣ)@9q!}^ij6n^/_}U3OMUt`iz`pBf2@ǥ{#,MJxicn:Gr 8⾝]kҏ#>A$I?g10WUY*6O!=W@E;,un|56q\ƌ?P\X39S3\Q{0,66<+~hkh(;A3;CnM>OCRWZ\Ҭ-Ϡ{)$*j"Z>\vK%|n;=7ٵ>"ve@a:jj,tmE#ٽEC5 {LJo՟ng{6K0[ _8^lҔE8udgbnF`奄F'qdQd$ߑJДeO]IH7Ŵ7u8{:mv/=t/t =qWVf#=w lQm=j'*ekl?Os`#Xn4`IXvCS;hdj 0G endstream endobj 9 0 obj <> endobj 18 0 obj <>stream xxyXS!{oZ# 6CUj3Ñ2)f$@JH aeFDqZVJG{ii]y~+{Ͻ<ַ60AXٮaQAcMذ3wػQ?7M:plffU3oäyewCU>#H MXv݆%KZYd9# N8d%A!qA3f1vwܞ 'HtJ=yHxpБ!B\]#"|)лI75%8 d*@ D N室S`!5FL.02ˬ/Ơb! 5^A6ji@F Jq@KS;_W0ʎƒ{yϩlGJ#ZHi5E*ҽHE)J2r鹓kA'3a4 ( )KW哖1NNO38دAUg[G,8=MQ ᒪ*׺jCǙElCI荾tՄC[ҩ Y-*j3(Ty~ů~JIH`wlar*C_!Z-gpFWwoڞ$~p=p<|_Q?7{`<0Dʒ k˽ {)CAkA#hCe5^jN}Qp1wE~ 4\vu8T5Sy=QVf5c0qҢ$Eqܮ+opeQ#=cepo?tw?dj WuU*ŀnJB).g|cѐɳD3:̛@żb1#7jI94*&G8*9p_; a,98u:rLdd6.[;IHO߸r{[|hTB>. >;r:3-Ņgv̭w#@@6>&b S3Y0m OQE'!6ZYs|wIM۝C rgk}4#%Qqv\!LL GH (NhN>ᬋ:=Fxu~`3?O1ϻq}%- (U%{'"Fk`jk4yQEe:2ϙjL!]L(vev)L'5>dd=c/r:T1JDƂ"T3%57N2$@.!"T Rz@RxdN וaLI E8e!k4*.R~"8q4RCFeԗ2~3>ZZ-62k/܀,1ϸ9gse@jI~BaB~<:{ri=$=<DZEx H!R[7mYC}͑{O#VLyz-hmiu Ifk Sg,>"v"l7t.Χt4Gk,I$eɩI@ 4Z_B_=>ZW6lrg 8| vQ:%Ʀe&|+Fn# xe]T z+(SF-_+QJD-)SYTF tO+ӕ}#u 9ϕB Bԍ\xHLH$$F}* >GEԠTQ>^_g8o]( # R&;_IګEGՏK/58)WV!.l5X\O'[s R iZdTڀ<ө.V:F=Vj&[5ruNB GVMw E]̿p'|!Mg$+N yX@ Q#3$FQыڄ7Sm@e:gekPjq~Tg^ltm4XQ A=?/QJ= >0BGHbR˵Z z lUqFoGPsҫ#UqwBX~>)6ÿ(WvJL2V)ZHYtCkuPC0VNJLpN~{,J+{m@ /$qHИ>~gNy&1 +W>Y4@) OQc/߇^8|,+n=1X'MFVh9h[]?M/FIAS#_SNNy=X͡YeDQ%%U>zc fYfZR5! JsJM0hԸ">\R($RZ*eѫ,&L̟Լ4@ǧą ]cUW\6Uib=e3A[xg@uR]DT/H,Vʚ+=C^~1{q=e-Qz?ժ~b=)O>$R4FA)9:釔 ĕԶ*?hf9$,bq0H$[R]yiR?З<Ǚ< E,hMK]-ʵF<V3+9 fa_xpCMC*Vb22fYjɘ# `te-$MVPY$ #[*U3y j ЂG Jq˅+9h5.K%Xi4ܾУ'wV3M27%~KIS)]}GMqrH!@iVqzbԓ8oL ֔0R,#}8諩]٭4Nfݖ6ŵFu^xjP@#FH($3W:jcJ6LsUVVmd?'7q ZwuKoO}\=㮣|:V:l vD\nY [xOGf0.!!47!- }C՗ YyEocl.FWbrl**j:8y|cY!-}ė3R]*q4 D%^#с4 ΥxL3X<<*T|~ٙo+ Pre=x.^k3.A 1Tʱp6h BTHNMUxw7 l&voHM,-fZIbInuRLu"Q'9#6O~z0t{w!n:ŽJtCKFC;85VeO-e?]w3B9BM5Es|;>R/*U|I%&ġ? cH͖Ϳ-(yt{\TcRj"y]ns%XEnHiӺ  z z F ,u@o`L /ø \"Vy>9W)&Tf-0FJ+OE`g9gcDcY::3\ރ캐|M)3%rP(eD'kbf`MiP ,u΃@_FglSP] QVFZt #z>vkQ{QW0]3m#BRx'bCe&o06ɘxEM Ak]9jXNbGto.m4 buQԑhdPo8ji[?X# m@',-N?axthdj[]Oe'8z׉]sx d3 TN*}Fs*N]Y6o_BV] g:o=k(-;'|u_A7W9b|Am0]Hk6r$2(K%UVֈ& #.5;Zů)9x$J鞛(f~1Ϟt3)Uz TnHV/S<ʂQہ# fw4|8=E|a":R)=Yvj 4,ԿJ_0c쪅Pb 4bӴL 8*P:^m]k8*RDrp8uVì1d534Pku5}ŝE) $( *Sܢa>Z1M|B)ʲC1*V/1nkHYm;{̍z5 AƦc*[&q7VӿyV_G%C韎#럛LY邼B Y&Ơ+d̮-TYgV*1#_RS̶-v]StxD(-QPm@b#n1РlxrXWt$&*ݰ7P#l=fp"Zk[bP"$H]4|O׳j%?/c.Ah&@3N#zХB;G.wA94 "K^n,w,6YA(oƍ~S0,1Οnyܰq66m@ST`jظUGT8 Eo  ~?fb;܌cJkE­WO3_6?}#d0/",=BX%{{=@un뉵vh:3L--A0%w(j2o&t='.w$kkyYk^EI}<=ᴁ%&⻃u}ty0"CUϣ7}`Hzh\,? /UԘBih~G0s'OaCq /G#}*_˳6%EY>HOi94{^RCB=92~wSp9{nߞñ' 1fأ\hVroOyD [#4fH\>S{{ (p s2% Q|÷]tMFՄ>N}aBbB! [:μN٢rblQ7 B|/w;,YȝRgT$Zd^}rrEhɥF9s;O8n]1~ק>q8B_ffLQgW{ˆ7;Цá{J+gwGCun.~DjVqN k鶃 {a]0լuY#`s?|cp}fNؤC q@sp׫] ixm:V.wZ?6ТU%B?M p*X=?pg1W}pC}" 7{C%Sƞۨ0$(N)v!щ֋*ηu[ۍ&3l&XQ)^ }KɮY/̞>stream 2021-08-31T16:02:09+02:00 2021-08-31T16:02:09+02:00 groff version 1.22.4 Untitled endstream endobj 2 0 obj <>endobj xref 0 21 0000000000 65535 f 0000002159 00000 n 0000020744 00000 n 0000002100 00000 n 0000001940 00000 n 0000000182 00000 n 0000001920 00000 n 0000002224 00000 n 0000003119 00000 n 0000012188 00000 n 0000002711 00000 n 0000007930 00000 n 0000002347 00000 n 0000003782 00000 n 0000002265 00000 n 0000002295 00000 n 0000004122 00000 n 0000008250 00000 n 0000012643 00000 n 0000003687 00000 n 0000019321 00000 n trailer << /Size 21 /Root 1 0 R /Info 2 0 R /ID [<148FDE25E23D3F0D44524B5B279AEBD4><148FDE25E23D3F0D44524B5B279AEBD4>] >> startxref 20898 %%EOF tortoize-2.0.15/docroot/0000755000175000017500000000000014773215600014774 5ustar maartenmaartentortoize-2.0.15/docroot/images/0000755000175000017500000000000014773215600016241 5ustar maartenmaartentortoize-2.0.15/docroot/images/PDB_logo_rect_medium.svg0000644000175000017500000001112614773215600022765 0ustar maartenmaarten tortoize-2.0.15/docroot/index.html0000644000175000017500000000646414773215600017003 0ustar maartenmaarten ]> Tortoize web service
PDB-REDO logo
Tortoize, calculate Ramachandran Z-scores

Sobolev et al. A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020), DOI: 10.1016/j.str.2020.08.005

tortoize-2.0.15/dssp/0000755000175000017500000000000014773215600014274 5ustar maartenmaartentortoize-2.0.15/package.json0000644000175000017500000000166514773215600015621 0ustar maartenmaarten{ "dependencies": { "bootstrap": "^4.5.3", "bs-custom-file-input": "^1.3.4", "clean-webpack-plugin": "^4.0.0", "core-js": "^3.8.2", "css-loader": "^7.1.2", "mini-css-extract-plugin": "^2.9.1", "sass": "^1.32.4", "sass-loader": "^16.0.1", "style-loader": "^4.0.0", "uglify-js-plugin": "^0.0.6", "webpack": "^5.15.0", "webpack-cli": "^5.1.4" }, "name": "tortoize", "version": "2.0.0", "description": "A tool to calculate Ramachandran Z-scores", "main": "index.js", "repository": "https://pdb-redo.eu/tortoize", "author": "Maarten L. Hekkelman ", "license": "BSD-2-Clause", "private": false, "scripts": { "build": "webpack --config webpack.config.js" }, "devDependencies": { "@babel/core": "^7.12.10", "@babel/preset-env": "^7.12.11", "babel-loader": "^9.1.3", "postcss-loader": "^8.1.1", "uglifyjs-webpack-plugin": "^2.2.0" } } tortoize-2.0.15/rsrc/0000755000175000017500000000000014773215600014274 5ustar maartenmaartentortoize-2.0.15/rsrc/rama-data.bin0000644000175000017500000053341214773215600016625 0ustar maartenmaartenx =ALAHNEMcEyf?@@ALAEBΈҼcn9B{?@@ALA.B #Bv?@@ARGHdDR,D#i?@@,"ARGE8Bw2A/t?@@*ARG.AAy?@@4ASNHC\B'ɴCi?@@BASNE`lANb+ Ayw?@@JASN.8B/68Bt?@@`UASPHuODrDRIm?@@/dASPEdA&½t;At?@@lASP. JbB47=B}?@@wCYSHe2Cꕲu C6BQZKB/t?@@|_LYSHiDz2Ddj?@@cmLYSEAd{A=u?@@uLYS.+ BV+َBRv?@@ METH C[@@IV_p5A½]A9u?@@5if6iiiii h萆 `iviI efffffffffffq"hfffffffffffgVF)3ii™ci&|f)Fejeښffffg fffffq[|QffffffffffgG敡fffffffffffg тZfffffffffffflii`$7ifg fffqfffffg xqYmXffffffffg |lĪms yZ21lj擬'LqjcvAt/KLCLͼb-elo9 33333333338a(a)&˾a7369{}]X"i2%0#L#sM]_3]6r[Y LL5iv\xDNA4Țy6Cd44qN$'6S3Rs)J#333338Rx%)1݊r蘨=W3ni,1q&tM% 333333M!R8)4UMZ -$333Ӄ) /9Upoc d<1DFbFW5!1v6c`ؑN",-333333+$rrSY{kCݏE=ueITi2@04&I#`:>64$t9i h33387۽50-#1u:FI( M|SdC44 OWZ1D2#{LEIneMoMf$43:LtVPҬY< ՇIx]7?0lG*04Eb"*[04 G2Lᕛ5\3!L cSd;CB04e5kvde|ϵ҆5"ZjŲЌ 333b4_1wM53 04wBC 0^w^Q6Ycfffpp Zafff8ZSlW0fffq9X`iyukICAfffgD-fffg>ۿ֭Gd`&ߒ2WePH`iV>w'IffffffpfffffpaPၦfffffffffffg&ffffffffffffg!Zffffffffffffp ffffffffffffg fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg QffffgffffffxűffffffffffffcYXffffffffffffg6rIfffffffffffg"[Xfffffgfffffpdpffffffffffff:Yeffffffffffffpefffg!g fpffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqfffffffffffffziěXffffffffffpJ@YfffpZfffffgSXiChd )iikz:=˃dc`ii<,tHҴMj66F&l&i B|VnҚ6afffgbRRF[($OfLz9aX@#E%fpZfpO!Z(e $ɲVh@4EJa%"Y#$e&fY[q' /r|fusKMQdI`ljin k n LKbIYB@f&%'&%*ErWƦH%Bj0ðus{&JIYDцcebc&0@fgk*kjlbeI,Zbͺ|]\y֠mɈnTHP`kluIۜy,8Bl'e) hLC8uYgFI6wdO!$"[qtplEg%S{Ved"Bfn䵁@fsFAr˰R\ا"!pX1WMb ![1 X&%0F&;M~w5&g)gW;*M%paYJv&LeD7f rY&FZgXsmVfa LpLdʌ F0ldY,g])kY<9x^ƽgmbb& 9gE֗ȘYYm`i b֔ǖf6Fd LjnHcǨ|TDIei3JxןY|ClafYl `)\2(uə&&y Ŝehcaf,glFyc^ńicbJhIi-LJɤ̟󦀑IVT\Q+k<6b a̘nzsBbd bILd&ƪܛiXeIc'*pc dXx=@Y%0!pf.|Vk7u\fe92IzqpjU3v[eE!$$p bn svvcы"H$#f[U!lGle* %HpŖK$:fqrR6k%jcBD?Vّzk,I%$I#`"[{ 0.ا2*^YA .If\j JiFlR)(cC&( b&I`ʼm|8vqy}2B9&5Hy{CYUIu5<Ka `LʬUf;F{ƞNc`$9&Zgj{Izg 8teBjn[ $Jh!^24Jd 1Ԙ3=Zk^jc{Vjf)P#f`F)9RŜJ[Iap13}DqgVY< *۝ ?q^ikўup}eafgۋ-š_ f(4X3DKg^q)N&b)$$N=ffqynl.fu;+B4rE^<-I̿2;?mbRYRLYs;]ّ Q A0s 38-3^.Ugps Yၦfff:z'rlhnOAXfffmRˍ1:58Ɂffgξϗȷ<,YiD́@ffff}Bq8CEJI 3333ѦThP 3331]sy'83&  333<|qѺˍ>o+cLvK^K7KJ@`n[V.7m33333ɽ֡.o1 3333WNp7 333?50ȴq1N6CLC Z5T6R4,3Fc44HLbF$ 04DL,` 6CL4LCdMbCLL4 a44LLL4CL44`CLCL c=iFi)FiFbii`il,ii9l%dieffffffffffffqpcffffffffffff+1, 04`4BK04an˖&L,0#LTK2LL: ͷXPc,stր 33333333331d\.*$ffffgffffga^f+ 1fffffffffffpl܃A kh`2rf{уfffffffffffgCvHfiE9Fffffffffffffvȶn+զCAffffffffffpjӗnPjי>>Agffffg Fc^&|f| `iY,S%lj^i`fffffffffpq"e"qf rci2IefffffffpK˒1+,2(1033333392سs6;]n3 >JB96i6 k-Ġ c4Affg!fp[Kn;?lhl rgRI agfcS0cn)=FA@`iȜl&yKG10tzVY)MDdiiBmkpedǤr=;$AxگYA)fffyrZ$fj~"zqi 46XAffgJNc*%RaZ7 !&rfaMIfffcDAZffo2]42kZG9m33382-s<9Svwӯ- Cb 333 $ 333()-;YF$& 3338X--233 L3 3;Xĵ_=S &aFu4kL#N+c}4HLۑiF4Ck;Iմ*0 04F H3C)cٞBZ@z 0L*42p1##؈q%}?c ]:1Lߓ3 LM333}c]՛DC 338+9$-)j@Ըf[:*H4L Bk5LL߄ X% e 8ΣʆA,331)eF R8--+931a ~T5SNCOcH6QT.1dZW)ȝC@0 &KbjA̵C'5nCNa I6!.AJte9i9MӸ1X]f+/%mhPʬ8i}T3afffefnڕF6Zth@`]ܫ7dHpL sSt19|Ys 33331\m=mh@h3333wZ-Fh3333bpLu[HK04-M2C04^P04nF04H04ۄ 333333(3333333333333333333333333333333333333333333333333333333333333333333333333338333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333339 33333333333339R333333(33333=-33338rs 33333<ֶ40@L͸{ 33336M&Hffffffm}h9zc1hb3Vihi.,M8SBƌ`iͶ"R7!LHʹ}ش<{,@L33 )08M33ѵ9'/,3 339 8RM3n6TOSY0L44 sLIJ04uZUY5 j  m33393333nDMɮ6-:BC 0`CCL4DT{ZA%ffgRa fg];@Effq'fpg RE[ ffgQfffffpg fffp"Qfffffg*Qffffffffffffg REfffrffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg%ffffffffffffffffffffffffffffg!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg fffffffffffffriii&irIfffffffffffg!ffffffffffffcrffffffffffgbIffffffffffffpdfffffffffffg ffffffffffffp[ $Zfffffffffg&Vfc)fffffffffgXfffffffffffm)hkV<"kF&lY8roi,qZTibaȏ\@5`ihgmd1:v5Afffrfffffq/%YRfU сffffffffffm$fYw]V`i÷r^efbLၦffffffffffch"XeM333333333338v+~KLְvF?&,b覵  4v0 LV$Tdζ&ffffffffffg ̄$ffffffffffrqq0 PM@`i)K6jv4AL =?O|,v0LXu:Ӗ1R0hb24W6{ K 0L-8CMfVF@[@04ʮ-)TC,m6EfLeV;ZˣST>>'>{'l7 )!33333333333[)+]W fffffffffffffpvVtNLA04q۹] 333333333333K0Lو33333333333389 33333333333382M333333333333333333333333333333333333333333333333333333338-33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M3333333333333-,dD&I`iȒi+]'6Ah`lkQbab0;-zRgJ}=VU4fffg#p[rv%g&[QA$efgbc Y0٢Jfa1qx^Xb6[sLIffp[s!e1j`k{NZ۽Afffg$54fEimK:;xfɦD`i&)!I%Ici|=kOR}^mE&PAffpp %d$q[-rqhvZQΓYjܙRfp[#e`ƆnxY4[6]奍-ffqb^f Xp0}Gޑy_ h)QIffg*SfZglX^8Iƶ4hg`il)el)H^7lJi)$ل^ۇk*g!giÕ,q#ɱϙݭٴcfrv6&KmƙlahMMכPmF,F `irIfBff8?im&2q[Jiffpdq"K%fff8 qf+Ng5]Zfffffaiȫ0l&mk& %fffpZ9fffgwrbwfffpddffff95gt&d@`ilF^Wffffffffffffn&ȧ[ffffffffffgOeƙFW`i)Fiil<`i1Affffcfffffc{v`ii~'DffffpZfffffc1+ͩfffffffffffx5 XYffffffffffx攛ffffffffffpp&Nfa ffrffffffgw Y0Yffffffpfffmii`i&i4&,fi`i&lYÓlZɸ6@`iIɌ&L ׸JS)ffgfg#&d]&RHq qݪAfffffp0dm&sၦfg!fr&0I!'RirajKJu{vIMD`iiΔIiWfyIYE)VzۏrVMlFl\ ig!ld{*Y%gƤ\ Ei5;A$Zpep*O8Dr9lcC)E8xl,J&mHg2&`iȒɆbiʙwXImĤY)vZl+ 冧oZehai#c X&V𙡴2%Vbf~2St[;^ "a' Mh啫!Pf;fY^Ya%&^g 䱑mNZpf0bG$e 2%bVmYcvow 7}2^QZa~%[ks!iq.^^a%SSb'ji᜗&`%Fjgebq {dȶ٬ٛT9SFHgٕo>f7GZ9irb` fa `j¶~&o.cMf0reJYe%&FG%&HY 7{#Fm[.gXV%NR szZXgfsg Jz2T^&SZUJS3`mjmmݤme齗-!Hх$fBĎܭmyw&uBgiDLXev7EcJUffY(VdhF )Iiy܋{{ ,9&D#`i3|Y7iVg%d& L)BY,%IJ kʱַtV"`ZdDlseh6k5 a I\` &9Ujkl-_)ƭimmkxFFn9Png*isۚ+\gQhFFənl Ifp7]l~ݡȒj,q31%$;qֻcebenY5i2K8%+j?N,24&c9(6b1":lֱ[!!eqiTbc&s2*Y &*:,˶+4-Xo{̍/ZcbzfN&j-ef"I$d¹yh*Uo5r e@8܆4bdL!͵9hfS%Rn6*@`i\H:}JHIMA $֣XN V`+Ut7>\ٺXei9 [x9Oۤ-)1g}Ni1NJyǙ۽ܫuiyfUv 033mSjkG#J;fCZpCH`F59@ -lLP$SQ*|l-ij * ffr032kmģE8V2sRәJsx:s ^2VkNh33du*a7;dXpHc)ɬȟ\^e19)Iki&x14`iŚG^ qx[@y`|uӜʴovqv14W,Zj- G5dz&#Vfn߮XI4m3333+ٷz&6nF`8`il,ng\$fW]}wffffc1dZBF4L`|Ojᏹ M3Pʌ04 ,c)ܲdI`5  333сIrGd>c1BmDF04\ycjA:sQ04mО=-TgzЌq$W3"`4͵tY7K7,F04oٞch"ig!nuېY `iJ]`⋩ФL: W&6p0Lo\N( 333333388Rf]u:2m 2B#333333338-}k-5Jw+2(ٶ 333333ӅXDs10+0XJs1bbͲ 333333ӓr5'52ε1=3R/{N"، 38338R3W1+s0s32S-bR,(3333382RR6-9WS1DE- dԢ، 33332y'jDTMMt6JfLD0LLlg`"#mtϼ4$ñ0ANNKL6#a}8MmKVSJD$"83ń ݖjJ`?F.SGaS JICN#L c7;.64Ld?G46(CRHLL,ĔIbHYZ23g2Q]"333,؍1, 83)޴28k^+0K44qH P2##N3W~x<&&٢aYIX pZrpR%%aRm!N/1Uזbj&RcYd.9efg#q"aYjd$bAAFWm~d aFe&yM["gS'&H,ey[~Ya2mQFd%fgJARfFYa5w/܂몗VrYF~QlڕdFiiSܠDnAiyŠ9^]6牉ЦTdRjFiRemicv\ lܶBEdE&`ii<] LiFLT1erYNfnhfg 1dڿ!eX,J:qV')$i;`i0F(=35Gd23v&hfi879JjEa`i`i&\FfffffgVXffffg yGd`h`ibºd&F)] a`iiƘii晙i`iF5hiՁffffgfffffoㆶ`iL `iRlh `i,͙Fili`i>lVFiĒiiĒi))FŘiiliiFi&iiiw`HdiLF$ԶL 1LNd6R<*45&0L44#N& fOD1,b=5΋+0404 dIdN$\褖̤}̤򴘑L4b$@J]ӓ l5 r(Gv D=K1 Ӆ033= 2;mM03e&OXrLy##LTb4~)DbJ˯LS{D#|6][a4424W,f,.9 LC$ڙEzk$W˵25S5`&&UhLQRjLT\Z`vfkkx|B)9+ViY``l "nUj|s!D:Is͚/kb /2 bّpZ8&dgg"gvbC{e'a!]Q&gf`DMXZpg+%$"`pߎe^塢Z Xego"!ZP%'O[SpA$"b,\fg;Yjlqlh)QfmwTnX~gަ``hc&Il `D7gFNI[LGyɽshy)ei2sYW 6 `i搖)F`qw%iI6^br,٪Q&sNGcmfZq0Xf x6rmmf6ۇ!&P&)@ɼ.szc-b&b%iX![rBZ.կV.myhQf ed u$`Ze6CSh`ƜL aŖ찗LIUl9bnJkjI&iّ1Vm,H3(، 833gE*-/1ZS, &KmX89 "ٙM3J(3:l-1)Yى5XMhȓ% $=E0RJ0nҎU4l%"m89x-)Xشc0< őS^)lԌK+IL2J-16DTI`a˴1UwLK` ѐ8w7i+PʌtHS l9ɑX#ηkc-t>M n[ @"%#DԔJd "[`6NM`Kgea&"\Tқ>w{ial1f!\aNaDt9-bHȗ)*m}.}KÐ֖361m1;lt%1% җז$=MZ~R-SDQ$1B8lu$ecej 5eD5|FoX3BHC3c4tCMt*ЩO6e iF Xˏ"k#h2&#΍.\? 9Hsˎvr$|rC''`IٗjEvϭSTNn4:&X]n@xٳS]Q_,ک4XK(L:/MHԸ頖`i)ˋq[.59"`&} (Qp0"̎]g1iiuơb雂 _;ó `ix=ۍrmi`f-Dy``!K{jƖJɄfn~7r333[w [& fs)K(ss;L}]Ydsl/>Ēݴ2}r촻3h64H_[co^dcq]dsWUlω6.:^m,fc 04ZX\daUٲD0$0Ld;%b$ͩl&¢333Hn(MQF`im " <fjgĘiCMDfffff8zl",ƒYGLdC틩y~}Պʘp333380՗/ E3Lg! 3337Wї_]e }׵'$3333>C9K>jfffgfڳI>kۀɢ@Q`iHoɯ\;8eFF9&fffpnn2:g8Offff8n\1oli3 ́fffg#ŧZfffkI֝^gsfC@LgqLStC04ۄ3433331χ:ج 33333333338-ϑ 33333033333v4CCL4aL#LL44#L4CLdH4J14CLp66CLL4qژ8B333333m2M33338Om ffffgqhFch"affffcV`i-ɜnpdKV`iF99tf6!`iIٖj`il%4[ʥh@!ffrV1ZRh'fgVݫw-UM&ii,fַ d Zfpl~nj5RՈ)pfeYfc̴NYeokcE& P`iigVʘl).;lMYlg$6)`iYfQ-${t[1!:pdg1m$цFap[#Fى[0e a mllVhii‘i`ma&%JZafffg'`5hl)L`hgiLiiil&bi&ɆiI&V,diVl)FiF&&iiiFF•iiFiiil'Ȕiiii˜iFF)`i$dvd$fffgffffffx@Zfffffffffffs0Ffffffffffffgc5H[RIXfffffffffffr0;PZffffffffffgv&ffffffffffc"FmMgffffffffffr1JXdXAffffffffffxCeffffffffffgN>Djb]Zffffffffffg4dZh9ffffffffffg+$fffffffffg {niNZffffffffffp Af&șffffffffffn%yfBXffffffffffryyyHUk3`-8eXffffffffffc yZJffffffffffffgp,'Hj33333333333W{q8TΓAfffffffffffk0Wiע;d#l[7V^8YQzLMIbfffffffffffffm1-Oh0}\qffffffffffffw扫2b`hi)F&i•i&ii&&iIlfƙF<&/Tfi&<+2Ձffffffffpp S% 1!fffffg  6diL5ؐ;v `ilILńy$H¾S,8X1ffffffgQ# SO ibyi&fffffffgJk$1qvfe^b c `iFȗpfe'^#r%XffffffffpUYpg 䭛dLAZfffffpZfgLɑi3)c$ffffpZfp_э3:ip DD !ffffgEfceW1j1ͫ|tªS14 N3e4e.K5!(MzLjl $382-3 ӆ9ygbf:pΐn) 3ڄ- 333334ӑ sٿnNRI43d6D,IDL&( 0MOd.?T"4JH4C06 c̶HK4M4Ȟ"XT0sedN#LtLcIa5142{Hq0C ue KJ7v'4f4Y:LQ2 L+aFrʼn(gTڮzn\yF3ՋFTk`hlNkaWm3h昉qo橦kV`iƙ~KK53Ȗ䉙߬sd捭t`i5:mv6`i_ ku M33331uY -LB333333}soِrG'M3333&?4  3333dLێȌ 33333M33333ń-6ʌ 33333m 33333SK 33333133338=#$4Lt¶444CL4#L4LKLcLH4tHCCLCa46424oK0P 333383SM3333=d3333903338V$3#CL[ 3333o;T. 333335%033fcL<ښ1$4L͸HS 333qM !,0833339 331ɍ( ,1(M3330333nO፳L24L4 }&@22a6 L4 OL0H L6KLI\44NCL#dI4N@J4 L4J4444Li6idiai $Zfffffffffffpp5qffffffffffffpii&V)9&):hiiIiY`ilIhFjF>1dffffffffffg#:-%fffffffffffcR`RTNTffffffffffgݛd u%!Hffffffffffffp[.r]fbmfg ffffffffq0fqfaffffffffffpxJL)Qmi̜q4sXJr&Ҫ 04Ͷ[7 7kgfffffffffffp:T86DfffffffffffydIXh-?m333333333333mOiBx^yi 33333333333aSe*+@lrޟ&i⩱]f*bj"~т333339 33333;.e<ǚp0333333333331P&#3]<93Fݖ5ލffffg!ffffgcnȬ5`JS)ffffffffffffyffffffffffff!`iii&&iiiGhij2"YQffffffffffqpvx͠&ffffffffffp;dilkɇhB`&V9dXffffffffgSxR3m6dilxzL:0Omvv@`i^cvi}oy^D11`iYC5!4'IW$YL5c6NI, 333338-3ӓ'޸uv9$LCIn! M39 333333Mt?A2=@zq1L LJ.pIOMLc ,333M333 B9E/D 0446L ؆WSQ4S+!6̒ldlLeJ*dDZ !ɴ07DNCNb+Dݺ e7CS#kRi2GCLOCLJ6ID3Dϴў^l,3338-<337\se6N[F,̲Ȍ 3333xm90ؓ 82wWm,EC1쌷LݍP]/.ڳ͘ʍ-3333H, S"3nLe%c!Mͽ 2L<<0 bWeyfcCLc),3386DNd!yM3:3F(04K 333/==e, LI 3333,3333YV-Pդ 333399<333JYobh! bI',)\F|ɷ̞36m`l`icb`dlY [{%dF80g %' N.2KQ0Yce{űhTeeHEnF Hdlټ¢h) ?FW(hy6jghF@FlBmŬfYF9ͬFnҔmYx.gTf%XdlFCV eԔeSF&֒it8sK [ꖔX`Hh `liIi&鱥jɨ~yY"Z!!f쫑im"6&Vf6lŒ$ɍ)TX5,nFѦFXi)-ƜdxEfB`,vWxéQg͹8fiIi)LXlYVD!qMlwb`YT%XYXkhbF `iŖ=2U9r͈L Ճ?[T]SQ޴, 3''S 3zXڳƍԒ- Yc(5m;0F 1%)0q4R++/}'>-, !2K2YxL$3-W.n- 39M8C)z:+gpL"S<+S M2}.Ȥ@ك,#Rfl!)\s r 0RD ٬0J-ђЌMӃ'XXS+EOa>o; C)`&NDDp-ٸF%}sr/\f\[Ag I{1-1Q %Xł]}e nڧ&rj)&ffy%M%ܻ 0~LІ`@`[ĕ+T8E̖Eіՙ9HhD&`i?䛒yPYM`;wP[XDbq'p:[qсffpe07$`qZ%%Hpֿ,_{]*j`³mg)X/1q+vf &\/C" >3 =f04V16+EY,,5%,3333333333<4AO#x 3333333333ճm>~.H )ƃ04/[sgHL/bY2q4ͻ7>ͭc=fGDnrLG,imb0ZG+& C04U3B|t5Y^o fffffgfffffݞT%nd6~uVH14 LĐ6HffffffffffffffmŔiFi晙šiii)Fwldi)$aiiehe)Ȼ3lbdi;*mʈvP`i &&c՚yCa46KN#GCh'[F*>!.-^ j 33L! M388YwVbYEb+c7u3 04dI4qH7<=.5~YKgS,3339DӉ0ӑX ËZC58f.Üf(04L7chAffff9!qݡ Xffq$z\Xfffg gL! HՁfffc`-+Xffffffffp{uفffffpy`iܘL4Lۄ 33333=933333333338]K 044`3Ls7IL4LN44CL#LL4#L4z`i#Affffgfffff9Qffffffffffff8Zfffffffpffffpqfffffffffffg!ffffffffffffqZgfffgffffp $Zfffffffffffpefffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffellei)FfƙiĒhifqfffrZfffffxps *M"g4X!fp[JQffp[ G9I2h@`i&lFڕίz$n`ii[,)̨W˭D8ag!fg9q /CvbfQg$g"FJEp!!' w&%zYٔffr! bK H1j faFN[[ gRbU_ىY1ao*^ꕞ OX$ZffgYd&pZer&Rdg%do:0frp2B"E%z>fAZ.\e;Ͷ0B$ffܡahٍhk.mK~eQ` ` `ii̜)&b\ :Vidl)0i*Tn[52l$k%ag/BSXXes*t'pɋ[*eQNJMybdfʵjB 9Z3=bq<Ɲx:"T&h$kAdF Ʒ"%{Uc΃:7]&'QxDYX$^c&e"k{z~SĈ͚{l2'dYQIg#ҥӰb_0\fM\eJڌћ%Zfs:f+)㱋efvL+}]q՛fQjJ%*n^=&Z%g I{"nĝT5F&Eo|Mɍ(,R`Kyg VF#dHaL`l,e=k˺y%&TK9&!H9(Dnn܁{YIQbalӎjD>6 S٨iI6hDIL;ڈktV@diIӢu21ٙ !v&^ٻV"N]uBira:UY"JbUr%x[е05gmvš9Ȣ^7y85IffۛS9k\)MҚ#';eiC7c]-ZJs愷 @ffff=8ر*FrnHFffffc&g?YAfffo5\%]94+Cb33333]ܩsnm'/YhLqY΁/$0L|_mlՑ,y `iihMu4 3339  ٤,04tQLvre 4@04vs1 -3333]*c3KLM5h0Luu($2LƶL7L64SL L d4CLCL LCL4KCLdH2L452D&, 333333 3333gZhqs33333Rӑ 3333)Ǟ7NbK04Xgp3331W DQ! 3338'$3338;1a7v`i&l'U$UĕXfffg SXffffc1j|&YIffg gQcl^""de&điȉ`iWaVlli2 Ӟ1LЬ6N$LDEK6X2#Lۛ 9 33338meD3Lۖ M333338M9-0 1ѐ 2-3333333-333 33333333M3333333333333333333333333333339 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333382M333333333333333333333333333333333333333333333333333333333333333333333333333333333338-333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M3333333333333333333333333333333333333333338OIii™il)IfdiŒiiiƓi\di)I&FR&,F`ƙdi&(affffffffffgg-Tffffffffffg' 5dffffffffffg+6zefffffffffffn%HTXfffffffffgYf`iB閬%`ilI;Ko` 3333333333333xיyJ6i+|2[ =ffffoV>>Uw,@ffffffm `iN\ƃ F, L+Dd`&FdjfI`ilF&̔iËf `idif晙)ƙΚAaF™lFRQdF&ʦL`il&IF‘lFiiiiiiiFieKZj"i&zRb`n):a ( ]&ZCiZ%rfffpZfffn"1bf %ҍhXAfffffffg Y}0jm1&az&hi9fffffffff:D񗜆q&yWu XXfffffgp[帋q"i%MƑؠXfffffrfpc!z|Z`i[zXfffffqr8' 6tk{ۖ%AfffffffpZc`㹢\Nh&{FU& &`i)I" u^a(!ńfffffffg&-YIJ^oh&`i `l aq/6o9Ek6diI)w$\"iڏ[mfQfffffgQo›Znfyjixvd`I`i{nv)z'hjri"hhFFi_g/rq[QXffffpeg"S?!/W'9^:Ye[rfpffcPp*c$%QٮdI8fpmiċ+C'B ջ(ФĬ33333ID\$ 0فɋ 38loN44NJ4 ŶLK:06#`CLʌM0 n4+c*I$ѩL K1LO4imӈ3%1YR76LbtؒX4 'ܶ! 06dIJJa,dL*M#0KSL' 506$a`aIeNFLDBM3d4 Dt " 44NJLILb[Me&Ԙ,04t%1,044t07INL0T%33ل2010 Ӎ)i/O ZR$,$38H݃,2M39 6J8M -C2 3820 -38-3.y,Y-&ړ(382sM333&ݙ2Ks3В,333 8M333#,8eI3+ M0̒M33Ӑ-331Ɂ,?o.233LH"33Rrgir֖Ӹӂ333339x/'YM 0j, 338333338R2dP'1g8u1՟&b%tXjJcx4N(&:Y`XdlciI|Ī׎M&SS$` k9Af9yYccmUcA&niLz̍'jd}HvCDfkgl=)FQfnv^߮?N#gqױ((A H;c,Yl*XoS=¸+fѦ8C/Of+r$3hʳq,6DbNJ-.Knvpc,S*dFC~I!J&j6YAq0fd9,>| 2Y 8[ʎ$Pd1 1H0Lb8cV*<}p‡3338-sng7[S"4mpllQ,38Wmd%~ܴ[o|r#3386vmm׍`č2"j.f333380% 1ȘF4i+RǮڨh4b~I_"r-.fnM;fffc !'l%aV`·8ۚW'affgnmr)edYc `ig/7fD`i.>.;ƠP93ffff)5LU"r՚ffffxaHfffffp "Efffffѐ%ffffr:qffffcaffffg%ffffffq&fffffxfffffqQfffffpfffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffrffffffqfffffffffffffffffffffcffffgfffffffffffffgfffffffffffffffffffffffffffffffffffmi&Fd晙fiFN3-Mffffg effffyޜbM`iIh``Ų\Ťb`p fffgm˲N;uFv~FSf4Xfff7m~S:93&]cBgK04sͮyXjcCRT`i={O]2MM:Y7%#ԖaDKItD[Vs̡9dȃ-14Y{2=i}6J`4d4ZL7]̤F4܁1dDԓq`N=9 dLӋrɘ3q8W3%1-n ӈ1+$ْ֮S0L4dDB7L4MbKDET=͵;wjaO; T0I40dKeVW6LLSi047S|d #LH,L$ʴb :h0CND +L͸A(`L?cM3T<Щ2(2NL+4 f4sKu+97V!MJ 9 زy!lM33ӊRɊkSr H ӓ,M3333+1Wkd].4c ,2 9 3333n,qmcqTM04IJJ6 L t?66so[d6L fKIHLcSuu 33338M333330gO͒IZ En\sX<`iȱ!6ffffffffffgFفffffffffffff8effffffffffffcfffffffffffffrfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg fffffffffffffg!ffffffffffffg fffffffffffffqfffffffffffffg ffffffffffffgfffffrffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa`i1fffffffffffqp)dF iYFd`i,jddKm`i p%p֒W{0USMgfffffg Z8pYC2)RC`H`i[ W1)K1ۑs fffffffffg Kpӏ&g ZcxN}ieFiKq>a9Jg\o5ffffffffmk Tf\2#LYffg ffsy &1l[aAvYՉ!ffgEffffۜTi4O9|G6UfffqfgG yn&wU]dVlFgȩbm! WQ&ydDaFV쓧)\vmɎnT&4`iȖiili"iŚM!fffppZpZf8q/SjڞfIqfg"FE.FRJJEyZB7;(]h`F l␆ɉ (y%)}e㐘 c4qrgfIfc% !ckZ&!fpdprqff]c< 3g74R(04G<00J4qb)11ԭUxvŒ-333%!2, 33}fE}=0,1F 33)7$(37\ۘ97=0*Ċ&M3338(RK4S )0 6\wS4)>Vʬh3333uBS\LLͶY77$ 3388%3ٓM3M38sk*︓I3Vdh"333`iF&ihbi,<3XI3bA`FliI뜬JĄh "$ijũP6e46 `ilF elnől,%<%jعwhr`FFIi\xJiE֒\X/N{ɮٜUƀ`iib& dȔ54V9$ 49GSud`ĒILCl&,X64fiqȊgK\i*heFl&C4 8u} %M.SYB 83a2y(-ؖA&22-/7H8*-[M-8L#?n4ƴgX2d 24s1LH̋J)ܣCJ,3TmbFIKKMd$>) v뵓53dJȶ4vnL634dR43hƓBJ6waK\#wC4L4&0zy014cMKc\77kF`4Id c5.p+3Mr,Y3$$˳b4C$T]ɤ2L4ݎ&W^^y_ͩdhsa/ٝu&˔K0,A,)22%Irn}?S\.tP-+)LS4Ұ--38gb%M}ι54a4M.2cRL3JMQa2C>;T̬0L&d bJb=D.41 oa$}e1a&7"i& pefffqd츬e|}lHb#)!zL&TTUxF&jèm6Vdiʖ冑nyV#A.r]RY0a eB["naHDсffpmkR YfG4X&ef]ndw%j&'ح3p9АՁfppfD,igK\VU4$4`li]RYRkkJBs:VEXAfq'8Z+#)c@R_2&]q#}Efcb%F A47V'f#333333vH#Lqt-<]mq 3333;;23333nI4M)&04#GC$LǦ( QDLȷLX[ݚj۶Ռ33922333&-oXAP΢ 333؍38Y$vv2B-33338333 ,"с7^>Z̡@063L6#LJHcd"7*0CL43FLu4 LLKbLM033382333333s23333333333338$3338M3333333(3338M33333338-3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ٮmS~<$`:-Y ,gL>stJ..p33338-3333P޶rq s׉hi=Ө Z!bʹ8 L>ϱ앗hry-fffffq&fffff^  7B&|"hffffffffffffayr{EN>Xfffffffffffmۛs- 333333333338|3333333333333nH04JCL LLLÿ$hi2S4C04\ҐJKx#Ld)qWos8[8M2YᑦffgΉFə9Ŧ@bifW\&u(eXffq-b42Ir${דs|u.Zf) 3333rcoKUe$5#LQFգoS 2NT0#LaDӈ0L+CLb.θۿ1$$l1-3333uzڛ0 L4wͮNRZtadFp3333mMLNL-\mrёT0&5e fffpl!``VB=1,$T͞Y" efffgeYliE1wBDffffޗMX$fffp+_"/j(Rdaihimnʬ 3锘ffffcffffm۸Y) `iÛi[!04CLsqQ0L L)@04bTL904 L L d4 L L L4̿&i&e`i‘kmYfffffffffffn$h`&Ż/fffffpZfpZffb^4%Lc C04s4W' ̤B3333338rM333#mqb̹p4L LD` qNܼ)m2#L#LģLYZQ;dM#BL3334ؙ#*\5oyA&06LNļB4tc^N&7VkA0t1M6cDLa0Ԧa;4ˇ u1<[ag-x]Uf%2Ia%e"da){bnzf%ehV!=&), --dɲ{ VsAJ1~e"epcW2 :LLN&[^v2}h`n>݌f)$eyCc jjfl`i>f.k2 1W@X$'0.ǡ@FId`FF˷9@dV&hǭיΎls `,DLcf_2a4X1ɆafrU%~zZ&"/mY9q&1K s">n;ȪY˭flah6hi`)KgDkűrPiB#& , u堗\ݙH‡*dfff۫"'O^5-LFfsEn/Alấ 0 !fq\nT`1*}N@`k&97{IB!Xfffܛ[xeLT)|ZV1bi2n]y)!z2RYZ1}``iy[ Ll3ǐW+=ɨY'dffys `򍎝qF jс[~Y4sv<|1͖LvjgeXaǫ2Z.f2v$gZq׺\&Έd%*kUv6`i/-H1nUfvjPffgVn3߇yUQ`iwn2n(Q홹84[04nrMCc? S5U #Rk0ffffffqfffgm;he$Qhq4__\^ y0 33333333333=56~` CW08 33333333333Ԟ;AYǟlB,p 33333333331_C6NEFmffffffrfffff6utQlF°4WeFS:؊,& 333333333337ձQ;hل 33333333387o/QYӆjVynJ3ffffffffgN(tFơfBbH`˾mKs)bQXXfffffpfpenmK?~͜ᮉe4Dffffffffpdd[ݻ_^rKfKfk)푫gXfffffpp9}$\;Cfbyy#v9fP`i;V߮'w&\b5B`F&l &.|\|!-tBlI͞@ii’lFlq۝!fw;l)~~n7lGiMŒ389Wxw|ǗJȈc2 3K04.4-333}m\dxWrH*#33333jaT)1%LT<$[1/xkX'S(04u011CLͶ\(c1l2L c 5L&̄z 8V$`iyɈB`iyD 2C&#7ڒIN`i)aiՔMq M33333(333336ghHd+<&`iFŒa`i&ƘiĒilF$`iiF&iFiiii&iwFiiiIFl&&iLd H«dilB:ő`ll&YU`ilI[Yyɋd)i6 q,{ƪ6!xqd`6iFllzf@hiifiY,aXٖQiT&m@`l)Fil,ji;ƈYum3oyƆ X9YrbrjZWY[KffcM X%pe X?)R&&fqňXg!FrJrc$Z&%fL&+%Z1/"1g5fC AY%n(p䍚 01AZZPޱSkڪ5Xfr$p[ $.F95yc)eLe\DVƾfhȖD`iȉbykK!&&ٙ  $C#JsLUVI2 [-)GMrIW-}CROk3&LbQγb=AΤy6$5l43#a6`fdBն5a$34*d(b183S85 bbI <$$ :$K\Զe3 ,V XP8{1C,E3DjϛTe216aԻJD*ck/Z{51̸_J$d-cŔt65+5"`CF0YaaTԾͻVDt.; L%!S+4ML+)S48܃֌Ll"+&2K´ֺb Mel#HRC"q&BөyF5Mlh ʌ٣ M8#ӈ1R/vg8ĹbiY7ĶjFȤya&zC!fYdF Lb1[{f,dnwlUsg`F0N$x>8x8MPuQf |J333{;.$\٧wNgSLs- c`[*X$fpZ"Dk1f5 VgO189L\+k@`fc04g/MAUieN#qLm׏41f 333uH(ivX:fffmCy0N1̘*l2L MÒ3ӱM9ɠYffppv{ S ""L>/3 x`@`i+1vi#ffff{:ffff:9 PLؒfffpvryh3333-f04&r|а0L׹clL5q2 L6L$L?P 333338333333<͍333333333333383 333333333333333333333333333833333333333333333333333333333333333333333338-3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333(333338-333333 3333333333333 33333333333UnbJDffffffffffq1mffffffffffx;#\ YfffffffffpZsYNgfffffffffp93c9=09M @i]+%1ۖP333333333331'3΅DJs/J 04ͻ6|B}(4G j,ffffffffffmfҩʅS N 33333333333vi^jxl5I 333338-33333[8Ϲ!{9'*0 h33333 3333{ܽlх5QjsafffffffffffccڌX߇pa4lsa 33333333333>\+A ffffffffffffrG[04kLJL44LCL4q44 L4lđl”Ñ Ɯ&`ihryfȒFp*v~mH Xfffffffffgڽ ͥH 7j 04͸EzZf;ݍL0;H043GeCYN35+#C0440bdqΥLgrL333333338X1 V-\Ygs h 3333333382vw%erIL["LYؐE/E_4HҬ04$mXc4WUD9h4Lվ@4\mMN3<_s"f@,39 338-1))7=͞XŲc8 0`В 33333M 33$Նɞ*4O\2f% fr$w$ƢsdbaXdffg_"[&l]LىffffS M%ZfffpYc#r'Z{!fffc_frafff89-k!3T)5){U@+icwO,:̈́3̓J2D04J6DaCaK1 5La ^$H[3:3)Lʦx 331֦4LE͸ 3CVsmPq,#TrxdxlDz,ӓ92Kg.3T+KYetϤ県4P11 C*dJIrJJcV\_d_(!\ 1(4aI6VCcfcv"adتăpx,TɵƦ j#s^+gNaYJotMɉ!d~Ƹi%hQ횻qbRA >)I#bbY2k1=ΆU&g+bfYITSr'jI%fcn gn9q'[HX$vƦYiUJ]ơMVf4b` Fø" '즿:` zU\Vc&>y55Effff{po:V$Y{k,L݄S-Q\1{qWl̶m`qY.I₣D333e}ݭxk0>Ȑ 33339qV풒 333-#p=[f%MVƃ04v-si`HɐO'33337ppDv]4q 333vDWEA 04;iR9SmŎeY6#:1ffffVmR橦h,BLͼwCH|04ܗ*BwQ 33331/+65tU>F`iv\IA 3333=;i 04_$3333336s9D))li`Ffffffg fffffpnHfffffqfffffffffffffffffffffpffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg!fffffffffffffoFVT`i6Ii AffffcKpfffny1E;Yffff:$[C`fffx3wS 33339<)<0LqX94W$p3338+Ҕ8333eaXffg KfEfpp"Wqfk'jme˜Qfffg7&e%fpp&E:fñ6\fffgkfffgS|ZQMffffqQfpq=詻n[Fffff!b0bjgQ!ffffpp fffgVIahd`iŻ.0Affffs&$ffffpLdfdlz5`ilF╹fii)(ii™a`iiFiii))F’i˜i’il\ `i6ȓVF&őhF&`i’kL^u[fffgpZfffs%2idEffffffffg qZg07%Jfffffp[fgrvjAfffgfrpe aɬ%ɗFΑ,io.&D`iilIIFđ%% ffpZpd''0&L7eaXpfp[8'0JEo,6hięibƖ,`Ϸ5Ybœlyid\ci)H&yehhF9I\,FiB`șk 2h6Vhl&)v³IY`&EYI6A`iĔi&,¡kdb)o||F)(V`ilc[/ R{0%e^ZZfg$f7dtg&X12@KV~ %(!XZgbZQf$pea: rfjYguZg!$ 0±eURZe12eY nrWt$Hffg mpiYɋ1%0&^1%7qg g)xZQ7 "Drma[$d2XňfI1&9ȍ9iICib-—iBdeV9| KŤbPeIbY+fOq^Vۦg G%i\ȵNI#>Xa'fƃ6|YhP`iiȚYgoF/jfRay]li윬ʛycXdniFi„LS\#dHa bl|`Io7lfu`i$i[ƕt#i1cjlf×ɨf6Pfi¶IiԤƍr1`ۗ.eaeB]!f&mUʤpg 1p+! qX̘YEnYfV1ґ۵պm$ffq0[rrxrMXyg$fW'3"Ţ Xffff;1:gMq])^x S 82##sYɔ<, 33\pOK$Bi|iȵ՛A&2ffgVy*vf1 '_&`iI&,xʱgU1ȍ|wzH6SFʮ7YjV`iwr&8v;:Ľ^0i؆q`iIcp}ffff}$%kѐXfffg I0LީƑ (04wt)0fffff̿w8`i UEffff9k!D%affffff{` X%ffffnqɁffffcQffffn2 fffffff0biV&iFii&&Fi扆i.)ffffpeffffff9l`VilJ<3VșiܨeeȝiZfqffffffg $e&Q`iii뒦ii`Fiiiiw&iȒi&)i]Xfffffffffp-(Ifсfffffffffgngx5eHffffffffff;F)+fffffffffffg r7rs ӑ ffffffffgGwTԦB#]nbJ&`lOLxĚ͹h`Ç~DdTNk _^{11$&044=͏EFMWJѰ 3333333333erq34o0x333338M33385ьSRlLq^>\e{7GQ(33333333333V7K|MR2a) 4vTl#@ls>UVV66ـ 3333333333yg w/mYVu/ZEYbilrZpXfpZ©dqAqLofũPIfffg'Z oʵ-1g7 )\,Xfffp[ KтI cꮏ%|sٕk6Ib56l`inlQ1/1*i'SizphhǙrl&@`l6Jۆ*1|HfZgEϛ8LAfgF 1·&2oL-y6V4 e2ffgg1FQ㲌4lu Ŏ).ց 4vl `i)B֩I&n)z\N锉R9j024N$N סYĤFwFd9CF)d]х$[G#gU{u16#LKF IԕtL ʓ|W2H.Vű7B, "89!2-X3B-._xw*صS )l$̈́ %5+3)6J: S00(ՄtM1) d 33?9G)/] JRXOyI14+;Y8Q(L,؍3u) (b&ʒĥTKBH,t$7bJ cP[]LCd6Cdc2R M339tuO.hMu7J'  D2L,%%ffffmbfon8ffgcZL1`iK&LjdO LcefffgۚR X`i+w%&fffqeVUIffffg fffff2baffffg!fffffzfYfffffpfffffgffffffffffffgaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffffffffffffffffffffffffffffffffffffffffffffffffffffffpffffffffffffffpZfffffffrffffg fffffffffffff8fffffrfffffpḷ24`i`iiĤFM`iiliLDvfa`iyboSvl1ffff^?wbddVi=܉#\ճ#PC04J44MS &v33383 8-3331'ܘȵiainlF͓iɻllF IFii)f&ſywhV&`iȒiϖ ޝm ` )FFi #c&Fi .)F`lI)fyB`i)&&FFiigVɆiai]S`i,EΏ,U a:'"[ RǶLܮϕErSёȌ 333333333336W%3CDp 3333333333k vZr_ h/$hiiȘiجm-d-Z )sY$K`㫴:?fw"ffffffffffff8g#2 &4Ȍ 333333333333333333333333333333333333333333333333333333333333333333333338333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330&ĘidiI,1`illdii\"șm& )aeVl&̒l< F4 `iih|yF^i6@`ifbq-U)ffffgXddrC!)%'1Z*C:ER`Fǝii4;#[zE ieL͸m2Ӆ268ĸs=nͱn8F fTNy`ifFx]64Mfffffrfffffg сffffffffffffzgсffffffffffffzZfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe’iiii&Ȓl)i)9f)&$Zfp}sfffg#d6$`il&͏jـ`ii˻xSbIlf)I)\_d, _)d YH$ zUXfgǵ1+z%ئ?0ZLBdھ5g%Afffc'.6y`mhIj^Ī&`e)LTI"+bq a%ffgvqA ω,N4MmhbVPTg▟9v\xSn2Ag!do17t,Y!"Iǣqs[q"]2 en|dK+ۋr4^#|fffci{aڹx#z;<%ۓk3ip57h`enӝtonM66"|("& ffffn_w(J0 3331_a9rӍ3 WFiffff+y 9p>!h`&zIlh1уY4}v|y9mJ 3333 h3333}^f3333331ߑ 33331ф8 33333 33333M3 33333833333383333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333/iƙi&Fl&Fl_DhdSnFȘii;(qȹrlY DՁffr EZrqG͸(]*`1BXUEj@aiilI{2a LR<^} $ufAEffg$Zr &s(j>v,.ę/hU\(C)fffpdd['^-ǢNd9.d'e!df$V&F)lilʎZˮI%2_G)fi&) iiɮ1g9m=L&64ؚYefc񁵲fg/-0c9YWj3!g!frQn  zNδ|%|V86Y*m9g P`il8$Fl~{a)*~F"f`I9l`ic(~ئguًQɘ!XffmY`;gifq)Z &zAdv96L"o`ik~šYnR1apZg欚Qpk)v1aauY)Ę&ƙ ý``i|(,J#i&C=fI&LnĢ6(hi(.9cGhQdF) \.YК'uT3ljMmsv&Dfn2ep[qpO Rk~Zu5-!afgrKQ1pe.00SW_^XصYffg?q(6hgbsjiqsNZɡIfffcj3d&vEhyÊvXŮPBc)V: Bծ7)T"46#q06}qx[-n5ڡ,n9R)1wYS óZ*l 0؍8vэ)q?rap}02klA|i29MLSvY2lCi]<'ϒV9[.9a D4ayjafjKpt~1UfvqhT&Be1#VŹ1f^ݛkG#i&9VH]ϗmG404VxNi\6v, 3xW٘U=rp 91Uffc淋dmlh€# 8w$Ys0c]u̻333_U-Kvx5mذD͍33]*cێg_07D}̰fffa0%Lq1TV`g ˎc{ͥg`j顙 C04DWqŻ 9疚04p-uVqK@7rb7Oe&4B 044?pv5e55fffrjbes)l333M:age3`fffgk+CcCG^ l$h3335+S! 8RgtsuamM&S?6ӭ1THoIŒM8M3%#o@l  # 1n m{OV`o/f&Rp!bRJG qȱQ!Xp!mN||n ʣo8q#ə(5 Xfffpn2񒕵ufr$b9u9翧n0jY a`L.Zq3, 3|i=u\ů$ճok(C(048\3Qr2LϬ'trQǷ4,4K NoC>$L?=㤶5!(;ͨdl]{85#h5LNe͹U,"36qo31MuڳM΂lI 3Ӆ׾MN744 ycN*L%'J^2;I4L&`ab%ss*0L46%;\ιRgeY Lɶ#cd:L 3,#LZkscņls) $Fp333r_j)2246 smYUsЂ,3393!yvL3-\k=-N{>>uds_CD2LCgGIˍKLHcg4ۡC52zS.d3j|0L6$dԛZ4sLmѮS3L,KEc~pLObql044haUkj44\?TS 04Ja64ֺi/z'#3333i9R38M|\4rJL 3339}\64C==M4Od04`6BJL4\ٗܨ3 3339*풍33335ՙgixw>`iF U`i1Fl%v6`i`itfdIƙ>tXZfffffr'fffffxffffgfffff#F”iiv&‘iiiii))FʔiiiĘibi_F Eoi&,&`i"hhi>3urEffffffffffcruJZ^^ZXAfffffg!fg62gQ:fXffffffffffc Z5o!YdJ*Zmafffffffffg ^|g,iܖFT`i&il&IƖq]Žrdg!a fEq)'U2A-ԚfffpZcd$f ?b ^֦ <=B"IJbR[)JYqFVr#2s8kZd=K 1<`i)qY6WI`ȉ•e!=I/7ՙo$h$gf`Véuh&2fw?(eaR Y@Yi!p& )J_In)Л:fSjU%% M& e2%B5n/$+)yNYs(g$9c.#zlќTdI.ҘecAHWݎǢ0RnVnk|kL-N7kt$Ț3j@F D`&'\#+Ru|g^e6]]VqDqi#a¯`Bn8VoV.Il'm~Yߗ! nf kcvi&L˾5 <雇lÖwk(8UVg#&K])<3IFht"daє qfW]s-t` Ifņ^QvShjdU5C#fڦl&u r$pw#r8+~:$ssIY1"g%^Ti1$k)ŧn۳‰ڙm8Ya%p#+mHNWxeuaIil ThFS܇BnIڣxoʆ86D`gd!iJmqʨnmX1 &Bbĉd͜~r_݇Xݲȍږ 0NK'c70ՄSG1@ӘG $J2L66!b̷1Neby1$@ײ ,RRY-3w$xSv04'̄ YRqSwc$qݶoa1J4ٹ}8(dcU,LljaIܭN\{G;sM2HMu,`yLL^I/YD H4 0aIfsa*ͮ&{g$y7tt0ifܲ2ێRϏ]{&sz͑K6<ͫ4f33̘!=kw G07#(t#( ]L`d~^kժ,A̦% Ic.4)bm/k/~IA3ڄA[g"GqMſm'ٓR fg0 @Uojq8|iRɔ$K V ltq 9l+R [*+Y\cY6`ižȧ|j#kZ[{VO9?vd@<)ҹ&YeۉGŧa6BW4"#7fgj综,f/=NThk\i-zB{ɥMs_f\ycQ`i܄5i11wי%5r3nHJ& \'ȴmZv$p 3L8%8F-58u `+T񘔺mtp1Qff>UŘ$X϶\тagbv݌?q\uF\Z77xffgw!R9@MffpW{|]y&|^"b<333^Mܫ dj+L/.6.QEPb7Q Ͷ'O ͋9*%fffvr|z|v‹F 14%^]*DlP`i"^eS|ffffgϗ'skr> XТ 3331ӞBI6. i &14`i}vi ;ktsX偦ffffm1i2s\"v 333331"Yfffe%2Affffg"ffffgl!fffffe`if-&`i<`iőiI&FiiiF)`idi`iĔViƆ9 d ffffgfffqx[!fffg$effffrfffffpqJb XQfffffffffffr{ ffg frfffppbJ%\&ffgZfffffpq&rArfgfffcnafffqq!ffg*FFqopt%!fpmYffppZXX$UXffgVFfXXfg!9EffgvUzf`iVI < bĒVFƩjihiiFi&i&iiiwilI&ii̔ii`i jin8`iR6!hi$YQ`i|"m‘ $q6Lli,i`i̍)6`iLye&jI`ilYgV gc02cEffffffffffg,eibSfffffffffff֒֔`mxn:o(ic`xŮЙ kS^4qh&e](`iq۔$hӲfh33333333333oIr $0<|04ǿk_lI&OE9b 33333333333VgأN҆3qB0jAkdn6DdPd04?fB5 33333333333Vs8ʐ9ffffffffffffvӼՉ6l"(CLfffffffffffffg0!ffffffffffffpefffffffffffffpffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffx&ffffffffffffpffffgfffffgFQffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqfffffffffffffg fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff˜n|`i%DEfffffffffgFJof̑fffffffffp[O ^p=%Ƅ`i⑉z[x֐3efffffffgzc*{m_4fffffffffmd"J[,zhjj1fL4tX *{I"gA fffffgc<g04aV$RKOd2#L aκKVa;7# 0446J_ci̱oLc1C 04 ODr̪>Mw$AL 339 3$833=C㰷bR>v֓34 L$L5ݓAr-w,L333330ӂ8YnB/ 4,-! 33383(33gHсffff{& 33331ŅߞG, 3333KY\Ձffffgfffff:9ffffg %ffffceXfffffpffffgafffffpfffffffzXffffffffffffffffffffpZffffffpdfffffffffffffpZfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgqffffffffffffg ffffffffffffffffffffffffffffn)IɆbi+ hiJaffffprWQ&ffffq0fffgC6h`i)`iyB`i晙,Yhֆ`in&i}C&a`iF&,/V0&iir,QYffffffffr9:Afffffffffy)1Bqffg!fqfg_%ffg sfffr$[effffffffffffq0 ffpZxffffffgeffffrZfffffffg ffffffffffffgQfffffffffffffrfffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffffffffffffffffffffffffffffffffffpZffffffffffffff`ii`iF),i Ff,alxI9Fu ,LdhaFƙđ6efffffffffff98>ffffffffg ef^`MffffffffffqۈkYhldiF\hdYk#FK{!ΧguUѩffffffffffy\MolF&`iǿG0gĆ`iyÕzciEZ&`i^VNeM(ffffffffffgۛlmh: `;Ng`ijM+UvC99F `i7:zi"X654ǭg\.YiCLg($sT p33338M333333M%rSi @`iFWl|R5663i/N7TL@ ffffffffffffc~\ȸ4XfffffffffffciffffffffffffcYXfffffffffffffpfffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpZfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffgffffff8fffffffffffffrfffffffffffffgQfffffffffffffrffffffffffffffpfffffffffffgffffg!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffidi̓yhi^;!ęffffffffpZg⸧%Xfffffffffo,*EXW$2fqffffffgnw-=Rvj`iFlai˷:19_Lfhzq[1!fg!r9fڭb &y宽I>FC8CdYhlM$M:LV-ޚg1`<ɝMg!pjbk f:$ 1Jq7#Y^pܹBc7lv1` ` ޅffy[|gK@gVWҙ)6eVjÖV`i.5ʲVFVZhe4 f$nilmiI2&KJMk$iYvhi)Kۮ1 qftOvW11 aʛL!F`i{5dG_.lgyf CXfffqp`JeZq1jj+oN]oƤvY0b`"egIHal&"{q8p &^]-XXffppYt& m1b\Z59&kFb"!i di8XNb h]&Y1fffgErAg'~ήkinia6D`i‰oiRLfRszk-qCid#JXQ&BZW84AbbRYicߙh!2G T)pm2X)Id[ e'wg;Z ALyZ ;QM=-sN 8R896}/Ξ?f|YBYȓ7_26 3#1+T n246H$übmb4"ȲALTM3u6,ezK [D6dV06 LD=)-bym˘P썑c$la3oOnA/K?R2L`v%l~\6䟊dQTB 5cM<5UL,֔+C4t21D>1D׍ 0 7aNb2)͹Nm LҳL4W4K>\N㫟cg;BA 0G+82j2ܧ̪m,D 336fcV˛ocی"8x3mX8 70[MYj͠ 3398OIe9"04]Xu5D.LDƂ+04DŽξ*MmQ"ffpZ){!VXE@>:>~Ɩɷ<ffg#eYAḦ#33332֍d245h dn9o/`9d㾚9xpǎ7XL)i­r%@LҎAfffx*3333ܽMa@4HLL^I)n#Lu㜬g 04Z6SfffgO%fffgSaffff9Γ&N``iqX偦ffffc'TၦffffpnrXAffffzȚffffgfffffcaffffgffffffzfffffpffffffgfffffffffffffffffffffffffffgfffffg fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpdffffffffffffffqfffffffffffffzfffffffffffff8ffffffffffffoၦfffffrffffg(dFYF+)ffpZrf&ffff9 %D!ffq&ffffffqxY&Efffffffffg9,we`|(EfdH?&`iT¨Ys4`iRlHof`i&Leuj@ffffffffffff=$]eQ&Z*iffffffffff}1hQfg$Xffffffffffcq,کbqnyLFfffffffffffpz+iRmfywm1-333333333333SGOi(̔14licn˳VVȘLqW\dҵ4]Q, 333333333386U#TP=*0904Ͷ[[eUzubULHHfffffqfffffg oxԜgU"Pl#3333333333335qlgf=FPhh#33333339 3333űZޠr$;Nٓt DffffffffffffgzeEe"j, ~{j#f'#fffffffffff8w/K& ^L1wiLWf˵ 4 333333333331Ǚ8% 04sXD0L͸3333333333338-3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332FFđ`ix.gdHykmH`h^ڏn@F3,~R8љrin6CL^S fYň ffffffffff:lO0h;hYuƛF45n8#0ؓffc >g\pdVcNnN-t)`Y `i[c&ikl`Vۯyq果JZ fff8U&g#e|] zƳq61A1`ihJvd,kP`F狳ۙ#e$ۄ( c3V`i+S5dRW!fgnyT&=>P=4a,-/f`kxLH϶F6X}˜Дfffg*%Qfqzl#˼f)dyhp7Sid猑VnQ`n."S͆q~4qjc;>Z&LAci+gRvi2:CY Lفfffg7Ь 333ӏa6"i; 04e[0 04=ޟet/|͙ۘ,7a `t5*Λt!+kc6y("45n"a=3M2 Ʀ' fŒ 3 M)t=xnTRm+[b:UQ.yN4`A*Dn3mñ 0#Lb6"?|3܈K!Od*3D4Kcr7w?[n3:բHљȂ 39AIgع% f,xS+(0H5Nt[-xT,Bi>ȗyOџiqcf`8̱gקL4tޏԠZڹ=RM33330\*}nc33333>PŖl\|mD333338{kz+-WFiB}w FC33333<|sY8s[i#L4VrzS)y汜,3333#333331,Զ$,3333b4 04s 33333- 333335fffffprffffgqffffffffffffgafffffffffffffpZffffffffffffgEffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrffffffpffffffffffffpffgfffffffffrffffffrfffffg fffffg fffffq3Rhffffg Iffffg Zffffffqffffg[ffffg!fffff9dfffffg"affffqp+Zfffffpp!fffpqrZffffffrffffppevh&ffffggfpffffffrd!fff܅iIFĔ&&FIpaffg Em$fffr0JQffffg/vJ044)(0444J6#L L LCL`4CL L"i6I&6@CQVTcƁ`id[Đ<`q`_cfffff}1様eڝ>^*ffas,!ffffg~KƬYfJf0l(c 0`vb&q ffff>.äbI 6fCa`F" K*$e6`iSnL/;u6i(3t``tf%4ܘ[ fffgzo+/q9ght CAW9ױh44ffgÓX B&LvdσgV¡̵ƒ1j aMCɗraceIP?ڻ1$9gL;q `i0!lb& vYa֘q&-@֙ CvİK7&mrKuY83302t6MvMU7pĸ@ ?cLL33338^"w[S}n\(Mm.}ݐ3FJP̳(g fffg~H|wwɇ5&ffffgϣ3crϖ0`i;,q|2Z^`Z"ō 3330504aXx e3pF42Ч333333Զr3.,Ȏl}b&/`ip(Lf֫w031fffffxfffffxG&I`i`ȝaaffffffffffgG ,9bfffffffffffffa8gHz`@```l,YhF&<1`i&ÚX`i9s#2y&$`i'%xpJU*z#2f*033333333[2g+411s8JxtM4:&j33333333ufc+=/X#qoH fffffffg+f|Z,c]敠ʬŢ|v9yÎ&`i`i{\+j^`_'J]{O!*)KO-Y1\78%ѵM29v7%uMN Xv0L#L ^q.%yhq\JayUe #]qLpXhi˜iJ( p"eFyZ$[ݦ2,ŶeDVDф`i);+yeCa z&lk Y5 *jALCarh6SM+)۵C2BҳW3CU6>A)F;YYdy&Xיviv\̱^v78SFiÛxo9izyvckJ2#;G RJY`ibF<^ ga>n6in8aҟhPgqfffffg!gKfg%fffffffr$fp:p$YQfffffffxffnLFi2cffffffffzfpd*\5QpZfffffpe"J[nJ&Efffffffpgfpe$lȘaREffffz'$gFIfpZfffffqfg"FSa`il))l`ilI&f6`l)LL9#4`ii `i&yɱ&albiiƦI.2\jyAz$effffge:QjFőiǜiJh)IFi&)f!$fffffffg pd"(YFAffffffffg!M.Q!ffffffg)8 w[6Hfpffffffffzf뜒܏J&PP`lF–knWqnNkefffffffgKhqf##F FiI~nsN`iiFfˊ8h)Fḃܶ2h`lɆʞy}L4t4fݛG (d 338M3333338XeXȶ-nlb338833333O=PL,33dccF˩ g>"i>0Ҧi[Affg )@`iYFT`iL2٤14LdNL(M3333%M33333)304 L9$8ffffgfffff8yfh`Yds`ffffffffffffpffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg!fffffffffffffffffffffffffffffffffffgQffffffffffffpZffffffqffffffqrYffffgaffffgLffffqAffffpWAffffg!!fffpe0 A Xfffff8UfffpZT0!ffffq%dffffx$ZvSfffffnFG2E4 333333*LS 333Pʳ90 33333)330oҲ3333388H338=l@S04HLt9qm2#LHʴEdVB0SI3 04#L̿b5$2LLHEǏI-xdԀ S3333333333naL3+d44#d4`ļt}_:dntS@`i;;W\UdܑgYq:Xfffffffffr)K!lV/eikh =֜g"ffBûؽJfitYfffg!ffffwەr dtY affffffgfff"y;kfYRX)ّEfffgffffp^K ݕS42 33333333<~If5c-4(0L^q+iR Ms)Xfffr$Zffffbb֣u1diXffffgBM $'Xffg'%ffffma_f35H04^@J4. 0Xфb!ffgEffff_ wn-EaHYj24`i*`FӖֹbHlCV&ffffffx/$iQ&@ffffgQnB&ymI6S3T04ϤOrM0@3333~ގ䅜e5n"ffgs\E(`ij槛PPʖWC4`iڧCVF)-O J04\)CiQLbfffcm2wo߀L˜(̦@aě$}y̛fv:[ň)I2`i=~_fAtťEىa%m䤴lfcӆ!#b2牘cl@dknJ䡘$"bTaF`iۚqP0 X0Rt{[)Q)*\ܦTSdKh{ˋ,Efg 솯hF`nJ}.1lmue)bn.S EJIk#y,ee)`ihn2>L|ɘX)$hfffr#f,QQ W2qJՉ!rEffg"RSdźGj`i)biǚ%Yr0afffq%ZppkAffffffffpfpgZ`Xdfgffffffp9ffffffffpZrff;fffffffffpffxZpfffffffffgNK$gffffgfffcEfffgffgffg ffgfffffffg!fffffffffffg ffffffffgffgffpZffffg ffpe2!afffffffffffgQfffffffg ffg*Iffgafffffffq fffffffggpXfrZfffg"Ipfpqqffrfffs"ifprJ^橥pZr&fffq g(d&šIY&itcF hl&ɓg$9a) %hi"b), &^*[MB`!SM8-,B336̋q0<=#\\?+ 0f!1IIRD04H20 oNܴQ,Bj#,3M3044ǡN.ŘEZY5-C51&$j*n'8ٸٓ l 9 83ӝuVxEM0wjjfL,#!7-9՞F',M38-333<Wj>ɘ,#SIff5 NK L35]!S=PlL;Lmf18SC &вg;[rdfoC,V/*$ 33338;mr\.Y!sEB(Os3uM,͖Ff, 3333wr^ce}͘q 60nc*os3MP6EHa 33337_ݳXu,}4u2܌c97%5|F{6+LDŏݓ.4S,1'8QF*RF 333338&d3"Ӊ/5w'5p 3333338-w ؒm33333339 Ӑ3R3333333v@04;L#a4444#L#LLCLa4CbcT44#sbB04LJ465=$4K 04q2450b`i`Yo'Mffffffffq[qˮ̡ 8`ihi<){8fffffffcb,jr1Y@`i`i6%fffffffgp wk`iVMHd)FV$ail FifhiƆaii֙i)Fii)iI,aiYT`iF lhiidiȑik&@dliBfƙ~6fI%BffffcɳVhakiNqQmf.Bтq񡱦fffp\gA#V`l'YLloYog3I hnF`i;skk-s(26[)Yn̨+xa Ⱦ9[(04uqeH y+cOF"urQbY,B;\@h%aQ@04sXsND u'R-l-Pl"&f(59`lriȷslk dcn^ok;HYMXfe0bkZfffg.SffY%Y$8[ߜnnlf``I.fc S".&šEdxI~-]f/gr@`n)H`&KddywBTk,҆ 6`٤gi#a%ym6,r,qSYhPbFFd`ir:i[f܊{}f&`i0`i2LDL z 04#fSL#NCO LHJLKId0LJ44<ēL4LL4LL4 L44SLL4L44cL#L L LJ4 0ȴ3LkL^4L4F?cf$3L4 .Œ-31щL 83 33333{cC$ 14qZ{W6zu2 ML3333<,A CdA-jpR,v 333 q30$LLؗrKj+5d0+Ĥ4dc(14Ӗ7-ೝ--##$338Y3;2Ր }92-a,ӲÓSsM3336$INDCGLf 3 333#3 ՃJf 33033393SM3Sݖs 2؍833333s9-&,M3333338 8-m4Ȍ 8-3 3333^g"ICXffpZffffg NIgG&g!ffffffffgpffffffgRIfpefUffffffff8ffrQfffffffffffgffgfffffffg ffffffffffffg fffg!ffffffffgafgffffffffcaffffffffg"Efr$fffgfffpffg!ffffffffqfffmY`iifffffffg Mffqaffffffg"Efq`fgafffܛyR`l|`iZ2 J31͈8֓ 33382]$C0N4 nܛ 4VL4>D1൹]7.,؍́ 333~Q\֊ݔԌ-QqL)-Ƈ0 Mӛ2m33#XLy",C R_>/>jNȆFmkԜ1ca D lrTĮN9v,Yt'+j0d dF|٘4{`#BJaqWs)o2KȬCas r9&Adi, I&$Ej|=넥vh#stqH3 _עn 2=#jdF^ٸd?-k[~yF.{_3c 32C)O{ܷ48;0, 336䄒#q}μƕcO:s|#0Q"1 a &'q0uQ^u!9`i|F|$j&8|RvĶnUi$sCbaa[ɹjLӟ6dFf&(kGzkIlsT 9ѸؙX3Ou/[ꁮ S3333P ;7+^WK3 +9H4C!%,Ϝ3338xH))ټK4BM5,BB3̀xC8K3.HbLM6==ai%K.)C0]͋59hi,mfA`VÄ\e``ɞ(d`F FhČ`.`i,AeI`iƑjd&lB`l)4hiĕi)ƙi&&`iiifii&iiliiiFbi‘iIf™&7"ɺa5e!Y$ *ojQ$]VG s.;y2(9uZVcuyĚ' `Y Yk'd1%5%5IY_c]4dͫ–sfثjb8VQRة(̦ `YƏtrE"HPal9غ!bavz]9YK[Wgba\ цaF&\D~9ԙcY6 VdAb`? j͚=2-zs0fNř`g0ӳc!fFdRb 1pJY5R 3'*qN0RoEr+ܦCs(+j*2"0K3Nc,>if ^6IC0C06Dͫs.I56svՍ{|l $8LJ+r,33,g043f 6D?^: {>8r@++ Lk+trkr ɉ7WBLF!k5˲bLŃ-9CYnK# 8Xh'_J6C̒$4N`N V13DɈ3+LIa4 VTS04430#VL s1NIKF!04sܢנdVFтmffffgafff8)Ipffffffg"affcaffffffffffffrffpZfffffqffg%fffffffffffffffg!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg fffffffffffffffffqfffffffffffffg!ffffffffffffr2ZfpZfffffp[1$hi™)9YJgMfffgg[&P!ffffffffpd畚SrXEzFIg fffq+Z^eJ&Ba$e$[fffffpZ}+n)fhii,Y}єʘ)`iiiiP69iIiaƜFF)`Ial”i`͆晷 dZffffffg!fg1zfffffffffpfpp IffffffrfgJJIfffffg)ffqfgQffffffffpfpZgfffffffrffg fffffffrfffffpZfffffffffffqffqfffffffffffffffffffffffffffffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffg!ffffffffffffpfffffffffffgfffffffpZffffg!fffffg RIfffg fffffgvJaffq$ddeffffg"KQfq"Efffffq0%!Qfc Qfffp:q(pZZVpZpʲfdiɑś׉yVyd˻͢affq+Z4lV9PcFL;Vq|h)Mlia %YUʥǦVlCҝ۬֙|!qT\JV膄lh`ʙ*ƔlVWabaeQq|Pt%p7l&MsY:p%dűA%dZmn^0QdlM%f:c0dekRkffVe`Fp%$[ce&F2"xyDgyɌ{{`zLZ!HlBvaIPFΒ)F&UiɌ%I5.FflAڈ(2F|huq&ai&,Ic&Fhۗ2#TsN|THljWv)I@`ii1"I11e)*)ɩ&|1 'HY`deV  sNɝYYuoBe `i)‘Vl&Q-IDfPk&e Y6i&Ȕl *'Ƅ6dU &lVIɒ &e)iiđiȔ)y k`VIIFil606lF╼5 `i`I)l`iɔiciiFl&&&I&&iiiii&iiF&f IFii&l‘iFF)&FIFiiIi̘i&i6F&lLdI`lFiĖi`ikт['f0YEpdr$e X&%p bQg%e%pNN&$ G ffB[FB[-%r`$"`[rB&Bq8łE&Z܄%dl)Dg)zfdȼl&>[50%y&fFE0)vafe}dQup7яp*k|y{٘uYVlyYxtiXgIaYq ch iĞȞϚhJ>.kfxnflM,ʈv18hi,a)hbS]q 5t&Ru%ƦԦLcMIZ0YeZc A\P:`!2UvͿɏۦrY+O}YhfahY/RLA!X"\%fvs\soe` ⒌-IVZ4XYnl!ocuV)`ijHYUcn̓yd暒hLT9M'i"6֌!4` 6Ʋzhi)ٙ=bf )uftf!`iȕl*Y!lZ~vfohdi,Mn+/c.dS fpf-8B1+F[(04-[6CMLDò$4La,bBJɨ44q*N<7zʄ+L=B4 aJo7cKd4a44:KL06#LLJ44`L4I444 L4#L44CL4444L4CL#NLD`4+NC`JJ4tKK#L3LI6N$46#L5A2L8M33sr++ )#+#)O4$ 33= M3/Y,! S03i)Mr0 3382-82m}$c ʴHL(\&"524F(l24 LtHV$S[IJ#.nL 5}3H&pBdN NDN@\SRJc6|Bc0Ԭ4ɌLf5+hK b4ͼ#r3kwc156vC2hfDŒ丫PLLnL*3$VdH1eJLHI2L53tKNDLlظc#27ɄM#+ 3133/2݄Y ,0Ҹ( 3333M88:Ӓ32 33333%&ؒR33vDN46KN#L L#b4#LL4#L#LCL;L L6,04#$a4\JHLģL1HK#Lۓh 0؍333893$!8" 2MÑ-ѓ:"333%XT.5x,?X]9(fԪϙ 3325,Ս:-r#0A.ݒs̈́ ,32z 38S7m#GP7.21(Pum1;v"fL"Ӑ3ObZkJLC*ĩ1ni]<zT֘ E6xu&l`iĬ̚Ė[11{vyǯm_67<(mNɯ@h@&alF3:p]ZoqӔXru^HE㮦_&i~xYlbY͋A$[F$f8qٹ Kv,aD#~yz9[jƦ9JmX2vwe"i,NRBnLk)BL~n˘lfY@(NV2#dSfJY^Ĝn Sg%iyy$d a#7Nf.PfGmk"229_5Ei d-1cqrenL1jhIZ&]!gV㹺e(4EL[2^Vm[Z{ &!lb *%B\ćn͂ɘa21)s%z!18n*.&טɬt٭YV$`9c<2d'd(IVB28aiŸ[1Ycn2&[]YCo0&er*.VI[$fl<^.kJmJkk afXkj~\nrZ-Xgdd%!el\)yƬõݑvIqO.q)b=vtXtkdY*!fIN/&Jo~I0d Lf)JcK<4@$Jٿ*;L̽4R6E.,L1C3\caA c}A$*M^A̬Փ~WEdB2q5<14D f.BKbX5}Z^M8]-4QӃkE̤,4L0C44s_ g!)8ffffff9[b`dI db`ng3.㬊硹fffffc6N%$NBdc3pѢn'>Lɮl⶯[#fffffpnX[0'1~bag%8Svn'J`fe+\xl*=䖦j14`ial|I2[1I3Afffffg &$g\[fr˦_fffff{$fdz9R)iD8IlvzVT`i `li\_*4ƴF&haȒ"jחFiپʊkdViLQ8i&) d`YI&Ỳ`i& FII`iiiƒ Ĕii&6l&iI)ii )VĔi)6ii9R`l&IYidl `lF I`k&ZfffffffpprY*eD@ffffffffr1$Z_nfQQffffffffqfxY-\FnmvI&i)dTʛƼUh`I`i“Ë? 0\1$W\BEffffffq2; nS7 mӜqhW0Vbd&|ɑj+0xrw7RsaّYYC%>A$ffffffq.2cZGBJ jX3Ifffffg ͟מHۋnn4ӕ7%ؔX1fffffg v,*S+I>yc&퇭2pΤJ,4#344O$JU~5S;5{\%c 8{trh,Q 04,33333387XqCO 6a;Ѳۻ$ffffff}), 7ubNBfffffxi'Vafsq1[&\!%dv0fffffclIGgYt-lƤebHma&Fmy&r0&A%%fZffffffg daj,29ljYbaV ,2=\Ywfh& l5CZmZ aF bi f6IFŹli)hiiLdlF`iœiFiFȑiiiđii&i`l& di&FiIF X ffffffffq%q!WXDeffffffffq'2Bm&]mrfffffffsrzI$Jq1b([Efffffffgki̜ޖlRaF ن$q&')fE]i2ᕣfffffgl[zmjYApTfffffe['mbqlg7SX %wAfffffcUrql+[l[|QEX2]Effffg~ֹljjP@jmFL64bAdi!g\Q`i5ĕbJr\Zv9lfʼnd⁙phܖ}zw⑙^PAS)FAIyYɭ]fC)1?1!fffffm1+6a*\!ډ!Qfffffme"nDZejfѦYeZ[ IJ|fffffg'fZfYe[Qffffffqm$pfafxAfffffg*bjnbIfrpfffffffcJafffffffffffg2EfffffffffffffqffffqfffffffpZqffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpZfffg!ffffffffcfffffffffffffrfqbJEffffffffg5!gfffffffgcf&rdH&ƙ), XɀƼhiHji,m9\ YbTgV&ƖغL̘f\Y)Qgi `i,a)R)y6jalG&`iVa&RFͮĘY6ch܉]͏jI)īUYei ܌`iikfkY#Li$j[aȢl`i)jiؗ 4Gݖhb!ڐ`iiaIRb6l` 34 Mv9,9QҘ2#333/֬{4L^.T~3gHXMCTqC6d^v:E3mg 33333_T⺜S}duݒv3`Mu3\1JʣL*SI26۫ifffffmb\!xs^X9+Q]7W-s9hsU4< hJ,B޾:)Չ@-JAXܴ͊ϰ N|&Mݶ3{3m/69?6֜ʳA֘lz쩑i읽̎VykFAԘfLzc5mMtp;3o34QMuL- >[\M^Bmffffffc)c^bf's SRY[j%V)l_ сfffffmǶƍYEmmlrhWfm8\Ů 9%[ffffglZ[PS & xfMLf(RYHсEZffffffmY~l+fR6fM{[_'%d"hffffff8.^1%E1s&J`9%abmffffffr'_ R %f'%YUfffffffqe&}&HZ_bERUffffffp rIp-fRfd1fffffffgTprRrYѝ&fffffffgfppbJJbafffffffq$p1II$Zffffffgq܈gl)FflFiilyFi&œișiȘii)&adiiĒn&ØF`iFiFlFV `lđnv&.1fffffffg:rz[h&ni9HyyY``i&;̌ ӕd&,diǶalbYNuI,0jg ),cmILUPPbĖ? [<UEI$eqfffffcE9ڢe#1^ݦ EfXZQffffffy*n^v"Ct!6Y!؈A'Afffffbnno1qYBtZ9Q)J@ضT@dA`YLhr##qͱqښa̅)gS DfdV_k1bt&QE&YԄHZ`eW|kqh6W须ʜ_Й6Hx`MI+'-8Y.b33333;+f>g>BFt5PL+j0P$̢R,=B3333333/vry$;?5TΦF"5s~!Lu3M#ȭH߼ 4H25. 333336q/6n8%/-!lǘ310 333333ӄɖW?, 5$ `ɱL4`cA#""#dl@04P܎M+DNKNI1L4.@4L#cJ4 ēL L4CLCtILL404 L406L444$a4t04L&0N6$LCd6C[S0J;%833333388/(S6׃،S;SPMP?103333333 "mM 0k*6*x, 333333͉]5G︪/R0Jȓ,s,MG! 333333y5GUTKen2Dҷ3LEfʑ3*+^#04>̥Ma5nod݌dvLDг6kM;MM+904|aMeMuyEN.r ˃ۏ [L&>9L`0Lo˳]2c4QN/34p-- ,Ϣi\ 333333yT4[.MeE.]8CS?3ss¶N aq( 33333v$4> Ȟb6*K]FFL*8D99м6Z<`i4HD8l+ 襻k'ZɆrϪvZd޶ebg X]`lnC9lF˯eD3jY fffffg_rYk 0h%D[BhdAfffffpRVvlJ Fr!dd fLHYS<%[fl` If&)MPhii•řl`ij†)ili&iF&i&iiilFlFhi&fi\d jivięblņ晙JKq%#)dGffffffs2:e{#w f(ͣ!eAffffgi&\db˫i)VQe'Xh@`ߢzNd~dY4L,.{![ʭVϴOa 33333<];J v#Xg;y{fMjM&z )A3513 6"iiWpbu֛-ޛSgMhC.i)6Tl9jlVѼUxm$nJcfƙiffŹjȃ#n unJ\{7{T_`ƙ~%&>y#9jNm:Ykcgkcjipkix͘hug"a)V `krA[ %affffffffgq%jgq lf,Jd&SgBqv"O(!f1 Zrs:qpjِj $&G$!'fffffffffffgq0 jNU"qeqbi.„cKj)])|zٲm;v6kP*W0if,IEXt#Va!%ᱰf0fffg1s$JeZ{2&m2/qVsGks#>2MJh&%g7{6>|ˏft&.nαomJzf6yY._)D)sffffffffffs$rANrG$rGTrf"*ߌ֧k3aj}n~ȸGɳ>,#&ĞƘoąQifi-|)(gֻIFmh6my VhmJiY鑙f6i(!VYGiw.řYli$FP`n%e"04EvlIs؍Ycm&kف9Q5`|.lb`x$К!XۼSٲqa!1+&R8`i'ly.i)U X Xo{j2@͉f,@, #L4L33g%1 dFgzdmA ؒ-8=84s[b70!nڤQ ɐoZV:Jq6^ L#,Dʹ []]-c)3mih'B̒Bb+ܱ93\=(rMk$o9$hAtgI8E;RC"i^d84Nh#L oL6HqpqX|tPǭ Zv44w_o5=yK~C,'+"4s!"Dcn䡸w"ә9QN0DYrnj^CPсff1qN6`kmݢw:mmNUiZB1&Lr$硑ff:q3,F1^._IIX񅰲E&nK&y12`ii#+{3`e&F& #a9ږZ15`iۡ؆1qg ZR.}3۰XffnF’iF2wZ $Z`is\v52``KkrpZq?#Affgk 'R5cF &ŭ1ge 3-Lc+5fff8n?U$ZijiL@1.j`yx)|{sOor>~yV%mB캋04sr"I,nj8 y4O,Keʌ e}6b57FOgMNΨY&Т #uܤ?Zh0L˒߳nɒn3_7>8VJ9&3FL,ǖ hϾFvl坹L/q'M&owrw{v2.}LK4S(2`#wm"~dB0jګt]tr޿,tdDLB *\U2!npD4Sl` 04F_)6md (+nбJobYsYF¨^W"([tt4fpck"&Z,d \\9T˸Iȭ8/wם]]Tr(n, 328Is,iKW,kcFZboP=YQ[]>|.l%&(nhnz !ykٞnbB&`˛/Afffc f:Kc&f4c/o. LMffffn"X1rٯd&znţEffff|`ilP[)Ά@`hўffffgdX a18\aegZ&遦ffffgmlLRǔ3Vz\Itn`iihۛ dq!%fffg xfgc%fffggC`FV6iFFƒi&9&iFiiiiFȚiiiFlƘiihiِ`iFrm)rprAZsffffpr/Z6AQprZfs'fffg# zfwdؒY"F#&zedP` Ŕio_re܎Xg Glavfe&•Zffg ۟mY\dP`Vʹ/{AZ:JO=XŎfgy.xMXffgf(fzdX IY.k\奵.?QR  ǂ ~sFl0L ;E폑I(9[.g߸|rJX;*4I5fb`,o~8vLSo,{fcha#)lеוVrv,4sLVG2zO`iڷGVX#4㳀WUg+EHڍI j,+(Z Hԍpf6 ƴ3؝< [{n򊙎 GޙFM$vuJfL I%|ts-AW3e&6 LWcxe92i{4ʦI(A HZ@$#N<1tx&Afq-n*.O78XA&ɗ6MT сE۰ mSQ֚q 5s33Rױp-6 {ij֏jkĆXٍUhfQ`&pthfqruffffffg KfprYfffffffc{%fg ZffffgfgKffrdffffffffgIffgfffffffr܁`i$`if liin&i&&9Fiihinfiiʼn`iiyhiiI)& iFI`lF&$`iiShFi#*tq!& fffff9)%gp-oXg affff;w"dș8m?A]Z:fffff NXg"#w=edFfKoUdT&@p`r5gpբTFAbE2Xffe;GMcR(`knLi1HU&I,7ˡ`Fӏ"}k)6(̖PAjaKnqVs[8ebS eڛYedA`Ij<<>mq=-ȆgVtJ`fffvپ}E6$b|oG|^io7l\f`i(y^LzڠEG0y=2:11]&LV`d `i>w!ͬe#_+̏O6f6bcbZfffoe2H!r9]4kb dB `kpgeffgZ$#gLN6Ye6EJ{&fffcgFȑ؞ii36Hdi╙HhiĚꛕE& sN"Aq$p ffffƶ`i8K`i d`iIgif¢d))”f &&Fi``ȘiȔi)`ili&i&i)eiLaiȔlfiFii& ,`iĜiiii֙l`iffffffffprAffUffffffqpddffgeȑii,%F&YEfz[ddZffffffgx&g$ffffffgG1&"JG52ffgIr$b&y[ppUQfffq&fg'嵶|%pKv{affg)r8.+tSc4&al`i9`i‘nC[Xi6bl8xl;h&``i&I ۿ9D6^de< [Ic)ffpehXp.[4o9vYC w\&eHсffg RX[Eu]Y Ζ:bY'1q)aĐS 3339X/s@)xHڴ[Z#Tl8>sy 2DN&u;] fffq:V`ĜeG +} v‹iL++SY&4If!`F Ĭltf:Yu}XWdwf`hX:jY!0JRR7sr`fffffٌf2ޱu&fHM*`dǛQb`ZU@s&9I%ћvoefffpq"if:dzX$!!Ifffr'ff<֝ffi)lhii`iiØimii$fpZq'ffffffffxffg fffffffgbIffpfffffffr biffffffffffffffffffffffffffffffffffffffffffgfffffffffffffrffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpZfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqfffffffffffffg!ffffffffffffgJQfgffffffffffffffffffffffffffffffffffffffgfffffffffffffcffffffffffffffffg fffffffffr&ZfffffffffffffcX[ffg!ffffqffr3aEfrffffg ffm\$diiEmF|li&\`il)Z9u`i` lR||oe Fœi `i3#aӚQEdw+RqZaq2ffg gm&m.LVܭX8A<`ipXffgSvuo6`H4ݐpɎIRdaƃ4qaвLR 85mťՔmf(Q'EQ!Fffffbw.4ޫN| Ĭ%apߐ2c5'B{33 X 331osaBˍXH&ĒlX g\\V^'?4)H¤,-,'gg~204 cL<ʹ05M5C[|lĄ̓|3VJ 33mcMEH@I3f1f8zOk4\R"^eZBffzZSnwL&hlnmg1 jPHR?bV6zF@`i|df1"`d M{I* xww04 9i 1"qc-r̍, #Ө$332W" 2YzLJI6L/LcLlj M3 ݒI-M3333n}$0H̶ |$ēR7L4a+$L$DL$ƒ 444M4#q04 -M30333#%$3x0 338R3338XH1(ӄ3$Lt04 LtJ#b44I4 Lݏ 3339 3333833~P046#L NL$̣L L6L#LL#LL4Ls04I4GKLLL6 L L B4MH,04F7#Cb44LLM4.O+La34&4#`k@46445/$3JLʴ~$44lLCL04a LH CL1䀲 LL47lNNaj+ L͸ً 3#7Uݔ *lRxߒL,3͟ j[j3DKL$4ʴDg呠a  31#vJu6RP̊La L8o+>؏OӋ!.i4LL6$|Em[:$"7KLb_NQV91aR ӈ q&S-^lAL )#y-shr ͍_O?lQ ӘӃX1 2 c[A1AI#,qd50 CN L[=SJdID2c>TKL06KL @:΋DԌ2d@ʈ@o{A!)K2L5ãLB(*OW#CHC)̓-<*ګ csX,8XCu xrѣ8+xnS9)fa4KJIpWp/L{M !2 #d4ulҙrاOXP ؒ23w[.ԬCA%Le%N&LɁKnb#LµLNNUdȠ 33BxiL;3Y]) 333b̓~H4`6$MKL4^D 04JbK>)J6 L7404HC@KLې,-3333-M8-3333333333338M333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338-333333333333338333333333333338-8S 333333335(3338M333338S039 38M83339/LM33-9 33ӐӉ*ӈ3333336vdMIJ5IM46dLu`1L(Jq3#LL 14>0KL xLJ4K>G"4dL#t4MJ0L$2cCd"#044q`#7sb4HcɅL3333Պ 333388-k8 3333LL8M38MS-(3333(X:El[ii9 Xf!ZJfR$[,&eIdpl(.=%ХLd+LT%ڱ"M%qSwfT`FIȑiWaF bxXmn;#cFI)ƙ)rcI2bP]qfqgipgZ'f$2I Ieafr'3eqF&lF&i(`iɗlL`iYI)FiFƛpffff8ffpp[!ffffr%ffffgffg!ffpfffffffffffffffffffg!qffffffffffffffffffffpffffffffffffffffffffg!fffffffffffffffffffffffffffffffffffffffffffffffffffg!ffffffffffffffffffffffffffffgfffffffffffffgfffffffffffffg!ffffg fffg!g fffffffffqr9%fffffffg!eg!fffgqEq$dEp.BZfgp r~I%]HAffy@Ya0RS f($)nj~#&! "q穁 cVkilb LNSfq[lyӉʶEF)VYI+ ԗ|fV*nlILD~kif `)V,v J&:l8eEifb@dlFsJ՘J?%Vq3\g&Y{ *r*qmte틦pZY`XXQ+L?7 i35=3ِ0S WzbeVE˸Ű3"($0#N#]}ra6:ܖJl,#8Kܸ$6s8xc.m=5589hm 82w780dLRLvaMSCcHȳM8C o= 6o74Lu8ѳ{J5쮂3UU=1 X]]k k)͍333s\~N0|32H*KKL/s SR蹍* 33<>Mã3C,Lwdvμ*(04VJlNj 1~@4umNn&ԍ 333;f2I#T`1JH6TWt*2 CLې#0 8-39--J03333"M332R3331"33338M$33333833333333333333333333333330333333333333333333333333333333333333333333333333333333339 3333333333333333333333333333333333333333333333338M33333333333338M33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M3333333333333333333333333331333333333-3333333333339 3333338X L 333388838M3333338r3ٌ 338-?i, 3338صܒ8 333(ɕ4۬ 3339 ш S $ 38o3 333;aK:#LL6FHV:e͢ 044n-m#,3S0ؗW\L=҈0L٘3LlM"9тL0ebLޑ ffg"Oie`l)m|,k\ȲMiXCeiĻn)&P`krJR&R@j-7eFlkh56@QiFƜY, n&:YF FlAi2IlišV~$effg661d iFUdUiF F[w$ X$dgffgсUYffffpi’n6f晜&ć`iFi6&˜ii&&&i `iV •)hi&FV& dIfgFK2KfAfffrr~u EX!qpTq%@Affq3k ݤ$e$qe&k:!ffz1[.aVAXc!n~andRZ~k%Ag d)'  f 4b!['Gj)&pp ["21g`eta[D4&u1b`&)<{l/hȦcUFdF L(lh$bE‘9A\|})FCE"Ip[NϱrHXRY2Ts#f&kg ,r/pKmR`ʾXIYIq %7&k~,,ayV !bHe bīI%Z-iP-0U1&F#pn 2gmYR8ܘ"B2Oq 1znf ٵ^-H$rBrb D!20>z$8fL`)ʥvxɋ`i\Ji&5nnh®0٤ff6(iƔ5fNIXb BI*`lJdǬ|jXd`i ɴ1f4YpcKf "i$ȲaXZq&g9uhFl h_FI Q9d`li)b j̉VaiYL[yXdil)I&lrNbk$${%Xfqd )I)F&iol& eiii&ԘF晜Fi`I`iiViIFlFFi`iiiFiiiFiiii,a`i& IF0cViiFFÔi`ne_CØl&&l)ܓP`lŔkpIP1vW"V`"RM0%i&X:S*2"Zg(!eFJ6f.$e)&M噸Wd{vZ2dmf˦*sr}!XfpbR$%"=gydť1*apۭi.e&:;0b+>aY:dNgXذ }7?%RsI*`2&;*>Fc*hYZ@$qe"cb1&2"e% Yepuz7znxym%T˼L\ysvy5&X9xc 'pDYQɢ)dFS qjk&ZRZYofeX2]'Q-neFٱ[9ill5P`IXd)&egV|1טj,k8VIFƩgm1jtҕVnFr)̅!&orm"鬏,rI$iinn16(Z빶sƘ5]khq3e$fg)z&g3lZ[Yv&kI2R$J?L^knpta6b3ciκ$[<&&Qen^'O;Lkqcl`]60VA!bhDV%q{ۢ*XZfXe!.n ]vNs-&fr2&|;nLo[dYOg1 33Sy60,-1(L31)1\^x,,330f2sS 33381*L 339Y-S339 8X11 3339,̬0J4b5040L44dSLCLL4CLSLL4CL44#LL$L L46CLL~56CLeJ4=b06վ8*043 3 3331XyJĐ M331$yTЬ@3%+#;WrDҔ 338\5.CB3dLLbC `f`Lm((14H;Md+#"CH44L }$dL$T!  46` ڣM1D@a605/sIZ-Mw.,-xG.su/L ӂMԒ:1{Hm,0ӃvO{O2L42K7S$HV$o+[mVbiǸ/")qiA`F ,$bIn"|Rk9$e"#V FBbilFhhRky!bdF>-n(Yv])lҐaiĞśPiɡfff묏Ek*`,&9>K̙FD`i ũjhdeiIjjP`F,ai˜iX,~j%ffffr'ffffg?(Z!Iffqrfffffjhi ffffffffpZfffg*bQfffffffpffffffffffgfffffffffffffpZfffffffffffffgffffffqfffffffffffffpZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffrfffffffffffffpdffffgIfffffffffffffrZffffffffffffpZrfffg[ RrEfffq1Z]䑁ffff܃iRhi!\aFhi|lilM7aIܩVD`i;_!s桲hFpZfp[$F2fMg6ffrKYJjg6iifVm?h 1ŧqeLNX0S1r %Dffffffff8,`FďaX`yβb`Xg*Ͽt@`i_p W=d8m33333388Ub3tA -8 C.º389-33333m[|pb,(R|&r@&Ęi‹׉=S"$ ;|0Lb_,[Ax33333337)zf#g,ك9֙ͷ䜧fsefbId[fffffffffgú!q0g݌ffffffff+kt&``i|Q`i<ʁ`ɷS`fƙiF,`i`iiFiiilƙiFiii&Ȕișii&’i%ffgffg1fff6˒aF ƙI&)V`l‘*`lfIvk,Xfg .a!fg%UfpcQfgW3*Yfpkfbiȑȉ y`iK%qvpNł!pf--A0%cYpncjf1Y<|@]f8y!i2 %%$egaoX5.QܟHHL$ 7[Z ㏗(:LʼnAfqeZfcnjݽӶR`BHyR!2CLep>.%0daJ4EȽ[Re%:,FwعԄKNqOܡ9>ua#eUffys&o7rIT^D&, 3|hXsM1aLܵ=Nv'"|T׫Bi/aF Wg(fffffffffq0[,&`0 @k}"nfL7L4?Tad5uhII([KV5jTTZ/+~njƋ !Kbi7FѹrM'/^7o5c] [, (39;.<06i ̼7ɘL-FgFF0f`r Ӓ9 jD#33tcf `lIYL`ilQ6Hɇn33 ,3393-%8,.qnw сfzE7$L -8 ^O\tM85czopHN&E`iiXVIĸN2qvd25GEr1kg!RtbXcB04D$077eQ6Pt$XA}&Us0&&Ќ 33nnX:uR$g.XS2&m$7 s333̘BՂ}Fq+rm#CL0UsCɛD1D0K( Np(p, 8qӌ묳N 33308<D6ٹG#04E9,3333 #ev[nJb] IVlo00LLZn.') 33Xl3333337]D00LH@04)+8 3388J33333333 3330333333>333333333333339 333333333333339 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M333333333333333333333333333333333333333333333333333333333333333333333333333333333333338M383333333338-338RX33333333 3$ 33333333M33V& 33333333bM '"Ӈt-RlLsaqŇ26 ݜc5[R7HfffffffgʴFd4`l:dsD'  33333336-Lݍ<V) gffffpp'Z9f3؅+Sct噍MEo&%@QgxYNْ%gffffg fZ1/ms{sUZDg ffg"10i3U͐oF M9Xӈ33338m C, 339-33333؍}S͐Qffgffffffg ͘d`i&ifffg!fffffffcffffffffffffg!fffffffffffffpfffffffffffffrfffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffg fffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffrffffffffffffffffffffffffffffg fffffffffffffqf&ffffffffpfpZglfffffffffzff9k!Zfffffffg)$ZpmEféLVomC N-Dl 4w#b-1 388Gk[#@04 {5ϰO*ZPI bbX G>ﬞGcV6$`lxNEquTHE&9Vdq' &dђEc}qi’eɈC ͓!rq&TXg&۰cl[g yي!H)sM#)33"K4M]BFf{Iӥ`tcEZpZrqQq uIc}7|'C|gVkISZ#75`iii&)O8a ll3PdiVΫk}~{<~6RU!ffpfffrpg7嚨];hh=J-fgfffpZff}-d?g/ 沝C04'ţ[^=MY 33333333333d+\@#3333333333333o)Ĥ 3333333333331Lۘ 333333333338-3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338R-33333333333335$3333333333333,-333333333333^fqfffffffffg$ag"affffffffg+fffffffffffgfffffffffffpl4`ia!$Zg&afffffffff04 L 823333333333v04L L LSL4CL4L3L#Lͽ04CL෫404qYv̐ 333333333333ŝ/ͺ8i`iȔi+-<T#1B[nfffpZffff:>g.}܇6 "5Z1Z"ffv"`ثm]e^%E2C([ٙ3:H' 331ńܬ 333o U0*=f)cfYmasڳ([lX`iuZ(T6+8o!8*)uӦvg,M333233o q<\{$02i+M'+ AIFa3B{44)$K 446NN J<*N8RZ㤚Nq"4`i, b<㦺|2$&{jdufiLO5214675CL[o3ATX@xbZq'Cx9Lr33w + 331ܖdgl#)3ۛ> 8M?#*9 XܸJRR1 RHd -38-=33͘XNsxQ(14\MC L`#LF_-Y$UZŁgqffgĔVj&`iijlFI)Q6iiFMH333338WSM-3v@4 Lv%C4f $L&}˓,L7L͸Q% 333%)L 333338,M33382-33333330, 333330383M3330 333;LR-38M333##)0M333(333330ӂ333@3333333333338338-338-L 3331)3333338-331ӁD 333338333-3339 33#-#, 333s,38R333333< 33033\#@04F([݄ 338x'"Y 3s/ 8M1^ffm|/YX`iKY`i& fp܉h`6SIffghNF-4&ᕪ%g }Xfpa##}m$eFW_&-%qޗZg&1ybm3/IbUN M= 31ω=o8j$m&R$#38\,Ϥ-嚱L |[44184YF,HLV; 'ibT`Fh|cy}֧Ddl , KNaȴNlFԓfr'2"% WoioYfJ܏Un/.,YEko6bFØ,Mf`aiiȹmk"BXZfR%YDnێW{.8[(6Lv!L&Ǐ{ BS2Ō\WG5~0M<>>Ѵ, 38Xv M3']a(6zYkh}sdlDQCefbi{!ro90#.9Fz.`Re0+L K#LRibl*ѱ%(9?Nn_akHQqHTt LL45ʔa-s\ڵy)ƮilԃI7H71&ƜV@b(.\ˡ2TNML0I4wYt}Yr~<:Р 39 333331+lm3|YP2pZfffpZfffgkgH]EnZpfffp!fpp6Pɏ#f:&ͥ6a fg&ff6zC%3+'b<Ֆ 2;؈Sb04JLJ4HCry1C~E8Pv$9NTYHȘ>)ml^3dփѕ%'%kqfff:dffgr^<+N d"De\8Ji`Vn6y=ryﷳ5Ng#- XѸ٬ 33828H33<{? 21q 'n13,,J‘L46"pd$> Sd44J;l24tjcA LNC,# 04LbMsVc:N) 8Q?//u' `0I4t3G$t06#`r'34By2N {9U˽ޫ_i%N bttђ 8Mb{L2&272s*i) 8X#m L 8;46T]b1 @0aD}M7v}$p(dF= ӑ+.3Xsy'Ȃ _o A~받ڔ< YXfy`LY,՘*a <hVsnqʰ0L>3LdnLM(Il_$|׽\Aˇ-5ZȚcPi2Lt244JTL,Z\nsV(rc.L1Kl|/"|F2vZ9 O:cFifs"zv5t҄C33333333, 1\ pN b!j `i ;{^M3F{v>dH`ĔiƇiCHr1 333333338-3m~:& 33333333333333Zoh&%ahL6k2 @除YAgƚAffg/! RY.S: lؖ8MYY.6jcfff9kjLB &aPm'mڡ71Zmʙr`iZZME&qj?jm'!fd"&Dhʉ`i¾9KEM[/`bz;:Q#C,0H44MW9o ,+[td=# 1+L04\s0nL,)tYmSTHx()6&64i20L?s?nL0$#0"@$df&ffffx&;䈶RS&%%$!fffgёYrY, 33333"ʌS 3$M33335 39 sQM"38M33333n@44N4L4I4LHD04;L3 Ld44H+L2L4CLȶCL4L,L44 L44 L L44SL44L aH6 a4L NLJ4L4$L#b47ctLݓ%"9 332338- 3%/0 M33$338i>3M0ؐ 3K)M%'ffffcNs)f o[ nXQfa pbn&F^~rmXŁAZI4*{n9e&˜fďu5#$S!0Ht6(7=FT$&, , 3333KZ4`2C$l`,hcapdZgjZjZ>V/ߚ׷휝t٠EUN$!le$FB*$"b%D<g!gddZVy>]& >1p 0|#VI. +/\c^ռ+BC0444qH7lw/r\9533KElQFK(cNKsj_vd=Zb`hiY.7 fB|ɘHM)X^wk yBM`ikrw zmqΣ)&ilJKj![8DhialF]2k<`Ć +s fm"`i" &.JSȲсffffffpVSƄjB\haFlni)\j[di)&)viiiiiFii&FiiibiiFi)IfVFil,jiiɂQffffffp%ffr0IeIfffffffgap[#!Ifffffffqp!fgtVF1f`ii`^giq'ffffffp[jEz00bnΡ%cffffgFI!-~7e;4giI)`knykzD7&D`ibiliFĨHn&ʭL щ!XgffffgB)N 4xӂ؍333333$Ӎk[ 9&&0ٔfffffffffgAKneov`ii&ûr~&b̍ffg!fffffffm0effz ffffffg UZffgIffffgfolj`i&řV&i)FiIFiiY69&iiiiIi&&dirg &1affffffffg!pZ%affffffg&& yeEfrffffgl̆`ic-P!pffffq-xuh@` 6m r{cdai.Y i"FD`+蛚)fB!i`1I|sɐZ G+tueqd eS(摁+qk5r&:]7A&f(C&5R `ꕪLշXbhL%ӷNfٌсgq&bM&@`i~nm 5 3mVdu4y C04$J34W }/lLQؚp!;U ɀ!fg`[ffבMfIlb:7fH@`l+k[jq^95£033903oKُ55-NHn',M3ns[Zx/#5ffpfff:*|}9g آ:aFțyk1٧dF6Xfg'fxnᅳ[!%[n4e1`i镦m g&p;񴷲UR<݆ffffgg+a1ff={Mfffffffnϖn.`i,Hhidi`i`iiliii))Fi&`lđl)⑖6qffffffff:ZffvJdkZcFL4`iži>2Bffqp!fffffffpY ffpZfffffrffni`i)eiiF蔖FFĒii&iiiiFii&l)&Qffffffffffg#s Xfgffffpfp#fxXqpсfffggZ e%V&I OQ`xI&Rhin'Yͳ\X)POffffLΒL-<86ؒw4+LsFvmffff8癁hynDYf K3`+,F`ix٩15`lF겛,ʙ ihL*͡if(>|yb` }`c864wZ24>iT:6#N ŭˮ<141 147BC04[-u2M8\feen70J4L#CLJ2L ]ҋ433a6146@04}nbرJ4DL64#[s 31%8S ӄRM3333L3=R  33R333S$33s333333)43#+*333333333338M333383333ح3383 333333333383333333333333333333333333$3333333333339 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333338-333333333333339333333333333333339 33333333338333333333338-3333333333333333(33333393M8-3333333L-3389 ,2-333338r3338-333m333Z,3@"3332 33E*m,(885- 333139xC&Ȍ ͌< 333M8PFٌ~bP =X  33931ŊtyIrZ fjӃ#o[y+4()F) lik;~-w)gD 8v|o@δ`fffcfR֭$dԺ~`\Mfffpqf9??w罭TYm+ A4݌  #MPBx03 q&04 L=Ë4\L6/ٚb3338233<.LӉ"dd̔2#L4FԘLH044Ka`D04qMsNLK4HL4 LCLCL LCL L LLCL#L44LCLCLCL44244Ld 04̶ LqL*,,ӄ33333,3ؘR[" 333333331Ն 8S<=Ȥ+R24#L+ Ӄ ܘK녴,KD 04SLƶCLWʮ~de`FZ`FjɗTdaFiaߐ2@ 8--0333323=8DXΐڢĬ 333333339 38xϐČ333 33338s33333(333383 3880%(3333333383314 3338M333333335 333333333333333333333333338R 333333333833333333333333338-3333333333333333333333333333333333333333333338-33333333333333333333333333333333333333333333333333333333833333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331339 333333333833333333333333؍33333333333338339 33333؍333333333/5(333Y (333333=2. 33Z( 3 3333o95 39fC76L4 ·L 33̆$338KfC04eC14ik-ǚjL 1%X, 333}}( >4 ;1@`irafffnq&r-36SpH2Fg䁡ffg 2[ !pH{z'eAc6IZ9fffgv6&`i>x$]k8͆P`i&&k6}籉AcHdgL剦gzQffg 'b`&ě9IZs$ZfpZffff:pg2)f8iXAgQfffpc%f8(ᝩ-fg ffg GpEfoǑffR`iiFjliiʒiZfgN#)ZffgffgJrafprbdXffp[ffqg fpf&ffgffq%:ZffppYfqpfffg ffgRqffffffpZpx`iƙi&iil&i&iiȑlƙiiFiii)IFilH`iii&iFĕilFœfF&i֙\feiƜilB6qhiCƙ~dk FĔG 333Ӑ387>=3 2L&3H0LL4[Uqy6#CLL󼈳"S04142јy+ zG,R3}59p0LʳN Fpn=,؞0L4׵A2Km,&`04FH24q+^#f3pΌC 04.f2mffffpeef+<<|me"iN?O&nǀ8Qdiși+yg%flF ֹI5]ۉS,Frffpe&>-5nCcIdF•.{k3gLk = 3398+d%fffffclF`lFɕֆH`F)Y`i&Viii&iFi&&YFF,Q`ilLb`&|Z|Ch`ņ~JUj`iGᆧLsDr 333333L 33XşU ˊyB44VHfffrrˋ.-kֽU$2Tf18 v;ޔj9e vޛ(Qa3VkݲJc0Lvp߸SUGe8wsBP $3333333z]x`i,fOVˆ33333;z,&YDh0$1_߹ (uJ\oF  N3333333^G#~kB> Hn,)Wn6~7$0D&333331y@% !3f~JɌawcFN%ДsQ 333335ΔK³+S $SXc#XS)IBifyH2dIal%FQ`ĉcl1YiۍA~fȖQla&%bo:˞i $`lLZ`ifoi),eVCli!VFYdi,hilfiIil bil‘iiF&&&iFiiIIVi&Ȕiiii&’hbi˜iVF@`i, nf\&)앚顐`i<k\!ia`iiI&Ǟ\s9Yt`i aaF|QFĔĦim `},3lmђ *SҔ=@ffffffx[/fo9XI0Yv0[9[nf4;fPaa9=7(kr&B4 jM4`izuv^ZVk=CͥrR]:Y!6<dNy 333331_~Ο,&Rv dEdiF`@`isKPM333333s[g6qcKY-w&gneX9mT>(pfffffgWt܄ʬ!ɲk;KԱLmћ3GL'3E*3([Y@ Lr1@`ix6 `ik),F6mQVffs, `333333ŎG01,338#h4tʶ`;JCL>h04K04KL^@044KLLL4 La44 LCLL. 40L 04>>S 044k04} 046 Y1x33333;u) 4^Ffffffffv[b @`i~۷b8fG0)ffff92~fffffff+M L `(Is]ffffgw͞^#:a>_[{;6{ d56 ffgfrvXffffc⧲JM$آpp&ǺNI333336 ! #Gnil&mVd͏I4 &b fffn$8V⧟y֙Cefff:Wfffffffk\t 8f `in,mY`iyh`ȒZL33333C*C4d404ߟ*333333333373DL!44L@04$LH#L4$L4Cf+L4J, L4L[(3333310 M33+2{aL*7LL 3XY,ѐS.;+21 33333yCLۘR<&7a04vs38D)LV>qZlFSuQW,fC& `l\}|m.fP[6: m330\ؓ p 5[1j,Jxgɝ^6<m333333Ik(9\#CbM?[v6^~72Iqi'hlvAJc/a[ͲӎƓ22"9fffffo12Y KDT,Od0f+f04qmfڳ,4DfJJu,8^"4ީ b``f Jd ƿ.lwkLJ3 1K7l#=dolz 3333308nՒM2ӒcV`042N 04NH4?4J2AH;J ͹ 4S 6ZnΨ 333333=;+%5>7]5[#L @36 d6&/L#L 06 LCL @0JI4HCSLKaI4]R3333333-/(33MR33333338M3338RS3333338M8m3339r33333338R3M33%'#(333333333382M3333333333393 33333339 33334m33333338M8M333%033333333333(3333333(3333n44 ed L,LCL6CbJ41b6,04D0I4.ʼ`3cL͹,Ʉ 37>2?-8aM3333332βӑSϙL*, 3333331$Zی c6V1-͍W6̄#333m{\Q04m|O$rKK24d fffffe-2Ƒɚ$h]u^&4`i fffffff=ak_J&ٙaMXfp{`iWA `F`im橄4biiŻ!L؀ffg5ffffffcq%eIfffrfffffffpgffffgffffffg"EffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpZffffffffffffffffffffg"Qffffffffffffffffffffg fffffffffffffffffffg!ffffffffffffgQfffffffrffffg fffffffffffff8fffffffffffffg!ffffffpZfffg0'$fffffgQffffc1FaAfffffgfffs2Wlfffffg|`ițf]Afffffy摁ffg q[%M333333<|n338X$g%{Ifffffg#Affq$^`iifg0 IafffffzB`ffgJ.ӓ+́a,33331[5Y!L&4IIGa-Lڣ 33333O3n(jM3-8Qr*<3L 6` 33o-Ɩ&ϧ#wq 9 33j]g%Ăil^j&$b&º6Wcy Hd-338]Lf 333331ՋάC= M 38e@0MH4 333333p 3333y",33333o).8ʭ2M3333 333333 Xffff8ffffffyA ffffffffffffrfffffffffffffpf%fffffqffffffffpZfffg affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff:ffffffgEffffffffffffffffffg-ffffffffffffg%fffffg!fffcIdcffffffq&fffr"d!fffffpfg1Skfffffmdrv5Fcw) сffffgfS qqSf5Gb3333333;堁 3'ْKXiG`pffffffffffffk7fffffffffffffe~T%ffffffffffffg֧ۋ"Hpjffffffffffff8hm*fffffffffffffcf ffffffffffffpyQo-Gp04̿JX(`ijyBfffffffffffffvq)=S/^l1ffffffffffffvfW74h333333333333U9cs 044Y֢4Ww4)OűzmϾGfffffffffffc{%^b$C04?^yY1b04K2Ei.s/ID`漁Vbg.fffffffffffffgnLZ>fffffffffffz6fm3333333333331Fg3LVShrG 333333333333U?o "iyY@`i` l>=CVa$O9h Q ̿׾[B"A4qkcfffffffffffgg(M333333333333313333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333/l333333333333EL-c33333333333333^Yw ۡDHffffffffffffff=wK^'I`ivi.q,qffffffffffffm_U1XfffffffffffgmnŶ<_A,˜i]\Pb 333333333338v\3^|2C M`iͻIf 333333333336n]{"i22ffffffffffffmXgF333333333332{sl-+L̿'&Vݎsf2 333333333336ױ]g .V4üY04wznֆoPє5`&wAgξ#&@`i>OH\jh3333333333333 "sȆ04 Ʋd0C04qfC 04ǯ싙%2Lv|me(#LWgy$!SF٨333333333333338 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333326o!o*J~+n~)ãn[qPkIVj-hm6I%Y &`F$q13(&i%V忚Hf"c61Z~1ùqrlmtzұqd bƷ0umvn+1W{fiU[}ONo2yNpŷ6eEA&rcn\frAMfsfffff:f$gGm/ ,[tIé@Se(8ٽDŽnkC>7;Ǎw`IHoٞC={ŷ7k̞5L l Vj3Ziffvi =d)flf̖ĩ9fyj2fqD2PjۚdX*a.v'K" &m8&JpN} ok؝U ƳK -o]̰nJQ6kmIRV)UFfiF9JVنi[̝c*ďZҚLju|CM(boW#˞kמwnAo:y~m(ntxg5jRixg#b``i6hindf1bb^.f3#z1ZW1u&bfp:q&SGe'{8'zhY҇dBchOg rR|3da[uR&=͛{ݎl%ڕfbYUQ^FYjVi%rZM%X )f 6tnSS &3UwHnK:p{ 51Ifa;\&rG1w`Q>Ygqm{1PTAo/N)Ʒy||m֩K]=n3jMF{tXxiVofȁienirAZM2Y0N%q_ R^Fi"2$T1 a`1X&ӑ2fjgLΫ~P맞 o*}7cP'IicaD 񑿘R`)aY"a&=efjdzJZ?$fg ٦e7#"91BVgM[qZ:f 'L憵2c$/h<9r|#`"!JbRa"6!&7meY av ilؖfMӸU-kIy͞ fuZBmfe+%ٿe[>d/ŅZ3#NH6i_]}n[l3fg#Yq1;gf/rf՜6~sNj Tfkfkjb²&۸*n+ouV܋!AIل`gɕigi\oF ƜlƜyƜr9hl: -̏fjTo;Lg+/+.BmYؠُuÇ Gp&l!]Moo)ɐ&ujql:7n݉f_nRuW:.ivmƙi6fl<#iFB9ũLmƭYAsjؽEvl lwBdCl̠flYiZfƙiY~_c(iY9z-) er\Mn%TRn ;ٍ`HiSgIffug&Rka d`i96iÑĩ`l|J\ ɉƖĭlY1ƗXHfx\{#6T̖9^qnO. GRd**k vOFVpbmZ l뙇o[h aii`i6Ñ~R|i8ionmlzx)Gq)nZƛypkZʛ&&9 n׳KWo?ɯH&R++IIXjv\ad aFÜnial'Zd2M2NMfl|4ĥ1[ㅬ>Bå:*˰+l+9՛|nưxG&}c67\i jbcad lq6`ilٙyc<fiiiYo4[TiliQ(Y +|\6x܈ќC uf'Bо=o1עekvkI8>uy"6zo֛=oysoskclƙl959w-"i weeFfI(l&I)Ʌ̑6BgAFffffmqaliY$e2.G"PJc,dFlhhYd&,V`lٛ{s FffffpN1ɷ0c4L|LW6%"Ӊ1r3؍3333<9(ؓm(3333333"ӊݓф 33303333233؍338-33339S 8R-9 3333333383$33333333333338-3333333333L 9 33333333338M3333333333333333333333333338S 333333333339M33333333333339 33333333333333139 333333333383333333333333333333333833333333388@03393333333=R!- 3339q33333393333239 8-888,333s, 3333333xL388ز9381X۬3-3"؍33"L;o 333+#"ӄ)1%5\?'5Q06 NCM@Ӆ0.,2:וd MVҬC 06$L٨LX='&иXؔj0|t0L ?,ɏInJK+D5[+?ND 3338rM3M6F!~YȤ2L7)L<24O4aEL04cuɵSLL4+L0DS 046$LI`6HxMc#L LOTCL6CLL4 L6+LL#LCL4KL4ʹ4aL 4ݘ3333382333336R04 `LfNB!L C04}%d^! 3333133338QW9ƙ9`ih1j6@`i`ffffgۏXSL!ffffsfffffp+$!ffpffffffpzcdHa9)9&YhLfI`i&`ilQ`i,`ll&l)&&i&ii’iii`iiiFZQffffg!fffgfffffs!ffffmcaFęG)`iLø& 6@`i)9Hy{h`lmunV,(\4͖@`i6 Z fg!Oшk_,"et%WPjNTdi)9&HySJ(QU x NZNl9@Yqpe슮wfffmm'_>Hb2V` X n~1vrffeκ{ɵɇ5hci!`)X܈"fٙ*4[["S"fy ق X2S{VrP^jMfffc]YgMeGevkM[rgC&M/> S9SI0ϚxP(\rt 33~wND4TIa22@D$ .K,J6d04͹-1RT%R31s,K&2Hщ)T3338ق&L81 ,2˄ ͉# 3333Y0c2Ғ! 2- 1##0333838ӌMǁH1)(38333336䄐ILLL0L46CLLNdN$Lt04] 33339 9 333338S 339M333333333333383333333333*؍333339333333833333333333333"333339 33333333333333333333333333333333333333333338M333333338-33338-333338333333333333333333333333338333333333333338333333333338-3339 3333333333$3339 333333339m339 3333333338M033338-3$33331, 8M39R388&,M33336@30 3''u0 3333n84Hc_%2C"XM(333706KdIddȶ`KfBVLJjC04V[4fL(SeT2eV6Q 04s[L2f$~,lSbf6$bc 3cky1B0#L E%cbCf hn2r' "_[ gw71Yff_[UX[RI$JppޚIʉ0q)%w [:EŁZffxu,8ll ӂS%WJM,ͣ.Xx7C5e/F fS 04)҄I-8!2kd6,/IɽɄ9gvLs+VS!4ͷ|ӎ,L ,ߌbl^VӔ~-,-y, 333cGC(3HLsT`fr5:T- 333Li2 OX#a7]mXV34$В -333Y 91 31ŋmY쨨Ԅ 33336M8R381q)2h,K,3339 0ӄ339t *2L,L+L4Wd YVɆjiiFȒiiiƙiiFȘii`i) `iǗzp&`iŔVI`$ga F`i).YpZfcfffffgɮNXg&&pz̷#f㌂93bHa6&hn;jE`if-PFX8Zf:cv2ffffffgBeȽ&"zRQf:;B>ffffpɉEZfpez%\ffffff9ٰ!FGgbۖS\сffff{xh"Zf8!+ylg#,b3fiv,(`qVVqXfffffg7ffr$1"FQffffgRSfffc&Affffgffffg G!fffffpZrffffqefffffg fffffr%ffffgafffffpfffffffffffffg!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffqffffpdZfffffffffffffffffffffg %ffr0efffg9!ff8ZpZffffffxHfg!v{fhZffffpXgZg pfRfIfAfffpgq([IqfcdZYftXAfff"}dclV%ۧ1\em d&Ye)pe&m&f$ff0"R3331(јp8!,"0Ni13s%42F 3/o S1$X1%j&ZqIdM33337s=-وA-$5#ؖ39'ׂY6533333;_d_M;[cCM#4@EHmd*hXMM3@33333or6;lNS0H,aJqL 5)L [ wjؤp"bygqړ2^ffffcWgeZZsdgf2*fffmrZ}֦W$& MYAGg١ffffmw ZZe*aZrRU&gXqfff6 M%&%1# a!ffn<&r FYei&Fm2Fa&fe gfffg&J`Zfq 0[ afffg $afqffgfffff܀fiiiiiii&iiiiii˜iF&Iii)fƕi`Fɑi’il&`ihhiH&`iț)fiلeFz`aF fpfffgneGذjz&@P'Łffg"bZ2fgT&I"f&W3&qz.HڢffgReZ 4hnf2dc ]qn"] gqg"{$Kz)&5X#nƕFo,'ǘƌPl#VW"Vd&RZ8cIɒQM5lgYrcăYɣ}di fg:dc`^/1q%+bXUI/ d#3^f+m]403333}3, _jaQӜOs%³084 K]ڟ6 Lr̫i$Sdn^^tKR"!Dc.w}yu:,3ǖlf-333͑ϕ,mWxB3',,ft))a(̿N1SmJ40 Kc .c"RhSlgSBi2C"JC B"0$~"a:D&ۣ!qX&e%Hf0Ŧ_@fffffffo%YdcVXffffgn5n enсfffffceiX&%i!&\mfffffp[%1bQ aZffffffcqfg$iffffffpfg)fseZffffffg dfffprffffffq$ffp[ fffffffg!fffrffffffgffffpZffffffffffffffqfffffffgffffpZffffffgFafffgffffffffffffgffffffffqffffqfffffffgffffqfffffffg ffffpZffffffg ffffffffffffgffffgaffffffgaffgSZffffffgfffq0 fffffff܀biiii6lilY 5̀`晜&`i&ySȑe)Z&%$Zqq_ÊIj`=`YA Sd4cg1ၦfffff_Aa"[FKbՉ4ffffe3y:XsJZZdp({ay06ffffgorp&wAֱ hctFۯƍ y8f'|aaEYHQEIefXQKfhʤs04g{MlseXfUd 3nFƎfKX5odŌ`lfgVf,26b#'tdafߡQLѳoN疒ẶYNb hyr`iyN[dsD333331קWx;2T14#5( L׷,d﵃ }UJ6 S4H#RJ8 0r?1EPLu{eJ҅ɨ 31j9\YX1 33338[9(d`FX鷋fffffc'7.[4%Qeffy#(M3333331k׬+@I4?=4d0LͼDċKL͸Ɏ@ 333333~h7`CLI+L1$L͸@33338M333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333833333338M333383333333333382M33333338rM33339h3333313333333333=S 3338310 333333oVʌ 33337X h333335ߒF 33339V 33333;tI`04#L( 333333_lF 333X?9ݾN#083%֯.S~i2Tf0!4 LrbƤ3333333dy9innY墛zfffffccl$8 `qm 33333t sXxd8 `lr fffff86lÆ@`l鳮{ -C04Ͷަ8ok8i$338RtMyDC+Lm˽%nK,"3386h0Lwu]gԀ 333=8L 33333_TsK3L0f404Oܽ zIJ4OLt̃CLv04 LLC`#LL4#LL L b4DL4J`#LL4M4LsNDLH`a5+L04&HN&$04zɐ`i.Ruj|&3k`i3YDe L v.*KR(( 333333fd,uG'e`im҃ig "V f7{u-01`itòtĝRd){l3/z`i\n_Uȧ˜8Y$$r6diȒ,U"ʋq4#Ư=fffffff׎E$`dlHW~+qW`L'5a( b&Ah_*f}0nxD`iR C'&%r#e'/SfF8,fuQ,2^dɣe쇌әTHߡ`A1&pD-^4t&tHfffffff8w&4&. 2J/ 2&\HŁffffg 2bPi0&Vɔq^fb&9Xfffffk˄3 3b`+GK%80LE6SdLK4IvQK0LJI L4ICLbCt0JLL4|ᄲLJ6$L4bkL dHDLJJd L44ċL444 L L4dL L44J L !244 L44#Ld4 b#LLCL gb3LL$0LCLې, 3383C!h3333338L""ӈ)3{&333331$GB -#L,5\Ĭ04{-=Lm,Y2B3Mɋ04W4/#Y4JJCLmMcԻMC\C04̿F4\ɫ#CE6N&4 5M +D6-ɞmjkVFieE9#hsr,z{fffffxl%溙A61fcä9e:hg>\^uq3RatͨqY*^]f"X&]yfr̶~9 rь33333]& qi6e`eZ&%CBTbY~sgG0L@@@00k$ H9`eFXAܚT0`i̞;ۊɒ{^KgfI&^tCdI`I0LR[]%3nNL ) ͰѮ3` 337r4~q Vc^tY&Ѳ$ Aqӳ{3WrfQPt`A`+{333333LL)6Y8rEM7mL_6Ĉs5CZFI Ѐ 33Lͻr.+}Bif5DAfg8ffffffkc=n3E$2Lz)/\geZhcaF)ai™iiF&&F)نF&,`irfffpdya`i̎6`iYfffpxI욅jigqALBn!{MffffffmHM`i’[ۗ\eYM333333\H6).]L͏H 338 Kw]FPfffffLDH5#F?F"~\RL04qH7BsQcLvlrWPՙ%gpe1/b~ufffff8bYGF &ƞ& ^333333gE80L4MN4W761 ffffff䃲ģL%\Xh0L熴4 @6Lͼ.4j047SF\K04ۖ3333333ƢYȵ(fhJ8v)7NY]blYrYeLڶbKojV9< )hi$1O-Z0ed2e _WmTqZp>[8 _"H[ "4ot9/[sI.ɤlv)Ø.i[8LfmioImilk֙}Be lillǘٹ|CȒŅYދWY3ǑeWhȬK@f#EW[ў6cJ;onxpl3">oignhg9ol9ldciY`f™Jgʩ ģ%eߜ[|InNUŗh(Z\\[8MB],GZ'ߖT^LDOhy kXgor Wqkn*~3e^ʗhyhmR\nFÓi/|Rnƨ #include #include namespace fs = std::filesystem; using json = nlohmann::json; #ifdef _MSC_VER # include // MSVC stdlib.h definitions # define STDIN_FILENO 0 # define STDOUT_FILENO 1 # define STDERR_FILENO 2 #endif // -------------------------------------------------------------------- int pr_main(int argc, char *argv[]) { using namespace std::literals; auto &config = mcfp::config::instance(); config.init("tortoize [options] input [output]", mcfp::make_option("help,h", "Display help message"), mcfp::make_option("version", "Print version"), mcfp::make_option("verbose,v", "verbose output"), mcfp::make_option("log", "Write log to this file"), mcfp::make_option>("dict", "Dictionary file containing restraints for residues in this specific target, can be specified multiple times."), mcfp::make_hidden_option("build", "Build a binary data table") ); config.parse(argc, argv); // -------------------------------------------------------------------- if (config.has("version")) { write_version_string(std::cout, config.has("verbose")); exit(0); } if (config.has("help")) { std::cout << config << std::endl << std::endl << R"(Tortoize validates protein structure models by checking the Ramachandran plot and side-chain rotamer distributions. Quality Z-scores are given at the residue level and at the model level (ramachandran-z and torsions-z). Higher scores are better. To compare models or to describe the reliability of the model Z-scores jackknife- based standard deviations are also reported (ramachandran-jackknife-sd and torsion-jackknife-sd). References: - Sobolev et al. A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020), DOI: https://doi.org/10.1016/j.str.2020.08.005 - Van Beusekom et al. Homology-based loop modeling yields more complete crystallographic protein structures, IUCrJ (2018), DOI: https://doi.org/10.1107/S2052252518010552 - Hooft et al. Objectively judging the quality of a protein structure from a Ramachandran plot, CABIOS (1993), DOI: https://doi.org/10.1093/bioinformatics/13.4.425 )" << std::endl << std::endl; exit(0); } if (config.has("build")) { buildDataFile(config.get("build")); exit(0); } if (config.operands().empty()) { std::cerr << "Input file not specified" << std::endl; exit(1); } cif::VERBOSE = config.count("verbose"); if (config.has("log")) { if (config.operands().size() != 2) { std::cerr << "If you specify a log file, you should also specify an output file" << std::endl; exit(1); } std::string logFile = config.get("log"); // open the log file int fd = open(logFile.c_str(), O_CREAT | O_RDWR, 0644); if (fd < 0) throw std::runtime_error("Opening log file " + logFile + " failed: " + strerror(errno)); // redirect stdout and stderr to the log file dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); close(fd); } if (config.has("dict")) { for (auto dict : config.get>("dict")) cif::compound_factory::instance().push_dictionary(dict); } // -------------------------------------------------------------------- json data = tortoize_calculate(config.operands().front()); if (config.operands().size() == 2) { std::ofstream of(config.operands().back()); if (not of.is_open()) { std::cerr << "Could not open output file" << std::endl; exit(1); } of << data; } else std::cout << data << std::endl; return 0; } // -------------------------------------------------------------------- // recursively print exception whats: void print_what(const std::exception &e) { std::cerr << e.what() << std::endl; try { std::rethrow_if_nested(e); } catch (const std::exception &nested) { std::cerr << " >> "; print_what(nested); } } int main(int argc, char *argv[]) { int result = -1; try { result = pr_main(argc, argv); } catch (std::exception &ex) { print_what(ex); exit(1); } return result; } tortoize-2.0.15/src/tortoize-server-main.cpp0000644000175000017500000001737014773215600020733 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2025 NKI/AVL, Netherlands Cancer Institute * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "revision.hpp" #include "tortoize.hpp" #include #include #include #include #include #include #include #include namespace fs = std::filesystem; using json = nlohmann::json; #ifdef _MSC_VER # include // MSVC stdlib.h definitions # define STDIN_FILENO 0 # define STDOUT_FILENO 1 # define STDERR_FILENO 2 #endif // -------------------------------------------------------------------- class tortoize_html_controller : public zeep::http::html_controller { public: tortoize_html_controller() : zeep::http::html_controller("tortoize") { mount("{css,scripts,fonts,images,favicon}/", &tortoize_html_controller::handle_file); mount("{favicon.ico,browserconfig.xml,manifest.json}", &tortoize_html_controller::handle_file); mount("", &tortoize_html_controller::index); } void index(const zeep::http::request &request, const zeep::http::scope &scope, zeep::http::reply &reply) { get_template_processor().create_reply_from_template("index", scope, reply); } }; // -------------------------------------------------------------------- class tortoize_rest_controller : public zeep::http::rest_controller { public: tortoize_rest_controller() : zeep::http::rest_controller("") , m_tempdir(fs::temp_directory_path() / "tortoize-ws") { fs::create_directories(m_tempdir); map_post_request("tortoize", &tortoize_rest_controller::calculate, "data", "dict"); } json calculate(const std::string &file, const std::string &dict) { // First store dictionary, just in case fs::path dictFile; if (not dict.empty()) { dictFile = m_tempdir / ("dict-" + std::to_string(m_next_dict_nr++)); std::ofstream tmpFile(dictFile); tmpFile << dict; cif::compound_factory::instance().push_dictionary(dictFile); } try { // -------------------------------------------------------------------- json data{ { "software", { { "name", "tortoize" }, { "version", kVersionNumber }, { "reference", "Sobolev et al. A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020)" }, { "reference-doi", "https://doi.org/10.1016/j.str.2020.08.005" } } } }; // -------------------------------------------------------------------- struct membuf : public std::streambuf { membuf(char *text, size_t length) { this->setg(text, text, text + length); } } buffer(const_cast(file.data()), file.length()); cif::gzio::istream in(&buffer); cif::file f = cif::pdb::read(in); if (f.empty()) throw std::runtime_error("Invalid mmCIF or PDB file"); std::set models; for (auto r : f.front()["atom_site"]) { if (not r["pdbx_PDB_model_num"].empty()) models.insert(r["pdbx_PDB_model_num"].as()); } if (models.empty()) models.insert(0); for (auto model : models) { cif::mm::structure structure(f, model); data["model"][std::to_string(model)] = calculateZScores(structure); } if (not dictFile.empty()) { cif::compound_factory::instance().pop_dictionary(); fs::remove(dictFile); } return data; } catch (...) { std::error_code ec; if (not dictFile.empty()) { cif::compound_factory::instance().pop_dictionary(); fs::remove(dictFile); } throw; } } fs::path m_tempdir; size_t m_next_dict_nr = 1; }; int start_server(int argc, char *argv[]) { using namespace std::literals; namespace zh = zeep::http; cif::compound_factory::init(true); int result = 0; auto &config = mcfp::config::instance(); config.init("tortoize server [options] start|stop|status|reload", mcfp::make_option("help,h", "Display help message"), mcfp::make_option("version", "Print version"), mcfp::make_option("verbose,v", "verbose output"), mcfp::make_option("address", "0.0.0.0", "External address"), mcfp::make_option("port", 10350, "Port to listen to"), mcfp::make_option("user,u", "www-data", "User to run the daemon"), mcfp::make_option("no-daemon,F", "Do not fork into background")); config.parse(argc, argv); // -------------------------------------------------------------------- if (config.has("version")) { write_version_string(std::cout, config.has("verbose")); exit(0); } if (config.has("help")) { std::cout << config << std::endl; exit(0); } if (config.operands().empty()) { std::cerr << "Missing command, should be one of start, stop, status or reload" << std::endl; exit(1); } cif::VERBOSE = config.count("verbose"); std::string user = config.get("user"); std::string address = config.get("address"); uint16_t port = config.get("port"); zh::daemon server([&]() { auto s = new zeep::http::server(); #if DEBUG s->set_template_processor(new zeep::http::file_based_html_template_processor("docroot")); #else s->set_template_processor(new zeep::http::rsrc_based_html_template_processor()); #endif s->add_controller(new tortoize_rest_controller()); s->add_controller(new tortoize_html_controller()); return s; }, "tortoized"); std::string command = config.operands().front(); if (command == "start") { std::cout << "starting server at http://" << address << ':' << port << '/' << std::endl; if (config.has("no-daemon")) result = server.run_foreground(address, port); else result = server.start(address, port, 2, 2, user); // server.start(vm.count("no-daemon"), address, port, 2, user); // // result = daemon::start(vm.count("no-daemon"), port, user); } else if (command == "stop") result = server.stop(); else if (command == "status") result = server.status(); else if (command == "reload") result = server.reload(); else { std::cerr << "Invalid command" << std::endl; result = 1; } return result; } // -------------------------------------------------------------------- // recursively print exception whats: void print_what(const std::exception &e) { std::cerr << e.what() << std::endl; try { std::rethrow_if_nested(e); } catch (const std::exception &nested) { std::cerr << " >> "; print_what(nested); } } int main(int argc, char *argv[]) { int result = -1; try { result = start_server(argc, argv); } catch (std::exception &ex) { print_what(ex); exit(1); } return result; } tortoize-2.0.15/src/tortoize.cpp0000644000175000017500000006372114773215600016506 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "tortoize.hpp" #include "revision.hpp" #include #include #include namespace fs = std::filesystem; using json = nlohmann::json; // -------------------------------------------------------------------- // simple integer compression, based somewhat on MRS code class OBitStream { public: OBitStream(std::vector &buffer) : m_buffer(buffer) { m_buffer.push_back(0); } OBitStream(const OBitStream &) = delete; OBitStream &operator=(const OBitStream &) = delete; void writebit(bool bit) { if (bit) m_buffer.back() |= 1 << m_bitOffset; if (--m_bitOffset < 0) { m_buffer.push_back(0); m_bitOffset = 7; } } // write fixed size void write(uint32_t value, int bits) { while (bits-- > 0) { if (value & (1UL << bits)) m_buffer.back() |= 1 << m_bitOffset; if (--m_bitOffset < 0) { m_buffer.push_back(0); m_bitOffset = 7; } } } void sync() { writebit(0); while (m_bitOffset != 7) writebit(1); } const uint8_t *data() const { return m_buffer.data(); } size_t size() const { return m_buffer.size(); } friend void WriteArray(OBitStream &bs, const std::vector &data); private: std::vector &m_buffer; int m_bitOffset = 7; }; class IBitStream { public: IBitStream(const uint8_t *data) : m_data(data) , m_byte(*m_data++) , m_bitOffset(7) { } IBitStream(const OBitStream &bits) : IBitStream(bits.data()) { } IBitStream(const IBitStream &) = delete; IBitStream &operator=(const IBitStream &) = delete; uint32_t read(int bc) { uint32_t result = 0; while (bc > 0) { static const uint8_t kM[] = { 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF }; int bw = m_bitOffset + 1; if (bw > bc) bw = bc; m_bitOffset -= bw; result = result << bw | (kM[bw] & (m_byte >> (m_bitOffset + 1))); if (m_bitOffset < 0) { m_byte = *m_data++; m_bitOffset = 7; } bc -= bw; } return result; } friend std::vector ReadArray(IBitStream &bs); private: const uint8_t *m_data; uint8_t m_byte; int m_bitOffset; }; // -------------------------------------------------------------------- // Arrays // This is a simplified version of the array compression routines in MRS // Only supported datatype is uint32_t and only supported width it 24 bit. struct Selector { int32_t databits; uint32_t span; } const kSelectors[16] = { { 0, 1 }, { -4, 1 }, { -2, 1 }, { -2, 2 }, { -1, 1 }, { -1, 2 }, { -1, 4 }, { 0, 1 }, { 0, 2 }, { 0, 4 }, { 1, 1 }, { 1, 2 }, { 1, 4 }, { 2, 1 }, { 2, 2 }, { 4, 1 } }; // store ints of at most 24 bits, should be enough. const uint32_t kStartWidth = 8, kMaxWidth = 24; inline uint32_t bitWidth(uint32_t v) { uint32_t result = 0; while (v > 0) { v >>= 1; ++result; } return result; } void CompressSimpleArraySelector(OBitStream &inBits, const std::vector &inArray) { int32_t width = kStartWidth; int32_t bn[4]; uint32_t dv[4]; uint32_t bc = 0; auto a = inArray.begin(), e = inArray.end(); while (a != e or bc > 0) { while (bc < 4 and a != e) { dv[bc] = *a++; bn[bc] = bitWidth(dv[bc]); ++bc; } uint32_t s = 0; int32_t c = bn[0] - kMaxWidth; for (uint32_t i = 1; i < 16; ++i) { if (kSelectors[i].span > bc) continue; int32_t w = width + kSelectors[i].databits; if (static_cast(w) > kMaxWidth) continue; bool fits = true; int32_t waste = 0; switch (kSelectors[i].span) { case 4: fits = fits and bn[3] <= w; waste += w - bn[3]; [[fallthrough]]; case 3: fits = fits and bn[2] <= w; waste += w - bn[2]; [[fallthrough]]; case 2: fits = fits and bn[1] <= w; waste += w - bn[1]; [[fallthrough]]; case 1: fits = fits and bn[0] <= w; waste += w - bn[0]; } if (fits == false) continue; int32_t n = (kSelectors[i].span - 1) * 4 - waste; if (n > c) { s = i; c = n; } } if (s == 0) width = kMaxWidth; else width += kSelectors[s].databits; uint32_t n = kSelectors[s].span; inBits.write(s, 4); if (width > 0) { for (uint32_t i = 0; i < n; ++i) inBits.write(dv[i], width); } bc -= n; if (bc > 0) { for (uint32_t i = 0; i < (4 - n); ++i) { bn[i] = bn[i + n]; dv[i] = dv[i + n]; } } } } void DecompressSimpleArraySelector(IBitStream &inBits, std::vector &outArray) { uint32_t width = kStartWidth; uint32_t span = 0; // The array should be initialized to the expected size! auto size = outArray.size(); auto a = outArray.begin(); while (size-- > 0) { if (span == 0) { uint32_t selector = inBits.read(4); span = kSelectors[selector].span; if (selector == 0) width = kMaxWidth; else width += kSelectors[selector].databits; } if (width > 0) *a++ = inBits.read(width); else *a++ = 0; --span; } } // -------------------------------------------------------------------- enum class SecStrType : char { helix = 'H', strand = 'E', other = '.', cis = 'c', prepro = 'p' }; std::ostream &operator<<(std::ostream &os, SecStrType ss) { switch (ss) { case SecStrType::helix: os << "helix"; break; case SecStrType::strand: os << "strand"; break; case SecStrType::other: os << "other"; break; case SecStrType::cis: os << "cis"; break; case SecStrType::prepro: os << "prepro"; break; } return os; } std::string to_string(SecStrType ss) { switch (ss) { case SecStrType::helix: return "helix"; break; case SecStrType::strand: return "strand"; break; case SecStrType::other: return "other"; break; case SecStrType::cis: return "cis"; break; case SecStrType::prepro: return "prepro"; break; } throw std::runtime_error("Invalid sec structure"); } // -------------------------------------------------------------------- // The header for the data blocks as written in de resource struct StoredData { char aa[3]; SecStrType ss; float mean, mean_vs_random, sd, sd_vs_random, binSpacing; uint32_t offset; // offset into compressed data area }; class Data { friend class DataTable; public: Data(Data &&d) : aa(d.aa) , ss(d.ss) , mean(d.mean) , sd(d.sd) , mean_vs_random(d.mean_vs_random) , sd_vs_random(d.sd_vs_random) , binSpacing(d.binSpacing) , counts(move(d.counts)) , dim(d.dim) , d2(d.d2) { } Data(const Data &) = delete; Data &operator=(const Data &) = delete; Data(const char *type, const std::string &aa, SecStrType ss, std::istream &is); Data(bool torsion, const StoredData &data, const uint8_t *bits); void store(StoredData &data, std::vector &databits); float interpolatedCount(float phi, float a2) const; float zscore(float a1, float a2) const { return (interpolatedCount(a1, a2) - mean) / sd; } void dump() const { for (size_t i = 0; i < counts.size(); ++i) { float a1, a2; std::tie(a1, a2) = angles(i); std::cout << a1 << ' ' << a2 << ' ' << counts[i] << std::endl; } } private: std::string aa; SecStrType ss; float mean, sd, mean_vs_random, sd_vs_random; float binSpacing; std::vector counts; // calculated size_t dim; bool d2; float count(size_t a1Ix, size_t a2Ix) const { a1Ix %= dim; a2Ix %= dim; return static_cast(d2 ? counts.at(a1Ix * dim + a2Ix) : counts.at(a1Ix)); } size_t index(float a1, float a2 = 0) const { size_t x = 0, y = 0; if (d2) { x = static_cast((a1 + 180) / binSpacing); y = static_cast((a2 + 180) / binSpacing); } else y = static_cast((a1 + 180) / binSpacing); return x * static_cast(std::rint(360 / binSpacing)) + y; } std::tuple angles(size_t index) const { size_t x = index / dim; size_t y = index % dim; return std::make_tuple(x * binSpacing - 180, y * binSpacing - 180); } }; Data::Data(const char *type, const std::string &aa, SecStrType ss, std::istream &is) : aa(aa) , ss(ss) { // example: // 14400 bins, aver 19.2878, sd 15.4453, binspacing 3 // torsion vs random: 2.0553 2.8287 static const std::regex kRX1(R"((\d+) bins, aver ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?), sd ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?), binspacing ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?))"), kRX2(R"((torsion|rama) vs random: ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?) ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?))"); std::string line; getline(is, line); d2 = strcmp(type, "torsion") != 0 or std::set{ "CYS", "SER", "THR", "VAL" }.count(aa) == 0; std::smatch m; if (not std::regex_match(line, m, kRX1)) throw std::runtime_error("Invalid file"); size_t nBins = stoi(m[1]); mean = stof(m[2]); sd = stof(m[3]); binSpacing = stof(m[4]); dim = static_cast(360 / binSpacing); if ((d2 and nBins != dim * dim) or (not d2 and nBins != dim)) throw std::runtime_error("Unexpected number of bins"); counts.resize(nBins); getline(is, line); if (not std::regex_match(line, m, kRX2) or m[1] != type) throw std::runtime_error("Invalid file"); mean_vs_random = stof(m[2]); sd_vs_random = stof(m[3]); for (size_t i = 0; i < nBins; ++i) { float a1 = 0, a2 = 0; uint32_t count; if (d2) is >> a1 >> a2 >> count; else is >> a1 >> count; if (is.eof()) throw std::runtime_error("truncated file?"); counts.at(index(a1, a2)) = count; } } Data::Data(bool torsion, const StoredData &data, const uint8_t *databits) { aa.assign(data.aa, data.aa + 3); ss = data.ss; mean = data.mean; mean_vs_random = data.mean_vs_random; sd = data.sd; sd_vs_random = data.sd_vs_random; binSpacing = data.binSpacing; d2 = not torsion or std::set{ "CYS", "SER", "THR", "VAL" }.count(aa) == 0; size_t nBins = static_cast(360 / binSpacing); dim = nBins; if (d2) nBins *= nBins; counts.insert(counts.begin(), nBins, 0); IBitStream bits(databits + data.offset); DecompressSimpleArraySelector(bits, counts); } void Data::store(StoredData &data, std::vector &databits) { assert(aa.length() == 3); copy(aa.begin(), aa.end(), data.aa); data.ss = ss; data.mean = mean; data.sd = sd; data.mean_vs_random = mean_vs_random; data.sd_vs_random = sd_vs_random; data.offset = static_cast(databits.size()); data.binSpacing = binSpacing; OBitStream bits(databits); CompressSimpleArraySelector(bits, counts); bits.sync(); } float Data::interpolatedCount(float a1, float a2) const { const size_t N = dim; float result; if (d2) { size_t a1FloorIx = static_cast(N * (a1 + 180) / 360); size_t a2FloorIx = static_cast(N * (a2 + 180) / 360); size_t a1CeilIx = (a1FloorIx + 1); size_t a2CeilIx = (a2FloorIx + 1); float a1FloorAngle = (a1FloorIx * 360.0f) / N - 180; float a2FloorAngle = (a2FloorIx * 360.0f) / N - 180; float a1CeilAngle = (a1CeilIx * 360.0f) / N - 180; float a2CeilAngle = (a2CeilIx * 360.0f) / N - 180; float a1Factor = a1CeilIx > a1FloorIx ? (a1 - a1FloorAngle) / (a1CeilAngle - a1FloorAngle) : 1; float a2Factor = a2CeilIx > a2FloorIx ? (a2 - a2FloorAngle) / (a2CeilAngle - a2FloorAngle) : 1; float c1 = count(a1FloorIx, a2FloorIx) + (count(a1CeilIx, a2FloorIx) - count(a1FloorIx, a2FloorIx)) * a1Factor; float c2 = count(a1FloorIx, a2CeilIx) + (count(a1CeilIx, a2CeilIx) - count(a1FloorIx, a2CeilIx)) * a1Factor; result = c1 + (c2 - c1) * a2Factor; } else { size_t a1FloorIx = static_cast(N * (a1 + 180) / 360); size_t a1CeilIx = (a1FloorIx + 1); float a1FloorAngle = (a1FloorIx * 360.0f) / N - 180; float a1CeilAngle = (a1CeilIx * 360.0f) / N - 180; float a1Factor = a1CeilIx > a1FloorIx ? (a1 - a1FloorAngle) / (a1CeilAngle - a1FloorAngle) : 1; result = count(a1FloorIx, 0) + (count(a1CeilIx, 0) - count(a1FloorIx, 0)) * a1Factor; } return result; } void buildDataFile(const fs::path &dir) { using namespace std::literals; if constexpr (std::endian::native == std::endian::big) throw std::logic_error("Sorry, this code works on little endian machines only"); // first read the global mean and sd float mean_torsion, sd_torsion, mean_ramachandran, sd_ramachandran; std::ifstream in(dir / "zscores_proteins.txt"); std::string line; const std::regex krx(R"((Rama|Rota): average ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?), sd ([-+]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?))"); while (getline(in, line)) { std::smatch m; if (not std::regex_match(line, m, krx)) continue; if (m[1] == "Rama") { mean_ramachandran = stof(m[2]); sd_ramachandran = stof(m[3]); } else { mean_torsion = stof(m[2]); sd_torsion = stof(m[3]); } } std::vector data; std::vector bits; // first ramachandran counts for (auto aa : cif::compound_factory::kAAMap) { for (std::pair ss : { std::make_pair(SecStrType::helix, "helix"), std::make_pair(SecStrType::strand, "strand"), std::make_pair(SecStrType::other, "other") }) { auto p = dir / ("rama_count_"s + ss.second + '_' + aa.first + ".txt"); if (not fs::exists(p)) continue; std::ifstream f(p); Data d("rama", aa.first, ss.first, f); StoredData sd = {}; d.store(sd, bits); data.push_back(sd); } } for (std::tuple ss : { std::make_tuple(SecStrType::cis, "PRO", "cis_PRO"), std::make_tuple(SecStrType::prepro, "***", "prepro_all_noGIV"), std::make_tuple(SecStrType::prepro, "GLY", "prepro_GLY"), std::make_tuple(SecStrType::prepro, "IV_", "prepro_ILEVAL") }) { auto p = dir / ("rama_count_"s + std::get<2>(ss) + ".txt"); if (not fs::exists(p)) continue; std::ifstream f(p); Data d("rama", std::get<1>(ss), std::get<0>(ss), f); StoredData sd = {}; d.store(sd, bits); data.push_back(sd); } data.push_back({}); if (fs::exists("rama-data.bin")) fs::remove("rama-data.bin"); std::ofstream out("rama-data.bin", std::ios::binary); if (not out.is_open()) throw std::runtime_error("Could not create rama-data.bin file"); out.write(reinterpret_cast(&mean_ramachandran), sizeof(mean_ramachandran)); out.write(reinterpret_cast(&sd_ramachandran), sizeof(sd_ramachandran)); out.write(reinterpret_cast(data.data()), data.size() * sizeof(StoredData)); out.write(reinterpret_cast(bits.data()), bits.size()); out.close(); data.clear(); bits.clear(); // next torsion counts for (auto aa : cif::compound_factory::kAAMap) { for (std::pair ss : { std::make_pair(SecStrType::helix, "helix"), std::make_pair(SecStrType::strand, "strand"), std::make_pair(SecStrType::other, "other") }) { auto p = dir / ("torsion_count_"s + ss.second + '_' + aa.first + ".txt"); if (not fs::exists(p)) continue; std::ifstream f(p); Data d("torsion", aa.first, ss.first, f); StoredData sd = {}; d.store(sd, bits); data.push_back(sd); } } data.push_back({}); if (fs::exists("torsion-data.bin")) fs::remove("torsion-data.bin"); out.open("torsion-data.bin", std::ios::binary); if (not out.is_open()) throw std::runtime_error("Could not create torsion-data.bin file"); out.write(reinterpret_cast(&mean_torsion), sizeof(mean_torsion)); out.write(reinterpret_cast(&sd_torsion), sizeof(sd_torsion)); out.write(reinterpret_cast(data.data()), data.size() * sizeof(StoredData)); out.write(reinterpret_cast(bits.data()), bits.size()); out.close(); } // -------------------------------------------------------------------- class DataTable { public: static DataTable &instance() { static DataTable sInstance; return sInstance; } const Data &loadTorsionData(const std::string &aa, SecStrType ss) const; const Data &loadRamachandranData(const std::string &aa, SecStrType ss) const; float mean_torsion() const { return m_mean_torsion; } float sd_torsion() const { return m_sd_torsion; } float mean_ramachandran() const { return m_mean_ramachandran; } float sd_ramachandran() const { return m_sd_ramachandran; } private: DataTable(const DataTable &) = delete; DataTable &operator=(const DataTable &) = delete; DataTable(); void load(const char *name, std::vector &table, float &mean, float &sd); std::vector m_torsion, m_ramachandran; float m_mean_torsion, m_sd_torsion, m_mean_ramachandran, m_sd_ramachandran; }; DataTable::DataTable() { load("torsion-data.bin", m_torsion, m_mean_torsion, m_sd_torsion); load("rama-data.bin", m_ramachandran, m_mean_ramachandran, m_sd_ramachandran); } const Data &DataTable::loadTorsionData(const std::string &aa, SecStrType ss) const { auto i = find_if(m_torsion.begin(), m_torsion.end(), [aa, ss](auto &d) { return d.aa == aa and d.ss == ss; }); if (i == m_torsion.end()) throw std::runtime_error("Data missing for aa = " + aa + " and ss = '" + static_cast(ss) + '\''); return *i; } const Data &DataTable::loadRamachandranData(const std::string &aa, SecStrType ss) const { std::vector::const_iterator i; switch (ss) { case SecStrType::cis: i = find_if(m_ramachandran.begin(), m_ramachandran.end(), [](auto &d) { return d.ss == SecStrType::cis and d.aa == "PRO"; }); break; case SecStrType::prepro: i = find_if(m_ramachandran.begin(), m_ramachandran.end(), [aa](auto &d) { bool result = false; if (d.ss == SecStrType::prepro) { if (aa == "GLY") result = d.aa == "GLY"; else if (aa == "ILE" or aa == "VAL") result = d.aa == "IV_"; else result = d.aa == "***"; } return result; }); break; default: i = find_if(m_ramachandran.begin(), m_ramachandran.end(), [aa, ss](auto &d) { return d.aa == aa and d.ss == ss; }); break; } if (i == m_ramachandran.end()) throw std::runtime_error("Data missing for aa = " + aa + " and ss = '" + static_cast(ss) + '\''); return *i; } template void byteswap(T &v) { T result; char *pv = (char *)&v; char *presult = (char *)&result; int size = sizeof(T); for (int i = 0; i < size; i++) presult[size - 1 - i] = pv[i]; v = result; } void DataTable::load(const char *name, std::vector &table, float &mean, float &sd) { using namespace std::literals; auto rfd = cif::load_resource(name); if (not rfd) throw std::runtime_error("Missing resource "s + name); rfd->seekg(0, rfd->end); auto size = rfd->tellg(); rfd->seekg(0, rfd->beg); float *fv = new float[size / sizeof(float) + 1]; rfd->read(reinterpret_cast(fv), size); mean = fv[0]; sd = fv[1]; StoredData *data = reinterpret_cast(fv + 2); if constexpr (std::endian::native == std::endian::big) { byteswap(mean); byteswap(sd); } size_t ix = 0; while (data[ix].aa[0] != 0) ++ix; size_t n = ix; const uint8_t *bits = reinterpret_cast(fv + 2) + (n + 1) * sizeof(StoredData); for (ix = 0; ix < n; ++ix) { if constexpr (std::endian::native == std::endian::big) { byteswap(data[ix].mean); byteswap(data[ix].mean_vs_random); byteswap(data[ix].sd); byteswap(data[ix].sd_vs_random); byteswap(data[ix].binSpacing); byteswap(data[ix].offset); } table.emplace_back(strcmp(name, "torsion-data.bin") == 0, data[ix], bits); } } // -------------------------------------------------------------------- float jackknife(const std::vector &zScorePerResidue) { // jackknife variance estimate, see: https://en.wikipedia.org/wiki/Jackknife_resampling const size_t N = zScorePerResidue.size(); double zScoreSum = accumulate(zScorePerResidue.begin(), zScorePerResidue.end(), 0.0); std::vector scores(N); DataTable &tbl = DataTable::instance(); double scoreSum = 0; for (size_t i = 0; i < zScorePerResidue.size(); ++i) { double score = (zScoreSum - zScorePerResidue[i]) / (N - 1); score = (score - tbl.mean_ramachandran()) / tbl.sd_ramachandran(); scores[i] = score; scoreSum += score; } double avg = scoreSum / N; double sumD = accumulate(scores.begin(), scores.end(), 0.0, [avg](double a, double z) { return a + (z - avg) * (z - avg); }); return static_cast(std::sqrt((N - 1) * sumD / N)); } // -------------------------------------------------------------------- json calculateZScores(const cif::mm::structure &structure) { dssp dssp(structure, 3, false); auto &tbl = DataTable::instance(); double ramaZScoreSum = 0; size_t ramaZScoreCount = 0; double torsZScoreSum = 0; size_t torsZScoreCount = 0; json residues; std::vector ramaZScorePerResidue, torsZScorePerResidue; for (auto &poly : structure.polymers()) { for (size_t i = 1; i + 1 < poly.size(); ++i) { auto &res = poly[i]; auto phi = res.phi(); auto psi = res.psi(); if (phi == 360 or psi == 360) continue; std::string aa = res.get_compound_id(); json residue = { { "asymID", res.get_asym_id() }, { "seqID", res.get_seq_id() }, { "compID", aa }, { "pdb", { { "strandID", res.get_auth_asym_id() }, { "seqNum", std::stoi(res.get_auth_seq_id()) }, { "compID", aa }, { "insCode", res.get_pdb_ins_code() } } } }; // remap some common modified amino acids if (aa == "MSE") { if (cif::VERBOSE > 1) std::cerr << "Replacing MSE with MET" << std::endl; aa = "MET"; } else if (aa == "HYP") { if (cif::VERBOSE > 1) std::cerr << "Replacing HYP with PRO" << std::endl; aa = "PRO"; } else if (aa == "ASX") { if (cif::VERBOSE > 1) std::cerr << "Replacing ASX with ASP" << std::endl; aa = "ASP"; } else if (aa == "GLX") { if (cif::VERBOSE > 1) std::cerr << "Replacing GLX with GLU" << std::endl; aa = "GLU"; } else if (not cif::compound_factory::instance().kAAMap.count(aa)) { if (cif::VERBOSE > 0) std::cerr << "Replacing " << aa << " with ALA" << std::endl; aa = "ALA"; } SecStrType tors_ss, rama_ss; try { switch (dssp[{ res.get_asym_id(), res.get_seq_id() }].type()) { case dssp::structure_type::Alphahelix: tors_ss = SecStrType::helix; break; case dssp::structure_type::Strand: tors_ss = SecStrType::strand; break; default: tors_ss = SecStrType::other; break; } } catch (const std::out_of_range &e) { if (cif::VERBOSE > 0) std::cerr << "Residue " << res << " is missing in DSSP" << std::endl; continue; } if (aa != "PRO" and poly[i + 1].get_compound_id() == "PRO") rama_ss = SecStrType::prepro; else if (aa == "PRO" && res.is_cis()) rama_ss = SecStrType::cis; else rama_ss = tors_ss; // TODO: #pragma warning "todo" (but the question now is, what is here to do???) auto &rd = tbl.loadRamachandranData(aa, rama_ss); auto zr = rd.zscore(phi, psi); residue["ramachandran"] = { { "ss-type", to_string(rama_ss) }, { "z-score", zr } }; ramaZScorePerResidue.push_back(zr); ramaZScoreSum += zr; ++ramaZScoreCount; try { float zt = nanf("1"); auto chiCount = res.nr_of_chis(); if (chiCount) { float chi1 = res.chi(0); float chi2 = chiCount > 1 ? res.chi(1) : 0; auto &td = tbl.loadTorsionData(aa, tors_ss); zt = td.zscore(chi1, chi2); torsZScoreSum += zt; ++torsZScoreCount; torsZScorePerResidue.push_back(zt); residue["torsion"] = { { "ss-type", to_string(tors_ss) }, { "z-score", zt } }; } } catch (const std::exception &e) { if (cif::VERBOSE > 0) std::cerr << e.what() << '\n'; } residues.push_back(residue); } } float ramaVsRand = static_cast(ramaZScoreSum / ramaZScoreCount); float torsVsRand = static_cast(torsZScoreSum / torsZScoreCount); float jackknifeRama = jackknife(ramaZScorePerResidue); float jackknifeTors = jackknife(torsZScorePerResidue); return { { "ramachandran-z", ((ramaVsRand - tbl.mean_ramachandran()) / tbl.sd_ramachandran()) }, { "ramachandran-jackknife-sd", jackknifeRama }, { "torsion-z", ((torsVsRand - tbl.mean_torsion()) / tbl.sd_torsion()) }, { "torsion-jackknife-sd", jackknifeTors }, { "residues", residues }, }; } // -------------------------------------------------------------------- json tortoize_calculate(const fs::path &xyzin) { json data{ { "software", { { "name", "tortoize" }, { "version", kVersionNumber }, { "reference", "Sobolev et al. A Global Ramachandran Score Identifies Protein Structures with Unlikely Stereochemistry, Structure (2020)" }, { "reference-doi", "https://doi.org/10.1016/j.str.2020.08.005" } } } }; // -------------------------------------------------------------------- cif::file f = cif::pdb::read(xyzin); if (f.empty()) throw std::runtime_error("Invalid or empty mmCIF/PDB file"); std::set models; for (auto r : f.front()["atom_site"]) { if (not r["pdbx_PDB_model_num"].empty()) models.insert(r["pdbx_PDB_model_num"].as()); } if (models.empty()) models.insert(0); for (auto model : models) { cif::mm::structure structure(f, model); data["model"][std::to_string(model)] = calculateZScores(structure); } return data; }tortoize-2.0.15/src/tortoize.hpp0000644000175000017500000000320214773215600016477 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include void buildDataFile(const std::filesystem::path &dir); nlohmann::json calculateZScores(const cif::mm::structure& structure); nlohmann::json tortoize_calculate(const std::filesystem::path &xyzin); tortoize-2.0.15/test/0000755000175000017500000000000014773215600014302 5ustar maartenmaartentortoize-2.0.15/test/1cbs.cif.gz0000644000175000017500000011047314773215600016242 0ustar maartenmaartenʳ_1cbs.cif\s⸲Py`O్:@9@&@2ske|$[m<띙RZV-ޚi(UaP7O%`aqko${~3OP?=;2Èl}xK[HզoX8xh[ JO藸4㛤Kdž"˲SUX)_Mt-'*(S/c}j}l ۵Ct-=xBBD {Iߤ&Q iʾy.e:+"mQٜHB;t(_чf s釨s`ST5}S{k#_eyG6bj5|~Ʊ5J@.G%?MI{E}` > F,8Gzv=pXz.;R ȔLv CO;qZoA+MpV+5~o_EgnIxQC¦n&I}ˊZ4n S'DzG-a8hriڀȽnsȸ C`I7<./Txm S +sLC:SyeO #`:|=Gth0N6t? *FQ!B@+0/&vrlwǭ<$]ݘmBfW~]0/dsê<[껎5(\4A +{WT(XQUFUv3QU'8BTã4A}vMb*s%3QmØ$FUg&(VED>Ex{j0j#u) 6L]W e2}cr7^߾N֫eF}xLe|\4F p{x|Mxw!_wt~\h|y}YN >Ht2cّ.iXfs;,;#CpZg"('\b!gLy F:$݋ItdĺF7]zn D"Ut9ts w"˻Fځyo4۩lpd=DMw!F&<ȋ>oTTx'$\ H8Y7ip iLot. d:TNZM8nbh(h=NoZUd} c$X&5*h5x,|MsZFU^]^]%B* qvp1n[υ)qxe( (B_osk];\}^\p'6u0P8x Qfր'ASՀ `(O7EnsENDE z(ro ӎN1#DE Nt8 N1zb&(8EۀN1kb: KN1u(INg#Sn)èSXSNhP)r5]KEοS\ XT쇛 F}Hw&nU5qRu$:@m;Cbp9BTs Rvcy{> 1 F`{oUʣ˚i??s2Z74խj"uv/ApOGagŻ*M˫PgM6y@0 y!X9P:9]pgoKV;o?73j@3,R6fd.C*vz },~^yALR\&mlXcmZ6Sj+:&ɝrmquEx =5aXIh~ƴԓ+IԷFa$m % qۛV%JFa7Zc@uȳQpGKT &^7vt;.sKOxg|oef8{uCqR[PO{\ qJy?g7ObURC-O$3$G@gނjLmPHT|;Y7) oc%t[3vϒEt;+c\B8^Dk yr<| 84} Km-a ϤwjLR tio|NqHx}LS &w֠^ *nM:շ[5ɕ]rҸl?RCX&+'r+qaN{'LVcTY zoo̢ sņx A8)Ml,^}t#%Tqn/EPlŰf*s` *$,OkVo;5 gfn*$̯ 17xMӵ, b8rjXf@q-ճ$ڬ$@8pL9M$[>'ӹ\.GҐ/Ŭg+cSԉˣzh܋0MɚnCYJdj2`cbFp&`>0,cimv/À,(k17][2pȧ}>e)jvo0 0(&!E!Y Ր4.j %bk$ )$-8mF/Cˡ%ZW$|RhNZ͉|tkOV{v54ZjX5+W\^.b.5^ ~W[N/DWDDWug4rBnIun +Ȕ1~Lg:'l'>]}6k|ʿ:Y<׎[3{Q~Z(Wu"d\/o `!{j4{@-̎ '*LE>[v! A]y 'j,%c|; kE OuS ϜA`x N`_ `F߬<0\QK: Tl/Dt'?ѨMRAzoGgGsÌ'KuxK<ҰӅ< <!W45"ZXuSnBjx՝]]1@a0mOf Sg:j=d/Ҵ m?rcGJxEwYiZ vn&fە[Pfޓq'CZła^(mq.EǾ#)-,];r^{ooLD-S7اOhǡUAyhr  (g] By֙*VS1YiڋɊӟ:dy_+&w6D+60~iwI]u$=Ҡ9@P[:mJ۞_?V$SןvUUd e&y<>cw97y>>A,V,HZX!I>|)TOE1˟rC7|IOY!y;o'|)'?d,L> H.lǟrI7D}x7ǟ?bcW9ߕ2FؗO &CRO1>$dt L>tRZPB6+O-g?i%_ߗ/{̟{|9~qYe W{O?mD_9QWNueD_7QMue=>$O=̫OԎ>iI 3>$O~>̴O;N>P?5Svzl E>$f}v,#2~wfYn˾?.Aן߶:ϾoO*].&~?йm9mZYer?fO_׃?`t~l.m׍+W$}m=~u侈dòщ~76_ye~ؾoVop׍ΚaN l'+xi.aԖ%?>|aV4"{|w9=wwEh^ӟw_p$/ZܯQ,;T y+wyvބ]K?MOY Bouk ɀ~7w~o_qea{\R_-cT~7fT:3`/+M_|O_~M jH}cz.ScSyӠO&uP4[ Jj+DBђj=׼)P{ϻ%Rhn/S%Uz WrSm\f{[Uzj늢.D!iQ\T驭+zI B4YuEa 謧f蛃 5=bS_`4%iI+ޠ^?7}L"%i^9K@s1\MTiuܖ]7ĽLm)]RPLP$9;2A}PLߗzo~zÕRhP%)2]@{uAԙi~=3 ЦiI2 ~t#c#]*JMe}%@`j%οdx5̵hw~hϑ@4L{3^-T*Eo%o+^ ^~1ٟWT;M޻}A=t^Q(4s}}p ׿]t^Q (~'y_yCqTIeiw TWm u//;4-AKV/%J{x>Cm3:uJ%Iz1V:;c3cLoI(S(m0)HJ{,td_ oZV=q 4ܦ=:7K:<ԧIOPЀvwߗit 4Oz^[ߖ[t2zQ_u-*= פ 0-AMɘ(>p-JOC]Q6MrsKZ- Ь>{$1[Wz }P(b(~ ЬG1mVA/YvlBӴ~$+ I+͠JzF}|Sե%I"c%iv) K(p׾㘶>R.i@ٰp{r7]yBTzfڥ6PypͰOWP-vړ=׍#TRMj8@isXK=h~ڥ6΋q47]*{ܠ}El1UXWԛh1-{Uޯ4oh>?F;\XS-Y멺SW~~h}kRǿmm_&נ7LW$:8T+}}>U7( ˺一*I[@ͽm~A6]I׷KǍ-'I3;=P~\R핿&wGРgTj+g?ROCUx%hOS[QICh^͉)9s?;j%Xp~FJ~׷0KoT $F\LP~ɱ@堧]Ҁ<<Tiz:@1QNn>Un<YK4H긡d;(Af{ h \ }COYh1zAOA e)7>'=Y7(p1 G&v\4IO7P05b[RBWtiP9Nz&z{/jq;1 4MzFO㡧WP q t<yׁcE[*ߕIɘ^`ˆܟ@1Qɘ@Ᾰuҭ 2& 63g/Z1Q +nr `Tޣ>6'xo.Ғ~B?kF=.FeZfj%}W+TK:{&eݦ i6\2gt=:oIKOZ$!N8.Vt:pORj;$-qq1|]@]|\H}v i EOZz9M-OjwRot p'@/7hFBӸ.'@-cH\t p_am7tx&}]$]f?Mz( IʼnC*ieؤfݤv,Ik ʁOB@*\2 3r!+ABBʍEVvUQsH*6'5mڳ;D$xkLkՒ=c(?q^́xs=Q`K J:xrD[][$Džv~lY.ԙ-DeJ YJd|=RᢤYi]s[*Oƈ7QE%YljuwQP\@2u`Kj9dufQ붟Z8el)TlC["3-8!̣T($MlTz; 늊Om6ܝT42'/O4e#Ș"gĠ@A"(e`ՒzsP~MFIx} (o o.R[.I$V~ʟ2o|G.J9z)ʟ+Y& ڥApPʤg?7 YVV~ʟڿlOe[|ߙUE}o*h*=g?vaJJ@nt"#j]kE⦫񌊒lCURNqUby0ͯL>rLZzoOF&J6dNamo,Pc%{UzAOKS'du6p%-zAOEf%)G.zAOK{fxCjE|f1UKɊl堧nQܑC^FK4^=-uF0]4=f9(n^EEOACr9x0R툎zV=-{J-6"HDHty(eFq F=BpD9 _qT_#n_y^$ Nꅬ% o8qQKs j&'jj9'\_誧=jE0҉)\{Le)S͑[m)bK EO9'>{HPrZ8N='R-ARt eL;']$Gv_*^[8N?' 4#ݞ"4tcIT蕴Rzx8NZߋ\H I(83*O/\3Z%CDRl S[( q2PIpzۻImRxM> JgWf-#)Ԡ/qS.qa* t6|}[GwLXFK׷UuHm5-‘ TWל ]^iźW+yF=Q:njpow$2n368:njxZ%!m*is֜M7WeX:@W=͇E$2NS0F^ t`_鞖摈q)EOuz)b%lȤt7I 1;F`j5gBo}m T<Bzi^lsӅYЕX.g_9EX@o̺FIObd z<(އlIttL,%AL y? tU3"E U.U tQ3$e_P& 9Egg/>OT"(*<[w~Ly&< hdJ%pQ;MQ&L j7ܢY ^aR k@'uPlaKCDZwuIqFI>3,` 7 q8臈p8A-^s*sCDx5Pq^E̘(ABtv|yIA]s&/{)'qFuyH9g4K.h q{Lx}ʹH9s?XQ13@=s&P\K%9j!Hj" ;fFllF˹H9J~(Vj=s&/ariԠZO眉 Թ1hP ; ɈH?gRz?ui/^% 5@WEL" jɃl}nf %z^n֑17;!A陰-ц+ĶLT/!-]ut8GedrTG0vt|ZQM҄o؆TLT>VP$!g'*5|=I'*ݥR p!>$ϝIUAᏋEew)jVT\ͥ*~DD@I"N1ܖtiEmḨgBο<$-tWP9CQ.`mLC'JeϸG.<"YGc4R<MR4M&:9.<MR# L]trL}h\sE>IdT~9y&rrVyQ6S42'τz5XCB2jD9y&:(nn{} j՞rL1E n-əT{&tFƇndr аǮ;^k:LRkS,#~.tFmbi`߇$$+ZO_x}# >oإ% ?ML>&MmD To5gԱs hcZgU uw栥Lr-z5-I=M嬰˝`1w:aPh|~T:)9({Hq ( Hf eEDΓA+(>E9!M$eP-O띰 aV3JyF5V`f e}}NVn:T[(A"BQQX2 [=RWUmw0c͑*nJfR.y@M{# T^]Gy^^ ҊGftk]$\@8G05M]?y^R^QZC>)0=, }OMm/_y;n5GOAל mׯyURկ(4IcykT)3j#}j*%S\0Qv$ɧis(tzhIP7LlcW{Cܞ t4쥡 ۿ6hHm/g_gC%SyF0E:O"ю gYξ4, Ӏ\#"[AQ F"ڐniЋGa|M L|h$3J͙u|""^ dAv$Uf^?<:ooAT9gOni4 ݖrB[w=s&6,9x7yjr$颧5kvP#}yor%W3$lH%ճ\=oj铆GƣS.9Ӡt0̒<^*E=@#xK"=^ܬJJϩitQ05QWrTTvPC t ZA֗Aȴljr#xX?NTem{HLTР_&OS~0Y.rt9e@Q\,8,#[k{[@3[|X!@CCGb]$E4VQ5L˔)I nrvwTc,3q$e_p&PLKt"},^ADi噐 v9\T4k}޵L9HZؘi>812j>ekě؞+nH#:ZR; (&#eJڍ(Z%/3Ҧc+R7]gPdO/J{) [@ 3osuKk4(6Rp7Pp.itIVl҇wHKk1͒;_mLyՒW2B:|={34`WV7շ~!ؤ]Y@sEEX~w/&P/= ZI<8'uB*) tF-((1 :Q.zj3j~R1Qw~.{>HnC j#ٓ 픅FR+v7@rSؐy( IS_@4 IUpnB^ +Pq3Ljrn"E7_*IR/􋆈Rdž"qCq__-iYsqj4:__he7|-<7S2>l(뒢: gWuPac׏i$2__Ęv7]&jPA0'IAZu@ şΨV DOjGFwRtF5МT߈Er3*Ut`a–} [Z@IOgT-rۨe?Q@zz6$*'IJ莼dF?ևwtQժP$3f-RyOJ@EB:^S C-0I/v#w|Na: njIٓ+'& Hgpm(e]T*LgQlm9ZԻi>'_3D4cF)IV3aO [@7_4ܛF0|(Rd4˹ (ҁԳIa;hNjk;a|]$POFaKNƣRS^j&}H  Ͻ9PCN!P4"HZzs@/f pW'1Ț3fed͵`xR)}9@T\t3.Ӭ>+1IR}~g4a-beƄZdSV:beLA2s&qFV/Q=Fјs&vP˵9htYsE/)5|z%]3^H;?l}x]3>xBaӨ;1z&m)'שіO?ݘ{ fJ.)רb$;Twɷ"⹣J%PHb?T D6T a'ZER Z-ZΤU ~@)wg:`]r$.gIK{ :u ]@sE1~Z9e'Џ4htP8p7L֮:6Ԝ F: ҕ8QiJp=W2:IBDbҠ֫l1s%5y&u;&wr<,@*τ (ut{sS!6iw8Y]re3YQ\qܡP@=YrXJCšG0$_o|8Da8PHrKڛC*($e%Wi>Nj΄KGWwiNAJ P|ؕ_lbӀ#](p1 s0FE}ڕ_@=<S+iSYE'EҼ+Et/ax_vPVtNy$](y7\LI[)u'P/t}Rΐ%&u'-Zkoz$͟p4l ӘjnW&%!PNYUӻ{ٱK'BA@#{b !N6ral4&EҴ;(F:fP@;4ϬvB 4%]NW&zw@cL('B΍-eN3a7P%硒UZ5*=vw"h!,3 bPjěY"ʨ TKw'B%h #g=KH#&P}3ʊJQs˴劉a3f\@鹒, tYtF:Q1݅Q(C0e'׌S/*eU_!$FkT/t:lFµ.f6īÐNgT}TQÐNg$gŊ81+*Ψ*iFPՉRjnPfDbw-n' =x3τeL{G7CtQgʥ:WX?_&EtP~ה?0Ł0S{a]$MB΍3̧)C_@ٞ J?T-=V|G=A9(^ łMG_$< MxZ@g.&b|(5dG^FO;#qRFNjq:-Wg~)٤9/̽9O:5B9iPO9""JSLQZܛc%=cVf-IH-\y.VssoM\~#݉-7I{ :e!-Y:|A<@t;I RxMYHDUTgk~xHD՛3!WKi`N@D3__T9VP>P)AW:uP/9h|C3__T96X-a61e.*zsN'Ptחd*e$ tՠi__ESا*A0ʇ́x4$]lUzj9R"#mc7.T[!rG)P=>pOԥ@=5@1Lf"mN[XѠiuЫ`)`zJ8h,Ra8D)އ8X@/!"Rw cV eL(m®5I*8@qq$E h.c:@ᥴHq`D oT7#Y6c͙xs~}賂=hcJѠq/^Iz YaPaaIdaTaL򰡧BX4VQ!Ag'䒔aP@ܩ#[tl"Wi#z.: hbv Ji) tБ"=Ŏ3TtYБJ;`hfhI2ulmp53pC=?4^Б)=~^ ^sjTQ.y'˔%;8LhH#n $77@W_ wotU[_2IPjRs h tt-V)L|G;haxCsLGCiv\!  SfԞ:? (Xeu[]fźPb\#SGOz]$=5Pc==S:v1udZ)Wut"zQ2v&)A6nm?O Ś(lI9)T.@Ӕx:QKrTabni Cx6ix\JҌNTP1L-+( -yA 240@s zeIj-R ?{]$[4h`8$LLk򇉹E|ԋkzԜgUKJpF5IRa7ȓN|%j^Da@ٟVII[C!*َpՒƩ>jfVO8U0o.( ICT^I8GiPO|PgLݱI>J.& OQs&Рf~Pe9ח7N2qzmVi8`9gBfQ~x\1EO眉URja t{.wF[^)6kUOZ)M HL Z[Z;jOoaOatTT:Y}FE~FTJS )?nj,ȍ^z%Rd P`0&O³]$=Y}YrzZ%>,\tQtb=Mqd䕯[FJ()s<1lxM C$@֗NV_VnDS0VӇZNV_[Sl9IzdE+- ~{s_'SbAMmݔY͡A3myi27Mn A{so9C6iݥ"׷&mH@x@soq&Ye UZT-b ͱJZlPl`>FZv3s͡AIOS'*n[^IOTmҕg.ia3c6W?N.A?Q qͱHjSnY+Ng;PlnP&P@k'3%*>kI+AREl*m ?Xy0jI 齡"M@y{F &P-L\;]:QpFqș %c9d6P#b@Odr9dX 1c]s x~dza4pȘs`,L\0<>3% .Cl( IگYG)$M C ruMvg@_kCle&aa`Vm.$4Oc6t2eskA$mlwZ/!if>_3i͡Aʶ0T3Iso1_8Pkdš@I1@4Bn~+rc&ͽ9vIo<7fpmtQrp̴1R29L5gNOv$s```>oOAÊ*l*%~ -`]f*'%(4a C![2v6 =fp;pX}Pd:{t;z9$ճob]RYϾg e]f.6^X|">s`+ϙ/2}?5To}.AAW̎i2vU[)sSAbVƦfKƦJ3kSSw ,⅍YjoP~|tQ~;Ex7P QP[BH(sE S.-NlsBg.o"P08PߩJԒjSwM4K26 ߆2bmp%vBkemꯏtIӒ#YRvl]Hr1/vckd3C0{BF/Նy&;{5(bG_ Xo"!plͅTA 'F~\x%<ԱJ[ԝfEO=_A(iTi͙x}2-fcY@&]s&Ab('L \HD}ϠdF&=\N9͟w t)YΙX@TEx^m04sz}<"S&)yFuѽ+U?]Ι@9?3Zgm$+cFi;G!S}5p5UVYm pʄ5oJCKe#;(P, 5%iͱj 3=o&b3 E4e=td*'H4e* ``Rk(jI{shD*eRkbYHZ-$Fߊ:ZbAacOJ;vURgœ@ي `YE}LcLqB+ش%̌ao,Ӝv);}LSJ~Q1]4m_ΟiG²0KY,@I__eҕVśISU5O/E5yGiPþ҃!kPyGiPD2* LAwITMVQ"eTϏq$D ~^r~O-J׳(1@9U4&Ibu3B=@=J:qG0M@" t4jy4K"d*Z+y.ʟ{l(vBIE' RJXX\Z51_&vl!L/rǿ닳kjl4p!g,jy&}ѿ/Vtx3τ&IyX3f?I1]tXA܃?NJrE]j]$ %c +Ǽm}BР<2AI&;;$zZҮ~wMRtu 袧yZBD-zZv=mrjNTGI|3& -uFxeZe(s'c"_f7&(XT9ggGz/]RxVnR- !AInLI"=I\)ZwcI+|0O^ݘhc$`Z)A &Џ4h܍Z f?>o֠i7&ژ Km[;Ԏ wc2UfwLz-5VP-%VZl실H_5_#gPi(e<E!3_#5(y{IL@I|ԯD%EwrW9~)CC+I=6';Qb h"%0:h:]l(nRknqj"HwKM (uL~+Im$,cdNWy&&Ib z~GZ6PbAa0.=@b/Aa )}K~Su5ϕgB*a %7|ck VQ3:M+.hXCn9Q(ZUđb'6o,zqI.99E2oVq7XCY*QتfP@^9V8Ds-iګ8 'Ff%34Uc&Bb(ṟFE!BJ.w,:=:=4f!;ٿGX t٥9=Գ:CIhER{0{4ص3K+(9S.PGh@(IzJ`׿@$$_I`(rEPʓ3!^$fOY+-H.+>5кNL9,7BWAWY7;ʤ.iI4GVW,_]^]T*,uFRkn+Z$*gu5[\H=KT|yL,V+=(V_Z%Ț3*"H8|<% DFI52E@w53vIكԌ?~;104eFÉi,!iUpݔlkߞ#);@SBc]%Aep(32[=G$!SV@q)&ײ8iT(LڷcXRZkВeZ4K鋉lPj T/rȔf֪xBGS i9dvP{/x6j>T)A}OڝV6 Ry(.-ʴ.U/gs<\3J{5dAL?3@/"-UjШAI!~!)=l Ь@kJJ~FHBHTRIkйW8oI&Џ4=tP\qӠ~zSH Pu9+7CP+Ꮄbl=VI<@X!%}ApS-y^fԒV4?quJ,j=-3t`oU"i:ut8I.A]4&齇@00>Ӕh3avPO F@HH8nHby^%]K0}E{Hs0md:e4?ܩ~>jyg#-Q:\ET"ok@1jxנS}Xpx);)83Gm."ҁq4k2jh#j=&PU U_AttKIؖR{s.)<]eF-OJOLTw}V( $ڹO"AO< 41YhIЉX@1ʕl]$U< XFLts tS3H\xEzkz%zy&P12z(}$&PgBFyP)k=qo%vBl7j8nUzj!uZhdIP~HcrKra^l4qMb=j Av'v/crKq!FUJVO~K6Uǻiqt7mފ9Ts"Ԏ(tSNw,gTjZE_ "?M'YrKp'Z]4 WIwt7ͲK19nZj#(jCj}[V8֠t7./I. KQx7-gbTayfIB=-}UNw"*sLmḺLnZ9MK5bNNFwl-{{VPd^ww]lY@InZ_e$LX?GOJ^VI@6%mK Pc=x}/. #-'Q~N>I[w y_3:誧'__%D4H&骧'__{}ܾxe&@Z@='__r6H4|}ѧ=k^Z2fOgkIP+ cU*|}鉺rw4wARƓ϶IfLǢSԞ}}kH ҁҠƓO@##5?SB.6.|}otlhFj]^ӓI l)%qY$]khɢ̮!Og yV|H4ݣgAS24Jc7sw+iG-a"?r%I܃vG{j 8yAb\@I{~1)*tQ4ݣ1 ?hfo(}sG{H*BnCL- zCJWAs<yJr;頚Ԝ7PrU&,T4p>l}>5>9) ٥f*Zf<9) I@seJVH HzBnWE*.|$颧$')#A!̑OYH  0z9תxOC#iƋ$c T|}!̑,eq\#gs;JYHH75QLMRsE6HdzjE9 iT+>& vEʜi C9JZ9->XNi8qOmeLEţfPп "Ip#i[X*샟xm:j!TERw"y}Qڎ7gWQs/*_Sdjcїt(Ae@Nl+y}t[)# w-+h}_%-[Z;P/53P)e[1K) *}3u KtS]O+h[4'82:425aS<#! JjzZAiJhIjz4."w{phhP7?iwQOZs6@?Z@AO<Z~X3f+=5X׻`VhRh! k j5h(u~‰b W .YJ+ wMOK Kr9<9RvP$>gF>R5]O7P;'d-颧r hd5NٲGZ>[66j2REQAf6S4?uV)*U/8R%JٮR;}ֱI7J*KM'kdrtS|P:>~TT t[]<*UYȏpN:QJlD FSq~biAmW6 L7iU*FGEײ'kw to,4Kn]UʆR  CZxla!R=4 (*"M3jϖԦK^6|LYsAW/FB`Q~'wmZZ..LIE[~ѡUҼ[VqvPuMRz@\R8mkDbH,pd2,3Kò}3u\ߤ}\AJ;َ_%5E:%& >Q5i~N~gU1ASyedgm~)ߒ:RcBf6 y(v|,aRBvoJ8uLxϙiF5Gl4CUR7Pd`L )r!eTY]3R6]6ZWP+QRJ?w[$:U7i7Z i`vԣ[H:ΨMR3fH\ͶӴ.gmzԱ\HDgC 3AFQP 7xL4Pt&Xh]~TڹI4tJxHTDA6$'#K 8Iphe7I%\n'YzHph2-m.̝0P""Q+dBgoÔMSG฼I{~ZIicwE"EVr!W$GYOza{l'le;{C.KD u%e8..<Y2Ip-Qo* WpcQ׿U 5cjt,14Ы0W|?7'KD #n2_d+D5bvchKDF3rsa0jͥi g~@4Vc߿A?~_3`L͇//C蚜n8f^ +@/oޗ[Q#@厠`9mR0@3d PJ#½dM~ GI2 7]crK+*' d%T?kjиrEp2g{k=M'дGIAh֨sfr4.O]#lhY@y=w:);+AeEhNYut]QFrE{(W[DSPA;JK+G PA?;ilPAc$I*\SتR8vgPf)7bBJ<4jP@{Xsʄ)oY0fP{Yv)l{ᔉvO-L+MRqٳ_D e+3-RZy+0u:Sջԧ=QF8 =hܗN&P{ǟ~|@Mva6qhRtw6@hPx_tf_nZ 4>IjysD>Pa!$gs(h~r4嬌s@˓bB +@D-㸤ⰵ*H'h|5ϠE&ؾ6MO 4\ ;`) }PoIxt%} Aӊ DҘ`ouO+ S#H˚NP/m3HiE%!bm=Q.2Ɩ3O+^laY"Iv*Ϗ2Ч4$d5 }ZQqEa_c&EHuO+ ޞ{e$lwGIЧW4t5ԙVT$ ڢ΅;<@VKC5%r{l=>QAʬSNn|! <9m=>(x{-cLKD@3I:9iH7@VuIQ6iE3* aa{"oGk}ZQqE]dcsh2u.y}ZQqERoyxqI}j@Vg\Q uڧVT&! ^خ<6RpiE[H"O+?QۢJzhM"Ƅ{ZQiE7u[sO+?( p%RiESh%vA@rO+?(v+k@VT$eOt$%*AVTx0^\Q)n3oʹϨ[30L`Yx:QO+*(+9y%{")neƯx%ZQ/R (ʼnI8΅( =UV Hy}ZQL6YpQlGYq"oO-9O!F'piE[Hg ki fgg/\ycjЧ+T3$ia͸8iEupǜ(_}kׅWTbݨVZe~ZQCfhnA8tiE"!+\&WT^VT _HKLečJh1> Ϩ&$o4eVTz\QG>FӊB:B4Ҵ˘>x&vIϓFӊʏV!  ЋQAЧW$xZ2QO+*?(0,rI(!F,gDӊ?ᙈRBUAO:=d!sR6Fmӊ构6ZIiE{Ť;yILT9>>Qdm~l 4?xFE{ R[;NW.=b 覻ӊ*O+ } aE5nӊ*O+*I\Ivk?RO+t(#͔D .?Ykg"O+<<)q!yJ|(]c<ʋǴ0=>Oӊ*g*Ax. -tτ>()\kޞ,r{xK<?4?({=z&Xi]ש6VT~XQ0\H`ِ?&E[_~XQH~~F"Gqmb|)iyXQzj&JnJF!qaE'(a&Sm ~yXQz<.hUې| /+^O+ [=p;#l_)+ MKo8uLF2cHe8fn$@-E/O+<(VYn'ăZvS<(3d@m}ErzF},;VpC,.+꿼|W/|o޾|Ż^??o۟oW_yz˿_Ӳ,?ۯ~wş3y߽,탟o{g'|;{G?~L݇*}ZG[}* mM*?KؽD탟|탟?(#|{ؑ afgK|~"{lq+s};9( gϦ"9 #t>2sSx}VnÛ~탟;$[u9StD'ۇmtS0wg5G%(簩 X|~zwCJ|axAq>Wn!+>'TX5w2sؑesG9=VusзXusXOc|aÏ4w 9L30wP}ËX'd: w#|1#o9i9Uszւ9l5 6}i9 /}[M9B9İpT}9a탟 9x_}{'`s}v|FJ|axs}|I$|龐Eq>EBoZ^>^elnPꨓô~Nw'` j2͵~K~bRi9i9,Rm"|MsV\\+y =_E:$NQśBs]9׃~W ~x?QW*"5DV*"pS?,\ۅ}N[5_~NS_;}IT⩟w6Rn9M}m>G֝9ioZo>G4fB9[m&9HA&nÕ}NPə>DŽp[6U|ʶ9lAenHepwLe"cQe6ڨ%~h([>?/oVGy{]W^8W^Oq)X]ʇgG24/5R'7 w .nЁ|^=5^=@~^=@5x^O=` +6nN׹j90{o0akBYyI{Qj2kdo0p:V-<$ܺd2#FMt$^?.`$l>$ؘ0p٢`$(0pӢަ`$AphFYt#I,rH%LQ3z$IHa$zj5I𳸇a$h{I^ƥ@`$Z=Fқ^?СzF{#*z.F# w)[Hsϗy-}WcH2a$۞_?V0({F=FOb|T˭H1<$ܜ%#{{$LJS9-x#I #-wsw0# %i[N/rϏ`?D0pO"`$h:=$\ m?$ATI4O# #r"[^܍ol9I^凑y-p#y?0H# "rZ~F2?ig~'K=n#:0p"`$0$HH5< ?jy]?*0S-wjA JivUN_|oׯD3OO/}~{ۯO߼ }߿w~!ʟwVOſU8~xݷ?xD]&_67߾J</xoI u?V?<7_??WW/M;~u~o,7z_?7B????=N/'sq}ׯ{u_n{}/?W_} ?onn)o?{C׿AvڕwYw|J3nއRm;?;_' Oc|{Yow?~w /xs|?}jϨ --data-dir ${PROJECT_SOURCE_DIR}/test) if(USE_RSRC) mrc_target_resources(tortoize-unit-test ${RESOURCES}) endif()tortoize-2.0.15/test/tortoize-unit-test.cpp0000644000175000017500000000724514773215600020627 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "tortoize.hpp" #include #include namespace fs = std::filesystem; using json = nlohmann::json; // -------------------------------------------------------------------- // -------------------------------------------------------------------- fs::path gTestDir = fs::current_path(); int main(int argc, char *argv[]) { Catch::Session session; // There must be exactly one instance // Build a new parser on top of Catch2's #if CATCH22 using namespace Catch::clara; #else // Build a new parser on top of Catch2's using namespace Catch::Clara; #endif auto cli = session.cli() // Get Catch2's command line parser | Opt(gTestDir, "data-dir") // bind variable to a new option, with a hint string ["-D"]["--data-dir"] // the option names it will respond to ("The directory containing the data files") // description string for the help output | Opt(cif::VERBOSE, "verbose")["-v"]["--cif-verbose"]("Flag for cif::VERBOSE"); // Now pass the new composite back to Catch2 so it uses that session.cli(cli); // Let Catch2 (using Clara) parse the command line int returnCode = session.applyCommandLine(argc, argv); if (returnCode != 0) // Indicates a command line error return returnCode; cif::add_data_directory(gTestDir / ".." / "rsrc"); return session.run(); } // -------------------------------------------------------------------- TEST_CASE("first_test") { auto a = tortoize_calculate(gTestDir / "1cbs.cif.gz"); std::ifstream bf(gTestDir / "1cbs.json"); json b = nlohmann::json::parse(bf); auto ma = a["model"]["1"]; auto mb = b["model"]["1"]; CHECK_THAT(ma["ramachandran-jackknife-sd"].template get(), Catch::Matchers::WithinRel(mb["ramachandran-jackknife-sd"].template get(), 0.1)); CHECK_THAT(ma["ramachandran-z"].template get(), Catch::Matchers::WithinRel(mb["ramachandran-z"].template get(), 0.1)); CHECK_THAT(ma["torsion-jackknife-sd"].template get(), Catch::Matchers::WithinRel(mb["torsion-jackknife-sd"].template get(), 0.1)); CHECK_THAT(ma["torsion-z"].template get(), Catch::Matchers::WithinRel(mb["torsion-z"].template get(), 0.1)); }tortoize-2.0.15/tortoized.service.in0000644000175000017500000000044614773215600017341 0ustar maartenmaarten[Unit] Description=The diricore web service After=network.target Wants=network-online.target [Service] Restart=on-failure Type=forking PIDFile=@TORTOIZED_PID@ ExecStart=@TORTOIZED_EXE@ start ExecReload=@TORTOIZED_EXE@ reload ExecStop=@TORTOIZED_EXE@ stop [Install] WantedBy=multi-user.target tortoize-2.0.15/webapp/0000755000175000017500000000000014773215600014601 5ustar maartenmaartentortoize-2.0.15/webapp/index.js0000644000175000017500000000347514773215600016257 0ustar maartenmaartenimport "core-js/stable"; import "regenerator-runtime/runtime"; import bsCustomFileInput from 'bs-custom-file-input'; class Tortoize { constructor(form) { this.form = document.forms['tortoize-form']; this.table = document.getElementById('tortoize-table'); this.alert = document.getElementById('tortoize-alert'); this.form.addEventListener('submit', (evt) => this.handleSubmit(evt)); this.alert.classList.add('invisible'); } handleSubmit(event) { if (event) event.preventDefault(); const data = new FormData(this.form); this.table.style.display = 'none'; this.alert.classList.add('invisible'); let wasOK; fetch('tortoize', { credentials: 'include', method: 'post', body: data }).then(r => { wasOK = r.ok; return r.json(); }).then(r => { // console.log(r); if (r.model) this.process(r.model); else if (r.error) throw r.error; else throw 'Reply does not contain data'; }).catch(err => { console.log(err); this.alert.textContent = `Could not calculate rama z-score: ${err}`; this.alert.classList.remove('invisible'); }); } process(model) { const tbody = this.table.querySelector('tbody'); [...tbody.querySelectorAll('tr')].forEach(row => tbody.removeChild(row)); for (const [id, data] of Object.entries(model)) { const row = document.createElement("tr"); const tdid = document.createElement("td"); tdid.textContent = id; row.appendChild(tdid); for (const f of ['ramachandran', 'torsion']) { const td = document.createElement('td'); td.textContent = (+data[`${f}-z`]).toFixed(2) + " ± " + (+data[`${f}-jackknife-sd`]).toFixed(2); row.appendChild(td); } tbody.appendChild(row); } this.table.style.display = 'unset'; } } window.addEventListener('load', () => { bsCustomFileInput.init(); new Tortoize(); });tortoize-2.0.15/webpack.config.js0000644000175000017500000000460314773215600016544 0ustar maartenmaartenconst MiniCssExtractPlugin = require('mini-css-extract-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const path = require('path'); const SCRIPTS = path.resolve(__dirname, "webapp"); const SCSS = path.resolve(__dirname, "scss"); const DEST = path.resolve(__dirname, "docroot/scripts"); module.exports = (env) => { const PRODUCTION = env != null && env.PRODUCTION; const webpackConf = { entry: { 'pdb-redo-style': path.resolve(SCSS, "pdb-redo-bootstrap.scss"), 'index': path.resolve(SCRIPTS, 'index.js') }, output: { path: DEST, clean: true }, module: { rules: [ { test: /\.js/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: ['@babel/preset-env'] } } }, { test: /\.(eot|svg|ttf|woff(2)?)(\?v=\d+\.\d+\.\d+)?/, loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'fonts/', publicPath: '../fonts/' } }, { test: /\.(sa|sc|c)ss$/i, use: [ MiniCssExtractPlugin.loader, "css-loader", "postcss-loader", "sass-loader" ] }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, include: path.resolve(__dirname, './node_modules/bootstrap-icons/font/fonts'), type: 'asset/resource', generator: { filename: '../fonts/[name][ext]' } }, { test: /\.png$/, type: 'asset/resource', generator: { filename: '../images/[name][ext]' } } ] }, resolve: { extensions: ['.js', '.scss'], }, plugins: [ new MiniCssExtractPlugin({ filename: "../css/[name].css" }), new CleanWebpackPlugin({ verbose: true, cleanOnceBeforeBuildPatterns: [ path.resolve(__dirname, 'scripts'), path.resolve(__dirname, 'fonts') ] })], optimization: { minimizer: [] } }; if (PRODUCTION) { webpackConf.mode = "production"; webpackConf.optimization.minimizer.push( new TerserPlugin({ /* additional options here */ }), new UglifyJsPlugin({ parallel: 4 }) ); } else { webpackConf.mode = "development"; webpackConf.devtool = 'source-map'; webpackConf.plugins.push(new webpack.optimize.AggressiveMergingPlugin()) } return webpackConf; }; tortoize-2.0.15/yarn.lock0000644000175000017500000046153214773215600015161 0ustar maartenmaarten# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: "@babel/highlight" "^7.24.7" picocolors "^1.0.0" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== "@babel/core@^7.12.10": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" "@babel/generator" "^7.25.0" "@babel/helper-compilation-targets" "^7.25.2" "@babel/helper-module-transforms" "^7.25.2" "@babel/helpers" "^7.25.0" "@babel/parser" "^7.25.0" "@babel/template" "^7.25.0" "@babel/traverse" "^7.25.2" "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" "@babel/generator@^7.25.0", "@babel/generator@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== dependencies: "@babel/types" "^7.25.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: "@babel/types" "^7.24.7" "@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: "@babel/compat-data" "^7.25.2" "@babel/helper-validator-option" "^7.24.8" browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-member-expression-to-functions" "^7.24.8" "@babel/helper-optimise-call-expression" "^7.24.7" "@babel/helper-replace-supers" "^7.25.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/traverse" "^7.25.4" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" "@babel/helper-member-expression-to-functions@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== dependencies: "@babel/traverse" "^7.24.8" "@babel/types" "^7.24.8" "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" "@babel/traverse" "^7.25.2" "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== dependencies: "@babel/types" "^7.24.7" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== "@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-wrap-function" "^7.25.0" "@babel/traverse" "^7.25.0" "@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== dependencies: "@babel/helper-member-expression-to-functions" "^7.24.8" "@babel/helper-optimise-call-expression" "^7.24.7" "@babel/traverse" "^7.25.0" "@babel/helper-simple-access@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/helper-validator-option@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== "@babel/helper-wrap-function@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== dependencies: "@babel/template" "^7.25.0" "@babel/traverse" "^7.25.0" "@babel/types" "^7.25.0" "@babel/helpers@^7.25.0": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== dependencies: "@babel/template" "^7.25.0" "@babel/types" "^7.25.6" "@babel/highlight@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: "@babel/helper-validator-identifier" "^7.24.7" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== dependencies: "@babel/types" "^7.25.6" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": version "7.25.3" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/traverse" "^7.25.3" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-optional-chaining" "^7.24.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/traverse" "^7.25.0" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-assertions@^7.24.7": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-syntax-import-attributes@^7.24.7": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-arrow-functions@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-async-generator-functions@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/traverse" "^7.25.4" "@babel/plugin-transform-async-to-generator@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: "@babel/helper-module-imports" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-remap-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoped-functions@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-block-scoping@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-class-properties@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.4" "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-class-static-block@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-transform-classes@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-compilation-targets" "^7.25.2" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-replace-supers" "^7.25.0" "@babel/traverse" "^7.25.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/template" "^7.24.7" "@babel/plugin-transform-destructuring@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-dotall-regex@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-duplicate-keys@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.0" "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-dynamic-import@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-exponentiation-operator@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-export-namespace-from@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-for-of@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-function-name@^7.25.1": version "7.25.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: "@babel/helper-compilation-targets" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" "@babel/traverse" "^7.25.1" "@babel/plugin-transform-json-strings@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-transform-literals@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-logical-assignment-operators@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-transform-member-expression-literals@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-modules-amd@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: "@babel/helper-module-transforms" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-modules-commonjs@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: "@babel/helper-module-transforms" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-simple-access" "^7.24.7" "@babel/plugin-transform-modules-systemjs@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: "@babel/helper-module-transforms" "^7.25.0" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" "@babel/traverse" "^7.25.0" "@babel/plugin-transform-modules-umd@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: "@babel/helper-module-transforms" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-new-target@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-transform-numeric-separator@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-transform-object-rest-spread@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: "@babel/helper-compilation-targets" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.24.7" "@babel/plugin-transform-object-super@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-replace-supers" "^7.24.7" "@babel/plugin-transform-optional-catch-binding@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-transform-parameters@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-private-methods@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.4" "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-private-property-in-object@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-create-class-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-transform-property-literals@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-regenerator@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-shorthand-properties@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-spread@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-sticky-regex@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-template-literals@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-typeof-symbol@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-unicode-escapes@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-unicode-property-regex@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-unicode-regex@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-unicode-sets-regex@^7.25.4": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.2" "@babel/helper-plugin-utils" "^7.24.8" "@babel/preset-env@^7.12.11": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== dependencies: "@babel/compat-data" "^7.25.4" "@babel/helper-compilation-targets" "^7.25.2" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-option" "^7.24.8" "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-import-assertions" "^7.24.7" "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.24.7" "@babel/plugin-transform-async-generator-functions" "^7.25.4" "@babel/plugin-transform-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoped-functions" "^7.24.7" "@babel/plugin-transform-block-scoping" "^7.25.0" "@babel/plugin-transform-class-properties" "^7.25.4" "@babel/plugin-transform-class-static-block" "^7.24.7" "@babel/plugin-transform-classes" "^7.25.4" "@babel/plugin-transform-computed-properties" "^7.24.7" "@babel/plugin-transform-destructuring" "^7.24.8" "@babel/plugin-transform-dotall-regex" "^7.24.7" "@babel/plugin-transform-duplicate-keys" "^7.24.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" "@babel/plugin-transform-dynamic-import" "^7.24.7" "@babel/plugin-transform-exponentiation-operator" "^7.24.7" "@babel/plugin-transform-export-namespace-from" "^7.24.7" "@babel/plugin-transform-for-of" "^7.24.7" "@babel/plugin-transform-function-name" "^7.25.1" "@babel/plugin-transform-json-strings" "^7.24.7" "@babel/plugin-transform-literals" "^7.25.2" "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" "@babel/plugin-transform-member-expression-literals" "^7.24.7" "@babel/plugin-transform-modules-amd" "^7.24.7" "@babel/plugin-transform-modules-commonjs" "^7.24.8" "@babel/plugin-transform-modules-systemjs" "^7.25.0" "@babel/plugin-transform-modules-umd" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" "@babel/plugin-transform-new-target" "^7.24.7" "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" "@babel/plugin-transform-numeric-separator" "^7.24.7" "@babel/plugin-transform-object-rest-spread" "^7.24.7" "@babel/plugin-transform-object-super" "^7.24.7" "@babel/plugin-transform-optional-catch-binding" "^7.24.7" "@babel/plugin-transform-optional-chaining" "^7.24.8" "@babel/plugin-transform-parameters" "^7.24.7" "@babel/plugin-transform-private-methods" "^7.25.4" "@babel/plugin-transform-private-property-in-object" "^7.24.7" "@babel/plugin-transform-property-literals" "^7.24.7" "@babel/plugin-transform-regenerator" "^7.24.7" "@babel/plugin-transform-reserved-words" "^7.24.7" "@babel/plugin-transform-shorthand-properties" "^7.24.7" "@babel/plugin-transform-spread" "^7.24.7" "@babel/plugin-transform-sticky-regex" "^7.24.7" "@babel/plugin-transform-template-literals" "^7.24.7" "@babel/plugin-transform-typeof-symbol" "^7.24.8" "@babel/plugin-transform-unicode-escapes" "^7.24.7" "@babel/plugin-transform-unicode-property-regex" "^7.24.7" "@babel/plugin-transform-unicode-regex" "^7.24.7" "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.6" babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.37.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/types" "^7.4.4" esutils "^2.0.2" "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: regenerator-runtime "^0.14.0" "@babel/template@^7.24.7", "@babel/template@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: "@babel/code-frame" "^7.24.7" "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== dependencies: "@babel/code-frame" "^7.24.7" "@babel/generator" "^7.25.6" "@babel/parser" "^7.25.6" "@babel/template" "^7.25.0" "@babel/types" "^7.25.6" debug "^4.3.1" globals "^11.1.0" "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.4.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.6" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": version "22.5.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA== dependencies: undici-types "~6.19.2" "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/floating-point-hex-parser@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== "@webassemblyjs/helper-api-error@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== "@webassemblyjs/helper-buffer@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.6" "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" "@webassemblyjs/helper-wasm-bytecode@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== "@webassemblyjs/helper-wasm-section@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== "@webassemblyjs/wasm-edit@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/helper-wasm-section" "1.12.1" "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-opt" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" "@webassemblyjs/wast-printer" "1.12.1" "@webassemblyjs/wasm-gen@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== dependencies: "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wasm-opt@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" "@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wast-printer@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== "@webpack-cli/info@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== "@webpack-cli/serve@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== acorn-import-attributes@^1.9.5: version "1.9.5" resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn@^8.7.1, acorn@^8.8.2: version "8.12.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.1.0, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= babel-loader@^9.1.3: version "9.1.3" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== dependencies: find-cache-dir "^4.0.0" schema-utils "^4.0.0" babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.11" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.6: version "0.10.6" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.2" core-js-compat "^3.38.0" babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.2" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bootstrap@^4.5.3: version "4.5.3" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6" integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ== brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3: version "4.23.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: caniuse-lite "^1.0.30001646" electron-to-chromium "^1.5.4" node-releases "^2.0.18" update-browserslist-db "^1.1.0" bs-custom-file-input@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/bs-custom-file-input/-/bs-custom-file-input-1.3.4.tgz#c275cb8d4f1c02ba026324292509fa9a747dbda8" integrity sha512-NBsQzTnef3OW1MvdKBbMHAYHssCd613MSeJV7z2McXznWtVMnJCy7Ckyc+PwxV6Pk16cu6YBcYWh/ZE0XWNKCA== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" move-concurrently "^1.0.1" promise-inflight "^1.0.1" rimraf "^2.6.3" ssri "^6.0.1" unique-filename "^1.1.1" y18n "^4.0.0" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= caniuse-lite@^1.0.30001646: version "1.0.30001660" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz#31218de3463fabb44d0b7607b652e56edf2e2355" integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg== center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" "chokidar@>=3.0.0 <4.0.0": version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" readdirp "~3.6.0" optionalDependencies: fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== clean-webpack-plugin@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== dependencies: del "^4.1.1" cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= dependencies: center-align "^0.1.1" right-align "^0.1.1" wordwrap "0.0.2" clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" kind-of "^6.0.2" shallow-clone "^3.0.0" color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== colorette@^2.0.14: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== commander@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" iferr "^0.1.5" mkdirp "^0.5.1" rimraf "^2.5.4" run-queue "^1.0.0" core-js-compat@^3.37.1, core-js-compat@^3.38.0: version "3.38.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== dependencies: browserslist "^4.23.3" core-js@^3.8.2: version "3.38.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== dependencies: env-paths "^2.2.1" import-fresh "^3.3.0" js-yaml "^4.1.0" parse-json "^5.2.0" cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" css-loader@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.2.tgz#64671541c6efe06b0e22e750503106bdd86880f8" integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== dependencies: icss-utils "^5.1.0" postcss "^8.4.33" postcss-modules-extract-imports "^3.1.0" postcss-modules-local-by-default "^4.0.5" postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" semver "^7.5.4" cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cyclist@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" decamelize@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: "@types/glob" "^7.1.1" globby "^6.1.0" is-path-cwd "^2.0.0" is-path-in-cwd "^2.0.0" p-map "^2.0.0" pify "^4.0.1" rimraf "^2.6.3" duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" readable-stream "^2.0.0" stream-shift "^1.0.0" electron-to-chromium@^1.5.4: version "1.5.23" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.23.tgz#6dabd8f7fec5cbf618b732ff4c42950dcc7a3be5" integrity sha512-mBhODedOXg4v5QWwl21DjM5amzjmI1zw9EPrPK/5Wx7C8jt33bpZNrC7OhHUG3pxRtbLpr3W2dXT+Ph1SsfRZA== end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enhanced-resolve@^5.17.1: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.7.3: version "7.14.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-module-lexer@^1.2.1: version "1.5.4" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== escalade@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-uri@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" make-dir "^2.0.0" pkg-dir "^3.0.0" find-cache-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: common-path-prefix "^3.0.0" pkg-dir "^7.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" find-up@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" path-exists "^5.0.0" flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" readable-stream "^2.3.6" from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" imurmurhash "^0.1.4" readable-stream "1 || 2" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.0.3, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== immutable@^4.0.0: version "4.3.7" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== infer-owner@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-core-module@^2.13.0: version "2.15.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== dependencies: is-path-inside "^2.1.0" is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== dependencies: path-is-inside "^1.0.2" is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jiti@^1.20.0: version "1.21.6" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.27: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mini-css-extract-plugin@^2.9.1: version "2.9.1" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz#4d184f12ce90582e983ccef0f6f9db637b4be758" integrity sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" end-of-stream "^1.1.0" flush-write-stream "^1.0.0" from2 "^2.1.0" parallel-transform "^1.1.0" pump "^3.0.0" pumpify "^1.3.3" stream-each "^1.1.0" through2 "^2.0.0" mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" fs-write-stream-atomic "^1.0.8" mkdirp "^0.5.1" rimraf "^2.5.4" run-queue "^1.0.3" ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-releases@^2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-exists@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pkg-dir@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== dependencies: find-up "^6.3.0" postcss-loader@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.1.1.tgz#2822589e7522927344954acb55bbf26e8b195dfe" integrity sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ== dependencies: cosmiconfig "^9.0.0" jiti "^1.20.0" semver "^7.5.4" postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== postcss-modules-local-by-default@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" postcss-modules-scope@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== dependencies: postcss-selector-parser "^6.0.4" postcss-modules-values@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.33: version "8.4.47" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== dependencies: nanoid "^3.3.7" picocolors "^1.1.0" source-map-js "^1.2.1" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" pump@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" pump "^2.0.0" punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" string_decoder "~1.1.1" util-deprecate "~1.0.1" readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: resolve "^1.20.0" regenerate-unicode-properties@^10.1.0: version "10.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" regenerate-unicode-properties "^10.1.0" regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.14.2, resolve@^1.20.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= dependencies: align-text "^0.1.1" rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== sass-loader@^16.0.1: version "16.0.1" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.1.tgz#57049c1787076e923b21a1dccc612546ecaf4295" integrity sha512-xACl1ToTsKnL9Ce5yYpRxrLj9QUDCnwZNhzpC7tKiFyA8zXsd3Ap+HGVnbCgkdQcm43E+i6oKAWBsvGA6ZoiMw== dependencies: neo-async "^2.6.2" sass@^1.32.4: version "1.78.0" resolved "https://registry.yarnpkg.com/sass/-/sass-1.78.0.tgz#cef369b2f9dc21ea1d2cf22c979f52365da60841" integrity sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" ajv-errors "^1.0.0" ajv-keywords "^3.1.0" schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" ajv-formats "^2.1.1" ajv-keywords "^5.1.0" semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.5.4: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== serialize-javascript@^1.7.0: version "1.9.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== serialize-javascript@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" stream-shift@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" style-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" terser "^5.26.0" terser@^5.26.0: version "5.32.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.32.0.tgz#ee811c0d2d6b741c1cc34a2bc5bcbfc1b5b1f96c" integrity sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== uglify-js-plugin@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uglify-js-plugin/-/uglify-js-plugin-0.0.6.tgz#ea52368fea73b2043b1cbeadb0e0f11c3c822c18" integrity sha1-6lI2j+pzsgQ7HL6tsODxHDyCLBg= dependencies: colors "^1.1.2" uglify-js "^2.7.3" uglify-js@^2.7.3: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= dependencies: source-map "~0.5.1" yargs "~3.10.0" optionalDependencies: uglify-to-browserify "~1.0.0" uglify-js@^3.6.0: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= uglifyjs-webpack-plugin@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz#e75bc80e7f1937f725954c9b4c5a1e967ea9d0d7" integrity sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" serialize-javascript "^1.7.0" source-map "^0.6.1" uglify-js "^3.6.0" webpack-sources "^1.4.0" worker-farm "^1.7.0" undici-types@~6.19.2: version "6.19.8" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" update-browserslist-db@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: escalade "^3.1.2" picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== watchpack@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" webpack-cli@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" "@webpack-cli/configtest" "^2.1.1" "@webpack-cli/info" "^2.0.2" "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" envinfo "^7.7.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^3.1.1" rechoir "^0.8.0" webpack-merge "^5.7.3" webpack-merge@^5.7.3: version "5.10.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" flat "^5.0.2" wildcard "^2.0.0" webpack-sources@^1.4.0: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.15.0: version "5.94.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== dependencies: "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.12.1" "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" terser-webpack-plugin "^5.3.10" watchpack "^2.4.1" webpack-sources "^3.2.3" which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wildcard@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= dependencies: camelcase "^1.0.2" cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" yocto-queue@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==