Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Jun 2019 13:59:02 -0700
From:      "Richard Russo" <freebsd@ruka.org>
To:        freebsd-transport@freebsd.org
Subject:   RFC: patches to pcbhash and porthash
Message-ID:  <86d0c51a-959d-4656-9415-8de9e7f6ea10@www.fastmail.com>

next in thread | raw e-mail | index | archive | help
--da0c7ed35dc24091af7333be76bfb294
Content-Type: text/plain

I've developed the attached patches that helped reduce overhead on a tcp proxy machine with high usage (2M+ open sessions / 4M+ tcp connections, 20k + tcp open/second). Software stack is FreeBSD 12-RELEASE, with RSS enabled and HAProxy 2 with local patches for RSS support.

Please let me know if these could be considered for inclusion, and what's the best way to proceed.

The first patch fbsd12-siphash_for_pcb_hash.patch changes the pcbhash so that it's using siphash instead of bit operations, uses the local address in addition to the foreign address, and includes the full address for ipv6 addresses. Because of the high number of sessions, I've had to use multiple local addresses to connect to the backend servers; in the unpatched case, these all hash to the same value; additional, because of how my organization allocates IPv6, all of my IPv6 backend servers have the same lower 32-bits, so I ended up with very large lists in the hash tables, resulting in excessive CPU consumption during pcb lookups.

The second patch fbsd12-move_comparison_to_portlist_head.patch changes the pcbporthash so that comparisons are done with the portheads, instead of potentially iterating on all pcbs that match the port. I also limited the size of the hashtable to a maximum 65536, since the hash is on port number and port number is limited to 65536. This helps reduce CPU spent checking for conflicts during binding of outgoing connections. I believe I correctly handled all of the cases, but there's a possibly wrong optimization for sockets with SO_REUSEADDR where I group all of these sockets as if they had their local address set to inaddr_any (or ipv6 version) -- this reduces the number of head entries to one per port number for outgoing connections in my case, instead of one per local address; this may not be correct or appropriate for all uses though.

Thank you,

Richard

-- 
  Richard Russo
  freebsd@ruka.org
--da0c7ed35dc24091af7333be76bfb294
Content-Disposition: attachment;filename="fbsd12-siphash_for_pcb_hash.patch"
Content-Type: application/octet-stream; name="fbsd12-siphash_for_pcb_hash.patch"
Content-Transfer-Encoding: BASE64

SW5kZXg6IHN5cy9uZXRpbmV0L2luX3BjYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXRp
bmV0L2luX3BjYi5jCShyZXZpc2lvbiAzNDgwMDcpCisrKyBzeXMvbmV0aW5ldC9pbl9wY2Iu
Ywkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBACiAjaW5jbHVkZSA8bmV0aXBz
ZWMvaXBzZWNfc3VwcG9ydC5oPgogCiAjaW5jbHVkZSA8c2VjdXJpdHkvbWFjL21hY19mcmFt
ZXdvcmsuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2lwaGFzaC9zaXBoYXNoLmg+CiAKICNkZWZp
bmUJSU5QQ0JMQkdST1VQX1NJWk1JTgk4CiAjZGVmaW5lCUlOUENCTEJHUk9VUF9TSVpNQVgJ
MjU2CkBAIC00NjcsNiArNDY4LDcgQEAKIAlwY2JpbmZvLT5pcGlfbGlzdGhlYWQgPSBsaXN0
aGVhZDsKIAlDS19MSVNUX0lOSVQocGNiaW5mby0+aXBpX2xpc3RoZWFkKTsKIAlwY2JpbmZv
LT5pcGlfY291bnQgPSAwOworCWFyYzRyYW5kKCZwY2JpbmZvLT5pcGlfaGFzaGtleSwgUENC
SEFTSF9TRUNSRVRfU0laRSwgMCk7CiAJcGNiaW5mby0+aXBpX2hhc2hiYXNlID0gaGFzaGlu
aXQoaGFzaF9uZWxlbWVudHMsIE1fUENCLAogCSAgICAmcGNiaW5mby0+aXBpX2hhc2htYXNr
KTsKIAlwY2JpbmZvLT5pcGlfcG9ydGhhc2hiYXNlID0gaGFzaGluaXQocG9ydGhhc2hfbmVs
ZW1lbnRzLCBNX1BDQiwKQEAgLTE4NjIsOCArMTg2NCw5IEBACiAJCSAqIExvb2sgZm9yIGFu
IHVuY29ubmVjdGVkICh3aWxkY2FyZCBmb3JlaWduIGFkZHIpIFBDQiB0aGF0CiAJCSAqIG1h
dGNoZXMgdGhlIGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQgd2UncmUgbG9va2luZyBmb3IuCiAJ
CSAqLwotCQloZWFkID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtJTlBfUENCSEFTSChJTkFE
RFJfQU5ZLCBscG9ydCwKLQkJICAgIDAsIHBjYmluZm8tPmlwaV9oYXNobWFzayldOworCQlo
ZWFkID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtpbl9wY2JfaGFzaChwY2JpbmZvLT5pcGlf
aGFzaGtleSwKKwkJCUlOQUREUl9BTlksIElOQUREUl9BTlksIGxwb3J0LCAwLCBwY2JpbmZv
LT5pcGlfaGFzaG1hc2spXTsKKwogCQlDS19MSVNUX0ZPUkVBQ0goaW5wLCBoZWFkLCBpbnBf
aGFzaCkgewogI2lmZGVmIElORVQ2CiAJCQkvKiBYWFggaW5wIGxvY2tpbmcgKi8KQEAgLTIw
MjAsOCArMjAyMyw4IEBACiAJICovCiAJdG1waW5wID0gTlVMTDsKIAlJTlBfR1JPVVBfTE9D
SyhwY2Jncm91cCk7Ci0JaGVhZCA9ICZwY2Jncm91cC0+aXBnX2hhc2hiYXNlW0lOUF9QQ0JI
QVNIKGZhZGRyLnNfYWRkciwgbHBvcnQsIGZwb3J0LAotCSAgICBwY2Jncm91cC0+aXBnX2hh
c2htYXNrKV07CisJaGVhZCA9ICZwY2Jncm91cC0+aXBnX2hhc2hiYXNlW2luX3BjYl9oYXNo
KHBjYmdyb3VwLT5pcGdfa2V5LAorCSAgICBsYWRkci5zX2FkZHIsIGZhZGRyLnNfYWRkciwg
bHBvcnQsIGZwb3J0LCBwY2Jncm91cC0+aXBnX2hhc2htYXNrKV07CiAJQ0tfTElTVF9GT1JF
QUNIKGlucCwgaGVhZCwgaW5wX3BjYmdyb3VwaGFzaCkgewogI2lmZGVmIElORVQ2CiAJCS8q
IFhYWCBpbnAgbG9ja2luZyAqLwpAQCAtMjA3MCw4ICsyMDczLDggQEAKIAkJICogICAgICA0
LiBub24tamFpbGVkLCB3aWxkLgogCQkgKi8KIAotCQloZWFkID0gJnBjYmdyb3VwLT5pcGdf
aGFzaGJhc2VbSU5QX1BDQkhBU0goSU5BRERSX0FOWSwKLQkJICAgIGxwb3J0LCAwLCBwY2Jn
cm91cC0+aXBnX2hhc2htYXNrKV07CisJCWhlYWQgPSAmcGNiZ3JvdXAtPmlwZ19oYXNoYmFz
ZVtpbl9wY2JfaGFzaChwY2Jncm91cC0+aXBnX2tleSwKKwkJICAgIElOQUREUl9BTlksIElO
QUREUl9BTlksIGxwb3J0LCAwLCBwY2Jncm91cC0+aXBnX2hhc2htYXNrKV07CiAJCUNLX0xJ
U1RfRk9SRUFDSChpbnAsIGhlYWQsIGlucF9wY2Jncm91cGhhc2gpIHsKICNpZmRlZiBJTkVU
NgogCQkJLyogWFhYIGlucCBsb2NraW5nICovCkBAIC0yMTQ0LDggKzIxNDcsOCBAQAogCQkg
KiAgICAgIDMuIG5vbi1qYWlsZWQsIG5vbi13aWxkLgogCQkgKiAgICAgIDQuIG5vbi1qYWls
ZWQsIHdpbGQuCiAJCSAqLwotCQloZWFkID0gJnBjYmluZm8tPmlwaV93aWxkYmFzZVtJTlBf
UENCSEFTSChJTkFERFJfQU5ZLCBscG9ydCwKLQkJICAgIDAsIHBjYmluZm8tPmlwaV93aWxk
bWFzayldOworCQloZWFkID0gJnBjYmluZm8tPmlwaV93aWxkYmFzZVtpbl9wY2JfaGFzaChw
Y2JpbmZvLT5pcGlfd2lsZGtleSwKKwkJICAgIElOQUREUl9BTlksIElOQUREUl9BTlksIGxw
b3J0LCAwLCBwY2JpbmZvLT5pcGlfd2lsZG1hc2spXTsKIAkJQ0tfTElTVF9GT1JFQUNIKGlu
cCwgaGVhZCwgaW5wX3BjYmdyb3VwX3dpbGQpIHsKICNpZmRlZiBJTkVUNgogCQkJLyogWFhY
IGlucCBsb2NraW5nICovCkBAIC0yMjYwLDggKzIyNjMsOCBAQAogCSAqIEZpcnN0IGxvb2sg
Zm9yIGFuIGV4YWN0IG1hdGNoLgogCSAqLwogCXRtcGlucCA9IE5VTEw7Ci0JaGVhZCA9ICZw
Y2JpbmZvLT5pcGlfaGFzaGJhc2VbSU5QX1BDQkhBU0goZmFkZHIuc19hZGRyLCBscG9ydCwg
ZnBvcnQsCi0JICAgIHBjYmluZm8tPmlwaV9oYXNobWFzayldOworCWhlYWQgPSAmcGNiaW5m
by0+aXBpX2hhc2hiYXNlW2luX3BjYl9oYXNoKHBjYmluZm8tPmlwaV9oYXNoa2V5LAorCSAg
ICBsYWRkci5zX2FkZHIsIGZhZGRyLnNfYWRkciwgbHBvcnQsIGZwb3J0LCBwY2JpbmZvLT5p
cGlfaGFzaG1hc2spXTsKIAlDS19MSVNUX0ZPUkVBQ0goaW5wLCBoZWFkLCBpbnBfaGFzaCkg
ewogI2lmZGVmIElORVQ2CiAJCS8qIFhYWCBpbnAgbG9ja2luZyAqLwpAQCAtMjMxNyw4ICsy
MzIwLDggQEAKIAkJICogICAgICA0LiBub24tamFpbGVkLCB3aWxkLgogCQkgKi8KIAotCQlo
ZWFkID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtJTlBfUENCSEFTSChJTkFERFJfQU5ZLCBs
cG9ydCwKLQkJICAgIDAsIHBjYmluZm8tPmlwaV9oYXNobWFzayldOworCQloZWFkID0gJnBj
YmluZm8tPmlwaV9oYXNoYmFzZVtpbl9wY2JfaGFzaChwY2JpbmZvLT5pcGlfaGFzaGtleSwK
KwkJICAgIElOQUREUl9BTlksIElOQUREUl9BTlksIGxwb3J0LCAwLCBwY2JpbmZvLT5pcGlf
aGFzaG1hc2spXTsKIAkJQ0tfTElTVF9GT1JFQUNIKGlucCwgaGVhZCwgaW5wX2hhc2gpIHsK
ICNpZmRlZiBJTkVUNgogCQkJLyogWFhYIGlucCBsb2NraW5nICovCkBAIC0yNTA5LDcgKzI1
MTIsNyBAQAogCXN0cnVjdCBpbnBjYnBvcnRoZWFkICpwY2Jwb3J0aGFzaDsKIAlzdHJ1Y3Qg
aW5wY2JpbmZvICpwY2JpbmZvID0gaW5wLT5pbnBfcGNiaW5mbzsKIAlzdHJ1Y3QgaW5wY2Jw
b3J0ICpwaGQ7Ci0JdV9pbnQzMl90IGhhc2hrZXlfZmFkZHI7CisJdV9sb25nIGhhc2hrZXk7
CiAJaW50IHNvX29wdGlvbnM7CiAKIAlJTlBfV0xPQ0tfQVNTRVJUKGlucCk7CkBAIC0yNTIw
LDEzICsyNTIzLDE2IEBACiAKICNpZmRlZiBJTkVUNgogCWlmIChpbnAtPmlucF92ZmxhZyAm
IElOUF9JUFY2KQotCQloYXNoa2V5X2ZhZGRyID0gSU5QNl9QQ0JIQVNIS0VZKCZpbnAtPmlu
NnBfZmFkZHIpOworCQloYXNoa2V5ID0gaW42X3BjYl9oYXNoKHBjYmluZm8tPmlwaV9oYXNo
a2V5LCAmaW5wLT5pbjZwX2xhZGRyLAorCQkgICAgJmlucC0+aW42cF9mYWRkciwgaW5wLT5p
bnBfbHBvcnQsIGlucC0+aW5wX2Zwb3J0LAorCQkgICAgcGNiaW5mby0+aXBpX2hhc2htYXNr
KTsKIAllbHNlCiAjZW5kaWYKLQloYXNoa2V5X2ZhZGRyID0gaW5wLT5pbnBfZmFkZHIuc19h
ZGRyOworCWhhc2hrZXkgPSBpbl9wY2JfaGFzaChwY2JpbmZvLT5pcGlfaGFzaGtleSwgaW5w
LT5pbnBfbGFkZHIuc19hZGRyLAorCSAgIGlucC0+aW5wX2ZhZGRyLnNfYWRkciwgaW5wLT5p
bnBfbHBvcnQsIGlucC0+aW5wX2Zwb3J0LAorCSAgIHBjYmluZm8tPmlwaV9oYXNobWFzayk7
CiAKLQlwY2JoYXNoID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtJTlBfUENCSEFTSChoYXNo
a2V5X2ZhZGRyLAotCQkgaW5wLT5pbnBfbHBvcnQsIGlucC0+aW5wX2Zwb3J0LCBwY2JpbmZv
LT5pcGlfaGFzaG1hc2spXTsKKwlwY2JoYXNoID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVto
YXNoa2V5XTsKIAogCXBjYnBvcnRoYXNoID0gJnBjYmluZm8tPmlwaV9wb3J0aGFzaGJhc2Vb
CiAJICAgIElOUF9QQ0JQT1JUSEFTSChpbnAtPmlucF9scG9ydCwgcGNiaW5mby0+aXBpX3Bv
cnRoYXNobWFzayldOwpAQCAtMjYxMSw3ICsyNjE3LDcgQEAKIHsKIAlzdHJ1Y3QgaW5wY2Jp
bmZvICpwY2JpbmZvID0gaW5wLT5pbnBfcGNiaW5mbzsKIAlzdHJ1Y3QgaW5wY2JoZWFkICpo
ZWFkOwotCXVfaW50MzJfdCBoYXNoa2V5X2ZhZGRyOworCXVfbG9uZyBoYXNoa2V5OwogCiAJ
SU5QX1dMT0NLX0FTU0VSVChpbnApOwogCUlOUF9IQVNIX1dMT0NLX0FTU0VSVChwY2JpbmZv
KTsKQEAgLTI2MjEsMTMgKzI2MjcsMTYgQEAKIAogI2lmZGVmIElORVQ2CiAJaWYgKGlucC0+
aW5wX3ZmbGFnICYgSU5QX0lQVjYpCi0JCWhhc2hrZXlfZmFkZHIgPSBJTlA2X1BDQkhBU0hL
RVkoJmlucC0+aW42cF9mYWRkcik7CisJCWhhc2hrZXkgPSBpbjZfcGNiX2hhc2gocGNiaW5m
by0+aXBpX2hhc2hrZXksICZpbnAtPmluNnBfbGFkZHIsCisJCSAgICAmaW5wLT5pbjZwX2Zh
ZGRyLCBpbnAtPmlucF9scG9ydCwgaW5wLT5pbnBfZnBvcnQsCisJCSAgICBwY2JpbmZvLT5p
cGlfaGFzaG1hc2spOwogCWVsc2UKICNlbmRpZgotCWhhc2hrZXlfZmFkZHIgPSBpbnAtPmlu
cF9mYWRkci5zX2FkZHI7CisJaGFzaGtleSA9IGluX3BjYl9oYXNoKHBjYmluZm8tPmlwaV9o
YXNoa2V5LCBpbnAtPmlucF9sYWRkci5zX2FkZHIsCisJICAgIGlucC0+aW5wX2ZhZGRyLnNf
YWRkciwgaW5wLT5pbnBfbHBvcnQsIGlucC0+aW5wX2Zwb3J0LAorCSAgICBwY2JpbmZvLT5p
cGlfaGFzaG1hc2spOwogCi0JaGVhZCA9ICZwY2JpbmZvLT5pcGlfaGFzaGJhc2VbSU5QX1BD
QkhBU0goaGFzaGtleV9mYWRkciwKLQkJaW5wLT5pbnBfbHBvcnQsIGlucC0+aW5wX2Zwb3J0
LCBwY2JpbmZvLT5pcGlfaGFzaG1hc2spXTsKKwloZWFkID0gJnBjYmluZm8tPmlwaV9oYXNo
YmFzZVtoYXNoa2V5XTsKIAogCUNLX0xJU1RfUkVNT1ZFKGlucCwgaW5wX2hhc2gpOwogCUNL
X0xJU1RfSU5TRVJUX0hFQUQoaGVhZCwgaW5wLCBpbnBfaGFzaCk7CkBAIC0yNzI2LDYgKzI3
MzUsNDQgQEAKICNlbmRpZgogfQogCit1X2xvbmcgaW5fcGNiX2hhc2ggKHVpbnQ4X3QgKnNl
Y2JpdHMsIHVpbnQzMl90IGxhZGRyLCB1aW50MzJfdCBmYWRkciwKKyAgICB1aW50MTZfdCBs
cG9ydCwgdWludDE2X3QgZnBvcnQsIHVfbG9uZyBtYXNrKQoreworCVNJUEhBU0hfQ1RYIGN0
eDsKKwl1aW50MzJfdCBzaXBoYXNoWzJdOworCisJU2lwSGFzaDI0X0luaXQoJmN0eCk7CisJ
U2lwSGFzaF9TZXRLZXkoJmN0eCwgc2VjYml0cyk7CisKKwlpZiAoZnBvcnQpIHsKKwkJU2lw
SGFzaF9VcGRhdGUoJmN0eCwgJmZhZGRyLCBzaXplb2YoZmFkZHIpKTsKKwkJU2lwSGFzaF9V
cGRhdGUoJmN0eCwgJmxhZGRyLCBzaXplb2YobGFkZHIpKTsKKwl9CisJU2lwSGFzaF9VcGRh
dGUoJmN0eCwgJmZwb3J0LCBzaXplb2YoZnBvcnQpKTsKKwlTaXBIYXNoX1VwZGF0ZSgmY3R4
LCAmbHBvcnQsIHNpemVvZihscG9ydCkpOworCVNpcEhhc2hfRmluYWwoKHVfaW50OF90ICop
JnNpcGhhc2gsICZjdHgpOworCXJldHVybiAoKHNpcGhhc2hbMF0gXiBzaXBoYXNoWzFdKSAm
IG1hc2spOworfQorCit1X2xvbmcgaW42X3BjYl9oYXNoICh1aW50OF90ICpzZWNiaXRzLCBj
b25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLAorICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRk
ciAqZmFkZHIsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBmcG9ydCwgdV9sb25nIG1hc2sp
Cit7CisJU0lQSEFTSF9DVFggY3R4OworCXVpbnQzMl90IHNpcGhhc2hbMl07CisKKwlTaXBI
YXNoMjRfSW5pdCgmY3R4KTsKKwlTaXBIYXNoX1NldEtleSgmY3R4LCBzZWNiaXRzKTsKKwor
CWlmIChmcG9ydCkgeworCQlTaXBIYXNoX1VwZGF0ZSgmY3R4LCBmYWRkciwgc2l6ZW9mKCpm
YWRkcikpOworCQlTaXBIYXNoX1VwZGF0ZSgmY3R4LCBsYWRkciwgc2l6ZW9mKCpsYWRkcikp
OworCX0KKwlTaXBIYXNoX1VwZGF0ZSgmY3R4LCAmZnBvcnQsIHNpemVvZihmcG9ydCkpOwor
CVNpcEhhc2hfVXBkYXRlKCZjdHgsICZscG9ydCwgc2l6ZW9mKGxwb3J0KSk7CisJU2lwSGFz
aF9GaW5hbCgodV9pbnQ4X3QgKikmc2lwaGFzaCwgJmN0eCk7CisJcmV0dXJuICgoc2lwaGFz
aFswXSBeIHNpcGhhc2hbMV0pICYgbWFzayk7Cit9CisKIC8qCiAgKiBpcHBvcnRfdGljayBy
dW5zIG9uY2UgcGVyIHNlY29uZCwgZGV0ZXJtaW5pbmcgaWYgcmFuZG9tIHBvcnQgYWxsb2Nh
dGlvbgogICogc2hvdWxkIGJlIGNvbnRpbnVlZC4gIElmIG1vcmUgdGhhbiBpcHBvcnRfcmFu
ZG9tY3BzIHBvcnRzIGhhdmUgYmVlbgpJbmRleDogc3lzL25ldGluZXQvaW5fcGNiLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3lzL25ldGluZXQvaW5fcGNiLmgJKHJldmlzaW9uIDM0ODAwNykK
KysrIHN5cy9uZXRpbmV0L2luX3BjYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4
LDggQEAKIAlzdHJ1Y3QgaW5wY2IgKmlsX2lucF9saXN0WzBdOwogfTsKIAorI2RlZmluZSBQ
Q0JIQVNIX1NFQ1JFVF9TSVpFIDE2CisKIC8qLQogICogR2xvYmFsIGRhdGEgc3RydWN0dXJl
IGZvciBlYWNoIGhpZ2gtbGV2ZWwgcHJvdG9jb2wgKFVEUCwgVENQLCAuLi4pIGluIGJvdGgK
ICAqIElQdjQgYW5kIElQdjYuICBIb2xkcyBpbnBjYiBsaXN0cyBhbmQgaW5mb3JtYXRpb24g
Zm9yIG1hbmFnaW5nIHRoZW0uCkBAIC00OTQsNiArNDk2LDcgQEAKIAkgKiBHbG9iYWwgaGFz
aCBvZiBpbnBjYnMsIGhhc2hlZCBieSBsb2NhbCBhbmQgZm9yZWlnbiBhZGRyZXNzZXMgYW5k
CiAJICogcG9ydCBudW1iZXJzLgogCSAqLworCXVpbnQ4X3QgaXBpX2hhc2hrZXlbUENCSEFT
SF9TRUNSRVRfU0laRV07CiAJc3RydWN0IGlucGNiaGVhZAkqaXBpX2hhc2hiYXNlOwkJLyog
KGgpICovCiAJdV9sb25nCQkJIGlwaV9oYXNobWFzazsJCS8qIChoKSAqLwogCkBAIC01MDgs
NiArNTExLDcgQEAKIAkgKiBwZXItcGNiZ3JvdXAgYnV0IGlzIG5vdyBnbG9iYWwuICBBbGwg
cGNiZ3JvdXAgbG9ja3MgbXVzdCBiZSBoZWxkCiAJICogdG8gbW9kaWZ5IHRoZSBsaXN0LCBz
byBhbnkgaXMgc3VmZmljaWVudCB0byByZWFkIGl0LgogCSAqLworCXVpbnQ4X3QgaXBpX3dp
bGRrZXlbUENCSEFTSF9TRUNSRVRfU0laRV07CiAJc3RydWN0IGlucGNiaGVhZAkqaXBpX3dp
bGRiYXNlOwkJLyogKHApICovCiAJdV9sb25nCQkJIGlwaV93aWxkbWFzazsJCS8qIChwKSAq
LwogCkBAIC01NDQsNiArNTQ4LDcgQEAKIAkgKiBQZXItY29ubmVjdGlvbiBncm91cCBoYXNo
IG9mIGlucGNicywgaGFzaGVkIGJ5IGxvY2FsIGFuZCBmb3JlaWduCiAJICogYWRkcmVzc2Vz
IGFuZCBwb3J0IG51bWJlcnMuCiAJICovCisJdWludDhfdCBpcGdfa2V5W1BDQkhBU0hfU0VD
UkVUX1NJWkVdOwogCXN0cnVjdCBpbnBjYmhlYWQJKmlwZ19oYXNoYmFzZTsJCS8qIChjKSAq
LwogCXVfbG9uZwkJCSBpcGdfaGFzaG1hc2s7CQkvKiAoYykgKi8KIApAQCAtNjg0LDggKzY4
OSw2IEBACiAjZGVmaW5lCUlOUF9HUk9VUF9MT0NLX0FTU0VSVChpcGcpCW10eF9hc3NlcnQo
JihpcGcpLT5pcGdfbG9jaywgTUFfT1dORUQpCiAjZGVmaW5lCUlOUF9HUk9VUF9VTkxPQ0so
aXBnKQkJbXR4X3VubG9jaygmKGlwZyktPmlwZ19sb2NrKQogCi0jZGVmaW5lIElOUF9QQ0JI
QVNIKGZhZGRyLCBscG9ydCwgZnBvcnQsIG1hc2spIFwKLQkoKChmYWRkcikgXiAoKGZhZGRy
KSA+PiAxNikgXiBudG9ocygobHBvcnQpIF4gKGZwb3J0KSkpICYgKG1hc2spKQogI2RlZmlu
ZSBJTlBfUENCUE9SVEhBU0gobHBvcnQsIG1hc2spIFwKIAkobnRvaHMoKGxwb3J0KSkgJiAo
bWFzaykpCiAjZGVmaW5lCUlOUF9QQ0JMQkdST1VQX1BPUlRIQVNIKGxwb3J0LCBtYXNrKSBc
CkBAIC02OTQsNiArNjk3LDkgQEAKIAkoKGZhZGRyKSBeICgoZmFkZHIpID4+IDE2KSBeIG50
b2hzKChscG9ydCkgXiAoZnBvcnQpKSkKICNkZWZpbmUJSU5QNl9QQ0JIQVNIS0VZKGZhZGRy
KQkoKGZhZGRyKS0+czZfYWRkcjMyWzNdKQogCit1X2xvbmcgaW5fcGNiX2hhc2ggKHVpbnQ4
X3QgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVfbG9uZyk7
Cit1X2xvbmcgaW42X3BjYl9oYXNoICh1aW50OF90ICosIGNvbnN0IHN0cnVjdCBpbjZfYWRk
ciAqLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1X2xv
bmcpOworCiAvKgogICogRmxhZ3MgZm9yIGlucF92ZmxhZ3MgLS0gaGlzdG9yaWNhbGx5IHZl
cnNpb24gZmxhZ3Mgb25seQogICovCkluZGV4OiBzeXMvbmV0aW5ldC9pbl9wY2Jncm91cC5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXRpbmV0L2luX3BjYmdyb3VwLmMJKHJldmlzaW9u
IDM0ODAwNykKKysrIHN5cy9uZXRpbmV0L2luX3BjYmdyb3VwLmMJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCwxMCArMTcwLDEyIEBACiAJcGNiaW5mby0+aXBpX3BjYmdyb3VwcyA9IG1hbGxv
YyhudW1wY2Jncm91cHMgKgogCSAgICBzaXplb2YoKnBjYmluZm8tPmlwaV9wY2Jncm91cHMp
LCBNX1BDQiwgTV9XQUlUT0sgfCBNX1pFUk8pOwogCXBjYmluZm8tPmlwaV9ucGNiZ3JvdXBz
ID0gbnVtcGNiZ3JvdXBzOworCWFyYzRyYW5kKCZwY2JpbmZvLT5pcGlfd2lsZGtleSwgUENC
SEFTSF9TRUNSRVRfU0laRSwgMCk7CiAJcGNiaW5mby0+aXBpX3dpbGRiYXNlID0gaGFzaGlu
aXQoaGFzaF9uZWxlbWVudHMsIE1fUENCLAogCSAgICAmcGNiaW5mby0+aXBpX3dpbGRtYXNr
KTsKIAlmb3IgKHBnbiA9IDA7IHBnbiA8IHBjYmluZm8tPmlwaV9ucGNiZ3JvdXBzOyBwZ24r
KykgewogCQlwY2Jncm91cCA9ICZwY2JpbmZvLT5pcGlfcGNiZ3JvdXBzW3Bnbl07CisJCWFy
YzRyYW5kKCZwY2Jncm91cC0+aXBnX2tleSwgUENCSEFTSF9TRUNSRVRfU0laRSwgMCk7CiAJ
CXBjYmdyb3VwLT5pcGdfaGFzaGJhc2UgPSBoYXNoaW5pdChoYXNoX25lbGVtZW50cywgTV9Q
Q0IsCiAJCSAgICAmcGNiZ3JvdXAtPmlwZ19oYXNobWFzayk7CiAJCUlOUF9HUk9VUF9MT0NL
X0lOSVQocGNiZ3JvdXAsICJwY2Jncm91cCIpOwpAQCAtMzM2LDggKzMzOCw5IEBACiAJcGNi
aW5mbyA9IGlucC0+aW5wX3BjYmluZm87CiAJZm9yIChwZ24gPSAwOyBwZ24gPCBwY2JpbmZv
LT5pcGlfbnBjYmdyb3VwczsgcGduKyspCiAJCUlOUF9HUk9VUF9MT0NLKCZwY2JpbmZvLT5p
cGlfcGNiZ3JvdXBzW3Bnbl0pOwotCWhlYWQgPSAmcGNiaW5mby0+aXBpX3dpbGRiYXNlW0lO
UF9QQ0JIQVNIKElOQUREUl9BTlksIGlucC0+aW5wX2xwb3J0LAotCSAgICAwLCBwY2JpbmZv
LT5pcGlfd2lsZG1hc2spXTsKKwloZWFkID0gJnBjYmluZm8tPmlwaV93aWxkYmFzZVtpbl9w
Y2JfaGFzaChwY2JpbmZvLT5pcGlfd2lsZGtleSwKKwkgICAgSU5BRERSX0FOWSwgSU5BRERS
X0FOWSwgaW5wLT5pbnBfbHBvcnQsIDAsCisJICAgIHBjYmluZm8tPmlwaV93aWxkbWFzayld
OwogCUNLX0xJU1RfSU5TRVJUX0hFQUQoaGVhZCwgaW5wLCBpbnBfcGNiZ3JvdXBfd2lsZCk7
CiAJaW5wLT5pbnBfZmxhZ3MyIHw9IElOUF9QQ0JHUk9VUFdJTEQ7CiAJZm9yIChwZ24gPSAw
OyBwZ24gPCBwY2JpbmZvLT5pcGlfbnBjYmdyb3VwczsgcGduKyspCkBAIC00MDgsNyArNDEx
LDcgQEAKIHsKIAlzdHJ1Y3QgaW5wY2Jncm91cCAqb2xkcGNiZ3JvdXA7CiAJc3RydWN0IGlu
cGNiaGVhZCAqcGNiaGFzaDsKLQl1aW50MzJfdCBoYXNoa2V5X2ZhZGRyOworCXVfbG9uZyBo
YXNoa2V5OwogCiAJSU5QX1dMT0NLX0FTU0VSVChpbnApOwogCkBAIC00MjAsMTIgKzQyMyw2
IEBACiAJCUlOUF9HUk9VUF9VTkxPQ0sob2xkcGNiZ3JvdXApOwogCX0KIAlpZiAobmV3cGNi
Z3JvdXAgIT0gTlVMTCAmJiBvbGRwY2Jncm91cCAhPSBuZXdwY2Jncm91cCkgewotI2lmZGVm
IElORVQ2Ci0JCWlmIChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KQotCQkJaGFzaGtleV9m
YWRkciA9IElOUDZfUENCSEFTSEtFWSgmaW5wLT5pbjZwX2ZhZGRyKTsKLQkJZWxzZQotI2Vu
ZGlmCi0JCQloYXNoa2V5X2ZhZGRyID0gaW5wLT5pbnBfZmFkZHIuc19hZGRyOwogCQlJTlBf
R1JPVVBfTE9DSyhuZXdwY2Jncm91cCk7CiAJCS8qCiAJCSAqIElmIHRoZSBpbnAgaXMgYW4g
UlNTIGJ1Y2tldCB3aWxkY2FyZCBlbnRyeSwgZW5zdXJlCkBAIC00MzYsMTUgKzQzMywyNSBA
QAogCQkgKiBJTkFERFJfQU5ZIGFuZCB0aGUgZmFyIHBvcnQgaXMgMC4KIAkJICovCiAJCWlm
IChpbnAtPmlucF9mbGFnczIgJiBJTlBfUlNTX0JVQ0tFVF9TRVQpIHsKLQkJCXBjYmhhc2gg
PSAmbmV3cGNiZ3JvdXAtPmlwZ19oYXNoYmFzZVsKLQkJCSAgICBJTlBfUENCSEFTSChJTkFE
RFJfQU5ZLCBpbnAtPmlucF9scG9ydCwgMCwKLQkJCSAgICBuZXdwY2Jncm91cC0+aXBnX2hh
c2htYXNrKV07CisjaWZkZWYgSU5FVDYKKwkJCWlmIChpbnAtPmlucF92ZmxhZyAmIElOUF9J
UFY2KQorCQkJCWhhc2hrZXkgPSBpbjZfcGNiX2hhc2gobmV3cGNiZ3JvdXAtPmlwZ19rZXks
ICZpbjZhZGRyX2FueSwKKwkJCQkgICAgJmluNmFkZHJfYW55LCBpbnAtPmlucF9scG9ydCwg
MCwgbmV3cGNiZ3JvdXAtPmlwZ19oYXNobWFzayk7CisJCQllbHNlCisjZW5kaWYKKwkJCQlo
YXNoa2V5ID0gaW5fcGNiX2hhc2gobmV3cGNiZ3JvdXAtPmlwZ19rZXksIElOQUREUl9BTlks
CisJCQkJICAgIElOQUREUl9BTlksIGlucC0+aW5wX2xwb3J0LCAwLCBuZXdwY2Jncm91cC0+
aXBnX2hhc2htYXNrKTsKIAkJfSBlbHNlIHsKLQkJCXBjYmhhc2ggPSAmbmV3cGNiZ3JvdXAt
PmlwZ19oYXNoYmFzZVsKLQkJCSAgICBJTlBfUENCSEFTSChoYXNoa2V5X2ZhZGRyLCBpbnAt
PmlucF9scG9ydCwKLQkJCSAgICBpbnAtPmlucF9mcG9ydCwKLQkJCSAgICBuZXdwY2Jncm91
cC0+aXBnX2hhc2htYXNrKV07CisjaWZkZWYgSU5FVDYKKwkJCWlmIChpbnAtPmlucF92Zmxh
ZyAmIElOUF9JUFY2KQorCQkJCWhhc2hrZXkgPSBpbjZfcGNiX2hhc2gobmV3cGNiZ3JvdXAt
PmlwZ19rZXksICZpbnAtPmluNnBfbGFkZHIsCisJCQkJICAgICZpbnAtPmluNnBfZmFkZHIs
IGlucC0+aW5wX2xwb3J0LCBpbnAtPmlucF9mcG9ydCwgbmV3cGNiZ3JvdXAtPmlwZ19oYXNo
bWFzayk7CisJCQllbHNlCisjZW5kaWYKKwkJCQloYXNoa2V5ID0gaW5fcGNiX2hhc2gobmV3
cGNiZ3JvdXAtPmlwZ19rZXksIGlucC0+aW5wX2xhZGRyLnNfYWRkciwKKwkJCQkgICAgaW5w
LT5pbnBfZmFkZHIuc19hZGRyLCBpbnAtPmlucF9scG9ydCwgaW5wLT5pbnBfZnBvcnQsIG5l
d3BjYmdyb3VwLT5pcGdfaGFzaG1hc2spOwogCQl9CisJCXBjYmhhc2ggPSAmbmV3cGNiZ3Jv
dXAtPmlwZ19oYXNoYmFzZVtoYXNoa2V5XTsKIAkJQ0tfTElTVF9JTlNFUlRfSEVBRChwY2Jo
YXNoLCBpbnAsIGlucF9wY2Jncm91cGhhc2gpOwogCQlpbnAtPmlucF9wY2Jncm91cCA9IG5l
d3BjYmdyb3VwOwogCQlJTlBfR1JPVVBfVU5MT0NLKG5ld3BjYmdyb3VwKTsKSW5kZXg6IHN5
cy9uZXRpbmV0Ni9pbjZfcGNiLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldGluZXQ2L2lu
Nl9wY2IuYwkocmV2aXNpb24gMzQ4MDA3KQorKysgc3lzL25ldGluZXQ2L2luNl9wY2IuYwko
d29ya2luZyBjb3B5KQpAQCAtNzIzLDkgKzcyMyw4IEBACiAJCSAqIExvb2sgZm9yIGFuIHVu
Y29ubmVjdGVkICh3aWxkY2FyZCBmb3JlaWduIGFkZHIpIFBDQiB0aGF0CiAJCSAqIG1hdGNo
ZXMgdGhlIGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQgd2UncmUgbG9va2luZyBmb3IuCiAJCSAq
LwotCQloZWFkID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtJTlBfUENCSEFTSCgKLQkJICAg
IElOUDZfUENCSEFTSEtFWSgmaW42YWRkcl9hbnkpLCBscG9ydCwgMCwKLQkJICAgIHBjYmlu
Zm8tPmlwaV9oYXNobWFzayldOworCQloZWFkID0gJnBjYmluZm8tPmlwaV9oYXNoYmFzZVtp
bjZfcGNiX2hhc2gocGNiaW5mby0+aXBpX2hhc2hrZXksCisJCSAgICAmaW42YWRkcl9hbnks
ICZpbjZhZGRyX2FueSwgbHBvcnQsIDAsIHBjYmluZm8tPmlwaV9oYXNobWFzayldOwogCQlD
S19MSVNUX0ZPUkVBQ0goaW5wLCBoZWFkLCBpbnBfaGFzaCkgewogCQkJLyogWFhYIGlucCBs
b2NraW5nICovCiAJCQlpZiAoKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpID09IDApCkBA
IC05NDEsOCArOTQwLDggQEAKIAkgKi8KIAl0bXBpbnAgPSBOVUxMOwogCUlOUF9HUk9VUF9M
T0NLKHBjYmdyb3VwKTsKLQloZWFkID0gJnBjYmdyb3VwLT5pcGdfaGFzaGJhc2VbSU5QX1BD
QkhBU0goCi0JICAgIElOUDZfUENCSEFTSEtFWShmYWRkciksIGxwb3J0LCBmcG9ydCwgcGNi
Z3JvdXAtPmlwZ19oYXNobWFzayldOworCWhlYWQgPSAmcGNiZ3JvdXAtPmlwZ19oYXNoYmFz
ZVtpbjZfcGNiX2hhc2gocGNiZ3JvdXAtPmlwZ19rZXksIGxhZGRyLAorCSAgICBmYWRkciwg
bHBvcnQsIGZwb3J0LCBwY2Jncm91cC0+aXBnX2hhc2htYXNrKV07CiAJQ0tfTElTVF9GT1JF
QUNIKGlucCwgaGVhZCwgaW5wX3BjYmdyb3VwaGFzaCkgewogCQkvKiBYWFggaW5wIGxvY2tp
bmcgKi8KIAkJaWYgKChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSA9PSAwKQpAQCAtOTgy
LDggKzk4MSw4IEBACiAJCSAqICAgICAgMy4gbm9uLWphaWxlZCwgbm9uLXdpbGQuCiAJCSAq
ICAgICAgNC4gbm9uLWphaWxlZCwgd2lsZC4KIAkJICovCi0JCWhlYWQgPSAmcGNiZ3JvdXAt
PmlwZ19oYXNoYmFzZVsKLQkJICAgIElOUF9QQ0JIQVNIKElOQUREUl9BTlksIGxwb3J0LCAw
LCBwY2Jncm91cC0+aXBnX2hhc2htYXNrKV07CisJCWhlYWQgPSAmcGNiZ3JvdXAtPmlwZ19o
YXNoYmFzZVtpbjZfcGNiX2hhc2gocGNiZ3JvdXAtPmlwZ19rZXksCisJCSAgICAmaW42YWRk
cl9hbnksICZpbjZhZGRyX2FueSwgbHBvcnQsIDAsIHBjYmdyb3VwLT5pcGdfaGFzaG1hc2sp
XTsKIAkJQ0tfTElTVF9GT1JFQUNIKGlucCwgaGVhZCwgaW5wX3BjYmdyb3VwaGFzaCkgewog
CQkJLyogWFhYIGlucCBsb2NraW5nICovCiAJCQlpZiAoKGlucC0+aW5wX3ZmbGFnICYgSU5Q
X0lQVjYpID09IDApCkBAIC0xMDQzLDkgKzEwNDIsOCBAQAogCQkgKiAgICAgIDMuIG5vbi1q
YWlsZWQsIG5vbi13aWxkLgogCQkgKiAgICAgIDQuIG5vbi1qYWlsZWQsIHdpbGQuCiAJCSAq
LwotCQloZWFkID0gJnBjYmluZm8tPmlwaV93aWxkYmFzZVtJTlBfUENCSEFTSCgKLQkJICAg
IElOUDZfUENCSEFTSEtFWSgmaW42YWRkcl9hbnkpLCBscG9ydCwgMCwKLQkJICAgIHBjYmlu
Zm8tPmlwaV93aWxkbWFzayldOworCQloZWFkID0gJnBjYmluZm8tPmlwaV93aWxkYmFzZVtp
bjZfcGNiX2hhc2gocGNiaW5mby0+aXBpX3dpbGRrZXksCisJCSAgICAmaW42YWRkcl9hbnks
ICZpbjZhZGRyX2FueSwgbHBvcnQsIDAsIHBjYmluZm8tPmlwaV93aWxkbWFzayldOwogCQlD
S19MSVNUX0ZPUkVBQ0goaW5wLCBoZWFkLCBpbnBfcGNiZ3JvdXBfd2lsZCkgewogCQkJLyog
WFhYIGlucCBsb2NraW5nICovCiAJCQlpZiAoKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYp
ID09IDApCkBAIC0xMTQ0LDggKzExNDIsOCBAQAogCSAqIEZpcnN0IGxvb2sgZm9yIGFuIGV4
YWN0IG1hdGNoLgogCSAqLwogCXRtcGlucCA9IE5VTEw7Ci0JaGVhZCA9ICZwY2JpbmZvLT5p
cGlfaGFzaGJhc2VbSU5QX1BDQkhBU0goCi0JICAgIElOUDZfUENCSEFTSEtFWShmYWRkciks
IGxwb3J0LCBmcG9ydCwgcGNiaW5mby0+aXBpX2hhc2htYXNrKV07CisJaGVhZCA9ICZwY2Jp
bmZvLT5pcGlfaGFzaGJhc2VbaW42X3BjYl9oYXNoKHBjYmluZm8tPmlwaV9oYXNoa2V5LCBs
YWRkciwKKwkgICAgZmFkZHIsIGxwb3J0LCBmcG9ydCwgcGNiaW5mby0+aXBpX2hhc2htYXNr
KV07CiAJQ0tfTElTVF9GT1JFQUNIKGlucCwgaGVhZCwgaW5wX2hhc2gpIHsKIAkJLyogWFhY
IGlucCBsb2NraW5nICovCiAJCWlmICgoaW5wLT5pbnBfdmZsYWcgJiBJTlBfSVBWNikgPT0g
MCkKQEAgLTExOTUsOSArMTE5Myw4IEBACiAJCSAqICAgICAgMy4gbm9uLWphaWxlZCwgbm9u
LXdpbGQuCiAJCSAqICAgICAgNC4gbm9uLWphaWxlZCwgd2lsZC4KIAkJICovCi0JCWhlYWQg
PSAmcGNiaW5mby0+aXBpX2hhc2hiYXNlW0lOUF9QQ0JIQVNIKAotCQkgICAgSU5QNl9QQ0JI
QVNIS0VZKCZpbjZhZGRyX2FueSksIGxwb3J0LCAwLAotCQkgICAgcGNiaW5mby0+aXBpX2hh
c2htYXNrKV07CisJCWhlYWQgPSAmcGNiaW5mby0+aXBpX2hhc2hiYXNlW2luNl9wY2JfaGFz
aChwY2JpbmZvLT5pcGlfaGFzaGtleSwKKwkJICAgICZpbjZhZGRyX2FueSwgJmluNmFkZHJf
YW55LCBscG9ydCwgMCwgcGNiaW5mby0+aXBpX2hhc2htYXNrKV07CiAJCUNLX0xJU1RfRk9S
RUFDSChpbnAsIGhlYWQsIGlucF9oYXNoKSB7CiAJCQkvKiBYWFggaW5wIGxvY2tpbmcgKi8K
IAkJCWlmICgoaW5wLT5pbnBfdmZsYWcgJiBJTlBfSVBWNikgPT0gMCkK

--da0c7ed35dc24091af7333be76bfb294
Content-Disposition: attachment;filename="fbsd12-move_comparison_to_portlist_head.patch"
Content-Type: application/octet-stream; name="fbsd12-move_comparison_to_portlist_head.patch"
Content-Transfer-Encoding: BASE64

SW5kZXg6IHN5cy9uZXRpbmV0L2luX3BjYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXRp
bmV0L2luX3BjYi5jCShyZXZpc2lvbiAzNDkwMDMpCisrKyBzeXMvbmV0aW5ldC9pbl9wY2Iu
Ywkod29ya2luZyBjb3B5KQpAQCAtMTg5OSw1OCArMTg5OSw1MSBAQAogCQlwb3J0aGFzaCA9
ICZwY2JpbmZvLT5pcGlfcG9ydGhhc2hiYXNlW0lOUF9QQ0JQT1JUSEFTSChscG9ydCwKIAkJ
ICAgIHBjYmluZm8tPmlwaV9wb3J0aGFzaG1hc2spXTsKIAkJQ0tfTElTVF9GT1JFQUNIKHBo
ZCwgcG9ydGhhc2gsIHBoZF9oYXNoKSB7Ci0JCQlpZiAocGhkLT5waGRfcG9ydCA9PSBscG9y
dCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAocGhkICE9IE5VTEwpIHsKKwkJCXdpbGRjYXJk
ID0gMDsKKwkJCWlmIChwaGQtPnBoZF9wb3J0ICE9IGxwb3J0KQorCQkJCWNvbnRpbnVlOwor
CisJCQlpZiAoY3JlZCAhPSBOVUxMICYmCisJCQkJIXByaXNvbl9lcXVhbF9pcDQocGhkLT5w
aGRfY3JlZC0+Y3JfcHJpc29uLAorCQkJCWNyZWQtPmNyX3ByaXNvbikpCisJCQkJY29udGlu
dWU7CisjaWZkZWYgSU5FVDYKKwkJCS8qIFhYWCBpbnAgbG9ja2luZyAqLworCQkJaWYgKChw
aGQtPnBoZF92ZmxhZyAmIElOUF9JUFY0KSA9PSAwKQorCQkJCWNvbnRpbnVlOwogCQkJLyoK
LQkJCSAqIFBvcnQgaXMgaW4gdXNlIGJ5IG9uZSBvciBtb3JlIFBDQnMuIExvb2sgZm9yIGJl
c3QKLQkJCSAqIGZpdC4KKwkJCSAqIFdlIG5ldmVyIHNlbGVjdCB0aGUgUENCIHRoYXQgaGFz
CisJCQkgKiBJTlBfSVBWNiBmbGFnIGFuZCBpcyBib3VuZCB0byA6OiBpZgorCQkJICogd2Ug
aGF2ZSBhbm90aGVyIFBDQiB3aGljaCBpcyBib3VuZAorCQkJICogdG8gMC4wLjAuMC4gIElm
IGEgUENCIGhhcyB0aGUKKwkJCSAqIElOUF9JUFY2IGZsYWcsIHRoZW4gd2Ugc2V0IGl0cyBj
b3N0CisJCQkgKiBoaWdoZXIgdGhhbiBJUHY0IG9ubHkgUENCcy4KKwkJCSAqCisJCQkgKiBO
b3RlIHRoYXQgdGhlIGNhc2Ugb25seSBoYXBwZW5zCisJCQkgKiB3aGVuIGEgc29ja2V0IGlz
IGJvdW5kIHRvIDo6LCB1bmRlcgorCQkJICogdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSB1c2Ug
b2YgdGhlCisJCQkgKiBtYXBwZWQgYWRkcmVzcyBpcyBhbGxvd2VkLgogCQkJICovCi0JCQlD
S19MSVNUX0ZPUkVBQ0goaW5wLCAmcGhkLT5waGRfcGNibGlzdCwgaW5wX3BvcnRsaXN0KSB7
Ci0JCQkJd2lsZGNhcmQgPSAwOwotCQkJCWlmIChjcmVkICE9IE5VTEwgJiYKLQkJCQkgICAg
IXByaXNvbl9lcXVhbF9pcDQoaW5wLT5pbnBfY3JlZC0+Y3JfcHJpc29uLAotCQkJCQljcmVk
LT5jcl9wcmlzb24pKQotCQkJCQljb250aW51ZTsKLSNpZmRlZiBJTkVUNgotCQkJCS8qIFhY
WCBpbnAgbG9ja2luZyAqLwotCQkJCWlmICgoaW5wLT5pbnBfdmZsYWcgJiBJTlBfSVBWNCkg
PT0gMCkKLQkJCQkJY29udGludWU7Ci0JCQkJLyoKLQkJCQkgKiBXZSBuZXZlciBzZWxlY3Qg
dGhlIFBDQiB0aGF0IGhhcwotCQkJCSAqIElOUF9JUFY2IGZsYWcgYW5kIGlzIGJvdW5kIHRv
IDo6IGlmCi0JCQkJICogd2UgaGF2ZSBhbm90aGVyIFBDQiB3aGljaCBpcyBib3VuZAotCQkJ
CSAqIHRvIDAuMC4wLjAuICBJZiBhIFBDQiBoYXMgdGhlCi0JCQkJICogSU5QX0lQVjYgZmxh
ZywgdGhlbiB3ZSBzZXQgaXRzIGNvc3QKLQkJCQkgKiBoaWdoZXIgdGhhbiBJUHY0IG9ubHkg
UENCcy4KLQkJCQkgKgotCQkJCSAqIE5vdGUgdGhhdCB0aGUgY2FzZSBvbmx5IGhhcHBlbnMK
LQkJCQkgKiB3aGVuIGEgc29ja2V0IGlzIGJvdW5kIHRvIDo6LCB1bmRlcgotCQkJCSAqIHRo
ZSBjb25kaXRpb24gdGhhdCB0aGUgdXNlIG9mIHRoZQotCQkJCSAqIG1hcHBlZCBhZGRyZXNz
IGlzIGFsbG93ZWQuCi0JCQkJICovCi0JCQkJaWYgKChpbnAtPmlucF92ZmxhZyAmIElOUF9J
UFY2KSAhPSAwKQotCQkJCQl3aWxkY2FyZCArPSBJTlBfTE9PS1VQX01BUFBFRF9QQ0JfQ09T
VDsKKwkJCWlmICgocGhkLT5waGRfdmZsYWcgJiBJTlBfSVBWNikgIT0gMCkKKwkJCQl3aWxk
Y2FyZCArPSBJTlBfTE9PS1VQX01BUFBFRF9QQ0JfQ09TVDsKICNlbmRpZgotCQkJCWlmIChp
bnAtPmlucF9mYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkKKwkJCWlmICghcGhkLT5waGRf
ZmFkZHJfaXNfYW55KQorCQkJCXdpbGRjYXJkKys7CisJCQlpZiAocGhkLT5waGRfbGFkZHIu
c19hZGRyICE9IElOQUREUl9BTlkpIHsKKwkJCQlpZiAobGFkZHIuc19hZGRyID09IElOQURE
Ul9BTlkpCiAJCQkJCXdpbGRjYXJkKys7Ci0JCQkJaWYgKGlucC0+aW5wX2xhZGRyLnNfYWRk
ciAhPSBJTkFERFJfQU5ZKSB7Ci0JCQkJCWlmIChsYWRkci5zX2FkZHIgPT0gSU5BRERSX0FO
WSkKLQkJCQkJCXdpbGRjYXJkKys7Ci0JCQkJCWVsc2UgaWYgKGlucC0+aW5wX2xhZGRyLnNf
YWRkciAhPSBsYWRkci5zX2FkZHIpCi0JCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2Ugewot
CQkJCQlpZiAobGFkZHIuc19hZGRyICE9IElOQUREUl9BTlkpCi0JCQkJCQl3aWxkY2FyZCsr
OwotCQkJCX0KLQkJCQlpZiAod2lsZGNhcmQgPCBtYXRjaHdpbGQpIHsKLQkJCQkJbWF0Y2gg
PSBpbnA7Ci0JCQkJCW1hdGNod2lsZCA9IHdpbGRjYXJkOwotCQkJCQlpZiAobWF0Y2h3aWxk
ID09IDApCi0JCQkJCQlicmVhazsKLQkJCQl9CisJCQkJZWxzZSBpZiAocGhkLT5waGRfbGFk
ZHIuc19hZGRyICE9IGxhZGRyLnNfYWRkcikKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2Ug
eworCQkJCWlmIChsYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkKKwkJCQkJd2lsZGNhcmQr
KzsKIAkJCX0KKwkJCWlmICh3aWxkY2FyZCA8IG1hdGNod2lsZCkgeworCQkJCW1hdGNoID0g
Q0tfTElTVF9GSVJTVCgmcGhkLT5waGRfcGNibGlzdCk7CisJCQkJbWF0Y2h3aWxkID0gd2ls
ZGNhcmQ7CisJCQkJaWYgKG1hdGNod2lsZCA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KIAkJ
fQogCQlyZXR1cm4gKG1hdGNoKTsKIAl9CkBAIC0yNTExLDYgKzI1MDQsNyBAQAogCXN0cnVj
dCBpbnBjYnBvcnQgKnBoZDsKIAl1X2ludDMyX3QgaGFzaGtleV9mYWRkcjsKIAlpbnQgc29f
b3B0aW9uczsKKwl1X2NoYXIgZmFkZHJfaXNfYW55ID0gMDsKIAogCUlOUF9XTE9DS19BU1NF
UlQoaW5wKTsKIAlJTlBfSEFTSF9XTE9DS19BU1NFUlQocGNiaW5mbyk7CkBAIC0yNTE5LDYg
KzI1MTMsMTUgQEAKIAkgICAgKCJpbl9wY2JpbnNoYXNoOiBJTlBfSU5IQVNITElTVCIpKTsK
IAogI2lmZGVmIElORVQ2CisJaWYgKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKKwkJ
aWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZpbnAtPmluNnBfZmFkZHIpKQorCQkJZmFk
ZHJfaXNfYW55ID0gMTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmIChpbnAtPmlucF9mYWRkci5z
X2FkZHIgPT0gSU5BRERSX0FOWSkKKwkJZmFkZHJfaXNfYW55ID0gMTsKKworI2lmZGVmIElO
RVQ2CiAJaWYgKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpCiAJCWhhc2hrZXlfZmFkZHIg
PSBJTlA2X1BDQkhBU0hLRVkoJmlucC0+aW42cF9mYWRkcik7CiAJZWxzZQpAQCAtMjU0OCw4
ICsyNTUxLDM1IEBACiAJICogR28gdGhyb3VnaCBwb3J0IGxpc3QgYW5kIGxvb2sgZm9yIGEg
aGVhZCBmb3IgdGhpcyBscG9ydC4KIAkgKi8KIAlDS19MSVNUX0ZPUkVBQ0gocGhkLCBwY2Jw
b3J0aGFzaCwgcGhkX2hhc2gpIHsKLQkJaWYgKHBoZC0+cGhkX3BvcnQgPT0gaW5wLT5pbnBf
bHBvcnQpCi0JCQlicmVhazsKKwkJaWYgKHBoZC0+cGhkX3BvcnQgIT0gaW5wLT5pbnBfbHBv
cnQgfHwKKwkJICAgIHBoZC0+cGhkX3ZmbGFnICE9IGlucC0+aW5wX3ZmbGFnIHx8CisJCSAg
ICBwaGQtPnBoZF9jcmVkICE9IGlucC0+aW5wX2NyZWQgfHwKKwkJICAgIHBoZC0+cGhkX2Zh
ZGRyX2lzX2FueSAhPSBmYWRkcl9pc19hbnkpCisJCQorCQkgICAgY29udGludWU7CisJCWlm
IChzb19vcHRpb25zICYgU09fUkVVU0VBRERSKSB7CisjaWZkZWYgSU5FVDYKKwkJCWlmIChp
bnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisJCQkJaWYgKElONl9JU19BRERSX1VOU1BF
Q0lGSUVEKCZwaGQtPnBoZDZfbGFkZHIpKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZQorI2Vu
ZGlmCisJCQl7CisJCQkJaWYgKHBoZC0+cGhkX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5Z
KQorCQkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKyNpZmRlZiBJTkVUNgorCQkJaWYg
KGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKKwkJCQlpZiAoSU42X0FSRV9BRERSX0VR
VUFMKCZwaGQtPnBoZDZfbGFkZHIsICZpbnAtPmluNnBfbGFkZHIpKQorCQkJCQlicmVhazsK
KwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJaWYgKHBoZC0+cGhkX2xhZGRyLnNfYWRk
ciA9PSBpbnAtPmlucF9sYWRkci5zX2FkZHIpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CiAJ
fQogCS8qCiAJICogSWYgbm9uZSBleGlzdHMsIG1hbGxvYyBvbmUgYW5kIHRhY2sgaXQgb24u
CkBAIC0yNTYxLDYgKzI1OTEsMjQgQEAKIAkJfQogCQliemVybygmcGhkLT5waGRfZXBvY2hf
Y3R4LCBzaXplb2Yoc3RydWN0IGVwb2NoX2NvbnRleHQpKTsKIAkJcGhkLT5waGRfcG9ydCA9
IGlucC0+aW5wX2xwb3J0OworCQlwaGQtPnBoZF92ZmxhZyA9IGlucC0+aW5wX3ZmbGFnOwor
CQlwaGQtPnBoZF9mYWRkcl9pc19hbnkgPSBmYWRkcl9pc19hbnk7CisJCXBoZC0+cGhkX2Ny
ZWQgPSBpbnAtPmlucF9jcmVkOworCQlpZiAoc29fb3B0aW9ucyAmIFNPX1JFVVNFQUREUikg
eworI2lmZGVmIElORVQ2CisJCQlpZiAoaW5wLT5pbnBfdmZsYWcgJiBJTlBfSVBWNikKKwkJ
CQliY29weSgmaW42YWRkcl9hbnksICZwaGQtPnBoZDZfbGFkZHIsIHNpemVvZihwaGQtPnBo
ZDZfbGFkZHIpKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCXBoZC0+cGhkX2xhZGRyLnNfYWRk
ciA9IElOQUREUl9BTlk7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5FVDYKKwkJCWlmIChpbnAt
PmlucF92ZmxhZyAmIElOUF9JUFY2KQorCQkJCWJjb3B5KCZpbnAtPmluNnBfbGFkZHIsICZw
aGQtPnBoZDZfbGFkZHIsIHNpemVvZihwaGQtPnBoZDZfbGFkZHIpKTsKKwkJCWVsc2UKKyNl
bmRpZgorCQkJCXBoZC0+cGhkX2xhZGRyLnNfYWRkciA9IGlucC0+aW5wX2xhZGRyLnNfYWRk
cjsKKwkJfQogCQlDS19MSVNUX0lOSVQoJnBoZC0+cGhkX3BjYmxpc3QpOwogCQlDS19MSVNU
X0lOU0VSVF9IRUFEKHBjYnBvcnRoYXNoLCBwaGQsIHBoZF9oYXNoKTsKIAl9CkluZGV4OiBz
eXMvbmV0aW5ldC9pbl9wY2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0aW5ldC9pbl9w
Y2IuaAkocmV2aXNpb24gMzQ5MDAzKQorKysgc3lzL25ldGluZXQvaW5fcGNiLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwOSw4ICs0MDksMTkgQEAKIAlDS19MSVNUX0VOVFJZKGlucGNicG9y
dCkgcGhkX2hhc2g7CiAJc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsKIAl1X3Nob3J0
IHBoZF9wb3J0OworCXVfY2hhciAgcGhkX3ZmbGFnOworCXVfY2hhciAgcGhkX2ZhZGRyX2lz
X2FueTsKKwlzdHJ1Y3QgIHVjcmVkICAgKnBoZF9jcmVkOworCXVuaW9uIHsKKwkJLyogbG9j
YWwgaG9zdCB0YWJsZSBlbnRyeSAqLworCQlzdHJ1Y3QgIGluX2FkZHJfNGluNiBwaGQ0Nl9s
b2NhbDsKKwkJc3RydWN0ICBpbjZfYWRkciBwaGQ2X2xvY2FsOworCX0gcGhkX2RlcGVuZGxh
ZGRyOwogfTsKIAorI2RlZmluZSBwaGRfbGFkZHIgICBwaGRfZGVwZW5kbGFkZHIucGhkNDZf
bG9jYWwuaWE0Nl9hZGRyNAorI2RlZmluZSBwaGQ2X2xhZGRyICBwaGRfZGVwZW5kbGFkZHIu
cGhkNl9sb2NhbAorCiBzdHJ1Y3QgaW5fcGNibGlzdCB7CiAJaW50IGlsX2NvdW50OwogCXN0
cnVjdCBlcG9jaF9jb250ZXh0IGlsX2Vwb2NoX2N0eDsKSW5kZXg6IHN5cy9uZXRpbmV0L3Rj
cF9zdWJyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldGluZXQvdGNwX3N1YnIuYwkocmV2
aXNpb24gMzQ5MDAzKQorKysgc3lzL25ldGluZXQvdGNwX3N1YnIuYwkod29ya2luZyBjb3B5
KQpAQCAtOTk3LDcgKzk5Nyw3IEBACiB0Y3BfaW5pdCh2b2lkKQogewogCWNvbnN0IGNoYXIg
KnRjYmhhc2hfdHVuZWFibGU7Ci0JaW50IGhhc2hzaXplOworCWludCBoYXNoc2l6ZSwgcG9y
dGhhc2hzaXplOwogCiAJdGNiaGFzaF90dW5lYWJsZSA9ICJuZXQuaW5ldC50Y3AudGNiaGFz
aHNpemUiOwogCkBAIC0xMDQ4LDcgKzEwNDgsMTUgQEAKIAkJICAgICJjbGlwcGVkIGZyb20g
JWQgdG8gJWQuXG4iLCBfX2Z1bmNfXywgb2xkaGFzaHNpemUsCiAJCSAgICBoYXNoc2l6ZSk7
CiAJfQotCWluX3BjYmluZm9faW5pdCgmVl90Y2JpbmZvLCAidGNwIiwgJlZfdGNiLCBoYXNo
c2l6ZSwgaGFzaHNpemUsCisJLyoKKwkgKiBQb3J0IGhhc2ggaXMgKG50b2hzKChscG9ydCkp
ICYgKG1hc2spKS4gSXQgZG9lcyBub3QKKwkgKiBtYWtlIHNlbnNlIHRvIGhhdmUgbW9yZSB0
aGFuIDY1NTM2IGVsZW1lbnRzLgorCSAqLworCWlmIChoYXNoc2l6ZSA8IDY1NTM2KQorCQlw
b3J0aGFzaHNpemUgPSBoYXNoc2l6ZTsKKwllbHNlCisJCXBvcnRoYXNoc2l6ZSA9IDY1NTM2
OworCWluX3BjYmluZm9faW5pdCgmVl90Y2JpbmZvLCAidGNwIiwgJlZfdGNiLCBoYXNoc2l6
ZSwgcG9ydGhhc2hzaXplLAogCSAgICAidGNwX2lucGNiIiwgdGNwX2lucGNiX2luaXQsIElQ
SV9IQVNIRklFTERTXzRUVVBMRSk7CiAKIAkvKgpJbmRleDogc3lzL25ldGluZXQ2L2luNl9w
Y2IuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0aW5ldDYvaW42X3BjYi5jCShyZXZpc2lv
biAzNDkwMDMpCisrKyBzeXMvbmV0aW5ldDYvaW42X3BjYi5jCSh3b3JraW5nIGNvcHkpCkBA
IC03NTcsNDMgKzc1NywzOCBAQAogCQlwb3J0aGFzaCA9ICZwY2JpbmZvLT5pcGlfcG9ydGhh
c2hiYXNlW0lOUF9QQ0JQT1JUSEFTSChscG9ydCwKIAkJICAgIHBjYmluZm8tPmlwaV9wb3J0
aGFzaG1hc2spXTsKIAkJQ0tfTElTVF9GT1JFQUNIKHBoZCwgcG9ydGhhc2gsIHBoZF9oYXNo
KSB7Ci0JCQlpZiAocGhkLT5waGRfcG9ydCA9PSBscG9ydCkKLQkJCQlicmVhazsKLQkJfQot
CQlpZiAocGhkICE9IE5VTEwpIHsKKwkJCWlmIChwaGQtPnBoZF9wb3J0ICE9IGxwb3J0KQor
CQkJCWNvbnRpbnVlOwogCQkJLyoKIAkJCSAqIFBvcnQgaXMgaW4gdXNlIGJ5IG9uZSBvciBt
b3JlIFBDQnMuIExvb2sgZm9yIGJlc3QKIAkJCSAqIGZpdC4KIAkJCSAqLwotCQkJQ0tfTElT
VF9GT1JFQUNIKGlucCwgJnBoZC0+cGhkX3BjYmxpc3QsIGlucF9wb3J0bGlzdCkgewotCQkJ
CXdpbGRjYXJkID0gMDsKLQkJCQlpZiAoY3JlZCAhPSBOVUxMICYmCi0JCQkJICAgICFwcmlz
b25fZXF1YWxfaXA2KGNyZWQtPmNyX3ByaXNvbiwKLQkJCQkJaW5wLT5pbnBfY3JlZC0+Y3Jf
cHJpc29uKSkKKwkJCXdpbGRjYXJkID0gMDsKKwkJCWlmIChjcmVkICE9IE5VTEwgJiYKKwkJ
CQkhcHJpc29uX2VxdWFsX2lwNihjcmVkLT5jcl9wcmlzb24sCisJCQkJcGhkLT5waGRfY3Jl
ZC0+Y3JfcHJpc29uKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIFhYWCBpbnAgbG9ja2luZyAq
LworCQkJaWYgKChwaGQtPnBoZF92ZmxhZyAmIElOUF9JUFY2KSA9PSAwKQorCQkJCWNvbnRp
bnVlOworCQkJaWYgKCFwaGQtPnBoZF9mYWRkcl9pc19hbnkpCisJCQkJd2lsZGNhcmQrKzsK
KwkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnBoZC0+cGhkNl9sYWRkcikpIHsK
KwkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQobGFkZHIpKQorCQkJCQl3aWxkY2Fy
ZCsrOworCQkJCWVsc2UgaWYgKCFJTjZfQVJFX0FERFJfRVFVQUwoCisJCQkJCSZwaGQtPnBo
ZDZfbGFkZHIsIGxhZGRyKSkKIAkJCQkJY29udGludWU7Ci0JCQkJLyogWFhYIGlucCBsb2Nr
aW5nICovCi0JCQkJaWYgKChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSA9PSAwKQotCQkJ
CQljb250aW51ZTsKLQkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZpbnAtPmlu
NnBfZmFkZHIpKQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lG
SUVEKGxhZGRyKSkKIAkJCQkJd2lsZGNhcmQrKzsKLQkJCQlpZiAoIUlONl9JU19BRERSX1VO
U1BFQ0lGSUVEKAotCQkJCQkmaW5wLT5pbjZwX2xhZGRyKSkgewotCQkJCQlpZiAoSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQobGFkZHIpKQotCQkJCQkJd2lsZGNhcmQrKzsKLQkJCQkJZWxz
ZSBpZiAoIUlONl9BUkVfQUREUl9FUVVBTCgKLQkJCQkJICAgICZpbnAtPmluNnBfbGFkZHIs
IGxhZGRyKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmICghSU42
X0lTX0FERFJfVU5TUEVDSUZJRUQobGFkZHIpKQotCQkJCQkJd2lsZGNhcmQrKzsKLQkJCQl9
Ci0JCQkJaWYgKHdpbGRjYXJkIDwgbWF0Y2h3aWxkKSB7Ci0JCQkJCW1hdGNoID0gaW5wOwot
CQkJCQltYXRjaHdpbGQgPSB3aWxkY2FyZDsKLQkJCQkJaWYgKG1hdGNod2lsZCA9PSAwKQot
CQkJCQkJYnJlYWs7Ci0JCQkJfQogCQkJfQorCQkJaWYgKHdpbGRjYXJkIDwgbWF0Y2h3aWxk
KSB7CisJCQkJbWF0Y2ggPSBDS19MSVNUX0ZJUlNUKCZwaGQtPnBoZF9wY2JsaXN0KTsKKwkJ
CQltYXRjaHdpbGQgPSB3aWxkY2FyZDsKKwkJCQlpZiAobWF0Y2h3aWxkID09IDApCisJCQkJ
CWJyZWFrOworCQkJfQogCQl9CiAJCXJldHVybiAobWF0Y2gpOwogCX0K

--da0c7ed35dc24091af7333be76bfb294--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86d0c51a-959d-4656-9415-8de9e7f6ea10>