diff --git a/.gitignore b/.gitignore index 833972c..003fc18 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ matplotlib-1.0.0-without-gpc.tar.gz /matplotlib-2.1.0rc1.tar.gz /matplotlib-2.1.0.tar.gz /matplotlib-2.1.1.tar.gz +/matplotlib-2.1.2.tar.gz diff --git a/0001-Use-fuzzy-comparison-for-stroke-join-determination.patch b/0001-Use-fuzzy-comparison-for-stroke-join-determination.patch deleted file mode 100644 index 1bc68bc..0000000 --- a/0001-Use-fuzzy-comparison-for-stroke-join-determination.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8dba6d00d8ead090f6161854f9e64d28ea18e663 Mon Sep 17 00:00:00 2001 -From: Elliott Sales de Andrade -Date: Sun, 15 Oct 2017 17:16:11 -0400 -Subject: [PATCH 1/4] Use fuzzy comparison for stroke join determination. - -This sometimes produces something just slightly different from 0 -compared to x86(_64). - -Signed-off-by: Elliott Sales de Andrade ---- - extern/agg24-svn/include/agg_math_stroke.h | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/extern/agg24-svn/include/agg_math_stroke.h b/extern/agg24-svn/include/agg_math_stroke.h -index 4806dcd4b..4871d96ce 100644 ---- a/extern/agg24-svn/include/agg_math_stroke.h -+++ b/extern/agg24-svn/include/agg_math_stroke.h -@@ -391,7 +391,8 @@ namespace agg - vc.remove_all(); - - double cp = cross_product(v0.x, v0.y, v1.x, v1.y, v2.x, v2.y); -- if(cp != 0 && (cp > 0) == (m_width > 0)) -+ if ((cp > agg::vertex_dist_epsilon && m_width > 0) || -+ (cp < -agg::vertex_dist_epsilon && m_width < 0)) - { - // Inner join - //--------------- --- -2.13.6 - diff --git a/0002-matplotlibrc-path-search-fix.patch b/0001-matplotlibrc-path-search-fix.patch similarity index 91% rename from 0002-matplotlibrc-path-search-fix.patch rename to 0001-matplotlibrc-path-search-fix.patch index 2193a1b..d3d4acb 100644 --- a/0002-matplotlibrc-path-search-fix.patch +++ b/0001-matplotlibrc-path-search-fix.patch @@ -1,7 +1,7 @@ -From 22121f236ebdc8f8539c2c0901073dce80f4edd8 Mon Sep 17 00:00:00 2001 +From 69b627b84fa8081748d93d180deb2218b99270a4 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 27 Sep 2017 19:35:59 -0400 -Subject: [PATCH 2/4] matplotlibrc path search fix +Subject: [PATCH 1/3] matplotlibrc path search fix Signed-off-by: Elliott Sales de Andrade --- @@ -35,5 +35,5 @@ index 3ba486af1..b8caf27dc 100644 for fname in gen_candidates(): if os.path.isfile(fname): -- -2.13.6 +2.14.3 diff --git a/0003-TST-Increase-tolerances-for-FreeType-2.7.1.patch b/0002-TST-Increase-tolerances-for-FreeType-2.7.1.patch similarity index 74% rename from 0003-TST-Increase-tolerances-for-FreeType-2.7.1.patch rename to 0002-TST-Increase-tolerances-for-FreeType-2.7.1.patch index ad9c914..754498a 100644 --- a/0003-TST-Increase-tolerances-for-FreeType-2.7.1.patch +++ b/0002-TST-Increase-tolerances-for-FreeType-2.7.1.patch @@ -1,18 +1,18 @@ -From cfdc835923407810bd087f60332cdc8cdcb23f05 Mon Sep 17 00:00:00 2001 +From 593459d2a9223d69180fed80622f4e7e2cf96239 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 15 Oct 2017 17:35:47 -0400 -Subject: [PATCH 3/4] TST: Increase tolerances for FreeType 2.7.1. +Subject: [PATCH 2/3] TST: Increase tolerances for FreeType 2.7.1. Signed-off-by: Elliott Sales de Andrade --- lib/matplotlib/testing/decorators.py | 2 +- - lib/matplotlib/tests/test_axes.py | 4 ++-- + lib/matplotlib/tests/test_axes.py | 5 ++--- lib/matplotlib/tests/test_mathtext.py | 4 ++-- - lib/matplotlib/tests/test_patches.py | 2 +- + lib/matplotlib/tests/test_patches.py | 3 +-- lib/matplotlib/tests/test_patheffects.py | 2 +- - lib/matplotlib/tests/test_streamplot.py | 2 +- + lib/matplotlib/tests/test_streamplot.py | 6 ++---- lib/mpl_toolkits/tests/test_mplot3d.py | 2 +- - 7 files changed, 9 insertions(+), 9 deletions(-) + 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/matplotlib/testing/decorators.py b/lib/matplotlib/testing/decorators.py index c5e069b31..ebd68cfab 100644 @@ -28,19 +28,20 @@ index c5e069b31..ebd68cfab 100644 savefig_kwarg=None, # Default of mpl_test_settings fixture and cleanup too. diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py -index 33be78004..c73e55802 100644 +index 7164d0cec..6492cc140 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py -@@ -672,7 +672,7 @@ def test_polar_rlabel_position(): +@@ -671,8 +671,7 @@ def test_polar_rlabel_position(): + ax.tick_params(rotation='auto') - @image_comparison(baseline_images=['polar_theta_wedge'], style='default', +-@image_comparison(baseline_images=['polar_theta_wedge'], style='default', - tol=0.01 if six.PY2 else 0) -+ tol=0.1) ++@image_comparison(baseline_images=['polar_theta_wedge'], style='default') def test_polar_theta_limits(): r = np.arange(0, 3.0, 0.01) theta = 2*np.pi*r -@@ -4679,7 +4679,7 @@ def test_rc_spines(): +@@ -4679,7 +4678,7 @@ def test_rc_spines(): @image_comparison(baseline_images=['rc_grid'], extensions=['png'], @@ -72,20 +73,22 @@ index 7ef77ce6a..b8c9c9e8b 100644 matplotlib.rcParams['mathtext.fontset'] = fontset fig = plt.figure(figsize=(5.25, 0.75)) diff --git a/lib/matplotlib/tests/test_patches.py b/lib/matplotlib/tests/test_patches.py -index 20ffa6b08..9f5088f0f 100644 +index 20ffa6b08..81737c84d 100644 --- a/lib/matplotlib/tests/test_patches.py +++ b/lib/matplotlib/tests/test_patches.py -@@ -269,7 +269,7 @@ def test_wedge_movement(): +@@ -267,9 +267,8 @@ def test_wedge_movement(): + assert getattr(w, attr) == new_v - # png needs tol>=0.06, pdf tol>=1.617 + +-# png needs tol>=0.06, pdf tol>=1.617 @image_comparison(baseline_images=['wedge_range'], - remove_text=True, tol=1.65 if on_win else 0) -+ remove_text=True, tol=0.1) ++ remove_text=True) def test_wedge_range(): ax = plt.axes() diff --git a/lib/matplotlib/tests/test_patheffects.py b/lib/matplotlib/tests/test_patheffects.py -index 9b8a4379c..ebbcd6529 100644 +index 9b8a4379c..b46d8cec4 100644 --- a/lib/matplotlib/tests/test_patheffects.py +++ b/lib/matplotlib/tests/test_patheffects.py @@ -125,7 +125,7 @@ def test_SimplePatchShadow_offset(): @@ -93,23 +96,34 @@ index 9b8a4379c..ebbcd6529 100644 -@image_comparison(baseline_images=['collection'], tol=0.015) -+@image_comparison(baseline_images=['collection'], tol=0.1) ++@image_comparison(baseline_images=['collection']) def test_collection(): x, y = np.meshgrid(np.linspace(0, 10, 150), np.linspace(-5, 5, 100)) data = np.sin(x) + np.cos(y) diff --git a/lib/matplotlib/tests/test_streamplot.py b/lib/matplotlib/tests/test_streamplot.py -index ac997b2b2..cd7233e2e 100644 +index 1d7e09fef..b62ca2198 100644 --- a/lib/matplotlib/tests/test_streamplot.py +++ b/lib/matplotlib/tests/test_streamplot.py -@@ -36,7 +36,7 @@ def test_startpoints(): +@@ -40,8 +40,7 @@ def test_startpoints(): + plt.plot(start_x, start_y, 'ok') - @image_comparison(baseline_images=['streamplot_colormap'], -- tol=0.002) -+ tol=0.1) +-@image_comparison(baseline_images=['streamplot_colormap'], +- tol=.02) ++@image_comparison(baseline_images=['streamplot_colormap']) def test_colormap(): X, Y, U, V = velocity_field() plt.streamplot(X, Y, U, V, color=U, density=0.6, linewidth=2, +@@ -59,8 +58,7 @@ def test_linewidth(): + linewidth=lw) + + +-@image_comparison(baseline_images=['streamplot_masks_and_nans'], +- tol=0.04 if on_win else 0) ++@image_comparison(baseline_images=['streamplot_masks_and_nans']) + def test_masks_and_nans(): + X, Y, U, V = velocity_field() + mask = np.zeros(U.shape, dtype=bool) diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index c157433c7..c13f3be2f 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py @@ -124,5 +138,5 @@ index c157433c7..c13f3be2f 100644 def test_xyz(self): fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) -- -2.13.6 +2.14.3 diff --git a/0004-TST-Increase-some-tolerances-for-32-bit-systems.patch b/0003-TST-Increase-some-tolerances-for-32-bit-systems.patch similarity index 90% rename from 0004-TST-Increase-some-tolerances-for-32-bit-systems.patch rename to 0003-TST-Increase-some-tolerances-for-32-bit-systems.patch index 520122d..d0a02ec 100644 --- a/0004-TST-Increase-some-tolerances-for-32-bit-systems.patch +++ b/0003-TST-Increase-some-tolerances-for-32-bit-systems.patch @@ -1,7 +1,7 @@ -From 4fbf2473e97a259494117a408a5efa377fa5a947 Mon Sep 17 00:00:00 2001 +From 61eac9a522a7907db3fe01680d249789d1cff710 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 15 Oct 2017 21:11:26 -0400 -Subject: [PATCH 4/4] TST: Increase some tolerances for 32-bit systems. +Subject: [PATCH 3/3] TST: Increase some tolerances for 32-bit systems. Signed-off-by: Elliott Sales de Andrade --- @@ -32,7 +32,7 @@ index 786d50903..105714ef4 100644 exterior = mpath.Path.unit_rectangle().deepcopy() exterior.vertices *= 4 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py -index c73e55802..90db6dfda 100644 +index 6492cc140..8609d8c31 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -483,7 +483,7 @@ def test_single_point(): @@ -44,7 +44,7 @@ index c73e55802..90db6dfda 100644 def test_single_date(): time1 = [721964.0] data1 = [-65.54] -@@ -972,7 +972,7 @@ def test_fill_between_interpolate(): +@@ -971,7 +971,7 @@ def test_fill_between_interpolate(): @image_comparison(baseline_images=['fill_between_interpolate_decreasing'], @@ -53,7 +53,7 @@ index c73e55802..90db6dfda 100644 def test_fill_between_interpolate_decreasing(): p = np.array([724.3, 700, 655]) t = np.array([9.4, 7, 2.2]) -@@ -1086,7 +1086,7 @@ def test_pcolormesh(): +@@ -1085,7 +1085,7 @@ def test_pcolormesh(): @image_comparison(baseline_images=['pcolormesh_datetime_axis'], @@ -62,7 +62,7 @@ index c73e55802..90db6dfda 100644 def test_pcolormesh_datetime_axis(): fig = plt.figure() fig.subplots_adjust(hspace=0.4, top=0.98, bottom=.15) -@@ -1112,7 +1112,7 @@ def test_pcolormesh_datetime_axis(): +@@ -1111,7 +1111,7 @@ def test_pcolormesh_datetime_axis(): @image_comparison(baseline_images=['pcolor_datetime_axis'], @@ -71,7 +71,7 @@ index c73e55802..90db6dfda 100644 def test_pcolor_datetime_axis(): fig = plt.figure() fig.subplots_adjust(hspace=0.4, top=0.98, bottom=.15) -@@ -1168,7 +1168,7 @@ def test_canonical(): +@@ -1167,7 +1167,7 @@ def test_canonical(): @image_comparison(baseline_images=['arc_angles'], remove_text=True, @@ -80,7 +80,7 @@ index c73e55802..90db6dfda 100644 def test_arc_angles(): from matplotlib import patches # Ellipse parameters -@@ -2434,7 +2434,7 @@ def test_boxplot_mod_artist_after_plotting(): +@@ -2433,7 +2433,7 @@ def test_boxplot_mod_artist_after_plotting(): @image_comparison(baseline_images=['violinplot_vert_baseline', 'violinplot_vert_baseline'], @@ -89,7 +89,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_baseline(): # First 9 digits of frac(sqrt(2)) np.random.seed(414213562) -@@ -2452,7 +2452,7 @@ def test_vert_violinplot_baseline(): +@@ -2451,7 +2451,7 @@ def test_vert_violinplot_baseline(): @image_comparison(baseline_images=['violinplot_vert_showmeans'], @@ -98,7 +98,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_showmeans(): ax = plt.axes() # First 9 digits of frac(sqrt(3)) -@@ -2463,7 +2463,7 @@ def test_vert_violinplot_showmeans(): +@@ -2462,7 +2462,7 @@ def test_vert_violinplot_showmeans(): @image_comparison(baseline_images=['violinplot_vert_showextrema'], @@ -107,7 +107,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_showextrema(): ax = plt.axes() # First 9 digits of frac(sqrt(5)) -@@ -2474,7 +2474,7 @@ def test_vert_violinplot_showextrema(): +@@ -2473,7 +2473,7 @@ def test_vert_violinplot_showextrema(): @image_comparison(baseline_images=['violinplot_vert_showmedians'], @@ -116,7 +116,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_showmedians(): ax = plt.axes() # First 9 digits of frac(sqrt(7)) -@@ -2485,7 +2485,7 @@ def test_vert_violinplot_showmedians(): +@@ -2484,7 +2484,7 @@ def test_vert_violinplot_showmedians(): @image_comparison(baseline_images=['violinplot_vert_showall'], @@ -125,7 +125,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_showall(): ax = plt.axes() # First 9 digits of frac(sqrt(11)) -@@ -2496,7 +2496,7 @@ def test_vert_violinplot_showall(): +@@ -2495,7 +2495,7 @@ def test_vert_violinplot_showall(): @image_comparison(baseline_images=['violinplot_vert_custompoints_10'], @@ -134,7 +134,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_custompoints_10(): ax = plt.axes() # First 9 digits of frac(sqrt(13)) -@@ -2507,7 +2507,7 @@ def test_vert_violinplot_custompoints_10(): +@@ -2506,7 +2506,7 @@ def test_vert_violinplot_custompoints_10(): @image_comparison(baseline_images=['violinplot_vert_custompoints_200'], @@ -143,7 +143,7 @@ index c73e55802..90db6dfda 100644 def test_vert_violinplot_custompoints_200(): ax = plt.axes() # First 9 digits of frac(sqrt(17)) -@@ -2518,7 +2518,7 @@ def test_vert_violinplot_custompoints_200(): +@@ -2517,7 +2517,7 @@ def test_vert_violinplot_custompoints_200(): @image_comparison(baseline_images=['violinplot_horiz_baseline'], @@ -152,7 +152,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_baseline(): ax = plt.axes() # First 9 digits of frac(sqrt(19)) -@@ -2529,7 +2529,7 @@ def test_horiz_violinplot_baseline(): +@@ -2528,7 +2528,7 @@ def test_horiz_violinplot_baseline(): @image_comparison(baseline_images=['violinplot_horiz_showmedians'], @@ -161,7 +161,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_showmedians(): ax = plt.axes() # First 9 digits of frac(sqrt(23)) -@@ -2540,7 +2540,7 @@ def test_horiz_violinplot_showmedians(): +@@ -2539,7 +2539,7 @@ def test_horiz_violinplot_showmedians(): @image_comparison(baseline_images=['violinplot_horiz_showmeans'], @@ -170,7 +170,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_showmeans(): ax = plt.axes() # First 9 digits of frac(sqrt(29)) -@@ -2551,7 +2551,7 @@ def test_horiz_violinplot_showmeans(): +@@ -2550,7 +2550,7 @@ def test_horiz_violinplot_showmeans(): @image_comparison(baseline_images=['violinplot_horiz_showextrema'], @@ -179,7 +179,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_showextrema(): ax = plt.axes() # First 9 digits of frac(sqrt(31)) -@@ -2562,7 +2562,7 @@ def test_horiz_violinplot_showextrema(): +@@ -2561,7 +2561,7 @@ def test_horiz_violinplot_showextrema(): @image_comparison(baseline_images=['violinplot_horiz_showall'], @@ -188,7 +188,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_showall(): ax = plt.axes() # First 9 digits of frac(sqrt(37)) -@@ -2573,7 +2573,7 @@ def test_horiz_violinplot_showall(): +@@ -2572,7 +2572,7 @@ def test_horiz_violinplot_showall(): @image_comparison(baseline_images=['violinplot_horiz_custompoints_10'], @@ -197,7 +197,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_custompoints_10(): ax = plt.axes() # First 9 digits of frac(sqrt(41)) -@@ -2584,7 +2584,7 @@ def test_horiz_violinplot_custompoints_10(): +@@ -2583,7 +2583,7 @@ def test_horiz_violinplot_custompoints_10(): @image_comparison(baseline_images=['violinplot_horiz_custompoints_200'], @@ -206,7 +206,7 @@ index c73e55802..90db6dfda 100644 def test_horiz_violinplot_custompoints_200(): ax = plt.axes() # First 9 digits of frac(sqrt(43)) -@@ -3910,7 +3910,7 @@ def test_psd_noise(): +@@ -3909,7 +3909,7 @@ def test_psd_noise(): @image_comparison(baseline_images=['csd_freqs'], remove_text=True, @@ -215,7 +215,7 @@ index c73e55802..90db6dfda 100644 def test_csd_freqs(): '''test axes.csd with sinusoidal stimuli''' n = 10000 -@@ -5136,7 +5136,7 @@ def test_date_timezone_y(): +@@ -5153,7 +5153,7 @@ def test_date_timezone_y(): @image_comparison(baseline_images=['date_timezone_x_and_y'], @@ -319,7 +319,7 @@ index 16ac9e865..29c1b26f2 100644 n = 60 mask_level = 0.95 diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py -index 0e423ab5f..8a46116fd 100644 +index fd6430d56..e9bf1b1db 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -754,7 +754,7 @@ def test_imshow_endianess(): @@ -358,7 +358,7 @@ index a0e1e674f..ede6bfc64 100644 x = np.linspace(-5, 5, 5) X, Y = np.meshgrid(x, x) diff --git a/lib/matplotlib/tests/test_transforms.py b/lib/matplotlib/tests/test_transforms.py -index 8f19a50f3..2fbe41187 100644 +index 8f19a50f3..fa4a9aa18 100644 --- a/lib/matplotlib/tests/test_transforms.py +++ b/lib/matplotlib/tests/test_transforms.py @@ -75,7 +75,7 @@ def test_external_transform_api(): @@ -366,7 +366,7 @@ index 8f19a50f3..2fbe41187 100644 @image_comparison(baseline_images=['pre_transform_data'], - tol=0.08) -+ tol=0.15) ++ tol=0.155) def test_pre_transform_plotting(): # a catch-all for as many as possible plot layouts which handle # pre-transforming the data NOTE: The axis range is important in this @@ -384,5 +384,5 @@ index c13f3be2f..81a28aadb 100644 n_angles = 36 n_radii = 8 -- -2.13.6 +2.14.3 diff --git a/python-matplotlib.spec b/python-matplotlib.spec index 6f62755..c263f77 100644 --- a/python-matplotlib.spec +++ b/python-matplotlib.spec @@ -54,24 +54,20 @@ #global rctag rc1 Name: python-matplotlib -Version: 2.1.1 +Version: 2.1.2 Release: 1%{?rctag:.%{rctag}}%{?dist} Summary: Python 2D plotting library Group: Development/Libraries # qt4_editor backend is MIT License: Python and MIT URL: http://matplotlib.org -Source0: https://github.com/matplotlib/matplotlib/archive/v%{version}%{?rctag}.tar.gz#/matplotlib-%{version}%{?rctag}.tar.gz +Source0: https://github.com/matplotlib/matplotlib/archive/v%{version}%{?rctag}/matplotlib-%{version}%{?rctag}.tar.gz Source1: setup.cfg -# Depending on https://bugzilla.redhat.com/show_bug.cgi?id=1502499 -# this may or may not go upstream. -Patch0001: 0001-Use-fuzzy-comparison-for-stroke-join-determination.patch - # Fedora-specific patches. -Patch1001: 0002-matplotlibrc-path-search-fix.patch -Patch1002: 0003-TST-Increase-tolerances-for-FreeType-2.7.1.patch -Patch1686: 0004-TST-Increase-some-tolerances-for-32-bit-systems.patch +Patch1001: 0001-matplotlibrc-path-search-fix.patch +Patch1002: 0002-TST-Increase-tolerances-for-FreeType-2.7.1.patch +Patch1686: 0003-TST-Increase-some-tolerances-for-32-bit-systems.patch BuildRequires: freetype-devel BuildRequires: libpng-devel @@ -384,7 +380,6 @@ Requires: python3-tkinter %prep %autosetup -n matplotlib-%{version}%{?rctag} -N -%patch0001 -p1 %patch1001 -p1 %patch1002 -p1 %ifarch i686 @@ -606,6 +601,9 @@ PYTHONPATH=%{buildroot}%{python3_sitearch} \ %endif %changelog +* Sun Jan 21 2018 Elliott Sales de Andrade - 2.1.2-1 +- Update to latest release + * Sun Dec 10 2017 Elliott Sales de Andrade - 2.1.1-1 - Update to latest release diff --git a/sources b/sources index 086c88f..504a6c7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (matplotlib-2.1.1.tar.gz) = 7faa6e4d215d863c436f5d5df9b2a19cf7044ec8e75be4c2e5b70ecb9fff7db03a8f092449401755c40a9ba719d1b0a7cc286e1e5ae5926b74cf91ec3826134f +SHA512 (matplotlib-2.1.2.tar.gz) = fd93901b12a7f47cdc36d38d18de43b0cc8623dcd5597cfc1177e63cf90b0c87f718135176e2c077cd1316566a394e09e8e8e9db2ce128ee7f03021cac45543e