summaryrefslogtreecommitdiffstats
path: root/source/t
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2018-05-28 19:12:29 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 23:39:35 +0200
commit646a5c1cbfd95873950a87b5f75d52073a967023 (patch)
treeb8b8d2ab3b0d432ea69ad1a64d1c789649d65020 /source/t
parentd31c50870d0bee042ce660e445c9294a59a3a65b (diff)
downloadcurrent-646a5c1cbfd95873950a87b5f75d52073a967023.tar.gz
current-646a5c1cbfd95873950a87b5f75d52073a967023.tar.xz
Mon May 28 19:12:29 UTC 201820180528191229
a/pkgtools-15.0-noarch-13.txz: Rebuilt. installpkg: default line length for --terselength is the number of columns. removepkg: added --terse mode. upgradepkg: default line length for --terselength is the number of columns. upgradepkg: accept -option in addition to --option. ap/vim-8.1.0026-x86_64-1.txz: Upgraded. d/bison-3.0.5-x86_64-1.txz: Upgraded. e/emacs-26.1-x86_64-1.txz: Upgraded. kde/kopete-4.14.3-x86_64-8.txz: Rebuilt. Recompiled against libidn-1.35. n/conntrack-tools-1.4.5-x86_64-1.txz: Upgraded. n/libnetfilter_conntrack-1.0.7-x86_64-1.txz: Upgraded. n/libnftnl-1.1.0-x86_64-1.txz: Upgraded. n/links-2.16-x86_64-2.txz: Rebuilt. Rebuilt to enable X driver for -g mode. n/lynx-2.8.9dev.19-x86_64-1.txz: Upgraded. n/nftables-0.8.5-x86_64-1.txz: Upgraded. n/p11-kit-0.23.11-x86_64-1.txz: Upgraded. n/ulogd-2.0.7-x86_64-1.txz: Upgraded. n/whois-5.3.1-x86_64-1.txz: Upgraded. xap/network-manager-applet-1.8.12-x86_64-1.txz: Upgraded. xap/vim-gvim-8.1.0026-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/t')
-rw-r--r--source/t/FTBFSlog2
-rwxr-xr-xsource/t/fig2dev/fig2dev.SlackBuild (renamed from source/t/transfig/transfig.SlackBuild)66
-rw-r--r--source/t/fig2dev/slack-desc19
-rwxr-xr-xsource/t/tetex/jadetex.build68
-rwxr-xr-xsource/t/tetex/profile.d/tetex.csh4
-rwxr-xr-xsource/t/tetex/profile.d/tetex.sh4
-rw-r--r--source/t/tetex/slack-desc.tetex20
-rw-r--r--source/t/tetex/slack-desc.tetex-doc19
-rw-r--r--source/t/tetex/tetex.CVE-2005-3193.diff169
-rwxr-xr-xsource/t/tetex/tetex.SlackBuild281
-rw-r--r--source/t/tetex/tetex.afm2tfm.getline.diff38
-rw-r--r--source/t/tetex/tetex.amstex.fmtutil.diff13
-rw-r--r--source/t/tetex/tetex.browsers.diff39
-rw-r--r--source/t/tetex/tetex.cpascal.getline.posix.2008.diff17
-rw-r--r--source/t/tetex/tetex.dvipdfm.mkstemp.diff20
-rw-r--r--source/t/tetex/tetex.etex.diff11
-rw-r--r--source/t/tetex/tetex.fontcachedirinhome.diff11
-rw-r--r--source/t/tetex/tetex.leet.diff25
-rw-r--r--source/t/tetex/tetex.png14.diff33
-rw-r--r--source/t/tetex/tetex.png16.diff167
-rw-r--r--source/t/tetex/tetex.scripts.mktemp.diff244
-rw-r--r--source/t/tetex/tetex.tmp.cleanup.diff51
-rw-r--r--source/t/tetex/tetex.var.fonts.diff11
-rw-r--r--source/t/texlive/README.tlpkg18
-rw-r--r--source/t/texlive/doinst.sh5
-rwxr-xr-xsource/t/texlive/dump.unused.internal.libraries.from.sources.sh15
-rw-r--r--source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch33
-rw-r--r--source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch451
-rw-r--r--source/t/texlive/patches/texlive-poppler-0.59.patch1142
-rw-r--r--source/t/texlive/prep/README2
-rw-r--r--source/t/texlive/prep/texmf_get.sh752
-rw-r--r--source/t/texlive/slack-desc19
-rwxr-xr-xsource/t/texlive/texlive.SlackBuild252
-rw-r--r--source/t/texlive/texlive.url6
-rw-r--r--source/t/transfig/slack-desc19
-rw-r--r--source/t/transfig/transfig.diff20
-rw-r--r--source/t/xfig/slack-desc16
-rw-r--r--source/t/xfig/xfig-3.2.5c.paths.diff20
-rw-r--r--source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff10
-rwxr-xr-xsource/t/xfig/xfig.SlackBuild66
-rw-r--r--source/t/xfig/xfig.fig.ad.diff8
-rw-r--r--source/t/xfig/xfig.no.pdf.ref.diff4
-rw-r--r--source/t/xfig/xfig.no.xfig_ref_en.pdf.diff10
43 files changed, 2806 insertions, 1394 deletions
diff --git a/source/t/FTBFSlog b/source/t/FTBFSlog
new file mode 100644
index 000000000..2c79e5ba3
--- /dev/null
+++ b/source/t/FTBFSlog
@@ -0,0 +1,2 @@
+Thu Feb 1 03:15:18 UTC 2018
+ All packages tested and found to compile properly.
diff --git a/source/t/transfig/transfig.SlackBuild b/source/t/fig2dev/fig2dev.SlackBuild
index 58bd7b450..bad061fb5 100755
--- a/source/t/transfig/transfig.SlackBuild
+++ b/source/t/fig2dev/fig2dev.SlackBuild
@@ -1,6 +1,6 @@
-#!/bin/sh
+#!/bin/bash
-# Copyright 2006, 2007, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2006, 2007, 2009, 2010, 2013, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -20,31 +20,39 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+cd $(dirname $0) ; CWD=$(pwd)
-PKGNAM=transfig
-VERSION=${VERSION:-3.2.5e}
-BUILD=${BUILD:-3}
+PKGNAM=fig2dev
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
+ i?86) export ARCH=i586 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
esac
fi
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
NUMJOBS=${NUMJOBS:-" -j7 "}
-CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-${PKGNAM}
rm -rf $PKG
mkdir -p $PKG $TMP
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
@@ -56,8 +64,8 @@ fi
cd $TMP
rm -rf ${PKGNAM}-${VERSION}
-tar xvf $CWD/${PKGNAM}.$VERSION.tar.xz || exit 1
-cd ${PKGNAM}.$VERSION || exit 1
+tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1
+cd ${PKGNAM}-$VERSION || exit 1
find . -name "*.orig" -exec rm "{}" \;
@@ -71,18 +79,20 @@ find . \
\( -perm 700 -type f \) \
-exec chmod 644 {} \;
-zcat $CWD/transfig.diff.gz | sed -e "s#/usr/lib/#/usr/lib${LIBDIRSUFFIX}/#" \
- | patch -p1 --verbose || exit 1
-
-xmkmf || exit 1
-make Makefiles || exit 1
+# Configure:
+CFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --mandir=/usr/man \
+ --enable-transfig \
+ --build=$ARCH-slackware-linux || exit 1
# Build and install:
make $NUMJOBS || make || exit 1
-
-mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/X11/fig2dev
make install DESTDIR=$PKG || exit 1
-make install.man DESTDIR=$PKG || exit 1
# Strip binaries:
find $PKG | xargs file | grep -e "executable" -e "shared object" \
@@ -103,20 +113,20 @@ if [ -d $PKG/usr/man ]; then
)
fi
-# Compress info files, if any:
-if [ -d $PKG/usr/info ]; then
- ( cd $PKG/usr/info
- rm -f dir
- gzip -9 *
- )
-fi
-
# Add a documentation directory:
mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION
cp -a \
- CHANGES LATEX.AND.XFIG NOTES README doc/manual \
+ CHANGES COPYING INSTALL NOTES README \
$PKG/usr/doc/${PKGNAM}-$VERSION
+# If there's a CHANGES file, installing at least part of the recent history
+# is useful, but don't let it get totally out of control:
+if [ -r CHANGES ]; then
+ DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION)
+ cat CHANGES | head -n 1000 > $DOCSDIR/CHANGES
+ touch -r CHANGES $DOCSDIR/CHANGES
+fi
+
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
diff --git a/source/t/fig2dev/slack-desc b/source/t/fig2dev/slack-desc
new file mode 100644
index 000000000..67c2ebef5
--- /dev/null
+++ b/source/t/fig2dev/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+fig2dev: fig2dev (transform .fig files)
+fig2dev:
+fig2dev: This package contains the binaries to transform .fig files (created by
+fig2dev: xfig) to some other formats like epsf and LaTeX. If you have installed
+fig2dev: xfig, you should also install this package if you want to use xfig to
+fig2dev: create other files than .fig files, which can then be included in your
+fig2dev: LaTeX documents.
+fig2dev:
+fig2dev: Homepage: https://sourceforge.net/projects/mcj/files/
+fig2dev:
+fig2dev:
diff --git a/source/t/tetex/jadetex.build b/source/t/tetex/jadetex.build
deleted file mode 100755
index 0d76f7e9f..000000000
--- a/source/t/tetex/jadetex.build
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-# jadetex build/install script taken from Stuart Winter's build
-# script for linuxdoc-tools.
-
-# Sanity check:
-if [ -z "$SLKCFLAGS" ]; then
- echo "This script is only meant to be run from tetex.SlackBuild,"
- echo "so I hope you know what you are doing."
- echo -n "Hit Enter to continue anyway... "
- read junk
-fi
-
-JADETEXVER=3.13
-
-# sgmltools-lite's POSTINSTALL document suggests that if jadetex
-# is eating huge amounts of RAM, we need to configure it thusly:
-# Slackware's t/tetex package contains this config file (without the
-# .jadetext config) so I won't overwrite it here. However, we may
-# wish to append this configuration to an install script for
-# this package; but it'd get overwritten by new versions of
-# t/tetex. Perhaps this configuration could be added to the tetex package?
-
- cat << EOF >> /usr/share/texmf/web2c/texmf.cnf
-
-% options for jadetex:
-hash_extra.jadetex = 15000
-pool_size.jadetex = 200000
-max_strings.jadetex = 50000
-save_size.jadetex = 15000
-EOF
-chmod 644 /usr/share/texmf/web2c/texmf.cnf
-
-# Extract source:
-cd $TMP
-rm -rf jadetex-$JADETEXVER
-tar xvf $CWD/jadetex-$JADETEXVER.tar.gz || exit 1
-cd jadetex-$JADETEXVER
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Build:
-# The install phase breaks if we use tex or etex, so we use latex instead:
-sed -ie "s?tex -ini?latex -ini?" Makefile
-make $NUMJOBS || make || exit 1
-
-# Install onto filesystem:
-make install || exit 1
-
-# Create jadetex symlinks to the TeTex binaries:
-( cd /usr/share/texmf/bin
- rm -f jadetex pdfjadetex
- ln -sf latex jadetex
- ln -sf pdfetex pdfjadetex
-)
-
-# Update the references to jadetex & pdfjadetex:
-mktexlsr
-
-# Install man pages - these are missed by the Makefile:
-mkdir -p /usr/share/texmf/man/man1
-install -m644 jadetex.1 pdfjadetex.1 /usr/share/texmf/man/man1
-gzip -9 /usr/share/texmf/man/man1/jadetex.1
-gzip -9 /usr/share/texmf/man/man1/pdfjadetex.1
-
diff --git a/source/t/tetex/profile.d/tetex.csh b/source/t/tetex/profile.d/tetex.csh
deleted file mode 100755
index 30496c4c2..000000000
--- a/source/t/tetex/profile.d/tetex.csh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/csh
-# Add path and MANPATH for teTeX:
-set path = ( $path /usr/share/texmf/bin )
-setenv MANPATH ${MANPATH}:/usr/share/texmf/man
diff --git a/source/t/tetex/profile.d/tetex.sh b/source/t/tetex/profile.d/tetex.sh
deleted file mode 100755
index 8987135eb..000000000
--- a/source/t/tetex/profile.d/tetex.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-# Add PATH and MANPATH for teTeX:
-PATH="$PATH:/usr/share/texmf/bin"
-MANPATH="$MANPATH:/usr/share/texmf/man"
diff --git a/source/t/tetex/slack-desc.tetex b/source/t/tetex/slack-desc.tetex
deleted file mode 100644
index ce66d03fb..000000000
--- a/source/t/tetex/slack-desc.tetex
+++ /dev/null
@@ -1,20 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-tetex: tetex (teTeX binaries and support files)
-tetex:
-tetex: This package contains the binaries and support files required for the
-tetex: teTeX TeX distribution, such as input files for TeX, runtime
-tetex: configuration files, hyphenation tables, manpages, and the computer
-tetex: modern fonts.
-tetex:
-tetex:
-tetex:
-tetex:
-tetex:
-tetex:
diff --git a/source/t/tetex/slack-desc.tetex-doc b/source/t/tetex/slack-desc.tetex-doc
deleted file mode 100644
index 7486398f2..000000000
--- a/source/t/tetex/slack-desc.tetex-doc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-tetex-doc: tetex-doc (Documentation for teTeX)
-tetex-doc:
-tetex-doc: This package contains documentation for AMSTeX, BibTeX, extended plain
-tetex-doc: format, font packages, format files (babel, texdraw, pstricks, xypic),
-tetex-doc: LaTeX, MetaPost, Makeindex, pdftex, the Kpathsea library, as well as
-tetex-doc: general information about TeX such as a list of ftp servers, a draft
-tetex-doc: for the TeX Directory Standard (TDS), The TeX and LaTeX Catalogue,
-tetex-doc: TeX FAQs, and more.
-tetex-doc:
-tetex-doc:
-tetex-doc:
diff --git a/source/t/tetex/tetex.CVE-2005-3193.diff b/source/t/tetex/tetex.CVE-2005-3193.diff
deleted file mode 100644
index b8f2fad59..000000000
--- a/source/t/tetex/tetex.CVE-2005-3193.diff
+++ /dev/null
@@ -1,169 +0,0 @@
---- tetex-src-3.0/libs/xpdf/goo/gmem.c.CVE-2005-3193 2004-01-22 02:26:44.000000000 +0100
-+++ tetex-src-3.0/libs/xpdf/goo/gmem.c 2006-01-16 15:41:04.000000000 +0100
-@@ -135,6 +135,28 @@ void *grealloc(void *p, int size) {
- #endif
- }
-
-+void *gmallocn(int nObjs, int objSize) {
-+ int n;
-+
-+ n = nObjs * objSize;
-+ if (objSize == 0 || n / objSize != nObjs) {
-+ fprintf(stderr, "Bogus memory allocation size\n");
-+ exit(1);
-+ }
-+ return gmalloc(n);
-+}
-+
-+void *greallocn(void *p, int nObjs, int objSize) {
-+ int n;
-+
-+ n = nObjs * objSize;
-+ if (objSize == 0 || n / objSize != nObjs) {
-+ fprintf(stderr, "Bogus memory allocation size\n");
-+ exit(1);
-+ }
-+ return grealloc(p, n);
-+}
-+
- void gfree(void *p) {
- #ifdef DEBUG_MEM
- int size;
---- tetex-src-3.0/libs/xpdf/goo/gmem.h.CVE-2005-3193 2004-01-22 02:26:44.000000000 +0100
-+++ tetex-src-3.0/libs/xpdf/goo/gmem.h 2006-01-16 15:41:04.000000000 +0100
-@@ -28,6 +28,15 @@ extern void *gmalloc(int size);
- extern void *grealloc(void *p, int size);
-
- /*
-+ * These are similar to gmalloc and grealloc, but take an object count
-+ * and size. The result is similar to allocating nObjs * objSize
-+ * bytes, but there is an additional error check that the total size
-+ * doesn't overflow an int.
-+ */
-+extern void *gmallocn(int nObjs, int objSize);
-+extern void *greallocn(void *p, int nObjs, int objSize);
-+
-+/*
- * Same as free, but checks for and ignores NULL pointers.
- */
- extern void gfree(void *p);
---- tetex-src-3.0/libs/xpdf/xpdf/JPXStream.cc.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100
-+++ tetex-src-3.0/libs/xpdf/xpdf/JPXStream.cc 2006-01-16 15:41:04.000000000 +0100
-@@ -666,7 +666,7 @@ GBool JPXStream::readCodestream(Guint le
- int segType;
- GBool haveSIZ, haveCOD, haveQCD, haveSOT;
- Guint precinctSize, style;
-- Guint segLen, capabilities, comp, i, j, r;
-+ Guint segLen, capabilities, nTiles, comp, i, j, r;
-
- //----- main header
- haveSIZ = haveCOD = haveQCD = haveSOT = gFalse;
-@@ -701,8 +701,13 @@ GBool JPXStream::readCodestream(Guint le
- / img.xTileSize;
- img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1)
- / img.yTileSize;
-- img.tiles = (JPXTile *)gmalloc(img.nXTiles * img.nYTiles *
-- sizeof(JPXTile));
-+ nTiles = img.nXTiles * img.nYTiles;
-+ // check for overflow before allocating memory
-+ if (nTiles == 0 || nTiles / img.nXTiles != img.nYTiles) {
-+ error(getPos(), "Bad tile count in JPX SIZ marker segment");
-+ return gFalse;
-+ }
-+ img.tiles = (JPXTile *)gmallocn(nTiles, sizeof(JPXTile));
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- img.tiles[i].tileComps = (JPXTileComp *)gmalloc(img.nComps *
- sizeof(JPXTileComp));
---- tetex-src-3.0/libs/xpdf/xpdf/Stream.h.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100
-+++ tetex-src-3.0/libs/xpdf/xpdf/Stream.h 2006-01-16 15:41:04.000000000 +0100
-@@ -233,6 +233,8 @@ public:
-
- ~StreamPredictor();
-
-+ GBool isOk() { return ok; }
-+
- int lookChar();
- int getChar();
-
-@@ -250,6 +252,7 @@ private:
- int rowBytes; // bytes per line
- Guchar *predLine; // line buffer
- int predIdx; // current index in predLine
-+ GBool ok;
- };
-
- //------------------------------------------------------------------------
---- tetex-src-3.0/libs/xpdf/xpdf/Stream.cc.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100
-+++ tetex-src-3.0/libs/xpdf/xpdf/Stream.cc 2006-01-16 15:41:04.000000000 +0100
-@@ -407,18 +407,33 @@ void ImageStream::skipLine() {
-
- StreamPredictor::StreamPredictor(Stream *strA, int predictorA,
- int widthA, int nCompsA, int nBitsA) {
-+ int totalBits;
-+
- str = strA;
- predictor = predictorA;
- width = widthA;
- nComps = nCompsA;
- nBits = nBitsA;
-+ predLine = NULL;
-+ ok = gFalse;
-
- nVals = width * nComps;
-+ totalBits = nVals * nBits;
-+ if (totalBits == 0 ||
-+ (totalBits / nBits) / nComps != width ||
-+ totalBits + 7 < 0) {
-+ return;
-+ }
- pixBytes = (nComps * nBits + 7) >> 3;
-- rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes;
-+ rowBytes = ((totalBits + 7) >> 3) + pixBytes;
-+ if (rowBytes < 0) {
-+ return;
-+ }
- predLine = (Guchar *)gmalloc(rowBytes);
- memset(predLine, 0, rowBytes);
- predIdx = rowBytes;
-+
-+ ok = gTrue;
- }
-
- StreamPredictor::~StreamPredictor() {
-@@ -1012,6 +1027,10 @@ LZWStream::LZWStream(Stream *strA, int p
- FilterStream(strA) {
- if (predictor != 1) {
- pred = new StreamPredictor(this, predictor, columns, colors, bits);
-+ if (!pred->isOk()) {
-+ delete pred;
-+ pred = NULL;
-+ }
- } else {
- pred = NULL;
- }
-@@ -2897,6 +2916,14 @@ GBool DCTStream::readBaselineSOF() {
- height = read16();
- width = read16();
- numComps = str->getChar();
-+ if (numComps <= 0 || numComps > 4) {
-+ error(getPos(), "Bad number of components in DCT stream", prec);
-+ return gFalse;
-+ }
-+ if (numComps <= 0 || numComps > 4) {
-+ error(getPos(), "Bad number of components in DCT stream", prec);
-+ return gFalse;
-+ }
- if (prec != 8) {
- error(getPos(), "Bad DCT precision %d", prec);
- return gFalse;
-@@ -3255,6 +3282,10 @@ FlateStream::FlateStream(Stream *strA, i
- FilterStream(strA) {
- if (predictor != 1) {
- pred = new StreamPredictor(this, predictor, columns, colors, bits);
-+ if (!pred->isOk()) {
-+ delete pred;
-+ pred = NULL;
-+ }
- } else {
- pred = NULL;
- }
diff --git a/source/t/tetex/tetex.SlackBuild b/source/t/tetex/tetex.SlackBuild
deleted file mode 100755
index ac6ccf430..000000000
--- a/source/t/tetex/tetex.SlackBuild
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/bin/sh
-
-# Copyright 2008, 2009, 2010, 2015 Patrick J. Volkerding, Sebeka, Minnesota, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-VERSION=3.0
-BUILD=${BUILD:-10}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
- arm*) export ARCH=arm ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$( uname -m ) ;;
- esac
-fi
-
-NUMJOBS=${NUMJOBS:-" -j7 "}
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
-else
- SLKCFLAGS="-O2"
-fi
-
-# There were so many local security problems with this shared fontcache
-# scheme that it's not worth trying to support. It was not enabled by
-# default, and newer versions of teTeX don't seem to recongnize it any
-# longer either.
-#export fontcache=/var/cache/fonts
-#export vartexfonts=$fontcache
-#mkdir -p /var/cache/fonts/pk /var/cache/fonts/source /var/cache/fonts/tfm
-#chmod 1777 /var/cache/fonts /var/cache/fonts/pk \
-# /var/cache/fonts/source /var/cache/fonts/tfm
-
-# Safer to purge this first:
-rm -rf /usr/share/texmf
-rm -rf /usr/share/texmf-var
-rm -rf /usr/share/texi2html
-
-# Make a clean new directory:
-mkdir -p /usr/share/texmf
-( cd /usr/share/texmf
- tar xvf $CWD/tetex-texmf-$VERSION.tar.xz
- chown -R root:root .
- find . -type f -perm 666 -exec chmod 644 {} \;
- # Change the sell-by date:
- zcat $CWD/tetex.leet.diff.gz | patch -p1 --verbose || exit 1
-)
-cd $TMP
-rm -rf tetex-src-$VERSION
-tar xvf $CWD/tetex-src-$VERSION.tar.xz
-cd tetex-src-$VERSION
-chown -R root:root .
-find . -type f -perm 666 -exec chmod 644 {} \;
-
-# Fix possible xpdf overflows:
-zcat $CWD/tetex.CVE-2005-3193.diff.gz | patch -p1 --verbose || exit 1
-
-# /var/lib/texmf is a better font location than /var/tmp/texfonts:
-zcat $CWD/tetex.var.fonts.diff.gz | patch -p1 --verbose || exit 1
-
-# Even better is something in your $HOME directory:
-zcat $CWD/tetex.fontcachedirinhome.diff.gz | patch -p1 --verbose || exit 1
-
-# Use mkstemp() in dvipdfm:
-zcat $CWD/tetex.dvipdfm.mkstemp.diff.gz | patch -p1 --verbose || exit 1
-
-# Use mktemp in scripts:
-zcat $CWD/tetex.scripts.mktemp.diff.gz | patch -p1 --verbose || exit 1
-
-# Try to use more modern browsers.
-# Attempt to use them in this order: firefox, seamonkey, mozilla, links, lynx.
-zcat $CWD/tetex.browsers.diff.gz | patch -p1 --verbose || exit 1
-
-# Add bplain and bamstex info to fmtutil.cnf:
-zcat $CWD/tetex.amstex.fmtutil.diff.gz | patch -p1 --verbose || exit 1
-
-# Don't leave texconfig junk in $TMP:
-zcat $CWD/tetex.tmp.cleanup.diff.gz | patch -p1 --verbose || exit 1
-
-# Fix the cpascal header so there's no conflict with getline() in the
-# generated C code:
-zcat $CWD/tetex.cpascal.getline.posix.2008.diff.gz | patch -p1 --verbose || exit 1
-
-# Patch for libpng-1.4.0:
-#zcat $CWD/tetex.png14.diff.gz | patch -p1 --verbose || exit 1
-
-# Patch for libpng16: (currently causing a segfault... feel free to help :-)
-#zcat $CWD/tetex.png16.diff.gz | patch -p1 --verbose || exit 1
-
-# Another problem caused by getline() in glibc:
-zcat $CWD/tetex.afm2tfm.getline.diff.gz | patch -p1 --verbose || exit 1
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure --prefix=/usr/share/texmf \
- --datadir=/usr/share \
- --disable-multiplatform \
- --disable-a4 \
- --without-dialog \
- --without-texinfo \
- --with-system-ncurses \
- --with-system-t1lib \
- --with-system-tifflib \
- --with-system-zlib \
- --with-ps=gs \
- --enable-ipc \
- --enable-freetype \
- --with-etex
-# --without-texinfo # Really, it doesn't hurt to include these twice...
-
-# This was reported to fix a problem with newer GNU sources and "make dvi".
-# It does, in fact, fix a bug where the etex binary/engine really should be
-# used when etex and dvi output are requested, but the example given to me
-# (which was "make dvi" in GNU binutils) also has some problems that have to
-# be fixed. This confused me for a good long time. ;-)
-# BTW, the fix for the binutils docs is to edit bfd.texinfo and remove that
-# @tex through @end tex section near the top. Then build twice. Hit enter
-# if it "sticks".
-zcat $CWD/tetex.etex.diff.gz | patch -p1 --verbose || exit 1
-
-make all $NUMJOBS || make all || exit 1
-make install strip || exit 1
-
-if ! echo $PATH | grep /usr/share/texmf/bin ; then
- PATH=$PATH:/usr/share/texmf/bin
-fi
-# ... [don't] make links to all binaries in /usr/bin for the final package.
-# [that would be really pointless... $PATH should work, period. ]
-
-# If latex isn't there, maybe we need to do this:
-if [ ! -r /usr/share/texmf/bin/latex ]; then
- texconfig init
-fi
-
-# Let's start with these defaults:
-texconfig confall
-texconfig dvips paper letter
-texconfig xdvi paper us
-
-# These *might* be useful...
-# Some are known to be not-so-useful, though, as they put the config files
-# into /root/.texmf-config, which we're simply going to throw away anyway
-# so it won't interfere with server testing. If you need these options,
-# you'll probably have to run texconfig yourself in your own user (or root)
-# account.
-texconfig mode ljfour
-#texconfig xdvi paper a4
-texconfig dvips mode ljfour
-#texconfig dvips paper a4
-texconfig dvips printcmd -
-texconfig dvips add bjc600
-texconfig dvips add stcolor
-texconfig dvips add deskjet
-texconfig dvips add ljet4
-texconfig dvips -P bjc600 mode canonbjc
-texconfig dvips -P stcolor mode epstylus
-texconfig dvips -P deskjet mode deskjet
-texconfig dvips -P ljet4 mode ljfour
-texconfig font ro
-texconfig rehash
-
-# Add jadetex to the package:
-. $CWD/jadetex.build
-
-# Toss redundant docs:
-( cd /usr/share/texmf/doc
- for file in $(find . -name "*.dvi") ; do
- rm -f $(dirname $file)/$(basename $file .dvi).pdf
- done
-)
-
-# Discard local configurations:
-if [ -e /root/.texmf-config ]; then
- mv /root/.texmf-config /root/.texmf-config-$(mcookie)
- echo "/root/.texmf-config moved out of the way... you may wish"
- echo "to purge any /root/.texmf-config-* directories if the"
- echo "cruft heap gets too large."
-fi
-
-# Now, package the /usr/share/texmf/ and /usr/share/texi2html trees.
-# Package tetex-doc.txz and tetex-bin.txz seperately.
-
-PKG1=$TMP/package-tetex
-PKG2=$TMP/package-tetex-doc
-rm -rf $PKG1 $PKG2
-mkdir -p $PKG1 $PKG2
-
-mkdir -p $PKG1/usr/share
-mv /usr/share/texmf $PKG1/usr/share
-mv /usr/share/texmf-var $PKG1/usr/share
-mv /usr/share/texi2html $PKG1/usr/share
-
-# The tetex.txz file will need an installation script to add
-# /usr/share/texmf/bin to the $PATH and /usr/share/texmf/man to the $MANPATH:
-mkdir -p $PKG1/etc/profile.d
-cp -a $CWD/profile.d/tetex.* $PKG1/etc/profile.d
-chown root:root $PKG1/etc/profile.d/tetex.*
-chmod 755 $PKG1/etc/profile.d/tetex.*
-
-mkdir -p $PKG1/install
-cp $CWD/slack-desc.tetex $PKG1/install/slack-desc
-mkdir -p $PKG2/install
-cp $CWD/slack-desc.tetex-doc $PKG2/install/slack-desc
-
-# Strip everything:
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-# Gzip man pages:
-gzip -9 $PKG1/usr/share/texmf/man/man?/*.?
-
-# Fix manpage symlinks:
-( cd $PKG1/usr/share/texmf/man
- for dir in man? ; do
- ( cd $dir
- for file in *.? ; do
- if [ -L $file ]; then
- LINK=$(readlink $file)
- rm $file
- ln -sf ${LINK}.gz ${file}.gz
- fi
- done
- )
- done
-)
-
-# Move some of the files into the docs package:
-mkdir -p $PKG2/usr/share/texmf/doc
-mv $PKG1/usr/share/texmf/doc/* $PKG2/usr/share/texmf/doc
-mkdir -p $PKG2/usr/share/texinfo
-mv /usr/share/texinfo/html $PKG2/usr/share/texinfo
-mv $PKG1/usr/share/texmf/info $PKG2/usr
-( cd $PKG1/usr/share/texmf ; ln -sf /usr/info . )
-
-# Compress info pages and purge "dir" file from the package:
-if [ -d $PKG2/usr/info ]; then
- ( cd $PKG2/usr/info
- rm -f dir
- gzip -9 *
- )
-fi
-
-# Make docs link in /usr/doc/:
-mkdir -p $PKG2/usr/doc
-( cd $PKG2/usr/doc ; rm -rf tetex-$VERSION )
-( cd $PKG2/usr/doc ; ln -sf /usr/share/texmf/doc tetex-$VERSION )
-
-# Build the packages:
-cd $PKG1
-/sbin/makepkg -l y -c n $TMP/tetex-$VERSION-$ARCH-$BUILD.txz
-cd $PKG2
-/sbin/makepkg -l y -c n $TMP/tetex-doc-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/source/t/tetex/tetex.afm2tfm.getline.diff b/source/t/tetex/tetex.afm2tfm.getline.diff
deleted file mode 100644
index 8406aa891..000000000
--- a/source/t/tetex/tetex.afm2tfm.getline.diff
+++ /dev/null
@@ -1,38 +0,0 @@
---- ./texk/dvipsk/afm2tfm.c.orig 2005-01-30 07:17:09.000000000 -0600
-+++ ./texk/dvipsk/afm2tfm.c 2010-02-19 11:56:12.000000000 -0600
-@@ -257,7 +257,7 @@
- }
-
- int
--getline P1H(void) {
-+afm_int_getline P1H(void) {
- register char *p ;
- register int c ;
-
-@@ -606,7 +606,7 @@
- ai = newchar() ;
- ai->adobenum = -1 ;
- ai->adobename = "||" ; /* boundary character name */
-- while (getline()) {
-+ while (afm_int_getline()) {
- switch(interest(paramstring())) {
- case FontName:
- fontname = paramnewstring() ;
-@@ -1882,7 +1882,7 @@
-
- while (1) {
- while (param == 0 || *param == 0) {
-- if (getline() == 0)
-+ if (afm_int_getline() == 0)
- error("! premature end in encoding file") ;
- for (p=buffer; *p; p++)
- if (*p == '%') {
-@@ -1973,7 +1973,7 @@
- p = gettoken() ;
- if (strcmp(p, "]"))
- error("! token 258 in encoding must be make-array (])") ;
-- while (getline()) {
-+ while (afm_int_getline()) {
- for (p=buffer; *p; p++)
- if (*p == '%') {
- if (ignoreligkern == 0)
diff --git a/source/t/tetex/tetex.amstex.fmtutil.diff b/source/t/tetex/tetex.amstex.fmtutil.diff
deleted file mode 100644
index 6ae5c1f93..000000000
--- a/source/t/tetex/tetex.amstex.fmtutil.diff
+++ /dev/null
@@ -1,13 +0,0 @@
---- tetex-src-3.0/texk/web2c/fmtutil.in.fmtutil 2005-02-06 09:27:46.000000000 +0900
-+++ tetex-src-3.0/texk/web2c/fmtutil.in 2005-02-07 15:22:31.828492229 +0900
-@@ -55,7 +55,9 @@
-
- # Change "amstex.ini -> bamstex.ini" and "- -> language.dat"
- # if you want babel support in amstex:
--#! amstex pdfetex - -translate-file=cp227.tcx *amstex.ini
-+amstex pdfetex - -translate-file=cp227.tcx *amstex.ini
-+bplain pdfetex language.dat -translate-file=cp227.tcx bplain.ini
-+bamstex pdfetex language.dat -translate-file=cp227.tcx bamstex.ini
-
- # Change "pdfamstex.ini -> pdfbamstex.ini" and "- -> language.dat"
- # if you want babel support in pdfamstex:
diff --git a/source/t/tetex/tetex.browsers.diff b/source/t/tetex/tetex.browsers.diff
deleted file mode 100644
index 42052aa07..000000000
--- a/source/t/tetex/tetex.browsers.diff
+++ /dev/null
@@ -1,39 +0,0 @@
---- ./texk/xdvik/gui/xm_prefsP.h.orig 2004-04-21 16:12:09.000000000 -0500
-+++ ./texk/xdvik/gui/xm_prefsP.h 2006-05-16 16:39:38.000000000 -0500
-@@ -96,8 +96,10 @@
- #define Xdvi_APPLY_STR "Apply"
-
- #define Xdvi_PREFS_BROWSER_DEFAULTS \
-+ "firefox -remote 'openURL(%s,new-window)'\n" \
-+ "seamonkey -remote 'openURL(%s,new-window)'\n" \
- "mozilla -remote 'openURL(%s,new-window)'\n" \
-- "netscape -raise -remote 'openURL(%s,new-window)'\n" \
-+ "xterm -e links %s\n" \
- "xterm -e lynx %s\n" \
- Xdvi_ADD_COMMAND_STR
- #define Xdvi_PREFS_EDITOR_DEFAULTS \
---- ./texk/xdvik/browser.c.orig 2004-11-11 19:25:26.000000000 -0600
-+++ ./texk/xdvik/browser.c 2006-05-16 16:39:52.000000000 -0500
-@@ -39,7 +39,10 @@
- #include "statusline.h"
-
- static const char *const default_browser_cmd =
-- "netscape -raise -remote \"openURL(%s,new-window)\""
-+ ":firefox -remote \"openURL(%s,new-window)\""
-+ ":seamonkey -remote \"openURL(%s,new-window)\""
-+ ":mozilla -remote \"openURL(%s,new-window)\""
-+ ":xterm -e links %s"
- ":xterm -e lynx %s"
- ":xterm -e wget %s";
-
---- ./texk/xdvik/xdvi.1.in.orig 2005-01-20 10:51:45.000000000 -0600
-+++ ./texk/xdvik/xdvi.1.in 2006-05-16 16:40:25.000000000 -0500
-@@ -365,7 +365,7 @@
- .B WWWBROWSER
- (in that order) are used to determine the browser command. If these are
- not set either, the following default value is used:
--.SB netscape -raise -remote "openURL(%s,new-window)":xterm -e lynx %s:xterm -e wget %s
-+.SB firefox -remote -remote "openURL(%s,new-window)":seamonkey -remote "openURL(%s,new-window)":mozilla -remote "openURL(%s,new-window)":xterm -e links %s:xterm -e lynx %s:xterm -e wget %s
- .\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- .TP
- .BI \-bw " width"
diff --git a/source/t/tetex/tetex.cpascal.getline.posix.2008.diff b/source/t/tetex/tetex.cpascal.getline.posix.2008.diff
deleted file mode 100644
index 879adc441..000000000
--- a/source/t/tetex/tetex.cpascal.getline.posix.2008.diff
+++ /dev/null
@@ -1,17 +0,0 @@
---- ./texk/web2c/cpascal.h.orig 2004-08-28 15:49:59.000000000 -0500
-+++ ./texk/web2c/cpascal.h 2010-02-19 11:27:04.000000000 -0600
-@@ -241,6 +241,14 @@
- #define getname vms_getname
- #endif
-
-+/* Apparently POSIX 2008 has getline and glibc 2.9.90 exports it.
-+ tangle, weave, et al. use that symbol; try to define it away so
-+ something that a standard won't usurp. */
-+#ifdef getline
-+#undef getline
-+#endif
-+#define getline web2c_getline
-+
- /* Declarations for the routines we provide ourselves in lib/. */
-
- extern string basenamechangesuffix P3H(const_string,const_string,const_string);
diff --git a/source/t/tetex/tetex.dvipdfm.mkstemp.diff b/source/t/tetex/tetex.dvipdfm.mkstemp.diff
deleted file mode 100644
index 5cae1bf22..000000000
--- a/source/t/tetex/tetex.dvipdfm.mkstemp.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- tetex-src-2.0.2/texk/dvipdfm/psimage.c.dvipdfm-security 2001-06-28 20:55:26.000000000 +0100
-+++ tetex-src-2.0.2/texk/dvipdfm/psimage.c 2003-03-12 18:12:56.000000000 +0000
-@@ -113,10 +113,15 @@
- {
- #ifdef HAVE_SYSTEM
- pdf_obj *result = NULL;
-- char *tmp, *cmd;
-+ char tmp[] = "/tmp/dvipdfm.XXXXXX", *cmd;
-+ int tfd;
- FILE *pdf_file = NULL;
- /* Get a full qualified tmp name */
-- tmp = tmpnam (NULL);
-+ tfd = mkstemp (tmp);
-+ if (tfd == -1) {
-+ fprintf (stderr, "\nCouldn't create temporary file for output\n");
-+ return NULL;
-+ } else close (tfd);
- if ((cmd = build_command_line (file_name, tmp))) {
- if (!system (cmd) && (pdf_file = MFOPEN (tmp, FOPEN_RBIN_MODE))) {
- result = pdf_include_page (pdf_file, p, res_name);
diff --git a/source/t/tetex/tetex.etex.diff b/source/t/tetex/tetex.etex.diff
deleted file mode 100644
index 0f96a17a9..000000000
--- a/source/t/tetex/tetex.etex.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./texk/web2c/fmtutil.cnf.orig 2005-07-17 17:09:33.000000000 -0700
-+++ ./texk/web2c/fmtutil.cnf 2005-07-17 17:11:20.000000000 -0700
-@@ -40,7 +40,7 @@
- # if you want babel support in tex:
- tex tex - -translate-file=cp227.tcx tex.ini
- latex pdfetex language.dat -translate-file=cp227.tcx *latex.ini
--etex pdfetex language.def -translate-file=cp227.tcx *etex.ini
-+etex etex language.def -translate-file=cp227.tcx *etex.ini
- pdftex pdfetex - -translate-file=cp227.tcx *pdftex.ini
- pdflatex pdfetex language.dat -translate-file=cp227.tcx *pdflatex.ini
- pdfetex pdfetex language.def -translate-file=cp227.tcx *pdfetex.ini
diff --git a/source/t/tetex/tetex.fontcachedirinhome.diff b/source/t/tetex/tetex.fontcachedirinhome.diff
deleted file mode 100644
index 11760a4c3..000000000
--- a/source/t/tetex/tetex.fontcachedirinhome.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./texk/kpathsea/texmf.in-teTeX.orig 2005-02-05 18:04:35.000000000 -0600
-+++ ./texk/kpathsea/texmf.in-teTeX 2007-06-27 21:44:36.000000000 -0500
-@@ -119,7 +119,7 @@
- % Where generated fonts may be written. This tree is used when the sources
- % were found in a system tree and either that tree wasn't writable, or the
- % varfonts feature was enabled in MT_FEATURES in mktex.cnf.
--VARTEXFONTS = @vartexfonts@
-+VARTEXFONTS = $TEXMFVAR
-
- % Where to look for ls-R files. There need not be an ls-R in the
- % directories in this path, but if there is one, Kpathsea will use it.
diff --git a/source/t/tetex/tetex.leet.diff b/source/t/tetex/tetex.leet.diff
deleted file mode 100644
index fe251893b..000000000
--- a/source/t/tetex/tetex.leet.diff
+++ /dev/null
@@ -1,25 +0,0 @@
---- ./tex/latex/base/latex.ltx.orig 2004-03-13 20:19:52.000000000 -0600
-+++ ./tex/latex/base/latex.ltx 2010-05-17 12:59:23.000000000 -0500
-@@ -525,11 +525,11 @@
- \advance\count@\month
- \advance\count@-#2\relax}
- \expandafter\reserved@a\fmtversion\@nil
--\ifnum\count@>65
-+\ifnum\count@>16044
- \typeout{^^J%
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
- ! You are attempting to make a LaTeX format from a source file^^J%
--! That is more than five years old.^^J%
-+! That is more than 1337 years old.^^J%
- !^^J%
- ! If you enter <return> to scroll past this message then the format^^J%
- ! will be built, but please consider obtaining newer source files^^J%
-@@ -537,7 +537,7 @@
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
- }
- \errhelp{To avoid this error message, obtain new LaTeX sources.}
-- \errmessage{LaTeX source files more than 5 years old!}
-+ \errmessage{LaTeX source files more than 1337 years old!}
- \fi
- \let\reserved@a\relax
- \fi
diff --git a/source/t/tetex/tetex.png14.diff b/source/t/tetex/tetex.png14.diff
deleted file mode 100644
index 4f6548ace..000000000
--- a/source/t/tetex/tetex.png14.diff
+++ /dev/null
@@ -1,33 +0,0 @@
---- ./texk/dvipdfm/pngimage.c.orig 2002-12-25 11:51:16.000000000 -0600
-+++ ./texk/dvipdfm/pngimage.c 2010-02-19 11:43:18.000000000 -0600
-@@ -42,7 +42,7 @@
- rewind (png_file);
- if (fread (sigbytes, 1, sizeof(sigbytes), png_file) !=
- sizeof(sigbytes) ||
-- (!png_check_sig (sigbytes, sizeof(sigbytes))))
-+ (!(png_sig_cmp(sigbytes, 0, sizeof(sigbytes)) == 0)))
- return 0;
- else
- return 1;
---- ./texk/dvipdfm/thumbnail.c.orig 2002-12-25 11:51:16.000000000 -0600
-+++ ./texk/dvipdfm/thumbnail.c 2010-02-19 11:42:41.000000000 -0600
-@@ -79,7 +79,7 @@
- }
- if (fread (sigbytes, 1, sizeof(sigbytes), thumb_file) !=
- sizeof(sigbytes) ||
-- (!png_check_sig (sigbytes, sizeof(sigbytes)))) {
-+ (!(png_sig_cmp(sigbytes, 0, sizeof(sigbytes)) == 0))) {
- fprintf (stderr, "\nThumbnail not a png file! Skipping\n");
- return NULL;
- }
---- ./libs/gd/gd_png.c.orig 2004-10-28 13:09:52.000000000 -0500
-+++ ./libs/gd/gd_png.c 2010-02-19 11:52:06.000000000 -0600
-@@ -143,7 +143,7 @@
- /* first do a quick check that the file really is a PNG image; could
- * have used slightly more general png_sig_cmp() function instead */
- gdGetBuf (sig, 8, infile);
-- if (!png_check_sig (sig, 8))
-+ if (!(png_sig_cmp(sig, 0, 8) == 0))
- return NULL; /* bad signature */
-
- #ifndef PNG_SETJMP_NOT_SUPPORTED
diff --git a/source/t/tetex/tetex.png16.diff b/source/t/tetex/tetex.png16.diff
deleted file mode 100644
index f2465233d..000000000
--- a/source/t/tetex/tetex.png16.diff
+++ /dev/null
@@ -1,167 +0,0 @@
---- ./texk/web2c/pdftexdir/writeimg.c.orig 2015-03-23 13:18:35.471056383 -0500
-+++ ./texk/web2c/pdftexdir/writeimg.c 2015-03-23 13:30:32.157115740 -0500
-@@ -126,7 +126,7 @@
- {
- switch (img_type(img)) {
- case IMAGE_TYPE_PNG:
-- return png_info(img)->bit_depth;
-+ return png_get_bit_depth(png_ptr(img), png_info(img));
- case IMAGE_TYPE_JPG:
- return jpg_ptr(img)->bits_per_component;
- case IMAGE_TYPE_PDF:
-@@ -346,7 +346,7 @@
- epdf_delete();
- break;
- case IMAGE_TYPE_PNG:
-- xfclose(png_ptr(img)->io_ptr, cur_file_name);
-+ xfclose(png_get_io_ptr(png_ptr(img)), cur_file_name);
- png_destroy_read_struct(&(png_ptr(img)), &(png_info(img)), NULL);
- break;
- case IMAGE_TYPE_JPG:
---- ./texk/web2c/pdftexdir/writepng.c.orig 2015-03-23 13:18:35.471056383 -0500
-+++ ./texk/web2c/pdftexdir/writepng.c 2015-03-23 13:27:58.053102977 -0500
-@@ -34,24 +34,24 @@
- pdftex_fail("libpng: png_create_read_struct() failed");
- if ((png_info(img) = png_create_info_struct(png_ptr(img))) == NULL)
- pdftex_fail("libpng: png_create_info_struct() failed");
-- if (setjmp(png_ptr(img)->jmpbuf))
-+ if (setjmp(png_jmpbuf(png_ptr(img))))
- pdftex_fail("libpng: internal error");
- png_init_io(png_ptr(img), png_file);
- png_read_info(png_ptr(img), png_info(img));
-- if (png_info(img)->color_type & PNG_COLOR_MASK_ALPHA)
-+ if (png_get_color_type(png_ptr(img), png_info(img)) & PNG_COLOR_MASK_ALPHA)
- png_set_strip_alpha(png_ptr(img));
-- if (png_info(img)->bit_depth == 16)
-+ if (png_get_bit_depth(png_ptr(img), png_info(img)) == 16)
- png_set_strip_16(png_ptr(img));
- png_read_update_info(png_ptr(img), png_info(img));
-- img_width(img) = png_info(img)->width;
-- img_height(img) = png_info(img)->height;
-- if (png_info(img)->valid & PNG_INFO_pHYs) {
-+ img_width(img) = png_get_image_width(png_ptr(img), png_info(img));
-+ img_height(img) = png_get_image_height(png_ptr(img), png_info(img));
-+ if (png_get_valid(png_ptr(img), png_info(img), PNG_INFO_pHYs)) {
- img_xres(img) =
- round(0.0254*png_get_x_pixels_per_meter(png_ptr(img), png_info(img)));
- img_yres(img) =
- round(0.0254*png_get_y_pixels_per_meter(png_ptr(img), png_info(img)));
- }
-- switch (png_info(img)->color_type) {
-+ switch (png_get_color_type(png_ptr(img), png_info(img))) {
- case PNG_COLOR_TYPE_PALETTE:
- img_color(img) = IMAGE_COLOR_C | IMAGE_COLOR_I;
- break;
-@@ -64,7 +64,7 @@
- img_color(img) = IMAGE_COLOR_C;
- break;
- default:
-- pdftex_fail("unsupported type of color_type <%i>", png_info(img)->color_type);
-+ pdftex_fail("unsupported type of color_type <%i>", png_get_color_type(png_ptr(img), png_info(img)));
- }
- }
-
-@@ -73,23 +73,26 @@
- int i, j, k, l;
- integer palette_objnum = 0;
- png_bytep row, r, *rows;
-+ png_colorp png_palette;
-+ int num_palette;
-+ png_get_PLTE(png_ptr(img), png_info(img), &png_palette, &num_palette);
- pdf_puts("/Type /XObject\n/Subtype /Image\n");
- pdf_printf("/Width %i\n/Height %i\n/BitsPerComponent %i\n",
-- (int)png_info(img)->width,
-- (int)png_info(img)->height,
-- (int)png_info(img)->bit_depth);
-+ (int)png_get_image_width(png_ptr(img), png_info(img)),
-+ (int)png_get_image_height(png_ptr(img), png_info(img)),
-+ (int)png_get_bit_depth(png_ptr(img), png_info(img)));
- pdf_puts("/ColorSpace ");
- if (img_colorspace_ref(img) != 0) {
- pdf_printf("%i 0 R\n", (int)img_colorspace_ref(img));
- }
- else {
-- switch (png_info(img)->color_type) {
-+ switch (png_get_color_type(png_ptr(img), png_info(img))) {
- case PNG_COLOR_TYPE_PALETTE:
- pdfcreateobj(0, 0);
- palette_objnum = objptr;
- pdf_printf("[/Indexed /DeviceRGB %i %i 0 R]\n",
-- (int)(png_info(img)->num_palette - 1),
-- (int)palette_objnum);
-+ num_palette - 1),
-+ (int)palette_objnum;
- break;
- case PNG_COLOR_TYPE_GRAY:
- case PNG_COLOR_TYPE_GRAY_ALPHA:
-@@ -100,20 +103,20 @@
- pdf_puts("/DeviceRGB\n");
- break;
- default:
-- pdftex_fail("unsupported type of color_type <%i>", png_info(img)->color_type);
-+ pdftex_fail("unsupported type of color_type <%i>", png_get_color_type(png_ptr(img), png_info(img)));
- }
- }
- pdfbeginstream();
-- if (png_info(img)->interlace_type == PNG_INTERLACE_NONE) {
-- row = xtalloc(png_info(img)->rowbytes, png_byte);
-- for (i = 0; i < (int)png_info(img)->height; i++) {
-+ if (png_get_interlace_type(png_ptr(img), png_info(img)) == PNG_INTERLACE_NONE) {
-+ row = xtalloc(png_get_rowbytes(png_ptr(img), png_info(img)), png_byte);
-+ for (i = 0; i < (int)png_get_image_height(png_ptr(img), png_info(img)); i++) {
- png_read_row(png_ptr(img), row, NULL);
- r = row;
-- k = png_info(img)->rowbytes;
-+ k = png_get_rowbytes(png_ptr(img), png_info(img));
- while(k > 0) {
- l = (k > pdfbufsize)? pdfbufsize : k;
- pdfroom(l);
-- for (j = 0; j < l; j++)
-+ for (j = 0; j < (int)png_get_rowbytes(png_ptr(img), png_info(img)); j++)
- pdfbuf[pdfptr++] = *r++;
- k -= l;
- }
-@@ -121,19 +124,19 @@
- xfree(row);
- }
- else {
-- if (png_info(img)->height*png_info(img)->rowbytes >= 10240000L)
-+ if (png_get_image_height(png_ptr(img), png_info(img))*png_get_rowbytes(png_ptr(img), png_info(img)) >= 10240000L)
- pdftex_warn("large interlaced PNG might cause out of memory (use non-interlaced PNG to fix this)");
-- rows = xtalloc(png_info(img)->height, png_bytep);
-- for (i = 0; i < png_info(img)->height; i++)
-- rows[i] = xtalloc(png_info(img)->rowbytes, png_byte);
-+ rows = xtalloc(png_get_image_height(png_ptr(img), png_info(img)), png_bytep);
-+ for (i = 0; i < png_get_image_height(png_ptr(img), png_info(img)); i++)
-+ rows[i] = xtalloc(png_get_rowbytes(png_ptr(img), png_info(img)), png_byte);
- png_read_image(png_ptr(img), rows);
-- for (i = 0; i < (int)png_info(img)->height; i++) {
-+ for (i = 0; i < (int)png_get_image_height(png_ptr(img), png_info(img)); i++) {
- row = rows[i];
-- k = png_info(img)->rowbytes;
-+ k = png_get_rowbytes(png_ptr(img), png_info(img));
- while(k > 0) {
- l = (k > pdfbufsize)? pdfbufsize : k;
-- pdfroom(l);
-- for (j = 0; j < l; j++)
-+ pdfroom(png_get_rowbytes(png_ptr(img), png_info(img)));
-+ for (j = 0; j < (int)png_get_rowbytes(png_ptr(img), png_info(img)); j++)
- pdfbuf[pdfptr++] = *row++;
- k -= l;
- }
-@@ -145,11 +148,11 @@
- if (palette_objnum > 0) {
- pdfbegindict(palette_objnum);
- pdfbeginstream();
-- for (i = 0; i < png_info(img)->num_palette; i++) {
-+ for (i = 0; i < num_palette; i++) {
- pdfroom(3);
-- pdfbuf[pdfptr++] = png_info(img)->palette[i].red;
-- pdfbuf[pdfptr++] = png_info(img)->palette[i].green;
-- pdfbuf[pdfptr++] = png_info(img)->palette[i].blue;
-+ pdfbuf[pdfptr++] = png_palette[i].red;
-+ pdfbuf[pdfptr++] = png_palette[i].green;
-+ pdfbuf[pdfptr++] = png_palette[i].blue;
- }
- pdfendstream();
- }
diff --git a/source/t/tetex/tetex.scripts.mktemp.diff b/source/t/tetex/tetex.scripts.mktemp.diff
deleted file mode 100644
index 7d38869cf..000000000
--- a/source/t/tetex/tetex.scripts.mktemp.diff
+++ /dev/null
@@ -1,244 +0,0 @@
---- tetex-src-3.0/texk/tetex/allcm.badscript 2004-06-20 21:38:02.000000000 +0900
-+++ tetex-src-3.0/texk/tetex/allcm 2005-02-07 15:31:32.578141611 +0900
-@@ -14,7 +14,7 @@
- test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
-
- progname=`basename $0`
--tmpdir=${TMP-/tmp}/$progname.$$
-+tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX`
-
- case "$progname" in
- allec)
-@@ -81,11 +81,6 @@
- exit 1
- ' 1 2 3 7 13 15
-
--(umask 077; mkdir "$tmpdir") || {
-- echo "$progname: failed to create temp directory." >&2
-- exit 1
--}
--
- cd $tmpdir || exit 1
- echo >&2
- echo "---------------------------------------------------------------------" >&2
---- tetex-src-3.0/texk/tetex/fmtutil.badscript 2005-01-30 18:12:16.000000000 +0900
-+++ tetex-src-3.0/texk/tetex/fmtutil 2005-02-07 15:31:32.579141429 +0900
-@@ -105,8 +105,6 @@
-
- trap 'cleanup' 1 2 3 7 13 15
- needsCleanup=true
-- (umask 077; mkdir "$tmpdir") \
-- || abort "could not create directory \`$tmpdir'"
- }
-
- ###############################################################################
-@@ -357,7 +355,7 @@
- need_find_hyphenfile=false
- cfgparam=
- cfgmaint=
-- tmpdir=${TMP-/tmp}/$progname.$$
-+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX`
- verboseFlag=true
-
- # mktexfmtMode: if called as mktexfmt, set to true. Will echo the generated
---- tetex-src-3.0/texk/tetex/texconfig.badscript 2005-02-07 03:20:53.000000000 +0900
-+++ tetex-src-3.0/texk/tetex/texconfig 2005-02-07 15:31:32.581141065 +0900
-@@ -35,7 +35,7 @@
- TEXMFDBS TEXMFINI TEXMFSCRIPTS TEXPICTS TEXPKS TEXPOOL TEXPSHEADERS
- TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS
- "
--tmpdir=${TMP-/tmp}/tctmp.$$
-+tmpdir=`mktemp -d "${TMP-/tmp}/$progname.XXXXXX"` || exit 1
- needsCleanup=false
- lastUpdatedFile=
-
-@@ -214,8 +214,6 @@
-
- trap 'cleanup' 1 2 3 7 13 15
- needsCleanup=true
-- (umask 077; mkdir "$tmpdir") \
-- || abort "could not create directory \`$tmpdir'"
- }
-
- ###############################################################################
---- tetex-src-3.0/texk/tetex/texlinks.badscript 2004-05-11 03:53:38.000000000 +0900
-+++ tetex-src-3.0/texk/tetex/texlinks 2005-02-07 15:31:32.583140701 +0900
-@@ -92,8 +92,6 @@
-
- trap 'cleanup' 1 2 3 7 13 15
- needsCleanup=true
-- (umask 077; mkdir "$tmpdir") \
-- || abort "could not create directory \`$tmpdir'"
- }
-
-
-@@ -209,7 +207,7 @@
- upd_symlinkdir()
- {
- search_symlinkdir || return 0
-- for i in `sed 's@ .*@@' cnf_file_ln.$$`; do
-+ for i in `sed 's@ .*@@' $tmpdir/cnf_file_ln`; do
- install_link "$selfautoloc/$i" "$symlinkdir/$i"
- done
- }
-@@ -253,7 +251,7 @@
- test -f "$cnf_file" || abort "config file \`$cnf' not found"
-
-
-- tmpdir=${TMP-/tmp}/texlinks.$$
-+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || exit 1
- setupTmpDir
- cd "$tmpdir" || {
- false # some systems need this to set nonzero $?
-@@ -261,7 +259,7 @@
- }
-
- sed '/^[ ]*#/d; /^[ ]*$/d' $cnf_file \
-- | awk '{print $1, $2}' > cnf_file_ln.$$
-+ | awk '{print $1, $2}' > $tmpdir/cnf_file_ln
-
- if test -z "$dirs"; then
- if test $multiplatform = true; then
-@@ -279,8 +277,8 @@
- for d in $dirs; do
- kpseaccess -w $d \
- || { errmsg "$d: no write permissions. Skipping..."; continue; }
-- # cnf_file_ln.$$ has lines with "format engine" pairs
-- set x `cat cnf_file_ln.$$`; shift
-+ # $tmpdir/cnf_file_ln has lines with "format engine" pairs
-+ set x `cat $tmpdir/cnf_file_ln`; shift
- while test $# != 0; do
- fmt=$1; engine=$2; shift; shift
-
---- tetex-src-3.0/texk/tetex/updmap.badscript 2005-02-05 06:34:26.000000000 +0900
-+++ tetex-src-3.0/texk/tetex/updmap 2005-02-07 15:31:32.585140338 +0900
-@@ -761,7 +761,6 @@
-
- trap 'cleanup' 1 2 3 7 13 15
- needsCleanup=true
-- mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'"
- }
-
- ###############################################################################
-@@ -1282,7 +1281,8 @@
- dvipsoutputdir=; pdftexoutputdir=; dvipdfmoutputdir=
- : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`}
-
-- tmpdir=${TMP-/tmp}/$progname.$$
-+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \
-+ abort "could not create directory"
- tmp1=$tmpdir/a
- tmp2=$tmpdir/b
- tmp3=$tmpdir/c
---- tetex-src-3.0/texk/kpathsea/mktexlsr.badscript 2005-01-22 04:13:57.000000000 +0900
-+++ tetex-src-3.0/texk/kpathsea/mktexlsr 2005-02-07 15:31:32.586140156 +0900
-@@ -119,9 +119,8 @@
- # Skip if we cannot write the file:
- kpseaccess -w "$db_file" || { echo "$progname: $db_file: no write permission. Skipping..." >&2; continue; }
-
-- db_dir_tmp="$db_dir/lsR$$.tmp"
-- (umask 077 && mkdir "$db_dir_tmp" ) \
-- || { echo "$progname: could not create directory '$db_dir_tmp'. Skipping..." >&2; continue; }
-+ db_dir_tmp=`mktemp -d "$db_dir/lsR.XXXXXX"` \
-+ || { echo "$progname: could not create secure temporary directory. Skipping..." >&2; continue; }
- db_file_tmp="$db_dir_tmp/lsR$$.tmp"
- rm -f "$db_file_tmp"
-
---- tetex-src-3.0/texk/kpathsea/mktexmf.badscript 2005-01-26 02:39:21.000000000 +0900
-+++ tetex-src-3.0/texk/kpathsea/mktexmf 2005-02-07 15:31:32.587139974 +0900
-@@ -87,50 +87,52 @@
- exit 0
- fi
-
-+tmpfile=`mktemp mf.XXXXXX`
-+
- case "$name" in
- ec*|tc*)
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- if unknown exbase: input exbase fi;
- gensize:=$realsize;
- generate $rootname;
- END
- ;;
- dc*)
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- if unknown dxbase: input dxbase fi;
- gensize:=$realsize;
- generate $rootname;
- END
- ;;
- cs*|lcsss*|icscsc*|icstt*|ilcsss*)
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- input cscode
- use_driver;
- END
- ;;
- wn[bcdfirstuv]*|rx[bcdfiorstuvx][bcfhilmostx]*|l[abcdhl][bcdfiorstuvx]*)
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- input fikparm;
- END
- ;;
- g[lmorst][ijmtwx][cilnoru]*)
- # A small superset of the names of the cbgreek fonts.
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- gensize:=$realsize;
- input $rootname;
- END
- ;;
- *)
-- cat > "mf$$.tmp" <<END
-+ cat > "$tmpfile" <<END
- design_size := $realsize;
- input $rootname;
- END
- ;;
- esac
-
--chmod `kpsestat -xst,go-w .` "mf$$.tmp"
-+chmod `kpsestat -xst,go-w .` "$tmpfile"
- rm -f "$mfname"
--mv "mf$$.tmp" "$mfname"
-+mv "$tmpfile" "$mfname"
-
- echo "$destdir/$mfname" >$STDOUT
- echo "$progname: $destdir/$mfname: successfully generated." >&2
---- tetex-src-3.0/texk/dviljk/dvihp.badscript 2002-07-08 02:49:09.000000000 +0900
-+++ tetex-src-3.0/texk/dviljk/dvihp 2005-02-07 15:31:32.588139792 +0900
-@@ -7,9 +7,7 @@
- : ${SPOOL=lpr} # used to print an LJ file
- : ${TMP=/tmp} # for the dvicopy output
-
--TMPDIR="${TMP}"/dvihp$$
--(umask 077; mkdir "$TMPDIR") \
-- || { echo "cannot create directory \`$TMPDIR'."; exit 1; }
-+TMPDIR=`mktemp -d ${TMPDIR}/dvihp.XXXXXX` || { echo "cannot create secure temporary directory."; exit 1; }
-
- trap '
- cd "${TMP}"
---- tetex-src-3.0/texk/dvipdfm/dvipdft.badscript 2004-11-19 06:26:19.000000000 +0900
-+++ tetex-src-3.0/texk/dvipdfm/dvipdft 2005-02-07 15:31:32.589139610 +0900
-@@ -31,7 +31,7 @@
- $progname --help
- $progname --version"
-
--tmpdir=${TMP-/tmp}/$progname.$$
-+tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX`
-
- quoteit()
- {
---- tetex-src-3.0/texk/xdvik/xdvizilla.badscript 2004-02-25 08:08:56.000000000 +0900
-+++ tetex-src-3.0/texk/xdvik/xdvizilla 2005-02-07 15:31:32.590139429 +0900
-@@ -61,7 +61,7 @@
- trap 'do_cleanup' 1 2 3 7 13 15
-
- ### create a temporary directory only read/writable by user
--TMP_DIR=${TMP-/tmp}/$progname.$$
-+TMP_DIR=`mktmp -d ${TMP-/tmp}/$progname.XXXXXX`
- (umask 077; mkdir "$TMP_DIR") || do_abort "Could not create directory \`$TMP_DIR'"
-
- if [ $# -gt 1 -a "x$1" = "x-no-rm" ]; then
diff --git a/source/t/tetex/tetex.tmp.cleanup.diff b/source/t/tetex/tetex.tmp.cleanup.diff
deleted file mode 100644
index e2fb56ea1..000000000
--- a/source/t/tetex/tetex.tmp.cleanup.diff
+++ /dev/null
@@ -1,51 +0,0 @@
---- tetex-src-3.0/texk/tetex/texconfig.tmpcleanup 2005-11-04 11:19:47.000000000 +0100
-+++ tetex-src-3.0/texk/tetex/texconfig 2005-11-04 14:22:18.000000000 +0100
-@@ -36,7 +36,8 @@
- TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS
- "
- tmpdir=`mktemp -d "${TMP-/tmp}/$progname.XXXXXX"` || exit 1
--needsCleanup=false
-+trap -- "cleanup;" EXIT 1 2 3 7 13 15
-+needsCleanup=true
- lastUpdatedFile=
-
- ###############################################################################
---- tetex-src-3.0/texk/tetex/updmap.tmpcleanup 2005-11-04 11:19:47.000000000 +0100
-+++ tetex-src-3.0/texk/tetex/updmap 2005-11-04 14:22:18.000000000 +0100
-@@ -1274,7 +1274,7 @@
- texhashEnabled=true
- mkmapEnabled=true
- verbose=true
-- needsCleanup=false
-+ needsCleanup=true
-
- cnfFileShort=updmap.cfg
- cnfFile=
-@@ -1282,7 +1282,8 @@
- : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`}
-
- tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \
-- abort "could not create directory"
-+ abort "could not create temporary directory"
-+ trap -- "cleanup;" EXIT 1 2 3 7 13 15
- tmp1=$tmpdir/a
- tmp2=$tmpdir/b
- tmp3=$tmpdir/c
---- tetex-src-3.0/texk/tetex/fmtutil.tmpcleanup 2005-11-04 11:19:47.000000000 +0100
-+++ tetex-src-3.0/texk/tetex/fmtutil 2005-11-04 14:22:18.000000000 +0100
-@@ -351,11 +351,13 @@
- destdir= # global variable: where do we put the format files?
- cnf_file= # global variable: full name of the config file
- cmd= # desired action from command line
-- needsCleanup=false
-+ needsCleanup=true
- need_find_hyphenfile=false
- cfgparam=
- cfgmaint=
-- tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX`
-+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \
-+ abort "could not create temporary directory"
-+ trap -- "cleanup;" EXIT 1 2 3 7 13 15
- verboseFlag=true
-
- # mktexfmtMode: if called as mktexfmt, set to true. Will echo the generated
diff --git a/source/t/tetex/tetex.var.fonts.diff b/source/t/tetex/tetex.var.fonts.diff
deleted file mode 100644
index 9535ac6fa..000000000
--- a/source/t/tetex/tetex.var.fonts.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- teTeX-1.0/texk/make/paths.mk.varconfig Sun Jan 10 16:42:53 1999
-+++ teTeX-1.0/texk/make/paths.mk Wed Aug 25 19:18:13 1999
-@@ -46,7 +46,7 @@
- texmf = @texmfmain@
-
- # The directory used by varfonts.
--vartexfonts = /var/tmp/texfonts
-+vartexfonts = /var/lib/texmf
-
- # Regular input files.
- texinputdir = $(texmf)/tex
diff --git a/source/t/texlive/README.tlpkg b/source/t/texlive/README.tlpkg
new file mode 100644
index 000000000..35c25dd25
--- /dev/null
+++ b/source/t/texlive/README.tlpkg
@@ -0,0 +1,18 @@
+The TeXLive Package Manager, i.e. tlmgr(1), is not shipped with this
+TeXLive package, as it's not expected to work properly (if at all).
+The general consensus from the TeXLive users mailing list is that
+distributions should not be shipping tlpkg.
+
+The *proper* way to upgrade the TeXLive Slackware package (or any
+part of it) is through your Slackware's package manager. If you
+elect to try tlmgr(1), and it doesn't work at all, or worse, it messes
+up part of your TeXLive installation, too bad. On the other hand,
+if you are able to document exactly what we need to do in order to
+make it:
+ 1) work
+ 2) put updates and such in a user-specific directory, i.e.
+ *not* alter/replace system package contents
+then we would love to hear from you. :-)
+
+--rworkman :-)
+
diff --git a/source/t/texlive/doinst.sh b/source/t/texlive/doinst.sh
new file mode 100644
index 000000000..f864e767d
--- /dev/null
+++ b/source/t/texlive/doinst.sh
@@ -0,0 +1,5 @@
+chroot . /usr/bin/mktexlsr 1>/dev/null 2>/dev/null
+printf "y\n" | chroot . /usr/bin/updmap-sys --syncwithtrees 1>/dev/null 2>/dev/null
+chroot . /usr/bin/updmap-sys 1>/dev/null 2>/dev/null
+chroot . /usr/bin/fmtutil-sys --all 1>/dev/null 2>/dev/null
+chroot . /usr/bin/mtxrun --generate 1>/dev/null 2>/dev/null
diff --git a/source/t/texlive/dump.unused.internal.libraries.from.sources.sh b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh
new file mode 100755
index 000000000..71ab0b53d
--- /dev/null
+++ b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Repacks the texlive tarball to remove unused sources.
+
+VERSION=${VERSION:-$(echo texlive-*source.tar.?z* | rev | cut -f 2 -d - | cut -f 1 -d - | rev)}
+
+tar xf texlive-${VERSION}-source.tar.xz || exit 1
+mv texlive-${VERSION}-source.tar.xz texlive-${VERSION}-source.tar.xz.orig
+( cd texlive-${VERSION}-source/libs && rm -rf cairo freetype2 gd gmp mpfr icu libpng pixman zlib )
+( cd texlive-${VERSION}-source/utils && rm -rf asymptote )
+tar cf texlive-${VERSION}-source.tar texlive-${VERSION}-source
+rm -r texlive-${VERSION}-source
+#xz -9 texlive-${VERSION}-source.tar
+xz texlive-${VERSION}-source.tar
+touch -r texlive-${VERSION}-source.tar.xz.orig texlive-${VERSION}-source.tar.xz
+rm texlive-${VERSION}-source.tar.xz.orig
diff --git a/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch b/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch
new file mode 100644
index 000000000..c2d3521a5
--- /dev/null
+++ b/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch
@@ -0,0 +1,33 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2017-06-05
+Initial Package Version: 20170524
+Upstream Status: Unknown
+Origin: http://tug.org/pipermail/tex-live/2017-June/040192.html
+Description: From Dr. Werner Fink of SuSe, fixes compilation with gcc-7.1
+
+diff -Naur texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ctype.c texlive-20170524-source/texk/web2c/luatexdir/luaffi/ctype.c
+--- texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ctype.c 2017-02-10 01:03:59.000000000 +0000
++++ texlive-20170524-source/texk/web2c/luatexdir/luaffi/ctype.c 2017-06-05 02:32:34.548531839 +0100
+@@ -245,6 +245,10 @@
+
+ lua_pop(L, 1); /* mt */
+ cd = (struct cdata*) lua_touserdata(L, idx);
++ if (!cd) {
++ lua_pushnil(L);
++ return NULL;
++ }
+ *ct = cd->type;
+ lua_getuservalue(L, idx);
+
+diff -Naur texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ffi.h texlive-20170524-source/texk/web2c/luatexdir/luaffi/ffi.h
+--- texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ffi.h 2017-03-11 01:04:06.000000000 +0000
++++ texlive-20170524-source/texk/web2c/luatexdir/luaffi/ffi.h 2017-06-05 02:32:34.548531839 +0100
+@@ -370,7 +370,7 @@
+ #endif
+ struct cdata {
+ const struct ctype type
+-#ifdef __GNUC__
++#if 0 /* def __GNUC__ */
+ __attribute__ ((aligned(16)))
+ #endif
+ ;
diff --git a/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch b/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch
new file mode 100644
index 000000000..e4ea52e28
--- /dev/null
+++ b/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch
@@ -0,0 +1,451 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2017-06-13
+Initial Package Version: 2017-05-25
+Upstream Status: Applied
+Origin: Upstream
+Description: Consolidated fixes for luatex.
+
+1. Removes debugging code which was accidentally left in
+luatex, which made the (infrequently needed) io.popen useless. Also
+disables io.saved_popen and changes the reported date of the luatex
+version.
+
+2. Fix for io.lines (fixed in r44572).
+
+diff -Naur a/texk/web2c/luatexdir/lua/liolibext.c b/texk/web2c/luatexdir/lua/liolibext.c
+--- a/texk/web2c/luatexdir/lua/liolibext.c 2017-03-11 01:04:06.000000000 +0000
++++ b/texk/web2c/luatexdir/lua/liolibext.c 2017-06-11 01:49:11.813308882 +0100
+@@ -365,7 +365,7 @@
+ lua_pushliteral(L,"all command execution is disabled");
+ } else if (restrictedshell == 0) {
+ lua_pushboolean(L,1);
+- lua_pushliteral(L,"all commands are permitted");
++ lua_pushstring(L,filename);
+ } else {
+ char *safecmd = NULL;
+ char *cmdname = NULL;
+@@ -374,10 +374,6 @@
+ lua_pushboolean(L,0);
+ lua_pushliteral(L, "specific command execution disabled");
+ break;
+- case 1:
+- lua_pushboolean(L,1);
+- lua_pushstring(L,filename);
+- break;
+ case 2:
+ lua_pushboolean(L,1);
+ lua_pushstring(L,safecmd);
+diff -Naur a/texk/web2c/luatexdir/lua/luatex-core.c b/texk/web2c/luatexdir/lua/luatex-core.c
+--- a/texk/web2c/luatexdir/lua/luatex-core.c 2017-04-19 11:07:10.000000000 +0100
++++ b/texk/web2c/luatexdir/lua/luatex-core.c 2017-06-12 19:34:37.320003411 +0100
+@@ -52,7 +52,7 @@
+ 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6f, 0x5f,
+ 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73,
+ 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64,
+ 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x69,
+@@ -84,169 +84,175 @@
+ 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x2d, 0x2d, 0x20,
+ 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64,
+- 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f,
+- 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20,
+- 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76,
+- 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d,
+- 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c,
+- 0x79, 0x0a, 0x6d, 0x74, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74,
+- 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73,
+- 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+- 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78,
+- 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f,
+- 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x6f,
+- 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68,
+- 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69,
++ 0x0a, 0x2d, 0x2d, 0x20, 0x28, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72,
++ 0x20, 0x74, 0x6c, 0x31, 0x37, 0x20, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x29, 0x20, 0x69,
++ 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x70, 0x6f,
++ 0x70, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72,
++ 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64,
++ 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20,
++ 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a,
++ 0x6d, 0x74, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x5f, 0x6c,
++ 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72,
++ 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66,
++ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69,
+ 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x68,
+- 0x6f, 0x77, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20,
+- 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x77, 0x27,
+- 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c,
+- 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63,
+- 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65,
+- 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+- 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65,
+- 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e,
+- 0x6c, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27,
+- 0x5b, 0x5e, 0x72, 0x62, 0x5d, 0x27, 0x2c, 0x27, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20,
+- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x6f, 0x77, 0x20,
++ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77,
++ 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f,
+ 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66,
+- 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65,
+- 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c,
+- 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f,
+- 0x6b, 0x61, 0x79, 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f,
+- 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+- 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x6b,
+- 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
+- 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+- 0x20, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2c,
+- 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+- 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+- 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73,
+- 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+- 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d,
+- 0x65, 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20,
+- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+- 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x68, 0x6f, 0x77,
++ 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x61, 0x6e,
++ 0x64, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x20,
++ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e,
++ 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72,
++ 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27,
++ 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
++ 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f,
++ 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79,
++ 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
++ 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f,
++ 0x77, 0x20, 0x3d, 0x20, 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x5b, 0x5e,
++ 0x72, 0x62, 0x5d, 0x27, 0x2c, 0x27, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x74, 0x68,
++ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68,
++ 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70,
++ 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c,
++ 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
++ 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f,
++ 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x2e, 0x2e,
++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x6b, 0x61,
++ 0x79, 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x63,
++ 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x6e,
++ 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x6b, 0x61, 0x79,
++ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69,
++ 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2c, 0x2e, 0x2e,
++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a,
++ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c,
++ 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x28, 0x6e,
++ 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
++ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f,
++ 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x20, 0x6f, 0x72, 0x20,
++ 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
++ 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
++ 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f,
++ 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
++ 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
++ 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75,
++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f,
++ 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
++ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+- 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78,
+- 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+- 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e,
+- 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+- 0x0a, 0x0a, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61,
+- 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x6d, 0x74, 0x2e,
+- 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69,
+- 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x57,
+- 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d,
+- 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+- 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+- 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x20, 0x54,
+- 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x61,
+- 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x54, 0x65, 0x58, 0x74, 0x2e, 0x0a, 0x0a,
+- 0x69, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x31,
+- 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70,
+- 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f,
+- 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65,
+- 0x6e, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f,
+- 0x70, 0x65, 0x6e, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66,
+- 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68,
+- 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+- 0x74, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e,
+- 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e,
+- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76,
+- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x74,
+- 0x65, 0x6d, 0x70, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e,
+- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20,
+- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e,
+- 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e,
+- 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69,
+- 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e,
+- 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20,
+- 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b,
+- 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73,
+- 0x2e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e,
+- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72,
+- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e,
+- 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x69,
+- 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6f,
+- 0x70, 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f,
+- 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a,
+- 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f, 0x70, 0x74,
+- 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x68, 0x65, 0x6c,
+- 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x7e, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, 0x65,
+- 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71,
+- 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x66, 0x69, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x6e, 0x65, 0x78, 0x74,
+- 0x2c, 0x20, 0x66, 0x66, 0x69, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x69, 0x66, 0x20, 0x6b, 0x20, 0x7e, 0x3d, 0x20, 0x27, 0x67, 0x63, 0x27, 0x20, 0x74, 0x68,
+- 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66,
+- 0x66, 0x69, 0x5b, 0x6b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x65,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6f, 0x73, 0x2e, 0x5b, 0x65, 0x78, 0x65, 0x63, 0x75,
+- 0x74, 0x65, 0x7c, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x7c, 0x6f, 0x73, 0x2e, 0x65,
+- 0x78, 0x65, 0x63, 0x5d, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x72, 0x65,
+- 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x61, 0x77, 0x61,
+- 0x72, 0x65, 0x29, 0x0a, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6d, 0x64, 0x35, 0x20, 0x74, 0x68, 0x65,
+- 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x6d,
+- 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x73, 0x75, 0x62, 0x20, 0x20, 0x20, 0x3d,
+- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x3d, 0x20,
+- 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x20, 0x20, 0x3d,
+- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73,
+- 0x75, 0x6d, 0x68, 0x65, 0x78, 0x61, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73,
+- 0x75, 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+- 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+- 0x74, 0x28, 0x22, 0x25, 0x30, 0x32, 0x78, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e,
+- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x48, 0x45, 0x58,
+- 0x41, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+- 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x75, 0x6d, 0x28, 0x6b, 0x29,
+- 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+- 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+- 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x30,
+- 0x32, 0x58, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00
++ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69,
++ 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78,
++ 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x6d, 0x74, 0x2e, 0x6c, 0x69, 0x6e,
++ 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x72,
++ 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x57, 0x65, 0x20, 0x61,
++ 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
++ 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20,
++ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
++ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73,
++ 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20,
++ 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x54, 0x65, 0x58, 0x74, 0x2e, 0x0a, 0x0a, 0x69, 0x66, 0x20,
++ 0x6b, 0x70, 0x73, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68,
++ 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20,
++ 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65,
++ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d,
++ 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e,
++ 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f,
++ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20,
++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61,
++ 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f,
++ 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x20, 0x3d,
++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x6d, 0x70,
++ 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
++ 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x3d,
++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6e,
++ 0x61, 0x6d, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f,
++ 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69, 0x6c, 0x65, 0x20,
++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x75, 0x74,
++ 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x20, 0x20,
++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x74, 0x6f,
++ 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
++ 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d,
++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76,
++ 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65,
++ 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e,
++ 0x6c, 0x79, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65,
++ 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20,
++ 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x7e, 0x3d, 0x20, 0x31,
++ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d,
++ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x66, 0x69, 0x27, 0x29, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20,
++ 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x20, 0x7e, 0x3d, 0x20, 0x27, 0x67, 0x63,
++ 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5b, 0x6b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69,
++ 0x6c, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6f, 0x73, 0x2e, 0x5b, 0x65,
++ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x7c, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x7c,
++ 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x5d, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79,
++ 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65,
++ 0x20, 0x61, 0x77, 0x61, 0x72, 0x65, 0x29, 0x0a, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6d, 0x64, 0x35,
++ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
++ 0x20, 0x73, 0x75, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75,
++ 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x73, 0x75, 0x62,
++ 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61,
++ 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
++ 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65,
++ 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x79, 0x74, 0x65,
++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,
++ 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x68, 0x65, 0x78, 0x61, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73,
++ 0x75, 0x62, 0x28, 0x73, 0x75, 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20,
++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66,
++ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x30, 0x32, 0x78, 0x22, 0x2c, 0x62, 0x79, 0x74,
++ 0x65, 0x28, 0x63, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
++ 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75,
++ 0x6d, 0x48, 0x45, 0x58, 0x41, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x75,
++ 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
++ 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
++ 0x28, 0x22, 0x25, 0x30, 0x32, 0x58, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, 0x29,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00
+ };
+ return luaL_dostring(L, (const char*) luatex_core_lua);
+ }
+\ No newline at end of file
+diff -Naur a/texk/web2c/luatexdir/lua/luatex-core.lua b/texk/web2c/luatexdir/lua/luatex-core.lua
+--- a/texk/web2c/luatexdir/lua/luatex-core.lua 2017-04-19 11:07:10.000000000 +0100
++++ b/texk/web2c/luatexdir/lua/luatex-core.lua 2017-06-12 19:34:37.320003411 +0100
+@@ -16,7 +16,7 @@
+
+ local io_open = io.open
+ local io_popen = io.popen
+-local io_line = io.lines
++local io_lines = io.lines
+
+ local fio_readline = fio.readline
+ local fio_checkpermission = fio.checkpermission
+@@ -29,7 +29,7 @@
+ local kpseused = status.kpse_used -- 0 1
+
+ io.saved_open = io_open -- can be protected
+-io.saved_popen = io_popen -- can be protected
++-- (deleted for tl17 rebuild) io.saved_popen = io_popen -- can be protected
+ io.saved_lines = io_lines -- always readonly
+ mt.saved_lines = mt_lines -- always readonly
+
+@@ -71,12 +71,16 @@
+ end
+ end
+
+-local function luatex_io_lines(name)
+- local f = io_open(name,'r')
+- if f then
+- return function()
+- return fio_readline(f)
++local function luatex_io_lines(name,how)
++ if name then
++ local f = io_open(name,how or 'r')
++ if f then
++ return function()
++ return fio_readline(f)
++ end
+ end
++ else
++ return io_lines()
+ end
+ end
+
+@@ -122,7 +126,6 @@
+ lfs.rmdir = nil
+ lfs.mkdir = nil
+
+- io.saved_popen = nil
+ io.saved_open = luatex_io_open_readonly
+
+ end
+diff -Naur a/texk/web2c/luatexdir/luatex.c b/texk/web2c/luatexdir/luatex.c
+--- a/texk/web2c/luatexdir/luatex.c 2017-03-31 14:27:09.000000000 +0100
++++ b/texk/web2c/luatexdir/luatex.c 2017-06-11 01:49:11.813308882 +0100
+@@ -28,9 +28,11 @@
+
+ #define TeX
+
++/* for tl17 update, change luatex_date_info but nothing else,
++ as context depends on the numeric version number. */
+ int luatex_version = 100; /* \.{\\luatexversion} */
+ int luatex_revision = '4'; /* \.{\\luatexrevision} */
+-int luatex_date_info = 2017033109; /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
++int luatex_date_info = 2017060901; /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
+ const char *luatex_version_string = "1.0.4";
+ const char *engine_name = my_name; /* the name of this engine */
+
diff --git a/source/t/texlive/patches/texlive-poppler-0.59.patch b/source/t/texlive/patches/texlive-poppler-0.59.patch
new file mode 100644
index 000000000..401315a64
--- /dev/null
+++ b/source/t/texlive/patches/texlive-poppler-0.59.patch
@@ -0,0 +1,1142 @@
+diff -ur source.orig/texk/web2c/luatexdir/image/pdftoepdf.w source/texk/web2c/luatexdir/image/pdftoepdf.w
+--- source.orig/texk/web2c/luatexdir/image/pdftoepdf.w 2017-05-08 22:39:36.639375783 +0200
++++ source/texk/web2c/luatexdir/image/pdftoepdf.w 2017-09-19 11:23:36.586768739 +0200
+@@ -224,7 +224,7 @@
+ free(checksum);
+ }
+ if (pdf_doc->doc == NULL) {
+- docmemstream = new MemStream( docstream,0,streamsize, obj.initNull() );
++ docmemstream = new MemStream( docstream,0,streamsize, Object(objNull) );
+ doc = new PDFDoc(docmemstream); /* takes ownership of docmemstream */
+ pdf_doc->pc++;
+ if (!doc->isOk() || !doc->okToPrint()) {
+@@ -408,9 +408,8 @@
+ Object obj1;
+ pdf_begin_array(pdf);
+ for (i = 0, l = array->getLength(); i < l; ++i) {
+- array->getNF(i, &obj1);
++ obj1 = array->getNF(i);
+ copyObject(pdf, pdf_doc, &obj1);
+- obj1.free();
+ }
+ pdf_end_array(pdf);
+ }
+@@ -422,9 +421,8 @@
+ pdf_begin_dict(pdf);
+ for (i = 0, l = dict->getLength(); i < l; ++i) {
+ copyName(pdf, dict->getKey(i));
+- dict->getValNF(i, &obj1);
++ obj1 = dict->getValNF(i);
+ copyObject(pdf, pdf_doc, &obj1);
+- obj1.free();
+ }
+ pdf_end_dict(pdf);
+ }
+@@ -510,13 +508,12 @@
+ PDFDoc *doc = pdf_doc->doc;
+ xref = doc->getXRef();
+ for (r = pdf_doc->inObjList; r != NULL;) {
+- xref->fetch(r->ref.num, r->ref.gen, &obj1);
++ obj1 = xref->fetch(r->ref.num, r->ref.gen);
+ if (obj1.isStream())
+ pdf_begin_obj(pdf, r->num, OBJSTM_NEVER);
+ else
+ pdf_begin_obj(pdf, r->num, 2);
+ copyObject(pdf, pdf_doc, &obj1);
+- obj1.free();
+ pdf_end_obj(pdf);
+ n = r->next;
+ delete r;
+@@ -740,7 +737,7 @@
+ catalog = doc->getCatalog();
+ page = catalog->getPage(img_pagenum(idict));
+ pageref = catalog->getPageRef(img_pagenum(idict));
+- doc->getXRef()->fetch(pageref->num, pageref->gen, &pageobj);
++ pageobj = doc->getXRef()->fetch(pageref->num, pageref->gen);
+ pageDict = pageobj.getDict();
+ /* write the Page header */
+ pdf_begin_obj(pdf, img_objnum(idict), OBJSTM_NEVER);
+@@ -757,12 +754,11 @@
+ pdf_dict_add_int(pdf, "PTEX.PageNumber", (int) img_pagenum(idict));
+ }
+ if ((suppress_optional_info & 8) == 0) {
+- doc->getDocInfoNF(&obj1);
++ obj1 = doc->getDocInfoNF();
+ if (obj1.isRef()) {
+ /* the info dict must be indirect (PDF Ref p. 61) */
+ pdf_dict_add_ref(pdf, "PTEX.InfoDict", addInObj(pdf, pdf_doc, obj1.getRef()));
+ }
+- obj1.free();
+ }
+ if (img_is_bbox(idict)) {
+ bbox[0] = sp2bp(img_bbox(idict)[0]);
+@@ -788,19 +784,17 @@
+ Now all relevant parts of the Page dictionary are copied. Metadata validity
+ check is needed(as a stream it must be indirect).
+ */
+- pageDict->lookupNF("Metadata", &obj1);
++ obj1 = pageDict->lookupNF("Metadata");
+ if (!obj1.isNull() && !obj1.isRef())
+ formatted_warning("pdf inclusion","/Metadata must be indirect object");
+- obj1.free();
+ /* copy selected items in Page dictionary */
+ for (i = 0; pagedictkeys[i] != NULL; i++) {
+- pageDict->lookupNF(pagedictkeys[i], &obj1);
++ obj1 = pageDict->lookupNF(pagedictkeys[i]);
+ if (!obj1.isNull()) {
+ pdf_add_name(pdf, pagedictkeys[i]);
+ /* preserves indirection */
+ copyObject(pdf, pdf_doc, &obj1);
+ }
+- obj1.free();
+ }
+ /*
+ If there are no Resources in the Page dict of the embedded page,
+@@ -808,32 +802,28 @@
+ PDF file, climbing up the tree until the Resources are found.
+ (This fixes a problem with Scribus 1.3.3.14.)
+ */
+- pageDict->lookupNF("Resources", &obj1);
++ obj1 = pageDict->lookupNF("Resources");
+ if (obj1.isNull()) {
+ op1 = &pagesobj1;
+ op2 = &pagesobj2;
+- pageDict->lookup("Parent", op1);
++ *op1 = pageDict->lookup("Parent");
+ while (op1->isDict()) {
+- obj1.free();
+- op1->dictLookupNF("Resources", &obj1);
++ obj1 = op1->dictLookupNF("Resources");
+ if (!obj1.isNull()) {
+ pdf_add_name(pdf, "Resources");
+ copyObject(pdf, pdf_doc, &obj1);
+ break;
+ }
+- op1->dictLookup("Parent", op2);
++ *op2 = op1->dictLookup("Parent");
+ optmp = op1;
+ op1 = op2;
+ op2 = optmp;
+- op2->free();
+ };
+ if (!op1->isDict())
+ formatted_warning("pdf inclusion","Page /Resources missing");
+- op1->free();
+ }
+- obj1.free();
+ /* Write the Page contents. */
+- page->getContents(&contents);
++ contents = page->getContents();
+ if (contents.isStream()) {
+ /*
+ Variant A: get stream and recompress under control of \pdfcompresslevel
+@@ -844,27 +834,23 @@
+
+ Variant B: copy stream without recompressing
+ */
+- contents.streamGetDict()->lookup("F", &obj1);
++ obj1 = contents.streamGetDict()->lookup("F");
+ if (!obj1.isNull()) {
+ normal_error("pdf inclusion","unsupported external stream");
+ }
+- obj1.free();
+- contents.streamGetDict()->lookup("Length", &obj1);
++ obj1 = contents.streamGetDict()->lookup("Length");
+ pdf_add_name(pdf, "Length");
+ copyObject(pdf, pdf_doc, &obj1);
+- obj1.free();
+- contents.streamGetDict()->lookup("Filter", &obj1);
++ obj1 = contents.streamGetDict()->lookup("Filter");
+ if (!obj1.isNull()) {
+ pdf_add_name(pdf, "Filter");
+ copyObject(pdf, pdf_doc, &obj1);
+- obj1.free();
+- contents.streamGetDict()->lookup("DecodeParms", &obj1);
++ obj1 = contents.streamGetDict()->lookup("DecodeParms");
+ if (!obj1.isNull()) {
+ pdf_add_name(pdf, "DecodeParms");
+ copyObject(pdf, pdf_doc, &obj1);
+ }
+ }
+- obj1.free();
+ pdf_end_dict(pdf);
+ pdf_begin_stream(pdf);
+ copyStreamStream(pdf, contents.getStream()->getUndecodedStream());
+@@ -875,8 +861,8 @@
+ pdf_end_dict(pdf);
+ pdf_begin_stream(pdf);
+ for (i = 0, l = contents.arrayGetLength(); i < l; ++i) {
+- copyStreamStream(pdf, (contents.arrayGet(i, &obj1))->getStream());
+- obj1.free();
++ obj1 = contents.arrayGet(i);
++ copyStreamStream(pdf, obj1.getStream());
+ if (i < (l - 1)) {
+ /*
+ Put a space between streams to be on the safe side (streams
+@@ -897,8 +883,6 @@
+ }
+ /* write out all indirect objects */
+ writeRefs(pdf, pdf_doc);
+- contents.free();
+- pageobj.free();
+ /*
+ unrefPdfDocument() must come after contents.free() and pageobj.free()!
+ TH: The next line makes repeated pdf inclusion unacceptably slow
+diff -ur source.orig/texk/web2c/luatexdir/lua/lepdflib.cc source/texk/web2c/luatexdir/lua/lepdflib.cc
+--- source.orig/texk/web2c/luatexdir/lua/lepdflib.cc 2017-05-08 22:39:36.689375107 +0200
++++ source/texk/web2c/luatexdir/lua/lepdflib.cc 2017-09-19 09:48:19.658021769 +0200
+@@ -538,7 +538,7 @@
+ pdfdoc_changed_error(L); \
+ uout = new_Object_userdata(L); \
+ uout->d = new Object(); \
+- ((in *) uin->d)->function((Object *) uout->d); \
++ *((Object *)uout->d) = ((in *) uin->d)->function(); \
+ uout->atype = ALLOC_LEPDF; \
+ uout->pc = uin->pc; \
+ uout->pd = uin->pd; \
+@@ -668,13 +668,11 @@
+
+ static int m_Array_incRef(lua_State * L)
+ {
+- int i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Array);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- i = ((Array *) uin->d)->incRef();
+- lua_pushinteger(L, i);
++ lua_pushinteger(L, 1);
+ return 1;
+ }
+
+@@ -685,8 +683,7 @@
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Array);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- i = ((Array *) uin->d)->decRef();
+- lua_pushinteger(L, i);
++ lua_pushinteger(L, 1);
+ return 1;
+ }
+
+@@ -702,7 +699,7 @@
+ if ((uin->pd != NULL && uin->pd->pc != uin->pc)
+ || (uobj->pd != NULL && uobj->pd->pc != uobj->pc))
+ pdfdoc_changed_error(L);
+- ((Array *) uin->d)->add(((Object *) uobj->d));
++ ((Array *) uin->d)->add(std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -718,7 +715,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Array *) uin->d)->get(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Array *) uin->d)->get(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -739,7 +736,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Array *) uin->d)->getNF(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -953,25 +950,21 @@
+
+ static int m_Dict_incRef(lua_State * L)
+ {
+- int i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Dict);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- i = ((Dict *) uin->d)->incRef();
+- lua_pushinteger(L, i);
++ lua_pushinteger(L, 1);
+ return 1;
+ }
+
+ static int m_Dict_decRef(lua_State * L)
+ {
+- int i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Dict);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- i = ((Dict *) uin->d)->decRef();
+- lua_pushinteger(L, i);
++ lua_pushinteger(L, 1);
+ return 1;
+ }
+
+@@ -986,7 +979,7 @@
+ pdfdoc_changed_error(L);
+ s = copyString(luaL_checkstring(L, 2));
+ uobj = (udstruct *) luaL_checkudata(L, 3, M_Object);
+- ((Dict *) uin->d)->add(s, ((Object *) uobj->d));
++ ((Dict *) uin->d)->add(s, std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -999,7 +992,7 @@
+ pdfdoc_changed_error(L);
+ s = luaL_checkstring(L, 2);
+ uobj = (udstruct *) luaL_checkudata(L, 3, M_Object);
+- ((Dict *) uin->d)->set(s, ((Object *) uobj->d));
++ ((Dict *) uin->d)->set(s, std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -1027,7 +1020,7 @@
+ s = luaL_checkstring(L, 2);
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Dict *) uin->d)->lookup(s, (Object *) uout->d);
++ *((Object *) uout->d) = ((Dict *) uin->d)->lookup(s);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1044,7 +1037,7 @@
+ s = luaL_checkstring(L, 2);
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Dict *) uin->d)->lookupNF(s, (Object *) uout->d);
++ *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1096,7 +1089,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Dict *) uin->d)->getVal(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Dict *) uin->d)->getVal(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1117,7 +1110,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Dict *) uin->d)->getValNF(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1381,9 +1374,9 @@
+ pdfdoc_changed_error(L);
+ luaL_checktype(L, 2, LUA_TBOOLEAN);
+ if (lua_toboolean(L, 2) != 0)
+- ((Object *) uin->d)->initBool(gTrue);
++ *((Object *) uin->d) = Object(gTrue);
+ else
+- ((Object *) uin->d)->initBool(gFalse);
++ *((Object *) uin->d) = Object(gFalse);
+ return 0;
+ }
+
+@@ -1395,7 +1388,7 @@
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = luaL_checkint(L, 2);
+- ((Object *) uin->d)->initInt(i);
++ *((Object *) uin->d) = Object(i);
+ return 0;
+ }
+
+@@ -1407,7 +1400,7 @@
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ d = luaL_checknumber(L, 2);
+- ((Object *) uin->d)->initReal(d);
++ *((Object *) uin->d) = Object(d);
+ return 0;
+ }
+
+@@ -1422,7 +1415,7 @@
+ pdfdoc_changed_error(L);
+ s = luaL_checklstring(L, 2, &len);
+ gs = new GooString(s, len);
+- ((Object *) uin->d)->initString(gs);
++ *((Object *) uin->d) = Object(gs);
+ return 0;
+ }
+
+@@ -1434,7 +1427,7 @@
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ s = luaL_checkstring(L, 2);
+- ((Object *) uin->d)->initName(s);
++ *((Object *) uin->d) = Object(objName, s);
+ return 0;
+ }
+
+@@ -1444,13 +1437,14 @@
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Object);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initNull();
++ *((Object *) uin->d) = Object(objNull);
+ return 0;
+ }
+
+ static int m_Object_initArray(lua_State * L)
+ {
+ udstruct *uin, *uxref;
++ Array *a;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Object);
+ uxref = (udstruct *) luaL_checkudata(L, 2, M_XRef);
+ if (uin->pd != NULL && uxref->pd != NULL && uin->pd != uxref->pd)
+@@ -1458,7 +1452,8 @@
+ if ((uin->pd != NULL && uin->pd->pc != uin->pc)
+ || (uxref->pd != NULL && uxref->pd->pc != uxref->pc))
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initArray((XRef *) uxref->d);
++ a = new Array((XRef *) uxref->d);
++ *((Object *) uin->d) = Object(a);
+ return 0;
+ }
+
+@@ -1469,6 +1464,7 @@
+ static int m_Object_initDict(lua_State * L)
+ {
+ udstruct *uin, *uxref;
++ Dict *d;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Object);
+ uxref = (udstruct *) luaL_checkudata(L, 2, M_XRef);
+ if (uin->pd != NULL && uxref->pd != NULL && uin->pd != uxref->pd)
+@@ -1476,7 +1472,8 @@
+ if ((uin->pd != NULL && uin->pd->pc != uin->pc)
+ || (uxref->pd != NULL && uxref->pd->pc != uxref->pc))
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initDict((XRef *) uxref->d);
++ d = new Dict((XRef *) uxref->d);
++ *((Object *) uin->d) = Object(d);
+ return 0;
+ }
+
+@@ -1490,7 +1487,7 @@
+ if ((uin->pd != NULL && uin->pd->pc != uin->pc)
+ || (ustream->pd != NULL && ustream->pd->pc != ustream->pc))
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initStream((Stream *) ustream->d);
++ *((Object *) uin->d) = Object((Stream *) ustream->d);
+ return 0;
+ }
+
+@@ -1503,7 +1500,7 @@
+ pdfdoc_changed_error(L);
+ num = luaL_checkint(L, 2);
+ gen = luaL_checkint(L, 3);
+- ((Object *) uin->d)->initRef(num, gen);
++ *((Object *) uin->d) = Object(num, gen);
+ return 0;
+ }
+
+@@ -1515,7 +1512,7 @@
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ s = luaL_checkstring(L, 2);
+- ((Object *) uin->d)->initCmd(CHARP_CAST s);
++ *((Object *) uin->d) = Object(objCmd, CHARP_CAST s);
+ return 0;
+ }
+
+@@ -1525,7 +1522,7 @@
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Object);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initError();
++ *((Object *) uin->d) = Object(objError);
+ return 0;
+ }
+
+@@ -1535,7 +1532,7 @@
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Object);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+- ((Object *) uin->d)->initEOF();
++ *((Object *) uin->d) = Object(objEOF);
+ return 0;
+ }
+
+@@ -1551,7 +1548,7 @@
+ pdfdoc_changed_error(L);
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->fetch((XRef *) uxref->d, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->fetch((XRef *) uxref->d);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1816,7 +1813,7 @@
+ pdfdoc_changed_error(L);
+ if (!((Object *) uin->d)->isArray())
+ luaL_error(L, "Object is not an Array");
+- ((Object *) uin->d)->arrayAdd((Object *) uobj->d);
++ ((Object *) uin->d)->arrayAdd(std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -1833,7 +1830,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->arrayGet(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->arrayGet(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1857,7 +1854,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->arrayGetNF(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1897,7 +1894,7 @@
+ pdfdoc_changed_error(L);
+ if (!((Object *) uin->d)->isDict())
+ luaL_error(L, "Object is not a Dict");
+- ((Object *) uin->d)->dictAdd(copyString(s), (Object *) uobj->d);
++ ((Object *) uin->d)->dictAdd(copyString(s), std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -1915,7 +1912,7 @@
+ pdfdoc_changed_error(L);
+ if (!((Object *) uin->d)->isDict())
+ luaL_error(L, "Object is not a Dict");
+- ((Object *) uin->d)->dictSet(s, (Object *) uobj->d);
++ ((Object *) uin->d)->dictSet(s, std::move(*((Object *) uobj->d)));
+ return 0;
+ }
+
+@@ -1930,7 +1927,7 @@
+ if (((Object *) uin->d)->isDict()) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->dictLookup(s, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->dictLookup(s);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1950,7 +1947,7 @@
+ if (((Object *) uin->d)->isDict()) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->dictLookupNF(s, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -1991,7 +1988,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->dictGetVal(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->dictGetVal(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -2015,7 +2012,7 @@
+ if (i > 0 && i <= len) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((Object *) uin->d)->dictGetValNF(i - 1, (Object *) uout->d);
++ *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -2243,7 +2240,7 @@
+ m_poppler_get_poppler(Page, Dict, getPieceInfo);
+ m_poppler_get_poppler(Page, Dict, getSeparationInfo);
+ m_poppler_get_poppler(Page, Dict, getResourceDict);
+-m_poppler_get_OBJECT(Page, getAnnots);
++m_poppler_get_OBJECT(Page, getAnnotsObject);
+
+ m_poppler_get_OBJECT(Page, getContents);
+
+@@ -2270,7 +2267,7 @@
+ {"getPieceInfo", m_Page_getPieceInfo},
+ {"getSeparationInfo", m_Page_getSeparationInfo},
+ {"getResourceDict", m_Page_getResourceDict},
+- {"getAnnots", m_Page_getAnnots},
++ {"getAnnots", m_Page_getAnnotsObject},
+ {"getContents", m_Page_getContents},
+ {"__tostring", m_Page__tostring},
+ {NULL, NULL} // sentinel
+@@ -2520,7 +2517,7 @@
+ if (((PdfDocument *) uin->d)->doc->getXRef()->isOk()) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((PdfDocument *) uin->d)->doc->getDocInfo((Object *) uout->d);
++ *((Object *) uout->d) = ((PdfDocument *) uin->d)->doc->getDocInfo();
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -2538,7 +2535,7 @@
+ if (((PdfDocument *) uin->d)->doc->getXRef()->isOk()) {
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((PdfDocument *) uin->d)->doc->getDocInfoNF((Object *) uout->d);
++ *((Object *) uout->d) = ((PdfDocument *) uin->d)->doc->getDocInfoNF();
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -2841,7 +2838,7 @@
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+ origin = (Object *) (((Attribute *) uin->d)->getValue());
+- origin->copy ( ((Object *)uout->d) );
++ *((Object *) uout->d) = origin->copy();
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -3320,7 +3317,7 @@
+ parent = root->findParentElement(i-1);
+ if (parent != NULL) {
+ uout = new_StructElement_userdata(L);
+- uout->d = new StructElement( *parent );
++ uout->d = (StructElement *) parent;
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+@@ -3370,7 +3367,7 @@
+ gen = luaL_checkint(L, 3);
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+- ((XRef *) uin->d)->fetch(num, gen, (Object *) uout->d);
++ *((Object *) uout->d) = ((XRef *) uin->d)->fetch(num, gen);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+diff -ur source.orig/texk/web2c/luatexdir/lua/lpdfscannerlib.cc source/texk/web2c/luatexdir/lua/lpdfscannerlib.cc
+--- source.orig/texk/web2c/luatexdir/lua/lpdfscannerlib.cc 2017-05-08 22:39:36.692708395 +0200
++++ source/texk/web2c/luatexdir/lua/lpdfscannerlib.cc 2017-09-19 09:48:19.658021769 +0200
+@@ -634,7 +634,7 @@
+ int i;
+ for (i=0;i<count;i++) {
+ Object *val = new Object();
+- arrayref->get(i, val);
++ *val = arrayref->get(i);
+ if (val->isStream()) {
+ ObjectList *rover = self->_streams;
+ ObjectList *item = (ObjectList *)priv_xmalloc (sizeof(ObjectList));
+diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexdir/pdftoepdf.cc
+--- source.orig/texk/web2c/pdftexdir/pdftoepdf.cc 2017-06-16 21:49:09.293857387 +0200
++++ source/texk/web2c/pdftexdir/pdftoepdf.cc 2017-09-19 09:48:19.661355046 +0200
+@@ -84,31 +84,6 @@
+ #define MASK_SUPPRESS_PTEX_PAGENUMBER 0x04
+ #define MASK_SUPPRESS_PTEX_INFODICT 0x08
+
+-// PdfObject encapsulates the xpdf Object type,
+-// and properly frees its resources on destruction.
+-// Use obj-> to access members of the Object,
+-// and &obj to get a pointer to the object.
+-// It is no longer necessary to call Object::free explicitely.
+-
+-class PdfObject {
+- public:
+- PdfObject() { // nothing
+- } ~PdfObject() {
+- iObject.free();
+- }
+- Object *operator->() {
+- return &iObject;
+- }
+- Object *operator&() {
+- return &iObject;
+- }
+- private: // no copying or assigning
+- PdfObject(const PdfObject &);
+- void operator=(const PdfObject &);
+- public:
+- Object iObject;
+-};
+-
+ // When copying the Resources of the selected page, all objects are copied
+ // recusively top-down. Indirect objects however are not fetched during
+ // copying, but get a new object number from pdfTeX and then will be
+@@ -212,18 +187,6 @@
+ delete pdf_doc;
+ }
+
+-// Replacement for
+-// Object *initDict(Dict *dict1){ initObj(objDict); dict = dict1; return this; }
+-
+-static void initDictFromDict(PdfObject & obj, Dict * dict)
+-{
+- obj->initDict(xref);
+- for (int i = 0, l = dict->getLength(); i < l; i++) {
+- Object obj1;
+- obj->dictAdd(copyString(dict->getKey(i)), dict->getValNF(i, &obj1));
+- }
+-}
+-
+ // --------------------------------------------------------------------
+
+ static int addEncoding(GfxFont * gfont)
+@@ -320,10 +283,10 @@
+
+ static void copyDictEntry(Object * obj, int i)
+ {
+- PdfObject obj1;
++ Object obj1;
+ copyName(obj->dictGetKey(i));
+ pdf_puts(" ");
+- obj->dictGetValNF(i, &obj1);
++ obj1 = obj->dictGetValNF(i);
+ copyObject(&obj1);
+ pdf_puts("\n");
+ }
+@@ -376,17 +339,17 @@
+ static void copyProcSet(Object * obj)
+ {
+ int i, l;
+- PdfObject procset;
++ Object procset;
+ if (!obj->isArray())
+ pdftex_fail("PDF inclusion: invalid ProcSet array type <%s>",
+ obj->getTypeName());
+ pdf_puts("/ProcSet [ ");
+ for (i = 0, l = obj->arrayGetLength(); i < l; ++i) {
+- obj->arrayGetNF(i, &procset);
+- if (!procset->isName())
++ procset = obj->arrayGetNF(i);
++ if (!procset.isName())
+ pdftex_fail("PDF inclusion: invalid ProcSet entry type <%s>",
+- procset->getTypeName());
+- copyName(procset->getName());
++ procset.getTypeName());
++ copyName(procset.getName());
+ pdf_puts(" ");
+ }
+ pdf_puts("]\n");
+@@ -394,10 +357,29 @@
+
+ #define REPLACE_TYPE1C true
+
++static bool embeddableFont(Object * fontdesc)
++{
++ Object fontfile, ffsubtype;
++
++ if (!fontdesc->isDict())
++ return false;
++ fontfile = fontdesc->dictLookup("FontFile");
++ if (fontfile.isStream())
++ return true;
++ if (REPLACE_TYPE1C) {
++ fontfile = fontdesc->dictLookup("FontFile3");
++ if (!fontfile.isStream())
++ return false;
++ ffsubtype = fontfile.streamGetDict()->lookup("Subtype");
++ return ffsubtype.isName() && !strcmp(ffsubtype.getName(), "Type1C");
++ }
++ return false;
++}
++
+ static void copyFont(char *tag, Object * fontRef)
+ {
+- PdfObject fontdict, subtype, basefont, fontdescRef, fontdesc, charset,
+- fontfile, ffsubtype, stemV;
++ Object fontdict, subtype, basefont, fontdescRef, fontdesc, charset,
++ stemV;
+ GfxFont *gfont;
+ fd_entry *fd;
+ fm_entry *fontmap;
+@@ -413,33 +395,39 @@
+ }
+ // Only handle included Type1 (and Type1C) fonts; anything else will be copied.
+ // Type1C fonts are replaced by Type1 fonts, if REPLACE_TYPE1C is true.
+- if (!fixedinclusioncopyfont && fontRef->fetch(xref, &fontdict)->isDict()
+- && fontdict->dictLookup("Subtype", &subtype)->isName()
+- && !strcmp(subtype->getName(), "Type1")
+- && fontdict->dictLookup("BaseFont", &basefont)->isName()
+- && fontdict->dictLookupNF("FontDescriptor", &fontdescRef)->isRef()
+- && fontdescRef->fetch(xref, &fontdesc)->isDict()
+- && (fontdesc->dictLookup("FontFile", &fontfile)->isStream()
+- || (REPLACE_TYPE1C
+- && fontdesc->dictLookup("FontFile3", &fontfile)->isStream()
+- && fontfile->streamGetDict()->lookup("Subtype",
+- &ffsubtype)->isName()
+- && !strcmp(ffsubtype->getName(), "Type1C")))
+- && (fontmap = lookup_fontmap(basefont->getName())) != NULL) {
++ fontdict = fontRef->fetch(xref);
++ fontdesc = Object(objNull);
++ if (fontdict.isDict()) {
++ subtype = fontdict.dictLookup("Subtype");
++ basefont = fontdict.dictLookup("BaseFont");
++ fontdescRef = fontdict.dictLookupNF("FontDescriptor");
++ if (fontdescRef.isRef()) {
++ fontdesc = fontdescRef.fetch(xref);
++ }
++ }
++ if (!fixedinclusioncopyfont && fontdict.isDict()
++ && subtype.isName()
++ && !strcmp(subtype.getName(), "Type1")
++ && basefont.isName()
++ && fontdescRef.isRef()
++ && fontdesc.isDict()
++ && embeddableFont(&fontdesc)
++ && (fontmap = lookup_fontmap(basefont.getName())) != NULL) {
+ // round /StemV value, since the PDF input is a float
+ // (see Font Descriptors in PDF reference), but we only store an
+ // integer, since we don't want to change the struct.
+- fontdesc->dictLookup("StemV", &stemV);
+- fd = epdf_create_fontdescriptor(fontmap, zround(stemV->getNum()));
+- if (fontdesc->dictLookup("CharSet", &charset) &&
+- charset->isString() && is_subsetable(fontmap))
+- epdf_mark_glyphs(fd, charset->getString()->getCString());
++ stemV = fontdesc.dictLookup("StemV");
++ fd = epdf_create_fontdescriptor(fontmap, zround(stemV.getNum()));
++ charset = fontdesc.dictLookup("CharSet");
++ if (!charset.isNull() &&
++ charset.isString() && is_subsetable(fontmap))
++ epdf_mark_glyphs(fd, charset.getString()->getCString());
+ else
+ embed_whole_font(fd);
+- addFontDesc(fontdescRef->getRef(), fd);
++ addFontDesc(fontdescRef.getRef(), fd);
+ copyName(tag);
+ gfont = GfxFont::makeFont(xref, tag, fontRef->getRef(),
+- fontdict->getDict());
++ fontdict.getDict());
+ pdf_printf(" %d 0 R ", addFont(fontRef->getRef(), fd,
+ addEncoding(gfont)));
+ } else {
+@@ -451,24 +439,24 @@
+
+ static void copyFontResources(Object * obj)
+ {
+- PdfObject fontRef;
++ Object fontRef;
+ int i, l;
+ if (!obj->isDict())
+ pdftex_fail("PDF inclusion: invalid font resources dict type <%s>",
+ obj->getTypeName());
+ pdf_puts("/Font << ");
+ for (i = 0, l = obj->dictGetLength(); i < l; ++i) {
+- obj->dictGetValNF(i, &fontRef);
+- if (fontRef->isRef())
++ fontRef = obj->dictGetValNF(i);
++ if (fontRef.isRef())
+ copyFont(obj->dictGetKey(i), &fontRef);
+- else if (fontRef->isDict()) { // some programs generate pdf with embedded font object
++ else if (fontRef.isDict()) { // some programs generate pdf with embedded font object
+ copyName(obj->dictGetKey(i));
+ pdf_puts(" ");
+ copyObject(&fontRef);
+ }
+ else
+ pdftex_fail("PDF inclusion: invalid font in reference type <%s>",
+- fontRef->getTypeName());
++ fontRef.getTypeName());
+ }
+ pdf_puts(">>\n");
+ }
+@@ -557,7 +545,7 @@
+
+ static void copyObject(Object * obj)
+ {
+- PdfObject obj1;
++ Object obj1;
+ int i, l, c;
+ Ref ref;
+ char *p;
+@@ -601,8 +589,8 @@
+ } else if (obj->isArray()) {
+ pdf_puts("[");
+ for (i = 0, l = obj->arrayGetLength(); i < l; ++i) {
+- obj->arrayGetNF(i, &obj1);
+- if (!obj1->isName())
++ obj1 = obj->arrayGetNF(i);
++ if (!obj1.isName())
+ pdf_puts(" ");
+ copyObject(&obj1);
+ }
+@@ -612,9 +600,8 @@
+ copyDict(obj);
+ pdf_puts(">>");
+ } else if (obj->isStream()) {
+- initDictFromDict(obj1, obj->streamGetDict());
+ pdf_puts("<<\n");
+- copyDict(&obj1);
++ copyDict(obj->getStream()->getDictObject());
+ pdf_puts(">>\n");
+ pdf_puts("stream\n");
+ copyStream(obj->getStream()->getUndecodedStream());
+@@ -638,9 +625,8 @@
+ InObj *r;
+ for (r = inObjList; r != 0; r = r->next) {
+ if (!r->written) {
+- Object obj1;
+ r->written = 1;
+- xref->fetch(r->ref.num, r->ref.gen, &obj1);
++ Object obj1 = xref->fetch(r->ref.num, r->ref.gen);
+ if (r->type == objFont) {
+ assert(!obj1.isStream());
+ pdfbeginobj(r->num, 2); // \pdfobjcompresslevel = 2 is for this
+@@ -656,7 +642,6 @@
+ pdf_puts("\n");
+ pdfendobj();
+ }
+- obj1.free();
+ }
+ }
+ }
+@@ -839,8 +824,8 @@
+ Page *page;
+ Ref *pageRef;
+ Dict *pageDict;
+- PdfObject contents, obj1, obj2, pageObj, dictObj;
+- PdfObject groupDict;
++ Object contents, obj1, obj2, pageObj, dictObj;
++ Object groupDict;
+ bool writeSepGroup = false;
+ Object info;
+ char *key;
+@@ -867,8 +852,8 @@
+ encodingList = 0;
+ page = pdf_doc->doc->getCatalog()->getPage(epdf_selected_page);
+ pageRef = pdf_doc->doc->getCatalog()->getPageRef(epdf_selected_page);
+- xref->fetch(pageRef->num, pageRef->gen, &pageObj);
+- pageDict = pageObj->getDict();
++ pageObj = xref->fetch(pageRef->num, pageRef->gen);
++ pageDict = pageObj.getDict();
+ rotate = page->getRotate();
+ PDFRectangle *pagebox;
+ // write the Page header
+@@ -886,7 +871,7 @@
+ pdf_printf("/%s.PageNumber %i\n", pdfkeyprefix, (int) epdf_selected_page);
+ }
+ if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_INFODICT) == 0) {
+- pdf_doc->doc->getDocInfoNF(&info);
++ info = pdf_doc->doc->getDocInfoNF();
+ if (info.isRef()) {
+ // the info dict must be indirect (PDF Ref p. 61)
+ pdf_printf("/%s.InfoDict ", pdfkeyprefix);
+@@ -942,14 +927,14 @@
+ pdf_puts(stripzeros(s));
+
+ // Metadata validity check (as a stream it must be indirect)
+- pageDict->lookupNF("Metadata", &dictObj);
+- if (!dictObj->isNull() && !dictObj->isRef())
++ dictObj = pageDict->lookupNF("Metadata");
++ if (!dictObj.isNull() && !dictObj.isRef())
+ pdftex_warn("PDF inclusion: /Metadata must be indirect object");
+
+ // copy selected items in Page dictionary except Resources & Group
+ for (i = 0; pageDictKeys[i] != NULL; i++) {
+- pageDict->lookupNF(pageDictKeys[i], &dictObj);
+- if (!dictObj->isNull()) {
++ dictObj = pageDict->lookupNF(pageDictKeys[i]);
++ if (!dictObj.isNull()) {
+ pdf_newline();
+ pdf_printf("/%s ", pageDictKeys[i]);
+ copyObject(&dictObj); // preserves indirection
+@@ -957,8 +942,8 @@
+ }
+
+ // handle page group
+- pageDict->lookupNF("Group", &dictObj);
+- if (!dictObj->isNull()) {
++ dictObj = pageDict->lookupNF("Group");
++ if (!dictObj.isNull()) {
+ if (pdfpagegroupval == 0) {
+ // another pdf with page group was included earlier on the
+ // same page; copy the Group entry as is. See manual for
+@@ -972,11 +957,11 @@
+ copyObject(&dictObj);
+ } else {
+ // write Group dict as a separate object, since the Page dict also refers to it
+- pageDict->lookup("Group", &dictObj);
+- if (!dictObj->isDict())
++ dictObj = pageDict->lookup("Group");
++ if (!dictObj.isDict())
+ pdftex_fail("PDF inclusion: /Group dict missing");
+ writeSepGroup = true;
+- initDictFromDict(groupDict, page->getGroup());
++ groupDict = Object(page->getGroup());
+ pdf_printf("/Group %ld 0 R\n", (long)pdfpagegroupval);
+ }
+ }
+@@ -989,14 +974,14 @@
+ pdftex_warn
+ ("PDF inclusion: /Resources missing. 'This practice is not recommended' (PDF Ref)");
+ } else {
+- initDictFromDict(obj1, page->getResourceDict());
++ Object *obj1 = page->getResourceDictObject();
+ if (!obj1->isDict())
+ pdftex_fail("PDF inclusion: invalid resources dict type <%s>",
+ obj1->getTypeName());
+ pdf_newline();
+ pdf_puts("/Resources <<\n");
+ for (i = 0, l = obj1->dictGetLength(); i < l; ++i) {
+- obj1->dictGetVal(i, &obj2);
++ obj2 = obj1->dictGetVal(i);
+ key = obj1->dictGetKey(i);
+ if (strcmp("Font", key) == 0)
+ copyFontResources(&obj2);
+@@ -1009,8 +994,8 @@
+ }
+
+ // write the page contents
+- page->getContents(&contents);
+- if (contents->isStream()) {
++ contents = page->getContents();
++ if (contents.isStream()) {
+
+ // Variant A: get stream and recompress under control
+ // of \pdfcompresslevel
+@@ -1021,36 +1006,35 @@
+
+ // Variant B: copy stream without recompressing
+ //
+- contents->streamGetDict()->lookup("F", &obj1);
+- if (!obj1->isNull()) {
++ obj1 = contents.streamGetDict()->lookup("F");
++ if (!obj1.isNull()) {
+ pdftex_fail("PDF inclusion: Unsupported external stream");
+ }
+- contents->streamGetDict()->lookup("Length", &obj1);
+- assert(!obj1->isNull());
++ obj1 = contents.streamGetDict()->lookup("Length");
++ assert(!obj1.isNull());
+ pdf_puts("/Length ");
+ copyObject(&obj1);
+ pdf_puts("\n");
+- contents->streamGetDict()->lookup("Filter", &obj1);
+- if (!obj1->isNull()) {
++ obj1 = contents.streamGetDict()->lookup("Filter");
++ if (!obj1.isNull()) {
+ pdf_puts("/Filter ");
+ copyObject(&obj1);
+ pdf_puts("\n");
+- contents->streamGetDict()->lookup("DecodeParms", &obj1);
+- if (!obj1->isNull()) {
++ obj1 = contents.streamGetDict()->lookup("DecodeParms");
++ if (!obj1.isNull()) {
+ pdf_puts("/DecodeParms ");
+ copyObject(&obj1);
+ pdf_puts("\n");
+ }
+ }
+ pdf_puts(">>\nstream\n");
+- copyStream(contents->getStream()->getUndecodedStream());
++ copyStream(contents.getStream()->getUndecodedStream());
+ pdfendstream();
+- } else if (contents->isArray()) {
++ } else if (contents.isArray()) {
+ pdfbeginstream();
+- for (i = 0, l = contents->arrayGetLength(); i < l; ++i) {
+- Object contentsobj;
+- copyStream((contents->arrayGet(i, &contentsobj))->getStream());
+- contentsobj.free();
++ for (i = 0, l = contents.arrayGetLength(); i < l; ++i) {
++ Object contentsobj = contents.arrayGet(i);
++ copyStream(contentsobj.getStream());
+ if (i < l - 1)
+ pdf_newline(); // add a newline after each stream except the last
+ }
+diff -ur source.orig/texk/web2c/pdftexdir/pdftosrc.cc source/texk/web2c/pdftexdir/pdftosrc.cc
+--- source.orig/texk/web2c/pdftexdir/pdftosrc.cc 2017-06-16 21:49:09.297190679 +0200
++++ source/texk/web2c/pdftexdir/pdftosrc.cc 2017-09-19 09:48:19.661355046 +0200
+@@ -86,22 +86,20 @@
+ objgen = atoi(argv[3]);
+ }
+ xref = doc->getXRef();
+- catalogDict.initNull();
+- xref->getCatalog(&catalogDict);
++ catalogDict = xref->getCatalog();
+ if (!catalogDict.isDict("Catalog")) {
+ fprintf(stderr, "No Catalog found\n");
+ exit(1);
+ }
+- srcStream.initNull();
++ srcStream = Object(objNull);
+ if (objnum == 0) {
+- catalogDict.dictLookup("SourceObject", &srcStream);
++ srcStream = catalogDict.dictLookup("SourceObject");
+ static char const_SourceFile[] = "SourceFile";
+ if (!srcStream.isStream(const_SourceFile)) {
+ fprintf(stderr, "No SourceObject found\n");
+ exit(1);
+ }
+- srcName.initNull();
+- srcStream.getStream()->getDict()->lookup("SourceName", &srcName);
++ srcName = srcStream.getStream()->getDict()->lookup("SourceName");
+ if (!srcName.isString()) {
+ fprintf(stderr, "No SourceName found\n");
+ exit(1);
+@@ -110,7 +108,7 @@
+ // We cannot free srcName, as objname shares its string.
+ // srcName.free();
+ } else if (objnum > 0) {
+- xref->fetch(objnum, objgen, &srcStream);
++ srcStream = xref->fetch(objnum, objgen);
+ if (!srcStream.isStream()) {
+ fprintf(stderr, "Not a Stream object\n");
+ exit(1);
+@@ -159,29 +157,26 @@
+ int localOffset = 0;
+ Guint firstOffset;
+
+- assert(xref->fetch(e->offset, 0, &objStr)->isStream());
+- nObjects = objStr.streamGetDict()->lookup("N", &obj1)->getInt();
+- obj1.free();
+- first = objStr.streamGetDict()->lookup("First", &obj1)->getInt();
+- obj1.free();
++ objStr = xref->fetch(e->offset, 0);
++ assert(objStr.isStream());
++ obj1 = objStr.streamGetDict()->lookup("N");
++ nObjects = obj1.getInt();
++ obj1 = objStr.streamGetDict()->lookup("First");
++ first = obj1.getInt();
+ firstOffset = objStr.getStream()->getBaseStream()->getStart() + first;
+
+ // parse the header: object numbers and offsets
+ objStr.streamReset();
+- obj1.initNull();
+- str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first);
++ str = new EmbedStream(objStr.getStream(), Object(objNull), gTrue, first);
+ parser = new Parser(xref, new Lexer(xref, str), gFalse);
+ for (n = 0; n < nObjects; ++n) {
+- parser->getObj(&obj1);
+- parser->getObj(&obj2);
++ obj1 = parser->getObj();
++ obj2 = parser->getObj();
+ if (n == e->gen)
+ localOffset = obj2.getInt();
+- obj1.free();
+- obj2.free();
+ }
+ while (str->getChar() != EOF) ;
+ delete parser;
+- objStr.free();
+
+ fprintf(outfile, "%.10lu 00000 n\n",
+ (long unsigned)(firstOffset + localOffset));
+@@ -192,7 +187,6 @@
+ s->reset();
+ while ((c = s->getChar()) != EOF)
+ fputc(c, outfile);
+- srcStream.free();
+ }
+ if (objnum == 0)
+ fprintf(stderr, "Source file extracted to %s\n", outname);
+@@ -201,7 +195,6 @@
+ else
+ fprintf(stderr, "Cross-reference table extracted to %s\n", outname);
+ fclose(outfile);
+- catalogDict.free();
+ delete doc;
+ delete globalParams;
+ }
diff --git a/source/t/texlive/prep/README b/source/t/texlive/prep/README
new file mode 100644
index 000000000..479e834d8
--- /dev/null
+++ b/source/t/texlive/prep/README
@@ -0,0 +1,2 @@
+The script(s) in this directory are used to create the texmf archives
+from the original Texlive netarchives.
diff --git a/source/t/texlive/prep/texmf_get.sh b/source/t/texlive/prep/texmf_get.sh
new file mode 100644
index 000000000..396fdcebf
--- /dev/null
+++ b/source/t/texlive/prep/texmf_get.sh
@@ -0,0 +1,752 @@
+#!/bin/bash
+
+# texmf_get.sh (c) 2016-2017 Johannes Schoepfer, Germany, slackbuilds[at]schoepfer[dot]info
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# V 0.14.2
+#
+# Prepare xz-compressed tarballs of texlive-texmf-trees based on texlive.tlpdb
+# This script takes care of dependencies(as far as these are present in texlive.tlpdb) of collections and packages,
+# and that every texlive-package is included only once.
+# The editions(base/extra/fonts/docs) should contain nobinaries(exception biber)
+# -base: the most usefull stuff, all metafonts, all manpages, the most
+# binaries/scripts, 65mb 2017-11-07
+# -docs: -base documentation only, no manpages/GNU infofiles
+# -fonts: fonts only, no metafonts
+# -extra: remaining stuff
+#
+# texlive netarchive policy: Every package is included as dependency
+# in exactly one collection. A package may have dependencies on other
+# packages from any collection.
+
+# package source: http://mirror.ctan.org/systems/texlive/tlnet/archive/
+
+#set -e
+MAJORVERSION=2017
+
+# globally excluded packages, which e.g. are
+# -useless without tlmgr-installer
+# -non-linux
+# -covered by an external package
+# -obsolete
+
+global_exclude="
+ asymptote
+ tlcockpit
+ tlshell
+ texosquery
+ aleph
+ omega
+ antomega
+ omegaware
+ lambda
+ otibet
+ cslatex
+ "
+
+texmf_editions () {
+ # At first, $corepackages for the base, and other essentials
+ PACKAGES="
+ $(cat $corepackages)
+ collection-basic
+ collection-latex
+ collection-metapost
+ collection-plaingeneric
+ collection-fontutils
+ collection-luatex
+ collection-context
+ cbfonts-fd
+ xetex-devanagari
+ " texmfget base || exit 1
+
+ # Now the fonts package to make sure that big fonts like cm-super are not included elsewhere as dependency
+ PACKAGES="
+ cm-super
+ cbfonts
+ ipaex
+ wadalab
+ ethiop-t1
+ fonts-tlwg
+ uhc
+ fandol
+ arphic
+ arphic-ttf
+ nanumtype1
+ baekmuk
+ unfonts-extra
+ unfonts-core
+ " texmfget fonts || exit 1
+
+ # put some stuff in "extra" to before these make their way into "base" as dependency
+ PACKAGES="
+ $(grep ^"name biblatex" $db | grep -v '\.' | cut -d' ' -f2 )
+ biber.x86_64-linux
+ biber.i386-linux
+ bib2gls
+ bibarts
+ arara
+ latex2nemeth
+ ghsystem
+ adobemapping
+ knitting
+ pgfornament
+ pgfplots
+ arabi
+ nwejm
+ uantwerpendocs
+ sduthesis
+ stellenbosch
+ fithesis
+ gregoriotex
+ lilyglyphs
+ musixtex-fonts
+ beebe
+ velthuis
+ mwe
+ pdfx
+ media9
+ pst-cox
+ pst-poker
+ pst-vectorian
+ pst-geo
+ quran
+ ijsra
+ fibeamer
+ udesoftec
+ xduthesis
+ hustthesis
+ bangorcsthesis
+ sapthesis
+ uowthesis
+ cs
+ pl
+ cc-pl
+ tipa
+ kerkis
+ amiri
+ cns
+ vntex
+ montex
+ xcharter
+ fonts-churchslavonic
+ japanese-otf
+ sanskrit-t1
+ skaknew
+ padauk
+ " texmfget extra || exit 1
+
+ # Completing the base
+ PACKAGES="
+ collection-langcyrillic
+ collection-langczechslovak
+ collection-langeuropean
+ collection-langenglish
+ collection-langfrench
+ collection-langgerman
+ collection-langgreek
+ collection-langitalian
+ collection-langpolish
+ collection-langportuguese
+ collection-langspanish
+ collection-langjapanese
+ collection-langkorean
+ collection-langarabic
+ collection-langchinese
+ collection-langcjk
+ collection-langother
+ collection-xetex
+ collection-humanities
+ collection-mathscience
+ collection-pictures
+ collection-publishers
+ collection-music
+ collection-games
+ collection-fontsrecommended
+ collection-latexrecommended
+ collection-binextra
+ collection-bibtexextra
+ collection-formatsextra
+ collection-latexextra
+ acro
+ acronym
+ acroterm
+ enumitem
+ enumitem-zref
+ yfonts
+ doublestroke
+ was
+ xypic
+ barcodes
+ qrcode
+ lastpage
+ appendix
+ changebar
+ footmisc
+ multirow
+ overpic
+ subfigure
+ titlesec
+ siunitx
+ combelow
+ csquotes
+ etoolbox
+ etextools
+ idxlayout
+ bidi
+ filecontents
+ eplain
+ texsis
+ mltex
+ lollipop
+ moreverb
+ indextools
+ splitindex
+ eepic
+ bigfoot
+ xstring
+ showexpl
+ cweb-latex
+ hypdvips
+ ptex
+ perltex
+ collection-pstricks
+ $(collection_by_size fontsextra 20000 || exit 1)
+ " texmfget base || exit 1
+
+ # Put all remaining stuff in "extra"
+ # Pull some bin-packages from tlnet, which aren't provided by the texlive source tarball
+ PACKAGES="
+ collection-texworks
+ collection-wintools
+ wasy2-ps
+ " texmfget extra || exit 1
+
+ # Call "fonts" at the end to add remaining fonts
+ PACKAGES="
+ collection-fontsextra
+ " texmfget fonts || exit 1
+
+}
+
+# ==== Nothing to edit beyond this line ====
+
+usage () {
+ echo
+ echo "Generate texmf trees/editions based on collections/packages and their dependencies."
+ echo "./texmf_get.sh [base|docs|extra|fonts]"
+ echo
+ echo "-base: texfiles, no docs"
+ echo "-docs: docs of -base"
+ echo "-extra: remaining texfiles and docs"
+ echo "-fonts: fonts and docs"
+ echo
+ echo "Only new/updated/missing tex packages are downloaded."
+ echo "The first run takes \"long\", tex packages(about 2500Mb)"
+ echo "need to be downloaded and metafiles are generated."
+ echo "To check out a new version/release, delete"
+ echo "$db"
+ echo "A new ascii database is pulled on the next run,"
+ echo "and a new version yymmdd is set."
+ echo
+ echo "All generated tarballs, logs etc. are going to"
+ echo "$TMP"
+ echo
+}
+
+collection_by_size () {
+ # from collection $1, pull packages smaller $2 bytes
+ start_n="$(grep -n ^"name collection-$1"$ $db | cut -d':' -f1)"
+ # find end of package/collection
+ for emptyline in $emptylines
+ do
+ if [ "$emptyline" -gt "$start_n" ]
+ then
+ end_n=$emptyline
+ break
+ fi
+ done
+ extrapackages="$(sed "${start_n},${end_n}!d" $db | grep ^"depend " | grep -v ^"depend collection" | sed "s/^depend//g" )"
+
+ # add if smaller than ...
+ for checksize in $extrapackages
+ do
+ package_meta $checksize || exit 1
+ size=$(grep ^"containersize " $texmf/$checksize.meta | cut -d' ' -f2)
+ # for $2, e.g. 3000 means 3kb
+ [ $size -lt $2 ] && echo $checksize
+ done
+}
+
+package_meta () {
+ if [ ! -s "$texmf/$1.meta" ]
+ then
+ # collection start linenumer
+ start_n="$(grep -n ^"name ${1}"$ $db | cut -d':' -f1)"
+ [ -z "$start_n" ] && echo "$1 was not found in $db, bye." && exit 1
+ # find end of package/collection
+ for emptyline in $emptylines
+ do
+ if [ "$emptyline" -gt "$start_n" ]
+ then
+ end_n=$emptyline
+ break
+ fi
+ done
+ # Don't handle collections as dependency of other collections
+ sed "${start_n},${end_n}!d;/^depend collection/d" $db > $texmf/$1.meta
+ fi
+}
+
+download () {
+ # Download packages, if not already available. Not every packages has a corresponding .doc package.
+ # Try three times if package isn't present, with -t1 to get another mirror the second time
+ cd $texmf
+ if [ ! -s "${1}${flavour}.tar.xz" ]
+ then
+ for run in {1..10}
+ do
+ wget -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
+ [ -s "${1}${flavour}.tar.xz" ] && break
+ done
+ fi
+ # If no success by downloading, write error log
+ [ ! -s ${1}${flavour}.tar.xz ] && echo "Downloading ${1}${flavour}.tar.xz did not work, writing to $errorlog" && echo "$VERSION" >> $errorlog && echo "Error downloading ${1}${flavour}.tar.xz" >> $errorlog && exit 1
+
+ # check sha512, give three tries for downloading again(diffrent mirrors are used automatically)
+ if [ "$flavour" = ".doc" ]
+ then
+ sha512="$(grep ^doccontainerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ else
+ sha512="$(grep ^containerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ fi
+
+ for run in {1..10}
+ do
+ if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
+ then
+ # Download (hopefully) newer file
+ rm ${1}${flavour}.tar.xz
+ wget -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
+ else
+ break
+ fi
+ done
+ # check sha512 again, exit if it fails
+ if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
+ then
+ echo "sha512sum $(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 ) of"
+ echo "${package}${flavour}.tar.xz doesn't match with $db"
+ # delete metafile on failure to get generated again on next run, where new $db may be in use
+ rm $texmf/$1.meta
+ echo "sha512sum $sha512"
+ echo "Delete ${db}* to be current again, and try again."
+ exit 1
+ fi
+}
+
+untar () {
+ # leave if $1 has no content. Therea collections with basically no used package, e.g. texworks
+ if [ -s "$1" ]
+ then
+ while read package
+ do
+ # untar all packages, check for relocation, "relocate 1" -> untar in texmf-dist
+ download $package || exit 1
+ # untar the tex package
+ unset relocated
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && relocated="-C texmf-dist"
+ tar vxf ${package}${flavour}.tar.xz --exclude tlpkg $relocated || exit 1
+
+ # if binaries are present, put them in texmf-dist
+ [ -d bin ] && cp -a bin texmf-dist && rm -rf bin
+ if [ "$flavour" = ".doc" ]
+ then
+ size=$(( $(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 ))
+ else
+ size=$(( $(grep ^containersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 ))
+ fi
+ shortdesc="$(grep ^shortdesc $texmf/$package.meta | cut -d' ' -f2- )"
+ echo "$size Kb, $package$flavour: $shortdesc" >> $output.meta
+ #grep ^"execute addMap" $texmf/$package.meta | sed "s/^execute //g" >> $output.updmap.cfg
+ done < $1
+
+ # copy packages index to texmf-dist, so included packages are known in later installation
+ cat $output.meta >> $output.$edition.meta
+
+ # cleanup
+ [ -f $output.meta ] && rm $output.meta
+ fi
+}
+
+remove_cruft () {
+ # Remove m$-stuff, ConTeXt single-user-system stuff, source leftovers and pdf-versions of manpages
+ rm -rf texmf-dist/source
+ rm -rf texmf-dist/scripts/context/stubs/source/
+ find texmf-dist/ -type d -name 'win32' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'win64' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'mswin' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'win' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'setup' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'install' -exec rm -rf {} +
+ find texmf-dist/ -type f -name '*.bat' -delete
+ find texmf-dist/ -type f -name '*.bat.w95' -delete
+ find texmf-dist/ -type f -name '*win32*' -delete
+ find texmf-dist/ -type f -name 'winansi*' -delete
+ find texmf-dist/ -type f -name '*-man.pdf' -delete
+ # Remove zero-length files, as these appear e.g. in hyph-utf8 tex-package.
+ find . -type f -size 0c -delete
+}
+
+texmfget () {
+ # make sure no package is added more than once.
+ echo "Preparing index of packages to be added to -${1} ..."
+ echo "$PACKAGES" | sed "s/[[:space:]]//g;/^$/d" > $collections_tobedone
+ # Remove outputfile if already present
+ >$output
+ >$output_doc
+
+ # Only do something if $collection wasn't already done before
+ while [ -s $collections_tobedone ]
+ do
+ collection=$(tail -n1 $collections_tobedone)
+
+ # continue with next collection if collection was already done
+ if [ -s "$collections_done" ]
+ then
+ grep -w "^${collection}$" $collections_done &> /dev/null
+ if [ $? = 0 ]
+ then
+ # remove from $collections_tobedone
+ sed -i "/^$collection$/d" $collections_tobedone
+ if [ -n "$(grep "^${collection} added to" $logfile)" ]
+ then
+ echo "$collection already added " >> $logfile
+ fi
+ continue
+ fi
+ fi
+
+ package_meta $collection || exit 1
+
+ # Don't handle collections as dependency of other collections, as this destroys control over what packages to be added
+ # If $collection is a singel package(not a collection-), add it here
+ if [ -n "$(head -n1 $texmf/$collection.meta | fgrep -v "name collection" )" ]
+ then
+ # if package contains only docs, add to docpackages
+ if [ -z "$(grep ^runfiles $texmf/$collection.meta)" -a -n "$(grep ^docfiles $texmf/$collection.meta)" ]
+ then
+ sed -i "/^$collection$/d" $collections_tobedone
+ echo "$collection" >> $collections_done
+ echo "$collection" >> $output_doc
+ echo "$collection added to -docs $1" >> $logfile
+ continue
+ fi
+ # if package contains also docs, add also to docpackages
+ if [ -n "$(grep ^docfiles $texmf/$collection.meta)" ]
+ then
+ echo "$collection" >> $output_doc
+ echo "$collection added to -docs $1" >> $logfile
+ fi
+ echo "$collection" >> $output
+ echo "$collection added to -$1" >> $logfile
+ fi
+ # add dependend packages, but no binary(ARCH) and no packages conataining a '.'. Packges with dot indicate binary/texlive-manager/windows packages
+ grep ^"depend " $texmf/$collection.meta | grep -v "ARCH$" | grep -v '\.' | cut -d' ' -f2- > $dependencies
+ if [ -s "$dependencies" ]
+ then
+ echo "----------------" >> $logfile
+ echo "Dependencies of $collection: $(cat $dependencies | tr '\n' ' ')" >> $logfile
+ for dependency in $(cat $dependencies)
+ do
+ if [ -n "$(grep ^"${dependency}"$ $collections_done)" ]
+ then
+ sed -i "/^${dependency}$/d" $dependencies
+ continue
+ else
+ for exclude in $global_exclude
+ do
+ if [ "$exclude" = "$dependency" ]
+ then
+ sed -i "/^${exclude}$/d" $dependencies
+ echo "$exclude excluded, see \$global_exclude" >> $logfile
+ fi
+ done
+ fi
+ done
+ cat $dependencies >> $collections_tobedone
+ echo "----------------" >> $logfile
+ fi
+
+ sed -i "/^${collection}$/d" $collections_tobedone
+ echo "$collection" >> $collections_done
+ done
+ # handle package index list per edition
+ cat $output >> $TMP/packages.$1
+ # handle doc package index, one for each edition
+ cat $output_doc >> $TMP/packages.$1.doc
+
+ # untar only one $edition, untar docs together with -extra/-fonts edition
+ if [ "$1" = $edition -o docs = $edition ]
+ then
+ cd $texmf
+
+ # Cleanup tar-directory
+ [ -d $texmf/texmf-dist ] && rm -rf $texmf/texmf-dist
+ mkdir $texmf/texmf-dist
+
+ # Make tarball/checksum reproducible by setting mtime(clamp-mtime), owner, group and sort content
+ # --clamp-mtime --mtime doesn't work with tar 1.13, when makepkg creates the tarball:
+ # tar-1.13: time_t value 9223372036854775808 too large (max=68719476735)
+ case $edition in
+ base)
+ unset flavour
+ untar $output || exit 1
+ remove_cruft || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ ;;
+ extra|fonts)
+ unset flavour
+ untar $output || exit 1
+ export flavour=".doc"
+ untar $output_doc || exit 1
+ remove_cruft || exit 1
+ #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ ;;
+ docs)
+ export flavour=".doc"
+ # only add -base docs to -docs
+ if [ $1 = base ]
+ then
+ untar $output_doc || exit 1
+ remove_cruft || exit 1
+ #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ fi
+ ;;
+ esac
+ fi
+}
+
+# Main
+
+# release mirror
+mirror="http://mirror.ctan.org/systems/texlive/tlnet/"
+# pre-test mirror 2016
+# mirror="http://ftp.cstug.cz/pub/tex/local/tlpretest/"
+LANG=C
+TMP=$PWD/tmp
+output=$TMP/packages
+output_doc=$TMP/packages.doc.tmp
+errorlog=$TMP/error.log
+texmf=$TMP/texmf
+db=$TMP/texlive.tlpdb
+tmpfile=$TMP/tmpfile
+collections_done=$TMP/done
+collections_tobedone=$TMP/tobedone
+corepackages=$TMP/corepackages
+allcollections=$TMP/allcollections
+metafonts=$TMP/metafonts
+manpages=$TMP/manpages
+dependencies=$TMP/deps
+packages_base=$TMP/packages.base
+packages_extra=$TMP/packages.extra
+packages_fonts=$TMP/packages.fonts
+packages_metafont=$TMP/packages.metafont
+packages_manpages=$TMP/packages.manpages
+
+case "$1" in
+ base|docs|extra|fonts) edition=$1; echo "Building $edition tarball ...";;
+ *) usage; exit 0 ;;
+esac
+
+mkdir -p $texmf
+cd $TMP
+
+# Set VERSION, get texlive.tlpdb and keep unshorten $db.orig
+if [ ! -s ${db}.orig -o ! -s $db ]
+then
+ echo $MAJORVERSION.$(date +%y%m%d) > VERSION
+ wget -c -O ${db}.orig ${mirror}tlpkg/texlive.tlpdb
+ # remove most content from $db to be faster on later processing.
+ # keep dependencies/manpages/metafonts/binfiles/shortdesc/sizes
+ egrep '^\S|^ RELOC/doc/man|^ texmf-dist/doc/man/man|^ RELOC/doc/info/|^ texmf-dist/doc/info/|^ texmf-dist/fonts/source/public/|^ RELOC/fonts/source/public|^ bin|^$' ${db}.orig | grep -v ^longdesc > $db
+
+ # As $db (might be)/is new, remove the meta-files, might created again with (pontentionally) new content
+ rm -rf $texmf/*.meta
+fi
+
+# Get linenumbers of empty lines from $db
+emptylines="$(grep -n ^$ $db | cut -d':' -f1)"
+
+# Provide TLCore packages for -base, as these packages(and their dependencies) should be present in any case.
+grep -B1 ^'category TLCore' $db | grep -v ^'category TLCore' | grep -v ^-- | grep -v '\.' | cut -d' ' -f2 > $corepackages
+
+# Make a list of all collections
+grep ^"name collection-" $db | cut -d' ' -f2 > $allcollections
+
+# globally exclude from $corepackages
+for exclude in $global_exclude
+do
+ sed -i "/^${exclude}$/d" $corepackages
+done
+
+VERSION=$(cat $TMP/VERSION)
+tarball=$TMP/texlive-$edition-$VERSION.tar
+# set logfile
+logfile=$TMP/$VERSION.log
+
+# reset some files
+>$logfile
+>$tarball
+>$collections_done
+>$metafonts
+>$manpages
+>$packages_metafont
+>$packages_manpages
+>$packages_base
+>$packages_extra
+>$packages_fonts
+>$packages_base.doc
+>$packages_extra.doc
+>$packages_fonts.doc
+>$TMP/packages.$edition.meta
+
+# put the editions base/extra/fonts together
+texmf_editions || exit 1
+
+# Check if all collections ar part in at least one edition
+while read collection
+do
+ grep -w "$collection" $collections_done &> /dev/null
+ if [ $? != 0 ]
+ then
+ echo "Error: $collection was not handled, edit packages/collections inthe texmfget function in $0." | tee -a $logfile
+ exit 1
+ fi
+done < $allcollections
+
+# meta data about added packages
+sort -n $output.$edition.meta > $tmpfile
+mv $tmpfile $output.$edition.meta
+
+# cleanup
+rm $allcollections
+rm $corepackages
+rm $collections_done
+rm $collections_tobedone
+rm $output
+rm $output_doc
+rm $dependencies
+
+[ ! -d texmf-dist ] && mkdir texmf-dist
+# include all metafonts in base package, plus packages which misses font-mf tag on CTAN
+echo "Looking for metafont files to be included in -base ..."
+for metafont in $(paste -s $packages_extra $packages_fonts )
+do
+ if [ -n "$(egrep "(fonts/source/public/)" $texmf/$metafont.meta )" ]
+ then
+ # include all metafonts in -base, write index for later exclution from other editions.
+ package_meta $metafont || exit 1
+ echo "Adding metafonts from $metafont to -base"
+ unset flavour
+ download $metafont || exit 1
+ unset relocated
+ pathprefix="texmf-dist/"
+ [ -n "$(grep -w ^"relocated 1" $texmf/$metafont.meta)" ] && relocated="-C texmf-dist" && unset pathprefix
+ tar vxf $texmf/$metafont.tar.xz $relocated ${pathprefix}fonts/source ${pathprefix}tex/latex 2>/dev/null | sed "s/^fonts/texmf-dist\/fonts/g;s/^tex\//texmf-dist\/tex\//g" >> $metafonts
+ echo $metafont >> $packages_metafont
+ fi
+done
+
+# include manpages/GNU infofiles in -base, write index for later exclution from other editions.
+# In -extra there should not be any manpage left.
+echo "Looking for manpages/GNU infofiles to be included in -base ..."
+for package in $(paste -s $packages_metafont $packages_base.doc | sort -u)
+do
+ if [ -n "$(egrep "(doc/man/man|doc/info/)" $texmf/$package.meta )" ]
+ then
+ echo "Adding manpage from $package to -base"
+ flavour=".doc" download $package || exit 1
+ unset relocated
+ pathprefix="texmf-dist/"
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && relocated="-C texmf-dist" && unset pathprefix
+ tar vxf $texmf/${package}.doc.tar.xz --exclude "*.man[15].pdf" $relocated ${pathprefix}doc/man/ ${pathprefix}doc/info 2>/dev/null | sed "s/^doc/texmf-dist\/doc/g" >> $manpages
+ echo "$package" >> $packages_manpages
+ fi
+done
+
+case $edition in
+ base)
+ # Content info
+ cat << EOF | gzip -9 >> $texmf/texmf-dist/packages.$edition.gz
+Content of -$edition:
+$(sort $packages_base)
+
+Metafonts from packages:
+$(sort $packages_metafont)
+
+Manpages from packages:
+$(sort $packages_manpages)
+EOF
+
+ # add manpages/metafonts to the tarball
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ # handle koma-script docs, the author wants the docs to be shipped along, html doc seems sufficient
+ tar f $tarball --delete $(tar tf $tarball | grep /doc/.*koma-script.*pdf)
+ ;;
+ extra|fonts)
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ echo "Removing manpages/metafonts from -extra/-fonts/-docs which now reside in -base"
+ tar -f $tarball --delete $(paste $manpages $metafonts) 2>/dev/null
+ # content info
+ mkdir texmf-dist
+ echo "Content of -$edition, including documentation:" > $texmf/texmf-dist/packages.$edition
+ sort $TMP/packages.$edition >> $texmf/texmf-dist/packages.$edition
+ gzip -9 $texmf/texmf-dist/packages.$edition
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ ;;
+ docs)
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ echo "Removing manpages/metafonts from -extra/-fonts/-docs which no reside in -base"
+ tar -f $tarball --delete $(paste $manpages $metafonts) 2>/dev/null
+ # content info, this edition conains all docs from -base
+ mkdir texmf-dist
+ echo "Content of -$edition, documentation for -base:" > $texmf/texmf-dist/packages.$edition
+ sort $packages_base.doc >> $texmf/texmf-dist/packages.$edition
+ gzip -9 $texmf/texmf-dist/packages.$edition
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ ;;
+esac
+
+# compress the tarball as everything is in place now
+echo "Compressing $tarball ..."
+[ -f $tarball.xz ] && rm $tarball.xz
+xz -9 -T0 $tarball || exit 1
+md5sum $tarball.xz
+ls -lh $tarball.xz
+echo "Logfile: $logfile"
diff --git a/source/t/texlive/slack-desc b/source/t/texlive/slack-desc
new file mode 100644
index 000000000..d004be14c
--- /dev/null
+++ b/source/t/texlive/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+texlive: texlive (TeX binaries, support files, and formats)
+texlive:
+texlive: This package contains binaries, support files, TeX formats and
+texlive: packages, and other files from the TeXLive TeX distribution.
+texlive: Included are input files for TeX, runtime configuration files,
+texlive: hyphenation tables, manpages, and the computer modern fonts.
+texlive:
+texlive: SlackBuilds.org has more texmf files and documentation in the
+texlive: texlive-extra, texlive-fonts, and texlive-docs packages.
+texlive:
+texlive:
diff --git a/source/t/texlive/texlive.SlackBuild b/source/t/texlive/texlive.SlackBuild
new file mode 100755
index 000000000..f41e9fa63
--- /dev/null
+++ b/source/t/texlive/texlive.SlackBuild
@@ -0,0 +1,252 @@
+#!/bin/bash
+
+# TeXLive build script for Slackware
+
+# Copyright 2009, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2009-2014 Robby Workman, Northport, AL, USA
+# Copyright 2016-2017 Johannes Schoepfer, Germany
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# URL: ftp://tug.org/historic/systems/texlive/
+# Testrelease: ftp://tug.org/texlive/Images/test/
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PKGNAM=texlive
+SOURCEVERSION=${SOURCEVERSION:-20170520}
+VERSION=${VERSION:-2017.171108}
+BUILD=${BUILD:-6}
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-texlive
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+NUMJOBS=${NUMJOBS:-" -j7 "}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+# NOTE: Using the system version of poppler will require texlive to be
+# recompiled with pretty much every poppler update, as they almost always
+# bump the shared library version. But sometimes you do what you have
+# to do...
+SYSTEMPOPPLER=${SYSTEMPOPPLER:-YES}
+if [ "$SYSTEMPOPPLER" = "NO" ]; then
+ POPPLER="--without-system-poppler --without-system-xpdf"
+else
+ POPPLER="--with-system-poppler --with-system-xpdf"
+fi
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+cd $TMP
+rm -rf texlive-$SOURCEVERSION-source
+tar xvf $CWD/texlive-${SOURCEVERSION}-source.tar.xz || exit 1
+cd texlive-$SOURCEVERSION-source || exit 1
+chown -R root:root .
+chmod -R u+w,go-w,a+rX-st .
+
+export LANG=C
+export PATH="$PKG/usr/bin:$PATH"
+export LD_LIBRARY_PATH="$PKG/usr/lib${LIBDIRSUFFIX}:$LD_LIBRARY_PATH"
+
+# set TEXMFROOT and TEXMFLOCAL
+sed -i \
+ -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \
+ -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \
+ texk/kpathsea/texmf.cnf
+
+# prevent compiling Xdvi with libXp
+sed -i 's|-lXp ||' texk/xdvik/configure
+
+# Thanks to the lfs-folks ...
+patch -Np1 -i $CWD/patches/texlive-20170524-source-gcc7-1.patch || exit 1
+patch -Np1 -i $CWD/patches/texlive-20170524-source-upstream_fixes-2.patch || exit 1
+
+# Thanks to archlinux for the poppler-0.59 API fixup patch:
+if [ ! "$SYSTEMPOPPLER" = "NO" ]; then
+ patch -Np1 -i $CWD/patches/texlive-poppler-0.59.patch || exit 1
+fi
+
+# --with-system-harfbuzz requires graphite2 (and harfbuzz linked to it)
+mkdir build
+cd build
+ CFLAGS="$SLKCFLAGS" \
+ CXXFLAGS="$SLKCFLAGS -fpermissive" \
+ ../configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --mandir=/usr/man \
+ --infodir=/usr/info \
+ --with-banner-add=' on Slackware' \
+ --disable-native-texlive-build \
+ --enable-largefile \
+ --enable-shared \
+ --disable-static \
+ --disable-missing \
+ --disable-multiplatform \
+ --disable-debug \
+ --with-x \
+ --enable-xindy \
+ --disable-xindy-docs \
+ --disable-xindy-rules \
+ --with-clisp-runtime=system \
+ --enable-gc=system \
+ --with-system-zlib \
+ --with-system-libpng \
+ --with-system-t1lib \
+ --with-system-gd \
+ --with-system-freetype2 \
+ --with-system-libgs \
+ --with-system-icu \
+ --with-system-pixman \
+ --with-system-cairo \
+ --with-system-gmp \
+ --with-system-mpfr \
+ --with-system-fontconfig \
+ --with-system-ncurses \
+ --without-system-harfbuzz \
+ --disable-aleph \
+ --disable-dump-share \
+ $POPPLER \
+ --build=$ARCH-slackware-linux || exit 1
+
+ make $NUMJOBS || make || exit 1
+ # make check || exit 1
+ make install-strip DESTDIR=$PKG || exit 1
+
+ # Don't ship .la files:
+ rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la
+
+ # Remove all files which are covered by tlnet
+ rm -rf $PKG/usr/share $PKG/usr/man $PKG/usr/info
+
+ # install the tlnet stuff
+ mkdir -p $PKG/usr/share
+ tar xvf $CWD/texlive-base-$VERSION.tar.xz -C $PKG/usr/share || exit 1
+ chown -R root:root $PKG
+ chmod -R u+w,go-w,a+rX-st $PKG
+
+ # Create symlinks
+ make texlinks DESTDIR=$PKG || exit 1
+
+cd ..
+
+# set some paths
+sed -i \
+ -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \
+ -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \
+ -e 's|^OSFONTDIR.*|OSFONTDIR = ~/.fonts:/usr/share/fonts|' \
+ -e 's|texlive20[0-9][0-9]|texlive|g' \
+ $PKG/usr/share/texmf-dist/web2c/texmf.cnf
+
+# disable obsolete aleph/lamed/cslatex/pdfcslatex
+sed -i \
+ -e 's|^aleph|#! aleph|' \
+ -e 's|^lamed|#! lamed|' \
+ -e 's|^cslatex|#! cslatex|' \
+ -e 's|^pdfcslatex|#! pdfcslatex|' \
+ $PKG/usr/share/texmf-dist/web2c/fmtutil.cnf
+
+# make ConTeXt work, and remove unused settings
+sed -i \
+ -e 's|selfautoparent:|/usr/share/|g' \
+ -e 's|\(TEXMFLOCAL[ ]*=[ ]*\)[^,]*|\1"/usr/share/texmf-local"|' \
+ -e 's|texlive20[0-9][0-9]|texlive|g' \
+ -e '/selfautodir/d' \
+ -e '/texmflocal/d' \
+ $PKG/usr/share/texmf-dist/web2c/texmfcnf.lua
+
+# provide texlive fonts optionally for other system apps
+mkdir -p $PKG/etc/fonts/conf.avail
+cat > $PKG/etc/fonts/conf.avail/09-texlive.conf << EOF
+<?xml version='1.0'?>
+<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+<fontconfig>
+ <dir>/usr/share/texmf-dist/fonts/opentype</dir>
+ <dir>/usr/share/texmf-dist/fonts/truetype</dir>
+</fontconfig>
+EOF
+
+# Install the docs while we're still here
+mkdir -p $PKG/usr/doc/texlive-$VERSION
+cp -a ChangeLog README* $PKG/usr/doc/texlive-$VERSION
+# Install index of provided tex packages to the docs
+mv $PKG/usr/share/texmf-dist/packages.base.gz $PKG/usr/doc/texlive-$VERSION
+
+# Put a symlink to /usr/share/texmf-dist/doc in our Slackware docdir
+ln -s ../../share/texmf-dist/doc $PKG/usr/doc/texlive-$VERSION/doc
+
+# We won't make tlmgr easily available; it's still there, but
+# we'll make it harder to void the warranty :-)
+rm -f $PKG/usr/bin/tlmgr
+cat $CWD/README.tlpkg > $PKG/usr/doc/texlive-$VERSION/README.tlpkg
+
+# Create some directories to make it clear that they're owned by this package
+mkdir -p $PKG/usr/share/{texmf-config,texmf-var,texmf-local}
+
+# Add some perl modules, at least one of which is required by updmap
+mkdir -p $PKG/usr/share/perl5
+mv texk/tests/TeXLive $PKG/usr/share/perl5/
+
+# Move manual pages to the correct place
+mkdir $PKG/usr/man
+mv $PKG/usr/share/texmf-dist/doc/man/man1 $PKG/usr/man
+mv $PKG/usr/share/texmf-dist/doc/man/man5 $PKG/usr/man
+rmdir $PKG/usr/share/texmf-dist/doc/man
+mv $PKG/usr/share/texmf-dist/doc/info $PKG/usr
+
+# Handle the man pages
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done
+
+# Handle the GNU info pages
+rm -f $PKG/usr/info/dir
+gzip -9 $PKG/usr/info/*
+
+mkdir -p $PKG/install
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -p -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
diff --git a/source/t/texlive/texlive.url b/source/t/texlive/texlive.url
new file mode 100644
index 000000000..5ff52d664
--- /dev/null
+++ b/source/t/texlive/texlive.url
@@ -0,0 +1,6 @@
+http://mirrors.ctan.org/systems/texlive/Source/texlive-20170520-source.tar.xz
+5456dfd7858fe53cdd0fda5f0eb4fd35
+
+http://slackware.schoepfer.info/slackbuilds/texlive/2017/texlive/texlive-base-2017.170622.tar.xz
+29bee4e0671431334fc1dcae3e0087c0
+
diff --git a/source/t/transfig/slack-desc b/source/t/transfig/slack-desc
deleted file mode 100644
index e4ee4e7ee..000000000
--- a/source/t/transfig/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-transfig: transfig (transform .fig files)
-transfig:
-transfig: This package contains the binaries to transform .fig files (created by
-transfig: xfig) to some other formats like epsf and LaTeX. If you have
-transfig: installed xfig, you should also install this package if you want to
-transfig: use xfig to create other files than .fig files, which can then be
-transfig: included in your LaTeX documents.
-transfig:
-transfig:
-transfig:
-transfig:
diff --git a/source/t/transfig/transfig.diff b/source/t/transfig/transfig.diff
deleted file mode 100644
index 02722cf69..000000000
--- a/source/t/transfig/transfig.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./fig2dev/Imakefile.orig 2010-06-02 14:18:16.000000000 -0500
-+++ ./fig2dev/Imakefile 2013-09-18 21:09:04.657010139 -0500
-@@ -34,7 +34,7 @@
- XCOMM You should point XFIGLIBDIR to the same directory you did when you compiled
- XCOMM and installed xfig.
-
--XFIGLIBDIR = /usr/local/lib/X11/xfig
-+XFIGLIBDIR = /usr/lib/X11/xfig
-
- XCOMM ******
- XCOMM If your system doesn't have the strerror() function (has sys_errlist) then
-@@ -141,7 +141,7 @@
-
- #ifdef I18N
- I18N_DEFS = -DI18N
--FIG2DEV_LIBDIR = /usr/local/lib/fig2dev
-+FIG2DEV_LIBDIR = /usr/lib/X11/fig2dev
- I18N_DEV_DEFS = $(I18N_DEFS) -DFIG2DEV_LIBDIR=$(FIG2DEV_LIBDIR) -DFIG2DEV_LIBDIR_STR=\\\"$(FIG2DEV_LIBDIR)\\\"
-
- #endif /* I18N */
diff --git a/source/t/xfig/slack-desc b/source/t/xfig/slack-desc
index 387dd2550..06d6e4ef6 100644
--- a/source/t/xfig/slack-desc
+++ b/source/t/xfig/slack-desc
@@ -1,19 +1,19 @@
# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
+# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
xfig: xfig (interactive drawing tool)
xfig:
xfig: This package contains the binary for xfig, an interactive drawing tool
-xfig: under X. Xfig can create fig, epsf, and LaTeX files with various
-xfig: options. You will also need the transfig package so that xfig can
-xfig: export fig files as epsf and LaTeX files. This package also contains
-xfig: a set of basic examples of fig files.
-xfig:
+xfig: under X. Xfig can create fig, epsf, and LaTeX files with various
+xfig: options. You will also need the transfig package so that xfig can
+xfig: export fig files as epsf and LaTeX files. This package also contains
+xfig: a large set of example fig files.
xfig:
+xfig: Homepage: https://sourceforge.net/projects/mcj/files/
xfig:
xfig:
diff --git a/source/t/xfig/xfig-3.2.5c.paths.diff b/source/t/xfig/xfig-3.2.5c.paths.diff
deleted file mode 100644
index 7c998c6d8..000000000
--- a/source/t/xfig/xfig-3.2.5c.paths.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./Imakefile.orig 2012-08-09 12:14:15.000000000 -0500
-+++ ./Imakefile 2013-09-18 17:26:47.819436479 -0500
-@@ -45,7 +45,7 @@
- XCOMM different tree than the "correct" tree that your X system expects. The usual
- XCOMM purpose of DESTDIR is to test an install process by installing in a benign area.
-
--XCOMM XAPPLOADDIR = /home/user/xfig
-+XAPPLOADDIR = /etc/X11/app-defaults
-
- XCOMM Comment out the following definition for XAW3D if you don't to want to use
- XCOMM the 3d Athena Widget Set
-@@ -174,7 +174,7 @@
-
- XCOMM XFIGDOCDIR tells where the html and pdf documentation should go
- XCOMM XFIGDOCDIR = $(DOCDIR)/xfig
--XFIGDOCDIR = /usr/local/xfig/doc
-+XFIGDOCDIR = /usr/doc/xfig-3.2.5c
-
- XCOMM MANDIR tells where the standard man pages should go (no need to change it
- XCOMM if you want the man pages installed in the standard place on your system
diff --git a/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff b/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff
deleted file mode 100644
index a09cbe439..000000000
--- a/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- ./Imakefile.orig 2012-08-09 12:14:15.000000000 -0500
-+++ ./Imakefile 2013-09-18 17:20:15.875449009 -0500
-@@ -428,7 +428,6 @@
- echo Copying pdf and html files to $(DESTDIR)$(XFIGDOCDIR) ; \
- if [ -d $(DESTDIR)$(XFIGDOCDIR)/html ]; then set +x; \
- else (set -x; $(MKDIRHIER) $(DESTDIR)$(XFIGDOCDIR)/html ); fi ; \
-- $(INSTALL) -m 644 -c xfig_man.html $(DESTDIR)$(XFIGDOCDIR) ; \
- $(INSTALL) -m 644 -c xfig_ref_en.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
- $(INSTALL) -m 644 -c xfig-howto.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
- if [ -d html ]; then \
diff --git a/source/t/xfig/xfig.SlackBuild b/source/t/xfig/xfig.SlackBuild
index 097d4a1d8..307fe0d4d 100755
--- a/source/t/xfig/xfig.SlackBuild
+++ b/source/t/xfig/xfig.SlackBuild
@@ -1,6 +1,6 @@
-#!/bin/sh
+#!/bin/bash
-# Copyright 2007, 2008, 2009, 2010, 2013, 2015 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2007, 2008, 2009, 2010, 2013, 2015, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -20,20 +20,30 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+cd $(dirname $0) ; CWD=$(pwd)
-VERSION=3.2.5c
-BUILD=${BUILD:-3}
+PKGNAM=xfig
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
+ i?86) export ARCH=i586 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
esac
fi
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
NUMJOBS=${NUMJOBS:-" -j7 "}
if [ "$ARCH" = "x86_64" ]; then
@@ -42,7 +52,6 @@ else
LIBDIRSUFFIX=""
fi
-CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-xfig
rm -rf $PKG
@@ -50,8 +59,8 @@ mkdir -p $PKG $TMP
cd $TMP
rm -rf xfig.$VERSION
-tar xvf $CWD/xfig.$VERSION.full.tar.xz || exit 1
-cd xfig.$VERSION || exit 1
+tar xvf $CWD/xfig-$VERSION.tar.?z || exit 1
+cd xfig-$VERSION || exit 1
chown -R root:root .
find . \
@@ -62,40 +71,41 @@ find . \
\( -perm 700 -type f \) \
-exec chmod 644 {} \;
-zcat $CWD/xfig-3.2.5c.skip.missing.html.manpage.diff.gz | patch -p1 --verbose || exit 1
-zcat $CWD/xfig-3.2.5c.paths.diff.gz | patch -p1 --verbose || exit 1
# Eliminate menu choice for non-distributed (redundant) PDF documentation:
zcat $CWD/xfig.no.pdf.ref.diff.gz | patch -E -p1 --verbose || exit 1
-# Don't install PDF reference manual because the HTML manual is the same thing
-# (and also includes a Japanese translation):
-zcat $CWD/xfig.no.xfig_ref_en.pdf.diff.gz | patch -E -p1 --verbose || exit 1
+# Use aspell as a spell checker:
zcat $CWD/xfig.fig.ad.diff.gz | patch -E -p1 --verbose || exit 1
-xmkmf || exit 1
-make all $NUMJOBS || make || exit 1
+# Configure:
+CFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --with-appdefaultdir=/etc/X11/app-defaults \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --mandir=/usr/man \
+ --build=$ARCH-slackware-linux || exit 1
+
+# Build and install:
+make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
-make install.man DESTDIR=$PKG || exit 1
-make install.libs DESTDIR=$PKG || exit 1
-make install.html DESTDIR=$PKG || exit 1
+
+# Don't install PDF reference manual because the HTML manual is the same thing
+# (and also includes a Japanese translation):
+rm -f $PKG/usr/doc/$PKGNAM-$VERSION/xfig_ref_en.pdf
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-# Move man page to the correct place:
-if [ -d $PKG/usr/man/man1x ]; then
- mv $PKG/usr/man/man1x $PKG/usr/man/man1
- mv $PKG/usr/man/man1/xfig.1x $PKG/usr/man/man1/xfig.1
-fi
-
+# Compress man page:
gzip -9 $PKG/usr/man/man1/*
+# Add additional documentation:
mkdir -p $PKG/usr/doc/xfig-$VERSION
cp -a \
- FIGAPPS LATEX.AND.XFIG README \
+ CHANGES FIGAPPS INSTALL README \
$PKG/usr/doc/xfig-$VERSION
-( cd $PKG/usr/doc/xfig-$VERSION
- ln -sf /usr/lib${LIBDIRSUFFIX}/X11/xfig/Libraries Libraries
-)
# If there's a CHANGES file, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
diff --git a/source/t/xfig/xfig.fig.ad.diff b/source/t/xfig/xfig.fig.ad.diff
index a6082accb..f4aa29275 100644
--- a/source/t/xfig/xfig.fig.ad.diff
+++ b/source/t/xfig/xfig.fig.ad.diff
@@ -1,11 +1,11 @@
---- ./Fig.ad.orig 2012-02-16 14:21:34.000000000 -0600
-+++ ./Fig.ad 2013-09-18 17:39:13.523412641 -0500
+--- ./app-defaults/Fig.in.orig 2016-07-23 16:12:46.000000000 -0500
++++ ./app-defaults/Fig.in 2018-02-24 13:38:31.916604761 -0600
@@ -34,7 +34,7 @@
! Spell check program - put your favorite spelling check program here.
! It must write the misspelled words to standard output.
--Fig.spellcheckcommand: spell %f
-+Fig.spellcheckcommand: aspell -a %f
+-Fig.spellcheckcommand: spell %f
++Fig.spellcheckcommand: aspell -a %f
! delay before spinner automatically counts when pressed (milliseconds)
Fig.spinner_delay: 1000
diff --git a/source/t/xfig/xfig.no.pdf.ref.diff b/source/t/xfig/xfig.no.pdf.ref.diff
index ab6c80b6e..d25789eec 100644
--- a/source/t/xfig/xfig.no.pdf.ref.diff
+++ b/source/t/xfig/xfig.no.pdf.ref.diff
@@ -1,5 +1,5 @@
---- ./w_cmdpanel.c.orig 2013-06-14 17:39:29.000000000 -0500
-+++ ./w_cmdpanel.c 2013-09-18 17:32:05.187426334 -0500
+--- ./src/w_cmdpanel.c.orig 2016-07-23 16:10:28.000000000 -0500
++++ ./src/w_cmdpanel.c 2018-02-24 13:36:05.267592616 -0600
@@ -215,7 +215,9 @@
menu_def help_menu_items[] = {
{"Xfig Reference (HTML)...", 0, launch_refman, False},
diff --git a/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff b/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff
deleted file mode 100644
index 360ba6a3a..000000000
--- a/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- ./Imakefile.orig 2013-09-18 17:32:24.193425727 -0500
-+++ ./Imakefile 2013-09-18 17:33:38.835423340 -0500
-@@ -428,7 +428,6 @@
- echo Copying pdf and html files to $(DESTDIR)$(XFIGDOCDIR) ; \
- if [ -d $(DESTDIR)$(XFIGDOCDIR)/html ]; then set +x; \
- else (set -x; $(MKDIRHIER) $(DESTDIR)$(XFIGDOCDIR)/html ); fi ; \
-- $(INSTALL) -m 644 -c xfig_ref_en.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
- $(INSTALL) -m 644 -c xfig-howto.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
- if [ -d html ]; then \
- ( cd html ; tar cf - *.* images ) | ( cd $(DESTDIR)$(XFIGDOCDIR)/html ; tar xf - ) ; fi ; \