diff --git a/.gitignore b/.gitignore
index cc55744..29c4629 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,11 @@
 SOURCES/Python-2.7.13.tar.xz
+SOURCES/Python-3.6.8.tar.xz
+SOURCES/cbindgen-vendor.tar.xz
 SOURCES/gtk3-private-3.22.26-1.el6.src.rpm
 SOURCES/libffi-3.0.13-18.el7_3.src.rpm
-SOURCES/lightning-langpacks-60.9.0.tar.xz
-SOURCES/thunderbird-60.9.0.source.tar.xz
-SOURCES/thunderbird-langpacks-60.9.0-20190904.tar.xz
+SOURCES/lightning-langpacks-68.2.0.tar.xz
+SOURCES/nodejs-8.11.4-1.3.fc27.src.rpm
+SOURCES/openssl-1.0.2k-19.6.bundle.el7_7.src.rpm
+SOURCES/thunderbird-68.2.0.source.tar.xz
+SOURCES/thunderbird-langpacks-68.2.0-20191022.tar.xz
 SOURCES/yasm-1.2.0-3.el5.src.rpm
diff --git a/.thunderbird.metadata b/.thunderbird.metadata
index 24cf516..450c19c 100644
--- a/.thunderbird.metadata
+++ b/.thunderbird.metadata
@@ -1,7 +1,11 @@
 18a8f30a0356c751b8d0ea6f76e764cab13ee046 SOURCES/Python-2.7.13.tar.xz
+ee55acedef049268307633cbc9c7ff0610d1244f SOURCES/Python-3.6.8.tar.xz
+e86c38c48960b95353503b78e1de9ddca1ed34d7 SOURCES/cbindgen-vendor.tar.xz
 0de63f863b158454b9429234b52ed28a397ec45c SOURCES/gtk3-private-3.22.26-1.el6.src.rpm
 e188ab1a444697bc649e223c28389d82ca94c472 SOURCES/libffi-3.0.13-18.el7_3.src.rpm
-fcd61b9db9e787b8891afbcf6be1efc50cc7b678 SOURCES/lightning-langpacks-60.9.0.tar.xz
-e2378df848679ecd80493e6c7fda6c2ab4258d3f SOURCES/thunderbird-60.9.0.source.tar.xz
-675a0dd3eb14c2069f7f407976575d1eab939c61 SOURCES/thunderbird-langpacks-60.9.0-20190904.tar.xz
+3b9128c27cac7470917a0ba195ca1589199d279b SOURCES/lightning-langpacks-68.2.0.tar.xz
+4f8d3bf2483d95261ff90742ecec82d6a899eca3 SOURCES/nodejs-8.11.4-1.3.fc27.src.rpm
+a379070abf5000cde61411c97af7e733b267a4d3 SOURCES/openssl-1.0.2k-19.6.bundle.el7_7.src.rpm
+d64af892a2e1391b5a0f7a2ef3fc3adc6562e877 SOURCES/thunderbird-68.2.0.source.tar.xz
+9740dcddaff636f39dfb2ae244f2f76c4cf67f23 SOURCES/thunderbird-langpacks-68.2.0-20191022.tar.xz
 77fd30f7ebc12a629a31c1e252cec06af55a71fe SOURCES/yasm-1.2.0-3.el5.src.rpm
diff --git a/README.debrand b/README.debrand
deleted file mode 100644
index 01c46d2..0000000
--- a/README.debrand
+++ /dev/null
@@ -1,2 +0,0 @@
-Warning: This package was configured for automatic debranding, but the changes
-failed to apply.
diff --git a/SOURCES/build-aarch64-skia.patch b/SOURCES/build-aarch64-skia.patch
deleted file mode 100644
index 1ecad24..0000000
--- a/SOURCES/build-aarch64-skia.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp.aarch64-skia firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp
---- firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp.aarch64-skia	2018-06-20 09:19:11.411939714 +0200
-+++ firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp	2018-06-20 09:23:36.831919894 +0200
-@@ -686,7 +686,7 @@ SI F from_half(U16 h) {
- }
- 
- SI U16 to_half(F f) {
--#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3)  // Temporary workaround for some Google3 builds.
-+#if 0 && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3)  // Temporary workaround for some Google3 builds.
-     return vcvt_f16_f32(f);
- 
- #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/SOURCES/build-disable-elfhack.patch b/SOURCES/build-disable-elfhack.patch
index 1db9bdf..a54814e 100644
--- a/SOURCES/build-disable-elfhack.patch
+++ b/SOURCES/build-disable-elfhack.patch
@@ -1,12 +1,12 @@
-diff -up firefox-60.4.0/toolkit/moz.configure.disable-elfhack firefox-60.4.0/toolkit/moz.configure
---- firefox-60.4.0/toolkit/moz.configure.disable-elfhack	2019-01-03 14:47:00.566556623 +0100
-+++ firefox-60.4.0/toolkit/moz.configure	2019-01-03 14:49:14.243887620 +0100
-@@ -1192,7 +1192,7 @@ with only_when(has_elfhack):
-     option('--disable-elf-hack', help='Disable elf hacks')
+diff -up thunderbird-68.1.1/toolkit/moz.configure.elfhack thunderbird-68.1.1/toolkit/moz.configure
+--- thunderbird-68.1.1/toolkit/moz.configure.elfhack	2019-10-04 08:33:32.881241826 +0200
++++ thunderbird-68.1.1/toolkit/moz.configure	2019-10-04 08:38:35.422159976 +0200
+@@ -1130,7 +1130,7 @@ with only_when('--enable-compile-environ
+                help='{Enable|Disable} elf hacks')
  
-     set_config('USE_ELF_HACK',
--               depends_if('--enable-elf-hack')(lambda _: True))
-+               depends_if('--enable-elf-hack')(lambda _: False))
+         set_config('USE_ELF_HACK',
+-                   depends_if('--enable-elf-hack')(lambda _: True))
++                   depends_if('--enable-elf-hack')(lambda _: False))
  
  
  @depends(check_build_environment)
diff --git a/SOURCES/build-gdk-version.patch b/SOURCES/build-gdk-version.patch
deleted file mode 100644
index a25b255..0000000
--- a/SOURCES/build-gdk-version.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/old-configure.in.gdk-version mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/old-configure.in
---- mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/old-configure.in.gdk-version	2018-03-10 03:54:17.000000000 +0100
-+++ mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/old-configure.in	2018-03-28 13:11:06.294873487 +0200
-@@ -61,6 +61,7 @@ CAIRO_VERSION=1.10
- GTK2_VERSION=2.18.0
- GTK3_VERSION=3.4.0
- GDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4
-+GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
- WINDRES_VERSION=2.14.90
- W32API_VERSION=3.14
- GCONF_VERSION=1.2.1
-@@ -2173,6 +2174,7 @@ if test "$COMPILE_ENVIRONMENT"; then
-     dnl GDK_VERSION_MIN_REQUIRED is not set here as GDK3 deprecated warnings
-     dnl are suppressed by widget/gtk/compat-gtk3/gdk/gdkversionmacros.h.
-     AC_DEFINE_UNQUOTED(GDK_VERSION_MAX_ALLOWED,$GDK_VERSION_MAX_ALLOWED)
-+    AC_DEFINE_UNQUOTED(GDK_VERSION_MIN_REQUIRED,$GDK_VERSION_MIN_REQUIRED)
-     GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32
-   fi
-   if test "$MOZ_WIDGET_TOOLKIT" = gtk2; then
diff --git a/SOURCES/build-icu-big-endian.patch b/SOURCES/build-icu-big-endian.patch
index c26a4d4..b0a4a09 100644
--- a/SOURCES/build-icu-big-endian.patch
+++ b/SOURCES/build-icu-big-endian.patch
@@ -1,12 +1,12 @@
-diff -up firefox-60.0/build/autoconf/icu.m4.icu firefox-60.0/build/autoconf/icu.m4
---- firefox-60.0/build/autoconf/icu.m4.icu	2018-04-17 15:11:54.100644119 +0200
-+++ firefox-60.0/build/autoconf/icu.m4	2018-04-17 15:12:50.740686636 +0200
+diff -up thunderbird-68.1.1/build/autoconf/icu.m4.icu thunderbird-68.1.1/build/autoconf/icu.m4
+--- thunderbird-68.1.1/build/autoconf/icu.m4.icu	2019-10-04 09:48:47.337041046 +0200
++++ thunderbird-68.1.1/build/autoconf/icu.m4	2019-10-04 09:52:32.046670353 +0200
 @@ -78,7 +78,7 @@ if test -n "$USE_ICU"; then
      # TODO: the l is actually endian-dependent
      # We could make this set as 'l' or 'b' for little or big, respectively,
      # but we'd need to check in a big-endian version of the file.
 -    ICU_DATA_FILE="icudt${version}l.dat"
 +    ICU_DATA_FILE="icudt${version}b.dat"
- 
-     MOZ_ICU_DATA_ARCHIVE=
  fi
+ 
+ AC_SUBST(MOZ_ICU_VERSION)
diff --git a/SOURCES/build-jit-atomic-always-lucky.patch b/SOURCES/build-jit-atomic-always-lucky.patch
deleted file mode 100644
index ab99524..0000000
--- a/SOURCES/build-jit-atomic-always-lucky.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-60.5.0/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-60.5.0/js/src/jit/AtomicOperations.h
---- firefox-60.5.0/js/src/jit/AtomicOperations.h.jit-atomic-lucky	2019-01-22 10:20:27.993697161 +0100
-+++ firefox-60.5.0/js/src/jit/AtomicOperations.h	2019-01-22 10:23:15.337873762 +0100
-@@ -394,7 +394,7 @@ inline bool AtomicOperations::isLockfree
- #elif defined(__s390__) || defined(__s390x__)
- #include "jit/none/AtomicOperations-feeling-lucky.h"
- #else
--#error "No AtomicOperations support provided for this platform"
-+#include "jit/none/AtomicOperations-feeling-lucky.h"
- #endif
- 
- #endif  // jit_AtomicOperations_h
diff --git a/SOURCES/build-nss-version.patch b/SOURCES/build-nss-version.patch
index 0c3add5..0c28911 100644
--- a/SOURCES/build-nss-version.patch
+++ b/SOURCES/build-nss-version.patch
@@ -1,12 +1,12 @@
-diff -up firefox-60.1.0/old-configure.in.nss-version firefox-60.1.0/old-configure.in
---- firefox-60.1.0/old-configure.in.nss-version	2018-06-20 14:24:55.204158540 +0200
-+++ firefox-60.1.0/old-configure.in	2018-06-20 14:30:19.517004230 +0200
-@@ -1768,7 +1768,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
+diff -up thunderbird-68.2.0/old-configure.in.nss-version thunderbird-68.2.0/old-configure.in
+--- thunderbird-68.2.0/old-configure.in.nss-version	2019-10-22 14:50:42.649086398 +0200
++++ thunderbird-68.2.0/old-configure.in	2019-10-22 14:51:11.567171593 +0200
+@@ -1537,7 +1537,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
      _USE_SYSTEM_NSS=1 )
  
  if test -n "$_USE_SYSTEM_NSS"; then
--    AM_PATH_NSS(3.36.8, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
-+    AM_PATH_NSS(3.36.0, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
+-    AM_PATH_NSS(3.44.2, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
++    AM_PATH_NSS(3.44.0, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
  fi
  
- if test -z "$MOZ_SYSTEM_NSS"; then
+ NSS_CFLAGS="$NSS_CFLAGS -I${DIST}/include/nss"
diff --git a/SOURCES/build-ppc64le-inline.patch b/SOURCES/build-ppc64le-inline.patch
new file mode 100644
index 0000000..de0f6d9
--- /dev/null
+++ b/SOURCES/build-ppc64le-inline.patch
@@ -0,0 +1,27 @@
+diff -up firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp.ppc64le-inline firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp
+--- firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp.ppc64le-inline	2019-08-26 18:52:28.000000000 +0200
++++ firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp	2019-08-29 08:49:57.695687874 +0200
+@@ -1092,7 +1092,11 @@ class MOZ_STACK_CLASS CallMethodHelper f
+   MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
+                                            MutableHandleValue srcp) const;
+ 
++#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
++  bool GatherAndConvertResults();
++#else
+   MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
++#endif
+ 
+   MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
+ 
+@@ -1139,7 +1143,11 @@ class MOZ_STACK_CLASS CallMethodHelper f
+ 
+   ~CallMethodHelper();
+ 
++#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
++  bool Call();
++#else
+   MOZ_ALWAYS_INLINE bool Call();
++#endif
+ 
+   // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
+   void trace(JSTracer* aTrc);
diff --git a/SOURCES/build-rust-missing-docs.patch b/SOURCES/build-rust-missing-docs.patch
deleted file mode 100644
index 7789cb7..0000000
--- a/SOURCES/build-rust-missing-docs.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up thunderbird-60.9.0/servo/components/style_traits/values.rs.rust-build thunderbird-60.9.0/servo/components/style_traits/values.rs
---- thunderbird-60.9.0/servo/components/style_traits/values.rs.rust-build	2019-09-06 12:25:57.491129675 +0200
-+++ thunderbird-60.9.0/servo/components/style_traits/values.rs	2019-09-06 12:27:54.698509544 +0200
-@@ -135,6 +135,7 @@ where
-     }
- }
- 
-+/// Some dummy docs
- #[macro_export]
- macro_rules! serialize_function {
-     ($dest: expr, $name: ident($( $arg: expr, )+)) => {
-@@ -404,6 +405,7 @@ impl_to_css_for_predefined_type!(::csspa
- impl_to_css_for_predefined_type!(::cssparser::Color);
- impl_to_css_for_predefined_type!(::cssparser::UnicodeRange);
- 
-+/// Some dummy docs
- #[macro_export]
- macro_rules! define_css_keyword_enum {
-     (pub enum $name:ident { $($variant:ident = $css:expr,)+ }) => {
diff --git a/SOURCES/firefox-debugedits-error.patch b/SOURCES/firefox-debugedits-error.patch
new file mode 100644
index 0000000..a4b005f
--- /dev/null
+++ b/SOURCES/firefox-debugedits-error.patch
@@ -0,0 +1,50 @@
+diff -up firefox-68.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-68.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
+diff -up firefox-68.0/media/webrtc/trunk/Makefile.old firefox-68.0/media/webrtc/trunk/Makefile
+diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc.old firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc
+--- firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc.old	2019-06-12 08:17:02.673268442 +0200
++++ firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc	2019-06-12 08:17:13.582328073 +0200
+@@ -21,7 +21,7 @@
+  *  be found in the AUTHORS file in the root of the source tree.
+  */
+ 
+-#include "modules/audio_processing//utility/ooura_fft.h"
++#include "modules/audio_processing/utility/ooura_fft.h"
+ 
+ #include <math.h>
+ 
+diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc.old firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc
+--- firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc.old	2019-06-12 08:17:36.671454285 +0200
++++ firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc	2019-06-12 08:17:46.989510679 +0200
+@@ -8,7 +8,7 @@
+  *  be found in the AUTHORS file in the root of the source tree.
+  */
+ 
+-#include "modules/audio_processing//utility/ooura_fft.h"
++#include "modules/audio_processing/utility/ooura_fft.h"
+ 
+ #include <emmintrin.h>
+ 
+diff -up firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c.old firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c
+--- firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c.old	2019-06-12 08:16:15.673011534 +0200
++++ firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c	2019-06-12 08:16:22.602049410 +0200
+@@ -17,7 +17,7 @@
+ #include "aom_dsp/blend.h"
+ #include "aom/aom_integer.h"
+ #include "aom_dsp/x86/synonyms.h"
+-#include "aom_dsp/x86//masked_sad_intrin_ssse3.h"
++#include "aom_dsp/x86/masked_sad_intrin_ssse3.h"
+ 
+ static INLINE unsigned int masked_sad32xh_avx2(
+     const uint8_t *src_ptr, int src_stride, const uint8_t *a_ptr, int a_stride,
+diff -up firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c.old firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c
+--- firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c.old	2019-06-12 08:16:35.404119384 +0200
++++ firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c	2019-06-12 08:16:43.415163174 +0200
+@@ -19,7 +19,7 @@
+ #include "aom/aom_integer.h"
+ #include "aom_dsp/x86/synonyms.h"
+ 
+-#include "aom_dsp/x86//masked_sad_intrin_ssse3.h"
++#include "aom_dsp/x86/masked_sad_intrin_ssse3.h"
+ 
+ // For width a multiple of 16
+ static INLINE unsigned int masked_sad_ssse3(const uint8_t *src_ptr,
diff --git a/SOURCES/firefox-dont-check-binary.patch b/SOURCES/firefox-dont-check-binary.patch
new file mode 100644
index 0000000..c498034
--- /dev/null
+++ b/SOURCES/firefox-dont-check-binary.patch
@@ -0,0 +1,47 @@
+diff -up firefox-68.0/config/rules.mk.old firefox-68.0/config/rules.mk
+--- firefox-68.0/config/rules.mk.old	2019-06-26 09:36:58.537034443 +0200
++++ firefox-68.0/config/rules.mk	2019-06-26 09:37:38.004970573 +0200
+@@ -569,7 +569,6 @@ ifdef MOZ_PROFILE_GENERATE
+ endif
+ else # !WINNT || GNU_CC
+ 	$(call EXPAND_CC_OR_CXX,$@) -o $@ $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) $($(notdir $@)_$(OBJS_VAR_SUFFIX)) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(RUST_STATIC_LIB) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS)
+-	$(call py_action,check_binary,--target $@)
+ endif # WINNT && !GNU_CC
+ 
+ ifdef ENABLE_STRIP
+@@ -604,9 +603,6 @@ else
+ 	$(HOST_CC) -o $@ $(HOST_C_LDFLAGS) $(HOST_LDFLAGS) $($(notdir $@)_OBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
+ endif # HOST_CPP_PROG_LINK
+ endif
+-ifndef CROSS_COMPILE
+-	$(call py_action,check_binary,--host $@)
+-endif
+ 
+ #
+ # This is an attempt to support generation of multiple binaries
+@@ -630,7 +626,6 @@ ifdef MSMANIFEST_TOOL
+ endif	# MSVC with manifest tool
+ else
+ 	$(call EXPAND_CC_OR_CXX,$@) $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) -o $@ $($@_$(OBJS_VAR_SUFFIX)) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS)
+-	$(call py_action,check_binary,--target $@)
+ endif # WINNT && !GNU_CC
+ 
+ ifdef ENABLE_STRIP
+@@ -651,9 +646,6 @@ else
+ 	$(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_C_LDFLAGS) $($(notdir $@)_OBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
+ endif
+ endif
+-ifndef CROSS_COMPILE
+-	$(call py_action,check_binary,--host $@)
+-endif
+ 
+ $(LIBRARY): $(OBJS) $(STATIC_LIBS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
+ 	$(REPORT_BUILD)
+@@ -691,7 +683,6 @@ ifndef INCREMENTAL_LINKER
+ 	$(RM) $@
+ endif
+ 	$(MKSHLIB) $($@_$(OBJS_VAR_SUFFIX)) $(RESFILE) $(LDFLAGS) $(STATIC_LIBS) $(RUST_STATIC_LIB) $(SHARED_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS)
+-	$(call py_action,check_binary,--target $@)
+ 
+ ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
+ ifdef MSMANIFEST_TOOL
diff --git a/SOURCES/firefox-rhel6-hugepage.patch b/SOURCES/firefox-rhel6-hugepage.patch
new file mode 100644
index 0000000..4855721
--- /dev/null
+++ b/SOURCES/firefox-rhel6-hugepage.patch
@@ -0,0 +1,13 @@
+diff -up firefox-68.1.0/xpcom/threads/nsThread.cpp.old firefox-68.1.0/xpcom/threads/nsThread.cpp
+--- firefox-68.1.0/xpcom/threads/nsThread.cpp.old	2019-09-20 12:17:35.481661390 +0200
++++ firefox-68.1.0/xpcom/threads/nsThread.cpp	2019-09-20 12:19:14.269180516 +0200
+@@ -556,7 +556,8 @@ void nsThread::InitCommon() {
+     // kernel report them as separate regions, even when they are adjacent to
+     // heap memory. This allows us to accurately track the actual memory
+     // consumption of our allocated stacks.
+-    madvise(mStackBase, stackSize, MADV_NOHUGEPAGE);
++    // not supported on RHEL6
++    // madvise(mStackBase, stackSize, MADV_NOHUGEPAGE);
+ 
+     pthread_attr_destroy(&attr);
+ #elif defined(XP_WIN)
diff --git a/SOURCES/mozilla-1170092.patch b/SOURCES/mozilla-1170092.patch
index b182d64..66aea0e 100644
--- a/SOURCES/mozilla-1170092.patch
+++ b/SOURCES/mozilla-1170092.patch
@@ -1,7 +1,7 @@
-diff -up firefox-60.5.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-60.5.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
---- firefox-60.5.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092	2019-01-22 10:48:38.187383614 +0100
-+++ firefox-60.5.0/extensions/pref/autoconfig/src/nsReadConfig.cpp	2019-01-22 11:26:11.027108692 +0100
-@@ -225,8 +225,20 @@ nsresult nsReadConfig::openAndEvaluateJS
+diff -up thunderbird-68.1.1/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 thunderbird-68.1.1/extensions/pref/autoconfig/src/nsReadConfig.cpp
+--- thunderbird-68.1.1/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092	2019-09-24 16:36:11.000000000 +0200
++++ thunderbird-68.1.1/extensions/pref/autoconfig/src/nsReadConfig.cpp	2019-10-03 11:27:33.905512072 +0200
+@@ -246,8 +246,20 @@ nsresult nsReadConfig::openAndEvaluateJS
      if (NS_FAILED(rv)) return rv;
  
      rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile);
@@ -23,30 +23,22 @@ diff -up firefox-60.5.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 
    } else {
      nsAutoCString location("resource://gre/defaults/autoconfig/");
      location += aFileName;
-diff -up firefox-60.5.0/modules/libpref/Preferences.cpp.1170092 firefox-60.5.0/modules/libpref/Preferences.cpp
---- firefox-60.5.0/modules/libpref/Preferences.cpp.1170092	2019-01-21 17:38:16.000000000 +0100
-+++ firefox-60.5.0/modules/libpref/Preferences.cpp	2019-01-22 10:48:38.187383614 +0100
-@@ -3459,6 +3459,8 @@ static nsresult pref_ReadPrefFromJar(nsZ
+diff -up thunderbird-68.1.1/modules/libpref/Preferences.cpp.1170092 thunderbird-68.1.1/modules/libpref/Preferences.cpp
+--- thunderbird-68.1.1/modules/libpref/Preferences.cpp.1170092	2019-09-24 16:36:50.000000000 +0200
++++ thunderbird-68.1.1/modules/libpref/Preferences.cpp	2019-10-03 11:27:33.906512075 +0200
+@@ -4436,6 +4436,8 @@ static nsresult pref_ReadDefaultPrefs(co
    //
    // Thus, in the omni.jar case, we always load app-specific default
    // preferences from omni.jar, whether or not `$app == $gre`.
 +  // At very end load configuration from system config location:
 +  // - /etc/firefox/pref/*.js
  
-   nsresult rv;
+   nsresult rv = NS_ERROR_FAILURE;
    nsZipFind* findPtr;
-diff -up firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp
---- firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp.1170092	2019-01-21 17:38:51.000000000 +0100
-+++ firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp	2019-01-22 11:37:01.868896974 +0100
-@@ -58,6 +58,7 @@
- #endif
- #ifdef XP_UNIX
- #include <ctype.h>
-+#include "nsIXULAppInfo.h"
- #endif
- #ifdef XP_IOS
- #include "UIKitDirProvider.h"
-@@ -491,6 +492,21 @@ nsXREDirProvider::GetFile(const char* aP
+diff -up thunderbird-68.1.1/toolkit/xre/nsXREDirProvider.cpp.1170092 thunderbird-68.1.1/toolkit/xre/nsXREDirProvider.cpp
+--- thunderbird-68.1.1/toolkit/xre/nsXREDirProvider.cpp.1170092	2019-09-24 16:37:39.000000000 +0200
++++ thunderbird-68.1.1/toolkit/xre/nsXREDirProvider.cpp	2019-10-03 11:33:45.858681620 +0200
+@@ -524,6 +524,21 @@ nsXREDirProvider::GetFile(const char* aP
        }
      }
    }
@@ -68,7 +60,7 @@ diff -up firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-60.5.0/
    if (NS_FAILED(rv) || !file) return NS_ERROR_FAILURE;
  
    if (ensureFilePermissions) {
-@@ -796,6 +812,16 @@ nsresult nsXREDirProvider::GetFilesInter
+@@ -880,6 +895,16 @@ nsresult nsXREDirProvider::GetFilesInter
      LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories);
      LoadDirsIntoArray(mAppBundleDirectories, kAppendPrefDir, directories);
  
@@ -82,12 +74,12 @@ diff -up firefox-60.5.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-60.5.0/
 +        directories.AppendObject(systemPrefDir);
 +    }
 +
-     rv = NS_NewArrayEnumerator(aResult, directories);
+     rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile));
    } else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) {
      // NS_APP_CHROME_DIR_LIST is only used to get default (native) icons
-diff -up firefox-60.5.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-60.5.0/xpcom/io/nsAppDirectoryServiceDefs.h
---- firefox-60.5.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092	2019-01-22 10:48:38.188383609 +0100
-+++ firefox-60.5.0/xpcom/io/nsAppDirectoryServiceDefs.h	2019-01-22 11:08:12.068459480 +0100
+diff -up thunderbird-68.1.1/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 thunderbird-68.1.1/xpcom/io/nsAppDirectoryServiceDefs.h
+--- thunderbird-68.1.1/xpcom/io/nsAppDirectoryServiceDefs.h.1170092	2019-09-24 16:37:44.000000000 +0200
++++ thunderbird-68.1.1/xpcom/io/nsAppDirectoryServiceDefs.h	2019-10-03 11:27:33.907512077 +0200
 @@ -62,6 +62,7 @@
  #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL"
  #define NS_APP_PREFS_OVERRIDE_DIR \
diff --git a/SOURCES/mozilla-1353817.patch b/SOURCES/mozilla-1353817.patch
index dc8d8f8..3e68cb8 100644
--- a/SOURCES/mozilla-1353817.patch
+++ b/SOURCES/mozilla-1353817.patch
@@ -1,27 +1,12 @@
-From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
-From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
-Date: Tue, 23 May 2017 13:09:48 -0400
-Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
-
-This fixes build errors as arm_neon.h was missing along with some
-missing converters.
----
- gfx/skia/skia/src/core/SkNx.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
-index 6bca856..b0427aa 100644
---- a/gfx/skia/skia/src/core/SkNx.h
-+++ b/gfx/skia/skia/src/core/SkNx.h
-@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
+diff -up thunderbird-68.1.1/gfx/skia/skia/include/private/SkNx.h.1353817 thunderbird-68.1.1/gfx/skia/skia/include/private/SkNx.h
+--- thunderbird-68.1.1/gfx/skia/skia/include/private/SkNx.h.1353817	2019-10-10 10:41:44.488904790 +0200
++++ thunderbird-68.1.1/gfx/skia/skia/include/private/SkNx.h	2019-10-10 10:42:24.553039632 +0200
+@@ -416,7 +416,7 @@ typedef SkNx<8, uint32_t> Sk8u;
  // Include platform specific specializations if available.
  #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
-     #include "../opts/SkNx_sse.h"
+     #include "SkNx_sse.h"
 -#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
 +#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
-     #include "../opts/SkNx_neon.h"
+     #include "SkNx_neon.h"
  #else
  
--- 
-2.9.4
-
diff --git a/SOURCES/mozilla-1436242.patch b/SOURCES/mozilla-1436242.patch
deleted file mode 100644
index 570b7c5..0000000
--- a/SOURCES/mozilla-1436242.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-
-# HG changeset patch
-# User Jed Davis <jld@mozilla.com>
-# Date 1526943705 21600
-# Node ID 6bb3adfa15c6877f7874429462dad88f8c978c4f
-# Parent  4c71c8454879c841871ecf3afb7dbdc96bad97fc
-Bug 1436242 - Avoid undefined behavior in IPC fd-passing code.  r=froydnj
-
-MozReview-Commit-ID: 3szIPUssgF5
-
-diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
---- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
-+++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
-@@ -418,20 +418,37 @@ bool Channel::ChannelImpl::ProcessIncomi
-     const int* fds;
-     unsigned num_fds;
-     unsigned fds_i = 0;  // the index of the first unused descriptor
- 
-     if (input_overflow_fds_.empty()) {
-       fds = wire_fds;
-       num_fds = num_wire_fds;
-     } else {
--      const size_t prev_size = input_overflow_fds_.size();
--      input_overflow_fds_.resize(prev_size + num_wire_fds);
--      memcpy(&input_overflow_fds_[prev_size], wire_fds,
--             num_wire_fds * sizeof(int));
-+      // This code may look like a no-op in the case where
-+      // num_wire_fds == 0, but in fact:
-+      //
-+      // 1. wire_fds will be nullptr, so passing it to memcpy is
-+      // undefined behavior according to the C standard, even though
-+      // the memcpy length is 0.
-+      //
-+      // 2. prev_size will be an out-of-bounds index for
-+      // input_overflow_fds_; this is undefined behavior according to
-+      // the C++ standard, even though the element only has its
-+      // pointer taken and isn't accessed (and the corresponding
-+      // operation on a C array would be defined).
-+      //
-+      // UBSan makes #1 a fatal error, and assertions in libstdc++ do
-+      // the same for #2 if enabled.
-+      if (num_wire_fds > 0) {
-+        const size_t prev_size = input_overflow_fds_.size();
-+        input_overflow_fds_.resize(prev_size + num_wire_fds);
-+        memcpy(&input_overflow_fds_[prev_size], wire_fds,
-+               num_wire_fds * sizeof(int));
-+      }
-       fds = &input_overflow_fds_[0];
-       num_fds = input_overflow_fds_.size();
-     }
- 
-     // The data for the message we're currently reading consists of any data
-     // stored in incoming_message_ followed by data in input_buf_ (followed by
-     // other messages).
- 
-
diff --git a/SOURCES/mozilla-1460871-ldap-query.patch b/SOURCES/mozilla-1460871-ldap-query.patch
deleted file mode 100644
index 2f9c23d..0000000
--- a/SOURCES/mozilla-1460871-ldap-query.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-diff -up thunderbird-60.2.1/comm/ldap/xpcom/public/nsILDAPOperation.idl.1460871-ldap-query thunderbird-60.2.1/comm/ldap/xpcom/public/nsILDAPOperation.idl
---- thunderbird-60.2.1/comm/ldap/xpcom/public/nsILDAPOperation.idl.1460871-ldap-query	2018-10-01 16:52:39.000000000 +0200
-+++ thunderbird-60.2.1/comm/ldap/xpcom/public/nsILDAPOperation.idl	2018-10-04 09:40:04.491575949 +0200
-@@ -52,6 +52,10 @@ interface nsILDAPOperation : nsISupports
-      * private parameter (anything caller desires)
-      */
-     attribute nsISupports closure;
-+    /**
-+     * number of the request for compare that the request is still valid.
-+     */
-+    attribute unsigned long requestNum;
- 
-     /**
-      * No time and/or size limit specified
-diff -up thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.cpp.1460871-ldap-query thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.cpp
---- thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.cpp.1460871-ldap-query	2018-10-01 16:52:39.000000000 +0200
-+++ thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.cpp	2018-10-04 09:40:04.491575949 +0200
-@@ -400,6 +400,19 @@ convertControlArray(nsIArray *aXpcomArra
-     return NS_OK;
- }
- 
-+  /* attribute unsigned long requestNum; */
-+NS_IMETHODIMP nsLDAPOperation::GetRequestNum(uint32_t *aRequestNum)
-+{
-+    *aRequestNum = mRequestNum;
-+    return NS_OK;
-+}
-+
-+NS_IMETHODIMP nsLDAPOperation::SetRequestNum(uint32_t aRequestNum)
-+{
-+    mRequestNum = aRequestNum;
-+    return NS_OK;
-+}
-+
- NS_IMETHODIMP
- nsLDAPOperation::SearchExt(const nsACString& aBaseDn, int32_t aScope,
-                            const nsACString& aFilter,
-diff -up thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.h.1460871-ldap-query thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.h
---- thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.h.1460871-ldap-query	2018-10-01 16:52:39.000000000 +0200
-+++ thunderbird-60.2.1/comm/ldap/xpcom/src/nsLDAPOperation.h	2018-10-04 09:40:04.491575949 +0200
-@@ -36,6 +36,8 @@ class nsLDAPOperation : public nsILDAPOp
-      * used to break cycles
-      */
-     void Clear();
-+    // Stores the request number for later check of the operation is still valid
-+    int32_t mRequestNum;
- 
-   private:
-     virtual ~nsLDAPOperation();
-diff -up thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp.1460871-ldap-query thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp
---- thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp.1460871-ldap-query	2018-10-01 16:52:43.000000000 +0200
-+++ thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp	2018-10-04 09:40:55.334670404 +0200
-@@ -22,6 +22,8 @@
- 
- using namespace mozilla;
- 
-+extern mozilla::LazyLogModule gLDAPLogModule; // defined in nsLDAPService.cpp
-+
- // nsAbLDAPListenerBase inherits nsILDAPMessageListener
- class nsAbQueryLDAPMessageListener : public nsAbLDAPListenerBase
- {
-@@ -66,7 +68,6 @@ protected:
- 
-   bool mFinished;
-   bool mCanceled;
--  bool mWaitingForPrevQueryToFinish;
- 
-   nsCOMPtr<nsIMutableArray> mServerSearchControls;
-   nsCOMPtr<nsIMutableArray> mClientSearchControls;
-@@ -94,7 +95,6 @@ nsAbQueryLDAPMessageListener::nsAbQueryL
-   mResultLimit(resultLimit),
-   mFinished(false),
-   mCanceled(false),
--  mWaitingForPrevQueryToFinish(false),
-   mServerSearchControls(serverSearchControls),
-   mClientSearchControls(clientSearchControls)
- {
-@@ -116,9 +116,6 @@ nsresult nsAbQueryLDAPMessageListener::C
-         return NS_OK;
- 
-     mCanceled = true;
--    if (!mFinished)
--      mWaitingForPrevQueryToFinish = true;
--
-     return NS_OK;
- }
- 
-@@ -129,6 +126,8 @@ NS_IMETHODIMP nsAbQueryLDAPMessageListen
- 
-   int32_t messageType;
-   rv = aMessage->GetType(&messageType);
-+  uint32_t requestNum;
-+  mOperation->GetRequestNum(&requestNum);
-   NS_ENSURE_SUCCESS(rv, rv);
- 
-   bool cancelOperation = false;
-@@ -137,6 +136,14 @@ NS_IMETHODIMP nsAbQueryLDAPMessageListen
-   {
-     MutexAutoLock lock (mLock);
- 
-+    if (requestNum != sCurrentRequestNum) {
-+      MOZ_LOG(gLDAPLogModule, mozilla::LogLevel::Debug,
-+           ("nsAbQueryLDAPMessageListener::OnLDAPMessage: Ignoring message with "
-+            "request num %d, current request num is %d.",
-+            requestNum, sCurrentRequestNum));
-+      return NS_OK;
-+    }
-+
-     if (mFinished)
-       return NS_OK;
- 
-@@ -166,11 +173,10 @@ NS_IMETHODIMP nsAbQueryLDAPMessageListen
-         rv = OnLDAPMessageSearchResult(aMessage);
-       break;
-     case nsILDAPMessage::RES_SEARCH_ENTRY:
--      if (!mFinished && !mWaitingForPrevQueryToFinish)
-+      if (!mFinished)
-         rv = OnLDAPMessageSearchEntry(aMessage);
-       break;
-     case nsILDAPMessage::RES_SEARCH_RESULT:
--      mWaitingForPrevQueryToFinish = false;
-       rv = OnLDAPMessageSearchResult(aMessage);
-       NS_ENSURE_SUCCESS(rv, rv);
-       break;
-@@ -207,6 +213,8 @@ nsresult nsAbQueryLDAPMessageListener::D
-   rv = mOperation->Init(mConnection, this, nullptr);
-   NS_ENSURE_SUCCESS(rv, rv);
- 
-+  mOperation->SetRequestNum(++sCurrentRequestNum);
-+
-   nsAutoCString dn;
-   rv = mSearchUrl->GetDn(dn);
-   NS_ENSURE_SUCCESS(rv, rv);
-diff -up thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.cpp.1460871-ldap-query thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.cpp
---- thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.cpp.1460871-ldap-query	2018-10-01 16:52:43.000000000 +0200
-+++ thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.cpp	2018-10-04 09:40:04.492575951 +0200
-@@ -20,6 +20,8 @@
- 
- using namespace mozilla;
- 
-+uint32_t nsAbLDAPListenerBase::sCurrentRequestNum = 0;
-+
- nsAbLDAPListenerBase::nsAbLDAPListenerBase(nsILDAPURL* url,
-                                            nsILDAPConnection* connection,
-                                            const nsACString &login,
-@@ -249,6 +251,7 @@ NS_IMETHODIMP nsAbLDAPListenerBase::OnLD
-     InitFailed();
-     return rv;
-   }
-+  mOperation->SetRequestNum(++sCurrentRequestNum);
- 
-   // Try non-password mechanisms first
-   if (mSaslMechanism.EqualsLiteral("GSSAPI"))
-diff -up thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.h.1460871-ldap-query thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.h
---- thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.h.1460871-ldap-query	2018-10-01 16:52:43.000000000 +0200
-+++ thunderbird-60.2.1/comm/mailnews/addrbook/src/nsAbLDAPListenerBase.h	2018-10-04 09:40:04.492575951 +0200
-@@ -47,6 +47,7 @@ protected:
-   int32_t mTimeOut;
-   bool mBound;
-   bool mInitialized;
-+  static uint32_t sCurrentRequestNum;
- 
-   mozilla::Mutex mLock;
- };
diff --git a/SOURCES/mozilla-256180.patch b/SOURCES/mozilla-256180.patch
deleted file mode 100644
index 13a1c97..0000000
--- a/SOURCES/mozilla-256180.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/layout/generic/nsIFrame.h.old	2016-07-11 13:41:39.688276559 +0200
-+++ b/layout/generic/nsIFrame.h	2016-07-11 13:42:12.791406976 +0200
-@@ -13,7 +13,7 @@
- #error This header/class should only be used within Mozilla code. It should not be used by extensions.
- #endif
- 
--#define MAX_REFLOW_DEPTH 200
-+#define MAX_REFLOW_DEPTH 1000
- 
- /* nsIFrame is in the process of being deCOMtaminated, i.e., this file is eventually
-    going to be eliminated, and all callers will use nsFrame instead.  At the moment
diff --git a/SOURCES/no-rust-lto.patch b/SOURCES/no-rust-lto.patch
new file mode 100644
index 0000000..7d8ae5d
--- /dev/null
+++ b/SOURCES/no-rust-lto.patch
@@ -0,0 +1,12 @@
+diff -up firefox-68.0/config/makefiles/rust.mk.old firefox-68.0/config/makefiles/rust.mk
+--- firefox-68.0/config/makefiles/rust.mk.old	2019-06-05 10:33:34.290128660 +0200
++++ firefox-68.0/config/makefiles/rust.mk	2019-06-05 10:33:59.835052814 +0200
+@@ -47,7 +47,7 @@ cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
+ ifndef DEVELOPER_OPTIONS
+ ifndef MOZ_DEBUG_RUST
+ # Enable link-time optimization for release builds.
+-cargo_rustc_flags += -C lto
++#cargo_rustc_flags += -C lto
+ endif
+ endif
+ 
diff --git a/SOURCES/node-stdout-nonblocking-wrapper b/SOURCES/node-stdout-nonblocking-wrapper
new file mode 100755
index 0000000..e36d134
--- /dev/null
+++ b/SOURCES/node-stdout-nonblocking-wrapper
@@ -0,0 +1,3 @@
+#!/bin/sh
+#exec /usr/bin/node "$@" 2>&1 | cat -
+exec $MOZ_NODEJS "$@" 2>&1 | cat -
diff --git a/SOURCES/nss-build-mozilla-1564499.patch b/SOURCES/nss-build-mozilla-1564499.patch
new file mode 100644
index 0000000..9d5bb5c
--- /dev/null
+++ b/SOURCES/nss-build-mozilla-1564499.patch
@@ -0,0 +1,12 @@
+diff -up firefox-68.0/security/nss/lib/freebl/mpi/mpcpucache.c.old firefox-68.0/security/nss/lib/freebl/mpi/mpcpucache.c
+--- firefox-68.0/security/nss/lib/freebl/mpi/mpcpucache.c.old	2019-07-26 07:09:02.383303420 +0200
++++ firefox-68.0/security/nss/lib/freebl/mpi/mpcpucache.c	2019-07-26 07:09:27.228193798 +0200
+@@ -727,7 +727,7 @@ static inline void
+ dcbzl(char *array)
+ {
+     register char *a asm("r2") = array;
+-    __asm__ __volatile__("dcbzl %0,r0"
++    __asm__ __volatile__("dcbzl %0,0"
+                          : "=r"(a)
+                          : "0"(a));
+ }
diff --git a/SOURCES/python-2.7-gcc8-fix.patch b/SOURCES/python-2.7-gcc8-fix.patch
new file mode 100644
index 0000000..d4da520
--- /dev/null
+++ b/SOURCES/python-2.7-gcc8-fix.patch
@@ -0,0 +1,57 @@
+commit 0b91f8a668201fc58fa732b8acc496caedfdbae0
+Author: Florian Weimer <fw@deneb.enyo.de>
+Date:   Sun Apr 29 12:18:33 2018 -0700
+
+    Indicate that _PyGC_Head is only 8-byte aligned. (closes bpo-33374)
+
+    By spec, the "long double" in _PyGC_Head requires the union to always be 16-byte
+    aligned. However, obmalloc only yields 8-byte alignment. Compilers including GCC
+    8 are starting to use alignment information to do store-merging. So, the "long
+    double" needs to be changed to a simple "double" as was long ago done in Python
+    3 by e348c8d154cf6342c79d627ebfe89dfe9de23817. For 2.7, we need to add some
+    dummy padding to make sure _PyGC_Head stays the same size.
+
+diff --git a/Include/objimpl.h b/Include/objimpl.h
+index 5f28683329..cbf6bc3f87 100644
+--- Python-2.7.13/Include/objimpl.h
++++ Python-2.7.13/Include/objimpl.h
+@@ -248,6 +248,20 @@ PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
+ /* for source compatibility with 2.2 */
+ #define _PyObject_GC_Del PyObject_GC_Del
+
++/*
++ * Former over-aligned definition of PyGC_Head, used to compute the size of the
++ * padding for the new version below.
++ */
++union _gc_head;
++union _gc_head_old {
++    struct {
++        union _gc_head_old *gc_next;
++        union _gc_head_old *gc_prev;
++        Py_ssize_t gc_refs;
++    } gc;
++    long double dummy;
++};
++
+ /* GC information is stored BEFORE the object structure. */
+ typedef union _gc_head {
+     struct {
+@@ -255,7 +269,8 @@ typedef union _gc_head {
+         union _gc_head *gc_prev;
+         Py_ssize_t gc_refs;
+     } gc;
+-    long double dummy;  /* force worst-case alignment */
++    double dummy; /* Force at least 8-byte alignment. */
++    char dummy_padding[sizeof(union _gc_head_old)];
+ } PyGC_Head;
+
+ extern PyGC_Head *_PyGC_generation0;
+diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst b/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst
+new file mode 100644
+index 0000000000..9ec1a605c8
+--- /dev/null
++++ Python-2.7.13/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst
+@@ -0,0 +1,3 @@
++Tweak the definition of PyGC_Head, so compilers do not believe it is always
++16-byte aligned on x86. This prevents crashes with more aggressive
++optimizations present in GCC 8.
diff --git a/SOURCES/python-2.7.patch b/SOURCES/python-2.7.patch
new file mode 100644
index 0000000..cad1c67
--- /dev/null
+++ b/SOURCES/python-2.7.patch
@@ -0,0 +1,17 @@
+diff -up Python-2.7.13/configure.build Python-2.7.13/configure
+--- Python-2.7.13/configure.build	2019-06-04 13:32:12.772134075 +0200
++++ Python-2.7.13/configure	2019-06-04 13:32:26.140144601 +0200
+@@ -6018,11 +6018,11 @@ then
+ 		# debug builds.
+ 		OPT="-g -O0 -Wall $STRICT_PROTO"
+ 	    else
+-		OPT="-g $WRAP -O3 -Wall $STRICT_PROTO"
++		OPT="-g $WRAP -O2 -Wall $STRICT_PROTO"
+ 	    fi
+ 	    ;;
+ 	*)
+-	    OPT="-O3 -Wall $STRICT_PROTO"
++	    OPT="-O2 -Wall $STRICT_PROTO"
+ 	    ;;
+ 	esac
+ 	case $ac_sys_system in
diff --git a/SOURCES/python-encode.patch b/SOURCES/python-encode.patch
new file mode 100644
index 0000000..2f3bad9
--- /dev/null
+++ b/SOURCES/python-encode.patch
@@ -0,0 +1,12 @@
+diff -up firefox-68.0/python/mozbuild/mozbuild/controller/building.py.old firefox-68.0/python/mozbuild/mozbuild/controller/building.py
+--- firefox-68.0/python/mozbuild/mozbuild/controller/building.py.old	2019-05-29 10:46:55.403262995 +0200
++++ firefox-68.0/python/mozbuild/mozbuild/controller/building.py	2019-05-29 10:47:42.691176970 +0200
+@@ -571,7 +571,7 @@ class TerminalLoggingHandler(logging.Han
+             if self.footer:
+                 self.footer.clear()
+ 
+-            self.fh.write(msg)
++            self.fh.write(msg.encode("utf-8"))
+             self.fh.write('\n')
+ 
+             if self.footer:
diff --git a/SOURCES/python-missing-utimensat.patch b/SOURCES/python-missing-utimensat.patch
new file mode 100644
index 0000000..d19ecab
--- /dev/null
+++ b/SOURCES/python-missing-utimensat.patch
@@ -0,0 +1,12 @@
+diff -up python3/Python-3.6.8/configure.old python3/Python-3.6.8/configure
+--- Python-3.6.8/configure.old	2019-10-01 12:56:35.074551835 +0200
++++ Python-3.6.8/configure	2019-10-01 12:56:44.240517798 +0200
+@@ -11438,7 +11438,7 @@ for ac_func in alarm accept4 setitimer g
+  sigaction sigaltstack siginterrupt sigpending sigrelse \
+  sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy symlinkat sync \
+  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
+- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
++ truncate uname unlinkat unsetenv utimes waitid waitpid wait3 wait4 \
+  wcscoll wcsftime wcsxfrm wmemcmp writev _getpty
+ do :
+   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
diff --git a/SOURCES/rhbz-1354671.patch b/SOURCES/rhbz-1354671.patch
deleted file mode 100644
index 7660f14..0000000
--- a/SOURCES/rhbz-1354671.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-60.5.0/layout/base/nsIPresShell.h.1354671 firefox-60.5.0/layout/base/nsIPresShell.h
---- firefox-60.5.0/layout/base/nsIPresShell.h.1354671	2019-01-22 16:08:40.796539950 +0100
-+++ firefox-60.5.0/layout/base/nsIPresShell.h	2019-01-22 16:10:25.106069228 +0100
-@@ -204,7 +204,7 @@ class nsIPresShell : public nsStubDocume
-    * to the same aSize value.  AllocateFrame is infallible and will abort
-    * on out-of-memory.
-    */
--  void* AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
-+  void* __attribute__((optimize("no-lifetime-dse"))) AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
-     void* result = mFrameArena.AllocateByFrameID(aID, aSize);
-     RecordAlloc(result);
-     return result;
diff --git a/SOURCES/rust-network-check.patch b/SOURCES/rust-network-check.patch
new file mode 100644
index 0000000..d18f2fe
--- /dev/null
+++ b/SOURCES/rust-network-check.patch
@@ -0,0 +1,105 @@
+diff -up firefox-68.0/config/makefiles/rust.mk.rust-network-check firefox-68.0/config/makefiles/rust.mk
+--- firefox-68.0/config/makefiles/rust.mk.rust-network-check	2019-06-06 10:29:18.984737603 +0200
++++ firefox-68.0/config/makefiles/rust.mk	2019-06-06 11:39:51.581028835 +0200
+@@ -127,7 +127,7 @@ export RUST_BACKTRACE=full
+ export MOZ_TOPOBJDIR=$(topobjdir)
+ 
+ target_rust_ltoable := force-cargo-library-build
+-target_rust_nonltoable := force-cargo-test-run force-cargo-library-check $(foreach b,build check,force-cargo-program-$(b))
++target_rust_nonltoable := force-cargo-test-run $(foreach b,build check,force-cargo-program-$(b))
+ 
+ $(target_rust_ltoable): RUSTFLAGS:=$(rustflags_override) $(RUSTFLAGS) $(if $(MOZ_LTO_RUST),-Clinker-plugin-lto)
+ $(target_rust_nonltoable): RUSTFLAGS:=$(rustflags_override) $(RUSTFLAGS)
+@@ -238,19 +238,9 @@ force-cargo-library-build:
+ 	$(call CARGO_BUILD) --lib $(cargo_target_flag) $(rust_features_flag) -- $(cargo_rustc_flags)
+ 
+ $(RUST_LIBRARY_FILE): force-cargo-library-build
+-# When we are building in --enable-release mode; we add an additional check to confirm
+-# that we are not importing any networking-related functions in rust code. This reduces
+-# the chance of proxy bypasses originating from rust code.
+-ifndef DEVELOPER_OPTIONS
+-ifndef MOZ_DEBUG_RUST
+-ifeq ($(OS_ARCH), Linux)
+-	$(call py_action,check_binary,--target --networking $@)
+-endif
+-endif
+-endif
+ 
+ force-cargo-library-check:
+-	$(call CARGO_CHECK) --lib $(cargo_target_flag) $(rust_features_flag)
++	@true
+ else
+ force-cargo-library-check:
+ 	@true
+diff -up firefox-68.0/python/mozbuild/mozbuild/action/check_binary.py.rust-network-check firefox-68.0/python/mozbuild/mozbuild/action/check_binary.py
+--- firefox-68.0/python/mozbuild/mozbuild/action/check_binary.py.rust-network-check	2019-05-20 18:17:57.000000000 +0200
++++ firefox-68.0/python/mozbuild/mozbuild/action/check_binary.py	2019-06-06 10:29:18.986737599 +0200
+@@ -250,43 +250,6 @@ def check_mozglue_order(target, binary):
+         raise RuntimeError('Could not parse readelf output?')
+ 
+ 
+-def check_networking(binary):
+-    retcode = 0
+-    networking_functions = set([
+-        # socketpair is not concerning; it is restricted to AF_UNIX
+-        "socket", "connect", "accept", "bind", "listen",
+-        "getsockname", "getsockopt", "setsockopt",
+-        "recv", "recvfrom",
+-        "send", "sendto",
+-        # We would be concerned by recvmsg and sendmsg; but we believe
+-        # they are okay as documented in 1376621#c23
+-        "gethostbyname", "gethostbyaddr", "gethostent", "sethostent", "endhostent",
+-        "gethostent_r", "gethostbyname2", "gethostbyaddr_r", "gethostbyname_r",
+-        "gethostbyname2_r",
+-        "getaddrinfo", "getservent", "getservbyname", "getservbyport", "setservent",
+-        "getprotoent", "getprotobyname", "getprotobynumber", "setprotoent",
+-        "endprotoent"])
+-    bad_occurences_names = set()
+-
+-    try:
+-        for sym in at_least_one(iter_symbols(binary)):
+-            if sym['addr'] == 0 and sym['name'] in networking_functions:
+-                bad_occurences_names.add(sym['name'])
+-    except Empty:
+-        raise RuntimeError('Could not parse llvm-objdump output?')
+-
+-    basename = os.path.basename(binary)
+-    if bad_occurences_names:
+-        s = 'TEST-UNEXPECTED-FAIL | check_networking | {} | Identified {} ' + \
+-            'networking function(s) being imported in the rust static library ({})'
+-        print(s.format(basename, len(bad_occurences_names),
+-            ",".join(sorted(bad_occurences_names))),
+-            file=sys.stderr)
+-        retcode = 1
+-    elif buildconfig.substs.get('MOZ_AUTOMATION'):
+-        print('TEST-PASS | check_networking | {}'.format(basename))
+-    return retcode
+-
+ def checks(target, binary):
+     # The clang-plugin is built as target but is really a host binary.
+     # Cheat and pretend we were passed the right argument.
+@@ -330,8 +293,6 @@ def main(args):
+                         help='Perform checks for a host binary')
+     parser.add_argument('--target', action='store_true',
+                         help='Perform checks for a target binary')
+-    parser.add_argument('--networking', action='store_true',
+-                        help='Perform checks for networking functions')
+ 
+     parser.add_argument('binary', metavar='PATH',
+                         help='Location of the binary to check')
+@@ -343,14 +304,7 @@ def main(args):
+               file=sys.stderr)
+         return 1
+ 
+-    if options.networking and options.host:
+-        print('--networking is only valid with --target',
+-               file=sys.stderr)
+-        return 1
+-
+-    if options.networking:
+-        return check_networking(options.binary)
+-    elif options.host:
++    if options.host:
+         return checks(HOST, options.binary)
+     elif options.target:
+         return checks(TARGET, options.binary)
diff --git a/SOURCES/thunderbird-mozconfig b/SOURCES/thunderbird-mozconfig
index 646e90e..559acb8 100644
--- a/SOURCES/thunderbird-mozconfig
+++ b/SOURCES/thunderbird-mozconfig
@@ -10,17 +10,16 @@ ac_add_options --enable-calendar
 ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
 ac_add_options --with-google-location-service-api-keyfile=../google-api-key
 ac_add_options --with-google-safebrowsing-api-keyfile=../google-api-key
-ac_add_options --enable-pie
 ac_add_options --enable-default-toolkit=cairo-gtk3
 ac_add_options --enable-release
 ac_add_options --enable-startup-notification
 ac_add_options --libdir="$LIBDIR"
 ac_add_options --prefix="$PREFIX"
 ac_add_options --without-system-libvpx
-ac_add_options --with-pthreads
 ac_add_options --with-system-jpeg
 ac_add_options --with-system-zlib
 ac_add_options --enable-update-channel=release
+ac_add_options --disable-av1
 export BUILD_OFFICIAL=1
 export MOZILLA_OFFICIAL=1
 mk_add_options BUILD_OFFICIAL=1
diff --git a/SOURCES/xulrunner-24.0-jemalloc-ppc.patch b/SOURCES/xulrunner-24.0-jemalloc-ppc.patch
deleted file mode 100644
index c8fe421..0000000
--- a/SOURCES/xulrunner-24.0-jemalloc-ppc.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-60.5.0/memory/build/mozjemalloc.cpp.jemalloc-ppc firefox-60.5.0/memory/build/mozjemalloc.cpp
---- firefox-60.5.0/memory/build/mozjemalloc.cpp.jemalloc-ppc	2019-01-22 10:25:30.764207480 +0100
-+++ firefox-60.5.0/memory/build/mozjemalloc.cpp	2019-01-22 10:28:48.352235343 +0100
-@@ -180,7 +180,7 @@ using namespace mozilla;
- // Debug builds are opted out too, for test coverage.
- #ifndef MOZ_DEBUG
- #if !defined(__ia64__) && !defined(__sparc__) && !defined(__mips__) && \
--    !defined(__aarch64__)
-+    !defined(__aarch64__) && !defined(__powerpc__)
- #define MALLOC_STATIC_PAGESIZE 1
- #endif
- #endif
diff --git a/SPECS/thunderbird.spec b/SPECS/thunderbird.spec
index daf60ed..cfa8180 100644
--- a/SPECS/thunderbird.spec
+++ b/SPECS/thunderbird.spec
@@ -1,11 +1,19 @@
 %global debug_build             0
+# Set for local builds only
+%global disable_toolsets        0
 %global official_branding       1
 %global system_ffi              1
 %global system_libicu           0
 %global system_libvpx           0
 %global system_nss              1
 %global system_sqlite           0
-%global use_bundled_python      1
+%if 0%{?rhel} == 8
+%define use_bundled_python_2 1
+%define use_bundled_python_3 0
+%else
+%define use_bundled_python_2 1
+%define use_bundled_python_3 1
+%endif
 %define build_langpacks         1
 %define use_bundled_ffi         0
 %define use_bundled_python      1
@@ -13,6 +21,11 @@
 %global system_jpeg             1
 %global hardened_build          1
 %global use_dts                 1
+%if 0%{?rhel} == 8
+%global use_llvmts        0
+%else
+%global use_llvmts        1
+%endif
 
 %define bundled_python_version 2.7.13
 %global cairo_version           1.10.2
@@ -21,22 +34,31 @@
 %global gcc_version             4.8.2-16
 %global python_version          2.7.8
 %global sqlite_version          3.8.4.2
-%global nspr_version            4.13.1
-%global nss_version             3.28.4
+%global nspr_version            4.21
+%global nss_version             3.44
 %if 0%{?rhel} == 7
 %define use_bundled_python 0
 %endif
 
-%if 0%{?rhel} < 8
 %global use_rustts        1
+%global dts_version       8
+%global rust_version         1.31
+%global rust_toolset_version 1.35
+%global llvm_version      7.0
+%if 0%{?rhel} == 8
+%global llvm_version      6.0
 %endif
-%global dts_version       7
-%global rst_version       7
-%global llvm_version      7
+
+%if 0%{?disable_toolsets}
+%global use_rustts        0
+%global use_dts           0
+%global use_llvmts        0
+%endif
+
+
+
 %if 0%{?rhel} == 8
 %global use_dts           0
-%global rst_version       1.26
-%global llvm_version      6.0
 %endif
 
 %define gtk3_nvr 3.22.26-1
@@ -63,6 +85,16 @@
 %global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
 %endif
 
+%define bundled_python_version_2 2.7.13
+%define bundled_python_version_3 3.6.8
+%define use_bundled_openssl     0
+%define use_bundled_nodejs      0
+%if 0%{?rhel} < 8
+%define use_bundled_nodejs      1
+%if 0%{?rhel} == 6
+%define use_bundled_openssl     1
+%endif
+%endif
 
 # GTK3 bundling
 %define avoid_bundled_rebuild   0
@@ -91,8 +123,8 @@
 
 Summary:        Mozilla Thunderbird mail/newsgroup client
 Name:           thunderbird
-Version:        60.9.0
-Release:        2%{?dist}
+Version:        68.2.0
+Release:        1%{?dist}
 URL:            http://www.mozilla.org/projects/thunderbird/
 License:        MPLv1.1 or GPLv2+ or LGPLv2+
 Group:          Applications/Internet
@@ -107,19 +139,22 @@ ExclusiveArch:  i686 x86_64 ppc64 s390x
 # From ftp://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?ext_version}/source
 Source0:        https://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?pre_version}/source/thunderbird-%{version}%{?pre_version}.source.tar.xz
 %if %{build_langpacks}
-Source1:        thunderbird-langpacks-%{version}%{?ext_version}-20190904.tar.xz
+Source1:        thunderbird-langpacks-%{version}%{?ext_version}-20191022.tar.xz
 # Locales for lightning
 Source2:        lightning-langpacks-%{version}.tar.xz
 %endif
 Source3:        get-calendar-langpacks.sh
+Source4:        cbindgen-vendor.tar.xz
 
 Source10:       thunderbird-mozconfig
 Source20:       thunderbird.desktop
 Source21:       thunderbird.sh.in
 Source24:       mozilla-api-key
 Source27:       google-api-key
-#TODO
-Source101:      find-external-requires
+Source28:       node-stdout-nonblocking-wrapper
+Source100:      https://www.python.org/ftp/python/%{bundled_python_version_2}/Python-%{bundled_python_version_2}.tar.xz
+Source101:      https://www.python.org/ftp/python/%{bundled_python_version_3}/Python-%{bundled_python_version_3}.tar.xz
+Source102:      find-external-requires
 Source200:      gtk3-private-%{gtk3_nvr}.el6.src.rpm
 Source201:      gtk3-private-%{gtk3_nvr}-post.inc
 Source202:      gtk3-private-%{gtk3_nvr}-postun.inc
@@ -129,29 +164,34 @@ Source205:      gtk3-private-%{gtk3_nvr}-setup-flags-env.inc
 Source206:      gtk3-private-%{gtk3_nvr}-requires-provides-filter.inc
 Source301:      yasm-1.2.0-3.el5.src.rpm
 Source303:      libffi-3.0.13-18.el7_3.src.rpm
+Source304:      nodejs-8.11.4-1.3.fc27.src.rpm
+Source305:      openssl-1.0.2k-19.6.bundle.el7_7.src.rpm
 Source601:      thunderbird-redhat-default-prefs.js.rhel6
 Source701:      thunderbird-redhat-default-prefs.js.rhel7
-#Python 2.7
-Source100:      https://www.python.org/ftp/python/%{bundled_python_version}/Python-%{bundled_python_version}.tar.xz
 
 ## Firefox patches
 
 # Build patches
 Patch3:         mozilla-build-arm.patch
+# workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1699374
+Patch1001:      build-ppc64le-inline.patch
+Patch1002:      python-2.7-gcc8-fix.patch
+Patch1003:      python-missing-utimensat.patch
+# workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1699374
+Patch1:         no-rust-lto.patch
+Patch2:         rust-network-check.patch
 Patch4:         build-mozconfig-fix.patch
-Patch5:         build-gdk-version.patch
 Patch6:         build-nss-version.patch
+Patch7:         firefox-debugedits-error.patch
+Patch8:         firefox-dont-check-binary.patch
+Patch9:         nss-build-mozilla-1564499.patch
 Patch26:        build-icu-big-endian.patch
 # Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268
 Patch29:        build-big-endian.patch
 # Always feel lucky for unsupported platforms:
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128
-Patch37:        build-jit-atomic-always-lucky.patch
-Patch40:        build-aarch64-skia.patch
 Patch41:        build-debug-qcms.patch
-Patch43:        xulrunner-24.0-jemalloc-ppc.patch
 Patch45:        build-disable-elfhack.patch
-Patch46:        build-rust-missing-docs.patch
 
 # Fedora/RHEL specific patches
 Patch215:        firefox-enable-addons.patch
@@ -159,19 +199,18 @@ Patch219:        rhbz-1173156.patch
 Patch224:        mozilla-1170092.patch
 Patch225:        mozilla-1005640-accept-lang.patch
 #ARM run-time patch
-Patch226:        rhbz-1354671.patch
 Patch230:        rhbz-1503632-nss.patch
+Patch1000:       python-2.7.patch
+Patch232:        firefox-rhel6-hugepage.patch
 
 # Upstream patches
 Patch402:        mozilla-1196777.patch
-Patch406:        mozilla-256180.patch
 Patch413:        mozilla-1353817.patch
-Patch415:        mozilla-1436242.patch
-Patch416:        mozilla-1460871-ldap-query.patch
 #Removing this patch would lead to losing user saved credentials in profile!
 
 ## Thunderbird patches
 
+Patch501:        python-encode.patch
 # ---------------------------------------------------
 
 BuildRequires:  autoconf213
@@ -218,7 +257,7 @@ BuildRequires:  devtoolset-%{dts_version}-gcc-c++
 BuildRequires:  devtoolset-%{dts_version}-gcc
 BuildRequires:  devtoolset-%{dts_version}-binutils
 BuildRequires:  devtoolset-%{dts_version}-libatomic-devel
-%if 0%{?rhel} == 7
+%if 0%{?use_llvmts}
 BuildRequires:  llvm-toolset-%{llvm_version}
 BuildRequires:  llvm-toolset-%{llvm_version}-llvm-devel
 %endif
@@ -226,22 +265,31 @@ BuildRequires:  llvm-toolset-%{llvm_version}-llvm-devel
 %if ! %{use_bundled_yasm}0
 BuildRequires:  yasm
 %endif
+BuildRequires:  scl-utils
 %if %{?system_sqlite}
 BuildRequires:  sqlite-devel >= %{sqlite_version}
 Requires:       sqlite >= %{sqlite_build_version}
 %endif
-%if 0%{?use_rustts}
-BuildRequires:  rust-toolset-%{rst_version}-cargo
-BuildRequires:  rust-toolset-%{rst_version}-rust
-%endif
 %if 0%{?rhel} == 8
 BuildRequires:  cargo
-BuildRequires:  rust >= 1.24
+BuildRequires:  rust >= %{rust_version}
 BuildRequires:  llvm >= %{llvm_version}
 BuildRequires:  llvm-devel >= %{llvm_version}
 BuildRequires:  clang >= %{llvm_version}
+#FIXME BuildRequires:  rustfmt >= %{rust_version}
+BuildRequires:  python3
+BuildRequires:  nodejs >= 8.11
+%else
+%if 0%{?use_rustts}
+BuildRequires:  rust-toolset-%{rust_toolset_version}
 %endif
-%if 0%{?use_bundled_python}
+%if 0%{?use_llvmts}
+BuildRequires:  llvm-toolset-%{llvm_version}
+BuildRequires:  llvm-toolset-%{llvm_version}-llvm-devel
+%endif
+%endif
+
+%if 0%{?use_bundled_python_2}
 #%if 0%{?rhel} == 6
 # Needed for Python in RHEL6
 BuildRequires:  openssl-devel
@@ -297,10 +345,6 @@ Requires:       nspr >= %{nspr_version}
 Requires:       nss >= %{nss_version}
 %endif
 
-%if 0%{?rhel} < 8
-BuildRequires:  python2-devel
-%endif
-
 %if %{?system_sqlite}
 BuildRequires:  pkgconfig(sqlite3) >= %{sqlite_version}
 Requires:       sqlite >= %{sqlite_build_version}
@@ -324,33 +368,49 @@ Mozilla Thunderbird is a standalone mail and newsgroup client.
 
 
 %prep
-%setup -q -T -c -n python -a 100
+%if 0%{?use_bundled_python_2}
+%setup -q -T -c -n python2 -a 100
+%patch1000 -p0 -b .build
+%patch1002 -p0 -b .gcc8
+%endif
+%if 0%{?use_bundled_python_3}
+%setup -q -T -c -n python3 -a 101
+%if 0%{?rhel} == 6
+%patch1003 -p0 -b .missing-utimensat.patch
+%endif
+%endif
 %setup -q -n %{tarballdir}
 
 # Firefox patches
+%patch1 -p1 -b .no-rust-lto
+%patch2 -p1 -b .rust-network-check
+%patch7 -p1 -b .debugedits-error
+%ifarch %{ix86} %{arm} ppc
+# binary check fails OOM on 32bit arches
+%patch8 -p1 -b .dont-check-binary
+%endif
+%patch9 -p1 -b .nss-build-mozilla-1564499
 
-%patch29 -p1 -b .big-endian
-%patch37 -p1 -b .jit-atomic-lucky
-%patch40 -p1 -b .aarch64-skia
+#%patch29 -p1 -b .big-endian
 %if %{?debug_build}
 %patch41 -p1 -b .build-debug-qcms
 %endif
-%patch43 -p1 -b .jemalloc-ppc
-%if 0%{?rhel} == 8
+#%if 0%{?rhel} == 8
 %patch45 -p1 -b .elfhack
-%endif
-%patch46 -p1 -b .build-rust-missing-docs
+#%endif
 
-%patch3  -p1 -b .arm
+#%patch3  -p1 -b .arm
 %patch4  -p1 -b .build-mozconfig-fix
-%patch5  -p1 -b .gdk-version
 %patch6  -p1 -b .nss-version
 
 # Fedora patches
 %patch215 -p1 -b .addons
 %patch219 -p1 -b .rhbz-1173156
-%patch224 -p1 -b .1170092
+#FIXME %patch224 -p1 -b .1170092
 %patch225 -p1 -b .1005640-accept-lang
+%if 0%{?rhel} == 6
+%patch232 -p1 -b .hugepage
+%endif
 
 # This ensures no migration of certdb to sqlite on the RHEL6 and RHEL7.
 # This needs to stay for the future releases
@@ -360,14 +420,10 @@ Mozilla Thunderbird is a standalone mail and newsgroup client.
 
 #ARM run-time patch
 %ifarch aarch64
-%patch226 -p1 -b .1354671
 %endif
 
 %patch402 -p1 -b .1196777
-%patch406 -p1 -b .256180
-%patch413 -p1 -b .1353817
-%patch415 -p1 -b .1436242
-%patch416 -p1 -b .1460871-ldap-query
+#%patch413 -p1 -b .1353817
 
 # Patch for big endian platforms only
 %if 0%{?big_endian}
@@ -375,6 +431,8 @@ Mozilla Thunderbird is a standalone mail and newsgroup client.
 %endif
 
 # Thunderbird patches
+%patch501 -p1 -b .python-encode
+%patch1001 -p1 -b .ppc64le-inline
 
 %{__rm} -f .mozconfig
 %{__cp} %{SOURCE10} .mozconfig
@@ -410,7 +468,7 @@ function add_to_mozconfig() {
 %if 0%{?system_ffi}
  add_to_mozconfig "with-system-ffi"
 %endif
-%ifarch %{arm}
+%ifarch %{arm} %{ix86} x86_64
  add_to_mozconfig "disable-elf-hack"
 %endif
 
@@ -461,23 +519,19 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
 echo "ac_add_options --disable-ion" >> .mozconfig
 %endif
 
-%ifarch %{ix86}
-echo "ac_add_options --disable-stylo" >> .mozconfig
-%endif
-%if 0%{?rhel} == 6
-echo "ac_add_options --disable-stylo" >> .mozconfig
-%endif
+echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> .mozconfig
 
 # Remove executable bit to make brp-mangle-shebangs happy.
 chmod -x third_party/rust/itertools/src/lib.rs
 
 # install lightning langpacks
-cd ..
-%{__xz} -dc %{SOURCE2} | %{__tar} xf -
-cd -
-#===============================================================================
 
 %build
+set -e
+# Hack for missing shell when building in brew on RHEL6
+%if 0%{?rhel} == 6
+export SHELL=/bin/sh
+%endif
 
 #GTK3 >>
 %if ! 0%{?avoid_bundled_rebuild}
@@ -509,7 +563,7 @@ function build_bundled_package() {
   PACKAGE_RPM=$1
   PACKAGE_FILES=$2
   PACKAGE_SOURCE=$3
-  PACKAGE_DIR="%{_topdir}/RPMS"
+  export PACKAGE_DIR="%{_topdir}/RPMS"
 
   PACKAGE_ALREADY_BUILD=0
   %if %{?avoid_bundled_rebuild}
@@ -531,20 +585,27 @@ function build_bundled_package() {
     %ifarch i386 i686
     ARCH_STR="i?86"
     %endif
-    PACKAGE_DIR="$PACKAGE_DIR/$ARCH_STR"
+    export PACKAGE_DIR="$PACKAGE_DIR/$ARCH_STR"
   fi
   pushd $PACKAGE_DIR
+
   echo "Installing $PACKAGE_DIR/$PACKAGE_RPM"; echo "==============================="
-  rpm2cpio $PACKAGE_DIR/$PACKAGE_RPM | cpio -iduv
+  PACKAGE_LIST=$(echo $PACKAGE_DIR/$PACKAGE_RPM | tr " " "\n")
+  for PACKAGE in $PACKAGE_LIST
+  do
+      rpm2cpio $PACKAGE | cpio -iduv
+  done
+
+  PATH=$PACKAGE_DIR/usr/bin:$PATH
+  export PATH
+  LD_LIBRARY_PATH=$PACKAGE_DIR/usr/%{_lib}:$LD_LIBRARY_PATH
+  export LD_LIBRARY_PATH
+
   # Clean rpms to avoid including them to package
   %if ! 0%{?avoid_bundled_rebuild}
     rm -f $PACKAGE_FILES
   %endif
 
-  PATH=$PACKAGE_DIR/usr/bin:$PATH
-  export PATH
-  LD_LIBRARY_PATH=$PACKAGE_DIR/usr/%{_lib}
-  export LD_LIBRARY_PATH
   popd
 }
 
@@ -554,13 +615,11 @@ function build_bundled_package() {
   build_bundled_package 'yasm-1*.rpm' 'yasm-*.rpm' '%{SOURCE301}'
 %endif
 
-
 %if 0%{?bundle_gtk3}
    %if ! 0%{?avoid_bundled_rebuild}
     rpm -ivh %{SOURCE200}
     rpmbuild --nodeps --define '_prefix %{gtk3_install_path}' -ba %{_specdir}/gtk3-private.spec
    %endif
-   rm -rf %{_buildrootdir}/*
    pushd %{_buildrootdir}
    install_rpms_to_current_dir gtk3-private-%{gtk3_nvr}*.rpm
    install_rpms_to_current_dir gtk3-private-devel-%{gtk3_nvr}*.rpm
@@ -568,18 +627,6 @@ function build_bundled_package() {
    popd
 %endif
 
-# If needed build the bundled python 2.7 and put it in the PATH
-%if 0%{?use_bundled_python}
-    pushd %{_builddir}/python/Python-%{bundled_python_version}
-    #if ! 0%{?avoid_bundled_rebuild}
-        # Build Python 2.7 and set environment
-        # Pydebug set optimization to level 0, -O3 crashes on gcc 8 ATM
-        ./configure --with-pydebug --prefix="%{_buildrootdir}" --exec-prefix="%{_buildrootdir}" --libdir="%{_buildrootdir}/lib"
-    #endif
-    make %{?_smp_mflags} install V=1
-    popd
-%endif
-
 %if 0%{?bundle_gtk3}
 # gtk3-private-3.22.26.el6-1-requires-provides-filter.inc
 %include_file %{SOURCE206}
@@ -595,47 +642,116 @@ function build_bundled_package() {
 %endif
 %filter_setup
 
-# GTK3 <<
+# If needed build the bundled python 2.7 and 3.6 and put it in the PATH
+%if 0%{?use_bundled_python_3}
+    pushd %{_builddir}/python3/Python-%{bundled_python_version_3}
+    ./configure --prefix="%{_buildrootdir}" --exec-prefix="%{_buildrootdir}" --libdir="%{_buildrootdir}/lib" --with-pydebug
+    make %{?_smp_mflags} install V=1 -j1
+    cp Tools/scripts/pathfix.py %{_buildrootdir}/bin
+    popd
+%endif
+%if 0%{?use_bundled_python_2}
+    pushd %{_builddir}/python2/Python-%{bundled_python_version_2}
+    ./configure --prefix="%{_buildrootdir}" --exec-prefix="%{_buildrootdir}" --libdir="%{_buildrootdir}/lib"
+    make %{?_smp_mflags} install V=1
+    popd
+%endif
 
-%if %{?system_sqlite}
-  # Do not proceed with build if the sqlite require would be broken:
-  # make sure the minimum requirement is non-empty, ...
-  sqlite_version=$(expr "%{sqlite_version}" : '\([0-9]*\.\)[0-9]*\.') || exit 1
-  # ... and that major number of the computed build-time version matches:
-  case "%{sqlite_build_version}" in
-    "$sqlite_version"*) ;;
-    *) exit 1 ;;
-  esac
+function replace_prefix() {
+  FILE_NAME=$1
+  PKG_CONFIG_PREFIX=$2
+
+  cat $FILE_NAME | tail -n +2 > tmp.txt
+  echo "$PKG_CONFIG_PREFIX" > $FILE_NAME
+  cat tmp.txt >> $FILE_NAME
+  rm -rf tmp.txt
+}
+
+# Build and install local openssl if needed
+# =========================================
+%if 0%{?use_bundled_openssl}
+  rpm -ivh %{SOURCE305}
+  rpmbuild --nodeps -ba %{_specdir}/openssl.spec
+  pushd %{_buildrootdir}
+  install_rpms_to_current_dir openssl-1.0.2k*.rpm
+  install_rpms_to_current_dir openssl-libs-1.0.2k*.rpm
+  install_rpms_to_current_dir openssl-devel-1.0.2k*.rpm
+  install_rpms_to_current_dir openssl-static-1.0.2k*.rpm
+  # openssl is installed to %{_buildrootdir}/usr/lib(64)/...
+  export PKG_CONFIG_PATH=%{_buildrootdir}/%{_libdir}/pkgconfig/:$PKG_CONFIG_PATH
+  replace_prefix %{_buildrootdir}/%{_libdir}/pkgconfig/libcrypto.pc prefix=%{_buildrootdir}/usr
+  replace_prefix %{_buildrootdir}/%{_libdir}/pkgconfig/libssl.pc prefix=%{_buildrootdir}/usr
+  replace_prefix %{_buildrootdir}/%{_libdir}/pkgconfig/openssl.pc prefix=%{_buildrootdir}/usr
+  cat  %{_buildrootdir}/%{_libdir}/pkgconfig/libcrypto.pc
+  cat  %{_buildrootdir}/%{_libdir}/pkgconfig/libssl.pc
+  cat  %{_buildrootdir}/%{_libdir}/pkgconfig/openssl.pc
+  pushd %{_rpmdir}
+  rm -f openssl-*.rpm
+  popd
+  popd
 %endif
 
+# GTK3 <<
 # We need to disable exit on error temporarily for the following scripts:
 set +e
 %if 0%{?use_dts}
 source scl_source enable devtoolset-%{dts_version}
 %endif
 %if 0%{?use_rustts}
-source scl_source enable rust-toolset-%{rst_version}
+source scl_source enable rust-toolset-%{rust_toolset_version}
 %endif
 
-set -e
-# Hack for missing shell when building in brew on RHEL6
-%if 0%{?rhel} == 6
-export SHELL=/bin/sh
+# Build and install local node if needed
+# ======================================
+%if %{use_bundled_nodejs}
+  build_bundled_package 'nodejs-8*.rpm' 'nodejs-*.rpm' %{SOURCE304}
+  export MOZ_NODEJS=$PACKAGE_DIR/usr/bin/node
+%else
+  export MOZ_NODEJS=/usr/bin/node
 %endif
 
-# Workaround for build faulures becase rust warnings threated as errors
-# mozbz#1519629 
-export RUSTFLAGS="--cap-lints warn"
+mkdir -p my_rust_vendor
+cd my_rust_vendor
+%{__tar} xf %{SOURCE4}
+cd -
+mkdir -p .cargo
+cat > .cargo/config <<EOL
+[source.crates-io]
+replace-with = "vendored-sources"
+
+[source.vendored-sources]
+directory = "`pwd`/my_rust_vendor"
+EOL
+
+export CARGO_HOME=.cargo
+cargo install cbindgen
+export PATH=`pwd`/.cargo/bin:$PATH
+export CBINDGEN=`pwd`/.cargo/bin/cbindgen
+
+
+%if %{?system_sqlite}
+  # Do not proceed with build if the sqlite require would be broken:
+  # make sure the minimum requirement is non-empty, ...
+  sqlite_version=$(expr "%{sqlite_version}" : '\([0-9]*\.\)[0-9]*\.') || exit 1
+  # ... and that major number of the computed build-time version matches:
+  case "%{sqlite_build_version}" in
+    "$sqlite_version"*) ;;
+    *) exit 1 ;;
+  esac
+%endif
 
 echo "Building Thunderbird"; echo "==============================="
-#cd %{tarballdir}
 echo "Generate big endian version of config/external/icu/data/icud58l.dat"
 %if 0%{?big_endian}
-  ./mach python intl/icu_sources_data.py .
-  ls -l config/external/icu/data
-  rm -f config/external/icu/data/icudt*l.dat
+# ./mach python intl/icu_sources_data.py .
+# rm -f config/external/icu/data/icudt*l.dat
+ mv config/external/icu/data/icudt64l.dat config/external/icu/data/icudt64b.dat
+ ls -l config/external/icu/data
 %endif
 
+mkdir %{_buildrootdir}/bin || :
+cp %{SOURCE28} %{_buildrootdir}/bin || :
+
 # Update the various config.guess to upstream release for aarch64 support
 find ./ -name config.guess -exec cp /usr/lib/rpm/config.guess {} ';'
 
@@ -652,6 +768,12 @@ MOZ_OPT_FLAGS=$(echo "%{optflags}" | %{__sed} -e 's/-Wall//')
 # for some sources
 # Explicitly force the hardening flags for Firefox so it passes the checksec test;
 # See also https://fedoraproject.org/wiki/Changes/Harden_All_Packages
+%if 0%{?fedora} < 30
+MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security"
+%else
+# Workaround for mozbz#1531309
+MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//')
+%endif
 MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security"
 %if 0%{?fedora} > 23
 # Disable null pointer gcc6 optimization in gcc6 (rhbz#1328045)
@@ -684,27 +806,22 @@ MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g1/')
 # (OOM when linking, rhbz#1238225)
 export MOZ_DEBUG_FLAGS=" "
 %endif
-%ifarch s390 %{arm} ppc aarch64 i686
-MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
-%endif
-%ifarch %{arm} %{ix86}
-export RUSTFLAGS="-Cdebuginfo=0"
-%endif
 export CFLAGS=$MOZ_OPT_FLAGS
 export CXXFLAGS=$MOZ_OPT_FLAGS
 export LDFLAGS=$MOZ_LINK_FLAGS
 
 export PREFIX='%{_prefix}'
 export LIBDIR='%{_libdir}'
-
-# Hack for missing shell when building in brew on RHEL6 and RHEL5
-%if 0%{?rhel} <= 6
-export SHELL=/bin/sh
-%endif
+export CC=gcc
+export CXX=g++
 
 MOZ_SMP_FLAGS=-j1
-# On x86 architectures, Mozilla can build up to 4 jobs at once in parallel,
-# however builds tend to fail on other arches when building in parallel.
+# More than two build tasks can lead to OOM gcc crash.
+%if 0%{?rhel} < 8
+[ -z "$RPM_BUILD_NCPUS" ] && \
+     RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
+[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2
+%else
 %ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64
 [ -z "$RPM_BUILD_NCPUS" ] && \
      RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
@@ -712,6 +829,7 @@ MOZ_SMP_FLAGS=-j1
 [ "$RPM_BUILD_NCPUS" -ge 4 ] && MOZ_SMP_FLAGS=-j4
 [ "$RPM_BUILD_NCPUS" -ge 8 ] && MOZ_SMP_FLAGS=-j8
 %endif
+%endif
 
 %if 0%{?bundle_gtk3}
 # gtk3-private-setup-flags-env.inc
@@ -721,9 +839,6 @@ MOZ_SMP_FLAGS=-j1
 export MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS"
 #export MOZ_SERVICES_SYNC="1"
 export STRIP=/bin/true
-%if 0%{?rhel} == 8
-export LLVM_CONFIG=/usr/bin/llvm-config-64
-%endif
 ./mach build -v
 
 #---------------------------------------------------------------------
@@ -895,6 +1010,8 @@ rm -rf %{_srcrpmdir}/gtk3-private-%{gtk3_nvr}*.src.rpm
 find %{_rpmdir} -name "gtk3-private-*%{gtk3_nvr}*.rpm" -delete
 rm -rf %{_srcrpmdir}/libffi*.src.rpm
 find %{_rpmdir} -name "libffi*.rpm" -delete
+rm -rf %{_srcrpmdir}/openssl*.src.rpm
+find %{_rpmdir} -name "openssl*.rpm" -delete
 
 %post
 update-desktop-database &> /dev/null || :
@@ -943,8 +1060,6 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %{mozappdir}/plugin-container
 %{mozappdir}/defaults
 %{mozappdir}/dictionaries
-%dir %{mozappdir}/extensions
-%{mozappdir}/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi
 %{mozappdir}/greprefs
 %{mozappdir}/isp
 %{mozappdir}/thunderbird-bin
@@ -969,7 +1084,8 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %{mozappdir}/dependentlibs.list
 %{mozappdir}/distribution
 %{mozappdir}/chrome.manifest
-%{mozappdir}/fonts/EmojiOneMozilla.ttf
+%{mozappdir}/fonts/TwemojiMozilla.ttf
+
 %if !%{?system_libicu}
 #%{mozappdir}/icudt*.dat
 %endif
@@ -993,6 +1109,12 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 #===============================================================================
 
 %changelog
+* Tue Oct 22 2019 Jan Horak <jhorak@redhat.com> - 68.2.0-1
+- Update to 68.2.0
+
+* Thu Oct  3 2019 Jan Horak <jhorak@redhat.com> - 68.1.1-2
+- Update to 68.1.1
+
 * Wed Sep  4 2019 Jan Horak <jhorak@redhat.com> - 60.9.0-2
 - Update to 60.9.0