[PATCH v7 4/6] ieee1275: add support for NVMeoFC

Avnish Chouhan <[email protected]> Fri, 20 Feb 2026 18:28:26 +0530
Newsgroups org.gnu.grub-devel
Message-ID <[email protected]>
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdG8gc2NhbiBhbmQgZGlzY292ZXJ5
IG9mIE5WTWVvRkMuCgpTaWduZWQtb2ZmLWJ5OiBEaWVnbyBEb21pbmdvcyA8ZGllZ29kb0Bici5p
Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j
b20+Ci0tLQogZ3J1Yi1jb3JlL2Rpc2svaWVlZTEyNzUvb2ZkaXNrLmMgfCAzOTggKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo
YW5nZWQsIDMwMCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n
cnViLWNvcmUvZGlzay9pZWVlMTI3NS9vZmRpc2suYyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1
L29mZGlzay5jCmluZGV4IDYyMDkwZmIuLmViOTNkZTMgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9k
aXNrL2llZWUxMjc1L29mZGlzay5jCisrKyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1L29mZGlz
ay5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8Z3J1Yi90aW1lLmg+CiAjaW5jbHVkZSA8
Z3J1Yi9zYWZlbWF0aC5oPgogCisjZGVmaW5lIEVYVEVORF9QQVRIXzY0IDY0CisjZGVmaW5lIEVY
VEVORF9QQVRIXzUxMiA1MTIKKwogc3RhdGljIGNoYXIgKmxhc3RfZGV2cGF0aDsKIHN0YXRpYyBn
cnViX2llZWUxMjc1X2loYW5kbGVfdCBsYXN0X2loYW5kbGU7CiAKQEAgLTIyMywxMTcgKzIyNiwz
MTYgQEAgZGV2X2l0ZXJhdGVfcmVhbCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0
aCkKICAgcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZAotZGV2X2l0ZXJhdGUgKGNvbnN0IHN0cnVj
dCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKLXsKLSAgaWYgKGdydWJfc3RyY21wIChh
bGlhcy0+dHlwZSwgImZjcCIpID09IDApCitkZXZfaXRlcmF0ZV9mY3BfZGlza3MgKGNvbnN0IHN0
cnVjdCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKKyB7CisgIC8qCisgICAqIElmIHdl
IGFyZSBkZWFsaW5nIHdpdGggZmNwIGRldmljZXMsIHdlIG5lZWQKKyAgICogdG8gZmluZCB0aGUg
V1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCisgICAqLworICBncnViX2llZWUxMjc1X2lo
YW5kbGVfdCBpaGFuZGxlOworICBncnViX3VpbnQ2NF90ICpwdHJfdGFyZ2V0cywgKnB0cl9sdW5z
LCBrLCBsOworICB1bnNpZ25lZCBpbnQgaSwgaiwgcG9zOworICBjaGFyICpidWYsICpidWZwdHI7
CisgIHN0cnVjdCBzZXRfZmNwX3RhcmdldHNfYXJncworICB7CisgICAgc3RydWN0IGdydWJfaWVl
ZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9k
OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9j
ZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwor
ICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3NfdGFyZ2V0czsKKworICBz
dHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKKyAgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2Nv
bW1vbl9oZHIgY29tbW9uOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKKyAgICBn
cnViX2llZWUxMjc1X2NlbGxfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHd3
cG5faDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2w7CisgICAgZ3J1Yl9pZWVlMTI3
NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVz
OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3NfbHVuczsKKworICBz
dHJ1Y3QgYXJnc19yZXQKKyAgeworICAgIGdydWJfdWludDY0X3QgYWRkcjsKKyAgICBncnViX3Vp
bnQ2NF90IGxlbjsKKyAgfTsKKyAgc3RydWN0IGFyZ3NfcmV0ICp0YXJnZXRzX3RhYmxlOworICBz
dHJ1Y3QgYXJnc19yZXQgKmx1bnNfdGFibGU7CisKKyAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAo
YWxpYXMtPnBhdGgsICZpaGFuZGxlKSkKICAgICB7Ci0gICAgICAvKgotICAgICAgICogSWYgd2Ug
YXJlIGRlYWxpbmcgd2l0aCBmY3AgZGV2aWNlcywgd2UgbmVlZAotICAgICAgICogdG8gZmluZCB0
aGUgV1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCi0gICAgICAgKi8KLSAgICAgIGdydWJf
aWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7Ci0gICAgICBncnViX3VpbnQ2NF90ICpwdHJfdGFy
Z2V0cywgKnB0cl9sdW5zLCBrLCBsOwotICAgICAgdW5zaWduZWQgaW50IGksIGosIHBvczsKLSAg
ICAgIGNoYXIgKmJ1ZiwgKmJ1ZnB0cjsKLSAgICAgIHN0cnVjdCBzZXRfZmNwX3RhcmdldHNfYXJn
cwotICAgICAgewotICAgICAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1v
bjsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOwotICAgICAgICBncnViX2ll
ZWUxMjc1X2NlbGxfdCBpaGFuZGxlOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBjYXRj
aF9yZXN1bHQ7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwotICAgICAg
ICBncnViX2llZWUxMjc1X2NlbGxfdCB0YWJsZTsKLSAgICAgIH0gYXJnc190YXJnZXRzOwotCi0g
ICAgICBzdHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKLSAgICAgIHsKLSAgICAgICAgc3RydWN0IGdy
dWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2Vs
bF90IG1ldGhvZDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaWhhbmRsZTsKLSAgICAg
ICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd3dwbl9oOwotICAgICAgICBncnViX2llZWUxMjc1X2Nl
bGxfdCB3d3BuX2w7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsK
LSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbmVudHJpZXM7Ci0gICAgICAgIGdydWJfaWVl
ZTEyNzVfY2VsbF90IHRhYmxlOwotICAgICAgfSBhcmdzX2x1bnM7Ci0KLSAgICAgIHN0cnVjdCBh
cmdzX3JldAotICAgICAgewotICAgICAgICBncnViX3VpbnQ2NF90IGFkZHI7Ci0gICAgICAgIGdy
dWJfdWludDY0X3QgbGVuOwotICAgICAgfTsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAi
ZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNc
biIsIGFsaWFzLT5wYXRoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgIGlmIChncnVi
X2llZWUxMjc1X29wZW4gKGFsaWFzLT5wYXRoLCAmaWhhbmRsZSkpCisgIC8qIFNldHVwIHRoZSBm
Y3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KKyAgSU5JVF9JRUVFMTI3NV9DT01N
T04gKCZhcmdzX3RhcmdldHMuY29tbW9uLCAiY2FsbC1tZXRob2QiLCAyLCAzKTsKKyAgYXJnc190
YXJnZXRzLm1ldGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgImZjcC10YXJnZXRzIjsKKyAg
YXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFuZGxlOworCisgIC8qIFNldHVwIHRoZSBmY3AtbHVu
cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3ICovCisgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJn
c19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwgMyk7CisgIGFyZ3NfbHVucy5tZXRob2Qg
PSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJmY3AtbHVucyI7CisgIGFyZ3NfbHVucy5paGFuZGxl
ID0gaWhhbmRsZTsKKyAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMp
ID09IC0xKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdl
dCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMt
PnBhdGgpOworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICByZXR1
cm47CisgICAgfQorICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1aWxkaW5nIHRoZSBwYXRoICov
CisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBhdGgpICsgRVhURU5E
X1BBVEhfNjQpOworICBpZiAoIWJ1ZikKKyAgICB7CisgICAgICBncnViX2llZWUxMjc1X2Nsb3Nl
IChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5
IChidWYsIGFsaWFzLT5wYXRoKTsKKworICAvKgorICAgKiBJdGVyYXRlIG92ZXIgZW50cmllcyBy
ZXR1cm5lZCBieSBwZncuIEVhY2ggZW50cnkgY29udGFpbnMgYQorICAgKiBwb2ludGVyIHRvIHd3
cG4gdGFibGUgYW5kIGhpcyBsZW5ndGguCisgICAqLworICB0YXJnZXRzX3RhYmxlID0gKHN0cnVj
dCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRhYmxlKTsKKyAgZm9yIChpID0gMDsgaSA8IGFy
Z3NfdGFyZ2V0cy5uZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgIHB0cl90YXJnZXRzID0gKGdy
dWJfdWludDY0X3QqKSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7CisgICAgICAvKiBJdGVyYXRlIG92
ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCisgICAgICBmb3IgKGsgPSAwOyBrIDwgdGFy
Z2V0c190YWJsZVtpXS5sZW47IGsrKykKICAgICAgICAgewotICAgICAgICAgIGdydWJfZHByaW50
ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBk
aXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKLSAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgKCpwdHJfdGFyZ2V0
cyk7CisgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg
KCpwdHJfdGFyZ2V0cyA+PiAzMik7CisgICAgICAgICAgcG9zID0gZ3J1Yl9zbnByaW50ZiAoYnVm
cHRyLCAzMiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX3RhcmdldHMrKykpOworICAg
ICAgICAgIC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KKyAgICAgICAg
ICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfbHVucykgPT0gLTEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdl
dCB0aGUgTFVOUyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAg
ICAgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICAgICAg
IGdydWJfZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgIGx1bnNfdGFibGUgPSAoc3RydWN0IGFyZ3NfcmV0ICopIChhcmdzX2x1bnMudGFi
bGUpOworCisgICAgICAgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBMVU5zICovCisgICAgICAgICAg
Zm9yIChqID0gMDsgaiA8IGFyZ3NfbHVucy5uZW50cmllczsgaisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBwdHJfbHVucyA9IChncnViX3VpbnQ2NF90KikgbHVuc190YWJsZVtqXS5h
ZGRyOworICAgICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgbHVuc190YWJsZVtqXS5sZW47IGwr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBncnViX3NucHJpbnRmICgm
YnVmcHRyW3Bvc10sIDMwLCAiLCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQgKCpwdHJfbHVucysrKSk7Cisg
ICAgICAgICAgICAgICAgICBkZXZfaXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQorICBncnViX2llZWUxMjc1
X2Nsb3NlIChpaGFuZGxlKTsKKyAgZ3J1Yl9mcmVlIChidWYpOworICByZXR1cm47Cit9CiAKLSAg
ICAgIC8qIFNldHVwIHRoZSBmY3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KLSAg
ICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc190YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0
aG9kIiwgMiwgMyk7Ci0gICAgICBhcmdzX3RhcmdldHMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVf
Y2VsbF90KSAiZmNwLXRhcmdldHMiOwotICAgICAgYXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFu
ZGxlOworc3RhdGljIHZvaWQKK2Rldl9pdGVyYXRlX2ZjcF9udm1lb2YgKGNvbnN0IHN0cnVjdCBn
cnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKK3sKKyAgY2hhciAqYnVmcHRyOworICBncnVi
X2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlOworCisgIC8qIENyZWF0ZSB0aGUgc3RydWN0cyBm
b3IgdGhlIHBhcmFtZXRlcnMgcGFzc2luZyB0byBQRlcgKi8KKyAgc3RydWN0IG52bWVfYXJncwor
ICB7CisgICAgc3RydWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1
Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5k
bGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVl
ZTEyNzVfY2VsbF90IG5lbnRyaWVzOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOwor
ICB9IG52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MsIG52bWVfY29udHJvbGxlcnNfYXJn
cywgbnZtZV9uYW1lc3BhY2VzX2FyZ3M7CisKKyAgLyogQ3JlYXRlIHRoZSBzdHJ1Y3RzIGZvciB0
aGUgcmVzdWx0cyBmcm9tIFBGVyAqLworICBzdHJ1Y3QgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3Rh
YmxlX3N0cnVjdAorICB7CisgICAgZ3J1Yl91aW50NjRfdCB0YWJsZVsyNTZdOworICAgIGdydWJf
dWludDMyX3QgbGVuOworICB9IGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZTsKKworICAvKgor
ICAgKiBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeQorICAgKiB0aGlzIHRoZSBy
ZXR1cm4gb2YgbnZtZS1jb250cm9sbGVycyBtZXRob2QgdGFibGVzLCBjb250YWluaW5nOgorICAg
KiAtIDItYnl0ZSBjb250cm9sbGVyIElECisgICAqIC0gMjU2LWJ5dGUgdHJhbnNwb3J0IGFkZHJl
c3Mgc3RyaW5nCisgICAqIC0gMjU2LWJ5dGUgZmllbGQgY29udGFpbmluZyBudWxsLXRlcm1pbmF0
ZWQgTlZNIHN1YnN5c3RlbSBOUU4gc3RyaW5nIHVwIHRvIDIyMyBjaGFyYWN0ZXJzCisgICAqLwor
ICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeQorICB7CisgICAgZ3J1Yl91aW50
MTZfdCBpZDsKKyAgICBjaGFyIHd3cG5bMjU2XTsKKyAgICBjaGFyIG5xblsyNTZdOworICB9Owor
CisgIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5X3JlYWwKKyAgeworICAgIGdy
dWJfdWludDE2X3QgaWQ7CisgICAgY2hhciB3d3BuWzI1Nl07CisgICAgY2hhciBucW5bMjU2XTsK
KyAgfTsKIAotICAgICAgLyogU2V0dXAgdGhlIGZjcC1sdW5zIG1ldGhvZCB0byBjYWxsIHZpYSBw
ZncgKi8KLSAgICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc19sdW5zLmNvbW1vbiwgImNh
bGwtbWV0aG9kIiwgNCwgMyk7Ci0gICAgICBhcmdzX2x1bnMubWV0aG9kID0gKGdydWJfaWVlZTEy
NzVfY2VsbF90KSAiZmNwLWx1bnMiOwotICAgICAgYXJnc19sdW5zLmloYW5kbGUgPSBpaGFuZGxl
OwotICAgICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMpID09IC0x
KQorICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVy
c190YWJsZTsKKyAgZ3J1Yl91aW50MzJfdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJpZXM7
CisgIGNoYXIgKmJ1ZjsKKyAgdW5zaWduZWQgaW50IGkgPSAwOworICBpbnQgY3VycmVudF9idWZm
ZXJfaW5kZXg7CisgIGludCBudm1lX2NvbnRyb2xsZXJfaW5kZXg7CisgIGludCBidWZwdHJfcG9z
MjsKKyAgZ3J1Yl91aW50MzJfdCBuYW1lc3BhY2VfaW5kZXggPSAwOworICBzdHJ1Y3QgbnZtZV9j
b250cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVyc190YWJsZV9idWY7CisKKyAg
bnZtZV9jb250cm9sbGVyc190YWJsZSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBudm1l
X2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KSAqIDI1Nik7CisgIC8qIEFsbG9jYXRlIG1lbW9yeSBm
b3IgYnVpbGRpbmcgdGhlIE5WTWVvRiBwYXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnVi
X3N0cmxlbiAoYWxpYXMtPnBhdGgpICsgRVhURU5EX1BBVEhfNTEyKTsKKworICBpZiAoIWJ1ZiB8
fCAhbnZtZV9jb250cm9sbGVyc190YWJsZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKG52bWVf
Y29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgcmV0dXJu
OworICAgIH0KKworICAvKiBDb3B5IHRoZSBhbGlhcy0+cGF0aCB0byBidWYgc28gd2UgY2FuIHdv
cmsgd2l0aCAqLworICBidWZwdHIgPSBncnViX3N0cGNweSAoYnVmLCBhbGlhcy0+cGF0aCk7Cisg
IGdydWJfc25wcmludGYgKGJ1ZnB0ciwgMzIsICIvbnZtZS1vZiIpOworCisgIC8qCisgICAqICBP
cGVuIHRoZSBudm1lLW9mIGxheWVyCisgICAqICBFeC4gIC9wY2lAYnVzL2ZpYnJlLWNoYW5uZWxA
QGRldixmdW5jL252bWUtb2YKKyAgICovCisgIGlmIChncnViX2llZWUxMjc1X29wZW4gKGJ1Ziwg
JmloYW5kbGUpKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRv
IG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGJ1Zik7
CisgICAgICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9m
cmVlIChidWYpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKgorICAgKiBDYWxsIHRvIG52
bWUtZGlzY292ZXJ5LWNvbnRyb2xsZXJzIG1ldGhvZCBmcm9tIHRoZSBudm1lLW9mIGxheWVyCisg
ICAqIHRvIGdldCBhIGxpc3Qgb2YgdGhlIE5WTWUgZGlzY292ZXJ5IGNvbnRyb2xsZXJzIHBlciB0
aGUgYmluZGluZworICAgKi8KKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZudm1lX2Rpc2NvdmVy
eV9jb250cm9sbGVyc19hcmdzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7CisgIG52bWVf
ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90
KSAibnZtZS1kaXNjb3ZlcnktY29udHJvbGxlcnMiOworICBudm1lX2Rpc2NvdmVyeV9jb250cm9s
bGVyc19hcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9G
TiAoJm52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MpID09IC0xKQorICAgIHsKKyAgICAg
IGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBp
dGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAgICAgIGdydWJfZnJlZSAobnZt
ZV9jb250cm9sbGVyc190YWJsZSk7CisgICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAgICBncnVi
X2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyog
QWZ0ZXIgY2xvc2luZyB0aGUgZGV2aWNlLCB0aGUgaW5mbyBpcyBsb3N0LiBTbyBsZXRzIGNvcHkg
ZWFjaCBidWZmZXIgaW4gdGhlIGJ1ZmZlcnMgdGFibGUgKi8KKyAgZGlzY292ZXJ5X2NvbnRyb2xs
ZXJzX3RhYmxlLmxlbiA9IChncnViX3VpbnQzMl90KSBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVy
c19hcmdzLm5lbnRyaWVzOworCisgIGZvciAoaSA9IDA7IGkgPCBkaXNjb3ZlcnlfY29udHJvbGxl
cnNfdGFibGUubGVuOyBpKyspCisgICAgeworICAgICAgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3Rh
YmxlLnRhYmxlW2ldID0gKChncnViX3VpbnQ2NF90KikgbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxl
cnNfYXJncy50YWJsZSlbaV07CisgICAgfQorICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxl
KTsKKyAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwiTlZNZW9GOiBGb3VuZCAlZCBkaXNjb3Zlcnkg
Y29udHJvbGxlcnNcbiIsIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5sZW4pOworCisgIC8q
IEZvciBlYWNoIG52bWUgZGlzY292ZXJ5IGNvbnRyb2xsZXIgKi8KKyAgZm9yIChjdXJyZW50X2J1
ZmZlcl9pbmRleCA9IDA7IGN1cnJlbnRfYnVmZmVyX2luZGV4IDwgKGludCkgZGlzY292ZXJ5X2Nv
bnRyb2xsZXJzX3RhYmxlLmxlbjsgY3VycmVudF9idWZmZXJfaW5kZXgrKykKKyAgICB7CisgICAg
ICBncnViX3NucHJpbnRmIChidWZwdHIsIDY0LCAiL252bWUtb2YvY29udHJvbGxlckAlIiBQUkl4
R1JVQl9VSU5UNjRfVCAiLGZmZmYiLAorICAgICAgICAgICAgICAgICAgICAgZGlzY292ZXJ5X2Nv
bnRyb2xsZXJzX3RhYmxlLnRhYmxlW2N1cnJlbnRfYnVmZmVyX2luZGV4XSk7CisgICAgICBncnVi
X2RwcmludGYgKCJvZmRpc2siLCAibnZtZW9mIGNvbnRyb2xsZXI9JXNcbiIsIGJ1Zik7CisgICAg
ICBpZiAoZ3J1Yl9pZWVlMTI3NV9vcGVuIChidWYsICZpaGFuZGxlKSkKICAgICAgICAgewotICAg
ICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3
aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMtPnBhdGgpOwotICAgICAg
ICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sg
d2hpbGUgZ2V0dGluZyBudm1lLWNvbnRyb2xsZXJzICBwYXRoPSVzXG4iLCBidWYpOworICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICBidWYgPSBncnViX21hbGxvYyAoZ3J1Yl9z
dHJsZW4gKGFsaWFzLT5wYXRoKSArIDMyICsgMzIpOwotICAgICAgaWYgKCFidWYpCisgICAgICBJ
TklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfY29udHJvbGxlcnNfYXJncy5jb21tb24sICJjYWxs
LW1ldGhvZCIsIDIsIDIpOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLm1ldGhvZCA9IChn
cnViX2llZWUxMjc1X2NlbGxfdCkgIm52bWUtY29udHJvbGxlcnMiOworICAgICAgbnZtZV9jb250
cm9sbGVyc19hcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICAgICAgbnZtZV9jb250cm9sbGVyc19h
cmdzLmNhdGNoX3Jlc3VsdCA9IDA7CisKKyAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZO
ICgmbnZtZV9jb250cm9sbGVyc19hcmdzKSA9PSAtMSkKICAgICAgICAgeworICAgICAgICAgIGdy
dWJfZHByaW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBudm1lLWNvbnRyb2xsZXJz
IHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoXG4iKTsKICAgICAgICAgICBncnViX2llZWUx
Mjc1X2Nsb3NlIChpaGFuZGxlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
IGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKKyAgICAgICAgICBjb250
aW51ZTsKKwkgfQogCi0gICAgICAvKgotICAgICAgICogSXRlcmF0ZSBvdmVyIGVudHJpZXMgcmV0
dXJuZWQgYnkgcGZ3LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEKLSAgICAgICAqIHBvaW50ZXIgdG8g
d3dwbiB0YWJsZSBhbmQgaGlzIGxlbmd0aC4KLSAgICAgICAqLwotICAgICAgc3RydWN0IGFyZ3Nf
cmV0ICp0YXJnZXRzX3RhYmxlID0gKHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRh
YmxlKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzX3RhcmdldHMubmVudHJpZXM7IGkrKykK
KyAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciBsaXN0IHRvIG52bWVfY29udHJvbGxlcnNfdGFibGUg
Ki8KKyAgICAgIG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cmllcyA9ICgoZ3J1Yl91aW50MzJf
dCkgbnZtZV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzKTsKKyAgICAgIG52bWVfY29udHJvbGxl
cnNfdGFibGVfYnVmID0gKHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KikgbnZt
ZV9jb250cm9sbGVyc19hcmdzLnRhYmxlOworICAgICAgZm9yIChpID0gMDsgaSA8IG52bWVfY29u
dHJvbGxlcnNfdGFibGVfZW50cmllczsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgcHRyX3Rh
cmdldHMgPSAoZ3J1Yl91aW50NjRfdCopIHRhcmdldHNfdGFibGVbaV0uYWRkcjsKLSAgICAgICAg
ICAvKiBJdGVyYXRlIG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCi0gICAgICAgICAg
Zm9yKGsgPSAwOyBrIDwgdGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg
KCpwdHJfdGFyZ2V0cyk7Ci0gICAgICAgICAgICAgIGFyZ3NfbHVucy53d3BuX2ggPSAoZ3J1Yl9p
ZWVlMTI3NV9jZWxsX3QpICgqcHRyX3RhcmdldHMgPj4gMzIpOwotICAgICAgICAgICAgICBwb3Mg
PSBncnViX3NucHJpbnRmIChidWZwdHIsIDMyLCAiL2Rpc2tAJSIgUFJJeEdSVUJfVUlOVDY0X1Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQg
KCpwdHJfdGFyZ2V0cysrKSk7Ci0gICAgICAgICAgICAgIC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2
ZW4gd3dwbiB0YXJnZXQgKi8KLSAgICAgICAgICAgICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllf
Rk4gKCZhcmdzX2x1bnMpID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgTFVOUyB3aGlsZSBp
dGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKLSAgICAgICAgICAgICAgICAgIGdy
dWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgICAgICAgICAgZ3J1Yl9mcmVl
IChidWYpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgc3RydWN0IGFyZ3NfcmV0ICpsdW5zX3RhYmxlID0gKHN0cnVjdCBhcmdzX3Jl
dCAqKSAoYXJnc19sdW5zLnRhYmxlKTsKLQotICAgICAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIg
YWxsIExVTnMgKi8KLSAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgYXJnc19sdW5zLm5lbnRy
aWVzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcHRyX2x1bnMg
PSAoZ3J1Yl91aW50NjRfdCopIGx1bnNfdGFibGVbal0uYWRkcjsKLSAgICAgICAgICAgICAgICAg
IGZvcihsID0gMDsgbCA8IGx1bnNfdGFibGVbal0ubGVuOyBsKyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBncnViX3NucHJpbnRmICgmYnVmcHRyW3Bvc10s
IDMwLCAiLCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQgKCpwdHJfbHVucysrKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAg
bnZtZV9jb250cm9sbGVyc190YWJsZVtpXS5pZCA9IChncnViX3VpbnQxNl90KSBudm1lX2NvbnRy
b2xsZXJzX3RhYmxlX2J1ZltpXS5pZDsKKyAgICAgICAgICBncnViX3N0cmNweSAobnZtZV9jb250
cm9sbGVyc190YWJsZVtpXS53d3BuLCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1ZltpXS53d3Bu
KTsKKyAgICAgICAgICBncnViX3N0cmNweSAobnZtZV9jb250cm9sbGVyc190YWJsZVtpXS5ucW4s
IG52bWVfY29udHJvbGxlcnNfdGFibGVfYnVmW2ldLm5xbik7CisJIH0KICAgICAgIGdydWJfaWVl
ZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgZ3J1Yl9mcmVlIChidWYpOwotICAgICAgcmV0
dXJuOworICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogZm91bmQgJWQgbnZt
ZSBjb250cm9sbGVyc1xuIiwgKGludCkgbnZtZV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzKTsK
KworICAgICAgLyogRm9yIGVhY2ggbnZtZSBjb250cm9sbGVyICovCisgICAgICBmb3IgKG52bWVf
Y29udHJvbGxlcl9pbmRleCA9IDA7IG52bWVfY29udHJvbGxlcl9pbmRleCA8IChpbnQpIG52bWVf
Y29udHJvbGxlcnNfYXJncy5uZW50cmllczsgbnZtZV9jb250cm9sbGVyX2luZGV4KyspCisgICAg
ICAgeworICAgICAgICAgLyoKKwkgICAqIE9wZW4gdGhlIG52bWUgY29udHJvbGxlcgorICAgICAg
ICAgICogL3BjaUBidXMvZmlicmUtY2hhbm5lbEBkZXYsZnVuYy9udm1lLW9mL2NvbnRyb2xsZXJA
dHJhbnNwb3J0LWFkZHIsY3Rsci1pZDpucW49dGd0LXN1YnN5c3RlbS1ucW4KKyAgICAgICAgICAq
LworICAgICAgICAgYnVmcHRyX3BvczIgPSBncnViX3NucHJpbnRmIChidWZwdHIsIDUxMiwgIi9u
dm1lLW9mL2NvbnRyb2xsZXJAJXMsZmZmZjpucW49JXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnZtZV9jb250cm9sbGVyc190YWJsZVtudm1lX2NvbnRyb2xsZXJf
aW5kZXhdLnd3cG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudm1l
X2NvbnRyb2xsZXJzX3RhYmxlW252bWVfY29udHJvbGxlcl9pbmRleF0ubnFuKTsKKwkgIGdydWJf
ZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IG52bWVvZiBjb250cm9sbGVyPSVzXG4iLCBidWYp
OworICAgICAgICAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVmLCAmaWhhbmRsZSkpCisJICAg
IHsKKyAgICAgICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9wZW4g
dGhlIHBhdGg9JXNcbiIsIGJ1Zik7CisgICAgICAgICAgICAgY29udGludWU7CisJICAgIH0KKyAg
ICAgICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmbnZtZV9uYW1lc3BhY2VzX2FyZ3MuY29tbW9u
LCAiY2FsbC1tZXRob2QiLCAyLCAyKTsKKyAgICAgICAgIG52bWVfbmFtZXNwYWNlc19hcmdzLm1l
dGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgImdldC1uYW1lc3BhY2UtbGlzdCI7CisgICAg
ICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgICAgICAgIG52
bWVfbmFtZXNwYWNlc19hcmdzLmNhdGNoX3Jlc3VsdCA9IDA7CisKKwkgIGlmIChJRUVFMTI3NV9D
QUxMX0VOVFJZX0ZOICgmbnZtZV9uYW1lc3BhY2VzX2FyZ3MpID09IC0xKQorICAgICAgICAgICB7
CisgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhl
IG52bWUtbmFtZXNwYWNlLWxpc3Qgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGhcbiIpOwor
ICAgICAgICAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICB9CisgICAgICAgICBncnViX3VpbnQzMl90ICpuYW1lc3Bh
Y2VzID0gKGdydWJfdWludDMyX3QqKSBudm1lX25hbWVzcGFjZXNfYXJncy50YWJsZTsKKyAgICAg
ICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IGZvdW5kICVkIG5hbWVzcGFjZXNc
biIsIChpbnQpbnZtZV9uYW1lc3BhY2VzX2FyZ3MubmVudHJpZXMpOworCSAgZ3J1Yl9pZWVlMTI3
NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICBuYW1lc3BhY2VfaW5kZXggPSAwOworICAgICAg
ICAgZm9yIChuYW1lc3BhY2VfaW5kZXg9MDsgbmFtZXNwYWNlX2luZGV4IDwgbnZtZV9uYW1lc3Bh
Y2VzX2FyZ3MubmVudHJpZXM7IG5hbWVzcGFjZV9pbmRleCsrKQorICAgICAgICAgICB7CisJICAg
ICAgZ3J1Yl9zbnByaW50ZiAoYnVmcHRyK2J1ZnB0cl9wb3MyLCA1MTIsICIvbmFtZXNwYWNlQCUi
UFJJeEdSVUJfVUlOVDMyX1QsIG5hbWVzcGFjZXNbbmFtZXNwYWNlX2luZGV4XSk7CisgICAgICAg
ICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogbmFtZXNwYWNlPSVzXG4iLCBi
dWYpOworICAgICAgICAgICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKyAgICAgICAg
ICAgfQorICAgICAgICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOworCX0KKyAgICB9Cisg
IGdydWJfZnJlZSAoYnVmKTsKKyAgZ3J1Yl9mcmVlIChudm1lX2NvbnRyb2xsZXJzX3RhYmxlKTsK
KyAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorZGV2X2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBn
cnViX2llZWUxMjc1X2RldmFsaWFzICphbGlhcykKK3sKKyAgaWYgKGdydWJfc3RyY21wIChhbGlh
cy0+dHlwZSwgImZjcCIpID09IDApCisgICAgeworICAgICAgLyogSXRlcmF0ZSBkaXNrcyAqLwor
ICAgICAgZGV2X2l0ZXJhdGVfZmNwX2Rpc2tzIChhbGlhcyk7CisgICAgICAvKiBJdGVyYXRlIE5W
TWVvRiAqLworICAgICAgZGV2X2l0ZXJhdGVfZmNwX252bWVvZiAoYWxpYXMpOwogICAgIH0KICAg
ZWxzZSBpZiAoZ3J1Yl9zdHJjbXAgKGFsaWFzLT50eXBlLCAidnNjc2kiKSA9PSAwKQogICAgIHsK
LS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdu
dS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=