Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Feb 2013 14:39:26 +0300
From:      Sergey Kandaurov <pluknet@gmail.com>
To:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   [patch] Proposal: move getmntopts(3) into libutil
Message-ID:  <CAE-mSO%2B_JCAtzDbMfts8Ttgs32T7zNFZkYbGJ610v85=H-U=OA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--047d7b5d2e2022af2f04d69f1c80
Content-Type: text/plain; charset=ISO-8859-1

Hi.

The functions from sbin/mount/getmntopts.c are used in a bunch of other
stuff like mount_* utilities which have to suck them in as their own
functions in quite a hackish way. getmntopts.c copies are compiled in to
an every utility-consumer instead of being present in one place.  Looks
like getmntopts.c was brought together with mount_ufs.c in 4.4BSD-Lite.
After that other mount_* were converted to use getmntopts().

The utilities consuming getmntopts.c as currently present in HEAD:
mount_smbfs
fsck_ffs
growfs
mksnap_ffs
mount
mount_cd9660
mount_ext2fs
mount_fusefs
mount_hpfs
mount_msdosfs
mount_nfs
mount_nullfs
mount_reiserfs
mount_std
mount_udf
mount_unionfs
mount_nwfs
mount_portalfs
mount_smbfs
mountd

External mount-like utilities may also have difficulties with building
to get getmntopts.c source as this requires /usr/src presence which is
in sync with installed world. Look how mount_fusefs from ports compiles:
# mount_fusefs needs mntopts.h and getmntopts.c from src/sbin/mount/

The attached patch moves them to the IMHO architecturally more correct
place: a separate library -lutil.
sbin/mount/mntopts.h            -> include/mntopts.h
sbin/mount/getmntopts.[3c]      -> lib/libutil/getmntopts.[3c]

The full list of functions in getmntopts.c:
getmntopts()
rmslashes()
checkpath()
build_iovec()
build_iovec_argf()

This will eventually give them public and documented status. It will
also bring back to live its semi-dead man page getmntopts(3) currently
disconnected from build, that will force us to update (and use) it which
is also a goody. getmntopts.3 was never installed.

As a bonus, it will bring us in sync with others BSDs.

The attached patch was buildworld-tested and contains only minimal changes;
getmntopts(3) updates and other improvements could be made separately.
- rearrange files from sbin/mount/ to the new place
- update Makefiles's of mount_* to use getmntopts(3) from libutil
- #include "mntopts.h" -> #include <mntopts.h>

Well, the include changes should be safe to commit as is.

Below is a changelist from svn stat, for convenience 'sake.
M       contrib/smbfs/mount_smbfs/mount_smbfs.c
M       include/Makefile
A  +    include/mntopts.h
M       lib/libutil/Makefile
A  +    lib/libutil/getmntopts.3
A  +    lib/libutil/getmntopts.c
M       sbin/fsck_ffs/Makefile
M       sbin/growfs/Makefile
M       sbin/mksnap_ffs/Makefile
M       sbin/mount/Makefile
D       sbin/mount/getmntopts.3
D       sbin/mount/getmntopts.c
D       sbin/mount/mntopts.h
M       sbin/mount/mount.c
M       sbin/mount/mount_fs.c
M       sbin/mount_cd9660/Makefile
M       sbin/mount_cd9660/mount_cd9660.c
M       sbin/mount_ext2fs/Makefile
M       sbin/mount_ext2fs/mount_ext2fs.c
M       sbin/mount_fusefs/Makefile
M       sbin/mount_fusefs/mount_fusefs.c
M       sbin/mount_hpfs/Makefile
M       sbin/mount_hpfs/mount_hpfs.c
M       sbin/mount_msdosfs/Makefile
M       sbin/mount_msdosfs/mount_msdosfs.c
M       sbin/mount_nfs/Makefile
M       sbin/mount_nfs/mount_nfs.c
M       sbin/mount_ntfs/Makefile
M       sbin/mount_ntfs/mount_ntfs.c
M       sbin/mount_nullfs/Makefile
M       sbin/mount_nullfs/mount_nullfs.c
M       sbin/mount_reiserfs/Makefile
M       sbin/mount_reiserfs/mount_reiserfs.c
M       sbin/mount_std/Makefile
M       sbin/mount_std/mount_std.c
M       sbin/mount_udf/Makefile
M       sbin/mount_udf/mount_udf.c
M       sbin/mount_unionfs/Makefile
M       sbin/mount_unionfs/mount_unionfs.c
M       usr.sbin/mount_nwfs/Makefile
M       usr.sbin/mount_nwfs/mount_nwfs.c
M       usr.sbin/mount_portalfs/Makefile
M       usr.sbin/mount_portalfs/mount_portalfs.c
M       usr.sbin/mount_smbfs/Makefile
M       usr.sbin/mountd/Makefile
M       usr.sbin/mountd/mountd.c

-- 
wbr,
pluknet

--047d7b5d2e2022af2f04d69f1c80
Content-Type: application/octet-stream; name="getmntopts.patch"
Content-Disposition: attachment; filename="getmntopts.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hdmyh1c80

SW5kZXg6IGNvbnRyaWIvc21iZnMvbW91bnRfc21iZnMvbW91bnRfc21iZnMuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBjb250cmliL3NtYmZzL21vdW50X3NtYmZzL21vdW50X3NtYmZzLmMJKHJldmlzaW9uIDI0
NzE0OSkKKysrIGNvbnRyaWIvc21iZnMvbW91bnRfc21iZnMvbW91bnRfc21iZnMuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUg
PGVyci5oPgogI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogCiAj
aW5jbHVkZSA8Y2ZsaWIuaD4KIApAQCAtNTYsOCArNTcsNiBAQAogCiAjaW5jbHVkZSA8ZnMvc21i
ZnMvc21iZnMuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RhdGljIGNoYXIgbW91bnRf
cG9pbnRbTUFYUEFUSExFTiArIDFdOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7CiAKSW5kZXg6
IGluY2x1ZGUvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9NYWtlZmlsZQkocmV2aXNp
b24gMjQ3MTQ5KQorKysgaW5jbHVkZS9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMTMsOCAr
MTMsOCBAQAogCWZ0cy5oIGZ0dy5oIGdldG9wdC5oIGdsb2IuaCBncnAuaCBnc3NhcGkuaCBcCiAJ
aWVlZWZwLmggaWZhZGRycy5oIFwKIAlpbnR0eXBlcy5oIGlzbzY0Ni5oIGtlbnYuaCBsYW5naW5m
by5oIGxpYmdlbi5oIGxpbWl0cy5oIGxpbmsuaCBcCi0JbG9jYWxlLmggbWFsbG9jLmggbWFsbG9j
X25wLmggbWVtb3J5LmggbW9uZXRhcnkuaCBtcG9vbC5oIG1xdWV1ZS5oIFwKLQluZGJtLmggbmV0
Y29uZmlnLmggXAorCWxvY2FsZS5oIG1hbGxvYy5oIG1hbGxvY19ucC5oIG1lbW9yeS5oIG1udG9w
dHMuaCBcCisJbW9uZXRhcnkuaCBtcG9vbC5oIG1xdWV1ZS5oIG5kYm0uaCBuZXRjb25maWcuaCBc
CiAJbmV0ZGIuaCBubF90eXBlcy5oIG5saXN0LmggbnNzLmggbnNzd2l0Y2guaCBwYXRocy5oIFwK
IAlwcmludGYuaCBwcm9jX3NlcnZpY2UuaCBwdGhyZWFkLmggXAogCXB0aHJlYWRfbnAuaCBwd2Qu
aCByYW5saWIuaCByZWFkcGFzc3BocmFzZS5oIHJlZ2V4LmggXApJbmRleDogbGliL2xpYnV0aWwv
TWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gbGliL2xpYnV0aWwvTWFrZWZpbGUJKHJldmlzaW9uIDI0
NzE0OSkKKysrIGxpYi9saWJ1dGlsL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgs
OCBAQAogTElCPQl1dGlsCiBTSExJQl9NQUpPUj0gOQogCi1TUkNTPQlfc2VjdXJlX3BhdGguYyBh
dXRoLmMgZXhwYW5kX251bWJlci5jIGZsb3Blbi5jIGZwYXJzZWxuLmMgZ3JfdXRpbC5jIFwKK1NS
Q1M9CV9zZWN1cmVfcGF0aC5jIGF1dGguYyBleHBhbmRfbnVtYmVyLmMgZmxvcGVuLmMgZnBhcnNl
bG4uYyBcCisJZ2V0bW50b3B0cy5jIGdyX3V0aWwuYyBcCiAJaGV4ZHVtcC5jIGh1bWFuaXplX251
bWJlci5jIGtpbmZvX2dldGZpbGUuYyBraW5mb19nZXRmaWxlLmMgXAogCWtpbmZvX2dldGFsbHBy
b2MuYyBraW5mb19nZXRwcm9jLmMga2luZm9fZ2V0dm1tYXAuYyBrbGQuYyBcCiAJbG9naW5fYXV0
aC5jIGxvZ2luX2NhcC5jIFwKQEAgLTI1LDcgKzI2LDcgQEAKIAogQ0ZMQUdTKz0gLUkkey5DVVJE
SVJ9IC1JJHsuQ1VSRElSfS8uLi9saWJjL2dlbi8KIAotTUFOKz0JZXhwYW5kX251bWJlci4zIGZs
b3Blbi4zIGZwYXJzZWxuLjMgaGV4ZHVtcC4zIFwKK01BTis9CWV4cGFuZF9udW1iZXIuMyBmbG9w
ZW4uMyBmcGFyc2Vsbi4zIGdldG1udG9wdHMuMyBoZXhkdW1wLjMgXAogCWh1bWFuaXplX251bWJl
ci4zIGtpbmZvX2dldGFsbHByb2MuMyBraW5mb19nZXRmaWxlLjMgXAogCWtpbmZvX2dldHByb2Mu
MyBraW5mb19nZXR2bW1hcC4zIGtsZC4zIGxvZ2luX2F1dGguMyBsb2dpbl9jYXAuMyBcCiAJbG9n
aW5fY2xhc3MuMyBsb2dpbl9vay4zIGxvZ2luX3RpbWVzLjMgbG9naW5fdHR5LjMgcGlkZmlsZS4z
IFwKSW5kZXg6IHNiaW4vZnNja19mZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9mc2Nr
X2Zmcy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MjU2KQorKysgc2Jpbi9mc2NrX2Zmcy9NYWtlZmls
ZQkod29ya2luZyBjb3B5KQpAQCAtNywxMiArNywxMiBAQAogTUFOPQlmc2NrX2Zmcy44CiBNTElO
S1M9CWZzY2tfZmZzLjggZnNja191ZnMuOCBmc2NrX2Zmcy44IGZzY2tfNC4yYnNkLjgKIFNSQ1M9
CWRpci5jIGVhLmMgZnN1dGlsLmMgaW5vZGUuYyBtYWluLmMgcGFzczEuYyBwYXNzMWIuYyBwYXNz
Mi5jIHBhc3MzLmMgXAotCXBhc3M0LmMgcGFzczUuYyBzZXR1cC5jIHN1ai5jIHV0aWxpdGllcy5j
IGdqb3VybmFsLmMgZ2V0bW50b3B0cy5jCi1EUEFERD0JJHtMSUJVRlN9Ci1MREFERD0JLWx1ZnMK
KwlwYXNzNC5jIHBhc3M1LmMgc2V0dXAuYyBzdWouYyB1dGlsaXRpZXMuYyBnam91cm5hbC5jCitE
UEFERD0JJHtMSUJVRlN9ICR7TElCVVRJTH0KK0xEQUREPQktbHVmcyAtbHV0aWwKIFdBUk5TPz0J
MgotQ0ZMQUdTKz0gLUkkey5DVVJESVJ9IC1JJHsuQ1VSRElSfS8uLi9tb3VudAorQ0ZMQUdTKz0g
LUkkey5DVVJESVJ9CiAKLS5QQVRIOgkkey5DVVJESVJ9Ly4uLy4uL3N5cy91ZnMvZmZzICR7LkNV
UkRJUn0vLi4vbW91bnQKKy5QQVRIOgkkey5DVVJESVJ9Ly4uLy4uL3N5cy91ZnMvZmZzCiAKIC5p
bmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vZ3Jvd2ZzL01ha2VmaWxlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHNiaW4vZ3Jvd2ZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL2dy
b3dmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNiwxMiArNiw5IEBACiAKICNHRlNEQkc9
CiAKLS5QQVRIOgkkey5DVVJESVJ9Ly4uL21vdW50Ci0KIFBST0c9ICAgZ3Jvd2ZzCi1TUkNTPSAg
IGdyb3dmcy5jIGdldG1udG9wdHMuYworU1JDUz0gICBncm93ZnMuYwogTUFOPQlncm93ZnMuOAot
Q0ZMQUdTKz0tSSR7LkNVUkRJUn0vLi4vbW91bnQKIAogLmlmIGRlZmluZWQoR0ZTREJHKQogU1JD
Uys9ICBkZWJ1Zy5jCkluZGV4OiBzYmluL21rc25hcF9mZnMvTWFrZWZpbGUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc2Jpbi9ta3NuYXBfZmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21r
c25hcF9mZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTMsMTIgKzMsMTMgQEAKIC5QQVRI
Ogkkey5DVVJESVJ9Ly4uL21vdW50CiAKIFBST0c9CW1rc25hcF9mZnMKLVNSQ1M9CW1rc25hcF9m
ZnMuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbWtzbmFwX2Zmcy44CiAKIFdBUk5TPz0JMgotQ0ZMQUdT
Kz0tSSR7LkNVUkRJUn0vLi4vbW91bnQKIAorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0
aWwKKwogLmlmIGRlZmluZWQoTk9TVUlEKQogQklOTU9ERT01NTAKIC5lbHNlCkluZGV4OiBzYmlu
L21vdW50L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnQvTWFrZWZpbGUJKHJldmlz
aW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIs
OSArMiw4IEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudAotU1JDUz0JbW91bnQuYyBtb3Vu
dF9mcy5jIGdldG1udG9wdHMuYyB2ZnNsaXN0LmMKK1NSQ1M9CW1vdW50LmMgbW91bnRfZnMuYyB2
ZnNsaXN0LmMKIE1BTj0JbW91bnQuOAotIyBXZSBkbyBOT1QgaW5zdGFsbCB0aGUgZ2V0bW50b3B0
cy4zIG1hbiBwYWdlLgogCiBEUEFERD0JJHtMSUJVVElMfQogTERBREQ9CS1sdXRpbApJbmRleDog
c2Jpbi9tb3VudC9nZXRtbnRvcHRzLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudC9nZXRtbnRv
cHRzLjMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvZ2V0bW50b3B0cy4zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTk0Ci0uXCIJ
VGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0
OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMg
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0gg
REFNQUdFLgotLlwiCi0uXCIJQCgjKWdldG1udG9wdHMuMwk4LjMgKEJlcmtlbGV5KSAzLzMwLzk1
Ci0uXCIgJEZyZWVCU0QkCi0uXCIKLS5EZCBGZWJydWFyeSAxNywgMjAwOAotLkR0IEdFVE1OVE9Q
VFMgMwotLk9zCi0uU2ggTkFNRQotLk5tIGdldG1udG9wdHMKLS5OZCBzY2FuIG1vdW50IG9wdGlv
bnMKLS5TaCBTWU5PUFNJUwotLkZkICNpbmNsdWRlIFwmIm1udG9wdHMuaCIKLS5GdCB2b2lkCi0u
Rm8gZ2V0bW50b3B0cwotLkZhICJjb25zdCBjaGFyICpvcHRpb25zIiAiY29uc3Qgc3RydWN0IG1u
dG9wdCAqbW9wdHMiCi0uRmEgImludCAqZmxhZ3AiICJpbnQgKmFsdGZsYWdwIgotLkZjCi0uU2gg
REVTQ1JJUFRJT04KLVRoZQotLkZuIGdldG1udG9wdHMKLWZ1bmN0aW9uIHRha2VzIGEgY29tbWEg
c2VwYXJhdGVkIG9wdGlvbiBsaXN0IGFuZCBhIGxpc3QKLW9mIHZhbGlkIG9wdGlvbiBuYW1lcywg
YW5kIGNvbXB1dGVzIHRoZSBiaXRtYXNrCi1jb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQg
c2V0IG9mIG9wdGlvbnMuCi0uUHAKLVRoZSBzdHJpbmcKLS5GYSBvcHRpb25zCi1pcyBicm9rZW4g
ZG93biBpbnRvIGEgc2VxdWVuY2Ugb2YgY29tbWEgc2VwYXJhdGVkIHRva2Vucy4KLUVhY2ggdG9r
ZW4gaXMgbG9va2VkIHVwIGluIHRoZSB0YWJsZSBkZXNjcmliZWQgYnkKLS5GYSBtb3B0cwotYW5k
IHRoZSBiaXRzIGluCi10aGUgd29yZCByZWZlcmVuY2VkIGJ5IGVpdGhlcgotLkZhIGZsYWdwCi1v
cgotLkZhIGFsdGZsYWdwCi0oZGVwZW5kaW5nIG9uIHRoZQotLlZhIG1fYWx0bG9jCi1maWVsZCBv
ZiB0aGUgb3B0aW9uJ3MgdGFibGUgZW50cnkpCi1hcmUgdXBkYXRlZC4KLVRoZSBmbGFnIHdvcmRz
IGFyZSBub3QgaW5pdGlhbGl6ZWQgYnkKLS5GbiBnZXRtbnRvcHRzIC4KLVRoZSB0YWJsZSwKLS5G
YSBtb3B0cyAsCi1oYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0uQmQgLWxpdGVyYWwKLXN0cnVj
dCBtbnRvcHQgewotCWNoYXIgKm1fb3B0aW9uOwkJLyogb3B0aW9uIG5hbWUgKi8KLQlpbnQgbV9p
bnZlcnNlOwkJLyogaXMgdGhpcyBhIG5lZ2F0aXZlIG9wdGlvbiwgZS5nLiwgImRldiIgKi8KLQlp
bnQgbV9mbGFnOwkJLyogYml0IHRvIHNldCwgZS5nLiwgTU5UX1JET05MWSAqLwotCWludCBtX2Fs
dGxvYzsJCS8qIG5vbi16ZXJvIHRvIHVzZSBhbHRmbGFncCByYXRoZXIgdGhhbiBmbGFncCAqLwot
fTsKLS5FZAotLlBwCi1UaGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmU6Ci0uQmwgLXRh
ZyAtd2lkdGggbV9pbnZlcnNlCi0uSXQgVmEgbV9vcHRpb24KLXRoZSBvcHRpb24gbmFtZSwKLWZv
ciBleGFtcGxlCi0uRHEgTGkgc3VpZCAuCi0uSXQgVmEgbV9pbnZlcnNlCi10ZWxscwotLkZuIGdl
dG1udG9wdHMKLXRoYXQgdGhlIG5hbWUgaGFzIHRoZSBpbnZlcnNlIG1lYW5pbmcgb2YgdGhlCi1i
aXQuCi1Gb3IgZXhhbXBsZSwKLS5EcSBMaSBzdWlkCi1pcyB0aGUgc3RyaW5nLCB3aGVyZWFzIHRo
ZQotbW91bnQgZmxhZyBpcwotLkR2IE1OVF9OT1NVSUQgLgotSW4gdGhpcyBjYXNlLCB0aGUgc2Vu
c2Ugb2YgdGhlIHN0cmluZyBhbmQgdGhlIGZsYWcKLWFyZSBpbnZlcnRlZCwgc28gdGhlCi0uVmEg
bV9pbnZlcnNlCi1mbGFnIHNob3VsZCBiZSBzZXQuCi0uSXQgVmEgbV9mbGFnCi10aGUgdmFsdWUg
b2YgdGhlIGJpdCB0byBiZSBzZXQgb3IgY2xlYXJlZCBpbgotdGhlIGZsYWcgd29yZCB3aGVuIHRo
ZSBvcHRpb24gaXMgcmVjb2duaXplZC4KLVRoZSBiaXQgaXMgc2V0IHdoZW4gdGhlIG9wdGlvbiBp
cyBkaXNjb3ZlcmVkLAotYnV0IGNsZWFyZWQgaWYgdGhlIG9wdGlvbiBuYW1lIHdhcyBwcmVjZWRl
ZAotYnkgdGhlIGxldHRlcnMKLS5EcSBMaSBubyAuCi1UaGUKLS5WYSBtX2ludmVyc2UKLWZsYWcg
Y2F1c2VzIHRoZXNlIHR3byBvcGVyYXRpb25zIHRvIGJlIHJldmVyc2VkLgotLkl0IFZhIG1fYWx0
bG9jCi10aGUgYml0IHNob3VsZCBiZSBzZXQgb3IgY2xlYXJlZCBpbgotLkZhIGFsdGZsYWdwCi1y
YXRoZXIgdGhhbgotLkZhIGZsYWdwIC4KLS5FbAotLlBwCi1FYWNoIG9mIHRoZSB1c2VyIHZpc2li
bGUKLS5EdiBNTlRfCi1mbGFncyBoYXMgYSBjb3JyZXNwb25kaW5nCi0uRHYgTU9QVF8KLW1hY3Jv
IHdoaWNoIGRlZmluZXMgYW4gYXBwcm9wcmlhdGUKLS5WdCAic3RydWN0IG1udG9wdCIKLWVudHJ5
LgotVG8gc2ltcGxpZnkgdGhlIHByb2dyYW0gaW50ZXJmYWNlIGFuZCBlbnN1cmUgY29uc2lzdGVu
Y3kgYWNyb3NzIGFsbAotcHJvZ3JhbXMsIGEgZ2VuZXJhbCBwdXJwb3NlIG1hY3JvLAotLkR2IE1P
UFRfU1RET1BUUyAsCi1pcyBkZWZpbmVkIHdoaWNoCi1jb250YWlucyBhbiBlbnRyeSBmb3IgYWxs
IHRoZSBnZW5lcmljIFZGUyBvcHRpb25zLgotSW4gYWRkaXRpb24sIHRoZSBtYWNyb3MKLS5EdiBN
T1BUX0ZPUkNFCi1hbmQKLS5EdiBNT1BUX1VQREFURQotZXhpc3QgdG8gZW5hYmxlIHRoZQotLkR2
IE1OVF9GT1JDRQotYW5kCi0uRHYgTU5UX1VQREFURQotZmxhZ3MgdG8gYmUgc2V0LgotRmluYWxs
eSwgdGhlIHRhYmxlIG11c3QgYmUgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aXRoIGEKLS5EdiBO
VUxMCi1maXJzdCBlbGVtZW50LgotLlNoIEVYQU1QTEVTCi1Nb3N0IGNvbW1hbmRzIHdpbGwgdXNl
IHRoZSBzdGFuZGFyZCBvcHRpb24gc2V0LgotTG9jYWwgZmlsZSBzeXN0ZW1zIHdoaWNoIHN1cHBv
cnQgdGhlCi0uRHYgTU5UX1VQREFURQotZmxhZywgd291bGQgYWxzbyBoYXZlIGFuCi0uRHYgTU9Q
VF9VUERBVEUKLWVudHJ5LgotVGhpcyBjYW4gYmUgZGVjbGFyZWQgYW5kIHVzZWQgYXMgZm9sbG93
czoKLS5CZCAtbGl0ZXJhbAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQotc3RydWN0IG1udG9wdCBt
b3B0c1tdID0gewotCU1PUFRfU1RET1BUUywKLQlNT1BUX1VQREFURSwKLQl7IE5VTEwgfQotfTsK
LQotCS4uLgotCW1udGZsYWdzID0gbW50YWx0ZmxhZ3MgPSAwOwotCS4uLgotCWdldG1udG9wdHMo
b3B0aW9ucywgbW9wdHMsICZtbnRmbGFncywgJm1udGFsdGZsYWdzKTsKLQkuLi4KLS5FZAotLlNo
IERJQUdOT1NUSUNTCi1JZiB0aGUgZXh0ZXJuYWwgaW50ZWdlciB2YXJpYWJsZQotLlZhIGdldG1u
dF9zaWxlbnQKLWlzIHplcm8sIHRoZW4gdGhlCi0uRm4gZ2V0bW50b3B0cwotZnVuY3Rpb24gZGlz
cGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdHMgaWYgYW4KLXVucmVjb2duaXplZCBvcHRp
b24gaXMgZW5jb3VudGVyZWQuCi1PdGhlcndpc2UgdW5yZWNvZ25pemVkIG9wdGlvbnMgYXJlIHNp
bGVudGx5IGlnbm9yZWQuCi1CeSBkZWZhdWx0Ci0uVmEgZ2V0bW50X3NpbGVudAotaXMgemVyby4K
LS5TaCBTRUUgQUxTTwotLlhyIGVyciAzICwKLS5YciBtb3VudCA4Ci0uU2ggSElTVE9SWQotVGhl
Ci0uRm4gZ2V0bW50b3B0cwotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5CeCA0LjQgLgpJbmRleDog
c2Jpbi9tb3VudC9nZXRtbnRvcHRzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudC9nZXRtbnRv
cHRzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvZ2V0bW50b3B0cy5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE4MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NAot
ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2
ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiAw
Ci0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRtbnRvcHRzLmMJ
OC4zIChCZXJrZWxleSkgMy8yOS85NSI7Ci0jZW5kaWYgLyogbm90IGxpbnQgKi8KLSNlbmRpZgot
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0
YXQuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0KLSNpbmNsdWRlIDxlcnIuaD4KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJtbnRvcHRz
LmgiCi0KLWludCBnZXRtbnRfc2lsZW50ID0gMDsKLQotdm9pZAotZ2V0bW50b3B0cyhjb25zdCBj
aGFyICpvcHRpb25zLCBjb25zdCBzdHJ1Y3QgbW50b3B0ICptMCwgaW50ICpmbGFncCwKLQlpbnQg
KmFsdGZsYWdwKQotewotCWNvbnN0IHN0cnVjdCBtbnRvcHQgKm07Ci0JaW50IG5lZ2F0aXZlLCBs
ZW47Ci0JY2hhciAqb3B0LCAqb3B0YnVmLCAqcDsKLQlpbnQgKnRoaXNmbGFncDsKLQotCS8qIENv
cHkgb3B0aW9uIHN0cmluZywgc2luY2UgaXQgaXMgYWJvdXQgdG8gYmUgdG9ybiBhc3VuZGVyLi4u
ICovCi0JaWYgKChvcHRidWYgPSBzdHJkdXAob3B0aW9ucykpID09IE5VTEwpCi0JCWVycigxLCBO
VUxMKTsKLQotCWZvciAob3B0ID0gb3B0YnVmOyAob3B0ID0gc3RydG9rKG9wdCwgIiwiKSkgIT0g
TlVMTDsgb3B0ID0gTlVMTCkgewotCQkvKiBDaGVjayBmb3IgIm5vIiBwcmVmaXguICovCi0JCWlm
IChvcHRbMF0gPT0gJ24nICYmIG9wdFsxXSA9PSAnbycpIHsKLQkJCW5lZ2F0aXZlID0gMTsKLQkJ
CW9wdCArPSAyOwotCQl9IGVsc2UKLQkJCW5lZ2F0aXZlID0gMDsKLQotCQkvKgotCQkgKiBmb3Ig
b3B0aW9ucyB3aXRoIGFzc2lnbm1lbnRzIGluIHRoZW0gKGllLiBxdW90YXMpCi0JCSAqIGlnbm9y
ZSB0aGUgYXNzaWdubWVudCBhcyBpdCdzIGhhbmRsZWQgZWxzZXdoZXJlCi0JCSAqLwotCQlwID0g
c3RyY2hyKG9wdCwgJz0nKTsKLQkJaWYgKHAgIT0gTlVMTCkKLQkJCSAqKytwID0gJ1wwJzsKLQot
CQkvKiBTY2FuIG9wdGlvbiB0YWJsZS4gKi8KLQkJZm9yIChtID0gbTA7IG0tPm1fb3B0aW9uICE9
IE5VTEw7ICsrbSkgewotCQkJbGVuID0gc3RybGVuKG0tPm1fb3B0aW9uKTsKLQkJCWlmIChzdHJu
Y2FzZWNtcChvcHQsIG0tPm1fb3B0aW9uLCBsZW4pID09IDApCi0JCQkJaWYgKG9wdFtsZW5dID09
ICdcMCcgfHwgb3B0W2xlbl0gPT0gJz0nKQotCQkJCQlicmVhazsKLQkJfQotCi0JCS8qIFNhdmUg
ZmxhZywgb3IgZmFpbCBpZiBvcHRpb24gaXMgbm90IHJlY29nbml6ZWQuICovCi0JCWlmIChtLT5t
X29wdGlvbikgewotCQkJdGhpc2ZsYWdwID0gbS0+bV9hbHRsb2MgPyBhbHRmbGFncCA6IGZsYWdw
OwotCQkJaWYgKG5lZ2F0aXZlID09IG0tPm1faW52ZXJzZSkKLQkJCQkqdGhpc2ZsYWdwIHw9IG0t
Pm1fZmxhZzsKLQkJCWVsc2UKLQkJCQkqdGhpc2ZsYWdwICY9IH5tLT5tX2ZsYWc7Ci0JCX0gZWxz
ZSBpZiAoIWdldG1udF9zaWxlbnQpIHsKLQkJCWVycngoMSwgIi1vICVzOiBvcHRpb24gbm90IHN1
cHBvcnRlZCIsIG9wdCk7Ci0JCX0KLQl9Ci0KLQlmcmVlKG9wdGJ1Zik7Ci19Ci0KLXZvaWQKLXJt
c2xhc2hlcyhjaGFyICpycnBpbiwgY2hhciAqcnJwb3V0KQotewotCWNoYXIgKnJycG91dHN0YXJ0
OwotCi0JKnJycG91dCA9ICpycnBpbjsKLQlmb3IgKHJycG91dHN0YXJ0ID0gcnJwb3V0OyAqcnJw
aW4gIT0gJ1wwJzsgKnJycG91dCsrID0gKnJycGluKyspIHsKLQotCQkvKiBza2lwIGFsbCBkb3Vi
bGUgc2xhc2hlcyAqLwotCQl3aGlsZSAoKnJycGluID09ICcvJyAmJiAqKHJycGluICsgMSkgPT0g
Jy8nKQotCQkJIHJycGluKys7Ci0JfQotCi0JLyogcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIG5l
Y2Vzc2FyeSAqLwotCWlmIChycnBvdXQgLSBycnBvdXRzdGFydCA+IDEgJiYgKihycnBvdXQgLSAx
KSA9PSAnLycpCi0JCSoocnJwb3V0IC0gMSkgPSAnXDAnOwotCWVsc2UKLQkJKnJycG91dCA9ICdc
MCc7Ci19Ci0KLWludAotY2hlY2twYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKnJlc29sdmVk
KQotewotCXN0cnVjdCBzdGF0IHNiOwotCi0JaWYgKHJlYWxwYXRoKHBhdGgsIHJlc29sdmVkKSA9
PSBOVUxMIHx8IHN0YXQocmVzb2x2ZWQsICZzYikgIT0gMCkKLQkJcmV0dXJuICgxKTsKLQlpZiAo
IVNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKLQkJZXJybm8gPSBFTk9URElSOwotCQlyZXR1cm4gKDEp
OwotCX0KLQlyZXR1cm4gKDApOwotfQotCi12b2lkCi1idWlsZF9pb3ZlYyhzdHJ1Y3QgaW92ZWMg
Kippb3YsIGludCAqaW92bGVuLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWwsCi0JICAgIHNp
emVfdCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlpZiAoKmlvdmxlbiA8IDApCi0JCXJldHVybjsKLQlp
ID0gKmlvdmxlbjsKLQkqaW92ID0gcmVhbGxvYygqaW92LCBzaXplb2YgKippb3YgKiAoaSArIDIp
KTsKLQlpZiAoKmlvdiA9PSBOVUxMKSB7Ci0JCSppb3ZsZW4gPSAtMTsKLQkJcmV0dXJuOwotCX0K
LQkoKmlvdilbaV0uaW92X2Jhc2UgPSBzdHJkdXAobmFtZSk7Ci0JKCppb3YpW2ldLmlvdl9sZW4g
PSBzdHJsZW4obmFtZSkgKyAxOwotCWkrKzsKLQkoKmlvdilbaV0uaW92X2Jhc2UgPSB2YWw7Ci0J
aWYgKGxlbiA9PSAoc2l6ZV90KS0xKSB7Ci0JCWlmICh2YWwgIT0gTlVMTCkKLQkJCWxlbiA9IHN0
cmxlbih2YWwpICsgMTsKLQkJZWxzZQotCQkJbGVuID0gMDsKLQl9Ci0JKCppb3YpW2ldLmlvdl9s
ZW4gPSAoaW50KWxlbjsKLQkqaW92bGVuID0gKytpOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlv
biBpcyBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwYXJhbWV0ZXJzCi0gKiB3aGljaCB1
c2VkIHRvIHVzZSB0aGUgbW91bnRfYXJnZigpIGNvbW1hbmQgZm9yIHRoZSBvbGQgbW91bnQoKSBz
eXNjYWxsLgotICovCi12b2lkCi1idWlsZF9pb3ZlY19hcmdmKHN0cnVjdCBpb3ZlYyAqKmlvdiwg
aW50ICppb3ZsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgY29uc3QgY2hhciAqZm10LCAuLi4p
Ci17Ci0JdmFfbGlzdCBhcDsKLQljaGFyIHZhbFsyNTVdID0geyAwIH07Ci0KLQl2YV9zdGFydChh
cCwgZm10KTsKLQl2c25wcmludGYodmFsLCBzaXplb2YodmFsKSwgZm10LCBhcCk7Ci0JdmFfZW5k
KGFwKTsKLQlidWlsZF9pb3ZlYyhpb3YsIGlvdmxlbiwgbmFtZSwgc3RyZHVwKHZhbCksIChzaXpl
X3QpLTEpOwotfQpJbmRleDogc2Jpbi9tb3VudC9tbnRvcHRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jp
bi9tb3VudC9tbnRvcHRzLmgJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvbW50b3B0
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChj
KSAxOTk0Ci0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju
aWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U
UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqCi0gKglAKCMpbW50b3B0cy5oCTguNyAoQmVya2VsZXkpIDMvMjkvOTUKLSAqICRGcmVlQlNE
JAotICovCi0KLXN0cnVjdCBtbnRvcHQgewotCWNvbnN0IGNoYXIgKm1fb3B0aW9uOwkvKiBvcHRp
b24gbmFtZSAqLwotCWludCBtX2ludmVyc2U7CQkvKiBpZiBhIG5lZ2F0aXZlIG9wdGlvbiwgZS5n
LiAiYXRpbWUiICovCi0JaW50IG1fZmxhZzsJCS8qIGJpdCB0byBzZXQsIGUuZy4gTU5UX1JET05M
WSAqLwotCWludCBtX2FsdGxvYzsJCS8qIDEgPT4gc2V0IGJpdCBpbiBhbHRmbGFncyAqLwotfTsK
LQotLyogVXNlci12aXNpYmxlIE1OVF8gZmxhZ3MuICovCi0jZGVmaW5lIE1PUFRfQVNZTkMJCXsg
ImFzeW5jIiwJMCwgTU5UX0FTWU5DLCAwIH0KLSNkZWZpbmUgTU9QVF9OT0FUSU1FCQl7ICJhdGlt
ZSIsCTEsIE1OVF9OT0FUSU1FLCAwIH0KLSNkZWZpbmUgTU9QVF9OT0VYRUMJCXsgImV4ZWMiLAkx
LCBNTlRfTk9FWEVDLCAwIH0KLSNkZWZpbmUgTU9QVF9OT1NVSUQJCXsgInN1aWQiLAkxLCBNTlRf
Tk9TVUlELCAwIH0KLSNkZWZpbmUgTU9QVF9OT1NZTUZPTExPVwl7ICJzeW1mb2xsb3ciLCAgMSwg
TU5UX05PU1lNRk9MTE9XLCAwIH0KLSNkZWZpbmUgTU9QVF9SRE9OTFkJCXsgInJkb25seSIsCTAs
IE1OVF9SRE9OTFksIDAgfQotI2RlZmluZSBNT1BUX1NZTkMJCXsgInN5bmMiLAkwLCBNTlRfU1lO
Q0hST05PVVMsIDAgfQotI2RlZmluZSBNT1BUX1VOSU9OCQl7ICJ1bmlvbiIsCTAsIE1OVF9VTklP
TiwgMCB9Ci0jZGVmaW5lIE1PUFRfVVNFUlFVT1RBCQl7ICJ1c2VycXVvdGEiLAkwLCAwLCAwIH0K
LSNkZWZpbmUgTU9QVF9HUk9VUFFVT1RBCQl7ICJncm91cHF1b3RhIiwJMCwgMCwgMCB9Ci0jZGVm
aW5lIE1PUFRfTk9DTFVTVEVSUgkJeyAiY2x1c3RlcnIiLAkxLCBNTlRfTk9DTFVTVEVSUiwgMCB9
Ci0jZGVmaW5lIE1PUFRfTk9DTFVTVEVSVwkJeyAiY2x1c3RlcnciLAkxLCBNTlRfTk9DTFVTVEVS
VywgMCB9Ci0jZGVmaW5lIE1PUFRfU1VJRERJUgkJeyAic3VpZGRpciIsCTAsIE1OVF9TVUlERElS
LCAwIH0KLSNkZWZpbmUgTU9QVF9TTkFQU0hPVAkJeyAic25hcHNob3QiLAkwLCBNTlRfU05BUFNI
T1QsIDAgfQotI2RlZmluZSBNT1BUX01VTFRJTEFCRUwJCXsgIm11bHRpbGFiZWwiLAkwLCBNTlRf
TVVMVElMQUJFTCwgMCB9Ci0jZGVmaW5lIE1PUFRfQUNMUwkJeyAiYWNscyIsCTAsIE1OVF9BQ0xT
LCAwIH0KLSNkZWZpbmUgTU9QVF9ORlM0QUNMUwkJeyAibmZzdjRhY2xzIiwJMCwgTU5UX05GUzRB
Q0xTLCAwIH0KLQotLyogQ29udHJvbCBmbGFncy4gKi8KLSNkZWZpbmUgTU9QVF9GT1JDRQkJeyAi
Zm9yY2UiLAkwLCBNTlRfRk9SQ0UsIDAgfQotI2RlZmluZSBNT1BUX1VQREFURQkJeyAidXBkYXRl
IiwJMCwgTU5UX1VQREFURSwgMCB9Ci0jZGVmaW5lIE1PUFRfUk8JCQl7ICJybyIsCQkwLCBNTlRf
UkRPTkxZLCAwIH0KLSNkZWZpbmUgTU9QVF9SVwkJCXsgInJ3IiwJCTEsIE1OVF9SRE9OTFksIDAg
fQotCi0vKiBUaGlzIGlzIHBhcnNlZCBieSBtb3VudCg4KSwgYnV0IGlzIGlnbm9yZWQgYnkgc3Bl
Y2lmaWMgbW91bnRfKig4KXMuICovCi0jZGVmaW5lIE1PUFRfQVVUTwkJeyAiYXV0byIsCTAsIDAs
IDAgfQotCi0vKiBBIGhhbmR5IG1hY3JvIGFzIHRlcm1pbmF0b3Igb2YgTU5UXyBhcnJheS4gKi8K
LSNkZWZpbmUgTU9QVF9FTkQJCXsgTlVMTCwJCTAsIDAsIDAgfQotCi0jZGVmaW5lIE1PUFRfRlNU
QUJfQ09NUEFUCQkJCQkJXAotCU1PUFRfUk8sCQkJCQkJCVwKLQlNT1BUX1JXLAkJCQkJCQlcCi0J
TU9QVF9BVVRPCi0KLS8qIFN0YW5kYXJkIG9wdGlvbnMgd2hpY2ggYWxsIG1vdW50cyBjYW4gdW5k
ZXJzdGFuZC4gKi8KLSNkZWZpbmUgTU9QVF9TVERPUFRTCQkJCQkJCVwKLQlNT1BUX1VTRVJRVU9U
QSwJCQkJCQkJXAotCU1PUFRfR1JPVVBRVU9UQSwJCQkJCQlcCi0JTU9QVF9GU1RBQl9DT01QQVQs
CQkJCQkJXAotCU1PUFRfTk9BVElNRSwJCQkJCQkJXAotCU1PUFRfTk9FWEVDLAkJCQkJCQlcCi0J
TU9QVF9TVUlERElSLAkJLyogbXVzdCBiZSBiZWZvcmUgTU9QVF9OT1NVSUQgKi8JXAotCU1PUFRf
Tk9TVUlELAkJCQkJCQlcCi0JTU9QVF9OT1NZTUZPTExPVywJCQkJCQlcCi0JTU9QVF9SRE9OTFks
CQkJCQkJCVwKLQlNT1BUX1VOSU9OLAkJCQkJCQlcCi0JTU9QVF9OT0NMVVNURVJSLAkJCQkJCVwK
LQlNT1BUX05PQ0xVU1RFUlcsCQkJCQkJXAotCU1PUFRfTVVMVElMQUJFTCwJCQkJCQlcCi0JTU9Q
VF9BQ0xTLAkJCQkJCQlcCi0JTU9QVF9ORlM0QUNMUwotCi12b2lkIGdldG1udG9wdHMoY29uc3Qg
Y2hhciAqLCBjb25zdCBzdHJ1Y3QgbW50b3B0ICosIGludCAqLCBpbnQgKik7Ci12b2lkIHJtc2xh
c2hlcyhjaGFyICosIGNoYXIgKik7Ci1pbnQgY2hlY2twYXRoKGNvbnN0IGNoYXIgKiwgY2hhciBy
ZXNvbHZlZF9wYXRoW10pOwotZXh0ZXJuIGludCBnZXRtbnRfc2lsZW50Owotdm9pZCBidWlsZF9p
b3ZlYyhzdHJ1Y3QgaW92ZWMgKippb3YsIGludCAqaW92bGVuLCBjb25zdCBjaGFyICpuYW1lLCB2
b2lkICp2YWwsIHNpemVfdCBsZW4pOwotdm9pZCBidWlsZF9pb3ZlY19hcmdmKHN0cnVjdCBpb3Zl
YyAqKmlvdiwgaW50ICppb3ZsZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZtdCwg
Li4uKTsKSW5kZXg6IHNiaW4vbW91bnQvbW91bnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50
L21vdW50LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvbW91bnQuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGVy
cm5vLmg+CiAjaW5jbHVkZSA8ZnN0YWIuaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5jbHVk
ZSA8cGF0aHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTU5
LDcgKzYwLDYgQEAKICNpbmNsdWRlIDxsaWJ1dGlsLmg+CiAKICNpbmNsdWRlICJleHRlcm4uaCIK
LSNpbmNsdWRlICJtbnRvcHRzLmgiCiAjaW5jbHVkZSAicGF0aG5hbWVzLmgiCiAKIC8qIGBtZXRh
JyBvcHRpb25zICovCkluZGV4OiBzYmluL21vdW50L21vdW50X2ZzLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c2Jpbi9tb3VudC9tb3VudF9mcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50L21v
dW50X2ZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQAogI2luY2x1ZGUgPGVy
ci5oPgogI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUg
PG1udG9wdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZXh0ZXJu
LmgiCi0jaW5jbHVkZSAibW50b3B0cy5oIgogCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1td
ID0gewogCU1PUFRfU1RET1BUUywKSW5kZXg6IHNiaW4vbW91bnRfY2Q5NjYwL01ha2VmaWxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHNiaW4vbW91bnRfY2Q5NjYwL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkp
CisrKyBzYmluL21vdW50X2NkOTY2MC9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMiwxOCAr
MiwxMiBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfY2Q5NjYwCi1TUkNTPQltb3VudF9j
ZDk2NjAuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfY2Q5NjYwLjgKLURQQUREPQkke0xJQktJ
Q09OVn0KLUxEQUREPQktbGtpY29udgorRFBBREQ9CSR7TElCS0lDT05WfSAke0xJQlVUSUx9CitM
REFERD0JLWxraWNvbnYgLWx1dGlsCiAKLU1PVU5UPQkkey5DVVJESVJ9Ly4uL21vdW50Ci1DRkxB
R1MrPSAtSSR7TU9VTlR9Ci0KICMgTmVlZHMgdG8gYmUgZHluYW1pY2FsbHkgbGlua2VkIGZvciBv
cHRpb25hbCBkbG9wZW4oKSBhY2Nlc3MgdG8KICMgdXNlcmxhbmQgbGliaWNvbnYKIE5PX1NIQVJF
RD89CU5PCiAKLS5QQVRIOgkke01PVU5UfQotCiAuaW5jbHVkZSA8YnNkLnByb2cubWs+CkluZGV4
OiBzYmluL21vdW50X2NkOTY2MC9tb3VudF9jZDk2NjAuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21v
dW50X2NkOTY2MC9tb3VudF9jZDk2NjAuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3Vu
dF9jZDk2NjAvbW91bnRfY2Q5NjYwLmMJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwxMyBA
QAogCiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtbnRv
cHRzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXNleGl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgog
Ci0jaW5jbHVkZSAibW50b3B0cy5oIgotCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1tdID0g
ewogCU1PUFRfU1RET1BUUywKIAlNT1BUX1VQREFURSwKSW5kZXg6IHNiaW4vbW91bnRfZXh0MmZz
L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfZXh0MmZzL01ha2VmaWxlCShyZXZp
c2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X2V4dDJmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5
KQpAQCAtMiwxMyArMiwxMSBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfZXh0MmZzCi1T
UkNTPQltb3VudF9leHQyZnMuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfZXh0MmZzLjgKIAog
V0FSTlM/PQkyCi1NT1VOVD0JJHsuQ1VSRElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5U
fQogCi0uUEFUSDoJJHtNT1VOVH0KK0RQQUREPQkke0xJQlVUSUx9CitMREFERD0JLWx1dGlsCiAK
IC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vbW91bnRfZXh0MmZzL21vdW50X2V4
dDJmcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfZXh0MmZzL21vdW50X2V4dDJmcy5jCShy
ZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X2V4dDJmcy9tb3VudF9leHQyZnMuYwkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDEzIEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogCiAj
aW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lz
ZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQog
c3RhdGljIHZvaWQJdXNhZ2Uodm9pZCk7CiAKIGludApJbmRleDogc2Jpbi9tb3VudF9mdXNlZnMv
TWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9mdXNlZnMvTWFrZWZpbGUJKHJldmlz
aW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfZnVzZWZzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMyArMjEsMTAgQEAKIC5lbmRpZgogCiBQUk9HPQltb3VudF9mdXNlZnMKLVNSQ1M9
CW1vdW50X2Z1c2Vmcy5jIGdldG1udG9wdHMuYwogTUFOOD0JbW91bnRfZnVzZWZzLjgKIE5PX01B
TkNPTVBSRVNTPz0JeWVzCiAKLU1PVU5UPQkkey5DVVJESVJ9Ly4uL21vdW50Ci1DRkxBR1MrPQkt
SSR7TU9VTlR9CitEUEFERD0JJHtMSUJVVElMfQorTERBREQ9CS1sdXRpbAogCi0uUEFUSDogJHtN
T1VOVH0KLQogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc2Jpbi9tb3VudF9mdXNlZnMv
bW91bnRfZnVzZWZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9mdXNlZnMvbW91bnRfZnVz
ZWZzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfZnVzZWZzL21vdW50X2Z1c2Vm
cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8c3lzL3N5c2N0
bC5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC00
OCw4ICs0OSw2IEBACiAjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CiAjaW5jbHVkZSA8cGF0aHMuaD4K
IAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogI2lmbmRlZiBGVVNFNEJTRF9WRVJTSU9OCiAjZGVm
aW5lCUZVU0U0QlNEX1ZFUlNJT04JIjAuMy45LXByZTEiCiAjZW5kaWYKSW5kZXg6IHNiaW4vbW91
bnRfaHBmcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50X2hwZnMvTWFrZWZpbGUJ
KHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfaHBmcy9NYWtlZmlsZQkod29ya2luZyBj
b3B5KQpAQCAtMywxMiArMywxMSBAQAogIwogCiBQUk9HPQltb3VudF9ocGZzCi1TUkNTPQltb3Vu
dF9ocGZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X2hwZnMuOAogCi1NT1VOVD0JJHsuQ1VS
RElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5UfSAtREhQRlMKK0NGTEFHUys9IC1ESFBG
UwogCi0uUEFUSDoJJHtNT1VOVH0KK0RQQUREPQkke0xJQlVUSUx9CitMREFERD0JLWx1dGlsCiAK
IC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vbW91bnRfaHBmcy9tb3VudF9ocGZz
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9ocGZzL21vdW50X2hwZnMuYwkocmV2aXNpb24g
MjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9ocGZzL21vdW50X2hwZnMuYwkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJyLmg+CiAj
aW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHB3ZC5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00Niw4ICs0Nyw2IEBA
CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUg
Im1udG9wdHMuaCIKLQogc3RhdGljIHN0cnVjdCBtbnRvcHQgbW9wdHNbXSA9IHsKIAlNT1BUX1NU
RE9QVFMsCiAJTU9QVF9FTkQKSW5kZXg6IHNiaW4vbW91bnRfbXNkb3Nmcy9NYWtlZmlsZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzYmluL21vdW50X21zZG9zZnMvTWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkK
KysrIHNiaW4vbW91bnRfbXNkb3Nmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMywxOCAr
MywxMiBAQAogIwogCiBQUk9HPQltb3VudF9tc2Rvc2ZzCi1TUkNTPQltb3VudF9tc2Rvc2ZzLmMg
Z2V0bW50b3B0cy5jCiBNQU49CW1vdW50X21zZG9zZnMuOAotRFBBREQ9CSR7TElCS0lDT05WfQot
TERBREQ9CS1sa2ljb252CitEUEFERD0JJHtMSUJLSUNPTlZ9ICR7TElCVVRJTH0KK0xEQUREPQkt
bGtpY29udiAtbHV0aWwKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKLUNGTEFHUys9IC1J
JHtNT1VOVH0KLQogIyBOZWVkcyB0byBiZSBkeW5hbWljYWxseSBsaW5rZWQgZm9yIG9wdGlvbmFs
IGRsb3BlbigpIGFjY2VzcyB0bwogIyB1c2VybGFuZCBsaWJpY29udgogTk9fU0hBUkVEPz0JTk8K
IAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4v
bW91bnRfbXNkb3Nmcy9tb3VudF9tc2Rvc2ZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9t
c2Rvc2ZzL21vdW50X21zZG9zZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9t
c2Rvc2ZzL21vdW50X21zZG9zZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAog
I2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGdycC5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgor
I2luY2x1ZGUgPG1udG9wdHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzdGRpby5o
PgogLyogbXVzdCBiZSBhZnRlciBzdGRpbyB0byBkZWNsYXJlIGZwYXJzZWxuICovCkBAIC01NSw4
ICs1Niw2IEBACiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAot
I2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RhdGljIGdpZF90CWFfZ2lkKGNoYXIgKik7CiBzdGF0
aWMgdWlkX3QJYV91aWQoY2hhciAqKTsKIHN0YXRpYyBtb2RlX3QJYV9tYXNrKGNoYXIgKik7Cklu
ZGV4OiBzYmluL21vdW50X25mcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50X25m
cy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9uZnMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTMsMTcgKzMsMTkgQEAKICMgJEZyZWVCU0QkCiAKIFBST0c9CW1v
dW50X25mcwotU1JDUz0JbW91bnRfbmZzLmMgZ2V0bW50b3B0cy5jIG1vdW50dGFiLmMKK1NSQ1M9
CW1vdW50X25mcy5jIG1vdW50dGFiLmMKIE1BTj0JbW91bnRfbmZzLjgKIE1MSU5LUz0JbW91bnRf
bmZzLjggbW91bnRfb2xkbmZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKIFVNTlRB
TEw9ICR7LkNVUkRJUn0vLi4vLi4vdXNyLnNiaW4vcnBjLnVtbnRhbGwKLUNGTEFHUys9IC1ETkZT
IC1JJHtNT1VOVH0gLUkke1VNTlRBTEx9CitDRkxBR1MrPSAtRE5GUyAtSSR7VU1OVEFMTH0KIFdB
Uk5TPz0JMwogCitEUEFERD0JJHtMSUJVVElMfQorTERBREQ9CS1sdXRpbAorCiBMSU5LUz0JJHtC
SU5ESVJ9L21vdW50X25mcyAke0JJTkRJUn0vbW91bnRfb2xkbmZzCiAKLS5QQVRIOiAke01PVU5U
fSAke1VNTlRBTEx9CisuUEFUSDogJHtVTU5UQUxMfQogCiAuaW5jbHVkZSA8YnNkLnByb2cubWs+
CkluZGV4OiBzYmluL21vdW50X25mcy9tb3VudF9uZnMuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21v
dW50X25mcy9tb3VudF9uZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9uZnMv
bW91bnRfbmZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlIDxl
cnIuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8
bW50b3B0cy5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KQEAgLTc1LDcgKzc2LDYgQEAKICNpbmNsdWRlIDxzeXNleGl0cy5oPgog
I2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0jaW5jbHVkZSAibW50b3B0cy5oIgogI2luY2x1ZGUgIm1v
dW50dGFiLmgiCiAKIC8qIFRhYmxlIGZvciBhZixzb3R5cGUgLT4gbmV0aWQgY29udmVyc2lvbnMu
ICovCkluZGV4OiBzYmluL21vdW50X250ZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9t
b3VudF9udGZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X250ZnMv
TWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTMsMTggKzMsMTIgQEAKICMKIAogUFJPRz0JbW91
bnRfbnRmcwotU1JDUz0JbW91bnRfbnRmcy5jIGdldG1udG9wdHMuYwogTUFOPQltb3VudF9udGZz
LjgKLURQQUREPQkke0xJQktJQ09OVn0KLUxEQUREPQktbGtpY29udgorRFBBREQ9CSR7TElCS0lD
T05WfSAke0xJQlVUSUx9CitMREFERD0JLWxraWNvbnYgLWx1dGlsCiAKLU1PVU5UPQkkey5DVVJE
SVJ9Ly4uL21vdW50Ci1DRkxBR1MrPSAtSSR7TU9VTlR9Ci0KICMgTmVlZHMgdG8gYmUgZHluYW1p
Y2FsbHkgbGlua2VkIGZvciBvcHRpb25hbCBkbG9wZW4oKSBhY2Nlc3MgdG8KICMgdXNlcmxhbmQg
bGliaWNvbnYKIE5PX1NIQVJFRD89CU5PCiAKLS5QQVRIOgkke01PVU5UfQotCiAuaW5jbHVkZSA8
YnNkLnByb2cubWs+CkluZGV4OiBzYmluL21vdW50X250ZnMvbW91bnRfbnRmcy5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHNiaW4vbW91bnRfbnRmcy9tb3VudF9udGZzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysr
IHNiaW4vbW91bnRfbnRmcy9tb3VudF9udGZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGdy
cC5oPgorI2luY2x1ZGUgPG1udG9wdHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTIsOCArNTMsNiBAQAogI2luY2x1ZGUg
PHVuaXN0ZC5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIK
LQogI2RlZmluZSBUUkFOU0lUSU9OX1BFUklPRF9IQUNLCiAKIHN0YXRpYyBzdHJ1Y3QgbW50b3B0
IG1vcHRzW10gPSB7CkluZGV4OiBzYmluL21vdW50X251bGxmcy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzYmluL21vdW50X251bGxmcy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jp
bi9tb3VudF9udWxsZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTIgKzIsOSBAQAog
IyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfbnVsbGZzCi1TUkNTPQltb3VudF9udWxsZnMuYyBn
ZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfbnVsbGZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4v
bW91bnQKLUNGTEFHUys9LUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0
aWwKIAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNi
aW4vbW91bnRfbnVsbGZzL21vdW50X251bGxmcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRf
bnVsbGZzL21vdW50X251bGxmcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X251
bGxmcy9tb3VudF9udWxsZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5LDEzIEBACiAj
aW5jbHVkZSA8c3lzL3Vpby5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0
cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAot
I2luY2x1ZGUgIm1udG9wdHMuaCIKLQogaW50CXN1YmRpcihjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiBzdGF0aWMgdm9pZAl1c2FnZSh2b2lkKSBfX2RlYWQyOwogCkluZGV4OiBzYmluL21v
dW50X3JlaXNlcmZzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfcmVpc2VyZnMv
TWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfcmVpc2VyZnMvTWFrZWZp
bGUJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzEsOSBAQAogIyAkRnJlZUJTRCQKIAogUFJPRyA9
IG1vdW50X3JlaXNlcmZzCi1TUkNTID0gbW91bnRfcmVpc2VyZnMuYyBnZXRtbnRvcHRzLmMKIE1B
TiAgPSBtb3VudF9yZWlzZXJmcy44CiAKLSMgbW91bnRfcmVpc2VyZnMgbmVlZHMgbW50b3B0cy5o
IGFuZCBnZXRtbnRvcHRzLmMgZnJvbSBzcmMvc2Jpbi9tb3VudC8KLU1PVU5UICA/PSAkey5DVVJE
SVJ9Ly4uL21vdW50Ci1DRkxBR1MgKz0gLUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xE
QUREPQktbHV0aWwKIAotLlBBVEg6ICR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4K
SW5kZXg6IHNiaW4vbW91bnRfcmVpc2VyZnMvbW91bnRfcmVpc2VyZnMuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBzYmluL21vdW50X3JlaXNlcmZzL21vdW50X3JlaXNlcmZzLmMJKHJldmlzaW9uIDI0NzE0OSkK
KysrIHNiaW4vbW91bnRfcmVpc2VyZnMvbW91bnRfcmVpc2VyZnMuYwkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTQgKzMxLDEzIEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogCiAjaW5jbHVkZSA8ZXJy
Lmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNp
bmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RydWN0IG1udG9w
dCBtb3B0c1tdID0gewogCU1PUFRfU1RET1BUUywKIAlNT1BUX0VORApJbmRleDogc2Jpbi9tb3Vu
dF9zdGQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9zdGQvTWFrZWZpbGUJKHJl
dmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfc3RkL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDE4ICsyLDE2IEBACiAjCSRGcmVlQlNEJAogCiBQUk9HPQltb3VudF9zdGQKLVNSQ1M9
CW1vdW50X3N0ZC5jIGdldG1udG9wdHMuYwogTUFOPQltb3VudF9zdGQuOAogTUxJTktTPQltb3Vu
dF9zdGQuOCBtb3VudF9kZXZmcy44IFwKIAltb3VudF9zdGQuOCBtb3VudF9mZGVzY2ZzLjggXAog
CW1vdW50X3N0ZC44IG1vdW50X2xpbnByb2Nmcy44IFwKIAltb3VudF9zdGQuOCBtb3VudF9wcm9j
ZnMuOAogCi1NT1VOVD0JJHsuQ1VSRElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5UfQog
V0FSTlM/PQkzCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQkt
bHV0aWwKIAogTElOS1M9CSR7QklORElSfS9tb3VudF9zdGQgJHtCSU5ESVJ9L21vdW50X2RldmZz
IFwKIAkke0JJTkRJUn0vbW91bnRfc3RkICR7QklORElSfS9tb3VudF9mZGVzY2ZzIFwKSW5kZXg6
IHNiaW4vbW91bnRfc3RkL21vdW50X3N0ZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfc3Rk
L21vdW50X3N0ZC5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X3N0ZC9tb3VudF9z
dGQuYwkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogCiAjaW5jbHVkZSA8ZXJyLmg+
CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTUzLDgg
KzU0LDYgQEAKICNpbmNsdWRlIDxzeXNleGl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0j
aW5jbHVkZSAibW50b3B0cy5oIgotCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1tdID0gewog
CU1PUFRfU1RET1BUUywKIAlNT1BUX0VORApJbmRleDogc2Jpbi9tb3VudF91ZGYvTWFrZWZpbGUK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91ZGYvTWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkK
KysrIHNiaW4vbW91bnRfdWRmL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDEx
IEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudF91ZGYKLVNSQ1M9CW1vdW50X3VkZi5jIGdl
dG1udG9wdHMuYwogTUFOPQltb3VudF91ZGYuOAotRFBBREQ9CSR7TElCS0lDT05WfQotTERBREQ9
CS1sa2ljb252CitEUEFERD0JJHtMSUJLSUNPTlZ9ICR7TElCVVRJTH0KK0xEQUREPQktbGtpY29u
diAtbHV0aWwKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKLUNGTEFHUys9IC1JJHtNT1VO
VH0gLUkkey5DVVJESVJ9Ly4uLy4uL3N5cwotLlBBVEg6CSR7TU9VTlR9CitDRkxBR1MrPSAtSSR7
LkNVUkRJUn0vLi4vLi4vc3lzCiBXQVJOUz89IDEKIAogIyBOZWVkcyB0byBiZSBkeW5hbWljYWxs
eSBsaW5rZWQgZm9yIG9wdGlvbmFsIGRsb3BlbigpIGFjY2VzcyB0bwpJbmRleDogc2Jpbi9tb3Vu
dF91ZGYvbW91bnRfdWRmLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91ZGYvbW91bnRfdWRm
LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfdWRmL21vdW50X3VkZi5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywxNCArNTMsMTMgQEAKIAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1
ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhp
dHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3Rh
dGljIHN0cnVjdCBtbnRvcHQgbW9wdHNbXSA9IHsKIAlNT1BUX1NURE9QVFMsCiAJTU9QVF9VUERB
VEUsCkluZGV4OiBzYmluL21vdW50X3VuaW9uZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jp
bi9tb3VudF91bmlvbmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50
X3VuaW9uZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTIgKzIsOSBAQAogIyAkRnJl
ZUJTRCQKIAogUFJPRz0JbW91bnRfdW5pb25mcwotU1JDUz0JbW91bnRfdW5pb25mcy5jIGdldG1u
dG9wdHMuYwogTUFOPQltb3VudF91bmlvbmZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91
bnQKLUNGTEFHUys9LUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0aWwK
IAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4v
bW91bnRfdW5pb25mcy9tb3VudF91bmlvbmZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91
bmlvbmZzL21vdW50X3VuaW9uZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF91
bmlvbmZzL21vdW50X3VuaW9uZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAog
I2luY2x1ZGUgPHN5cy9lcnJuby5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50
b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVk
ZSA8c3RyaW5nLmg+CkBAIC02Miw4ICs2Myw2IEBACiAjaW5jbHVkZSA8Z3JwLmg+CiAjaW5jbHVk
ZSA8cHdkLmg+CiAKLSNpbmNsdWRlICJtbnRvcHRzLmgiCi0KIHN0YXRpYyBpbnQgCiBzdWJkaXIo
Y29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqZGlyKQogewpJbmRleDogdXNyLnNiaW4vbW91bnRf
bndmcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudF9ud2ZzL01ha2VmaWxl
CShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9ud2ZzL01ha2VmaWxlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE1ICsxLDExIEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudF9u
d2ZzCi1TUkNTPQltb3VudF9ud2ZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X253ZnMuOAog
Ci1NT1VOVD0JJHsuQ1VSRElSfS8uLi8uLi9zYmluL21vdW50Ci1DRkxBR1MrPSAtRE5XRlMgLUkk
e01PVU5UfQorQ0ZMQUdTKz0gLUROV0ZTCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElC
TkNQfSAke0xJQklQWH0gJHtMSUJVVElMfQorTERBREQ9CS1sbmNwIC1saXB4IC1sdXRpbAogCi1E
UEFERD0JJHtMSUJOQ1B9ICR7TElCSVBYfQotTERBREQ9CS1sbmNwIC1saXB4Ci0KIC5pbmNsdWRl
IDxic2QucHJvZy5taz4KSW5kZXg6IHVzci5zYmluL21vdW50X253ZnMvbW91bnRfbndmcy5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X253ZnMvbW91bnRfbndmcy5jCShyZXZpc2lvbiAy
NDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9ud2ZzL21vdW50X253ZnMuYwkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTEgKzQ4LDExIEBACiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8c3lzZXhp
dHMuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogCiAjaW5jbHVk
ZSA8bmV0bmNwL25jcF9saWIuaD4KICNpbmNsdWRlIDxuZXRuY3AvbmNwX3JjZmlsZS5oPgogI2lu
Y2x1ZGUgPGZzL253ZnMvbndmc19tb3VudC5oPgotI2luY2x1ZGUgIm1udG9wdHMuaCIKIAogI2Rl
ZmluZQlOV0ZTX1ZGU05BTUUJIm53ZnMiCiAKSW5kZXg6IHVzci5zYmluL21vdW50X3BvcnRhbGZz
L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X3BvcnRhbGZzL01ha2VmaWxl
CShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9wb3J0YWxmcy9NYWtlZmlsZQko
d29ya2luZyBjb3B5KQpAQCAtMiwxNCArMiwxMyBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91
bnRfcG9ydGFsZnMKLVNSQ1M9CW1vdW50X3BvcnRhbGZzLmMgYWN0aXZhdGUuYyBjb25mLmMgY3Jl
ZC5jIGdldG1udG9wdHMuYyBwdF9jb25mLmMgXAorU1JDUz0JbW91bnRfcG9ydGFsZnMuYyBhY3Rp
dmF0ZS5jIGNvbmYuYyBjcmVkLmMgcHRfY29uZi5jIFwKIAlwdF9leGVjLmMgcHRfZmlsZS5jIHB0
X3BpcGUuYyBwdF90Y3AuYyBwdF90Y3BsaXN0ZW4uYwogTUFOPQltb3VudF9wb3J0YWxmcy44CiAK
LU1PVU5UPQkkey5DVVJESVJ9Ly4uLy4uL3NiaW4vbW91bnQKLUNGTEFHUys9LUkke01PVU5UfQog
V0FSTlM/PQkzCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQkt
bHV0aWwKIAogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogdXNyLnNiaW4vbW91bnRfcG9y
dGFsZnMvbW91bnRfcG9ydGFsZnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudF9wb3J0
YWxmcy9tb3VudF9wb3J0YWxmcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3Vu
dF9wb3J0YWxmcy9tb3VudF9wb3J0YWxmcy5jCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMs
MTMgQEAKIAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5j
bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQu
aD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKICNpbmNsdWRlICJwYXRobmFtZXMuaCIKICNpbmNs
dWRlICJwb3J0YWxkLmgiCiAKSW5kZXg6IHVzci5zYmluL21vdW50X3NtYmZzL01ha2VmaWxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X3NtYmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcx
NDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9zbWJmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAt
MSwxNSArMSwxMyBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfc21iZnMKLVNSQ1M9CW1v
dW50X3NtYmZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X3NtYmZzLjgKIAotTU9VTlRESVI9
CSR7LkNVUkRJUn0vLi4vLi4vc2Jpbi9tb3VudAogQ09OVFJJQkRJUj0JJHsuQ1VSRElSfS8uLi8u
Li9jb250cmliL3NtYmZzCi1DRkxBR1MrPQktRFNNQkZTIC1JJHtNT1VOVERJUn0gLUkke0NPTlRS
SUJESVJ9L2luY2x1ZGUKK0NGTEFHUys9CS1EU01CRlMgLUkke0NPTlRSSUJESVJ9L2luY2x1ZGUK
IAotTERBREQ9CS1sc21iIC1sa2ljb252Ci1EUEFERD0JJHtMSUJTTUJ9ICR7TElCS0lDT05WfQor
TERBREQ9CS1sc21iIC1sa2ljb252IC1sdXRpbAorRFBBREQ9CSR7TElCU01CfSAke0xJQktJQ09O
Vn0gJHtMSUJVVElMfQogCiAjIE5lZWRzIHRvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBmb3Igb3B0
aW9uYWwgZGxvcGVuKCkgYWNjZXNzIHRvCiAjIHVzZXJsYW5kIGxpYmljb252IChzZWUgdGhlIC1F
IG9wdGlvbikuCkBAIC0xNyw2ICsxNSw1IEBACiBOT19TSEFSRUQ/PQlOTwogCiAuUEFUSDoJJHtD
T05UUklCRElSfS9tb3VudF9zbWJmcwotLlBBVEg6ICAke01PVU5URElSfQogCiAuaW5jbHVkZSA8
YnNkLnByb2cubWs+CkluZGV4OiB1c3Iuc2Jpbi9tb3VudGQvTWFrZWZpbGUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gdXNyLnNiaW4vbW91bnRkL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jp
bi9tb3VudGQvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTUgKzIsMTAgQEAKICMgJEZy
ZWVCU0QkCiAKIFBST0c9CW1vdW50ZAotU1JDUz0JbW91bnRkLmMgZ2V0bW50b3B0cy5jCiBNQU49
CWV4cG9ydHMuNSBuZXRncm91cC41IG1vdW50ZC44CiAKLU1PVU5UPSAgJHsuQ1VSRElSfS8uLi8u
Li9zYmluL21vdW50Ci1DRkxBR1MrPSAtSSR7TU9VTlR9CiBXQVJOUz89IDIKIAotLlBBVEg6ICR7
TU9VTlR9Ci0KIERQQUREPQkke0xJQlVUSUx9CiBMREFERD0JLWx1dGlsCiAKSW5kZXg6IHVzci5z
YmluL21vdW50ZC9tb3VudGQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudGQvbW91bnRk
LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHVzci5zYmluL21vdW50ZC9tb3VudGQuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgPGdycC5oPgogI2luY2x1ZGUgPGxp
YnV0aWwuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5j
bHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAg
LTgxLDcgKzgyLDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K
ICNpbmNsdWRlICJwYXRobmFtZXMuaCIKLSNpbmNsdWRlICJtbnRvcHRzLmgiCiAKICNpZmRlZiBE
RUJVRwogI2luY2x1ZGUgPHN0ZGFyZy5oPgo=
--047d7b5d2e2022af2f04d69f1c80--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAE-mSO%2B_JCAtzDbMfts8Ttgs32T7zNFZkYbGJ610v85=H-U=OA>