Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Apr 2014 08:50:00 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        freebsd-geom@freebsd.org, freebsd-embedded <freebsd-embedded@freebsd.org>
Subject:   [RFC] geom_uncompress(4) changes
Message-ID:  <CAB=2f8w2KmtfBAnC83yUS0n%2B7jq4jM2-Ub_1%2BaMAW=QczqbPwA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--001a11c382d422f85004f82d089e
Content-Type: text/plain; charset=UTF-8

Hi,

I've the attached changes to geom_uncompress(4) that modularise the
compression support.

It can now be built with support to mkuzip(8) or mkulzma(8) (or both)
independently.

It also make a lot easier to add the support to new compression
methods on geom_uncompress.

Now, building a kernel with 'options GEOM_UNCOMPRESS' (kept for
backward compatibility) adds only the support to read mkulzma images.

Building a kernel with 'options GEOM_UNCOMPRESS_UZIP' will add the
support to read mkuzip images.

The both options can be combined and they will produce a kernel which
can read both formats.

The geom_uncompress module is built with both compression methods
enabled keeping the backward compatibility.

I think we could eventually retire geom_uzip(8) as they are doing
essentially the same thing (with the same implementation and code...).
But this lets a lot of open questions regarding backward
compatibility.

Regards,
Luiz

--001a11c382d422f85004f82d089e
Content-Type: text/plain; charset=US-ASCII; name="g_uncompress.diff"
Content-Disposition: attachment; filename="g_uncompress.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hul4oxbq0

SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp
c2lvbiAyNjUwMTMpCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMjc0Miw3
ICsyNzQyLDkgQEAKIGdlb20vcmFpZDMvZ19yYWlkM19jdGwuYwlvcHRpb25hbCBnZW9tX3JhaWQz
CiBnZW9tL3Noc2VjL2dfc2hzZWMuYwkJb3B0aW9uYWwgZ2VvbV9zaHNlYwogZ2VvbS9zdHJpcGUv
Z19zdHJpcGUuYwkJb3B0aW9uYWwgZ2VvbV9zdHJpcGUKLWdlb20vdW5jb21wcmVzcy9nX3VuY29t
cHJlc3MuYwlvcHRpb25hbCBnZW9tX3VuY29tcHJlc3MKK2dlb20vdW5jb21wcmVzcy9nX3VuY29t
cHJlc3MuYwlvcHRpb25hbCBnZW9tX3VuY29tcHJlc3MgfCBnZW9tX3VuY29tcHJlc3NfdXppcAor
Z2VvbS91bmNvbXByZXNzL2dfdW5jb21wcmVzc191bHptYS5jCW9wdGlvbmFsIGdlb21fdW5jb21w
cmVzcworZ2VvbS91bmNvbXByZXNzL2dfdW5jb21wcmVzc191emlwLmMJb3B0aW9uYWwgZ2VvbV91
bmNvbXByZXNzX3V6aXAKIGNvbnRyaWIveHotZW1iZWRkZWQvZnJlZWJzZC94el9tYWxsb2MuYwlc
CiAJb3B0aW9uYWwgeHpfZW1iZWRkZWQgfCBnZW9tX3VuY29tcHJlc3MgXAogCWNvbXBpbGUtd2l0
aCAiJHtOT1JNQUxfQ30gLUkkUy9jb250cmliL3h6LWVtYmVkZGVkL2ZyZWVic2QvIC1JJFMvY29u
dHJpYi94ei1lbWJlZGRlZC9saW51eC9saWIveHovIC1JJFMvY29udHJpYi94ei1lbWJlZGRlZC9s
aW51eC9pbmNsdWRlL2xpbnV4LyIKQEAgLTMxMzksNyArMzE0MSw3IEBACiBuZXQvdm5ldC5jCQkJ
b3B0aW9uYWwgdmltYWdlCiBuZXQvemxpYi5jCQkJb3B0aW9uYWwgY3J5cHRvIHwgZ2VvbV91emlw
IHwgaXBzZWMgfCBcCiAJCQkJCSBteGdlIHwgbmV0Z3JhcGhfZGVmbGF0ZSB8IFwKLQkJCQkJIGRk
Yl9jdGYgfCBnemlvIHwgZ2VvbV91bmNvbXByZXNzCisJCQkJCSBkZGJfY3RmIHwgZ3ppbyB8IGdl
b21fdW5jb21wcmVzc191emlwCiBuZXQ4MDIxMS9pZWVlODAyMTEuYwkJb3B0aW9uYWwgd2xhbgog
bmV0ODAyMTEvaWVlZTgwMjExX2FjbC5jCW9wdGlvbmFsIHdsYW4gd2xhbl9hY2wKIG5ldDgwMjEx
L2llZWU4MDIxMV9hY3Rpb24uYwlvcHRpb25hbCB3bGFuCkluZGV4OiBzeXMvY29uZi9vcHRpb25z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHN5cy9jb25mL29wdGlvbnMJKHJldmlzaW9uIDI2NTAxMykKKysrIHN5
cy9jb25mL29wdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNyBAQAogR0VPTV9T
VFJJUEUJb3B0X2dlb20uaAogR0VPTV9TVU5MQUJFTAlvcHRfZ2VvbS5oCiBHRU9NX1VOQ09NUFJF
U1MJb3B0X2dlb20uaAorR0VPTV9VTkNPTVBSRVNTX1VaSVAJb3B0X2dlb20uaAogR0VPTV9VWklQ
CW9wdF9nZW9tLmgKIEdFT01fVklSU1RPUglvcHRfZ2VvbS5oCiBHRU9NX1ZPTAlvcHRfZ2VvbS5o
CkluZGV4OiBzeXMvZ2VvbS91bmNvbXByZXNzL2dfdW5jb21wcmVzcy5jCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHN5cy9nZW9tL3VuY29tcHJlc3MvZ191bmNvbXByZXNzLmMJKHJldmlzaW9uIDI2NTAxMykKKysr
IHN5cy9nZW9tL3VuY29tcHJlc3MvZ191bmNvbXByZXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE1ICsyNywxOSBAQAogCiAvKgogICogR0VPTSBVTkNPTVBSRVNTIG1vZHVsZSAtIHNpbXBsZSBk
ZWNvbXByZXNzaW9uIG1vZHVsZSBmb3IgdXNlIHdpdGggcmVhZC1vbmx5Ci0gKiBjb3ByZXNzZWQg
aW1hZ2VzIG1ha2VkIGJ5IG1rdXppcCg4KSBvciBta3Vsem1hKDgpIHV0aWxpdGllcy4KKyAqIGNv
bXByZXNzZWQgaW1hZ2VzIGNyZWF0ZWQgYnkgbWt1emlwKDgpIG9yIG1rdWx6bWEoOCkgdXRpbGl0
aWVzLgogICoKLSAqIFRvIGVuYWJsZSBtb2R1bGUgaW4ga2VybmVsIGNvbmZpZywgcHV0IHRoaXMg
bGluZToKLSAqIGRldmljZQlnZW9tX3VuY29tcHJlc3MKKyAqIFRvIGVuYWJsZSB1bmNvbXByZXNz
IHN1cHBvcnQgaW4ga2VybmVsIGNvbmZpZywgYWRkIHRoZXNlIGxpbmVzIChmb3IgdWx6bWEKKyAq
IGFuZCB1emlwIHN1cHBvcnQgcmVzcGVjdGl2ZWx5KToKKyAqIG9wdGlvbnMJZ2VvbV91bmNvbXBy
ZXNzCisgKiBvcHRpb25zCWdlb21fdW5jb21wcmVzc191emlwCiAgKi8KIAogI2luY2x1ZGUgPHN5
cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCisjaW5jbHVkZSAib3B0X2dlb20u
aCIKKwogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9iaW8uaD4KICNpbmNs
dWRlIDxzeXMvZW5kaWFuLmg+CkBAIC00NywxMCArNTEsOCBAQAogI2luY2x1ZGUgPHN5cy9zeXN0
bS5oPgogCiAjaW5jbHVkZSA8Z2VvbS9nZW9tLmg+CisjaW5jbHVkZSA8Z2VvbS91bmNvbXByZXNz
L2dfdW5jb21wcmVzcy5oPgogCi0jaW5jbHVkZSA8bmV0L3psaWIuaD4KLSNpbmNsdWRlIDxjb250
cmliL3h6LWVtYmVkZGVkL2xpbnV4L2luY2x1ZGUvbGludXgveHouaD4KLQogI2lmZGVmIEdFT01f
VU5DT01QUkVTU19ERUJVRwogI2RlZmluZQlEUFJJTlRGKGEpCXByaW50ZiBhCiBleHRlcm4gaW50
IGdfZGVidWdmbGFnczsKQEAgLTU4LDEyICs2MCwxMCBAQAogI2RlZmluZQlEUFJJTlRGKGEpCiAj
ZW5kaWYKIAotc3RhdGljIE1BTExPQ19ERUZJTkUoTV9HRU9NX1VOQ09NUFJFU1MsICJnZW9tX3Vu
Y29tcHJlc3MiLAorTUFMTE9DX0RFRklORShNX0dFT01fVU5DT01QUkVTUywgImdlb21fdW5jb21w
cmVzcyIsCiAgICAgIkdFT00gVU5DT01QUkVTUyBkYXRhIHN0cnVjdHVyZXMiKTsKIAogI2RlZmlu
ZQlVTkNPTVBSRVNTX0NMQVNTX05BTUUJIlVOQ09NUFJFU1MiCi0jZGVmaW5lCUdFT01fVVpJUF9N
QUpWRVIgJzInCi0jZGVmaW5lCUdFT01fVUxaTUFfTUFKVkVSICczJwogCiAvKgogICogTWF4aW11
bSBhbGxvd2VkIHZhbGlkIGJsb2NrIHNpemUgKHRvIHByZXZlbnQgZm9vdC1zaG9vdGluZykKQEAg
LTcxLDI4ICs3MSwxNyBAQAogI2RlZmluZQlNQVhfQkxLU1oJKE1BWFBIWVMpCiAKIC8qCi0gKiBJ
bnRlZ2VyIHZhbHVlcyAoYmxvY2sgc2l6ZSwgbnVtYmVyIG9mIGJsb2Nrcywgb2Zmc2V0cykKLSAq
IGFyZSBzdG9yZWQgaW4gYmlnLWVuZGlhbiAobmV0d29yaykgb3JkZXIgb24gZGlzayBhbmQgc3Ry
dWN0IGNsb29wX2hlYWRlcgotICogYW5kIGluIG5hdGl2ZSBvcmRlciBpbiBzdHJ1Y3QgZ191bmNv
bXByZXNzX3NvZnRjCisgKiBJbnRlZ2VyIHZhbHVlcyAoYmxvY2sgc2l6ZSwgbnVtYmVyIG9mIGJs
b2Nrcywgb2Zmc2V0cykgYXJlIHN0b3JlZCBpbiBuYXRpdmUKKyAqIG9yZGVyIGluIHN0cnVjdCBn
X3VuY29tcHJlc3Nfc29mdGMuCiAgKi8KIAotI2RlZmluZQlDTE9PUF9NQUdJQ19MRU4JMTI4CiBz
dGF0aWMgY2hhciBDTE9PUF9NQUdJQ19TVEFSVFtdID0gIiMhL2Jpbi9zaFxuIjsKIAotc3RydWN0
IGNsb29wX2hlYWRlciB7Ci0JY2hhciBtYWdpY1tDTE9PUF9NQUdJQ19MRU5dOwkvKiBjbG9vcCBt
YWdpYyAqLwotCXVpbnQzMl90IGJsa3N6OwkJCS8qIGJsb2NrIHNpemUgKi8KLQl1aW50MzJfdCBu
YmxvY2tzOwkJLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotfTsKLQogc3RydWN0IGdfdW5jb21wcmVz
c19zb2Z0YyB7CiAJdWludDMyX3QgYmxrc3o7CQkJLyogYmxvY2sgc2l6ZSAqLwogCXVpbnQzMl90
IG5ibG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzICovCiAJdWludDY0X3QgKm9mZnNldHM7Ci0J
ZW51bSB7Ci0JCUdFT01fVVpJUCA9IDEsCi0JCUdFT01fVUxaTUEKLQl9IHR5cGU7CisJaW50IHR5
cGU7CiAKIAlzdHJ1Y3QgbXR4IGxhc3RfbXR4OwogCXVpbnQzMl90IGxhc3RfYmxrOwkJLyogbGFz
dCBibGsgbm8gKi8KQEAgLTk5LDExICs4OCwxNiBAQAogCWNoYXIgKmxhc3RfYnVmOwkJCS8qIGxh
c3QgYmxrIGRhdGEgKi8KIAlpbnQgcmVxX3RvdGFsOwkJCS8qIHRvdGFsIHJlcXVlc3RzICovCiAJ
aW50IHJlcV9jYWNoZWQ7CQkJLyogY2FjaGVkIHJlcXVlc3RzICovCit9OwogCi0JLyogWFogZGVj
b2RlciBzdHJ1Y3RzICovCi0Jc3RydWN0IHh6X2J1ZiAqYjsKLQlzdHJ1Y3QgeHpfZGVjICpzOwot
CXpfc3RyZWFtICp6czsKK3N0YXRpYyBzdHJ1Y3QgZ191bmNvbXByZXNzX2Rlc2MgKmdfdW5jb21w
cmVzc1tdID0geworI2lmZGVmIEdFT01fVU5DT01QUkVTUworCSZnX3VuY29tcHJlc3NfdWx6bWEs
CisjZW5kaWYKKyNpZmRlZiBHRU9NX1VOQ09NUFJFU1NfVVpJUAorCSZnX3VuY29tcHJlc3NfdXpp
cCwKKyNlbmRpZgorCU5VTEwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTksMjUgKzExMyw4IEBA
CiAJCXNjLT5vZmZzZXRzID0gMDsKIAl9CiAKLQlzd2l0Y2ggKHNjLT50eXBlKSB7Ci0JY2FzZSBH
RU9NX1VMWk1BOgotCQlpZiAoc2MtPmIpIHsKLQkJCWZyZWUoc2MtPmIsIE1fR0VPTV9VTkNPTVBS
RVNTKTsKLQkJCXNjLT5iID0gMDsKLQkJfQotCQlpZiAoc2MtPnMpIHsKLQkJCXh6X2RlY19lbmQo
c2MtPnMpOwotCQkJc2MtPnMgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgR0VPTV9VWklQOgot
CQlpZiAoc2MtPnpzKSB7Ci0JCQlpbmZsYXRlRW5kKHNjLT56cyk7Ci0JCQlmcmVlKHNjLT56cywg
TV9HRU9NX1VOQ09NUFJFU1MpOwotCQkJc2MtPnpzID0gMDsKLQkJfQotCQlicmVhazsKLQl9CisJ
LyogQ2FsbCB0aGUgZnJlZSBtZXRob2QuICovCisJZ191bmNvbXByZXNzW3NjLT50eXBlXS0+ZF9m
cmVlKGdfdW5jb21wcmVzc1tzYy0+dHlwZV0pOwogCiAJbXR4X2Rlc3Ryb3koJnNjLT5sYXN0X210
eCk7CiAJZnJlZShzYy0+bGFzdF9idWYsIE1fR0VPTV9VTkNPTVBSRVNTKTsKQEAgLTE0NCwyMyAr
MTIxLDcgQEAKIAlmcmVlKHNjLCBNX0dFT01fVU5DT01QUkVTUyk7CiB9CiAKLXN0YXRpYyB2b2lk
ICoKLXpfYWxsb2Modm9pZCAqbmlsLCB1X2ludCB0eXBlLCB1X2ludCBzaXplKQotewotCXZvaWQg
KnB0cjsKLQotCXB0ciA9IG1hbGxvYyh0eXBlICogc2l6ZSwgTV9HRU9NX1VOQ09NUFJFU1MsIE1f
Tk9XQUlUKTsKLQlyZXR1cm4gKHB0cik7Ci19Ci0KIHN0YXRpYyB2b2lkCi16X2ZyZWUodm9pZCAq
bmlsLCB2b2lkICpwdHIpCi17Ci0KLQlmcmVlKHB0ciwgTV9HRU9NX1VOQ09NUFJFU1MpOwotfQot
Ci1zdGF0aWMgdm9pZAogZ191bmNvbXByZXNzX2RvbmUoc3RydWN0IGJpbyAqYnApCiB7CiAJc3Ry
dWN0IGdfdW5jb21wcmVzc19zb2Z0YyAqc2M7CkBAIC0yNTQsMzMgKzIxNSw5IEBACiAJCQloZXhk
dW1wKGJwLT5iaW9fZGF0YSArIHBvcywgZGxlbiwgMCwgMCk7CiAjZW5kaWYKIAotCQlzd2l0Y2gg
KHNjLT50eXBlKSB7Ci0JCWNhc2UgR0VPTV9VTFpNQToKLQkJCXNjLT5iLT5pbiA9IGJwLT5iaW9f
ZGF0YSArIHBvczsKLQkJCXNjLT5iLT5vdXQgPSBzYy0+bGFzdF9idWY7Ci0JCQlzYy0+Yi0+aW5f
cG9zID0gc2MtPmItPm91dF9wb3MgPSAwOwotCQkJc2MtPmItPmluX3NpemUgPSBkbGVuOwotCQkJ
c2MtPmItPm91dF9zaXplID0gKHNpemVfdCktMTsKLQotCQkJZXJyID0gKHh6X2RlY19ydW4oc2Mt
PnMsIHNjLT5iKSAhPSBYWl9TVFJFQU1fRU5EKSA/Ci0JCQkgICAgMSA6IDA7Ci0JCQkvKiBUT0RP
IGRlY29kZXIgcmVjb3ZlcnksIGlmIG5lZWRlZCAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgR0VPTV9V
WklQOgotCQkJc2MtPnpzLT5uZXh0X2luID0gYnAtPmJpb19kYXRhICsgcG9zOwotCQkJc2MtPnpz
LT5hdmFpbF9pbiA9IGRsZW47Ci0JCQlzYy0+enMtPm5leHRfb3V0ID0gc2MtPmxhc3RfYnVmOwot
CQkJc2MtPnpzLT5hdmFpbF9vdXQgPSBzYy0+Ymxrc3o7Ci0KLQkJCWVyciA9IChpbmZsYXRlKHNj
LT56cywgWl9GSU5JU0gpICE9IFpfU1RSRUFNX0VORCkgPwotCQkJICAgIDEgOiAwOwotCQkJaWYg
KChlcnIpIHx8IChpbmZsYXRlUmVzZXQoc2MtPnpzKSAhPSBaX09LKSkKLQkJCQlwcmludGYoIiVz
OiBVWklQIGRlY29kZXIgcmVzZXQgZmFpbGVkXG4iLAotCQkJCSAgICAgZ3AtPm5hbWUpOwotCQkJ
YnJlYWs7Ci0JCX0KLQotCQlpZiAoZXJyKSB7CisJCWlmIChnX3VuY29tcHJlc3Nbc2MtPnR5cGVd
LT5kX2RlY29tKGdfdW5jb21wcmVzc1tzYy0+dHlwZV0sCisJCSAgICBncC0+bmFtZSwgYnAtPmJp
b19kYXRhICsgcG9zLCBsZW4sIHNjLT5sYXN0X2J1ZiwKKwkJICAgIHNjLT5ibGtzeikgIT0gMCkg
ewogCQkJc2MtPmxhc3RfYmxrID0gLTE7CiAJCQltdHhfdW5sb2NrKCZzYy0+bGFzdF9tdHgpOwog
CQkJRFBSSU5URigoIiVzOiBkb25lOiBpbmZsYXRlIGZhaWxlZCwgY29kZT0lZFxuIiwKQEAgLTI5
MSw3ICsyMjgsNyBAQAogCiAjaWZkZWYgR0VPTV9VTkNPTVBSRVNTX0RFQlVHCiAJCWlmIChnX2Rl
YnVnZmxhZ3MgJiAzMikKLQkJCWhleGR1bXAoc2MtPmxhc3RfYnVmLCBzYy0+Yi0+b3V0X3NpemUs
IDAsIDApOworCQkJaGV4ZHVtcChzYy0+bGFzdF9idWYsIHNjLT5ibGtzeiwgMCwgMCk7CiAjZW5k
aWYKIAogCQlzYy0+bGFzdF9ibGsgPSBpOwpAQCAtNTIxLDI0ICs0NTgsMTYgQEAKIAkJZ290byBl
cnI7CiAJfQogCi0Jc3dpdGNoIChoZWFkZXItPm1hZ2ljWzB4MGJdKSB7Ci0JY2FzZSAnTCc6Ci0J
CXR5cGUgPSBHRU9NX1VMWk1BOwotCQlpZiAoaGVhZGVyLT5tYWdpY1sweDBjXSA8IEdFT01fVUxa
TUFfTUFKVkVSKSB7Ci0JCQlEUFJJTlRGKCgiJXM6IGltYWdlIHZlcnNpb24gdG9vIG9sZFxuIiwg
Z3AtPm5hbWUpKTsKKwlmb3IgKGkgPSAwOyBnX3VuY29tcHJlc3NbaV0gIT0gTlVMTDsgaSsrKSB7
CisJCWVycm9yID0gZ191bmNvbXByZXNzW2ldLT5kX3Rhc3RlKGhlYWRlciwgZ3AtPm5hbWUpOwor
CQlpZiAoZXJyb3IgPT0gMSkgeworCQkJLyogTWF0Y2guICovCisJCQl0eXBlID0gaTsKKwkJCWJy
ZWFrOworCQl9IGVsc2UgaWYgKGVycm9yID09IC0xKQogCQkJZ290byBlcnI7Ci0JCX0KLQkJcHJp
bnRmKCIlczogR0VPTV9VTFpNQSBpbWFnZSBmb3VuZFxuIiwgZ3AtPm5hbWUpOwotCQlicmVhazsK
LQljYXNlICdWJzoKLQkJdHlwZSA9IEdFT01fVVpJUDsKLQkJaWYgKGhlYWRlci0+bWFnaWNbMHgw
Y10gPCBHRU9NX1VaSVBfTUFKVkVSKSB7Ci0JCQlEUFJJTlRGKCgiJXM6IGltYWdlIHZlcnNpb24g
dG9vIG9sZFxuIiwgZ3AtPm5hbWUpKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCXByaW50ZigiJXM6
IEdFT01fVVpJUCBpbWFnZSBmb3VuZFxuIiwgZ3AtPm5hbWUpOwotCQlicmVhazsKLQlkZWZhdWx0
OgorCX0KKwlpZiAoZ191bmNvbXByZXNzW2ldID09IE5VTEwpIHsKIAkJRFBSSU5URigoIiVzOiB1
bnN1cHBvcnRlZCBpbWFnZSB0eXBlXG4iLCBncC0+bmFtZSkpOwogCQlnb3RvIGVycjsKIAl9CkBA
IC01ODgsMjMgKzUxNyw5IEBACiAJc2MtPnJlcV90b3RhbCA9IDA7CiAJc2MtPnJlcV9jYWNoZWQg
PSAwOwogCi0Jc3dpdGNoIChzYy0+dHlwZSkgewotCWNhc2UgR0VPTV9VTFpNQToKLQkJeHpfY3Jj
MzJfaW5pdCgpOwotCQlzYy0+cyA9IHh6X2RlY19pbml0KFhaX1NJTkdMRSwgMCk7Ci0JCXNjLT5i
ID0gKHN0cnVjdCB4el9idWYqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHh6X2J1ZiksCi0JCSAgICBN
X0dFT01fVU5DT01QUkVTUywgTV9XQUlUT0spOwotCQlicmVhazsKLQljYXNlIEdFT01fVVpJUDoK
LQkJc2MtPnpzID0gKHpfc3RyZWFtICopbWFsbG9jKHNpemVvZih6X3N0cmVhbSksCi0JCSAgICBN
X0dFT01fVU5DT01QUkVTUywgTV9XQUlUT0spOwotCQlzYy0+enMtPnphbGxvYyA9IHpfYWxsb2M7
Ci0JCXNjLT56cy0+emZyZWUgPSB6X2ZyZWU7Ci0JCWlmIChpbmZsYXRlSW5pdChzYy0+enMpICE9
IFpfT0spIHsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWJyZWFrOwotCX0KKwkvKiBJbml0aWFsaXpl
IHRoZSBjb21wcmVzc2lvbiBtZXRob2QuICovCisJaWYgKGdfdW5jb21wcmVzc1tzYy0+dHlwZV0t
PmRfaW5pdChnX3VuY29tcHJlc3Nbc2MtPnR5cGVdKSAhPSAwKQorCQlnb3RvIGVycjsKIAogCWdf
dG9wb2xvZ3lfbG9jaygpOwogCXBwMiA9IGdfbmV3X3Byb3ZpZGVyZihncCwgIiVzIiwgZ3AtPm5h
bWUpOwpJbmRleDogc3lzL21vZHVsZXMvZ2VvbS9nZW9tX3VuY29tcHJlc3MvTWFrZWZpbGUKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3lzL21vZHVsZXMvZ2VvbS9nZW9tX3VuY29tcHJlc3MvTWFrZWZpbGUJKHJl
dmlzaW9uIDI2NTAxMykKKysrIHN5cy9tb2R1bGVzL2dlb20vZ2VvbV91bmNvbXByZXNzL01ha2Vm
aWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw4ICsxMCw5IEBACiBDRkxBR1MrPSAtSSR7LkNVUkRJ
Un0vLi4vLi4vLi4vZ2VvbS91bmNvbXByZXNzLyBcCiAJLUkkey5DVVJESVJ9Ly4uLy4uLy4uL2Nv
bnRyaWIveHotZW1iZWRkZWQvZnJlZWJzZCBcCiAJLUkkey5DVVJESVJ9Ly4uLy4uLy4uL2NvbnRy
aWIveHotZW1iZWRkZWQvbGludXgvbGliL3h6LwotU1JDUz0JZ191bmNvbXByZXNzLmMgeHpfY3Jj
MzIuYyB4el9kZWNfYmNqLmMgeHpfZGVjX2x6bWEyLmMgeHpfZGVjX3N0cmVhbS5jIFwKLSAgICB4
el9tYWxsb2MuYworQ0ZMQUdTKz0tREdFT01fVU5DT01QUkVTUyAtREdFT01fVU5DT01QUkVTU19V
WklQCitTUkNTPQlnX3VuY29tcHJlc3MuYyBnX3VuY29tcHJlc3NfdWx6bWEuYyBnX3VuY29tcHJl
c3NfdXppcC5jIG9wdF9nZW9tLmgKK1NSQ1MrPQl4el9jcmMzMi5jIHh6X2RlY19iY2ouYyB4el9k
ZWNfbHptYTIuYyB4el9kZWNfc3RyZWFtLmMgeHpfbWFsbG9jLmMKIFNSQ1MrPQl4ei5oIHh6X2Nv
bmZpZy5oIHh6X2x6bWEyLmggeHpfbWFsbG9jLmggeHpfcHJpdmF0ZS5oIHh6X3N0cmVhbS5oCiAK
IC5pbmNsdWRlIDxic2Qua21vZC5taz4KLS0tIC9kZXYvbnVsbAkyMDE0LTA0LTI3IDEwOjMzOjAw
LjAwMDAwMDAwMCAtMDMwMAorKysgc3lzL2dlb20vdW5jb21wcmVzcy9nX3VuY29tcHJlc3MuaAky
MDE0LTA0LTI2IDE2OjE4OjM0LjgyMTU0OTUyNCAtMDMwMApAQCAtMCwwICsxLDcxIEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIEFsZWtzYW5kciBSeWJhbGtvCisgKiBDb3B5cmln
aHQgKGMpIDIwMDQgTWF4IEtob24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBfR19VTkNPTVBSRVNTX0hfCisjZGVmaW5lIF9HX1VOQ09NUFJFU1NfSF8KKworTUFMTE9DX0RF
Q0xBUkUoTV9HRU9NX1VOQ09NUFJFU1MpOworCisjZGVmaW5lCUNMT09QX01BR0lDX0xFTgkxMjgK
KyNkZWZpbmUJQ0xPT1BfVFlQRQkweDBiCisjZGVmaW5lCUNMT09QX1ZFUlNJT04JMHgwYworCisv
KgorICogSW50ZWdlciB2YWx1ZXMgKGJsb2NrIHNpemUsIG51bWJlciBvZiBibG9ja3MsIG9mZnNl
dHMpIGFyZSBzdG9yZWQgaW4KKyAqIGJpZy1lbmRpYW4gKG5ldHdvcmspIG9yZGVyIG9uIGRpc2sg
YW5kIHN0cnVjdCBjbG9vcF9oZWFkZXIuCisgKi8KK3N0cnVjdCBjbG9vcF9oZWFkZXIgeworCWNo
YXIgbWFnaWNbQ0xPT1BfTUFHSUNfTEVOXTsJLyogY2xvb3AgbWFnaWMgKi8KKwl1aW50MzJfdCBi
bGtzejsJCQkvKiBibG9jayBzaXplICovCisJdWludDMyX3QgbmJsb2NrczsJCS8qIG51bWJlciBv
ZiBibG9ja3MgKi8KK307IAorCitzdHJ1Y3QgZ191bmNvbXByZXNzX2Rlc2M7CisKK3R5cGVkZWYg
aW50IGdfdW5jb21wcmVzc19kZWNvbV90IChzdHJ1Y3QgZ191bmNvbXByZXNzX2Rlc2MgKiwgY2hh
ciAqLAorCWNhZGRyX3QsIG9mZl90LCBjYWRkcl90LCBvZmZfdCk7Cit0eXBlZGVmIHZvaWQgZ191
bmNvbXByZXNzX2ZyZWVfdCAoc3RydWN0IGdfdW5jb21wcmVzc19kZXNjICopOwordHlwZWRlZiBp
bnQgZ191bmNvbXByZXNzX2luaXRfdCAoc3RydWN0IGdfdW5jb21wcmVzc19kZXNjICopOwordHlw
ZWRlZiBpbnQgZ191bmNvbXByZXNzX3Rhc3RlX3QgKHN0cnVjdCBjbG9vcF9oZWFkZXIgKiwgY2hh
ciAqKTsKKworc3RydWN0IGdfdW5jb21wcmVzc19kZXNjIHsKKwl2b2lkCQkJKmRfZGF0YTsKKwln
X3VuY29tcHJlc3NfZGVjb21fdAkqZF9kZWNvbTsKKwlnX3VuY29tcHJlc3NfZnJlZV90CSpkX2Zy
ZWU7CisJZ191bmNvbXByZXNzX2luaXRfdAkqZF9pbml0OworCWdfdW5jb21wcmVzc190YXN0ZV90
CSpkX3Rhc3RlOworfTsKKworLyogU3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZHMuICovCisj
aWZkZWYgR0VPTV9VTkNPTVBSRVNTCitleHRlcm4gc3RydWN0IGdfdW5jb21wcmVzc19kZXNjIGdf
dW5jb21wcmVzc191bHptYTsKKyNlbmRpZgorI2lmZGVmIEdFT01fVU5DT01QUkVTU19VWklQCitl
eHRlcm4gc3RydWN0IGdfdW5jb21wcmVzc19kZXNjIGdfdW5jb21wcmVzc191emlwOworI2VuZGlm
CisKKyNlbmRpZiAvKiBfR19VTkNPTVBSRVNTX0hfICovCi0tLSAvZGV2L251bGwJMjAxNC0wNC0y
NyAxMDozMzowMC4wMDAwMDAwMDAgLTAzMDAKKysrIHN5cy9nZW9tL3VuY29tcHJlc3MvZ191bmNv
bXByZXNzX3Vsem1hLmMJMjAxNC0wNC0yNiAxNjoxOTowNC4wMDM1NDc3MTAgLTAzMDAKQEAgLTAs
MCArMSwxMjkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIgQWxla3NhbmRyIFJ5
YmFsa28KKyAqIENvcHlyaWdodCAoYykgMjAwNCBNYXggS2hvbgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisvKgorICogR0VPTSBVTFpNQSBtb2R1bGUgLSBzaW1wbGUgZGVjb21wcmVzc2lv
biBtb2R1bGUgZm9yIHVzZSB3aXRoIHJlYWQtb25seQorICogY29tcHJlc3NlZCBpbWFnZXMgY3Jl
YXRlZCBieSBta3Vsem1hKDgpLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5
cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Rt
Lmg+CisKKyNpbmNsdWRlIDxnZW9tL3VuY29tcHJlc3MvZ191bmNvbXByZXNzLmg+CisKKyNpbmNs
dWRlIDxjb250cmliL3h6LWVtYmVkZGVkL2xpbnV4L2luY2x1ZGUvbGludXgveHouaD4KKworI2Rl
ZmluZQlHRU9NX1VMWk1BX01BSlZFUgknMycKKworc3RydWN0IGdfdW5jb21wcmVzc191bHptYV9z
b2Z0YyB7CisJLyogWFogZGVjb2RlciBzdHJ1Y3RzICovCisJc3RydWN0IHh6X2J1ZiAqYjsKKwlz
dHJ1Y3QgeHpfZGVjICpzOworfTsKKworc3RhdGljIHZvaWQKK2dfdW5jb21wcmVzc191bHptYV9m
cmVlKHN0cnVjdCBnX3VuY29tcHJlc3NfZGVzYyAqdW5jb21wcmVzcykKK3sKKwlzdHJ1Y3QgZ191
bmNvbXByZXNzX3Vsem1hX3NvZnRjICpzYzsKKyAgICAgICAgICAgICAgICAKKwlzYyA9IChzdHJ1
Y3QgZ191bmNvbXByZXNzX3Vsem1hX3NvZnRjICopdW5jb21wcmVzcy0+ZF9kYXRhOworCWlmIChz
YykgeworCQlpZiAoc2MtPmIpIHsKKwkJCWZyZWUoc2MtPmIsIE1fR0VPTV9VTkNPTVBSRVNTKTsK
KwkJCXNjLT5iID0gTlVMTDsKKwkJfQorCQlpZiAoc2MtPnMpIHsKKwkJCXh6X2RlY19lbmQoc2Mt
PnMpOworCQkJc2MtPnMgPSBOVUxMOworCQl9CisJCWZyZWUoc2MsIE1fR0VPTV9VTkNPTVBSRVNT
KTsKKwkJdW5jb21wcmVzcy0+ZF9kYXRhID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2df
dW5jb21wcmVzc191bHptYV9pbml0KHN0cnVjdCBnX3VuY29tcHJlc3NfZGVzYyAqdW5jb21wcmVz
cykKK3sKKwlzdHJ1Y3QgZ191bmNvbXByZXNzX3Vsem1hX3NvZnRjICpzYzsKKworCXNjID0gKHN0
cnVjdCBnX3VuY29tcHJlc3NfdWx6bWFfc29mdGMgKiltYWxsb2Moc2l6ZW9mKCpzYyksCisJICAg
IE1fR0VPTV9VTkNPTVBSRVNTLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJeHpfY3JjMzJfaW5pdCgp
OworCXNjLT5zID0geHpfZGVjX2luaXQoWFpfU0lOR0xFLCAwKTsKKwlzYy0+YiA9IChzdHJ1Y3Qg
eHpfYnVmICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgeHpfYnVmKSwKKwkgICAgTV9HRU9NX1VOQ09N
UFJFU1MsIE1fV0FJVE9LKTsKKworCXVuY29tcHJlc3MtPmRfZGF0YSA9ICh2b2lkICopc2M7CisK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitnX3VuY29tcHJlc3NfdWx6bWFfZGVjb20o
c3RydWN0IGdfdW5jb21wcmVzc19kZXNjICp1bmNvbXByZXNzLCBjaGFyICpwcm92aWRlciwKKwlj
YWRkcl90IGluLCBvZmZfdCBpbmxlbiwgY2FkZHJfdCBvdXQsIG9mZl90IG91dGxlbikKK3sKKwlz
dHJ1Y3QgZ191bmNvbXByZXNzX3Vsem1hX3NvZnRjICpzYzsKKworCXNjID0gKHN0cnVjdCBnX3Vu
Y29tcHJlc3NfdWx6bWFfc29mdGMgKil1bmNvbXByZXNzLT5kX2RhdGE7CisJc2MtPmItPmluID0g
aW47CisJc2MtPmItPm91dCA9IG91dDsKKwlzYy0+Yi0+aW5fcG9zID0gc2MtPmItPm91dF9wb3Mg
PSAwOworCXNjLT5iLT5pbl9zaXplID0gaW5sZW47CisJc2MtPmItPm91dF9zaXplID0gKHNpemVf
dCktMTsKKworCWlmICh4el9kZWNfcnVuKHNjLT5zLCBzYy0+YikgIT0gWFpfU1RSRUFNX0VORCkK
KwkJcmV0dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitnX3VuY29t
cHJlc3NfdWx6bWFfdGFzdGUoc3RydWN0IGNsb29wX2hlYWRlciAqaGVhZGVyLCBjaGFyICpwcm92
aWRlcikKK3sgICAgICAgCisKKwlpZiAoaGVhZGVyLT5tYWdpY1tDTE9PUF9UWVBFXSAhPSAnTCcp
CisJCXJldHVybiAoMCk7CisJaWYgKGhlYWRlci0+bWFnaWNbQ0xPT1BfVkVSU0lPTl0gPCBHRU9N
X1VMWk1BX01BSlZFUikgeworCQlwcmludGYoIiVzOiBpbWFnZSB2ZXJzaW9uIHRvbyBvbGRcbiIs
IHByb3ZpZGVyKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXByaW50ZigiJXM6IEdFT01fVUxaTUEg
aW1hZ2UgZm91bmRcbiIsIHByb3ZpZGVyKTsKKworCXJldHVybiAoMSk7Cit9CisKK3N0cnVjdCBn
X3VuY29tcHJlc3NfZGVzYyBnX3VuY29tcHJlc3NfdWx6bWEgPSB7CisJLmRfZGVjb20gPSBnX3Vu
Y29tcHJlc3NfdWx6bWFfZGVjb20sCisJLmRfZnJlZSA9IGdfdW5jb21wcmVzc191bHptYV9mcmVl
LAorCS5kX2luaXQgPSBnX3VuY29tcHJlc3NfdWx6bWFfaW5pdCwKKwkuZF90YXN0ZSA9IGdfdW5j
b21wcmVzc191bHptYV90YXN0ZSwKK307Ci0tLSAvZGV2L251bGwJMjAxNC0wNC0yNyAxMDozMzow
MC4wMDAwMDAwMDAgLTAzMDAKKysrIHN5cy9nZW9tL3VuY29tcHJlc3MvZ191bmNvbXByZXNzX3V6
aXAuYwkyMDE0LTA0LTI2IDE2OjQwOjExLjQxMzQ2Mjg1NSAtMDMwMApAQCAtMCwwICsxLDE0OCBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiBBbGVrc2FuZHIgUnliYWxrbworICog
Q29weXJpZ2h0IChjKSAyMDA0IE1heCBLaG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
Ky8qCisgKiBHRU9NIFVaSVAgbW9kdWxlIC0gc2ltcGxlIGRlY29tcHJlc3Npb24gbW9kdWxlIGZv
ciB1c2Ugd2l0aCByZWFkLW9ubHkKKyAqIGNvbXByZXNzZWQgaW1hZ2VzIGNyZWF0ZWQgYnkgbWt1
emlwKDgpLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4K
KyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNs
dWRlIDxnZW9tL3VuY29tcHJlc3MvZ191bmNvbXByZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvemxp
Yi5oPgorCisjZGVmaW5lCUdFT01fVVpJUF9NQUpWRVIJJzInCisKK3N0cnVjdCBnX3VuY29tcHJl
c3NfdXppcF9zb2Z0YyB7CisJel9zdHJlYW0gKnpzOworfTsKKworc3RhdGljIHZvaWQKK2dfdW5j
b21wcmVzc191emlwX2ZyZWUoc3RydWN0IGdfdW5jb21wcmVzc19kZXNjICp1bmNvbXByZXNzKQor
eworCXN0cnVjdCBnX3VuY29tcHJlc3NfdXppcF9zb2Z0YyAqc2M7CisKKwlzYyA9IChzdHJ1Y3Qg
Z191bmNvbXByZXNzX3V6aXBfc29mdGMgKil1bmNvbXByZXNzLT5kX2RhdGE7CisJaWYgKHNjKSB7
CisJCWlmIChzYy0+enMpIHsKKwkJCWluZmxhdGVFbmQoc2MtPnpzKTsKKwkJCWZyZWUoc2MtPnpz
LCBNX0dFT01fVU5DT01QUkVTUyk7CisJCQlzYy0+enMgPSBOVUxMOworCQl9CisJCWZyZWUoc2Ms
IE1fR0VPTV9VTkNPTVBSRVNTKTsKKwkJdW5jb21wcmVzcy0+ZF9kYXRhID0gTlVMTDsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkICoKK3pfYWxsb2Modm9pZCAqbmlsLCB1X2ludCB0eXBlLCB1X2ludCBz
aXplKQoreworCXZvaWQgKnB0cjsKKworCXB0ciA9IG1hbGxvYyh0eXBlICogc2l6ZSwgTV9HRU9N
X1VOQ09NUFJFU1MsIE1fTk9XQUlUKTsKKwlyZXR1cm4gKHB0cik7Cit9CisKK3N0YXRpYyB2b2lk
Cit6X2ZyZWUodm9pZCAqbmlsLCB2b2lkICpwdHIpCit7CisKKwlmcmVlKHB0ciwgTV9HRU9NX1VO
Q09NUFJFU1MpOworfQorCitzdGF0aWMgaW50CitnX3VuY29tcHJlc3NfdXppcF9pbml0KHN0cnVj
dCBnX3VuY29tcHJlc3NfZGVzYyAqdW5jb21wcmVzcykKK3sKKwlzdHJ1Y3QgZ191bmNvbXByZXNz
X3V6aXBfc29mdGMgKnNjOworCisJc2MgPSAoc3RydWN0IGdfdW5jb21wcmVzc191emlwX3NvZnRj
ICopbWFsbG9jKHNpemVvZigqc2MpLAorCSAgICBNX0dFT01fVU5DT01QUkVTUywgTV9XQUlUT0sg
fCBNX1pFUk8pOworCXNjLT56cyA9ICh6X3N0cmVhbSAqKW1hbGxvYyhzaXplb2Yoel9zdHJlYW0p
LAorCSAgICBNX0dFT01fVU5DT01QUkVTUywgTV9XQUlUT0spOworCXNjLT56cy0+emFsbG9jID0g
el9hbGxvYzsKKwlzYy0+enMtPnpmcmVlID0gel9mcmVlOworCWlmIChpbmZsYXRlSW5pdChzYy0+
enMpICE9IFpfT0spIHsKKwkJZnJlZSAoc2MtPnpzLCBNX0dFT01fVU5DT01QUkVTUyk7CisJCWZy
ZWUgKHNjLCBNX0dFT01fVU5DT01QUkVTUyk7CisJCXJldHVybiAoLTEpOworCX0KKworCXVuY29t
cHJlc3MtPmRfZGF0YSA9ICh2b2lkICopc2M7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg
aW50CitnX3VuY29tcHJlc3NfdXppcF9kZWNvbShzdHJ1Y3QgZ191bmNvbXByZXNzX2Rlc2MgKnVu
Y29tcHJlc3MsIGNoYXIgKnByb3ZpZGVyLAorCWNhZGRyX3QgaW4sIG9mZl90IGlubGVuLCBjYWRk
cl90IG91dCwgb2ZmX3Qgb3V0bGVuKQoreworCWludCBlcnI7CisJc3RydWN0IGdfdW5jb21wcmVz
c191emlwX3NvZnRjICpzYzsKKworCXNjID0gKHN0cnVjdCBnX3VuY29tcHJlc3NfdXppcF9zb2Z0
YyAqKXVuY29tcHJlc3MtPmRfZGF0YTsKKwlzYy0+enMtPm5leHRfaW4gPSBpbjsKKwlzYy0+enMt
PmF2YWlsX2luID0gaW5sZW47CisJc2MtPnpzLT5uZXh0X291dCA9IG91dDsKKwlzYy0+enMtPmF2
YWlsX291dCA9IG91dGxlbjsKKworCWVyciA9IChpbmZsYXRlKHNjLT56cywgWl9GSU5JU0gpICE9
IFpfU1RSRUFNX0VORCkgPyAgMSA6IDA7CisJaWYgKGVyciB8fCBpbmZsYXRlUmVzZXQoc2MtPnpz
KSAhPSBaX09LKSB7CisJCXByaW50ZigiJXM6IFVaSVAgZGVjb2RlciByZXNldCBmYWlsZWRcbiIs
IHByb3ZpZGVyKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3Rh
dGljIGludAorZ191bmNvbXByZXNzX3V6aXBfdGFzdGUoc3RydWN0IGNsb29wX2hlYWRlciAqaGVh
ZGVyLCBjaGFyICpwcm92aWRlcikKK3sKKworCWlmIChoZWFkZXItPm1hZ2ljW0NMT09QX1RZUEVd
ICE9ICdWJykKKwkJcmV0dXJuICgwKTsKKwlpZiAoaGVhZGVyLT5tYWdpY1tDTE9PUF9WRVJTSU9O
XSA8IEdFT01fVVpJUF9NQUpWRVIpIHsKKwkJcHJpbnRmKCIlczogaW1hZ2UgdmVyc2lvbiB0b28g
b2xkXG4iLCBwcm92aWRlcik7CisJCXJldHVybiAoLTEpOworCX0KKwlwcmludGYoIiVzOiBHRU9N
X1VaSVAgaW1hZ2UgZm91bmRcbiIsIHByb3ZpZGVyKTsKKworCXJldHVybiAoMSk7Cit9CisKK3N0
cnVjdCBnX3VuY29tcHJlc3NfZGVzYyBnX3VuY29tcHJlc3NfdXppcCA9IHsKKwkuZF9kZWNvbSA9
IGdfdW5jb21wcmVzc191emlwX2RlY29tLAorCS5kX2ZyZWUgPSBnX3VuY29tcHJlc3NfdXppcF9m
cmVlLAorCS5kX2luaXQgPSBnX3VuY29tcHJlc3NfdXppcF9pbml0LAorCS5kX3Rhc3RlID0gZ191
bmNvbXByZXNzX3V6aXBfdGFzdGUsCit9OwpJbmRleDogc2hhcmUvbWFuL21hbjQvZ2VvbV91bmNv
bXByZXNzLjQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWFuL21hbjQvZ2VvbV91bmNvbXByZXNzLjQJ
KHJldmlzaW9uIDI2NTAxMykKKysrIHNoYXJlL21hbi9tYW40L2dlb21fdW5jb21wcmVzcy40CSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAuXCIKIC5cIiAkRnJlZUJTRCQKIC5cIgot
LkRkIEphbnVhcnkgOSwgMjAxNAorLkRkIEFwcmlsIDI3LCAyMDE0CiAuRHQgR0VPTV9VTkNPTVBS
RVNTIDQKIC5PcwogLlNoIE5BTUUKQEAgLTMxLDEwICszMSwxMSBAQAogLk5tIGdlb21fdW5jb21w
cmVzcwogLk5kICJHRU9NIGJhc2VkIGNvbXByZXNzZWQgZGlzayBpbWFnZXMiCiAuU2ggU1lOT1BT
SVMKLVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgaW50byB0aGUga2VybmVsLCBwbGFjZSB0aGUgZm9s
bG93aW5nIGxpbmUgaW4geW91cgorVG8gY29tcGlsZSB0aGlzIGRyaXZlciBpbnRvIHRoZSBrZXJu
ZWwsIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91cgoga2VybmVsIGNvbmZpZ3VyYXRp
b24gZmlsZToKIC5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50CiAuQ2QgIm9wdGlvbnMgR0VPTV9V
TkNPTVBSRVNTIgorLkNkICJvcHRpb25zIEdFT01fVU5DT01QUkVTU19VWklQIgogLkVkCiAuUHAK
IEFsdGVybmF0aXZlbHksIHRvIGxvYWQgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSBhdCBib290IHRp
bWUsIHBsYWNlIHRoZQpAQCAtODksNiArOTAsMTggQEAKICAgIFNlY3RvcnNpemU6IDUxMgogICAg
TW9kZTogcjF3MGUwCiAuRWQKKy5QcAorVGhlIGNvbXByZXNzaW9uIHN1cHBvcnQgY2FuIGJlIGNo
b3NlbiBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjoKKy5CbCAtdGFnIC13aWR0aCAiLlN5IG9wdGlv
bnMgR0VPTV9VTkNPTVBSRVNTX1VaSVAiCisuSXQgU3kgb3B0aW9ucyBHRU9NX1VOQ09NUFJFU1MK
K0VuYWJsZSB0aGUgc3VwcG9ydCBmb3IgbWt1bHptYSg4KSBpbWFnZXMuCisuSXQgU3kgb3B0aW9u
cyBHRU9NX1VOQ09NUFJFU1NfVVpJUAorRW5hYmxlIHRoZSBzdXBwb3J0IGZvciBta3V6aXAoOCkg
aW1hZ2VzLgorLkVsCisuUHAKK1RoZQorLk5tCittb2R1bGUgaXMgYnVpbHQgd2l0aCBib3RoIGNv
bXByZXNzaW9uIG1ldGhvZHMgZW5hYmxlZC4KIC5TaCBTRUUgQUxTTwogLlhyIEdFT00gNCAsCiAu
WHIgbWQgNCAsCg==
--001a11c382d422f85004f82d089e--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8w2KmtfBAnC83yUS0n%2B7jq4jM2-Ub_1%2BaMAW=QczqbPwA>