summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2023-05-25 00:24:33 +0000
committer Eric Hameleers <alien@slackware.com>2023-05-25 13:30:31 +0200
commit73b668742a86c06c84cde2da658b5135367d23fe (patch)
treeff414f05e1499907a1970b1f062918ab73b7f4ef
parent8e0b115ff3be360a6e31635f57629008062a66f3 (diff)
downloadcurrent-20230525002433_15.0.tar.gz
current-20230525002433_15.0.tar.xz
Thu May 25 00:24:33 UTC 202320230525002433_15.0
patches/packages/curl-8.1.1-x86_64-1_slack15.0.txz: Upgraded. This is a bugfix release. patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txz: Upgraded. This update patches a security issue: LuaTeX before 1.17.0 allows execution of arbitrary shell commands when compiling a TeX file obtained from an untrusted source. This occurs because luatex-core.lua lets the original io.popen be accessed. This also affects TeX Live before 2023 r66984 and MiKTeX before 23.5. Thanks to Johannes Schoepfer. For more information, see: https://www.cve.org/CVERecord?id=CVE-2023-32700 (* Security fix *)
-rw-r--r--ChangeLog.rss26
-rw-r--r--ChangeLog.txt14
-rw-r--r--FILELIST.TXT244
-rw-r--r--patches/packages/curl-8.1.1-x86_64-1_slack15.0.txt (renamed from patches/packages/curl-8.1.0-x86_64-1_slack15.0.txt)0
-rw-r--r--patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txt11
-rw-r--r--patches/source/texlive/README.tlpkg18
-rw-r--r--patches/source/texlive/doinst.sh4
-rw-r--r--patches/source/texlive/douninst.sh4
-rwxr-xr-xpatches/source/texlive/dump.unused.internal.libraries.from.sources.sh17
-rw-r--r--patches/source/texlive/prep/README2
-rw-r--r--patches/source/texlive/prep/excludes.texmf21
-rw-r--r--patches/source/texlive/prep/packages.texmf1334
-rw-r--r--patches/source/texlive/prep/texmf_get.sh941
-rw-r--r--patches/source/texlive/slack-desc19
-rw-r--r--patches/source/texlive/texlive-20230313-source-security_fix-1.patch2034
-rwxr-xr-xpatches/source/texlive/texlive.SlackBuild216
-rw-r--r--patches/source/texlive/texlive.unicode5.0.diff24
-rw-r--r--patches/source/texlive/texlive.url2
-rwxr-xr-xrecompress.sh3
19 files changed, 4820 insertions, 114 deletions
diff --git a/ChangeLog.rss b/ChangeLog.rss
index 3fdb0cfbc..b4a4f621c 100644
--- a/ChangeLog.rss
+++ b/ChangeLog.rss
@@ -11,10 +11,32 @@
<description>Tracking Slackware development in git.</description>
<language>en-us</language>
<id xmlns="http://www.w3.org/2005/Atom">urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f</id>
- <pubDate>Mon, 22 May 2023 19:05:02 GMT</pubDate>
- <lastBuildDate>Tue, 23 May 2023 11:30:15 GMT</lastBuildDate>
+ <pubDate>Thu, 25 May 2023 00:24:33 GMT</pubDate>
+ <lastBuildDate>Thu, 25 May 2023 11:30:18 GMT</lastBuildDate>
<generator>maintain_current_git.sh v 1.17</generator>
<item>
+ <title>Thu, 25 May 2023 00:24:33 GMT</title>
+ <pubDate>Thu, 25 May 2023 00:24:33 GMT</pubDate>
+ <link>https://git.slackware.nl/current/tag/?h=20230525002433</link>
+ <guid isPermaLink="false">20230525002433</guid>
+ <description>
+ <![CDATA[<pre>
+patches/packages/curl-8.1.1-x86_64-1_slack15.0.txz: Upgraded.
+ This is a bugfix release.
+patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txz: Upgraded.
+ This update patches a security issue:
+ LuaTeX before 1.17.0 allows execution of arbitrary shell commands when
+ compiling a TeX file obtained from an untrusted source. This occurs
+ because luatex-core.lua lets the original io.popen be accessed. This also
+ affects TeX Live before 2023 r66984 and MiKTeX before 23.5.
+ Thanks to Johannes Schoepfer.
+ For more information, see:
+ https://www.cve.org/CVERecord?id=CVE-2023-32700
+ (* Security fix *)
+ </pre>]]>
+ </description>
+ </item>
+ <item>
<title>Mon, 22 May 2023 19:05:02 GMT</title>
<pubDate>Mon, 22 May 2023 19:05:02 GMT</pubDate>
<link>https://git.slackware.nl/current/tag/?h=20230522190502</link>
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 745192382..ffda12288 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,17 @@
+Thu May 25 00:24:33 UTC 2023
+patches/packages/curl-8.1.1-x86_64-1_slack15.0.txz: Upgraded.
+ This is a bugfix release.
+patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txz: Upgraded.
+ This update patches a security issue:
+ LuaTeX before 1.17.0 allows execution of arbitrary shell commands when
+ compiling a TeX file obtained from an untrusted source. This occurs
+ because luatex-core.lua lets the original io.popen be accessed. This also
+ affects TeX Live before 2023 r66984 and MiKTeX before 23.5.
+ Thanks to Johannes Schoepfer.
+ For more information, see:
+ https://www.cve.org/CVERecord?id=CVE-2023-32700
+ (* Security fix *)
++--------------------------+
Mon May 22 19:05:02 UTC 2023
patches/packages/c-ares-1.19.1-x86_64-1_slack15.0.txz: Upgraded.
This update fixes bugs and security issues:
diff --git a/FILELIST.TXT b/FILELIST.TXT
index 4d677cd7c..965812926 100644
--- a/FILELIST.TXT
+++ b/FILELIST.TXT
@@ -1,20 +1,20 @@
-Mon May 22 19:07:31 UTC 2023
+Thu May 25 00:32:02 UTC 2023
Here is the file list for this directory. If you are using a
mirror site and find missing or extra files in the disk
subdirectories, please have the archive administrator refresh
the mirror.
-drwxr-xr-x 12 root root 4096 2023-05-22 19:05 .
+drwxr-xr-x 12 root root 4096 2023-05-25 00:24 .
-rw-r--r-- 1 root root 5767 2022-02-02 22:44 ./ANNOUNCE.15.0
-rw-r--r-- 1 root root 16609 2022-03-30 19:03 ./CHANGES_AND_HINTS.TXT
--rw-r--r-- 1 root root 1177375 2023-05-19 19:02 ./CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2023-05-19 19:02 ./CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 1177873 2023-05-22 19:07 ./CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2023-05-22 19:07 ./CHECKSUMS.md5.asc
-rw-r--r-- 1 root root 17976 1994-06-10 02:28 ./COPYING
-rw-r--r-- 1 root root 35147 2007-06-30 04:21 ./COPYING3
-rw-r--r-- 1 root root 19573 2016-06-23 20:08 ./COPYRIGHT.TXT
-rw-r--r-- 1 root root 616 2006-10-02 04:37 ./CRYPTO_NOTICE.TXT
--rw-r--r-- 1 root root 2012478 2023-05-22 19:05 ./ChangeLog.txt
+-rw-r--r-- 1 root root 2013154 2023-05-25 00:24 ./ChangeLog.txt
drwxr-xr-x 3 root root 4096 2013-03-20 22:17 ./EFI
drwxr-xr-x 2 root root 4096 2022-02-02 08:21 ./EFI/BOOT
-rw-r--r-- 1 root root 1187840 2021-06-15 19:16 ./EFI/BOOT/bootx64.efi
@@ -25,7 +25,7 @@ drwxr-xr-x 2 root root 4096 2022-02-02 08:21 ./EFI/BOOT
-rwxr-xr-x 1 root root 2504 2019-07-05 18:54 ./EFI/BOOT/make-grub.sh
-rw-r--r-- 1 root root 10722 2013-09-21 19:02 ./EFI/BOOT/osdetect.cfg
-rw-r--r-- 1 root root 1273 2013-08-12 21:08 ./EFI/BOOT/tools.cfg
--rw-r--r-- 1 root root 1535381 2023-05-19 19:01 ./FILELIST.TXT
+-rw-r--r-- 1 root root 1536056 2023-05-22 19:07 ./FILELIST.TXT
-rw-r--r-- 1 root root 1572 2012-08-29 18:27 ./GPG-KEY
-rw-r--r-- 1 root root 864745 2022-02-02 08:25 ./PACKAGES.TXT
-rw-r--r-- 1 root root 8034 2022-02-02 03:36 ./README.TXT
@@ -738,13 +738,13 @@ drwxr-xr-x 2 root root 4096 2008-05-07 05:21 ./pasture/source/php/pear
-rwxr-xr-x 1 root root 9448 2018-05-16 22:38 ./pasture/source/php/php.SlackBuild
-rw-r--r-- 1 root root 775 2017-07-07 19:25 ./pasture/source/php/php.ini-development.diff.gz
-rw-r--r-- 1 root root 830 2005-12-09 05:18 ./pasture/source/php/slack-desc
-drwxr-xr-x 4 root root 4096 2023-05-22 19:07 ./patches
--rw-r--r-- 1 root root 71543 2023-05-22 19:07 ./patches/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2023-05-22 19:07 ./patches/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 96868 2023-05-22 19:07 ./patches/FILE_LIST
--rw-r--r-- 1 root root 12033163 2023-05-22 19:07 ./patches/MANIFEST.bz2
--rw-r--r-- 1 root root 52089 2023-05-22 19:07 ./patches/PACKAGES.TXT
-drwxr-xr-x 3 root root 20480 2023-05-22 19:07 ./patches/packages
+drwxr-xr-x 4 root root 4096 2023-05-25 00:32 ./patches
+-rw-r--r-- 1 root root 72906 2023-05-25 00:32 ./patches/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2023-05-25 00:32 ./patches/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 98678 2023-05-25 00:31 ./patches/FILE_LIST
+-rw-r--r-- 1 root root 12544725 2023-05-25 00:31 ./patches/MANIFEST.bz2
+-rw-r--r-- 1 root root 52781 2023-05-25 00:32 ./patches/PACKAGES.TXT
+drwxr-xr-x 3 root root 20480 2023-05-25 00:31 ./patches/packages
-rw-r--r-- 1 root root 327 2022-02-15 05:07 ./patches/packages/aaa_base-15.0-x86_64-4_slack15.0.txt
-rw-r--r-- 1 root root 10716 2022-02-15 05:07 ./patches/packages/aaa_base-15.0-x86_64-4_slack15.0.txz
-rw-r--r-- 1 root root 163 2022-02-15 05:07 ./patches/packages/aaa_base-15.0-x86_64-4_slack15.0.txz.asc
@@ -778,9 +778,9 @@ drwxr-xr-x 3 root root 20480 2023-05-22 19:07 ./patches/packages
-rw-r--r-- 1 root root 416 2023-05-19 18:13 ./patches/packages/cups-filters-1.28.17-x86_64-1_slack15.0.txt
-rw-r--r-- 1 root root 827024 2023-05-19 18:13 ./patches/packages/cups-filters-1.28.17-x86_64-1_slack15.0.txz
-rw-r--r-- 1 root root 163 2023-05-19 18:13 ./patches/packages/cups-filters-1.28.17-x86_64-1_slack15.0.txz.asc
--rw-r--r-- 1 root root 552 2023-05-17 16:53 ./patches/packages/curl-8.1.0-x86_64-1_slack15.0.txt
--rw-r--r-- 1 root root 1347864 2023-05-17 16:53 ./patches/packages/curl-8.1.0-x86_64-1_slack15.0.txz
--rw-r--r-- 1 root root 163 2023-05-17 16:53 ./patches/packages/curl-8.1.0-x86_64-1_slack15.0.txz.asc
+-rw-r--r-- 1 root root 552 2023-05-23 16:55 ./patches/packages/curl-8.1.1-x86_64-1_slack15.0.txt
+-rw-r--r-- 1 root root 1348832 2023-05-23 16:55 ./patches/packages/curl-8.1.1-x86_64-1_slack15.0.txz
+-rw-r--r-- 1 root root 163 2023-05-23 16:55 ./patches/packages/curl-8.1.1-x86_64-1_slack15.0.txz.asc
-rw-r--r-- 1 root root 373 2022-02-24 19:12 ./patches/packages/cyrus-sasl-2.1.28-x86_64-1_slack15.0.txt
-rw-r--r-- 1 root root 993108 2022-02-24 19:12 ./patches/packages/cyrus-sasl-2.1.28-x86_64-1_slack15.0.txz
-rw-r--r-- 1 root root 163 2022-02-24 19:12 ./patches/packages/cyrus-sasl-2.1.28-x86_64-1_slack15.0.txz.asc
@@ -950,6 +950,9 @@ drwxr-xr-x 2 root root 4096 2023-02-18 02:05 ./patches/packages/linux-5.15
-rw-r--r-- 1 root root 395 2023-03-24 19:11 ./patches/packages/tar-1.34-x86_64-2_slack15.0.txt
-rw-r--r-- 1 root root 850388 2023-03-24 19:11 ./patches/packages/tar-1.34-x86_64-2_slack15.0.txz
-rw-r--r-- 1 root root 163 2023-03-24 19:11 ./patches/packages/tar-1.34-x86_64-2_slack15.0.txz.asc
+-rw-r--r-- 1 root root 508 2023-05-23 19:35 ./patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txt
+-rw-r--r-- 1 root root 68289104 2023-05-23 19:35 ./patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txz
+-rw-r--r-- 1 root root 163 2023-05-23 19:35 ./patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txz.asc
-rw-r--r-- 1 root root 354 2022-02-15 18:37 ./patches/packages/util-linux-2.37.4-x86_64-1_slack15.0.txt
-rw-r--r-- 1 root root 2805300 2022-02-15 18:37 ./patches/packages/util-linux-2.37.4-x86_64-1_slack15.0.txz
-rw-r--r-- 1 root root 163 2022-02-15 18:37 ./patches/packages/util-linux-2.37.4-x86_64-1_slack15.0.txz.asc
@@ -995,7 +998,7 @@ drwxr-xr-x 2 root root 4096 2023-02-18 02:05 ./patches/packages/linux-5.15
-rw-r--r-- 1 root root 463 2023-04-05 18:16 ./patches/packages/zstd-1.5.5-x86_64-1_slack15.0.txt
-rw-r--r-- 1 root root 459652 2023-04-05 18:16 ./patches/packages/zstd-1.5.5-x86_64-1_slack15.0.txz
-rw-r--r-- 1 root root 163 2023-04-05 18:16 ./patches/packages/zstd-1.5.5-x86_64-1_slack15.0.txz.asc
-drwxr-xr-x 75 root root 4096 2023-05-22 18:04 ./patches/source
+drwxr-xr-x 76 root root 4096 2023-05-24 02:18 ./patches/source
drwxr-xr-x 2 root root 4096 2022-01-16 05:07 ./patches/source/aaa_base
-rw-r--r-- 1 root root 11041 2022-02-15 04:49 ./patches/source/aaa_base/_aaa_base.tar.gz
-rwxr-xr-x 1 root root 3894 2022-02-15 05:07 ./patches/source/aaa_base/aaa_base.SlackBuild
@@ -1086,9 +1089,9 @@ drwxr-xr-x 2 root root 4096 2023-05-19 18:08 ./patches/source/cups-filters
-rw-r--r-- 1 root root 46 2021-06-29 19:51 ./patches/source/cups/cups.url
-rw-r--r-- 1 root root 454 2021-04-26 18:11 ./patches/source/cups/doinst.sh.gz
-rw-r--r-- 1 root root 1094 2018-11-29 19:15 ./patches/source/cups/slack-desc
-drwxr-xr-x 2 root root 4096 2023-05-17 16:51 ./patches/source/curl
--rw-r--r-- 1 root root 2612568 2023-05-17 06:09 ./patches/source/curl/curl-8.1.0.tar.xz
--rw-r--r-- 1 root root 488 2023-05-17 06:09 ./patches/source/curl/curl-8.1.0.tar.xz.asc
+drwxr-xr-x 2 root root 4096 2023-05-23 16:54 ./patches/source/curl
+-rw-r--r-- 1 root root 2613348 2023-05-23 06:14 ./patches/source/curl/curl-8.1.1.tar.xz
+-rw-r--r-- 1 root root 488 2023-05-23 06:14 ./patches/source/curl/curl-8.1.1.tar.xz.asc
-rwxr-xr-x 1 root root 4861 2022-04-27 18:34 ./patches/source/curl/curl.SlackBuild
-rw-r--r-- 1 root root 30 2018-04-20 16:49 ./patches/source/curl/curl.url
-rw-r--r-- 1 root root 1004 2019-02-06 21:57 ./patches/source/curl/slack-desc
@@ -1627,6 +1630,23 @@ drwxr-xr-x 2 root root 4096 2023-03-24 19:04 ./patches/source/tar
-rw-r--r-- 1 root root 181 2021-02-13 11:33 ./patches/source/tar/tar-1.34.tar.xz.sig
-rwxr-xr-x 1 root root 5465 2023-03-24 19:04 ./patches/source/tar/tar.SlackBuild
-rw-r--r-- 1 root root 564 2018-09-06 21:52 ./patches/source/tar/tar.nolonezero.diff.gz
+drwxr-xr-x 3 root root 4096 2023-05-23 19:26 ./patches/source/texlive
+-rw-r--r-- 1 root root 773 2017-05-22 17:37 ./patches/source/texlive/README.tlpkg
+-rw-r--r-- 1 root root 137 2023-03-21 11:44 ./patches/source/texlive/doinst.sh.gz
+-rw-r--r-- 1 root root 135 2023-03-22 12:55 ./patches/source/texlive/douninst.sh
+-rwxr-xr-x 1 root root 893 2023-03-21 17:45 ./patches/source/texlive/dump.unused.internal.libraries.from.sources.sh
+drwxr-xr-x 2 root root 4096 2023-03-22 07:06 ./patches/source/texlive/prep
+-rw-r--r-- 1 root root 109 2017-09-29 05:12 ./patches/source/texlive/prep/README
+-rw-r--r-- 1 root root 523 2022-05-21 17:43 ./patches/source/texlive/prep/excludes.texmf
+-rw-r--r-- 1 root root 14014 2023-03-22 06:35 ./patches/source/texlive/prep/packages.texmf
+-rw-r--r-- 1 root root 32992 2023-03-22 06:53 ./patches/source/texlive/prep/texmf_get.sh
+-rw-r--r-- 1 root root 996 2018-08-22 16:53 ./patches/source/texlive/slack-desc
+-rw-r--r-- 1 root root 28288604 2023-03-11 18:14 ./patches/source/texlive/texlive-20230311-source.tar.xz
+-rw-r--r-- 1 root root 19770 2023-05-22 19:22 ./patches/source/texlive/texlive-20230313-source-security_fix-1.patch.gz
+-rw-r--r-- 1 root root 58399144 2023-03-22 07:17 ./patches/source/texlive/texlive-base-230322.tar.xz
+-rwxr-xr-x 1 root root 6995 2023-05-23 19:28 ./patches/source/texlive/texlive.SlackBuild
+-rw-r--r-- 1 root root 334 2023-05-23 19:26 ./patches/source/texlive/texlive.unicode5.0.diff.gz
+-rw-r--r-- 1 root root 150 2023-03-22 07:44 ./patches/source/texlive/texlive.url
drwxr-xr-x 4 root root 4096 2022-02-15 02:04 ./patches/source/util-linux
-rw-r--r-- 1 root root 53236 2011-07-12 20:47 ./patches/source/util-linux/adjtimex_1.29-2.2.diff.gz
-rw-r--r-- 1 root root 85551 2010-04-17 03:32 ./patches/source/util-linux/adjtimex_1.29.orig.tar.gz
@@ -2733,26 +2753,26 @@ drwxr-xr-x 2 root root 69632 2022-02-01 08:29 ./slackware64/kde
-rw-r--r-- 1 root root 308 2022-01-06 22:02 ./slackware64/kde/baloo-widgets-21.12.1-x86_64-1.txt
-rw-r--r-- 1 root root 114040 2022-01-06 22:02 ./slackware64/kde/baloo-widgets-21.12.1-x86_64-1.txz
-rw-r--r-- 1 root root 163 2022-01-06 22:02 ./slackware64/kde/baloo-widgets-21.12.1-x86_64-1.txz.asc
--rw-r--r-- 1 root root 181 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txt
--rw-r--r-- 1 root root 2412052 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txz.asc
--rw-r--r-- 1 root root 234 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txt
--rw-r--r-- 1 root root 293380 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txz.asc
--rw-r--r-- 1 root root 439 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txt
--rw-r--r-- 1 root root 249008 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txz.asc
--rw-r--r-- 1 root root 426 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txt
--rw-r--r-- 1 root root 886364 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txz.asc
--rw-r--r-- 1 root root 331 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txt
--rw-r--r-- 1 root root 297460 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txz.asc
--rw-r--r-- 1 root root 195 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txt
--rw-r--r-- 1 root root 71737464 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txz
--rw-r--r-- 1 root root 163 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txz.asc
--rw-r--r-- 1 root root 202 2022-01-04 21:34 ./slackware64/kde/breeze-grub-5.23.5-x86_64-1.txt
--rw-r--r-- 1 root root 3140496 2022-01-04 21:34 ./slackware64/kde/breeze-grub-5.23.5-x86_64-1.txz
+-rw-r--r-- 1 root root 181 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txt
+-rw-r--r-- 1 root root 2412052 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-06 22:39 ./slackware64/kde/blinken-21.12.1-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 234 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txt
+-rw-r--r-- 1 root root 293380 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-04 21:49 ./slackware64/kde/bluedevil-5.23.5-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 439 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txt
+-rw-r--r-- 1 root root 249008 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-08 22:27 ./slackware64/kde/bluez-qt-5.90.0-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 426 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txt
+-rw-r--r-- 1 root root 886364 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-06 22:30 ./slackware64/kde/bomber-21.12.1-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 331 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txt
+-rw-r--r-- 1 root root 297460 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-06 22:29 ./slackware64/kde/bovo-21.12.1-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 195 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txt
+-rw-r--r-- 1 root root 71737464 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2022-01-04 21:34 ./slackware64/kde/breeze-5.23.5-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 202 2022-01-04 21:34 ./slackware64/kde/breeze-grub-5.23.5-x86_64-1.txt
+-rw-r--r-- 1 root root 3140496 2022-01-04 21:34 ./slackware64/kde/breeze-grub-5.23.5-x86_64-1.txz
-rw-r--r-- 1 root root 163 2022-01-04 21:34 ./slackware64/kde/breeze-grub-5.23.5-x86_64-1.txz.asc
-rw-r--r-- 1 root root 218 2022-01-04 21:34 ./slackware64/kde/breeze-gtk-5.23.5-x86_64-1.txt
-rw-r--r-- 1 root root 182972 2022-01-04 21:34 ./slackware64/kde/breeze-gtk-5.23.5-x86_64-1.txz
@@ -5470,26 +5490,26 @@ drwxr-xr-x 2 root root 65536 2022-02-01 04:47 ./slackware64/x
-rw-r--r-- 1 root root 7968 2021-04-17 18:28 ./slackware64/x/eglexternalplatform-1.1-x86_64-1.txz
-rw-r--r-- 1 root root 163 2021-04-17 18:28 ./slackware64/x/eglexternalplatform-1.1-x86_64-1.txz.asc
-rw-r--r-- 1 root root 330 2021-02-13 13:18 ./slackware64/x/encodings-1.0.5-noarch-3.txt
--rw-r--r-- 1 root root 581184 2021-02-13 13:18 ./slackware64/x/encodings-1.0.5-noarch-3.txz
--rw-r--r-- 1 root root 163 2021-02-13 13:18 ./slackware64/x/encodings-1.0.5-noarch-3.txz.asc
--rw-r--r-- 1 root root 501 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txt
--rw-r--r-- 1 root root 7256024 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txz
--rw-r--r-- 1 root root 163 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txz.asc
--rw-r--r-- 1 root root 235 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txt
--rw-r--r-- 1 root root 127552 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txz
--rw-r--r-- 1 root root 163 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txz.asc
--rw-r--r-- 1 root root 354 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txt
--rw-r--r-- 1 root root 46344 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txz
--rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txz.asc
--rw-r--r-- 1 root root 248 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txt
--rw-r--r-- 1 root root 26676 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txz
--rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txz.asc
--rw-r--r-- 1 root root 304 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txt
--rw-r--r-- 1 root root 62688 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txz
--rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txz.asc
--rw-r--r-- 1 root root 304 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txt
--rw-r--r-- 1 root root 9915684 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txz
--rw-r--r-- 1 root root 163 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txz.asc
+-rw-r--r-- 1 root root 581184 2021-02-13 13:18 ./slackware64/x/encodings-1.0.5-noarch-3.txz
+-rw-r--r-- 1 root root 163 2021-02-13 13:18 ./slackware64/x/encodings-1.0.5-noarch-3.txz.asc
+-rw-r--r-- 1 root root 501 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txt
+-rw-r--r-- 1 root root 7256024 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txz
+-rw-r--r-- 1 root root 163 2021-02-13 12:46 ./slackware64/x/fcitx-4.2.9.8-x86_64-3.txz.asc
+-rw-r--r-- 1 root root 235 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txt
+-rw-r--r-- 1 root root 127552 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2021-04-06 18:34 ./slackware64/x/fcitx-anthy-0.2.4-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 354 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txt
+-rw-r--r-- 1 root root 46344 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txz
+-rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-configtool-0.4.10-x86_64-3.txz.asc
+-rw-r--r-- 1 root root 248 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txt
+-rw-r--r-- 1 root root 26676 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txz
+-rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-hangul-0.3.1-x86_64-3.txz.asc
+-rw-r--r-- 1 root root 304 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txt
+-rw-r--r-- 1 root root 62688 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txz
+-rw-r--r-- 1 root root 163 2021-02-13 12:44 ./slackware64/x/fcitx-kkc-0.1.4-x86_64-3.txz.asc
+-rw-r--r-- 1 root root 304 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txt
+-rw-r--r-- 1 root root 9915684 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txz
+-rw-r--r-- 1 root root 163 2021-02-13 12:45 ./slackware64/x/fcitx-libpinyin-0.5.4-x86_64-2.txz.asc
-rw-r--r-- 1 root root 266 2021-02-13 12:45 ./slackware64/x/fcitx-m17n-0.2.4-x86_64-3.txt
-rw-r--r-- 1 root root 28156 2021-02-13 12:45 ./slackware64/x/fcitx-m17n-0.2.4-x86_64-3.txz
-rw-r--r-- 1 root root 163 2021-02-13 12:45 ./slackware64/x/fcitx-m17n-0.2.4-x86_64-3.txz.asc
@@ -8597,36 +8617,36 @@ drwxr-xr-x 2 root root 4096 2022-01-06 01:36 ./source/d/mercurial
-rw-r--r-- 1 root root 4764161 2022-01-05 17:23 ./source/d/mercurial/mercurial-6.0.1.tar.lz
-rwxr-xr-x 1 root root 4114 2021-11-23 19:08 ./source/d/mercurial/mercurial.SlackBuild
-rw-r--r-- 1 root root 38 2017-12-02 19:13 ./source/d/mercurial/mercurial.url
--rw-r--r-- 1 root root 1245 2018-02-27 06:13 ./source/d/mercurial/slack-desc
-drwxr-xr-x 2 root root 4096 2021-11-03 00:39 ./source/d/meson
--rw-r--r-- 1 root root 756 2021-05-11 18:50 ./source/d/meson/39bb5e07eab736b525abfc66eb5ad0dd626aedc6.patch.gz
--rw-r--r-- 1 root root 3439483 2021-10-28 09:00 ./source/d/meson/meson-0.59.4.tar.lz
--rwxr-xr-x 1 root root 3004 2021-11-03 00:39 ./source/d/meson/meson.SlackBuild
--rw-r--r-- 1 root root 185 2021-05-11 18:55 ./source/d/meson/meson.import.copy.diff.gz
--rw-r--r-- 1 root root 36 2018-11-09 03:24 ./source/d/meson/meson.url
--rw-r--r-- 1 root root 895 2018-02-27 06:13 ./source/d/meson/slack-desc
-drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/nasm
--rw-r--r-- 1 root root 995732 2020-08-28 16:04 ./source/d/nasm/nasm-2.15.05.tar.xz
--rwxr-xr-x 1 root root 3182 2021-02-13 05:31 ./source/d/nasm/nasm.SlackBuild
--rw-r--r-- 1 root root 791 2018-02-27 06:13 ./source/d/nasm/slack-desc
-drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/ninja
--rw-r--r-- 1 root root 170607 2020-11-28 11:27 ./source/d/ninja/ninja-1.10.2.tar.lz
--rwxr-xr-x 1 root root 4463 2021-02-13 05:31 ./source/d/ninja/ninja.SlackBuild
--rw-r--r-- 1 root root 37 2020-08-19 02:05 ./source/d/ninja/ninja.url
--rw-r--r-- 1 root root 889 2018-02-27 06:13 ./source/d/ninja/slack-desc
-drwxr-xr-x 2 root root 4096 2021-06-14 12:23 ./source/d/opencl-headers
--rw-r--r-- 1 root root 45288 2021-06-14 12:08 ./source/d/opencl-headers/OpenCL-Headers-2021.04.29.tar.lz
--rwxr-xr-x 1 root root 2553 2021-06-15 18:58 ./source/d/opencl-headers/opencl-headers.SlackBuild
--rw-r--r-- 1 root root 56 2021-06-14 12:16 ./source/d/opencl-headers/opencl-headers.url
--rw-r--r-- 1 root root 811 2021-06-15 18:56 ./source/d/opencl-headers/slack-desc
-drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/oprofile
--rw-r--r-- 1 root root 896753 2020-07-20 15:35 ./source/d/oprofile/oprofile-1.4.0.tar.lz
--rwxr-xr-x 1 root root 4462 2021-08-28 19:45 ./source/d/oprofile/oprofile.SlackBuild
--rw-r--r-- 1 root root 1002 2018-02-27 06:13 ./source/d/oprofile/slack-desc
-drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/p2c
--rw-r--r-- 1 root root 304657 2016-01-04 23:03 ./source/d/p2c/p2c-2.01.tar.lz
--rwxr-xr-x 1 root root 5093 2021-02-13 05:31 ./source/d/p2c/p2c.SlackBuild
--rw-r--r-- 1 root root 50 2019-02-21 19:17 ./source/d/p2c/p2c.url
+-rw-r--r-- 1 root root 1245 2018-02-27 06:13 ./source/d/mercurial/slack-desc
+drwxr-xr-x 2 root root 4096 2021-11-03 00:39 ./source/d/meson
+-rw-r--r-- 1 root root 756 2021-05-11 18:50 ./source/d/meson/39bb5e07eab736b525abfc66eb5ad0dd626aedc6.patch.gz
+-rw-r--r-- 1 root root 3439483 2021-10-28 09:00 ./source/d/meson/meson-0.59.4.tar.lz
+-rwxr-xr-x 1 root root 3004 2021-11-03 00:39 ./source/d/meson/meson.SlackBuild
+-rw-r--r-- 1 root root 185 2021-05-11 18:55 ./source/d/meson/meson.import.copy.diff.gz
+-rw-r--r-- 1 root root 36 2018-11-09 03:24 ./source/d/meson/meson.url
+-rw-r--r-- 1 root root 895 2018-02-27 06:13 ./source/d/meson/slack-desc
+drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/nasm
+-rw-r--r-- 1 root root 995732 2020-08-28 16:04 ./source/d/nasm/nasm-2.15.05.tar.xz
+-rwxr-xr-x 1 root root 3182 2021-02-13 05:31 ./source/d/nasm/nasm.SlackBuild
+-rw-r--r-- 1 root root 791 2018-02-27 06:13 ./source/d/nasm/slack-desc
+drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/ninja
+-rw-r--r-- 1 root root 170607 2020-11-28 11:27 ./source/d/ninja/ninja-1.10.2.tar.lz
+-rwxr-xr-x 1 root root 4463 2021-02-13 05:31 ./source/d/ninja/ninja.SlackBuild
+-rw-r--r-- 1 root root 37 2020-08-19 02:05 ./source/d/ninja/ninja.url
+-rw-r--r-- 1 root root 889 2018-02-27 06:13 ./source/d/ninja/slack-desc
+drwxr-xr-x 2 root root 4096 2021-06-14 12:23 ./source/d/opencl-headers
+-rw-r--r-- 1 root root 45288 2021-06-14 12:08 ./source/d/opencl-headers/OpenCL-Headers-2021.04.29.tar.lz
+-rwxr-xr-x 1 root root 2553 2021-06-15 18:58 ./source/d/opencl-headers/opencl-headers.SlackBuild
+-rw-r--r-- 1 root root 56 2021-06-14 12:16 ./source/d/opencl-headers/opencl-headers.url
+-rw-r--r-- 1 root root 811 2021-06-15 18:56 ./source/d/opencl-headers/slack-desc
+drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/oprofile
+-rw-r--r-- 1 root root 896753 2020-07-20 15:35 ./source/d/oprofile/oprofile-1.4.0.tar.lz
+-rwxr-xr-x 1 root root 4462 2021-08-28 19:45 ./source/d/oprofile/oprofile.SlackBuild
+-rw-r--r-- 1 root root 1002 2018-02-27 06:13 ./source/d/oprofile/slack-desc
+drwxr-xr-x 2 root root 4096 2021-02-13 05:31 ./source/d/p2c
+-rw-r--r-- 1 root root 304657 2016-01-04 23:03 ./source/d/p2c/p2c-2.01.tar.lz
+-rwxr-xr-x 1 root root 5093 2021-02-13 05:31 ./source/d/p2c/p2c.SlackBuild
+-rw-r--r-- 1 root root 50 2019-02-21 19:17 ./source/d/p2c/p2c.url
-rw-r--r-- 1 root root 994 2018-02-27 06:13 ./source/d/p2c/slack-desc
drwxr-xr-x 2 root root 4096 2022-01-23 01:07 ./source/d/parallel
-rw-r--r-- 1 root root 1794754 2022-01-22 15:49 ./source/d/parallel/parallel-20220122.tar.lz
@@ -15029,28 +15049,28 @@ drwxr-xr-x 2 root root 12288 2020-05-18 17:50 ./source/x/x11/slack-desc
-rw-r--r-- 1 root root 822 2012-04-08 02:11 ./source/x/x11/slack-desc/font-bh-ttf
-rw-r--r-- 1 root root 850 2012-04-08 02:12 ./source/x/x11/slack-desc/font-bh-type1
-rw-r--r-- 1 root root 960 2012-04-08 02:13 ./source/x/x11/slack-desc/font-bitstream-100dpi
--rw-r--r-- 1 root root 946 2012-04-08 02:13 ./source/x/x11/slack-desc/font-bitstream-75dpi
--rw-r--r-- 1 root root 962 2012-04-08 02:13 ./source/x/x11/slack-desc/font-bitstream-speedo
--rw-r--r-- 1 root root 948 2012-04-08 02:14 ./source/x/x11/slack-desc/font-bitstream-type1
--rw-r--r-- 1 root root 946 2012-04-08 02:15 ./source/x/x11/slack-desc/font-cronyx-cyrillic
--rw-r--r-- 1 root root 890 2012-04-08 02:15 ./source/x/x11/slack-desc/font-cursor-misc
--rw-r--r-- 1 root root 890 2012-04-08 02:15 ./source/x/x11/slack-desc/font-daewoo-misc
--rw-r--r-- 1 root root 848 2012-04-08 02:15 ./source/x/x11/slack-desc/font-dec-misc
--rw-r--r-- 1 root root 864 2012-04-08 02:16 ./source/x/x11/slack-desc/font-ibm-type1
--rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-isas-misc
--rw-r--r-- 1 root root 848 2012-04-08 02:17 ./source/x/x11/slack-desc/font-jis-misc
--rw-r--r-- 1 root root 876 2012-04-08 02:17 ./source/x/x11/slack-desc/font-micro-misc
--rw-r--r-- 1 root root 918 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-cyrillic
--rw-r--r-- 1 root root 918 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-ethiopic
--rw-r--r-- 1 root root 890 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-meltho
--rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-misc
--rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-mutt-misc
--rw-r--r-- 1 root root 946 2012-04-08 02:17 ./source/x/x11/slack-desc/font-schumacher-misc
--rw-r--r-- 1 root root 946 2012-04-08 02:18 ./source/x/x11/slack-desc/font-screen-cyrillic
--rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-sony-misc
--rw-r--r-- 1 root root 848 2012-04-08 02:18 ./source/x/x11/slack-desc/font-sun-misc
--rw-r--r-- 1 root root 822 2012-04-08 02:18 ./source/x/x11/slack-desc/font-util
--rw-r--r-- 1 root root 974 2012-04-08 02:19 ./source/x/x11/slack-desc/font-winitzki-cyrillic
+-rw-r--r-- 1 root root 946 2012-04-08 02:13 ./source/x/x11/slack-desc/font-bitstream-75dpi
+-rw-r--r-- 1 root root 962 2012-04-08 02:13 ./source/x/x11/slack-desc/font-bitstream-speedo
+-rw-r--r-- 1 root root 948 2012-04-08 02:14 ./source/x/x11/slack-desc/font-bitstream-type1
+-rw-r--r-- 1 root root 946 2012-04-08 02:15 ./source/x/x11/slack-desc/font-cronyx-cyrillic
+-rw-r--r-- 1 root root 890 2012-04-08 02:15 ./source/x/x11/slack-desc/font-cursor-misc
+-rw-r--r-- 1 root root 890 2012-04-08 02:15 ./source/x/x11/slack-desc/font-daewoo-misc
+-rw-r--r-- 1 root root 848 2012-04-08 02:15 ./source/x/x11/slack-desc/font-dec-misc
+-rw-r--r-- 1 root root 864 2012-04-08 02:16 ./source/x/x11/slack-desc/font-ibm-type1
+-rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-isas-misc
+-rw-r--r-- 1 root root 848 2012-04-08 02:17 ./source/x/x11/slack-desc/font-jis-misc
+-rw-r--r-- 1 root root 876 2012-04-08 02:17 ./source/x/x11/slack-desc/font-micro-misc
+-rw-r--r-- 1 root root 918 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-cyrillic
+-rw-r--r-- 1 root root 918 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-ethiopic
+-rw-r--r-- 1 root root 890 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-meltho
+-rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-misc-misc
+-rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-mutt-misc
+-rw-r--r-- 1 root root 946 2012-04-08 02:17 ./source/x/x11/slack-desc/font-schumacher-misc
+-rw-r--r-- 1 root root 946 2012-04-08 02:18 ./source/x/x11/slack-desc/font-screen-cyrillic
+-rw-r--r-- 1 root root 862 2012-04-08 02:17 ./source/x/x11/slack-desc/font-sony-misc
+-rw-r--r-- 1 root root 848 2012-04-08 02:18 ./source/x/x11/slack-desc/font-sun-misc
+-rw-r--r-- 1 root root 822 2012-04-08 02:18 ./source/x/x11/slack-desc/font-util
+-rw-r--r-- 1 root root 974 2012-04-08 02:19 ./source/x/x11/slack-desc/font-winitzki-cyrillic
-rw-r--r-- 1 root root 920 2012-04-08 02:20 ./source/x/x11/slack-desc/font-xfree86-type1
-rw-r--r-- 1 root root 883 2012-04-08 02:20 ./source/x/x11/slack-desc/fontcacheproto
-rw-r--r-- 1 root root 824 2012-04-08 02:20 ./source/x/x11/slack-desc/fontsproto
diff --git a/patches/packages/curl-8.1.0-x86_64-1_slack15.0.txt b/patches/packages/curl-8.1.1-x86_64-1_slack15.0.txt
index 54c4e875d..54c4e875d 100644
--- a/patches/packages/curl-8.1.0-x86_64-1_slack15.0.txt
+++ b/patches/packages/curl-8.1.1-x86_64-1_slack15.0.txt
diff --git a/patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txt b/patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txt
new file mode 100644
index 000000000..6c6caa414
--- /dev/null
+++ b/patches/packages/texlive-2023.230322-x86_64-1_slack15.0.txt
@@ -0,0 +1,11 @@
+texlive: texlive (TeX binaries, support files, and formats)
+texlive:
+texlive: This package contains binaries, support files, TeX formats and
+texlive: packages, and other files included in 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 and texlive-docs packages.
+texlive:
+texlive:
diff --git a/patches/source/texlive/README.tlpkg b/patches/source/texlive/README.tlpkg
new file mode 100644
index 000000000..35c25dd25
--- /dev/null
+++ b/patches/source/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/patches/source/texlive/doinst.sh b/patches/source/texlive/doinst.sh
new file mode 100644
index 000000000..cd1c7fe63
--- /dev/null
+++ b/patches/source/texlive/doinst.sh
@@ -0,0 +1,4 @@
+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
diff --git a/patches/source/texlive/douninst.sh b/patches/source/texlive/douninst.sh
new file mode 100644
index 000000000..27d51c4ae
--- /dev/null
+++ b/patches/source/texlive/douninst.sh
@@ -0,0 +1,4 @@
+# Remove directories/data generated by doinst.sh
+rm -rf usr/share/texmf-config
+rm -rf usr/share/texmf-local
+rm -rf usr/share/texmf-var
diff --git a/patches/source/texlive/dump.unused.internal.libraries.from.sources.sh b/patches/source/texlive/dump.unused.internal.libraries.from.sources.sh
new file mode 100755
index 000000000..79027a199
--- /dev/null
+++ b/patches/source/texlive/dump.unused.internal.libraries.from.sources.sh
@@ -0,0 +1,17 @@
+#!/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 graphite2 harfbuzz mpfr icu libpng pixman zlib )
+( cd texlive-${VERSION}-source/utils && rm -rf asymptote )
+( cd texlive-${VERSION}-source/utils && rm -rf texdoctk )
+( cd texlive-${VERSION}-source/utils && rm -rf m-tx )
+( cd texlive-${VERSION}-source/texk/texlive && rm -rf w*_wrapper )
+tar cf texlive-${VERSION}-source.tar texlive-${VERSION}-source
+rm -r texlive-${VERSION}-source
+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/patches/source/texlive/prep/README b/patches/source/texlive/prep/README
new file mode 100644
index 000000000..479e834d8
--- /dev/null
+++ b/patches/source/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/patches/source/texlive/prep/excludes.texmf b/patches/source/texlive/prep/excludes.texmf
new file mode 100644
index 000000000..8c909631a
--- /dev/null
+++ b/patches/source/texlive/prep/excludes.texmf
@@ -0,0 +1,21 @@
+# Globally exclude packages/collections, which are
+# -useless without tlmgr-installer
+# -non-linux, e.g. texworks(windows binary)
+# -covered by an external package, e.g. asymptote on SBo
+# -binaries provided already by texlive.Slackbuild
+# -only sources, e.g. metatype1, patch, ...
+
+global_exclude="
+ 00texlive.config
+ 00texlive.image
+ 00texlive.installation
+ 00texlive.installer
+ asymptote
+ collection-texworks
+ collection-wintools
+ texlive-common
+ texlive-msg-translations
+ texosquery
+ tlcockpit
+ tlshell
+ "
diff --git a/patches/source/texlive/prep/packages.texmf b/patches/source/texlive/prep/packages.texmf
new file mode 100644
index 000000000..adadc069b
--- /dev/null
+++ b/patches/source/texlive/prep/packages.texmf
@@ -0,0 +1,1334 @@
+ # special packages, move docs to -docs
+special_packages="
+ koma-script
+ "
+
+# keep precompiled binaries not shipped as source by TL upstream,
+# corresponding package should be in -extra, keep an eye on that ;-)
+# list binary, not package name
+keep_precompiled="
+ biber
+ luametatex
+ "
+
+# Packages for -base, remaining packages are going to -extra
+PACKAGES="
+collection-basic
+collection-latex
+collection-latexrecommended
+caption
+koma-script
+collection-metapost
+collection-humanities
+collection-langenglish
+collection-langitalian
+collection-langportuguese
+collection-langspanish
+$(grep ^"name hyphen-.*" $db | cut -d' ' -f2 )
+$(grep ^"name babel-.*" $db | cut -d' ' -f2 )
+
+# collection-langczechslovak
+lshort-czech
+lshort-slovak
+texlive-cz
+vlna
+
+# collection-langcyrillic
+cmcyr
+cyrillic
+cyrillic-bin
+cyrplain
+disser
+eskd
+eskdx
+gost
+lcyw
+lh
+lhcyr
+mongolian-babel
+numnameru
+ruhyphen
+russ
+serbian-apostrophe
+serbian-date-lat
+serbian-def-cyr
+serbian-lig
+t2
+ukrhyph
+xecyrmongolian
+
+# collection-langgreek
+begingreek
+betababel
+gfsbaskerville
+gfsporson
+greek-fontenc
+greek-inputenc
+greekdates
+greektex
+greektonoi
+ibycus-babel
+ibygrk
+levy
+lgreek
+mkgrkindex
+teubner
+xgreek
+yannisgr
+
+# collection-fontsrecommended
+avantgar
+bookman
+charter
+courier
+euro
+euro-ce
+eurosym
+fpl
+helvetic
+lm
+lm-math
+manfnt-font
+marvosym
+mathpazo
+mflogo-font
+ncntrsbk
+palatino
+pxfonts
+rsfs
+symbol
+tex-gyre
+tex-gyre-math
+times
+tipa
+txfonts
+utopia
+wasy
+wasysym
+zapfchan
+zapfding
+
+$(collection_by_size luatex 99999 || exit 1)
+optex
+
+$(collection_by_size plaingeneric 99999 || exit 1)
+tex4ht
+
+$(collection_by_size fontutils 999999 || exit 1)
+
+$(collection_by_size fontsextra 38999 || exit 1)
+ascii-font
+bbm
+bbm-macros
+bbold
+cmbright
+eulervm
+fontawesome5
+ly1
+sauter
+sauterfonts
+
+# collection-latexextra
+acronym
+adjustbox
+bigfoot
+collectbox
+comment
+coolfn
+csquotes
+datatool
+datetime2
+$(grep ^"name datetime2-.*" $db | cut -d' ' -f2 )
+darkmode
+docshots
+doublestroke
+enumitem
+etoc
+frame
+framed
+gensymb
+glossaries
+$(grep ^"name glossaries-.*" $db | cut -d' ' -f2 )
+gradient-text
+imakeidx
+lipsum
+mfirstuc
+mdframed
+moderncv
+moreverb
+multirow
+nfssext-cfr
+nomencl
+opencolor
+pangram
+resmes
+sectsty
+splitindex
+stackengine
+supertabular
+swungdash
+termcal
+tocloft
+ucs
+wrapfig2
+xpatch
+xstring
+
+a0poster
+a4wide
+a5comb
+abraces
+abstract
+accsupp
+acroterm
+actuarialangle
+actuarialsymbol
+addfont
+addlines
+adjmulticol
+adrconv
+advdate
+alnumsec
+alphalph
+altfont
+altsubsup
+amsaddr
+anonchap
+answers
+anyfontsize
+appendix
+appendixnumberbeamer
+apptools
+arabicfront
+arcs
+arraycols
+arrayjobx
+arraysort
+asciilist
+assignment
+association-matrix
+atenddvi
+atendofenv
+authoraftertitle
+authorarchive
+autofancyhdr
+autonum
+autopuncitems
+axessibility
+background
+bankstatement
+basicarith
+bchart
+beamerappendixnote
+beameraudience
+beamerauxtheme
+beamercolorthemeowl
+beamerdarkthemes
+beamersubframe
+beamertheme-arguelles
+beamertheme-cuerna
+beamertheme-detlevcm
+beamertheme-epyt
+beamertheme-light
+beamertheme-phnompenh
+beamertheme-saintpetersburg
+beamertheme-simpledarkblue
+beamertheme-simpleplus
+beamertheme-upenn-bc
+beamerthemejltree
+beamerthemelalic
+beamerthemenirma
+beamerthemenord
+bearwear
+beton
+bez123
+bhcexam
+bibletext
+bigints
+bilingualpages
+biochemistry-colors
+bizcard
+block
+blowup
+bold-extra
+book-of-common-prayer
+booklet
+boolexpr
+bophook
+boxedminipage
+bracketkey
+braket
+breakurl
+bubblesort
+bullcntr
+bxcalc
+bxdpx-beamer
+bxdvidriver
+bxenclose
+calcage
+calrsfs
+cancel
+canoniclayout
+capt-of
+captcont
+captdef
+catchfilebetweentags
+catechis
+cclicenses
+cd
+cd-cover
+cdcmd
+cellspace
+censor
+centeredline
+centerlastline
+changelayout
+changelog
+chappg
+chapterfolder
+cheatsheet
+checkend
+childdoc
+chkfloat
+chletter
+chngcntr
+chronology
+circledsteps
+classics
+classpack
+clefval
+clicks
+clipboard
+clock
+clrdblpg
+clrstrip
+cmdstring
+cmdtrack
+cmsd
+cntformats
+cntperchap
+codebox
+codesection
+collcell
+colophon
+color-edits
+colordoc
+colorinfo
+coloring
+colorwav
+colorweb
+colourchange
+combelow
+comma
+commado
+commedit
+competences
+constants
+continue
+contour
+conv-xkv
+cooking
+coollist
+coolstr
+coolthms
+cooltooltips
+copyedit
+copyrightbox
+coseoul
+counttexruns
+courseoutline
+coverpage
+cprotect
+cprotectinside
+crbox
+crefthe
+crossreference
+crossreftools
+crumbs
+css-colors
+csvmerge
+cuisine
+currency
+currfile
+currvita
+cutwin
+cv
+cyber
+cybercic
+dashbox
+dashrule
+dashundergaps
+datax
+datenumber
+datestamp
+dblfloatfix
+debate
+decimal
+decorule
+delimtxt
+diagbox
+diagnose
+dichokey
+dimnum
+dirtytalk
+dnaseq
+docmfp
+docmute
+documentation
+docutils
+doi
+dotarrow
+dotlessi
+dotseqn
+download
+dox
+dpfloat
+dprogress
+drac
+draftfigure
+draftwatermark
+dynamicnumber
+dynblocks
+ean13isbn
+easy-todo
+easyfig
+easyformat
+easyreview
+ecclesiastic
+ecv
+ed
+edichokey
+eemeir
+efbox
+egplot
+ehhline
+einfart
+ellipsis
+elmath
+elocalloc
+emarks
+embedall
+embrac
+emptypage
+endheads
+endnotes-hy
+engpron
+engrec
+envbig
+environ
+epigraph
+epigraph-keys
+eq-pin2corr
+eqell
+eqlist
+eqnalign
+eqname
+eqparbox
+errata
+erw-l3
+esdiff
+esieecv
+esindex
+etaremune
+eukdate
+eulerpx
+everyhook
+everypage
+excludeonly
+exercisepoints
+exercises
+exesheet
+exp-testopt
+expdlist
+exsol
+fancyhandout
+fancynum
+fancypar
+fancyslides
+fancytabs
+fbox
+fcolumn
+fetchcls
+fewerfloatpages
+ffcode
+fifo-stack
+figsize
+filecontents
+filecontentsdef
+filemod
+fink
+finstrut
+fixcmex
+fixfoot
+fixmetodonotes
+fjodor
+flabels
+flacards
+flagderiv
+flashcards
+flexipage
+flipbook
+flippdf
+floatflt
+fmp
+fn2end
+fnbreak
+fncylab
+fnpara
+fnumprint
+foilhtml
+fontaxes
+footnotebackref
+footnoterange
+foreign
+forloop
+forms16be
+formular
+fragments
+ftcap
+ftnxtra
+fullblck
+fullminipage
+fullwidth
+fundus-calligra
+fundus-cyr
+fundus-sueterlin
+fwlw
+gatherenum
+gcard
+gcite
+gender
+genmpage
+getfiledate
+getitems
+gindex
+ginpenc
+gitfile-info
+gitinfo
+gitinfo2
+gitlog
+gitver
+globalvals
+gmdoc-enhance
+gmiflink
+grabbox
+graphbox
+graphicscache
+graphicx-psmin
+graphicxbox
+grayhints
+grfpaste
+grid
+grid-system
+gridset
+gridslides
+gs1
+guitlogo
+handin
+handout
+handoutwithnotes
+hang
+hanging
+hardwrap
+harnon-cv
+harpoon
+he-she
+hhtensor
+hideanswer
+highlightlatex
+histogr
+hobsub
+href-ul
+hrefhide
+hvindex
+hvlogos
+hvpygmentex
+hvqrurl
+hypdestopt
+hypdoc
+hyperbar
+hypernat
+hyphenat
+identkey
+idxcmds
+idxlayout
+iexec
+ifallfalse
+iffont
+ifoddpage
+ifthenx
+iitem
+image-gallery
+import
+inline-images
+inlinedef
+inlinelabel
+inputtrc
+intopdf
+inversepath
+invoice-class
+invoice2
+isonums
+isopt
+isorot
+isotope
+issuulinks
+jlabels
+jmsdelim
+jvlisting
+kalendarium
+keyindex
+keyparse
+keyval2e
+kix
+koma-moderncvclassic
+koma-script-sfs
+komacv-rg
+ktv-texdata
+labels
+labels4easylist
+labelschanged
+lambdax
+lastpackage
+lastpage
+latex-uni8
+latexdemo
+latexgit
+lazylist
+lccaps
+lcd
+lcg
+leading
+lectureslides
+leftidx
+leftindex
+lengthconvert
+lewis
+libgreek
+linegoal
+linop
+listing
+listingsutf8
+listlbls
+listliketab
+listofsymbols
+lkproof
+lmake
+locality
+logbox
+logical-markup-utils
+longfigure
+longnamefilelist
+lstaddons
+lstfiracode
+lt3rawobjects
+ltablex
+ltxguidex
+ltxnew
+lua-check-hyphen
+macrolist
+macroswap
+magaz
+magicwatermark
+mailing
+mailmerge
+makebase
+makebox
+makeglos
+makelabels
+makerobust
+manfnt
+manuscript
+manyind
+marginfit
+marginfix
+marginnote
+mathexam
+maybemath
+mcaption
+mceinleger
+mcite
+medstarbeamer
+meetingmins
+memexsupp
+memory
+mensa-tex
+menu
+menucard
+method
+mftinc
+mi-solns
+midpage
+mindflow
+minibox
+minidocument
+minipage-marginpar
+minorrevision
+mla-paper
+mleftright
+mlist
+mnotes
+modernposter
+moderntimeline
+modref
+modroman
+modular
+monofill
+moreenum
+moresize
+mparhack
+mtgreek
+multenum
+multiaudience
+multibbl
+multicap
+multicolrule
+multidef
+multienv
+multiexpand
+multifootnote
+multilang
+multiple-choice
+mversion
+mylatex
+namespc
+needspace
+nestquot
+newenviron
+newfile
+newspaper
+newunicodechar
+newvbtm
+newverbs
+nextpage
+ninecolors
+noconflict
+noindentafter
+noitcrul
+nolbreaks
+nomentbl
+nonfloat
+nonumonpart
+nopageno
+normalcolor
+notoccite
+nowidow
+numberedblock
+numname
+ocgx
+ocr-latex
+oldstyle
+onlyamsmath
+optional
+orcidlink
+orientation
+outline
+outliner
+outlines
+outlining
+overlays
+overpic
+padcount
+pagecolor
+pagecont
+pagenote
+pagerange
+palette
+papercdcase
+papermas
+parades
+paresse
+parnotes
+parselines
+pas-cours
+pas-tableur
+patchcmd
+pauldoc
+pawpict
+pbox
+pdf14
+pdfcolmk
+pdfmarginpar
+pdfoverlay
+pdfpagediff
+pdfpc
+pdfpc-movie
+pdfprivacy
+pdfsync
+permute
+petiteannonce
+pgfmath-xfp
+phfextendedabstract
+phffullpagefigure
+phfparen
+phfquotetext
+phfsvnwatermark
+photo
+picture
+piff
+plantslabels
+plweb
+polynomial
+postcards
+poster-mac
+practicalreports
+precattl
+prelim2e
+prettyref
+printlen
+progressbar
+proofread
+properties
+protocol
+psfragx
+pxgreeks
+python
+qcm
+quicktype
+quiz2socrative
+quotchap
+quoting
+randtext
+rccol
+rcs-multi
+rcsinfo
+readablecv
+realboxes
+recipe
+recipecard
+rectopma
+refcheck
+refenums
+reflectgraphics
+regcount
+regexpatch
+regstats
+repeatindex
+repltext
+rescansync
+returntogrid
+rgltxdoc
+rjlparshap
+rlepsf
+robustcommand
+romanbar
+romanbarpagenumber
+romanneg
+romannum
+rotfloat
+rotpages
+roundbox
+rterface
+rtkinenc
+rulerbox
+rulercompass
+rvwrite
+sanitize-umlaut
+saveenv
+savefnmark
+savesym
+scale
+scalebar
+scalerel
+schooldocs
+scrambledenvs
+scrlayer-fancyhdr
+scrlttr2copy
+sdrt
+secdot
+secnum
+sectionbox
+sectionbreak
+seealso
+selinput
+semantic-markup
+semesterplanner
+semioneside
+semproc
+semtex
+sepfootnotes
+seqsplit
+sesstime
+sffms
+shadow
+shadowtext
+shdoc
+shorttoc
+show2e
+showcharinbox
+showdim
+showexpl
+showlabels
+sidecap
+silence
+simplecv
+simpleinvoice
+simplivre
+sitem
+skills
+slantsc
+smalltableof
+smart-eqn
+smartref
+smartunits
+snaptodo
+snotez
+soulpos
+spacingtricks
+sparklines
+sphack
+spot
+spverbatim
+srbook-mem
+srcltx
+sslides
+stack
+stdclsdv
+stdpage
+stealcaps
+storebox
+storecmd
+stubs
+styledcmd
+subdepth
+subdocs
+subeqn
+subeqnarray
+subfigmat
+subfiles
+subfloat
+substitutefont
+suppose
+svgcolor
+svn
+svninfo
+swfigure
+syntax
+syntrace
+synttree
+tabbing
+tabfigures
+tableaux
+tableof
+tablists
+tabls
+tablvar
+tabto-ltx
+tabularborder
+tabularew
+tagging
+tagpair
+tdclock
+technics
+ted
+templatetools
+termcal
+termlist
+termsim
+testhyphens
+tex-label
+texlogos
+texments
+texsurgery
+textfit
+textmerg
+textpos
+textualicomma
+texvc
+thinsp
+threadcol
+threeparttablex
+thumb
+thumby
+ticket
+titlefoot
+titlepic
+titleref
+titling
+to-be-determined
+tocbibind
+tocdata
+tocvsec2
+todo
+tokenizer
+toolbox
+topfloat
+totalcount
+totcount
+totpages
+transparent
+trfsigns
+trimspaces
+trivfloat
+trsym
+truncate
+tucv
+turnthepage
+twoinone
+twoup
+txgreeks
+type1cm
+typogrid
+uassign
+uebungsblatt
+umoline
+underlin
+underoverlap
+undolabl
+unisc
+unitconv
+uri
+ushort
+uspace
+utf8add
+uwmslide
+variablelm
+varsfromjobname
+varwidth
+vcell
+vdmlisting
+verbatimbox
+verbatimcopy
+verbdef
+verbments
+version
+versonotes
+vertbars
+vgrid
+vmargin
+volumes
+vtable
+vwcol
+wallpaper
+warning
+warpcol
+was
+widetable
+widows-and-orphans
+williams
+wordlike
+worksheet
+wtref
+xargs
+xcntperchap
+xcomment
+xcpdftips
+xellipsis
+xfakebold
+xhfill
+xltabular
+xmpincl
+xnewcommand
+xoptarg
+xpeek
+xprintlen
+xpunctuate
+xurl
+xytree
+yafoot
+yaletter
+zebra-goodies
+ziffer
+zwgetfdate
+
+$(collection_by_size langeuropean 299999 || exit 1)
+
+$(collection_by_size langfrench 23999 || exit 1)
+
+# collection-langgerman
+apalike-german
+dehyph
+dehyph-exptl
+dhua
+etdipa
+fifinddo-info
+german
+germbib
+germkorr
+l2picfaq
+l2tabu
+milog
+r_und_s
+schulmathematik
+termcal-de
+uhrzeit
+umlaute
+voss-mathcol
+
+$(collection_by_size langpolish 8999 || exit 1)
+
+$(collection_by_size langarabic 1999 || exit 1)
+arabtex
+
+$(collection_by_size langchinese 4999 || exit 1)
+
+# collection-langjapanese
+asternote
+luatexja
+
+$(collection_by_size langcjk 2999 || exit 1)
+
+$(collection_by_size langother 29999 || exit 1)
+
+$(collection_by_size pictures 22999 || exit 1)
+circuitikz
+xypic
+
+$(collection_by_size pstricks 99999 || exit 1)
+pst-pdf
+
+$(collection_by_size mathscience 19999 || exit 1)
+siunits
+
+$(collection_by_size games 39999 || exit 1)
+
+# collection-xetex
+arabxetex
+awesomebox
+businesscard-qrcode
+fixlatvian
+font-change-xetex
+fontbook
+fontwrap
+interchar
+na-position
+realscripts
+simple-resume-cv
+simple-thesis-dissertation
+ucharclasses
+unisugar
+xebaposter
+xechangebar
+xecolor
+xecyr
+xeindex
+xesearch
+xespotcolor
+xetex
+xetex-pstricks
+xetexconfig
+xetexfontinfo
+xevlna
+
+# collection-formatsextra
+edmac
+eplain
+hitex
+jadetex
+lollipop
+mltex
+mxedruli
+passivetex
+psizzl
+startex
+texsis
+xmltex
+xmltexconfig
+
+# collection-binextra
+a2ping
+adhocfilelist
+bibtex8
+bibtexu
+bundledoc
+checklistings
+chklref
+chktex
+cluttex
+ctie
+cweb
+de-macro
+detex
+dtl
+dtxgen
+dvi2tty
+dviasm
+dvicopy
+dvidvi
+dviinfox
+dviljk
+dviout-util
+dvipng
+dvipos
+dvisvgm
+findhyph
+fragmaster
+git-latexdiff
+gsftopk
+hook-pre-commit-pkg
+installfont
+lacheck
+latex-git-log
+latex-papersize
+latex2man
+latexdiff
+latexfileversion
+latexindent
+latexmk
+latexpand
+light-latex-make
+listings-ext
+ltxfileinfo
+ltximg
+luajittex
+make4ht
+match_parens
+mflua
+mkjobtexmf
+optexcount
+patgen
+pdfbook2
+pdfcrop
+pdfjam
+pdflatexpicscale
+pdftex-quiet
+pdftosrc
+pdfxup
+pfarrei
+pkfix
+pkfix-helper
+purifyeps
+pythontex
+seetexk
+spix
+srcredact
+sty2dtx
+synctex
+tex4ebook
+texcount
+texdef
+texdiff
+texdirflatten
+texdoc
+texfot
+texlive-scripts-extra
+texloganalyser
+texlogfilter
+texware
+tie
+tpic2pdftex
+typeoutfileinfo
+web
+xindex
+xindy
+xpdfopen
+
+# collection-publishers
+chifoot
+ebook
+inkpaper
+revtex
+scrjrnl
+
+# collection-bibtexextra
+aaai-named
+aichej
+ajl
+amsrefs
+annotate
+apacite
+apalike-ejor
+apalike2
+archaeologie
+authordate
+besjournals
+bestpapers
+bibarts
+bibexport
+bibhtml
+bibexport
+bibhtml
+biblist
+bibtexperllibs
+bibtopic
+bibtopicprefix
+bibunits
+biolett-bst
+bookdb
+breakcites
+cell
+chbibref
+chembst
+chicago
+chicago-annote
+chicagoa
+chscite
+citeref
+collection-latex
+collref
+compactbib
+crossrefware
+custom-bib
+din1505
+dk-bib
+doipubmed
+econ-bst
+economic
+fbs
+figbib
+footbib
+francais-bst
+gbt7714
+harvmac
+icite
+ietfbibs
+ijqc
+inlinebib
+iopart-num
+is-bst
+jbact
+jmb
+jneurosci
+jurabib
+ksfh_nat
+listbib
+logreq
+ltb2bib
+luabibentry
+margbib
+multibib
+multibibliography
+newcastle-bst
+nmbib
+notes2bib
+notex-bst
+perception
+plainyr
+pnas2009
+rsc
+showtags
+sort-by-letters
+splitbib
+turabian-formatting
+urlbst
+usebib
+vak
+xcite
+zootaxa-bst
+
+#collection-music
+abc
+autosp
+bagpipe
+chordbars
+chordbox
+ddphonism
+figbas
+gchords
+gtrcrd
+guitar
+guitarchordschemes
+guitartabs
+harmony
+latex4musicians
+leadsheets
+lyluatex
+musical
+musicography
+octave
+piano
+songbook
+songs
+xml2pmx
+xpiano
+" texmfget base
diff --git a/patches/source/texlive/prep/texmf_get.sh b/patches/source/texlive/prep/texmf_get.sh
new file mode 100644
index 000000000..6876a4cb0
--- /dev/null
+++ b/patches/source/texlive/prep/texmf_get.sh
@@ -0,0 +1,941 @@
+#!/bin/bash
+
+# texmf_get.sh
+#
+# Copyright 2016 - 2023 Johannes Schoepfer, Germany, slackbuilds@schoepfer.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.
+#
+# version 15.1.1
+#
+# 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/docs) should contain no binaries
+# -base: the most usefull stuff, most binaries/scripts,
+# manpages for binaries/scripts 65mb 2017-11-07
+# -docs: -base documentation only, no manpages/GNU infofiles
+# -extra: remaining stuff and corresponding docs
+#
+# texlive netarchive policy: Every package is included as dependency
+# in exactly one collection. A package may have dependencies on other
+# packages from any collection.
+
+#set -e
+# Official mirror
+mirror="http://mirror.ctan.org/systems/texlive/tlnet/"
+# Pre-test mirror for new releases
+#mirror="http://ftp.cstug.cz/pub/tex/local/tlpretest/"
+cd $(dirname $0) ; CWD=$(pwd)
+TMP=${TMP:-$CWD/tmp}
+
+usage () {
+ echo
+ echo "Generate texmf trees/editions based on collections/packages"
+ echo "and their (hard)dependencies."
+ echo "./texmf_get.sh [base|docs|extra|lint]"
+ echo
+ echo "-base: texfiles, no docs"
+ echo "-docs: docs of -base"
+ echo "-extra: remaining texfiles and docs"
+ echo "[lint]: compare filename contents of all generated editions,"
+ echo " to detect overlapping files"
+ echo
+ echo "Only new/updated/missing tex packages are downloaded."
+ echo "The first run takes \"long\", tex packages(about 3Gb)"
+ echo "need to be downloaded."
+ echo "To check out a new version/release, delete"
+ echo "$db"
+ echo "A new ascii index file/database(texlive.tlpdb) is will be"
+ echo "pulled on the next run, and a new version yymmdd will be 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 "ERROR: \"$1\" is no package in $db, edit $CWD/packages.texmf !" && 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 multiple times if package isn't present or checksum fails
+
+ unset checksum_ok
+ if [ "$flavour" = ".doc" ]
+ then
+ sha512="$(grep ^doccontainerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ else
+ sha512="$(grep ^containerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ fi
+
+ cd $texmf
+
+ for run in {1..10}
+ do
+ [ ! -s "${1}${flavour}.tar.xz" ] && \
+ wget -q --show-progress -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
+ [ ! -s "${1}${flavour}.tar.xz" ] && continue
+ if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
+ then
+ echo "sha512sum of ${1}${flavour}.tar.xz doesn't match $texmf/$1.meta"
+ echo "deleting ${1}${flavour}.tar.xz"
+ rm ${1}${flavour}.tar.xz
+ else
+ checksum_ok=yes
+ break
+ fi
+ done
+
+ # If no success by downloading, write error log
+ if [ -z "$checksum_ok" ]
+ then
+ echo "Downloading ${1}${flavour}.tar.xz or sh512sum check was not successful,\\
+ writing to $errorlog"
+ echo "Delete ${db}* and $TMP/VERSION, then try again, bye."
+ echo "$VERSION" >> $errorlog
+ echo "Error downloading ${1}${flavour}.tar.xz" >> $errorlog
+ exit 1
+ fi
+}
+
+untar () {
+ # leave if $1 has no content
+ if [ -s "$1" ]
+ then
+ while read package
+ do
+ echo "untar $package$flavour"
+ # untar all packages, check for relocation, "relocate 1" -> untar in texmf-dist
+ download $package || exit 1
+ # untar package, relocate to texmf-dist if necessary, binary packages always need relocation
+ relocated='.'
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" -o -n "$(grep ^"binfiles " $texmf/$package.meta)" ] && relocated="texmf-dist"
+ # if not .doc package, investigate files for dependencies/provides
+ if [ -n "$flavour" ]
+ then
+ tar xf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated || exit 1
+ else
+ tar vxf ${package}${flavour}.tar.xz \
+ --exclude tlpkg/tlpobj \
+ -C $relocated | grep -E '\.sty$|\.bbx$|\.cls$' > $texmf/$package.deps
+ if [ -n "$texmf/$package.deps" ]
+ then
+ unset provide
+ unset depends
+ for depfile in $(cat $texmf/$package.deps)
+ do
+ filename="$( echo $depfile | rev | cut -d'.' -f2- | cut -d'/' -f1 | rev)"
+ # always add $filename as "ProvidesPackage", if it's a .sty
+ echo $depfile | grep '\.sty'$ &>/dev/null
+ [ $? = 0 ] && provide+="${filename},"
+ provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -z "s/\(Package\|ExplPackage\|File\|Class\)\n/\1/g" | sed "s/[[:space:]]//" | sed -n "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\){\([^}]*\)}.*/\2/p" | sed "s/\\\filename/$filename/g;s/\\\ExplFileName/$filename/g" | sed "s/\(\.sty$\|\.cls$\)//g" | sort -u | tr '\n' ',')"
+ depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\(\\\require\|\\\use\)package{\([^}]*\)}.*/\2/p" | sort -u | tr '\n' ',')"
+ done
+ if [ -n "$provide" ]
+ then
+ echo "$package $provide" >> $TMP/provides.run.$edition
+ fi
+ if [ -n "$depends" ]
+ then
+ echo "$package $depends" >> $TMP/depends.run.$edition
+ fi
+ fi
+ fi
+
+ # Delete binaries, these are provided by the buildscript
+ # Keep symlinks and scripts
+
+ for arch in $platforms
+ do
+ if [ -d $texmf/texmf-dist/bin/$arch ]
+ then
+ [ ! -d $texmf/texmf-dist/linked_scripts ] && \
+ mkdir $texmf/texmf-dist/linked_scripts
+ # remove the unfortunate "man" link
+ [ -L "$texmf/texmf-dist/bin/$arch/man" ] && \
+ rm $texmf/texmf-dist/bin/$arch/man
+ for link in $(find $texmf/texmf-dist/bin/$arch -type l)
+ do
+ # if link has "../.." content, re-create link to match
+ # final destiantion /usr/share/texmf-dist
+ a="$(readlink $link)"
+ b=${a/..\/../..\/share}
+ link_valid_dest=$texmf/texmf-dist/linked_scripts/${link##*/}
+ ln -sf $b $link_valid_dest
+ rm $link
+ done
+
+ # keep only precompiled binaries of special packages, see packages.texmf,
+ # these should only be in -extra.
+ # remove xindy.mem(gzip compresses data) to prevent overwriting
+ # the one built from the source
+ for bin in $(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | \
+ grep -e "shared object" -e ELF -e "gzip compressed data" | cut -f 1 -d : )
+ do
+ binfile="$(echo $bin | rev | cut -d'/' -f1 | rev)"
+ remove_binary=yes
+ # for multiple binaries this extra loop is neccesary
+ for binary in $keep_precompiled
+ do
+ if [ "$(echo $bin | rev | cut -d'/' -f1 | rev)" = "$binary" ]
+ then
+ remove_binary=no
+ fi
+ done
+ if [ $remove_binary = yes ]
+ then
+ # might be already removed by a previous run
+ if [ -s "$bin" ]
+ then
+ #echo "Deleting binary \"$arch/$binfile\""
+ rm $bin && echo "$package: $binfile" >> $binary_removed.$edition
+ fi
+ fi
+ done
+ # move scripts to linked-scripts
+ for script in \
+ $(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | \
+ grep -wv ELF | cut -f 1 -d : )
+ do
+ mv $script $texmf/texmf-dist/linked_scripts/
+ done
+ fi
+ done
+
+ for tlpkg_dir in $texmf/tlpkg $texmf/texmf-dist/tlpkg
+ do
+ if [ -d $tlpkg_dir ]
+ then
+ for bin in $(find $tlpkg_dir -type f -exec file '{}' + | \
+ grep -e "shared object" -e ELF -e "gzip compressed data" | cut -f 1 -d : )
+ do
+ rm $bin
+ echo -n "$package:" >> $binary_removed.$edition
+ echo $bin | rev | cut -d'/' -f1 | rev >> $binary_removed.$edition
+ done
+ find $tlpkg_dir -type d -empty -delete
+ if [ -d $tlpkg_dir/TeXLive ]
+ then
+ mkdir -p $texmf/texmf-dist/scripts/texlive/TeXLive
+ mv $tlpkg_dir/TeXLive/* $texmf/texmf-dist/scripts/texlive/TeXLive
+ fi
+ fi
+ done
+
+ if [ "$flavour" = ".doc" ]
+ then
+ size=$(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2)
+ else
+ size=$(grep ^containersize $texmf/$package.meta | cut -d' ' -f2)
+ # add maps to updmap.cfg, don't add special_packages map files to -base
+ add_map=yes
+ if [ $edition = base ]
+ then
+ for no_map in $special_packages
+ do
+ [ $no_map = $package ] && add_map=no && break
+ done
+ fi
+ [ $add_map = yes ] && grep ^'execute ' $texmf/$package.meta | grep Map | cut -d' ' -f2- | sed "s/^add//g" >> $updmap.$edition
+ fi
+ shortdesc="$(grep ^shortdesc $texmf/$package.meta | cut -d' ' -f2- )"
+ echo "$size byte, $package$flavour: $shortdesc" >> $output.meta
+ # make index of uncompressed size of each package
+ echo "$(xz -l --verbose ${package}${flavour}.tar.xz | grep "Uncompressed size" | \
+ cut -d'(' -f2 | cut -d' ' -f1 ) byte, $package$flavour: $shortdesc" >> $output.meta.uncompressed
+ done < $1
+
+ # add a path to updmap
+ if [ -s "$texmf/texmf-dist/linked_scripts/updmap" ]
+ then
+ sed -i '/unshift.*@INC.*/a unshift(@INC, "$TEXMFROOT/texmf-dist/scripts/texlive");' $texmf/texmf-dist/linked_scripts/updmap || exit 1
+ fi
+
+ # copy packages index to texmf-dist, to have a list of included packages in the final installation
+ # don't list binary packages, as the binaries itself are not contained,
+ # only symlinks/scripts.
+ cat $output.meta | grep -v '\-linux:' >> $output.$edition.meta
+ cat $output.meta.uncompressed | grep -v '\-linux:' >> $output.$edition.meta.uncompressed
+
+ # cleanup
+ [ -f $output.meta ] && rm $output.meta
+ [ -f $output.meta.uncompressed ] && rm $output.meta.uncompressed
+ fi
+}
+
+remove_cruft () {
+ # Remove m$-stuff, ConTeXt single-user-system stuff, empty files/directories and pdf-manpages
+ rm -rf $texmf/texmf-dist/source
+ rm -rf $texmf/texmf-dist/scripts/context/stubs/source/
+ find $texmf/texmf-dist/ -type d -name 'win32' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type d -name 'win64' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type d -name 'mswin' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type d -name 'win' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type d -name 'setup' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type d -name 'install' -exec rm -rf {} +
+ find $texmf/texmf-dist/ -type f -name 'uninstall*.sh' -delete
+ find $texmf/texmf-dist/ -type f -name '*.bat' -delete
+ find $texmf/texmf-dist/ -type f -name '*.bat.w95' -delete
+ find $texmf/texmf-dist/ -type f -name '*.vbs' -delete
+ find $texmf/texmf-dist/ -type f -name '*win32*' -delete
+ find $texmf/texmf-dist/ -type f -name 'winansi*' -delete
+ find $texmf/texmf-dist/ -type f -name '*man1.pdf' -delete
+ find $texmf/texmf-dist/ -type f -name '*man5.pdf' -delete
+ find $texmf/texmf-dist/ -type f -name '*.man' -delete
+ find $texmf/texmf-dist/ -type f -empty -delete
+ find $texmf/texmf-dist/ -type d -empty -delete
+
+ echo "Replace duplicate files by symlinks, this may take a while ..."
+
+ LASTSIZE=x
+ find $texmf/texmf-dist/ -type f -printf '%s %p\n' | sort -n |
+ while read -r SIZE FILE
+ do
+ # symlinks alse need some bytes, start linking above 10 bytes
+ if [ "$SIZE" -gt 10 -a "$SIZE" == "$LASTSIZE" ]
+ then
+ if [ "$(sha512sum $FILE | cut -d' ' -f1)" \
+ == "$(sha512sum $LASTFILE | cut -d' ' -f1)" ]
+ then
+ echo "$FILE $LASTFILE $SIZE" >> $duplicatelog
+ ln -srf $FILE $LASTFILE
+ fi
+ fi
+ LASTSIZE="$SIZE"
+ LASTFILE="$FILE"
+ done
+}
+
+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;s/#.*$//;/^$/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
+
+ # If $collection is a singel package(not a collection-), add it here
+ if [ -n "$(head -n1 $texmf/$collection.meta | grep -v "name collection" )" ]
+ then
+ unset addpackage
+ # if package contains docs, add to docs-packages
+ if [ -n "$(grep ^docfiles $texmf/$collection.meta)" ]
+ then
+ echo "$collection" >> $output_doc
+ echo "$collection added to docs $1" >> $logfile
+ addpackage=yes
+ fi
+ # if package contains runfiles, binfiles or depend, add to edition
+ if [ \
+ -n "$(grep ^runfiles $texmf/$collection.meta)" -o \
+ -n "$(grep ^binfiles $texmf/$collection.meta)" -o \
+ -n "$(grep ^depend $texmf/$collection.meta)" \
+ ]
+ then
+ echo "$collection" >> $output
+ echo "$collection added to -$1" >> $logfile
+ addpackage=yes
+ fi
+ # if package contains only srcfiles, don't add to a edition
+ if [ -n "$(grep ^srcfiles $texmf/$collection.meta)" -a -z "$addpackage" ]
+ then
+ echo "$collection only contains srcfiles, added nowhere" >> $logfile
+ addpackage=yes
+ fi
+ # abort if package seems broken
+ if [ -z "$addpackage" ]
+ then
+ echo "$collection doesn't contain any docfiles/runfiles/binfiles/depends or srcfiles"
+ echo "Please exclude package/report to upstream mailinglist tex-live@tug.org, bye."
+ exit 1
+ fi
+ fi
+
+ # Don't handle collections as dependency of other collections,
+ # as this destroys control over packages to be added.
+ # Add dependend packages, but no binary(ARCH) and no packages
+ # containing a '.'. Packages with dot indicate binary/texlive-manager/windows packages
+
+ grep ^"depend " $texmf/$collection.meta | cut -d' ' -f2- > $dependencies
+
+ if [ -s "$dependencies" ]
+ then
+ # check for .ARCH packages which may be binaries, scripts or links
+ # Binaries should all come from the sourcebuild(exception $keep_precompiled)
+ for dependency in $(cat $dependencies)
+ do
+ echo $dependency | grep '\.ARCH'$ &>/dev/null
+ if [ $? = 0 ]
+ then
+ for arch in $platforms
+ do
+ archpackage="$(echo $dependency | sed "s/\.ARCH$/\.$arch/")"
+ grep ^"name $archpackage"$ $db &>/dev/null && echo "$archpackage" >> $dependencies.verified_arch
+ done
+ else
+ echo $dependency >> $dependencies.verified_arch
+ fi
+ done
+ if [ -f $dependencies.verified_arch ]
+ then
+ mv $dependencies.verified_arch $dependencies
+ else
+ rm $dependencies
+ fi
+ fi
+
+ 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 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)
+ echo "Adding files to $( echo $tarball | rev | cut -d'/' -f1 | rev ) ..."
+ case $edition in
+ base)
+ unset flavour
+ untar $output || exit 1
+ remove_cruft || exit 1
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ ;;
+ extra)
+ 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 rf $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 rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ fi
+ ;;
+ esac
+ fi
+}
+
+lint () {
+
+echo "Comparing content of all editions, this may take a while ..."
+cd $TMP
+# check if all editions of same VERSION are there, take -base as reference
+if [ -s texlive-extra-$VERSION.tar.xz \
+ -a -s texlive-docs-$VERSION.tar.xz ]
+then
+ for edition in base extra docs
+ do
+ echo "Extracting index of texlive-${edition}-$VERSION.tar.xz ..."
+ # don't list directories
+ tar tf texlive-${edition}-$VERSION.tar.xz | grep -v '/'$ > $TMP/packages.$edition.lint
+ done
+
+ # compare content
+ for edition in base extra docs
+ do
+ >$TMP/packages.$edition.lint.dup
+ if [ $edition = base ]
+ then
+ echo "check if files of base are present in another edition"
+ while read line
+ do
+ grep ^"$line"$ $TMP/packages.extra.lint >> $TMP/packages.base.lint.dup
+ grep ^"$line"$ $TMP/packages.docs.lint >> $TMP/packages.base.lint.dup
+ done < $TMP/packages.$edition.lint
+ fi
+ done
+else
+ echo "Not all editions are present to lint them. Create them first by"
+ echo "$0 [base|docs|extra]"
+ echo "bye."
+ exit 1
+fi
+
+exit 0
+
+}
+
+# Main
+
+LANG=C
+output=$TMP/packages
+output_doc=$TMP/packages.doc.tmp
+errorlog=$TMP/error.log
+duplicatelog=$TMP/duplicate.log
+texmf=$TMP/texmf
+db=$TMP/texlive.tlpdb
+tmpfile=$TMP/tmpfile
+collections_done=$TMP/done
+collections_tobedone=$TMP/tobedone
+allcollections=$TMP/allcollections
+binary_removed=$TMP/binaries.removed
+manpages=$TMP/manpages
+dependencies=$TMP/deps
+packages_base=$TMP/packages.base
+packages_extra=$TMP/packages.extra
+packages_manpages=$TMP/packages.manpages
+updmap=$TMP/updmap.cfg
+files_split=$TMP/files.split
+platforms="x86_64-linux i386-linux"
+
+# Source global excludes
+source $CWD/excludes.texmf
+
+mkdir -p $texmf
+cd $TMP
+
+case "$1" in
+ base|docs|extra) edition=$1;;
+ lint) lint ;;
+ *) usage; exit 0 ;;
+esac
+
+echo "Building $edition tarball ..."
+
+# Set VERSION, get texlive.tlpdb and strip it, keep texlive.tlpdb.orig
+if [ ! -s ${db}.orig -o ! -s $db -o ! -s VERSION ]
+then
+ for run in {1..10}
+ do
+ wget -q --show-progress -t1 -c -O ${db}.orig.xz ${mirror}tlpkg/texlive.tlpdb.xz
+ [ -s "${db}.orig.xz" ] && break
+ done
+ unxz -f ${db}.orig.xz || exit 1
+ echo $(date +%y%m%d) > VERSION
+
+ # remove most content from $db to be faster on later processing.
+ # keep dependencies/manpages/binfiles/shortdesc/sizes
+ echo "Preparing texlive.tlpdb ..."
+ grep -E \
+ '^\S|^ RELOC/doc/man|^ texmf-dist/doc/man/man|^ RELOC/doc/info/|^ texmf-dist/doc/info/|^ bin|^$' \
+ ${db}.orig | grep -v ^longdesc > $db
+
+ # As $db might be renewed, remove the all package meta-files
+ # to make them be created again based on (new) $db
+ rm -rf $texmf/*.meta
+fi
+
+# Get linenumbers of empty lines from $db
+emptylines="$(grep -n ^$ $db | cut -d':' -f1)"
+
+# Make a list of all collections
+grep ^"name collection-" $db | cut -d' ' -f2 > $allcollections
+# remove global excluded collection(s)
+for exclude in $global_exclude
+do
+ sed -i "/^$exclude/d" $allcollections
+done
+
+# translate .ARCH to platforms in excludes, to make .ARCH packages excludeable by $global_exclude
+for exclude in $global_exclude
+do
+ if [ -n "$(echo $exclude | grep '\.ARCH'$ )" ]
+ then
+ for arch in $platforms
+ do
+ global_exclude+=" $(echo $exclude | sed "s/\.ARCH$/\.$arch/")"
+ done
+ global_exclude=${global_exclude/$exclude/}
+ fi
+done
+
+VERSION=$(cat $TMP/VERSION)
+tarball=$TMP/texlive-$edition-$VERSION.tar
+# set logfile
+logfile=$TMP/$VERSION.log
+
+# reset some files
+>$logfile
+>$tarball
+>$collections_done
+>$duplicatelog
+>$files_split
+>$manpages
+>$packages_manpages
+>$updmap.$edition
+>$packages_base
+>$packages_extra
+>$packages_base.doc
+>$packages_extra.doc
+>$TMP/packages.$edition.meta
+>$TMP/packages.$edition.meta.uncompressed
+>$TMP/provides.run.$edition
+>$TMP/depends.run.$edition
+>$binary_removed.$edition
+
+# Load texmf package list to generate -base/-extra/-docs
+source $CWD/packages.texmf
+
+# Put everything in -extra which is not in -base
+PACKAGES="
+ $(cat $allcollections)
+ " texmfget extra
+
+# Check if all collections are 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."
+ echo "Edit packages/collections in the texmfget function." | tee -a $logfile
+ exit 1
+ fi
+done < $allcollections
+
+# cleanup
+rm $allcollections
+rm $collections_done
+rm $collections_tobedone
+rm $output
+rm $output_doc
+rm $dependencies
+
+# untar special- and manpage packages to be splitted/moved to other editions
+# splitting special packages, files index
+echo "Prepare index of to be splitted/moved files from -base"
+[ ! -d texmf-dist ] && mkdir texmf-dist
+for package in $special_packages
+do
+ echo "Splitting $package"
+ # special packages have to be in -base, as only here are special
+ # tasks done to reduce size of -base edition
+ if [ -z "$( grep ^"$package"$ $packages_base )" ]
+ then
+ echo "$package was not found to be part of -base"
+ echo "Edit \$special_packages in $0,"
+ echo "it should contain only packages from -base, bye."
+ exit 1
+ fi
+ unset relocated
+ pathprefix="texmf-dist/"
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && \
+ relocated="-C texmf-dist" && unset pathprefix
+ # avoid big pdf docs which are also present as html
+ # move (big)type1 fonts to -extra
+ # $files_split lists files to be moved from -base to -extra
+ tar tf $texmf/${package}.tar.xz | sed \
+ -ne "/.*doc\/latex\/.*\.pdf$/p" \
+ -ne "/.*fonts\/map\/.*\.map$/p" \
+ -ne "/.*fonts\/enc\/.*\.enc$/p" \
+ -ne "/.*fonts\/afm\/.*\.\(afm\|afm\.gz\)$/p" \
+ -ne "/.*fonts\/type1\/.*\.pfb$/p" \
+ -ne "/.*fonts\/vf\/.*\.vf$/p" | \
+ tee -a $files_split > $files_split.tmp
+
+ if [ $edition = base ]
+ then
+ # Calculate package-minimal size, uncompressed and compressed
+ mkdir -p calculate/texmf-dist
+ tar xf $texmf/$package.tar.xz -C calculate/texmf-dist --exclude-from=$files_split.tmp
+ tar cf calculate/calc.tar.xz -I 'xz' calculate/texmf-dist
+ size_minimal=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//")
+ size_minimal_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )"
+ sed -i \
+ -e "s/^[0-9]* byte, $package: /$size_minimal byte, $package-minimal: /" \
+ $output.base.meta
+ sed -i \
+ -e "s/^[0-9]* byte, $package: /$size_minimal_uncompressed byte, $package-minimal: /" \
+ $output.base.meta.uncompressed
+ rm -rf calculate
+ fi
+
+ if [ $edition = extra ]
+ then
+ mkdir -p calculate/texmf-dist
+ tar xf $texmf/${package}.tar.xz -C calculate/texmf-dist $(paste $files_split.tmp)
+ tar cf calculate/calc.tar.xz -I 'xz' calculate/texmf-dist
+ size_extended=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//")
+ size_extended_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | \
+ grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )"
+
+ # put new sizes in package index uncompressed
+ sed -i \
+ -e "s/^[0-9]* byte, $package: /$size_extended byte, $package-extended: /" \
+ $output.extra.meta
+ sed -i \
+ -e "s/^[0-9]* byte, $package: /$size_extended_uncompressed byte, $package-extended: /" \
+ $output.extra.meta.uncompressed
+ rm -rf calculate
+
+ # put map files from splitted packages in -extra
+ mkdir meta_tmp
+ tar xf $texmf/${package}.tar.xz -C meta_tmp tlpkg/tlpobj/$package.tlpobj
+ grep ^'execute ' meta_tmp/tlpkg/tlpobj/$package.tlpobj | \
+ grep Map | cut -d' ' -f2- | sed "s/^add//g" >> $updmap.$edition
+ rm -rf meta_tmp
+ fi
+
+ # untar to provide files for -extra
+ tar xf $texmf/${package}.tar.xz $relocated $(paste $files_split.tmp)
+done
+
+# cleanup
+rm $files_split.tmp
+
+# fix relocation in index for splitted packages
+sed -i \
+ -e "s|^doc|texmf-dist\/doc|g" \
+ -e "s|^fonts|texmf-dist\/fonts|g" \
+ -e "s|^dvips|texmf-dist\/dvips|g" \
+ $files_split
+
+# sort meta data about added packages
+sort -n $output.$edition.meta > $tmpfile
+mv $tmpfile $output.$edition.meta
+sort -n $output.$edition.meta.uncompressed > $tmpfile
+mv $tmpfile $output.$edition.meta.uncompressed
+
+sort -u $binary_removed.$edition > $tmpfile
+mv $tmpfile $binary_removed.$edition
+
+# include manpages/GNU infofiles in -base, write index for later exclusion from other editions.
+# In -extra/-docs there should not be any manpage left.
+echo "Looking for manpages/GNU infofiles to be included in -base ..."
+for package in $(paste -s $packages_base.doc | sort -u)
+do
+ if [ -n "$(grep -E "(doc/man/man|doc/info/)" $texmf/$package.meta )" ]
+ then
+ echo "Adding manpage from $package.doc 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 tf $texmf/${package}.doc.tar.xz | sed \
+ -ne "/.*doc\/man\/.*\.1$/p" \
+ -ne "/.*doc\/man\/.*\.5$/p" \
+ -ne "/.*doc\/info\/.*\.info$/p" \
+ | tee -a $manpages > $manpages.tmp
+ # untar to provide files for -/extra/-docs
+ tar xf $texmf/${package}.doc.tar.xz $relocated $(paste $manpages.tmp)
+ echo "$package" >> $packages_manpages
+ fi
+done
+
+# cleanup
+rm $manpages.tmp
+sed -i \
+ -e "s/^doc/texmf-dist\/doc/g" \
+ $manpages
+
+case $edition in
+ base)
+ # Content info
+ cat << EOF | gzip -9 >> $texmf/texmf-dist/packages.$edition.gz
+Content of -$edition:
+$(sed "/-linux$/d" $packages_base | sort)
+EOF
+ # create texdoc cache file
+ if [ $(command -v texdoc) ]
+ then
+ mkdir -p texmf-dist/scripts/texdoc || exit 1
+ TEXMFVAR=$texmf/texmf-dist \
+ texdoc -c texlive_tlpdb=$TMP/texlive.tlpdb.orig \
+ -DlM texlive-en >/dev/null 2>&1
+ mv texmf-dist/texdoc/cache-tlpdb.lua \
+ texmf-dist/scripts/texdoc/Data.tlpdb.lua || exit 1
+ # add cache to tarball
+ tar rf $tarball --owner=0 --group=0 --sort=name \
+ texmf-dist/scripts/texdoc/Data.tlpdb.lua || exit 1
+ else
+ echo "WARNING: texdoc binary(comming with texlive) is not installed, the texdoc cache"
+ echo "Data.tlpdb.lua can't be created and wont't be available."
+ echo "Texdoc will not wotk without this."
+ echo ""
+ echo "Continue with any key or abort with ctrl-c"
+ read -n1
+ fi
+
+ # prepare updmap.cfg
+ tar xf $tarball texmf-dist/web2c/updmap.cfg
+ end_n="$(grep -n 'end of updmap-hdr' texmf-dist/web2c/updmap.cfg | cut -d':' -f1)"
+
+ sed "1,${end_n}!d" texmf-dist/web2c/updmap.cfg > $TMP/updmap.cfg.tmp
+ cat $updmap.$edition >> $TMP/updmap.cfg.tmp
+ mv $TMP/updmap.cfg.tmp texmf-dist/web2c/updmap.cfg
+ tar f $tarball --delete texmf-dist/web2c/updmap.cfg
+ tar rf $tarball --owner=0 --group=0 --sort=name \
+ texmf-dist/web2c/updmap.cfg
+
+ # add manpages/GNU infofiles to the tarball
+ tar rf $tarball --owner=0 --group=0 --sort=name \
+ texmf-dist/doc/man/ texmf-dist/doc/info/ \
+ texmf-dist/packages.$edition.gz \
+ || exit 1
+ echo "Removing files -from base, splitted from special packages to be included in -extra"
+ tar f $tarball --delete $(paste $files_split) || exit 1
+ ;;
+ extra)
+ echo "Removing manpages from $edition which now reside in -base"
+ tar f $tarball --delete $(paste $manpages) 2>/dev/null
+ # content info
+ echo "Content of -$edition, including documentation:" > $texmf/texmf-dist/packages.$edition
+ sed "/-linux$/d" $TMP/packages.$edition | sort >> $texmf/texmf-dist/packages.$edition
+ gzip -9 $texmf/texmf-dist/packages.$edition
+
+ # add -extra updmap.cfg
+ mkdir -p $texmf/texmf-dist/web2c
+ mv $updmap.$edition $texmf/texmf-dist/web2c
+ tar rf $tarball --owner=0 --group=0 --sort=name \
+ --exclude texmf-dist/doc \
+ texmf-dist \
+ || exit 1
+ ;;
+ docs)
+ # add docs splittet from base from special packages, add packages index
+ # content info, this edition contains all docs from -base
+ 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/doc/ \
+ texmf-dist/packages.$edition.gz \
+ || exit 1
+ echo "Removing manpages from $edition which now reside in -base"
+ tar f $tarball --delete $(paste $manpages) || exit 1
+ ;;
+esac
+
+rm -rf texmf-dist
+[ -f $updmap.$edition ] && rm $updmap.$edition
+
+# compress the tarball as everything is in place now
+echo "Compressing $tarball ..."
+[ -f $tarball.xz ] && rm $tarball.xz
+xz -T0 $tarball || exit 1
+ls -lh $tarball.xz
+echo "Logfile: $logfile"
+
+# End of story
diff --git a/patches/source/texlive/slack-desc b/patches/source/texlive/slack-desc
new file mode 100644
index 000000000..2534a9e3a
--- /dev/null
+++ b/patches/source/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 included in 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 and texlive-docs packages.
+texlive:
+texlive:
diff --git a/patches/source/texlive/texlive-20230313-source-security_fix-1.patch b/patches/source/texlive/texlive-20230313-source-security_fix-1.patch
new file mode 100644
index 000000000..cdce6e558
--- /dev/null
+++ b/patches/source/texlive/texlive-20230313-source-security_fix-1.patch
@@ -0,0 +1,2034 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2023-05-04
+Initial Package Version: 20230313
+Upstream Status: Applied
+Origin: Upstream
+Description: LuaTeX fixes for obscure ways to work around some security features.
+
+On this occasion I've taken the three commits in the mirror which were
+relevant to this, and omitted the many other fixes, some of which are
+only parts of an svn commit with other changes for texmf-dist (not in the
+git mirror) and other fixes for minor issues in japanese variants, some
+of which are very large commits. I have therefore also ignored the
+change to fix the uuptex test.
+
+From ad8702a45e317fa9d396ef4d50467c37964a9543 Mon Sep 17 00:00:00 2001
+From: Luigi Scarso <luigi.scarso@gmail.com>
+Date: Fri, 31 Mar 2023 20:15:48 +0000
+Subject: [PATCH 15/39] Bump to version 1.16.1; bugfix for setpdforigin() (A.
+ Matthias)
+
+git-svn-id: svn://tug.org/texlive/trunk/Build/source@66717 c570f23f-e606-0410-a88d-b1316a301751
+---
+ texk/web2c/luatexdir/ChangeLog | 5 ++++-
+ texk/web2c/luatexdir/lua/lpdflib.c | 2 +-
+ texk/web2c/luatexdir/luatex.c | 4 ++--
+ texk/web2c/luatexdir/luatex_svnversion.h | 2 +-
+ 4 files changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/texk/web2c/luatexdir/ChangeLog b/texk/web2c/luatexdir/ChangeLog
+index 868f64cc3..27fbebcbb 100644
+--- a/texk/web2c/luatexdir/ChangeLog
++++ b/texk/web2c/luatexdir/ChangeLog
+@@ -1,5 +1,8 @@
++2023-03-30 Luigi Scarso <luigi.scarso@gmail.com>
++ * bugfix for setpdforigin() (A. Matthias)
++
+ 2023-02-22 Luigi Scarso <luigi.scarso@gmail.com>
+- * fix latelua data reference (side effect of deferred late additions) (H.Hagen)
++ * fix latelua data reference (side effect of deferred late additions) (H.Hagen)
+
+ 2023-02-18 Luigi Scarso <luigi.scarso@gmail.com>
+ * Fixed the "Invalid unicode ranges in CMap beginbfrange operator bug" as in pdfTeX (Hàn Thế Thành)
+diff --git a/texk/web2c/luatexdir/lua/lpdflib.c b/texk/web2c/luatexdir/lua/lpdflib.c
+index 70fbde76b..263fd5644 100644
+--- a/texk/web2c/luatexdir/lua/lpdflib.c
++++ b/texk/web2c/luatexdir/lua/lpdflib.c
+@@ -1048,7 +1048,7 @@ static int setpdforigin(lua_State * L)
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ h = (int) lua_roundnumber(L, 1);
+ if (lua_type(L, 2) == LUA_TNUMBER) {
+- v = (int) lua_roundnumber(L, 1);
++ v = (int) lua_roundnumber(L, 2);
+ } else {
+ v = h;
+ }
+diff --git a/texk/web2c/luatexdir/luatex.c b/texk/web2c/luatexdir/luatex.c
+index c11b0ca62..40eaa2a11 100644
+--- a/texk/web2c/luatexdir/luatex.c
++++ b/texk/web2c/luatexdir/luatex.c
+@@ -33,8 +33,8 @@
+ */
+
+ int luatex_version = 116;
+-int luatex_revision = '0';
+-const char *luatex_version_string = "1.16.0";
++int luatex_revision = '1';
++const char *luatex_version_string = "1.16.1";
+ const char *engine_name = my_name;
+
+ #include <kpathsea/c-ctype.h>
+diff --git a/texk/web2c/luatexdir/luatex_svnversion.h b/texk/web2c/luatexdir/luatex_svnversion.h
+index 257aec718..76d929807 100644
+--- a/texk/web2c/luatexdir/luatex_svnversion.h
++++ b/texk/web2c/luatexdir/luatex_svnversion.h
+@@ -1,4 +1,4 @@
+ #ifndef luatex_svn_revision_h
+ #define luatex_svn_revision_h
+-#define luatex_svn_revision 7567
++#define luatex_svn_revision 7569
+ #endif
+--
+2.39.2
+
+From 6ace460233115bd42b36e63c7ddce11cc92a1ebd Mon Sep 17 00:00:00 2001
+From: Luigi Scarso <luigi.scarso@gmail.com>
+Date: Sat, 29 Apr 2023 14:41:51 +0000
+Subject: [PATCH 36/39] LuaTeX 1.17.0 .
+
+git-svn-id: svn://tug.org/texlive/trunk/Build/source@66967 c570f23f-e606-0410-a88d-b1316a301751
+---
+ texk/web2c/luatexdir/ChangeLog | 31 +
+ texk/web2c/luatexdir/NEWS | 24 +
+ texk/web2c/luatexdir/font/writettf.c | 3 +-
+ texk/web2c/luatexdir/lua/llualib.c | 10 +-
+ texk/web2c/luatexdir/lua/loslibext.c | 171 +++
+ texk/web2c/luatexdir/lua/luainit.c | 39 +-
+ texk/web2c/luatexdir/lua/luastuff.c | 20 +-
+ texk/web2c/luatexdir/lua/luatex-api.h | 1 +
+ texk/web2c/luatexdir/lua/luatex-core.c | 1225 +++++++++--------
+ texk/web2c/luatexdir/lua/luatex-core.lua | 24 +-
+ .../luatexdir/luafontloader/src/luafflib.c | 1 -
+ .../luatexdir/luasocket/src/lua_preload.c | 9 +
+ texk/web2c/luatexdir/luatex.c | 6 +-
+ texk/web2c/luatexdir/luatex_svnversion.h | 2 +-
+ texk/web2c/luatexdir/tex/texnodes.c | 2 +-
+ 15 files changed, 932 insertions(+), 636 deletions(-)
+
+diff --git a/texk/web2c/luatexdir/ChangeLog b/texk/web2c/luatexdir/ChangeLog
+index 27fbebcbb..f182f16e4 100644
+--- a/texk/web2c/luatexdir/ChangeLog
++++ b/texk/web2c/luatexdir/ChangeLog
+@@ -1,3 +1,34 @@
++2023-04-29 Luigi Scarso <luigi.scarso@gmail.com>
++ * LuaTeX 1.17.0
++
++2023-04-28 Luigi Scarso <luigi.scarso@gmail.com>
++ * new option --no-socket, same as --nosocket
++
++2023-04-27 Luigi Scarso <luigi.scarso@gmail.com>
++ * new option --socket to split socket and shell escape;
++ * the mime library is always available (Max Chernoff);
++ * Fixed ChangeLog
++
++2023-04-25 Luigi Scarso <luigi.scarso@gmail.com>
++ * socket library by default not enabled;
++ it is enabled with --shell-escape but not with --shell-restricted.
++ The option ---nosocket remains unchanged.
++ The two new functions os.socketgettime and os.socketsleep are
++ like socket.gettime and socket.sleep, but they are always available.
++ * Luatex 1.17.0
++
++2023-04-24 Luigi Scarso <luigi.scarso@gmail.com>
++ * static kpse.check_permissions in os.kpsepopen
++ * Fixed date in ChangeLog
++
++2023-04-23 Luigi Scarso <luigi.scarso@gmail.com>
++ * new os.kpsepopen -- replace io.popen if kpse is active.
++ * Luatex 1.16.2
++
++2023-04-18 Luigi Scarso <luigi.scarso@gmail.com>
++ * lua.setluaname(n, s) and lua.getluaname(n):
++ fixed mismatch between documentation and implementation (J. Friedrich).
++
+ 2023-03-30 Luigi Scarso <luigi.scarso@gmail.com>
+ * bugfix for setpdforigin() (A. Matthias)
+
+diff --git a/texk/web2c/luatexdir/NEWS b/texk/web2c/luatexdir/NEWS
+index 8557c139d..41d6d4d14 100644
+--- a/texk/web2c/luatexdir/NEWS
++++ b/texk/web2c/luatexdir/NEWS
+@@ -1,3 +1,27 @@
++==============================================================
++LuaTeX 1.17.0 2023-04-29
++==============================================================
++
++- A breaking backward compatibility change: by default the socket
++ library is not enabled .
++ The new option --socket enable the socket library as
++ before, as also --shell-escape (without --shell-restricted);
++ --nosocket, --no-socket , --safer disabled the library, and
++ they have the priority in case of conflicting options.
++ The mime library is always available; socket.sleep
++ and socket.gettime are duplicated as os.socketsleep
++ and os.socketgettime, both always available.
++ The new os.kpsepopen replace io.popopen in kpse mode
++ (i.e. when kpse_init is not zero) as it was before
++ but the permission now cannot be changed anymore with
++ kpse.check_permission .
++ The function os.kpsepopen follows the same restrictions
++ as io.popen .
++ Thanks to Max Chernoff for debugging.
++
++
++
++
+ ==============================================================
+ LuaTeX 1.16.0 2023-02-19
+ ==============================================================
+diff --git a/texk/web2c/luatexdir/font/writettf.c b/texk/web2c/luatexdir/font/writettf.c
+index cf034e98d..6270cbf04 100644
+--- a/texk/web2c/luatexdir/font/writettf.c
++++ b/texk/web2c/luatexdir/font/writettf.c
+@@ -1518,7 +1518,7 @@ static void do_writeotf(PDF pdf, fd_entry * fd)
+ if (tracefilenames)
+ tex_printf("<<%s", cur_file_name);
+ ttf_read_tabdir();
+- /*tex Read teh font parameters. */
++ /*tex Read the font parameters. */
+ if (ttf_name_lookup("head", false) != NULL)
+ ttf_read_head();
+ if (ttf_name_lookup("hhea", false) != NULL)
+@@ -1570,4 +1570,3 @@ void writeotf(PDF pdf, fd_entry * fd)
+ xfree(ttf_buffer);
+ cur_file_name = NULL;
+ }
+-
+diff --git a/texk/web2c/luatexdir/lua/llualib.c b/texk/web2c/luatexdir/lua/llualib.c
+index 0586aba02..d91a9a729 100644
+--- a/texk/web2c/luatexdir/lua/llualib.c
++++ b/texk/web2c/luatexdir/lua/llualib.c
+@@ -319,8 +319,8 @@ static int set_luaname(lua_State * L)
+ {
+ int k;
+ const char *s;
+- if (lua_gettop(L) == 3) {
+- k = (int) luaL_checkinteger(L, 2);
++ if (lua_gettop(L) == 2) {
++ k = (int) luaL_checkinteger(L, 1);
+ if (k > 65535 || k < 0) {
+ /* error */
+ } else {
+@@ -328,8 +328,8 @@ static int set_luaname(lua_State * L)
+ free(luanames[k]);
+ luanames[k] = NULL;
+ }
+- if (lua_type(L,3) == LUA_TSTRING) {
+- s = lua_tostring(L, 3);
++ if (lua_type(L, 2) == LUA_TSTRING) {
++ s = lua_tostring(L, 2);
+ if (s != NULL)
+ luanames[k] = xstrdup(s);
+ }
+@@ -340,7 +340,7 @@ static int set_luaname(lua_State * L)
+
+ static int get_luaname(lua_State * L)
+ {
+- int k = (int) luaL_checkinteger(L, 2);
++ int k = (int) luaL_checkinteger(L, 1);
+ if (k > 65535 || k < 0) {
+ /* error */
+ lua_pushnil(L);
+diff --git a/texk/web2c/luatexdir/lua/loslibext.c b/texk/web2c/luatexdir/lua/loslibext.c
+index 2e6befc2d..79368ef92 100644
+--- a/texk/web2c/luatexdir/lua/loslibext.c
++++ b/texk/web2c/luatexdir/lua/loslibext.c
+@@ -1047,6 +1047,167 @@ static int os_execute(lua_State * L)
+ }
+
+
++/*
++** ======================================================
++** l_kpse_popen spawns a new process connected to the current
++** one through the file streams with some checks by kpse.
++** Almost verbatim from Lua liolib.c .
++** =======================================================
++*/
++#if !defined(l_kpse_popen) /* { */
++
++#if defined(LUA_USE_POSIX) /* { */
++
++#define l_kpse_popen(L,c,m) (fflush(NULL), popen(c,m))
++#define l_kpse_pclose(L,file) (pclose(file))
++
++#elif defined(LUA_USE_WINDOWS) /* }{ */
++
++#define l_kpse_popen(L,c,m) (_popen(c,m))
++#define l_kpse_pclose(L,file) (_pclose(file))
++
++#else /* }{ */
++
++/* ISO C definitions */
++#define l_kpse_popen(L,c,m) \
++ ((void)((void)c, m), \
++ luaL_error(L, "'popen' not supported"), \
++ (FILE*)0)
++#define l_kpse_pclose(L,file) ((void)L, (void)file, -1)
++
++#endif /* } */
++
++#endif /* } */
++typedef luaL_Stream LStream;
++#define tolstream(L) ((LStream *)luaL_checkudata(L, 1, LUA_FILEHANDLE))
++static LStream *newprefile (lua_State *L) {
++ LStream *p = (LStream *)lua_newuserdata(L, sizeof(LStream));
++ p->closef = NULL; /* mark file handle as 'closed' */
++ luaL_setmetatable(L, LUA_FILEHANDLE);
++ return p;
++}
++static int io_kpse_pclose (lua_State *L) {
++ LStream *p = tolstream(L);
++ return luaL_execresult(L, l_kpse_pclose(L, p->f));
++}
++static int io_kpse_check_permissions(lua_State *L) {
++ const char *filename = luaL_checkstring(L, 1);
++ if (filename == NULL) {
++ lua_pushboolean(L,0);
++ lua_pushliteral(L,"no command name given");
++ } else if (shellenabledp <= 0) {
++ lua_pushboolean(L,0);
++ lua_pushliteral(L,"all command execution is disabled");
++ } else if (restrictedshell == 0) {
++ lua_pushboolean(L,1);
++ lua_pushstring(L,filename);
++ } else {
++ char *safecmd = NULL;
++ char *cmdname = NULL;
++ switch (shell_cmd_is_allowed(filename, &safecmd, &cmdname)) {
++ case 0:
++ lua_pushboolean(L,0);
++ lua_pushliteral(L, "specific command execution disabled");
++ break;
++ case 1:
++ /* doesn't happen */
++ lua_pushboolean(L,1);
++ lua_pushstring(L,filename);
++ break;
++ case 2:
++ lua_pushboolean(L,1);
++ lua_pushstring(L,safecmd);
++ break;
++ default:
++ /* -1 */
++ lua_pushboolean(L,0);
++ lua_pushliteral(L, "bad command line quoting");
++ break;
++ }
++ }
++ return 2;
++}
++static int io_kpse_popen (lua_State *L) {
++ const char *filename = NULL;
++ const char *mode = NULL;
++ LStream *p = NULL;
++ int okay;
++ filename = luaL_checkstring(L, 1);
++ mode = luaL_optstring(L, 2, "r");
++ lua_pushstring(L,filename);
++ io_kpse_check_permissions(L);
++ filename = luaL_checkstring(L, -1);
++ okay = lua_toboolean(L,-2);
++ if (okay && filename) {
++ p = newprefile(L);
++ luaL_argcheck(L, ((mode[0] == 'r' || mode[0] == 'w') && mode[1] == '\0'),
++ 2, "invalid mode");
++ p->f = l_kpse_popen(L, filename, mode);
++ p->closef = &io_kpse_pclose;
++ return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1;
++ } else {
++ lua_pushnil(L);
++ lua_pushvalue(L,-2);
++ return 2;
++ }
++}
++
++
++
++/* socket.sleep and socket.gettime */
++/* are duplicated here, and they are */
++/* always available (the socket library */
++/* can be nil in some setups) */
++#ifdef _WIN32
++static int socket_timeout_lua_sleep(lua_State *L)
++{
++ double n = luaL_checknumber(L, 1);
++ if (n < 0.0) n = 0.0;
++ if (n < DBL_MAX/1000.0) n *= 1000.0;
++ if (n > INT_MAX) n = INT_MAX;
++ Sleep((int)n);
++ return 0;
++}
++static double socket_timeout_gettime(void) {
++ FILETIME ft;
++ double t;
++ GetSystemTimeAsFileTime(&ft);
++ /* Windows file time (time since January 1, 1601 (UTC)) */
++ t = ft.dwLowDateTime/1.0e7 + ft.dwHighDateTime*(4294967296.0/1.0e7);
++ /* convert to Unix Epoch time (time since January 1, 1970 (UTC)) */
++ return (t - 11644473600.0);
++}
++#else
++static int socket_timeout_lua_sleep(lua_State *L)
++{
++ double n = luaL_checknumber(L, 1);
++ struct timespec t, r;
++ if (n < 0.0) n = 0.0;
++ if (n > INT_MAX) n = INT_MAX;
++ t.tv_sec = (int) n;
++ n -= t.tv_sec;
++ t.tv_nsec = (int) (n * 1000000000);
++ if (t.tv_nsec >= 1000000000) t.tv_nsec = 999999999;
++ while (nanosleep(&t, &r) != 0) {
++ t.tv_sec = r.tv_sec;
++ t.tv_nsec = r.tv_nsec;
++ }
++ return 0;
++}
++static double socket_timeout_gettime(void) {
++ struct timeval v;
++ gettimeofday(&v, (struct timezone *) NULL);
++ /* Unix Epoch time (time since January 1, 1970 (UTC)) */
++ return v.tv_sec + v.tv_usec/1.0e6;
++}
++#endif
++static int socket_timeout_lua_gettime(lua_State *L)
++{
++ lua_pushnumber(L, socket_timeout_gettime());
++ return 1;
++}
++
++
+ void open_oslibext(lua_State * L)
+ {
+
+@@ -1081,5 +1242,15 @@ void open_oslibext(lua_State * L)
+ lua_pushcfunction(L, os_tmpdir);
+ lua_setfield(L, -2, "tmpdir");
+
++ lua_pushcfunction(L, io_kpse_popen);
++ lua_setfield(L, -2, "kpsepopen");
++
++ lua_pushcfunction(L, socket_timeout_lua_sleep);
++ lua_setfield(L, -2, "socketsleep");
++
++ lua_pushcfunction(L, socket_timeout_lua_gettime);
++ lua_setfield(L, -2, "socketgettime");
++
++
+ lua_pop(L, 1); /* pop the table */
+ }
+diff --git a/texk/web2c/luatexdir/lua/luainit.c b/texk/web2c/luatexdir/lua/luainit.c
+index 9eecb714c..bac5444c2 100644
+--- a/texk/web2c/luatexdir/lua/luainit.c
++++ b/texk/web2c/luatexdir/lua/luainit.c
+@@ -85,6 +85,8 @@ const_string LUATEX_IHELP[] = {
+ " --lua=FILE load and execute a lua initialization script",
+ " --[no-]mktex=FMT disable/enable mktexFMT generation (FMT=tex/tfm)",
+ " --nosocket disable the lua socket library",
++ " --no-socket disable the lua socket library",
++ " --socket enable the lua socket library",
+ " --output-comment=STRING use STRING for DVI file comment instead of date (no effect for PDF)",
+ " --output-directory=DIR use existing DIR as the directory to write files in",
+ " --output-format=FORMAT use FORMAT for job output; FORMAT is 'dvi' or 'pdf'",
+@@ -108,6 +110,7 @@ const_string LUATEX_IHELP[] = {
+ #endif
+ "",
+ "See the reference manual for more information about the startup process.",
++ "LuaTeX package page: https://ctan.org/pkg/luatex",
+ NULL
+ };
+
+@@ -212,9 +215,30 @@ char *jithash_hashname = NULL;
+ #endif
+
+ int safer_option = 0;
+-int nosocket_option = 0;
++int nosocket_option = 1;
++int nosocket_cli_option = 0;
++int yessocket_cli_option = 0;
++int socket_bitmask = 0;
+ int utc_option = 0;
+
++/*tex We use a bitmask for the socket library: |0000| and |1xxx| implies |--nosocket|,
++ otherwise the socket library is enabled. Default value is |0000|, i.e. |--nosocket|.
++*/
++#define UPDATE_SOCKET_STATUS() do { \
++ socket_bitmask = 0; \
++ socket_bitmask = safer_option==1? (8+socket_bitmask):socket_bitmask;\
++ socket_bitmask = nosocket_cli_option==1? (4+socket_bitmask):socket_bitmask;\
++ socket_bitmask = (shellenabledp == 1 && restrictedshell == 0)?(2+socket_bitmask):socket_bitmask;\
++ socket_bitmask = yessocket_cli_option==1? (1+socket_bitmask):socket_bitmask;\
++ if( socket_bitmask==0) { \
++ nosocket_option = 1; \
++ } else if ( socket_bitmask<4) { \
++ nosocket_option = 0; \
++ } else { \
++ nosocket_option = 1; \
++ } \
++} while (0)
++
+ /*tex
+
+ Test whether getopt found an option ``A''. Assumes the option index is in the
+@@ -242,7 +266,9 @@ static struct option long_options[] = {
+ #endif
+ {"safer", 0, &safer_option, 1},
+ {"utc", 0, &utc_option, 1},
+- {"nosocket", 0, &nosocket_option, 1},
++ {"nosocket", 0, &nosocket_cli_option, 1},
++ {"no-socket", 0, &nosocket_cli_option, 1},
++ {"socket", 0, &yessocket_cli_option, 1},
+ {"help", 0, 0, 0},
+ {"ini", 0, &ini_version, 1},
+ {"interaction", 1, 0, 0},
+@@ -524,14 +550,11 @@ static void parse_options(int ac, char **av)
+ input_name = xstrdup(sargv[sargc-1]);
+ sargv[sargc-1] = normalize_quotes(input_name, "argument");
+ }
+- if (safer_option) /* --safer implies --nosocket */
+- nosocket_option = 1;
++ UPDATE_SOCKET_STATUS();
+ return;
+ #endif
+ }
+- /*tex |--safer| implies |--nosocket| */
+- if (safer_option)
+- nosocket_option = 1;
++ UPDATE_SOCKET_STATUS();
+ /*tex Finalize the input filename. */
+ if (input_name != NULL) {
+ argv[optind] = normalize_quotes(input_name, "argument");
+@@ -981,6 +1004,7 @@ void lua_initialize(int ac, char **av)
+ shellenabledp = true;
+ restrictedshell = false;
+ safer_option = 0;
++ nosocket_option = 0;
+ }
+ /*tex
+ Get the current locale (it should be |C|) and save |LC_CTYPE|, |LC_COLLATE|
+@@ -1149,6 +1173,7 @@ void lua_initialize(int ac, char **av)
+ }
+ free(v1);
+ }
++ UPDATE_SOCKET_STATUS();
+ /*tex If shell escapes are restricted, get allowed cmds from cnf. */
+ if (shellenabledp && restrictedshell == 1) {
+ v1 = NULL;
+diff --git a/texk/web2c/luatexdir/lua/luastuff.c b/texk/web2c/luatexdir/lua/luastuff.c
+index 4176431ed..62d21c321 100644
+--- a/texk/web2c/luatexdir/lua/luastuff.c
++++ b/texk/web2c/luatexdir/lua/luastuff.c
+@@ -323,7 +323,8 @@ void luainterpreter(void)
+ /*tex
+ The socket and mime libraries are a bit tricky to open because they use a
+ load-time dependency that has to be worked around for luatex, where the C
+- module is loaded way before the lua module.
++ module is loaded way before the lua module.
++ The mime library is always available, even if the socket library is not enabled.
+ */
+ if (!nosocket_option) {
+ /* todo: move this to common */
+@@ -348,6 +349,23 @@ void luainterpreter(void)
+ lua_pop(L, 2);
+ /*tex preload the pure \LUA\ modules */
+ luatex_socketlua_open(L);
++ } else {
++ lua_getglobal(L, "package");
++ lua_getfield(L, -1, "loaded");
++ if (!lua_istable(L, -1)) {
++ lua_newtable(L);
++ lua_setfield(L, -2, "loaded");
++ lua_getfield(L, -1, "loaded");
++ }
++ /*tex |package.loaded.mime = nil| */
++ luaopen_mime_core(L);
++ lua_setfield(L, -2, "mime.core");
++ lua_pushnil(L);
++ lua_setfield(L, -2, "mime");
++ /*tex pop the table */
++ lua_pop(L, 1);
++ /*tex preload the pure \LUA\ mime module */
++ luatex_socketlua_safe_open(L);
+ }
+ luaopen_zlib(L);
+ luaopen_gzip(L);
+diff --git a/texk/web2c/luatexdir/lua/luatex-api.h b/texk/web2c/luatexdir/lua/luatex-api.h
+index 553be2c18..3ade2bc4d 100644
+--- a/texk/web2c/luatexdir/lua/luatex-api.h
++++ b/texk/web2c/luatexdir/lua/luatex-api.h
+@@ -123,6 +123,7 @@ extern int luaopen_profiler(lua_State * L);
+ extern int luaopen_socket_core(lua_State * L);
+ extern int luaopen_mime_core(lua_State * L);
+ extern void luatex_socketlua_open(lua_State * L);
++extern void luatex_socketlua_safe_open(lua_State * L);
+
+ extern int luaopen_img(lua_State * L);
+ extern int l_new_image(lua_State * L);
+diff --git a/texk/web2c/luatexdir/lua/luatex-core.c b/texk/web2c/luatexdir/lua/luatex-core.c
+index c9c4d941b..d912bf4a5 100644
+--- a/texk/web2c/luatexdir/lua/luatex-core.c
++++ b/texk/web2c/luatexdir/lua/luatex-core.c
+@@ -27,7 +27,7 @@ int load_luatex_core_lua (lua_State * L)
+ 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x65, 0x61,
+ 0x6d, 0x27, 0x2c, 0x0a, 0x2d, 0x2d, 0x20, 0x7d, 0x0a, 0x0a, 0x4c, 0x55, 0x41, 0x54, 0x45, 0x58,
+ 0x43, 0x4f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, 0x31, 0x2e,
+- 0x31, 0x35, 0x31, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x65, 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63,
++ 0x31, 0x36, 0x31, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x65, 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x20, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x73, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20,
+@@ -53,632 +53,645 @@ int load_luatex_core_lua (lua_State * L)
+ 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x0a, 0x2d, 0x2d, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70,
+- 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+- 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74,
+- 0x61, 0x74, 0x75, 0x73, 0x2e, 0x73, 0x61, 0x66, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+- 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63,
+- 0x61, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x73, 0x68, 0x65,
+- 0x6c, 0x6c, 0x5f, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x2d, 0x20, 0x30, 0x20, 0x28,
+- 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x29, 0x20, 0x31, 0x20, 0x28, 0x61, 0x6e, 0x79,
+- 0x74, 0x68, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x32, 0x20, 0x28, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69,
+- 0x63, 0x74, 0x65, 0x64, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b, 0x70, 0x73, 0x65,
+- 0x75, 0x73, 0x65, 0x64, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+- 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d,
+- 0x20, 0x30, 0x20, 0x31, 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, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x79,
+- 0x70, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x73, 0x75,
+- 0x62, 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, 0x69, 0x6e, 0x64, 0x20, 0x3d,
+- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20,
+- 0x67, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x69, 0x6f, 0x2e,
+- 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x6d, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x2e, 0x6c, 0x69, 0x6e,
+- 0x65, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b, 0x70,
+- 0x73, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
+- 0x6f, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b,
+- 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72,
+- 0x64, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6b, 0x70,
+- 0x73, 0x65, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f,
+- 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b,
+- 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
+- 0x66, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x72, 0x65, 0x63, 0x6f,
+- 0x72, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65,
+- 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x70,
+- 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69,
+- 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20,
+- 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65,
+- 0x5f, 0x6e, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x69, 0x6f, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e,
+- 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x20, 0x20, 0x20, 0x20, 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, 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,
+- 0x20, 0x20, 0x20, 0x20, 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,
+- 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, 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, 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63,
+- 0x6f, 0x72, 0x64, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61,
+- 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65,
+- 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61,
+- 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27, 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, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+- 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 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,
++ 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
++ 0x6c, 0x20, 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20,
++ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x73, 0x61, 0x66, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74,
++ 0x69, 0x6f, 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65,
++ 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x73,
++ 0x68, 0x65, 0x6c, 0x6c, 0x5f, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x2d, 0x20, 0x30,
++ 0x20, 0x28, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x29, 0x20, 0x31, 0x20, 0x28, 0x61,
++ 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x32, 0x20, 0x28, 0x72, 0x65, 0x73, 0x74,
++ 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b, 0x70,
++ 0x73, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x74,
++ 0x75, 0x73, 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x20, 0x20, 0x20, 0x20,
++ 0x2d, 0x2d, 0x20, 0x30, 0x20, 0x31, 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, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20,
++ 0x74, 0x79, 0x70, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67,
++ 0x73, 0x75, 0x62, 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, 0x69, 0x6e, 0x64,
++ 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x0a, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x74, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x3d, 0x20, 0x67, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x69,
++ 0x6f, 0x2e, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
++ 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x2e, 0x6c,
++ 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
++ 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73,
++ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x63, 0x68, 0x65,
++ 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63,
++ 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x20, 0x3d, 0x20,
++ 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75,
++ 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
++ 0x20, 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x75, 0x74, 0x70,
++ 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x72, 0x65,
++ 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65,
++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6f,
++ 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x2d, 0x2d, 0x20, 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, 0x20, 0x20, 0x3d,
++ 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74,
++ 0x20, 0x6e, 0x65, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f,
++ 0x73, 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f,
++ 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f, 0x2e, 0x72, 0x65,
++ 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
++ 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x69, 0x6f, 0x2e,
++ 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x6b,
++ 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
++ 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20,
++ 0x6b, 0x70, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x70, 0x75, 0x74,
++ 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27, 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, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f,
++ 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 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, 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, 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, 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, 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, 0x20,
+- 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 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, 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+- 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 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, 0x20,
+- 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x6b, 0x61, 0x79, 0x2c, 0x20, 0x66,
+- 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 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, 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, 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, 0x20, 0x20, 0x20, 0x20,
+- 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
++ 0x27, 0x72, 0x27, 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, 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, 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, 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, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x20, 0x6e, 0x6f, 0x74,
++ 0x20, 0x6e, 0x65, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f,
++ 0x73, 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x2d, 0x2d, 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,
++ 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x6b, 0x61, 0x79,
++ 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x6b, 0x70, 0x73, 0x65, 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, 0x2d, 0x2d, 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, 0x2d, 0x2d, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x2d, 0x2d, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
++ 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20,
+- 0x46, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20,
+- 0x74, 0x68, 0x65, 0x20, 0x67, 0x63, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6b,
+- 0x69, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65,
+- 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69,
+- 0x63, 0x69, 0x74, 0x6c, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x73, 0x6f, 0x20,
+- 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20,
+- 0x69, 0x73, 0x20, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x79,
+- 0x70, 0x65, 0x20, 0x3d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65,
+- 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6e,
+- 0x61, 0x6d, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22,
++ 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, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 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, 0x2d, 0x2d, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x65,
++ 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x73,
++ 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67,
++ 0x63, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6b, 0x69, 0x63, 0x6b, 0x20, 0x69,
++ 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
++ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
++ 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6c,
++ 0x75, 0x73, 0x68, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
++ 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20,
++ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 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, 0x20, 0x20,
++ 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20,
++ 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 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, 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
++ 0x6c, 0x20, 0x6c, 0x20, 0x3d, 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, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
++ 0x20, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x20, 0x3d, 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, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+- 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
++ 0x66, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
++ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
++ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 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,
++ 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65,
++ 0x20, 0x77, 0x68, 0x6f, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x20, 0x74, 0x68, 0x69,
++ 0x73, 0x20, 0x77, 0x61, 0x79, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22, 0x70, 0x61,
++ 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x27, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x27,
++ 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x27, 0x22, 0x20, 0x2e,
++ 0x2e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x27, 0x22, 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, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 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, 0x20, 0x20,
++ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 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, 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, 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, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20, 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, 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, 0x2d, 0x2d,
++ 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, 0x20, 0x2d, 0x2d, 0x20, 0x6e, 0x6f,
++ 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x20, 0x75, 0x73, 0x65, 0x20,
++ 0x6f, 0x73, 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x73, 0x2e, 0x6b,
++ 0x70, 0x73, 0x65, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65,
++ 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6c, 0x73, 0x65,
++ 0x77, 0x68, 0x65, 0x72, 0x65, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6d,
++ 0x61, 0x79, 0x62, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77,
++ 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65,
++ 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,
++ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x6c, 0x20, 0x3d,
++ 0x20, 0x74, 0x65, 0x78, 0x69, 0x6f, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x6c, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
++ 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d,
++ 0x61, 0x74, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75,
++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75,
++ 0x6d, 0x6d, 0x79, 0x28, 0x73, 0x74, 0x72, 0x2c, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65,
++ 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 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, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74,
++ 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x6c,
++ 0x28, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x73, 0x61, 0x66, 0x65, 0x72, 0x20, 0x6f,
++ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
++ 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x71, 0x20, 0x69, 0x73, 0x20, 0x25, 0x73, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2c, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x6c, 0x69,
++ 0x6d, 0x69, 0x74, 0x65, 0x64, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x64, 0x69, 0x73, 0x61, 0x62,
++ 0x6c, 0x65, 0x64, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20,
++ 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 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, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+- 0x6e, 0x20, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20,
+- 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x69,
+- 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x61, 0x79, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f,
+- 0x72, 0x28, 0x22, 0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x27, 0x69, 0x6f, 0x2e, 0x6c,
+- 0x69, 0x6e, 0x65, 0x73, 0x27, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e,
+- 0x20, 0x27, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x22,
+- 0x27, 0x22, 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, 0x6c, 0x73, 0x65,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 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, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 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, 0x20, 0x20,
+- 0x20, 0x20, 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, 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,
+- 0x6c, 0x73, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x65, 0x20, 0x61,
+- 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+- 0x20, 0x65, 0x6c, 0x73, 0x65, 0x77, 0x68, 0x65, 0x72, 0x65, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+- 0x0a, 0x2d, 0x2d, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6f,
+- 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x6b, 0x70, 0x73, 0x65,
+- 0x20, 0x6d, 0x6f, 0x64, 0x65, 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, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65,
+- 0x5f, 0x6e, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x69, 0x6f, 0x2e, 0x77, 0x72, 0x69, 0x74,
+- 0x65, 0x5f, 0x6e, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66,
+- 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+- 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+- 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74,
+- 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x73, 0x74, 0x72, 0x2c, 0x66, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65,
+- 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 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, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72,
+- 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69,
+- 0x74, 0x65, 0x5f, 0x6e, 0x6c, 0x28, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x73, 0x61,
+- 0x66, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20,
+- 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x71, 0x20, 0x69, 0x73, 0x20, 0x25,
+- 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x2c, 0x66, 0x20, 0x61, 0x6e,
+- 0x64, 0x20, 0x22, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22,
+- 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6f,
+- 0x72, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 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, 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, 0x20, 0x20,
+- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x28, 0x2e, 0x2e, 0x2e, 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, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66,
+- 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x6c,
+- 0x69, 0x6d, 0x69, 0x74, 0x28, 0x73, 0x74, 0x72, 0x2c, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74,
+- 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75,
+- 0x74, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d,
+- 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x22, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d,
+- 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f,
+- 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73,
+- 0x2e, 0x65, 0x78, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61,
+- 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63,
+- 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76,
++ 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, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
++ 0x75, 0x72, 0x6e, 0x20, 0x66, 0x28, 0x2e, 0x2e, 0x2e, 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, 0x6e, 0x64, 0x0a, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
++ 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x28,
++ 0x73, 0x74, 0x72, 0x2c, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c,
++ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x3d, 0x20,
++ 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, 0x3d, 0x20,
++ 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73,
++ 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f,
++ 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74,
++ 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61,
++ 0x77, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63,
++ 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d,
++ 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x22, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x20, 0x3d, 0x20, 0x69,
++ 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e,
++ 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e,
++ 0x74, 0x65, 0x6d, 0x70, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c,
++ 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x64,
++ 0x69, 0x72, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x6b, 0x70, 0x73,
++ 0x65, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
++ 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x6b, 0x70, 0x73, 0x65, 0x70, 0x6f,
++ 0x70, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f,
++ 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64,
++ 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x29,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20,
++ 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22,
++ 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x2c, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f,
++ 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79,
++ 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79,
+- 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x22, 0x29, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x69,
++ 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x69,
+ 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e,
+- 0x74, 0x65, 0x6d, 0x70, 0x64, 0x69, 0x72, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+- 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74,
+- 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70,
+- 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e,
+- 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d,
+- 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x2c, 0x6c, 0x75, 0x61,
+- 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64,
+- 0x6f, 0x6e, 0x6c, 0x79, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65,
+- 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64,
+- 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20,
++ 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f,
++ 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61,
++ 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66,
++ 0x69, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x75, 0x74,
++ 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75,
++ 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x29,
++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x20,
+ 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28,
+- 0x22, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x69,
+- 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e,
+- 0x74, 0x6d, 0x70, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f,
+- 0x2e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61,
+- 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x69, 0x6f, 0x2e, 0x6f, 0x75, 0x74, 0x70,
+- 0x75, 0x74, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68,
+- 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75,
+- 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x22, 0x29,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x20, 0x20,
+- 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22,
+- 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+- 0x66, 0x73, 0x2e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74,
+- 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x74, 0x6f,
+- 0x75, 0x63, 0x68, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d,
+- 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75,
+- 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x22, 0x29,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x20,
+- 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22,
+- 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x64, 0x65, 0x62, 0x75, 0x67, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 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, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65,
+- 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20,
+- 0x69, 0x6e, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 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,
+- 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x6c, 0x69, 0x62, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+- 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
+- 0x65, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x5b, 0x34, 0x5d, 0x20, 0x3d,
+- 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
+- 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20,
+- 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x73, 0x2e, 0x73,
+- 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x66,
+- 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x65, 0x6e, 0x64,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 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, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x66, 0x69, 0x20, 0x74, 0x68,
+- 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 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, 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,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69,
+- 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f,
+- 0x61, 0x64, 0x65, 0x64, 0x2e, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x65, 0x6c, 0x6f,
+- 0x61, 0x64, 0x2e, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0a, 0x0a,
+- 0x65, 0x6e, 0x64, 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, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x68,
+- 0x65, 0x78, 0x61, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e,
++ 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e,
++ 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x74,
++ 0x6f, 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64,
++ 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x22,
++ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20,
++ 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28,
++ 0x22, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6e,
++ 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x22, 0x6c, 0x66, 0x73, 0x2e,
++ 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x22, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x62,
++ 0x75, 0x67, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 0x65,
++ 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x20, 0x61, 0x6c, 0x73,
++ 0x6f, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x6b,
++ 0x70, 0x73, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 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, 0x70, 0x61, 0x63, 0x6b,
++ 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x6c, 0x69, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x65, 0x6e,
++ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x73, 0x65,
++ 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x73, 0x65, 0x61,
++ 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e,
++ 0x76, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f,
++ 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
++ 0x69, 0x6f, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 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, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x66, 0x69, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 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, 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, 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, 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, 0x6e, 0x64, 0x0a, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73,
+- 0x75, 0x6d, 0x48, 0x45, 0x58, 0x41, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 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, 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, 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, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+- 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61,
+- 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d,
+- 0x69, 0x67, 0x68, 0x74, 0x20, 0x67, 0x6f, 0x20, 0x61, 0x77, 0x61, 0x79, 0x0a, 0x0a, 0x69, 0x66,
+- 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x74, 0x61,
+- 0x62, 0x6c, 0x65, 0x2e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a,
+- 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c,
+- 0x6f, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20,
+- 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
+- 0x65, 0x72, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+- 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d,
+- 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x6f,
+- 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x74, 0x68, 0x69,
+- 0x73, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, 0x74, 0x61, 0x79, 0x0a, 0x0a, 0x69, 0x66,
+- 0x20, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 0x6c, 0x75, 0x61, 0x20, 0x35, 0x2e, 0x32, 0x3a, 0x20, 0x77, 0x65, 0x27,
+- 0x72, 0x65, 0x20, 0x6f, 0x6b, 0x61, 0x79, 0x0a, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20,
+- 0x75, 0x74, 0x66, 0x38, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
+- 0x2d, 0x20, 0x6c, 0x75, 0x61, 0x20, 0x35, 0x2e, 0x33, 0x3a, 0x20, 0x20, 0x62, 0x69, 0x74, 0x77,
+- 0x69, 0x73, 0x65, 0x2e, 0x6c, 0x75, 0x61, 0x2c, 0x20, 0x76, 0x20, 0x31, 0x2e, 0x32, 0x34, 0x20,
+- 0x32, 0x30, 0x31, 0x34, 0x2f, 0x31, 0x32, 0x2f, 0x32, 0x36, 0x20, 0x31, 0x37, 0x3a, 0x32, 0x30,
+- 0x3a, 0x35, 0x33, 0x20, 0x72, 0x6f, 0x62, 0x65, 0x72, 0x74, 0x6f, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x20,
+- 0x5b, 0x5b, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20,
+- 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x73, 0x74,
+- 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x3a, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x20,
+- 0x2e, 0x2e, 0x2e, 0x20, 0x7d, 0x0a, 0x0a, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x7b,
+- 0x0a, 0x20, 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+- 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+- 0x6e, 0x20, 0x7e, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+- 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x20,
+- 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x78, 0x2c, 0x20, 0x79,
+- 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+- 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x78, 0x20, 0x6f, 0x72, 0x20,
+- 0x2d, 0x31, 0x29, 0x20, 0x26, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x29,
+- 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+- 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x26, 0x20, 0x79, 0x20, 0x26,
+- 0x20, 0x7a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31,
+- 0x2c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e, 0x29,
+- 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20,
+- 0x3d, 0x20, 0x72, 0x65, 0x73, 0x20, 0x26, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x69,
+- 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73,
++ 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64,
++ 0x2e, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70,
++ 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x66,
++ 0x66, 0x69, 0x20, 0x3d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 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, 0x69, 0x66, 0x20,
++ 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x68, 0x65, 0x78, 0x61, 0x20,
++ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 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, 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, 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, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
++ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x48, 0x45,
++ 0x58, 0x41, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 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,
++ 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, 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,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x65,
++ 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
++ 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74,
++ 0x20, 0x67, 0x6f, 0x20, 0x61, 0x77, 0x61, 0x79, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
++ 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
++ 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6e,
++ 0x6f, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65,
++ 0x72, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x63, 0x6b,
++ 0x61, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x61,
++ 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, 0x0a,
++ 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64,
++ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61,
++ 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74,
++ 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x69,
++ 0x67, 0x68, 0x74, 0x20, 0x73, 0x74, 0x61, 0x79, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x62, 0x69, 0x74,
++ 0x33, 0x32, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20,
++ 0x6c, 0x75, 0x61, 0x20, 0x35, 0x2e, 0x32, 0x3a, 0x20, 0x77, 0x65, 0x27, 0x72, 0x65, 0x20, 0x6f,
++ 0x6b, 0x61, 0x79, 0x0a, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x75, 0x74, 0x66, 0x38,
++ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6c, 0x75,
++ 0x61, 0x20, 0x35, 0x2e, 0x33, 0x3a, 0x20, 0x20, 0x62, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2e,
++ 0x6c, 0x75, 0x61, 0x2c, 0x20, 0x76, 0x20, 0x31, 0x2e, 0x32, 0x34, 0x20, 0x32, 0x30, 0x31, 0x34,
++ 0x2f, 0x31, 0x32, 0x2f, 0x32, 0x36, 0x20, 0x31, 0x37, 0x3a, 0x32, 0x30, 0x3a, 0x35, 0x33, 0x20,
++ 0x72, 0x6f, 0x62, 0x65, 0x72, 0x74, 0x6f, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74,
++ 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x20, 0x5b, 0x5b, 0x0a, 0x6c,
++ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x65,
++ 0x6c, 0x65, 0x63, 0x74, 0x20, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20,
++ 0x6f, 0x66, 0x3a, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x2e, 0x2e, 0x2e, 0x20,
++ 0x7d, 0x0a, 0x0a, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62,
++ 0x6e, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28,
++ 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7e, 0x61,
+ 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62,
+- 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x78,
+- 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x78, 0x20,
+- 0x6f, 0x72, 0x20, 0x30, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29,
+- 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+- 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x7c, 0x20, 0x79, 0x20,
+- 0x7c, 0x20, 0x7a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d,
+- 0x31, 0x2c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e,
+- 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73,
+- 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x20, 0x7c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28,
+- 0x69, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65,
+- 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20,
+- 0x62, 0x78, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+- 0x28, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28,
+- 0x78, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x20, 0x7e, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20,
+- 0x30, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x7e, 0x20,
+- 0x79, 0x20, 0x7e, 0x20, 0x7a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20,
+- 0x69, 0x3d, 0x31, 0x2c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e,
+- 0x2e, 0x2e, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+- 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x20, 0x7e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63,
+- 0x74, 0x28, 0x69, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+- 0x72, 0x65, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a,
+- 0x20, 0x20, 0x62, 0x74, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+- 0x6f, 0x6e, 0x20, 0x28, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74,
+- 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+- 0x20, 0x28, 0x28, 0x28, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x26, 0x20, 0x28,
+- 0x79, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46,
+- 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x7e, 0x3d, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20,
++ 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75,
++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c,
++ 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
++ 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
++ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x20,
++ 0x26, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30,
++ 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
++ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72,
++ 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x26, 0x20, 0x79, 0x20, 0x26, 0x20, 0x7a, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c, 0x73, 0x65, 0x6c,
++ 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x64, 0x6f, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65,
++ 0x73, 0x20, 0x26, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x69, 0x2c, 0x2e, 0x2e, 0x2e,
++ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x20, 0x26, 0x20, 0x30,
++ 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
++ 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x20, 0x3d,
++ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x78, 0x2c, 0x20, 0x79, 0x2c,
++ 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
++ 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x30,
++ 0x29, 0x20, 0x7c, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x29, 0x20, 0x26, 0x20,
++ 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
++ 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
++ 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x7c, 0x20, 0x79, 0x20, 0x7c, 0x20, 0x7a, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c, 0x73, 0x65,
++ 0x6c, 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x64, 0x6f,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72,
++ 0x65, 0x73, 0x20, 0x7c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x69, 0x2c, 0x2e, 0x2e,
++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x20, 0x26, 0x20,
++ 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
++ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x78, 0x6f, 0x72,
++ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x78, 0x2c, 0x20,
++ 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
++ 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x78, 0x20, 0x6f, 0x72,
++ 0x20, 0x30, 0x29, 0x20, 0x7e, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x29, 0x20,
++ 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x26, 0x20, 0x79, 0x20, 0x26, 0x20,
++ 0x6c, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x7e, 0x20, 0x79, 0x20, 0x7e, 0x20,
+ 0x7a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c,
+ 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x20,
+- 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73,
+- 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x20, 0x26, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28,
+- 0x69, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x72,
+- 0x65, 0x73, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29,
+- 0x20, 0x7e, 0x3d, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+- 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20,
+- 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61, 0x20, 0x26,
+- 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x3c, 0x3c, 0x20,
+- 0x62, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a,
+- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20,
+- 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61,
+- 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x3e,
+- 0x3e, 0x20, 0x62, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+- 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x61, 0x72, 0x73, 0x68, 0x69,
+- 0x66, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61,
+- 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26,
+- 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x69, 0x66, 0x20, 0x62, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x20,
+- 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x3d, 0x3d,
+- 0x20, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x20, 0x26, 0x20,
+- 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+- 0x20, 0x28, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x20, 0x7c, 0x20, 0x7e, 0x28, 0x30,
+- 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x29,
+- 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x6c,
+- 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+- 0x6e, 0x20, 0x28, 0x61, 0x20, 0x2c, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x3d,
+- 0x20, 0x62, 0x20, 0x26, 0x20, 0x33, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20,
+- 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x20,
+- 0x7c, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x62, 0x29,
+- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x26,
++ 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d,
++ 0x20, 0x72, 0x65, 0x73, 0x20, 0x7e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x69, 0x2c,
++ 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x20,
++ 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x74,
++ 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28,
++ 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x28,
++ 0x78, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x26, 0x20, 0x28, 0x79, 0x20, 0x6f, 0x72,
++ 0x20, 0x2d, 0x31, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
++ 0x46, 0x46, 0x29, 0x20, 0x7e, 0x3d, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
++ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65,
++ 0x73, 0x20, 0x3d, 0x20, 0x78, 0x20, 0x26, 0x20, 0x79, 0x20, 0x26, 0x20, 0x7a, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c, 0x73, 0x65, 0x6c, 0x65,
++ 0x63, 0x74, 0x28, 0x22, 0x23, 0x22, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72,
++ 0x65, 0x73, 0x20, 0x26, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x69, 0x2c, 0x2e, 0x2e,
++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x72, 0x65, 0x73, 0x20, 0x26,
++ 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x7e, 0x3d, 0x20,
++ 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c,
++ 0x0a, 0x20, 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
++ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46,
++ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x20, 0x26,
+ 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e,
+- 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66,
+- 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x2d, 0x62, 0x20, 0x26, 0x20, 0x33, 0x31, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46,
+- 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x61,
+- 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x28,
+- 0x33, 0x32, 0x20, 0x2d, 0x20, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+- 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+- 0x46, 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x65, 0x78, 0x74, 0x72,
+- 0x61, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28,
+- 0x61, 0x2c, 0x20, 0x66, 0x2c, 0x20, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+- 0x75, 0x72, 0x6e, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x66, 0x29, 0x20, 0x26, 0x20, 0x7e,
+- 0x28, 0x2d, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x29,
+- 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+- 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c,
+- 0x20, 0x76, 0x2c, 0x20, 0x66, 0x2c, 0x20, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+- 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x7e, 0x28, 0x2d, 0x31, 0x20,
+- 0x3c, 0x3c, 0x20, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x7e, 0x28,
+- 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x29, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28,
+- 0x76, 0x20, 0x26, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x29, 0x29,
++ 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75,
++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x30,
++ 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29,
+ 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20,
+- 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d,
+- 0x5d, 0x20, 0x29, 0x0a, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x62, 0x69, 0x74, 0x20,
+- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6c, 0x75, 0x61,
+- 0x6a, 0x69, 0x74, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x77, 0x29, 0x0a, 0x0a, 0x20,
+- 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20,
+- 0x28, 0x20, 0x5b, 0x5b, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x2c,
+- 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x2c, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x20, 0x6c,
+- 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x61, 0x6e, 0x64,
+- 0x2c, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x6e, 0x6f, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x2e,
+- 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x6c, 0x73, 0x68, 0x69,
+- 0x66, 0x74, 0x0a, 0x0a, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20,
+- 0x61, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x61, 0x72,
+- 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x20, 0x20, 0x20,
+- 0x20, 0x3d, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x20,
+- 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x6f, 0x72, 0x2c, 0x0a,
+- 0x20, 0x20, 0x62, 0x78, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e,
+- 0x62, 0x78, 0x6f, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x74, 0x65, 0x73, 0x74, 0x20, 0x20, 0x20,
+- 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x28,
+- 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x7e, 0x3d, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c,
+- 0x0a, 0x20, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
+- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x2c, 0x66, 0x2c, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x28, 0x72, 0x73, 0x68,
+- 0x69, 0x66, 0x74, 0x28, 0x61, 0x2c, 0x66, 0x29, 0x2c, 0x32, 0x5e, 0x28, 0x77, 0x20, 0x6f, 0x72,
+- 0x20, 0x31, 0x29, 0x2d, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20,
+- 0x6c, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x72, 0x6f,
+- 0x6c, 0x2c, 0x0a, 0x20, 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6c,
+- 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+- 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x2c, 0x76, 0x2c,
+- 0x66, 0x2c, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d,
+- 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x32, 0x5e, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29,
+- 0x2d, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61,
+- 0x6e, 0x64, 0x28, 0x61, 0x2c, 0x62, 0x6e, 0x6f, 0x74, 0x28, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74,
+- 0x28, 0x6d, 0x61, 0x73, 0x6b, 0x2c, 0x66, 0x29, 0x29, 0x29, 0x2b, 0x6c, 0x73, 0x68, 0x69, 0x66,
+- 0x74, 0x28, 0x62, 0x61, 0x6e, 0x64, 0x28, 0x76, 0x2c, 0x6d, 0x61, 0x73, 0x6b, 0x29, 0x2c, 0x66,
+- 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x72, 0x6f, 0x74, 0x61,
+- 0x74, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x72, 0x6f, 0x72, 0x2c, 0x0a, 0x20, 0x20,
+- 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74,
+- 0x2c, 0x0a, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x5d, 0x20, 0x29,
+- 0x0a, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x68,
+- 0x6f, 0x70, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74,
+- 0x20, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69,
+- 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x62,
+- 0x69, 0x74, 0x33, 0x32, 0x22, 0x29, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20,
+- 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x66,
+- 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+- 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x20, 0x72, 0x69, 0x67,
+- 0x68, 0x74, 0x0a, 0x0a, 0x64, 0x6f, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+- 0x6c, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61,
+- 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+- 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x73, 0x6f, 0x63,
+- 0x6b, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e,
+- 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5b,
+- 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x5d, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f,
+- 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x6e,
+- 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x3d,
+- 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5b, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x63, 0x6f,
+- 0x72, 0x65, 0x22, 0x5d, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20,
+- 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6c, 0x66,
+- 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6c, 0x66,
+- 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64,
+- 0x0a, 0x0a, 0x64, 0x6f, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+- 0x6c, 0x66, 0x73, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+- 0x65, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x79, 0x6d,
+- 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d,
+- 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x74, 0x74, 0x72,
+- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74,
+- 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x62, 0x65, 0x20,
+- 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x66, 0x73, 0x20, 0x28,
+- 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x61, 0x64, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x65,
+- 0x66, 0x6f, 0x72, 0x65, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
+- 0x74, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x69, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65,
+- 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+- 0x6f, 0x6e, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x69, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61,
+- 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x61, 0x74, 0x74,
+- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x6d, 0x6f,
+- 0x64, 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x66, 0x69,
+- 0x6c, 0x65, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x6c, 0x69, 0x6e,
+- 0x6b, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
++ 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x61, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x3d,
++ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46,
++ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62,
++ 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78,
++ 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x74,
++ 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
++ 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46,
++ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61,
++ 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x20, 0x7c, 0x20, 0x7e, 0x28, 0x30, 0x78, 0x46, 0x46, 0x46,
++ 0x46, 0x46, 0x46, 0x46, 0x46, 0x20, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30,
++ 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
++ 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x6c, 0x72, 0x6f, 0x74, 0x61,
++ 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61,
++ 0x20, 0x2c, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x62, 0x20, 0x26,
++ 0x20, 0x33, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20,
++ 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61,
++ 0x20, 0x3d, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x61,
++ 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46,
++ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20,
++ 0x20, 0x72, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
++ 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62,
++ 0x20, 0x3d, 0x20, 0x2d, 0x62, 0x20, 0x26, 0x20, 0x33, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61,
++ 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
++ 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20,
++ 0x62, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2d,
++ 0x20, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
++ 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20,
++ 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20,
++ 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x66,
++ 0x2c, 0x20, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
++ 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x66, 0x29, 0x20, 0x26, 0x20, 0x7e, 0x28, 0x2d, 0x31, 0x20,
++ 0x3c, 0x3c, 0x20, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x65,
++ 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20,
++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x76, 0x2c, 0x20,
++ 0x66, 0x2c, 0x20, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
++ 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x7e, 0x28, 0x2d, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x28,
++ 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
++ 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, 0x61, 0x20, 0x26, 0x20, 0x7e, 0x28, 0x6d, 0x61, 0x73, 0x6b,
++ 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x29, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x20, 0x26, 0x20,
++ 0x6d, 0x61, 0x73, 0x6b, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30,
++ 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c,
++ 0x0a, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x5d, 0x20, 0x29, 0x0a,
++ 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x62, 0x69, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e,
++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6c, 0x75, 0x61, 0x6a, 0x69, 0x74, 0x20,
++ 0x28, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x77, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62,
++ 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x28, 0x20, 0x5b, 0x5b,
++ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x62, 0x6e, 0x6f,
++ 0x74, 0x2c, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66,
++ 0x74, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x62, 0x69,
++ 0x74, 0x2e, 0x62, 0x6e, 0x6f, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x72, 0x73, 0x68, 0x69,
++ 0x66, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x0a, 0x0a,
++ 0x62, 0x69, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x72, 0x73, 0x68,
++ 0x69, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x61, 0x72, 0x73, 0x68, 0x69, 0x66,
++ 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62,
++ 0x61, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x20, 0x20, 0x20, 0x20, 0x3d,
++ 0x20, 0x62, 0x6e, 0x6f, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x6f, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x78,
++ 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x62, 0x78, 0x6f, 0x72,
++ 0x2c, 0x0a, 0x20, 0x20, 0x62, 0x74, 0x65, 0x73, 0x74, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x75,
++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x28, 0x2e, 0x2e, 0x2e, 0x29,
++ 0x20, 0x7e, 0x3d, 0x20, 0x30, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x65,
++ 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
++ 0x6e, 0x28, 0x61, 0x2c, 0x66, 0x2c, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
++ 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x28, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x28,
++ 0x61, 0x2c, 0x66, 0x29, 0x2c, 0x32, 0x5e, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x2d,
++ 0x31, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x6c, 0x72, 0x6f, 0x74,
++ 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x2c, 0x0a, 0x20,
++ 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x73, 0x68, 0x69, 0x66,
++ 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x66,
++ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x2c, 0x76, 0x2c, 0x66, 0x2c, 0x77, 0x29,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20,
++ 0x3d, 0x20, 0x32, 0x5e, 0x28, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x29, 0x2d, 0x31, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x28, 0x61,
++ 0x2c, 0x62, 0x6e, 0x6f, 0x74, 0x28, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x28, 0x6d, 0x61, 0x73,
++ 0x6b, 0x2c, 0x66, 0x29, 0x29, 0x29, 0x2b, 0x6c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x28, 0x62, 0x61,
++ 0x6e, 0x64, 0x28, 0x76, 0x2c, 0x6d, 0x61, 0x73, 0x6b, 0x29, 0x2c, 0x66, 0x29, 0x0a, 0x20, 0x20,
++ 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d,
++ 0x20, 0x62, 0x69, 0x74, 0x2e, 0x72, 0x6f, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x72, 0x73, 0x68, 0x69,
++ 0x66, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x72, 0x73, 0x68, 0x69, 0x66, 0x74, 0x2c, 0x0a, 0x7d, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x5d, 0x20, 0x29, 0x0a, 0x0a, 0x65, 0x6c,
++ 0x73, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x68, 0x6f, 0x70, 0x65, 0x20,
++ 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
++ 0x66, 0x61, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x33, 0x32, 0x20,
++ 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x62, 0x69, 0x74, 0x33, 0x32,
++ 0x22, 0x29, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73,
++ 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67,
++ 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
++ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0a, 0x0a,
++ 0x64, 0x6f, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x6f,
++ 0x61, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6c,
++ 0x6f, 0x61, 0x64, 0x65, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
++ 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20,
++ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x73, 0x6f, 0x63, 0x6b,
++ 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5b, 0x22, 0x73, 0x6f, 0x63,
++ 0x6b, 0x65, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x5d, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64,
++ 0x2e, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x61,
++ 0x64, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61,
++ 0x64, 0x65, 0x64, 0x5b, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x5d,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e,
+- 0x6f, 0x74, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x69, 0x73, 0x64, 0x69, 0x72, 0x20, 0x74, 0x68, 0x65,
+- 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+- 0x6f, 0x6e, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x69, 0x73, 0x64, 0x69, 0x72, 0x28, 0x6e, 0x61, 0x6d,
+- 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c,
+- 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x61, 0x74, 0x74, 0x72,
+- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x6d, 0x6f, 0x64,
+- 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x64, 0x69, 0x72,
+- 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20,
+- 0x20, 0x2d, 0x2d, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x68,
+- 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74,
+- 0x20, 0x6f, 0x66, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d,
+- 0x20, 0x6b, 0x70, 0x73, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
+- 0x74, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e,
+- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e,
+- 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d,
+- 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6e, 0x6f,
+- 0x77, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x72,
+- 0x67, 0x65, 0x74, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x2e, 0x2e,
+- 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x66,
+- 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+- 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x28, 0x6e, 0x61,
+- 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x74,
+- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x74,
+- 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20,
++ 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6c, 0x66, 0x73, 0x20, 0x74, 0x68,
++ 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x2e, 0x6c, 0x66, 0x73, 0x20, 0x3d, 0x20,
++ 0x6c, 0x66, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x64, 0x6f,
++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x66, 0x73, 0x61,
++ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20,
++ 0x6c, 0x66, 0x73, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b,
++ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73,
++ 0x2e, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
++ 0x65, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65,
++ 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x62, 0x65, 0x20, 0x64, 0x6f, 0x6e, 0x65,
++ 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x66, 0x73, 0x20, 0x28, 0x77, 0x61, 0x73, 0x20,
++ 0x64, 0x65, 0x61, 0x64, 0x20, 0x73, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
++ 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x66,
++ 0x73, 0x2e, 0x69, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c,
++ 0x66, 0x73, 0x2e, 0x69, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
++ 0x6c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
++ 0x74, 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x29,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
++ 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x20,
++ 0x6f, 0x72, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+- 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00
++ 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c,
++ 0x66, 0x73, 0x2e, 0x69, 0x73, 0x64, 0x69, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c,
++ 0x66, 0x73, 0x2e, 0x69, 0x73, 0x64, 0x69, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
++ 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x6c, 0x66, 0x73, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
++ 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x29, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
++ 0x72, 0x6e, 0x20, 0x6d, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
++ 0x72, 0x79, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20,
++ 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20,
++ 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20,
++ 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6b, 0x70, 0x73,
++ 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x66,
++ 0x73, 0x2e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e,
++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
++ 0x6e, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x28,
++ 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
++ 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68,
++ 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20,
++ 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x2e, 0x2e, 0x2e, 0x0a, 0x0a, 0x20,
++ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x65,
++ 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x66, 0x73,
++ 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x6b, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
++ 0x72, 0x6e, 0x20, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
++ 0x75, 0x74, 0x65, 0x73, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x22, 0x74, 0x61, 0x72, 0x67, 0x65,
++ 0x74, 0x22, 0x29, 0x20, 0x6f, 0x72, 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, 0x0a,
++ 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00
+ };
+ return luaL_dostring(L, (const char*) luatex_core_lua);
+ }
+\ No newline at end of file
+diff --git a/texk/web2c/luatexdir/lua/luatex-core.lua b/texk/web2c/luatexdir/lua/luatex-core.lua
+index 12941dbe7..d33c12179 100644
+--- a/texk/web2c/luatexdir/lua/luatex-core.lua
++++ b/texk/web2c/luatexdir/lua/luatex-core.lua
+@@ -7,7 +7,7 @@
+ -- copyright = 'LuaTeX Development Team',
+ -- }
+
+-LUATEXCOREVERSION = 1.151 -- we reflect the luatex version where changes happened
++LUATEXCOREVERSION = 1.161 -- we reflect the luatex version where changes happened
+
+ -- This file overloads some Lua functions. The readline variants provide the same
+ -- functionality as LuaTeX <= 1.04 and doing it this way permits us to keep the
+@@ -16,6 +16,8 @@ LUATEXCOREVERSION = 1.151 -- we reflect the luatex version where changes happene
+ -- We test for functions already being defined so that we don't overload ones that
+ -- are provided in the startup script.
+
++
++
+ local saferoption = status.safer_option
+ local shellescape = status.shell_escape -- 0 (disabled) 1 (anything) 2 (restricted)
+ local kpseused = status.kpse_used -- 0 1
+@@ -34,7 +36,7 @@ if kpseused == 1 then
+ local kpse_recordoutputfile = kpse.record_output_file
+
+ local io_open = io.open
+- local io_popen = io.popen
++ -- local io_popen = io.popen -- not need, we use os.kpsepopen
+ local io_lines = io.lines
+
+ local fio_readline = fio.readline
+@@ -75,12 +77,13 @@ if kpseused == 1 then
+ return f
+ end
+
+- local function luatex_io_popen(name,...)
+- local okay, found = kpse_checkpermission(name)
+- if okay and found then
+- return io_popen(found,...)
+- end
+- end
++ -- not need, we use os.kpsepopen
++ --local function luatex_io_popen(name,...)
++ -- local okay, found = kpse_checkpermission(name)
++ -- if okay and found then
++ -- return io_popen(found,...)
++ -- end
++ --end
+
+ -- local function luatex_io_lines(name,how)
+ -- if name then
+@@ -130,7 +133,8 @@ if kpseused == 1 then
+ mt.lines = luatex_io_readline
+
+ io.open = luatex_io_open
+- io.popen = luatex_io_popen
++ --io.popen = luatex_io_popen -- not need, we use os.kpsepopen
++ io.popen = os.kpsepopen
+
+ else
+
+@@ -169,6 +173,8 @@ if saferoption == 1 then
+ os.setenv = installdummy("os.setenv")
+ os.tempdir = installdummy("os.tempdir")
+
++ os.kpsepopen = installdummy("os.kpsepopen")
++
+ io.popen = installdummy("io.popen")
+ io.open = installdummy("io.open",luatex_io_open_readonly)
+
+diff --git a/texk/web2c/luatexdir/luafontloader/src/luafflib.c b/texk/web2c/luatexdir/luafontloader/src/luafflib.c
+index 434413b00..41e5c3a32 100644
+--- a/texk/web2c/luatexdir/luafontloader/src/luafflib.c
++++ b/texk/web2c/luatexdir/luafontloader/src/luafflib.c
+@@ -1236,7 +1236,6 @@ static void handle_pfminfo(lua_State * L, struct pfminfo pfm)
+ dump_intfield(L, "vlinegap", pfm.vlinegap);
+ dump_intfield(L, "hhead_ascent", pfm.hhead_ascent);
+ dump_intfield(L, "hhead_descent", pfm.hhead_descent);
+- dump_intfield(L, "hhead_descent", pfm.hhead_descent);
+ dump_intfield(L, "os2_typoascent", pfm.os2_typoascent);
+ dump_intfield(L, "os2_typodescent", pfm.os2_typodescent);
+ dump_intfield(L, "os2_typolinegap", pfm.os2_typolinegap);
+diff --git a/texk/web2c/luatexdir/luasocket/src/lua_preload.c b/texk/web2c/luatexdir/luasocket/src/lua_preload.c
+index 838871c1d..b235f6a51 100644
+--- a/texk/web2c/luatexdir/luasocket/src/lua_preload.c
++++ b/texk/web2c/luatexdir/luasocket/src/lua_preload.c
+@@ -16,6 +16,7 @@ int luatex_ftp_lua_open(lua_State*);
+
+
+ extern void luatex_socketlua_open (lua_State *) ;
++extern void luatex_socketlua_safe_open (lua_State *) ;
+ #include "ftp_lua.c"
+ #include "headers_lua.c"
+ #include "http_lua.c"
+@@ -47,3 +48,11 @@ luatex_socketlua_open (lua_State *L) {
+ TEST(luatex_http_lua_open(L));
+ TEST(luatex_ftp_lua_open(L));
+ }
++
++/* luatex_socketlua_safe_open: load safe modules */
++/* of luasocket ( mime ). */
++void
++luatex_socketlua_safe_open (lua_State *L) {
++ TEST(luatex_ltn12_lua_open(L));
++ TEST(luatex_mime_lua_open(L));
++}
+diff --git a/texk/web2c/luatexdir/luatex.c b/texk/web2c/luatexdir/luatex.c
+index 40eaa2a11..949389e62 100644
+--- a/texk/web2c/luatexdir/luatex.c
++++ b/texk/web2c/luatexdir/luatex.c
+@@ -32,9 +32,9 @@
+ stick to "0" upto "9" so users can expect a number represented as string.
+ */
+
+-int luatex_version = 116;
+-int luatex_revision = '1';
+-const char *luatex_version_string = "1.16.1";
++int luatex_version = 117;
++int luatex_revision = '0';
++const char *luatex_version_string = "1.17.0";
+ const char *engine_name = my_name;
+
+ #include <kpathsea/c-ctype.h>
+diff --git a/texk/web2c/luatexdir/luatex_svnversion.h b/texk/web2c/luatexdir/luatex_svnversion.h
+index 76d929807..6b6137b1b 100644
+--- a/texk/web2c/luatexdir/luatex_svnversion.h
++++ b/texk/web2c/luatexdir/luatex_svnversion.h
+@@ -1,4 +1,4 @@
+ #ifndef luatex_svn_revision_h
+ #define luatex_svn_revision_h
+-#define luatex_svn_revision 7569
++#define luatex_svn_revision 7581
+ #endif
+diff --git a/texk/web2c/luatexdir/tex/texnodes.c b/texk/web2c/luatexdir/tex/texnodes.c
+index 6e0ae1ff8..72f6716dd 100644
+--- a/texk/web2c/luatexdir/tex/texnodes.c
++++ b/texk/web2c/luatexdir/tex/texnodes.c
+@@ -1203,7 +1203,7 @@ void l_set_whatsit_data(void) {
+ the original one as a metatable. After some experiments (that also included
+ timing) with these scenarios I decided that a deep copy made no sense, nor
+ did nilling. In the end both the shallow copy and the metatable variant were
+- both ok, although the second ons is slower. The most important aspect to keep
++ both ok, although the second one is slower. The most important aspect to keep
+ in mind is that references to other nodes in properties no longer can be
+ valid for that copy. We could use two tables (one unique and one shared) or
+ metatables but that only complicates matters.
+--
+2.39.2
+
+From aeeac98c8f462092f49d3d9f5f8c41737154f7e5 Mon Sep 17 00:00:00 2001
+From: Karl Berry <karl@freefriends.org>
+Date: Tue, 2 May 2023 15:28:44 +0000
+Subject: [PATCH 39/39] reformat NEWS
+
+git-svn-id: svn://tug.org/texlive/trunk/Build/source@66985 c570f23f-e606-0410-a88d-b1316a301751
+---
+ texk/web2c/luatexdir/NEWS | 23 +++++++++++++----------
+ 1 file changed, 13 insertions(+), 10 deletions(-)
+
+diff --git a/texk/web2c/luatexdir/NEWS b/texk/web2c/luatexdir/NEWS
+index 41d6d4d14..3f15df0a7 100644
+--- a/texk/web2c/luatexdir/NEWS
++++ b/texk/web2c/luatexdir/NEWS
+@@ -3,23 +3,26 @@ LuaTeX 1.17.0 2023-04-29
+ ==============================================================
+
+ - A breaking backward compatibility change: by default the socket
+- library is not enabled .
++ library is not enabled.
+ The new option --socket enable the socket library as
+ before, as also --shell-escape (without --shell-restricted);
+ --nosocket, --no-socket , --safer disabled the library, and
+ they have the priority in case of conflicting options.
+- The mime library is always available; socket.sleep
+- and socket.gettime are duplicated as os.socketsleep
+- and os.socketgettime, both always available.
+- The new os.kpsepopen replace io.popopen in kpse mode
+- (i.e. when kpse_init is not zero) as it was before
+- but the permission now cannot be changed anymore with
+- kpse.check_permission .
++
++ socket.sleep and socket.gettime are duplicated as os.socketsleep and
++ os.socketgettime, both always available.
++
++ The new function os.kpsepopen replaces io.popen in kpse mode
++ (i.e. when kpse_init is not zero) as it was before,
++ but the permission can no longer be changed with
++ kpse.check_permission.
+ The function os.kpsepopen follows the same restrictions
+- as io.popen .
++ as io.popen.
++
++ The mime library is always available.
++
+ Thanks to Max Chernoff for debugging.
+
+-
+
+
+ ==============================================================
+--
+2.39.2
+
diff --git a/patches/source/texlive/texlive.SlackBuild b/patches/source/texlive/texlive.SlackBuild
new file mode 100755
index 000000000..53c772768
--- /dev/null
+++ b/patches/source/texlive/texlive.SlackBuild
@@ -0,0 +1,216 @@
+#!/bin/bash
+
+# TeXLive build script for Slackware
+
+# Copyright 2009, 2017 - 2023 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: https://tug.org/texlive/Images/test/
+# Upstream stable fixes: svn://tug.org/texlive/branches/branch2023/Build/source
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PKGNAM=texlive
+SOURCEVERSION=${SOURCEVERSION:-20230311}
+TEXMFVERSION=${TEXMFVERSION:-230322}
+VERSION=${VERSION:-2023.$TEXMFVERSION}
+BUILD=${BUILD:-1_slack15.0}
+
+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:-" -j$(expr $(nproc) + 1) "}
+
+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
+
+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 .
+
+# CVE-2023-32700:
+zcat $CWD/texlive-20230313-source-security_fix-1.patch.gz | patch -p1 --verbose || exit 1
+
+# Define a few new symbols since the Slackware 15.0 release:
+zcat $CWD/texlive.unicode5.0.diff.gz | patch -p1 --verbose || exit 1
+
+mkdir build
+cd build
+ CFLAGS="$SLKCFLAGS" \
+ CXXFLAGS="$SLKCFLAGS" \
+ ../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 \
+ --disable-dialog \
+ --disable-xz \
+ --disable-texdoctk \
+ --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 \
+ --with-system-harfbuzz \
+ --disable-linked-scripts \
+ --build=$ARCH-slackware-linux || exit 1
+
+ make $NUMJOBS || make || exit 1
+ #make check || exit 1
+ make install-strip DESTDIR=$PKG || exit 1
+
+cd ..
+
+# Don't ship .la files:
+rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la
+
+TEXMFROOT=/usr/share
+
+# Remove all files which are covered by tlnet
+rm -rf $PKG$TEXMFROOT $PKG/usr/man $PKG/usr/info
+
+# install the tlnet stuff
+mkdir -p $PKG$TEXMFROOT
+tar xvf $CWD/texlive-base-$TEXMFVERSION.tar.xz -C $PKG$TEXMFROOT || exit 1
+chown -R root:root $PKG
+chmod -R u+w,go-w,a+rX-st $PKG
+
+# use symlinks/scripts from tlnet
+mv $PKG$TEXMFROOT/texmf-dist/linked_scripts/* $PKG/usr/bin
+rmdir $PKG$TEXMFROOT/texmf-dist/linked_scripts
+
+# set some paths
+sed -i \
+ -e "s|^TEXMFROOT.*|TEXMFROOT = $TEXMFROOT|" \
+ -e "s|^TEXMFLOCAL.*|TEXMFLOCAL = \$TEXMFROOT/texmf-local|" \
+ -e "s|^OSFONTDIR.*|OSFONTDIR = ~/.fonts:/usr/share/fonts|" \
+ $PKG$TEXMFROOT/texmf-dist/web2c/texmf.cnf
+
+# 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>$TEXMFROOT/texmf-dist/fonts/opentype</dir>
+ <dir>$TEXMFROOT/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$TEXMFROOT/texmf-dist/packages.base.gz $PKG/usr/doc/texlive-$VERSION
+
+# Put a symlink to $TEXMFROOT/texmf-dist/doc in our Slackware docdir
+ln -srf $PKG$TEXMFROOT/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$TEXMFROOT/{texmf-config,texmf-var,texmf-local}
+
+# Add texlive perl modules
+mkdir -p $PKG/usr/share/perl5
+mv $PKG$TEXMFROOT/texmf-dist/scripts/texlive/TeXLive $PKG/usr/share/perl5/
+
+# Move manual pages to the correct place
+mkdir $PKG/usr/man
+mv $PKG$TEXMFROOT/texmf-dist/doc/man/man1 $PKG/usr/man
+mv $PKG$TEXMFROOT/texmf-dist/doc/man/man5 $PKG/usr/man
+rmdir $PKG$TEXMFROOT/texmf-dist/doc/man
+
+# 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
+mv $PKG$TEXMFROOT/texmf-dist/doc/info $PKG/usr
+rm -f $PKG/usr/info/dir
+gzip -9 $PKG/usr/info/*
+
+mkdir -p $PKG/install
+# Don't demand a global lock when running the install script:
+echo "# This install script should not collide with any other script's activities," > $PKG/install/doinst.sh
+echo "# so don't demand a lock by installpkg: NOLOCK" >> $PKG/install/doinst.sh
+zcat $CWD/doinst.sh.gz >> $PKG/install/doinst.sh
+cat $CWD/douninst.sh > $PKG/install/douninst.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/patches/source/texlive/texlive.unicode5.0.diff b/patches/source/texlive/texlive.unicode5.0.diff
new file mode 100644
index 000000000..d3a31e9e3
--- /dev/null
+++ b/patches/source/texlive/texlive.unicode5.0.diff
@@ -0,0 +1,24 @@
+--- ./texk/bibtex-x/bibtex-1.c.orig 2022-04-28 22:14:26.000000000 -0500
++++ ./texk/bibtex-x/bibtex-1.c 2023-05-23 14:24:44.172208827 -0500
+@@ -330,8 +330,8 @@
+ case UBLOCK_LATIN_EXTENDED_C:
+ case UBLOCK_LATIN_EXTENDED_D:
+ case UBLOCK_LATIN_EXTENDED_E:
+- case UBLOCK_LATIN_EXTENDED_F:
+- case UBLOCK_LATIN_EXTENDED_G:
++ case 313:
++ case 314:
+ case UBLOCK_LATIN_EXTENDED_ADDITIONAL:
+ case UBLOCK_GREEK:
+ case UBLOCK_GREEK_EXTENDED:
+--- ./texk/bibtex-x/bibtex-4.c.orig 2022-05-17 08:08:34.000000000 -0500
++++ ./texk/bibtex-x/bibtex-4.c 2023-05-23 14:25:44.436210175 -0500
+@@ -2826,7 +2826,7 @@
+ case UBLOCK_KATAKANA:
+ case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS:
+ case UBLOCK_KANA_EXTENDED_A:
+- case UBLOCK_KANA_EXTENDED_B:
++ case 312:
+ case UBLOCK_SMALL_KANA_EXTENSION:
+ string_width |= 0x002;
+ break;
diff --git a/patches/source/texlive/texlive.url b/patches/source/texlive/texlive.url
new file mode 100644
index 000000000..03c1a6e30
--- /dev/null
+++ b/patches/source/texlive/texlive.url
@@ -0,0 +1,2 @@
+https://ctan.net/systems/texlive/Source/texlive-20230311-source.tar.xz
+http://slackware.schoepfer.info/slackbuilds/texlive/texlive-base-230322.tar.xz
diff --git a/recompress.sh b/recompress.sh
index 25c8ba397..9a19972e5 100755
--- a/recompress.sh
+++ b/recompress.sh
@@ -1181,6 +1181,9 @@ gzip ./patches/source/python3/python3.no-static-library.diff
gzip ./patches/source/python3/python3.readline.set_pre_input_hook.diff
gzip ./patches/source/python3/python3.setup.py.x86_64.diff
gzip ./patches/source/python3/python3.distutils.x86_64.diff
+gzip ./patches/source/texlive/texlive-20230313-source-security_fix-1.patch
+gzip ./patches/source/texlive/doinst.sh
+gzip ./patches/source/texlive/texlive.unicode5.0.diff
gzip ./patches/source/sysstat/doinst.sh
gzip ./patches/source/xorg-server-xwayland/CVE-2022-46342.patch
gzip ./patches/source/xorg-server-xwayland/CVE-2022-46343.patch