summaryrefslogtreecommitdiff
path: root/dev-cpp/sparsehash
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 11:50:53 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 11:50:53 -0500
commit290aebdea65a02557706eaeda477fef0437b6a48 (patch)
treef87a939169a508a2e943570501b64cc16b411cda /dev-cpp/sparsehash
parent6783ddcd4b73d9ce586a71770caed352bec93b16 (diff)
downloadbaldeagleos-repo-290aebdea65a02557706eaeda477fef0437b6a48.tar.gz
baldeagleos-repo-290aebdea65a02557706eaeda477fef0437b6a48.tar.xz
baldeagleos-repo-290aebdea65a02557706eaeda477fef0437b6a48.zip
Adding metadata
Diffstat (limited to 'dev-cpp/sparsehash')
-rw-r--r--dev-cpp/sparsehash/Manifest1
-rw-r--r--dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch71
-rw-r--r--dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch316
-rw-r--r--dev-cpp/sparsehash/metadata.xml9
-rw-r--r--dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild25
5 files changed, 0 insertions, 422 deletions
diff --git a/dev-cpp/sparsehash/Manifest b/dev-cpp/sparsehash/Manifest
deleted file mode 100644
index 599137f008da..000000000000
--- a/dev-cpp/sparsehash/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST sparsehash-2.0.4.tar.gz 323154 BLAKE2B 8e0da89a6ae684271293f048092d6c79d14818f7ab9d4fa449414b3354f9e7769d9b0cc724227c47a1be7c7357cdac5cf6f3873047a08c8f085cc457858a8826 SHA512 40c007bc5814dd5f2bdacd5ec884bc5424f7126f182d4c7b34371f88b674456fc193b947fdd283dbd0c7eb044d8f06baf8caec6c93e73b1b587282b9026ea877
diff --git a/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch b/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch
deleted file mode 100644
index 237719c3b9f3..000000000000
--- a/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-* Do not override $(docdir) as part of the GNU conventions
-* Do not install 'COPYING' and 'INSTALL'
-* Install html files using html_ prefix and not doc_ prefix
-* Do not try to link against tcmalloc, the complexity of juggling
- the options around isn't worth it
-Bug: https://bugs.gentoo.org/show_bug.cgi?id=585968
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -9,7 +9,7 @@
- # (for sanity checking)
- AC_CONFIG_SRCDIR(README)
- AM_INIT_AUTOMAKE([dist-zip])
--AM_CONFIG_HEADER(src/config.h)
-+AC_CONFIG_HEADERS([src/config.h])
-
- # Checks for programs.
- AC_PROG_CXX
-@@ -28,23 +28,7 @@
- # These are 'only' needed for unittests
- AC_CHECK_HEADERS(sys/resource.h unistd.h sys/time.h sys/utsname.h)
-
--# If you have google-perftools installed, we can do a bit more testing.
--# We not only want to set HAVE_MALLOC_EXTENSION_H, we also want to set
--# a variable to let the Makefile to know to link in tcmalloc.
- AC_LANG([C++])
--AC_CHECK_HEADERS(google/malloc_extension.h,
-- tcmalloc_libs=-ltcmalloc,
-- tcmalloc_libs=)
--# On some systems, when linking in tcmalloc you also need to link in
--# pthread. That's a bug somewhere, but we'll work around it for now.
--tcmalloc_flags=""
--if test -n "$tcmalloc_libs"; then
-- ACX_PTHREAD
-- tcmalloc_flags="\$(PTHREAD_CFLAGS)"
-- tcmalloc_libs="$tcmalloc_libs \$(PTHREAD_LIBS)"
--fi
--AC_SUBST(tcmalloc_flags)
--AC_SUBST(tcmalloc_libs)
-
- # Figure out where hash_map lives and also hash_fun.h (or stl_hash_fun.h).
- # This also tells us what namespace hash code lives in.
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -11,12 +11,11 @@
- AM_CXXFLAGS = -Wall -W -Wwrite-strings -Woverloaded-virtual -Wshadow
- endif
-
--docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
- ## This is for HTML and other documentation you want to install.
- ## Add your documentation files (in doc/) in addition to these boilerplate
- ## Also add a TODO file if you have one
--dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README_windows.txt \
-- TODO \
-+dist_doc_DATA = AUTHORS ChangeLog NEWS README README_windows.txt TODO
-+dist_html_DATA = \
- doc/dense_hash_map.html \
- doc/dense_hash_set.html \
- doc/sparse_hash_map.html \
-@@ -182,11 +181,6 @@
- $(sparsehashinclude_HEADERS)
- nodist_time_hash_map_SOURCES = $(nodist_internalinclude_HEADERS)
-
--# If tcmalloc is installed, use it with time_hash_map; it gives us
--# heap-usage statistics for the hash_map routines, which is very nice
--time_hash_map_CXXFLAGS = @tcmalloc_flags@ $(AM_CXXFLAGS)
--time_hash_map_LDFLAGS = @tcmalloc_flags@
--time_hash_map_LDADD = @tcmalloc_libs@
-
- ## ^^^^ END OF RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS
-
diff --git a/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch b/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch
deleted file mode 100644
index 776443d68c5e..000000000000
--- a/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch
+++ /dev/null
@@ -1,316 +0,0 @@
-https://github.com/igorsugak/sparsehash/commit/6940fcaba9766735e48064b930690d67fc2f84ea
-https://github.com/sparsehash/sparsehash/pull/165
-https://bugs.gentoo.org/967004
-C++20 removed many deprecated std::allocator members, causing sparsehash
-to fail when it is built with -std=c++20. This implements most of
-the uses of the removed members in terms of std::allocator_traits.
-
-There are no corresponding reference and const_reference members
-in std::allocator_traits, in which case used the actual
-value_type&/const value_type& instead.
-From 6940fcaba9766735e48064b930690d67fc2f84ea Mon Sep 17 00:00:00 2001
-From: sugak <sugak@fb.com>
-Date: Mon, 29 Nov 2021 18:01:19 -0800
-Subject: [PATCH] fix build with -std=c++20
-
----
- src/sparsehash/internal/densehashtable.h | 46 ++++++++++++---------
- src/sparsehash/internal/sparsehashtable.h | 50 +++++++++++++----------
- src/sparsehash/sparsetable | 37 +++++++++--------
- 3 files changed, 74 insertions(+), 59 deletions(-)
-
-diff --git a/src/sparsehash/internal/densehashtable.h b/src/sparsehash/internal/densehashtable.h
-index cdf4ff6..79cecab 100644
---- a/src/sparsehash/internal/densehashtable.h
-+++ b/src/sparsehash/internal/densehashtable.h
-@@ -149,7 +149,8 @@ struct dense_hashtable_const_iterator;
- template <class V, class K, class HF, class ExK, class SetK, class EqK, class A>
- struct dense_hashtable_iterator {
- private:
-- typedef typename A::template rebind<V>::other value_alloc_type;
-+ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- typedef dense_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator;
-@@ -157,10 +158,10 @@ struct dense_hashtable_iterator {
-
- typedef std::forward_iterator_tag iterator_category; // very little defined!
- typedef V value_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::pointer pointer;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef value_type& reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-
- // "Real" constructor and default constructor
- dense_hashtable_iterator(const dense_hashtable<V,K,HF,ExK,SetK,EqK,A> *h,
-@@ -202,7 +203,8 @@ struct dense_hashtable_iterator {
- template <class V, class K, class HF, class ExK, class SetK, class EqK, class A>
- struct dense_hashtable_const_iterator {
- private:
-- typedef typename A::template rebind<V>::other value_alloc_type;
-+ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- typedef dense_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator;
-@@ -210,10 +212,10 @@ struct dense_hashtable_const_iterator {
-
- typedef std::forward_iterator_tag iterator_category; // very little defined!
- typedef V value_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::const_reference reference;
-- typedef typename value_alloc_type::const_pointer pointer;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef const value_type& reference;
-+ typedef typename value_alloc_traits::const_pointer pointer;
-
- // "Real" constructor and default constructor
- dense_hashtable_const_iterator(
-@@ -259,7 +261,8 @@ template <class Value, class Key, class HashFcn,
- class ExtractKey, class SetKey, class EqualKey, class Alloc>
- class dense_hashtable {
- private:
-- typedef typename Alloc::template rebind<Value>::other value_alloc_type;
-+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<Value> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- typedef Key key_type;
-@@ -268,12 +271,12 @@ class dense_hashtable {
- typedef EqualKey key_equal;
- typedef Alloc allocator_type;
-
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::const_reference const_reference;
-- typedef typename value_alloc_type::pointer pointer;
-- typedef typename value_alloc_type::const_pointer const_pointer;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef value_type& reference;
-+ typedef const value_type& const_reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-+ typedef typename value_alloc_traits::const_pointer const_pointer;
- typedef dense_hashtable_iterator<Value, Key, HashFcn,
- ExtractKey, SetKey, EqualKey, Alloc>
- iterator;
-@@ -518,7 +521,9 @@ class dense_hashtable {
- // FUNCTIONS CONCERNING SIZE
- public:
- size_type size() const { return num_elements - num_deleted; }
-- size_type max_size() const { return val_info.max_size(); }
-+ size_type max_size() const {
-+ return std::allocator_traits<ValInfo>::max_size(val_info);
-+ }
- bool empty() const { return size() == 0; }
- size_type bucket_count() const { return num_buckets; }
- size_type max_bucket_count() const { return max_size(); }
-@@ -1170,8 +1175,9 @@ class dense_hashtable {
- template <class A>
- class alloc_impl : public A {
- public:
-- typedef typename A::pointer pointer;
-- typedef typename A::size_type size_type;
-+ typedef std::allocator_traits<A> alloc_traits;
-+ typedef typename alloc_traits::pointer pointer;
-+ typedef typename alloc_traits::size_type size_type;
-
- // Convert a normal allocator to one that has realloc_or_die()
- alloc_impl(const A& a) : A(a) { }
-diff --git a/src/sparsehash/internal/sparsehashtable.h b/src/sparsehash/internal/sparsehashtable.h
-index f54ea51..1c71d6d 100644
---- a/src/sparsehash/internal/sparsehashtable.h
-+++ b/src/sparsehash/internal/sparsehashtable.h
-@@ -160,7 +160,8 @@ struct sparse_hashtable_const_iterator;
- template <class V, class K, class HF, class ExK, class SetK, class EqK, class A>
- struct sparse_hashtable_iterator {
- private:
-- typedef typename A::template rebind<V>::other value_alloc_type;
-+ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- typedef sparse_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator;
-@@ -170,10 +171,10 @@ struct sparse_hashtable_iterator {
-
- typedef std::forward_iterator_tag iterator_category; // very little defined!
- typedef V value_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::pointer pointer;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef value_type& reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-
- // "Real" constructor and default constructor
- sparse_hashtable_iterator(const sparse_hashtable<V,K,HF,ExK,SetK,EqK,A> *h,
-@@ -212,7 +213,9 @@ struct sparse_hashtable_iterator {
- template <class V, class K, class HF, class ExK, class SetK, class EqK, class A>
- struct sparse_hashtable_const_iterator {
- private:
-- typedef typename A::template rebind<V>::other value_alloc_type;
-+ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type;
-+ typedef typename std::allocator_traits<value_alloc_type> value_alloc_traits;
-+
-
- public:
- typedef sparse_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator;
-@@ -222,10 +225,10 @@ struct sparse_hashtable_const_iterator {
-
- typedef std::forward_iterator_tag iterator_category; // very little defined!
- typedef V value_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::const_reference reference;
-- typedef typename value_alloc_type::const_pointer pointer;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef const value_type& reference;
-+ typedef typename value_alloc_traits::const_pointer pointer;
-
- // "Real" constructor and default constructor
- sparse_hashtable_const_iterator(const sparse_hashtable<V,K,HF,ExK,SetK,EqK,A> *h,
-@@ -267,7 +270,9 @@ struct sparse_hashtable_const_iterator {
- template <class V, class K, class HF, class ExK, class SetK, class EqK, class A>
- struct sparse_hashtable_destructive_iterator {
- private:
-- typedef typename A::template rebind<V>::other value_alloc_type;
-+ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-+
-
- public:
- typedef sparse_hashtable_destructive_iterator<V,K,HF,ExK,SetK,EqK,A> iterator;
-@@ -276,10 +281,10 @@ struct sparse_hashtable_destructive_iterator {
-
- typedef std::forward_iterator_tag iterator_category; // very little defined!
- typedef V value_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::pointer pointer;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef value_type& reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-
- // "Real" constructor and default constructor
- sparse_hashtable_destructive_iterator(const
-@@ -320,7 +325,8 @@ template <class Value, class Key, class HashFcn,
- class ExtractKey, class SetKey, class EqualKey, class Alloc>
- class sparse_hashtable {
- private:
-- typedef typename Alloc::template rebind<Value>::other value_alloc_type;
-+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<Value> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- typedef Key key_type;
-@@ -329,12 +335,12 @@ class sparse_hashtable {
- typedef EqualKey key_equal;
- typedef Alloc allocator_type;
-
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::const_reference const_reference;
-- typedef typename value_alloc_type::pointer pointer;
-- typedef typename value_alloc_type::const_pointer const_pointer;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef value_type& reference;
-+ typedef const value_type& const_reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-+ typedef typename value_alloc_traits::const_pointer const_pointer;
- typedef sparse_hashtable_iterator<Value, Key, HashFcn, ExtractKey,
- SetKey, EqualKey, Alloc>
- iterator;
-diff --git a/src/sparsehash/sparsetable b/src/sparsehash/sparsetable
-index 6259ebd..60c71dc 100644
---- a/src/sparsehash/sparsetable
-+++ b/src/sparsehash/sparsetable
-@@ -802,16 +802,17 @@ class destructive_two_d_iterator {
- template <class T, u_int16_t GROUP_SIZE, class Alloc>
- class sparsegroup {
- private:
-- typedef typename Alloc::template rebind<T>::other value_alloc_type;
-+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<T> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-
- public:
- // Basic types
- typedef T value_type;
- typedef Alloc allocator_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::const_reference const_reference;
-- typedef typename value_alloc_type::pointer pointer;
-- typedef typename value_alloc_type::const_pointer const_pointer;
-+ typedef value_type& reference;
-+ typedef const value_type& const_reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-+ typedef typename value_alloc_traits::const_pointer const_pointer;
-
- typedef table_iterator<sparsegroup<T, GROUP_SIZE, Alloc> > iterator;
- typedef const_table_iterator<sparsegroup<T, GROUP_SIZE, Alloc> >
-@@ -1289,8 +1290,9 @@ class sparsegroup {
- template <class A>
- class alloc_impl : public A {
- public:
-- typedef typename A::pointer pointer;
-- typedef typename A::size_type size_type;
-+ typedef std::allocator_traits<A> alloc_traits;
-+ typedef typename alloc_traits::pointer pointer;
-+ typedef typename alloc_traits::size_type size_type;
-
- // Convert a normal allocator to one that has realloc_or_die()
- alloc_impl(const A& a) : A(a) { }
-@@ -1362,20 +1364,21 @@ template <class T, u_int16_t GROUP_SIZE = DEFAULT_SPARSEGROUP_SIZE,
- class Alloc = libc_allocator_with_realloc<T> >
- class sparsetable {
- private:
-- typedef typename Alloc::template rebind<T>::other value_alloc_type;
-- typedef typename Alloc::template rebind<
-- sparsegroup<T, GROUP_SIZE, value_alloc_type> >::other vector_alloc;
-+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<T> value_alloc_type;
-+ typedef std::allocator_traits<value_alloc_type> value_alloc_traits;
-+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<
-+ sparsegroup<T, GROUP_SIZE, value_alloc_type> > vector_alloc;
-
- public:
- // Basic types
- typedef T value_type; // stolen from stl_vector.h
- typedef Alloc allocator_type;
-- typedef typename value_alloc_type::size_type size_type;
-- typedef typename value_alloc_type::difference_type difference_type;
-- typedef typename value_alloc_type::reference reference;
-- typedef typename value_alloc_type::const_reference const_reference;
-- typedef typename value_alloc_type::pointer pointer;
-- typedef typename value_alloc_type::const_pointer const_pointer;
-+ typedef typename value_alloc_traits::size_type size_type;
-+ typedef typename value_alloc_traits::difference_type difference_type;
-+ typedef value_type& reference;
-+ typedef const value_type& const_reference;
-+ typedef typename value_alloc_traits::pointer pointer;
-+ typedef typename value_alloc_traits::const_pointer const_pointer;
- typedef table_iterator<sparsetable<T, GROUP_SIZE, Alloc> > iterator;
- typedef const_table_iterator<sparsetable<T, GROUP_SIZE, Alloc> >
- const_iterator;
-@@ -1446,7 +1449,7 @@ class sparsetable {
- return destructive_iterator(groups.begin(), groups.end(), groups.end());
- }
-
-- typedef sparsegroup<value_type, GROUP_SIZE, allocator_type> group_type;
-+ typedef sparsegroup<value_type, GROUP_SIZE, value_alloc_type> group_type;
- typedef std::vector<group_type, vector_alloc > group_vector_type;
-
- typedef typename group_vector_type::reference GroupsReference;
diff --git a/dev-cpp/sparsehash/metadata.xml b/dev-cpp/sparsehash/metadata.xml
deleted file mode 100644
index 3948687cb7fd..000000000000
--- a/dev-cpp/sparsehash/metadata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
-<pkgmetadata>
- <maintainer type="person">
- <email>jsmolic@gentoo.org</email>
- <name>Jakov Smolić</name>
- </maintainer>
- <origin>baldeagleos-repo</origin>
-</pkgmetadata>
diff --git a/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild b/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild
deleted file mode 100644
index 8266844f7b1b..000000000000
--- a/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-inherit autotools
-
-DESCRIPTION="An extremely memory-efficient hash_map implementation"
-HOMEPAGE="https://github.com/sparsehash/sparsehash"
-SRC_URI="https://github.com/sparsehash/sparsehash/archive/${P}.tar.gz"
-S="${WORKDIR}/${PN}-${P}"
-
-LICENSE="BSD"
-SLOT="0"
-KEYWORDS="amd64 ~arm64 ~ppc64 x86"
-
-PATCHES=(
- "${FILESDIR}/${PN}-2.0.3-fix-buildsystem.patch"
- "${FILESDIR}/${P}-c++20.patch"
-)
-
-src_prepare() {
- default
- eautoreconf
-}