guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

05/05: gnu: Remove QtWebKit.


From: guix-commits
Subject: 05/05: gnu: Remove QtWebKit.
Date: Fri, 17 Feb 2023 14:50:35 -0500 (EST)

lfam pushed a commit to branch master
in repository guix.

commit 861d6fa92c465920e65db47ee4fac531156500ec
Author: Leo Famulari <leo@famulari.name>
AuthorDate: Fri Feb 17 14:30:01 2023 -0500

    gnu: Remove QtWebKit.
    
    This fixes <https://issues.guix.gnu.org/53289>.
    
    * gnu/packages/qt.scm (qtwebkit): Remove variable.
    * gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch,
    gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch,
    gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch,
    gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch,
    gnu/packages/patches/qtwebkit-pbutils-include.patch: Delete files.
    * gnu/local.mk (dist_patch_DATA): Remove them.
    * gnu/packages/education.scm (openboard): Adjust code comment.
---
 gnu/local.mk                                       |   5 -
 gnu/packages/education.scm                         |   2 +-
 .../qtwebkit-fix-building-with-bison-3.7.patch     |  54 --------
 .../qtwebkit-fix-building-with-glib-2.68.patch     |  21 ---
 .../qtwebkit-fix-building-with-icu-68.patch        | 152 ---------------------
 .../qtwebkit-fix-building-with-python-3.9.patch    |  35 -----
 .../patches/qtwebkit-pbutils-include.patch         |  15 --
 gnu/packages/qt.scm                                |  83 -----------
 8 files changed, 1 insertion(+), 366 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 5fcbdd4586..aaf125ce7b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1779,11 +1779,6 @@ dist_patch_DATA =                                        
        \
   %D%/packages/patches/qtwayland-gcc-11.patch                  \
   %D%/packages/patches/qtwayland-dont-recreate-callbacks.patch \
   %D%/packages/patches/qtwayland-cleanup-callbacks.patch       \
-  %D%/packages/patches/qtwebkit-pbutils-include.patch          \
-  %D%/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch \
-  %D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch     \
-  %D%/packages/patches/qtwebkit-fix-building-with-icu-68.patch \
-  %D%/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch      \
   %D%/packages/patches/ragel-char-signedness.patch             \
   %D%/packages/patches/randomjungle-disable-static-build.patch \
   %D%/packages/patches/range-v3-build-with-gcc10.patch \
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 53710f424e..c1b6c19508 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -449,7 +449,7 @@ specialized device.")
     (license license:gpl3)))
 
 (define-public openboard
-  ;; The last release builds from qtwebkit, which is planned for removal in
+  ;; The last release builds from qtwebkit, which has been removed from
   ;; Guix, so use the latest commit of the 1.7-dev branch, which builds with
   ;; qtwebengine-5.
   (let ((commit "39e914f600d26565706f0e5b6ea2482b8b4038c7") ;1.6.2-rc0311
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch 
b/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
deleted file mode 100644
index ddaf8e2849..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-Fix build with Bison 3.7
-
-https://bugs.gentoo.org/736499
-
-Patch copied from upstream source repository:
-
-https://github.com/qtwebkit/qtwebkit/commit/d92b11fea65364fefa700249bd3340e0cd4c5b31
-
-From d92b11fea65364fefa700249bd3340e0cd4c5b31 Mon Sep 17 00:00:00 2001
-From: Dmitry Shachnev <mitya57@gmail.com>
-Date: Tue, 4 Aug 2020 21:04:06 +0300
-Subject: [PATCH] Let Bison generate the header directly, to fix build with
- Bison 3.7
-
-Starting with Bison 3.7, the generated C++ file #include's the header
-by default, instead of duplicating it. So we should not delete it.
-
-Remove the code to add #ifdef guards to the header, since Bison adds
-them itself since version 2.6.3.
----
- Source/WebCore/css/makegrammar.pl | 21 +--------------------
- 1 file changed, 1 insertion(+), 20 deletions(-)
-
-diff --git a/Source/WebCore/css/makegrammar.pl 
b/Source/WebCore/css/makegrammar.pl
-index 5d63b08102eb5..9435701c70612 100644
---- a/Source/WebCore/css/makegrammar.pl
-+++ b/Source/WebCore/css/makegrammar.pl
-@@ -73,25 +73,6 @@
- }
- 
- my $fileBase = File::Spec->join($outputDir, $filename);
--my @bisonCommand = ($bison, "-d", "-p", $symbolsPrefix, $grammarFilePath, 
"-o", "$fileBase.cpp");
-+my @bisonCommand = ($bison, "--defines=$fileBase.h", "-p", $symbolsPrefix, 
$grammarFilePath, "-o", "$fileBase.cpp");
- push @bisonCommand, "--no-lines" if $^O eq "MSWin32"; # Work around bug in 
bison >= 3.0 on Windows where it puts backslashes into #line directives.
- system(@bisonCommand) == 0 or die;
--
--open HEADER, ">$fileBase.h" or die;
--print HEADER << "EOF";
--#ifndef CSSGRAMMAR_H
--#define CSSGRAMMAR_H
--EOF
--
--open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die;
--while (<HPP>) {
--    print HEADER;
--}
--close HPP;
--
--print HEADER "#endif\n";
--close HEADER;
--
--unlink("$fileBase.cpp.h");
--unlink("$fileBase.hpp");
--
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch 
b/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
deleted file mode 100644
index 63840f4bbc..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Fix building with glib 2.68:
-
-https://github.com/qtwebkit/qtwebkit/issues/1057
-
-Patch copied from upstream pull request:
-
-https://github.com/qtwebkit/qtwebkit/pull/1058/commits/5b698ba3faffd4e198a45be9fe74f53307395e4b
-
-diff -aurN qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h 
qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h
---- qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h      2020-03-04 
18:16:37.000000000 +0100
-+++ qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h  2021-04-05 
06:58:44.763328636 +0200
-@@ -29,9 +29,6 @@
- #include <wtf/RefPtr.h>
- #include <algorithm>
- 
--extern "C" void g_object_unref(gpointer);
--extern "C" gpointer g_object_ref_sink(gpointer);
--
- namespace WTF {
- 
- enum GRefPtrAdoptType { GRefPtrAdopt };
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch 
b/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
deleted file mode 100644
index acbfc4c4c8..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-Fix building with ICU > 68.
-
-https://bugs.gentoo.org/753260
-
-Patch adapted from Gentoo:
-
-https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=335f29d266c5b169ff1e781f9851a3a203f3198c
-
-From 335f29d266c5b169ff1e781f9851a3a203f3198c Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <asturm@gentoo.org>
-Date: Fri, 6 Nov 2020 09:22:15 +0100
-Subject: dev-qt/qtwebkit: Fix build with ICU-68
-
-Thanks-to: Lars Wendler <polynomial-c@gentoo.org>
-Closes: https://bugs.gentoo.org/753260
-Package-Manager: Portage-3.0.9, Repoman-3.0.2
-Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
----
- .../qtwebkit-5.212.0_pre20200309-icu-68.patch      | 120 +++++++++++++++++++++
- 1 file changed, 120 insertions(+)
- create mode 100644 
dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch
-
-(limited to 'dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch')
-
-diff --git a/Source/WebCore/platform/text/TextCodecICU.cpp 
b/Source/WebCore/platform/text/TextCodecICU.cpp
-index dd6ff06..e0f4bd7 100644
---- a/Source/WebCore/platform/text/TextCodecICU.cpp
-+++ b/Source/WebCore/platform/text/TextCodecICU.cpp
-@@ -308,7 +308,7 @@ void TextCodecICU::createICUConverter() const
-     m_converterICU = ucnv_open(m_canonicalConverterName, &err);
-     ASSERT(U_SUCCESS(err));
-     if (m_converterICU)
--        ucnv_setFallback(m_converterICU, TRUE);
-+        ucnv_setFallback(m_converterICU, true);
- }
- 
- int TextCodecICU::decodeToBuffer(UChar* target, UChar* targetLimit, const 
char*& source, const char* sourceLimit, int32_t* offsets, bool flush, 
UErrorCode& err)
-diff --git a/Source/WebCore/platform/text/icu/UTextProvider.h 
b/Source/WebCore/platform/text/icu/UTextProvider.h
-index c254fc4..6d1e1cb 100644
---- a/Source/WebCore/platform/text/icu/UTextProvider.h
-+++ b/Source/WebCore/platform/text/icu/UTextProvider.h
-@@ -80,12 +80,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, 
int64_t nativeIndex, int
-             // Ensure chunk offset is well formed if computed offset exceeds 
int32_t range.
-             ASSERT(offset < std::numeric_limits<int32_t>::max());
-             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() 
? static_cast<int32_t>(offset) : 0;
--            isAccessible = TRUE;
-+            isAccessible = true;
-             return true;
-         }
-         if (nativeIndex >= nativeLength && text->chunkNativeLimit == 
nativeLength) {
-             text->chunkOffset = text->chunkLength;
--            isAccessible = FALSE;
-+            isAccessible = false;
-             return true;
-         }
-     } else {
-@@ -94,12 +94,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, 
int64_t nativeIndex, int
-             // Ensure chunk offset is well formed if computed offset exceeds 
int32_t range.
-             ASSERT(offset < std::numeric_limits<int32_t>::max());
-             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() 
? static_cast<int32_t>(offset) : 0;
--            isAccessible = TRUE;
-+            isAccessible = true;
-             return true;
-         }
-         if (nativeIndex <= 0 && !text->chunkNativeStart) {
-             text->chunkOffset = 0;
--            isAccessible = FALSE;
-+            isAccessible = false;
-             return true;
-         }
-     }
-diff --git a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp 
b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
-index cd6852c..6a864b1 100644
---- a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
-+++ b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
-@@ -100,23 +100,23 @@ static UBool uTextLatin1Access(UText* uText, int64_t 
index, UBool forward)
-         if (index < uText->chunkNativeLimit && index >= 
uText->chunkNativeStart) {
-             // Already inside the buffer. Set the new offset.
-             uText->chunkOffset = static_cast<int32_t>(index - 
uText->chunkNativeStart);
--            return TRUE;
-+            return true;
-         }
-         if (index >= length && uText->chunkNativeLimit == length) {
-             // Off the end of the buffer, but we can't get it.
-             uText->chunkOffset = static_cast<int32_t>(index - 
uText->chunkNativeStart);
--            return FALSE;
-+            return false;
-         }
-     } else {
-         if (index <= uText->chunkNativeLimit && index > 
uText->chunkNativeStart) {
-             // Already inside the buffer. Set the new offset.
-             uText->chunkOffset = static_cast<int32_t>(index - 
uText->chunkNativeStart);
--            return TRUE;
-+            return true;
-         }
-         if (!index && !uText->chunkNativeStart) {
-             // Already at the beginning; can't go any farther.
-             uText->chunkOffset = 0;
--            return FALSE;
-+            return false;
-         }
-     }
-     
-@@ -144,7 +144,7 @@ static UBool uTextLatin1Access(UText* uText, int64_t 
index, UBool forward)
- 
-     uText->nativeIndexingLimit = uText->chunkLength;
- 
--    return TRUE;
-+    return true;
- }
- 
- static int32_t uTextLatin1Extract(UText* uText, int64_t start, int64_t limit, 
UChar* dest, int32_t destCapacity, UErrorCode* status)
-@@ -336,7 +336,7 @@ static int64_t uTextLatin1ContextAwareNativeLength(UText* 
text)
- static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, 
UBool forward)
- {
-     if (!text->context)
--        return FALSE;
-+        return false;
-     int64_t nativeLength = uTextLatin1ContextAwareNativeLength(text);
-     UBool isAccessible;
-     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, 
forward, isAccessible))
-@@ -356,7 +356,7 @@ static UBool uTextLatin1ContextAwareAccess(UText* text, 
int64_t nativeIndex, UBo
-         ASSERT(newContext == UTextProviderContext::PriorContext);
-         textLatin1ContextAwareSwitchToPriorContext(text, nativeIndex, 
nativeLength, forward);
-     }
--    return TRUE;
-+    return true;
- }
- 
- static int32_t uTextLatin1ContextAwareExtract(UText*, int64_t, int64_t, 
UChar*, int32_t, UErrorCode* errorCode)
-diff --git a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp 
b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
-index 7aaac48..9ae0d36 100644
---- a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
-+++ b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
-@@ -125,7 +125,7 @@ static inline int64_t 
uTextUTF16ContextAwareNativeLength(UText* text)
- static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, 
UBool forward)
- {
-     if (!text->context)
--        return FALSE;
-+        return false;
-     int64_t nativeLength = uTextUTF16ContextAwareNativeLength(text);
-     UBool isAccessible;
-     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, 
forward, isAccessible))
-@@ -145,7 +145,7 @@ static UBool uTextUTF16ContextAwareAccess(UText* text, 
int64_t nativeIndex, UBoo
-         ASSERT(newContext == UTextProviderContext::PriorContext);
-         textUTF16ContextAwareSwitchToPriorContext(text, nativeIndex, 
nativeLength, forward);
-     }
--    return TRUE;
-+    return true;
- }
- 
- static int32_t uTextUTF16ContextAwareExtract(UText*, int64_t, int64_t, 
UChar*, int32_t, UErrorCode* errorCode)
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch 
b/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
deleted file mode 100644
index 9f9674de33..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Fix building with Python 3.9:
-
-https://github.com/qtwebkit/qtwebkit/issues/993
-
-Patch copied from upstream source repository:
-
-https://github.com/qtwebkit/qtwebkit/commit/78360c01c796b6260bf828bc9c8a0ef73c5132fd
-
-From 78360c01c796b6260bf828bc9c8a0ef73c5132fd Mon Sep 17 00:00:00 2001
-From: Konstantin Tokarev <annulen@yandex.ru>
-Date: Wed, 3 Jun 2020 15:01:42 +0300
-Subject: [PATCH] Fix compilation with Python 3.9: avoid passing encoding to
- json.load()
-
-In Python 2.7 UTF-8 is assumed by default, while in Python 3 this argument
-is not supported.
-
-Change-Id: Ic459d60a6b20bc1838d8771bc36ac41614fe61a9
----
- Source/JavaScriptCore/generate-bytecode-files | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Source/JavaScriptCore/generate-bytecode-files 
b/Source/JavaScriptCore/generate-bytecode-files
-index c5dab429c7b0f..af3431275ecf9 100644
---- a/Source/JavaScriptCore/generate-bytecode-files
-+++ b/Source/JavaScriptCore/generate-bytecode-files
-@@ -163,7 +163,7 @@ if __name__ == "__main__":
-         initBytecodesFile = openOrExit(initASMFileName, "w")
- 
-     try:
--        bytecodeSections = json.load(bytecodeFile, encoding = "utf-8")
-+        bytecodeSections = json.load(bytecodeFile)
-     except:
-         print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, 
sys.exc_info()))
- 
diff --git a/gnu/packages/patches/qtwebkit-pbutils-include.patch 
b/gnu/packages/patches/qtwebkit-pbutils-include.patch
deleted file mode 100644
index 57961e7a51..0000000000
--- a/gnu/packages/patches/qtwebkit-pbutils-include.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Patch taken from Nix:
-   
https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/qt-5/5.11/qtwebkit.patch
-
-diff --git a/Source/WebKit2/PlatformQt.cmake b/Source/WebKit2/PlatformQt.cmake
---- a/Source/WebKit2/PlatformQt.cmake
-+++ b/Source/WebKit2/PlatformQt.cmake
-@@ -261,6 +261,7 @@
- list(APPEND WebKit2_SYSTEM_INCLUDE_DIRECTORIES
-     ${GLIB_INCLUDE_DIRS}
-     ${GSTREAMER_INCLUDE_DIRS}
-+    ${GSTREAMER_PBUTILS_INCLUDE_DIRS}
-     ${Qt5Quick_INCLUDE_DIRS}
-     ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
-     ${SQLITE_INCLUDE_DIR}
-
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index cad07ea19d..b32a78085d 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -3803,89 +3803,6 @@ different kinds of sliders, and much more.")
     ;; textengines/mathml/qwt_mml_document.{cpp,h} is dual LGPL2.1/GPL3 
(either).
     license:lgpl2.1 license:gpl3))))
 
-(define-public qtwebkit
-  (package
-    (name "qtwebkit")
-    (version "5.212.0-alpha4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append 
"https://github.com/annulen/webkit/releases/download/";
-                            "qtwebkit-" version "/qtwebkit-" version 
".tar.xz"))
-        (sha256
-         (base32
-          "1rm9sjkabxna67dl7myx9d9vpdyfxfdhrk9w7b94srkkjbd2d8cw"))
-        (patches (search-patches "qtwebkit-pbutils-include.patch"
-                                 "qtwebkit-fix-building-with-bison-3.7.patch"
-                                 "qtwebkit-fix-building-with-glib-2.68.patch"
-                                 "qtwebkit-fix-building-with-icu-68.patch"
-                                 
"qtwebkit-fix-building-with-python-3.9.patch"))))
-    (build-system cmake-build-system)
-    (native-inputs
-     (list perl
-           python
-           ruby
-           bison
-           flex
-           gperf
-           pkg-config))
-    (inputs
-     `(("icu" ,icu4c)
-       ("glib" ,glib)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libwebp" ,libwebp)
-       ("sqlite" ,sqlite)
-       ("fontconfig" ,fontconfig)
-       ("libxrender" ,libxrender)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative-5" ,qtdeclarative-5)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia-5" ,qtmultimedia-5)
-       ("qtsensors" ,qtsensors)
-       ("qtwebchannel-5" ,qtwebchannel-5)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)))
-    (arguments
-     `(#:tests? #f ; no apparent tests; it might be necessary to set
-                   ; ENABLE_API_TESTS, see CMakeLists.txt
-
-       ;; Parallel builds fail due to a race condition:
-       ;; <https://bugs.gnu.org/34062>.
-       #:parallel-build? #f
-
-       #:configure-flags (list ;"-DENABLE_API_TESTS=TRUE"
-                               "-DPORT=Qt"
-                               "-DUSE_LIBHYPHEN=OFF"
-                               "-DUSE_SYSTEM_MALLOC=ON"
-                               ;; XXX: relative dir installs to build dir?
-                               (string-append "-DECM_MKSPECS_INSTALL_DIR="
-                                              %output 
"/lib/qt5/mkspecs/modules")
-                               ;; Sacrifice a little speed in order to link
-                               ;; libraries and test executables in a
-                               ;; reasonable amount of memory.
-                               
"-DCMAKE_SHARED_LINKER_FLAGS=-Wl,--no-keep-memory"
-                               
"-DCMAKE_EXE_LINKER_FLAGS=-Wl,--no-keep-memory")))
-    (home-page "https://www.webkit.org";)
-    (synopsis "Web browser engine and classes to render and interact with web
-content")
-    (description "QtWebKit provides a Web browser engine that makes it easy to
-embed content from the World Wide Web into your Qt application.  At the same
-time Web content can be enhanced with native controls.")
-    ;; Building QtWebKit takes around 13 hours on an AArch64 machine.  Give 
some
-    ;; room for slower or busy hardware.
-    (properties '((timeout . 64800)))   ;18 hours
-
-    ;; XXX: This consumes too much RAM to successfully build on AArch64 (e.g.,
-    ;; SoftIron OverDrive with 8 GiB of RAM), so instead of wasting resources,
-    ;; disable it on non-Intel platforms.
-    (supported-systems '("x86_64-linux" "i686-linux"))
-
-    (license license:lgpl2.1+)))
-
 (define-public dotherside
   (package
     (name "dotherside")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]