Rebase to 3.24.31 (#2010192)

Resolves: #2010192
This commit is contained in:
David King 2022-01-13 10:25:16 +00:00
parent eaceb9ec9b
commit 3e84320373
6 changed files with 415 additions and 123 deletions

1
.gitignore vendored
View File

@ -199,3 +199,4 @@ gtk+-2.90.5.tar.bz2
/gtk+-3.24.28.tar.xz
/gtk+-3.24.29.tar.xz
/gtk+-3.24.30.tar.xz
/gtk+-3.24.31.tar.xz

View File

@ -1,70 +0,0 @@
From b541ad48d1c7060e2d38205d4874675e27578b9b Mon Sep 17 00:00:00 2001
From: Matthias Clasen <mclasen@redhat.com>
Date: Mon, 19 Jul 2021 13:10:31 -0400
Subject: [PATCH] reftests: Enforce default settings
Set all settings to their default values, so we
are less dependent on the environment to be set
up just right. In particular, this fixes animations
being disabled when we happen to run in a vm.
---
testsuite/reftests/gtk-reftest.c | 36 ++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
index 585e1c393d..1a51a9756b 100644
--- a/testsuite/reftests/gtk-reftest.c
+++ b/testsuite/reftests/gtk-reftest.c
@@ -368,6 +368,40 @@ add_test_for_file (GFile *file)
g_list_free_full (files, g_object_unref);
}
+static void
+enforce_default_settings (void)
+{
+ GtkSettings *settings;
+ GTypeClass *klass;
+ GParamSpec **pspecs;
+ guint n_pspecs;
+ int i;
+
+ settings = gtk_settings_get_default ();
+
+ klass = g_type_class_ref (G_OBJECT_TYPE (settings));
+
+ pspecs = g_object_class_list_properties (klass, &n_pspecs);
+ for (i = 0; i < n_pspecs; i++)
+ {
+ GParamSpec *pspec = pspecs[i];
+ const GValue *value;
+
+ if ((pspec->flags & G_PARAM_WRITABLE) == 0)
+ continue;
+
+ if (pspec->value_type == G_TYPE_HASH_TABLE)
+ continue;
+
+ value = g_param_spec_get_default_value (pspec);
+ g_object_set_property (settings, pspec->name, value);
+ }
+
+ g_free (pspecs);
+
+ g_type_class_unref (klass);
+}
+
int
main (int argc, char **argv)
{
@@ -382,6 +416,8 @@ main (int argc, char **argv)
if (!parse_command_line (&argc, &argv))
return 1;
+ enforce_default_settings ();
+
if (arg_base_dir)
basedir = arg_base_dir;
else
--
2.31.1

View File

@ -0,0 +1,53 @@
From 7f295eeb324c3d793bdf302fa7ea9ebdd8a52bcf Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Thu, 23 Dec 2021 10:53:57 +0000
Subject: [PATCH] meson: Do not install reftests
Match the testsuite in the main branch.
---
testsuite/reftests/meson.build | 25 +------------------------
1 file changed, 1 insertion(+), 24 deletions(-)
diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build
index b4bf6784cc..2135ebb434 100644
--- a/testsuite/reftests/meson.build
+++ b/testsuite/reftests/meson.build
@@ -22,9 +22,7 @@ libreftest = shared_library('reftest',
gtk_reftest = executable('gtk-reftest', 'gtk-reftest.c',
link_with : [libgtkreftestprivate, libreftest],
- dependencies : libgtk_dep,
- install: get_option('installed_tests'),
- install_dir: installed_test_bindir)
+ dependencies : libgtk_dep)
test_data = [
'721800-0px-dotted-border.css',
@@ -457,24 +455,3 @@ foreach testname : test_data
is_parallel: false)
endif
endforeach
-
-reftests_installed_tests = [
- 'reftests-dark.test',
- 'reftests-hc.test',
- 'reftests-hci.test',
- 'reftests.test',
-]
-
-if get_option('installed_tests')
- test_cdata = configuration_data()
- test_cdata.set('libexecdir', gtk_libexecdir)
-
- foreach t: reftests_installed_tests
- configure_file(input: '@0@.in'.format(t),
- output: t,
- configuration: test_cdata,
- install_dir: installed_test_datadir)
- endforeach
-
- install_data(test_data, install_dir: testexecdir)
-endif
--
2.33.1

316
gtk3-3.24.31-meson.patch Normal file
View File

@ -0,0 +1,316 @@
From 9bad0a2d5e35fdd2d89efedae1298d7c3dd158a3 Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Tue, 21 Dec 2021 10:09:29 +0000
Subject: [PATCH 1/3] meson: Remove missing reftests
Removed from autotools build in commit
93e1f7f1ec709325fe9b0554b92add06ad988ae8.
---
testsuite/reftests/meson.build | 7 -------
1 file changed, 7 deletions(-)
diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build
index 9bfe1bb698..b4bf6784cc 100644
--- a/testsuite/reftests/meson.build
+++ b/testsuite/reftests/meson.build
@@ -291,9 +291,6 @@ test_data = [
'label-text-shadow-clipping.css',
'label-text-shadow-clipping.ref.ui',
'label-text-shadow-clipping.ui',
- 'label-text-shadow-changes-modify-clip.css',
- 'label-text-shadow-changes-modify-clip.ref.ui',
- 'label-text-shadow-changes-modify-clip.ui',
'label-width-chars-dont-shrink.ref.ui',
'label-width-chars-dont-shrink.ui',
'label-wrap-justify.ref.ui',
@@ -405,10 +402,6 @@ test_data = [
'textview-margins.ui',
'textview-tags.ref.ui',
'textview-tags.ui',
- 'toplevel-vs-popup.ref.ui',
- 'toplevel-vs-popup.ui',
- 'treeview-crash-too-wide.ref.ui',
- 'treeview-crash-too-wide.ui',
'treeview-fixed-height.css',
'treeview-fixed-height.ref.ui',
'treeview-fixed-height.ui',
--
2.33.1
From 2b566f0633a740cca2b30941231f0507de873002 Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Tue, 21 Dec 2021 11:10:37 +0000
Subject: [PATCH 2/3] meson: Install example schema XML
---
examples/application10/meson.build | 4 +++-
examples/application5/meson.build | 4 +++-
examples/application6/meson.build | 4 +++-
examples/application7/meson.build | 4 +++-
examples/application8/meson.build | 4 +++-
examples/application9/meson.build | 4 +++-
6 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/examples/application10/meson.build b/examples/application10/meson.build
index ce842ae794..417a64155e 100644
--- a/examples/application10/meson.build
+++ b/examples/application10/meson.build
@@ -5,7 +5,7 @@ app10_resources = gnome.compile_resources(
source_dir: '.'
)
-app10_schemas = gnome.compile_schemas()
+app10_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app10 = executable(
@@ -21,3 +21,5 @@ app10 = executable(
app10_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
diff --git a/examples/application5/meson.build b/examples/application5/meson.build
index f0fed1ca59..8ecb41948e 100644
--- a/examples/application5/meson.build
+++ b/examples/application5/meson.build
@@ -5,7 +5,7 @@ app5_resources = gnome.compile_resources(
source_dir: '.'
)
-app5_schemas = gnome.compile_schemas()
+app5_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app5 = executable(
@@ -19,3 +19,5 @@ app5 = executable(
app5_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
diff --git a/examples/application6/meson.build b/examples/application6/meson.build
index 2d923f35a3..8a172e2e26 100644
--- a/examples/application6/meson.build
+++ b/examples/application6/meson.build
@@ -5,7 +5,7 @@ app6_resources = gnome.compile_resources(
source_dir: '.'
)
-app6_schemas = gnome.compile_schemas()
+app6_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app6 = executable(
@@ -21,3 +21,5 @@ app6 = executable(
app6_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
diff --git a/examples/application7/meson.build b/examples/application7/meson.build
index cc32f36ad0..4c46221085 100644
--- a/examples/application7/meson.build
+++ b/examples/application7/meson.build
@@ -5,7 +5,7 @@ app7_resources = gnome.compile_resources(
source_dir: '.'
)
-app7_schemas = gnome.compile_schemas()
+app7_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app7 = executable(
@@ -21,3 +21,5 @@ app7 = executable(
app7_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
diff --git a/examples/application8/meson.build b/examples/application8/meson.build
index 1192f4d688..ee49034d2b 100644
--- a/examples/application8/meson.build
+++ b/examples/application8/meson.build
@@ -5,7 +5,7 @@ app8_resources = gnome.compile_resources(
source_dir: '.'
)
-app8_schemas = gnome.compile_schemas()
+app8_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app8 = executable(
@@ -21,3 +21,5 @@ app8 = executable(
app8_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
diff --git a/examples/application9/meson.build b/examples/application9/meson.build
index fccee738cb..46b77c4d17 100644
--- a/examples/application9/meson.build
+++ b/examples/application9/meson.build
@@ -5,7 +5,7 @@ app9_resources = gnome.compile_resources(
source_dir: '.'
)
-app9_schemas = gnome.compile_schemas()
+app9_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app9 = executable(
@@ -21,3 +21,5 @@ app9 = executable(
app9_schemas,
dependencies: libgtk_dep
)
+
+install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
--
2.33.1
From e36849e6a397bc7e0356bd51583d79f821f9c3db Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Tue, 21 Dec 2021 14:04:40 +0000
Subject: [PATCH 3/3] Revert "meson: simplify builtin_immodules build option"
This reverts commit 749a58ab26bc01381d66ccefdd3aa42a34353e70.
This maintains feature parity with the autotools build.
---
gtk/meson.build | 2 +-
meson.build | 30 ++++++++++++++++++++++++------
meson_options.txt | 4 ++--
modules/input/meson.build | 2 +-
4 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/gtk/meson.build b/gtk/meson.build
index 9754686cca..12aa7db5c3 100644
--- a/gtk/meson.build
+++ b/gtk/meson.build
@@ -959,7 +959,7 @@ foreach l: immodules
cond = l.get(2, true)
cflags = l.get(3, [])
- if cond and builtin_immodules
+ if cond and (builtin_immodules.contains(name) or builtin_all_immodules)
gtk_cargs += ['-DINCLUDE_IM_@0@'.format(name.underscorify())]
mod = static_library('staticimmodule-@0@'.format(name),
sources + gtk_dep_sources,
diff --git a/meson.build b/meson.build
index 16d1597116..15cca3de15 100644
--- a/meson.build
+++ b/meson.build
@@ -499,6 +499,8 @@ else
cdata.set_quoted('ISO_CODES_PREFIX', get_option('prefix'))
endif
+backend_immodules = []
+
pc_gdk_extra_libs = []
cairo_found_type = cairo_dep.type_name()
@@ -554,6 +556,7 @@ if wayland_enabled
wlprotocolsdep = dependency('wayland-protocols', version: wayland_proto_req)
wlcursordep = dependency('wayland-cursor', version: wayland_req)
wlegldep = dependency('wayland-egl')
+ backend_immodules += ['wayland']
wayland_pkgs = [
'wayland-client', wayland_req,
@@ -578,6 +581,8 @@ if x11_enabled
fontconfig_dep = dependency('fontconfig', fallback: ['fontconfig', 'fontconfig_dep'])
atkbridge_dep = dependency('atk-bridge-2.0', version: at_spi2_atk_req)
+ backend_immodules += ['xim']
+
x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr']
if xcursor_dep.found()
@@ -656,10 +661,12 @@ endif
if broadway_enabled
pc_gdk_extra_libs += ['-lz']
+ backend_immodules += ['broadway']
endif
if quartz_enabled
pc_gdk_extra_libs += ['-Wl,-framework,Cocoa', '-Wl,-framework,Carbon', '-Wl,-framework,CoreGraphics']
+ backend_immodules += ['quartz']
endif
extra_demo_ldflags = []
@@ -674,6 +681,7 @@ if win32_enabled
pc_gdk_extra_libs += ['-Wl,-luuid']
endif
pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32']
+ backend_immodules += ['ime']
# Check whether libepoxy is built with EGL support on Windows
win32_has_egl = epoxy_dep.get_variable(
@@ -684,20 +692,30 @@ endif
# IMModules stuff-unfortunately we need to put items here
# as they can be built as modules or built directly into GTK
+builtin_all_immodules = false
+
builtin_modules_opt = get_option('builtin_immodules')
-if builtin_modules_opt == 'auto'
+builtin_immodules = []
+
+if builtin_modules_opt == ''
if os_win32
# Current MSVC projects build all immodules directly into GTK by default,
# as does the mingw autotools build
message('IMModules are built into GTK for MSVC builds by default')
- builtin_immodules = true
+ builtin_immodules = ['all']
else
- builtin_immodules = false
+ builtin_immodules = ['none']
endif
-elif builtin_modules_opt == 'yes'
- builtin_immodules = true
else
- builtin_immodules = false
+ builtin_immodules = builtin_modules_opt.split(',')
+endif
+
+if builtin_immodules.contains('none')
+ builtin_immodules = []
+elif builtin_immodules.contains('all')
+ builtin_all_immodules = true
+elif builtin_immodules.contains('backend')
+ builtin_immodules += backend_immodules
endif
proto_sources = [
diff --git a/meson_options.txt b/meson_options.txt
index 1ca55b1467..94099aa01e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -45,5 +45,5 @@ option('installed_tests', type: 'boolean', value: 'false',
description : 'enable installed tests')
# input modules
-option('builtin_immodules', type: 'combo', choices : ['yes', 'no', 'auto'],
- value: 'auto', description: 'Build immodules into GTK so/DLL')
+option('builtin_immodules', type: 'string',
+ value: '', description: 'Build specified immodules into GTK so/DLL (comma-separated list), "all", "none" or "backend"')
diff --git a/modules/input/meson.build b/modules/input/meson.build
index 7b201af894..95534b05ec 100644
--- a/modules/input/meson.build
+++ b/modules/input/meson.build
@@ -7,7 +7,7 @@ foreach l: immodules
cond = l.get(2, true)
cflags = l.get(3, [])
- if cond and not builtin_immodules
+ if cond and not (builtin_immodules.contains(name) or builtin_all_immodules)
shared_module('im-@0@'.format(name),
immod_sources,
c_args: common_cflags + cflags,
--
2.33.1

View File

@ -18,28 +18,39 @@
%global __provides_exclude_from ^%{_libdir}/gtk-3.0
Name: gtk3
Version: 3.24.30
Release: 4%{?dist}
Version: 3.24.31
Release: 1%{?dist}
Summary: GTK+ graphical user interface library
License: LGPLv2+
URL: http://www.gtk.org
Source0: http://download.gnome.org/sources/gtk+/3.24/gtk+-%{version}.tar.xz
# Upstream patch to make reftests work in a vm
Patch1: 0001-reftests-Enforce-default-settings.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2025439
Patch2: gtk3-3.24.30-entry-no-emoji-context-menu.patch
Patch0: gtk3-3.24.30-entry-no-emoji-context-menu.patch
# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4273
Patch1: gtk3-3.24.31-meson.patch
# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4280
Patch2: gtk3-3.24.31-meson-reftest.patch
BuildRequires: pkgconfig(atk) >= %{atk_version}
BuildRequires: pkgconfig(atk-bridge-2.0)
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gobject-introspection-1.0)
BuildRequires: pkgconfig(avahi-gobject)
BuildRequires: pkgconfig(cairo) >= %{cairo_version}
BuildRequires: pkgconfig(cairo-gobject) >= %{cairo_version}
BuildRequires: pkgconfig(pango) >= %{pango_version}
BuildRequires: pkgconfig(colord)
BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(epoxy)
BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= %{gdk_pixbuf_version}
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gobject-introspection-1.0)
BuildRequires: pkgconfig(pango) >= %{pango_version}
BuildRequires: pkgconfig(tracker-sparql-3.0)
BuildRequires: pkgconfig(wayland-client) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-cursor) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-egl) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version}
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xrandr) >= %{xrandr_version}
BuildRequires: pkgconfig(xrender)
@ -49,22 +60,12 @@ BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(epoxy)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: cups-devel
BuildRequires: desktop-file-utils
BuildRequires: gettext
BuildRequires: gtk-doc
BuildRequires: cups-devel
BuildRequires: pkgconfig(rest-0.7)
BuildRequires: pkgconfig(json-glib-1.0)
BuildRequires: pkgconfig(colord)
BuildRequires: pkgconfig(avahi-gobject)
BuildRequires: desktop-file-utils
BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(wayland-client) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-cursor) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-egl) >= %{wayland_version}
BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version}
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: make
BuildRequires: meson
# standard icons
Requires: adwaita-icon-theme
@ -92,6 +93,9 @@ Recommends: dconf%{?_isa}
# For sound theme events in gtk3 apps
Recommends: libcanberra-gtk3%{?_isa}
# For Tracker search in the file chooser.
Recommends: tracker-miners
%description
GTK+ is a multi-platform toolkit for creating graphical user
interfaces. Offering a complete set of widgets, GTK+ is suitable for
@ -157,31 +161,22 @@ the functionality of the installed %{name} package.
%build
export CFLAGS='-fno-strict-aliasing %optflags'
(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi;
%configure $CONFIGFLAGS \
--enable-xkb \
--enable-xinerama \
--enable-xrandr \
--enable-xfixes \
--enable-xcomposite \
--enable-xdamage \
--enable-x11-backend \
--enable-wayland-backend \
%meson \
%if 0%{?with_broadway}
--enable-broadway-backend \
-Dbroadway_backend=true \
%endif
--enable-colord \
--enable-installed-tests \
--with-included-immodules=wayland
)
# fight unused direct deps
sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
make %{?_smp_mflags}
-Dbuiltin_immodules=wayland,waylandgtk \
-Dcolord=yes \
-Dcloudproviders=false \
-Dgtk_doc=true \
-Dinstalled_tests=true \
-Dman=true \
-Dtracker3=true \
-Dxinerama=yes \
%meson_build
%install
%make_install RUN_QUERY_IMMODULES_TEST=false
%meson_install
%find_lang gtk30
%find_lang gtk30-properties
@ -192,13 +187,6 @@ make %{?_smp_mflags}
echo ".so man1/gtk-query-immodules-3.0.1" > $RPM_BUILD_ROOT%{_mandir}/man1/gtk-query-immodules-3.0-%{__isa_bits}.1
# Remove unpackaged files
find $RPM_BUILD_ROOT -name '*.la' -delete
%if !0%{?with_broadway}
rm $RPM_BUILD_ROOT%{_mandir}/man1/broadwayd.1*
%endif
touch $RPM_BUILD_ROOT%{_libdir}/gtk-3.0/%{bin_version}/immodules.cache
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gtk-3.0
@ -241,6 +229,8 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
%{_datadir}/glib-2.0/schemas/org.gtk.Settings.EmojiChooser.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gtk.exampleapp.gschema.xml
%dir %{_datadir}/gtk-3.0
%{_datadir}/gtk-3.0/emoji/
%if 0%{?with_broadway}
%{_bindir}/broadwayd
%{_mandir}/man1/broadwayd.1*
@ -292,7 +282,6 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
%{_datadir}/gettext/
%{_datadir}/gir-1.0
%{_datadir}/glib-2.0/schemas/org.gtk.Demo.gschema.xml
%dir %{_datadir}/gtk-3.0
%{_datadir}/gtk-3.0/gtkbuilder.rng
%{_datadir}/gtk-3.0/valgrind/
%{_mandir}/man1/gtk3-demo.1*
@ -311,6 +300,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || :
%{_datadir}/installed-tests/
%changelog
* Thu Jan 13 2022 David King <amigadave@amigadave.com> - 3.24.31-1
- Rebase to 3.24.31 (#2010192)
* Thu Jan 13 2022 David King <amigadave@amigadave.com> - 3.24.30-4
- No entry emoji context menu (#2025439)

View File

@ -1 +1 @@
SHA512 (gtk+-3.24.30.tar.xz) = 4164559f3e14501b9f9330a76535ebf5e26961d436f65e65ea609998cb120fcbcc5d9591453a64e1d414248499857288e5758274d03a7f75e9ae76cbf8c68ff9
SHA512 (gtk+-3.24.31.tar.xz) = e7f8e5003a919e297bd3e616acccbc5cc9bf9c9d41377c108c24db51817fcccec919abc12d05c0ed585d49526d52f0395a1c0f3ed9d9ef816bb0c4b2aa615f9b