2021-05-12 10:39:07 +00:00
|
|
|
set(CLICKHOUSE_KEEPER_SOURCES
|
|
|
|
Keeper.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
set (CLICKHOUSE_KEEPER_LINK
|
|
|
|
PRIVATE
|
|
|
|
clickhouse_common_config
|
|
|
|
clickhouse_common_io
|
|
|
|
clickhouse_common_zookeeper
|
|
|
|
daemon
|
|
|
|
dbms
|
2021-05-13 12:26:10 +00:00
|
|
|
|
|
|
|
${LINK_RESOURCE_LIB}
|
2021-05-12 10:39:07 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
clickhouse_program_add(keeper)
|
2021-05-12 13:04:34 +00:00
|
|
|
|
2022-03-11 14:47:07 +00:00
|
|
|
install(FILES keeper_config.xml DESTINATION "${CLICKHOUSE_ETC_DIR}/clickhouse-keeper" COMPONENT clickhouse-keeper)
|
2022-03-03 20:27:46 +00:00
|
|
|
|
2022-03-11 14:47:07 +00:00
|
|
|
if (BUILD_STANDALONE_KEEPER)
|
2022-09-27 07:29:18 +00:00
|
|
|
# Straight list of all required sources
|
2022-03-11 14:47:07 +00:00
|
|
|
set(CLICKHOUSE_KEEPER_STANDALONE_SOURCES
|
2023-04-20 13:26:02 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperReconfiguration.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/RaftServerConfig.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/ACLMap.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/Changelog.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/CoordinationSettings.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/FourLetterCommand.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/InMemoryLogStore.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperConnectionStats.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperDispatcher.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperLogStore.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperServer.cpp
|
2023-06-09 13:34:27 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperContext.cpp
|
2023-06-12 13:05:44 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperFeatureFlags.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperSnapshotManager.cpp
|
2022-09-21 11:53:54 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperSnapshotManagerS3.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperStateMachine.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperContext.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperStateManager.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperStorage.cpp
|
2022-11-10 08:23:52 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/KeeperAsynchronousMetrics.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/pathUtils.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/SessionExpiryQueue.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/SummingStateMachine.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/WriteBufferFromNuraftBuffer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/ZooKeeperDataReader.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/SettingsFields.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/BaseSettings.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/ServerSettings.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/Field.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/SettingsEnums.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/ServerUUID.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/UUID.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Core/BackgroundSchedulePool.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/IO/ReadBuffer.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
|
2023-08-06 19:33:36 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTPPathHints.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/KeeperTCPHandler.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/TCPServer.cpp
|
2022-11-10 08:23:52 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/NotFoundHandler.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/ProtocolServerAdapter.cpp
|
2023-07-11 13:33:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/CertificateReloader.cpp
|
2022-11-10 08:23:52 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/PrometheusRequestHandler.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/PrometheusMetricsWriter.cpp
|
2023-05-22 10:35:57 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/waitServersToFinish.cpp
|
2023-07-26 17:58:41 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/ServerType.cpp
|
2022-11-10 08:23:52 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTPRequestHandlerFactoryMain.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/HTTPServer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/ReadHeaders.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/HTTPServerConnection.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/HTTPServerRequest.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/HTTPServerResponse.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/HTTPServerConnectionFactory.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Server/HTTP/WriteBufferFromHTTPServerResponse.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CachedCompressedReadBuffer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CheckingCompressedReadBuffer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressedReadBufferBase.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressedReadBuffer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressedReadBufferFromFile.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressedWriteBuffer.cpp
|
2023-06-16 15:26:58 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionCodecEncrypted.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionCodecLZ4.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionCodecMultiple.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionCodecNone.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionCodecZSTD.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/CompressionFactory.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/ICompressionCodec.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Compression/LZ4_decompress_faster.cpp
|
|
|
|
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/CurrentThread.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/NamedCollections/NamedCollections.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/NamedCollections/NamedCollectionConfiguration.cpp
|
|
|
|
|
2022-03-11 14:47:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/IKeeper.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/TestKeeper.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperCommon.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperConstants.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeper.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperImpl.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperIO.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperLock.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Common/ZooKeeper/ZooKeeperNodeCache.cpp
|
|
|
|
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/registerDisks.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IDisk.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/DiskFactory.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/DiskSelector.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/DiskLocal.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/DiskLocalCheckThread.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/LocalDirectorySyncGuard.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/TemporaryFileOnDisk.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/loadLocalDiskConfig.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/IObjectStorage.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/MetadataStorageFromPlainObjectStorage.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/MetadataStorageFromDisk.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/MetadataFromDiskTransactionState.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/DiskObjectStorageMetadata.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/MetadataStorageFromDiskTransactionOperations.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/DiskObjectStorage.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/DiskObjectStorageTransaction.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/DiskObjectStorageRemoteMetadataRestoreHelper.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/DiskObjectStorageCommon.cpp
|
2023-06-07 06:45:14 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/ObjectStorageIteratorAsync.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/ObjectStorageIterator.cpp
|
2023-05-26 14:31:09 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/StoredObject.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/S3/registerDiskS3.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/S3/S3ObjectStorage.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/S3/S3Capabilities.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/ObjectStorages/S3/diskSettings.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/createReadBufferFromFileBase.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/ReadBufferFromRemoteFSGather.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/IOUringReader.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/WriteBufferFromTemporaryFile.cpp
|
2023-05-24 09:46:07 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/WriteBufferWithFinalizeCallback.cpp
|
2023-05-26 14:31:09 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/AsynchronousBoundedReadBuffer.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/getThreadPoolReader.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/ThreadPoolRemoteFSReader.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Disks/IO/ThreadPoolReader.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Storages/StorageS3Settings.cpp
|
|
|
|
|
2022-04-27 15:05:45 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Daemon/BaseDaemon.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Daemon/SentryWriter.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Daemon/GraphiteWriter.cpp
|
2022-09-26 19:28:27 +00:00
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/../../src/Daemon/GitHash.generated.cpp
|
2022-03-11 14:47:07 +00:00
|
|
|
|
2023-05-22 12:24:16 +00:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/Standalone/Context.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/Standalone/Settings.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Coordination/Standalone/ThreadStatusExt.cpp
|
2023-05-17 13:32:51 +00:00
|
|
|
|
2022-03-11 14:47:07 +00:00
|
|
|
Keeper.cpp
|
|
|
|
clickhouse-keeper.cpp
|
|
|
|
)
|
|
|
|
|
2023-06-14 00:23:39 +00:00
|
|
|
# List of resources for clickhouse-keeper client
|
|
|
|
if (ENABLE_CLICKHOUSE_KEEPER_CLIENT)
|
|
|
|
list(APPEND CLICKHOUSE_KEEPER_STANDALONE_SOURCES
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../programs/keeper-client/KeeperClient.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../programs/keeper-client/Commands.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../programs/keeper-client/Parser.cpp
|
|
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Client/LineReader.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/Client/ReplxxLineReader.cpp
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
2022-07-11 17:19:15 +00:00
|
|
|
clickhouse_add_executable(clickhouse-keeper ${CLICKHOUSE_KEEPER_STANDALONE_SOURCES})
|
2022-03-11 14:47:07 +00:00
|
|
|
|
|
|
|
# Remove some redundant dependencies
|
2023-05-02 17:41:42 +00:00
|
|
|
target_compile_definitions (clickhouse-keeper PRIVATE -DCLICKHOUSE_PROGRAM_STANDALONE_BUILD)
|
2022-09-08 17:16:37 +00:00
|
|
|
target_compile_definitions (clickhouse-keeper PUBLIC -DWITHOUT_TEXT_LOG)
|
2022-03-11 14:47:07 +00:00
|
|
|
|
2023-06-14 00:23:39 +00:00
|
|
|
if (ENABLE_CLICKHOUSE_KEEPER_CLIENT AND TARGET ch_rust::skim)
|
|
|
|
target_link_libraries(clickhouse-keeper PRIVATE ch_rust::skim)
|
|
|
|
endif()
|
|
|
|
|
2022-03-11 14:47:07 +00:00
|
|
|
target_link_libraries(clickhouse-keeper
|
|
|
|
PRIVATE
|
|
|
|
ch_contrib::abseil_swiss_tables
|
|
|
|
ch_contrib::nuraft
|
|
|
|
ch_contrib::lz4
|
|
|
|
ch_contrib::zstd
|
|
|
|
ch_contrib::cityhash
|
2023-03-05 16:45:17 +00:00
|
|
|
ch_contrib::jemalloc
|
2022-03-11 14:47:07 +00:00
|
|
|
common ch_contrib::double_conversion
|
|
|
|
ch_contrib::dragonbox_to_chars
|
|
|
|
pcg_random
|
|
|
|
ch_contrib::pdqsort
|
|
|
|
ch_contrib::miniselect
|
|
|
|
clickhouse_common_config_no_zookeeper_log
|
|
|
|
loggers_no_text_log
|
|
|
|
clickhouse_common_io
|
|
|
|
clickhouse_parsers # Otherwise compression will not built. FIXME.
|
|
|
|
|
|
|
|
${LINK_RESOURCE_LIB_STANDALONE_KEEPER}
|
|
|
|
)
|
|
|
|
|
|
|
|
set_target_properties(clickhouse-keeper PROPERTIES RUNTIME_OUTPUT_DIRECTORY ../)
|
|
|
|
|
2022-06-30 21:35:44 +00:00
|
|
|
if (SPLIT_DEBUG_SYMBOLS)
|
|
|
|
clickhouse_split_debug_symbols(TARGET clickhouse-keeper DESTINATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/../${SPLITTED_DEBUG_SYMBOLS_DIR} BINARY_PATH ../clickhouse-keeper)
|
2022-03-23 14:14:30 +00:00
|
|
|
else()
|
2022-06-30 21:35:44 +00:00
|
|
|
clickhouse_make_empty_debug_info_for_nfpm(TARGET clickhouse-keeper DESTINATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/../${SPLITTED_DEBUG_SYMBOLS_DIR})
|
2022-03-23 14:14:30 +00:00
|
|
|
install(TARGETS clickhouse-keeper RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT clickhouse)
|
|
|
|
endif()
|
2022-03-11 14:47:07 +00:00
|
|
|
endif()
|