From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Dominik 'Rathann' Mierzejewski To: git-commits@fedoraproject.org Subject: [rpms/musescore] f45: Backport upstream PR to add FFmpeg 9 support Date: Tue, 08 Sep 2026 22:50:14 GMT Message-ID: <178890781465.1.17640175874707342719.rpms-musescore-f100664cfe29@fedoraproject.org> List-ID: X-Git-Repo: rpms/musescore X-Git-Branch: f45 X-Git-Rev: f100664cfe2931da4b9cbc091b415887d5b7713d ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvbXVzZXNjb3JlCiAgICAgICAgICAgIEJyYW5jaCA6IGY0NQogICAgICAgICAg ICBDb21taXQgOiBmMTAwNjY0Y2ZlMjkzMWRhNGI5Y2JjMDkxYjQxNTg4N2Q1Yjc3MTNkCiAgICAg ICAgICAgIEF1dGhvciA6IERvbWluaWsgJ1JhdGhhbm4nIE1pZXJ6ZWpld3NraSA8ZG9taW5pa0Bn cmV5c2VjdG9yLm5ldD4KICAgICAgICAgICAgRGF0ZSAgIDogMjAyNi0wOS0wN1QxMjo0Mzo0Nisw MjowMAogICAgICAgICAgICBTdGF0cyAgOiArMjM2MjQvLTEyIGluIDIgZmlsZShzKQogICAgICAg ICAgICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL211c2VzY29y ZS9jL2YxMDA2NjRjZmUyOTMxZGE0YjljYmMwOTFiNDE1ODg3ZDViNzcxM2Q/YnJhbmNoPWY0NQoK ICAgICAgICAgICAgTG9nOgogICAgICAgICAgICBCYWNrcG9ydCB1cHN0cmVhbSBQUiB0byBhZGQg RkZtcGVnIDkgc3VwcG9ydAoKLSBEcm9wIHVubmVjZXNzYXJ5IEJ1aWxkUmVxdWlyZXMgb24gRkZt cGVnICh1c2VzIGJ1bmRsZWQgaGVhZGVycykKCi0tLQpkaWZmIC0tZ2l0IGEvbXVzZXNjb3JlLWZm bXBlZzkucGF0Y2ggYi9tdXNlc2NvcmUtZmZtcGVnOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lNDFiMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVzZXNjb3JlLWZm bXBlZzkucGF0Y2gKQEAgLTAsMCArMSwyMzYwNiBAQAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvQ01ha2VMaXN0cy50eHQuZmZtcGVnOSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9DTWFrZUxpc3RzLnR4dAorLS0tIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL0NNYWtlTGlzdHMudHh0LmZmbXBlZzkJMjAyNi0wNy0wNiAw OTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS9DTWFrZUxpc3RzLnR4dAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MDA4NTk1MyArMDIw MAorQEAgLTM3LDYgKzM3LDExIEBAIHRhcmdldF9zb3VyY2VzKG11c2VfbWVkaWEgUFJJVkFURQor ICAgICBpbnRlcm5hbC9mZm1wZWd1dGlscy5jcHAKKyAgICAgaW50ZXJuYWwvZmZtcGVndXRpbHMu aAorIAorKyAgICBpbnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5jcHAKKysgICAg aW50ZXJuYWwvZmZtcGVnL3Y5L2ZmbXBlZ2xpYmhhbmRsZXIuaAorKyAgICBpbnRlcm5hbC9mZm1w ZWcvdjkvdmlkZW9lbmNvZGVyLmNwcAorKyAgICBpbnRlcm5hbC9mZm1wZWcvdjkvdmlkZW9lbmNv ZGVyLmgKKysKKyAgICAgaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCisg ICAgIGludGVybmFsL2ZmbXBlZy92OC9mZm1wZWdsaWJoYW5kbGVyLmgKKyAgICAgaW50ZXJuYWwv ZmZtcGVnL3Y4L3ZpZGVvZW5jb2Rlci5jcHAKK0BAIC02NCw2ICs2OSwxMiBAQCB0YXJnZXRfc291 cmNlcyhtdXNlX21lZGlhIFBSSVZBVEUKKyApCisgCisgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0 aWVzKAorKyAgICBpbnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5jcHAKKysgICAg aW50ZXJuYWwvZmZtcGVnL3Y5L3ZpZGVvZW5jb2Rlci5jcHAKKysgICAgUFJPUEVSVElFUyBJTkNM VURFX0RJUkVDVE9SSUVTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGhpcmRwYXJ0eS9m Zm1wZWcvdjkiCisrKQorKworK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygKKyAgICAgaW50 ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCisgICAgIGludGVybmFsL2ZmbXBl Zy92OC92aWRlb2VuY29kZXIuY3BwCisgICAgIFBST1BFUlRJRVMgSU5DTFVERV9ESVJFQ1RPUklF UyAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3RoaXJkcGFydHkvZmZtcGVnL3Y4IgorQEAg LTkyLDMgKzEwMyw3IEBAIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygKKyAgICAgaW50ZXJu YWwvZmZtcGVnL3Y0L3ZpZGVvZW5jb2Rlci5jcHAKKyAgICAgUFJPUEVSVElFUyBJTkNMVURFX0RJ UkVDVE9SSUVTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGhpcmRwYXJ0eS9mZm1wZWcv djQiCisgKQorKworK2lmIChNVVNFX01PRFVMRV9NRURJQV9URVNUUykKKysgICAgYWRkX3N1YmRp cmVjdG9yeSh0ZXN0cykKKytlbmRpZigpCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGlscy5jcHAuZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGlscy5jcHAKKy0tLSBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGlscy5j cHAuZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZ3V0aWxzLmNwcAky MDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTIxMjYyOCArMDIwMAorQEAgLTIyLDYgKzIyLDggQEAKKyAK KyAjaW5jbHVkZSAiZmZtcGVndXRpbHMuaCIKKyAKKysjaW5jbHVkZSA8YWxnb3JpdGhtPgorKwor ICNpbmNsdWRlICJpby9maWxlaW5mby5oIgorICNpbmNsdWRlICJpby9wYXRoLmgiCisgCitAQCAt NzEsNyArNzMsNyBAQCBpbzo6cGF0aHNfdCBkZWZhdWx0U2VhcmNoUGF0aHMoKQorICAgICByZXR1 cm4gcGF0aHM7CisgfQorIAorLXN0YXRpYyBGRm1wZWdMaWJQYXRocyBsaWJyYXJ5UGF0aHNGb3JW ZXJzaW9uKGludCBmZm1wZWdWZXIsIGNvbnN0IGlvOjpwYXRoX3QmIHNlYXJjaERpcikKKytzdGF0 aWMgRkZtcGVnTGliUGF0aHMgbGlicmFyeVBhdGhzRm9yVmVyc2lvbihpbnQgZmZtcGVnVmVyLCBj b25zdCBpbzo6cGF0aF90JiBzZWFyY2hEaXIsIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbiBvcmlnaW4p CisgeworICAgICBGRm1wZWdWZXJzaW9uSW5mbyBmZm1wZWdWZXJzaW9uSW5mbzsKKyAgICAgZm9y IChjb25zdCBhdXRvJiBbZmZtcGVnVmVyc2lvbiwgY29tcG9uZW50c1ZlcnNpb25zXSA6IEZGTVBF R19DT01QT05FTlRTX1ZFUlNJT05TKSB7CitAQCAtMTE1LDYgKzExNyw5IEBAIHN0YXRpYyBGRm1w ZWdMaWJQYXRocyBsaWJyYXJ5UGF0aHNGb3JWZXIKKyAgICAgaWYgKGlvOjpGaWxlSW5mbzo6ZXhp c3RzKGF2dXRpbFBhdGgpICYmIGlvOjpGaWxlSW5mbzo6ZXhpc3RzKGF2Y29kZWNQYXRoKQorICAg ICAgICAgJiYgaW86OkZpbGVJbmZvOjpleGlzdHMoYXZmb3JtYXRQYXRoKSAmJiBpbzo6RmlsZUlu Zm86OmV4aXN0cyhzd3NjYWxlUGF0aCkKKyAgICAgICAgICYmIGlvOjpGaWxlSW5mbzo6ZXhpc3Rz KHN3cmVzYW1wbGVQYXRoKSkgeworKyAgICAgICAgcmVzdWx0LmZmbXBlZ1ZlcnNpb24gPSBmZm1w ZWdWZXI7CisrICAgICAgICByZXN1bHQub3JpZ2luID0gb3JpZ2luOworKyAgICAgICAgcmVzdWx0 LnNlYXJjaERpciA9IHNlYXJjaERpcjsKKyAgICAgICAgIHJlc3VsdC5hdlV0aWxQYXRoID0gYXZ1 dGlsUGF0aDsKKyAgICAgICAgIHJlc3VsdC5hdkNvZGVjUGF0aCA9IGF2Y29kZWNQYXRoOworICAg ICAgICAgcmVzdWx0LmF2Rm9ybWF0UGF0aCA9IGF2Zm9ybWF0UGF0aDsKK0BAIC0xNzEsMjkgKzE3 NiwxMTQgQEAgRkZtcGVnVmVyc2lvbiB2ZXJzaW9uRnJvbUFWRm9ybWF0UGF0aChjbworICAgICBy ZXR1cm4gRkZNUEVHX0lOVkFMSURfVkVSU0lPTjsKKyB9CisgCistRkZtcGVnTGliUGF0aHMgZmlu ZExpYnJhcnlQYXRocyhjb25zdCBpbzo6cGF0aF90JiBjb25maWdQYXRoKQorK3N0YXRpYyBpbzo6 cGF0aF90IG5vcm1hbGl6ZWRTZWFyY2hQYXRoKGNvbnN0IGlvOjpwYXRoX3QmIHBhdGgpCisgewor LSAgICBGRm1wZWdMaWJQYXRocyByZXN1bHQ7CisrICAgIGNvbnN0IGlvOjpGaWxlSW5mbyBmaWxl SW5mbyhwYXRoKTsKKysgICAgY29uc3QgU3RyaW5nIGNhbm9uaWNhbFBhdGggPSBmaWxlSW5mby5j YW5vbmljYWxGaWxlUGF0aCgpOworKyAgICByZXR1cm4gY2Fub25pY2FsUGF0aC5lbXB0eSgpID8g aW86OnBhdGhfdChmaWxlSW5mby5hYnNvbHV0ZUZpbGVQYXRoKCkpIDogaW86OnBhdGhfdChjYW5v bmljYWxQYXRoKTsKKyt9CisgCistICAgIGlvOjpwYXRoc190IHNlYXJjaFBhdGhzOworLSAgICBp ZiAoIWNvbmZpZ1BhdGguZW1wdHkoKSAmJiBpbzo6RmlsZUluZm86OmV4aXN0cyhjb25maWdQYXRo KSkgeworLSAgICAgICAgc2VhcmNoUGF0aHMucHVzaF9iYWNrKGlvOjpGaWxlSW5mbyhjb25maWdQ YXRoKS5lbnRyeVR5cGUoKSA9PSBpbzo6RW50cnlUeXBlOjpEaXIKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IGNvbmZpZ1BhdGggOiBpbzo6ZGlycGF0aChjb25maWdQYXRoKSk7Cisr c3RhdGljIFN0cmluZyBzZWFyY2hQYXRoS2V5KGNvbnN0IGlvOjpwYXRoX3QmIHBhdGgpCisrewor KyNpZiBkZWZpbmVkKFFfT1NfV0lOKQorKyAgICByZXR1cm4gcGF0aC50b1N0cmluZygpLnRvTG93 ZXIoKTsKKysjZWxzZQorKyAgICByZXR1cm4gcGF0aC50b1N0cmluZygpOworKyNlbmRpZgorK30K KysKKytzdGF0aWMgYm9vbCBjb250YWluc1NlYXJjaFBhdGgoY29uc3QgaW86OnBhdGhzX3QmIHBh dGhzLCBjb25zdCBpbzo6cGF0aF90JiBwYXRoKQorK3sKKysgICAgY29uc3QgU3RyaW5nIHBhdGhL ZXkgPSBzZWFyY2hQYXRoS2V5KHBhdGgpOworKyAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHBhdGhz LmNiZWdpbigpLCBwYXRocy5jZW5kKCksIFsmcGF0aEtleV0oY29uc3QgaW86OnBhdGhfdCYgY2Fu ZGlkYXRlKSB7CisrICAgICAgICByZXR1cm4gc2VhcmNoUGF0aEtleShjYW5kaWRhdGUpID09IHBh dGhLZXk7CisrICAgIH0pICE9IHBhdGhzLmNlbmQoKTsKKyt9CisrCisrc3RhdGljIGlvOjpwYXRo c190IG5vcm1hbGl6ZWRTZWFyY2hQYXRocyhjb25zdCBpbzo6cGF0aHNfdCYgcGF0aHMpCisrewor KyAgICBpbzo6cGF0aHNfdCByZXN1bHQ7CisrICAgIHJlc3VsdC5yZXNlcnZlKHBhdGhzLnNpemUo KSk7CisrCisrICAgIGZvciAoY29uc3QgaW86OnBhdGhfdCYgcGF0aCA6IHBhdGhzKSB7CisrICAg ICAgICBjb25zdCBpbzo6cGF0aF90IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFNlYXJjaFBh dGgocGF0aCk7CisrICAgICAgICBpZiAobm9ybWFsaXplZFBhdGguZW1wdHkoKSB8fCBjb250YWlu c1NlYXJjaFBhdGgocmVzdWx0LCBub3JtYWxpemVkUGF0aCkpIHsKKysgICAgICAgICAgICBjb250 aW51ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sobm9ybWFsaXpl ZFBhdGgpOworICAgICB9CisgCistICAgIGZvciAoY29uc3QgaW86OnBhdGhfdCYgcCA6IGRlZmF1 bHRTZWFyY2hQYXRocygpKSB7CistICAgICAgICBzZWFyY2hQYXRocy5wdXNoX2JhY2socCk7Cisr ICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXShjb25zdCBpbzo6 cGF0aF90JiBmaXJzdCwgY29uc3QgaW86OnBhdGhfdCYgc2Vjb25kKSB7CisrICAgICAgICByZXR1 cm4gc2VhcmNoUGF0aEtleShmaXJzdCkgPCBzZWFyY2hQYXRoS2V5KHNlY29uZCk7CisrICAgIH0p OworKyAgICByZXR1cm4gcmVzdWx0OworK30KKysKKytzdGF0aWMgdm9pZCBhcHBlbmRMaWJyYXJ5 UGF0aHNGb3JBbGxWZXJzaW9ucyhGRm1wZWdMaWJQYXRoc0xpc3QmIHJlc3VsdCwgY29uc3QgaW86 OnBhdGhfdCYgc2VhcmNoUGF0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGRm1wZWdDYW5kaWRhdGVPcmlnaW4gb3JpZ2luKQorK3sKKysgICAgZm9yIChj b25zdCBhdXRvJiBbZmZtcGVnVmVyc2lvbiwgX10gOiBGRk1QRUdfQ09NUE9ORU5UU19WRVJTSU9O UykgeworKyAgICAgICAgRkZtcGVnTGliUGF0aHMgcGF0aHMgPSBsaWJyYXJ5UGF0aHNGb3JWZXJz aW9uKGZmbXBlZ1ZlcnNpb24sIHNlYXJjaFBhdGgsIG9yaWdpbik7CisrICAgICAgICBpZiAoIXBh dGhzLmF2Rm9ybWF0UGF0aC5lbXB0eSgpKSB7CisrICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj ayhzdGQ6Om1vdmUocGF0aHMpKTsKKysgICAgICAgIH0KKyAgICAgfQorK30KKyAKKy0gICAgZm9y IChjb25zdCBpbzo6cGF0aF90JiBwYXRoIDogc2VhcmNoUGF0aHMpIHsKKy0gICAgICAgIGZvciAo Y29uc3QgYXV0byYgW2ZmbXBlZ1ZlciwgX10gOiBGRk1QRUdfQ09NUE9ORU5UU19WRVJTSU9OUykg eworLSAgICAgICAgICAgIHJlc3VsdCA9IGxpYnJhcnlQYXRoc0ZvclZlcnNpb24oZmZtcGVnVmVy LCBwYXRoKTsKKy0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hdkZvcm1hdFBhdGguZW1wdHkoKSkg eworLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICAgICAgICAgIH0KKytGRm1w ZWdMaWJQYXRoc0xpc3QgZmluZExpYnJhcnlQYXRocyhjb25zdCBpbzo6cGF0aF90JiBjb25maWdQ YXRoKQorK3sKKysgICAgcmV0dXJuIGZpbmRMaWJyYXJ5UGF0aHMoY29uZmlnUGF0aCwgZGVmYXVs dFNlYXJjaFBhdGhzKCkpOworK30KKysKKytGRm1wZWdMaWJQYXRoc0xpc3QgZmluZExpYnJhcnlQ YXRocyhjb25zdCBpbzo6cGF0aF90JiBjb25maWdQYXRoLCBjb25zdCBpbzo6cGF0aHNfdCYgZGVm YXVsdFBhdGhzKQorK3sKKysgICAgRkZtcGVnTGliUGF0aHNMaXN0IHJlc3VsdDsKKysgICAgY29u c3QgaW86OnBhdGhzX3QgYXV0b21hdGljU2VhcmNoUGF0aHMgPSBub3JtYWxpemVkU2VhcmNoUGF0 aHMoZGVmYXVsdFBhdGhzKTsKKysKKysgICAgaWYgKCFjb25maWdQYXRoLmVtcHR5KCkgJiYgaW86 OkZpbGVJbmZvOjpleGlzdHMoY29uZmlnUGF0aCkpIHsKKysgICAgICAgIGNvbnN0IGlvOjpwYXRo X3QgY29uZmlndXJlZFNlYXJjaFBhdGggPSBub3JtYWxpemVkU2VhcmNoUGF0aCgKKysgICAgICAg ICAgICBpbzo6RmlsZUluZm8oY29uZmlnUGF0aCkuZW50cnlUeXBlKCkgPT0gaW86OkVudHJ5VHlw ZTo6RGlyID8gY29uZmlnUGF0aCA6IGlvOjpkaXJwYXRoKGNvbmZpZ1BhdGgpKTsKKysKKysgICAg ICAgIGlmICghY29udGFpbnNTZWFyY2hQYXRoKGF1dG9tYXRpY1NlYXJjaFBhdGhzLCBjb25maWd1 cmVkU2VhcmNoUGF0aCkpIHsKKysgICAgICAgICAgICBhcHBlbmRMaWJyYXJ5UGF0aHNGb3JBbGxW ZXJzaW9ucyhyZXN1bHQsIGNvbmZpZ3VyZWRTZWFyY2hQYXRoLCBGRm1wZWdDYW5kaWRhdGVPcmln aW46OkNvbmZpZ3VyZWQpOworICAgICAgICAgfQorICAgICB9CisgCisrICAgIEZGbXBlZ0xpYlBh dGhzTGlzdCBhdXRvbWF0aWNDYW5kaWRhdGVzOworKyAgICBmb3IgKGNvbnN0IGlvOjpwYXRoX3Qm IHBhdGggOiBhdXRvbWF0aWNTZWFyY2hQYXRocykgeworKyAgICAgICAgYXBwZW5kTGlicmFyeVBh dGhzRm9yQWxsVmVyc2lvbnMoYXV0b21hdGljQ2FuZGlkYXRlcywgcGF0aCwgRkZtcGVnQ2FuZGlk YXRlT3JpZ2luOjpBdXRvbWF0aWMpOworKyAgICB9CisrCisrICAgIHN0ZDo6c29ydChhdXRvbWF0 aWNDYW5kaWRhdGVzLmJlZ2luKCksIGF1dG9tYXRpY0NhbmRpZGF0ZXMuZW5kKCksIFtdKGNvbnN0 IEZGbXBlZ0xpYlBhdGhzJiBmaXJzdCwgY29uc3QgRkZtcGVnTGliUGF0aHMmIHNlY29uZCkgewor KyAgICAgICAgaWYgKGZpcnN0LmZmbXBlZ1ZlcnNpb24gIT0gc2Vjb25kLmZmbXBlZ1ZlcnNpb24p IHsKKysgICAgICAgICAgICByZXR1cm4gZmlyc3QuZmZtcGVnVmVyc2lvbiA+IHNlY29uZC5mZm1w ZWdWZXJzaW9uOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHNlYXJjaFBhdGhLZXkoZmly c3Quc2VhcmNoRGlyKSA8IHNlYXJjaFBhdGhLZXkoc2Vjb25kLnNlYXJjaERpcik7CisrICAgIH0p OworKworKyAgICByZXN1bHQuaW5zZXJ0KHJlc3VsdC5lbmQoKSwgYXV0b21hdGljQ2FuZGlkYXRl cy5jYmVnaW4oKSwgYXV0b21hdGljQ2FuZGlkYXRlcy5jZW5kKCkpOworKworICAgICByZXR1cm4g cmVzdWx0OworIH0KKysKKytzdGQ6Om9wdGlvbmFsPGlvOjpwYXRoX3Q+IGNvbmZpZ3VyZWRQYXRo VG9QZXJzaXN0KGNvbnN0IGlvOjpwYXRoX3QmIHJlcXVlc3RlZFBhdGgsIGNvbnN0IEZGbXBlZ0xp YlBhdGhzJiBsb2FkZWRDYW5kaWRhdGUpCisreworKyAgICBpZiAocmVxdWVzdGVkUGF0aC5lbXB0 eSgpKSB7CisrICAgICAgICByZXR1cm4gaW86OnBhdGhfdCgpOworKyAgICB9CisrCisrICAgIGNv bnN0IGlvOjpGaWxlSW5mbyByZXF1ZXN0ZWRGaWxlSW5mbyhyZXF1ZXN0ZWRQYXRoKTsKKysgICAg aWYgKCFyZXF1ZXN0ZWRGaWxlSW5mby5leGlzdHMoKSkgeworKyAgICAgICAgcmV0dXJuIHN0ZDo6 bnVsbG9wdDsKKysgICAgfQorKworKyAgICBjb25zdCBpbzo6cGF0aF90IHJlcXVlc3RlZFNlYXJj aFBhdGggPSBub3JtYWxpemVkU2VhcmNoUGF0aCgKKysgICAgICAgIHJlcXVlc3RlZEZpbGVJbmZv LmVudHJ5VHlwZSgpID09IGlvOjpFbnRyeVR5cGU6OkRpciA/IHJlcXVlc3RlZFBhdGggOiBpbzo6 ZGlycGF0aChyZXF1ZXN0ZWRQYXRoKSk7CisrICAgIGlmIChzZWFyY2hQYXRoS2V5KHJlcXVlc3Rl ZFNlYXJjaFBhdGgpICE9IHNlYXJjaFBhdGhLZXkobG9hZGVkQ2FuZGlkYXRlLnNlYXJjaERpcikp IHsKKysgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisrICAgIH0KKysKKysgICAgcmV0dXJu IHJlcXVlc3RlZFNlYXJjaFBhdGg7CisrfQorIH0KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZ3V0aWxzLmguZmZtcGVnOSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGlscy5oCistLS0g TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVndXRpbHMu aC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICswMjAwCisrKysgTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVndXRpbHMuaAkyMDI2 LTA5LTA3IDEyOjIzOjQ3LjY4MTI3OTk1MSArMDIwMAorQEAgLTIyLDYgKzIyLDcgQEAKKyAKKyAj cHJhZ21hIG9uY2UKKyAKKysjaW5jbHVkZSA8b3B0aW9uYWw+CisgI2luY2x1ZGUgPHZlY3Rvcj4K KyAKKyAjaW5jbHVkZSAiaW8vcGF0aC5oIgorQEAgLTI5LDYgKzMwLDcgQEAKKyAjaW5jbHVkZSAi Li4vbWVkaWF0eXBlcy5oIgorIAorIG5hbWVzcGFjZSBtdXNlOjptZWRpYSB7Cisrc3RhdGljIGNv bnN0IEZGbXBlZ1ZlcnNpb24gRkZNUEVHX1Y5ID0gOTsKKyBzdGF0aWMgY29uc3QgRkZtcGVnVmVy c2lvbiBGRk1QRUdfVjggPSA4OworIHN0YXRpYyBjb25zdCBGRm1wZWdWZXJzaW9uIEZGTVBFR19W NyA9IDc7Cisgc3RhdGljIGNvbnN0IEZGbXBlZ1ZlcnNpb24gRkZNUEVHX1Y2ID0gNjsKK0BAIC01 MCw2ICs1Miw3IEBAIHN0cnVjdCBGRm1wZWdWZXJzaW9uSW5mbyB7CisgCisgc3RhdGljIGNvbnN0 IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxpbnQsIEZGbXBlZ1ZlcnNpb25JbmZvPiA+IEZGTVBFR19D T01QT05FTlRTX1ZFUlNJT05TID0geworICAgICAvLyBmZm1wZWcgICAgICAgICAgIGF2Rm9ybWF0 ICAgIGF2VXRpbCAgICAgIGF2Q29kZWMgICAgIHN3U2NhbGUgICAgc3dSZXNhbXBsZQorKyAgICB7 IEZGTVBFR19WOSwgICAgICAgIHsgNjMsICAgICAgIDYxLCAgICAgICAgIDYzLCAgICAgICAgIDEw LCAgICAgICAgNyB9IH0sCisgICAgIHsgRkZNUEVHX1Y4LCAgICAgICAgeyA2MiwgICAgICAgNjAs ICAgICAgICAgNjIsICAgICAgICAgOSwgICAgICAgICA2IH0gfSwKKyAgICAgeyBGRk1QRUdfVjcs ICAgICAgICB7IDYxLCAgICAgICA1OSwgICAgICAgICA2MSwgICAgICAgICA4LCAgICAgICAgIDUg fSB9LAorICAgICB7IEZGTVBFR19WNiwgICAgICAgIHsgNjAsICAgICAgIDU4LCAgICAgICAgIDYw LCAgICAgICAgIDcsICAgICAgICAgNCB9IH0sCitAQCAtNTcsNyArNjAsMTUgQEAgc3RhdGljIGNv bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxpbnQsCisgICAgIHsgRkZNUEVHX1Y0LCAgICAgICAg eyA1OCwgICAgICAgNTYsICAgICAgICAgNTgsICAgICAgICAgNSwgICAgICAgICAzIH0gfSwKKyB9 OworIAorK2VudW0gY2xhc3MgRkZtcGVnQ2FuZGlkYXRlT3JpZ2luIHsKKysgICAgQXV0b21hdGlj LAorKyAgICBDb25maWd1cmVkCisrfTsKKysKKyBzdHJ1Y3QgRkZtcGVnTGliUGF0aHMgeworKyAg ICBGRm1wZWdWZXJzaW9uIGZmbXBlZ1ZlcnNpb24gPSBGRk1QRUdfSU5WQUxJRF9WRVJTSU9OOwor KyAgICBGRm1wZWdDYW5kaWRhdGVPcmlnaW4gb3JpZ2luID0gRkZtcGVnQ2FuZGlkYXRlT3JpZ2lu OjpBdXRvbWF0aWM7CisrICAgIGlvOjpwYXRoX3Qgc2VhcmNoRGlyOworICAgICBpbzo6cGF0aF90 IGF2VXRpbFBhdGg7CisgICAgIGlvOjpwYXRoX3QgYXZDb2RlY1BhdGg7CisgICAgIGlvOjpwYXRo X3QgYXZGb3JtYXRQYXRoOworQEAgLTY1LDggKzc2LDEyIEBAIHN0cnVjdCBGRm1wZWdMaWJQYXRo cyB7CisgICAgIGlvOjpwYXRoX3Qgc3dSZXNhbXBsZVBhdGg7CisgfTsKKyAKKyt1c2luZyBGRm1w ZWdMaWJQYXRoc0xpc3QgPSBzdGQ6OnZlY3RvcjxGRm1wZWdMaWJQYXRocz47CisrCisgaW86OnBh dGhzX3QgZGVmYXVsdFNlYXJjaFBhdGhzKCk7CisgCistRkZtcGVnTGliUGF0aHMgZmluZExpYnJh cnlQYXRocyhjb25zdCBpbzo6cGF0aF90JiBmZm1wZWdMaWJzRGlyKTsKKytGRm1wZWdMaWJQYXRo c0xpc3QgZmluZExpYnJhcnlQYXRocyhjb25zdCBpbzo6cGF0aF90JiBmZm1wZWdMaWJzRGlyKTsK KytGRm1wZWdMaWJQYXRoc0xpc3QgZmluZExpYnJhcnlQYXRocyhjb25zdCBpbzo6cGF0aF90JiBm Zm1wZWdMaWJzRGlyLCBjb25zdCBpbzo6cGF0aHNfdCYgZGVmYXVsdFBhdGhzKTsKKytzdGQ6Om9w dGlvbmFsPGlvOjpwYXRoX3Q+IGNvbmZpZ3VyZWRQYXRoVG9QZXJzaXN0KGNvbnN0IGlvOjpwYXRo X3QmIHJlcXVlc3RlZFBhdGgsIGNvbnN0IEZGbXBlZ0xpYlBhdGhzJiBsb2FkZWRDYW5kaWRhdGUp OworIEZGbXBlZ1ZlcnNpb24gdmVyc2lvbkZyb21BVkZvcm1hdFBhdGgoY29uc3QgaW86OnBhdGhf dCYgcGF0aCk7CisgfQorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvaW50ZXJuYWwvZmZtcGVnL3Y0L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwLmZmbXBlZzkgTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y0L2ZmbXBlZ2xp YmhhbmRsZXIuY3BwCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50 ZXJuYWwvZmZtcGVnL3Y0L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwLmZmbXBlZzkJMjAyNi0wNy0wNiAw OTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjQvZmZtcGVnbGliaGFuZGxlci5jcHAJMjAyNi0wOS0w NyAxMjoyMzo0Ny42ODE1MDU1ODggKzAyMDAKK0BAIC0yMiwxMCArMjIsNiBAQAorIAorICNpbmNs dWRlICJmZm1wZWdsaWJoYW5kbGVyLmgiCisgCistI2lmICFkZWZpbmVkKFFfT1NfV0lOKQorLSNp bmNsdWRlIDxkbGZjbi5oPgorLSNlbmRpZgorLQorICNpbmNsdWRlICJpby9maWxlaW5mby5oIgor ICNpbmNsdWRlICJnbG9iYWwvZGxpYi5oIgorIAorQEAgLTM0LDIxICszMCwyMCBAQAorIG5hbWVz cGFjZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2NCB7CisgI2RlZmluZSBSRVNPTFZFX0ZST00obGli LCBuYW1lKSBkbyB7IFwKKyAgICAgICAgIG5hbWUgPSByZWludGVycHJldF9jYXN0PGRlY2x0eXBl KG5hbWUpPihnZXRTeW1ib2wobGliLCAjbmFtZSkpOyBcCistICAgICAgICBpZiAoIW5hbWUpIHsg TE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIgI25hbWU7IHJldHVybiBmYWxzZTsg fSBcCisrICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3lt Ym9sICIgI25hbWU7IGNsZWFyRnVuY3Rpb25zKCk7IHJldHVybiBmYWxzZTsgfSBcCisgfSB3aGls ZSAoMCkKKyAKKytGRm1wZWdMaWJIYW5kbGVyOjp+RkZtcGVnTGliSGFuZGxlcigpCisreworKyAg ICB1bmxvYWQoKTsKKyt9CisrCisgdm9pZCogRkZtcGVnTGliSGFuZGxlcjo6Z2V0U3ltYm9sKHZv aWQqIGxpYiwgY29uc3QgY2hhciogbmFtZSkgY29uc3QKKyB7CisgICAgIGlmICghbGliKSB7Cisg ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgfQorLSAgICB2b2lkKiBzeW0gPSBtdXNlOjpn ZXRMaWJGdW5jKGxpYiwgbmFtZSk7CistICAgIGlmICghc3ltKSB7CistI2lmICFkZWZpbmVkKFFf T1NfV0lOKQorLSAgICAgICAgc3ltID0gZGxzeW0oUlRMRF9ERUZBVUxULCBuYW1lKTsKKy0jZW5k aWYKKy0gICAgfQorLSAgICByZXR1cm4gc3ltOworKyAgICByZXR1cm4gbXVzZTo6Z2V0TGliRnVu YyhsaWIsIG5hbWUpOworIH0KKyAKKyBib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRBcGkoKQor QEAgLTEyMiw2ICsxMTcsNyBAQCBib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRMaWIoY29uc3Qg aW86CisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9zd3NTY2FsZUxpYnJhcnksIHN3U2NhbGVQ YXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZDb2RlY0xpYnJhcnksIGF2Q29kZWNQ YXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZGb3JtYXRMaWJyYXJ5LCBhdkZvcm1h dFBhdGgpKSB7CisrICAgICAgICB1bmxvYWQoKTsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg ICAgfQorIAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50 ZXJuYWwvZmZtcGVnL3Y0L2ZmbXBlZ2xpYmhhbmRsZXIuaC5mZm1wZWc5IE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92NC9mZm1wZWdsaWJoYW5kbGVy LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1w ZWcvdjQvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAw MDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRl cm5hbC9mZm1wZWcvdjQvZmZtcGVnbGliaGFuZGxlci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgx NTU2NzY3ICswMjAwCitAQCAtNDQsNiArNDQsOSBAQCBjbGFzcyBGRm1wZWdMaWJIYW5kbGVyCisg eworIHB1YmxpYzoKKyAgICAgRkZtcGVnTGliSGFuZGxlcigpID0gZGVmYXVsdDsKKysgICAgfkZG bXBlZ0xpYkhhbmRsZXIoKTsKKysgICAgRkZtcGVnTGliSGFuZGxlcihjb25zdCBGRm1wZWdMaWJI YW5kbGVyJikgPSBkZWxldGU7CisrICAgIEZGbXBlZ0xpYkhhbmRsZXImIG9wZXJhdG9yPShjb25z dCBGRm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7CisgCisgICAgIGJvb2wgbG9hZExpYihjb25z dCBpbzo6cGF0aF90JiBhdlV0aWxQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkNvZGVjUGF0aCwg Y29uc3QgaW86OnBhdGhfdCYgYXZGb3JtYXRQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBzd1NjYWxl UGF0aCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGlvOjpwYXRoX3QmIHN3UmVzYW1wbGVQYXRo KTsKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFs L2ZmbXBlZy92NS9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92NS9mZm1wZWdsaWJoYW5kbGVyLmNw cAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92NS9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAw MDAwMDAwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50 ZXJuYWwvZmZtcGVnL3Y1L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCTIwMjYtMDktMDcgMTI6MjM6NDcu NjgxNjEwMjQzICswMjAwCitAQCAtMjIsMTAgKzIyLDYgQEAKKyAKKyAjaW5jbHVkZSAiZmZtcGVn bGliaGFuZGxlci5oIgorIAorLSNpZiAhZGVmaW5lZChRX09TX1dJTikKKy0jaW5jbHVkZSA8ZGxm Y24uaD4KKy0jZW5kaWYKKy0KKyAjaW5jbHVkZSAiaW8vZmlsZWluZm8uaCIKKyAjaW5jbHVkZSAi Z2xvYmFsL2RsaWIuaCIKKyAKK0BAIC0zNCwyMSArMzAsMjAgQEAKKyBuYW1lc3BhY2UgbXVzZTo6 bWVkaWE6OmZmbXBlZzo6djUgeworICNkZWZpbmUgUkVTT0xWRV9GUk9NKGxpYiwgbmFtZSkgZG8g eyBcCisgICAgICAgICBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxkZWNsdHlwZShuYW1lKT4oZ2V0 U3ltYm9sKGxpYiwgI25hbWUpKTsgXAorLSAgICAgICAgaWYgKCFuYW1lKSB7IExPR1coKSA8PCAi RkZtcGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyByZXR1cm4gZmFsc2U7IH0gXAorKyAgICAg ICAgaWYgKCFuYW1lKSB7IExPR1coKSA8PCAiRkZtcGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1l OyBjbGVhckZ1bmN0aW9ucygpOyByZXR1cm4gZmFsc2U7IH0gXAorIH0gd2hpbGUgKDApCisgCisr RkZtcGVnTGliSGFuZGxlcjo6fkZGbXBlZ0xpYkhhbmRsZXIoKQorK3sKKysgICAgdW5sb2FkKCk7 CisrfQorKworIHZvaWQqIEZGbXBlZ0xpYkhhbmRsZXI6OmdldFN5bWJvbCh2b2lkKiBsaWIsIGNv bnN0IGNoYXIqIG5hbWUpIGNvbnN0CisgeworICAgICBpZiAoIWxpYikgeworICAgICAgICAgcmV0 dXJuIG51bGxwdHI7CisgICAgIH0KKy0gICAgdm9pZCogc3ltID0gbXVzZTo6Z2V0TGliRnVuYyhs aWIsIG5hbWUpOworLSAgICBpZiAoIXN5bSkgeworLSNpZiAhZGVmaW5lZChRX09TX1dJTikKKy0g ICAgICAgIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwgbmFtZSk7CistI2VuZGlmCistICAgIH0K Ky0gICAgcmV0dXJuIHN5bTsKKysgICAgcmV0dXJuIG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1l KTsKKyB9CisgCisgYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjpsb2FkQXBpKCkKK0BAIC0xMjIsNiAr MTE3LDcgQEAgYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjpsb2FkTGliKGNvbnN0IGlvOgorICAgICAg ICAgfHwgIXRyeUxvYWRQYXRoKG1fc3dzU2NhbGVMaWJyYXJ5LCBzd1NjYWxlUGF0aCkKKyAgICAg ICAgIHx8ICF0cnlMb2FkUGF0aChtX2F2Q29kZWNMaWJyYXJ5LCBhdkNvZGVjUGF0aCkKKyAgICAg ICAgIHx8ICF0cnlMb2FkUGF0aChtX2F2Rm9ybWF0TGlicmFyeSwgYXZGb3JtYXRQYXRoKSkgewor KyAgICAgICAgdW5sb2FkKCk7CisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKyAKK2Rp ZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92NS9mZm1wZWdsaWJoYW5kbGVyLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjUvZmZtcGVnbGliaGFuZGxlci5oCistLS0gTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y1L2ZmbXBl Z2xpYmhhbmRsZXIuaC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICswMjAw CisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVn L3Y1L2ZmbXBlZ2xpYmhhbmRsZXIuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTY2MDI4NiArMDIw MAorQEAgLTQ0LDYgKzQ0LDkgQEAgY2xhc3MgRkZtcGVnTGliSGFuZGxlcgorIHsKKyBwdWJsaWM6 CisgICAgIEZGbXBlZ0xpYkhhbmRsZXIoKSA9IGRlZmF1bHQ7CisrICAgIH5GRm1wZWdMaWJIYW5k bGVyKCk7CisrICAgIEZGbXBlZ0xpYkhhbmRsZXIoY29uc3QgRkZtcGVnTGliSGFuZGxlciYpID0g ZGVsZXRlOworKyAgICBGRm1wZWdMaWJIYW5kbGVyJiBvcGVyYXRvcj0oY29uc3QgRkZtcGVnTGli SGFuZGxlciYpID0gZGVsZXRlOworIAorICAgICBib29sIGxvYWRMaWIoY29uc3QgaW86OnBhdGhf dCYgYXZVdGlsUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZDb2RlY1BhdGgsIGNvbnN0IGlvOjpw YXRoX3QmIGF2Rm9ybWF0UGF0aCwgY29uc3QgaW86OnBhdGhfdCYgc3dTY2FsZVBhdGgsCisgICAg ICAgICAgICAgICAgICBjb25zdCBpbzo6cGF0aF90JiBzd1Jlc2FtcGxlUGF0aCk7CitkaWZmIC11 cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjYv ZmZtcGVnbGliaGFuZGxlci5jcHAuZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjYvZmZtcGVnbGliaGFuZGxlci5jcHAKKy0tLSBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjYvZmZtcGVn bGliaGFuZGxlci5jcHAuZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIw MAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92Ni9mZm1wZWdsaWJoYW5kbGVyLmNwcAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTcyMzkxOSAr MDIwMAorQEAgLTIyLDEwICsyMiw2IEBACisgCisgI2luY2x1ZGUgImZmbXBlZ2xpYmhhbmRsZXIu aCIKKyAKKy0jaWYgIWRlZmluZWQoUV9PU19XSU4pCistI2luY2x1ZGUgPGRsZmNuLmg+CistI2Vu ZGlmCistCisgI2luY2x1ZGUgImlvL2ZpbGVpbmZvLmgiCisgI2luY2x1ZGUgImdsb2JhbC9kbGli LmgiCisgCitAQCAtMzQsMjEgKzMwLDIwIEBACisgbmFtZXNwYWNlIG11c2U6Om1lZGlhOjpmZm1w ZWc6OnY2IHsKKyAjZGVmaW5lIFJFU09MVkVfRlJPTShsaWIsIG5hbWUpIGRvIHsgXAorICAgICAg ICAgbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZGVjbHR5cGUobmFtZSk+KGdldFN5bWJvbChsaWIs ICNuYW1lKSk7IFwKKy0gICAgICAgIGlmICghbmFtZSkgeyBMT0dXKCkgPDwgIkZGbXBlZzogbWlz c2luZyBzeW1ib2wgIiAjbmFtZTsgcmV0dXJuIGZhbHNlOyB9IFwKKysgICAgICAgIGlmICghbmFt ZSkgeyBMT0dXKCkgPDwgIkZGbXBlZzogbWlzc2luZyBzeW1ib2wgIiAjbmFtZTsgY2xlYXJGdW5j dGlvbnMoKTsgcmV0dXJuIGZhbHNlOyB9IFwKKyB9IHdoaWxlICgwKQorIAorK0ZGbXBlZ0xpYkhh bmRsZXI6On5GRm1wZWdMaWJIYW5kbGVyKCkKKyt7CisrICAgIHVubG9hZCgpOworK30KKysKKyB2 b2lkKiBGRm1wZWdMaWJIYW5kbGVyOjpnZXRTeW1ib2wodm9pZCogbGliLCBjb25zdCBjaGFyKiBu YW1lKSBjb25zdAorIHsKKyAgICAgaWYgKCFsaWIpIHsKKyAgICAgICAgIHJldHVybiBudWxscHRy OworICAgICB9CistICAgIHZvaWQqIHN5bSA9IG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsK Ky0gICAgaWYgKCFzeW0pIHsKKy0jaWYgIWRlZmluZWQoUV9PU19XSU4pCistICAgICAgICBzeW0g PSBkbHN5bShSVExEX0RFRkFVTFQsIG5hbWUpOworLSNlbmRpZgorLSAgICB9CistICAgIHJldHVy biBzeW07CisrICAgIHJldHVybiBtdXNlOjpnZXRMaWJGdW5jKGxpYiwgbmFtZSk7CisgfQorIAor IGJvb2wgRkZtcGVnTGliSGFuZGxlcjo6bG9hZEFwaSgpCitAQCAtMTIyLDYgKzExNyw3IEBAIGJv b2wgRkZtcGVnTGliSGFuZGxlcjo6bG9hZExpYihjb25zdCBpbzoKKyAgICAgICAgIHx8ICF0cnlM b2FkUGF0aChtX3N3c1NjYWxlTGlicmFyeSwgc3dTY2FsZVBhdGgpCisgICAgICAgICB8fCAhdHJ5 TG9hZFBhdGgobV9hdkNvZGVjTGlicmFyeSwgYXZDb2RlY1BhdGgpCisgICAgICAgICB8fCAhdHJ5 TG9hZFBhdGgobV9hdkZvcm1hdExpYnJhcnksIGF2Rm9ybWF0UGF0aCkpIHsKKysgICAgICAgIHVu bG9hZCgpOworICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisgCitkaWZmIC11cCBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjYvZmZtcGVn bGliaGFuZGxlci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv aW50ZXJuYWwvZmZtcGVnL3Y2L2ZmbXBlZ2xpYmhhbmRsZXIuaAorLS0tIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92Ni9mZm1wZWdsaWJoYW5kbGVy LmguZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92Ni9mZm1wZWds aWJoYW5kbGVyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODE3ODA3NTEgKzAyMDAKK0BAIC00NCw2 ICs0NCw5IEBAIGNsYXNzIEZGbXBlZ0xpYkhhbmRsZXIKKyB7CisgcHVibGljOgorICAgICBGRm1w ZWdMaWJIYW5kbGVyKCkgPSBkZWZhdWx0OworKyAgICB+RkZtcGVnTGliSGFuZGxlcigpOworKyAg ICBGRm1wZWdMaWJIYW5kbGVyKGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKysg ICAgRkZtcGVnTGliSGFuZGxlciYgb3BlcmF0b3I9KGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9 IGRlbGV0ZTsKKyAKKyAgICAgYm9vbCBsb2FkTGliKGNvbnN0IGlvOjpwYXRoX3QmIGF2VXRpbFBh dGgsIGNvbnN0IGlvOjpwYXRoX3QmIGF2Q29kZWNQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkZv cm1hdFBhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIHN3U2NhbGVQYXRoLAorICAgICAgICAgICAgICAg ICAgY29uc3QgaW86OnBhdGhfdCYgc3dSZXNhbXBsZVBhdGgpOworZGlmZiAtdXAgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y3L2ZmbXBlZ2xpYmhh bmRsZXIuY3BwLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50 ZXJuYWwvZmZtcGVnL3Y3L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCistLS0gTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y3L2ZmbXBlZ2xpYmhhbmRsZXIu Y3BwLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVn bGliaGFuZGxlci5jcHAJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODE4NDczODAgKzAyMDAKK0BAIC0y MiwxMCArMjIsNiBAQAorIAorICNpbmNsdWRlICJmZm1wZWdsaWJoYW5kbGVyLmgiCisgCistI2lm ICFkZWZpbmVkKFFfT1NfV0lOKQorLSNpbmNsdWRlIDxkbGZjbi5oPgorLSNlbmRpZgorLQorICNp bmNsdWRlICJpby9maWxlaW5mby5oIgorICNpbmNsdWRlICJnbG9iYWwvZGxpYi5oIgorIAorQEAg LTM0LDIxICszMCwyMCBAQAorIG5hbWVzcGFjZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2NyB7Cisg I2RlZmluZSBSRVNPTFZFX0ZST00obGliLCBuYW1lKSBkbyB7IFwKKyAgICAgICAgIG5hbWUgPSBy ZWludGVycHJldF9jYXN0PGRlY2x0eXBlKG5hbWUpPihnZXRTeW1ib2wobGliLCAjbmFtZSkpOyBc CistICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9s ICIgI25hbWU7IHJldHVybiBmYWxzZTsgfSBcCisrICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygp IDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIgI25hbWU7IGNsZWFyRnVuY3Rpb25zKCk7IHJl dHVybiBmYWxzZTsgfSBcCisgfSB3aGlsZSAoMCkKKyAKKytGRm1wZWdMaWJIYW5kbGVyOjp+RkZt cGVnTGliSGFuZGxlcigpCisreworKyAgICB1bmxvYWQoKTsKKyt9CisrCisgdm9pZCogRkZtcGVn TGliSGFuZGxlcjo6Z2V0U3ltYm9sKHZvaWQqIGxpYiwgY29uc3QgY2hhciogbmFtZSkgY29uc3QK KyB7CisgICAgIGlmICghbGliKSB7CisgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgfQor LSAgICB2b2lkKiBzeW0gPSBtdXNlOjpnZXRMaWJGdW5jKGxpYiwgbmFtZSk7CistICAgIGlmICgh c3ltKSB7CistI2lmICFkZWZpbmVkKFFfT1NfV0lOKQorLSAgICAgICAgc3ltID0gZGxzeW0oUlRM RF9ERUZBVUxULCBuYW1lKTsKKy0jZW5kaWYKKy0gICAgfQorLSAgICByZXR1cm4gc3ltOworKyAg ICByZXR1cm4gbXVzZTo6Z2V0TGliRnVuYyhsaWIsIG5hbWUpOworIH0KKyAKKyBib29sIEZGbXBl Z0xpYkhhbmRsZXI6OmxvYWRBcGkoKQorQEAgLTEyMiw2ICsxMTcsNyBAQCBib29sIEZGbXBlZ0xp YkhhbmRsZXI6OmxvYWRMaWIoY29uc3QgaW86CisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9z d3NTY2FsZUxpYnJhcnksIHN3U2NhbGVQYXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1f YXZDb2RlY0xpYnJhcnksIGF2Q29kZWNQYXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1f YXZGb3JtYXRMaWJyYXJ5LCBhdkZvcm1hdFBhdGgpKSB7CisrICAgICAgICB1bmxvYWQoKTsKKyAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorIAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y3L2ZmbXBlZ2xpYmhhbmRsZXIu aC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2Zm bXBlZy92Ny9mZm1wZWdsaWJoYW5kbGVyLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkJ MjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVnbGliaGFuZGxlci5o CTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxODk5MTczICswMjAwCitAQCAtNDQsNiArNDQsOSBAQCBj bGFzcyBGRm1wZWdMaWJIYW5kbGVyCisgeworIHB1YmxpYzoKKyAgICAgRkZtcGVnTGliSGFuZGxl cigpID0gZGVmYXVsdDsKKysgICAgfkZGbXBlZ0xpYkhhbmRsZXIoKTsKKysgICAgRkZtcGVnTGli SGFuZGxlcihjb25zdCBGRm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7CisrICAgIEZGbXBlZ0xp YkhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBGRm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7Cisg CisgICAgIGJvb2wgbG9hZExpYihjb25zdCBpbzo6cGF0aF90JiBhdlV0aWxQYXRoLCBjb25zdCBp bzo6cGF0aF90JiBhdkNvZGVjUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZGb3JtYXRQYXRoLCBj b25zdCBpbzo6cGF0aF90JiBzd1NjYWxlUGF0aCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGlv OjpwYXRoX3QmIHN3UmVzYW1wbGVQYXRoKTsKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OC9mZm1wZWdsaWJoYW5kbGVyLmNwcC5m Zm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92OC9mZm1wZWdsaWJoYW5kbGVyLmNwcAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OC9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5 CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIu Y3BwCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxOTU5OTEwICswMjAwCitAQCAtMjIsMTAgKzIyLDYg QEAKKyAKKyAjaW5jbHVkZSAiZmZtcGVnbGliaGFuZGxlci5oIgorIAorLSNpZiAhZGVmaW5lZChR X09TX1dJTikKKy0jaW5jbHVkZSA8ZGxmY24uaD4KKy0jZW5kaWYKKy0KKyAjaW5jbHVkZSAiaW8v ZmlsZWluZm8uaCIKKyAjaW5jbHVkZSAiZ2xvYmFsL2RsaWIuaCIKKyAKK0BAIC0zNCwyMSArMzAs MjAgQEAKKyBuYW1lc3BhY2UgbXVzZTo6bWVkaWE6OmZmbXBlZzo6djggeworICNkZWZpbmUgUkVT T0xWRV9GUk9NKGxpYiwgbmFtZSkgZG8geyBcCisgICAgICAgICBuYW1lID0gcmVpbnRlcnByZXRf Y2FzdDxkZWNsdHlwZShuYW1lKT4oZ2V0U3ltYm9sKGxpYiwgI25hbWUpKTsgXAorLSAgICAgICAg aWYgKCFuYW1lKSB7IExPR1coKSA8PCAiRkZtcGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyBy ZXR1cm4gZmFsc2U7IH0gXAorKyAgICAgICAgaWYgKCFuYW1lKSB7IExPR1coKSA8PCAiRkZtcGVn OiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyBjbGVhckZ1bmN0aW9ucygpOyByZXR1cm4gZmFsc2U7 IH0gXAorIH0gd2hpbGUgKDApCisgCisrRkZtcGVnTGliSGFuZGxlcjo6fkZGbXBlZ0xpYkhhbmRs ZXIoKQorK3sKKysgICAgdW5sb2FkKCk7CisrfQorKworIHZvaWQqIEZGbXBlZ0xpYkhhbmRsZXI6 OmdldFN5bWJvbCh2b2lkKiBsaWIsIGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0CisgeworICAgICBp ZiAoIWxpYikgeworICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgIH0KKy0gICAgdm9pZCog c3ltID0gbXVzZTo6Z2V0TGliRnVuYyhsaWIsIG5hbWUpOworLSAgICBpZiAoIXN5bSkgeworLSNp ZiAhZGVmaW5lZChRX09TX1dJTikKKy0gICAgICAgIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwg bmFtZSk7CistI2VuZGlmCistICAgIH0KKy0gICAgcmV0dXJuIHN5bTsKKysgICAgcmV0dXJuIG11 c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsKKyB9CisgCisgYm9vbCBGRm1wZWdMaWJIYW5kbGVy Ojpsb2FkQXBpKCkKK0BAIC0xMjIsNiArMTE3LDcgQEAgYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjps b2FkTGliKGNvbnN0IGlvOgorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fc3dzU2NhbGVMaWJy YXJ5LCBzd1NjYWxlUGF0aCkKKyAgICAgICAgIHx8ICF0cnlMb2FkUGF0aChtX2F2Q29kZWNMaWJy YXJ5LCBhdkNvZGVjUGF0aCkKKyAgICAgICAgIHx8ICF0cnlMb2FkUGF0aChtX2F2Rm9ybWF0TGli cmFyeSwgYXZGb3JtYXRQYXRoKSkgeworKyAgICAgICAgdW5sb2FkKCk7CisgICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgIH0KKyAKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OC9mZm1wZWdsaWJoYW5kbGVyLmguZmZtcGVnOSBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjgvZmZt cGVnbGliaGFuZGxlci5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv aW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuaC5mZm1wZWc5CTIwMjYtMDctMDYg MDk6NTI6MzIuMDAwMDAwMDAwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdv cmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuaAkyMDI2LTA5LTA3 IDEyOjIzOjQ3LjY4MjAxMjI5MCArMDIwMAorQEAgLTQ0LDYgKzQ0LDkgQEAgY2xhc3MgRkZtcGVn TGliSGFuZGxlcgorIHsKKyBwdWJsaWM6CisgICAgIEZGbXBlZ0xpYkhhbmRsZXIoKSA9IGRlZmF1 bHQ7CisrICAgIH5GRm1wZWdMaWJIYW5kbGVyKCk7CisrICAgIEZGbXBlZ0xpYkhhbmRsZXIoY29u c3QgRkZtcGVnTGliSGFuZGxlciYpID0gZGVsZXRlOworKyAgICBGRm1wZWdMaWJIYW5kbGVyJiBv cGVyYXRvcj0oY29uc3QgRkZtcGVnTGliSGFuZGxlciYpID0gZGVsZXRlOworIAorICAgICBib29s IGxvYWRMaWIoY29uc3QgaW86OnBhdGhfdCYgYXZVdGlsUGF0aCwgY29uc3QgaW86OnBhdGhfdCYg YXZDb2RlY1BhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIGF2Rm9ybWF0UGF0aCwgY29uc3QgaW86OnBh dGhfdCYgc3dTY2FsZVBhdGgsCisgICAgICAgICAgICAgICAgICBjb25zdCBpbzo6cGF0aF90JiBz d1Jlc2FtcGxlUGF0aCk7CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5jcHAuZmZtcGVnOSBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVn bGliaGFuZGxlci5jcHAKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9p bnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5jcHAuZmZtcGVnOQkyMDI2LTA5LTA3 IDEyOjIzOjQ3LjY4MDIyNTM0MyArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmNwcAkyMDI2LTA5 LTA3IDEyOjIzOjQ3LjY4MjA2MzMwMSArMDIwMAorQEAgLTAsMCArMSwyMjkgQEAKKysvKgorKyAq IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9ubHkKKysgKiBNdXNlU2NvcmUtU3R1 ZGlvLUNMQS1hcHBsaWVzCisrICoKKysgKiBNdXNlU2NvcmUgU3R1ZGlvCisrICogTXVzaWMgQ29t cG9zaXRpb24gJiBOb3RhdGlvbgorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDI1IE11c2VTY29y ZSBMaW1pdGVkCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIGFzCisrICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisrICoKKysgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKysgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKi8KKysK KysjaW5jbHVkZSAiZmZtcGVnbGliaGFuZGxlci5oIgorKworKyNpbmNsdWRlICJpby9maWxlaW5m by5oIgorKyNpbmNsdWRlICJnbG9iYWwvZGxpYi5oIgorKworKyNpbmNsdWRlICJsb2cuaCIKKysK KytuYW1lc3BhY2UgbXVzZTo6bWVkaWE6OmZmbXBlZzo6djkgeworKyNkZWZpbmUgUkVTT0xWRV9G Uk9NKGxpYiwgbmFtZSkgZG8geyBcCisrICAgICAgICBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxk ZWNsdHlwZShuYW1lKT4oZ2V0U3ltYm9sKGxpYiwgI25hbWUpKTsgXAorKyAgICAgICAgaWYgKCFu YW1lKSB7IExPR1coKSA8PCAiRkZtcGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyBjbGVhckZ1 bmN0aW9ucygpOyByZXR1cm4gZmFsc2U7IH0gXAorK30gd2hpbGUgKDApCisrCisrRkZtcGVnTGli SGFuZGxlcjo6fkZGbXBlZ0xpYkhhbmRsZXIoKQorK3sKKysgICAgdW5sb2FkKCk7CisrfQorKwor K3ZvaWQqIEZGbXBlZ0xpYkhhbmRsZXI6OmdldFN5bWJvbCh2b2lkKiBsaWIsIGNvbnN0IGNoYXIq IG5hbWUpIGNvbnN0CisreworKyAgICBpZiAoIWxpYikgeworKyAgICAgICAgcmV0dXJuIG51bGxw dHI7CisrICAgIH0KKysgICAgcmV0dXJuIG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsKKyt9 CisrCisrYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjpsb2FkQXBpKCkKKyt7CisrICAgIGlmICghbV9h dlV0aWxMaWJyYXJ5IHx8ICFtX2F2Q29kZWNMaWJyYXJ5IHx8ICFtX2F2Rm9ybWF0TGlicmFyeSB8 fCAhbV9zd3NTY2FsZUxpYnJhcnkgfHwgIW1fc3dSZXNhbXBsZUxpYnJhcnkpIHsKKysgICAgICAg IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjbGVhckZ1bmN0aW9ucygpOworKworKyAg ICAvLyBsaWJhdnV0aWwKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZVdGlsTGlicmFyeSwgYXZfcmVz Y2FsZV9xKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZVdGlsTGlicmFyeSwgYXZfaW1hZ2VfZmls bF9hcnJheXMpOworKyAgICBSRVNPTFZFX0ZST00obV9hdlV0aWxMaWJyYXJ5LCBhdl9pbWFnZV9n ZXRfYnVmZmVyX3NpemUpOworKyAgICBSRVNPTFZFX0ZST00obV9hdlV0aWxMaWJyYXJ5LCBhdl9v cHRfc2V0X2ludCk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2VXRpbExpYnJhcnksIGF2X2ZyYW1l X2FsbG9jKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZVdGlsTGlicmFyeSwgYXZfZnJhbWVfZnJl ZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2VXRpbExpYnJhcnksIGF2X21hbGxvYyk7CisrCisr ICAgIC8vIGxpYmF2Zm9ybWF0CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwg YXZfd3JpdGVfdHJhaWxlcik7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwg YXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkZvcm1h dExpYnJhcnksIGF2X3JlYWRfZnJhbWUpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkZvcm1hdExp YnJhcnksIGF2aW9fb3Blbik7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwg YXZpb19jbG9zZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwgYXZmb3Jt YXRfbmV3X3N0cmVhbSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwgYXZm b3JtYXRfd3JpdGVfaGVhZGVyKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRMaWJyYXJ5 LCBhdmZvcm1hdF9vcGVuX2lucHV0KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRMaWJy YXJ5LCBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZG b3JtYXRMaWJyYXJ5LCBhdmZvcm1hdF9jbG9zZV9pbnB1dCk7CisrICAgIFJFU09MVkVfRlJPTSht X2F2Rm9ybWF0TGlicmFyeSwgYXZmb3JtYXRfZnJlZV9jb250ZXh0KTsKKysgICAgUkVTT0xWRV9G Uk9NKG1fYXZGb3JtYXRMaWJyYXJ5LCBhdmZvcm1hdF9hbGxvY19vdXRwdXRfY29udGV4dDIpOwor KyAgICBSRVNPTFZFX0ZST00obV9hdkZvcm1hdExpYnJhcnksIGF2Zm9ybWF0X2FsbG9jX2NvbnRl eHQpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkZvcm1hdExpYnJhcnksIGF2aW9fYWxsb2NfY29u dGV4dCk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwgYXZpb19jb250ZXh0 X2ZyZWUpOworKworKyAgICAvLyBsaWJhdmNvZGVjCisrICAgIFJFU09MVkVfRlJPTShtX2F2Q29k ZWNMaWJyYXJ5LCBhdl9wYWNrZXRfYWxsb2MpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVj TGlicmFyeSwgYXZfcGFja2V0X2ZyZWUpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGli cmFyeSwgYXZfcGFja2V0X3VucmVmKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJh cnksIGF2X3BhY2tldF9yZXNjYWxlX3RzKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xp YnJhcnksIGF2Y29kZWNfYWxsb2NfY29udGV4dDMpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNv ZGVjTGlicmFyeSwgYXZjb2RlY19maW5kX2VuY29kZXIpOworKyAgICBSRVNPTFZFX0ZST00obV9h dkNvZGVjTGlicmFyeSwgYXZjb2RlY19maW5kX2RlY29kZXIpOworKyAgICBSRVNPTFZFX0ZST00o bV9hdkNvZGVjTGlicmFyeSwgYXZjb2RlY19mcmVlX2NvbnRleHQpOworKyAgICBSRVNPTFZFX0ZS T00obV9hdkNvZGVjTGlicmFyeSwgYXZjb2RlY19vcGVuMik7CisrICAgIFJFU09MVkVfRlJPTSht X2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVjX3BhcmFtZXRlcnNfZnJvbV9jb250ZXh0KTsKKysgICAg UkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJhcnksIGF2Y29kZWNfcGFyYW1ldGVyc190b19jb250 ZXh0KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJhcnksIGF2Y29kZWNfcGFyYW1l dGVyc19jb3B5KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJhcnksIGF2Y29kZWNf c2VuZF9mcmFtZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVj X3JlY2VpdmVfcGFja2V0KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJhcnksIGF2 Y29kZWNfc2VuZF9wYWNrZXQpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGlicmFyeSwg YXZjb2RlY19yZWNlaXZlX2ZyYW1lKTsKKysKKysgICAgLy8gbGlic3dzY2FsZQorKyAgICBSRVNP TFZFX0ZST00obV9zd3NTY2FsZUxpYnJhcnksIHN3c19nZXRDYWNoZWRDb250ZXh0KTsKKysgICAg UkVTT0xWRV9GUk9NKG1fc3dzU2NhbGVMaWJyYXJ5LCBzd3Nfc2NhbGUpOworKyAgICBSRVNPTFZF X0ZST00obV9zd3NTY2FsZUxpYnJhcnksIHN3c19mcmVlQ29udGV4dCk7CisrCisrICAgIHJldHVy biBmdW5jdGlvbnNWYWxpZCgpOworK30KKysKKytib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRM aWIoY29uc3QgaW86OnBhdGhfdCYgYXZVdGlsUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZDb2Rl Y1BhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIGF2Rm9ybWF0UGF0aCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgaW86OnBhdGhfdCYgc3dTY2FsZVBhdGgsIGNvbnN0IGlvOjpw YXRoX3QmIHN3UmVzYW1wbGVQYXRoKQorK3sKKysgICAgdW5sb2FkKCk7CisrCisrICAgIC8vIExv YWQgYXZ1dGlsIGZpcnN0LCB0aGVuIHN3cmVzYW1wbGUsIHN3c2NhbGUsIGF2Y29kZWMsIGF2Zm9y bWF0IChkZXBlbmRlbmN5IG9yZGVyKQorKyAgICBpZiAoIXRyeUxvYWRQYXRoKG1fYXZVdGlsTGli cmFyeSwgYXZVdGlsUGF0aCkKKysgICAgICAgIHx8ICF0cnlMb2FkUGF0aChtX3N3UmVzYW1wbGVM aWJyYXJ5LCBzd1Jlc2FtcGxlUGF0aCkKKysgICAgICAgIHx8ICF0cnlMb2FkUGF0aChtX3N3c1Nj YWxlTGlicmFyeSwgc3dTY2FsZVBhdGgpCisrICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9hdkNv ZGVjTGlicmFyeSwgYXZDb2RlY1BhdGgpCisrICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9hdkZv cm1hdExpYnJhcnksIGF2Rm9ybWF0UGF0aCkpIHsKKysgICAgICAgIHVubG9hZCgpOworKyAgICAg ICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIExPR0koKSA8PCAiRkZtcGVnIGxvYWRl ZDogYXZ1dGlsPSIgPDwgYXZVdGlsUGF0aCA8PCAiLCBhdmNvZGVjPSIgPDwgYXZDb2RlY1BhdGgg PDwgIiwgYXZmb3JtYXQ9IiA8PCBhdkZvcm1hdFBhdGgKKysgICAgICAgICAgIDw8ICIsIHN3c2Nh bGU9IiA8PCBzd1NjYWxlUGF0aCA8PCAiLCBzd3Jlc2FtcGxlPSIgPDwgc3dSZXNhbXBsZVBhdGg7 CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIEZGbXBlZ0xpYkhhbmRsZXI6OnVu bG9hZCgpCisreworKyAgICBjbG9zZUxpYihtX2F2Rm9ybWF0TGlicmFyeSk7CisrICAgIGNsb3Nl TGliKG1fc3dSZXNhbXBsZUxpYnJhcnkpOworKyAgICBjbG9zZUxpYihtX3N3c1NjYWxlTGlicmFy eSk7CisrICAgIGNsb3NlTGliKG1fYXZDb2RlY0xpYnJhcnkpOworKyAgICBjbG9zZUxpYihtX2F2 VXRpbExpYnJhcnkpOworKworKyAgICBjbGVhckZ1bmN0aW9ucygpOworK30KKysKKyt2b2lkIEZG bXBlZ0xpYkhhbmRsZXI6OmNsb3NlTGliKHZvaWQqJiBsaWIpCisreworKyAgICBpZiAobGliKSB7 CisrICAgICAgICBtdXNlOjpjbG9zZUxpYihsaWIpOworKyAgICAgICAgbGliID0gbnVsbHB0cjsK KysgICAgfQorK30KKysKKytib29sIEZGbXBlZ0xpYkhhbmRsZXI6OnRyeUxvYWRQYXRoKHZvaWQq JiBsaWIsIGNvbnN0IGlvOjpwYXRoX3QmIGZ1bGxQYXRoKQorK3sKKysgICAgaWYgKCFpbzo6Rmls ZUluZm86OmV4aXN0cyhmdWxsUGF0aCkpIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorKworKyAgICB2b2lkKiBsb2FkZWQgPSBtdXNlOjpsb2FkTGliKGZ1bGxQYXRoKTsKKysgICAg aWYgKGxvYWRlZCkgeworKyAgICAgICAgbGliID0gbG9hZGVkOworKyAgICAgICAgcmV0dXJuIHRy dWU7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGZhbHNlOworK30KKysKKytib29sIEZGbXBlZ0xp YkhhbmRsZXI6OmZ1bmN0aW9uc1ZhbGlkKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBhdl9yZXNj YWxlX3EKKysgICAgICAgICAgICYmIGF2X2ltYWdlX2ZpbGxfYXJyYXlzICYmIGF2X2ltYWdlX2dl dF9idWZmZXJfc2l6ZQorKyAgICAgICAgICAgJiYgYXZfb3B0X3NldF9pbnQKKysgICAgICAgICAg ICYmIGF2Zm9ybWF0X25ld19zdHJlYW0KKysgICAgICAgICAgICYmIGF2Zm9ybWF0X3dyaXRlX2hl YWRlciAmJiBhdl93cml0ZV90cmFpbGVyCisrICAgICAgICAgICAmJiBhdmlvX29wZW4gJiYgYXZp b19jbG9zZSAmJiBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZQorKyAgICAgICAgICAgJiYgYXZm b3JtYXRfb3Blbl9pbnB1dCAmJiBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvCisrICAgICAgICAg ICAmJiBhdmZvcm1hdF9jbG9zZV9pbnB1dCAmJiBhdmZvcm1hdF9mcmVlX2NvbnRleHQKKysgICAg ICAgICAgICYmIGF2Zm9ybWF0X2FsbG9jX291dHB1dF9jb250ZXh0MiAmJiBhdl9yZWFkX2ZyYW1l CisrICAgICAgICAgICAmJiBhdmZvcm1hdF9hbGxvY19jb250ZXh0ICYmIGF2aW9fYWxsb2NfY29u dGV4dCAmJiBhdmlvX2NvbnRleHRfZnJlZQorKyAgICAgICAgICAgJiYgYXZjb2RlY19hbGxvY19j b250ZXh0MyAmJiBhdmNvZGVjX2ZpbmRfZW5jb2RlciAmJiBhdmNvZGVjX2ZpbmRfZGVjb2RlciAm JiBhdmNvZGVjX2ZyZWVfY29udGV4dAorKyAgICAgICAgICAgJiYgYXZjb2RlY19vcGVuMiAmJiBh dmNvZGVjX3BhcmFtZXRlcnNfZnJvbV9jb250ZXh0ICYmIGF2Y29kZWNfcGFyYW1ldGVyc190b19j b250ZXh0ICYmIGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5CisrICAgICAgICAgICAmJiBhdmNvZGVj X3NlbmRfZnJhbWUgJiYgYXZjb2RlY19yZWNlaXZlX3BhY2tldCAmJiBhdmNvZGVjX3NlbmRfcGFj a2V0ICYmIGF2Y29kZWNfcmVjZWl2ZV9mcmFtZQorKyAgICAgICAgICAgJiYgYXZfZnJhbWVfYWxs b2MgJiYgYXZfZnJhbWVfZnJlZQorKyAgICAgICAgICAgJiYgYXZfcGFja2V0X2FsbG9jICYmIGF2 X3BhY2tldF9mcmVlICYmIGF2X3BhY2tldF91bnJlZiAmJiBhdl9wYWNrZXRfcmVzY2FsZV90cwor KyAgICAgICAgICAgJiYgYXZfbWFsbG9jCisrICAgICAgICAgICAmJiBzd3NfZ2V0Q2FjaGVkQ29u dGV4dCAmJiBzd3Nfc2NhbGUgJiYgc3dzX2ZyZWVDb250ZXh0OworK30KKysKKyt2b2lkIEZGbXBl Z0xpYkhhbmRsZXI6OmNsZWFyRnVuY3Rpb25zKCkKKyt7CisrICAgIGF2X3Jlc2NhbGVfcSA9IG51 bGxwdHI7CisrICAgIGF2X2ltYWdlX2ZpbGxfYXJyYXlzID0gbnVsbHB0cjsKKysgICAgYXZfaW1h Z2VfZ2V0X2J1ZmZlcl9zaXplID0gbnVsbHB0cjsKKysgICAgYXZfb3B0X3NldF9pbnQgPSBudWxs cHRyOworKyAgICBhdl9tYWxsb2MgPSBudWxscHRyOworKyAgICBhdmZvcm1hdF9uZXdfc3RyZWFt ID0gbnVsbHB0cjsKKysgICAgYXZmb3JtYXRfd3JpdGVfaGVhZGVyID0gbnVsbHB0cjsKKysgICAg YXZfd3JpdGVfdHJhaWxlciA9IG51bGxwdHI7CisrICAgIGF2aW9fb3BlbiA9IG51bGxwdHI7Cisr ICAgIGF2aW9fY2xvc2UgPSBudWxscHRyOworKyAgICBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFt ZSA9IG51bGxwdHI7CisrICAgIGF2Zm9ybWF0X29wZW5faW5wdXQgPSBudWxscHRyOworKyAgICBh dmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvID0gbnVsbHB0cjsKKysgICAgYXZmb3JtYXRfY2xvc2Vf aW5wdXQgPSBudWxscHRyOworKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQgPSBudWxscHRyOwor KyAgICBhdmZvcm1hdF9hbGxvY19vdXRwdXRfY29udGV4dDIgPSBudWxscHRyOworKyAgICBhdl9y ZWFkX2ZyYW1lID0gbnVsbHB0cjsKKysgICAgYXZmb3JtYXRfYWxsb2NfY29udGV4dCA9IG51bGxw dHI7CisrICAgIGF2aW9fYWxsb2NfY29udGV4dCA9IG51bGxwdHI7CisrICAgIGF2aW9fY29udGV4 dF9mcmVlID0gbnVsbHB0cjsKKysgICAgYXZjb2RlY19hbGxvY19jb250ZXh0MyA9IG51bGxwdHI7 CisrICAgIGF2Y29kZWNfZmluZF9lbmNvZGVyID0gbnVsbHB0cjsKKysgICAgYXZjb2RlY19maW5k X2RlY29kZXIgPSBudWxscHRyOworKyAgICBhdmNvZGVjX2ZyZWVfY29udGV4dCA9IG51bGxwdHI7 CisrICAgIGF2Y29kZWNfb3BlbjIgPSBudWxscHRyOworKyAgICBhdmNvZGVjX3BhcmFtZXRlcnNf ZnJvbV9jb250ZXh0ID0gbnVsbHB0cjsKKysgICAgYXZjb2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRl eHQgPSBudWxscHRyOworKyAgICBhdmNvZGVjX3BhcmFtZXRlcnNfY29weSA9IG51bGxwdHI7Cisr ICAgIGF2Y29kZWNfc2VuZF9mcmFtZSA9IG51bGxwdHI7CisrICAgIGF2Y29kZWNfcmVjZWl2ZV9w YWNrZXQgPSBudWxscHRyOworKyAgICBhdmNvZGVjX3NlbmRfcGFja2V0ID0gbnVsbHB0cjsKKysg ICAgYXZjb2RlY19yZWNlaXZlX2ZyYW1lID0gbnVsbHB0cjsKKysgICAgYXZfZnJhbWVfYWxsb2Mg PSBudWxscHRyOworKyAgICBhdl9mcmFtZV9mcmVlID0gbnVsbHB0cjsKKysgICAgYXZfcGFja2V0 X2FsbG9jID0gbnVsbHB0cjsKKysgICAgYXZfcGFja2V0X2ZyZWUgPSBudWxscHRyOworKyAgICBh dl9wYWNrZXRfdW5yZWYgPSBudWxscHRyOworKyAgICBhdl9wYWNrZXRfcmVzY2FsZV90cyA9IG51 bGxwdHI7CisrICAgIHN3c19nZXRDYWNoZWRDb250ZXh0ID0gbnVsbHB0cjsKKysgICAgc3dzX3Nj YWxlID0gbnVsbHB0cjsKKysgICAgc3dzX2ZyZWVDb250ZXh0ID0gbnVsbHB0cjsKKyt9CisrfQor ZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZt cGVnL3Y5L2ZmbXBlZ2xpYmhhbmRsZXIuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmgKKy0tLSBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjkvZmZt cGVnbGliaGFuZGxlci5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODAzMDg4MTkgKzAy MDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1w ZWcvdjkvZmZtcGVnbGliaGFuZGxlci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgyMTEyMzgyICsw MjAwCitAQCAtMCwwICsxLDEyNSBAQAorKy8qCisrICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0zLjAtb25seQorKyAqIE11c2VTY29yZS1TdHVkaW8tQ0xBLWFwcGxpZXMKKysgKgorKyAq IE11c2VTY29yZSBTdHVkaW8KKysgKiBNdXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0aW9uCisrICoK KysgKiBDb3B5cmlnaHQgKEMpIDIwMjUgTXVzZVNjb3JlIExpbWl0ZWQKKysgKgorKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDMgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cHM6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyAqLworKworKyNwcmFnbWEgb25jZQorKworKyNpZiAo ZGVmaW5lZCAoX01TQ1ZFUikgfHwgZGVmaW5lZCAoX01TQ19WRVIpKQorKyNwcmFnbWEgd2Fybmlu ZyhwdXNoKQorKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KQorKyNlbmRpZgorKworK2V4 dGVybiAiQyIgeworKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2F2 Y29kZWMuaCIKKysjaW5jbHVkZSAidGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvYXZm b3JtYXQuaCIKKysjaW5jbHVkZSAidGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS9zd3Nj YWxlLmgiCisrfQorKworKyNpZiAoZGVmaW5lZCAoX01TQ1ZFUikgfHwgZGVmaW5lZCAoX01TQ19W RVIpKQorKyNwcmFnbWEgd2FybmluZyhwb3ApCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImlvL3Bh dGguaCIKKysKKytuYW1lc3BhY2UgbXVzZTo6bWVkaWE6OmZmbXBlZzo6djkgeworK2NsYXNzIEZG bXBlZ0xpYkhhbmRsZXIKKyt7CisrcHVibGljOgorKyAgICBGRm1wZWdMaWJIYW5kbGVyKCkgPSBk ZWZhdWx0OworKyAgICB+RkZtcGVnTGliSGFuZGxlcigpOworKyAgICBGRm1wZWdMaWJIYW5kbGVy KGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKysgICAgRkZtcGVnTGliSGFuZGxl ciYgb3BlcmF0b3I9KGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKysKKysgICAg Ym9vbCBsb2FkTGliKGNvbnN0IGlvOjpwYXRoX3QmIGF2VXRpbFBhdGgsIGNvbnN0IGlvOjpwYXRo X3QmIGF2Q29kZWNQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkZvcm1hdFBhdGgsIGNvbnN0IGlv OjpwYXRoX3QmIHN3U2NhbGVQYXRoLAorKyAgICAgICAgICAgICAgICAgY29uc3QgaW86OnBhdGhf dCYgc3dSZXNhbXBsZVBhdGgpOworKyAgICBib29sIGxvYWRBcGkoKTsKKysgICAgdm9pZCB1bmxv YWQoKTsKKysKKysgICAgLy8gbGliYXZ1dGlsCisrICAgIGludDY0X3QgKCphdl9yZXNjYWxlX3Ep KGludDY0X3QgYSwgQVZSYXRpb25hbCBicSwgQVZSYXRpb25hbCBjcSkgPSBudWxscHRyOworKyAg ICBpbnQgKCphdl9pbWFnZV9maWxsX2FycmF5cykodWludDhfdCogZHN0X2RhdGFbNF0sIGludCBk c3RfbGluZXNpemVbNF0sIGNvbnN0IHVpbnQ4X3QqIHNyYywgQVZQaXhlbEZvcm1hdCBwaXhfZm10 LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgYWxpZ24pID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZfaW1hZ2VfZ2V0X2J1ZmZlcl9z aXplKShBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGFs aWduKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2X29wdF9zZXRfaW50KSh2b2lkKiBvYmosIGNv bnN0IGNoYXIqIG5hbWUsIGludDY0X3QgdmFsLCBpbnQgc2VhcmNoX2ZsYWdzKSA9IG51bGxwdHI7 CisrICAgIHZvaWQqKCphdl9tYWxsb2MpKHNpemVfdCBzaXplKSA9IG51bGxwdHI7CisrCisrICAg IC8vIGxpYmF2Zm9ybWF0CisrICAgIEFWU3RyZWFtKigqYXZmb3JtYXRfbmV3X3N0cmVhbSkoQVZG b3JtYXRDb250ZXh0KiBzLCBjb25zdCBBVkNvZGVjKiBjKSA9IG51bGxwdHI7CisrICAgIGludCAo KmF2Zm9ybWF0X3dyaXRlX2hlYWRlcikoQVZGb3JtYXRDb250ZXh0KiBzLCBBVkRpY3Rpb25hcnkq KiBvcHRpb25zKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2X3dyaXRlX3RyYWlsZXIpKEFWRm9y bWF0Q29udGV4dCogcykgPSBudWxscHRyOworKyAgICBpbnQgKCphdmlvX29wZW4pKEFWSU9Db250 ZXh0KiogcywgY29uc3QgY2hhciogdXJsLCBpbnQgZmxhZ3MpID0gbnVsbHB0cjsKKysgICAgaW50 ICgqYXZpb19jbG9zZSkoQVZJT0NvbnRleHQqIHMpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZf aW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUpKEFWRm9ybWF0Q29udGV4dCogcywgQVZQYWNrZXQqIHBr dCkgPSBudWxscHRyOworKyAgICBpbnQgKCphdmZvcm1hdF9vcGVuX2lucHV0KShBVkZvcm1hdENv bnRleHQqKiBjdHgsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgQVZJbnB1dEZvcm1hdCogZm10LCBB VkRpY3Rpb25hcnkqKiBvcHRpb25zKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Zm9ybWF0X2Zp bmRfc3RyZWFtX2luZm8pKEFWRm9ybWF0Q29udGV4dCogaWMsIEFWRGljdGlvbmFyeSoqIG9wdGlv bnMpID0gbnVsbHB0cjsKKysgICAgdm9pZCAoKmF2Zm9ybWF0X2Nsb3NlX2lucHV0KShBVkZvcm1h dENvbnRleHQqKiBzKSA9IG51bGxwdHI7CisrICAgIHZvaWQgKCphdmZvcm1hdF9mcmVlX2NvbnRl eHQpKEFWRm9ybWF0Q29udGV4dCogcykgPSBudWxscHRyOworKyAgICBpbnQgKCphdmZvcm1hdF9h bGxvY19vdXRwdXRfY29udGV4dDIpKEFWRm9ybWF0Q29udGV4dCoqIGN0eCwgY29uc3QgQVZPdXRw dXRGb3JtYXQqIG9mb3JtYXQsIGNvbnN0IGNoYXIqIGZvcm1hdF9uYW1lLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lKSA9IG51 bGxwdHI7CisrICAgIGludCAoKmF2X3JlYWRfZnJhbWUpKEFWRm9ybWF0Q29udGV4dCogcywgQVZQ YWNrZXQqIHBrdCkgPSBudWxscHRyOworKyAgICBBVkZvcm1hdENvbnRleHQqKCphdmZvcm1hdF9h bGxvY19jb250ZXh0KSh2b2lkKSA9IG51bGxwdHI7CisrICAgIEFWSU9Db250ZXh0KigqYXZpb19h bGxvY19jb250ZXh0KSh1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgaW50 IHdyaXRlX2ZsYWcsIHZvaWQqIG9wYXF1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAoKnJlYWRfcGFja2V0KSh2b2lkKiBvcGFxdWUsIHVpbnQ4X3QqIGJ1Ziwg aW50IGJ1Zl9zaXplKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAoKndyaXRlX3BhY2tldCkodm9pZCogb3BhcXVlLCBjb25zdCB1aW50OF90KiBidWYsIGludCBi dWZfc2l6ZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90 ICgqc2Vlaykodm9pZCogb3BhcXVlLCBpbnQ2NF90IG9mZnNldCwgaW50IHdoZW5jZSkpID0gbnVs bHB0cjsKKysgICAgdm9pZCAoKmF2aW9fY29udGV4dF9mcmVlKShBVklPQ29udGV4dCoqIHMpID0g bnVsbHB0cjsKKysKKysgICAgLy8gbGliYXZjb2RlYworKyAgICBBVkNvZGVjQ29udGV4dCooKmF2 Y29kZWNfYWxsb2NfY29udGV4dDMpKGNvbnN0IEFWQ29kZWMqIGNvZGVjKSA9IG51bGxwdHI7Cisr ICAgIGNvbnN0IEFWQ29kZWMqKCphdmNvZGVjX2ZpbmRfZW5jb2RlcikoQVZDb2RlY0lEIGlkKSA9 IG51bGxwdHI7CisrICAgIGNvbnN0IEFWQ29kZWMqKCphdmNvZGVjX2ZpbmRfZGVjb2RlcikoQVZD b2RlY0lEIGlkKSA9IG51bGxwdHI7CisrICAgIHZvaWQgKCphdmNvZGVjX2ZyZWVfY29udGV4dCko QVZDb2RlY0NvbnRleHQqKiBhdmN0eCkgPSBudWxscHRyOworKyAgICBpbnQgKCphdmNvZGVjX29w ZW4yKShBVkNvZGVjQ29udGV4dCogYXZjdHgsIGNvbnN0IEFWQ29kZWMqIGNvZGVjLCBBVkRpY3Rp b25hcnkqKiBvcHRpb25zKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Y29kZWNfcGFyYW1ldGVy c19mcm9tX2NvbnRleHQpKEFWQ29kZWNQYXJhbWV0ZXJzKiBwYXIsIGNvbnN0IEFWQ29kZWNDb250 ZXh0KiBjb2RlYykgPSBudWxscHRyOworKyAgICBpbnQgKCphdmNvZGVjX3BhcmFtZXRlcnNfdG9f Y29udGV4dCkoQVZDb2RlY0NvbnRleHQqIGNvZGVjLCBjb25zdCBBVkNvZGVjUGFyYW1ldGVycyog cGFyKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KShBVkNv ZGVjUGFyYW1ldGVycyogZHN0LCBjb25zdCBBVkNvZGVjUGFyYW1ldGVycyogc3JjKSA9IG51bGxw dHI7CisrICAgIGludCAoKmF2Y29kZWNfc2VuZF9mcmFtZSkoQVZDb2RlY0NvbnRleHQqIGF2Y3R4 LCBjb25zdCBBVkZyYW1lKiBmcmFtZSkgPSBudWxscHRyOworKyAgICBpbnQgKCphdmNvZGVjX3Jl Y2VpdmVfcGFja2V0KShBVkNvZGVjQ29udGV4dCogYXZjdHgsIEFWUGFja2V0KiBhdnBrdCkgPSBu dWxscHRyOworKyAgICBpbnQgKCphdmNvZGVjX3NlbmRfcGFja2V0KShBVkNvZGVjQ29udGV4dCog YXZjdHgsIGNvbnN0IEFWUGFja2V0KiBhdnBrdCkgPSBudWxscHRyOworKyAgICBpbnQgKCphdmNv ZGVjX3JlY2VpdmVfZnJhbWUpKEFWQ29kZWNDb250ZXh0KiBhdmN0eCwgQVZGcmFtZSogZnJhbWUp ID0gbnVsbHB0cjsKKysgICAgQVZGcmFtZSooKmF2X2ZyYW1lX2FsbG9jKSh2b2lkKSA9IG51bGxw dHI7CisrICAgIHZvaWQgKCphdl9mcmFtZV9mcmVlKShBVkZyYW1lKiogZnJhbWUpID0gbnVsbHB0 cjsKKysgICAgQVZQYWNrZXQqKCphdl9wYWNrZXRfYWxsb2MpKHZvaWQpID0gbnVsbHB0cjsKKysg ICAgdm9pZCAoKmF2X3BhY2tldF9mcmVlKShBVlBhY2tldCoqIHBrdCkgPSBudWxscHRyOworKyAg ICB2b2lkICgqYXZfcGFja2V0X3VucmVmKShBVlBhY2tldCogcGt0KSA9IG51bGxwdHI7CisrICAg IHZvaWQgKCphdl9wYWNrZXRfcmVzY2FsZV90cykoQVZQYWNrZXQqIHBrdCwgQVZSYXRpb25hbCB0 Yl9zcmMsIEFWUmF0aW9uYWwgdGJfZHN0KSA9IG51bGxwdHI7CisrCisrICAgIC8vIGxpYnN3c2Nh bGUKKysgICAgU3dzQ29udGV4dCooKnN3c19nZXRDYWNoZWRDb250ZXh0KShTd3NDb250ZXh0KiBj b250ZXh0LCBpbnQgc3JjVywgaW50IHNyY0gsIEFWUGl4ZWxGb3JtYXQgc3JjRm9ybWF0LCBpbnQg ZHN0VywgaW50IGRzdEgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZQaXhlbEZvcm1hdCBkc3RGb3JtYXQsIGludCBmbGFncywgU3dzRmlsdGVyKiBzcmNGaWx0ZXIs IFN3c0ZpbHRlciogZHN0RmlsdGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRvdWJsZSogcGFyYW0pID0gbnVsbHB0cjsKKysgICAgaW50ICgqc3dzX3Nj YWxlKShzdHJ1Y3QgU3dzQ29udGV4dCogYywgY29uc3QgdWludDhfdCogY29uc3Qgc3JjU2xpY2Vb XSwgY29uc3QgaW50IHNyY1N0cmlkZVtdLCBpbnQgc3JjU2xpY2VZLCBpbnQgc3JjU2xpY2VILAor KyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGNvbnN0IGRzdFtdLCBjb25zdCBpbnQgZHN0 U3RyaWRlW10pID0gbnVsbHB0cjsKKysgICAgdm9pZCAoKnN3c19mcmVlQ29udGV4dCkoU3dzQ29u dGV4dCogc3dzQ29udGV4dCkgPSBudWxscHRyOworKworK3ByaXZhdGU6IHZvaWQqIGdldFN5bWJv bCh2b2lkKiBsaWIsIGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0OworKyAgICBib29sIHRyeUxvYWRQ YXRoKHZvaWQqJiBsaWIsIGNvbnN0IGlvOjpwYXRoX3QmIGZ1bGxQYXRoKTsKKysgICAgdm9pZCBj bG9zZUxpYih2b2lkKiYgbGliKTsKKysgICAgdm9pZCBjbGVhckZ1bmN0aW9ucygpOworKyAgICBi b29sIGZ1bmN0aW9uc1ZhbGlkKCkgY29uc3Q7CisrCisrICAgIHZvaWQqIG1fYXZVdGlsTGlicmFy eSA9IG51bGxwdHI7CisrICAgIHZvaWQqIG1fYXZDb2RlY0xpYnJhcnkgPSBudWxscHRyOworKyAg ICB2b2lkKiBtX2F2Rm9ybWF0TGlicmFyeSA9IG51bGxwdHI7CisrICAgIHZvaWQqIG1fc3dzU2Nh bGVMaWJyYXJ5ID0gbnVsbHB0cjsKKysgICAgdm9pZCogbV9zd1Jlc2FtcGxlTGlicmFyeSA9IG51 bGxwdHI7CisrfTsKKyt9CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjkvdmlkZW9lbmNvZGVyLmNwcC5mZm1wZWc5IE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS92aWRlb2VuY29k ZXIuY3BwCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwv ZmZtcGVnL3Y5L3ZpZGVvZW5jb2Rlci5jcHAuZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4 MDQ5NjU3NSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2lu dGVybmFsL2ZmbXBlZy92OS92aWRlb2VuY29kZXIuY3BwCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgw MzU0NzY1ICswMjAwCitAQCAtMCwwICsxLDc4NCBAQAorKy8qCisrICogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0zLjAtb25seQorKyAqIE11c2VTY29yZS1TdHVkaW8tQ0xBLWFwcGxpZXMK KysgKgorKyAqIE11c2VTY29yZSBTdHVkaW8KKysgKiBNdXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0 aW9uCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMjUgTXVzZVNjb3JlIExpbWl0ZWQKKysgKgor KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoK KysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKi8KKysjaW5jbHVkZSAidmlkZW9l bmNvZGVyLmgiCisrI2luY2x1ZGUgImZmbXBlZ2xpYmhhbmRsZXIuaCIKKysKKysjaW5jbHVkZSA8 YWxnb3JpdGhtPgorKworKyNpbmNsdWRlICJpby9maWxlLmgiCisrI2luY2x1ZGUgImlvL3BhdGgu aCIKKysjaW5jbHVkZSAiZGVmZXIuaCIKKysjaW5jbHVkZSAibG9nLmgiCisrCisrbmFtZXNwYWNl IG11c2U6Om1lZGlhOjpmZm1wZWc6OnY5IHsKKytzdHJ1Y3QgTWVtb3J5UmVhZENvbnRleHQgewor KyAgICBjb25zdCB1aW50OF90KiBkYXRhID0gbnVsbHB0cjsKKysgICAgaW50NjRfdCBzaXplID0g MDsKKysgICAgaW50NjRfdCBwb3MgPSAwOworK307CisrCisrc3RhdGljIGludCBtZW1SZWFkUGFj a2V0KHZvaWQqIG9wYXF1ZSwgdWludDhfdCogYnVmLCBpbnQgYnVmX3NpemUpCisreworKyAgICBh dXRvKiBjdHggPSBzdGF0aWNfY2FzdDxNZW1vcnlSZWFkQ29udGV4dCo+KG9wYXF1ZSk7CisrICAg IGludDY0X3QgcmVtYWluaW5nID0gY3R4LT5zaXplIC0gY3R4LT5wb3M7CisrICAgIGludCB0b1Jl YWQgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKHN0YXRpY19jYXN0PGludDY0X3Q+KGJ1Zl9z aXplKSwgcmVtYWluaW5nKSk7CisrICAgIGlmICh0b1JlYWQgPD0gMCkgeworKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfRU9GOworKyAgICB9CisrICAgIG1lbWNweShidWYsIGN0eC0+ZGF0YSArIGN0 eC0+cG9zLCB0b1JlYWQpOworKyAgICBjdHgtPnBvcyArPSB0b1JlYWQ7CisrICAgIHJldHVybiB0 b1JlYWQ7CisrfQorKworK3N0YXRpYyBpbnQ2NF90IG1lbVNlZWsodm9pZCogb3BhcXVlLCBpbnQ2 NF90IG9mZnNldCwgaW50IHdoZW5jZSkKKyt7CisrICAgIGF1dG8qIGN0eCA9IHN0YXRpY19jYXN0 PE1lbW9yeVJlYWRDb250ZXh0Kj4ob3BhcXVlKTsKKysgICAgc3dpdGNoICh3aGVuY2UpIHsKKysg ICAgY2FzZSBTRUVLX1NFVDogY3R4LT5wb3MgPSBvZmZzZXQ7CisrICAgICAgICBicmVhazsKKysg ICAgY2FzZSBTRUVLX0NVUjogY3R4LT5wb3MgKz0gb2Zmc2V0OworKyAgICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgU0VFS19FTkQ6IGN0eC0+cG9zID0gY3R4LT5zaXplICsgb2Zmc2V0OworKyAgICAg ICAgYnJlYWs7CisrICAgIGNhc2UgQVZTRUVLX1NJWkU6IHJldHVybiBjdHgtPnNpemU7CisrICAg IGRlZmF1bHQ6IHJldHVybiAtMTsKKysgICAgfQorKyAgICBpZiAoY3R4LT5wb3MgPCAwKSB7Cisr ICAgICAgICBjdHgtPnBvcyA9IDA7CisrICAgIH0KKysgICAgaWYgKGN0eC0+cG9zID4gY3R4LT5z aXplKSB7CisrICAgICAgICBjdHgtPnBvcyA9IGN0eC0+c2l6ZTsKKysgICAgfQorKyAgICByZXR1 cm4gY3R4LT5wb3M7CisrfQorKworK3N0cnVjdCBGRm1wZWcgeworKyAgICBpbnQgd2lkdGggPSAw OworKyAgICBpbnQgaGVpZ2h0ID0gMDsKKysgICAgdW5zaWduZWQgaW50IHB0c0NvdW50ZXIgPSAw OworKworKyAgICAvLyBGRm1wZWcgc3R1ZmYKKysgICAgQVZGb3JtYXRDb250ZXh0KiBmb3JtYXRD dHggPSBudWxscHRyOworKyAgICBBVlN0cmVhbSogdmlkZW9TdHJlYW0gPSBudWxscHRyOworKyAg ICBBVkNvZGVjQ29udGV4dCogY29kZWNDdHggPSBudWxscHRyOworKyAgICBjb25zdCBBVkNvZGVj KiBjb2RlYyA9IG51bGxwdHI7CisrICAgIC8vIEZyYW1lIGRhdGEKKysgICAgQVZGcmFtZSogcHBp Y3R1cmUgPSBudWxscHRyOworKyAgICB1aW50OF90KiBwaWN0dXJlX2J1ZiA9IG51bGxwdHI7Cisr ICAgIC8vIENvbnZlcnNpb24KKysgICAgU3dzQ29udGV4dCogaW1nX2NvbnZlcnRfY3R4ID0gbnVs bHB0cjsKKysgICAgLy8gUGFja2V0CisrICAgIEFWUGFja2V0KiBwa3Q7CisrCisrICAgIGJvb2wg b3BlbmVkID0gZmFsc2U7CisrICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyt9OworKworK1Zp ZGVvRW5jb2Rlcjo6VmlkZW9FbmNvZGVyKCkKKyt7CisrICAgIG1fZmZtcGVnID0gbmV3IEZGbXBl ZygpOworK30KKysKKytWaWRlb0VuY29kZXI6On5WaWRlb0VuY29kZXIoKQorK3sKKysgICAgZGVs ZXRlIG1fZmZtcGVnOworK30KKysKKytib29sIFZpZGVvRW5jb2Rlcjo6bG9hZChjb25zdCBGRm1w ZWdMaWJQYXRocyYgcGF0aHMpCisreworKyAgICBhdXRvIGhhbmRsZXIgPSBzdGQ6Om1ha2Vfc2hh cmVkPEZGbXBlZ0xpYkhhbmRsZXI+KCk7CisrICAgIGlmICghaGFuZGxlci0+bG9hZExpYihwYXRo cy5hdlV0aWxQYXRoLCBwYXRocy5hdkNvZGVjUGF0aCwgcGF0aHMuYXZGb3JtYXRQYXRoLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMuc3dTY2FsZVBhdGgsIHBhdGhzLnN3UmVzYW1w bGVQYXRoKQorKyAgICAgICAgfHwgIWhhbmRsZXItPmxvYWRBcGkoKSkgeworKyAgICAgICAgTE9H VygpIDw8ICJGRm1wZWcgbGlicmFyaWVzIG5vdCBmb3VuZCI7CisrICAgICAgICByZXR1cm4gZmFs c2U7CisrICAgIH0KKysgICAgbV9mZm1wZWdIYW5kbGVyID0gc3RkOjptb3ZlKGhhbmRsZXIpOwor KyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBWaWRlb0VuY29kZXI6Om9wZW4oY29uc3Qg bXVzZTo6aW86OnBhdGhfdCYgZmlsZU5hbWUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCisrewor KyAgICBtX2ZmbXBlZy0+cHRzQ291bnRlciA9IDA7CisrCisrICAgIG1fZmZtcGVnLT53aWR0aCA9 IG9wdGlvbnMud2lkdGg7CisrICAgIG1fZmZtcGVnLT5oZWlnaHQgPSBvcHRpb25zLmhlaWdodDsK KysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfYWxsb2Nfb3V0cHV0X2NvbnRl eHQyKCZtX2ZmbXBlZy0+Zm9ybWF0Q3R4LCBudWxscHRyLCBvcHRpb25zLmZvcm1hdC5jX3N0cigp LCBmaWxlTmFtZS5jX3N0cigpKSA8IDAKKysgICAgICAgIHx8ICFtX2ZmbXBlZy0+Zm9ybWF0Q3R4 KSB7CisrICAgICAgICBMT0dFKCkgPDwgImZhaWxlZCB0byBhbGxvY2F0ZSBvdXRwdXQgY29udGV4 dCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgLy8gQWRkIHRoZSB2 aWRlbyBzdHJlYW0KKysgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtID0gbV9mZm1wZWdIYW5kbGVy LT5hdmZvcm1hdF9uZXdfc3RyZWFtKG1fZmZtcGVnLT5mb3JtYXRDdHgsIG51bGxwdHIpOworKyAg ICBpZiAoIW1fZmZtcGVnLT52aWRlb1N0cmVhbSkgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWls ZWQgYWxsb2NhdGUgc3RyZWFtIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor KyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPnRpbWVfYmFzZS5kZW4gPSBvcHRpb25zLmZwczsK KysgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50aW1lX2Jhc2UubnVtID0gMTsKKysKKysgICAg Ly8gZmluZCB0aGUgdmlkZW8gZW5jb2RlcgorKyAgICBtX2ZmbXBlZy0+Y29kZWMgPSBtX2ZmbXBl Z0hhbmRsZXItPmF2Y29kZWNfZmluZF9lbmNvZGVyKEFWX0NPREVDX0lEX0gyNjQpOworKyAgICBp ZiAoIW1fZmZtcGVnLT5jb2RlYykgeworKyAgICAgICAgTE9HRSgpIDw8ICJub3QgZm91bmQgY29k ZWMiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIG1fZmZtcGVnLT5jb2Rl Y0N0eCA9IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19hbGxvY19jb250ZXh0MyhtX2ZmbXBlZy0+ Y29kZWMpOworKyAgICBpZiAobV9mZm1wZWctPmNvZGVjQ3R4ID09IG51bGxwdHIpIHsKKysgICAg ICAgIExPR0UoKSA8PCAiZmFpbGVkIHRvIGFsbG9jYXRlIEFWIGNvbnRleHQiOworKyAgICAgICAg cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+Y29k ZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfVklERU87CisrICAgIG1fZmZtcGVnLT52 aWRlb1N0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfSDI2NDsKKysgICAg bV9mZm1wZWctPnZpZGVvU3RyZWFtLT5jb2RlY3Bhci0+d2lkdGggPSBvcHRpb25zLndpZHRoOwor KyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyLT5oZWlnaHQgPSBvcHRpb25zLmhl aWdodDsKKysgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT5jb2RlY3Bhci0+Zm9ybWF0ID0gQVZf UElYX0ZNVF9ZVVY0MjBQOworKyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyLT5i aXRfcmF0ZSA9IG9wdGlvbnMuYml0cmF0ZTsKKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+ YXZjb2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRleHQobV9mZm1wZWctPmNvZGVjQ3R4LCBtX2ZmbXBl Zy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyKSA8IDApIHsKKysgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZjb2RlY19mcmVlX2NvbnRleHQoJm1fZmZtcGVnLT5jb2RlY0N0eCk7CisrICAgICAgICBM T0dFKCkgPDwgImZhaWxlZCB0byBzZXQgY29kZWMgcGFyYW1ldGVycyBmcm9tIHN0cmVhbSI7Cisr ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4 LT5wcm9maWxlID0gQVZfUFJPRklMRV9IMjY0X01BSU47CisrICAgIG1fZmZtcGVnLT5jb2RlY0N0 eC0+dGltZV9iYXNlLmRlbiA9IG9wdGlvbnMuZnBzOworKyAgICBtX2ZmbXBlZy0+Y29kZWNDdHgt PnRpbWVfYmFzZS5udW0gPSAxOworKyAgICBtX2ZmbXBlZy0+Y29kZWNDdHgtPmdvcF9zaXplID0g b3B0aW9ucy5nb3A7CisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+dGhyZWFkX2NvdW50ID0gMTA7 CisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+bWF4X2JfZnJhbWVzID0gMDsKKysgICAgbV9mZm1w ZWdIYW5kbGVyLT5hdl9vcHRfc2V0X2ludChtX2ZmbXBlZy0+Y29kZWNDdHgsICJiX3N0cmF0ZWd5 IiwgMSwgMCk7CisrCisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+bWVfY21wID0gMTsKKysgICAg bV9mZm1wZWctPmNvZGVjQ3R4LT5tZV9yYW5nZSA9IDE2OworKyAgICBtX2ZmbXBlZ0hhbmRsZXIt PmF2X29wdF9zZXRfaW50KG1fZmZtcGVnLT5jb2RlY0N0eCwgImhleCIsIDEsIDApOworKworKyAg ICBtX2ZmbXBlZy0+Y29kZWNDdHgtPnFtaW4gPSAxMDsKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4 LT5xbWF4ID0gNTE7CisrICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfb3B0X3NldF9pbnQobV9mZm1w ZWctPmNvZGVjQ3R4LCAic2NfdGhyZXNob2xkIiwgNDAsIDApOworKyAgICBtX2ZmbXBlZy0+Y29k ZWNDdHgtPmZsYWdzIHw9IEFWX0NPREVDX0ZMQUdfTE9PUF9GSUxURVI7CisrICAgIG1fZmZtcGVn LT5jb2RlY0N0eC0+bWVfc3VicGVsX3F1YWxpdHkgPSA1OworKyAgICBtX2ZmbXBlZy0+Y29kZWND dHgtPmlfcXVhbnRfZmFjdG9yID0gMC43MWY7CisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+cWNv bXByZXNzID0gMC42ZjsKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4LT5tYXhfcWRpZmYgPSA0Owor KworKyAgICBpZiAobV9mZm1wZWctPmZvcm1hdEN0eC0+b2Zvcm1hdC0+ZmxhZ3MgJiBBVkZNVF9H TE9CQUxIRUFERVIpIHsKKysgICAgICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+ZmxhZ3MgfD0gQVZf Q09ERUNfRkxBR19HTE9CQUxfSEVBREVSOworKyAgICB9CisrCisrICAgIGlmIChtX2ZmbXBlZ0hh bmRsZXItPmF2Y29kZWNfb3BlbjIobV9mZm1wZWctPmNvZGVjQ3R4LCBtX2ZmbXBlZy0+Y29kZWMs IG51bGxwdHIpIDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWlsZWQgb3BlbiBjb2RlYyI7 CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgLy8gQ29weSBjb2RlYyBw YXJhbXMgdG8gc3RyZWFtIEFGVEVSIG9wZW4gLSBjb2RlYyBhZGRzIGV4dHJhZGF0YSAoU1BTL1BQ UykgZHVyaW5nIG9wZW4KKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19wYXJhbWV0 ZXJzX2Zyb21fY29udGV4dChtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyLCBtX2ZmbXBl Zy0+Y29kZWNDdHgpIDwgMCkgeworKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX2Zy ZWVfY29udGV4dCgmbV9mZm1wZWctPmNvZGVjQ3R4KTsKKysgICAgICAgIExPR0UoKSA8PCAiZmFp bGVkIHRvIGNvcHkgY29kZWMgcGFyYW1ldGVycyB0byBzdHJlYW0iOworKyAgICAgICAgcmV0dXJu IGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIEFsbG9jYXRlIHRoZSBZVVYgZnJhbWUKKysgICAg bV9mZm1wZWctPnBwaWN0dXJlID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9mcmFtZV9hbGxvYygpOwor KyAgICBpZiAoIW1fZmZtcGVnLT5wcGljdHVyZSkgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWls ZWQgYWxsb2NhdGUgZnJhbWUiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisr ICAgIG1fZmZtcGVnLT5wcGljdHVyZS0+d2lkdGggPSBvcHRpb25zLndpZHRoOworKyAgICBtX2Zm bXBlZy0+cHBpY3R1cmUtPmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0OworKyAgICBtX2ZmbXBlZy0+ cHBpY3R1cmUtPmZvcm1hdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDsKKysKKysgICAgaW50IHNpemUg PSBtX2ZmbXBlZ0hhbmRsZXItPmF2X2ltYWdlX2dldF9idWZmZXJfc2l6ZShBVl9QSVhfRk1UX1lV VjQyMFAsIG1fZmZtcGVnLT53aWR0aCwgbV9mZm1wZWctPmhlaWdodCwgMSk7CisrICAgIG1fZmZt cGVnLT5waWN0dXJlX2J1ZiA9IG5ldyB1aW50OF90W3NpemVdOworKyAgICBpZiAoIW1fZmZtcGVn LT5waWN0dXJlX2J1ZikgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWlsZWQgYWxsb2NhdGUgZnJh bWUgYnVmIjsKKysgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfZnJhbWVfZnJlZSgmbV9mZm1w ZWctPnBwaWN0dXJlKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAv LyBTZXR1cCB0aGUgcGxhbmVzCisrICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfaW1hZ2VfZmlsbF9h cnJheXMobV9mZm1wZWctPnBwaWN0dXJlLT5kYXRhLCBtX2ZmbXBlZy0+cHBpY3R1cmUtPmxpbmVz aXplLCBtX2ZmbXBlZy0+cGljdHVyZV9idWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLCBtX2ZmbXBlZy0+d2lkdGgsIG1fZmZt cGVnLT5oZWlnaHQsIDEpOworKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmlvX29wZW4o Jm1fZmZtcGVnLT5mb3JtYXRDdHgtPnBiLCBmaWxlTmFtZS5jX3N0cigpLCBBVklPX0ZMQUdfV1JJ VEUpIDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWlsZWQgb3BlbiBmaWxlOiAiIDw8IGZp bGVOYW1lOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGludCByZXQg PSBtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X3dyaXRlX2hlYWRlcihtX2ZmbXBlZy0+Zm9ybWF0 Q3R4LCBOVUxMKTsKKysgICAgaWYgKHJldCA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiZmFp bGVkIHdyaXRlIEFWIGhlYWRlciI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK KysgICAgLy9hdl9kdW1wX2Zvcm1hdChtX2ZmbXBlZy0+Zm9ybWF0Q3R4LCAwLCBmaWxlTmFtZS5j X3N0cigpLCAxKTsKKysKKysgICAgbV9mZm1wZWctPm9wZW5lZCA9IHRydWU7CisrICAgIG1fb3V0 cHV0UGF0aCA9IGZpbGVOYW1lOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrdm9pZCBW aWRlb0VuY29kZXI6OmZpbmlzaEVuY29kZSgpCisreworKyAgICBpZiAoIW1fZmZtcGVnLT5vcGVu ZWQgfHwgbV9mZm1wZWctPmZpbmlzaGVkKSB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysK KysgICAgaW50IHJldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19zZW5kX2ZyYW1lKG1fZmZt cGVnLT5jb2RlY0N0eCwgTlVMTCk7CisrICAgIGlmIChyZXQgPCAwKSB7CisrICAgICAgICBMT0dF KCkgPDwgImZhaWxlZCB0byBmbHVzaCBlbmNvZGVyIGJ1ZmZlciI7CisrICAgICAgICByZXR1cm47 CisrICAgIH0KKysKKysgICAgd2hpbGUgKHRydWUpIHsKKysgICAgICAgIG1fZmZtcGVnLT5wa3Qg PSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9hbGxvYygpOworKyAgICAgICAgcmV0ID0gbV9m Zm1wZWdIYW5kbGVyLT5hdmNvZGVjX3JlY2VpdmVfcGFja2V0KG1fZmZtcGVnLT5jb2RlY0N0eCwg bV9mZm1wZWctPnBrdCk7CisrICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRUFHQUlOKSB8fCBy ZXQgPT0gQVZFUlJPUl9FT0YpIHsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Bh Y2tldF9mcmVlKCZtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg IH0gZWxzZSBpZiAocmV0IDwgMCkgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZf cGFja2V0X2ZyZWUoJm1fZmZtcGVnLT5wa3QpOworKyAgICAgICAgICAgIExPR0UoKSA8PCAiZXJy b3IgZHVyaW5nIGVuY29kaW5nIjsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9Cisr CisrICAgICAgICBtX2ZmbXBlZy0+cGt0LT5wdHMgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Jlc2Nh bGVfcShtX2ZmbXBlZy0+cHRzQ291bnRlciwgbV9mZm1wZWctPmNvZGVjQ3R4LT50aW1lX2Jhc2Us CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPnRpbWVfYmFzZSk7CisrICAgICAgICBtX2ZmbXBl Zy0+cGt0LT5kdHMgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Jlc2NhbGVfcShtX2ZmbXBlZy0+cHRz Q291bnRlciwgbV9mZm1wZWctPmNvZGVjQ3R4LT50aW1lX2Jhc2UsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZmbXBlZy0+dmlk ZW9TdHJlYW0tPnRpbWVfYmFzZSk7CisrCisrICAgICAgICBtX2ZmbXBlZy0+cHRzQ291bnRlcisr OworKworKyAgICAgICAgcmV0ID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9pbnRlcmxlYXZlZF93cml0 ZV9mcmFtZShtX2ZmbXBlZy0+Zm9ybWF0Q3R4LCBtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgIGlm IChyZXQgPCAwKSB7CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJl ZSgmbV9mZm1wZWctPnBrdCk7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAg ICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgmbV9mZm1wZWctPnBrdCk7Cisr ICAgIH0KKysKKysgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl93cml0ZV90cmFpbGVyKG1fZmZtcGVn LT5mb3JtYXRDdHgpOworKworKyAgICBpZiAobV9mZm1wZWctPmZvcm1hdEN0eC0+cGIpIHsKKysg ICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZpb19jbG9zZShtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5w Yik7CisrICAgICAgICBtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5wYiA9IG51bGxwdHI7CisrICAgIH0K KysKKysgICAgbV9mZm1wZWctPmZpbmlzaGVkID0gdHJ1ZTsKKyt9CisrCisrdm9pZCBWaWRlb0Vu Y29kZXI6OmNsb3NlKCkKKyt7CisrICAgIGlmICghbV9mZm1wZWctPm9wZW5lZCkgeworKyAgICAg ICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIGlmICghbV9mZm1wZWctPmZpbmlzaGVkKSB7Cisr ICAgICAgICBmaW5pc2hFbmNvZGUoKTsKKysgICAgfQorKworKyAgICBtX2ZmbXBlZ0hhbmRsZXIt PmF2Y29kZWNfZnJlZV9jb250ZXh0KCZtX2ZmbXBlZy0+Y29kZWNDdHgpOworKworKyAgICBpZiAo bV9mZm1wZWctPnBpY3R1cmVfYnVmKSB7CisrICAgICAgICBkZWxldGVbXSBtX2ZmbXBlZy0+cGlj dHVyZV9idWY7CisrICAgICAgICBtX2ZmbXBlZy0+cGljdHVyZV9idWYgPSAwOworKyAgICB9Cisr CisrICAgIGlmIChtX2ZmbXBlZy0+cHBpY3R1cmUpIHsKKysgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZfZnJhbWVfZnJlZSgmbV9mZm1wZWctPnBwaWN0dXJlKTsKKysgICAgICAgIG1fZmZtcGVn LT5wcGljdHVyZSA9IDA7CisrICAgIH0KKysKKysgICAgaWYgKG1fZmZtcGVnLT5pbWdfY29udmVy dF9jdHgpIHsKKysgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+c3dzX2ZyZWVDb250ZXh0KG1fZmZt cGVnLT5pbWdfY29udmVydF9jdHgpOworKyAgICAgICAgbV9mZm1wZWctPmltZ19jb252ZXJ0X2N0 eCA9IG51bGxwdHI7CisrICAgIH0KKysKKysgICAgaWYgKG1fZmZtcGVnLT5mb3JtYXRDdHgpIHsK KysgICAgICAgIGlmIChtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5wYikgeworKyAgICAgICAgICAgIG1f ZmZtcGVnSGFuZGxlci0+YXZpb19jbG9zZShtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5wYik7CisrICAg ICAgICAgICAgbV9mZm1wZWctPmZvcm1hdEN0eC0+cGIgPSBudWxscHRyOworKyAgICAgICAgfQor KyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9mcmVlX2NvbnRleHQobV9mZm1wZWct PmZvcm1hdEN0eCk7CisrICAgICAgICBtX2ZmbXBlZy0+Zm9ybWF0Q3R4ID0gbnVsbHB0cjsKKysg ICAgfQorKyAgICBtX2ZmbXBlZy0+b3BlbmVkID0gZmFsc2U7CisrICAgIG1fZmZtcGVnLT5maW5p c2hlZCA9IGZhbHNlOworKworKyAgICBtX291dHB1dFBhdGggPSBpbzo6cGF0aF90KCk7CisrfQor KworK2Jvb2wgVmlkZW9FbmNvZGVyOjplbmNvZGVJbWFnZShjb25zdCBRSW1hZ2UmIGltZykKKyt7 CisrICAgIGlmICghbV9mZm1wZWctPm9wZW5lZCkgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor KyAgICB9CisrCisrICAgIGNvbnZlcnRJbWFnZV9zd3MoaW1nKTsKKysKKysgICAgbV9mZm1wZWct PnBwaWN0dXJlLT5wdHMgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Jlc2NhbGVfcShtX2ZmbXBlZy0+ Y29kZWNDdHgtPmZyYW1lX251bSwgbV9mZm1wZWctPmNvZGVjQ3R4LT50aW1lX2Jhc2UsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bV9mZm1wZWctPnZpZGVvU3RyZWFtLT50aW1lX2Jhc2UpOworKworKyAgICBpbnQgcmV0ID0gbV9m Zm1wZWdIYW5kbGVyLT5hdmNvZGVjX3NlbmRfZnJhbWUobV9mZm1wZWctPmNvZGVjQ3R4LCBtX2Zm bXBlZy0+cHBpY3R1cmUpOworKyAgICBpZiAocmV0IDwgMCkgeworKyAgICAgICAgcmV0dXJuIGZh bHNlOworKyAgICB9CisrCisrICAgIHdoaWxlIChyZXQgPj0gMCkgeworKyAgICAgICAgbV9mZm1w ZWctPnBrdCA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2FsbG9jKCk7CisrICAgICAgICBy ZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQobV9mZm1wZWctPmNv ZGVjQ3R4LCBtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdB SU4pIHx8IHJldCA9PSBBVkVSUk9SX0VPRikgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZfcGFja2V0X2ZyZWUoJm1fZmZtcGVnLT5wa3QpOworKyAgICAgICAgICAgIHJldHVybiB0 cnVlOworKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7CisrICAgICAgICAgICAgbV9mZm1w ZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgmbV9mZm1wZWctPnBrdCk7CisrICAgICAgICAgICAg TE9HRSgpIDw8ICJlcnJvciBkdXJpbmcgZW5jb2RpbmciOworKyAgICAgICAgICAgIHJldHVybiBm YWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIG1fZmZtcGVnLT5wa3QtPnB0cyA9IG1fZmZt cGVnSGFuZGxlci0+YXZfcmVzY2FsZV9xKG1fZmZtcGVnLT5wdHNDb3VudGVyLCBtX2ZmbXBlZy0+ Y29kZWNDdHgtPnRpbWVfYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNl KTsKKysgICAgICAgIG1fZmZtcGVnLT5wa3QtPmR0cyA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcmVz Y2FsZV9xKG1fZmZtcGVnLT5wdHNDb3VudGVyLCBtX2ZmbXBlZy0+Y29kZWNDdHgtPnRpbWVfYmFz ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNlKTsKKysKKysgICAgICAgIG1f ZmZtcGVnLT5wdHNDb3VudGVyKys7CisrCisrICAgICAgICByZXQgPSBtX2ZmbXBlZ0hhbmRsZXIt PmF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKG1fZmZtcGVnLT5mb3JtYXRDdHgsIG1fZmZtcGVn LT5wa3QpOworKyAgICAgICAgaWYgKHJldCA8IDApIHsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hh bmRsZXItPmF2X3BhY2tldF9mcmVlKCZtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tl dF9mcmVlKCZtX2ZmbXBlZy0+cGt0KTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9 CisrCisrYm9vbCBWaWRlb0VuY29kZXI6OmVuY29kZVZpZGVvKGNvbnN0IEJ5dGVBcnJheSYgdmlk ZW9EYXRhLCBpbnQgbWF4RnJhbWVzKQorK3sKKysgICAgaWYgKCFtX2ZmbXBlZy0+b3BlbmVkKSB7 CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBlbmNvZGVyIG5vdCBvcGVuZWQiOwor KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIE1lbW9yeVJlYWRDb250ZXh0 IG1lbUN0eDsKKysgICAgbWVtQ3R4LmRhdGEgPSB2aWRlb0RhdGEuY29uc3REYXRhKCk7CisrICAg IG1lbUN0eC5zaXplID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4odmlkZW9EYXRhLnNpemUoKSk7Cisr ICAgIG1lbUN0eC5wb3MgPSAwOworKworKyAgICBzdGF0aWMgY29uc3RleHByIGludCBBVklPX0JV Rl9TSVpFID0gNDA5NjsKKysgICAgdW5zaWduZWQgY2hhciogYXZpb0J1ZiA9IHN0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXIqPihtX2ZmbXBlZ0hhbmRsZXItPmF2X21hbGxvYyhBVklPX0JVRl9TSVpF KSk7CisrICAgIGlmICghYXZpb0J1ZikgeworKyAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRl bzogZmFpbGVkIHRvIGFsbG9jYXRlIGF2aW8gYnVmZmVyIjsKKysgICAgICAgIHJldHVybiBmYWxz ZTsKKysgICAgfQorKworKyAgICBBVklPQ29udGV4dCogYXZpb0N0eCA9IG1fZmZtcGVnSGFuZGxl ci0+YXZpb19hbGxvY19jb250ZXh0KAorKyAgICAgICAgYXZpb0J1ZiwgQVZJT19CVUZfU0laRSwg MCwgJm1lbUN0eCwgbWVtUmVhZFBhY2tldCwgbnVsbHB0ciwgbWVtU2Vlayk7CisrICAgIGlmICgh YXZpb0N0eCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZmFpbGVkIHRvIGFs bG9jYXRlIEFWSU9Db250ZXh0IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor KyAgICBBVkZvcm1hdENvbnRleHQqIGlucHV0Rm10Q3R4ID0gbV9mZm1wZWdIYW5kbGVyLT5hdmZv cm1hdF9hbGxvY19jb250ZXh0KCk7CisrICAgIGlmICghaW5wdXRGbXRDdHgpIHsKKysgICAgICAg IG1fZmZtcGVnSGFuZGxlci0+YXZpb19jb250ZXh0X2ZyZWUoJmF2aW9DdHgpOworKyAgICAgICAg TE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZmFpbGVkIHRvIGFsbG9jYXRlIGZvcm1hdCBjb250ZXh0 IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpbnB1dEZtdEN0eC0+cGIg PSBhdmlvQ3R4OworKworKyAgICBBVkNvZGVjQ29udGV4dCogZGVjb2RlQ3R4ID0gbnVsbHB0cjsK KysgICAgQVZGcmFtZSogZGVjb2RlZEZyYW1lID0gbnVsbHB0cjsKKysgICAgQVZQYWNrZXQqIHBh Y2tldCA9IG51bGxwdHI7CisrCisrICAgIFN3c0NvbnRleHQqIGRlY1N3c0N0eCA9IG51bGxwdHI7 CisrCisrICAgIERFRkVSIHsKKysgICAgICAgIGlmIChkZWNTd3NDdHgpIHsKKysgICAgICAgICAg ICBtX2ZmbXBlZ0hhbmRsZXItPnN3c19mcmVlQ29udGV4dChkZWNTd3NDdHgpOworKyAgICAgICAg fQorKyAgICAgICAgaWYgKGlucHV0Rm10Q3R4KSB7CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5k bGVyLT5hdmZvcm1hdF9jbG9zZV9pbnB1dCgmaW5wdXRGbXRDdHgpOworKyAgICAgICAgfQorKyAg ICAgICAgaWYgKGF2aW9DdHgpIHsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2aW9f Y29udGV4dF9mcmVlKCZhdmlvQ3R4KTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWNvZGVD dHgpIHsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfZnJlZV9jb250ZXh0 KCZkZWNvZGVDdHgpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlY29kZWRGcmFtZSkgewor KyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfZnJhbWVfZnJlZSgmZGVjb2RlZEZyYW1l KTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChwYWNrZXQpIHsKKysgICAgICAgICAgICBtX2Zm bXBlZ0hhbmRsZXItPmF2X3BhY2tldF9mcmVlKCZwYWNrZXQpOworKyAgICAgICAgfQorKyAgICB9 OworKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9vcGVuX2lucHV0KCZpbnB1 dEZtdEN0eCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikgPCAwKSB7CisrICAgICAgICBMT0dF KCkgPDwgImVuY29kZVZpZGVvOiBmYWlsZWQgdG8gb3BlbiBpbnB1dCBmcm9tIG1lbW9yeSI7Cisr ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxl ci0+YXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbyhpbnB1dEZtdEN0eCwgbnVsbHB0cikgPCAwKSB7 CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBmYWlsZWQgdG8gZmluZCBzdHJlYW0g aW5mbyI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaW50IHZpZGVv U3RyZWFtSWR4ID0gLTE7CisrICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dEZtdEN0 eC0+bmJfc3RyZWFtczsgaSsrKSB7CisrICAgICAgICBpZiAoaW5wdXRGbXRDdHgtPnN0cmVhbXNb aV0tPmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgeworKyAgICAg ICAgICAgIHZpZGVvU3RyZWFtSWR4ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKKysgICAgICAgICAg ICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodmlkZW9TdHJlYW1JZHgg PCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBubyB2aWRlbyBzdHJlYW0g Zm91bmQiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIEFWQ29kZWNQ YXJhbWV0ZXJzKiBjb2RlY1BhciA9IGlucHV0Rm10Q3R4LT5zdHJlYW1zW3ZpZGVvU3RyZWFtSWR4 XS0+Y29kZWNwYXI7CisrCisrICAgIGNvbnN0IEFWQ29kZWMqIGRlY29kZXIgPSBtX2ZmbXBlZ0hh bmRsZXItPmF2Y29kZWNfZmluZF9kZWNvZGVyKGNvZGVjUGFyLT5jb2RlY19pZCk7CisrICAgIGlm ICghZGVjb2RlcikgeworKyAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZGVjb2RlciBu b3QgZm91bmQgZm9yIGNvZGVjX2lkICIgPDwgY29kZWNQYXItPmNvZGVjX2lkOworKyAgICAgICAg cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGRlY29kZUN0eCA9IG1fZmZtcGVnSGFuZGxl ci0+YXZjb2RlY19hbGxvY19jb250ZXh0MyhkZWNvZGVyKTsKKysgICAgaWYgKCFkZWNvZGVDdHgp IHsKKysgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGZhaWxlZCB0byBhbGxvY2F0ZSBk ZWNvZGVyIGNvbnRleHQiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAg IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRleHQoZGVjb2RlQ3R4 LCBjb2RlY1Bhcik7CisrCisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfb3BlbjIo ZGVjb2RlQ3R4LCBkZWNvZGVyLCBudWxscHRyKSA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAi ZW5jb2RlVmlkZW86IGZhaWxlZCB0byBvcGVuIGRlY29kZXIiOworKyAgICAgICAgcmV0dXJuIGZh bHNlOworKyAgICB9CisrCisrICAgIGRlY1N3c0N0eCA9IG1fZmZtcGVnSGFuZGxlci0+c3dzX2dl dENhY2hlZENvbnRleHQoCisrICAgICAgICBudWxscHRyLAorKyAgICAgICAgZGVjb2RlQ3R4LT53 aWR0aCwgZGVjb2RlQ3R4LT5oZWlnaHQsIGRlY29kZUN0eC0+cGl4X2ZtdCwKKysgICAgICAgIG1f ZmZtcGVnLT53aWR0aCwgbV9mZm1wZWctPmhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQLAorKyAg ICAgICAgU1dTX0JJQ1VCSUMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworKworKyAgICBp ZiAoIWRlY1N3c0N0eCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZmFpbGVk IHRvIGNyZWF0ZSBzd3MgY29udGV4dCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K KysKKysgICAgZGVjb2RlZEZyYW1lID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9mcmFtZV9hbGxvYygp OworKyAgICBwYWNrZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9hbGxvYygpOworKwor KyAgICBpbnQgZnJhbWVzRW5jb2RlZCA9IDA7CisrICAgIGJvb2wgZG9uZSA9IGZhbHNlOworKwor KyAgICBhdXRvIGVuY29kZURlY29kZWRGcmFtZSA9IFsmXSgpIC0+IGJvb2wgeworKyAgICAgICAg bV9mZm1wZWdIYW5kbGVyLT5zd3Nfc2NhbGUoZGVjU3dzQ3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVjb2RlZEZyYW1lLT5kYXRhLCBkZWNvZGVkRnJhbWUtPmxpbmVz aXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZGVjb2RlZEZyYW1l LT5oZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZmbXBlZy0+ cHBpY3R1cmUtPmRhdGEsIG1fZmZtcGVnLT5wcGljdHVyZS0+bGluZXNpemUpOworKworKyAgICAg ICAgbV9mZm1wZWctPnBwaWN0dXJlLT5wdHMgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Jlc2NhbGVf cSgKKysgICAgICAgICAgICBtX2ZmbXBlZy0+Y29kZWNDdHgtPmZyYW1lX251bSwgbV9mZm1wZWct PmNvZGVjQ3R4LT50aW1lX2Jhc2UsIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNlKTsK KysKKysgICAgICAgIGludCByZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfc2VuZF9mcmFt ZShtX2ZmbXBlZy0+Y29kZWNDdHgsIG1fZmZtcGVnLT5wcGljdHVyZSk7CisrICAgICAgICBpZiAo cmV0IDwgMCkgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysg ICAgICAgIHdoaWxlIChyZXQgPj0gMCkgeworKyAgICAgICAgICAgIEFWUGFja2V0KiBvdXRQa3Qg PSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9hbGxvYygpOworKyAgICAgICAgICAgIHJldCA9 IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19yZWNlaXZlX3BhY2tldChtX2ZmbXBlZy0+Y29kZWND dHgsIG91dFBrdCk7CisrICAgICAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVBR0FJTikgfHwg cmV0ID09IEFWRVJST1JfRU9GKSB7CisrICAgICAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+ YXZfcGFja2V0X2ZyZWUoJm91dFBrdCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAg ICAgICAgIH0KKysgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworKyAgICAgICAgICAgICAgICBt X2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9mcmVlKCZvdXRQa3QpOworKyAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIG91dFBrdC0+ cHRzID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9yZXNjYWxlX3EobV9mZm1wZWctPnB0c0NvdW50ZXIs IG1fZmZtcGVnLT5jb2RlY0N0eC0+dGltZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50 aW1lX2Jhc2UpOworKyAgICAgICAgICAgIG91dFBrdC0+ZHRzID0gbV9mZm1wZWdIYW5kbGVyLT5h dl9yZXNjYWxlX3EobV9mZm1wZWctPnB0c0NvdW50ZXIsIG1fZmZtcGVnLT5jb2RlY0N0eC0+dGlt ZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50aW1lX2Jhc2UpOworKyAgICAgICAgICAg IG1fZmZtcGVnLT5wdHNDb3VudGVyKys7CisrCisrICAgICAgICAgICAgbV9mZm1wZWdIYW5kbGVy LT5hdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZShtX2ZmbXBlZy0+Zm9ybWF0Q3R4LCBvdXRQa3Qp OworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2ZyZWUoJm91dFBrdCk7 CisrICAgICAgICB9CisrCisrICAgICAgICBmcmFtZXNFbmNvZGVkKys7CisrICAgICAgICBpZiAo bWF4RnJhbWVzID4gMCAmJiBmcmFtZXNFbmNvZGVkID49IG1heEZyYW1lcykgeworKyAgICAgICAg ICAgIGRvbmUgPSB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIHRydWU7Cisr ICAgIH07CisrCisrICAgIHdoaWxlICghZG9uZSAmJiBtX2ZmbXBlZ0hhbmRsZXItPmF2X3JlYWRf ZnJhbWUoaW5wdXRGbXRDdHgsIHBhY2tldCkgPj0gMCkgeworKyAgICAgICAgaWYgKHBhY2tldC0+ c3RyZWFtX2luZGV4ICE9IHZpZGVvU3RyZWFtSWR4KSB7CisrICAgICAgICAgICAgbV9mZm1wZWdI YW5kbGVyLT5hdl9wYWNrZXRfdW5yZWYocGFja2V0KTsKKysgICAgICAgICAgICBjb250aW51ZTsK KysgICAgICAgIH0KKysKKysgICAgICAgIGludCByZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29k ZWNfc2VuZF9wYWNrZXQoZGVjb2RlQ3R4LCBwYWNrZXQpOworKyAgICAgICAgbV9mZm1wZWdIYW5k bGVyLT5hdl9wYWNrZXRfdW5yZWYocGFja2V0KTsKKysKKysgICAgICAgIHdoaWxlICghZG9uZSAm JiByZXQgPj0gMCkgeworKyAgICAgICAgICAgIHJldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZjb2Rl Y19yZWNlaXZlX2ZyYW1lKGRlY29kZUN0eCwgZGVjb2RlZEZyYW1lKTsKKysgICAgICAgICAgICBp ZiAocmV0ID09IEFWRVJST1IoRUFHQUlOKSB8fCByZXQgPT0gQVZFUlJPUl9FT0YpIHsKKysgICAg ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGlmIChyZXQg PCAwKSB7CisrICAgICAgICAgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGVycm9yIHJl Y2VpdmluZyBkZWNvZGVkIGZyYW1lIjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiAoIWVuY29kZURlY29kZWRGcmFtZSgp KSB7CisrICAgICAgICAgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGVycm9yIGVuY29k aW5nIGZyYW1lIjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAg IH0KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIWRvbmUpIHsKKysgICAgICAgIG1f ZmZtcGVnSGFuZGxlci0+YXZjb2RlY19zZW5kX3BhY2tldChkZWNvZGVDdHgsIG51bGxwdHIpOwor KyAgICAgICAgd2hpbGUgKHRydWUpIHsKKysgICAgICAgICAgICBpbnQgcmV0ID0gbV9mZm1wZWdI YW5kbGVyLT5hdmNvZGVjX3JlY2VpdmVfZnJhbWUoZGVjb2RlQ3R4LCBkZWNvZGVkRnJhbWUpOwor KyAgICAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pIHx8IHJldCA9PSBBVkVSUk9S X0VPRikgeworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAg ICAgICAgaWYgKHJldCA8IDAgfHwgIWVuY29kZURlY29kZWRGcmFtZSgpIHx8IGRvbmUpIHsKKysg ICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9 CisrCisrICAgIExPR0koKSA8PCAiZW5jb2RlVmlkZW86IGVuY29kZWQgIiA8PCBmcmFtZXNFbmNv ZGVkIDw8ICIgZnJhbWVzIGZyb20gbWVtb3J5IGJ1ZmZlciI7CisrICAgIHJldHVybiB0cnVlOwor K30KKysKKytib29sIFZpZGVvRW5jb2Rlcjo6YWRkQXVkaW8oY29uc3QgaW86OnBhdGhfdCYgYXVk aW9QYXRoKQorK3sKKysgICAgaWYgKG1fb3V0cHV0UGF0aC5lbXB0eSgpKSB7CisrICAgICAgICBM T0dFKCkgPDwgImFkZEF1ZGlvOiBlbmNvZGVyIHdhcyBub3Qgb3BlbmVkIG9yIHBhdGggbm90IHNl dCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgY29uc3QgaW86OnBh dGhfdCB2aWRlb1BhdGggPSBtX291dHB1dFBhdGg7CisrICAgIGNvbnN0IGlvOjpwYXRoX3QgdG1w UGF0aCA9IG1fb3V0cHV0UGF0aCArICIudG1wIjsKKysKKysgICAgQVZGb3JtYXRDb250ZXh0KiB2 aWRlb0ZtdEN0eCA9IG51bGxwdHI7CisrICAgIEFWRm9ybWF0Q29udGV4dCogYXVkaW9GbXRDdHgg PSBudWxscHRyOworKyAgICBBVkZvcm1hdENvbnRleHQqIG91dHB1dEZtdEN0eCA9IG51bGxwdHI7 CisrCisrICAgIGJvb2wgY2xlYW5lZCA9IGZhbHNlOworKyAgICBhdXRvIGNsZWFudXAgPSBbJl0o KSB7CisrICAgICAgICBpZiAoY2xlYW5lZCkgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAg ICAgIH0KKysKKysgICAgICAgIGlmICh2aWRlb0ZtdEN0eCkgeworKyAgICAgICAgICAgIG1fZmZt cGVnSGFuZGxlci0+YXZmb3JtYXRfY2xvc2VfaW5wdXQoJnZpZGVvRm10Q3R4KTsKKysgICAgICAg IH0KKysgICAgICAgIGlmIChhdWRpb0ZtdEN0eCkgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFu ZGxlci0+YXZmb3JtYXRfY2xvc2VfaW5wdXQoJmF1ZGlvRm10Q3R4KTsKKysgICAgICAgIH0KKysg ICAgICAgIGlmIChvdXRwdXRGbXRDdHgpIHsKKysgICAgICAgICAgICBpZiAob3V0cHV0Rm10Q3R4 LT5wYikgeworKyAgICAgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2aW9fY2xvc2Uob3V0 cHV0Rm10Q3R4LT5wYik7CisrICAgICAgICAgICAgICAgIG91dHB1dEZtdEN0eC0+cGIgPSBudWxs cHRyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9y bWF0X2ZyZWVfY29udGV4dChvdXRwdXRGbXRDdHgpOworKyAgICAgICAgfQorKworKyAgICAgICAg Y2xlYW5lZCA9IHRydWU7CisrICAgIH07CisrCisrICAgIERFRkVSIHsKKysgICAgICAgIGNsZWFu dXAoKTsKKysgICAgfTsKKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfb3Bl bl9pbnB1dCgmdmlkZW9GbXRDdHgsIHZpZGVvUGF0aC5jX3N0cigpLCBudWxscHRyLCBudWxscHRy KSA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGZhaWxlZCB0byBvcGVuIHZp ZGVvIGlucHV0OiAiIDw8IHZpZGVvUGF0aDsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKHZp ZGVvRm10Q3R4LCBudWxscHRyKSA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86 IGZhaWxlZCB0byBmaW5kIHZpZGVvIHN0cmVhbSBpbmZvIjsKKysgICAgICAgIHJldHVybiBmYWxz ZTsKKysgICAgfQorKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9vcGVuX2lu cHV0KCZhdWRpb0ZtdEN0eCwgYXVkaW9QYXRoLmNfc3RyKCksIG51bGxwdHIsIG51bGxwdHIpIDwg MCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzogZmFpbGVkIHRvIG9wZW4gYXVkaW8g aW5wdXQ6ICIgPDwgYXVkaW9QYXRoOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr ICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oYXVkaW9G bXRDdHgsIG51bGxwdHIpIDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzogZmFp bGVkIHRvIGZpbmQgYXVkaW8gc3RyZWFtIGluZm8iOworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor KyAgICB9CisrCisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X2FsbG9jX291dHB1 dF9jb250ZXh0Migmb3V0cHV0Rm10Q3R4LCBudWxscHRyLCAibXA0IiwgdG1wUGF0aC5jX3N0cigp KSA8IDAgfHwgIW91dHB1dEZtdEN0eCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzog ZmFpbGVkIHRvIGFsbG9jYXRlIG91dHB1dCBjb250ZXh0IjsKKysgICAgICAgIHJldHVybiBmYWxz ZTsKKysgICAgfQorKworKyAgICBpbnQgdmlkZW9JbklkeCA9IC0xOworKyAgICBpbnQgYXVkaW9J bklkeCA9IC0xOworKyAgICBpbnQgb3V0VmlkZW9JZHggPSAtMTsKKysgICAgaW50IG91dEF1ZGlv SWR4ID0gLTE7CisrCisrICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2aWRlb0ZtdEN0eC0+ bmJfc3RyZWFtczsgaSsrKSB7CisrICAgICAgICBpZiAodmlkZW9GbXRDdHgtPnN0cmVhbXNbaV0t PmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgeworKyAgICAgICAg ICAgIHZpZGVvSW5JZHggPSBzdGF0aWNfY2FzdDxpbnQ+KGkpOworKyAgICAgICAgICAgIEFWU3Ry ZWFtKiBvdXRTdHJlYW0gPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X25ld19zdHJlYW0ob3V0 cHV0Rm10Q3R4LCBudWxscHRyKTsKKysgICAgICAgICAgICBpZiAoIW91dFN0cmVhbSkgeworKyAg ICAgICAgICAgICAgICBMT0dFKCkgPDwgImFkZEF1ZGlvOiBmYWlsZWQgdG8gY3JlYXRlIG91dHB1 dCB2aWRlbyBzdHJlYW0iOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg ICAgICAgfQorKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19wYXJhbWV0ZXJz X2NvcHkob3V0U3RyZWFtLT5jb2RlY3BhciwgdmlkZW9GbXRDdHgtPnN0cmVhbXNbaV0tPmNvZGVj cGFyKTsKKysgICAgICAgICAgICBvdXRTdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190YWcgPSAwOwor KyAgICAgICAgICAgIG91dFN0cmVhbS0+dGltZV9iYXNlID0gdmlkZW9GbXRDdHgtPnN0cmVhbXNb aV0tPnRpbWVfYmFzZTsKKysgICAgICAgICAgICBvdXRWaWRlb0lkeCA9IG91dFN0cmVhbS0+aW5k ZXg7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IGF1ZGlvRm10Q3R4LT5uYl9zdHJlYW1zOyBpKyspIHsKKysg ICAgICAgIGlmIChhdWRpb0ZtdEN0eC0+c3RyZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX3R5cGUg PT0gQVZNRURJQV9UWVBFX0FVRElPKSB7CisrICAgICAgICAgICAgYXVkaW9JbklkeCA9IHN0YXRp Y19jYXN0PGludD4oaSk7CisrICAgICAgICAgICAgQVZTdHJlYW0qIG91dFN0cmVhbSA9IG1fZmZt cGVnSGFuZGxlci0+YXZmb3JtYXRfbmV3X3N0cmVhbShvdXRwdXRGbXRDdHgsIG51bGxwdHIpOwor KyAgICAgICAgICAgIGlmICghb3V0U3RyZWFtKSB7CisrICAgICAgICAgICAgICAgIExPR0UoKSA8 PCAiYWRkQXVkaW86IGZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGF1ZGlvIHN0cmVhbSI7CisrICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg bV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3BhcmFtZXRlcnNfY29weShvdXRTdHJlYW0tPmNvZGVj cGFyLCBhdWRpb0ZtdEN0eC0+c3RyZWFtc1tpXS0+Y29kZWNwYXIpOworKyAgICAgICAgICAgIG91 dFN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyA9IDA7CisrICAgICAgICAgICAgb3V0U3RyZWFt LT50aW1lX2Jhc2UgPSBhdWRpb0ZtdEN0eC0+c3RyZWFtc1tpXS0+dGltZV9iYXNlOworKyAgICAg ICAgICAgIG91dEF1ZGlvSWR4ID0gb3V0U3RyZWFtLT5pbmRleDsKKysgICAgICAgICAgICBicmVh azsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodmlkZW9JbklkeCA8IDAgfHwgYXVk aW9JbklkeCA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGNvdWxkIG5vdCBm aW5kIHZpZGVvIG9yIGF1ZGlvIHN0cmVhbSI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg IH0KKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZpb19vcGVuKCZvdXRwdXRGbXRDdHgt PnBiLCB0bXBQYXRoLmNfc3RyKCksIEFWSU9fRkxBR19XUklURSkgPCAwKSB7CisrICAgICAgICBM T0dFKCkgPDwgImFkZEF1ZGlvOiBmYWlsZWQgdG8gb3BlbiBvdXRwdXQgZmlsZTogIiA8PCB0bXBQ YXRoOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChtX2ZmbXBl Z0hhbmRsZXItPmF2Zm9ybWF0X3dyaXRlX2hlYWRlcihvdXRwdXRGbXRDdHgsIG51bGxwdHIpIDwg MCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzogZmFpbGVkIHRvIHdyaXRlIGhlYWRl ciI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgQVZQYWNrZXQqIHBr dCA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2FsbG9jKCk7CisrCisrICAgIHdoaWxlICht X2ZmbXBlZ0hhbmRsZXItPmF2X3JlYWRfZnJhbWUodmlkZW9GbXRDdHgsIHBrdCkgPj0gMCkgewor KyAgICAgICAgaWYgKHBrdC0+c3RyZWFtX2luZGV4ID09IHZpZGVvSW5JZHgpIHsKKysgICAgICAg ICAgICBwa3QtPnN0cmVhbV9pbmRleCA9IG91dFZpZGVvSWR4OworKyAgICAgICAgICAgIG1fZmZt cGVnSGFuZGxlci0+YXZfcGFja2V0X3Jlc2NhbGVfdHMocGt0LCB2aWRlb0ZtdEN0eC0+c3RyZWFt c1t2aWRlb0luSWR4XS0+dGltZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0Rm10Q3R4LT5zdHJlYW1zW291dFZpZGVvSWR4XS0+ dGltZV9iYXNlKTsKKysgICAgICAgICAgICBwa3QtPnBvcyA9IC0xOworKyAgICAgICAgICAgIG1f ZmZtcGVnSGFuZGxlci0+YXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUob3V0cHV0Rm10Q3R4LCBw a3QpOworKyAgICAgICAgfQorKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfdW5y ZWYocGt0KTsKKysgICAgfQorKworKyAgICB3aGlsZSAobV9mZm1wZWdIYW5kbGVyLT5hdl9yZWFk X2ZyYW1lKGF1ZGlvRm10Q3R4LCBwa3QpID49IDApIHsKKysgICAgICAgIGlmIChwa3QtPnN0cmVh bV9pbmRleCA9PSBhdWRpb0luSWR4KSB7CisrICAgICAgICAgICAgcGt0LT5zdHJlYW1faW5kZXgg PSBvdXRBdWRpb0lkeDsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9y ZXNjYWxlX3RzKHBrdCwgYXVkaW9GbXRDdHgtPnN0cmVhbXNbYXVkaW9JbklkeF0tPnRpbWVfYmFz ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91 dHB1dEZtdEN0eC0+c3RyZWFtc1tvdXRBdWRpb0lkeF0tPnRpbWVfYmFzZSk7CisrICAgICAgICAg ICAgcGt0LT5wb3MgPSAtMTsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X2ludGVy bGVhdmVkX3dyaXRlX2ZyYW1lKG91dHB1dEZtdEN0eCwgcGt0KTsKKysgICAgICAgIH0KKysgICAg ICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X3VucmVmKHBrdCk7CisrICAgIH0KKysKKysg ICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgmcGt0KTsKKysgICAgbV9mZm1wZWdI YW5kbGVyLT5hdl93cml0ZV90cmFpbGVyKG91dHB1dEZtdEN0eCk7CisrCisrICAgIGNsZWFudXAo KTsKKysKKysgICAgaWYgKCFpbzo6RmlsZTo6Y29weSh0bXBQYXRoLCB2aWRlb1BhdGgsIHRydWUp KSB7CisrICAgICAgICBMT0dFKCkgPDwgImFkZEF1ZGlvOiBmYWlsZWQgdG8gcmVwbGFjZSB3aXRo IG11eGVkIGZpbGUiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlv OjpGaWxlOjpyZW1vdmUodG1wUGF0aCk7CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKyti b29sIFZpZGVvRW5jb2Rlcjo6Y29udmVydEltYWdlX3N3cyhjb25zdCBRSW1hZ2UmIGltZykKKyt7 CisrICAgIC8vIENoZWNrIGlmIHRoZSBpbWFnZSBtYXRjaGVzIHRoZSBzaXplCisrICAgIGlmIChp bWcud2lkdGgoKSAhPSBtX2ZmbXBlZy0+d2lkdGggfHwgaW1nLmhlaWdodCgpICE9IG1fZmZtcGVn LT5oZWlnaHQpIHsKKysgICAgICAgIExPR0UoKSA8PCAid3JvbmcgaW1hZ2Ugc2l6ZSEiOworKyAg ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChpbWcuZm9ybWF0KCkgIT0g UUltYWdlOjpGb3JtYXRfUkdCMzIgJiYgaW1nLmZvcm1hdCgpICE9IFFJbWFnZTo6Rm9ybWF0X0FS R0IzMikgeworKyAgICAgICAgTE9HRSgpIDw8ICJ3cm9uZyBpbWFnZSBmb3JtYXQiOworKyAgICAg ICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIG1fZmZtcGVnLT5pbWdfY29udmVydF9j dHggPSBtX2ZmbXBlZ0hhbmRsZXItPnN3c19nZXRDYWNoZWRDb250ZXh0KG1fZmZtcGVnLT5pbWdf Y29udmVydF9jdHgsIG1fZmZtcGVnLT53aWR0aCwgbV9mZm1wZWctPmhlaWdodCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVZfUElYX0ZNVF9CR1JBLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZmbXBlZy0+d2lkdGgsIG1f ZmZtcGVnLT5oZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCwgU1dTX0JJQ1VCSUMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworKworKyAgICBpZiAoIW1fZmZtcGVnLT5pbWdfY29u dmVydF9jdHgpIHsKKysgICAgICAgIExPR0UoKSA8PCAiZmFpbGVkIGluaXRpYWxpemUgdGhlIGNv bnZlcnNpb24gY29udGV4dCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg ICAgdWludDhfdCogc3JjcGxhbmVzWzNdOworKyAgICBzcmNwbGFuZXNbMF0gPSAodWludDhfdCop aW1nLmJpdHMoKTsKKysgICAgc3JjcGxhbmVzWzFdID0gMDsKKysgICAgc3JjcGxhbmVzWzJdID0g MDsKKysKKysgICAgaW50IHNyY3N0cmlkZVszXTsKKysgICAgc3Jjc3RyaWRlWzBdID0gaW1nLmJ5 dGVzUGVyTGluZSgpOworKyAgICBzcmNzdHJpZGVbMV0gPSAwOworKyAgICBzcmNzdHJpZGVbMiBd PSAwOworKworKyAgICBtX2ZmbXBlZ0hhbmRsZXItPnN3c19zY2FsZShtX2ZmbXBlZy0+aW1nX2Nv bnZlcnRfY3R4LCBzcmNwbGFuZXMsIHNyY3N0cmlkZSwgMCwgbV9mZm1wZWctPmhlaWdodCwgbV9m Zm1wZWctPnBwaWN0dXJlLT5kYXRhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt X2ZmbXBlZy0+cHBpY3R1cmUtPmxpbmVzaXplKTsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQor K30KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFs L2ZmbXBlZy92OS92aWRlb2VuY29kZXIuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS92aWRlb2VuY29kZXIuaAorLS0tIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS92aWRlb2Vu Y29kZXIuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjgwNTYwMTQ0ICswMjAwCisrKysg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L3Zp ZGVvZW5jb2Rlci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgwNTQyNDI0ICswMjAwCitAQCAtMCww ICsxLDU3IEBACisrLyoKKysgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTMuMC1vbmx5 CisrICogTXVzZVNjb3JlLVN0dWRpby1DTEEtYXBwbGllcworKyAqCisrICogTXVzZVNjb3JlIFN0 dWRpbworKyAqIE11c2ljIENvbXBvc2l0aW9uICYgTm90YXRpb24KKysgKgorKyAqIENvcHlyaWdo dCAoQykgMjAyNSBNdXNlU2NvcmUgTGltaXRlZAorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMyBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor KyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorKyAqLworKworKyNwcmFnbWEgb25jZQorKworKyNpbmNsdWRlICJtZWRpYS9p dmlkZW9lbmNvZGVyLmgiCisrCisrI2luY2x1ZGUgImludGVybmFsL2ZmbXBlZ3V0aWxzLmgiCisr CisrbmFtZXNwYWNlIG11c2U6Om1lZGlhOjpmZm1wZWc6OnY5IHsKKytjbGFzcyBGRm1wZWdMaWJI YW5kbGVyOworK3N0cnVjdCBGRm1wZWc7CisrY2xhc3MgVmlkZW9FbmNvZGVyIDogcHVibGljIElW aWRlb0VuY29kZXIKKyt7CisrcHVibGljOgorKyAgICBWaWRlb0VuY29kZXIoKTsKKysgICAgflZp ZGVvRW5jb2RlcigpIG92ZXJyaWRlOworKworKyAgICBib29sIGxvYWQoY29uc3QgRkZtcGVnTGli UGF0aHMmIHBhdGhzKTsKKysKKysgICAgYm9vbCBvcGVuKGNvbnN0IG11c2U6OmlvOjpwYXRoX3Qm IGZpbGVOYW1lLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZTsKKysgICAgdm9pZCBj bG9zZSgpIG92ZXJyaWRlOworKworKyAgICBib29sIGVuY29kZUltYWdlKGNvbnN0IFFJbWFnZSYg aW1nKSBvdmVycmlkZTsKKysgICAgdm9pZCBmaW5pc2hFbmNvZGUoKSBvdmVycmlkZTsKKysKKysg ICAgYm9vbCBlbmNvZGVWaWRlbyhjb25zdCBtdXNlOjpCeXRlQXJyYXkmIHZpZGVvRGF0YSwgaW50 IG1heEZyYW1lcyA9IC0xKSBvdmVycmlkZTsKKysKKysgICAgYm9vbCBhZGRBdWRpbyhjb25zdCBt dXNlOjppbzo6cGF0aF90JiBhdWRpb1BhdGgpIG92ZXJyaWRlOworKworK3ByaXZhdGU6CisrICAg IGJvb2wgY29udmVydEltYWdlX3N3cyhjb25zdCBRSW1hZ2UmIGltZyk7CisrCisrICAgIHN0ZDo6 c2hhcmVkX3B0cjxGRm1wZWdMaWJIYW5kbGVyPiBtX2ZmbXBlZ0hhbmRsZXIgPSBudWxscHRyOwor KyAgICBGRm1wZWcqIG1fZmZtcGVnID0gbnVsbHB0cjsKKysgICAgbXVzZTo6aW86OnBhdGhfdCBt X291dHB1dFBhdGg7CisrfTsKKyt9CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS9pbnRlcm5hbC92aWRlb2VuY29kZXJyZXNvbHZlci5jcHAuZmZtcGVnOSBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC92aWRlb2VuY29kZXJyZXNv bHZlci5jcHAKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5h bC92aWRlb2VuY29kZXJyZXNvbHZlci5jcHAuZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAw MDAwMDAwMCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2lu dGVybmFsL3ZpZGVvZW5jb2RlcnJlc29sdmVyLmNwcAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTM0 MTM1OCArMDIwMAorQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSAiaW8vcGF0aC5oIgorICNp bmNsdWRlICJsb2cuaCIKKyAKKysjaW5jbHVkZSAiaW50ZXJuYWwvZmZtcGVnL3Y5L3ZpZGVvZW5j b2Rlci5oIgorICNpbmNsdWRlICJpbnRlcm5hbC9mZm1wZWcvdjgvdmlkZW9lbmNvZGVyLmgiCisg I2luY2x1ZGUgImludGVybmFsL2ZmbXBlZy92Ny92aWRlb2VuY29kZXIuaCIKKyAjaW5jbHVkZSAi aW50ZXJuYWwvZmZtcGVnL3Y2L3ZpZGVvZW5jb2Rlci5oIgorQEAgLTM4LDEzICszOSwxMyBAQCB1 c2luZyBuYW1lc3BhY2UgbXVzZTo6bWVkaWE7CisgCisgdm9pZCBWaWRlb0VuY29kZXJSZXNvbHZl cjo6aW5pdCgpCisgeworLSAgICBsb2FkRkZtcGVnKGNvbmZpZ3VyYXRpb24oKS0+ZmZtcGVnTGli c0RpcigpKTsKKysgICAgbG9hZEZGbXBlZyhjb25maWd1cmF0aW9uKCktPmZmbXBlZ0xpYnNEaXIo KSwgZmFsc2UpOworIAorICAgICAvLyEgTk9URTogV2UgbmVlZCB0byBzZWFyY2ggZm9yIGFuZCBy ZWxvYWQgdGhlIEZGbXBlZyBsaWJyYXJpZXMgd2l0aCBhIGRlbGF5LAorICAgICAvLyEgICAgICAg YmVjYXVzZSB0aGlzIGlzIGEgcmVzb3VyY2UtaW50ZW5zaXZlIG9wZXJhdGlvbi4KKyAgICAgbV9y ZWxvYWRGZm1wZWdUaW1lciA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGltZXI+KHN0ZDo6Y2hyb25vOjpz ZWNvbmRzKDEpKTsKKyAgICAgbV9yZWxvYWRGZm1wZWdUaW1lci0+b25UaW1lb3V0KHRoaXMsIFt0 aGlzXSgpeworLSAgICAgICAgbG9hZEZGbXBlZyhjb25maWd1cmF0aW9uKCktPmZmbXBlZ0xpYnNE aXIoKSk7CisrICAgICAgICBsb2FkRkZtcGVnKGNvbmZpZ3VyYXRpb24oKS0+ZmZtcGVnTGlic0Rp cigpLCBmYWxzZSk7CisgCisgICAgICAgICBtX3JlbG9hZEZmbXBlZ1RpbWVyLT5zdG9wKCk7Cisg ICAgIH0pOworQEAgLTY3LDI0ICs2OCwzNyBAQCB2b2lkIFZpZGVvRW5jb2RlclJlc29sdmVyOjpk ZWluaXQoKQorIAorIHZvaWQgVmlkZW9FbmNvZGVyUmVzb2x2ZXI6OmxvYWRGRm1wZWcoY29uc3Qg aW86OnBhdGhfdCYgZmZtcGVnTGlic0RpcikKKyB7CistICAgIGNvbnN0IEZGbXBlZ0xpYlBhdGhz IHBhdGhzID0gZmluZExpYnJhcnlQYXRocyhmZm1wZWdMaWJzRGlyKTsKKy0gICAgaWYgKHBhdGhz LmF2Rm9ybWF0UGF0aC5lbXB0eSgpKSB7CistICAgICAgICByZXNldEZGbXBlZ1NldHRpbmdzKCk7 CistICAgICAgICByZXR1cm47CistICAgIH0KKysgICAgbG9hZEZGbXBlZyhmZm1wZWdMaWJzRGly LCB0cnVlKTsKKyt9CisgCistICAgIEVuY29kZXJJbmZvIGVuY29kZXJJbmZvID0gbWFrZUVuY29k ZXIocGF0aHMpOworLSAgICBpZiAoIWVuY29kZXJJbmZvLmVuY29kZXIpIHsKKy0gICAgICAgIHJl c2V0RkZtcGVnU2V0dGluZ3MoKTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorK3ZvaWQgVmlk ZW9FbmNvZGVyUmVzb2x2ZXI6OmxvYWRGRm1wZWcoY29uc3QgaW86OnBhdGhfdCYgZmZtcGVnTGli c0RpciwgYm9vbCBwZXJzaXN0UmVxdWVzdGVkUGF0aCkKKyt7CisrICAgIGNvbnN0IEZGbXBlZ0xp YlBhdGhzTGlzdCBsaWJyYXJ5UGF0aHMgPSBmaW5kTGlicmFyeVBhdGhzKGZmbXBlZ0xpYnNEaXIp OworKyAgICBmb3IgKGNvbnN0IEZGbXBlZ0xpYlBhdGhzJiBwYXRocyA6IGxpYnJhcnlQYXRocykg eworKyAgICAgICAgRW5jb2RlckluZm8gZW5jb2RlckluZm8gPSBtYWtlRW5jb2RlcihwYXRocyk7 CisrICAgICAgICBpZiAoIWVuY29kZXJJbmZvLmVuY29kZXIpIHsKKysgICAgICAgICAgICBjb250 aW51ZTsKKysgICAgICAgIH0KKyAKKy0gICAgc2V0Q3VycmVudFZpZGVvRW5jb2RlcihlbmNvZGVy SW5mby5lbmNvZGVyKTsKKysgICAgICAgIHNldEN1cnJlbnRWaWRlb0VuY29kZXIoZW5jb2Rlcklu Zm8uZW5jb2Rlcik7CisrICAgICAgICBtX2xvYWRlZEZGbXBlZ0RpciA9IGVuY29kZXJJbmZvLmZm bXBlZ0xpYnNEaXI7CisrICAgICAgICBtX2N1cnJlbnRFbmNvZGVyRkZtcGVnVmVyc2lvbiA9IGVu Y29kZXJJbmZvLmZmbXBlZ1ZlcnNpb247CisrCisrICAgICAgICBpZiAocGVyc2lzdFJlcXVlc3Rl ZFBhdGgpIHsKKysgICAgICAgICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPGlvOjpwYXRoX3Q+IHBh dGhUb1BlcnNpc3QgPSBjb25maWd1cmVkUGF0aFRvUGVyc2lzdChmZm1wZWdMaWJzRGlyLCBwYXRo cyk7CisrICAgICAgICAgICAgaWYgKHBhdGhUb1BlcnNpc3QuaGFzX3ZhbHVlKCkpIHsKKysgICAg ICAgICAgICAgICAgY29uZmlndXJhdGlvbigpLT5zZXRGRm1wZWdMaWJzRGlyKHBhdGhUb1BlcnNp c3QudmFsdWUoKSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorIAorLSAgICBjb25maWd1 cmF0aW9uKCktPnNldEZGbXBlZ0xpYnNEaXIoZW5jb2RlckluZm8uZmZtcGVnTGlic0Rpcik7Cisr ICAgICAgICBtX2xvYWRlZEZGbXBlZ0NoYW5nZWQubm90aWZ5KCk7CisrICAgICAgICByZXR1cm47 CisrICAgIH0KKyAKKy0gICAgbV9jdXJyZW50RW5jb2RlckZGbXBlZ1ZlcnNpb24gPSBlbmNvZGVy SW5mby5mZm1wZWdWZXJzaW9uOworLSAgICBtX2xvYWRlZEZGbXBlZ0NoYW5nZWQubm90aWZ5KCk7 CisrICAgIGlmIChwZXJzaXN0UmVxdWVzdGVkUGF0aCAmJiBmZm1wZWdMaWJzRGlyLmVtcHR5KCkp IHsKKysgICAgICAgIGNvbmZpZ3VyYXRpb24oKS0+c2V0RkZtcGVnTGlic0Rpcih7fSk7CisrICAg IH0KKysgICAgcmVzZXRGRm1wZWdTZXR0aW5ncygpOworIH0KKyAKKyB2b2lkIFZpZGVvRW5jb2Rl clJlc29sdmVyOjpzZXRJc1NldHRpbmdNb2RlKGJvb2wgYXJnKQorQEAgLTExMiw3ICsxMjYsNyBA QCB2b2lkIFZpZGVvRW5jb2RlclJlc29sdmVyOjpzdGFydFdhdGNoaW5nCisgCisgbXVzZTo6aW86 OnBhdGhfdCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6bG9hZGVkRkZtcGVnRGlyKCkgY29uc3QKKyB7 CistICAgIHJldHVybiBjb25maWd1cmF0aW9uKCktPmZmbXBlZ0xpYnNEaXIoKTsKKysgICAgcmV0 dXJuIG1fbG9hZGVkRkZtcGVnRGlyOworIH0KKyAKKyBGRm1wZWdWZXJzaW9uIFZpZGVvRW5jb2Rl clJlc29sdmVyOjpsb2FkZWRGRm1wZWdWZXJzaW9uKCkgY29uc3QKK0BAIC0xMzcsOCArMTUxLDkg QEAgdm9pZCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6c2V0Q3VycmVudFZpZAorIAorIHZvaWQgVmlk ZW9FbmNvZGVyUmVzb2x2ZXI6OnJlc2V0RkZtcGVnU2V0dGluZ3MoKQorIHsKKysgICAgc2V0Q3Vy cmVudFZpZGVvRW5jb2RlcihudWxscHRyKTsKKyAgICAgbV9jdXJyZW50RW5jb2RlckZGbXBlZ1Zl cnNpb24gPSBGRk1QRUdfSU5WQUxJRF9WRVJTSU9OOworLSAgICBjb25maWd1cmF0aW9uKCktPnNl dEZGbXBlZ0xpYnNEaXIoe30pOworKyAgICBtX2xvYWRlZEZGbXBlZ0RpciA9IGlvOjpwYXRoX3Qo KTsKKyAKKyAgICAgbV9sb2FkZWRGRm1wZWdDaGFuZ2VkLm5vdGlmeSgpOworIH0KK0BAIC0xNTcs OCArMTcyLDExIEBAIFZpZGVvRW5jb2RlclJlc29sdmVyOjpFbmNvZGVySW5mbyBWaWRlb0UKKyB7 CisgICAgIEVuY29kZXJJbmZvIHJlc3VsdDsKKyAKKy0gICAgY29uc3QgRkZtcGVnVmVyc2lvbiB2 ZXJzaW9uID0gdmVyc2lvbkZyb21BVkZvcm1hdFBhdGgoZmZtcGVnTGlic1BhdGhzLmF2Rm9ybWF0 UGF0aCk7CisrICAgIGNvbnN0IEZGbXBlZ1ZlcnNpb24gdmVyc2lvbiA9IGZmbXBlZ0xpYnNQYXRo cy5mZm1wZWdWZXJzaW9uOworICAgICBzd2l0Y2ggKHZlcnNpb24pIHsKKysgICAgY2FzZSBGRk1Q RUdfVjk6CisrICAgICAgICByZXN1bHQuZW5jb2RlciA9IHRyeUNyZWF0ZUVuY29kZXI8ZmZtcGVn Ojp2OTo6VmlkZW9FbmNvZGVyPihmZm1wZWdMaWJzUGF0aHMpOworKyAgICAgICAgYnJlYWs7Cisg ICAgIGNhc2UgRkZNUEVHX1Y4OgorICAgICAgICAgcmVzdWx0LmVuY29kZXIgPSB0cnlDcmVhdGVF bmNvZGVyPGZmbXBlZzo6djg6OlZpZGVvRW5jb2Rlcj4oZmZtcGVnTGlic1BhdGhzKTsKKyAgICAg ICAgIGJyZWFrOworQEAgLTE3OSw3ICsxOTcsNyBAQCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6RW5j b2RlckluZm8gVmlkZW9FCisgICAgIH0KKyAKKyAgICAgaWYgKHJlc3VsdC5lbmNvZGVyKSB7Cist ICAgICAgICByZXN1bHQuZmZtcGVnTGlic0RpciA9IGlvOjpkaXJwYXRoKGZmbXBlZ0xpYnNQYXRo cy5hdkZvcm1hdFBhdGgpOworKyAgICAgICAgcmVzdWx0LmZmbXBlZ0xpYnNEaXIgPSBmZm1wZWdM aWJzUGF0aHMuc2VhcmNoRGlyOworICAgICAgICAgcmVzdWx0LmZmbXBlZ1ZlcnNpb24gPSB2ZXJz aW9uOworIAorICAgICAgICAgTE9HRCgpIDw8ICJGRm1wZWcgbG9hZGVkLCB2ZXJzaW9uOiAiIDw8 IHZlcnNpb247CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9p bnRlcm5hbC92aWRlb2VuY29kZXJyZXNvbHZlci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvdmlkZW9lbmNvZGVycmVzb2x2ZXIuaAorLS0tIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL3ZpZGVvZW5jb2RlcnJl c29sdmVyLmguZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysr IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL3ZpZGVvZW5jb2Rl cnJlc29sdmVyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODEzOTEzNDUgKzAyMDAKK0BAIC01NSw2 ICs1NSw3IEBAIHB1YmxpYzoKKyAgICAgdm9pZCBzZXRJc1NldHRpbmdNb2RlKGJvb2wgYXJnKSBv dmVycmlkZTsKKyAKKyBwcml2YXRlOgorKyAgICB2b2lkIGxvYWRGRm1wZWcoY29uc3QgbXVzZTo6 aW86OnBhdGhfdCYgZmZtcGVnTGlic0RpciwgYm9vbCBwZXJzaXN0UmVxdWVzdGVkUGF0aCk7Cisg ICAgIHZvaWQgcmVzZXRGRm1wZWdTZXR0aW5ncygpOworICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdG Zm1wZWdzRGlycygpOworIAorQEAgLTY4LDYgKzY5LDcgQEAgcHJpdmF0ZToKKyAKKyAgICAgSVZp ZGVvRW5jb2RlclB0ciBtX2VuY29kZXI7CisgICAgIEZGbXBlZ1ZlcnNpb24gbV9jdXJyZW50RW5j b2RlckZGbXBlZ1ZlcnNpb24gPSBGRk1QRUdfSU5WQUxJRF9WRVJTSU9OOworKyAgICBpbzo6cGF0 aF90IG1fbG9hZGVkRkZtcGVnRGlyOworIAorICAgICBhc3luYzo6Tm90aWZpY2F0aW9uIG1fbG9h ZGVkRkZtcGVnQ2hhbmdlZDsKKyAKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL3Rlc3RzL0NNYWtlTGlzdHMudHh0LmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvdGVzdHMvQ01ha2VMaXN0cy50eHQKKy0tLSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9DTWFrZUxpc3RzLnR4dC5mZm1wZWc5CTIwMjYt MDktMDcgMTI6MjM6NDcuNjgwODYwMjkzICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGVzdHMvQ01ha2VMaXN0cy50eHQJMjAyNi0wOS0wNyAxMjoyMzo0Ny42 ODA4NTY3ODAgKzAyMDAKK0BAIC0wLDAgKzEsMzEgQEAKKysjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMy4wLW9ubHkKKysjIE11c2VTY29yZS1TdHVkaW8tQ0xBLWFwcGxpZXMKKysjCisr IyBNdXNlU2NvcmUgU3R1ZGlvCisrIyBNdXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0aW9uCisrIwor KyMgQ29weXJpZ2h0IChDKSAyMDI2IE11c2VTY29yZSBMaW1pdGVkCisrIworKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAzIGFzCisrIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisrCisrc2V0KE1PRFVMRV9URVNUIG11c2VfbWVkaWFfdGVzdHMpCisrCisrc2V0 KE1PRFVMRV9URVNUX1NSQworKyAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2ZmbXBlZ3V0 aWxzX3Rlc3RzLmNwcAorKykKKysKKytzZXQoTU9EVUxFX1RFU1RfTElOSworKyAgICBtdXNlOjpt ZWRpYQorKykKKysKKytpbmNsdWRlKFNldHVwR1Rlc3QpCitkaWZmIC11cCBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9mZm1wZWd1dGlsc190ZXN0cy5jcHAuZmZtcGVn OSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9mZm1wZWd1dGlsc190 ZXN0cy5jcHAKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9m Zm1wZWd1dGlsc190ZXN0cy5jcHAuZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MDkzOTkz NSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Rlc3RzL2Zm bXBlZ3V0aWxzX3Rlc3RzLmNwcAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTQzODUxMyArMDIwMAor QEAgLTAsMCArMSwyMDEgQEAKKysvKgorKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt My4wLW9ubHkKKysgKiBNdXNlU2NvcmUtU3R1ZGlvLUNMQS1hcHBsaWVzCisrICoKKysgKiBNdXNl U2NvcmUgU3R1ZGlvCisrICogTXVzaWMgQ29tcG9zaXRpb24gJiBOb3RhdGlvbgorKyAqCisrICog Q29weXJpZ2h0IChDKSAyMDI2IE11c2VTY29yZSBMaW1pdGVkCisrICoKKysgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAzIGFzCisrICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KysgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrICovCisrCisrI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisr CisrI2luY2x1ZGUgPGFsZ29yaXRobT4KKysKKysjaW5jbHVkZSA8UURpcj4KKysjaW5jbHVkZSA8 UUZpbGU+CisrI2luY2x1ZGUgPFFGaWxlSW5mbz4KKysjaW5jbHVkZSA8UVRlbXBvcmFyeURpcj4K KysKKysjaW5jbHVkZSAibWVkaWEvaW50ZXJuYWwvZmZtcGVndXRpbHMuaCIKKysKKyt1c2luZyBu YW1lc3BhY2UgbXVzZTsKKyt1c2luZyBuYW1lc3BhY2UgbXVzZTo6bWVkaWE7CisrCisrbmFtZXNw YWNlIHsKKytRU3RyaW5nIGxpYnJhcnlGaWxlTmFtZShjb25zdCBRU3RyaW5nJiBjb21wb25lbnQs IGludCB2ZXJzaW9uKQorK3sKKysjaWYgZGVmaW5lZChRX09TX01BQykKKysgICAgcmV0dXJuIFFT dHJpbmdMaXRlcmFsKCJsaWIlMS4lMi5keWxpYiIpLmFyZyhjb21wb25lbnQpLmFyZyh2ZXJzaW9u KTsKKysjZWxpZiBkZWZpbmVkKFFfT1NfTElOVVgpIHx8IGRlZmluZWQoUV9PU19GUkVFQlNEKQor KyAgICByZXR1cm4gUVN0cmluZ0xpdGVyYWwoImxpYiUxLnNvLiUyIikuYXJnKGNvbXBvbmVudCku YXJnKHZlcnNpb24pOworKyNlbGlmIGRlZmluZWQoUV9PU19XSU4pCisrICAgIHJldHVybiBRU3Ry aW5nTGl0ZXJhbCgiJTEtJTIuZGxsIikuYXJnKGNvbXBvbmVudCkuYXJnKHZlcnNpb24pOworKyNl bmRpZgorK30KKysKKyt2b2lkIGNyZWF0ZUZpbGUoY29uc3QgUVN0cmluZyYgcGF0aCkKKyt7Cisr ICAgIFFGaWxlIGZpbGUocGF0aCk7CisrICAgIEFTU0VSVF9UUlVFKGZpbGUub3BlbihRSU9EZXZp Y2U6OldyaXRlT25seSkpOworKyAgICBmaWxlLmNsb3NlKCk7CisrfQorKworK3ZvaWQgY3JlYXRl TGlicmFyaWVzKGNvbnN0IFFTdHJpbmcmIGRpclBhdGgsIEZGbXBlZ1ZlcnNpb24gdmVyc2lvbiwg Ym9vbCBjb21wbGV0ZSA9IHRydWUpCisreworKyAgICBBU1NFUlRfVFJVRShRRGlyKCkubWtwYXRo KGRpclBhdGgpKTsKKysKKysgICAgY29uc3QgYXV0byB2ZXJzaW9uSXQgPSBzdGQ6OmZpbmRfaWYo RkZNUEVHX0NPTVBPTkVOVFNfVkVSU0lPTlMuY2JlZ2luKCksIEZGTVBFR19DT01QT05FTlRTX1ZF UlNJT05TLmNlbmQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg W3ZlcnNpb25dKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZmlyc3QgPT0gdmVyc2lv bjsgfSk7CisrICAgIEFTU0VSVF9ORSh2ZXJzaW9uSXQsIEZGTVBFR19DT01QT05FTlRTX1ZFUlNJ T05TLmNlbmQoKSk7CisrCisrICAgIGNvbnN0IEZGbXBlZ1ZlcnNpb25JbmZvJiBjb21wb25lbnRz ID0gdmVyc2lvbkl0LT5zZWNvbmQ7CisrICAgIGNvbnN0IFFEaXIgZGlyKGRpclBhdGgpOworKyAg ICBjcmVhdGVGaWxlKGRpci5maWxlUGF0aChsaWJyYXJ5RmlsZU5hbWUoUVN0cmluZ0xpdGVyYWwo ImF2dXRpbCIpLCBjb21wb25lbnRzLmF2VXRpbFZlcnNpb24pKSk7CisrICAgIGNyZWF0ZUZpbGUo ZGlyLmZpbGVQYXRoKGxpYnJhcnlGaWxlTmFtZShRU3RyaW5nTGl0ZXJhbCgiYXZjb2RlYyIpLCBj b21wb25lbnRzLmF2Q29kZWNWZXJzaW9uKSkpOworKyAgICBjcmVhdGVGaWxlKGRpci5maWxlUGF0 aChsaWJyYXJ5RmlsZU5hbWUoUVN0cmluZ0xpdGVyYWwoImF2Zm9ybWF0IiksIGNvbXBvbmVudHMu YXZGb3JtYXRWZXJzaW9uKSkpOworKyAgICBjcmVhdGVGaWxlKGRpci5maWxlUGF0aChsaWJyYXJ5 RmlsZU5hbWUoUVN0cmluZ0xpdGVyYWwoInN3c2NhbGUiKSwgY29tcG9uZW50cy5zd1NjYWxlVmVy c2lvbikpKTsKKysgICAgaWYgKGNvbXBsZXRlKSB7CisrICAgICAgICBjcmVhdGVGaWxlKGRpci5m aWxlUGF0aChsaWJyYXJ5RmlsZU5hbWUoUVN0cmluZ0xpdGVyYWwoInN3cmVzYW1wbGUiKSwgY29t cG9uZW50cy5zd1Jlc2FtcGxlVmVyc2lvbikpKTsKKysgICAgfQorK30KKysKKytRU3RyaW5nIGNh bm9uaWNhbFBhdGgoY29uc3QgUVN0cmluZyYgcGF0aCkKKyt7CisrICAgIHJldHVybiBRRmlsZUlu Zm8ocGF0aCkuY2Fub25pY2FsRmlsZVBhdGgoKTsKKyt9CisrfQorKworK1RFU1QoRkZtcGVnVXRp bHNUZXN0cywgUmVjb2duaXplc0ZGbXBlZzlGcm9tQVZGb3JtYXRQYXRoKQorK3sKKysgICAgY29u c3QgUVN0cmluZyBmaWxlTmFtZSA9IGxpYnJhcnlGaWxlTmFtZShRU3RyaW5nTGl0ZXJhbCgiYXZm b3JtYXQiKSwgNjMpOworKyAgICBFWFBFQ1RfRVEodmVyc2lvbkZyb21BVkZvcm1hdFBhdGgoaW86 OnBhdGhfdChmaWxlTmFtZSkpLCBGRk1QRUdfVjkpOworK30KKysKKytURVNUKEZGbXBlZ1V0aWxz VGVzdHMsIEF1dG9tYXRpY0NhbmRpZGF0ZXNQcmVmZXJOZXdlc3RWZXJzaW9uKQorK3sKKysgICAg UVRlbXBvcmFyeURpciB0ZW1wRGlyOworKyAgICBBU1NFUlRfVFJVRSh0ZW1wRGlyLmlzVmFsaWQo KSk7CisrICAgIGNvbnN0IFFTdHJpbmcgZmZtcGVnOERpciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0 cmluZ0xpdGVyYWwoImZmbXBlZzgiKSk7CisrICAgIGNvbnN0IFFTdHJpbmcgZmZtcGVnOURpciA9 IHRlbXBEaXIuZmlsZVBhdGgoUVN0cmluZ0xpdGVyYWwoImZmbXBlZzkiKSk7CisrICAgIGNyZWF0 ZUxpYnJhcmllcyhmZm1wZWc4RGlyLCBGRk1QRUdfVjgpOworKyAgICBjcmVhdGVMaWJyYXJpZXMo ZmZtcGVnOURpciwgRkZNUEVHX1Y5KTsKKysKKysgICAgY29uc3QgRkZtcGVnTGliUGF0aHNMaXN0 IGNhbmRpZGF0ZXMgPSBmaW5kTGlicmFyeVBhdGhzKHt9LCB7IGlvOjpwYXRoX3QoZmZtcGVnOERp ciksIGlvOjpwYXRoX3QoZmZtcGVnOURpcikgfSk7CisrCisrICAgIEFTU0VSVF9FUShjYW5kaWRh dGVzLnNpemUoKSwgMnUpOworKyAgICBFWFBFQ1RfRVEoY2FuZGlkYXRlc1swXS5mZm1wZWdWZXJz aW9uLCBGRk1QRUdfVjkpOworKyAgICBFWFBFQ1RfRVEoY2FuZGlkYXRlc1swXS5vcmlnaW4sIEZG bXBlZ0NhbmRpZGF0ZU9yaWdpbjo6QXV0b21hdGljKTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0 ZXNbMV0uZmZtcGVnVmVyc2lvbiwgRkZNUEVHX1Y4KTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0 ZXNbMV0ub3JpZ2luLCBGRm1wZWdDYW5kaWRhdGVPcmlnaW46OkF1dG9tYXRpYyk7CisrfQorKwor K1RFU1QoRkZtcGVnVXRpbHNUZXN0cywgQ3VzdG9tUGF0aFJldGFpbnNQcmlvcml0eSkKKyt7Cisr ICAgIFFUZW1wb3JhcnlEaXIgdGVtcERpcjsKKysgICAgQVNTRVJUX1RSVUUodGVtcERpci5pc1Zh bGlkKCkpOworKyAgICBjb25zdCBRU3RyaW5nIGN1c3RvbURpciA9IHRlbXBEaXIuZmlsZVBhdGgo UVN0cmluZ0xpdGVyYWwoImN1c3RvbSIpKTsKKysgICAgY29uc3QgUVN0cmluZyBhdXRvbWF0aWNE aXIgPSB0ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdMaXRlcmFsKCJhdXRvbWF0aWMiKSk7CisrICAg IGNyZWF0ZUxpYnJhcmllcyhjdXN0b21EaXIsIEZGTVBFR19WOCk7CisrICAgIGNyZWF0ZUxpYnJh cmllcyhhdXRvbWF0aWNEaXIsIEZGTVBFR19WOSk7CisrCisrICAgIGNvbnN0IEZGbXBlZ0xpYlBh dGhzTGlzdCBjYW5kaWRhdGVzID0gZmluZExpYnJhcnlQYXRocyhpbzo6cGF0aF90KGN1c3RvbURp ciksIHsgaW86OnBhdGhfdChhdXRvbWF0aWNEaXIpIH0pOworKworKyAgICBBU1NFUlRfRVEoY2Fu ZGlkYXRlcy5zaXplKCksIDJ1KTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMF0uZmZtcGVn VmVyc2lvbiwgRkZNUEVHX1Y4KTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMF0ub3JpZ2lu LCBGRm1wZWdDYW5kaWRhdGVPcmlnaW46OkNvbmZpZ3VyZWQpOworKyAgICBFWFBFQ1RfRVEoY2Fu ZGlkYXRlc1swXS5zZWFyY2hEaXIudG9RU3RyaW5nKCksIGNhbm9uaWNhbFBhdGgoY3VzdG9tRGly KSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzFdLmZmbXBlZ1ZlcnNpb24sIEZGTVBFR19W OSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzFdLm9yaWdpbiwgRkZtcGVnQ2FuZGlkYXRl T3JpZ2luOjpBdXRvbWF0aWMpOworK30KKysKKytURVNUKEZGbXBlZ1V0aWxzVGVzdHMsIFJlZ2lz dGVyZWRDb25maWd1cmVkUGF0aFJlbWFpbnNBdXRvbWF0aWMpCisreworKyAgICBRVGVtcG9yYXJ5 RGlyIHRlbXBEaXI7CisrICAgIEFTU0VSVF9UUlVFKHRlbXBEaXIuaXNWYWxpZCgpKTsKKysgICAg Y29uc3QgUVN0cmluZyBmZm1wZWc4RGlyID0gdGVtcERpci5maWxlUGF0aChRU3RyaW5nTGl0ZXJh bCgiZmZtcGVnOCIpKTsKKysgICAgY29uc3QgUVN0cmluZyBmZm1wZWc5RGlyID0gdGVtcERpci5m aWxlUGF0aChRU3RyaW5nTGl0ZXJhbCgiZmZtcGVnOSIpKTsKKysgICAgY3JlYXRlTGlicmFyaWVz KGZmbXBlZzhEaXIsIEZGTVBFR19WOCk7CisrICAgIGNyZWF0ZUxpYnJhcmllcyhmZm1wZWc5RGly LCBGRk1QRUdfVjkpOworKworKyAgICBjb25zdCBGRm1wZWdMaWJQYXRoc0xpc3QgY2FuZGlkYXRl cyA9IGZpbmRMaWJyYXJ5UGF0aHMoaW86OnBhdGhfdChmZm1wZWc4RGlyKSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW86OnBh dGhfdChmZm1wZWc4RGlyKSwgaW86OnBhdGhfdChmZm1wZWc5RGlyKSB9KTsKKysKKysgICAgQVNT RVJUX0VRKGNhbmRpZGF0ZXMuc2l6ZSgpLCAydSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVz WzBdLmZmbXBlZ1ZlcnNpb24sIEZGTVBFR19WOSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVz WzBdLm9yaWdpbiwgRkZtcGVnQ2FuZGlkYXRlT3JpZ2luOjpBdXRvbWF0aWMpOworKyAgICBFWFBF Q1RfRVEoY2FuZGlkYXRlc1sxXS5mZm1wZWdWZXJzaW9uLCBGRk1QRUdfVjgpOworKyAgICBFWFBF Q1RfRVEoY2FuZGlkYXRlc1sxXS5vcmlnaW4sIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbjo6QXV0b21h dGljKTsKKyt9CisrCisrVEVTVChGRm1wZWdVdGlsc1Rlc3RzLCBJbmNvbXBsZXRlQ2FuZGlkYXRl SXNTa2lwcGVkKQorK3sKKysgICAgUVRlbXBvcmFyeURpciB0ZW1wRGlyOworKyAgICBBU1NFUlRf VFJVRSh0ZW1wRGlyLmlzVmFsaWQoKSk7CisrICAgIGNvbnN0IFFTdHJpbmcgaW5jb21wbGV0ZURp ciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0cmluZ0xpdGVyYWwoImluY29tcGxldGUiKSk7CisrICAg IGNvbnN0IFFTdHJpbmcgY29tcGxldGVEaXIgPSB0ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdMaXRl cmFsKCJjb21wbGV0ZSIpKTsKKysgICAgY3JlYXRlTGlicmFyaWVzKGluY29tcGxldGVEaXIsIEZG TVBFR19WOSwgZmFsc2UpOworKyAgICBjcmVhdGVMaWJyYXJpZXMoY29tcGxldGVEaXIsIEZGTVBF R19WOCk7CisrCisrICAgIGNvbnN0IEZGbXBlZ0xpYlBhdGhzTGlzdCBjYW5kaWRhdGVzID0gZmlu ZExpYnJhcnlQYXRocyh7fSwgeyBpbzo6cGF0aF90KGluY29tcGxldGVEaXIpLCBpbzo6cGF0aF90 KGNvbXBsZXRlRGlyKSB9KTsKKysKKysgICAgQVNTRVJUX0VRKGNhbmRpZGF0ZXMuc2l6ZSgpLCAx dSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzBdLmZmbXBlZ1ZlcnNpb24sIEZGTVBFR19W OCk7CisrfQorKworK1RFU1QoRkZtcGVnVXRpbHNUZXN0cywgU2FtZVZlcnNpb25DYW5kaWRhdGVz VXNlU3RhYmxlUGF0aE9yZGVyKQorK3sKKysgICAgUVRlbXBvcmFyeURpciB0ZW1wRGlyOworKyAg ICBBU1NFUlRfVFJVRSh0ZW1wRGlyLmlzVmFsaWQoKSk7CisrICAgIGNvbnN0IFFTdHJpbmcgc2Vj b25kRGlyID0gdGVtcERpci5maWxlUGF0aChRU3RyaW5nTGl0ZXJhbCgiei1wcm92aWRlciIpKTsK KysgICAgY29uc3QgUVN0cmluZyBmaXJzdERpciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0cmluZ0xp dGVyYWwoImEtcHJvdmlkZXIiKSk7CisrICAgIGNyZWF0ZUxpYnJhcmllcyhzZWNvbmREaXIsIEZG TVBFR19WOSk7CisrICAgIGNyZWF0ZUxpYnJhcmllcyhmaXJzdERpciwgRkZNUEVHX1Y5KTsKKysK KysgICAgY29uc3QgRkZtcGVnTGliUGF0aHNMaXN0IGNhbmRpZGF0ZXMgPSBmaW5kTGlicmFyeVBh dGhzKHt9LCB7IGlvOjpwYXRoX3Qoc2Vjb25kRGlyKSwgaW86OnBhdGhfdChmaXJzdERpcikgfSk7 CisrCisrICAgIEFTU0VSVF9FUShjYW5kaWRhdGVzLnNpemUoKSwgMnUpOworKyAgICBFWFBFQ1Rf RVEoY2FuZGlkYXRlc1swXS5zZWFyY2hEaXIudG9RU3RyaW5nKCksIGNhbm9uaWNhbFBhdGgoZmly c3REaXIpKTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMV0uc2VhcmNoRGlyLnRvUVN0cmlu ZygpLCBjYW5vbmljYWxQYXRoKHNlY29uZERpcikpOworK30KKysKKytURVNUKEZGbXBlZ1V0aWxz VGVzdHMsIFBlcnNpc3RzT25seVJlcXVlc3RlZExvYWRlZFBhdGgpCisreworKyAgICBRVGVtcG9y YXJ5RGlyIHRlbXBEaXI7CisrICAgIEFTU0VSVF9UUlVFKHRlbXBEaXIuaXNWYWxpZCgpKTsKKysg ICAgY29uc3QgUVN0cmluZyByZXF1ZXN0ZWREaXIgPSB0ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdM aXRlcmFsKCJyZXF1ZXN0ZWQiKSk7CisrICAgIGNvbnN0IFFTdHJpbmcgZmFsbGJhY2tEaXIgPSB0 ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdMaXRlcmFsKCJmYWxsYmFjayIpKTsKKysgICAgY3JlYXRl TGlicmFyaWVzKHJlcXVlc3RlZERpciwgRkZNUEVHX1Y4KTsKKysgICAgY3JlYXRlTGlicmFyaWVz KGZhbGxiYWNrRGlyLCBGRk1QRUdfVjkpOworKworKyAgICBjb25zdCBGRm1wZWdMaWJQYXRoc0xp c3QgY2FuZGlkYXRlcyA9IGZpbmRMaWJyYXJ5UGF0aHMoaW86OnBhdGhfdChyZXF1ZXN0ZWREaXIp LCB7IGlvOjpwYXRoX3QoZmFsbGJhY2tEaXIpIH0pOworKyAgICBBU1NFUlRfRVEoY2FuZGlkYXRl cy5zaXplKCksIDJ1KTsKKysKKysgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxpbzo6cGF0aF90PiBy ZXF1ZXN0ZWRVcGRhdGUgPSBjb25maWd1cmVkUGF0aFRvUGVyc2lzdChpbzo6cGF0aF90KHJlcXVl c3RlZERpciksIGNhbmRpZGF0ZXNbMF0pOworKyAgICBBU1NFUlRfVFJVRShyZXF1ZXN0ZWRVcGRh dGUuaGFzX3ZhbHVlKCkpOworKyAgICBFWFBFQ1RfRVEocmVxdWVzdGVkVXBkYXRlLT50b1FTdHJp bmcoKSwgY2Fub25pY2FsUGF0aChyZXF1ZXN0ZWREaXIpKTsKKysKKysgICAgRVhQRUNUX0ZBTFNF KGNvbmZpZ3VyZWRQYXRoVG9QZXJzaXN0KGlvOjpwYXRoX3QocmVxdWVzdGVkRGlyKSwgY2FuZGlk YXRlc1sxXSkuaGFzX3ZhbHVlKCkpOworK30KKysKKytURVNUKEZGbXBlZ1V0aWxzVGVzdHMsIEVt cHR5UmVxdWVzdGVkUGF0aENsZWFyc0NvbmZpZ3VyYXRpb24pCisreworKyAgICBGRm1wZWdMaWJQ YXRocyBhdXRvbWF0aWNDYW5kaWRhdGU7CisrICAgIGF1dG9tYXRpY0NhbmRpZGF0ZS5zZWFyY2hE aXIgPSBpbzo6cGF0aF90KCIvYXV0b21hdGljIik7CisrCisrICAgIGNvbnN0IHN0ZDo6b3B0aW9u YWw8aW86OnBhdGhfdD4gdXBkYXRlID0gY29uZmlndXJlZFBhdGhUb1BlcnNpc3Qoe30sIGF1dG9t YXRpY0NhbmRpZGF0ZSk7CisrICAgIEFTU0VSVF9UUlVFKHVwZGF0ZS5oYXNfdmFsdWUoKSk7Cisr ICAgIEVYUEVDVF9UUlVFKHVwZGF0ZS0+ZW1wdHkoKSk7CisrfQorZGlmZiAtdXAgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvZG93bmxvYWRfZmZt cGVnX2hlYWRlcnMuc2guZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy9kb3dubG9hZF9mZm1wZWdfaGVhZGVycy5zaAorLS0tIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL2Rvd25sb2Fk X2ZmbXBlZ19oZWFkZXJzLnNoLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAg KzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy9kb3dubG9hZF9mZm1wZWdfaGVhZGVycy5zaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY2 OTU0NzEwNyArMDIwMAorQEAgLTEsNSArMSw1IEBACisgIyEvYmluL2Jhc2gKKy0jIERvd25sb2Fk IEZGbXBlZyBoZWFkZXJzIGZvciBNdXNlU2NvcmUgKHZlcnNpb25zIDQsIDUsIDYsIDcsIDgpCisr IyBEb3dubG9hZCBGRm1wZWcgaGVhZGVycyBmb3IgTXVzZVNjb3JlICh2ZXJzaW9ucyA0LCA1LCA2 LCA3LCA4LCA5KQorICMgUnVuIGZyb20gTXVzZVNjb3JlIHJlcG9zaXRvcnkgcm9vdAorIHNldCAt ZQorIAorQEAgLTE0LDYgKzE0LDcgQEAgVkVSU0lPTlM9KAorICAgIjY6bjYuMSIKKyAgICI3Om43 LjAiCisgICAiODpuOC4wIgorKyAgIjk6bjkuMCIKKyApCisgCisgd3JpdGVfYXZjb25maWcoKSB7 CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy92OS9saWJhdmNvZGVjL2F2Y29kZWMuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvYXZjb2Rl Yy5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZjb2RlYy9hdmNvZGVjLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3 LjY3MjAzNDcyNSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvYXZjb2RlYy5oCTIwMjYtMDktMDcgMTI6 MjM6NDcuNjcxNTQ3MTE5ICswMjAwCitAQCAtMCwwICsxLDI5NjEgQEAKKysvKgorKyAqIGNvcHly aWdodCAoYykgMjAwMSBGYWJyaWNlIEJlbGxhcmQKKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoK KysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisr ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZDT0RFQ19BVkNPREVD X0gKKysjZGVmaW5lIEFWQ09ERUNfQVZDT0RFQ19ICisrCisrLyoqCisrICogQGZpbGUKKysgKiBA aW5ncm91cCBsaWJhdmMKKysgKiBMaWJhdmNvZGVjIGV4dGVybmFsIEFQSSBoZWFkZXIKKysgKi8K KysKKysjaW5jbHVkZSAibGliYXZ1dGlsL3NhbXBsZWZtdC5oIgorKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXR0cmlidXRlcy5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCisrI2luY2x1 ZGUgImxpYmF2dXRpbC9idWZmZXIuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2NoYW5uZWxfbGF5 b3V0LmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9kaWN0LmgiCisrI2luY2x1ZGUgImxpYmF2dXRp bC9mcmFtZS5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCisrI2luY2x1ZGUgImxpYmF2 dXRpbC9waXhmbXQuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL3JhdGlvbmFsLmgiCisrCisrI2lu Y2x1ZGUgImNvZGVjLmgiCisrI2luY2x1ZGUgImNvZGVjX2lkLmgiCisrI2luY2x1ZGUgImRlZnMu aCIKKysjaW5jbHVkZSAicGFja2V0LmgiCisrI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKKysj aWZuZGVmIEhBVkVfQVZfQ09ORklHX0gKKysvKiBXaGVuIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhl IGZmbXBlZyBidWlsZCwgb25seSBpbmNsdWRlIHRoZSBtYWpvciB2ZXJzaW9uCisrICogdG8gYXZv aWQgdW5uZWNlc3NhcnkgcmVidWlsZHMuIFdoZW4gaW5jbHVkZWQgZXh0ZXJuYWxseSwga2VlcCBp bmNsdWRpbmcKKysgKiB0aGUgZnVsbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworKyNpbmNsdWRl ICJ2ZXJzaW9uLmgiCisrCisrI2luY2x1ZGUgImNvZGVjX2Rlc2MuaCIKKysjaW5jbHVkZSAiY29k ZWNfcGFyLmgiCisrI2VuZGlmCisrCisrc3RydWN0IEFWQ29kZWNQYXJhbWV0ZXJzOworKworKy8q KgorKyAqIEBkZWZncm91cCBsaWJhdmMgbGliYXZjb2RlYworKyAqIEVuY29kaW5nL0RlY29kaW5n IExpYnJhcnkKKysgKgorKyAqIEB7CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2Y19kZWNvZGluZyBE ZWNvZGluZworKyAqIEB7CisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZjX2VuY29kaW5n IEVuY29kaW5nCisrICogQHsKKysgKiBAfQorKyAqCisrICogQGRlZmdyb3VwIGxhdmNfY29kZWMg Q29kZWNzCisrICogQHsKKysgKiBAZGVmZ3JvdXAgbGF2Y19jb2RlY19uYXRpdmUgTmF0aXZlIENv ZGVjcworKyAqIEB7CisrICogQH0KKysgKiBAZGVmZ3JvdXAgbGF2Y19jb2RlY193cmFwcGVycyBF eHRlcm5hbCBsaWJyYXJ5IHdyYXBwZXJzCisrICogQHsKKysgKiBAfQorKyAqIEBkZWZncm91cCBs YXZjX2NvZGVjX2h3YWNjZWwgSGFyZHdhcmUgQWNjZWxlcmF0b3JzIGJyaWRnZQorKyAqIEB7Cisr ICogQH0KKysgKiBAfQorKyAqIEBkZWZncm91cCBsYXZjX2ludGVybmFsIEludGVybmFsCisrICog QHsKKysgKiBAfQorKyAqIEB9CisrICovCisrCisrLyoqCisrICogQGluZ3JvdXAgbGliYXZjCisr ICogQGRlZmdyb3VwIGxhdmNfZW5jZGVjIHNlbmQvcmVjZWl2ZSBlbmNvZGluZyBhbmQgZGVjb2Rp bmcgQVBJIG92ZXJ2aWV3CisrICogQHsKKysgKgorKyAqIFRoZSBhdmNvZGVjX3NlbmRfcGFja2V0 KCkvYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkvYXZjb2RlY19zZW5kX2ZyYW1lKCkvCisrICogYXZj b2RlY19yZWNlaXZlX3BhY2tldCgpIGZ1bmN0aW9ucyBwcm92aWRlIGFuIGVuY29kZS9kZWNvZGUg QVBJLCB3aGljaAorKyAqIGRlY291cGxlcyBpbnB1dCBhbmQgb3V0cHV0LgorKyAqCisrICogVGhl IEFQSSBpcyB2ZXJ5IHNpbWlsYXIgZm9yIGVuY29kaW5nL2RlY29kaW5nIGFuZCBhdWRpby92aWRl bywgYW5kIHdvcmtzIGFzCisrICogZm9sbG93czoKKysgKiAtIFNldCB1cCBhbmQgb3BlbiB0aGUg QVZDb2RlY0NvbnRleHQgYXMgdXN1YWwuCisrICogLSBTZW5kIHZhbGlkIGlucHV0OgorKyAqICAg LSBGb3IgZGVjb2RpbmcsIGNhbGwgYXZjb2RlY19zZW5kX3BhY2tldCgpIHRvIGdpdmUgdGhlIGRl Y29kZXIgcmF3CisrICogICAgIGNvbXByZXNzZWQgZGF0YSBpbiBhbiBBVlBhY2tldC4KKysgKiAg IC0gRm9yIGVuY29kaW5nLCBjYWxsIGF2Y29kZWNfc2VuZF9mcmFtZSgpIHRvIGdpdmUgdGhlIGVu Y29kZXIgYW4gQVZGcmFtZQorKyAqICAgICBjb250YWluaW5nIHVuY29tcHJlc3NlZCBhdWRpbyBv ciB2aWRlby4KKysgKgorKyAqICAgSW4gYm90aCBjYXNlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhh dCBBVlBhY2tldHMgYW5kIEFWRnJhbWVzIGFyZQorKyAqICAgcmVmY291bnRlZCwgb3IgbGliYXZj b2RlYyBtaWdodCBoYXZlIHRvIGNvcHkgdGhlIGlucHV0IGRhdGEuIChsaWJhdmZvcm1hdAorKyAq ICAgYWx3YXlzIHJldHVybnMgcmVmY291bnRlZCBBVlBhY2tldHMsIGFuZCBhdl9mcmFtZV9nZXRf YnVmZmVyKCkgYWxsb2NhdGVzCisrICogICByZWZjb3VudGVkIEFWRnJhbWVzLikKKysgKiAtIFJl Y2VpdmUgb3V0cHV0IGluIGEgbG9vcC4gUGVyaW9kaWNhbGx5IGNhbGwgb25lIG9mIHRoZSBhdmNv ZGVjX3JlY2VpdmVfKigpCisrICogICBmdW5jdGlvbnMgYW5kIHByb2Nlc3MgdGhlaXIgb3V0cHV0 OgorKyAqICAgLSBGb3IgZGVjb2RpbmcsIGNhbGwgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkuIE9u IHN1Y2Nlc3MsIGl0IHdpbGwgcmV0dXJuCisrICogICAgIGFuIEFWRnJhbWUgY29udGFpbmluZyB1 bmNvbXByZXNzZWQgYXVkaW8gb3IgdmlkZW8gZGF0YS4KKysgKiAgIC0gRm9yIGVuY29kaW5nLCBj YWxsIGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQoKS4gT24gc3VjY2VzcywgaXQgd2lsbCByZXR1cm4K KysgKiAgICAgYW4gQVZQYWNrZXQgd2l0aCBhIGNvbXByZXNzZWQgZnJhbWUuCisrICoKKysgKiAg IFJlcGVhdCB0aGlzIGNhbGwgdW50aWwgaXQgcmV0dXJucyBBVkVSUk9SKEVBR0FJTikgb3IgYW4g ZXJyb3IuIFRoZQorKyAqICAgQVZFUlJPUihFQUdBSU4pIHJldHVybiB2YWx1ZSBtZWFucyB0aGF0 IG5ldyBpbnB1dCBkYXRhIGlzIHJlcXVpcmVkIHRvCisrICogICByZXR1cm4gbmV3IG91dHB1dC4g SW4gdGhpcyBjYXNlLCBjb250aW51ZSB3aXRoIHNlbmRpbmcgaW5wdXQuIEZvciBlYWNoCisrICog ICBpbnB1dCBmcmFtZS9wYWNrZXQsIHRoZSBjb2RlYyB3aWxsIHR5cGljYWxseSByZXR1cm4gMSBv dXRwdXQgZnJhbWUvcGFja2V0LAorKyAqICAgYnV0IGl0IGNhbiBhbHNvIGJlIDAgb3IgbW9yZSB0 aGFuIDEuCisrICoKKysgKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGRlY29kaW5nIG9yIGVuY29kaW5n LCB0aGUgY29kZWMgbWlnaHQgYWNjZXB0IG11bHRpcGxlCisrICogaW5wdXQgZnJhbWVzL3BhY2tl dHMgd2l0aG91dCByZXR1cm5pbmcgYSBmcmFtZSwgdW50aWwgaXRzIGludGVybmFsIGJ1ZmZlcnMK KysgKiBhcmUgZmlsbGVkLiBUaGlzIHNpdHVhdGlvbiBpcyBoYW5kbGVkIHRyYW5zcGFyZW50bHkg aWYgeW91IGZvbGxvdyB0aGUgc3RlcHMKKysgKiBvdXRsaW5lZCBhYm92ZS4KKysgKgorKyAqIElu IHRoZW9yeSwgc2VuZGluZyBpbnB1dCBjYW4gcmVzdWx0IGluIEVBR0FJTiAtIHRoaXMgc2hvdWxk IGhhcHBlbiBvbmx5IGlmCisrICogbm90IGFsbCBvdXRwdXQgd2FzIHJlY2VpdmVkLiBZb3UgY2Fu IHVzZSB0aGlzIHRvIHN0cnVjdHVyZSBhbHRlcm5hdGl2ZSBkZWNvZGUKKysgKiBvciBlbmNvZGUg bG9vcHMgb3RoZXIgdGhhbiB0aGUgb25lIHN1Z2dlc3RlZCBhYm92ZS4gRm9yIGV4YW1wbGUsIHlv dSBjb3VsZAorKyAqIHRyeSBzZW5kaW5nIG5ldyBpbnB1dCBvbiBlYWNoIGl0ZXJhdGlvbiwgYW5k IHRyeSB0byByZWNlaXZlIG91dHB1dCBpZiB0aGF0CisrICogcmV0dXJucyBFQUdBSU4uCisrICoK KysgKiBFbmQgb2Ygc3RyZWFtIHNpdHVhdGlvbnMuIFRoZXNlIHJlcXVpcmUgImZsdXNoaW5nIiAo YWthIGRyYWluaW5nKSB0aGUgY29kZWMsCisrICogYXMgdGhlIGNvZGVjIG1pZ2h0IGJ1ZmZlciBt dWx0aXBsZSBmcmFtZXMgb3IgcGFja2V0cyBpbnRlcm5hbGx5IGZvcgorKyAqIHBlcmZvcm1hbmNl IG9yIG91dCBvZiBuZWNlc3NpdHkgKGNvbnNpZGVyIEItZnJhbWVzKS4KKysgKiBUaGlzIGlzIGhh bmRsZWQgYXMgZm9sbG93czoKKysgKiAtIEluc3RlYWQgb2YgdmFsaWQgaW5wdXQsIHNlbmQgTlVM TCB0byB0aGUgYXZjb2RlY19zZW5kX3BhY2tldCgpIChkZWNvZGluZykKKysgKiAgIG9yIGF2Y29k ZWNfc2VuZF9mcmFtZSgpIChlbmNvZGluZykgZnVuY3Rpb25zLiBUaGlzIHdpbGwgZW50ZXIgZHJh aW5pbmcKKysgKiAgIG1vZGUuCisrICogLSBDYWxsIGF2Y29kZWNfcmVjZWl2ZV9mcmFtZSgpIChk ZWNvZGluZykgb3IgYXZjb2RlY19yZWNlaXZlX3BhY2tldCgpCisrICogICAoZW5jb2RpbmcpIGlu IGEgbG9vcCB1bnRpbCBBVkVSUk9SX0VPRiBpcyByZXR1cm5lZC4gVGhlIGZ1bmN0aW9ucyB3aWxs CisrICogICBub3QgcmV0dXJuIEFWRVJST1IoRUFHQUlOKSwgdW5sZXNzIHlvdSBmb3Jnb3QgdG8g ZW50ZXIgZHJhaW5pbmcgbW9kZS4KKysgKiAtIEJlZm9yZSBkZWNvZGluZyBjYW4gYmUgcmVzdW1l ZCBhZ2FpbiwgdGhlIGNvZGVjIGhhcyB0byBiZSByZXNldCB3aXRoCisrICogICBhdmNvZGVjX2Zs dXNoX2J1ZmZlcnMoKS4KKysgKgorKyAqIFVzaW5nIHRoZSBBUEkgYXMgb3V0bGluZWQgYWJvdmUg aXMgaGlnaGx5IHJlY29tbWVuZGVkLiBCdXQgaXQgaXMgYWxzbworKyAqIHBvc3NpYmxlIHRvIGNh bGwgZnVuY3Rpb25zIG91dHNpZGUgb2YgdGhpcyByaWdpZCBzY2hlbWEuIEZvciBleGFtcGxlLCB5 b3UgY2FuCisrICogY2FsbCBhdmNvZGVjX3NlbmRfcGFja2V0KCkgcmVwZWF0ZWRseSB3aXRob3V0 IGNhbGxpbmcKKysgKiBhdmNvZGVjX3JlY2VpdmVfZnJhbWUoKS4gSW4gdGhpcyBjYXNlLCBhdmNv ZGVjX3NlbmRfcGFja2V0KCkgd2lsbCBzdWNjZWVkCisrICogdW50aWwgdGhlIGNvZGVjJ3MgaW50 ZXJuYWwgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCB1cCAod2hpY2ggaXMgdHlwaWNhbGx5IG9mCisr ICogc2l6ZSAxIHBlciBvdXRwdXQgZnJhbWUsIGFmdGVyIGluaXRpYWwgaW5wdXQpLCBhbmQgdGhl biByZWplY3QgaW5wdXQgd2l0aAorKyAqIEFWRVJST1IoRUFHQUlOKS4gT25jZSBpdCBzdGFydHMg cmVqZWN0aW5nIGlucHV0LCB5b3UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvCisrICogcmVhZCBhdCBs ZWFzdCBzb21lIG91dHB1dC4KKysgKgorKyAqIE5vdCBhbGwgY29kZWNzIHdpbGwgZm9sbG93IGEg cmlnaWQgYW5kIHByZWRpY3RhYmxlIGRhdGFmbG93OyB0aGUgb25seQorKyAqIGd1YXJhbnRlZSBp cyB0aGF0IGFuIEFWRVJST1IoRUFHQUlOKSByZXR1cm4gdmFsdWUgb24gYSBzZW5kL3JlY2VpdmUg Y2FsbCBvbgorKyAqIG9uZSBlbmQgaW1wbGllcyB0aGF0IGEgcmVjZWl2ZS9zZW5kIGNhbGwgb24g dGhlIG90aGVyIGVuZCB3aWxsIHN1Y2NlZWQsIG9yCisrICogYXQgbGVhc3Qgd2lsbCBub3QgZmFp bCB3aXRoIEFWRVJST1IoRUFHQUlOKS4gSW4gZ2VuZXJhbCwgbm8gY29kZWMgd2lsbAorKyAqIHBl cm1pdCB1bmxpbWl0ZWQgYnVmZmVyaW5nIG9mIGlucHV0IG9yIG91dHB1dC4KKysgKgorKyAqIEEg Y29kZWMgaXMgbm90IGFsbG93ZWQgdG8gcmV0dXJuIEFWRVJST1IoRUFHQUlOKSBmb3IgYm90aCBz ZW5kaW5nIGFuZCByZWNlaXZpbmcuIFRoaXMKKysgKiB3b3VsZCBiZSBhbiBpbnZhbGlkIHN0YXRl LCB3aGljaCBjb3VsZCBwdXQgdGhlIGNvZGVjIHVzZXIgaW50byBhbiBlbmRsZXNzCisrICogbG9v cC4gVGhlIEFQSSBoYXMgbm8gY29uY2VwdCBvZiB0aW1lIGVpdGhlcjogaXQgY2Fubm90IGhhcHBl biB0aGF0IHRyeWluZyB0bworKyAqIGRvIGF2Y29kZWNfc2VuZF9wYWNrZXQoKSByZXN1bHRzIGlu IEFWRVJST1IoRUFHQUlOKSwgYnV0IGEgcmVwZWF0ZWQgY2FsbCAxIHNlY29uZAorKyAqIGxhdGVy IGFjY2VwdHMgdGhlIHBhY2tldCAod2l0aCBubyBvdGhlciByZWNlaXZlL2ZsdXNoIEFQSSBjYWxs cyBpbnZvbHZlZCkuCisrICogVGhlIEFQSSBpcyBhIHN0cmljdCBzdGF0ZSBtYWNoaW5lLCBhbmQg dGhlIHBhc3NhZ2Ugb2YgdGltZSBpcyBub3Qgc3VwcG9zZWQKKysgKiB0byBpbmZsdWVuY2UgaXQu IFNvbWUgdGltaW5nLWRlcGVuZGVudCBiZWhhdmlvciBtaWdodCBzdGlsbCBiZSBkZWVtZWQKKysg KiBhY2NlcHRhYmxlIGluIGNlcnRhaW4gY2FzZXMuIEJ1dCBpdCBtdXN0IG5ldmVyIHJlc3VsdCBp biBib3RoIHNlbmQvcmVjZWl2ZQorKyAqIHJldHVybmluZyBFQUdBSU4gYXQgdGhlIHNhbWUgdGlt ZSBhdCBhbnkgcG9pbnQuIEl0IG11c3QgYWxzbyBhYnNvbHV0ZWx5IGJlCisrICogYXZvaWRlZCB0 aGF0IHRoZSBjdXJyZW50IHN0YXRlIGlzICJ1bnN0YWJsZSIgYW5kIGNhbiAiZmxpcC1mbG9wIiBi ZXR3ZWVuCisrICogdGhlIHNlbmQvcmVjZWl2ZSBBUElzIGFsbG93aW5nIHByb2dyZXNzLiBGb3Ig ZXhhbXBsZSwgaXQncyBub3QgYWxsb3dlZCB0aGF0CisrICogdGhlIGNvZGVjIHJhbmRvbWx5IGRl Y2lkZXMgdGhhdCBpdCBhY3R1YWxseSB3YW50cyB0byBjb25zdW1lIGEgcGFja2V0IG5vdworKyAq IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgZnJhbWUsIGFmdGVyIGl0IGp1c3QgcmV0dXJuZWQgQVZF UlJPUihFQUdBSU4pIG9uIGFuCisrICogYXZjb2RlY19zZW5kX3BhY2tldCgpIGNhbGwuCisrICog QH0KKysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2Y19jb3JlIENvcmUgZnVuY3Rpb25z L3N0cnVjdHVyZXMuCisrICogQGluZ3JvdXAgbGliYXZjCisrICoKKysgKiBCYXNpYyBkZWZpbml0 aW9ucywgZnVuY3Rpb25zIGZvciBxdWVyeWluZyBsaWJhdmNvZGVjIGNhcGFiaWxpdGllcywKKysg KiBhbGxvY2F0aW5nIGNvcmUgc3RydWN0dXJlcywgZXRjLgorKyAqIEB7CisrICovCisrCisrLyoq CisrICogQGluZ3JvdXAgbGF2Y19lbmNvZGluZworKyAqLworK3R5cGVkZWYgc3RydWN0IFJjT3Zl cnJpZGV7CisrICAgIGludCBzdGFydF9mcmFtZTsKKysgICAgaW50IGVuZF9mcmFtZTsKKysgICAg aW50IHFzY2FsZTsgLy8gSWYgdGhpcyBpcyAwIHRoZW4gcXVhbGl0eV9mYWN0b3Igd2lsbCBiZSB1 c2VkIGluc3RlYWQuCisrICAgIGZsb2F0IHF1YWxpdHlfZmFjdG9yOworK30gUmNPdmVycmlkZTsK KysKKysvKiBlbmNvZGluZyBzdXBwb3J0CisrICAgVGhlc2UgZmxhZ3MgY2FuIGJlIHBhc3NlZCBp biBBVkNvZGVjQ29udGV4dC5mbGFncyBiZWZvcmUgaW5pdGlhbGl6YXRpb24uCisrICAgTm90ZTog Tm90IGV2ZXJ5dGhpbmcgaXMgc3VwcG9ydGVkIHlldC4KKysqLworKworKy8qKgorKyAqIEFsbG93 IGRlY29kZXJzIHRvIHByb2R1Y2UgZnJhbWVzIHdpdGggZGF0YSBwbGFuZXMgdGhhdCBhcmUgbm90 IGFsaWduZWQKKysgKiB0byBDUFUgcmVxdWlyZW1lbnRzIChlLmcuIGR1ZSB0byBjcm9wcGluZyku CisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX1VOQUxJR05FRCAgICAgICAoMSA8PCAgMCkK KysvKioKKysgKiBVc2UgZml4ZWQgcXNjYWxlLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxB R19RU0NBTEUgICAgICAgICAgKDEgPDwgIDEpCisrLyoqCisrICogNCBNViBwZXIgTUIgYWxsb3dl ZCAvIGFkdmFuY2VkIHByZWRpY3Rpb24gZm9yIEguMjYzLgorKyAqLworKyNkZWZpbmUgQVZfQ09E RUNfRkxBR180TVYgICAgICAgICAgICAgKDEgPDwgIDIpCisrLyoqCisrICogT3V0cHV0IGV2ZW4g dGhvc2UgZnJhbWVzIHRoYXQgbWlnaHQgYmUgY29ycnVwdGVkLgorKyAqLworKyNkZWZpbmUgQVZf Q09ERUNfRkxBR19PVVRQVVRfQ09SUlVQVCAgKDEgPDwgIDMpCisrLyoqCisrICogVXNlIHFwZWwg TUMuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX1FQRUwgICAgICAgICAgICAoMSA8PCAg NCkKKysvKioKKysgKiBSZXF1ZXN0IHRoZSBlbmNvZGVyIHRvIG91dHB1dCByZWNvbnN0cnVjdGVk IGZyYW1lcywgaS5lLlwgZnJhbWVzIHRoYXQgd291bGQKKysgKiBiZSBwcm9kdWNlZCBieSBkZWNv ZGluZyB0aGUgZW5jb2RlZCBiaXRzdHJlYW0uIFRoZXNlIGZyYW1lcyBtYXkgYmUgcmV0cmlldmVk CisrICogYnkgY2FsbGluZyBhdmNvZGVjX3JlY2VpdmVfZnJhbWUoKSBpbW1lZGlhdGVseSBhZnRl ciBhIHN1Y2Nlc3NmdWwgY2FsbCB0bworKyAqIGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQoKS4KKysg KgorKyAqIFNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBlbmNvZGVycyBmbGFnZ2VkIHdpdGggdGhl CisrICogQHJlZiBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRUNPTl9GUkFNRSBjYXBhYmlsaXR5Lgor KyAqCisrICogQG5vdGUKKysgKiBFYWNoIHJlY29uc3RydWN0ZWQgZnJhbWUgcmV0dXJuZWQgYnkg dGhlIGVuY29kZXIgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QKKysgKiBlbmNvZGVkIHBhY2tldCwg aS5lLiB0aGUgZnJhbWVzIGFyZSByZXR1cm5lZCBpbiBjb2RlZCBvcmRlciByYXRoZXIgdGhhbgor KyAqIHByZXNlbnRhdGlvbiBvcmRlci4KKysgKgorKyAqIEBub3RlCisrICogRnJhbWUgcGFyYW1l dGVycyAobGlrZSBwaXhlbCBmb3JtYXQgb3IgZGltZW5zaW9ucykgZG8gbm90IGhhdmUgdG8gbWF0 Y2ggdGhlCisrICogQVZDb2RlY0NvbnRleHQgdmFsdWVzLiBNYWtlIHN1cmUgdG8gdXNlIHRoZSB2 YWx1ZXMgZnJvbSB0aGUgcmV0dXJuZWQgZnJhbWUuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19G TEFHX1JFQ09OX0ZSQU1FICAgICAoMSA8PCAgNikKKysvKioKKysgKiBAcGFyIGRlY29kaW5nCisr ICogUmVxdWVzdCB0aGUgZGVjb2RlciB0byBwcm9wYWdhdGUgZWFjaCBwYWNrZXQncyBBVlBhY2tl dC5vcGFxdWUgYW5kCisrICogQVZQYWNrZXQub3BhcXVlX3JlZiB0byBpdHMgY29ycmVzcG9uZGlu ZyBvdXRwdXQgQVZGcmFtZS4KKysgKgorKyAqIEBwYXIgZW5jb2Rpbmc6CisrICogUmVxdWVzdCB0 aGUgZW5jb2RlciB0byBwcm9wYWdhdGUgZWFjaCBmcmFtZSdzIEFWRnJhbWUub3BhcXVlIGFuZAor KyAqIEFWRnJhbWUub3BhcXVlX3JlZiB2YWx1ZXMgdG8gaXRzIGNvcnJlc3BvbmRpbmcgb3V0cHV0 IEFWUGFja2V0LgorKyAqCisrICogQHBhcgorKyAqIE1heSBvbmx5IGJlIHNldCBvbiBlbmNvZGVy cyB0aGF0IGhhdmUgdGhlCisrICogQHJlZiBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURf T1BBUVVFIGNhcGFiaWxpdHkgZmxhZy4KKysgKgorKyAqIEBub3RlCisrICogV2hpbGUgaW4gdHlw aWNhbCBjYXNlcyBvbmUgaW5wdXQgZnJhbWUgcHJvZHVjZXMgZXhhY3RseSBvbmUgb3V0cHV0IHBh Y2tldAorKyAqIChwZXJoYXBzIGFmdGVyIGEgZGVsYXkpLCBpbiBnZW5lcmFsIHRoZSBtYXBwaW5n IG9mIGZyYW1lcyB0byBwYWNrZXRzIGlzCisrICogTS10by1OLCBzbworKyAqIC0gQW55IG51bWJl ciBvZiBpbnB1dCBmcmFtZXMgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgZ2l2ZW4gb3V0cHV0 IHBhY2tldC4KKysgKiAgIFRoaXMgaW5jbHVkZXMgemVybyAtIGUuZy4gc29tZSBlbmNvZGVycyBt YXkgb3V0cHV0IHBhY2tldHMgdGhhdCBjYXJyeSBvbmx5CisrICogICBtZXRhZGF0YSBhYm91dCB0 aGUgd2hvbGUgc3RyZWFtLgorKyAqIC0gQSBnaXZlbiBpbnB1dCBmcmFtZSBtYXkgYmUgYXNzb2Np YXRlZCB3aXRoIGFueSBudW1iZXIgb2Ygb3V0cHV0IHBhY2tldHMuCisrICogICBBZ2FpbiB0aGlz IGluY2x1ZGVzIHplcm8gLSBlLmcuIHNvbWUgZW5jb2RlcnMgbWF5IGRyb3AgZnJhbWVzIHVuZGVy IGNlcnRhaW4KKysgKiAgIGNvbmRpdGlvbnMuCisrICogLgorKyAqIFRoaXMgaW1wbGllcyB0aGF0 IHdoZW4gdXNpbmcgdGhpcyBmbGFnLCB0aGUgY2FsbGVyIG11c3QgTk9UIGFzc3VtZSB0aGF0Cisr ICogLSBhIGdpdmVuIGlucHV0IGZyYW1lJ3Mgb3BhcXVlcyB3aWxsIG5lY2Vzc2FyaWx5IGFwcGVh ciBvbiBzb21lIG91dHB1dCBwYWNrZXQ7CisrICogLSBldmVyeSBvdXRwdXQgcGFja2V0IHdpbGwg aGF2ZSBzb21lIG5vbi1OVUxMIG9wYXF1ZSB2YWx1ZS4KKysgKiAuCisrICogV2hlbiBhbiBvdXRw dXQgcGFja2V0IGNvbnRhaW5zIG11bHRpcGxlIGZyYW1lcywgdGhlIG9wYXF1ZSB2YWx1ZXMgd2ls bCBiZQorKyAqIHRha2VuIGZyb20gdGhlIGZpcnN0IG9mIHRob3NlLgorKyAqCisrICogQG5vdGUK KysgKiBUaGUgY29udmVyc2UgaG9sZHMgZm9yIGRlY29kZXJzLCB3aXRoIGZyYW1lcyBhbmQgcGFj a2V0cyBzd2l0Y2hlZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfQ09QWV9PUEFRVUUg ICAgICgxIDw8ICA3KQorKy8qKgorKyAqIFNpZ25hbCB0byB0aGUgZW5jb2RlciB0aGF0IHRoZSB2 YWx1ZXMgb2YgQVZGcmFtZS5kdXJhdGlvbiBhcmUgdmFsaWQgYW5kCisrICogc2hvdWxkIGJlIHVz ZWQgKHR5cGljYWxseSBmb3IgdHJhbnNmZXJyaW5nIHRoZW0gdG8gb3V0cHV0IHBhY2tldHMpLgor KyAqCisrICogSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIGZyYW1lIGR1cmF0aW9ucyBhcmUgaWdu b3JlZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfRlJBTUVfRFVSQVRJT04gICgxIDw8 ICA4KQorKy8qKgorKyAqIFVzZSBpbnRlcm5hbCAycGFzcyByYXRlY29udHJvbCBpbiBmaXJzdCBw YXNzIG1vZGUuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX1BBU1MxICAgICAgICAgICAo MSA8PCAgOSkKKysvKioKKysgKiBVc2UgaW50ZXJuYWwgMnBhc3MgcmF0ZWNvbnRyb2wgaW4gc2Vj b25kIHBhc3MgbW9kZS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfUEFTUzIgICAgICAg ICAgICgxIDw8IDEwKQorKy8qKgorKyAqIGxvb3AgZmlsdGVyLgorKyAqLworKyNkZWZpbmUgQVZf Q09ERUNfRkxBR19MT09QX0ZJTFRFUiAgICAgKDEgPDwgMTEpCisrLyoqCisrICogT25seSBkZWNv ZGUvZW5jb2RlIGdyYXlzY2FsZS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfR1JBWSAg ICAgICAgICAgICgxIDw8IDEzKQorKy8qKgorKyAqIGVycm9yWz9dIHZhcmlhYmxlcyB3aWxsIGJl IHNldCBkdXJpbmcgZW5jb2RpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX1BTTlIg ICAgICAgICAgICAoMSA8PCAxNSkKKysvKioKKysgKiBVc2UgaW50ZXJsYWNlZCBEQ1QuCisrICov CisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX0lOVEVSTEFDRURfRENUICAoMSA8PCAxOCkKKysvKioK KysgKiBGb3JjZSBsb3cgZGVsYXkuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX0xPV19E RUxBWSAgICAgICAoMSA8PCAxOSkKKysvKioKKysgKiBQbGFjZSBnbG9iYWwgaGVhZGVycyBpbiBl eHRyYWRhdGEgaW5zdGVhZCBvZiBldmVyeSBrZXlmcmFtZS4KKysgKi8KKysjZGVmaW5lIEFWX0NP REVDX0ZMQUdfR0xPQkFMX0hFQURFUiAgICgxIDw8IDIyKQorKy8qKgorKyAqIFVzZSBvbmx5IGJp dGV4YWN0IHN0dWZmIChleGNlcHQgKEkpRENUKS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZM QUdfQklURVhBQ1QgICAgICAgICgxIDw8IDIzKQorKy8qIEZ4IDogRmxhZyBmb3IgSC4yNjMrIGV4 dHJhIG9wdGlvbnMgKi8KKysvKioKKysgKiBILjI2MyBhZHZhbmNlZCBpbnRyYSBjb2RpbmcgLyBN UEVHLTQgQUMgcHJlZGljdGlvbgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBR19BQ19QUkVE ICAgICAgICAgKDEgPDwgMjQpCisrLyoqCisrICogaW50ZXJsYWNlZCBtb3Rpb24gZXN0aW1hdGlv bgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBR19JTlRFUkxBQ0VEX01FICAgKDEgPDwgMjkp CisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX0NMT1NFRF9HT1AgICAgICAoMVUgPDwgMzEpCisrCisr LyoqCisrICogQWxsb3cgbm9uIHNwZWMgY29tcGxpYW50IHNwZWVkdXAgdHJpY2tzLgorKyAqLwor KyNkZWZpbmUgQVZfQ09ERUNfRkxBRzJfRkFTVCAgICAgICAgICAgKDEgPDwgIDApCisrLyoqCisr ICogU2tpcCBiaXRzdHJlYW0gZW5jb2RpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFH Ml9OT19PVVRQVVQgICAgICAoMSA8PCAgMikKKysvKioKKysgKiBQbGFjZSBnbG9iYWwgaGVhZGVy cyBhdCBldmVyeSBrZXlmcmFtZSBpbnN0ZWFkIG9mIGluIGV4dHJhZGF0YS4KKysgKi8KKysjZGVm aW5lIEFWX0NPREVDX0ZMQUcyX0xPQ0FMX0hFQURFUiAgICgxIDw8ICAzKQorKworKy8qKgorKyAq IElucHV0IGJpdHN0cmVhbSBtaWdodCBiZSB0cnVuY2F0ZWQgYXQgYSBwYWNrZXQgYm91bmRhcmll cworKyAqIGluc3RlYWQgb2Ygb25seSBhdCBmcmFtZSBib3VuZGFyaWVzLgorKyAqLworKyNkZWZp bmUgQVZfQ09ERUNfRkxBRzJfQ0hVTktTICAgICAgICAgKDEgPDwgMTUpCisrLyoqCisrICogRGlz Y2FyZCBjcm9wcGluZyBpbmZvcm1hdGlvbiBmcm9tIFNQUy4KKysgKi8KKysjZGVmaW5lIEFWX0NP REVDX0ZMQUcyX0lHTk9SRV9DUk9QICAgICgxIDw8IDE2KQorKy8qKgorKyAqIEZvcmNlIGF1ZGlv IGVuY29kZXJzIHRvIHVzZSBhIGZpeGVkIGZyYW1lIHNpemUuCisrICovCisrI2RlZmluZSBBVl9D T0RFQ19GTEFHMl9GSVhFRF9GUkFNRV9TSVpFICgxIDw8IDE3KQorKworKy8qKgorKyAqIFNob3cg YWxsIGZyYW1lcyBiZWZvcmUgdGhlIGZpcnN0IGtleWZyYW1lCisrICovCisrI2RlZmluZSBBVl9D T0RFQ19GTEFHMl9TSE9XX0FMTCAgICAgICAoMSA8PCAyMikKKysvKioKKysgKiBFeHBvcnQgbW90 aW9uIHZlY3RvcnMgdGhyb3VnaCBmcmFtZSBzaWRlIGRhdGEKKysgKi8KKysjZGVmaW5lIEFWX0NP REVDX0ZMQUcyX0VYUE9SVF9NVlMgICAgICgxIDw8IDI4KQorKy8qKgorKyAqIERvIG5vdCBza2lw IHNhbXBsZXMgYW5kIGV4cG9ydCBza2lwIGluZm9ybWF0aW9uIGFzIGZyYW1lIHNpZGUgZGF0YQor KyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBRzJfU0tJUF9NQU5VQUwgICAgKDEgPDwgMjkpCisr LyoqCisrICogRG8gbm90IHJlc2V0IEFTUyBSZWFkT3JkZXIgZmllbGQgb24gZmx1c2ggKHN1YnRp dGxlcyBkZWNvZGluZykKKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUcyX1JPX0ZMVVNIX05P T1AgICgxIDw8IDMwKQorKy8qKgorKyAqIEdlbmVyYXRlL3BhcnNlIElDQyBwcm9maWxlcyBvbiBl bmNvZGUvZGVjb2RlLCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHR5cGUgb2YKKysgKiBmaWxlLiBO byBlZmZlY3Qgb24gY29kZWNzIHdoaWNoIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIElDQyBwcm9m aWxlcywgb3IKKysgKiB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IgbGNtczIuCisr ICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHMl9JQ0NfUFJPRklMRVMgICAoMVUgPDwgMzEpCisr CisrLyogRXhwb3J0ZWQgc2lkZSBkYXRhLgorKyAgIFRoZXNlIGZsYWdzIGNhbiBiZSBwYXNzZWQg aW4gQVZDb2RlY0NvbnRleHQuZXhwb3J0X3NpZGVfZGF0YSBiZWZvcmUgaW5pdGlhbGl6YXRpb24u CisrKi8KKysvKioKKysgKiBFeHBvcnQgbW90aW9uIHZlY3RvcnMgdGhyb3VnaCBmcmFtZSBzaWRl IGRhdGEKKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0VYUE9SVF9EQVRBX01WUyAgICAgICAgICgx IDw8IDApCisrLyoqCisrICogRXhwb3J0IGVuY29kZXIgUHJvZHVjZXIgUmVmZXJlbmNlIFRpbWUg dGhyb3VnaCBwYWNrZXQgc2lkZSBkYXRhCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19FWFBPUlRf REFUQV9QUkZUICAgICAgICAoMSA8PCAxKQorKy8qKgorKyAqIERlY29kaW5nIG9ubHkuCisrICog RXhwb3J0IHRoZSBBVlZpZGVvRW5jUGFyYW1zIHN0cnVjdHVyZSB0aHJvdWdoIGZyYW1lIHNpZGUg ZGF0YS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0VYUE9SVF9EQVRBX1ZJREVPX0VOQ19QQVJB TVMgKDEgPDwgMikKKysvKioKKysgKiBEZWNvZGluZyBvbmx5LgorKyAqIERvIG5vdCBhcHBseSBm aWxtIGdyYWluLCBleHBvcnQgaXQgaW5zdGVhZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0VY UE9SVF9EQVRBX0ZJTE1fR1JBSU4gKDEgPDwgMykKKysKKysvKioKKysgKiBEZWNvZGluZyBvbmx5 LgorKyAqIERvIG5vdCBhcHBseSBwaWN0dXJlIGVuaGFuY2VtZW50IGxheWVycywgZXhwb3J0IHRo ZW0gaW5zdGVhZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0VYUE9SVF9EQVRBX0VOSEFOQ0VN RU5UUyAoMSA8PCA0KQorKworKy8qKgorKyAqIFRoZSBkZWNvZGVyIHdpbGwga2VlcCBhIHJlZmVy ZW5jZSB0byB0aGUgZnJhbWUgYW5kIG1heSByZXVzZSBpdCBsYXRlci4KKysgKi8KKysjZGVmaW5l IEFWX0dFVF9CVUZGRVJfRkxBR19SRUYgKDEgPDwgMCkKKysKKysvKioKKysgKiBUaGUgZW5jb2Rl ciB3aWxsIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhY2tldCBhbmQgbWF5IHJldXNlIGl0IGxh dGVyLgorKyAqLworKyNkZWZpbmUgQVZfR0VUX0VOQ09ERV9CVUZGRVJfRkxBR19SRUYgKDEgPDwg MCkKKysKKysvKioKKysgKiBUaGUgZGVjb2RlciB3aWxsIGJ5cGFzcyBmcmFtZSB0aHJlYWRpbmcg YW5kIHJldHVybiB0aGUgbmV4dCBmcmFtZSBhcyBzb29uIGFzCisrICogcG9zc2libGUuIE5vdGUg dGhhdCB0aGlzIG1heSBkZWxpdmVyIGZyYW1lcyBlYXJsaWVyIHRoYW4gdGhlIGFkdmVydGlzZWQK KysgKiBgQVZDb2RlY0NvbnRleHQuZGVsYXlgLiBObyBlZmZlY3Qgd2hlbiBmcmFtZSB0aHJlYWRp bmcgaXMgZGlzYWJsZWQsIG9yIG9uCisrICogZW5jb2RpbmcuCisrICovCisrI2RlZmluZSBBVl9D T0RFQ19SRUNFSVZFX0ZSQU1FX0ZMQUdfU1lOQ0hST05PVVMgKDEgPDwgMCkKKysKKysvKioKKysg KiBtYWluIGV4dGVybmFsIEFQSSBzdHJ1Y3R1cmUuCisrICogTmV3IGZpZWxkcyBjYW4gYmUgYWRk ZWQgdG8gdGhlIGVuZCB3aXRoIG1pbm9yIHZlcnNpb24gYnVtcHMuCisrICogUmVtb3ZhbCwgcmVv cmRlcmluZyBhbmQgY2hhbmdlcyB0byBleGlzdGluZyBmaWVsZHMgcmVxdWlyZSBhIG1ham9yCisr ICogdmVyc2lvbiBidW1wLgorKyAqIFlvdSBjYW4gdXNlIEFWT3B0aW9ucyAoYXZfb3B0KiAvIGF2 X3NldC9nZXQqKCkpIHRvIGFjY2VzcyB0aGVzZSBmaWVsZHMgZnJvbSB1c2VyCisrICogYXBwbGlj YXRpb25zLgorKyAqIFRoZSBuYW1lIHN0cmluZyBmb3IgQVZPcHRpb25zIG9wdGlvbnMgbWF0Y2hl cyB0aGUgYXNzb2NpYXRlZCBjb21tYW5kIGxpbmUKKysgKiBwYXJhbWV0ZXIgbmFtZSBhbmQgY2Fu IGJlIGZvdW5kIGluIGxpYmF2Y29kZWMvb3B0aW9uc190YWJsZS5oCisrICogVGhlIEFWT3B0aW9u L2NvbW1hbmQgbGluZSBwYXJhbWV0ZXIgbmFtZXMgZGlmZmVyIGluIHNvbWUgY2FzZXMgZnJvbSB0 aGUgQworKyAqIHN0cnVjdHVyZSBmaWVsZCBuYW1lcyBmb3IgaGlzdG9yaWMgcmVhc29ucyBvciBi cmV2aXR5LgorKyAqIHNpemVvZihBVkNvZGVjQ29udGV4dCkgbXVzdCBub3QgYmUgdXNlZCBvdXRz aWRlIGxpYmF2Ki4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNvZGVjQ29udGV4dCB7CisrICAg IC8qKgorKyAgICAgKiBpbmZvcm1hdGlvbiBvbiBzdHJ1Y3QgZm9yIGF2X2xvZworKyAgICAgKiAt IHNldCBieSBhdmNvZGVjX2FsbG9jX2NvbnRleHQzCisrICAgICAqLworKyAgICBjb25zdCBBVkNs YXNzICphdl9jbGFzczsKKysgICAgaW50IGxvZ19sZXZlbF9vZmZzZXQ7CisrCisrICAgIGVudW0g QVZNZWRpYVR5cGUgY29kZWNfdHlwZTsgLyogc2VlIEFWTUVESUFfVFlQRV94eHggKi8KKysgICAg Y29uc3Qgc3RydWN0IEFWQ29kZWMgICpjb2RlYzsKKysgICAgZW51bSBBVkNvZGVjSUQgICAgIGNv ZGVjX2lkOyAvKiBzZWUgQVZfQ09ERUNfSURfeHh4ICovCisrCisrICAgIC8qKgorKyAgICAgKiBm b3VyY2MgKExTQiBmaXJzdCwgc28gIkFCQ0QiIC0+ICgnRCc8PDI0KSArICgnQyc8PDE2KSArICgn Qic8PDgpICsgJ0EnKS4KKysgICAgICogVGhpcyBpcyB1c2VkIHRvIHdvcmsgYXJvdW5kIHNvbWUg ZW5jb2RlciBidWdzLgorKyAgICAgKiBBIGRlbXV4ZXIgc2hvdWxkIHNldCB0aGlzIHRvIHdoYXQg aXMgc3RvcmVkIGluIHRoZSBmaWVsZCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjb2RlYy4KKysgICAg ICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggZmllbGRzIGluIGEgY29udGFpbmVyIHRoZW4g dGhlIGRlbXV4ZXIgc2hvdWxkIGNob29zZSB0aGUgb25lCisrICAgICAqIHdoaWNoIG1heGltaXpl cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZWQgY29kZWMuCisrICAgICAqIElmIHRoZSBj b2RlYyB0YWcgZmllbGQgaW4gYSBjb250YWluZXIgaXMgbGFyZ2VyIHRoYW4gMzIgYml0cyB0aGVu IHRoZSBkZW11eGVyIHNob3VsZAorKyAgICAgKiByZW1hcCB0aGUgbG9uZ2VyIElEIHRvIDMyIGJp dHMgd2l0aCBhIHRhYmxlIG9yIG90aGVyIHN0cnVjdHVyZS4gQWx0ZXJuYXRpdmVseSBhIG5ldwor KyAgICAgKiBleHRyYV9jb2RlY190YWcgKyBzaXplIGNvdWxkIGJlIGFkZGVkIGJ1dCBmb3IgdGhp cyBhIGNsZWFyIGFkdmFudGFnZSBtdXN0IGJlIGRlbW9uc3RyYXRlZAorKyAgICAgKiBmaXJzdC4K KysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIsIGlmIG5vdCB0aGVuIHRoZSBkZWZhdWx0 IGJhc2VkIG9uIGNvZGVjX2lkIHdpbGwgYmUgdXNlZC4KKysgICAgICogLSBkZWNvZGluZzogU2V0 IGJ5IHVzZXIsIHdpbGwgYmUgY29udmVydGVkIHRvIHVwcGVyY2FzZSBieSBsaWJhdmNvZGVjIGR1 cmluZyBpbml0LgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgaW50IGNvZGVjX3RhZzsKKysKKysg ICAgdm9pZCAqcHJpdl9kYXRhOworKworKyAgICAvKioKKysgICAgICogUHJpdmF0ZSBjb250ZXh0 IHVzZWQgZm9yIGludGVybmFsIGRhdGEuCisrICAgICAqCisrICAgICAqIFVubGlrZSBwcml2X2Rh dGEsIHRoaXMgaXMgbm90IGNvZGVjLXNwZWNpZmljLiBJdCBpcyB1c2VkIGluIGdlbmVyYWwKKysg ICAgICogbGliYXZjb2RlYyBmdW5jdGlvbnMuCisrICAgICAqLworKyAgICBzdHJ1Y3QgQVZDb2Rl Y0ludGVybmFsICppbnRlcm5hbDsKKysKKysgICAgLyoqCisrICAgICAqIFByaXZhdGUgZGF0YSBv ZiB0aGUgdXNlciwgY2FuIGJlIHVzZWQgdG8gY2FycnkgYXBwIHNwZWNpZmljIHN0dWZmLgorKyAg ICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5 IHVzZXIuCisrICAgICAqLworKyAgICB2b2lkICpvcGFxdWU7CisrCisrICAgIC8qKgorKyAgICAg KiB0aGUgYXZlcmFnZSBiaXRyYXRlCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyOyB1 bnVzZWQgZm9yIGNvbnN0YW50IHF1YW50aXplciBlbmNvZGluZy4KKysgICAgICogLSBkZWNvZGlu ZzogU2V0IGJ5IHVzZXIsIG1heSBiZSBvdmVyd3JpdHRlbiBieSBsaWJhdmNvZGVjCisrICAgICAq ICAgICAgICAgICAgIGlmIHRoaXMgaW5mbyBpcyBhdmFpbGFibGUgaW4gdGhlIHN0cmVhbQorKyAg ICAgKi8KKysgICAgaW50NjRfdCBiaXRfcmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIEFWX0NP REVDX0ZMQUdfKi4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0g ZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8KKysgICAgaW50IGZsYWdzOworKworKyAg ICAvKioKKysgICAgICogQVZfQ09ERUNfRkxBRzJfKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQg YnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAg ICBpbnQgZmxhZ3MyOworKworKyAgICAvKioKKysgICAgICogT3V0LW9mLWJhbmQgZ2xvYmFsIGhl YWRlcnMgdGhhdCBtYXkgYmUgdXNlZCBieSBzb21lIGNvZGVjcy4KKysgICAgICoKKysgICAgICog LSBkZWNvZGluZzogU2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyIHdoZW4gYXZhaWxhYmxlICh0 eXBpY2FsbHkgZnJvbSBhCisrICAgICAqICAgZGVtdXhlcikgYmVmb3JlIG9wZW5pbmcgdGhlIGRl Y29kZXI7IHNvbWUgZGVjb2RlcnMgcmVxdWlyZSB0aGlzIHRvIGJlCisrICAgICAqICAgc2V0IGFu ZCB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSBvdGhlcndpc2UuCisrICAgICAqCisrICAgICAqICAg VGhlIGFycmF5IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlIGF2X21hbGxvYygpIGZhbWlseSBv ZiBmdW5jdGlvbnM7CisrICAgICAqICAgYWxsb2NhdGVkIHNpemUgbXVzdCBiZSBhdCBsZWFzdCBB Vl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5dGVzCisrICAgICAqICAgbGFyZ2VyIHRoYW4g ZXh0cmFkYXRhX3NpemUuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IE1heSBiZSBzZXQg YnkgdGhlIGVuY29kZXIgaW4gYXZjb2RlY19vcGVuMigpIChwb3NzaWJseQorKyAgICAgKiAgIGRl cGVuZGluZyBvbiB3aGV0aGVyIHRoZSBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIgZmxhZyBp cyBzZXQpLgorKyAgICAgKgorKyAgICAgKiBBZnRlciBiZWluZyBzZXQsIHRoZSBhcnJheSBpcyBv d25lZCBieSB0aGUgY29kZWMgYW5kIGZyZWVkIGluCisrICAgICAqIGF2Y29kZWNfZnJlZV9jb250 ZXh0KCkuCisrICAgICAqLworKyAgICB1aW50OF90ICpleHRyYWRhdGE7CisrICAgIGludCBleHRy YWRhdGFfc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFs IHVuaXQgb2YgdGltZSAoaW4gc2Vjb25kcykgaW4gdGVybXMKKysgICAgICogb2Ygd2hpY2ggZnJh bWUgdGltZXN0YW1wcyBhcmUgcmVwcmVzZW50ZWQuIEZvciBmaXhlZC1mcHMgY29udGVudCwKKysg ICAgICogdGltZWJhc2Ugc2hvdWxkIGJlIDEvZnJhbWVyYXRlIGFuZCB0aW1lc3RhbXAgaW5jcmVt ZW50cyBzaG91bGQgYmUKKysgICAgICogaWRlbnRpY2FsbHkgMS4KKysgICAgICogVGhpcyBvZnRl biwgYnV0IG5vdCBhbHdheXMgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGZyYW1lIHJhdGUgb3IgZmll bGQgcmF0ZQorKyAgICAgKiBmb3IgdmlkZW8uIDEvdGltZV9iYXNlIGlzIG5vdCB0aGUgYXZlcmFn ZSBmcmFtZSByYXRlIGlmIHRoZSBmcmFtZSByYXRlIGlzIG5vdAorKyAgICAgKiBjb25zdGFudC4K KysgICAgICoKKysgICAgICogTGlrZSBjb250YWluZXJzLCBlbGVtZW50YXJ5IHN0cmVhbXMgYWxz byBjYW4gc3RvcmUgdGltZXN0YW1wcywgMS90aW1lX2Jhc2UKKysgICAgICogaXMgdGhlIHVuaXQg aW4gd2hpY2ggdGhlc2UgdGltZXN0YW1wcyBhcmUgc3BlY2lmaWVkLgorKyAgICAgKiBBcyBleGFt cGxlIG9mIHN1Y2ggY29kZWMgdGltZSBiYXNlIHNlZSBJU08vSUVDIDE0NDk2LTI6MjAwMShFKQor KyAgICAgKiB2b3BfdGltZV9pbmNyZW1lbnRfcmVzb2x1dGlvbiBhbmQgZml4ZWRfdm9wX3JhdGUK KysgICAgICogKGZpeGVkX3ZvcF9yYXRlID09IDAgaW1wbGllcyB0aGF0IGl0IGlzIGRpZmZlcmVu dCBmcm9tIHRoZSBmcmFtZXJhdGUpCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IE1VU1Qg YmUgc2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZC4KKysgICAgICovCisr ICAgIEFWUmF0aW9uYWwgdGltZV9iYXNlOworKworKyAgICAvKioKKysgICAgICogVGltZWJhc2Ug aW4gd2hpY2ggcGt0X2R0cy9wdHMgYW5kIEFWUGFja2V0LmR0cy9wdHMgYXJlIGV4cHJlc3NlZC4K KysgICAgICogLSBlbmNvZGluZzogdW51c2VkLgorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkg dXNlci4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgcGt0X3RpbWViYXNlOworKworKyAgICAv KioKKysgICAgICogLSBkZWNvZGluZzogRm9yIGNvZGVjcyB0aGF0IHN0b3JlIGEgZnJhbWVyYXRl IHZhbHVlIGluIHRoZSBjb21wcmVzc2VkCisrICAgICAqICAgICAgICAgICAgIGJpdHN0cmVhbSwg dGhlIGRlY29kZXIgbWF5IGV4cG9ydCBpdCBoZXJlLiB7IDAsIDF9IHdoZW4KKysgICAgICogICAg ICAgICAgICAgdW5rbm93bi4KKysgICAgICogLSBlbmNvZGluZzogTWF5IGJlIHVzZWQgdG8gc2ln bmFsIHRoZSBmcmFtZXJhdGUgb2YgQ0ZSIGNvbnRlbnQgdG8gYW4KKysgICAgICogICAgICAgICAg ICAgZW5jb2Rlci4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlOworKworKyAg ICAvKioKKysgICAgICogQ29kZWMgZGVsYXkuCisrICAgICAqCisrICAgICAqIEVuY29kaW5nOiBO dW1iZXIgb2YgZnJhbWVzIGRlbGF5IHRoZXJlIHdpbGwgYmUgZnJvbSB0aGUgZW5jb2RlciBpbnB1 dCB0bworKyAgICAgKiAgICAgICAgICAgdGhlIGRlY29kZXIgb3V0cHV0LiAod2UgYXNzdW1lIHRo ZSBkZWNvZGVyIG1hdGNoZXMgdGhlIHNwZWMpCisrICAgICAqIERlY29kaW5nOiBOdW1iZXIgb2Yg ZnJhbWVzIGRlbGF5IGluIGFkZGl0aW9uIHRvIHdoYXQgYSBzdGFuZGFyZCBkZWNvZGVyCisrICAg ICAqICAgICAgICAgICBhcyBzcGVjaWZpZWQgaW4gdGhlIHNwZWMgd291bGQgcHJvZHVjZS4KKysg ICAgICoKKysgICAgICogVmlkZW86CisrICAgICAqICAgTnVtYmVyIG9mIGZyYW1lcyB0aGUgZGVj b2RlZCBvdXRwdXQgd2lsbCBiZSBkZWxheWVkIHJlbGF0aXZlIHRvIHRoZQorKyAgICAgKiAgIGVu Y29kZWQgaW5wdXQuCisrICAgICAqCisrICAgICAqIEF1ZGlvOgorKyAgICAgKiAgIEZvciBlbmNv ZGluZywgdGhpcyBmaWVsZCBpcyB1bnVzZWQgKHNlZSBpbml0aWFsX3BhZGRpbmcpLgorKyAgICAg KgorKyAgICAgKiAgIEZvciBkZWNvZGluZywgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMg dGhlIGRlY29kZXIgbmVlZHMgdG8KKysgICAgICogICBvdXRwdXQgYmVmb3JlIHRoZSBkZWNvZGVy J3Mgb3V0cHV0IGlzIHZhbGlkLiBXaGVuIHNlZWtpbmcsIHlvdSBzaG91bGQKKysgICAgICogICBz dGFydCBkZWNvZGluZyB0aGlzIG1hbnkgc2FtcGxlcyBwcmlvciB0byB5b3VyIGRlc2lyZWQgc2Vl ayBwb2ludC4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMu CisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAg aW50IGRlbGF5OworKworKworKyAgICAvKiB2aWRlbyBvbmx5ICovCisrICAgIC8qKgorKyAgICAg KiBwaWN0dXJlIHdpZHRoIC8gaGVpZ2h0LgorKyAgICAgKgorKyAgICAgKiBAbm90ZSBUaG9zZSBm aWVsZHMgbWF5IG5vdCBtYXRjaCB0aGUgdmFsdWVzIG9mIHRoZSBsYXN0CisrICAgICAqIEFWRnJh bWUgb3V0cHV0IGJ5IGF2Y29kZWNfcmVjZWl2ZV9mcmFtZSgpIGR1ZSBmcmFtZQorKyAgICAgKiBy ZW9yZGVyaW5nLgorKyAgICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBNVVNUIGJlIHNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBv cGVuaW5nIHRoZSBkZWNvZGVyIGlmIGtub3duIGUuZy4KKysgICAgICogICAgICAgICAgICAgZnJv bSB0aGUgY29udGFpbmVyLiBTb21lIGRlY29kZXJzIHdpbGwgcmVxdWlyZSB0aGUgZGltZW5zaW9u cworKyAgICAgKiAgICAgICAgICAgICB0byBiZSBzZXQgYnkgdGhlIGNhbGxlci4gRHVyaW5nIGRl Y29kaW5nLCB0aGUgZGVjb2RlciBtYXkKKysgICAgICogICAgICAgICAgICAgb3ZlcndyaXRlIHRo b3NlIHZhbHVlcyBhcyByZXF1aXJlZCB3aGlsZSBwYXJzaW5nIHRoZSBkYXRhLgorKyAgICAgKi8K KysgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisrCisrICAgIC8qKgorKyAgICAgKiBCaXRzdHJlYW0g d2lkdGggLyBoZWlnaHQsIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB3aWR0aC9oZWlnaHQgZS5nLiB3 aGVuCisrICAgICAqIHRoZSBkZWNvZGVkIGZyYW1lIGlzIGNyb3BwZWQgYmVmb3JlIGJlaW5nIG91 dHB1dCBvciBsb3dyZXMgaXMgZW5hYmxlZC4KKysgICAgICoKKysgICAgICogQG5vdGUgVGhvc2Ug ZmllbGQgbWF5IG5vdCBtYXRjaCB0aGUgdmFsdWUgb2YgdGhlIGxhc3QKKysgICAgICogQVZGcmFt ZSBvdXRwdXQgYnkgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkgZHVlIGZyYW1lCisrICAgICAqIHJl b3JkZXJpbmcuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAt IGRlY29kaW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBvcGVuaW5nIHRoZSBkZWNv ZGVyIGlmIGtub3duCisrICAgICAqICAgICAgICAgICAgIGUuZy4gZnJvbSB0aGUgY29udGFpbmVy LiBEdXJpbmcgZGVjb2RpbmcsIHRoZSBkZWNvZGVyIG1heQorKyAgICAgKiAgICAgICAgICAgICBv dmVyd3JpdGUgdGhvc2UgdmFsdWVzIGFzIHJlcXVpcmVkIHdoaWxlIHBhcnNpbmcgdGhlIGRhdGEu CisrICAgICAqLworKyAgICBpbnQgY29kZWRfd2lkdGgsIGNvZGVkX2hlaWdodDsKKysKKysgICAg LyoqCisrICAgICAqIHNhbXBsZSBhc3BlY3QgcmF0aW8gKDAgaWYgdW5rbm93bikKKysgICAgICog VGhhdCBpcyB0aGUgd2lkdGggb2YgYSBwaXhlbCBkaXZpZGVkIGJ5IHRoZSBoZWlnaHQgb2YgdGhl IHBpeGVsLgorKyAgICAgKiBOdW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIG11c3QgYmUgcmVsYXRp dmVseSBwcmltZSBhbmQgc21hbGxlciB0aGFuIDI1NiBmb3Igc29tZSB2aWRlbyBzdGFuZGFyZHMu CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBT ZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgc2FtcGxlX2FzcGVj dF9yYXRpbzsKKysKKysgICAgLyoqCisrICAgICAqIFBpeGVsIGZvcm1hdCwgc2VlIEFWX1BJWF9G TVRfeHh4LgorKyAgICAgKiBNYXkgYmUgc2V0IGJ5IHRoZSBkZW11eGVyIGlmIGtub3duIGZyb20g aGVhZGVycy4KKysgICAgICogTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlY29kZXIgaWYgaXQg a25vd3MgYmV0dGVyLgorKyAgICAgKgorKyAgICAgKiBAbm90ZSBUaGlzIGZpZWxkIG1heSBub3Qg bWF0Y2ggdGhlIHZhbHVlIG9mIHRoZSBsYXN0CisrICAgICAqIEFWRnJhbWUgb3V0cHV0IGJ5IGF2 Y29kZWNfcmVjZWl2ZV9mcmFtZSgpIGR1ZSBmcmFtZQorKyAgICAgKiByZW9yZGVyaW5nLgorKyAg ICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGlu ZzogU2V0IGJ5IHVzZXIgaWYga25vd24sIG92ZXJyaWRkZW4gYnkgbGliYXZjb2RlYyB3aGlsZQor KyAgICAgKiAgICAgICAgICAgICBwYXJzaW5nIHRoZSBkYXRhLgorKyAgICAgKi8KKysgICAgZW51 bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBOb21pbmFsIHVu YWNjZWxlcmF0ZWQgcGl4ZWwgZm9ybWF0LCBzZWUgQVZfUElYX0ZNVF94eHguCisrICAgICAqIC0g ZW5jb2Rpbmc6IHVudXNlZC4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMg YmVmb3JlIGNhbGxpbmcgZ2V0X2Zvcm1hdCgpCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxG b3JtYXQgc3dfcGl4X2ZtdDsKKysKKysgICAgLyoqCisrICAgICAqIENocm9tYXRpY2l0eSBjb29y ZGluYXRlcyBvZiB0aGUgc291cmNlIHByaW1hcmllcy4KKysgICAgICogLSBlbmNvZGluZzogU2V0 IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMKKysgICAgICov CisrICAgIGVudW0gQVZDb2xvclByaW1hcmllcyBjb2xvcl9wcmltYXJpZXM7CisrCisrICAgIC8q KgorKyAgICAgKiBDb2xvciBUcmFuc2ZlciBDaGFyYWN0ZXJpc3RpYy4KKysgICAgICogLSBlbmNv ZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMK KysgICAgICovCisrICAgIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgY29sb3Jf dHJjOworKworKyAgICAvKioKKysgICAgICogWVVWIGNvbG9yc3BhY2UgdHlwZS4KKysgICAgICog LSBlbmNvZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2 Y29kZWMKKysgICAgICovCisrICAgIGVudW0gQVZDb2xvclNwYWNlIGNvbG9yc3BhY2U7CisrCisr ICAgIC8qKgorKyAgICAgKiBNUEVHIHZzIEpQRUcgWVVWIHJhbmdlLgorKyAgICAgKiAtIGVuY29k aW5nOiBTZXQgYnkgdXNlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBvdXRwdXQgY29sb3IgcmFu Z2UgdmFsdWUsCisrICAgICAqICAgSWYgbm90IHNwZWNpZmllZCwgbGliYXZjb2RlYyBzZXRzIHRo ZSBjb2xvciByYW5nZSBkZXBlbmRpbmcgb24gdGhlCisrICAgICAqICAgb3V0cHV0IGZvcm1hdC4K KysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMsIGNhbiBiZSBzZXQgYnkgdGhl IHVzZXIgdG8gcHJvcGFnYXRlIHRoZQorKyAgICAgKiAgIGNvbG9yIHJhbmdlIHRvIGNvbXBvbmVu dHMgcmVhZGluZyBmcm9tIHRoZSBkZWNvZGVyIGNvbnRleHQuCisrICAgICAqLworKyAgICBlbnVt IEFWQ29sb3JSYW5nZSBjb2xvcl9yYW5nZTsKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgZGVm aW5lcyB0aGUgbG9jYXRpb24gb2YgY2hyb21hIHNhbXBsZXMuCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjCisrICAg ICAqLworKyAgICBlbnVtIEFWQ2hyb21hTG9jYXRpb24gY2hyb21hX3NhbXBsZV9sb2NhdGlvbjsK KysKKysgICAgLyoqIEZpZWxkIG9yZGVyCisrICAgICAqIC0gZW5jb2Rpbmc6IHNldCBieSBsaWJh dmNvZGVjCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8KKysgICAg ZW51bSBBVkZpZWxkT3JkZXIgZmllbGRfb3JkZXI7CisrCisrICAgIC8qKgorKyAgICAgKiBudW1i ZXIgb2YgcmVmZXJlbmNlIGZyYW1lcworKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4K KysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxhdmMuCisrICAgICAqLworKyAgICBpbnQgcmVm czsKKysKKysgICAgLyoqCisrICAgICAqIFNpemUgb2YgdGhlIGZyYW1lIHJlb3JkZXJpbmcgYnVm ZmVyIGluIHRoZSBkZWNvZGVyLgorKyAgICAgKiBGb3IgTVBFRy0yIGl0IGlzIDEgSVBCIG9yIDAg bG93IGRlbGF5IElQLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYy4KKysg ICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICBpbnQg aGFzX2JfZnJhbWVzOworKworKyAgICAvKioKKysgICAgICogc2xpY2UgZmxhZ3MKKysgICAgICog LSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAg ICAgKi8KKysgICAgaW50IHNsaWNlX2ZsYWdzOworKyNkZWZpbmUgU0xJQ0VfRkxBR19DT0RFRF9P UkRFUiAgICAweDAwMDEgLy8vPCBkcmF3X2hvcml6X2JhbmQoKSBpcyBjYWxsZWQgaW4gY29kZWQg b3JkZXIgaW5zdGVhZCBvZiBkaXNwbGF5CisrI2RlZmluZSBTTElDRV9GTEFHX0FMTE9XX0ZJRUxE ICAgIDB4MDAwMiAvLy88IGFsbG93IGRyYXdfaG9yaXpfYmFuZCgpIHdpdGggZmllbGQgc2xpY2Vz IChNUEVHLTIgZmllbGQgcGljcykKKysjZGVmaW5lIFNMSUNFX0ZMQUdfQUxMT1dfUExBTkUgICAg MHgwMDA0IC8vLzwgYWxsb3cgZHJhd19ob3Jpel9iYW5kKCkgd2l0aCAxIGNvbXBvbmVudCBhdCBh IHRpbWUgKFNWUTEpCisrCisrICAgIC8qKgorKyAgICAgKiBJZiBub24gTlVMTCwgJ2RyYXdfaG9y aXpfYmFuZCcgaXMgY2FsbGVkIGJ5IHRoZSBsaWJhdmNvZGVjCisrICAgICAqIGRlY29kZXIgdG8g ZHJhdyBhIGhvcml6b250YWwgYmFuZC4gSXQgaW1wcm92ZXMgY2FjaGUgdXNhZ2UuIE5vdAorKyAg ICAgKiBhbGwgY29kZWNzIGNhbiBkbyB0aGF0LiBZb3UgbXVzdCBjaGVjayB0aGUgY29kZWMgY2Fw YWJpbGl0aWVzCisrICAgICAqIGJlZm9yZWhhbmQuCisrICAgICAqIFdoZW4gbXVsdGl0aHJlYWRp bmcgaXMgdXNlZCwgaXQgbWF5IGJlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMKKysgICAg ICogYXQgdGhlIHNhbWUgdGltZTsgdGhyZWFkcyBtaWdodCBkcmF3IGRpZmZlcmVudCBwYXJ0cyBv ZiB0aGUgc2FtZSBBVkZyYW1lLAorKyAgICAgKiBvciBtdWx0aXBsZSBBVkZyYW1lcywgYW5kIHRo ZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHNsaWNlcyB3aWxsIGJlIGRyYXduCisrICAgICAqIGlu IG9yZGVyLgorKyAgICAgKiBUaGUgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGJ5IGhhcmR3YXJlIGFj Y2VsZXJhdGlvbiBBUElzLgorKyAgICAgKiBJdCBpcyBjYWxsZWQgYXQgbGVhc3Qgb25jZSBkdXJp bmcgZnJhbWUgZGVjb2RpbmcgdG8gcGFzcworKyAgICAgKiB0aGUgZGF0YSBuZWVkZWQgZm9yIGhh cmR3YXJlIHJlbmRlci4KKysgICAgICogSW4gdGhhdCBtb2RlIGluc3RlYWQgb2YgcGl4ZWwgZGF0 YSwgQVZGcmFtZSBwb2ludHMgdG8KKysgICAgICogYSBzdHJ1Y3R1cmUgc3BlY2lmaWMgdG8gdGhl IGFjY2VsZXJhdGlvbiBBUEkuIFRoZSBhcHBsaWNhdGlvbgorKyAgICAgKiByZWFkcyB0aGUgc3Ry dWN0dXJlIGFuZCBjYW4gY2hhbmdlIHNvbWUgZmllbGRzIHRvIGluZGljYXRlIHByb2dyZXNzCisr ICAgICAqIG9yIG1hcmsgc3RhdGUuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAg KiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogQHBhcmFtIGhlaWdodCB0aGUgaGVp Z2h0IG9mIHRoZSBzbGljZQorKyAgICAgKiBAcGFyYW0geSB0aGUgeSBwb3NpdGlvbiBvZiB0aGUg c2xpY2UKKysgICAgICogQHBhcmFtIHR5cGUgMS0+dG9wIGZpZWxkLCAyLT5ib3R0b20gZmllbGQs IDMtPmZyYW1lCisrICAgICAqIEBwYXJhbSBvZmZzZXQgb2Zmc2V0IGludG8gdGhlIEFWRnJhbWUu ZGF0YSBmcm9tIHdoaWNoIHRoZSBzbGljZSBzaG91bGQgYmUgcmVhZAorKyAgICAgKi8KKysgICAg dm9pZCAoKmRyYXdfaG9yaXpfYmFuZCkoc3RydWN0IEFWQ29kZWNDb250ZXh0ICpzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBvZmZzZXRbQVZf TlVNX0RBVEFfUE9JTlRFUlNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwg aW50IHR5cGUsIGludCBoZWlnaHQpOworKworKyAgICAvKioKKysgICAgICogQ2FsbGJhY2sgdG8g bmVnb3RpYXRlIHRoZSBwaXhlbCBmb3JtYXQuIERlY29kaW5nIG9ubHksIG1heSBiZSBzZXQgYnkg dGhlCisrICAgICAqIGNhbGxlciBiZWZvcmUgYXZjb2RlY19vcGVuMigpLgorKyAgICAgKgorKyAg ICAgKiBDYWxsZWQgYnkgc29tZSBkZWNvZGVycyB0byBzZWxlY3QgdGhlIHBpeGVsIGZvcm1hdCB0 aGF0IHdpbGwgYmUgdXNlZCBmb3IKKysgICAgICogdGhlIG91dHB1dCBmcmFtZXMuIFRoaXMgaXMg bWFpbmx5IHVzZWQgdG8gc2V0IHVwIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwKKysgICAgICogdGhl biB0aGUgcHJvdmlkZWQgZm9ybWF0IGxpc3QgY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmcgaHdh Y2NlbCBwaXhlbAorKyAgICAgKiBmb3JtYXRzIGFsb25nc2lkZSB0aGUgInNvZnR3YXJlIiBvbmUu IFRoZSBzb2Z0d2FyZSBwaXhlbCBmb3JtYXQgbWF5IGFsc28KKysgICAgICogYmUgcmV0cmlldmVk IGZyb20gXHJlZiBzd19waXhfZm10LgorKyAgICAgKgorKyAgICAgKiBUaGlzIGNhbGxiYWNrIHdp bGwgYmUgY2FsbGVkIHdoZW4gdGhlIGNvZGVkIGZyYW1lIHByb3BlcnRpZXMgKHN1Y2ggYXMKKysg ICAgICogcmVzb2x1dGlvbiwgcGl4ZWwgZm9ybWF0LCBldGMuKSBjaGFuZ2UgYW5kIG1vcmUgdGhh biBvbmUgb3V0cHV0IGZvcm1hdCBpcworKyAgICAgKiBzdXBwb3J0ZWQgZm9yIHRob3NlIG5ldyBw cm9wZXJ0aWVzLiBJZiBhIGhhcmR3YXJlIHBpeGVsIGZvcm1hdCBpcyBjaG9zZW4KKysgICAgICog YW5kIGluaXRpYWxpemF0aW9uIGZvciBpdCBmYWlscywgdGhlIGNhbGxiYWNrIG1heSBiZSBjYWxs ZWQgYWdhaW4KKysgICAgICogaW1tZWRpYXRlbHkuCisrICAgICAqCisrICAgICAqIFRoaXMgY2Fs bGJhY2sgbWF5IGJlIGNhbGxlZCBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIGlmIHRoZSBkZWNvZGVy IGlzCisrICAgICAqIG11bHRpLXRocmVhZGVkLCBidXQgbm90IGZyb20gbW9yZSB0aGFuIG9uZSB0 aHJlYWQgc2ltdWx0YW5lb3VzbHkuCisrICAgICAqCisrICAgICAqIEBwYXJhbSBmbXQgbGlzdCBv ZiBmb3JtYXRzIHdoaWNoIG1heSBiZSB1c2VkIGluIHRoZSBjdXJyZW50CisrICAgICAqICAgICAg ICAgICAgY29uZmlndXJhdGlvbiwgdGVybWluYXRlZCBieSBBVl9QSVhfRk1UX05PTkUuCisrICAg ICAqIEB3YXJuaW5nIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgY2FsbGJhY2sgcmV0dXJu cyBhIHZhbHVlIG90aGVyCisrICAgICAqICAgICAgICAgIHRoYW4gb25lIG9mIHRoZSBmb3JtYXRz IGluIGZtdCBvciBBVl9QSVhfRk1UX05PTkUuCisrICAgICAqIEByZXR1cm4gdGhlIGNob3NlbiBm b3JtYXQgb3IgQVZfUElYX0ZNVF9OT05FCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxGb3Jt YXQgKCpnZXRfZm9ybWF0KShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKnMsIGNvbnN0IGVudW0gQVZQ aXhlbEZvcm1hdCAqIGZtdCk7CisrCisrICAgIC8qKgorKyAgICAgKiBtYXhpbXVtIG51bWJlciBv ZiBCLWZyYW1lcyBiZXR3ZWVuIG5vbi1CLWZyYW1lcworKyAgICAgKiBOb3RlOiBUaGUgb3V0cHV0 IHdpbGwgYmUgZGVsYXllZCBieSBtYXhfYl9mcmFtZXMrMSByZWxhdGl2ZSB0byB0aGUgaW5wdXQu CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1 bnVzZWQKKysgICAgICovCisrICAgIGludCBtYXhfYl9mcmFtZXM7CisrCisrICAgIC8qKgorKyAg ICAgKiBxc2NhbGUgZmFjdG9yIGJldHdlZW4gSVAgYW5kIEItZnJhbWVzCisrICAgICAqIElmID4g MCB0aGVuIHRoZSBsYXN0IFAtZnJhbWUgcXVhbnRpemVyIHdpbGwgYmUgdXNlZCAocT0gbGFzdHBf cSpmYWN0b3Irb2Zmc2V0KS4KKysgICAgICogSWYgPCAwIHRoZW4gbm9ybWFsIHJhdGVjb250cm9s IHdpbGwgYmUgZG9uZSAocT0gLW5vcm1hbF9xKmZhY3RvcitvZmZzZXQpLgorKyAgICAgKiAtIGVu Y29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAq LworKyAgICBmbG9hdCBiX3F1YW50X2ZhY3RvcjsKKysKKysgICAgLyoqCisrICAgICAqIHFzY2Fs ZSBvZmZzZXQgYmV0d2VlbiBJUCBhbmQgQi1mcmFtZXMKKysgICAgICogLSBlbmNvZGluZzogU2V0 IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgZmxv YXQgYl9xdWFudF9vZmZzZXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBxc2NhbGUgZmFjdG9yIGJl dHdlZW4gUC0gYW5kIEktZnJhbWVzCisrICAgICAqIElmID4gMCB0aGVuIHRoZSBsYXN0IFAtZnJh bWUgcXVhbnRpemVyIHdpbGwgYmUgdXNlZCAocSA9IGxhc3RwX3EgKiBmYWN0b3IgKyBvZmZzZXQp LgorKyAgICAgKiBJZiA8IDAgdGhlbiBub3JtYWwgcmF0ZWNvbnRyb2wgd2lsbCBiZSBkb25lIChx PSAtbm9ybWFsX3EqZmFjdG9yK29mZnNldCkuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGZsb2F0IGlf cXVhbnRfZmFjdG9yOworKworKyAgICAvKioKKysgICAgICogcXNjYWxlIG9mZnNldCBiZXR3ZWVu IFAgYW5kIEktZnJhbWVzCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGZsb2F0IGlfcXVhbnRfb2Zmc2V0 OworKworKyAgICAvKioKKysgICAgICogbHVtaW5hbmNlIG1hc2tpbmcgKDAtPiBkaXNhYmxlZCkK KysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVu dXNlZAorKyAgICAgKi8KKysgICAgZmxvYXQgbHVtaV9tYXNraW5nOworKworKyAgICAvKioKKysg ICAgICogdGVtcG9yYXJ5IGNvbXBsZXhpdHkgbWFza2luZyAoMC0+IGRpc2FibGVkKQorKyAgICAg KiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisr ICAgICAqLworKyAgICBmbG9hdCB0ZW1wb3JhbF9jcGx4X21hc2tpbmc7CisrCisrICAgIC8qKgor KyAgICAgKiBzcGF0aWFsIGNvbXBsZXhpdHkgbWFza2luZyAoMC0+IGRpc2FibGVkKQorKyAgICAg KiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisr ICAgICAqLworKyAgICBmbG9hdCBzcGF0aWFsX2NwbHhfbWFza2luZzsKKysKKysgICAgLyoqCisr ICAgICAqIHAgYmxvY2sgbWFza2luZyAoMC0+IGRpc2FibGVkKQorKyAgICAgKiAtIGVuY29kaW5n OiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAg ICBmbG9hdCBwX21hc2tpbmc7CisrCisrICAgIC8qKgorKyAgICAgKiBkYXJrbmVzcyBtYXNraW5n ICgwLT4gZGlzYWJsZWQpCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGZsb2F0IGRhcmtfbWFza2luZzsK KysKKysgICAgLyoqCisrICAgICAqIG5vaXNlIHZzLiBzc2Ugd2VpZ2h0IGZvciB0aGUgbnNzZSBj b21wYXJpc29uIGZ1bmN0aW9uCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAg ICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgICBpbnQgbnNzZV93ZWlnaHQ7 CisrCisrICAgIC8qKgorKyAgICAgKiBtb3Rpb24gZXN0aW1hdGlvbiBjb21wYXJpc29uIGZ1bmN0 aW9uCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5n OiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBtZV9jbXA7CisrICAgIC8qKgorKyAgICAgKiBz dWJwaXhlbCBtb3Rpb24gZXN0aW1hdGlvbiBjb21wYXJpc29uIGZ1bmN0aW9uCisrICAgICAqIC0g ZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAg ICovCisrICAgIGludCBtZV9zdWJfY21wOworKyAgICAvKioKKysgICAgICogbWFjcm9ibG9jayBj b21wYXJpc29uIGZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIHlldCkKKysgICAgICogLSBlbmNvZGlu ZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysg ICAgaW50IG1iX2NtcDsKKysgICAgLyoqCisrICAgICAqIGludGVybGFjZWQgRENUIGNvbXBhcmlz b24gZnVuY3Rpb24KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0g ZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IGlsZGN0X2NtcDsKKysjZGVmaW5l IEZGX0NNUF9TQUQgICAgICAgICAgMAorKyNkZWZpbmUgRkZfQ01QX1NTRSAgICAgICAgICAxCisr I2RlZmluZSBGRl9DTVBfU0FURCAgICAgICAgIDIKKysjZGVmaW5lIEZGX0NNUF9EQ1QgICAgICAg ICAgMworKyNkZWZpbmUgRkZfQ01QX1BTTlIgICAgICAgICA0CisrI2RlZmluZSBGRl9DTVBfQklU ICAgICAgICAgIDUKKysjZGVmaW5lIEZGX0NNUF9SRCAgICAgICAgICAgNgorKyNkZWZpbmUgRkZf Q01QX1pFUk8gICAgICAgICA3CisrI2RlZmluZSBGRl9DTVBfVlNBRCAgICAgICAgIDgKKysjZGVm aW5lIEZGX0NNUF9WU1NFICAgICAgICAgOQorKyNkZWZpbmUgRkZfQ01QX05TU0UgICAgICAgICAx MAorKyNkZWZpbmUgRkZfQ01QX1c1MyAgICAgICAgICAxMQorKyNkZWZpbmUgRkZfQ01QX1c5NyAg ICAgICAgICAxMgorKyNkZWZpbmUgRkZfQ01QX0RDVE1BWCAgICAgICAxMworKyNkZWZpbmUgRkZf Q01QX0RDVDI2NCAgICAgICAxNAorKyNkZWZpbmUgRkZfQ01QX01FRElBTl9TQUQgICAxNQorKyNk ZWZpbmUgRkZfQ01QX0NIUk9NQSAgICAgICAyNTYKKysKKysgICAgLyoqCisrICAgICAqIE1FIGRp YW1vbmQgc2l6ZSAmIHNoYXBlCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAg ICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBkaWFfc2l6ZTsKKysK KysgICAgLyoqCisrICAgICAqIGFtb3VudCBvZiBwcmV2aW91cyBNViBwcmVkaWN0b3JzICgyYSsx IHggMmErMSBzcXVhcmUpCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBsYXN0X3ByZWRpY3Rvcl9j b3VudDsKKysKKysgICAgLyoqCisrICAgICAqIG1vdGlvbiBlc3RpbWF0aW9uIHByZXBhc3MgY29t cGFyaXNvbiBmdW5jdGlvbgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAg ICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbWVfcHJlX2NtcDsKKysK KysgICAgLyoqCisrICAgICAqIE1FIHByZXBhc3MgZGlhbW9uZCBzaXplICYgc2hhcGUKKysgICAg ICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAor KyAgICAgKi8KKysgICAgaW50IHByZV9kaWFfc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIHN1 YnBlbCBNRSBxdWFsaXR5CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBtZV9zdWJwZWxfcXVhbGl0 eTsKKysKKysgICAgLyoqCisrICAgICAqIG1heGltdW0gbW90aW9uIGVzdGltYXRpb24gc2VhcmNo IHJhbmdlIGluIHN1YnBlbCB1bml0cworKyAgICAgKiBJZiAwIHRoZW4gbm8gbGltaXQuCisrICAg ICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5n OiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBtZV9yYW5nZTsKKysKKysgICAgLyoqCisrICAg ICAqIG1hY3JvYmxvY2sgZGVjaXNpb24gbW9kZQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbWJf ZGVjaXNpb247CisrI2RlZmluZSBGRl9NQl9ERUNJU0lPTl9TSU1QTEUgMCAgICAgICAgLy8vPCB1 c2VzIG1iX2NtcAorKyNkZWZpbmUgRkZfTUJfREVDSVNJT05fQklUUyAgIDEgICAgICAgIC8vLzwg Y2hvb3NlcyB0aGUgb25lIHdoaWNoIG5lZWRzIHRoZSBmZXdlc3QgYml0cworKyNkZWZpbmUgRkZf TUJfREVDSVNJT05fUkQgICAgIDIgICAgICAgIC8vLzwgcmF0ZSBkaXN0b3J0aW9uCisrCisrICAg IC8qKgorKyAgICAgKiBjdXN0b20gaW50cmEgcXVhbnRpemF0aW9uIG1hdHJpeAorKyAgICAgKiBN dXN0IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxsb2MoKSBmYW1pbHkgb2YgZnVuY3Rpb25z LCBhbmQgd2lsbCBiZSBmcmVlZCBpbgorKyAgICAgKiBhdmNvZGVjX2ZyZWVfY29udGV4dCgpLgor KyAgICAgKiAtIGVuY29kaW5nOiBTZXQvYWxsb2NhdGVkIGJ5IHVzZXIsIGZyZWVkIGJ5IGxpYmF2 Y29kZWMuIENhbiBiZSBOVUxMLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQvYWxsb2NhdGVkL2Zy ZWVkIGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICB1aW50MTZfdCAqaW50cmFfbWF0cml4 OworKworKyAgICAvKioKKysgICAgICogY3VzdG9tIGludGVyIHF1YW50aXphdGlvbiBtYXRyaXgK KysgICAgICogTXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCB0aGUgYXZfbWFsbG9jKCkgZmFtaWx5IG9m IGZ1bmN0aW9ucywgYW5kIHdpbGwgYmUgZnJlZWQgaW4KKysgICAgICogYXZjb2RlY19mcmVlX2Nv bnRleHQoKS4KKysgICAgICogLSBlbmNvZGluZzogU2V0L2FsbG9jYXRlZCBieSB1c2VyLCBmcmVl ZCBieSBsaWJhdmNvZGVjLiBDYW4gYmUgTlVMTC4KKysgICAgICogLSBkZWNvZGluZzogU2V0L2Fs bG9jYXRlZC9mcmVlZCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgdWludDE2X3QgKmlu dGVyX21hdHJpeDsKKysKKysgICAgLyoqCisrICAgICAqIGN1c3RvbSBpbnRyYSBxdWFudGl6YXRp b24gbWF0cml4CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLCBjYW4gYmUgTlVMTC4K KysgICAgICogLSBkZWNvZGluZzogdW51c2VkLgorKyAgICAgKi8KKysgICAgdWludDE2X3QgKmNo cm9tYV9pbnRyYV9tYXRyaXg7CisrCisrI2lmIEZGX0FQSV9JTlRSQV9EQ19QUkVDSVNJT04KKysg ICAgLyoqCisrICAgICAqIHByZWNpc2lvbiBvZiB0aGUgaW50cmEgREMgY29lZmZpY2llbnQgLSA4 CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBT ZXQgYnkgbGliYXZjb2RlYworKyAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIE1QRUctMiBlbmNv ZGVyJ3MgcHJpdmF0ZSBvcHRpb24gImludHJhX2RjX3ByZWNpc2lvbiIgaW5zdGVhZC4KKysgICAg ICovCisrICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCisrICAgIGludCBpbnRyYV9kY19wcmVjaXNp b247CisrI2VuZGlmCisrCisrICAgIC8qKgorKyAgICAgKiBtaW5pbXVtIE1CIExhZ3JhbmdlIG11 bHRpcGxpZXIKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVj b2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1iX2xtaW47CisrCisrICAgIC8qKgor KyAgICAgKiBtYXhpbXVtIE1CIExhZ3JhbmdlIG11bHRpcGxpZXIKKysgICAgICogLSBlbmNvZGlu ZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysg ICAgaW50IG1iX2xtYXg7CisrCisrICAgIC8qKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgYmlk aXJfcmVmaW5lOworKworKyAgICAvKioKKysgICAgICogbWluaW11bSBHT1Agc2l6ZQorKyAgICAg KiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisr ICAgICAqLworKyAgICBpbnQga2V5aW50X21pbjsKKysKKysgICAgLyoqCisrICAgICAqIHRoZSBu dW1iZXIgb2YgcGljdHVyZXMgaW4gYSBncm91cCBvZiBwaWN0dXJlcywgb3IgMCBmb3IgaW50cmFf b25seQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGlu ZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgZ29wX3NpemU7CisrCisrICAgIC8qKgorKyAg ICAgKiBOb3RlOiBWYWx1ZSBkZXBlbmRzIHVwb24gdGhlIGNvbXBhcmUgZnVuY3Rpb24gdXNlZCBm b3IgZnVsbHBlbCBNRS4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAq IC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG12MF90aHJlc2hvbGQ7Cisr CisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2Ygc2xpY2VzLgorKyAgICAgKiBJbmRpY2F0ZXMg bnVtYmVyIG9mIHBpY3R1cmUgc3ViZGl2aXNpb25zLiBVc2VkIGZvciBwYXJhbGxlbGl6ZWQKKysg ICAgICogZGVjb2RpbmcuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAq IC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IHNsaWNlczsKKysKKysgICAg LyogYXVkaW8gb25seSAqLworKyAgICBpbnQgc2FtcGxlX3JhdGU7IC8vLzwgc2FtcGxlcyBwZXIg c2Vjb25kCisrCisrICAgIC8qKgorKyAgICAgKiBhdWRpbyBzYW1wbGUgZm9ybWF0CisrICAgICAq IC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGli YXZjb2RlYy4KKysgICAgICovCisrICAgIGVudW0gQVZTYW1wbGVGb3JtYXQgc2FtcGxlX2ZtdDsg IC8vLzwgc2FtcGxlIGZvcm1hdAorKworKyAgICAvKioKKysgICAgICogQXVkaW8gY2hhbm5lbCBs YXlvdXQuCisrICAgICAqIC0gZW5jb2Rpbmc6IG11c3QgYmUgc2V0IGJ5IHRoZSBjYWxsZXIsIHRv IG9uZSBvZiBBVkNvZGVjLmNoX2xheW91dHMuCisrICAgICAqIC0gZGVjb2Rpbmc6IG1heSBiZSBz ZXQgYnkgdGhlIGNhbGxlciBpZiBrbm93biBlLmcuIGZyb20gdGhlIGNvbnRhaW5lci4KKysgICAg ICogICAgICAgICAgICAgVGhlIGRlY29kZXIgY2FuIHRoZW4gb3ZlcnJpZGUgZHVyaW5nIGRlY29k aW5nIGFzIG5lZWRlZC4KKysgICAgICovCisrICAgIEFWQ2hhbm5lbExheW91dCBjaF9sYXlvdXQ7 CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbCBpbiBh biBhdWRpbyBmcmFtZS4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogbWF5IGJlIHNldCBi eSB0aGUgdXNlciBiZWZvcmUgY2FsbGluZyBhdmNvZGVjX29wZW4yKCksIGFuZAorKyAgICAgKiAg IGxpYmF2Y29kZWMgbWF5IHRoZW4gb3ZlcndyaXRlIGl0IGlmIG5lZWRlZC4gRWFjaCBzdWJtaXR0 ZWQgZnJhbWUKKysgICAgICogICBleGNlcHQgdGhlIGxhc3QgbXVzdCBjb250YWluIGV4YWN0bHkg ZnJhbWVfc2l6ZSBzYW1wbGVzIHBlciBjaGFubmVsLgorKyAgICAgKiAgIE1heSBiZSAwIHdoZW4g dGhlIGNvZGVjIGhhcyBBVl9DT0RFQ19DQVBfVkFSSUFCTEVfRlJBTUVfU0laRSBzZXQsIGV4Y2Vw dAorKyAgICAgKiAgIHdoZW4gQVZfQ09ERUNfRkxBRzJfRklYRURfRlJBTUVfU0laRSBpcyByZXF1 ZXN0ZWQsIHRoZW4gdGhlCisrICAgICAqICAgZnJhbWUgc2l6ZSBpcyBub3QgcmVzdHJpY3RlZC4K KysgICAgICogLSBkZWNvZGluZzogbWF5IGJlIHNldCBieSBzb21lIGRlY29kZXJzIHRvIGluZGlj YXRlIGNvbnN0YW50IGZyYW1lIHNpemUKKysgICAgICovCisrICAgIGludCBmcmFtZV9zaXplOwor KworKyAgICAvKiBUaGUgZm9sbG93aW5nIGRhdGEgc2hvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4g Ki8KKysgICAgLyoqCisrICAgICAqIG51bWJlciBvZiBieXRlcyBwZXIgcGFja2V0IGlmIGNvbnN0 YW50IGFuZCBrbm93biBvciAwCisrICAgICAqIFVzZWQgYnkgc29tZSBXQVYgYmFzZWQgYXVkaW8g Y29kZWNzLgorKyAgICAgKi8KKysgICAgaW50IGJsb2NrX2FsaWduOworKworKyAgICAvKioKKysg ICAgICogQXVkaW8gY3V0b2ZmIGJhbmR3aWR0aCAoMCBtZWFucyAiYXV0b21hdGljIikKKysgICAg ICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAor KyAgICAgKi8KKysgICAgaW50IGN1dG9mZjsKKysKKysgICAgLyoqCisrICAgICAqIFR5cGUgb2Yg c2VydmljZSB0aGF0IHRoZSBhdWRpbyBzdHJlYW0gY29udmV5cy4KKysgICAgICogLSBlbmNvZGlu ZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgor KyAgICAgKi8KKysgICAgZW51bSBBVkF1ZGlvU2VydmljZVR5cGUgYXVkaW9fc2VydmljZV90eXBl OworKworKyAgICAvKioKKysgICAgICogZGVzaXJlZCBzYW1wbGUgZm9ybWF0CisrICAgICAqIC0g ZW5jb2Rpbmc6IE5vdCB1c2VkLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysg ICAgICogRGVjb2RlciB3aWxsIGRlY29kZSB0byB0aGlzIGZvcm1hdCBpZiBpdCBjYW4uCisrICAg ICAqLworKyAgICBlbnVtIEFWU2FtcGxlRm9ybWF0IHJlcXVlc3Rfc2FtcGxlX2ZtdDsKKysKKysg ICAgLyoqCisrICAgICAqIEF1ZGlvIG9ubHkuIFRoZSBudW1iZXIgb2YgInByaW1pbmciIHNhbXBs ZXMgKHBhZGRpbmcpIGluc2VydGVkIGJ5IHRoZQorKyAgICAgKiBlbmNvZGVyIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGF1ZGlvLiBJLmUuIHRoaXMgbnVtYmVyIG9mIGxlYWRpbmcKKysgICAgICog ZGVjb2RlZCBzYW1wbGVzIG11c3QgYmUgZGlzY2FyZGVkIGJ5IHRoZSBjYWxsZXIgdG8gZ2V0IHRo ZSBvcmlnaW5hbCBhdWRpbworKyAgICAgKiB3aXRob3V0IGxlYWRpbmcgcGFkZGluZy4KKysgICAg ICoKKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBi eSBsaWJhdmNvZGVjLiBUaGUgdGltZXN0YW1wcyBvbiB0aGUgb3V0cHV0IHBhY2tldHMgYXJlCisr ICAgICAqICAgICAgICAgICAgIGFkanVzdGVkIGJ5IHRoZSBlbmNvZGVyIHNvIHRoYXQgdGhleSBh bHdheXMgcmVmZXIgdG8gdGhlCisrICAgICAqICAgICAgICAgICAgIGZpcnN0IHNhbXBsZSBvZiB0 aGUgZGF0YSBhY3R1YWxseSBjb250YWluZWQgaW4gdGhlIHBhY2tldCwKKysgICAgICogICAgICAg ICAgICAgaW5jbHVkaW5nIGFueSBhZGRlZCBwYWRkaW5nLiAgRS5nLiBpZiB0aGUgdGltZWJhc2Ug aXMKKysgICAgICogICAgICAgICAgICAgMS9zYW1wbGVyYXRlIGFuZCB0aGUgdGltZXN0YW1wIG9m IHRoZSBmaXJzdCBpbnB1dCBzYW1wbGUgaXMKKysgICAgICogICAgICAgICAgICAgMCwgdGhlIHRp bWVzdGFtcCBvZiB0aGUgZmlyc3Qgb3V0cHV0IHBhY2tldCB3aWxsIGJlCisrICAgICAqICAgICAg ICAgICAgIC1pbml0aWFsX3BhZGRpbmcuCisrICAgICAqLworKyAgICBpbnQgaW5pdGlhbF9wYWRk aW5nOworKworKyAgICAvKioKKysgICAgICogQXVkaW8gb25seS4gVGhlIGFtb3VudCBvZiBwYWRk aW5nIChpbiBzYW1wbGVzKSBhcHBlbmRlZCBieSB0aGUgZW5jb2RlciB0bworKyAgICAgKiB0aGUg ZW5kIG9mIHRoZSBhdWRpby4gSS5lLiB0aGlzIG51bWJlciBvZiBkZWNvZGVkIHNhbXBsZXMgbXVz dCBiZQorKyAgICAgKiBkaXNjYXJkZWQgYnkgdGhlIGNhbGxlciBmcm9tIHRoZSBlbmQgb2YgdGhl IHN0cmVhbSB0byBnZXQgdGhlIG9yaWdpbmFsCisrICAgICAqIGF1ZGlvIHdpdGhvdXQgYW55IHRy YWlsaW5nIHBhZGRpbmcuCisrICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAg ICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCB0cmFpbGluZ19wYWRk aW5nOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIHNhbXBsZXMgdG8gc2tpcCBhZnRl ciBhIGRpc2NvbnRpbnVpdHkKKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqIC0g ZW5jb2Rpbmc6IHNldCBieSBsaWJhdmNvZGVjCisrICAgICAqLworKyAgICBpbnQgc2Vla19wcmVy b2xsOworKworKyAgICAvKioKKysgICAgICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYXQgdGhl IGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lIHRvIGdldCBkYXRhCisrICAgICAqIGJ1ZmZlcihzKSBm b3IgaXQuIFRoZXJlIG1heSBiZSBvbmUgY29udGlndW91cyBidWZmZXIgZm9yIGFsbCB0aGUgZGF0 YSBvcgorKyAgICAgKiB0aGVyZSBtYXkgYmUgYSBidWZmZXIgcGVyIGVhY2ggZGF0YSBwbGFuZSBv ciBhbnl0aGluZyBpbiBiZXR3ZWVuLiBXaGF0CisrICAgICAqIHRoaXMgbWVhbnMgaXMsIHlvdSBt YXkgc2V0IGhvd2V2ZXIgbWFueSBlbnRyaWVzIGluIGJ1ZltdIHlvdSBmZWVsIG5lY2Vzc2FyeS4K KysgICAgICogRWFjaCBidWZmZXIgbXVzdCBiZSByZWZlcmVuY2UtY291bnRlZCB1c2luZyB0aGUg QVZCdWZmZXIgQVBJIChzZWUgZGVzY3JpcHRpb24KKysgICAgICogb2YgYnVmW10gYmVsb3cpLgor KyAgICAgKgorKyAgICAgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHNldCBpbiB0aGUg ZnJhbWUgYmVmb3JlIHRoaXMgY2FsbGJhY2sgaXMKKysgICAgICogY2FsbGVkOgorKyAgICAgKiAt IGZvcm1hdAorKyAgICAgKiAtIHdpZHRoLCBoZWlnaHQgKHZpZGVvIG9ubHkpCisrICAgICAqIC0g c2FtcGxlX3JhdGUsIGNoYW5uZWxfbGF5b3V0LCBuYl9zYW1wbGVzIChhdWRpbyBvbmx5KQorKyAg ICAgKiBUaGVpciB2YWx1ZXMgbWF5IGRpZmZlciBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVl cyBpbgorKyAgICAgKiBBVkNvZGVjQ29udGV4dC4gVGhpcyBjYWxsYmFjayBtdXN0IHVzZSB0aGUg ZnJhbWUgdmFsdWVzLCBub3QgdGhlIGNvZGVjCisrICAgICAqIGNvbnRleHQgdmFsdWVzLCB0byBj YWxjdWxhdGUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLgorKyAgICAgKgorKyAgICAgKiBUaGlz IGNhbGxiYWNrIG11c3QgZmlsbCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgZnJhbWU6Cisr ICAgICAqIC0gZGF0YVtdCisrICAgICAqIC0gbGluZXNpemVbXQorKyAgICAgKiAtIGV4dGVuZGVk X2RhdGE6CisrICAgICAqICAgKiBpZiB0aGUgZGF0YSBpcyBwbGFuYXIgYXVkaW8gd2l0aCBtb3Jl IHRoYW4gOCBjaGFubmVscywgdGhlbiB0aGlzCisrICAgICAqICAgICBjYWxsYmFjayBtdXN0IGFs bG9jYXRlIGFuZCBmaWxsIGV4dGVuZGVkX2RhdGEgdG8gY29udGFpbiBhbGwgcG9pbnRlcnMKKysg ICAgICogICAgIHRvIGFsbCBkYXRhIHBsYW5lcy4gZGF0YVtdIG11c3QgaG9sZCBhcyBtYW55IHBv aW50ZXJzIGFzIGl0IGNhbi4KKysgICAgICogICAgIGV4dGVuZGVkX2RhdGEgbXVzdCBiZSBhbGxv Y2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSBhbmQgd2lsbCBiZSBmcmVlZCBpbgorKyAgICAgKiAgICAg YXZfZnJhbWVfdW5yZWYoKS4KKysgICAgICogICAqIG90aGVyd2lzZSBleHRlbmRlZF9kYXRhIG11 c3QgcG9pbnQgdG8gZGF0YQorKyAgICAgKiAtIGJ1ZltdIG11c3QgY29udGFpbiBvbmUgb3IgbW9y ZSBwb2ludGVycyB0byBBVkJ1ZmZlclJlZiBzdHJ1Y3R1cmVzLiBFYWNoIG9mCisrICAgICAqICAg dGhlIGZyYW1lJ3MgZGF0YSBhbmQgZXh0ZW5kZWRfZGF0YSBwb2ludGVycyBtdXN0IGJlIGNvbnRh aW5lZCBpbiB0aGVzZS4gVGhhdAorKyAgICAgKiAgIGlzLCBvbmUgQVZCdWZmZXJSZWYgZm9yIGVh Y2ggYWxsb2NhdGVkIGNodW5rIG9mIG1lbW9yeSwgbm90IG5lY2Vzc2FyaWx5IG9uZQorKyAgICAg KiAgIEFWQnVmZmVyUmVmIHBlciBkYXRhW10gZW50cnkuIFNlZTogYXZfYnVmZmVyX2NyZWF0ZSgp LCBhdl9idWZmZXJfYWxsb2MoKSwKKysgICAgICogICBhbmQgYXZfYnVmZmVyX3JlZigpLgorKyAg ICAgKiAtIGV4dGVuZGVkX2J1ZiBhbmQgbmJfZXh0ZW5kZWRfYnVmIG11c3QgYmUgYWxsb2NhdGVk IHdpdGggYXZfbWFsbG9jKCkgYnkKKysgICAgICogICB0aGlzIGNhbGxiYWNrIGFuZCBmaWxsZWQg d2l0aCB0aGUgZXh0cmEgYnVmZmVycyBpZiB0aGVyZSBhcmUgbW9yZQorKyAgICAgKiAgIGJ1ZmZl cnMgdGhhbiBidWZbXSBjYW4gaG9sZC4gZXh0ZW5kZWRfYnVmIHdpbGwgYmUgZnJlZWQgaW4KKysg ICAgICogICBhdl9mcmFtZV91bnJlZigpLgorKyAgICAgKiAgIERlY29kZXJzIHdpbGwgZ2VuZXJh bGx5IGluaXRpYWxpemUgdGhlIHdob2xlIGJ1ZmZlciBiZWZvcmUgaXQgaXMgb3V0cHV0CisrICAg ICAqICAgYnV0IGl0IGNhbiBpbiByYXJlIGVycm9yIGNvbmRpdGlvbnMgaGFwcGVuIHRoYXQgdW5p bml0aWFsaXplZCBkYXRhIGlzIHBhc3NlZAorKyAgICAgKiAgIHRocm91Z2guIFxpbXBvcnRhbnQg VGhlIGJ1ZmZlcnMgcmV0dXJuZWQgYnkgZ2V0X2J1ZmZlciogc2hvdWxkIHRodXMgbm90IGNvbnRh aW4gc2Vuc2l0aXZlCisrICAgICAqICAgZGF0YS4KKysgICAgICoKKysgICAgICogSWYgQVZfQ09E RUNfQ0FQX0RSMSBpcyBub3Qgc2V0IHRoZW4gZ2V0X2J1ZmZlcjIoKSBtdXN0IGNhbGwKKysgICAg ICogYXZjb2RlY19kZWZhdWx0X2dldF9idWZmZXIyKCkgaW5zdGVhZCBvZiBwcm92aWRpbmcgYnVm ZmVycyBhbGxvY2F0ZWQgYnkKKysgICAgICogc29tZSBvdGhlciBtZWFucy4KKysgICAgICoKKysg ICAgICogRWFjaCBkYXRhIHBsYW5lIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgbWF4aW11bSByZXF1 aXJlZCBieSB0aGUgdGFyZ2V0CisrICAgICAqIENQVS4KKysgICAgICoKKysgICAgICogQHNlZSBh dmNvZGVjX2RlZmF1bHRfZ2V0X2J1ZmZlcjIoKQorKyAgICAgKgorKyAgICAgKiBWaWRlbzoKKysg ICAgICoKKysgICAgICogSWYgQVZfR0VUX0JVRkZFUl9GTEFHX1JFRiBpcyBzZXQgaW4gZmxhZ3Mg dGhlbiB0aGUgZnJhbWUgbWF5IGJlIHJldXNlZAorKyAgICAgKiAocmVhZCBhbmQvb3Igd3JpdHRl biB0byBpZiBpdCBpcyB3cml0YWJsZSkgbGF0ZXIgYnkgbGliYXZjb2RlYy4KKysgICAgICoKKysg ICAgICogYXZjb2RlY19hbGlnbl9kaW1lbnNpb25zMigpIHNob3VsZCBiZSB1c2VkIHRvIGZpbmQg dGhlIHJlcXVpcmVkIHdpZHRoIGFuZAorKyAgICAgKiBoZWlnaHQsIGFzIHRoZXkgbm9ybWFsbHkg bmVlZCB0byBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDE2LgorKyAgICAg KgorKyAgICAgKiBTb21lIGRlY29kZXJzIGRvIG5vdCBzdXBwb3J0IGxpbmVzaXplcyBjaGFuZ2lu ZyBiZXR3ZWVuIGZyYW1lcy4KKysgICAgICoKKysgICAgICogSWYgZnJhbWUgbXVsdGl0aHJlYWRp bmcgaXMgdXNlZCwgdGhpcyBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIGZyb20gYQorKyAgICAgKiBk aWZmZXJlbnQgdGhyZWFkLCBidXQgbm90IGZyb20gbW9yZSB0aGFuIG9uZSBhdCBvbmNlLiBEb2Vz IG5vdCBuZWVkIHRvIGJlCisrICAgICAqIHJlZW50cmFudC4KKysgICAgICoKKysgICAgICogQHNl ZSBhdmNvZGVjX2FsaWduX2RpbWVuc2lvbnMyKCkKKysgICAgICoKKysgICAgICogQXVkaW86Cisr ICAgICAqCisrICAgICAqIERlY29kZXJzIHJlcXVlc3QgYSBidWZmZXIgb2YgYSBwYXJ0aWN1bGFy IHNpemUgYnkgc2V0dGluZworKyAgICAgKiBBVkZyYW1lLm5iX3NhbXBsZXMgcHJpb3IgdG8gY2Fs bGluZyBnZXRfYnVmZmVyMigpLiBUaGUgZGVjb2RlciBtYXksCisrICAgICAqIGhvd2V2ZXIsIHV0 aWxpemUgb25seSBwYXJ0IG9mIHRoZSBidWZmZXIgYnkgc2V0dGluZyBBVkZyYW1lLm5iX3NhbXBs ZXMKKysgICAgICogdG8gYSBzbWFsbGVyIHZhbHVlIGluIHRoZSBvdXRwdXQgZnJhbWUuCisrICAg ICAqCisrICAgICAqIEFzIGEgY29udmVuaWVuY2UsIGF2X3NhbXBsZXNfZ2V0X2J1ZmZlcl9zaXpl KCkgYW5kCisrICAgICAqIGF2X3NhbXBsZXNfZmlsbF9hcnJheXMoKSBpbiBsaWJhdnV0aWwgbWF5 IGJlIHVzZWQgYnkgY3VzdG9tIGdldF9idWZmZXIyKCkKKysgICAgICogZnVuY3Rpb25zIHRvIGZp bmQgdGhlIHJlcXVpcmVkIGRhdGEgc2l6ZSBhbmQgdG8gZmlsbCBkYXRhIHBvaW50ZXJzIGFuZAor KyAgICAgKiBsaW5lc2l6ZS4gSW4gQVZGcmFtZS5saW5lc2l6ZSwgb25seSBsaW5lc2l6ZVswXSBt YXkgYmUgc2V0IGZvciBhdWRpbworKyAgICAgKiBzaW5jZSBhbGwgcGxhbmVzIG11c3QgYmUgdGhl IHNhbWUgc2l6ZS4KKysgICAgICoKKysgICAgICogQHNlZSBhdl9zYW1wbGVzX2dldF9idWZmZXJf c2l6ZSgpLCBhdl9zYW1wbGVzX2ZpbGxfYXJyYXlzKCkKKysgICAgICoKKysgICAgICogLSBlbmNv ZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLCB1c2Vy IGNhbiBvdmVycmlkZS4KKysgICAgICovCisrICAgIGludCAoKmdldF9idWZmZXIyKShzdHJ1Y3Qg QVZDb2RlY0NvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lLCBpbnQgZmxhZ3MpOworKworKyAgICAv KiAtIGVuY29kaW5nIHBhcmFtZXRlcnMgKi8KKysgICAgLyoqCisrICAgICAqIG51bWJlciBvZiBi aXRzIHRoZSBiaXRzdHJlYW0gaXMgYWxsb3dlZCB0byBkaXZlcmdlIGZyb20gdGhlIHJlZmVyZW5j ZS4KKysgICAgICogICAgICAgICAgIHRoZSByZWZlcmVuY2UgY2FuIGJlIENCUiAoZm9yIENCUiBw YXNzMSkgb3IgVkJSIChmb3IgcGFzczIpCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2Vy OyB1bnVzZWQgZm9yIGNvbnN0YW50IHF1YW50aXplciBlbmNvZGluZy4KKysgICAgICogLSBkZWNv ZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgYml0X3JhdGVfdG9sZXJhbmNlOworKwor KyAgICAvKioKKysgICAgICogR2xvYmFsIHF1YWxpdHkgZm9yIGNvZGVjcyB3aGljaCBjYW5ub3Qg Y2hhbmdlIGl0IHBlciBmcmFtZS4KKysgICAgICogVGhpcyBzaG91bGQgYmUgcHJvcG9ydGlvbmFs IHRvIE1QRUctMS8yLzQgcXNjYWxlLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4K KysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgZ2xvYmFsX3F1 YWxpdHk7CisrCisrICAgIC8qKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysg ICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgY29tcHJlc3Npb25f bGV2ZWw7CisrI2RlZmluZSBGRl9DT01QUkVTU0lPTl9ERUZBVUxUIC0xCisrCisrICAgIGZsb2F0 IHFjb21wcmVzczsgIC8vLzwgYW1vdW50IG9mIHFzY2FsZSBjaGFuZ2UgYmV0d2VlbiBlYXN5ICYg aGFyZCBzY2VuZXMgKDAuMC0xLjApCisrICAgIGZsb2F0IHFibHVyOyAgICAgIC8vLzwgYW1vdW50 IG9mIHFzY2FsZSBzbW9vdGhpbmcgb3ZlciB0aW1lICgwLjAtMS4wKQorKworKyAgICAvKioKKysg ICAgICogbWluaW11bSBxdWFudGl6ZXIKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IHFtaW47Cisr CisrICAgIC8qKgorKyAgICAgKiBtYXhpbXVtIHF1YW50aXplcgorKyAgICAgKiAtIGVuY29kaW5n OiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAg ICBpbnQgcW1heDsKKysKKysgICAgLyoqCisrICAgICAqIG1heGltdW0gcXVhbnRpemVyIGRpZmZl cmVuY2UgYmV0d2VlbiBmcmFtZXMKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisr ICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1heF9xZGlmZjsK KysKKysgICAgLyoqCisrICAgICAqIGRlY29kZXIgYml0c3RyZWFtIGJ1ZmZlciBzaXplCisrICAg ICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBNYXkgYmUg c2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICBpbnQgcmNfYnVmZmVyX3NpemU7Cisr CisrICAgIC8qKgorKyAgICAgKiByYXRlY29udHJvbCBvdmVycmlkZSwgc2VlIFJjT3ZlcnJpZGUK KysgICAgICogLSBlbmNvZGluZzogQWxsb2NhdGVkL3NldC9mcmVlZCBieSB1c2VyLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCByY19vdmVycmlkZV9jb3Vu dDsKKysgICAgUmNPdmVycmlkZSAqcmNfb3ZlcnJpZGU7CisrCisrICAgIC8qKgorKyAgICAgKiBt YXhpbXVtIGJpdHJhdGUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAq IC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgbGliYXZjb2Rl Yy4KKysgICAgICovCisrICAgIGludDY0X3QgcmNfbWF4X3JhdGU7CisrCisrICAgIC8qKgorKyAg ICAgKiBtaW5pbXVtIGJpdHJhdGUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisr ICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50NjRfdCByY19taW5f cmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIFJhdGVjb250cm9sIGF0dGVtcHQgdG8gdXNlLCBh dCBtYXhpbXVtLCA8dmFsdWU+IG9mIHdoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBhbiB1bmRlcmZs b3cuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5n OiB1bnVzZWQuCisrICAgICAqLworKyAgICBmbG9hdCByY19tYXhfYXZhaWxhYmxlX3Zidl91c2U7 CisrCisrICAgIC8qKgorKyAgICAgKiBSYXRlY29udHJvbCBhdHRlbXB0IHRvIHVzZSwgYXQgbGVh c3QsIDx2YWx1ZT4gdGltZXMgdGhlIGFtb3VudCBuZWVkZWQgdG8gcHJldmVudCBhIHZidiBvdmVy Zmxvdy4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rp bmc6IHVudXNlZC4KKysgICAgICovCisrICAgIGZsb2F0IHJjX21pbl92YnZfb3ZlcmZsb3dfdXNl OworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGJpdHMgd2hpY2ggc2hvdWxkIGJlIGxv YWRlZCBpbnRvIHRoZSByYyBidWZmZXIgYmVmb3JlIGRlY29kaW5nIHN0YXJ0cy4KKysgICAgICog LSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAg ICAgKi8KKysgICAgaW50IHJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeTsKKysKKysgICAgLyoq CisrICAgICAqIHRyZWxsaXMgUkQgcXVhbnRpemF0aW9uCisrICAgICAqIC0gZW5jb2Rpbmc6IFNl dCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGlu dCB0cmVsbGlzOworKworKyAgICAvKioKKysgICAgICogcGFzczEgZW5jb2Rpbmcgc3RhdGlzdGlj cyBvdXRwdXQgYnVmZmVyCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgor KyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGNoYXIgKnN0YXRzX291 dDsKKysKKysgICAgLyoqCisrICAgICAqIHBhc3MyIGVuY29kaW5nIHN0YXRpc3RpY3MgaW5wdXQg YnVmZmVyCisrICAgICAqIENvbmNhdGVuYXRlZCBzdHVmZiBmcm9tIHN0YXRzX291dCBvZiBwYXNz MSBzaG91bGQgYmUgcGxhY2VkIGhlcmUuCisrICAgICAqIC0gZW5jb2Rpbmc6IEFsbG9jYXRlZC9z ZXQvZnJlZWQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLwor KyAgICBjaGFyICpzdGF0c19pbjsKKysKKysgICAgLyoqCisrICAgICAqIFdvcmsgYXJvdW5kIGJ1 Z3MgaW4gZW5jb2RlcnMgd2hpY2ggc29tZXRpbWVzIGNhbm5vdCBiZSBkZXRlY3RlZCBhdXRvbWF0 aWNhbGx5LgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29k aW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgaW50IHdvcmthcm91bmRfYnVnczsKKysj ZGVmaW5lIEZGX0JVR19BVVRPREVURUNUICAgICAgIDEgIC8vLzwgYXV0b2RldGVjdGlvbgorKyNk ZWZpbmUgRkZfQlVHX1hWSURfSUxBQ0UgICAgICAgNAorKyNkZWZpbmUgRkZfQlVHX1VNUDQgICAg ICAgICAgICAgOAorKyNkZWZpbmUgRkZfQlVHX05PX1BBRERJTkcgICAgICAgMTYKKysjZGVmaW5l IEZGX0JVR19BTVYgICAgICAgICAgICAgIDMyCisrI2RlZmluZSBGRl9CVUdfUVBFTF9DSFJPTUEg ICAgICA2NAorKyNkZWZpbmUgRkZfQlVHX1NURF9RUEVMICAgICAgICAgMTI4CisrI2RlZmluZSBG Rl9CVUdfUVBFTF9DSFJPTUEyICAgICAyNTYKKysjZGVmaW5lIEZGX0JVR19ESVJFQ1RfQkxPQ0tT SVpFIDUxMgorKyNkZWZpbmUgRkZfQlVHX0VER0UgICAgICAgICAgICAgMTAyNAorKyNkZWZpbmUg RkZfQlVHX0hQRUxfQ0hST01BICAgICAgMjA0OAorKyNkZWZpbmUgRkZfQlVHX0RDX0NMSVAgICAg ICAgICAgNDA5NgorKyNkZWZpbmUgRkZfQlVHX01TICAgICAgICAgICAgICAgODE5MiAvLy88IFdv cmsgYXJvdW5kIHZhcmlvdXMgYnVncyBpbiBNaWNyb3NvZnQncyBicm9rZW4gZGVjb2RlcnMuCisr I2RlZmluZSBGRl9CVUdfVFJVTkNBVEVEICAgICAgIDE2Mzg0CisrI2RlZmluZSBGRl9CVUdfSUVE R0UgICAgICAgICAgIDMyNzY4CisrCisrICAgIC8qKgorKyAgICAgKiBzdHJpY3RseSBmb2xsb3cg dGhlIHN0YW5kYXJkIChNUEVHLTQsIC4uLikuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogU2V0dGluZyB0 aGlzIHRvIFNUUklDVCBvciBoaWdoZXIgbWVhbnMgdGhlIGVuY29kZXIgYW5kIGRlY29kZXIgd2ls bAorKyAgICAgKiBnZW5lcmFsbHkgZG8gc3R1cGlkIHRoaW5ncywgd2hlcmVhcyBzZXR0aW5nIGl0 IHRvIHVub2ZmaWNpYWwgb3IgbG93ZXIKKysgICAgICogd2lsbCBtZWFuIHRoZSBlbmNvZGVyIG1p Z2h0IHByb2R1Y2Ugb3V0cHV0IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbGwKKysgICAgICog c3BlYy1jb21wbGlhbnQgZGVjb2RlcnMuIERlY29kZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0 d2VlbiBub3JtYWwsCisrICAgICAqIHVub2ZmaWNpYWwgYW5kIGV4cGVyaW1lbnRhbCAodGhhdCBp cywgdGhleSBhbHdheXMgdHJ5IHRvIGRlY29kZSB0aGluZ3MKKysgICAgICogd2hlbiB0aGV5IGNh bikgdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgYXNrZWQgdG8gYmVoYXZlIHN0dXBpZGx5Cisr ICAgICAqICg9c3RyaWN0bHkgY29uZm9ybSB0byB0aGUgc3BlY3MpCisrICAgICAqIFRoaXMgbWF5 IG9ubHkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgRkZfQ09NUExJQU5DRV8qIHZhbHVlcyBpbiBkZWZz LmguCisrICAgICAqLworKyAgICBpbnQgc3RyaWN0X3N0ZF9jb21wbGlhbmNlOworKworKyAgICAv KioKKysgICAgICogZXJyb3IgY29uY2VhbG1lbnQgZmxhZ3MKKysgICAgICogLSBlbmNvZGluZzog dW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8KKysgICAg aW50IGVycm9yX2NvbmNlYWxtZW50OworKyNkZWZpbmUgRkZfRUNfR1VFU1NfTVZTICAgMQorKyNk ZWZpbmUgRkZfRUNfREVCTE9DSyAgICAgMgorKyNkZWZpbmUgRkZfRUNfRkFWT1JfSU5URVIgMjU2 CisrCisrICAgIC8qKgorKyAgICAgKiBkZWJ1ZworKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBp bnQgZGVidWc7CisrI2RlZmluZSBGRl9ERUJVR19QSUNUX0lORk8gICAxCisrI2RlZmluZSBGRl9E RUJVR19SQyAgICAgICAgICAyCisrI2RlZmluZSBGRl9ERUJVR19CSVRTVFJFQU0gICA0CisrI2Rl ZmluZSBGRl9ERUJVR19NQl9UWVBFICAgICA4CisrI2RlZmluZSBGRl9ERUJVR19RUCAgICAgICAg ICAxNgorKyNkZWZpbmUgRkZfREVCVUdfRENUX0NPRUZGICAgMHgwMDAwMDA0MAorKyNkZWZpbmUg RkZfREVCVUdfU0tJUCAgICAgICAgMHgwMDAwMDA4MAorKyNkZWZpbmUgRkZfREVCVUdfU1RBUlRD T0RFICAgMHgwMDAwMDEwMAorKyNkZWZpbmUgRkZfREVCVUdfRVIgICAgICAgICAgMHgwMDAwMDQw MAorKyNkZWZpbmUgRkZfREVCVUdfTU1DTyAgICAgICAgMHgwMDAwMDgwMAorKyNkZWZpbmUgRkZf REVCVUdfQlVHUyAgICAgICAgMHgwMDAwMTAwMAorKyNkZWZpbmUgRkZfREVCVUdfQlVGRkVSUyAg ICAgMHgwMDAwODAwMAorKyNkZWZpbmUgRkZfREVCVUdfVEhSRUFEUyAgICAgMHgwMDAxMDAwMAor KyNkZWZpbmUgRkZfREVCVUdfR1JFRU5fTUQgICAgMHgwMDgwMDAwMAorKyNkZWZpbmUgRkZfREVC VUdfTk9NQyAgICAgICAgMHgwMTAwMDAwMAorKworKyAgICAvKioKKysgICAgICogRXJyb3IgcmVj b2duaXRpb247IG1heSBtaXNkZXRlY3Qgc29tZSBtb3JlIG9yIGxlc3MgdmFsaWQgcGFydHMgYXMg ZXJyb3JzLgorKyAgICAgKiBUaGlzIGlzIGEgYml0ZmllbGQgb2YgdGhlIEFWX0VGXyogdmFsdWVz IGRlZmluZWQgaW4gZGVmcy5oLgorKyAgICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBp bnQgZXJyX3JlY29nbml0aW9uOworKworKyAgICAvKioKKysgICAgICogSGFyZHdhcmUgYWNjZWxl cmF0b3IgaW4gdXNlCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZC4KKysgICAgICogLSBkZWNv ZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMKKysgICAgICovCisrICAgIGNvbnN0IHN0cnVjdCBBVkhX QWNjZWwgKmh3YWNjZWw7CisrCisrICAgIC8qKgorKyAgICAgKiBMZWdhY3kgaGFyZHdhcmUgYWNj ZWxlcmF0b3IgY29udGV4dC4KKysgICAgICoKKysgICAgICogRm9yIHNvbWUgaGFyZHdhcmUgYWNj ZWxlcmF0aW9uIG1ldGhvZHMsIHRoZSBjYWxsZXIgbWF5IHVzZSB0aGlzIGZpZWxkIHRvCisrICAg ICAqIHNpZ25hbCBod2FjY2VsLXNwZWNpZmljIGRhdGEgdG8gdGhlIGNvZGVjLiBUaGUgc3RydWN0 IHBvaW50ZWQgdG8gYnkgdGhpcworKyAgICAgKiBwb2ludGVyIGlzIGh3YWNjZWwtZGVwZW5kZW50 IGFuZCBkZWZpbmVkIGluIHRoZSByZXNwZWN0aXZlIGhlYWRlci4gUGxlYXNlCisrICAgICAqIHJl ZmVyIHRvIHRoZSBGRm1wZWcgSFcgYWNjZWxlcmF0b3IgZG9jdW1lbnRhdGlvbiB0byBrbm93IGhv dyB0byBmaWxsCisrICAgICAqIHRoaXMuCisrICAgICAqCisrICAgICAqIEluIG1vc3QgY2FzZXMg dGhpcyBmaWVsZCBpcyBvcHRpb25hbCAtIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gbWF5IGFs c28KKysgICAgICogYmUgcHJvdmlkZWQgdG8gbGliYXZjb2RlYyB0aHJvdWdoIEByZWYgaHdfZnJh bWVzX2N0eCBvciBAcmVmCisrICAgICAqIGh3X2RldmljZV9jdHggKHNlZSBhdmNvZGVjX2dldF9o d19jb25maWcoKSkuIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgaXQKKysgICAgICogbWF5IGJlIHRo ZSBvbmx5IG1ldGhvZCBvZiBzaWduYWxsaW5nIHNvbWUgKG9wdGlvbmFsKSBpbmZvcm1hdGlvbi4K KysgICAgICoKKysgICAgICogVGhlIHN0cnVjdCBhbmQgaXRzIGNvbnRlbnRzIGFyZSBvd25lZCBi eSB0aGUgY2FsbGVyLgorKyAgICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBNYXkgYmUgc2V0IGJ5 IHRoZSBjYWxsZXIgYmVmb3JlIGF2Y29kZWNfb3BlbjIoKS4gTXVzdCByZW1haW4KKysgICAgICog ICAgICAgICAgICAgdmFsaWQgdW50aWwgYXZjb2RlY19mcmVlX2NvbnRleHQoKS4KKysgICAgICog LSBkZWNvZGluZzogTWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGluIHRoZSBnZXRfZm9ybWF0KCkg Y2FsbGJhY2suCisrICAgICAqICAgICAgICAgICAgIE11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRo ZSBuZXh0IGdldF9mb3JtYXQoKSBjYWxsLAorKyAgICAgKiAgICAgICAgICAgICBvciBhdmNvZGVj X2ZyZWVfY29udGV4dCgpICh3aGljaGV2ZXIgY29tZXMgZmlyc3QpLgorKyAgICAgKi8KKysgICAg dm9pZCAqaHdhY2NlbF9jb250ZXh0OworKworKyAgICAvKioKKysgICAgICogQSByZWZlcmVuY2Ug dG8gdGhlIEFWSFdGcmFtZXNDb250ZXh0IGRlc2NyaWJpbmcgdGhlIGlucHV0IChmb3IgZW5jb2Rp bmcpCisrICAgICAqIG9yIG91dHB1dCAoZGVjb2RpbmcpIGZyYW1lcy4gVGhlIHJlZmVyZW5jZSBp cyBzZXQgYnkgdGhlIGNhbGxlciBhbmQKKysgICAgICogYWZ0ZXJ3YXJkcyBvd25lZCAoYW5kIGZy ZWVkKSBieSBsaWJhdmNvZGVjIC0gaXQgc2hvdWxkIG5ldmVyIGJlIHJlYWQgYnkKKysgICAgICog dGhlIGNhbGxlciBhZnRlciBiZWluZyBzZXQuCisrICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6 IFRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyIGZyb20gdGhlIGdldF9mb3Jt YXQoKQorKyAgICAgKiAgICAgICAgICAgICBjYWxsYmFjay4gVGhlIHByZXZpb3VzIHJlZmVyZW5j ZSAoaWYgYW55KSB3aWxsIGFsd2F5cyBiZQorKyAgICAgKiAgICAgICAgICAgICB1bnJlZmZlZCBi eSBsaWJhdmNvZGVjIGJlZm9yZSB0aGUgZ2V0X2Zvcm1hdCgpIGNhbGwuCisrICAgICAqCisrICAg ICAqICAgICAgICAgICAgIElmIHRoZSBkZWZhdWx0IGdldF9idWZmZXIyKCkgaXMgdXNlZCB3aXRo IGEgaHdhY2NlbCBwaXhlbAorKyAgICAgKiAgICAgICAgICAgICBmb3JtYXQsIHRoZW4gdGhpcyBB VkhXRnJhbWVzQ29udGV4dCB3aWxsIGJlIHVzZWQgZm9yCisrICAgICAqICAgICAgICAgICAgIGFs bG9jYXRpbmcgdGhlIGZyYW1lIGJ1ZmZlcnMuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6 IEZvciBoYXJkd2FyZSBlbmNvZGVycyBjb25maWd1cmVkIHRvIHVzZSBhIGh3YWNjZWwgcGl4ZWwK KysgICAgICogICAgICAgICAgICAgZm9ybWF0LCB0aGlzIGZpZWxkIHNob3VsZCBiZSBzZXQgYnkg dGhlIGNhbGxlciB0byBhIHJlZmVyZW5jZQorKyAgICAgKiAgICAgICAgICAgICB0byB0aGUgQVZI V0ZyYW1lc0NvbnRleHQgZGVzY3JpYmluZyBpbnB1dCBmcmFtZXMuCisrICAgICAqICAgICAgICAg ICAgIEFWSFdGcmFtZXNDb250ZXh0LmZvcm1hdCBtdXN0IGJlIGVxdWFsIHRvCisrICAgICAqICAg ICAgICAgICAgIEFWQ29kZWNDb250ZXh0LnBpeF9mbXQuCisrICAgICAqCisrICAgICAqICAgICAg ICAgICAgIFRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCBiZWZvcmUgYXZjb2RlY19vcGVuMigpIGlz IGNhbGxlZC4KKysgICAgICovCisrICAgIEFWQnVmZmVyUmVmICpod19mcmFtZXNfY3R4OworKwor KyAgICAvKioKKysgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEFWSFdEZXZpY2VDb250ZXh0IGRl c2NyaWJpbmcgdGhlIGRldmljZSB3aGljaCB3aWxsCisrICAgICAqIGJlIHVzZWQgYnkgYSBoYXJk d2FyZSBlbmNvZGVyL2RlY29kZXIuICBUaGUgcmVmZXJlbmNlIGlzIHNldCBieSB0aGUKKysgICAg ICogY2FsbGVyIGFuZCBhZnRlcndhcmRzIG93bmVkIChhbmQgZnJlZWQpIGJ5IGxpYmF2Y29kZWMu CisrICAgICAqCisrICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgaWYgZWl0aGVyIHRoZSBjb2Rl YyBkZXZpY2UgZG9lcyBub3QgcmVxdWlyZQorKyAgICAgKiBoYXJkd2FyZSBmcmFtZXMgb3IgYW55 IHRoYXQgYXJlIHVzZWQgYXJlIHRvIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5IGJ5CisrICAgICAq IGxpYmF2Y29kZWMuICBJZiB0aGUgdXNlciB3aXNoZXMgdG8gc3VwcGx5IGFueSBvZiB0aGUgZnJh bWVzIHVzZWQgYXMKKysgICAgICogZW5jb2RlciBpbnB1dCBvciBkZWNvZGVyIG91dHB1dCB0aGVu IGh3X2ZyYW1lc19jdHggc2hvdWxkIGJlIHVzZWQKKysgICAgICogaW5zdGVhZC4gIFdoZW4gaHdf ZnJhbWVzX2N0eCBpcyBzZXQgaW4gZ2V0X2Zvcm1hdCgpIGZvciBhIGRlY29kZXIsIHRoaXMKKysg ICAgICogZmllbGQgd2lsbCBiZSBpZ25vcmVkIHdoaWxlIGRlY29kaW5nIHRoZSBhc3NvY2lhdGVk IHN0cmVhbSBzZWdtZW50LCBidXQKKysgICAgICogbWF5IGFnYWluIGJlIHVzZWQgb24gYSBmb2xs b3dpbmcgb25lIGFmdGVyIGFub3RoZXIgZ2V0X2Zvcm1hdCgpIGNhbGwuCisrICAgICAqCisrICAg ICAqIEZvciBib3RoIGVuY29kZXJzIGFuZCBkZWNvZGVycyB0aGlzIGZpZWxkIHNob3VsZCBiZSBz ZXQgYmVmb3JlCisrICAgICAqIGF2Y29kZWNfb3BlbjIoKSBpcyBjYWxsZWQgYW5kIG11c3Qgbm90 IGJlIHdyaXR0ZW4gdG8gdGhlcmVhZnRlci4KKysgICAgICoKKysgICAgICogTm90ZSB0aGF0IHNv bWUgZGVjb2RlcnMgbWF5IHJlcXVpcmUgdGhpcyBmaWVsZCB0byBiZSBzZXQgaW5pdGlhbGx5IGlu CisrICAgICAqIG9yZGVyIHRvIHN1cHBvcnQgaHdfZnJhbWVzX2N0eCBhdCBhbGwgLSBpbiB0aGF0 IGNhc2UsIGFsbCBmcmFtZXMKKysgICAgICogY29udGV4dHMgdXNlZCBtdXN0IGJlIGNyZWF0ZWQg b24gdGhlIHNhbWUgZGV2aWNlLgorKyAgICAgKi8KKysgICAgQVZCdWZmZXJSZWYgKmh3X2Rldmlj ZV9jdHg7CisrCisrICAgIC8qKgorKyAgICAgKiBCaXQgc2V0IG9mIEFWX0hXQUNDRUxfRkxBR18q IGZsYWdzLCB3aGljaCBhZmZlY3QgaGFyZHdhcmUgYWNjZWxlcmF0ZWQKKysgICAgICogZGVjb2Rp bmcgKGlmIGFjdGl2ZSkuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRl Y29kaW5nOiBTZXQgYnkgdXNlciAoZWl0aGVyIGJlZm9yZSBhdmNvZGVjX29wZW4yKCksIG9yIGlu IHRoZQorKyAgICAgKiAgICAgICAgICAgICBBVkNvZGVjQ29udGV4dC5nZXRfZm9ybWF0IGNhbGxi YWNrKQorKyAgICAgKi8KKysgICAgaW50IGh3YWNjZWxfZmxhZ3M7CisrCisrICAgIC8qKgorKyAg ICAgKiBWaWRlbyBkZWNvZGluZyBvbmx5LiAgU2V0cyB0aGUgbnVtYmVyIG9mIGV4dHJhIGhhcmR3 YXJlIGZyYW1lcyB3aGljaAorKyAgICAgKiB0aGUgZGVjb2RlciB3aWxsIGFsbG9jYXRlIGZvciB1 c2UgYnkgdGhlIGNhbGxlci4gIFRoaXMgbXVzdCBiZSBzZXQKKysgICAgICogYmVmb3JlIGF2Y29k ZWNfb3BlbjIoKSBpcyBjYWxsZWQuCisrICAgICAqCisrICAgICAqIFNvbWUgaGFyZHdhcmUgZGVj b2RlcnMgcmVxdWlyZSBhbGwgZnJhbWVzIHRoYXQgdGhleSB3aWxsIHVzZSBmb3IKKysgICAgICog b3V0cHV0IHRvIGJlIGRlZmluZWQgaW4gYWR2YW5jZSBiZWZvcmUgZGVjb2Rpbmcgc3RhcnRzLiAg Rm9yIHN1Y2gKKysgICAgICogZGVjb2RlcnMsIHRoZSBoYXJkd2FyZSBmcmFtZSBwb29sIG11c3Qg dGhlcmVmb3JlIGJlIG9mIGEgZml4ZWQgc2l6ZS4KKysgICAgICogVGhlIGV4dHJhIGZyYW1lcyBz ZXQgaGVyZSBhcmUgb24gdG9wIG9mIGFueSBudW1iZXIgdGhhdCB0aGUgZGVjb2RlcgorKyAgICAg KiBuZWVkcyBpbnRlcm5hbGx5IGluIG9yZGVyIHRvIG9wZXJhdGUgbm9ybWFsbHkgKGZvciBleGFt cGxlLCBmcmFtZXMKKysgICAgICogdXNlZCBhcyByZWZlcmVuY2UgcGljdHVyZXMpLgorKyAgICAg Ki8KKysgICAgaW50IGV4dHJhX2h3X2ZyYW1lczsKKysKKysgICAgLyoqCisrICAgICAqIGVycm9y CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjIGlmIGZsYWdzICYgQVZfQ09E RUNfRkxBR19QU05SLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAg IHVpbnQ2NF90IGVycm9yW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKysKKysgICAgLyoqCisrICAg ICAqIERDVCBhbGdvcml0aG0sIHNlZSBGRl9EQ1RfKiBiZWxvdworKyAgICAgKiAtIGVuY29kaW5n OiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAg ICBpbnQgZGN0X2FsZ287CisrI2RlZmluZSBGRl9EQ1RfQVVUTyAgICAwCisrI2RlZmluZSBGRl9E Q1RfRkFTVElOVCAxCisrI2RlZmluZSBGRl9EQ1RfSU5UICAgICAyCisrI2RlZmluZSBGRl9EQ1Rf TU1YICAgICAzCisrI2RlZmluZSBGRl9EQ1RfQUxUSVZFQyA1CisrI2RlZmluZSBGRl9EQ1RfRkFB TiAgICA2CisrI2RlZmluZSBGRl9EQ1RfTkVPTiAgICA3CisrCisrICAgIC8qKgorKyAgICAgKiBJ RENUIGFsZ29yaXRobSwgc2VlIEZGX0lEQ1RfKiBiZWxvdy4KKysgICAgICogLSBlbmNvZGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8K KysgICAgaW50IGlkY3RfYWxnbzsKKysjZGVmaW5lIEZGX0lEQ1RfQVVUTyAgICAgICAgICAwCisr I2RlZmluZSBGRl9JRENUX0lOVCAgICAgICAgICAgMQorKyNkZWZpbmUgRkZfSURDVF9TSU1QTEUg ICAgICAgIDIKKysjZGVmaW5lIEZGX0lEQ1RfU0lNUExFTU1YICAgICAzCisrI2RlZmluZSBGRl9J RENUX0FSTSAgICAgICAgICAgNworKyNkZWZpbmUgRkZfSURDVF9BTFRJVkVDICAgICAgIDgKKysj ZGVmaW5lIEZGX0lEQ1RfU0lNUExFQVJNICAgICAxMAorKyNkZWZpbmUgRkZfSURDVF9YVklEICAg ICAgICAgIDE0CisrI2RlZmluZSBGRl9JRENUX1NJTVBMRUFSTVY1VEUgMTYKKysjZGVmaW5lIEZG X0lEQ1RfU0lNUExFQVJNVjYgICAxNworKyNkZWZpbmUgRkZfSURDVF9GQUFOICAgICAgICAgIDIw CisrI2RlZmluZSBGRl9JRENUX1NJTVBMRU5FT04gICAgMjIKKysjZGVmaW5lIEZGX0lEQ1RfU0lN UExFQVVUTyAgICAxMjgKKysKKysgICAgLyoqCisrICAgICAqIGJpdHMgcGVyIHNhbXBsZS9waXhl bCBmcm9tIHRoZSBkZW11eGVyIChuZWVkZWQgZm9yIGh1ZmZ5dXYpLgorKyAgICAgKiAtIGVuY29k aW5nOiBTZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqLworKyAgICAgaW50IGJpdHNfcGVyX2NvZGVkX3NhbXBsZTsKKysKKysgICAgLyoq CisrICAgICAqIEJpdHMgcGVyIHNhbXBsZS9waXhlbCBvZiBpbnRlcm5hbCBsaWJhdmNvZGVjIHBp eGVsL3NhbXBsZSBmb3JtYXQuCisrICAgICAqIC0gZW5jb2Rpbmc6IHNldCBieSB1c2VyLgorKyAg ICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisrICAgIGludCBi aXRzX3Blcl9yYXdfc2FtcGxlOworKworKyAgICAvKioKKysgICAgICogdGhyZWFkIGNvdW50Cisr ICAgICAqIGlzIHVzZWQgdG8gZGVjaWRlIGhvdyBtYW55IGluZGVwZW5kZW50IHRhc2tzIHNob3Vs ZCBiZSBwYXNzZWQgdG8gZXhlY3V0ZSgpCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2Vy LgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAgIGludCB0 aHJlYWRfY291bnQ7CisrCisrICAgIC8qKgorKyAgICAgKiBXaGljaCBtdWx0aXRocmVhZGluZyBt ZXRob2RzIHRvIHVzZS4KKysgICAgICogVXNlIG9mIEZGX1RIUkVBRF9GUkFNRSB3aWxsIGluY3Jl YXNlIGRlY29kaW5nIGRlbGF5IGJ5IG9uZSBmcmFtZSBwZXIgdGhyZWFkLAorKyAgICAgKiBzbyBj bGllbnRzIHdoaWNoIGNhbm5vdCBwcm92aWRlIGZ1dHVyZSBmcmFtZXMgc2hvdWxkIG5vdCB1c2Ug aXQuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLCBvdGhlcndpc2Ug dGhlIGRlZmF1bHQgaXMgdXNlZC4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIsIG90 aGVyd2lzZSB0aGUgZGVmYXVsdCBpcyB1c2VkLgorKyAgICAgKi8KKysgICAgaW50IHRocmVhZF90 eXBlOworKyNkZWZpbmUgRkZfVEhSRUFEX0ZSQU1FICAgMSAvLy88IERlY29kZSBtb3JlIHRoYW4g b25lIGZyYW1lIGF0IG9uY2UKKysjZGVmaW5lIEZGX1RIUkVBRF9TTElDRSAgIDIgLy8vPCBEZWNv ZGUgbW9yZSB0aGFuIG9uZSBwYXJ0IG9mIGEgc2luZ2xlIGZyYW1lIGF0IG9uY2UKKysKKysgICAg LyoqCisrICAgICAqIFdoaWNoIG11bHRpdGhyZWFkaW5nIG1ldGhvZHMgYXJlIGluIHVzZSBieSB0 aGUgY29kZWMuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAg KiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisrICAgIGludCBhY3Rp dmVfdGhyZWFkX3R5cGU7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgY29kZWMgbWF5IGNhbGwg dGhpcyB0byBleGVjdXRlIHNldmVyYWwgaW5kZXBlbmRlbnQgdGhpbmdzLgorKyAgICAgKiBJdCB3 aWxsIHJldHVybiBvbmx5IGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MuCisrICAgICAqIFRoZSB1 c2VyIG1heSByZXBsYWNlIHRoaXMgd2l0aCBzb21lIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50YXRp b24sCisrICAgICAqIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgZXhlY3V0ZSB0aGUg cGFydHMgc2VyaWFsbHkuCisrICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRoaW5n cyB0byBleGVjdXRlCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLCB1c2Vy IGNhbiBvdmVycmlkZS4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMsIHVz ZXIgY2FuIG92ZXJyaWRlLgorKyAgICAgKi8KKysgICAgaW50ICgqZXhlY3V0ZSkoc3RydWN0IEFW Q29kZWNDb250ZXh0ICpjLCBpbnQgKCpmdW5jKShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmMyLCB2 b2lkICphcmcpLCB2b2lkICphcmcyLCBpbnQgKnJldCwgaW50IGNvdW50LCBpbnQgc2l6ZSk7Cisr CisrICAgIC8qKgorKyAgICAgKiBUaGUgY29kZWMgbWF5IGNhbGwgdGhpcyB0byBleGVjdXRlIHNl dmVyYWwgaW5kZXBlbmRlbnQgdGhpbmdzLgorKyAgICAgKiBJdCB3aWxsIHJldHVybiBvbmx5IGFm dGVyIGZpbmlzaGluZyBhbGwgdGFza3MuCisrICAgICAqIFRoZSB1c2VyIG1heSByZXBsYWNlIHRo aXMgd2l0aCBzb21lIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50YXRpb24sCisrICAgICAqIHRoZSBk ZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgZXhlY3V0ZSB0aGUgcGFydHMgc2VyaWFsbHkuCisr ICAgICAqIEBwYXJhbSBjIGNvbnRleHQgcGFzc2VkIGFsc28gdG8gZnVuYworKyAgICAgKiBAcGFy YW0gY291bnQgdGhlIG51bWJlciBvZiB0aGluZ3MgdG8gZXhlY3V0ZQorKyAgICAgKiBAcGFyYW0g YXJnMiBhcmd1bWVudCBwYXNzZWQgdW5jaGFuZ2VkIHRvIGZ1bmMKKysgICAgICogQHBhcmFtIHJl dCByZXR1cm4gdmFsdWVzIG9mIGV4ZWN1dGVkIGZ1bmN0aW9ucywgbXVzdCBoYXZlIHNwYWNlIGZv ciAiY291bnQiIHZhbHVlcy4gTWF5IGJlIE5VTEwuCisrICAgICAqIEBwYXJhbSBmdW5jIGZ1bmN0 aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgY291bnQgdGltZXMsIHdpdGggam9ibnIgZnJvbSAwIHRv IGNvdW50LTEuCisrICAgICAqICAgICAgICAgICAgIHRocmVhZG5yIHdpbGwgYmUgaW4gdGhlIHJh bmdlIDAgdG8gYy0+dGhyZWFkX2NvdW50LTEgPCBNQVhfVEhSRUFEUyBhbmQgc28gdGhhdCBubwor KyAgICAgKiAgICAgICAgICAgICB0d28gaW5zdGFuY2VzIG9mIGZ1bmMgZXhlY3V0aW5nIGF0IHRo ZSBzYW1lIHRpbWUgd2lsbCBoYXZlIHRoZSBzYW1lIHRocmVhZG5yLgorKyAgICAgKiBAcmV0dXJu IGFsd2F5cyAwIGN1cnJlbnRseSwgYnV0IGNvZGUgc2hvdWxkIGhhbmRsZSBhIGZ1dHVyZSBpbXBy b3ZlbWVudCB3aGVyZSB3aGVuIGFueSBjYWxsIHRvIGZ1bmMKKysgICAgICogICAgICAgICByZXR1 cm5zIDwgMCBubyBmdXJ0aGVyIGNhbGxzIHRvIGZ1bmMgbWF5IGJlIGRvbmUgYW5kIDwgMCBpcyBy ZXR1cm5lZC4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMsIHVzZXIgY2Fu IG92ZXJyaWRlLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYywgdXNlciBj YW4gb3ZlcnJpZGUuCisrICAgICAqLworKyAgICBpbnQgKCpleGVjdXRlMikoc3RydWN0IEFWQ29k ZWNDb250ZXh0ICpjLCBpbnQgKCpmdW5jKShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmMyLCB2b2lk ICphcmcsIGludCBqb2JuciwgaW50IHRocmVhZG5yKSwgdm9pZCAqYXJnMiwgaW50ICpyZXQsIGlu dCBjb3VudCk7CisrCisrICAgIC8qKgorKyAgICAgKiBwcm9maWxlCisrICAgICAqIC0gZW5jb2Rp bmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYy4K KysgICAgICogU2VlIHRoZSBBVl9QUk9GSUxFXyogZGVmaW5lcyBpbiBkZWZzLmguCisrICAgICAq LworKyAgICAgaW50IHByb2ZpbGU7CisrCisrICAgIC8qKgorKyAgICAgKiBFbmNvZGluZyBsZXZl bCBkZXNjcmlwdG9yLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlciwgY29ycmVzcG9u ZHMgdG8gYSBzcGVjaWZpYyBsZXZlbCBkZWZpbmVkIGJ5IHRoZQorKyAgICAgKiAgIGNvZGVjLCB1 c3VhbGx5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2ZpbGUgbGV2ZWwsIGlmIG5vdCBzcGVjaWZp ZWQgaXQKKysgICAgICogICBpcyBzZXQgdG8gQVZfTEVWRUxfVU5LTk9XTi4KKysgICAgICogLSBk ZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqIFNlZSBBVl9MRVZFTF8qIGluIGRl ZnMuaC4KKysgICAgICovCisrICAgICBpbnQgbGV2ZWw7CisrCisrICAgIC8qKgorKyAgICAgKiBT a2lwIGxvb3AgZmlsdGVyaW5nIGZvciBzZWxlY3RlZCBmcmFtZXMuCisrICAgICAqIC0gZW5jb2Rp bmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisr ICAgIGVudW0gQVZEaXNjYXJkIHNraXBfbG9vcF9maWx0ZXI7CisrCisrICAgIC8qKgorKyAgICAg KiBTa2lwIElEQ1QvZGVxdWFudGl6YXRpb24gZm9yIHNlbGVjdGVkIGZyYW1lcy4KKysgICAgICog LSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAg ICAgKi8KKysgICAgZW51bSBBVkRpc2NhcmQgc2tpcF9pZGN0OworKworKyAgICAvKioKKysgICAg ICogU2tpcCBkZWNvZGluZyBmb3Igc2VsZWN0ZWQgZnJhbWVzLgorKyAgICAgKiAtIGVuY29kaW5n OiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAg ICBlbnVtIEFWRGlzY2FyZCBza2lwX2ZyYW1lOworKworKyAgICAvKioKKysgICAgICogU2tpcCBw cm9jZXNzaW5nIGFscGhhIGlmIHN1cHBvcnRlZCBieSBjb2RlYy4KKysgICAgICogTm90ZSB0aGF0 IGlmIHRoZSBmb3JtYXQgdXNlcyBwcmUtbXVsdGlwbGllZCBhbHBoYSAoY29tbW9uIHdpdGggVlA2 LAorKyAgICAgKiBhbmQgcmVjb21tZW5kZWQgZHVlIHRvIGJldHRlciB2aWRlbyBxdWFsaXR5L2Nv bXByZXNzaW9uKQorKyAgICAgKiB0aGUgaW1hZ2Ugd2lsbCBsb29rIGFzIGlmIGFscGhhLWJsZW5k ZWQgb250byBhIGJsYWNrIGJhY2tncm91bmQuCisrICAgICAqIEhvd2V2ZXIgZm9yIGZvcm1hdHMg dGhhdCBkbyBub3QgdXNlIHByZS1tdWx0aXBsaWVkIGFscGhhCisrICAgICAqIHRoZXJlIG1pZ2h0 IGJlIHNlcmlvdXMgYXJ0ZWZhY3RzICh0aG91Z2ggZS5nLiBsaWJzd3NjYWxlIGN1cnJlbnRseQor KyAgICAgKiBhc3N1bWVzIHByZS1tdWx0aXBsaWVkIGFscGhhIGFueXdheSkuCisrICAgICAqCisr ICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNl ZAorKyAgICAgKi8KKysgICAgaW50IHNraXBfYWxwaGE7CisrCisrICAgIC8qKgorKyAgICAgKiBO dW1iZXIgb2YgbWFjcm9ibG9jayByb3dzIGF0IHRoZSB0b3Agd2hpY2ggYXJlIHNraXBwZWQuCisr ICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNl ci4KKysgICAgICovCisrICAgIGludCBza2lwX3RvcDsKKysKKysgICAgLyoqCisrICAgICAqIE51 bWJlciBvZiBtYWNyb2Jsb2NrIHJvd3MgYXQgdGhlIGJvdHRvbSB3aGljaCBhcmUgc2tpcHBlZC4K KysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKi8KKysgICAgaW50IHNraXBfYm90dG9tOworKworKyAgICAvKioKKysgICAg ICogbG93IHJlc29sdXRpb24gZGVjb2RpbmcsIDEtPiAxLzIgc2l6ZSwgMi0+MS80IHNpemUKKysg ICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2Vy LgorKyAgICAgKi8KKysgICAgIGludCBsb3dyZXM7CisrCisrICAgIC8qKgorKyAgICAgKiBBVkNv ZGVjRGVzY3JpcHRvcgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQuCisrICAgICAqIC0gZGVj b2Rpbmc6IHNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgY29uc3Qgc3RydWN0IEFW Q29kZWNEZXNjcmlwdG9yICpjb2RlY19kZXNjcmlwdG9yOworKworKyAgICAvKioKKysgICAgICog Q2hhcmFjdGVyIGVuY29kaW5nIG9mIHRoZSBpbnB1dCBzdWJ0aXRsZXMgZmlsZS4KKysgICAgICog LSBkZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAg ICAqLworKyAgICBjaGFyICpzdWJfY2hhcmVuYzsKKysKKysgICAgLyoqCisrICAgICAqIFN1YnRp dGxlcyBjaGFyYWN0ZXIgZW5jb2RpbmcgbW9kZS4gRm9ybWF0cyBvciBjb2RlY3MgbWlnaHQgYmUg YWRqdXN0aW5nCisrICAgICAqIHRoaXMgc2V0dGluZyAoaWYgdGhleSBhcmUgZG9pbmcgdGhlIGNv bnZlcnNpb24gdGhlbXNlbHZlcyBmb3IgaW5zdGFuY2UpLgorKyAgICAgKiAtIGRlY29kaW5nOiBz ZXQgYnkgbGliYXZjb2RlYworKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICovCisr ICAgIGludCBzdWJfY2hhcmVuY19tb2RlOworKyNkZWZpbmUgRkZfU1VCX0NIQVJFTkNfTU9ERV9E T19OT1RISU5HICAtMSAgLy8vPCBkbyBub3RoaW5nIChkZW11eGVyIG91dHB1dHMgYSBzdHJlYW0g c3VwcG9zZWQgdG8gYmUgYWxyZWFkeSBpbiBVVEYtOCwgb3IgdGhlIGNvZGVjIGlzIGJpdG1hcCBm b3IgaW5zdGFuY2UpCisrI2RlZmluZSBGRl9TVUJfQ0hBUkVOQ19NT0RFX0FVVE9NQVRJQyAgICAw ICAvLy88IGxpYmF2Y29kZWMgd2lsbCBzZWxlY3QgdGhlIG1vZGUgaXRzZWxmCisrI2RlZmluZSBG Rl9TVUJfQ0hBUkVOQ19NT0RFX1BSRV9ERUNPREVSICAxICAvLy88IHRoZSBBVlBhY2tldCBkYXRh IG5lZWRzIHRvIGJlIHJlY29kZWQgdG8gVVRGLTggYmVmb3JlIGJlaW5nIGZlZCB0byB0aGUgZGVj b2RlciwgcmVxdWlyZXMgaWNvbnYKKysjZGVmaW5lIEZGX1NVQl9DSEFSRU5DX01PREVfSUdOT1JF ICAgICAgIDIgIC8vLzwgbmVpdGhlciBjb252ZXJ0IHRoZSBzdWJ0aXRsZXMsIG5vciBjaGVjayB0 aGVtIGZvciB2YWxpZCBVVEYtOAorKworKyAgICAvKioKKysgICAgICogSGVhZGVyIGNvbnRhaW5p bmcgc3R5bGUgaW5mb3JtYXRpb24gZm9yIHRleHQgc3VidGl0bGVzLgorKyAgICAgKiBGb3IgU1VC VElUTEVfQVNTIHN1YnRpdGxlIHR5cGUsIGl0IHNob3VsZCBjb250YWluIHRoZSB3aG9sZSBBU1MK KysgICAgICogW1NjcmlwdCBJbmZvXSBhbmQgW1Y0KyBTdHlsZXNdIHNlY3Rpb24sIHBsdXMgdGhl IFtFdmVudHNdIGxpbmUgYW5kCisrICAgICAqIHRoZSBGb3JtYXQgbGluZSBmb2xsb3dpbmcuIEl0 IHNob3VsZG4ndCBpbmNsdWRlIGFueSBEaWFsb2d1ZSBsaW5lLgorKyAgICAgKgorKyAgICAgKiAt IGVuY29kaW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Y29kZWNfb3BlbjIo KSB0byBhbiBhcnJheQorKyAgICAgKiAgIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxsb2MoKSBm YW1pbHkgb2YgZnVuY3Rpb25zLgorKyAgICAgKiAtIGRlY29kaW5nOiBNYXkgYmUgc2V0IGJ5IGxp YmF2Y29kZWMgaW4gYXZjb2RlY19vcGVuMigpLgorKyAgICAgKgorKyAgICAgKiBBZnRlciBiZWlu ZyBzZXQsIHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgY29kZWMgYW5kIGZyZWVkIGluCisrICAg ICAqIGF2Y29kZWNfZnJlZV9jb250ZXh0KCkuCisrICAgICAqLworKyAgICBpbnQgc3VidGl0bGVf aGVhZGVyX3NpemU7CisrICAgIHVpbnQ4X3QgKnN1YnRpdGxlX2hlYWRlcjsKKysKKysgICAgLyoq CisrICAgICAqIGR1bXAgZm9ybWF0IHNlcGFyYXRvci4KKysgICAgICogY2FuIGJlICIsICIgb3Ig IlxuICAgICAgIiBvciBhbnl0aGluZyBlbHNlCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAgIHVp bnQ4X3QgKmR1bXBfc2VwYXJhdG9yOworKworKyAgICAvKioKKysgICAgICogJywnIHNlcGFyYXRl ZCBsaXN0IG9mIGFsbG93ZWQgZGVjb2RlcnMuCisrICAgICAqIElmIE5VTEwgdGhlbiBhbGwgYXJl IGFsbG93ZWQKKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6 IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBjaGFyICpjb2RlY193aGl0ZWxpc3Q7CisrCisr ICAgIC8qKgorKyAgICAgKiBBZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRp cmUgY29kZWQgc3RyZWFtLgorKyAgICAgKgorKyAgICAgKiAtIGRlY29kaW5nOiBtYXkgYmUgc2V0 IGJ5IHVzZXIgYmVmb3JlIGNhbGxpbmcgYXZjb2RlY19vcGVuMigpLgorKyAgICAgKiAtIGVuY29k aW5nOiBtYXkgYmUgc2V0IGJ5IGxpYmF2Y29kZWMgYWZ0ZXIgYXZjb2RlY19vcGVuMigpLgorKyAg ICAgKi8KKysgICAgQVZQYWNrZXRTaWRlRGF0YSAqY29kZWRfc2lkZV9kYXRhOworKyAgICBpbnQg ICAgICAgICAgICBuYl9jb2RlZF9zaWRlX2RhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBCaXQg c2V0IG9mIEFWX0NPREVDX0VYUE9SVF9EQVRBXyogZmxhZ3MsIHdoaWNoIGFmZmVjdHMgdGhlIGtp bmQgb2YKKysgICAgICogbWV0YWRhdGEgZXhwb3J0ZWQgaW4gZnJhbWUsIHBhY2tldCwgb3IgY29k ZWQgc3RyZWFtIHNpZGUgZGF0YSBieQorKyAgICAgKiBkZWNvZGVycyBhbmQgZW5jb2RlcnMuCisr ICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqIC0gZW5jb2Rp bmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQgZXhwb3J0X3NpZGVfZGF0YTsKKysK KysgICAgLyoqCisrICAgICAqIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHBlciBpbWFnZSB0byBtYXhp bWFsbHkgYWNjZXB0LgorKyAgICAgKgorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgdXNlcgor KyAgICAgKiAtIGVuY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgaW50NjRfdCBt YXhfcGl4ZWxzOworKworKyAgICAvKioKKysgICAgICogVmlkZW8gZGVjb2Rpbmcgb25seS4gQ2Vy dGFpbiB2aWRlbyBjb2RlY3Mgc3VwcG9ydCBjcm9wcGluZywgbWVhbmluZyB0aGF0CisrICAgICAq IG9ubHkgYSBzdWItcmVjdGFuZ2xlIG9mIHRoZSBkZWNvZGVkIGZyYW1lIGlzIGludGVuZGVkIGZv ciBkaXNwbGF5LiAgVGhpcworKyAgICAgKiBvcHRpb24gY29udHJvbHMgaG93IGNyb3BwaW5nIGlz IGhhbmRsZWQgYnkgbGliYXZjb2RlYy4KKysgICAgICoKKysgICAgICogV2hlbiBzZXQgdG8gMSAo dGhlIGRlZmF1bHQpLCBsaWJhdmNvZGVjIHdpbGwgYXBwbHkgY3JvcHBpbmcgaW50ZXJuYWxseS4K KysgICAgICogSS5lLiBpdCB3aWxsIG1vZGlmeSB0aGUgb3V0cHV0IGZyYW1lIHdpZHRoL2hlaWdo dCBmaWVsZHMgYW5kIG9mZnNldCB0aGUKKysgICAgICogZGF0YSBwb2ludGVycyAob25seSBieSBh cyBtdWNoIGFzIHBvc3NpYmxlIHdoaWxlIHByZXNlcnZpbmcgYWxpZ25tZW50LCBvcgorKyAgICAg KiBieSB0aGUgZnVsbCBhbW91bnQgaWYgdGhlIEFWX0NPREVDX0ZMQUdfVU5BTElHTkVEIGZsYWcg aXMgc2V0KSBzbyB0aGF0CisrICAgICAqIHRoZSBmcmFtZXMgb3V0cHV0IGJ5IHRoZSBkZWNvZGVy IHJlZmVyIG9ubHkgdG8gdGhlIGNyb3BwZWQgYXJlYS4gVGhlCisrICAgICAqIGNyb3BfKiBmaWVs ZHMgb2YgdGhlIG91dHB1dCBmcmFtZXMgd2lsbCBiZSB6ZXJvLgorKyAgICAgKgorKyAgICAgKiBX aGVuIHNldCB0byAwLCB0aGUgd2lkdGgvaGVpZ2h0IGZpZWxkcyBvZiB0aGUgb3V0cHV0IGZyYW1l cyB3aWxsIGJlIHNldAorKyAgICAgKiB0byB0aGUgY29kZWQgZGltZW5zaW9ucyBhbmQgdGhlIGNy b3BfKiBmaWVsZHMgd2lsbCBkZXNjcmliZSB0aGUgY3JvcHBpbmcKKysgICAgICogcmVjdGFuZ2xl LiBBcHBseWluZyB0aGUgY3JvcHBpbmcgaXMgbGVmdCB0byB0aGUgY2FsbGVyLgorKyAgICAgKgor KyAgICAgKiBAd2FybmluZyBXaGVuIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB3aXRoIG9wYXF1ZSBv dXRwdXQgZnJhbWVzIGlzIHVzZWQsCisrICAgICAqIGxpYmF2Y29kZWMgaXMgdW5hYmxlIHRvIGFw cGx5IGNyb3BwaW5nIGZyb20gdGhlIHRvcC9sZWZ0IGJvcmRlci4KKysgICAgICoKKysgICAgICog QG5vdGUgd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gemVybywgdGhlIHdpZHRoL2hlaWdodCBm aWVsZHMgb2YgdGhlCisrICAgICAqIEFWQ29kZWNDb250ZXh0IGFuZCBvdXRwdXQgQVZGcmFtZXMg aGF2ZSBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSBjb2RlYworKyAgICAgKiBjb250ZXh0IGZpZWxk cyBzdG9yZSBkaXNwbGF5IGRpbWVuc2lvbnMgKHdpdGggdGhlIGNvZGVkIGRpbWVuc2lvbnMgaW4K KysgICAgICogY29kZWRfd2lkdGgvaGVpZ2h0KSwgd2hpbGUgdGhlIGZyYW1lIGZpZWxkcyBzdG9y ZSB0aGUgY29kZWQgZGltZW5zaW9ucworKyAgICAgKiAod2l0aCB0aGUgZGlzcGxheSBkaW1lbnNp b25zIGJlaW5nIGRldGVybWluZWQgYnkgdGhlIGNyb3BfKiBmaWVsZHMpLgorKyAgICAgKi8KKysg ICAgaW50IGFwcGx5X2Nyb3BwaW5nOworKworKyAgICAvKioKKysgICAgICogVGhlIHBlcmNlbnRh Z2Ugb2YgZGFtYWdlZCBzYW1wbGVzIHRvIGRpc2NhcmQgYSBmcmFtZS4KKysgICAgICoKKysgICAg ICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisr ICAgICAqLworKyAgICBpbnQgZGlzY2FyZF9kYW1hZ2VkX3BlcmNlbnRhZ2U7CisrCisrICAgIC8q KgorKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGZyYW1lIHRvIG1heGltYWxseSBh Y2NlcHQuCisrICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAq IC0gZW5jb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQ2NF90IG1heF9zYW1w bGVzOworKworKyAgICAvKioKKysgICAgICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYXQgdGhl IGJlZ2lubmluZyBvZiBlYWNoIHBhY2tldCB0byBnZXQgYSBkYXRhCisrICAgICAqIGJ1ZmZlciBm b3IgaXQuCisrICAgICAqCisrICAgICAqIFRoZSBmb2xsb3dpbmcgZmllbGQgd2lsbCBiZSBzZXQg aW4gdGhlIHBhY2tldCBiZWZvcmUgdGhpcyBjYWxsYmFjayBpcworKyAgICAgKiBjYWxsZWQ6Cisr ICAgICAqIC0gc2l6ZQorKyAgICAgKiBUaGlzIGNhbGxiYWNrIG11c3QgdXNlIHRoZSBhYm92ZSB2 YWx1ZSB0byBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLAorKyAgICAgKiB3aGlj aCBtdXN0IHBhZGRlZCBieSBhdCBsZWFzdCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5 dGVzLgorKyAgICAgKgorKyAgICAgKiBJbiBzb21lIHNwZWNpZmljIGNhc2VzLCB0aGUgZW5jb2Rl ciBtYXkgbm90IHVzZSB0aGUgZW50aXJlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdGhpcworKyAgICAg KiBjYWxsYmFjay4gVGhpcyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgc2l6ZSB2YWx1ZSBpbiB0 aGUgcGFja2V0IG9uY2UgcmV0dXJuZWQgYnkKKysgICAgICogYXZjb2RlY19yZWNlaXZlX3BhY2tl dCgpLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGNhbGxiYWNrIG11c3QgZmlsbCB0aGUgZm9sbG93 aW5nIGZpZWxkcyBpbiB0aGUgcGFja2V0OgorKyAgICAgKiAtIGRhdGE6IGFsaWdubWVudCByZXF1 aXJlbWVudHMgZm9yIEFWUGFja2V0IGFwcGx5LCBpZiBhbnkuIFNvbWUgYXJjaGl0ZWN0dXJlcyBh bmQKKysgICAgICogICBlbmNvZGVycyBtYXkgYmVuZWZpdCBmcm9tIGhhdmluZyBhbGlnbmVkIGRh dGEuCisrICAgICAqIC0gYnVmOiBtdXN0IGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIEFWQnVmZmVy UmVmIHN0cnVjdHVyZS4gVGhlIHBhY2tldCdzCisrICAgICAqICAgZGF0YSBwb2ludGVyIG11c3Qg YmUgY29udGFpbmVkIGluIGl0LiBTZWU6IGF2X2J1ZmZlcl9jcmVhdGUoKSwgYXZfYnVmZmVyX2Fs bG9jKCksCisrICAgICAqICAgYW5kIGF2X2J1ZmZlcl9yZWYoKS4KKysgICAgICoKKysgICAgICog SWYgQVZfQ09ERUNfQ0FQX0RSMSBpcyBub3Qgc2V0IHRoZW4gZ2V0X2VuY29kZV9idWZmZXIoKSBt dXN0IGNhbGwKKysgICAgICogYXZjb2RlY19kZWZhdWx0X2dldF9lbmNvZGVfYnVmZmVyKCkgaW5z dGVhZCBvZiBwcm92aWRpbmcgYSBidWZmZXIgYWxsb2NhdGVkIGJ5CisrICAgICAqIHNvbWUgb3Ro ZXIgbWVhbnMuCisrICAgICAqCisrICAgICAqIFRoZSBmbGFncyBmaWVsZCBtYXkgY29udGFpbiBh IGNvbWJpbmF0aW9uIG9mIEFWX0dFVF9FTkNPREVfQlVGRkVSX0ZMQUdfIGZsYWdzLgorKyAgICAg KiBUaGV5IG1heSBiZSB1c2VkIGZvciBleGFtcGxlIHRvIGhpbnQgd2hhdCB1c2UgdGhlIGJ1ZmZl ciBtYXkgZ2V0IGFmdGVyIGJlaW5nCisrICAgICAqIGNyZWF0ZWQuCisrICAgICAqIEltcGxlbWVu dGF0aW9ucyBvZiB0aGlzIGNhbGxiYWNrIG1heSBpZ25vcmUgZmxhZ3MgdGhleSBkb24ndCB1bmRl cnN0YW5kLgorKyAgICAgKiBJZiBBVl9HRVRfRU5DT0RFX0JVRkZFUl9GTEFHX1JFRiBpcyBzZXQg aW4gZmxhZ3MgdGhlbiB0aGUgcGFja2V0IG1heSBiZSByZXVzZWQKKysgICAgICogKHJlYWQgYW5k L29yIHdyaXR0ZW4gdG8gaWYgaXQgaXMgd3JpdGFibGUpIGxhdGVyIGJ5IGxpYmF2Y29kZWMuCisr ICAgICAqCisrICAgICAqIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSB0aHJlYWQtc2FmZSwgYXMgd2hl biBmcmFtZSB0aHJlYWRpbmcgaXMgdXNlZCwgaXQgbWF5CisrICAgICAqIGJlIGNhbGxlZCBmcm9t IG11bHRpcGxlIHRocmVhZHMgc2ltdWx0YW5lb3VzbHkuCisrICAgICAqCisrICAgICAqIEBzZWUg YXZjb2RlY19kZWZhdWx0X2dldF9lbmNvZGVfYnVmZmVyKCkKKysgICAgICoKKysgICAgICogLSBl bmNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMsIHVzZXIgY2FuIG92ZXJyaWRlLgorKyAgICAgKiAt IGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCAoKmdldF9lbmNvZGVfYnVmZmVy KShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsIGludCBmbGFncyk7Cisr CisrICAgIC8qKgorKyAgICAgKiBGcmFtZSBjb3VudGVyLCBzZXQgYnkgbGliYXZjb2RlYy4KKysg ICAgICoKKysgICAgICogLSBkZWNvZGluZzogdG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZXR1cm5l ZCBmcm9tIHRoZSBkZWNvZGVyIHNvIGZhci4KKysgICAgICogLSBlbmNvZGluZzogdG90YWwgbnVt YmVyIG9mIGZyYW1lcyBwYXNzZWQgdG8gdGhlIGVuY29kZXIgc28gZmFyLgorKyAgICAgKgorKyAg ICAgKiAgIEBub3RlIHRoZSBjb3VudGVyIGlzIG5vdCBpbmNyZW1lbnRlZCBpZiBlbmNvZGluZy9k ZWNvZGluZyByZXN1bHRlZCBpbgorKyAgICAgKiAgIGFuIGVycm9yLgorKyAgICAgKi8KKysgICAg aW50NjRfdCBmcmFtZV9udW07CisrCisrICAgIC8qKgorKyAgICAgKiBEZWNvZGluZyBvbmx5LiBN YXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Y29kZWNfb3BlbjIoKSB0byBhbgorKyAg ICAgKiBhdl9tYWxsb2MoKSdlZCBhcnJheSAob3IgdmlhIEFWT3B0aW9ucykuIE93bmVkIGFuZCBm cmVlZCBieSB0aGUgZGVjb2RlcgorKyAgICAgKiBhZnRlcndhcmRzLgorKyAgICAgKgorKyAgICAg KiBTaWRlIGRhdGEgYXR0YWNoZWQgdG8gZGVjb2RlZCBmcmFtZXMgbWF5IGNvbWUgZnJvbSBzZXZl cmFsIHNvdXJjZXM6CisrICAgICAqIDEuIGNvZGVkX3NpZGVfZGF0YSwgd2hpY2ggdGhlIGRlY29k ZXIgd2lsbCBmb3IgY2VydGFpbiB0eXBlcyB0cmFuc2xhdGUKKysgICAgICogICAgZnJvbSBwYWNr ZXQtdHlwZSB0byBmcmFtZS10eXBlIGFuZCBhdHRhY2ggdG8gZnJhbWVzOworKyAgICAgKiAyLiBz aWRlIGRhdGEgYXR0YWNoZWQgdG8gYW4gQVZQYWNrZXQgc2VudCBmb3IgZGVjb2RpbmcgKHNhbWUK KysgICAgICogICAgY29uc2lkZXJhdGlvbnMgYXMgYWJvdmUpOworKyAgICAgKiAzLiBleHRyYWN0 ZWQgZnJvbSB0aGUgY29kZWQgYnl0ZXN0cmVhbS4KKysgICAgICogVGhlIGZpcnN0IHR3byBjYXNl cyBhcmUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlciBhbmQgdHlwaWNhbGx5IGNvbWUgZnJvbSBhCisr ICAgICAqIGNvbnRhaW5lci4KKysgICAgICoKKysgICAgICogVGhpcyBhcnJheSBjb25maWd1cmVz IGRlY29kZXIgYmVoYXZpb3VyIGluIGNhc2VzIHdoZW4gc2lkZSBkYXRhIG9mIHRoZQorKyAgICAg KiBzYW1lIHR5cGUgaXMgcHJlc2VudCBib3RoIGluIHRoZSBjb2RlZCBieXRlc3RyZWFtIGFuZCBp biB0aGUKKysgICAgICogdXNlci1zdXBwbGllZCBzaWRlIGRhdGEgKGl0ZW1zIDEuIGFuZCAyLiBh Ym92ZSkuIEluIGFsbCBjYXNlcywgYXQgbW9zdAorKyAgICAgKiBvbmUgaW5zdGFuY2Ugb2YgZWFj aCBzaWRlIGRhdGEgdHlwZSB3aWxsIGJlIGF0dGFjaGVkIHRvIG91dHB1dCBmcmFtZXMuIEJ5Cisr ICAgICAqIGRlZmF1bHQgaXQgd2lsbCBiZSB0aGUgYnl0ZXN0cmVhbSBzaWRlIGRhdGEuIEFkZGlu ZyBhbgorKyAgICAgKiBBVlBhY2tldFNpZGVEYXRhVHlwZSB2YWx1ZSB0byB0aGlzIGFycmF5IHdp bGwgZmxpcCB0aGUgcHJlZmVyZW5jZSBmb3IKKysgICAgICogdGhpcyB0eXBlLCB0aHVzIG1ha2lu ZyB0aGUgZGVjb2RlciBwcmVmZXIgdXNlci1zdXBwbGllZCBzaWRlIGRhdGEgb3ZlcgorKyAgICAg KiBieXRlc3RyZWFtLiBJbiBjYXNlIHNpZGUgZGF0YSBvZiB0aGUgc2FtZSB0eXBlIGlzIHByZXNl bnQgYm90aCBpbgorKyAgICAgKiBjb2RlZF9kYXRhIGFuZCBhdHRhY2tlZCB0byBhIHBhY2tldCwg dGhlIHBhY2tldCBpbnN0YW5jZSBhbHdheXMgaGFzCisrICAgICAqIHByaW9yaXR5LgorKyAgICAg KgorKyAgICAgKiBUaGUgYXJyYXkgbWF5IGFsc28gY29udGFpbiBhIHNpbmdsZSAtMSwgaW4gd2hp Y2ggY2FzZSB0aGUgcHJlZmVyZW5jZSBpcworKyAgICAgKiBzd2l0Y2hlZCBmb3IgYWxsIHNpZGUg ZGF0YSB0eXBlcy4KKysgICAgICovCisrICAgIGludCAgICAgICAgKnNpZGVfZGF0YV9wcmVmZXJf cGFja2V0OworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGVudHJpZXMgaW4gc2lkZV9kYXRh X3ByZWZlcl9wYWNrZXQuCisrICAgICAqLworKyAgICB1bnNpZ25lZCBuYl9zaWRlX2RhdGFfcHJl ZmVyX3BhY2tldDsKKysKKysgICAgLyoqCisrICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc3RhdGlj IHNpZGUgZGF0YSwgc3VjaCBhcyBIRFIxMCBDTEwgLyBNRENWIHN0cnVjdHVyZXMuCisrICAgICAq IFNpZGUgZGF0YSBlbnRyaWVzIHNob3VsZCBiZSBhbGxvY2F0ZWQgYnkgdXNhZ2Ugb2YgaGVscGVy cyBkZWZpbmVkIGluCisrICAgICAqIGxpYmF2dXRpbC9mcmFtZS5oLgorKyAgICAgKgorKyAgICAg KiAtIGVuY29kaW5nOiBtYXkgYmUgc2V0IGJ5IHVzZXIgYmVmb3JlIGNhbGxpbmcgYXZjb2RlY19v cGVuMigpIGZvcgorKyAgICAgKiAgICAgICAgICAgICBlbmNvZGVyIGNvbmZpZ3VyYXRpb24uIEFm dGVyd2FyZHMgb3duZWQgYW5kIGZyZWVkIGJ5IHRoZQorKyAgICAgKiAgICAgICAgICAgICBlbmNv ZGVyLgorKyAgICAgKiAtIGRlY29kaW5nOiBtYXkgYmUgc2V0IGJ5IGxpYmF2Y29kZWMgaW4gYXZj b2RlY19vcGVuMigpLgorKyAgICAgKi8KKysgICAgQVZGcmFtZVNpZGVEYXRhICAqKmRlY29kZWRf c2lkZV9kYXRhOworKyAgICBpbnQgICAgICAgICAgICAgbmJfZGVjb2RlZF9zaWRlX2RhdGE7Cisr CisrICAgIC8qKgorKyAgICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBhbHBoYSBjaGFubmVsIG9mIHRo ZSB2aWRlbyBpcyByZXByZXNlbnRlZC4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIK KysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMKKysgICAgICovCisrICAgIGVu dW0gQVZBbHBoYU1vZGUgYWxwaGFfbW9kZTsKKyt9IEFWQ29kZWNDb250ZXh0OworKworKy8qKgor KyAqIEBkZWZncm91cCBsYXZjX2h3YWNjZWwgQVZIV0FjY2VsCisrICoKKysgKiBAbm90ZSAgTm90 aGluZyBpbiB0aGlzIHN0cnVjdHVyZSBzaG91bGQgYmUgYWNjZXNzZWQgYnkgdGhlIHVzZXIuICBB dCBzb21lCisrICogICAgICAgIHBvaW50IGluIGZ1dHVyZSBpdCB3aWxsIG5vdCBiZSBleHRlcm5h bGx5IHZpc2libGUgYXQgYWxsLgorKyAqCisrICogQHsKKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBB VkhXQWNjZWwgeworKyAgICAvKioKKysgICAgICogTmFtZSBvZiB0aGUgaGFyZHdhcmUgYWNjZWxl cmF0ZWQgY29kZWMuCisrICAgICAqIFRoZSBuYW1lIGlzIGdsb2JhbGx5IHVuaXF1ZSBhbW9uZyBl bmNvZGVycyBhbmQgYW1vbmcgZGVjb2RlcnMgKGJ1dCBhbgorKyAgICAgKiBlbmNvZGVyIGFuZCBh IGRlY29kZXIgY2FuIHNoYXJlIHRoZSBzYW1lIG5hbWUpLgorKyAgICAgKi8KKysgICAgY29uc3Qg Y2hhciAqbmFtZTsKKysKKysgICAgLyoqCisrICAgICAqIFR5cGUgb2YgY29kZWMgaW1wbGVtZW50 ZWQgYnkgdGhlIGhhcmR3YXJlIGFjY2VsZXJhdG9yLgorKyAgICAgKgorKyAgICAgKiBTZWUgQVZN RURJQV9UWVBFX3h4eAorKyAgICAgKi8KKysgICAgZW51bSBBVk1lZGlhVHlwZSB0eXBlOworKwor KyAgICAvKioKKysgICAgICogQ29kZWMgaW1wbGVtZW50ZWQgYnkgdGhlIGhhcmR3YXJlIGFjY2Vs ZXJhdG9yLgorKyAgICAgKgorKyAgICAgKiBTZWUgQVZfQ09ERUNfSURfeHh4CisrICAgICAqLwor KyAgICBlbnVtIEFWQ29kZWNJRCBpZDsKKysKKysgICAgLyoqCisrICAgICAqIFN1cHBvcnRlZCBw aXhlbCBmb3JtYXQuCisrICAgICAqCisrICAgICAqIE9ubHkgaGFyZHdhcmUgYWNjZWxlcmF0ZWQg Zm9ybWF0cyBhcmUgc3VwcG9ydGVkIGhlcmUuCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxG b3JtYXQgcGl4X2ZtdDsKKysKKysgICAgLyoqCisrICAgICAqIEhhcmR3YXJlIGFjY2VsZXJhdGVk IGNvZGVjIGNhcGFiaWxpdGllcy4KKysgICAgICogc2VlIEFWX0hXQUNDRUxfQ09ERUNfQ0FQXyoK KysgICAgICovCisrICAgIGludCBjYXBhYmlsaXRpZXM7CisrfSBBVkhXQWNjZWw7CisrCisrLyoq CisrICogSFdBY2NlbCBpcyBleHBlcmltZW50YWwgYW5kIGlzIHRodXMgYXZvaWRlZCBpbiBmYXZv ciBvZiBub24gZXhwZXJpbWVudGFsCisrICogY29kZWNzCisrICovCisrI2RlZmluZSBBVl9IV0FD Q0VMX0NPREVDX0NBUF9FWFBFUklNRU5UQUwgMHgwMjAwCisrCisrLyoqCisrICogSGFyZHdhcmUg YWNjZWxlcmF0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWNvZGluZyBldmVuIGlmIHRoZSBjb2Rl YyBsZXZlbAorKyAqIHVzZWQgaXMgdW5rbm93biBvciBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSBz dXBwb3J0ZWQgbGV2ZWwgcmVwb3J0ZWQgYnkgdGhlCisrICogaGFyZHdhcmUgZHJpdmVyLgorKyAq CisrICogSXQncyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8gcGFzcyB0aGlzIGZsYWcgdW5sZXNz IHlvdSBoYXZlIGEgc3BlY2lmaWMKKysgKiByZWFzb24gbm90IHRvLCBhcyBoYXJkd2FyZSB0ZW5k cyB0byB1bmRlci1yZXBvcnQgc3VwcG9ydGVkIGxldmVscy4KKysgKi8KKysjZGVmaW5lIEFWX0hX QUNDRUxfRkxBR19JR05PUkVfTEVWRUwgKDEgPDwgMCkKKysKKysvKioKKysgKiBIYXJkd2FyZSBh Y2NlbGVyYXRpb24gY2FuIG91dHB1dCBZVVYgcGl4ZWwgZm9ybWF0cyB3aXRoIGEgZGlmZmVyZW50 IGNocm9tYQorKyAqIHNhbXBsaW5nIHRoYW4gNDoyOjAgYW5kL29yIG90aGVyIHRoYW4gOCBiaXRz IHBlciBjb21wb25lbnQuCisrICovCisrI2RlZmluZSBBVl9IV0FDQ0VMX0ZMQUdfQUxMT1dfSElH SF9ERVBUSCAoMSA8PCAxKQorKworKy8qKgorKyAqIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBzaG91 bGQgc3RpbGwgYmUgYXR0ZW1wdGVkIGZvciBkZWNvZGluZyB3aGVuIHRoZQorKyAqIGNvZGVjIHBy b2ZpbGUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcG9ydGVkIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFy ZHdhcmUuCisrICoKKysgKiBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gYmUgdXNlZCB0byB0cnkgdG8g ZGVjb2RlIGJhc2VsaW5lIHByb2ZpbGUgSC4yNjQKKysgKiBzdHJlYW1zIGluIGhhcmR3YXJlIC0g aXQgd2lsbCBvZnRlbiBzdWNjZWVkLCBiZWNhdXNlIG1hbnkgc3RyZWFtcyBtYXJrZWQKKysgKiBh cyBiYXNlbGluZSBwcm9maWxlIGFjdHVhbGx5IGNvbmZvcm0gdG8gY29uc3RyYWluZWQgYmFzZWxp bmUgcHJvZmlsZS4KKysgKgorKyAqIEB3YXJuaW5nIElmIHRoZSBzdHJlYW0gaXMgYWN0dWFsbHkg bm90IHN1cHBvcnRlZCB0aGVuIHRoZSBiZWhhdmlvdXIgaXMKKysgKiAgICAgICAgICB1bmRlZmlu ZWQsIGFuZCBtYXkgaW5jbHVkZSByZXR1cm5pbmcgZW50aXJlbHkgaW5jb3JyZWN0IG91dHB1dAor KyAqICAgICAgICAgIHdoaWxlIGluZGljYXRpbmcgc3VjY2Vzcy4KKysgKi8KKysjZGVmaW5lIEFW X0hXQUNDRUxfRkxBR19BTExPV19QUk9GSUxFX01JU01BVENIICgxIDw8IDIpCisrCisrLyoqCisr ICogU29tZSBoYXJkd2FyZSBkZWNvZGVycyAobmFtZWx5IG52ZGVjKSBjYW4gZWl0aGVyIG91dHB1 dCBkaXJlY3QgZGVjb2RlcgorKyAqIHN1cmZhY2VzLCBvciBtYWtlIGFuIG9uLWRldmljZSBjb3B5 IGFuZCByZXR1cm4gc2FpZCBjb3B5LgorKyAqIFRoZXJlIGlzIGEgaGFyZCBsaW1pdCBvbiBob3cg bWFueSBkZWNvZGVyIHN1cmZhY2VzIHRoZXJlIGNhbiBiZSwgYW5kIGl0CisrICogY2Fubm90IGJl IGFjY3VyYXRlbHkgZ3Vlc3NlZCBhaGVhZCBvZiB0aW1lLgorKyAqIEZvciBzb21lIHByb2Nlc3Np bmcgY2hhaW5zLCB0aGlzIGNhbiBiZSBva2F5LCBidXQgb3RoZXJzIHdpbGwgcnVuIGludG8gdGhl CisrICogbGltaXQgYW5kIGluIHR1cm4gcHJvZHVjZSB2ZXJ5IGNvbmZ1c2luZyBlcnJvcnMgdGhh dCByZXF1aXJlIGZpbmUgdHVuaW5nIG9mCisrICogbW9yZSBvciBsZXNzIG9ic2N1cmUgb3B0aW9u cyBieSB0aGUgdXNlciwgb3IgaW4gZXh0cmVtZSBjYXNlcyBjYW5ub3QgYmUKKysgKiByZXNvbHZl ZCBhdCBhbGwgd2l0aG91dCBpbnNlcnRpbmcgYW4gYXZmaWx0ZXIgdGhhdCBmb3JjZXMgYSBjb3B5 LgorKyAqCisrICogVGh1cywgdGhlIGh3YWNjZWwgd2lsbCBieSBkZWZhdWx0IG1ha2UgYSBjb3B5 IGZvciBzYWZldHkgYW5kIHJlc2lsaWVuY2UuCisrICogSWYgYSB1c2VycyByZWFsbHkgd2FudHMg dG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBjb3BpZXMsIHRoZXkgY2FuIHNldCB0aGlzCisrICog ZmxhZyBhbmQgZW5zdXJlIHRoZWlyIHByb2Nlc3NpbmcgY2hhaW4gZG9lcyBub3QgZXhoYXVzdCB0 aGUgc3VyZmFjZSBwb29sLgorKyAqLworKyNkZWZpbmUgQVZfSFdBQ0NFTF9GTEFHX1VOU0FGRV9P VVRQVVQgKDEgPDwgMykKKysKKysvKioKKysgKiBAfQorKyAqLworKworK2VudW0gQVZTdWJ0aXRs ZVR5cGUgeworKyAgICBTVUJUSVRMRV9OT05FLAorKworKyAgICBTVUJUSVRMRV9CSVRNQVAsICAg ICAgICAgICAgICAgIC8vLzwgQSBiaXRtYXAsIHBpY3Qgd2lsbCBiZSBzZXQKKysKKysgICAgLyoq CisrICAgICAqIFBsYWluIHRleHQsIHRoZSB0ZXh0IGZpZWxkIG11c3QgYmUgc2V0IGJ5IHRoZSBk ZWNvZGVyIGFuZCBpcworKyAgICAgKiBhdXRob3JpdGF0aXZlLiBhc3MgYW5kIHBpY3QgZmllbGRz IG1heSBjb250YWluIGFwcHJveGltYXRpb25zLgorKyAgICAgKi8KKysgICAgU1VCVElUTEVfVEVY VCwKKysKKysgICAgLyoqCisrICAgICAqIEZvcm1hdHRlZCB0ZXh0LCB0aGUgYXNzIGZpZWxkIG11 c3QgYmUgc2V0IGJ5IHRoZSBkZWNvZGVyIGFuZCBpcworKyAgICAgKiBhdXRob3JpdGF0aXZlLiBw aWN0IGFuZCB0ZXh0IGZpZWxkcyBtYXkgY29udGFpbiBhcHByb3hpbWF0aW9ucy4KKysgICAgICov CisrICAgIFNVQlRJVExFX0FTUywKKyt9OworKworKyNkZWZpbmUgQVZfU1VCVElUTEVfRkxBR19G T1JDRUQgMHgwMDAwMDAwMQorKworK3R5cGVkZWYgc3RydWN0IEFWU3VidGl0bGVSZWN0IHsKKysg ICAgaW50IHg7ICAgICAgICAgLy8vPCB0b3AgbGVmdCBjb3JuZXIgIG9mIHBpY3QsIHVuZGVmaW5l ZCB3aGVuIHBpY3QgaXMgbm90IHNldAorKyAgICBpbnQgeTsgICAgICAgICAvLy88IHRvcCBsZWZ0 IGNvcm5lciAgb2YgcGljdCwgdW5kZWZpbmVkIHdoZW4gcGljdCBpcyBub3Qgc2V0CisrICAgIGlu dCB3OyAgICAgICAgIC8vLzwgd2lkdGggICAgICAgICAgICBvZiBwaWN0LCB1bmRlZmluZWQgd2hl biBwaWN0IGlzIG5vdCBzZXQKKysgICAgaW50IGg7ICAgICAgICAgLy8vPCBoZWlnaHQgICAgICAg ICAgIG9mIHBpY3QsIHVuZGVmaW5lZCB3aGVuIHBpY3QgaXMgbm90IHNldAorKyAgICBpbnQgbmJf Y29sb3JzOyAvLy88IG51bWJlciBvZiBjb2xvcnMgaW4gcGljdCwgdW5kZWZpbmVkIHdoZW4gcGlj dCBpcyBub3Qgc2V0CisrCisrICAgIC8qKgorKyAgICAgKiBkYXRhK2xpbmVzaXplIGZvciB0aGUg Yml0bWFwIG9mIHRoaXMgc3VidGl0bGUuCisrICAgICAqIENhbiBiZSBzZXQgZm9yIHRleHQvYXNz IGFzIHdlbGwgb25jZSB0aGV5IGFyZSByZW5kZXJlZC4KKysgICAgICovCisrICAgIHVpbnQ4X3Qg KmRhdGFbNF07CisrICAgIGludCBsaW5lc2l6ZVs0XTsKKysKKysgICAgaW50IGZsYWdzOworKyAg ICBlbnVtIEFWU3VidGl0bGVUeXBlIHR5cGU7CisrCisrICAgIGNoYXIgKnRleHQ7ICAgICAgICAg ICAgICAgICAgICAgLy8vPCAwIHRlcm1pbmF0ZWQgcGxhaW4gVVRGLTggdGV4dAorKworKyAgICAv KioKKysgICAgICogMCB0ZXJtaW5hdGVkIEFTUy9TU0EgY29tcGF0aWJsZSBldmVudCBsaW5lLgor KyAgICAgKiBUaGUgcHJlc2VudGF0aW9uIG9mIHRoaXMgaXMgdW5hZmZlY3RlZCBieSB0aGUgb3Ro ZXIgdmFsdWVzIGluIHRoaXMKKysgICAgICogc3RydWN0LgorKyAgICAgKi8KKysgICAgY2hhciAq YXNzOworK30gQVZTdWJ0aXRsZVJlY3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdWJ0aXRsZSB7 CisrICAgIHVpbnQxNl90IGZvcm1hdDsgLyogMCA9IGdyYXBoaWNzICovCisrICAgIHVpbnQzMl90 IHN0YXJ0X2Rpc3BsYXlfdGltZTsgLyogcmVsYXRpdmUgdG8gcGFja2V0IHB0cywgaW4gbXMgKi8K KysgICAgdWludDMyX3QgZW5kX2Rpc3BsYXlfdGltZTsgLyogcmVsYXRpdmUgdG8gcGFja2V0IHB0 cywgaW4gbXMgKi8KKysgICAgdW5zaWduZWQgbnVtX3JlY3RzOworKyAgICBBVlN1YnRpdGxlUmVj dCAqKnJlY3RzOworKyAgICBpbnQ2NF90IHB0czsgICAgLy8vPCBTYW1lIGFzIHBhY2tldCBwdHMs IGluIEFWX1RJTUVfQkFTRQorK30gQVZTdWJ0aXRsZTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhl IExJQkFWQ09ERUNfVkVSU0lPTl9JTlQgY29uc3RhbnQuCisrICovCisrdW5zaWduZWQgYXZjb2Rl Y192ZXJzaW9uKHZvaWQpOworKworKy8qKgorKyAqIFJldHVybiB0aGUgbGliYXZjb2RlYyBidWls ZC10aW1lIGNvbmZpZ3VyYXRpb24uCisrICovCisrY29uc3QgY2hhciAqYXZjb2RlY19jb25maWd1 cmF0aW9uKHZvaWQpOworKworKy8qKgorKyAqIFJldHVybiB0aGUgbGliYXZjb2RlYyBsaWNlbnNl LgorKyAqLworK2NvbnN0IGNoYXIgKmF2Y29kZWNfbGljZW5zZSh2b2lkKTsKKysKKysvKioKKysg KiBBbGxvY2F0ZSBhbiBBVkNvZGVjQ29udGV4dCBhbmQgc2V0IGl0cyBmaWVsZHMgdG8gZGVmYXVs dCB2YWx1ZXMuIFRoZQorKyAqIHJlc3VsdGluZyBzdHJ1Y3Qgc2hvdWxkIGJlIGZyZWVkIHdpdGgg YXZjb2RlY19mcmVlX2NvbnRleHQoKS4KKysgKgorKyAqIEBwYXJhbSBjb2RlYyBpZiBub24tTlVM TCwgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIGFuZCBpbml0aWFsaXplIGRlZmF1bHRzCisrICogICAg ICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gY29kZWMuIEl0IGlzIGlsbGVnYWwgdG8gdGhlbiBjYWxs IGF2Y29kZWNfb3BlbjIoKQorKyAqICAgICAgICAgICAgICB3aXRoIGEgZGlmZmVyZW50IGNvZGVj LgorKyAqICAgICAgICAgICAgICBJZiBOVUxMLCB0aGVuIHRoZSBjb2RlYy1zcGVjaWZpYyBkZWZh dWx0cyB3b24ndCBiZSBpbml0aWFsaXplZCwKKysgKiAgICAgICAgICAgICAgd2hpY2ggbWF5IHJl c3VsdCBpbiBzdWJvcHRpbWFsIGRlZmF1bHQgc2V0dGluZ3MgKHRoaXMgaXMKKysgKiAgICAgICAg ICAgICAgaW1wb3J0YW50IG1haW5seSBmb3IgZW5jb2RlcnMsIGUuZy4gbGlieDI2NCkuCisrICoK KysgKiBAcmV0dXJuIEFuIEFWQ29kZWNDb250ZXh0IGZpbGxlZCB3aXRoIGRlZmF1bHQgdmFsdWVz IG9yIE5VTEwgb24gZmFpbHVyZS4KKysgKi8KKytBVkNvZGVjQ29udGV4dCAqYXZjb2RlY19hbGxv Y19jb250ZXh0Myhjb25zdCBBVkNvZGVjICpjb2RlYyk7CisrCisrLyoqCisrICogRnJlZSB0aGUg Y29kZWMgY29udGV4dCBhbmQgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIHdyaXRl IE5VTEwgdG8KKysgKiB0aGUgcHJvdmlkZWQgcG9pbnRlci4KKysgKi8KKyt2b2lkIGF2Y29kZWNf ZnJlZV9jb250ZXh0KEFWQ29kZWNDb250ZXh0ICoqYXZjdHgpOworKworKy8qKgorKyAqIEdldCB0 aGUgQVZDbGFzcyBmb3IgQVZDb2RlY0NvbnRleHQuIEl0IGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0 aW9uIHdpdGgKKysgKiBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIGZvciBleGFtaW5pbmcgb3B0aW9u cy4KKysgKgorKyAqIEBzZWUgYXZfb3B0X2ZpbmQoKS4KKysgKi8KKytjb25zdCBBVkNsYXNzICph dmNvZGVjX2dldF9jbGFzcyh2b2lkKTsKKysKKysvKioKKysgKiBHZXQgdGhlIEFWQ2xhc3MgZm9y IEFWU3VidGl0bGVSZWN0LiBJdCBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoCisrICog QVZfT1BUX1NFQVJDSF9GQUtFX09CSiBmb3IgZXhhbWluaW5nIG9wdGlvbnMuCisrICoKKysgKiBA c2VlIGF2X29wdF9maW5kKCkuCisrICovCisrY29uc3QgQVZDbGFzcyAqYXZjb2RlY19nZXRfc3Vi dGl0bGVfcmVjdF9jbGFzcyh2b2lkKTsKKysKKysvKioKKysgKiBGaWxsIHRoZSBwYXJhbWV0ZXJz IHN0cnVjdCBiYXNlZCBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIHN1cHBsaWVkIGNvZGVjCisrICog Y29udGV4dC4gQW55IGFsbG9jYXRlZCBmaWVsZHMgaW4gcGFyIGFyZSBmcmVlZCBhbmQgcmVwbGFj ZWQgd2l0aCBkdXBsaWNhdGVzCisrICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIGluIGNv ZGVjLgorKyAqCisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJP UiBjb2RlIG9uIGZhaWx1cmUKKysgKgorKyAqIEByZWxhdGVzIEFWQ29kZWNQYXJhbWV0ZXJzCisr ICovCisraW50IGF2Y29kZWNfcGFyYW1ldGVyc19mcm9tX2NvbnRleHQoc3RydWN0IEFWQ29kZWNQ YXJhbWV0ZXJzICpwYXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQVZDb2RlY0NvbnRleHQgKmNvZGVjKTsKKysKKysvKioKKysgKiBGaWxsIHRoZSBjb2RlYyBj b250ZXh0IGJhc2VkIG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc3VwcGxpZWQgY29kZWMKKysgKiBw YXJhbWV0ZXJzLiBBbnkgYWxsb2NhdGVkIGZpZWxkcyBpbiBjb2RlYyB0aGF0IGhhdmUgYSBjb3Jy ZXNwb25kaW5nIGZpZWxkIGluCisrICogcGFyIGFyZSBmcmVlZCBhbmQgcmVwbGFjZWQgd2l0aCBk dXBsaWNhdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIHBhci4KKysgKiBGaWVsZHMg aW4gY29kZWMgdGhhdCBkbyBub3QgaGF2ZSBhIGNvdW50ZXJwYXJ0IGluIHBhciBhcmUgbm90IHRv dWNoZWQuCisrICoKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVS Uk9SIGNvZGUgb24gZmFpbHVyZS4KKysgKgorKyAqIEByZWxhdGVzIEFWQ29kZWNQYXJhbWV0ZXJz CisrICovCisraW50IGF2Y29kZWNfcGFyYW1ldGVyc190b19jb250ZXh0KEFWQ29kZWNDb250ZXh0 ICpjb2RlYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIpOworKworKy8qKgorKyAqIEluaXRpYWxpemUgdGhlIEFW Q29kZWNDb250ZXh0IHRvIHVzZSB0aGUgZ2l2ZW4gQVZDb2RlYy4gUHJpb3IgdG8gdXNpbmcgdGhp cworKyAqIGZ1bmN0aW9uIHRoZSBjb250ZXh0IGhhcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBhdmNv ZGVjX2FsbG9jX2NvbnRleHQzKCkuCisrICoKKysgKiBUaGUgZnVuY3Rpb25zIGF2Y29kZWNfZmlu ZF9kZWNvZGVyX2J5X25hbWUoKSwgYXZjb2RlY19maW5kX2VuY29kZXJfYnlfbmFtZSgpLAorKyAq IGF2Y29kZWNfZmluZF9kZWNvZGVyKCkgYW5kIGF2Y29kZWNfZmluZF9lbmNvZGVyKCkgcHJvdmlk ZSBhbiBlYXN5IHdheSBmb3IKKysgKiByZXRyaWV2aW5nIGEgY29kZWMuCisrICoKKysgKiBEZXBl bmRpbmcgb24gdGhlIGNvZGVjLCB5b3UgbWlnaHQgbmVlZCB0byBzZXQgb3B0aW9ucyBpbiB0aGUg Y29kZWMgY29udGV4dAorKyAqIGFsc28gZm9yIGRlY29kaW5nIChlLmcuIHdpZHRoLCBoZWlnaHQs IG9yIHRoZSBwaXhlbCBvciBhdWRpbyBzYW1wbGUgZm9ybWF0IGluCisrICogdGhlIGNhc2UgdGhl IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJpdHN0cmVhbSwgYXMgd2hlbiBk ZWNvZGluZworKyAqIHJhdyBhdWRpbyBvciB2aWRlbykuCisrICoKKysgKiBPcHRpb25zIGluIHRo ZSBjb2RlYyBjb250ZXh0IGNhbiBiZSBzZXQgZWl0aGVyIGJ5IHNldHRpbmcgdGhlbSBpbiB0aGUg b3B0aW9ucworKyAqIEFWRGljdGlvbmFyeSwgb3IgYnkgc2V0dGluZyB0aGUgdmFsdWVzIGluIHRo ZSBjb250ZXh0IGl0c2VsZiwgZGlyZWN0bHkgb3IgYnkKKysgKiB1c2luZyB0aGUgYXZfb3B0X3Nl dCgpIEFQSSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKyAqCisrICogRXhhbXBsZToK KysgKiBAY29kZQorKyAqIGF2X2RpY3Rfc2V0KCZvcHRzLCAiYiIsICIyLjVNIiwgMCk7CisrICog Y29kZWMgPSBhdmNvZGVjX2ZpbmRfZGVjb2RlcihBVl9DT0RFQ19JRF9IMjY0KTsKKysgKiBpZiAo IWNvZGVjKQorKyAqICAgICBleGl0KDEpOworKyAqCisrICogY29udGV4dCA9IGF2Y29kZWNfYWxs b2NfY29udGV4dDMoY29kZWMpOworKyAqCisrICogaWYgKGF2Y29kZWNfb3BlbjIoY29udGV4dCwg Y29kZWMsIG9wdHMpIDwgMCkKKysgKiAgICAgZXhpdCgxKTsKKysgKiBAZW5kY29kZQorKyAqCisr ICogSW4gdGhlIGNhc2UgQVZDb2RlY1BhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSAoZS5nLiB3aGVu IGRlbXV4aW5nIGEgc3RyZWFtCisrICogdXNpbmcgbGliYXZmb3JtYXQsIGFuZCBhY2Nlc3Npbmcg dGhlIEFWU3RyZWFtIGNvbnRhaW5lZCBpbiB0aGUgZGVtdXhlciksIHRoZQorKyAqIGNvZGVjIHBh cmFtZXRlcnMgY2FuIGJlIGNvcGllZCB0byB0aGUgY29kZWMgY29udGV4dCB1c2luZworKyAqIGF2 Y29kZWNfcGFyYW1ldGVyc190b19jb250ZXh0KCksIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBs ZToKKysgKgorKyAqIEBjb2RlCisrICogQVZTdHJlYW0gKnN0cmVhbSA9IC4uLjsKKysgKiBjb250 ZXh0ID0gYXZjb2RlY19hbGxvY19jb250ZXh0Myhjb2RlYyk7CisrICogaWYgKGF2Y29kZWNfcGFy YW1ldGVyc190b19jb250ZXh0KGNvbnRleHQsIHN0cmVhbS0+Y29kZWNwYXIpIDwgMCkKKysgKiAg ICAgZXhpdCgxKTsKKysgKiBpZiAoYXZjb2RlY19vcGVuMihjb250ZXh0LCBjb2RlYywgTlVMTCkg PCAwKQorKyAqICAgICBleGl0KDEpOworKyAqIEBlbmRjb2RlCisrICoKKysgKiBAbm90ZSBBbHdh eXMgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSB1c2luZyBkZWNvZGluZyByb3V0aW5lcyAoc3Vj aCBhcworKyAqIEByZWYgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkpLgorKyAqCisrICogQHBhcmFt IGF2Y3R4IFRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUuCisrICogQHBhcmFtIGNvZGVjIFRoZSBj b2RlYyB0byBvcGVuIHRoaXMgY29udGV4dCBmb3IuIElmIGEgbm9uLU5VTEwgY29kZWMgaGFzIGJl ZW4KKysgKiAgICAgICAgICAgICAgcHJldmlvdXNseSBwYXNzZWQgdG8gYXZjb2RlY19hbGxvY19j b250ZXh0MygpIG9yCisrICogICAgICAgICAgICAgIGZvciB0aGlzIGNvbnRleHQsIHRoZW4gdGhp cyBwYXJhbWV0ZXIgTVVTVCBiZSBlaXRoZXIgTlVMTCBvcgorKyAqICAgICAgICAgICAgICBlcXVh bCB0byB0aGUgcHJldmlvdXNseSBwYXNzZWQgY29kZWMuCisrICogQHBhcmFtIG9wdGlvbnMgQSBk aWN0aW9uYXJ5IGZpbGxlZCB3aXRoIEFWQ29kZWNDb250ZXh0IGFuZCBjb2RlYy1wcml2YXRlCisr ICogICAgICAgICAgICAgICAgb3B0aW9ucywgd2hpY2ggYXJlIHNldCBvbiB0b3Agb2YgdGhlIG9w dGlvbnMgYWxyZWFkeSBzZXQgaW4KKysgKiAgICAgICAgICAgICAgICBhdmN0eCwgY2FuIGJlIE5V TEwuIE9uIHJldHVybiB0aGlzIG9iamVjdCB3aWxsIGJlIGZpbGxlZCB3aXRoCisrICogICAgICAg ICAgICAgICAgb3B0aW9ucyB0aGF0IHdlcmUgbm90IGZvdW5kIGluIHRoZSBhdmN0eCBjb2RlYyBj b250ZXh0LgorKyAqCisrICogQHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFs dWUgb24gZXJyb3IKKysgKiBAc2VlIGF2Y29kZWNfYWxsb2NfY29udGV4dDMoKSwgYXZjb2RlY19m aW5kX2RlY29kZXIoKSwgYXZjb2RlY19maW5kX2VuY29kZXIoKSwKKysgKiAgICAgIGF2X2RpY3Rf c2V0KCksIGF2X29wdF9zZXQoKSwgYXZfb3B0X2ZpbmQoKSwgYXZjb2RlY19wYXJhbWV0ZXJzX3Rv X2NvbnRleHQoKQorKyAqLworK2ludCBhdmNvZGVjX29wZW4yKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgY29uc3QgQVZDb2RlYyAqY29kZWMsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOworKworKy8q KgorKyAqIEZyZWUgYWxsIGFsbG9jYXRlZCBkYXRhIGluIHRoZSBnaXZlbiBzdWJ0aXRsZSBzdHJ1 Y3QuCisrICoKKysgKiBAcGFyYW0gc3ViIEFWU3VidGl0bGUgdG8gZnJlZS4KKysgKi8KKyt2b2lk IGF2c3VidGl0bGVfZnJlZShBVlN1YnRpdGxlICpzdWIpOworKworKy8qKgorKyAqIEB9CisrICov CisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2Y19kZWNvZGluZworKyAqIEB7CisrICovCisr CisrLyoqCisrICogVGhlIGRlZmF1bHQgY2FsbGJhY2sgZm9yIEFWQ29kZWNDb250ZXh0LmdldF9i dWZmZXIyKCkuIEl0IGlzIG1hZGUgcHVibGljIHNvCisrICogaXQgY2FuIGJlIGNhbGxlZCBieSBj dXN0b20gZ2V0X2J1ZmZlcjIoKSBpbXBsZW1lbnRhdGlvbnMgZm9yIGRlY29kZXJzIHdpdGhvdXQK KysgKiBBVl9DT0RFQ19DQVBfRFIxIHNldC4KKysgKi8KKytpbnQgYXZjb2RlY19kZWZhdWx0X2dl dF9idWZmZXIyKEFWQ29kZWNDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSwgaW50IGZsYWdzKTsK KysKKysvKioKKysgKiBUaGUgZGVmYXVsdCBjYWxsYmFjayBmb3IgQVZDb2RlY0NvbnRleHQuZ2V0 X2VuY29kZV9idWZmZXIoKS4gSXQgaXMgbWFkZSBwdWJsaWMgc28KKysgKiBpdCBjYW4gYmUgY2Fs bGVkIGJ5IGN1c3RvbSBnZXRfZW5jb2RlX2J1ZmZlcigpIGltcGxlbWVudGF0aW9ucyBmb3IgZW5j b2RlcnMgd2l0aG91dAorKyAqIEFWX0NPREVDX0NBUF9EUjEgc2V0LgorKyAqLworK2ludCBhdmNv ZGVjX2RlZmF1bHRfZ2V0X2VuY29kZV9idWZmZXIoQVZDb2RlY0NvbnRleHQgKnMsIEFWUGFja2V0 ICpwa3QsIGludCBmbGFncyk7CisrCisrLyoqCisrICogTW9kaWZ5IHdpZHRoIGFuZCBoZWlnaHQg dmFsdWVzIHNvIHRoYXQgdGhleSB3aWxsIHJlc3VsdCBpbiBhIG1lbW9yeQorKyAqIGJ1ZmZlciB0 aGF0IGlzIGFjY2VwdGFibGUgZm9yIHRoZSBjb2RlYyBpZiB5b3UgZG8gbm90IHVzZSBhbnkgaG9y aXpvbnRhbAorKyAqIHBhZGRpbmcuCisrICoKKysgKiBNYXkgb25seSBiZSB1c2VkIGlmIGEgY29k ZWMgd2l0aCBBVl9DT0RFQ19DQVBfRFIxIGhhcyBiZWVuIG9wZW5lZC4KKysgKi8KKyt2b2lkIGF2 Y29kZWNfYWxpZ25fZGltZW5zaW9ucyhBVkNvZGVjQ29udGV4dCAqcywgaW50ICp3aWR0aCwgaW50 ICpoZWlnaHQpOworKworKy8qKgorKyAqIE1vZGlmeSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBz byB0aGF0IHRoZXkgd2lsbCByZXN1bHQgaW4gYSBtZW1vcnkKKysgKiBidWZmZXIgdGhhdCBpcyBh Y2NlcHRhYmxlIGZvciB0aGUgY29kZWMgaWYgeW91IGFsc28gZW5zdXJlIHRoYXQgYWxsCisrICog bGluZSBzaXplcyBhcmUgYSBtdWx0aXBsZSBvZiB0aGUgcmVzcGVjdGl2ZSBsaW5lc2l6ZV9hbGln bltpXS4KKysgKgorKyAqIE1heSBvbmx5IGJlIHVzZWQgaWYgYSBjb2RlYyB3aXRoIEFWX0NPREVD X0NBUF9EUjEgaGFzIGJlZW4gb3BlbmVkLgorKyAqLworK3ZvaWQgYXZjb2RlY19hbGlnbl9kaW1l bnNpb25zMihBVkNvZGVjQ29udGV4dCAqcywgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lc2l6ZV9hbGlnbltBVl9OVU1fREFU QV9QT0lOVEVSU10pOworKworKy8qKgorKyAqIERlY29kZSBhIHN1YnRpdGxlIG1lc3NhZ2UuCisr ICogUmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSByZXR1cm4gdGhl IG51bWJlciBvZiBieXRlcyB1c2VkLgorKyAqIElmIG5vIHN1YnRpdGxlIGNvdWxkIGJlIGRlY29t cHJlc3NlZCwgZ290X3N1Yl9wdHIgaXMgemVyby4KKysgKiBPdGhlcndpc2UsIHRoZSBzdWJ0aXRs ZSBpcyBzdG9yZWQgaW4gKnN1Yi4KKysgKiBOb3RlIHRoYXQgQVZfQ09ERUNfQ0FQX0RSMSBpcyBu b3QgYXZhaWxhYmxlIGZvciBzdWJ0aXRsZSBjb2RlY3MuIFRoaXMgaXMgZm9yCisrICogc2ltcGxp Y2l0eSwgYmVjYXVzZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpcyBleHBlY3RlZCB0byBi ZSBuZWdsaWdpYmxlCisrICogYW5kIHJldXNpbmcgYSBnZXRfYnVmZmVyIHdyaXR0ZW4gZm9yIHZp ZGVvIGNvZGVjcyB3b3VsZCBwcm9iYWJseSBwZXJmb3JtIGJhZGx5CisrICogZHVlIHRvIGEgcG90 ZW50aWFsbHkgdmVyeSBkaWZmZXJlbnQgYWxsb2NhdGlvbiBwYXR0ZXJuLgorKyAqCisrICogU29t ZSBkZWNvZGVycyAodGhvc2UgbWFya2VkIHdpdGggQVZfQ09ERUNfQ0FQX0RFTEFZKSBoYXZlIGEg ZGVsYXkgYmV0d2VlbiBpbnB1dAorKyAqIGFuZCBvdXRwdXQuIFRoaXMgbWVhbnMgdGhhdCBmb3Ig c29tZSBwYWNrZXRzIHRoZXkgd2lsbCBub3QgaW1tZWRpYXRlbHkKKysgKiBwcm9kdWNlIGRlY29k ZWQgb3V0cHV0IGFuZCBuZWVkIHRvIGJlIGZsdXNoZWQgYXQgdGhlIGVuZCBvZiBkZWNvZGluZyB0 byBnZXQKKysgKiBhbGwgdGhlIGRlY29kZWQgZGF0YS4gRmx1c2hpbmcgaXMgZG9uZSBieSBjYWxs aW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBwYWNrZXRzCisrICogd2l0aCBhdnBrdC0+ZGF0YSBzZXQg dG8gTlVMTCBhbmQgYXZwa3QtPnNpemUgc2V0IHRvIDAgdW50aWwgaXQgc3RvcHMKKysgKiByZXR1 cm5pbmcgc3VidGl0bGVzLiBJdCBpcyBzYWZlIHRvIGZsdXNoIGV2ZW4gdGhvc2UgZGVjb2RlcnMg dGhhdCBhcmUgbm90CisrICogbWFya2VkIHdpdGggQVZfQ09ERUNfQ0FQX0RFTEFZLCB0aGVuIG5v IHN1YnRpdGxlcyB3aWxsIGJlIHJldHVybmVkLgorKyAqCisrICogQG5vdGUgVGhlIEFWQ29kZWND b250ZXh0IE1VU1QgaGF2ZSBiZWVuIG9wZW5lZCB3aXRoIEByZWYgYXZjb2RlY19vcGVuMigpCisr ICogYmVmb3JlIHBhY2tldHMgbWF5IGJlIGZlZCB0byB0aGUgZGVjb2Rlci4KKysgKgorKyAqIEBw YXJhbSBhdmN0eCB0aGUgY29kZWMgY29udGV4dAorKyAqIEBwYXJhbVtvdXRdIHN1YiBUaGUgcHJl YWxsb2NhdGVkIEFWU3VidGl0bGUgaW4gd2hpY2ggdGhlIGRlY29kZWQgc3VidGl0bGUgd2lsbCBi ZSBzdG9yZWQsCisrICogICAgICAgICAgICAgICAgIG11c3QgYmUgZnJlZWQgd2l0aCBhdnN1YnRp dGxlX2ZyZWUgaWYgKmdvdF9zdWJfcHRyIGlzIHNldC4KKysgKiBAcGFyYW1baW4sb3V0XSBnb3Rf c3ViX3B0ciBaZXJvIGlmIG5vIHN1YnRpdGxlIGNvdWxkIGJlIGRlY29tcHJlc3NlZCwgb3RoZXJ3 aXNlLCBpdCBpcyBub256ZXJvLgorKyAqIEBwYXJhbVtpbl0gYXZwa3QgVGhlIGlucHV0IEFWUGFj a2V0IGNvbnRhaW5pbmcgdGhlIGlucHV0IGJ1ZmZlci4KKysgKi8KKytpbnQgYXZjb2RlY19kZWNv ZGVfc3VidGl0bGUyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZTdWJ0aXRsZSAqc3ViLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3Rfc3ViX3B0ciwgY29uc3QgQVZQYWNr ZXQgKmF2cGt0KTsKKysKKysvKioKKysgKiBTdXBwbHkgcmF3IHBhY2tldCBkYXRhIGFzIGlucHV0 IHRvIGEgZGVjb2Rlci4KKysgKgorKyAqIEludGVybmFsbHksIHRoaXMgY2FsbCB3aWxsIGNvcHkg cmVsZXZhbnQgQVZDb2RlY0NvbnRleHQgZmllbGRzLCB3aGljaCBjYW4KKysgKiBpbmZsdWVuY2Ug ZGVjb2RpbmcgcGVyLXBhY2tldCwgYW5kIGFwcGx5IHRoZW0gd2hlbiB0aGUgcGFja2V0IGlzIGFj dHVhbGx5CisrICogZGVjb2RlZC4gKEZvciBleGFtcGxlIEFWQ29kZWNDb250ZXh0LnNraXBfZnJh bWUsIHdoaWNoIG1pZ2h0IGRpcmVjdCB0aGUKKysgKiBkZWNvZGVyIHRvIGRyb3AgdGhlIGZyYW1l IGNvbnRhaW5lZCBieSB0aGUgcGFja2V0IHNlbnQgd2l0aCB0aGlzIGZ1bmN0aW9uLikKKysgKgor KyAqIEB3YXJuaW5nIFRoZSBpbnB1dCBidWZmZXIsIGF2cGt0LT5kYXRhIG11c3QgYmUgQVZfSU5Q VVRfQlVGRkVSX1BBRERJTkdfU0laRQorKyAqICAgICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1 YWwgcmVhZCBieXRlcyBiZWNhdXNlIHNvbWUgb3B0aW1pemVkIGJpdHN0cmVhbQorKyAqICAgICAg ICAgIHJlYWRlcnMgcmVhZCAzMiBvciA2NCBiaXRzIGF0IG9uY2UgYW5kIGNvdWxkIHJlYWQgb3Zl ciB0aGUgZW5kLgorKyAqCisrICogQG5vdGUgVGhlIEFWQ29kZWNDb250ZXh0IE1VU1QgaGF2ZSBi ZWVuIG9wZW5lZCB3aXRoIEByZWYgYXZjb2RlY19vcGVuMigpCisrICogICAgICAgYmVmb3JlIHBh Y2tldHMgbWF5IGJlIGZlZCB0byB0aGUgZGVjb2Rlci4KKysgKgorKyAqIEBwYXJhbSBhdmN0eCBj b2RlYyBjb250ZXh0CisrICogQHBhcmFtW2luXSBhdnBrdCBUaGUgaW5wdXQgQVZQYWNrZXQuIFVz dWFsbHksIHRoaXMgd2lsbCBiZSBhIHNpbmdsZSB2aWRlbworKyAqICAgICAgICAgICAgICAgICAg ZnJhbWUsIG9yIHNldmVyYWwgY29tcGxldGUgYXVkaW8gZnJhbWVzLgorKyAqICAgICAgICAgICAg ICAgICAgT3duZXJzaGlwIG9mIHRoZSBwYWNrZXQgcmVtYWlucyB3aXRoIHRoZSBjYWxsZXIsIGFu ZCB0aGUKKysgKiAgICAgICAgICAgICAgICAgIGRlY29kZXIgd2lsbCBub3Qgd3JpdGUgdG8gdGhl IHBhY2tldC4gVGhlIGRlY29kZXIgbWF5IGNyZWF0ZQorKyAqICAgICAgICAgICAgICAgICAgYSBy ZWZlcmVuY2UgdG8gdGhlIHBhY2tldCBkYXRhIChvciBjb3B5IGl0IGlmIHRoZSBwYWNrZXQgaXMK KysgKiAgICAgICAgICAgICAgICAgIG5vdCByZWZlcmVuY2UtY291bnRlZCkuCisrICogICAgICAg ICAgICAgICAgICBVbmxpa2Ugd2l0aCBvbGRlciBBUElzLCB0aGUgcGFja2V0IGlzIGFsd2F5cyBm dWxseSBjb25zdW1lZCwKKysgKiAgICAgICAgICAgICAgICAgIGFuZCBpZiBpdCBjb250YWlucyBt dWx0aXBsZSBmcmFtZXMgKGUuZy4gc29tZSBhdWRpbyBjb2RlY3MpLAorKyAqICAgICAgICAgICAg ICAgICAgd2lsbCByZXF1aXJlIHlvdSB0byBjYWxsIGF2Y29kZWNfcmVjZWl2ZV9mcmFtZSgpIG11 bHRpcGxlCisrICogICAgICAgICAgICAgICAgICB0aW1lcyBhZnRlcndhcmRzIGJlZm9yZSB5b3Ug Y2FuIHNlbmQgYSBuZXcgcGFja2V0LgorKyAqICAgICAgICAgICAgICAgICAgSXQgY2FuIGJlIE5V TEwgKG9yIGFuIEFWUGFja2V0IHdpdGggZGF0YSBzZXQgdG8gTlVMTCBhbmQKKysgKiAgICAgICAg ICAgICAgICAgIHNpemUgc2V0IHRvIDApOyBpbiB0aGlzIGNhc2UsIGl0IGlzIGNvbnNpZGVyZWQg YSBmbHVzaAorKyAqICAgICAgICAgICAgICAgICAgcGFja2V0LCB3aGljaCBzaWduYWxzIHRoZSBl bmQgb2YgdGhlIHN0cmVhbS4gU2VuZGluZyB0aGUKKysgKiAgICAgICAgICAgICAgICAgIGZpcnN0 IGZsdXNoIHBhY2tldCB3aWxsIHJldHVybiBzdWNjZXNzLiBTdWJzZXF1ZW50IG9uZXMgYXJlCisr ICogICAgICAgICAgICAgICAgICB1bm5lY2Vzc2FyeSBhbmQgd2lsbCByZXR1cm4gQVZFUlJPUl9F T0YuIElmIHRoZSBkZWNvZGVyCisrICogICAgICAgICAgICAgICAgICBzdGlsbCBoYXMgZnJhbWVz IGJ1ZmZlcmVkLCBpdCB3aWxsIHJldHVybiB0aGVtIGFmdGVyIHNlbmRpbmcKKysgKiAgICAgICAg ICAgICAgICAgIGEgZmx1c2ggcGFja2V0LgorKyAqCisrICogQHJldHZhbCAwICAgICAgICAgICAg ICAgICBzdWNjZXNzCisrICogQHJldHZhbCBBVkVSUk9SKEVBR0FJTikgICBpbnB1dCBpcyBub3Qg YWNjZXB0ZWQgaW4gdGhlIGN1cnJlbnQgc3RhdGUgLSB1c2VyCisrICogICAgICAgICAgICAgICAg ICAgICAgICAgICBtdXN0IHJlYWQgb3V0cHV0IHdpdGggYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkg KG9uY2UKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBvdXRwdXQgaXMgcmVhZCwg dGhlIHBhY2tldCBzaG91bGQgYmUgcmVzZW50LAorKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIHRoZSBjYWxsIHdpbGwgbm90IGZhaWwgd2l0aCBFQUdBSU4pLgorKyAqIEByZXR2YWwg QVZFUlJPUl9FT0YgICAgICAgdGhlIGRlY29kZXIgaGFzIGJlZW4gZmx1c2hlZCwgYW5kIG5vIG5l dyBwYWNrZXRzIGNhbiBiZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCB0byBp dCAoYWxzbyByZXR1cm5lZCBpZiBtb3JlIHRoYW4gMSBmbHVzaAorKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2V0IGlzIHNlbnQpCisrICogQHJldHZhbCBBVkVSUk9SKEVJTlZBTCkg ICBjb2RlYyBub3Qgb3BlbmVkLCBpdCBpcyBhbiBlbmNvZGVyLCBvciByZXF1aXJlcyBmbHVzaAor KyAqIEByZXR2YWwgQVZFUlJPUihFTk9NRU0pICAgZmFpbGVkIHRvIGFkZCBwYWNrZXQgdG8gaW50 ZXJuYWwgcXVldWUsIG9yIHNpbWlsYXIKKysgKiBAcmV0dmFsICJhbm90aGVyIG5lZ2F0aXZlIGVy cm9yIGNvZGUiIGxlZ2l0aW1hdGUgZGVjb2RpbmcgZXJyb3JzCisrICovCisraW50IGF2Y29kZWNf c2VuZF9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBBVlBhY2tldCAqYXZwa3Qp OworKworKy8qKgorKyAqIFJldHVybiBkZWNvZGVkIG91dHB1dCBkYXRhIGZyb20gYSBkZWNvZGVy IG9yIGVuY29kZXIgKHdoZW4gdGhlCisrICogQHJlZiBBVl9DT0RFQ19GTEFHX1JFQ09OX0ZSQU1F IGZsYWcgaXMgdXNlZCkuCisrICoKKysgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAorKyAq IEBwYXJhbSBmcmFtZSBUaGlzIHdpbGwgYmUgc2V0IHRvIGEgcmVmZXJlbmNlLWNvdW50ZWQgdmlk ZW8gb3IgYXVkaW8KKysgKiAgICAgICAgICAgICAgZnJhbWUgKGRlcGVuZGluZyBvbiB0aGUgZGVj b2RlciB0eXBlKSBhbGxvY2F0ZWQgYnkgdGhlCisrICogICAgICAgICAgICAgIGNvZGVjLiBOb3Rl IHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGNhbGwKKysgKiAgICAgICAgICAgICAgYXZf ZnJhbWVfdW5yZWYoZnJhbWUpIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgorKyAqIEBwYXJh bSBmbGFncyBDb21iaW5hdGlvbiBvZiBBVl9DT0RFQ19SRUNFSVZFX0ZSQU1FX0ZMQUdfKiBmbGFn cy4KKysgKgorKyAqIEByZXR2YWwgMCAgICAgICAgICAgICAgICBzdWNjZXNzLCBhIGZyYW1lIHdh cyByZXR1cm5lZAorKyAqIEByZXR2YWwgQVZFUlJPUihFQUdBSU4pICBvdXRwdXQgaXMgbm90IGF2 YWlsYWJsZSBpbiB0aGlzIHN0YXRlIC0gdXNlciBtdXN0CisrICogICAgICAgICAgICAgICAgICAg ICAgICAgIHRyeSB0byBzZW5kIG5ldyBpbnB1dAorKyAqIEByZXR2YWwgQVZFUlJPUl9FT0YgICAg ICB0aGUgY29kZWMgaGFzIGJlZW4gZnVsbHkgZmx1c2hlZCwgYW5kIHRoZXJlIHdpbGwgYmUKKysg KiAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gbW9yZSBvdXRwdXQgZnJhbWVzCisrICogQHJl dHZhbCBBVkVSUk9SKEVJTlZBTCkgIGNvZGVjIG5vdCBvcGVuZWQsIG9yIGl0IGlzIGFuIGVuY29k ZXIgd2l0aG91dCB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBBVl9DT0RF Q19GTEFHX1JFQ09OX0ZSQU1FIGZsYWcgZW5hYmxlZAorKyAqIEByZXR2YWwgIm90aGVyIG5lZ2F0 aXZlIGVycm9yIGNvZGUiIGxlZ2l0aW1hdGUgZGVjb2RpbmcgZXJyb3JzCisrICovCisraW50IGF2 Y29kZWNfcmVjZWl2ZV9mcmFtZV9mbGFncyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUg KmZyYW1lLCB1bnNpZ25lZCBmbGFncyk7CisrCisrLyoqCisrICogQWxpYXMgZm9yIGBhdmNvZGVj X3JlY2VpdmVfZnJhbWVfZmxhZ3MoYXZjdHgsIGZyYW1lLCAwKWAuCisrICovCisraW50IGF2Y29k ZWNfcmVjZWl2ZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1lKTsK KysKKysvKioKKysgKiBTdXBwbHkgYSByYXcgdmlkZW8gb3IgYXVkaW8gZnJhbWUgdG8gdGhlIGVu Y29kZXIuIFVzZSBhdmNvZGVjX3JlY2VpdmVfcGFja2V0KCkKKysgKiB0byByZXRyaWV2ZSBidWZm ZXJlZCBvdXRwdXQgcGFja2V0cy4KKysgKgorKyAqIEBwYXJhbSBhdmN0eCAgICAgY29kZWMgY29u dGV4dAorKyAqIEBwYXJhbVtpbl0gZnJhbWUgQVZGcmFtZSBjb250YWluaW5nIHRoZSByYXcgYXVk aW8gb3IgdmlkZW8gZnJhbWUgdG8gYmUgZW5jb2RlZC4KKysgKiAgICAgICAgICAgICAgICAgIE93 bmVyc2hpcCBvZiB0aGUgZnJhbWUgcmVtYWlucyB3aXRoIHRoZSBjYWxsZXIsIGFuZCB0aGUKKysg KiAgICAgICAgICAgICAgICAgIGVuY29kZXIgd2lsbCBub3Qgd3JpdGUgdG8gdGhlIGZyYW1lLiBU aGUgZW5jb2RlciBtYXkgY3JlYXRlCisrICogICAgICAgICAgICAgICAgICBhIHJlZmVyZW5jZSB0 byB0aGUgZnJhbWUgZGF0YSAob3IgY29weSBpdCBpZiB0aGUgZnJhbWUgaXMKKysgKiAgICAgICAg ICAgICAgICAgIG5vdCByZWZlcmVuY2UtY291bnRlZCkuCisrICogICAgICAgICAgICAgICAgICBJ dCBjYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBjb25zaWRlcmVkIGEgZmx1c2gKKysg KiAgICAgICAgICAgICAgICAgIHBhY2tldC4gIFRoaXMgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBz dHJlYW0uIElmIHRoZSBlbmNvZGVyCisrICogICAgICAgICAgICAgICAgICBzdGlsbCBoYXMgcGFj a2V0cyBidWZmZXJlZCwgaXQgd2lsbCByZXR1cm4gdGhlbSBhZnRlciB0aGlzCisrICogICAgICAg ICAgICAgICAgICBjYWxsLiBPbmNlIGZsdXNoaW5nIG1vZGUgaGFzIGJlZW4gZW50ZXJlZCwgYWRk aXRpb25hbCBmbHVzaAorKyAqICAgICAgICAgICAgICAgICAgcGFja2V0cyBhcmUgaWdub3JlZCwg YW5kIHNlbmRpbmcgZnJhbWVzIHdpbGwgcmV0dXJuCisrICogICAgICAgICAgICAgICAgICBBVkVS Uk9SX0VPRi4KKysgKgorKyAqICAgICAgICAgICAgICAgICAgRm9yIGF1ZGlvOgorKyAqICAgICAg ICAgICAgICAgICAgSWYgQVZfQ09ERUNfQ0FQX1ZBUklBQkxFX0ZSQU1FX1NJWkUgaXMgc2V0LCB0 aGVuIGVhY2ggZnJhbWUKKysgKiAgICAgICAgICAgICAgICAgIGNhbiBoYXZlIGFueSBudW1iZXIg b2Ygc2FtcGxlcy4KKysgKiAgICAgICAgICAgICAgICAgIElmIGl0IGlzIG5vdCBzZXQsIG9yIEFW X0NPREVDX0ZMQUcyX0ZJWEVEX0ZSQU1FX1NJWkUgd2FzCisrICogICAgICAgICAgICAgICAgICBy ZXF1ZXN0ZWQsIHRoZW4gZnJhbWUtPm5iX3NhbXBsZXMgbXVzdCBiZSBlcXVhbCB0bworKyAqICAg ICAgICAgICAgICAgICAgYXZjdHgtPmZyYW1lX3NpemUgZm9yIGFsbCBmcmFtZXMgZXhjZXB0IHRo ZSBsYXN0LgorKyAqICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGZyYW1lIG1heSBiZSBzbWFs bGVyIHRoYW4gYXZjdHgtPmZyYW1lX3NpemUuCisrICogQHJldHZhbCAwICAgICAgICAgICAgICAg ICBzdWNjZXNzCisrICogQHJldHZhbCBBVkVSUk9SKEVBR0FJTikgICBpbnB1dCBpcyBub3QgYWNj ZXB0ZWQgaW4gdGhlIGN1cnJlbnQgc3RhdGUgLSB1c2VyIG11c3QKKysgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlYWQgb3V0cHV0IHdpdGggYXZjb2RlY19yZWNlaXZlX3BhY2tldCgpIChv bmNlIGFsbAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGlzIHJlYWQsIHRo ZSBwYWNrZXQgc2hvdWxkIGJlIHJlc2VudCwgYW5kIHRoZQorKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FsbCB3aWxsIG5vdCBmYWlsIHdpdGggRUFHQUlOKS4KKysgKiBAcmV0dmFsIEFW RVJST1JfRU9GICAgICAgIHRoZSBlbmNvZGVyIGhhcyBiZWVuIGZsdXNoZWQsIGFuZCBubyBuZXcg ZnJhbWVzIGNhbgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2VudCB0byBpdAor KyAqIEByZXR2YWwgQVZFUlJPUihFSU5WQUwpICAgY29kZWMgbm90IG9wZW5lZCwgaXQgaXMgYSBk ZWNvZGVyLCBvciByZXF1aXJlcyBmbHVzaAorKyAqIEByZXR2YWwgQVZFUlJPUihFTk9NRU0pICAg ZmFpbGVkIHRvIGFkZCBwYWNrZXQgdG8gaW50ZXJuYWwgcXVldWUsIG9yIHNpbWlsYXIKKysgKiBA cmV0dmFsICJhbm90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUiIGxlZ2l0aW1hdGUgZW5jb2Rpbmcg ZXJyb3JzCisrICovCisraW50IGF2Y29kZWNfc2VuZF9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZj dHgsIGNvbnN0IEFWRnJhbWUgKmZyYW1lKTsKKysKKysvKioKKysgKiBSZWFkIGVuY29kZWQgZGF0 YSBmcm9tIHRoZSBlbmNvZGVyLgorKyAqCisrICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQK KysgKiBAcGFyYW0gYXZwa3QgVGhpcyB3aWxsIGJlIHNldCB0byBhIHJlZmVyZW5jZS1jb3VudGVk IHBhY2tldCBhbGxvY2F0ZWQgYnkgdGhlCisrICogICAgICAgICAgICAgIGVuY29kZXIuIE5vdGUg dGhhdCB0aGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgY2FsbAorKyAqICAgICAgICAgICAgICBhdl9w YWNrZXRfdW5yZWYoYXZwa3QpIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgorKyAqIEByZXR2 YWwgMCAgICAgICAgICAgICAgIHN1Y2Nlc3MKKysgKiBAcmV0dmFsIEFWRVJST1IoRUFHQUlOKSBv dXRwdXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBzdGF0ZSAtIHVzZXIgbXVzdAor KyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB0byBzZW5kIGlucHV0CisrICogQHJldHZh bCBBVkVSUk9SX0VPRiAgICAgdGhlIGVuY29kZXIgaGFzIGJlZW4gZnVsbHkgZmx1c2hlZCwgYW5k IHRoZXJlIHdpbGwgYmUgbm8KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIG91dHB1 dCBwYWNrZXRzCisrICogQHJldHZhbCBBVkVSUk9SKEVJTlZBTCkgY29kZWMgbm90IG9wZW5lZCwg b3IgaXQgaXMgYSBkZWNvZGVyCisrICogQHJldHZhbCAiYW5vdGhlciBuZWdhdGl2ZSBlcnJvciBj b2RlIiBsZWdpdGltYXRlIGVuY29kaW5nIGVycm9ycworKyAqLworK2ludCBhdmNvZGVjX3JlY2Vp dmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKmF2cGt0KTsKKysKKysv KioKKysgKiBDcmVhdGUgYW5kIHJldHVybiBhIEFWSFdGcmFtZXNDb250ZXh0IHdpdGggdmFsdWVz IGFkZXF1YXRlIGZvciBoYXJkd2FyZQorKyAqIGRlY29kaW5nLiBUaGlzIGlzIG1lYW50IHRvIGdl dCBjYWxsZWQgZnJvbSB0aGUgZ2V0X2Zvcm1hdCBjYWxsYmFjaywgYW5kIGlzCisrICogYSBoZWxw ZXIgZm9yIHByZXBhcmluZyBhIEFWSFdGcmFtZXNDb250ZXh0IGZvciBBVkNvZGVjQ29udGV4dC5o d19mcmFtZXNfY3R4LgorKyAqIFRoaXMgQVBJIGlzIGZvciBkZWNvZGluZyB3aXRoIGNlcnRhaW4g aGFyZHdhcmUgYWNjZWxlcmF0aW9uIG1vZGVzL0FQSXMgb25seS4KKysgKgorKyAqIFRoZSByZXR1 cm5lZCBBVkhXRnJhbWVzQ29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoZSBjYWxsZXIgbXVz dCBkbyB0aGlzCisrICogd2l0aCBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisrICoKKysgKiBDYWxs aW5nIHRoaXMgZnVuY3Rpb24gaXMgbm90IGEgcmVxdWlyZW1lbnQsIGJ1dCBtYWtlcyBpdCBzaW1w bGVyIHRvIGF2b2lkCisrICogY29kZWMgb3IgaGFyZHdhcmUgQVBJIHNwZWNpZmljIGRldGFpbHMg d2hlbiBtYW51YWxseSBhbGxvY2F0aW5nIGZyYW1lcy4KKysgKgorKyAqIEFsdGVybmF0aXZlbHkg dG8gdGhpcywgYW4gQVBJIHVzZXIgY2FuIHNldCBBVkNvZGVjQ29udGV4dC5od19kZXZpY2VfY3R4 LAorKyAqIHdoaWNoIHNldHMgdXAgQVZDb2RlY0NvbnRleHQuaHdfZnJhbWVzX2N0eCBmdWxseSBh dXRvbWF0aWNhbGx5LCBhbmQgbWFrZXMKKysgKiBpdCB1bm5lY2Vzc2FyeSB0byBjYWxsIHRoaXMg ZnVuY3Rpb24gb3IgaGF2aW5nIHRvIGNhcmUgYWJvdXQKKysgKiBBVkhXRnJhbWVzQ29udGV4dCBp bml0aWFsaXphdGlvbiBhdCBhbGwuCisrICoKKysgKiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcmVx dWlyZW1lbnRzIGZvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb246CisrICoKKysgKiAtIEl0IG11c3Qg YmUgY2FsbGVkIGZyb20gZ2V0X2Zvcm1hdCB3aXRoIHRoZSBzYW1lIGF2Y3R4IHBhcmFtZXRlciB0 aGF0IHdhcworKyAqICAgcGFzc2VkIHRvIGdldF9mb3JtYXQuIENhbGxpbmcgaXQgb3V0c2lkZSBv ZiBnZXRfZm9ybWF0IGlzIG5vdCBhbGxvd2VkLCBhbmQKKysgKiAgIGNhbiB0cmlnZ2VyIHVuZGVm aW5lZCBiZWhhdmlvci4KKysgKiAtIFRoZSBmdW5jdGlvbiBpcyBub3QgYWx3YXlzIHN1cHBvcnRl ZCAoc2VlIGRlc2NyaXB0aW9uIG9mIHJldHVybiB2YWx1ZXMpLgorKyAqICAgRXZlbiBpZiB0aGlz IGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCBod2FjY2VsIGluaXRpYWxpemF0aW9uIGNv dWxkCisrICogICBmYWlsIGxhdGVyLiAoVGhlIGRlZ3JlZSB0byB3aGljaCBpbXBsZW1lbnRhdGlv bnMgY2hlY2sgd2hldGhlciB0aGUgc3RyZWFtCisrICogICBpcyBhY3R1YWxseSBzdXBwb3J0ZWQg dmFyaWVzLiBTb21lIGRvIHRoaXMgY2hlY2sgb25seSBhZnRlciB0aGUgdXNlcidzCisrICogICBn ZXRfZm9ybWF0IGNhbGxiYWNrIHJldHVybnMuKQorKyAqIC0gVGhlIGh3X3BpeF9mbXQgbXVzdCBi ZSBvbmUgb2YgdGhlIGNob2ljZXMgc3VnZ2VzdGVkIGJ5IGdldF9mb3JtYXQuIElmIHRoZQorKyAq ICAgdXNlciBkZWNpZGVzIHRvIHVzZSBhIEFWSFdGcmFtZXNDb250ZXh0IHByZXBhcmVkIHdpdGgg dGhpcyBBUEkgZnVuY3Rpb24sCisrICogICB0aGUgdXNlciBtdXN0IHJldHVybiB0aGUgc2FtZSBo d19waXhfZm10IGZyb20gZ2V0X2Zvcm1hdC4KKysgKiAtIFRoZSBkZXZpY2VfcmVmIHBhc3NlZCB0 byB0aGlzIGZ1bmN0aW9uIG11c3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gaHdfcGl4X2ZtdC4KKysgKiAt IEFmdGVyIGNhbGxpbmcgdGhpcyBBUEkgZnVuY3Rpb24sIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9u c2liaWxpdHkgdG8KKysgKiAgIGluaXRpYWxpemUgdGhlIEFWSFdGcmFtZXNDb250ZXh0IChyZXR1 cm5lZCBieSB0aGUgb3V0X2ZyYW1lc19yZWYgcGFyYW1ldGVyKSwKKysgKiAgIGFuZCB0byBzZXQg QVZDb2RlY0NvbnRleHQuaHdfZnJhbWVzX2N0eCB0byBpdC4gSWYgZG9uZSwgdGhpcyBtdXN0IGJl IGRvbmUKKysgKiAgIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBnZXRfZm9ybWF0ICh0aGlzIGlzIGlt cGxpZWQgYnkgdGhlIG5vcm1hbAorKyAqICAgQVZDb2RlY0NvbnRleHQuaHdfZnJhbWVzX2N0eCBB UEkgcnVsZXMpLgorKyAqIC0gVGhlIEFWSFdGcmFtZXNDb250ZXh0IHBhcmFtZXRlcnMgbWF5IGNo YW5nZSBldmVyeSB0aW1lIHRpbWUgZ2V0X2Zvcm1hdCBpcworKyAqICAgY2FsbGVkLiBBbHNvLCBB VkNvZGVjQ29udGV4dC5od19mcmFtZXNfY3R4IGlzIHJlc2V0IGJlZm9yZSBnZXRfZm9ybWF0LiBT bworKyAqICAgeW91IGFyZSBpbmhlcmVudGx5IHJlcXVpcmVkIHRvIGdvIHRocm91Z2ggdGhpcyBw cm9jZXNzIGFnYWluIG9uIGV2ZXJ5CisrICogICBnZXRfZm9ybWF0IGNhbGwuCisrICogLSBJdCBp cyBwZXJmZWN0bHkgcG9zc2libGUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFs bHkgdXNpbmcKKysgKiAgIHRoZSByZXN1bHRpbmcgQVZIV0ZyYW1lc0NvbnRleHQuIE9uZSB1c2Ut Y2FzZSBtaWdodCBiZSB0cnlpbmcgdG8gcmV1c2UgYQorKyAqICAgcHJldmlvdXNseSBpbml0aWFs aXplZCBBVkhXRnJhbWVzQ29udGV4dCwgYW5kIGNhbGxpbmcgdGhpcyBBUEkgZnVuY3Rpb24KKysg KiAgIG9ubHkgdG8gdGVzdCB3aGV0aGVyIHRoZSByZXF1aXJlZCBmcmFtZSBwYXJhbWV0ZXJzIGhh dmUgY2hhbmdlZC4KKysgKiAtIEZpZWxkcyB0aGF0IHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQg dmFsdWVzIG9mIGFueSBraW5kIG11c3Qgbm90IGJlIHNldAorKyAqICAgYnkgdGhlIHVzZXIgdW5s ZXNzIHNldHRpbmcgdGhlbSBpcyBleHBsaWNpdGx5IGFsbG93ZWQgYnkgdGhlIGRvY3VtZW50YXRp b24uCisrICogICBJZiB0aGUgdXNlciBzZXRzIEFWSFdGcmFtZXNDb250ZXh0LmZyZWUgYW5kIEFW SFdGcmFtZXNDb250ZXh0LnVzZXJfb3BhcXVlLAorKyAqICAgdGhlIG5ldyBmcmVlIGNhbGxiYWNr IG11c3QgY2FsbCB0aGUgcG90ZW50aWFsbHkgc2V0IHByZXZpb3VzIGZyZWUgY2FsbGJhY2suCisr ICogICBUaGlzIEFQSSBjYWxsIG1heSBzZXQgYW55IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmaWVs ZHMsIGluY2x1ZGluZyB0aGUgZnJlZQorKyAqICAgY2FsbGJhY2suCisrICoKKysgKiBUaGUgZnVu Y3Rpb24gd2lsbCBzZXQgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBmaWVsZHMgb24gQVZIV0ZyYW1l c0NvbnRleHQKKysgKiAocG90ZW50aWFsbHkgbW9yZSwgZGVwZW5kaW5nIG9uIGh3YWNjZWwgQVBJ KToKKysgKgorKyAqIC0gQWxsIGZpZWxkcyBzZXQgYnkgYXZfaHdmcmFtZV9jdHhfYWxsb2MoKS4K KysgKiAtIFNldCB0aGUgZm9ybWF0IGZpZWxkIHRvIGh3X3BpeF9mbXQuCisrICogLSBTZXQgdGhl IHN3X2Zvcm1hdCBmaWVsZCB0byB0aGUgbW9zdCBzdWl0ZWQgYW5kIG1vc3QgdmVyc2F0aWxlIGZv cm1hdC4gKEFuCisrICogICBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBwcmVmZXIgZ2Vu ZXJpYyBmb3JtYXRzIG92ZXIgb3BhcXVlIGZvcm1hdHMKKysgKiAgIHdpdGggYXJiaXRyYXJ5IHJl c3RyaWN0aW9ucywgaWYgcG9zc2libGUuKQorKyAqIC0gU2V0IHRoZSB3aWR0aC9oZWlnaHQgZmll bGRzIHRvIHRoZSBjb2RlZCBmcmFtZSBzaXplLCByb3VuZGVkIHVwIHRvIHRoZQorKyAqICAgQVBJ LXNwZWNpZmljIG1pbmltdW0gYWxpZ25tZW50LgorKyAqIC0gT25seSBfaWZfIHRoZSBod2FjY2Vs IHJlcXVpcmVzIGEgcHJlLWFsbG9jYXRlZCBwb29sOiBzZXQgdGhlIGluaXRpYWxfcG9vbF9zaXpl CisrICogICBmaWVsZCB0byB0aGUgbnVtYmVyIG9mIG1heGltdW0gcmVmZXJlbmNlIHN1cmZhY2Vz IHBvc3NpYmxlIHdpdGggdGhlIGNvZGVjLAorKyAqICAgcGx1cyAxIHN1cmZhY2UgZm9yIHRoZSB1 c2VyIHRvIHdvcmsgKG1lYW5pbmcgdGhlIHVzZXIgY2FuIHNhZmVseSByZWZlcmVuY2UKKysgKiAg IGF0IG1vc3QgMSBkZWNvZGVkIHN1cmZhY2UgYXQgYSB0aW1lKSwgcGx1cyBhZGRpdGlvbmFsIGJ1 ZmZlcmluZyBpbnRyb2R1Y2VkCisrICogICBieSBmcmFtZSB0aHJlYWRpbmcuIElmIHRoZSBod2Fj Y2VsIGRvZXMgbm90IHJlcXVpcmUgcHJlLWFsbG9jYXRpb24sIHRoZQorKyAqICAgZmllbGQgaXMg bGVmdCB0byAwLCBhbmQgdGhlIGRlY29kZXIgd2lsbCBhbGxvY2F0ZSBuZXcgc3VyZmFjZXMgb24g ZGVtYW5kCisrICogICBkdXJpbmcgZGVjb2RpbmcuCisrICogLSBQb3NzaWJseSBBVkhXRnJhbWVz Q29udGV4dC5od2N0eCBmaWVsZHMsIGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZworKyAqICAg aGFyZHdhcmUgQVBJLgorKyAqCisrICogRXNzZW50aWFsbHksIG91dF9mcmFtZXNfcmVmIHJldHVy bnMgdGhlIHNhbWUgYXMgYXZfaHdmcmFtZV9jdHhfYWxsb2MoKSwgYnV0CisrICogd2l0aCBiYXNp YyBmcmFtZSBwYXJhbWV0ZXJzIHNldC4KKysgKgorKyAqIFRoZSBmdW5jdGlvbiBpcyBzdGF0ZWxl c3MsIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlIEFWQ29kZWNDb250ZXh0IG9yIHRoZQorKyAqIGRl dmljZV9yZWYgQVZIV0RldmljZUNvbnRleHQuCisrICoKKysgKiBAcGFyYW0gYXZjdHggVGhlIGNv bnRleHQgd2hpY2ggaXMgY3VycmVudGx5IGNhbGxpbmcgZ2V0X2Zvcm1hdCwgYW5kIHdoaWNoCisr ICogICAgICAgICAgICAgIGltcGxpY2l0bHkgY29udGFpbnMgYWxsIHN0YXRlIG5lZWRlZCBmb3Ig ZmlsbGluZyB0aGUgcmV0dXJuZWQKKysgKiAgICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQg cHJvcGVybHkuCisrICogQHBhcmFtIGRldmljZV9yZWYgQSByZWZlcmVuY2UgdG8gdGhlIEFWSFdE ZXZpY2VDb250ZXh0IGRlc2NyaWJpbmcgdGhlIGRldmljZQorKyAqICAgICAgICAgICAgICAgICAg IHdoaWNoIHdpbGwgYmUgdXNlZCBieSB0aGUgaGFyZHdhcmUgZGVjb2Rlci4KKysgKiBAcGFyYW0g aHdfcGl4X2ZtdCBUaGUgaHdhY2NlbCBmb3JtYXQgeW91IGFyZSBnb2luZyB0byByZXR1cm4gZnJv bSBnZXRfZm9ybWF0LgorKyAqIEBwYXJhbSBvdXRfZnJhbWVzX3JlZiBPbiBzdWNjZXNzLCBzZXQg dG8gYSByZWZlcmVuY2UgdG8gYW4gX3VuaW5pdGlhbGl6ZWRfCisrICogICAgICAgICAgICAgICAg ICAgICAgIEFWSFdGcmFtZXNDb250ZXh0LCBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIGRldmljZV9y ZWYuCisrICogICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyB3aWxsIGJlIHNldCB0byB2YWx1 ZXMgcmVxdWlyZWQgZm9yIGRlY29kaW5nLgorKyAqICAgICAgICAgICAgICAgICAgICAgICBOb3Qg Y2hhbmdlZCBpZiBhbiBlcnJvciBpcyByZXR1cm5lZC4KKysgKiBAcmV0dXJuIHplcm8gb24gc3Vj Y2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4gVGhlIGZvbGxvd2luZyBlcnJvciBjb2Rl cworKyAqICAgICAgICAgaGF2ZSBzcGVjaWFsIHNlbWFudGljczoKKysgKiAgICAgIEFWRVJST1Io RU5PRU5UKTogdGhlIGRlY29kZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHku IFNldHVwCisrICogICAgICAgICAgICAgICAgICAgICAgIGlzIGFsd2F5cyBtYW51YWwsIG9yIGl0 IGlzIGEgZGVjb2RlciB3aGljaCBkb2VzIG5vdAorKyAqICAgICAgICAgICAgICAgICAgICAgICBz dXBwb3J0IHNldHRpbmcgQVZDb2RlY0NvbnRleHQuaHdfZnJhbWVzX2N0eCBhdCBhbGwsCisrICog ICAgICAgICAgICAgICAgICAgICAgIG9yIGl0IGlzIGEgc29mdHdhcmUgZm9ybWF0LgorKyAqICAg ICAgQVZFUlJPUihFSU5WQUwpOiBpdCBpcyBrbm93biB0aGF0IGhhcmR3YXJlIGRlY29kaW5nIGlz IG5vdCBzdXBwb3J0ZWQgZm9yCisrICogICAgICAgICAgICAgICAgICAgICAgIHRoaXMgY29uZmln dXJhdGlvbiwgb3IgdGhlIGRldmljZV9yZWYgaXMgbm90IHN1cHBvcnRlZAorKyAqICAgICAgICAg ICAgICAgICAgICAgICBmb3IgdGhlIGh3YWNjZWwgcmVmZXJlbmNlZCBieSBod19waXhfZm10Lgor KyAqLworK2ludCBhdmNvZGVjX2dldF9od19mcmFtZXNfcGFyYW1ldGVycyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQnVmZmVy UmVmICpkZXZpY2VfcmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnVtIEFWUGl4ZWxGb3JtYXQgaHdfcGl4X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVZCdWZmZXJSZWYgKipvdXRfZnJhbWVzX3JlZik7CisrCisrZW51bSBBVkNv ZGVjQ29uZmlnIHsKKysgICAgQVZfQ09ERUNfQ09ORklHX1BJWF9GT1JNQVQsICAgICAvLy88IEFW UGl4ZWxGb3JtYXQsIHRlcm1pbmF0ZWQgYnkgQVZfUElYX0ZNVF9OT05FCisrICAgIEFWX0NPREVD X0NPTkZJR19GUkFNRV9SQVRFLCAgICAgLy8vPCBBVlJhdGlvbmFsLCB0ZXJtaW5hdGVkIGJ5IHsw LCAwfQorKyAgICBBVl9DT0RFQ19DT05GSUdfU0FNUExFX1JBVEUsICAgIC8vLzwgaW50LCB0ZXJt aW5hdGVkIGJ5IDAKKysgICAgQVZfQ09ERUNfQ09ORklHX1NBTVBMRV9GT1JNQVQsICAvLy88IEFW U2FtcGxlRm9ybWF0LCB0ZXJtaW5hdGVkIGJ5IEFWX1NBTVBMRV9GTVRfTk9ORQorKyAgICBBVl9D T0RFQ19DT05GSUdfQ0hBTk5FTF9MQVlPVVQsIC8vLzwgQVZDaGFubmVsTGF5b3V0LCB0ZXJtaW5h dGVkIGJ5IHswfQorKyAgICBBVl9DT0RFQ19DT05GSUdfQ09MT1JfUkFOR0UsICAgIC8vLzwgQVZD b2xvclJhbmdlLCB0ZXJtaW5hdGVkIGJ5IEFWQ09MX1JBTkdFX1VOU1BFQ0lGSUVECisrICAgIEFW X0NPREVDX0NPTkZJR19DT0xPUl9TUEFDRSwgICAgLy8vPCBBVkNvbG9yU3BhY2UsIHRlcm1pbmF0 ZWQgYnkgQVZDT0xfU1BDX1VOU1BFQ0lGSUVECisrICAgIEFWX0NPREVDX0NPTkZJR19BTFBIQV9N T0RFLCAgICAgLy8vPCBBVkFscGhhTW9kZSwgdGVybWluYXRlZCBieSBBVkFMUEhBX01PREVfVU5T UEVDSUZJRUQKKyt9OworKworKy8qKgorKyAqIFJldHJpZXZlIGEgbGlzdCBvZiBhbGwgc3VwcG9y dGVkIHZhbHVlcyBmb3IgYSBnaXZlbiBjb25maWd1cmF0aW9uIHR5cGUuCisrICoKKysgKiBAcGFy YW0gYXZjdHggQW4gb3B0aW9uYWwgY29udGV4dCB0byB1c2UuIFZhbHVlcyBzdWNoIGFzCisrICog ICAgICAgICAgICAgIGBzdHJpY3Rfc3RkX2NvbXBsaWFuY2VgIG1heSBhZmZlY3QgdGhlIHJlc3Vs dC4gSWYgTlVMTCwKKysgKiAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQuCisr ICogQHBhcmFtIGNvZGVjIFRoZSBjb2RlYyB0byBxdWVyeSwgb3IgTlVMTCB0byB1c2UgYXZjdHgt PmNvZGVjLgorKyAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gdG8gcXVlcnkuCisr ICogQHBhcmFtIGZsYWdzIEN1cnJlbnRseSB1bnVzZWQ7IHNob3VsZCBiZSBzZXQgdG8gemVyby4K KysgKiBAcGFyYW0gb3V0X2NvbmZpZ3MgT24gc3VjY2Vzcywgc2V0IHRvIGEgbGlzdCBvZiBjb25m aWd1cmF0aW9ucywgdGVybWluYXRlZAorKyAqICAgICAgICAgICAgICAgICAgICBieSBhIGNvbmZp Zy1zcGVjaWZpYyB0ZXJtaW5hdG9yLCBvciBOVUxMIGlmIGFsbAorKyAqICAgICAgICAgICAgICAg ICAgICBwb3NzaWJsZSB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4KKysgKiBAcGFyYW0gb3V0X251bV9j b25maWdzIE9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAqb3V0X2NvbmZpZ3MsIGV4Y2x1ZGluZyB0aGUgdGVybWlu YXRvci4gT3B0aW9uYWwuCisrICovCisraW50IGF2Y29kZWNfZ2V0X3N1cHBvcnRlZF9jb25maWco Y29uc3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFWQ29kZWMgKmNvZGVjLCBlbnVtIEFWQ29kZWNDb25maWcgY29uZmlnLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjb25zdCB2 b2lkICoqb3V0X2NvbmZpZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpvdXRfbnVtX2NvbmZpZ3MpOworKworKworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZjX3Bh cnNpbmcgRnJhbWUgcGFyc2luZworKyAqIEB7CisrICovCisrCisrZW51bSBBVlBpY3R1cmVTdHJ1 Y3R1cmUgeworKyAgICBBVl9QSUNUVVJFX1NUUlVDVFVSRV9VTktOT1dOLCAgICAgIC8vLzwgdW5r bm93bgorKyAgICBBVl9QSUNUVVJFX1NUUlVDVFVSRV9UT1BfRklFTEQsICAgIC8vLzwgY29kZWQg YXMgdG9wIGZpZWxkCisrICAgIEFWX1BJQ1RVUkVfU1RSVUNUVVJFX0JPVFRPTV9GSUVMRCwgLy8v PCBjb2RlZCBhcyBib3R0b20gZmllbGQKKysgICAgQVZfUElDVFVSRV9TVFJVQ1RVUkVfRlJBTUUs ICAgICAgICAvLy88IGNvZGVkIGFzIGZyYW1lCisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBBVkNv ZGVjUGFyc2VyQ29udGV4dCB7CisrICAgIHZvaWQgKnByaXZfZGF0YTsKKysgICAgY29uc3Qgc3Ry dWN0IEFWQ29kZWNQYXJzZXIgKnBhcnNlcjsKKysgICAgaW50NjRfdCBmcmFtZV9vZmZzZXQ7IC8q IG9mZnNldCBvZiB0aGUgY3VycmVudCBmcmFtZSAqLworKyAgICBpbnQ2NF90IGN1cl9vZmZzZXQ7 IC8qIGN1cnJlbnQgb2Zmc2V0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluY3JlbWVu dGVkIGJ5IGVhY2ggYXZfcGFyc2VyX3BhcnNlKCkpICovCisrICAgIGludDY0X3QgbmV4dF9mcmFt ZV9vZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbmV4dCBmcmFtZSAqLworKyAgICAvKiB2aWRlbyBp bmZvICovCisrICAgIGludCBwaWN0X3R5cGU7IC8qIFhYWDogUHV0IGl0IGJhY2sgaW4gQVZDb2Rl Y0NvbnRleHQuICovCisrICAgIC8qKgorKyAgICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHBy b3BlciBmcmFtZSBkdXJhdGlvbiBjb21wdXRhdGlvbiBpbiBsYXZmLgorKyAgICAgKiBJdCBzaWdu YWxzLCBob3cgbXVjaCBsb25nZXIgdGhlIGZyYW1lIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGZy YW1lCisrICAgICAqIGlzIGNvbXBhcmVkIHRvIG5vcm1hbCBmcmFtZSBkdXJhdGlvbi4KKysgICAg ICoKKysgICAgICogZnJhbWVfZHVyYXRpb24gPSAoMSArIHJlcGVhdF9waWN0KSAqIHRpbWVfYmFz ZQorKyAgICAgKgorKyAgICAgKiBJdCBpcyB1c2VkIGJ5IGNvZGVjcyBsaWtlIEguMjY0IHRvIGRp c3BsYXkgdGVsZWNpbmVkIG1hdGVyaWFsLgorKyAgICAgKi8KKysgICAgaW50IHJlcGVhdF9waWN0 OyAvKiBYWFg6IFB1dCBpdCBiYWNrIGluIEFWQ29kZWNDb250ZXh0LiAqLworKyAgICBpbnQ2NF90 IHB0czsgICAgIC8qIHB0cyBvZiB0aGUgY3VycmVudCBmcmFtZSAqLworKyAgICBpbnQ2NF90IGR0 czsgICAgIC8qIGR0cyBvZiB0aGUgY3VycmVudCBmcmFtZSAqLworKworKyAgICAvKiBwcml2YXRl IGRhdGEgKi8KKysgICAgaW50NjRfdCBsYXN0X3B0czsKKysgICAgaW50NjRfdCBsYXN0X2R0czsK KysgICAgaW50IGZldGNoX3RpbWVzdGFtcDsKKysKKysjZGVmaW5lIEFWX1BBUlNFUl9QVFNfTkIg NAorKyAgICBpbnQgY3VyX2ZyYW1lX3N0YXJ0X2luZGV4OworKyAgICBpbnQ2NF90IGN1cl9mcmFt ZV9vZmZzZXRbQVZfUEFSU0VSX1BUU19OQl07CisrICAgIGludDY0X3QgY3VyX2ZyYW1lX3B0c1tB Vl9QQVJTRVJfUFRTX05CXTsKKysgICAgaW50NjRfdCBjdXJfZnJhbWVfZHRzW0FWX1BBUlNFUl9Q VFNfTkJdOworKworKyAgICBpbnQgZmxhZ3M7CisrI2RlZmluZSBQQVJTRVJfRkxBR19DT01QTEVU RV9GUkFNRVMgICAgICAgICAgIDB4MDAwMQorKyNkZWZpbmUgUEFSU0VSX0ZMQUdfT05DRSAgICAg ICAgICAgICAgICAgICAgICAweDAwMDIKKysvLy8gU2V0IGlmIHRoZSBwYXJzZXIgaGFzIGEgdmFs aWQgZmlsZSBvZmZzZXQKKysjZGVmaW5lIFBBUlNFUl9GTEFHX0ZFVENIRURfT0ZGU0VUICAgICAg ICAgICAgMHgwMDA0CisrI2RlZmluZSBQQVJTRVJfRkxBR19VU0VfQ09ERUNfVFMgICAgICAgICAg ICAgIDB4MTAwMAorKworKyAgICBpbnQ2NF90IG9mZnNldDsgICAgICAvLy88IGJ5dGUgb2Zmc2V0 IGZyb20gc3RhcnRpbmcgcGFja2V0IHN0YXJ0CisrICAgIGludDY0X3QgY3VyX2ZyYW1lX2VuZFtB Vl9QQVJTRVJfUFRTX05CXTsKKysKKysgICAgLyoqCisrICAgICAqIFNldCBieSBwYXJzZXIgdG8g MSBmb3Iga2V5IGZyYW1lcyBhbmQgMCBmb3Igbm9uLWtleSBmcmFtZXMuCisrICAgICAqIEl0IGlz IGluaXRpYWxpemVkIHRvIC0xLCBzbyBpZiB0aGUgcGFyc2VyIGRvZXNuJ3Qgc2V0IHRoaXMgZmxh ZywKKysgICAgICogb2xkLXN0eWxlIGZhbGxiYWNrIHVzaW5nIEFWX1BJQ1RVUkVfVFlQRV9JIHBp Y3R1cmUgdHlwZSBhcyBrZXkgZnJhbWVzCisrICAgICAqIHdpbGwgYmUgdXNlZC4KKysgICAgICov CisrICAgIGludCBrZXlfZnJhbWU7CisrCisrICAgIC8vIFRpbWVzdGFtcCBnZW5lcmF0aW9uIHN1 cHBvcnQ6CisrICAgIC8qKgorKyAgICAgKiBTeW5jaHJvbml6YXRpb24gcG9pbnQgZm9yIHN0YXJ0 IG9mIHRpbWVzdGFtcCBnZW5lcmF0aW9uLgorKyAgICAgKgorKyAgICAgKiBTZXQgdG8gPjAgZm9y IHN5bmMgcG9pbnQsIDAgZm9yIG5vIHN5bmMgcG9pbnQgYW5kIDwwIGZvciB1bmRlZmluZWQKKysg ICAgICogKGRlZmF1bHQpLgorKyAgICAgKgorKyAgICAgKiBGb3IgZXhhbXBsZSwgdGhpcyBjb3Jy ZXNwb25kcyB0byBwcmVzZW5jZSBvZiBILjI2NCBidWZmZXJpbmcgcGVyaW9kCisrICAgICAqIFNF SSBtZXNzYWdlLgorKyAgICAgKi8KKysgICAgaW50IGR0c19zeW5jX3BvaW50OworKworKyAgICAv KioKKysgICAgICogT2Zmc2V0IG9mIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhZ2FpbnN0IGxhc3Qg dGltZXN0YW1wIHN5bmMgcG9pbnQgaW4KKysgICAgICogdW5pdHMgb2YgQVZDb2RlY0NvbnRleHQu dGltZV9iYXNlLgorKyAgICAgKgorKyAgICAgKiBTZXQgdG8gSU5UX01JTiB3aGVuIGR0c19zeW5j X3BvaW50IHVudXNlZC4gT3RoZXJ3aXNlLCBpdCBtdXN0CisrICAgICAqIGNvbnRhaW4gYSB2YWxp ZCB0aW1lc3RhbXAgb2Zmc2V0LgorKyAgICAgKgorKyAgICAgKiBOb3RlIHRoYXQgdGhlIHRpbWVz dGFtcCBvZiBzeW5jIHBvaW50IGhhcyB1c3VhbGx5IGEgbm9uemVybworKyAgICAgKiBkdHNfcmVm X2R0c19kZWx0YSwgd2hpY2ggcmVmZXJzIHRvIHRoZSBwcmV2aW91cyBzeW5jIHBvaW50LiBPZmZz ZXQgb2YKKysgICAgICogdGhlIG5leHQgZnJhbWUgYWZ0ZXIgdGltZXN0YW1wIHN5bmMgcG9pbnQg d2lsbCBiZSB1c3VhbGx5IDEuCisrICAgICAqCisrICAgICAqIEZvciBleGFtcGxlLCB0aGlzIGNv cnJlc3BvbmRzIHRvIEguMjY0IGNwYl9yZW1vdmFsX2RlbGF5LgorKyAgICAgKi8KKysgICAgaW50 IGR0c19yZWZfZHRzX2RlbHRhOworKworKyAgICAvKioKKysgICAgICogUHJlc2VudGF0aW9uIGRl bGF5IG9mIGN1cnJlbnQgZnJhbWUgaW4gdW5pdHMgb2YgQVZDb2RlY0NvbnRleHQudGltZV9iYXNl LgorKyAgICAgKgorKyAgICAgKiBTZXQgdG8gSU5UX01JTiB3aGVuIGR0c19zeW5jX3BvaW50IHVu dXNlZC4gT3RoZXJ3aXNlLCBpdCBtdXN0CisrICAgICAqIGNvbnRhaW4gdmFsaWQgbm9uLW5lZ2F0 aXZlIHRpbWVzdGFtcCBkZWx0YSAocHJlc2VudGF0aW9uIHRpbWUgb2YgYSBmcmFtZQorKyAgICAg KiBtdXN0IG5vdCBsaWUgaW4gdGhlIHBhc3QpLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGRlbGF5 IHJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkZWNvZGluZyBhbmQgcHJlc2VudGF0 aW9uCisrICAgICAqIHRpbWUgb2YgdGhlIGZyYW1lLgorKyAgICAgKgorKyAgICAgKiBGb3IgZXhh bXBsZSwgdGhpcyBjb3JyZXNwb25kcyB0byBILjI2NCBkcGJfb3V0cHV0X2RlbGF5LgorKyAgICAg Ki8KKysgICAgaW50IHB0c19kdHNfZGVsdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBQb3NpdGlv biBvZiB0aGUgcGFja2V0IGluIGZpbGUuCisrICAgICAqCisrICAgICAqIEFuYWxvZ291cyB0byBj dXJfZnJhbWVfcHRzL2R0cworKyAgICAgKi8KKysgICAgaW50NjRfdCBjdXJfZnJhbWVfcG9zW0FW X1BBUlNFUl9QVFNfTkJdOworKworKyAgICAvKioKKysgICAgICogQnl0ZSBwb3NpdGlvbiBvZiBj dXJyZW50bHkgcGFyc2VkIGZyYW1lIGluIHN0cmVhbS4KKysgICAgICovCisrICAgIGludDY0X3Qg cG9zOworKworKyAgICAvKioKKysgICAgICogUHJldmlvdXMgZnJhbWUgYnl0ZSBwb3NpdGlvbi4K KysgICAgICovCisrICAgIGludDY0X3QgbGFzdF9wb3M7CisrCisrICAgIC8qKgorKyAgICAgKiBE dXJhdGlvbiBvZiB0aGUgY3VycmVudCBmcmFtZS4KKysgICAgICogRm9yIGF1ZGlvLCB0aGlzIGlz IGluIHVuaXRzIG9mIDEgLyBBVkNvZGVjQ29udGV4dC5zYW1wbGVfcmF0ZS4KKysgICAgICogRm9y IGFsbCBvdGhlciB0eXBlcywgdGhpcyBpcyBpbiB1bml0cyBvZiBBVkNvZGVjQ29udGV4dC50aW1l X2Jhc2UuCisrICAgICAqLworKyAgICBpbnQgZHVyYXRpb247CisrCisrICAgIGVudW0gQVZGaWVs ZE9yZGVyIGZpZWxkX29yZGVyOworKworKyAgICAvKioKKysgICAgICogSW5kaWNhdGUgd2hldGhl ciBhIHBpY3R1cmUgaXMgY29kZWQgYXMgYSBmcmFtZSwgdG9wIGZpZWxkIG9yIGJvdHRvbSBmaWVs ZC4KKysgICAgICoKKysgICAgICogRm9yIGV4YW1wbGUsIEguMjY0IGZpZWxkX3BpY19mbGFnIGVx dWFsIHRvIDAgY29ycmVzcG9uZHMgdG8KKysgICAgICogQVZfUElDVFVSRV9TVFJVQ1RVUkVfRlJB TUUuIEFuIEguMjY0IHBpY3R1cmUgd2l0aCBmaWVsZF9waWNfZmxhZworKyAgICAgKiBlcXVhbCB0 byAxIGFuZCBib3R0b21fZmllbGRfZmxhZyBlcXVhbCB0byAwIGNvcnJlc3BvbmRzIHRvCisrICAg ICAqIEFWX1BJQ1RVUkVfU1RSVUNUVVJFX1RPUF9GSUVMRC4KKysgICAgICovCisrICAgIGVudW0g QVZQaWN0dXJlU3RydWN0dXJlIHBpY3R1cmVfc3RydWN0dXJlOworKworKyAgICAvKioKKysgICAg ICogUGljdHVyZSBudW1iZXIgaW5jcmVtZW50ZWQgaW4gcHJlc2VudGF0aW9uIG9yIG91dHB1dCBv cmRlci4KKysgICAgICogVGhpcyBmaWVsZCBtYXkgYmUgcmVpbml0aWFsaXplZCBhdCB0aGUgZmly c3QgcGljdHVyZSBvZiBhIG5ldyBzZXF1ZW5jZS4KKysgICAgICoKKysgICAgICogRm9yIGV4YW1w bGUsIHRoaXMgY29ycmVzcG9uZHMgdG8gSC4yNjQgUGljT3JkZXJDbnQuCisrICAgICAqLworKyAg ICBpbnQgb3V0cHV0X3BpY3R1cmVfbnVtYmVyOworKworKyAgICAvKioKKysgICAgICogRGltZW5z aW9ucyBvZiB0aGUgZGVjb2RlZCB2aWRlbyBpbnRlbmRlZCBmb3IgcHJlc2VudGF0aW9uLgorKyAg ICAgKi8KKysgICAgaW50IHdpZHRoOworKyAgICBpbnQgaGVpZ2h0OworKworKyAgICAvKioKKysg ICAgICogRGltZW5zaW9ucyBvZiB0aGUgY29kZWQgdmlkZW8uCisrICAgICAqLworKyAgICBpbnQg Y29kZWRfd2lkdGg7CisrICAgIGludCBjb2RlZF9oZWlnaHQ7CisrCisrICAgIC8qKgorKyAgICAg KiBUaGUgZm9ybWF0IG9mIHRoZSBjb2RlZCBkYXRhLCBjb3JyZXNwb25kcyB0byBlbnVtIEFWUGl4 ZWxGb3JtYXQgZm9yIHZpZGVvCisrICAgICAqIGFuZCBmb3IgZW51bSBBVlNhbXBsZUZvcm1hdCBm b3IgYXVkaW8uCisrICAgICAqCisrICAgICAqIE5vdGUgdGhhdCBhIGRlY29kZXIgY2FuIGhhdmUg Y29uc2lkZXJhYmxlIGZyZWVkb20gaW4gaG93IGV4YWN0bHkgaXQKKysgICAgICogZGVjb2RlcyB0 aGUgZGF0YSwgc28gdGhlIGZvcm1hdCByZXBvcnRlZCBoZXJlIG1pZ2h0IGJlIGRpZmZlcmVudCBm cm9tIHRoZQorKyAgICAgKiBvbmUgcmV0dXJuZWQgYnkgYSBkZWNvZGVyLgorKyAgICAgKi8KKysg ICAgaW50IGZvcm1hdDsKKyt9IEFWQ29kZWNQYXJzZXJDb250ZXh0OworKworK3R5cGVkZWYgc3Ry dWN0IEFWQ29kZWNQYXJzZXIgeworKyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZHNbN107IC8q IHNldmVyYWwgY29kZWMgSURzIGFyZSBwZXJtaXR0ZWQgKi8KKyt9IEFWQ29kZWNQYXJzZXI7Cisr CisrLyoqCisrICogSXRlcmF0ZSBvdmVyIGFsbCByZWdpc3RlcmVkIGNvZGVjIHBhcnNlcnMuCisr ICoKKysgKiBAcGFyYW0gb3BhcXVlIGEgcG9pbnRlciB3aGVyZSBsaWJhdmNvZGVjIHdpbGwgc3Rv cmUgdGhlIGl0ZXJhdGlvbiBzdGF0ZS4gTXVzdAorKyAqICAgICAgICAgICAgICAgcG9pbnQgdG8g TlVMTCB0byBzdGFydCB0aGUgaXRlcmF0aW9uLgorKyAqCisrICogQHJldHVybiB0aGUgbmV4dCBy ZWdpc3RlcmVkIGNvZGVjIHBhcnNlciBvciBOVUxMIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcworKyAq ICAgICAgICAgZmluaXNoZWQKKysgKi8KKytjb25zdCBBVkNvZGVjUGFyc2VyICphdl9wYXJzZXJf aXRlcmF0ZSh2b2lkICoqb3BhcXVlKTsKKysKKytBVkNvZGVjUGFyc2VyQ29udGV4dCAqYXZfcGFy c2VyX2luaXQoZW51bSBBVkNvZGVjSUQgY29kZWNfaWQpOworKworKy8qKgorKyAqIFBhcnNlIGEg cGFja2V0LgorKyAqCisrICogQHBhcmFtIHMgICAgICAgICAgICAgcGFyc2VyIGNvbnRleHQuCisr ICogQHBhcmFtIGF2Y3R4ICAgICAgICAgY29kZWMgY29udGV4dC4KKysgKiBAcGFyYW0gcG91dGJ1 ZiAgICAgICBzZXQgdG8gcG9pbnRlciB0byBwYXJzZWQgYnVmZmVyIG9yIE5VTEwgaWYgbm90IHll dCBmaW5pc2hlZC4KKysgKiBAcGFyYW0gcG91dGJ1Zl9zaXplICBzZXQgdG8gc2l6ZSBvZiBwYXJz ZWQgYnVmZmVyIG9yIHplcm8gaWYgbm90IHlldCBmaW5pc2hlZC4KKysgKiBAcGFyYW0gYnVmICAg ICAgICAgICBpbnB1dCBidWZmZXIuCisrICogQHBhcmFtIGJ1Zl9zaXplICAgICAgYnVmZmVyIHNp emUgaW4gYnl0ZXMgd2l0aG91dCB0aGUgcGFkZGluZy4gSS5lLiB0aGUgZnVsbCBidWZmZXIKKysg ICAgICAgICAgICAgICAgICAgICAgICBzaXplIGlzIGFzc3VtZWQgdG8gYmUgYnVmX3NpemUgKyBB Vl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFLgorKyAgICAgICAgICAgICAgICAgICAgICAgIFRv IHNpZ25hbCBFT0YsIHRoaXMgc2hvdWxkIGJlIDAgKHNvIHRoYXQgdGhlIGxhc3QgZnJhbWUKKysg ICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgb3V0cHV0KS4KKysgKiBAcGFyYW0gcHRzICAg ICAgICAgICBpbnB1dCBwcmVzZW50YXRpb24gdGltZXN0YW1wLgorKyAqIEBwYXJhbSBkdHMgICAg ICAgICAgIGlucHV0IGRlY29kaW5nIHRpbWVzdGFtcC4KKysgKiBAcGFyYW0gcG9zICAgICAgICAg ICBpbnB1dCBieXRlIHBvc2l0aW9uIGluIHN0cmVhbS4KKysgKiBAcmV0dXJuIHRoZSBudW1iZXIg b2YgYnl0ZXMgb2YgdGhlIGlucHV0IGJpdHN0cmVhbSB1c2VkLgorKyAqCisrICogRXhhbXBsZToK KysgKiBAY29kZQorKyAqICAgd2hpbGUoaW5fbGVuKXsKKysgKiAgICAgICBsZW4gPSBhdl9wYXJz ZXJfcGFyc2UyKG15cGFyc2VyLCBBVkNvZGVjQ29udGV4dCwgJmRhdGEsICZzaXplLAorKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2RhdGEsIGluX2xlbiwKKysg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHMsIGR0cywgcG9zKTsK KysgKiAgICAgICBpbl9kYXRhICs9IGxlbjsKKysgKiAgICAgICBpbl9sZW4gIC09IGxlbjsKKysg KgorKyAqICAgICAgIGlmKHNpemUpCisrICogICAgICAgICAgZGVjb2RlX2ZyYW1lKGRhdGEsIHNp emUpOworKyAqICAgfQorKyAqIEBlbmRjb2RlCisrICovCisraW50IGF2X3BhcnNlcl9wYXJzZTIo QVZDb2RlY1BhcnNlckNvbnRleHQgKnMsCisrICAgICAgICAgICAgICAgICAgICAgQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAorKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKipwb3V0YnVmLCBp bnQgKnBvdXRidWZfc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpi dWYsIGludCBidWZfc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHB0cywgaW50 NjRfdCBkdHMsCisrICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBwb3MpOworKworK3ZvaWQg YXZfcGFyc2VyX2Nsb3NlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKTsKKysKKysvKioKKysgKiBA fQorKyAqIEB9CisrICovCisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2Y19lbmNvZGluZwor KyAqIEB7CisrICovCisrCisraW50IGF2Y29kZWNfZW5jb2RlX3N1YnRpdGxlKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFWU3VidGl0bGUgKnN1Yik7CisrCisrCisrLyoqCisrICogQH0K KysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2Y19taXNjIFV0aWxpdHkgZnVuY3Rpb25z CisrICogQGluZ3JvdXAgbGliYXZjCisrICoKKysgKiBNaXNjZWxsYW5lb3VzIHV0aWxpdHkgZnVu Y3Rpb25zIHJlbGF0ZWQgdG8gYm90aCBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKysgKiAob3IgbmVp dGhlcikuCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2Y19taXNjX3Bp eGZtdCBQaXhlbCBmb3JtYXRzCisrICoKKysgKiBGdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBw aXhlbCBmb3JtYXRzLgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogUmV0dXJuIGEgdmFsdWUg cmVwcmVzZW50aW5nIHRoZSBmb3VyQ0MgY29kZSBhc3NvY2lhdGVkIHRvIHRoZQorKyAqIHBpeGVs IGZvcm1hdCBwaXhfZm10LCBvciAwIGlmIG5vIGFzc29jaWF0ZWQgZm91ckNDIGNvZGUgY2FuIGJl CisrICogZm91bmQuCisrICovCisrdW5zaWduZWQgaW50IGF2Y29kZWNfcGl4X2ZtdF90b19jb2Rl Y190YWcoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKy8qKgorKyAqIEZpbmQgdGhl IGJlc3QgcGl4ZWwgZm9ybWF0IHRvIGNvbnZlcnQgdG8gZ2l2ZW4gYSBjZXJ0YWluIHNvdXJjZSBw aXhlbAorKyAqIGZvcm1hdC4gIFdoZW4gY29udmVydGluZyBmcm9tIG9uZSBwaXhlbCBmb3JtYXQg dG8gYW5vdGhlciwgaW5mb3JtYXRpb24gbG9zcworKyAqIG1heSBvY2N1ci4gIEZvciBleGFtcGxl LCB3aGVuIGNvbnZlcnRpbmcgZnJvbSBSR0IyNCB0byBHUkFZLCB0aGUgY29sb3IKKysgKiBpbmZv cm1hdGlvbiB3aWxsIGJlIGxvc3QuIFNpbWlsYXJseSwgb3RoZXIgbG9zc2VzIG9jY3VyIHdoZW4g Y29udmVydGluZyBmcm9tCisrICogc29tZSBmb3JtYXRzIHRvIG90aGVyIGZvcm1hdHMuIGF2Y29k ZWNfZmluZF9iZXN0X3BpeF9mbXRfb2ZfMigpIHNlYXJjaGVzIHdoaWNoIG9mCisrICogdGhlIGdp dmVuIHBpeGVsIGZvcm1hdHMgc2hvdWxkIGJlIHVzZWQgdG8gc3VmZmVyIHRoZSBsZWFzdCBhbW91 bnQgb2YgbG9zcy4KKysgKiBUaGUgcGl4ZWwgZm9ybWF0cyBmcm9tIHdoaWNoIGl0IGNob29zZXMg b25lLCBhcmUgZGV0ZXJtaW5lZCBieSB0aGUKKysgKiBwaXhfZm10X2xpc3QgcGFyYW1ldGVyLgor KyAqCisrICoKKysgKiBAcGFyYW1baW5dIHBpeF9mbXRfbGlzdCBBVl9QSVhfRk1UX05PTkUgdGVy bWluYXRlZCBhcnJheSBvZiBwaXhlbCBmb3JtYXRzIHRvIGNob29zZSBmcm9tCisrICogQHBhcmFt W2luXSBzcmNfcGl4X2ZtdCBzb3VyY2UgcGl4ZWwgZm9ybWF0CisrICogQHBhcmFtW2luXSBoYXNf YWxwaGEgV2hldGhlciB0aGUgc291cmNlIHBpeGVsIGZvcm1hdCBhbHBoYSBjaGFubmVsIGlzIHVz ZWQuCisrICogQHBhcmFtW291dF0gbG9zc19wdHIgQ29tYmluYXRpb24gb2YgZmxhZ3MgaW5mb3Jt aW5nIHlvdSB3aGF0IGtpbmQgb2YgbG9zc2VzIHdpbGwgb2NjdXIuCisrICogQHJldHVybiBUaGUg YmVzdCBwaXhlbCBmb3JtYXQgdG8gY29udmVydCB0byBvciAtMSBpZiBub25lIHdhcyBmb3VuZC4K KysgKi8KKytlbnVtIEFWUGl4ZWxGb3JtYXQgYXZjb2RlY19maW5kX2Jlc3RfcGl4X2ZtdF9vZl9s aXN0KGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCAqcGl4X2ZtdF9saXN0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHNyY19w aXhfZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGhhc19hbHBoYSwgaW50ICpsb3NzX3B0cik7CisrCisrZW51bSBBVlBpeGVsRm9ybWF0IGF2Y29k ZWNfZGVmYXVsdF9nZXRfZm9ybWF0KHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqcywgY29uc3QgZW51 bSBBVlBpeGVsRm9ybWF0ICogZm10KTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworK3ZvaWQg YXZjb2RlY19zdHJpbmcoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIEFWQ29kZWNDb250ZXh0ICpl bmMsIGludCBlbmNvZGUpOworKworK2ludCBhdmNvZGVjX2RlZmF1bHRfZXhlY3V0ZShBVkNvZGVj Q29udGV4dCAqYywgaW50ICgqZnVuYykoQVZDb2RlY0NvbnRleHQgKmMyLCB2b2lkICphcmcyKSx2 b2lkICphcmcsIGludCAqcmV0LCBpbnQgY291bnQsIGludCBzaXplKTsKKytpbnQgYXZjb2RlY19k ZWZhdWx0X2V4ZWN1dGUyKEFWQ29kZWNDb250ZXh0ICpjLCBpbnQgKCpmdW5jKShBVkNvZGVjQ29u dGV4dCAqYzIsIHZvaWQgKmFyZzIsIGludCwgaW50KSx2b2lkICphcmcsIGludCAqcmV0LCBpbnQg Y291bnQpOworKy8vRklYTUUgZnVuYyB0eXBlZGVmCisrCisrLyoqCisrICogRmlsbCBBVkZyYW1l IGF1ZGlvIGRhdGEgYW5kIGxpbmVzaXplIHBvaW50ZXJzLgorKyAqCisrICogVGhlIGJ1ZmZlciBi dWYgbXVzdCBiZSBhIHByZWFsbG9jYXRlZCBidWZmZXIgd2l0aCBhIHNpemUgYmlnIGVub3VnaAor KyAqIHRvIGNvbnRhaW4gdGhlIHNwZWNpZmllZCBzYW1wbGVzIGFtb3VudC4gVGhlIGZpbGxlZCBB VkZyYW1lIGRhdGEKKysgKiBwb2ludGVycyB3aWxsIHBvaW50IHRvIHRoaXMgYnVmZmVyLgorKyAq CisrICogQVZGcmFtZSBleHRlbmRlZF9kYXRhIGNoYW5uZWwgcG9pbnRlcnMgYXJlIGFsbG9jYXRl ZCBpZiBuZWNlc3NhcnkgZm9yCisrICogcGxhbmFyIGF1ZGlvLgorKyAqCisrICogQHBhcmFtIGZy YW1lICAgICAgIHRoZSBBVkZyYW1lCisrICogICAgICAgICAgICAgICAgICAgIGZyYW1lLT5uYl9z YW1wbGVzIG11c3QgYmUgc2V0IHByaW9yIHRvIGNhbGxpbmcgdGhlCisrICogICAgICAgICAgICAg ICAgICAgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIGZyYW1lLT5kYXRhLAorKyAq ICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXh0ZW5kZWRfZGF0YSwgZnJhbWUtPmxpbmVzaXpl WzBdLgorKyAqIEBwYXJhbSBuYl9jaGFubmVscyBjaGFubmVsIGNvdW50CisrICogQHBhcmFtIHNh bXBsZV9mbXQgIHNhbXBsZSBmb3JtYXQKKysgKiBAcGFyYW0gYnVmICAgICAgICAgYnVmZmVyIHRv IHVzZSBmb3IgZnJhbWUgZGF0YQorKyAqIEBwYXJhbSBidWZfc2l6ZSAgICBzaXplIG9mIGJ1ZmZl cgorKyAqIEBwYXJhbSBhbGlnbiAgICAgICBwbGFuZSBzaXplIHNhbXBsZSBhbGlnbm1lbnQgKDAg PSBkZWZhdWx0KQorKyAqIEByZXR1cm4gICAgICAgICAgICA+PTAgb24gc3VjY2VzcywgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisrICogQHRvZG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5 dGVzIHJlcXVpcmVkIHRvIHN0b3JlIHRoZSBzYW1wbGVzIGluCisrICogY2FzZSBvZiBzdWNjZXNz LCBhdCB0aGUgbmV4dCBsaWJhdnV0aWwgYnVtcAorKyAqLworK2ludCBhdmNvZGVjX2ZpbGxfYXVk aW9fZnJhbWUoQVZGcmFtZSAqZnJhbWUsIGludCBuYl9jaGFubmVscywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gQVZTYW1wbGVGb3JtYXQgc2FtcGxlX2ZtdCwgY29uc3QgdWlu dDhfdCAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplLCBp bnQgYWxpZ24pOworKworKy8qKgorKyAqIFJlc2V0IHRoZSBpbnRlcm5hbCBjb2RlYyBzdGF0ZSAv IGZsdXNoIGludGVybmFsIGJ1ZmZlcnMuIFNob3VsZCBiZSBjYWxsZWQKKysgKiBlLmcuIHdoZW4g c2Vla2luZyBvciB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBzdHJlYW0uCisrICoKKysg KiBAbm90ZSBmb3IgZGVjb2RlcnMsIHRoaXMgZnVuY3Rpb24ganVzdCByZWxlYXNlcyBhbnkgcmVm ZXJlbmNlcyB0aGUgZGVjb2RlcgorKyAqIG1pZ2h0IGtlZXAgaW50ZXJuYWxseSwgYnV0IHRoZSBj YWxsZXIncyByZWZlcmVuY2VzIHJlbWFpbiB2YWxpZC4KKysgKgorKyAqIEBub3RlIGZvciBlbmNv ZGVycywgdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgZG8gc29tZXRoaW5nIGlmIHRoZSBlbmNvZGVy CisrICogZGVjbGFyZXMgc3VwcG9ydCBmb3IgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfRkxVU0guIFdo ZW4gY2FsbGVkLCB0aGUgZW5jb2RlcgorKyAqIHdpbGwgZHJhaW4gYW55IHJlbWFpbmluZyBwYWNr ZXRzLCBhbmQgY2FuIHRoZW4gYmUgcmV1c2VkIGZvciBhIGRpZmZlcmVudAorKyAqIHN0cmVhbSAo YXMgb3Bwb3NlZCB0byBzZW5kaW5nIGEgbnVsbCBmcmFtZSB3aGljaCB3aWxsIGxlYXZlIHRoZSBl bmNvZGVyCisrICogaW4gYSBwZXJtYW5lbnQgRU9GIHN0YXRlIGFmdGVyIGRyYWluaW5nKS4gVGhp cyBjYW4gYmUgZGVzaXJhYmxlIGlmIHRoZQorKyAqIGNvc3Qgb2YgdGVhcmluZyBkb3duIGFuZCBy ZXBsYWNpbmcgdGhlIGVuY29kZXIgaW5zdGFuY2UgaXMgaGlnaC4KKysgKi8KKyt2b2lkIGF2Y29k ZWNfZmx1c2hfYnVmZmVycyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpOworKworKy8qKgorKyAqIFJl dHVybiBhdWRpbyBmcmFtZSBkdXJhdGlvbi4KKysgKgorKyAqIEBwYXJhbSBhdmN0eCAgICAgICAg Y29kZWMgY29udGV4dAorKyAqIEBwYXJhbSBmcmFtZV9ieXRlcyAgc2l6ZSBvZiB0aGUgZnJhbWUs IG9yIDAgaWYgdW5rbm93bgorKyAqIEByZXR1cm4gICAgICAgICAgICAgZnJhbWUgZHVyYXRpb24s IGluIHNhbXBsZXMsIGlmIGtub3duLiAwIGlmIG5vdCBhYmxlIHRvCisrICogICAgICAgICAgICAg ICAgICAgICBkZXRlcm1pbmUuCisrICovCisraW50IGF2X2dldF9hdWRpb19mcmFtZV9kdXJhdGlv bihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGludCBmcmFtZV9ieXRlcyk7CisrCisrLyogbWVtb3J5 ICovCisrCisrLyoqCisrICogU2FtZSBiZWhhdmlvdXIgYXZfZmFzdF9tYWxsb2MgYnV0IHRoZSBi dWZmZXIgaGFzIGFkZGl0aW9uYWwKKysgKiBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGF0 IHRoZSBlbmQgd2hpY2ggd2lsbCBhbHdheXMgYmUgMC4KKysgKgorKyAqIEluIGFkZGl0aW9uIHRo ZSB3aG9sZSBidWZmZXIgd2lsbCBpbml0aWFsbHkgYW5kIGFmdGVyIHJlc2l6ZXMKKysgKiBiZSAw LWluaXRpYWxpemVkIHNvIHRoYXQgbm8gdW5pbml0aWFsaXplZCBkYXRhIHdpbGwgZXZlciBhcHBl YXIuCisrICovCisrdm9pZCBhdl9mYXN0X3BhZGRlZF9tYWxsb2Modm9pZCAqcHRyLCB1bnNpZ25l ZCBpbnQgKnNpemUsIHNpemVfdCBtaW5fc2l6ZSk7CisrCisrLyoqCisrICogU2FtZSBiZWhhdmlv dXIgYXZfZmFzdF9wYWRkZWRfbWFsbG9jIGV4Y2VwdCB0aGF0IGJ1ZmZlciB3aWxsIGFsd2F5cwor KyAqIGJlIDAtaW5pdGlhbGl6ZWQgYWZ0ZXIgY2FsbC4KKysgKi8KKyt2b2lkIGF2X2Zhc3RfcGFk ZGVkX21hbGxvY3oodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgKnNpemUsIHNpemVfdCBtaW5fc2l6 ZSk7CisrCisrLyoqCisrICogQHJldHVybiBhIHBvc2l0aXZlIHZhbHVlIGlmIHMgaXMgb3BlbiAo aS5lLiBhdmNvZGVjX29wZW4yKCkgd2FzIGNhbGxlZCBvbiBpdCksCisrICogMCBvdGhlcndpc2Uu CisrICovCisraW50IGF2Y29kZWNfaXNfb3BlbihBVkNvZGVjQ29udGV4dCAqcyk7CisrCisrLyoq CisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZDT0RFQ19BVkNPREVDX0ggKi8KK2RpZmYg LXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVn L3Y5L2xpYmF2Y29kZWMvY29kZWNfZGVzYy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19kZXNj LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6 NDcuNjcyNzQwNDU2ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19kZXNjLmgJMjAyNi0wOS0w NyAxMjoyMzo0Ny42NzI2MTY5NDEgKzAyMDAKK0BAIC0wLDAgKzEsMTQyIEBACisrLyoKKysgKiBD b2RlYyBkZXNjcmlwdG9ycyBwdWJsaWMgQVBJCisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisr ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWQ09ERUNfQ09ERUNfREVT Q19ICisrI2RlZmluZSBBVkNPREVDX0NPREVDX0RFU0NfSAorKworKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXZ1dGlsLmgiCisrCisrI2luY2x1ZGUgImNvZGVjX2lkLmgiCisrCisrLyoqCisrICogQGFk ZHRvZ3JvdXAgbGF2Y19jb3JlCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBUaGlzIHN0cnVj dCBkZXNjcmliZXMgdGhlIHByb3BlcnRpZXMgb2YgYSBzaW5nbGUgY29kZWMgZGVzY3JpYmVkIGJ5 IGFuCisrICogQVZDb2RlY0lELgorKyAqIEBzZWUgYXZjb2RlY19kZXNjcmlwdG9yX2dldCgpCisr ICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZDb2RlY0Rlc2NyaXB0b3IgeworKyAgICBlbnVtIEFWQ29k ZWNJRCAgICAgaWQ7CisrICAgIGVudW0gQVZNZWRpYVR5cGUgdHlwZTsKKysgICAgLyoqCisrICAg ICAqIE5hbWUgb2YgdGhlIGNvZGVjIGRlc2NyaWJlZCBieSB0aGlzIGRlc2NyaXB0b3IuIEl0IGlz IG5vbi1lbXB0eSBhbmQKKysgICAgICogdW5pcXVlIGZvciBlYWNoIGNvZGVjIGRlc2NyaXB0b3Iu IEl0IHNob3VsZCBjb250YWluIGFscGhhbnVtZXJpYworKyAgICAgKiBjaGFyYWN0ZXJzIGFuZCAn Xycgb25seS4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgICAgICAqbmFtZTsKKysgICAgLyoq CisrICAgICAqIEEgbW9yZSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGlzIGNvZGVjLiBNYXkgYmUg TlVMTC4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKmxvbmdfbmFtZTsKKysgICAgLyoqCisr ICAgICAqIENvZGVjIHByb3BlcnRpZXMsIGEgY29tYmluYXRpb24gb2YgQVZfQ09ERUNfUFJPUF8q IGZsYWdzLgorKyAgICAgKi8KKysgICAgaW50ICAgICAgICAgICAgIHByb3BzOworKyAgICAvKioK KysgICAgICogTUlNRSB0eXBlKHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29kZWMuCisrICAgICAq IE1heSBiZSBOVUxMOyBpZiBub3QsIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIE1JTUUgdHlw ZXMuCisrICAgICAqIFRoZSBmaXJzdCBpdGVtIGlzIGFsd2F5cyBub24tTlVMTCBhbmQgaXMgdGhl IHByZWZlcnJlZCBNSU1FIHR5cGUuCisrICAgICAqLworKyAgICBjb25zdCBjaGFyICpjb25zdCAq bWltZV90eXBlczsKKysgICAgLyoqCisrICAgICAqIElmIG5vbi1OVUxMLCBhbiBhcnJheSBvZiBw cm9maWxlcyByZWNvZ25pemVkIGZvciB0aGlzIGNvZGVjLgorKyAgICAgKiBUZXJtaW5hdGVkIHdp dGggQVZfUFJPRklMRV9VTktOT1dOLgorKyAgICAgKi8KKysgICAgY29uc3Qgc3RydWN0IEFWUHJv ZmlsZSAqcHJvZmlsZXM7CisrfSBBVkNvZGVjRGVzY3JpcHRvcjsKKysKKysvKioKKysgKiBDb2Rl YyB1c2VzIG9ubHkgaW50cmEgY29tcHJlc3Npb24uCisrICogVmlkZW8gYW5kIGF1ZGlvIGNvZGVj cyBvbmx5LgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfUFJPUF9JTlRSQV9PTkxZICAgICgxIDw8 IDApCisrLyoqCisrICogQ29kZWMgc3VwcG9ydHMgbG9zc3kgY29tcHJlc3Npb24uIEF1ZGlvIGFu ZCB2aWRlbyBjb2RlY3Mgb25seS4KKysgKiBAbm90ZSBhIGNvZGVjIG1heSBzdXBwb3J0IGJvdGgg bG9zc3kgYW5kIGxvc3NsZXNzCisrICogY29tcHJlc3Npb24gbW9kZXMKKysgKi8KKysjZGVmaW5l IEFWX0NPREVDX1BST1BfTE9TU1kgICAgICAgICAoMSA8PCAxKQorKy8qKgorKyAqIENvZGVjIHN1 cHBvcnRzIGxvc3NsZXNzIGNvbXByZXNzaW9uLiBBdWRpbyBhbmQgdmlkZW8gY29kZWNzIG9ubHku CisrICovCisrI2RlZmluZSBBVl9DT0RFQ19QUk9QX0xPU1NMRVNTICAgICAgKDEgPDwgMikKKysv KioKKysgKiBDb2RlYyBzdXBwb3J0cyBmcmFtZSByZW9yZGVyaW5nLiBUaGF0IGlzLCB0aGUgY29k ZWQgb3JkZXIgKHRoZSBvcmRlciBpbiB3aGljaAorKyAqIHRoZSBlbmNvZGVkIHBhY2tldHMgYXJl IG91dHB1dCBieSB0aGUgZW5jb2RlcnMgLyBzdG9yZWQgLyBpbnB1dCB0byB0aGUKKysgKiBkZWNv ZGVycykgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwcmVzZW50YXRpb24gb3JkZXIgb2YgdGhl IGNvcnJlc3BvbmRpbmcKKysgKiBmcmFtZXMuCisrICoKKysgKiBGb3IgY29kZWNzIHRoYXQgZG8g bm90IGhhdmUgdGhpcyBwcm9wZXJ0eSBzZXQsIFBUUyBhbmQgRFRTIHNob3VsZCBhbHdheXMgYmUK KysgKiBlcXVhbC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX1BST1BfUkVPUkRFUiAgICAgICAo MSA8PCAzKQorKworKy8qKgorKyAqIFZpZGVvIGNvZGVjIHN1cHBvcnRzIHNlcGFyYXRlIGNvZGlu ZyBvZiBmaWVsZHMgaW4gaW50ZXJsYWNlZCBmcmFtZXMuCisrICovCisrI2RlZmluZSBBVl9DT0RF Q19QUk9QX0ZJRUxEUyAgICAgICAgKDEgPDwgNCkKKysKKysvKioKKysgKiBWaWRlbyBjb2RlYyBj b250YWlucyBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiBtZWFudCB0byBiZSBhcHBsaWVkIHRvIG90 aGVyCisrICogZXhpc3RpbmcgZnJhbWVzLCBhbmQgY2FuJ3QgZ2VuZXJhdGUgdXNhYmxlIGltYWdl IGRhdGEgb24gaXRzIG93bi4KKysgKiBBIHN0YW5kYWxvbmUgZGVjb2RlciBpcyB1bmxpa2VseSB0 byBiZSBhdmFpbGFibGUgZm9yIGl0IGFuZCBzaG91bGQgbm90CisrICogYmUgZXhwZWN0ZWQuCisr ICovCisrI2RlZmluZSBBVl9DT0RFQ19QUk9QX0VOSEFOQ0VNRU5UICAgKDEgPDwgNSkKKysKKysv KioKKysgKiBTdWJ0aXRsZSBjb2RlYyBpcyBiaXRtYXAgYmFzZWQKKysgKiBEZWNvZGVkIEFWU3Vi dGl0bGUgZGF0YSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBBVlN1YnRpdGxlUmVjdC0+cGljdCBmaWVs ZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX1BST1BfQklUTUFQX1NVQiAgICAoMSA8PCAxNikK KysvKioKKysgKiBTdWJ0aXRsZSBjb2RlYyBpcyB0ZXh0IGJhc2VkLgorKyAqIERlY29kZWQgQVZT dWJ0aXRsZSBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIEFWU3VidGl0bGVSZWN0LT5hc3MgZmll bGQuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19QUk9QX1RFWFRfU1VCICAgICAgKDEgPDwgMTcp CisrCisrLyoqCisrICogQHJldHVybiBkZXNjcmlwdG9yIGZvciBnaXZlbiBjb2RlYyBJRCBvciBO VUxMIGlmIG5vIGRlc2NyaXB0b3IgZXhpc3RzLgorKyAqLworK2NvbnN0IEFWQ29kZWNEZXNjcmlw dG9yICphdmNvZGVjX2Rlc2NyaXB0b3JfZ2V0KGVudW0gQVZDb2RlY0lEIGlkKTsKKysKKysvKioK KysgKiBJdGVyYXRlIG92ZXIgYWxsIGNvZGVjIGRlc2NyaXB0b3JzIGtub3duIHRvIGxpYmF2Y29k ZWMuCisrICoKKysgKiBAcGFyYW0gcHJldiBwcmV2aW91cyBkZXNjcmlwdG9yLiBOVUxMIHRvIGdl dCB0aGUgZmlyc3QgZGVzY3JpcHRvci4KKysgKgorKyAqIEByZXR1cm4gbmV4dCBkZXNjcmlwdG9y IG9yIE5VTEwgYWZ0ZXIgdGhlIGxhc3QgZGVzY3JpcHRvcgorKyAqLworK2NvbnN0IEFWQ29kZWNE ZXNjcmlwdG9yICphdmNvZGVjX2Rlc2NyaXB0b3JfbmV4dChjb25zdCBBVkNvZGVjRGVzY3JpcHRv ciAqcHJldik7CisrCisrLyoqCisrICogQHJldHVybiBjb2RlYyBkZXNjcmlwdG9yIHdpdGggdGhl IGdpdmVuIG5hbWUgb3IgTlVMTCBpZiBubyBzdWNoIGRlc2NyaXB0b3IKKysgKiAgICAgICAgIGV4 aXN0cy4KKysgKi8KKytjb25zdCBBVkNvZGVjRGVzY3JpcHRvciAqYXZjb2RlY19kZXNjcmlwdG9y X2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIEB9CisrICovCisr CisrI2VuZGlmIC8vIEFWQ09ERUNfQ09ERUNfREVTQ19ICitkaWZmIC11cCBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2Nv ZGVjLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjLmgu ZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3MjQ3NDI4MCArMDIwMAorKysrIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29k ZWMvY29kZWMuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3MjIzODU0MSArMDIwMAorQEAgLTAsMCAr MSwzNDUgQEAKKysvKgorKyAqIEFWQ29kZWMgcHVibGljIEFQSQorKyAqCisrICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkNPREVD X0NPREVDX0gKKysjZGVmaW5lIEFWQ09ERUNfQ09ERUNfSAorKworKyNpbmNsdWRlIDxzdGRpbnQu aD4KKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgorKyNpbmNsdWRlICJsaWJhdnV0 aWwvaHdjb250ZXh0LmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9sb2cuaCIKKysjaW5jbHVkZSAi bGliYXZ1dGlsL3BpeGZtdC5oIgorKworKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2lkLmgi CisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2Y19jb3JlCisrICogQHsKKysgKi8KKysKKysv KioKKysgKiBEZWNvZGVyIGNhbiB1c2UgZHJhd19ob3Jpel9iYW5kIGNhbGxiYWNrLgorKyAqLwor KyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0RSQVdfSE9SSVpfQkFORCAgICAgKDEgPDwgIDApCisrLyoq CisrICogQ29kZWMgdXNlcyBnZXRfYnVmZmVyKCkgb3IgZ2V0X2VuY29kZV9idWZmZXIoKSBmb3Ig YWxsb2NhdGluZyBidWZmZXJzIGFuZAorKyAqIHN1cHBvcnRzIGN1c3RvbSBhbGxvY2F0b3JzLgor KyAqIElmIG5vdCBzZXQsIGl0IG1pZ2h0IG5vdCB1c2UgZ2V0X2J1ZmZlcigpIG9yIGdldF9lbmNv ZGVfYnVmZmVyKCkgYXQgYWxsLCBvcgorKyAqIHVzZSBvcGVyYXRpb25zIHRoYXQgYXNzdW1lIHRo ZSBidWZmZXIgd2FzIGFsbG9jYXRlZCBieQorKyAqIGF2Y29kZWNfZGVmYXVsdF9nZXRfYnVmZmVy MiBvciBhdmNvZGVjX2RlZmF1bHRfZ2V0X2VuY29kZV9idWZmZXIuCisrICovCisrI2RlZmluZSBB Vl9DT0RFQ19DQVBfRFIxICAgICAgICAgICAgICAgICAoMSA8PCAgMSkKKysvKioKKysgKiBFbmNv ZGVyIG9yIGRlY29kZXIgcmVxdWlyZXMgZmx1c2hpbmcgd2l0aCBOVUxMIGlucHV0IGF0IHRoZSBl bmQgaW4gb3JkZXIgdG8KKysgKiBnaXZlIHRoZSBjb21wbGV0ZSBhbmQgY29ycmVjdCBvdXRwdXQu CisrICoKKysgKiBOT1RFOiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgdGhlIGNvZGVjIGlzIGd1 YXJhbnRlZWQgdG8gbmV2ZXIgYmUgZmVkIHdpdGgKKysgKiAgICAgICB3aXRoIE5VTEwgZGF0YS4g VGhlIHVzZXIgY2FuIHN0aWxsIHNlbmQgTlVMTCBkYXRhIHRvIHRoZSBwdWJsaWMgZW5jb2RlCisr ICogICAgICAgb3IgZGVjb2RlIGZ1bmN0aW9uLCBidXQgbGliYXZjb2RlYyB3aWxsIG5vdCBwYXNz IGl0IGFsb25nIHRvIHRoZSBjb2RlYworKyAqICAgICAgIHVubGVzcyB0aGlzIGZsYWcgaXMgc2V0 LgorKyAqCisrICogRGVjb2RlcnM6CisrICogVGhlIGRlY29kZXIgaGFzIGEgbm9uLXplcm8gZGVs YXkgYW5kIG5lZWRzIHRvIGJlIGZlZCB3aXRoIGF2cGt0LT5kYXRhPU5VTEwsCisrICogYXZwa3Qt PnNpemU9MCBhdCB0aGUgZW5kIHRvIGdldCB0aGUgZGVsYXllZCBkYXRhIHVudGlsIHRoZSBkZWNv ZGVyIG5vIGxvbmdlcgorKyAqIHJldHVybnMgZnJhbWVzLgorKyAqCisrICogRW5jb2RlcnM6Cisr ICogVGhlIGVuY29kZXIgbmVlZHMgdG8gYmUgZmVkIHdpdGggTlVMTCBkYXRhIGF0IHRoZSBlbmQg b2YgZW5jb2RpbmcgdW50aWwgdGhlCisrICogZW5jb2RlciBubyBsb25nZXIgcmV0dXJucyBkYXRh LgorKyAqCisrICogTk9URTogRm9yIGVuY29kZXJzIGltcGxlbWVudGluZyB0aGUgQVZDb2RlYy5l bmNvZGUyKCkgZnVuY3Rpb24sIHNldHRpbmcgdGhpcworKyAqICAgICAgIGZsYWcgYWxzbyBtZWFu cyB0aGF0IHRoZSBlbmNvZGVyIG11c3Qgc2V0IHRoZSBwdHMgYW5kIGR1cmF0aW9uIGZvcgorKyAq ICAgICAgIGVhY2ggb3V0cHV0IHBhY2tldC4gSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIHRoZSBw dHMgYW5kIGR1cmF0aW9uIHdpbGwKKysgKiAgICAgICBiZSBkZXRlcm1pbmVkIGJ5IGxpYmF2Y29k ZWMgZnJvbSB0aGUgaW5wdXQgZnJhbWUuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfREVM QVkgICAgICAgICAgICAgICAoMSA8PCAgNSkKKysvKioKKysgKiBDb2RlYyBjYW4gYmUgZmVkIGEg ZmluYWwgZnJhbWUgd2l0aCBhIHNtYWxsZXIgc2l6ZS4KKysgKiBUaGlzIGNhbiBiZSB1c2VkIHRv IHByZXZlbnQgdHJ1bmNhdGlvbiBvZiB0aGUgbGFzdCBhdWRpbyBzYW1wbGVzLgorKyAqLworKyNk ZWZpbmUgQVZfQ09ERUNfQ0FQX1NNQUxMX0xBU1RfRlJBTUUgICAgKDEgPDwgIDYpCisrCisrLyoq CisrICogQ29kZWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyB0aHVzIGF2b2lkZWQgaW4gZmF2b3Ig b2Ygbm9uIGV4cGVyaW1lbnRhbAorKyAqIGVuY29kZXJzCisrICovCisrI2RlZmluZSBBVl9DT0RF Q19DQVBfRVhQRVJJTUVOVEFMICAgICAgICAoMSA8PCAgOSkKKysvKioKKysgKiBDb2RlYyBzaG91 bGQgZmlsbCBpbiBjaGFubmVsIGNvbmZpZ3VyYXRpb24gYW5kIHNhbXBsZXJhdGUgaW5zdGVhZCBv ZiBjb250YWluZXIKKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0NBUF9DSEFOTkVMX0NPTkYgICAg ICAgICgxIDw8IDEwKQorKy8qKgorKyAqIENvZGVjIHN1cHBvcnRzIGZyYW1lLWxldmVsIG11bHRp dGhyZWFkaW5nLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0ZSQU1FX1RIUkVBRFMgICAg ICAgKDEgPDwgMTIpCisrLyoqCisrICogQ29kZWMgc3VwcG9ydHMgc2xpY2UtYmFzZWQgKG9yIHBh cnRpdGlvbi1iYXNlZCkgbXVsdGl0aHJlYWRpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19D QVBfU0xJQ0VfVEhSRUFEUyAgICAgICAoMSA8PCAxMykKKysvKioKKysgKiBDb2RlYyBzdXBwb3J0 cyBjaGFuZ2VkIHBhcmFtZXRlcnMgYXQgYW55IHBvaW50LgorKyAqLworKyNkZWZpbmUgQVZfQ09E RUNfQ0FQX1BBUkFNX0NIQU5HRSAgICAgICAgKDEgPDwgMTQpCisrLyoqCisrICogQ29kZWMgc3Vw cG9ydHMgbXVsdGl0aHJlYWRpbmcgdGhyb3VnaCBhIG1ldGhvZCBvdGhlciB0aGFuIHNsaWNlLSBv cgorKyAqIGZyYW1lLWxldmVsIG11bHRpdGhyZWFkaW5nLiBUeXBpY2FsbHkgdGhpcyBtYXJrcyB3 cmFwcGVycyBhcm91bmQKKysgKiBtdWx0aXRocmVhZGluZy1jYXBhYmxlIGV4dGVybmFsIGxpYnJh cmllcy4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTICAgICAgICgx IDw8IDE1KQorKy8qKgorKyAqIEF1ZGlvIGVuY29kZXIgc3VwcG9ydHMgcmVjZWl2aW5nIGEgZGlm ZmVyZW50IG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggY2FsbC4KKysgKi8KKysjZGVmaW5lIEFW X0NPREVDX0NBUF9WQVJJQUJMRV9GUkFNRV9TSVpFICgxIDw8IDE2KQorKy8qKgorKyAqIERlY29k ZXIgaXMgbm90IGEgcHJlZmVycmVkIGNob2ljZSBmb3IgcHJvYmluZy4KKysgKiBUaGlzIGluZGlj YXRlcyB0aGF0IHRoZSBkZWNvZGVyIGlzIG5vdCBhIGdvb2QgY2hvaWNlIGZvciBwcm9iaW5nLgor KyAqIEl0IGNvdWxkIGZvciBleGFtcGxlIGJlIGFuIGV4cGVuc2l2ZSB0byBzcGluIHVwIGhhcmR3 YXJlIGRlY29kZXIsCisrICogb3IgaXQgY291bGQgc2ltcGx5IG5vdCBwcm92aWRlIGEgbG90IG9m IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dAorKyAqIHRoZSBzdHJlYW0uCisrICogQSBkZWNvZGVy IG1hcmtlZCB3aXRoIHRoaXMgZmxhZyBzaG91bGQgb25seSBiZSB1c2VkIGFzIGxhc3QgcmVzb3J0 CisrICogY2hvaWNlIGZvciBwcm9iaW5nLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0FW T0lEX1BST0JJTkcgICAgICAgKDEgPDwgMTcpCisrCisrLyoqCisrICogQ29kZWMgaXMgYmFja2Vk IGJ5IGEgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24uIFR5cGljYWxseSB1c2VkIHRvCisrICogaWRl bnRpZnkgYSBub24taHdhY2NlbCBoYXJkd2FyZSBkZWNvZGVyLiBGb3IgaW5mb3JtYXRpb24gYWJv dXQgaHdhY2NlbHMsIHVzZQorKyAqIGF2Y29kZWNfZ2V0X2h3X2NvbmZpZygpIGluc3RlYWQuCisr ICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfSEFSRFdBUkUgICAgICAgICAgICAoMSA8PCAxOCkK KysKKysvKioKKysgKiBDb2RlYyBpcyBwb3RlbnRpYWxseSBiYWNrZWQgYnkgYSBoYXJkd2FyZSBp bXBsZW1lbnRhdGlvbiwgYnV0IG5vdAorKyAqIG5lY2Vzc2FyaWx5LiBUaGlzIGlzIHVzZWQgaW5z dGVhZCBvZiBBVl9DT0RFQ19DQVBfSEFSRFdBUkUsIGlmIHRoZQorKyAqIGltcGxlbWVudGF0aW9u IHByb3ZpZGVzIHNvbWUgc29ydCBvZiBpbnRlcm5hbCBmYWxsYmFjay4KKysgKi8KKysjZGVmaW5l IEFWX0NPREVDX0NBUF9IWUJSSUQgICAgICAgICAgICAgICgxIDw8IDE5KQorKworKy8qKgorKyAq IFRoaXMgZW5jb2RlciBjYW4gcmVvcmRlciB1c2VyIG9wYXF1ZSB2YWx1ZXMgZnJvbSBpbnB1dCBB VkZyYW1lcyBhbmQgcmV0dXJuCisrICogdGhlbSB3aXRoIGNvcnJlc3BvbmRpbmcgb3V0cHV0IHBh Y2tldHMuCisrICogQHNlZSBBVl9DT0RFQ19GTEFHX0NPUFlfT1BBUVVFCisrICovCisrI2RlZmlu ZSBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFICgxIDw8IDIwKQorKworKy8q KgorKyAqIFRoaXMgZW5jb2RlciBjYW4gYmUgZmx1c2hlZCB1c2luZyBhdmNvZGVjX2ZsdXNoX2J1 ZmZlcnMoKS4gSWYgdGhpcyBmbGFnIGlzCisrICogbm90IHNldCwgdGhlIGVuY29kZXIgbXVzdCBi ZSBjbG9zZWQgYW5kIHJlb3BlbmVkIHRvIGVuc3VyZSB0aGF0IG5vIGZyYW1lcworKyAqIHJlbWFp biBwZW5kaW5nLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfRkxVU0ggICAo MSA8PCAyMSkKKysKKysvKioKKysgKiBUaGUgZW5jb2RlciBpcyBhYmxlIHRvIG91dHB1dCByZWNv bnN0cnVjdGVkIGZyYW1lIGRhdGEsIGkuZS4gcmF3IGZyYW1lcyB0aGF0CisrICogd291bGQgYmUg cHJvZHVjZWQgYnkgZGVjb2RpbmcgdGhlIGVuY29kZWQgYml0c3RyZWFtLgorKyAqCisrICogUmVj b25zdHJ1Y3RlZCBmcmFtZSBvdXRwdXQgaXMgZW5hYmxlZCBieSB0aGUgQVZfQ09ERUNfRkxBR19S RUNPTl9GUkFNRSBmbGFnLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfUkVD T05fRlJBTUUgKDEgPDwgMjIpCisrCisrLyoqCisrICogQVZQcm9maWxlLgorKyAqLworK3R5cGVk ZWYgc3RydWN0IEFWUHJvZmlsZSB7CisrICAgIGludCBwcm9maWxlOworKyAgICBjb25zdCBjaGFy ICpuYW1lOyAvLy88IHNob3J0IG5hbWUgZm9yIHRoZSBwcm9maWxlCisrfSBBVlByb2ZpbGU7Cisr CisrLyoqCisrICogQVZDb2RlYy4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNvZGVjIHsKKysg ICAgLyoqCisrICAgICAqIE5hbWUgb2YgdGhlIGNvZGVjIGltcGxlbWVudGF0aW9uLgorKyAgICAg KiBUaGUgbmFtZSBpcyBnbG9iYWxseSB1bmlxdWUgYW1vbmcgZW5jb2RlcnMgYW5kIGFtb25nIGRl Y29kZXJzIChidXQgYW4KKysgICAgICogZW5jb2RlciBhbmQgYSBkZWNvZGVyIGNhbiBzaGFyZSB0 aGUgc2FtZSBuYW1lKS4KKysgICAgICogVGhpcyBpcyB0aGUgcHJpbWFyeSB3YXkgdG8gZmluZCBh IGNvZGVjIGZyb20gdGhlIHVzZXIgcGVyc3BlY3RpdmUuCisrICAgICAqLworKyAgICBjb25zdCBj aGFyICpuYW1lOworKyAgICAvKioKKysgICAgICogRGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhlIGNv ZGVjLCBtZWFudCB0byBiZSBtb3JlIGh1bWFuIHJlYWRhYmxlIHRoYW4gbmFtZS4KKysgICAgICog WW91IHNob3VsZCB1c2UgdGhlIE5VTExfSUZfQ09ORklHX1NNQUxMKCkgbWFjcm8gdG8gZGVmaW5l IGl0LgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAqbG9uZ19uYW1lOworKyAgICBlbnVtIEFW TWVkaWFUeXBlIHR5cGU7CisrICAgIGVudW0gQVZDb2RlY0lEIGlkOworKyAgICAvKioKKysgICAg ICogQ29kZWMgY2FwYWJpbGl0aWVzLgorKyAgICAgKiBzZWUgQVZfQ09ERUNfQ0FQXyoKKysgICAg ICovCisrICAgIGludCBjYXBhYmlsaXRpZXM7CisrICAgIHVpbnQ4X3QgbWF4X2xvd3JlczsgICAg ICAgICAgICAgICAgICAgICAvLy88IG1heGltdW0gdmFsdWUgZm9yIGxvd3JlcyBzdXBwb3J0ZWQg YnkgdGhlIGRlY29kZXIKKysKKysgICAgY29uc3QgQVZDbGFzcyAqcHJpdl9jbGFzczsgICAgICAg ICAgICAgIC8vLzwgQVZDbGFzcyBmb3IgdGhlIHByaXZhdGUgY29udGV4dAorKyAgICBjb25zdCBB VlByb2ZpbGUgKnByb2ZpbGVzOyAgICAgICAgICAgICAgLy8vPCBhcnJheSBvZiByZWNvZ25pemVk IHByb2ZpbGVzLCBvciBOVUxMIGlmIHVua25vd24sIGFycmF5IGlzIHRlcm1pbmF0ZWQgYnkge0FW X1BST0ZJTEVfVU5LTk9XTn0KKysKKysgICAgLyoqCisrICAgICAqIEdyb3VwIG5hbWUgb2YgdGhl IGNvZGVjIGltcGxlbWVudGF0aW9uLgorKyAgICAgKiBUaGlzIGlzIGEgc2hvcnQgc3ltYm9saWMg bmFtZSBvZiB0aGUgd3JhcHBlciBiYWNraW5nIHRoaXMgY29kZWMuIEEKKysgICAgICogd3JhcHBl ciB1c2VzIHNvbWUga2luZCBvZiBleHRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGNvZGVj LCBzdWNoCisrICAgICAqIGFzIGFuIGV4dGVybmFsIGxpYnJhcnksIG9yIGEgY29kZWMgaW1wbGVt ZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIE9TIG9yCisrICAgICAqIHRoZSBoYXJkd2FyZS4KKysg ICAgICogSWYgdGhpcyBmaWVsZCBpcyBOVUxMLCB0aGlzIGlzIGEgYnVpbHRpbiwgbGliYXZjb2Rl YyBuYXRpdmUgY29kZWMuCisrICAgICAqIElmIG5vbi1OVUxMLCB0aGlzIHdpbGwgYmUgdGhlIHN1 ZmZpeCBpbiBBVkNvZGVjLm5hbWUgaW4gbW9zdCBjYXNlcworKyAgICAgKiAodXN1YWxseSBBVkNv ZGVjLm5hbWUgd2lsbCBiZSBvZiB0aGUgZm9ybSAiPGNvZGVjX25hbWU+Xzx3cmFwcGVyX25hbWU+ IikuCisrICAgICAqLworKyAgICBjb25zdCBjaGFyICp3cmFwcGVyX25hbWU7CisrfSBBVkNvZGVj OworKworKy8qKgorKyAqIEl0ZXJhdGUgb3ZlciBhbGwgcmVnaXN0ZXJlZCBjb2RlY3MuCisrICoK KysgKiBAcGFyYW0gb3BhcXVlIGEgcG9pbnRlciB3aGVyZSBsaWJhdmNvZGVjIHdpbGwgc3RvcmUg dGhlIGl0ZXJhdGlvbiBzdGF0ZS4gTXVzdAorKyAqICAgICAgICAgICAgICAgcG9pbnQgdG8gTlVM TCB0byBzdGFydCB0aGUgaXRlcmF0aW9uLgorKyAqCisrICogQHJldHVybiB0aGUgbmV4dCByZWdp c3RlcmVkIGNvZGVjIG9yIE5VTEwgd2hlbiB0aGUgaXRlcmF0aW9uIGlzCisrICogICAgICAgICBm aW5pc2hlZAorKyAqLworK2NvbnN0IEFWQ29kZWMgKmF2X2NvZGVjX2l0ZXJhdGUodm9pZCAqKm9w YXF1ZSk7CisrCisrLyoqCisrICogRmluZCBhIHJlZ2lzdGVyZWQgZGVjb2RlciB3aXRoIGEgbWF0 Y2hpbmcgY29kZWMgSUQuCisrICoKKysgKiBAcGFyYW0gaWQgQVZDb2RlY0lEIG9mIHRoZSByZXF1 ZXN0ZWQgZGVjb2RlcgorKyAqIEByZXR1cm4gQSBkZWNvZGVyIGlmIG9uZSB3YXMgZm91bmQsIE5V TEwgb3RoZXJ3aXNlLgorKyAqLworK2NvbnN0IEFWQ29kZWMgKmF2Y29kZWNfZmluZF9kZWNvZGVy KGVudW0gQVZDb2RlY0lEIGlkKTsKKysKKysvKioKKysgKiBGaW5kIGEgcmVnaXN0ZXJlZCBkZWNv ZGVyIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorKyAqCisrICogQHBhcmFtIG5hbWUgbmFtZSBv ZiB0aGUgcmVxdWVzdGVkIGRlY29kZXIKKysgKiBAcmV0dXJuIEEgZGVjb2RlciBpZiBvbmUgd2Fz IGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKysgKi8KKytjb25zdCBBVkNvZGVjICphdmNvZGVjX2Zp bmRfZGVjb2Rlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIEZpbmQg YSByZWdpc3RlcmVkIGVuY29kZXIgd2l0aCBhIG1hdGNoaW5nIGNvZGVjIElELgorKyAqCisrICog QHBhcmFtIGlkIEFWQ29kZWNJRCBvZiB0aGUgcmVxdWVzdGVkIGVuY29kZXIKKysgKiBAcmV0dXJu IEFuIGVuY29kZXIgaWYgb25lIHdhcyBmb3VuZCwgTlVMTCBvdGhlcndpc2UuCisrICovCisrY29u c3QgQVZDb2RlYyAqYXZjb2RlY19maW5kX2VuY29kZXIoZW51bSBBVkNvZGVjSUQgaWQpOworKwor Ky8qKgorKyAqIEZpbmQgYSByZWdpc3RlcmVkIGVuY29kZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5h bWUuCisrICoKKysgKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSByZXF1ZXN0ZWQgZW5jb2Rlcgor KyAqIEByZXR1cm4gQW4gZW5jb2RlciBpZiBvbmUgd2FzIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4K KysgKi8KKytjb25zdCBBVkNvZGVjICphdmNvZGVjX2ZpbmRfZW5jb2Rlcl9ieV9uYW1lKGNvbnN0 IGNoYXIgKm5hbWUpOworKy8qKgorKyAqIEByZXR1cm4gYSBub24temVybyBudW1iZXIgaWYgY29k ZWMgaXMgYW4gZW5jb2RlciwgemVybyBvdGhlcndpc2UKKysgKi8KKytpbnQgYXZfY29kZWNfaXNf ZW5jb2Rlcihjb25zdCBBVkNvZGVjICpjb2RlYyk7CisrCisrLyoqCisrICogQHJldHVybiBhIG5v bi16ZXJvIG51bWJlciBpZiBjb2RlYyBpcyBhIGRlY29kZXIsIHplcm8gb3RoZXJ3aXNlCisrICov CisraW50IGF2X2NvZGVjX2lzX2RlY29kZXIoY29uc3QgQVZDb2RlYyAqY29kZWMpOworKworKy8q KgorKyAqIFJldHVybiBhIG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgcHJvZmlsZSwgaWYgYXZhaWxh YmxlLgorKyAqCisrICogQHBhcmFtIGNvZGVjIHRoZSBjb2RlYyB0aGF0IGlzIHNlYXJjaGVkIGZv ciB0aGUgZ2l2ZW4gcHJvZmlsZQorKyAqIEBwYXJhbSBwcm9maWxlIHRoZSBwcm9maWxlIHZhbHVl IGZvciB3aGljaCBhIG5hbWUgaXMgcmVxdWVzdGVkCisrICogQHJldHVybiBBIG5hbWUgZm9yIHRo ZSBwcm9maWxlIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKysgKi8KKytjb25zdCBjaGFyICph dl9nZXRfcHJvZmlsZV9uYW1lKGNvbnN0IEFWQ29kZWMgKmNvZGVjLCBpbnQgcHJvZmlsZSk7Cisr CisrZW51bSB7CisrICAgIC8qKgorKyAgICAgKiBUaGUgY29kZWMgc3VwcG9ydHMgdGhpcyBmb3Jt YXQgdmlhIHRoZSBod19kZXZpY2VfY3R4IGludGVyZmFjZS4KKysgICAgICoKKysgICAgICogV2hl biBzZWxlY3RpbmcgdGhpcyBmb3JtYXQsIEFWQ29kZWNDb250ZXh0Lmh3X2RldmljZV9jdHggc2hv dWxkCisrICAgICAqIGhhdmUgYmVlbiBzZXQgdG8gYSBkZXZpY2Ugb2YgdGhlIHNwZWNpZmllZCB0 eXBlIGJlZm9yZSBjYWxsaW5nCisrICAgICAqIGF2Y29kZWNfb3BlbjIoKS4KKysgICAgICovCisr ICAgIEFWX0NPREVDX0hXX0NPTkZJR19NRVRIT0RfSFdfREVWSUNFX0NUWCA9IDB4MDEsCisrICAg IC8qKgorKyAgICAgKiBUaGUgY29kZWMgc3VwcG9ydHMgdGhpcyBmb3JtYXQgdmlhIHRoZSBod19m cmFtZXNfY3R4IGludGVyZmFjZS4KKysgICAgICoKKysgICAgICogV2hlbiBzZWxlY3RpbmcgdGhp cyBmb3JtYXQgZm9yIGEgZGVjb2RlciwKKysgICAgICogQVZDb2RlY0NvbnRleHQuaHdfZnJhbWVz X2N0eCBzaG91bGQgYmUgc2V0IHRvIGEgc3VpdGFibGUgZnJhbWVzCisrICAgICAqIGNvbnRleHQg aW5zaWRlIHRoZSBnZXRfZm9ybWF0KCkgY2FsbGJhY2suICBUaGUgZnJhbWVzIGNvbnRleHQKKysg ICAgICogbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBvbiBhIGRldmljZSBvZiB0aGUgc3BlY2lmaWVk IHR5cGUuCisrICAgICAqCisrICAgICAqIFdoZW4gc2VsZWN0aW5nIHRoaXMgZm9ybWF0IGZvciBh biBlbmNvZGVyLAorKyAgICAgKiBBVkNvZGVjQ29udGV4dC5od19mcmFtZXNfY3R4IHNob3VsZCBi ZSBzZXQgdG8gdGhlIGNvbnRleHQgd2hpY2gKKysgICAgICogd2lsbCBiZSB1c2VkIGZvciB0aGUg aW5wdXQgZnJhbWVzIGJlZm9yZSBjYWxsaW5nIGF2Y29kZWNfb3BlbjIoKS4KKysgICAgICovCisr ICAgIEFWX0NPREVDX0hXX0NPTkZJR19NRVRIT0RfSFdfRlJBTUVTX0NUWCA9IDB4MDIsCisrICAg IC8qKgorKyAgICAgKiBUaGUgY29kZWMgc3VwcG9ydHMgdGhpcyBmb3JtYXQgYnkgc29tZSBpbnRl cm5hbCBtZXRob2QuCisrICAgICAqCisrICAgICAqIFRoaXMgZm9ybWF0IGNhbiBiZSBzZWxlY3Rl ZCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gLQorKyAgICAgKiBubyBkZXZp Y2Ugb3IgZnJhbWVzIGNvbnRleHQgaXMgcmVxdWlyZWQuCisrICAgICAqLworKyAgICBBVl9DT0RF Q19IV19DT05GSUdfTUVUSE9EX0lOVEVSTkFMICAgICAgPSAweDA0LAorKyAgICAvKioKKysgICAg ICogVGhlIGNvZGVjIHN1cHBvcnRzIHRoaXMgZm9ybWF0IGJ5IHNvbWUgYWQtaG9jIG1ldGhvZC4K KysgICAgICoKKysgICAgICogQWRkaXRpb25hbCBzZXR0aW5ncyBhbmQvb3IgZnVuY3Rpb24gY2Fs bHMgYXJlIHJlcXVpcmVkLiAgU2VlIHRoZQorKyAgICAgKiBjb2RlYy1zcGVjaWZpYyBkb2N1bWVu dGF0aW9uIGZvciBkZXRhaWxzLiAgKE1ldGhvZHMgcmVxdWlyaW5nCisrICAgICAqIHRoaXMgc29y dCBvZiBjb25maWd1cmF0aW9uIGFyZSBkZXByZWNhdGVkIGFuZCBvdGhlcnMgc2hvdWxkIGJlCisr ICAgICAqIHVzZWQgaW4gcHJlZmVyZW5jZS4pCisrICAgICAqLworKyAgICBBVl9DT0RFQ19IV19D T05GSUdfTUVUSE9EX0FEX0hPQyAgICAgICAgPSAweDA4LAorK307CisrCisrdHlwZWRlZiBzdHJ1 Y3QgQVZDb2RlY0hXQ29uZmlnIHsKKysgICAgLyoqCisrICAgICAqIEZvciBkZWNvZGVycywgYSBo YXJkd2FyZSBwaXhlbCBmb3JtYXQgd2hpY2ggdGhhdCBkZWNvZGVyIG1heSBiZQorKyAgICAgKiBh YmxlIHRvIGRlY29kZSB0byBpZiBzdWl0YWJsZSBoYXJkd2FyZSBpcyBhdmFpbGFibGUuCisrICAg ICAqCisrICAgICAqIEZvciBlbmNvZGVycywgYSBwaXhlbCBmb3JtYXQgd2hpY2ggdGhlIGVuY29k ZXIgbWF5IGJlIGFibGUgdG8KKysgICAgICogYWNjZXB0LiAgSWYgc2V0IHRvIEFWX1BJWF9GTVRf Tk9ORSwgdGhpcyBhcHBsaWVzIHRvIGFsbCBwaXhlbAorKyAgICAgKiBmb3JtYXRzIHN1cHBvcnRl ZCBieSB0aGUgY29kZWMuCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2Zt dDsKKysgICAgLyoqCisrICAgICAqIEJpdCBzZXQgb2YgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhP RF8qIGZsYWdzLCBkZXNjcmliaW5nIHRoZSBwb3NzaWJsZQorKyAgICAgKiBzZXR1cCBtZXRob2Rz IHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLgorKyAgICAgKi8KKysg ICAgaW50IG1ldGhvZHM7CisrICAgIC8qKgorKyAgICAgKiBUaGUgZGV2aWNlIHR5cGUgYXNzb2Np YXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uLgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlIHNl dCBmb3IgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhPRF9IV19ERVZJQ0VfQ1RYIGFuZAorKyAgICAg KiBBVl9DT0RFQ19IV19DT05GSUdfTUVUSE9EX0hXX0ZSQU1FU19DVFgsIG90aGVyd2lzZSB1bnVz ZWQuCisrICAgICAqLworKyAgICBlbnVtIEFWSFdEZXZpY2VUeXBlIGRldmljZV90eXBlOworK30g QVZDb2RlY0hXQ29uZmlnOworKworKy8qKgorKyAqIFJldHJpZXZlIHN1cHBvcnRlZCBoYXJkd2Fy ZSBjb25maWd1cmF0aW9ucyBmb3IgYSBjb2RlYy4KKysgKgorKyAqIFZhbHVlcyBvZiBpbmRleCBm cm9tIHplcm8gdG8gc29tZSBtYXhpbXVtIHJldHVybiB0aGUgaW5kZXhlZCBjb25maWd1cmF0aW9u CisrICogZGVzY3JpcHRvcjsgYWxsIG90aGVyIHZhbHVlcyByZXR1cm4gTlVMTC4gIElmIHRoZSBj b2RlYyBkb2VzIG5vdCBzdXBwb3J0CisrICogYW55IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRo ZW4gaXQgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuCisrICovCisrY29uc3QgQVZDb2RlY0hXQ29u ZmlnICphdmNvZGVjX2dldF9od19jb25maWcoY29uc3QgQVZDb2RlYyAqY29kZWMsIGludCBpbmRl eCk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZDT0RFQ19DT0RFQ19I ICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjX2lkLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2Nv ZGVjX2lkLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjX2lkLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEy OjIzOjQ3LjY3MzI4MDQ3MSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWNfaWQuaAkyMDI2LTA5 LTA3IDEyOjIzOjQ3LjY3Mjk1MDM1NSArMDIwMAorQEAgLTAsMCArMSw2ODYgQEAKKysvKgorKyAq IENvZGVjIElEcworKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisr ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisrICovCisrCisrI2lmbmRlZiBBVkNPREVDX0NPREVDX0lEX0gKKysjZGVmaW5lIEFWQ09E RUNfQ09ERUNfSURfSAorKworKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCisrI2luY2x1 ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQuaCIKKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZj X2NvcmUKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIElkZW50aWZ5IHRoZSBzeW50YXggYW5k IHNlbWFudGljcyBvZiB0aGUgYml0c3RyZWFtLgorKyAqIFRoZSBwcmluY2lwbGUgaXMgcm91Z2hs eToKKysgKiBUd28gZGVjb2RlcnMgd2l0aCB0aGUgc2FtZSBJRCBjYW4gZGVjb2RlIHRoZSBzYW1l IHN0cmVhbXMuCisrICogVHdvIGVuY29kZXJzIHdpdGggdGhlIHNhbWUgSUQgY2FuIGVuY29kZSBj b21wYXRpYmxlIHN0cmVhbXMuCisrICogVGhlcmUgbWF5IGJlIHNsaWdodCBkZXZpYXRpb25zIGZy b20gdGhlIHByaW5jaXBsZSBkdWUgdG8gaW1wbGVtZW50YXRpb24KKysgKiBkZXRhaWxzLgorKyAq CisrICogSWYgeW91IGFkZCBhIGNvZGVjIElEIHRvIHRoaXMgbGlzdCwgYWRkIGl0IHNvIHRoYXQK KysgKiAxLiBubyB2YWx1ZSBvZiBhbiBleGlzdGluZyBjb2RlYyBJRCBjaGFuZ2VzICh0aGF0IHdv dWxkIGJyZWFrIEFCSSksCisrICogMi4gaXQgaXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gc2lt aWxhciBjb2RlY3MKKysgKgorKyAqIEFmdGVyIGFkZGluZyBuZXcgY29kZWMgSURzLCBkbyBub3Qg Zm9yZ2V0IHRvIGFkZCBhbiBlbnRyeSB0byB0aGUgY29kZWMKKysgKiBkZXNjcmlwdG9yIGxpc3Qg YW5kIGJ1bXAgbGliYXZjb2RlYyBtaW5vciB2ZXJzaW9uLgorKyAqLworK2VudW0gQVZDb2RlY0lE IHsKKysgICAgQVZfQ09ERUNfSURfTk9ORSwKKysKKysgICAgLyogdmlkZW8gY29kZWNzICovCisr ICAgIEFWX0NPREVDX0lEX01QRUcxVklERU8sCisrICAgIEFWX0NPREVDX0lEX01QRUcyVklERU8s IC8vLzwgcHJlZmVycmVkIElEIGZvciBNUEVHLTEvMiB2aWRlbyBkZWNvZGluZworKyAgICBBVl9D T0RFQ19JRF9IMjYxLAorKyAgICBBVl9DT0RFQ19JRF9IMjYzLAorKyAgICBBVl9DT0RFQ19JRF9S VjEwLAorKyAgICBBVl9DT0RFQ19JRF9SVjIwLAorKyAgICBBVl9DT0RFQ19JRF9NSlBFRywKKysg ICAgQVZfQ09ERUNfSURfTUpQRUdCLAorKyAgICBBVl9DT0RFQ19JRF9MSlBFRywKKysgICAgQVZf Q09ERUNfSURfU1A1WCwKKysgICAgQVZfQ09ERUNfSURfSlBFR0xTLAorKyAgICBBVl9DT0RFQ19J RF9NUEVHNCwKKysgICAgQVZfQ09ERUNfSURfUkFXVklERU8sCisrICAgIEFWX0NPREVDX0lEX01T TVBFRzRWMSwKKysgICAgQVZfQ09ERUNfSURfTVNNUEVHNFYyLAorKyAgICBBVl9DT0RFQ19JRF9N U01QRUc0VjMsCisrICAgIEFWX0NPREVDX0lEX1dNVjEsCisrICAgIEFWX0NPREVDX0lEX1dNVjIs CisrICAgIEFWX0NPREVDX0lEX0gyNjNQLAorKyAgICBBVl9DT0RFQ19JRF9IMjYzSSwKKysgICAg QVZfQ09ERUNfSURfRkxWMSwKKysgICAgQVZfQ09ERUNfSURfU1ZRMSwKKysgICAgQVZfQ09ERUNf SURfU1ZRMywKKysgICAgQVZfQ09ERUNfSURfRFZWSURFTywKKysgICAgQVZfQ09ERUNfSURfSFVG RllVViwKKysgICAgQVZfQ09ERUNfSURfQ1lVViwKKysgICAgQVZfQ09ERUNfSURfSDI2NCwKKysg ICAgQVZfQ09ERUNfSURfSU5ERU8zLAorKyAgICBBVl9DT0RFQ19JRF9WUDMsCisrICAgIEFWX0NP REVDX0lEX1RIRU9SQSwKKysgICAgQVZfQ09ERUNfSURfQVNWMSwKKysgICAgQVZfQ09ERUNfSURf QVNWMiwKKysgICAgQVZfQ09ERUNfSURfRkZWMSwKKysgICAgQVZfQ09ERUNfSURfNFhNLAorKyAg ICBBVl9DT0RFQ19JRF9WQ1IxLAorKyAgICBBVl9DT0RFQ19JRF9DTEpSLAorKyAgICBBVl9DT0RF Q19JRF9NREVDLAorKyAgICBBVl9DT0RFQ19JRF9ST1EsCisrICAgIEFWX0NPREVDX0lEX0lOVEVS UExBWV9WSURFTywKKysgICAgQVZfQ09ERUNfSURfWEFOX1dDMywKKysgICAgQVZfQ09ERUNfSURf WEFOX1dDNCwKKysgICAgQVZfQ09ERUNfSURfUlBaQSwKKysgICAgQVZfQ09ERUNfSURfQ0lORVBB SywKKysgICAgQVZfQ09ERUNfSURfV1NfVlFBLAorKyAgICBBVl9DT0RFQ19JRF9NU1JMRSwKKysg ICAgQVZfQ09ERUNfSURfTVNWSURFTzEsCisrICAgIEFWX0NPREVDX0lEX0lEQ0lOLAorKyAgICBB Vl9DT0RFQ19JRF84QlBTLAorKyAgICBBVl9DT0RFQ19JRF9TTUMsCisrICAgIEFWX0NPREVDX0lE X0ZMSUMsCisrICAgIEFWX0NPREVDX0lEX1RSVUVNT1RJT04xLAorKyAgICBBVl9DT0RFQ19JRF9W TURWSURFTywKKysgICAgQVZfQ09ERUNfSURfTVNaSCwKKysgICAgQVZfQ09ERUNfSURfWkxJQiwK KysgICAgQVZfQ09ERUNfSURfUVRSTEUsCisrICAgIEFWX0NPREVDX0lEX1RTQ0MsCisrICAgIEFW X0NPREVDX0lEX1VMVEksCisrICAgIEFWX0NPREVDX0lEX1FEUkFXLAorKyAgICBBVl9DT0RFQ19J RF9WSVhMLAorKyAgICBBVl9DT0RFQ19JRF9RUEVHLAorKyAgICBBVl9DT0RFQ19JRF9QTkcsCisr ICAgIEFWX0NPREVDX0lEX1BQTSwKKysgICAgQVZfQ09ERUNfSURfUEJNLAorKyAgICBBVl9DT0RF Q19JRF9QR00sCisrICAgIEFWX0NPREVDX0lEX1BHTVlVViwKKysgICAgQVZfQ09ERUNfSURfUEFN LAorKyAgICBBVl9DT0RFQ19JRF9GRlZIVUZGLAorKyAgICBBVl9DT0RFQ19JRF9SVjMwLAorKyAg ICBBVl9DT0RFQ19JRF9SVjQwLAorKyAgICBBVl9DT0RFQ19JRF9WQzEsCisrICAgIEFWX0NPREVD X0lEX1dNVjMsCisrICAgIEFWX0NPREVDX0lEX0xPQ08sCisrICAgIEFWX0NPREVDX0lEX1dOVjEs CisrICAgIEFWX0NPREVDX0lEX0FBU0MsCisrICAgIEFWX0NPREVDX0lEX0lOREVPMiwKKysgICAg QVZfQ09ERUNfSURfRlJBUFMsCisrICAgIEFWX0NPREVDX0lEX1RSVUVNT1RJT04yLAorKyAgICBB Vl9DT0RFQ19JRF9CTVAsCisrICAgIEFWX0NPREVDX0lEX0NTQ0QsCisrICAgIEFWX0NPREVDX0lE X01NVklERU8sCisrICAgIEFWX0NPREVDX0lEX1pNQlYsCisrICAgIEFWX0NPREVDX0lEX0FWUywK KysgICAgQVZfQ09ERUNfSURfU01BQ0tWSURFTywKKysgICAgQVZfQ09ERUNfSURfTlVWLAorKyAg ICBBVl9DT0RFQ19JRF9LTVZDLAorKyAgICBBVl9DT0RFQ19JRF9GTEFTSFNWLAorKyAgICBBVl9D T0RFQ19JRF9DQVZTLAorKyAgICBBVl9DT0RFQ19JRF9KUEVHMjAwMCwKKysgICAgQVZfQ09ERUNf SURfVk1OQywKKysgICAgQVZfQ09ERUNfSURfVlA1LAorKyAgICBBVl9DT0RFQ19JRF9WUDYsCisr ICAgIEFWX0NPREVDX0lEX1ZQNkYsCisrICAgIEFWX0NPREVDX0lEX1RBUkdBLAorKyAgICBBVl9D T0RFQ19JRF9EU0lDSU5WSURFTywKKysgICAgQVZfQ09ERUNfSURfVElFUlRFWFNFUVZJREVPLAor KyAgICBBVl9DT0RFQ19JRF9USUZGLAorKyAgICBBVl9DT0RFQ19JRF9HSUYsCisrICAgIEFWX0NP REVDX0lEX0RYQSwKKysgICAgQVZfQ09ERUNfSURfRE5YSEQsCisrICAgIEFWX0NPREVDX0lEX1RI UCwKKysgICAgQVZfQ09ERUNfSURfU0dJLAorKyAgICBBVl9DT0RFQ19JRF9DOTMsCisrICAgIEFW X0NPREVDX0lEX0JFVEhTT0ZUVklELAorKyAgICBBVl9DT0RFQ19JRF9QVFgsCisrICAgIEFWX0NP REVDX0lEX1RYRCwKKysgICAgQVZfQ09ERUNfSURfVlA2QSwKKysgICAgQVZfQ09ERUNfSURfQU1W LAorKyAgICBBVl9DT0RFQ19JRF9WQiwKKysgICAgQVZfQ09ERUNfSURfUENYLAorKyAgICBBVl9D T0RFQ19JRF9TVU5SQVNULAorKyAgICBBVl9DT0RFQ19JRF9JTkRFTzQsCisrICAgIEFWX0NPREVD X0lEX0lOREVPNSwKKysgICAgQVZfQ09ERUNfSURfTUlNSUMsCisrICAgIEFWX0NPREVDX0lEX1JM MiwKKysgICAgQVZfQ09ERUNfSURfRVNDQVBFMTI0LAorKyAgICBBVl9DT0RFQ19JRF9ESVJBQywK KysgICAgQVZfQ09ERUNfSURfQkZJLAorKyAgICBBVl9DT0RFQ19JRF9DTVYsCisrICAgIEFWX0NP REVDX0lEX01PVElPTlBJWEVMUywKKysgICAgQVZfQ09ERUNfSURfVEdWLAorKyAgICBBVl9DT0RF Q19JRF9UR1EsCisrICAgIEFWX0NPREVDX0lEX1RRSSwKKysgICAgQVZfQ09ERUNfSURfQVVSQSwK KysgICAgQVZfQ09ERUNfSURfQVVSQTIsCisrICAgIEFWX0NPREVDX0lEX1YyMTBYLAorKyAgICBB Vl9DT0RFQ19JRF9UTVYsCisrICAgIEFWX0NPREVDX0lEX1YyMTAsCisrICAgIEFWX0NPREVDX0lE X0RQWCwKKysgICAgQVZfQ09ERUNfSURfTUFELAorKyAgICBBVl9DT0RFQ19JRF9GUldVLAorKyAg ICBBVl9DT0RFQ19JRF9GTEFTSFNWMiwKKysgICAgQVZfQ09ERUNfSURfQ0RHUkFQSElDUywKKysg ICAgQVZfQ09ERUNfSURfUjIxMCwKKysgICAgQVZfQ09ERUNfSURfQU5NLAorKyAgICBBVl9DT0RF Q19JRF9CSU5LVklERU8sCisrICAgIEFWX0NPREVDX0lEX0lGRl9JTEJNLAorKyNkZWZpbmUgQVZf Q09ERUNfSURfSUZGX0JZVEVSVU4xIEFWX0NPREVDX0lEX0lGRl9JTEJNCisrICAgIEFWX0NPREVD X0lEX0tHVjEsCisrICAgIEFWX0NPREVDX0lEX1lPUCwKKysgICAgQVZfQ09ERUNfSURfVlA4LAor KyAgICBBVl9DT0RFQ19JRF9QSUNUT1IsCisrICAgIEFWX0NPREVDX0lEX0FOU0ksCisrICAgIEFW X0NPREVDX0lEX0E2NF9NVUxUSSwKKysgICAgQVZfQ09ERUNfSURfQTY0X01VTFRJNSwKKysgICAg QVZfQ09ERUNfSURfUjEwSywKKysgICAgQVZfQ09ERUNfSURfTVhQRUcsCisrICAgIEFWX0NPREVD X0lEX0xBR0FSSVRILAorKyAgICBBVl9DT0RFQ19JRF9QUk9SRVMsCisrICAgIEFWX0NPREVDX0lE X0pWLAorKyAgICBBVl9DT0RFQ19JRF9ERkEsCisrICAgIEFWX0NPREVDX0lEX1dNVjNJTUFHRSwK KysgICAgQVZfQ09ERUNfSURfVkMxSU1BR0UsCisrICAgIEFWX0NPREVDX0lEX1VUVklERU8sCisr ICAgIEFWX0NPREVDX0lEX0JNVl9WSURFTywKKysgICAgQVZfQ09ERUNfSURfVkJMRSwKKysgICAg QVZfQ09ERUNfSURfRFhUT1JZLAorKyAgICBBVl9DT0RFQ19JRF9YV0QsCisrICAgIEFWX0NPREVD X0lEX0NEWEwsCisrICAgIEFWX0NPREVDX0lEX1hCTSwKKysgICAgQVZfQ09ERUNfSURfWkVST0NP REVDLAorKyAgICBBVl9DT0RFQ19JRF9NU1MxLAorKyAgICBBVl9DT0RFQ19JRF9NU0ExLAorKyAg ICBBVl9DT0RFQ19JRF9UU0NDMiwKKysgICAgQVZfQ09ERUNfSURfTVRTMiwKKysgICAgQVZfQ09E RUNfSURfQ0xMQywKKysgICAgQVZfQ09ERUNfSURfTVNTMiwKKysgICAgQVZfQ09ERUNfSURfVlA5 LAorKyAgICBBVl9DT0RFQ19JRF9BSUMsCisrICAgIEFWX0NPREVDX0lEX0VTQ0FQRTEzMCwKKysg ICAgQVZfQ09ERUNfSURfRzJNLAorKyAgICBBVl9DT0RFQ19JRF9XRUJQLAorKyAgICBBVl9DT0RF Q19JRF9ITk00X1ZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9IRVZDLAorKyNkZWZpbmUgQVZfQ09E RUNfSURfSDI2NSBBVl9DT0RFQ19JRF9IRVZDCisrICAgIEFWX0NPREVDX0lEX0ZJQywKKysgICAg QVZfQ09ERUNfSURfQUxJQVNfUElYLAorKyAgICBBVl9DT0RFQ19JRF9CUkVOREVSX1BJWCwKKysg ICAgQVZfQ09ERUNfSURfUEFGX1ZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9FWFIsCisrICAgIEFW X0NPREVDX0lEX1ZQNywKKysgICAgQVZfQ09ERUNfSURfU0FOTSwKKysgICAgQVZfQ09ERUNfSURf U0dJUkxFLAorKyAgICBBVl9DT0RFQ19JRF9NVkMxLAorKyAgICBBVl9DT0RFQ19JRF9NVkMyLAor KyAgICBBVl9DT0RFQ19JRF9IUVgsCisrICAgIEFWX0NPREVDX0lEX1REU0MsCisrICAgIEFWX0NP REVDX0lEX0hRX0hRQSwKKysgICAgQVZfQ09ERUNfSURfSEFQLAorKyAgICBBVl9DT0RFQ19JRF9E RFMsCisrICAgIEFWX0NPREVDX0lEX0RYViwKKysgICAgQVZfQ09ERUNfSURfU0NSRUVOUFJFU1NP LAorKyAgICBBVl9DT0RFQ19JRF9SU0NDLAorKyAgICBBVl9DT0RFQ19JRF9BVlMyLAorKyAgICBB Vl9DT0RFQ19JRF9QR1gsCisrICAgIEFWX0NPREVDX0lEX0FWUzMsCisrICAgIEFWX0NPREVDX0lE X01TUDIsCisrICAgIEFWX0NPREVDX0lEX1ZWQywKKysjZGVmaW5lIEFWX0NPREVDX0lEX0gyNjYg QVZfQ09ERUNfSURfVlZDCisrICAgIEFWX0NPREVDX0lEX1k0MVAsCisrICAgIEFWX0NPREVDX0lE X0FWUlAsCisrICAgIEFWX0NPREVDX0lEXzAxMlYsCisrICAgIEFWX0NPREVDX0lEX0FWVUksCisr ICAgIEFWX0NPREVDX0lEX1RBUkdBX1kyMTYsCisrICAgIEFWX0NPREVDX0lEX1lVVjQsCisrICAg IEFWX0NPREVDX0lEX0FWUk4sCisrICAgIEFWX0NPREVDX0lEX0NQSUEsCisrICAgIEFWX0NPREVD X0lEX1hGQUNFLAorKyAgICBBVl9DT0RFQ19JRF9TTk9XLAorKyAgICBBVl9DT0RFQ19JRF9TTVZK UEVHLAorKyAgICBBVl9DT0RFQ19JRF9BUE5HLAorKyAgICBBVl9DT0RFQ19JRF9EQUFMQSwKKysg ICAgQVZfQ09ERUNfSURfQ0ZIRCwKKysgICAgQVZfQ09ERUNfSURfVFJVRU1PVElPTjJSVCwKKysg ICAgQVZfQ09ERUNfSURfTTEwMSwKKysgICAgQVZfQ09ERUNfSURfTUFHSUNZVVYsCisrICAgIEFW X0NPREVDX0lEX1NIRUVSVklERU8sCisrICAgIEFWX0NPREVDX0lEX1lMQywKKysgICAgQVZfQ09E RUNfSURfUFNELAorKyAgICBBVl9DT0RFQ19JRF9QSVhMRVQsCisrICAgIEFWX0NPREVDX0lEX1NQ RUVESFEsCisrICAgIEFWX0NPREVDX0lEX0ZNVkMsCisrICAgIEFWX0NPREVDX0lEX1NDUFIsCisr ICAgIEFWX0NPREVDX0lEX0NMRUFSVklERU8sCisrICAgIEFWX0NPREVDX0lEX1hQTSwKKysgICAg QVZfQ09ERUNfSURfQVYxLAorKyAgICBBVl9DT0RFQ19JRF9CSVRQQUNLRUQsCisrICAgIEFWX0NP REVDX0lEX01TQ0MsCisrICAgIEFWX0NPREVDX0lEX1NSR0MsCisrICAgIEFWX0NPREVDX0lEX1NW RywKKysgICAgQVZfQ09ERUNfSURfR0RWLAorKyAgICBBVl9DT0RFQ19JRF9GSVRTLAorKyAgICBB Vl9DT0RFQ19JRF9JTU00LAorKyAgICBBVl9DT0RFQ19JRF9QUk9TVU1FUiwKKysgICAgQVZfQ09E RUNfSURfTVdTQywKKysgICAgQVZfQ09ERUNfSURfV0NNViwKKysgICAgQVZfQ09ERUNfSURfUkFT QywKKysgICAgQVZfQ09ERUNfSURfSFlNVCwKKysgICAgQVZfQ09ERUNfSURfQVJCQywKKysgICAg QVZfQ09ERUNfSURfQUdNLAorKyAgICBBVl9DT0RFQ19JRF9MU0NSLAorKyAgICBBVl9DT0RFQ19J RF9WUDQsCisrICAgIEFWX0NPREVDX0lEX0lNTTUsCisrICAgIEFWX0NPREVDX0lEX01WRFYsCisr ICAgIEFWX0NPREVDX0lEX01WSEEsCisrICAgIEFWX0NPREVDX0lEX0NEVE9PTlMsCisrICAgIEFW X0NPREVDX0lEX01WMzAsCisrICAgIEFWX0NPREVDX0lEX05PVENITEMsCisrICAgIEFWX0NPREVD X0lEX1BGTSwKKysgICAgQVZfQ09ERUNfSURfTU9CSUNMSVAsCisrICAgIEFWX0NPREVDX0lEX1BI T1RPQ0QsCisrICAgIEFWX0NPREVDX0lEX0lQVSwKKysgICAgQVZfQ09ERUNfSURfQVJHTywKKysg ICAgQVZfQ09ERUNfSURfQ1JJLAorKyAgICBBVl9DT0RFQ19JRF9TSU1CSU9TSVNfSU1YLAorKyAg ICBBVl9DT0RFQ19JRF9TR0FfVklERU8sCisrICAgIEFWX0NPREVDX0lEX0dFTSwKKysgICAgQVZf Q09ERUNfSURfVkJOLAorKyAgICBBVl9DT0RFQ19JRF9KUEVHWEwsCisrICAgIEFWX0NPREVDX0lE X1FPSSwKKysgICAgQVZfQ09ERUNfSURfUEhNLAorKyAgICBBVl9DT0RFQ19JRF9SQURJQU5DRV9I RFIsCisrICAgIEFWX0NPREVDX0lEX1dCTVAsCisrICAgIEFWX0NPREVDX0lEX01FRElBMTAwLAor KyAgICBBVl9DT0RFQ19JRF9WUUMsCisrICAgIEFWX0NPREVDX0lEX1BEViwKKysgICAgQVZfQ09E RUNfSURfRVZDLAorKyAgICBBVl9DT0RFQ19JRF9SVFYxLAorKyAgICBBVl9DT0RFQ19JRF9WTUlY LAorKyAgICBBVl9DT0RFQ19JRF9MRUFELAorKyAgICBBVl9DT0RFQ19JRF9ETlhVQywKKysgICAg QVZfQ09ERUNfSURfUlY2MCwKKysgICAgQVZfQ09ERUNfSURfSlBFR1hMX0FOSU0sCisrICAgIEFW X0NPREVDX0lEX0FQViwKKysgICAgQVZfQ09ERUNfSURfUFJPUkVTX1JBVywKKysgICAgQVZfQ09E RUNfSURfSlBFR1hTLAorKyAgICBBVl9DT0RFQ19JRF9XRUJQX0FOSU0sCisrCisrICAgIC8qIHZh cmlvdXMgUENNICJjb2RlY3MiICovCisrICAgIEFWX0NPREVDX0lEX0ZJUlNUX0FVRElPID0gMHgx MDAwMCwgICAgIC8vLzwgQSBkdW1teSBpZCBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgYXVkaW8g Y29kZWNzCisrICAgIEFWX0NPREVDX0lEX1BDTV9TMTZMRSA9IDB4MTAwMDAsCisrICAgIEFWX0NP REVDX0lEX1BDTV9TMTZCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1UxNkxFLAorKyAgICBBVl9D T0RFQ19JRF9QQ01fVTE2QkUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TOCwKKysgICAgQVZfQ09E RUNfSURfUENNX1U4LAorKyAgICBBVl9DT0RFQ19JRF9QQ01fTVVMQVcsCisrICAgIEFWX0NPREVD X0lEX1BDTV9BTEFXLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzMyTEUsCisrICAgIEFWX0NPREVD X0lEX1BDTV9TMzJCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1UzMkxFLAorKyAgICBBVl9DT0RF Q19JRF9QQ01fVTMyQkUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TMjRMRSwKKysgICAgQVZfQ09E RUNfSURfUENNX1MyNEJFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fVTI0TEUsCisrICAgIEFWX0NP REVDX0lEX1BDTV9VMjRCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1MyNERBVUQsCisrICAgIEFW X0NPREVDX0lEX1BDTV9aT1JLLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzE2TEVfUExBTkFSLAor KyAgICBBVl9DT0RFQ19JRF9QQ01fRFZELAorKyAgICBBVl9DT0RFQ19JRF9QQ01fRjMyQkUsCisr ICAgIEFWX0NPREVDX0lEX1BDTV9GMzJMRSwKKysgICAgQVZfQ09ERUNfSURfUENNX0Y2NEJFLAor KyAgICBBVl9DT0RFQ19JRF9QQ01fRjY0TEUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9CTFVSQVks CisrICAgIEFWX0NPREVDX0lEX1BDTV9MWEYsCisrICAgIEFWX0NPREVDX0lEX1MzMDJNLAorKyAg ICBBVl9DT0RFQ19JRF9QQ01fUzhfUExBTkFSLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzI0TEVf UExBTkFSLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzMyTEVfUExBTkFSLAorKyAgICBBVl9DT0RF Q19JRF9QQ01fUzE2QkVfUExBTkFSLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzY0TEUsCisrICAg IEFWX0NPREVDX0lEX1BDTV9TNjRCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX0YxNkxFLAorKyAg ICBBVl9DT0RFQ19JRF9QQ01fRjI0TEUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9WSURDLAorKyAg ICBBVl9DT0RFQ19JRF9QQ01fU0dBLAorKworKyAgICAvKiB2YXJpb3VzIEFEUENNIGNvZGVjcyAq LworKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfUVQgPSAweDExMDAwLAorKyAgICBBVl9DT0RF Q19JRF9BRFBDTV9JTUFfV0FWLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfREszLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfREs0LAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFf V1MsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9TTUpQRUcsCisrICAgIEFWX0NPREVDX0lE X0FEUENNX01TLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV80WE0sCisrICAgIEFWX0NPREVDX0lE X0FEUENNX1hBLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9BRFgsCisrICAgIEFWX0NPREVDX0lE X0FEUENNX0VBLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9HNzI2LAorKyAgICBBVl9DT0RFQ19J RF9BRFBDTV9DVCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fU1dGLAorKyAgICBBVl9DT0RFQ19J RF9BRFBDTV9ZQU1BSEEsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX1NCUFJPXzQsCisrICAgIEFW X0NPREVDX0lEX0FEUENNX1NCUFJPXzMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX1NCUFJPXzIs CisrICAgIEFWX0NPREVDX0lEX0FEUENNX1RIUCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1B X0FNViwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fRUFfUjEsCisrICAgIEFWX0NPREVDX0lEX0FE UENNX0VBX1IzLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9FQV9SMiwKKysgICAgQVZfQ09ERUNf SURfQURQQ01fSU1BX0VBX1NFQUQsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9FQV9FQUNT LAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9FQV9YQVMsCisrICAgIEFWX0NPREVDX0lEX0FEUENN X0VBX01BWElTX1hBLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfSVNTLAorKyAgICBBVl9D T0RFQ19JRF9BRFBDTV9HNzIyLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfQVBDLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9WSU1BLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9BRkMsCisr ICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9PS0ksCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0RU SywKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX1JBRCwKKysgICAgQVZfQ09ERUNfSURfQURQ Q01fRzcyNkxFLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9USFBfTEUsCisrICAgIEFWX0NPREVD X0lEX0FEUENNX1BTWCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fQUlDQSwKKysgICAgQVZfQ09E RUNfSURfQURQQ01fSU1BX0RBVDQsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX01UQUYsCisrICAg IEFWX0NPREVDX0lEX0FEUENNX0FHTSwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fQVJHTywKKysg ICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX1NTSSwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fWk9S SywKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX0FQTSwKKysgICAgQVZfQ09ERUNfSURfQURQ Q01fSU1BX0FMUCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX01URiwKKysgICAgQVZfQ09E RUNfSURfQURQQ01fSU1BX0NVTk5JTkcsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9NT0ZM RVgsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9BQ09STiwKKysgICAgQVZfQ09ERUNfSURf QURQQ01fWE1ELAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfWEJPWCwKKysgICAgQVZfQ09E RUNfSURfQURQQ01fU0FOWU8sCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9IVlFNNCwKKysg ICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX1BEQSwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fTjY0 LAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfSFZRTTIsCisrICAgIEFWX0NPREVDX0lEX0FE UENNX0lNQV9NQUdJWCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fUFNYQywKKysgICAgQVZfQ09E RUNfSURfQURQQ01fQ0lSQ1VTLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfRVNDQVBFLAor KworKyAgICAvKiBBTVIgKi8KKysgICAgQVZfQ09ERUNfSURfQU1SX05CID0gMHgxMjAwMCwKKysg ICAgQVZfQ09ERUNfSURfQU1SX1dCLAorKworKyAgICAvKiBSZWFsQXVkaW8gY29kZWNzKi8KKysg ICAgQVZfQ09ERUNfSURfUkFfMTQ0ID0gMHgxMzAwMCwKKysgICAgQVZfQ09ERUNfSURfUkFfMjg4 LAorKworKyAgICAvKiB2YXJpb3VzIERQQ00gY29kZWNzICovCisrICAgIEFWX0NPREVDX0lEX1JP UV9EUENNID0gMHgxNDAwMCwKKysgICAgQVZfQ09ERUNfSURfSU5URVJQTEFZX0RQQ00sCisrICAg IEFWX0NPREVDX0lEX1hBTl9EUENNLAorKyAgICBBVl9DT0RFQ19JRF9TT0xfRFBDTSwKKysgICAg QVZfQ09ERUNfSURfU0RYMl9EUENNLAorKyAgICBBVl9DT0RFQ19JRF9HUkVNTElOX0RQQ00sCisr ICAgIEFWX0NPREVDX0lEX0RFUkZfRFBDTSwKKysgICAgQVZfQ09ERUNfSURfV0FEWV9EUENNLAor KyAgICBBVl9DT0RFQ19JRF9DQkQyX0RQQ00sCisrCisrICAgIC8qIGF1ZGlvIGNvZGVjcyAqLwor KyAgICBBVl9DT0RFQ19JRF9NUDIgPSAweDE1MDAwLAorKyAgICBBVl9DT0RFQ19JRF9NUDMsIC8v LzwgcHJlZmVycmVkIElEIGZvciBkZWNvZGluZyBNUEVHIGF1ZGlvIGxheWVyIDEsIDIgb3IgMwor KyAgICBBVl9DT0RFQ19JRF9BQUMsCisrICAgIEFWX0NPREVDX0lEX0FDMywKKysgICAgQVZfQ09E RUNfSURfRFRTLAorKyAgICBBVl9DT0RFQ19JRF9WT1JCSVMsCisrICAgIEFWX0NPREVDX0lEX0RW QVVESU8sCisrICAgIEFWX0NPREVDX0lEX1dNQVYxLAorKyAgICBBVl9DT0RFQ19JRF9XTUFWMiwK KysgICAgQVZfQ09ERUNfSURfTUFDRTMsCisrICAgIEFWX0NPREVDX0lEX01BQ0U2LAorKyAgICBB Vl9DT0RFQ19JRF9WTURBVURJTywKKysgICAgQVZfQ09ERUNfSURfRkxBQywKKysgICAgQVZfQ09E RUNfSURfTVAzQURVLAorKyAgICBBVl9DT0RFQ19JRF9NUDNPTjQsCisrICAgIEFWX0NPREVDX0lE X1NIT1JURU4sCisrICAgIEFWX0NPREVDX0lEX0FMQUMsCisrICAgIEFWX0NPREVDX0lEX1dFU1RX T09EX1NORDEsCisrICAgIEFWX0NPREVDX0lEX0dTTSwgLy8vPCBhcyBpbiBCZXJsaW4gdG9hc3Qg Zm9ybWF0CisrICAgIEFWX0NPREVDX0lEX1FETTIsCisrICAgIEFWX0NPREVDX0lEX0NPT0ssCisr ICAgIEFWX0NPREVDX0lEX1RSVUVTUEVFQ0gsCisrICAgIEFWX0NPREVDX0lEX1RUQSwKKysgICAg QVZfQ09ERUNfSURfU01BQ0tBVURJTywKKysgICAgQVZfQ09ERUNfSURfUUNFTFAsCisrICAgIEFW X0NPREVDX0lEX1dBVlBBQ0ssCisrICAgIEFWX0NPREVDX0lEX0RTSUNJTkFVRElPLAorKyAgICBB Vl9DT0RFQ19JRF9JTUMsCisrICAgIEFWX0NPREVDX0lEX01VU0VQQUNLNywKKysgICAgQVZfQ09E RUNfSURfTUxQLAorKyAgICBBVl9DT0RFQ19JRF9HU01fTVMsIC8qIGFzIGZvdW5kIGluIFdBViAq LworKyAgICBBVl9DT0RFQ19JRF9BVFJBQzMsCisrICAgIEFWX0NPREVDX0lEX0FQRSwKKysgICAg QVZfQ09ERUNfSURfTkVMTFlNT1NFUiwKKysgICAgQVZfQ09ERUNfSURfTVVTRVBBQ0s4LAorKyAg ICBBVl9DT0RFQ19JRF9TUEVFWCwKKysgICAgQVZfQ09ERUNfSURfV01BVk9JQ0UsCisrICAgIEFW X0NPREVDX0lEX1dNQVBSTywKKysgICAgQVZfQ09ERUNfSURfV01BTE9TU0xFU1MsCisrICAgIEFW X0NPREVDX0lEX0FUUkFDM1AsCisrICAgIEFWX0NPREVDX0lEX0VBQzMsCisrICAgIEFWX0NPREVD X0lEX1NJUFIsCisrICAgIEFWX0NPREVDX0lEX01QMSwKKysgICAgQVZfQ09ERUNfSURfVFdJTlZR LAorKyAgICBBVl9DT0RFQ19JRF9UUlVFSEQsCisrICAgIEFWX0NPREVDX0lEX01QNEFMUywKKysg ICAgQVZfQ09ERUNfSURfQVRSQUMxLAorKyAgICBBVl9DT0RFQ19JRF9CSU5LQVVESU9fUkRGVCwK KysgICAgQVZfQ09ERUNfSURfQklOS0FVRElPX0RDVCwKKysgICAgQVZfQ09ERUNfSURfQUFDX0xB VE0sCisrICAgIEFWX0NPREVDX0lEX1FETUMsCisrICAgIEFWX0NPREVDX0lEX0NFTFQsCisrICAg IEFWX0NPREVDX0lEX0c3MjNfMSwKKysgICAgQVZfQ09ERUNfSURfRzcyOSwKKysgICAgQVZfQ09E RUNfSURfOFNWWF9FWFAsCisrICAgIEFWX0NPREVDX0lEXzhTVlhfRklCLAorKyAgICBBVl9DT0RF Q19JRF9CTVZfQVVESU8sCisrICAgIEFWX0NPREVDX0lEX1JBTEYsCisrICAgIEFWX0NPREVDX0lE X0lBQywKKysgICAgQVZfQ09ERUNfSURfSUxCQywKKysgICAgQVZfQ09ERUNfSURfT1BVUywKKysg ICAgQVZfQ09ERUNfSURfQ09NRk9SVF9OT0lTRSwKKysgICAgQVZfQ09ERUNfSURfVEFLLAorKyAg ICBBVl9DT0RFQ19JRF9NRVRBU09VTkQsCisrICAgIEFWX0NPREVDX0lEX1BBRl9BVURJTywKKysg ICAgQVZfQ09ERUNfSURfT04yQVZDLAorKyAgICBBVl9DT0RFQ19JRF9EU1NfU1AsCisrICAgIEFW X0NPREVDX0lEX0NPREVDMiwKKysgICAgQVZfQ09ERUNfSURfRkZXQVZFU1lOVEgsCisrICAgIEFW X0NPREVDX0lEX1NPTklDLAorKyAgICBBVl9DT0RFQ19JRF9TT05JQ19MUywKKysgICAgQVZfQ09E RUNfSURfRVZSQywKKysgICAgQVZfQ09ERUNfSURfU01WLAorKyAgICBBVl9DT0RFQ19JRF9EU0Rf TFNCRiwKKysgICAgQVZfQ09ERUNfSURfRFNEX01TQkYsCisrICAgIEFWX0NPREVDX0lEX0RTRF9M U0JGX1BMQU5BUiwKKysgICAgQVZfQ09ERUNfSURfRFNEX01TQkZfUExBTkFSLAorKyAgICBBVl9D T0RFQ19JRF80R1YsCisrICAgIEFWX0NPREVDX0lEX0lOVEVSUExBWV9BQ00sCisrICAgIEFWX0NP REVDX0lEX1hNQTEsCisrICAgIEFWX0NPREVDX0lEX1hNQTIsCisrICAgIEFWX0NPREVDX0lEX0RT VCwKKysgICAgQVZfQ09ERUNfSURfQVRSQUMzQUwsCisrICAgIEFWX0NPREVDX0lEX0FUUkFDM1BB TCwKKysgICAgQVZfQ09ERUNfSURfRE9MQllfRSwKKysgICAgQVZfQ09ERUNfSURfQVBUWCwKKysg ICAgQVZfQ09ERUNfSURfQVBUWF9IRCwKKysgICAgQVZfQ09ERUNfSURfU0JDLAorKyAgICBBVl9D T0RFQ19JRF9BVFJBQzksCisrICAgIEFWX0NPREVDX0lEX0hDT00sCisrICAgIEFWX0NPREVDX0lE X0FDRUxQX0tFTFZJTiwKKysgICAgQVZfQ09ERUNfSURfTVBFR0hfM0RfQVVESU8sCisrICAgIEFW X0NPREVDX0lEX1NJUkVOLAorKyAgICBBVl9DT0RFQ19JRF9IQ0EsCisrICAgIEFWX0NPREVDX0lE X0ZBU1RBVURJTywKKysgICAgQVZfQ09ERUNfSURfTVNOU0lSRU4sCisrICAgIEFWX0NPREVDX0lE X0RGUFdNLAorKyAgICBBVl9DT0RFQ19JRF9CT05LLAorKyAgICBBVl9DT0RFQ19JRF9NSVNDNCwK KysgICAgQVZfQ09ERUNfSURfQVBBQywKKysgICAgQVZfQ09ERUNfSURfRlRSLAorKyAgICBBVl9D T0RFQ19JRF9XQVZBUkMsCisrICAgIEFWX0NPREVDX0lEX1JLQSwKKysgICAgQVZfQ09ERUNfSURf QUM0LAorKyAgICBBVl9DT0RFQ19JRF9PU1EsCisrICAgIEFWX0NPREVDX0lEX1FPQSwKKysgICAg QVZfQ09ERUNfSURfTEMzLAorKyAgICBBVl9DT0RFQ19JRF9HNzI4LAorKyAgICBBVl9DT0RFQ19J RF9BSFgsCisrICAgIEFWX0NPREVDX0lEX0FQUExFX0FQQUMsCisrCisrICAgIC8qIHN1YnRpdGxl IGNvZGVjcyAqLworKyAgICBBVl9DT0RFQ19JRF9GSVJTVF9TVUJUSVRMRSA9IDB4MTcwMDAsICAg ICAgICAgIC8vLzwgQSBkdW1teSBJRCBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2Ygc3VidGl0bGUg Y29kZWNzLgorKyAgICBBVl9DT0RFQ19JRF9EVkRfU1VCVElUTEUgPSAweDE3MDAwLAorKyAgICBB Vl9DT0RFQ19JRF9EVkJfU1VCVElUTEUsCisrICAgIEFWX0NPREVDX0lEX1RFWFQsICAvLy88IHJh dyBVVEYtOCB0ZXh0CisrICAgIEFWX0NPREVDX0lEX1hTVUIsCisrICAgIEFWX0NPREVDX0lEX1NT QSwKKysgICAgQVZfQ09ERUNfSURfTU9WX1RFWFQsCisrICAgIEFWX0NPREVDX0lEX0hETVZfUEdT X1NVQlRJVExFLAorKyAgICBBVl9DT0RFQ19JRF9EVkJfVEVMRVRFWFQsCisrICAgIEFWX0NPREVD X0lEX1NSVCwKKysgICAgQVZfQ09ERUNfSURfTUlDUk9EVkQsCisrICAgIEFWX0NPREVDX0lEX0VJ QV82MDgsCisrICAgIEFWX0NPREVDX0lEX0pBQ09TVUIsCisrICAgIEFWX0NPREVDX0lEX1NBTUks CisrICAgIEFWX0NPREVDX0lEX1JFQUxURVhULAorKyAgICBBVl9DT0RFQ19JRF9TVEwsCisrICAg IEFWX0NPREVDX0lEX1NVQlZJRVdFUjEsCisrICAgIEFWX0NPREVDX0lEX1NVQlZJRVdFUiwKKysg ICAgQVZfQ09ERUNfSURfU1VCUklQLAorKyAgICBBVl9DT0RFQ19JRF9XRUJWVFQsCisrICAgIEFW X0NPREVDX0lEX01QTDIsCisrICAgIEFWX0NPREVDX0lEX1ZQTEFZRVIsCisrICAgIEFWX0NPREVD X0lEX1BKUywKKysgICAgQVZfQ09ERUNfSURfQVNTLAorKyAgICBBVl9DT0RFQ19JRF9IRE1WX1RF WFRfU1VCVElUTEUsCisrICAgIEFWX0NPREVDX0lEX1RUTUwsCisrICAgIEFWX0NPREVDX0lEX0FS SUJfQ0FQVElPTiwKKysgICAgQVZfQ09ERUNfSURfSVZUVl9WQkksCisrCisrICAgIC8qIG90aGVy IHNwZWNpZmljIGtpbmQgb2YgY29kZWNzIChnZW5lcmFsbHkgdXNlZCBmb3IgYXR0YWNobWVudHMp ICovCisrICAgIEFWX0NPREVDX0lEX0ZJUlNUX1VOS05PV04gPSAweDE4MDAwLCAgICAgICAgICAg Ly8vPCBBIGR1bW15IElEIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiB2YXJpb3VzIGZha2UgY29k ZWNzLgorKyAgICBBVl9DT0RFQ19JRF9UVEYgPSAweDE4MDAwLAorKworKyAgICBBVl9DT0RFQ19J RF9TQ1RFXzM1LCAvLy88IENvbnRhaW4gdGltZXN0YW1wIGVzdGltYXRlZCB0aHJvdWdoIFBDUiBv ZiBwcm9ncmFtIHN0cmVhbS4KKysgICAgQVZfQ09ERUNfSURfRVBHLAorKyAgICBBVl9DT0RFQ19J RF9CSU5URVhULAorKyAgICBBVl9DT0RFQ19JRF9YQklOLAorKyAgICBBVl9DT0RFQ19JRF9JREYs CisrICAgIEFWX0NPREVDX0lEX09URiwKKysgICAgQVZfQ09ERUNfSURfU01QVEVfS0xWLAorKyAg ICBBVl9DT0RFQ19JRF9EVkRfTkFWLAorKyAgICBBVl9DT0RFQ19JRF9USU1FRF9JRDMsCisrICAg IEFWX0NPREVDX0lEX0JJTl9EQVRBLAorKyAgICBBVl9DT0RFQ19JRF9TTVBURV8yMDM4LAorKyAg ICBBVl9DT0RFQ19JRF9MQ0VWQywKKysgICAgQVZfQ09ERUNfSURfU01QVEVfNDM2TV9BTkMsCisr CisrCisrICAgIEFWX0NPREVDX0lEX1BST0JFID0gMHgxOTAwMCwgLy8vPCBjb2RlY19pZCBpcyBu b3Qga25vd24gKGxpa2UgQVZfQ09ERUNfSURfTk9ORSkgYnV0IGxhdmYgc2hvdWxkIGF0dGVtcHQg dG8gaWRlbnRpZnkgaXQKKysKKysgICAgQVZfQ09ERUNfSURfTVBFRzJUUyA9IDB4MjAwMDAsIC8q KjwgX0ZBS0VfIGNvZGVjIHRvIGluZGljYXRlIGEgcmF3IE1QRUctMiBUUworKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBzdHJlYW0gKG9ubHkgdXNlZCBieSBsaWJhdmZvcm1hdCkg Ki8KKysgICAgQVZfQ09ERUNfSURfTVBFRzRTWVNURU1TID0gMHgyMDAwMSwgLyoqPCBfRkFLRV8g Y29kZWMgdG8gaW5kaWNhdGUgYSBNUEVHLTQgU3lzdGVtcworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBzdHJlYW0gKG9ubHkgdXNlZCBieSBsaWJhdmZvcm1hdCkgKi8KKysgICAg QVZfQ09ERUNfSURfRkZNRVRBREFUQSA9IDB4MjEwMDAsICAgLy8vPCBEdW1teSBjb2RlYyBmb3Ig c3RyZWFtcyBjb250YWluaW5nIG9ubHkgbWV0YWRhdGEgaW5mb3JtYXRpb24uCisrICAgIEFWX0NP REVDX0lEX1dSQVBQRURfQVZGUkFNRSA9IDB4MjEwMDEsIC8vLzwgUGFzc3Rocm91Z2ggY29kZWMs IEFWRnJhbWVzIHdyYXBwZWQgaW4gQVZQYWNrZXQKKysgICAgLyoqCisrICAgICAqIER1bW15IG51 bGwgdmlkZW8gY29kZWMsIHVzZWZ1bCBtYWlubHkgZm9yIGRldmVsb3BtZW50IGFuZCBkZWJ1Z2dp bmcuCisrICAgICAqIE51bGwgZW5jb2Rlci9kZWNvZGVyIGRpc2NhcmQgYWxsIGlucHV0IGFuZCBu ZXZlciByZXR1cm4gYW55IG91dHB1dC4KKysgICAgICovCisrICAgIEFWX0NPREVDX0lEX1ZOVUxM LAorKyAgICAvKioKKysgICAgICogRHVtbXkgbnVsbCBhdWRpbyBjb2RlYywgdXNlZnVsIG1haW5s eSBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlYnVnZ2luZy4KKysgICAgICogTnVsbCBlbmNvZGVyL2Rl Y29kZXIgZGlzY2FyZCBhbGwgaW5wdXQgYW5kIG5ldmVyIHJldHVybiBhbnkgb3V0cHV0LgorKyAg ICAgKi8KKysgICAgQVZfQ09ERUNfSURfQU5VTEwsCisrfTsKKysKKysvKioKKysgKiBHZXQgdGhl IHR5cGUgb2YgdGhlIGdpdmVuIGNvZGVjLgorKyAqLworK2VudW0gQVZNZWRpYVR5cGUgYXZjb2Rl Y19nZXRfdHlwZShlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCk7CisrCisrLyoqCisrICogR2V0IHRo ZSBuYW1lIG9mIGEgY29kZWMuCisrICogQHJldHVybiAgYSBzdGF0aWMgc3RyaW5nIGlkZW50aWZ5 aW5nIHRoZSBjb2RlYzsgbmV2ZXIgTlVMTAorKyAqLworK2NvbnN0IGNoYXIgKmF2Y29kZWNfZ2V0 X25hbWUoZW51bSBBVkNvZGVjSUQgaWQpOworKworKy8qKgorKyAqIFJldHVybiBjb2RlYyBiaXRz IHBlciBzYW1wbGUuCisrICoKKysgKiBAcGFyYW1baW5dIGNvZGVjX2lkIHRoZSBjb2RlYworKyAq IEByZXR1cm4gTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBvciB6ZXJvIGlmIHVua25vd24gZm9y IHRoZSBnaXZlbiBjb2RlYy4KKysgKi8KKytpbnQgYXZfZ2V0X2JpdHNfcGVyX3NhbXBsZShlbnVt IEFWQ29kZWNJRCBjb2RlY19pZCk7CisrCisrLyoqCisrICogUmV0dXJuIGNvZGVjIGJpdHMgcGVy IHNhbXBsZS4KKysgKiBPbmx5IHJldHVybiBub24temVybyBpZiB0aGUgYml0cyBwZXIgc2FtcGxl IGlzIGV4YWN0bHkgY29ycmVjdCwgbm90IGFuCisrICogYXBwcm94aW1hdGlvbi4KKysgKgorKyAq IEBwYXJhbVtpbl0gY29kZWNfaWQgdGhlIGNvZGVjCisrICogQHJldHVybiBOdW1iZXIgb2YgYml0 cyBwZXIgc2FtcGxlIG9yIHplcm8gaWYgdW5rbm93biBmb3IgdGhlIGdpdmVuIGNvZGVjLgorKyAq LworK2ludCBhdl9nZXRfZXhhY3RfYml0c19wZXJfc2FtcGxlKGVudW0gQVZDb2RlY0lEIGNvZGVj X2lkKTsKKysKKysvKioKKysgKiBSZXR1cm4gYSBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIHByb2Zp bGUsIGlmIGF2YWlsYWJsZS4KKysgKgorKyAqIEBwYXJhbSBjb2RlY19pZCB0aGUgSUQgb2YgdGhl IGNvZGVjIHRvIHdoaWNoIHRoZSByZXF1ZXN0ZWQgcHJvZmlsZSBiZWxvbmdzCisrICogQHBhcmFt IHByb2ZpbGUgdGhlIHByb2ZpbGUgdmFsdWUgZm9yIHdoaWNoIGEgbmFtZSBpcyByZXF1ZXN0ZWQK KysgKiBAcmV0dXJuIEEgbmFtZSBmb3IgdGhlIHByb2ZpbGUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3 aXNlLgorKyAqCisrICogQG5vdGUgdW5saWtlIGF2X2dldF9wcm9maWxlX25hbWUoKSwgd2hpY2gg c2VhcmNoZXMgYSBsaXN0IG9mIHByb2ZpbGVzCisrICogICAgICAgc3VwcG9ydGVkIGJ5IGEgc3Bl Y2lmaWMgZGVjb2RlciBvciBlbmNvZGVyIGltcGxlbWVudGF0aW9uLCB0aGlzCisrICogICAgICAg ZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGxpc3Qgb2YgcHJvZmlsZXMgZnJvbSB0aGUgQVZDb2RlY0Rl c2NyaXB0b3IKKysgKi8KKytjb25zdCBjaGFyICphdmNvZGVjX3Byb2ZpbGVfbmFtZShlbnVtIEFW Q29kZWNJRCBjb2RlY19pZCwgaW50IHByb2ZpbGUpOworKworKy8qKgorKyAqIFJldHVybiB0aGUg UENNIGNvZGVjIGFzc29jaWF0ZWQgd2l0aCBhIHNhbXBsZSBmb3JtYXQuCisrICogQHBhcmFtIGJl ICBlbmRpYW5uZXNzLCAwIGZvciBsaXR0bGUsIDEgZm9yIGJpZywKKysgKiAgICAgICAgICAgIC0x IChvciBhbnl0aGluZyBlbHNlKSBmb3IgbmF0aXZlCisrICogQHJldHVybiAgQVZfQ09ERUNfSURf UENNXyogb3IgQVZfQ09ERUNfSURfTk9ORQorKyAqLworK2VudW0gQVZDb2RlY0lEIGF2X2dldF9w Y21fY29kZWMoZW51bSBBVlNhbXBsZUZvcm1hdCBmbXQsIGludCBiZSk7CisrCisrLyoqCisrICog QH0KKysgKi8KKysKKysjZW5kaWYgLy8gQVZDT0RFQ19DT0RFQ19JRF9ICitkaWZmIC11cCBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJh dmNvZGVjL2NvZGVjX3Bhci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19wYXIuaAorLS0tIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2Y29kZWMvY29kZWNfcGFyLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3MzU5ODgz MiArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWNfcGFyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42 NzM0MTczOTYgKzAyMDAKK0BAIC0wLDAgKzEsMzAyIEBACisrLyoKKysgKiBDb2RlYyBwYXJhbWV0 ZXJzIHB1YmxpYyBBUEkKKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysg KgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZDT0RFQ19DT0RFQ19QQVJfSAorKyNkZWZpbmUg QVZDT0RFQ19DT0RFQ19QQVJfSAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVk ZSAibGliYXZ1dGlsL2F2dXRpbC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvY2hhbm5lbF9sYXlv dXQuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL3JhdGlvbmFsLmgiCisrI2luY2x1ZGUgImxpYmF2 dXRpbC9waXhmbXQuaCIKKysKKysjaW5jbHVkZSAiY29kZWNfaWQuaCIKKysjaW5jbHVkZSAiZGVm cy5oIgorKyNpbmNsdWRlICJwYWNrZXQuaCIKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2Y19j b2RlY19wYXJhbXMgQ29kZWMgcGFyYW1ldGVycworKyAqIEBpbmdyb3VwIGxhdmNfY29yZQorKyAq IEB7CisrICovCisrCisrLyoqCisrICogVGhpcyBzdHJ1Y3QgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0 aWVzIG9mIGFuIGVuY29kZWQgc3RyZWFtLgorKyAqCisrICogQG5vdGUKKysgKiBUaGUgYHNpemVv ZihBVkNvZGVjUGFyYW1ldGVycylgIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHB1YmxpYyBBQkksCisr ICogdGhlcmVmb3JlIHRoaXMgc3RydWN0IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggOjphdmNvZGVj X3BhcmFtZXRlcnNfYWxsb2MoKQorKyAqIGFuZCBmcmVlZCB3aXRoIDo6YXZjb2RlY19wYXJhbWV0 ZXJzX2ZyZWUoKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNvZGVjUGFyYW1ldGVycyB7Cisr ICAgIC8qKgorKyAgICAgKiBHZW5lcmFsIHR5cGUgb2YgdGhlIGVuY29kZWQgZGF0YS4KKysgICAg ICovCisrICAgIGVudW0gQVZNZWRpYVR5cGUgY29kZWNfdHlwZTsKKysgICAgLyoqCisrICAgICAq IFNwZWNpZmljIHR5cGUgb2YgdGhlIGVuY29kZWQgZGF0YSAodGhlIGNvZGVjIHVzZWQpLgorKyAg ICAgKi8KKysgICAgZW51bSBBVkNvZGVjSUQgICBjb2RlY19pZDsKKysgICAgLyoqCisrICAgICAq IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGVjIChjb3JyZXNwb25kcyB0byB0 aGUgQVZJIEZPVVJDQykuCisrICAgICAqLworKyAgICB1aW50MzJfdCAgICAgICAgIGNvZGVjX3Rh ZzsKKysKKysgICAgLyoqCisrICAgICAqIEV4dHJhIGJpbmFyeSBkYXRhIG5lZWRlZCBmb3IgaW5p dGlhbGl6aW5nIHRoZSBkZWNvZGVyLCBjb2RlYy1kZXBlbmRlbnQuCisrICAgICAqCisrICAgICAq IE11c3QgYmUgYWxsb2NhdGVkIHdpdGggOjphdl9tYWxsb2MoKSBhbmQgd2lsbCBiZSBmcmVlZCBi eQorKyAgICAgKiA6OmF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKCkuIFRoZSBhbGxvY2F0ZWQgc2l6 ZSBvZiBleHRyYWRhdGEgbXVzdCBiZSBhdAorKyAgICAgKiBsZWFzdCAjZXh0cmFkYXRhX3NpemUg KyA6OkFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUsIHdpdGggdGhlIHBhZGRpbmcKKysgICAg ICogYnl0ZXMgemVyb2VkLgorKyAgICAgKi8KKysgICAgdWludDhfdCAqZXh0cmFkYXRhOworKyAg ICAvKioKKysgICAgICogU2l6ZSBvZiB0aGUgZXh0cmFkYXRhIGNvbnRlbnQgaW4gYnl0ZXMuCisr ICAgICAqLworKyAgICBpbnQgICAgICBleHRyYWRhdGFfc2l6ZTsKKysKKysgICAgLyoqCisrICAg ICAqIEFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGlyZSBzdHJlYW0uCisr ICAgICAqCisrICAgICAqIFNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCA6OmF2X3BhY2tldF9zaWRl X2RhdGFfbmV3KCkgb3IKKysgICAgICogOjphdl9wYWNrZXRfc2lkZV9kYXRhX2FkZCgpLCBhbmQg d2lsbCBiZSBmcmVlZCBieSA6OmF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKCkuCisrICAgICAqLwor KyAgICBBVlBhY2tldFNpZGVEYXRhICpjb2RlZF9zaWRlX2RhdGE7CisrCisrICAgIC8qKgorKyAg ICAgKiBBbW91bnQgb2YgZW50cmllcyBpbiAjY29kZWRfc2lkZV9kYXRhLgorKyAgICAgKi8KKysg ICAgaW50IG5iX2NvZGVkX3NpZGVfZGF0YTsKKysKKysgICAgLyoqCisrICAgICAqIC0gVmlkZW86 IHRoZSBwaXhlbCBmb3JtYXQsIHRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byBlbnVtIDo6QVZQaXhl bEZvcm1hdC4KKysgICAgICogLSBBdWRpbzogdGhlIHNhbXBsZSBmb3JtYXQsIHRoZSB2YWx1ZSBj b3JyZXNwb25kcyB0byBlbnVtIDo6QVZTYW1wbGVGb3JtYXQuCisrICAgICAqLworKyAgICBpbnQg Zm9ybWF0OworKworKyAgICAvKioKKysgICAgICogVGhlIGF2ZXJhZ2UgYml0cmF0ZSBvZiB0aGUg ZW5jb2RlZCBkYXRhIChpbiBiaXRzIHBlciBzZWNvbmQpLgorKyAgICAgKi8KKysgICAgaW50NjRf dCBiaXRfcmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBudW1iZXIgb2YgYml0cyBwZXIg c2FtcGxlIGluIHRoZSBjb2RlZHdvcmRzLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGlzIGJhc2lj YWxseSB0aGUgYml0cmF0ZSBwZXIgc2FtcGxlLiBJdCBpcyBtYW5kYXRvcnkgZm9yIGEgYnVuY2gg b2YKKysgICAgICogZm9ybWF0cyB0byBhY3R1YWxseSBkZWNvZGUgdGhlbS4gSXQncyB0aGUgbnVt YmVyIG9mIGJpdHMgZm9yIG9uZSBzYW1wbGUgaW4KKysgICAgICogdGhlIGFjdHVhbCBjb2RlZCBi aXRzdHJlYW0uCisrICAgICAqCisrICAgICAqIFRoaXMgY291bGQgYmUsIGZvciBleGFtcGxlLCA0 LCBmb3IgQURQQ00uCisrICAgICAqIEZvciBQQ00gZm9ybWF0cyB0aGlzIG1hdGNoZXMgI2JpdHNf cGVyX3Jhd19zYW1wbGUuCisrICAgICAqCisrICAgICAqIENhbiBiZSAwLgorKyAgICAgKi8KKysg ICAgaW50IGJpdHNfcGVyX2NvZGVkX3NhbXBsZTsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBu dW1iZXIgb2YgdmFsaWQgYml0cyBpbiBlYWNoIG91dHB1dCBzYW1wbGUuCisrICAgICAqCisrICAg ICAqIElmIHRoZSBzYW1wbGUgZm9ybWF0IGhhcyBtb3JlIGJpdHMsIHRoZSBsZWFzdCBzaWduaWZp Y2FudCBiaXRzIGFyZSBhZGRpdGlvbmFsCisrICAgICAqIHBhZGRpbmcgYml0cywgd2hpY2ggYXJl IGFsd2F5cyAwLiBVc2UgcmlnaHQgc2hpZnRzIHRvIHJlZHVjZSB0aGUgc2FtcGxlCisrICAgICAq IHRvIGl0cyBhY3R1YWwgc2l6ZS4KKysgICAgICoKKysgICAgICogRm9yIGV4YW1wbGUsIGF1ZGlv IGZvcm1hdHMgd2l0aCAyNC1iaXQgc2FtcGxlcyB3aWxsIGhhdmUgI2JpdHNfcGVyX3Jhd19zYW1w bGUKKysgICAgICogc2V0IHRvIDI0LCBhbmQgOjpmb3JtYXQgc2V0IHRvIDo6QVZfU0FNUExFX0ZN VF9TMzIuIFRvIGdldCB0aGUgb3JpZ2luYWwgc2FtcGxlLAorKyAgICAgKiB1c2U6IGAoaW50MzJf dClzYW1wbGUgPj4gOGAuCisrICAgICAqCisrICAgICAqIEZvciBBRFBDTSwgdGhpcyBtaWdodCBi ZSAxMiBvciAxNiwgb3Igc2ltaWxhci4KKysgICAgICoKKysgICAgICogQ2FuIGJlIDAuCisrICAg ICAqLworKyAgICBpbnQgYml0c19wZXJfcmF3X3NhbXBsZTsKKysKKysgICAgLyoqCisrICAgICAq IENvZGVjLXNwZWNpZmljIGJpdHN0cmVhbSByZXN0cmljdGlvbnMgdGhhdCB0aGUgc3RyZWFtIGNv bmZvcm1zIHRvLgorKyAgICAgKi8KKysgICAgaW50IHByb2ZpbGU7CisrICAgIGludCBsZXZlbDsK KysKKysgICAgLyoqCisrICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgdmlkZW8gZnJhbWUgaW4gcGl4 ZWxzLgorKyAgICAgKgorKyAgICAgKiBWaWRlbyBvbmx5LgorKyAgICAgKi8KKysgICAgaW50IHdp ZHRoOworKworKyAgICAvKioKKysgICAgICogVGhlIGhlaWdodCBvZiB0aGUgdmlkZW8gZnJhbWUg aW4gcGl4ZWxzLgorKyAgICAgKgorKyAgICAgKiBWaWRlbyBvbmx5LgorKyAgICAgKi8KKysgICAg aW50IGhlaWdodDsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBhc3BlY3QgcmF0aW8gKHdpZHRo L2hlaWdodCkgd2hpY2ggYSBzaW5nbGUgcGl4ZWwKKysgICAgICogc2hvdWxkIGhhdmUgd2hlbiBk aXNwbGF5ZWQuCisrICAgICAqCisrICAgICAqIFdoZW4gdGhlIGFzcGVjdCByYXRpbyBpcyB1bmtu b3duIG9yIHVuZGVmaW5lZCwgdGhlIG51bWVyYXRvciBzaG91bGQgYmUKKysgICAgICogc2V0IHRv IDAgKHRoZSBkZW5vbWluYXRvciBtYXkgaGF2ZSBhbnkgdmFsdWUpLgorKyAgICAgKgorKyAgICAg KiBWaWRlbyBvbmx5LgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCBzYW1wbGVfYXNwZWN0X3Jh dGlvOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGZyYW1lcyBwZXIgc2Vjb25kLCBm b3Igc3RyZWFtcyB3aXRoIGNvbnN0YW50IGZyYW1lCisrICAgICAqIGR1cmF0aW9ucy4gU2hvdWxk IGJlIHNldCB0byBgeyAwLCAxIH1gIHdoZW4gc29tZSBmcmFtZXMgaGF2ZSBkaWZmZXJpbmcKKysg ICAgICogZHVyYXRpb25zIG9yIGlmIHRoZSB2YWx1ZSBpcyBub3Qga25vd24uCisrICAgICAqCisr ICAgICAqIEBub3RlIFRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdmFsdWVzIHRoYXQgYXJlIHN0 b3JlZCBpbiBjb2RlYy1sZXZlbAorKyAgICAgKiBoZWFkZXJzIGFuZCBpcyB0eXBpY2FsbHkgb3Zl cnJpZGRlbiBieSBjb250YWluZXIvdHJhbnNwb3J0LWxheWVyCisrICAgICAqIHRpbWVzdGFtcHMs IHdoZW4gYXZhaWxhYmxlLiBJdCBzaG91bGQgdGh1cyBiZSB1c2VkIG9ubHkgYXMgYSBsYXN0IHJl c29ydCwKKysgICAgICogd2hlbiBubyBoaWdoZXItbGV2ZWwgdGltaW5nIGluZm9ybWF0aW9uIGlz IGF2YWlsYWJsZS4KKysgICAgICoKKysgICAgICogVmlkZW8gb25seS4KKysgICAgICovCisrICAg IEFWUmF0aW9uYWwgZnJhbWVyYXRlOworKworKyAgICAvKioKKysgICAgICogVGhlIG9yZGVyIG9m IHRoZSBmaWVsZHMgaW4gaW50ZXJsYWNlZCB2aWRlby4KKysgICAgICoKKysgICAgICogVmlkZW8g b25seS4KKysgICAgICovCisrICAgIGVudW0gQVZGaWVsZE9yZGVyICAgICAgICAgICAgICAgICAg ZmllbGRfb3JkZXI7CisrCisrICAgIC8qKgorKyAgICAgKiBBZGRpdGlvbmFsIGNvbG9yc3BhY2Ug Y2hhcmFjdGVyaXN0aWNzLgorKyAgICAgKgorKyAgICAgKiBWaWRlbyBvbmx5LgorKyAgICAgKi8K KysgICAgZW51bSBBVkNvbG9yUmFuZ2UgICAgICAgICAgICAgICAgICBjb2xvcl9yYW5nZTsKKysg ICAgZW51bSBBVkNvbG9yUHJpbWFyaWVzICAgICAgICAgICAgICBjb2xvcl9wcmltYXJpZXM7Cisr ICAgIGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgY29sb3JfdHJjOworKyAgICBl bnVtIEFWQ29sb3JTcGFjZSAgICAgICAgICAgICAgICAgIGNvbG9yX3NwYWNlOworKyAgICBlbnVt IEFWQ2hyb21hTG9jYXRpb24gICAgICAgICAgICAgIGNocm9tYV9sb2NhdGlvbjsKKysKKysgICAg LyoqCisrICAgICAqIE51bWJlciBvZiBkZWxheWVkIGZyYW1lcy4KKysgICAgICoKKysgICAgICog VmlkZW8gb25seS4KKysgICAgICovCisrICAgIGludCB2aWRlb19kZWxheTsKKysKKysgICAgLyoq CisrICAgICAqIFRoZSBjaGFubmVsIGxheW91dCBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzLgorKyAg ICAgKgorKyAgICAgKiBBdWRpbyBvbmx5LgorKyAgICAgKi8KKysgICAgQVZDaGFubmVsTGF5b3V0 IGNoX2xheW91dDsKKysgICAgLyoqCisrICAgICAqIFRoZSBudW1iZXIgb2YgYXVkaW8gc2FtcGxl cyBwZXIgc2Vjb25kLgorKyAgICAgKgorKyAgICAgKiBBdWRpbyBvbmx5LgorKyAgICAgKi8KKysg ICAgaW50ICAgICAgc2FtcGxlX3JhdGU7CisrICAgIC8qKgorKyAgICAgKiBUaGUgbnVtYmVyIG9m IGJ5dGVzIHBlciBjb2RlZCBhdWRpbyBmcmFtZSwgcmVxdWlyZWQgYnkgc29tZSBmb3JtYXRzLgor KyAgICAgKgorKyAgICAgKiBBdWRpbyBvbmx5LgorKyAgICAgKgorKyAgICAgKiBDb3JyZXNwb25k cyB0byBuQmxvY2tBbGlnbiBpbiBXQVZFRk9STUFURVguCisrICAgICAqLworKyAgICBpbnQgICAg ICBibG9ja19hbGlnbjsKKysgICAgLyoqCisrICAgICAqIEF1ZGlvIGZyYW1lIHNpemUsIGlmIGtu b3duLiBSZXF1aXJlZCBieSBzb21lIGZvcm1hdHMgdG8gYmUgc3RhdGljLgorKyAgICAgKgorKyAg ICAgKiBBdWRpbyBvbmx5LgorKyAgICAgKi8KKysgICAgaW50ICAgICAgZnJhbWVfc2l6ZTsKKysK KysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBwYWRkaW5nIGF1ZGlvIHNhbXBsZXMgYXQgdGhl IHN0YXJ0LgorKyAgICAgKgorKyAgICAgKiBUaGUgYW1vdW50IG9mIHBhZGRpbmcgKGluIHNhbXBs ZXMpIGluc2VydGVkIGJ5IHRoZSBlbmNvZGVyIGF0CisrICAgICAqIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIGF1ZGlvLiBJLmUuIHRoaXMgbnVtYmVyIG9mIGxlYWRpbmcgZGVjb2RlZCBzYW1wbGVzCisr ICAgICAqIG11c3QgYmUgZGlzY2FyZGVkIHRvIGdldCB0aGUgb3JpZ2luYWwgYXVkaW8gd2l0aG91 dCBsZWFkaW5nCisrICAgICAqIHBhZGRpbmcuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHku CisrICAgICAqLworKyAgICBpbnQgaW5pdGlhbF9wYWRkaW5nOworKyAgICAvKioKKysgICAgICog TnVtYmVyIG9mIHBhZGRpbmcgYXVkaW8gc2FtcGxlcyBhdCB0aGUgZW5kLgorKyAgICAgKgorKyAg ICAgKiBUaGUgYW1vdW50IG9mIHBhZGRpbmcgKGluIHNhbXBsZXMpIGFwcGVuZGVkIGJ5IHRoZSBl bmNvZGVyIHRvCisrICAgICAqIHRoZSBlbmQgb2YgdGhlIGF1ZGlvLiBJLmUuIHRoaXMgbnVtYmVy IG9mIGRlY29kZWQgc2FtcGxlcyBtdXN0IGJlCisrICAgICAqIGRpc2NhcmRlZCBmcm9tIHRoZSBl bmQgb2YgdGhlIHN0cmVhbSB0byBnZXQgdGhlIG9yaWdpbmFsCisrICAgICAqIGF1ZGlvIHdpdGhv dXQgYW55IHRyYWlsaW5nIHBhZGRpbmcuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisr ICAgICAqLworKyAgICBpbnQgdHJhaWxpbmdfcGFkZGluZzsKKysgICAgLyoqCisrICAgICAqIE51 bWJlciBvZiBhdWRpbyBzYW1wbGVzIHRvIHNraXAgYWZ0ZXIgYSBkaXNjb250aW51aXR5LgorKyAg ICAgKgorKyAgICAgKiBBdWRpbyBvbmx5LgorKyAgICAgKi8KKysgICAgaW50IHNlZWtfcHJlcm9s bDsKKysKKysgICAgLyoqCisrICAgICAqIFZpZGVvIHdpdGggYWxwaGEgY2hhbm5lbCBvbmx5LiBB bHBoYSBjaGFubmVsIGhhbmRsaW5nCisrICAgICAqLworKyAgICBlbnVtIEFWQWxwaGFNb2RlIGFs cGhhX21vZGU7CisrfSBBVkNvZGVjUGFyYW1ldGVyczsKKysKKysvKioKKysgKiBAcmVsYXRlcyBB VkNvZGVjUGFyYW1ldGVycworKyAqIEB7CisrICovCisrCisrLyoqCisrICogQWxsb2NhdGUgYSBu ZXcgQVZDb2RlY1BhcmFtZXRlcnMgYW5kIHNldCBpdHMgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVz CisrICogKHVua25vd24vaW52YWxpZC8wKS4gVGhlIHJldHVybmVkIHN0cnVjdCBtdXN0IGJlIGZy ZWVkIHdpdGgKKysgKiA6OmF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKCkuCisrICovCisrQVZDb2Rl Y1BhcmFtZXRlcnMgKmF2Y29kZWNfcGFyYW1ldGVyc19hbGxvYyh2b2lkKTsKKysKKysvKioKKysg KiBGcmVlIGFuIEFWQ29kZWNQYXJhbWV0ZXJzIGluc3RhbmNlIGFuZCBldmVyeXRoaW5nIGFzc29j aWF0ZWQgd2l0aCBpdCBhbmQKKysgKiB3cml0ZSBgTlVMTGAgdG8gdGhlIHN1cHBsaWVkIHBvaW50 ZXIuCisrICovCisrdm9pZCBhdmNvZGVjX3BhcmFtZXRlcnNfZnJlZShBVkNvZGVjUGFyYW1ldGVy cyAqKnBhcik7CisrCisrLyoqCisrICogQ29weSB0aGUgY29udGVudHMgb2YgXHAgc3JjIHRvIFxw IGRzdC4gQW55IGFsbG9jYXRlZCBmaWVsZHMgaW4gZHN0IGFyZSBmcmVlZCBhbmQKKysgKiByZXBs YWNlZCB3aXRoIG5ld2x5IGFsbG9jYXRlZCBkdXBsaWNhdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5n IGZpZWxkcyBpbiBzcmMuCisrICoKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2VzcywgYSBuZWdh dGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZjb2RlY19wYXJhbWV0 ZXJzX2NvcHkoQVZDb2RlY1BhcmFtZXRlcnMgKmRzdCwgY29uc3QgQVZDb2RlY1BhcmFtZXRlcnMg KnNyYyk7CisrCisrLyoqCisrICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyA6OmF2X2dl dF9hdWRpb19mcmFtZV9kdXJhdGlvbigpLCBleGNlcHQgaXQgd29ya3MKKysgKiB3aXRoIDo6QVZD b2RlY1BhcmFtZXRlcnMgaW5zdGVhZCBvZiBhbiA6OkFWQ29kZWNDb250ZXh0LgorKyAqLworK2lu dCBhdl9nZXRfYXVkaW9fZnJhbWVfZHVyYXRpb24yKEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIsIGlu dCBmcmFtZV9ieXRlcyk7CisrCisrLyoqIEB9ICovCisrCisrLyoqCisrICogQH0KKysgKi8KKysK KysjZW5kaWYgLy8gQVZDT0RFQ19DT0RFQ19QQVJfSAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9kZWZz LmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy92OS9saWJhdmNvZGVjL2RlZnMuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvZGVmcy5oLmZmbXBl ZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzM5OTcyMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2Rl ZnMuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3Mzc1MzIzNSArMDIwMAorQEAgLTAsMCArMSwzNjIg QEAKKysvKgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisrICovCisrCisrI2lmbmRlZiBBVkNPREVDX0RFRlNfSAorKyNkZWZpbmUgQVZDT0RFQ19ERUZT X0gKKysKKysvKioKKysgKiBAZmlsZQorKyAqIEBpbmdyb3VwIGxpYmF2YworKyAqIE1pc2MgdHlw ZXMgYW5kIGNvbnN0YW50cyB0aGF0IGRvIG5vdCBiZWxvbmcgYW55d2hlcmUgZWxzZS4KKysgKi8K KysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qKgor KyAqIEBpbmdyb3VwIGxhdmNfZGVjb2RpbmcKKysgKiBSZXF1aXJlZCBudW1iZXIgb2YgYWRkaXRp b25hbGx5IGFsbG9jYXRlZCBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBiaXRzdHJlYW0g Zm9yIGRlY29kaW5nLgorKyAqIFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBiZWNhdXNlIHNvbWUgb3B0 aW1pemVkIGJpdHN0cmVhbSByZWFkZXJzIHJlYWQKKysgKiAzMiBvciA2NCBiaXQgYXQgb25jZSBh bmQgY291bGQgcmVhZCBvdmVyIHRoZSBlbmQuPGJyPgorKyAqIE5vdGU6IElmIHRoZSBmaXJzdCAy MyBiaXRzIG9mIHRoZSBhZGRpdGlvbmFsIGJ5dGVzIGFyZSBub3QgMCwgdGhlbiBkYW1hZ2VkCisr ICogTVBFRyBiaXRzdHJlYW1zIGNvdWxkIGNhdXNlIG92ZXJyZWFkIGFuZCBzZWdmYXVsdC4KKysg Ki8KKysjZGVmaW5lIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUgNjQKKysKKysvKioKKysg KiBWZXJpZnkgY2hlY2tzdW1zIGVtYmVkZGVkIGluIHRoZSBiaXRzdHJlYW0gKGNvdWxkIGJlIG9m IGVpdGhlciBlbmNvZGVkIG9yCisrICogZGVjb2RlZCBkYXRhLCBkZXBlbmRpbmcgb24gdGhlIGZv cm1hdCkgYW5kIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gbWlzbWF0Y2guCisrICogSWYgQVZf RUZfRVhQTE9ERSBpcyBhbHNvIHNldCwgYSBtaXNtYXRjaGluZyBjaGVja3N1bSB3aWxsIHJlc3Vs dCBpbiB0aGUKKysgKiBkZWNvZGVyL2RlbXV4ZXIgcmV0dXJuaW5nIGFuIGVycm9yLgorKyAqLwor KyNkZWZpbmUgQVZfRUZfQ1JDQ0hFQ0sgICAgICAgKDE8PDApCisrI2RlZmluZSBBVl9FRl9CSVRT VFJFQU0gICAgICAoMTw8MSkgICAvLy88IGRldGVjdCBiaXRzdHJlYW0gc3BlY2lmaWNhdGlvbiBk ZXZpYXRpb25zCisrI2RlZmluZSBBVl9FRl9CVUZGRVIgICAgICAgICAoMTw8MikgICAvLy88IGRl dGVjdCBpbXByb3BlciBiaXRzdHJlYW0gbGVuZ3RoCisrI2RlZmluZSBBVl9FRl9FWFBMT0RFICAg ICAgICAoMTw8MykgICAvLy88IGFib3J0IGRlY29kaW5nIG9uIG1pbm9yIGVycm9yIGRldGVjdGlv bgorKworKyNkZWZpbmUgQVZfRUZfSUdOT1JFX0VSUiAgICAgKDE8PDE1KSAgLy8vPCBpZ25vcmUg ZXJyb3JzIGFuZCBjb250aW51ZQorKyNkZWZpbmUgQVZfRUZfQ0FSRUZVTCAgICAgICAgKDE8PDE2 KSAgLy8vPCBjb25zaWRlciB0aGluZ3MgdGhhdCB2aW9sYXRlIHRoZSBzcGVjLCBhcmUgZmFzdCB0 byBjYWxjdWxhdGUgYW5kIGhhdmUgbm90IGJlZW4gc2VlbiBpbiB0aGUgd2lsZCBhcyBlcnJvcnMK KysjZGVmaW5lIEFWX0VGX0NPTVBMSUFOVCAgICAgICgxPDwxNykgIC8vLzwgY29uc2lkZXIgYWxs IHNwZWMgbm9uIGNvbXBsaWFuY2VzIGFzIGVycm9ycworKyNkZWZpbmUgQVZfRUZfQUdHUkVTU0lW RSAgICAgKDE8PDE4KSAgLy8vPCBjb25zaWRlciB0aGluZ3MgdGhhdCBhIHNhbmUgZW5jb2Rlci9t dXhlciBzaG91bGQgbm90IGRvIGFzIGFuIGVycm9yCisrCisrI2RlZmluZSBGRl9DT01QTElBTkNF X1ZFUllfU1RSSUNUICAgMiAvLy88IFN0cmljdGx5IGNvbmZvcm0gdG8gYW4gb2xkZXIgbW9yZSBz dHJpY3QgdmVyc2lvbiBvZiB0aGUgc3BlYyBvciByZWZlcmVuY2Ugc29mdHdhcmUuCisrI2RlZmlu ZSBGRl9DT01QTElBTkNFX1NUUklDVCAgICAgICAgMSAvLy88IFN0cmljdGx5IGNvbmZvcm0gdG8g YWxsIHRoZSB0aGluZ3MgaW4gdGhlIHNwZWMgbm8gbWF0dGVyIHdoYXQgY29uc2VxdWVuY2VzLgor KyNkZWZpbmUgRkZfQ09NUExJQU5DRV9OT1JNQUwgICAgICAgIDAKKysjZGVmaW5lIEZGX0NPTVBM SUFOQ0VfVU5PRkZJQ0lBTCAgIC0xIC8vLzwgQWxsb3cgdW5vZmZpY2lhbCBleHRlbnNpb25zCisr I2RlZmluZSBGRl9DT01QTElBTkNFX0VYUEVSSU1FTlRBTCAtMiAvLy88IEFsbG93IG5vbnN0YW5k YXJkaXplZCBleHBlcmltZW50YWwgdGhpbmdzLgorKworKworKyNkZWZpbmUgQVZfUFJPRklMRV9V TktOT1dOICAgICAgICAtOTkKKysjZGVmaW5lIEFWX1BST0ZJTEVfUkVTRVJWRUQgICAgICAtMTAw CisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0FBQ19NQUlOICAgICAgICAgMAorKyNkZWZpbmUgQVZf UFJPRklMRV9BQUNfTE9XICAgICAgICAgIDEKKysjZGVmaW5lIEFWX1BST0ZJTEVfQUFDX1NTUiAg ICAgICAgICAyCisrI2RlZmluZSBBVl9QUk9GSUxFX0FBQ19MVFAgICAgICAgICAgMworKyNkZWZp bmUgQVZfUFJPRklMRV9BQUNfSEUgICAgICAgICAgIDQKKysjZGVmaW5lIEFWX1BST0ZJTEVfQUFD X0hFX1YyICAgICAgIDI4CisrI2RlZmluZSBBVl9QUk9GSUxFX0FBQ19MRCAgICAgICAgICAyMgor KyNkZWZpbmUgQVZfUFJPRklMRV9BQUNfRUxEICAgICAgICAgMzgKKysjZGVmaW5lIEFWX1BST0ZJ TEVfQUFDX1VTQUMgICAgICAgIDQxCisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUcyX0FBQ19MT1cg IDEyOAorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHMl9BQUNfSEUgICAxMzEKKysKKysjZGVmaW5l IEFWX1BST0ZJTEVfRE5YSEQgICAgICAgICAwCisrI2RlZmluZSBBVl9QUk9GSUxFX0ROWEhSX0xC ICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9ETlhIUl9TUSAgICAgIDIKKysjZGVmaW5lIEFW X1BST0ZJTEVfRE5YSFJfSFEgICAgICAzCisrI2RlZmluZSBBVl9QUk9GSUxFX0ROWEhSX0hRWCAg ICAgNAorKyNkZWZpbmUgQVZfUFJPRklMRV9ETlhIUl80NDQgICAgIDUKKysKKysjZGVmaW5lIEFW X1BST0ZJTEVfRFRTICAgICAgICAgICAgICAgIDIwCisrI2RlZmluZSBBVl9QUk9GSUxFX0RUU19F UyAgICAgICAgICAgICAzMAorKyNkZWZpbmUgQVZfUFJPRklMRV9EVFNfOTZfMjQgICAgICAgICAg NDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfRFRTX0hEX0hSQSAgICAgICAgIDUwCisrI2RlZmluZSBB Vl9QUk9GSUxFX0RUU19IRF9NQSAgICAgICAgICA2MAorKyNkZWZpbmUgQVZfUFJPRklMRV9EVFNf RVhQUkVTUyAgICAgICAgNzAKKysjZGVmaW5lIEFWX1BST0ZJTEVfRFRTX0hEX01BX1ggICAgICAg IDYxCisrI2RlZmluZSBBVl9QUk9GSUxFX0RUU19IRF9NQV9YX0lNQVggICA2MgorKworKyNkZWZp bmUgQVZfUFJPRklMRV9FQUMzX0REUF9BVE1PUyAgICAgICAgIDMwCisrCisrI2RlZmluZSBBVl9Q Uk9GSUxFX1RSVUVIRF9BVE1PUyAgICAgICAgICAgMzAKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVf TVBFRzJfNDIyICAgICAgICAgICAwCisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUcyX0hJR0ggICAg ICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHMl9TUyAgICAgICAgICAgIDIKKysjZGVm aW5lIEFWX1BST0ZJTEVfTVBFRzJfU05SX1NDQUxBQkxFICAzCisrI2RlZmluZSBBVl9QUk9GSUxF X01QRUcyX01BSU4gICAgICAgICAgNAorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHMl9TSU1QTEUg ICAgICAgIDUKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRCAgKDE8PDkp ICAvLyA4KzE7IGNvbnN0cmFpbnRfc2V0MV9mbGFnCisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRf SU5UUkEgICAgICAgICgxPDwxMSkgLy8gOCszOyBjb25zdHJhaW50X3NldDNfZmxhZworKworKyNk ZWZpbmUgQVZfUFJPRklMRV9IMjY0X0JBU0VMSU5FICAgICAgICAgICAgIDY2CisrI2RlZmluZSBB Vl9QUk9GSUxFX0gyNjRfQ09OU1RSQUlORURfQkFTRUxJTkUgKDY2fEFWX1BST0ZJTEVfSDI2NF9D T05TVFJBSU5FRCkKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9NQUlOICAgICAgICAgICAgICAg ICA3NworKyNkZWZpbmUgQVZfUFJPRklMRV9IMjY0X0VYVEVOREVEICAgICAgICAgICAgIDg4Cisr I2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfSElHSCAgICAgICAgICAgICAgICAgMTAwCisrI2RlZmlu ZSBBVl9QUk9GSUxFX0gyNjRfSElHSF8xMCAgICAgICAgICAgICAgMTEwCisrI2RlZmluZSBBVl9Q Uk9GSUxFX0gyNjRfSElHSF8xMF9JTlRSQSAgICAgICAgKDExMHxBVl9QUk9GSUxFX0gyNjRfSU5U UkEpCisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfTVVMVElWSUVXX0hJR0ggICAgICAgMTE4Cisr I2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80MjIgICAgICAgICAgICAgMTIyCisrI2RlZmlu ZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80MjJfSU5UUkEgICAgICAgKDEyMnxBVl9QUk9GSUxFX0gy NjRfSU5UUkEpCisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfU1RFUkVPX0hJR0ggICAgICAgICAg MTI4CisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80NDQgICAgICAgICAgICAgMTQ0Cisr I2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80NDRfUFJFRElDVElWRSAgMjQ0CisrI2RlZmlu ZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80NDRfSU5UUkEgICAgICAgKDI0NHxBVl9QUk9GSUxFX0gy NjRfSU5UUkEpCisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfQ0FWTENfNDQ0ICAgICAgICAgICAg NDQKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfVkMxX1NJTVBMRSAgIDAKKysjZGVmaW5lIEFWX1BS T0ZJTEVfVkMxX01BSU4gICAgIDEKKysjZGVmaW5lIEFWX1BST0ZJTEVfVkMxX0NPTVBMRVggIDIK KysjZGVmaW5lIEFWX1BST0ZJTEVfVkMxX0FEVkFOQ0VEIDMKKysKKysjZGVmaW5lIEFWX1BST0ZJ TEVfTVBFRzRfU0lNUExFICAgICAgICAgICAgICAgICAgICAgMAorKyNkZWZpbmUgQVZfUFJPRklM RV9NUEVHNF9TSU1QTEVfU0NBTEFCTEUgICAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxF X01QRUc0X0NPUkUgICAgICAgICAgICAgICAgICAgICAgIDIKKysjZGVmaW5lIEFWX1BST0ZJTEVf TVBFRzRfTUFJTiAgICAgICAgICAgICAgICAgICAgICAgMworKyNkZWZpbmUgQVZfUFJPRklMRV9N UEVHNF9OX0JJVCAgICAgICAgICAgICAgICAgICAgICA0CisrI2RlZmluZSBBVl9QUk9GSUxFX01Q RUc0X1NDQUxBQkxFX1RFWFRVUkUgICAgICAgICAgIDUKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBF RzRfU0lNUExFX0ZBQ0VfQU5JTUFUSU9OICAgICAgNgorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVH NF9CQVNJQ19BTklNQVRFRF9URVhUVVJFICAgICA3CisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUc0 X0hZQlJJRCAgICAgICAgICAgICAgICAgICAgIDgKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBFRzRf QURWQU5DRURfUkVBTF9USU1FICAgICAgICAgOQorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHNF9D T1JFX1NDQUxBQkxFICAgICAgICAgICAgIDEwCisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUc0X0FE VkFOQ0VEX0NPRElORyAgICAgICAgICAgMTEKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBFRzRfQURW QU5DRURfQ09SRSAgICAgICAgICAgICAxMgorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHNF9BRFZB TkNFRF9TQ0FMQUJMRV9URVhUVVJFIDEzCisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUc0X1NJTVBM RV9TVFVESU8gICAgICAgICAgICAgMTQKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBFRzRfQURWQU5D RURfU0lNUExFICAgICAgICAgICAxNQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9KUEVHMjAwMF9D U1RSRUFNX1JFU1RSSUNUSU9OXzAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX0pQRUcyMDAwX0NT VFJFQU1fUkVTVFJJQ1RJT05fMSAgIDIKKysjZGVmaW5lIEFWX1BST0ZJTEVfSlBFRzIwMDBfQ1NU UkVBTV9OT19SRVNUUklDVElPTiAgMzI3NjgKKysjZGVmaW5lIEFWX1BST0ZJTEVfSlBFRzIwMDBf RENJTkVNQV8ySyAgICAgICAgICAgICAgMworKyNkZWZpbmUgQVZfUFJPRklMRV9KUEVHMjAwMF9E Q0lORU1BXzRLICAgICAgICAgICAgICA0CisrCisrI2RlZmluZSBBVl9QUk9GSUxFX1ZQOV8wICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfVlA5XzEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9WUDlfMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyCisrI2RlZmluZSBBVl9QUk9GSUxFX1ZQOV8zICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDMKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfSEVWQ19NQUlO ICAgICAgICAgICAgICAgICAgICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9IRVZDX01BSU5f MTAgICAgICAgICAgICAgICAgICAgICAyCisrI2RlZmluZSBBVl9QUk9GSUxFX0hFVkNfTUFJTl9T VElMTF9QSUNUVVJFICAgICAgICAgIDMKKysjZGVmaW5lIEFWX1BST0ZJTEVfSEVWQ19SRVhUICAg ICAgICAgICAgICAgICAgICAgICAgNAorKyNkZWZpbmUgQVZfUFJPRklMRV9IRVZDX01VTFRJVklF V19NQUlOICAgICAgICAgICAgICA2CisrI2RlZmluZSBBVl9QUk9GSUxFX0hFVkNfU0NDICAgICAg ICAgICAgICAgICAgICAgICAgIDkKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfVlZDX01BSU5fMTAg ICAgICAgICAgICAgICAgICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9WVkNfTUFJTl8xMF80 NDQgICAgICAgICAgICAgICAgIDMzCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0FWMV9NQUlOICAg ICAgICAgICAgICAgICAgICAgICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVYxX0hJR0ggICAg ICAgICAgICAgICAgICAgICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9BVjFfUFJPRkVTU0lP TkFMICAgICAgICAgICAgICAgICAyCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX01KUEVHX0hVRkZN QU5fQkFTRUxJTkVfRENUICAgICAgICAgICAgMHhjMAorKyNkZWZpbmUgQVZfUFJPRklMRV9NSlBF R19IVUZGTUFOX0VYVEVOREVEX1NFUVVFTlRJQUxfRENUIDB4YzEKKysjZGVmaW5lIEFWX1BST0ZJ TEVfTUpQRUdfSFVGRk1BTl9QUk9HUkVTU0lWRV9EQ1QgICAgICAgICAweGMyCisrI2RlZmluZSBB Vl9QUk9GSUxFX01KUEVHX0hVRkZNQU5fTE9TU0xFU1MgICAgICAgICAgICAgICAgMHhjMworKyNk ZWZpbmUgQVZfUFJPRklMRV9NSlBFR19KUEVHX0xTICAgICAgICAgICAgICAgICAgICAgICAgIDB4 ZjcKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfU0JDX01TQkMgICAgICAgICAgICAgICAgICAgICAg ICAgMQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfUFJPWFkgICAgIDAKKysjZGVmaW5l IEFWX1BST0ZJTEVfUFJPUkVTX0xUICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX1BST1JF U19TVEFOREFSRCAgMgorKyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfSFEgICAgICAgIDMKKysj ZGVmaW5lIEFWX1BST0ZJTEVfUFJPUkVTXzQ0NDQgICAgICA0CisrI2RlZmluZSBBVl9QUk9GSUxF X1BST1JFU19YUSAgICAgICAgNQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfUkFXICAg ICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfUFJPUkVTX1JBV19IUSAgICAxCisrCisrI2RlZmlu ZSBBVl9QUk9GSUxFX0FSSUJfUFJPRklMRV9BIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVJJQl9Q Uk9GSUxFX0MgMQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9LTFZBX1NZTkMgIDAKKysjZGVmaW5l IEFWX1BST0ZJTEVfS0xWQV9BU1lOQyAxCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0VWQ19CQVNF TElORSAgICAgICAgICAgICAwCisrI2RlZmluZSBBVl9QUk9GSUxFX0VWQ19NQUlOICAgICAgICAg ICAgICAgICAxCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0FQVl80MjJfMTAgIDMzCisrI2RlZmlu ZSBBVl9QUk9GSUxFX0FQVl80MjJfMTIgIDQ0CisrI2RlZmluZSBBVl9QUk9GSUxFX0FQVl80NDRf MTAgIDU1CisrI2RlZmluZSBBVl9QUk9GSUxFX0FQVl80NDRfMTIgIDY2CisrI2RlZmluZSBBVl9Q Uk9GSUxFX0FQVl80NDQ0XzEwIDc3CisrI2RlZmluZSBBVl9QUk9GSUxFX0FQVl80NDQ0XzEyIDg4 CisrI2RlZmluZSBBVl9QUk9GSUxFX0FQVl80MDBfMTAgIDk5CisrCisrCisrI2RlZmluZSBBVl9M RVZFTF9VTktOT1dOICAgICAgICAgICAgICAgICAgLTk5CisrCisrZW51bSBBVkZpZWxkT3JkZXIg eworKyAgICBBVl9GSUVMRF9VTktOT1dOLAorKyAgICBBVl9GSUVMRF9QUk9HUkVTU0lWRSwKKysg ICAgQVZfRklFTERfVFQsICAgICAgICAgIC8vLzwgVG9wIGNvZGVkX2ZpcnN0LCB0b3AgZGlzcGxh eWVkIGZpcnN0CisrICAgIEFWX0ZJRUxEX0JCLCAgICAgICAgICAvLy88IEJvdHRvbSBjb2RlZCBm aXJzdCwgYm90dG9tIGRpc3BsYXllZCBmaXJzdAorKyAgICBBVl9GSUVMRF9UQiwgICAgICAgICAg Ly8vPCBUb3AgY29kZWQgZmlyc3QsIGJvdHRvbSBkaXNwbGF5ZWQgZmlyc3QKKysgICAgQVZfRklF TERfQlQsICAgICAgICAgIC8vLzwgQm90dG9tIGNvZGVkIGZpcnN0LCB0b3AgZGlzcGxheWVkIGZp cnN0CisrfTsKKysKKysvKioKKysgKiBAaW5ncm91cCBsYXZjX2RlY29kaW5nCisrICovCisrZW51 bSBBVkRpc2NhcmR7CisrICAgIC8qIFdlIGxlYXZlIHNvbWUgc3BhY2UgYmV0d2VlbiB0aGVtIGZv ciBleHRlbnNpb25zIChkcm9wIHNvbWUKKysgICAgICoga2V5ZnJhbWVzIGZvciBpbnRyYS1vbmx5 IG9yIGRyb3AganVzdCBzb21lIGJpZGlyIGZyYW1lcykuICovCisrICAgIEFWRElTQ0FSRF9OT05F ICAgID0tMTYsIC8vLzwgZGlzY2FyZCBub3RoaW5nCisrICAgIEFWRElTQ0FSRF9ERUZBVUxUID0g IDAsIC8vLzwgZGlzY2FyZCB1c2VsZXNzIHBhY2tldHMgbGlrZSAwIHNpemUgcGFja2V0cyBpbiBh dmkKKysgICAgQVZESVNDQVJEX05PTlJFRiAgPSAgOCwgLy8vPCBkaXNjYXJkIGFsbCBub24gcmVm ZXJlbmNlCisrICAgIEFWRElTQ0FSRF9CSURJUiAgID0gMTYsIC8vLzwgZGlzY2FyZCBhbGwgYmlk aXJlY3Rpb25hbCBmcmFtZXMKKysgICAgQVZESVNDQVJEX05PTklOVFJBPSAyNCwgLy8vPCBkaXNj YXJkIGFsbCBub24gaW50cmEgZnJhbWVzCisrICAgIEFWRElTQ0FSRF9OT05LRVkgID0gMzIsIC8v LzwgZGlzY2FyZCBhbGwgZnJhbWVzIGV4Y2VwdCBrZXlmcmFtZXMKKysgICAgQVZESVNDQVJEX0FM TCAgICAgPSA0OCwgLy8vPCBkaXNjYXJkIGFsbAorK307CisrCisrZW51bSBBVkF1ZGlvU2Vydmlj ZVR5cGUgeworKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfTUFJTiAgICAgICAgICAgICAgPSAw LAorKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfRUZGRUNUUyAgICAgICAgICAgPSAxLAorKyAg ICBBVl9BVURJT19TRVJWSUNFX1RZUEVfVklTVUFMTFlfSU1QQUlSRUQgPSAyLAorKyAgICBBVl9B VURJT19TRVJWSUNFX1RZUEVfSEVBUklOR19JTVBBSVJFRCAgPSAzLAorKyAgICBBVl9BVURJT19T RVJWSUNFX1RZUEVfRElBTE9HVUUgICAgICAgICAgPSA0LAorKyAgICBBVl9BVURJT19TRVJWSUNF X1RZUEVfQ09NTUVOVEFSWSAgICAgICAgPSA1LAorKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVf RU1FUkdFTkNZICAgICAgICAgPSA2LAorKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfVk9JQ0Vf T1ZFUiAgICAgICAgPSA3LAorKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfS0FSQU9LRSAgICAg ICAgICAgPSA4LAorKyAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfTkIgICAgICAgICAgICAgICAg ICAgLCAvLy88IE5vdCBwYXJ0IG9mIEFCSQorK307CisrCisrLyoqCisrICogUGFuIFNjYW4gYXJl YS4KKysgKiBUaGlzIHNwZWNpZmllcyB0aGUgYXJlYSB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVk LgorKyAqIE5vdGUgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHN1Y2ggYXJlYXMgZm9yIG9uZSBmcmFt ZS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVlBhblNjYW4geworKyAgICAvKioKKysgICAgICog aWQKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6 IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgaW50IGlkOworKworKyAgICAvKioK KysgICAgICogd2lkdGggYW5kIGhlaWdodCBpbiAxLzE2IHBlbAorKyAgICAgKiAtIGVuY29kaW5n OiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisr ICAgICAqLworKyAgICBpbnQgd2lkdGg7CisrICAgIGludCBoZWlnaHQ7CisrCisrICAgIC8qKgor KyAgICAgKiBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIGluIDEvMTYgcGVsIGZvciB1 cCB0byAzIGZpZWxkcy9mcmFtZXMKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisr ICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgaW50 MTZfdCBwb3NpdGlvblszXVsyXTsKKyt9IEFWUGFuU2NhbjsKKysKKysvKioKKysgKiBUaGlzIHN0 cnVjdHVyZSBkZXNjcmliZXMgdGhlIGJpdHJhdGUgcHJvcGVydGllcyBvZiBhbiBlbmNvZGVkIGJp dHN0cmVhbS4gSXQKKysgKiByb3VnaGx5IGNvcnJlc3BvbmRzIHRvIGEgc3Vic2V0IHRoZSBWQlYg cGFyYW1ldGVycyBmb3IgTVBFRy0yIG9yIEhSRAorKyAqIHBhcmFtZXRlcnMgZm9yIEguMjY0L0hF VkMuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZDUEJQcm9wZXJ0aWVzIHsKKysgICAgLyoqCisr ICAgICAqIE1heGltdW0gYml0cmF0ZSBvZiB0aGUgc3RyZWFtLCBpbiBiaXRzIHBlciBzZWNvbmQu CisrICAgICAqIFplcm8gaWYgdW5rbm93biBvciB1bnNwZWNpZmllZC4KKysgICAgICovCisrICAg IGludDY0X3QgbWF4X2JpdHJhdGU7CisrICAgIC8qKgorKyAgICAgKiBNaW5pbXVtIGJpdHJhdGUg b2YgdGhlIHN0cmVhbSwgaW4gYml0cyBwZXIgc2Vjb25kLgorKyAgICAgKiBaZXJvIGlmIHVua25v d24gb3IgdW5zcGVjaWZpZWQuCisrICAgICAqLworKyAgICBpbnQ2NF90IG1pbl9iaXRyYXRlOwor KyAgICAvKioKKysgICAgICogQXZlcmFnZSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0sIGluIGJpdHMg cGVyIHNlY29uZC4KKysgICAgICogWmVybyBpZiB1bmtub3duIG9yIHVuc3BlY2lmaWVkLgorKyAg ICAgKi8KKysgICAgaW50NjRfdCBhdmdfYml0cmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIFRo ZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gd2hpY2ggdGhlIHJhdGVjb250cm9sIGlzIGFwcGxpZWQs IGluIGJpdHMuCisrICAgICAqIFplcm8gaWYgdW5rbm93biBvciB1bnNwZWNpZmllZC4KKysgICAg ICovCisrICAgIGludDY0X3QgYnVmZmVyX3NpemU7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUg ZGVsYXkgYmV0d2VlbiB0aGUgdGltZSB0aGUgcGFja2V0IHRoaXMgc3RydWN0dXJlIGlzIGFzc29j aWF0ZWQgd2l0aAorKyAgICAgKiBpcyByZWNlaXZlZCBhbmQgdGhlIHRpbWUgd2hlbiBpdCBzaG91 bGQgYmUgZGVjb2RlZCwgaW4gcGVyaW9kcyBvZiBhIDI3TUh6CisrICAgICAqIGNsb2NrLgorKyAg ICAgKgorKyAgICAgKiBVSU5UNjRfTUFYIHdoZW4gdW5rbm93biBvciB1bnNwZWNpZmllZC4KKysg ICAgICovCisrICAgIHVpbnQ2NF90IHZidl9kZWxheTsKKyt9IEFWQ1BCUHJvcGVydGllczsKKysK KysvKioKKysgKiBBbGxvY2F0ZSBhIENQQiBwcm9wZXJ0aWVzIHN0cnVjdHVyZSBhbmQgaW5pdGlh bGl6ZSBpdHMgZmllbGRzIHRvIGRlZmF1bHQKKysgKiB2YWx1ZXMuCisrICoKKysgKiBAcGFyYW0g c2l6ZSBpZiBub24tTlVMTCwgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBzdHJ1Y3Qgd2lsbCBi ZSB3cml0dGVuCisrICogICAgICAgICAgICAgaGVyZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGVtYmVk ZGluZyBpdCBpbiBzaWRlIGRhdGEuCisrICoKKysgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0 ZWQgc3RydWN0IG9yIE5VTEwgb24gZmFpbHVyZQorKyAqLworK0FWQ1BCUHJvcGVydGllcyAqYXZf Y3BiX3Byb3BlcnRpZXNfYWxsb2Moc2l6ZV90ICpzaXplKTsKKysKKysvKioKKysgKiBUaGlzIHN0 cnVjdHVyZSBzdXBwbGllcyBjb3JyZWxhdGlvbiBiZXR3ZWVuIGEgcGFja2V0IHRpbWVzdGFtcCBh bmQgYSB3YWxsIGNsb2NrCisrICogcHJvZHVjdGlvbiB0aW1lLiBUaGUgZGVmaW5pdGlvbiBmb2xs b3dzIHRoZSBQcm9kdWNlciBSZWZlcmVuY2UgVGltZSAoJ3ByZnQnKQorKyAqIGFzIGRlZmluZWQg aW4gSVNPL0lFQyAxNDQ5Ni0xMgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWUHJvZHVjZXJSZWZl cmVuY2VUaW1lIHsKKysgICAgLyoqCisrICAgICAqIEEgVVRDIHRpbWVzdGFtcCwgaW4gbWljcm9z ZWNvbmRzLCBzaW5jZSBVbml4IGVwb2NoIChlLmcsIGF2X2dldHRpbWUoKSkuCisrICAgICAqLwor KyAgICBpbnQ2NF90IHdhbGxjbG9jazsKKysgICAgaW50IGZsYWdzOworK30gQVZQcm9kdWNlclJl ZmVyZW5jZVRpbWU7CisrCisrLyoqCisrICogUlRDUCBTUiAoU2VuZGVyIFJlcG9ydCkgaW5mb3Jt YXRpb24KKysgKgorKyAqIFRoZSByZWNlaXZlZCBzZW5kZXIgcmVwb3J0IGluZm9ybWF0aW9uIGZv ciBhbiBSVFNQCisrICogc3RyZWFtLCBleHBvc2VkIGFzIEFWX1BLVF9EQVRBX1JUQ1BfU1Igc2lk ZSBkYXRhLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWUlRDUFNlbmRlclJlcG9ydCB7CisrICAg IHVpbnQzMl90IHNzcmM7IC8vLzwgU3luY2hyb25pemF0aW9uIHNvdXJjZSBpZGVudGlmaWVyCisr ICAgIHVpbnQ2NF90IG50cF90aW1lc3RhbXA7IC8vLzwgTlRQIHRpbWUgd2hlbiB0aGUgcmVwb3J0 IHdhcyBzZW50CisrICAgIHVpbnQzMl90IHJ0cF90aW1lc3RhbXA7IC8vLzwgUlRQIHRpbWUgd2hl biB0aGUgcmVwb3J0IHdhcyBzZW50CisrICAgIHVpbnQzMl90IHNlbmRlcl9uYl9wYWNrZXRzOyAv Ly88IFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQKKysgICAgdWludDMyX3Qgc2VuZGVyX25i X2J5dGVzOyAvLy88IFRvdGFsIG51bWJlciBvZiBieXRlcyBzZW50IChleGNsdWRpbmcgaGVhZGVy cyBvciBwYWRkaW5nKQorK30gQVZSVENQU2VuZGVyUmVwb3J0OworKworKy8qKgorKyAqIEVuY29k ZSBleHRyYWRhdGEgbGVuZ3RoIHRvIGEgYnVmZmVyLiBVc2VkIGJ5IHhpcGggY29kZWNzLgorKyAq CisrICogQHBhcmFtIHMgYnVmZmVyIHRvIHdyaXRlIHRvOyBtdXN0IGJlIGF0IGxlYXN0ICh2LzI1 NSsxKSBieXRlcyBsb25nCisrICogQHBhcmFtIHYgc2l6ZSBvZiBleHRyYWRhdGEgaW4gYnl0ZXMK KysgKiBAcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisrICov CisrdW5zaWduZWQgaW50IGF2X3hpcGhsYWNpbmcodW5zaWduZWQgY2hhciAqcywgdW5zaWduZWQg aW50IHYpOworKworKyNlbmRpZiAvLyBBVkNPREVDX0RFRlNfSAorZGlmZiAtdXAgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2Rl Yy9wYWNrZXQuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvcGFja2V0LmgKKy0tLSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL3Bh Y2tldC5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzQ0MzgwMjIgKzAyMDAKKysrKyBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJhdmNvZGVjL3BhY2tldC5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc0MTM5MzQwICswMjAwCitA QCAtMCwwICsxLDk1MCBAQAorKy8qCisrICogQVZQYWNrZXQgcHVibGljIEFQSQorKyAqCisrICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRl ZiBBVkNPREVDX1BBQ0tFVF9ICisrI2RlZmluZSBBVkNPREVDX1BBQ0tFVF9ICisrCisrI2luY2x1 ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSAibGliYXZ1 dGlsL2F0dHJpYnV0ZXMuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgorKyNpbmNs dWRlICJsaWJhdnV0aWwvZGljdC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvcmF0aW9uYWwuaCIK KysjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIKKysKKysjaW5jbHVkZSAibGliYXZjb2Rl Yy92ZXJzaW9uX21ham9yLmgiCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdmNfcGFja2V0X3Np ZGVfZGF0YSBBVlBhY2tldFNpZGVEYXRhCisrICoKKysgKiBUeXBlcyBhbmQgZnVuY3Rpb25zIGZv ciB3b3JraW5nIHdpdGggQVZQYWNrZXRTaWRlRGF0YS4KKysgKiBAeworKyAqLworK2VudW0gQVZQ YWNrZXRTaWRlRGF0YVR5cGUgeworKyAgICAvKioKKysgICAgICogQW4gQVZfUEtUX0RBVEFfUEFM RVRURSBzaWRlIGRhdGEgcGFja2V0IGNvbnRhaW5zIGV4YWN0bHkgQVZQQUxFVFRFX1NJWkUKKysg ICAgICogYnl0ZXMgd29ydGggb2YgcGFsZXR0ZS4gVGhpcyBzaWRlIGRhdGEgc2lnbmFscyB0aGF0 IGEgbmV3IHBhbGV0dGUgaXMKKysgICAgICogcHJlc2VudC4KKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX1BBTEVUVEUsCisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgQVZfUEtUX0RBVEFfTkVX X0VYVFJBREFUQSBpcyB1c2VkIHRvIG5vdGlmeSB0aGUgY29kZWMgb3IgdGhlIGZvcm1hdAorKyAg ICAgKiB0aGF0IHRoZSBleHRyYWRhdGEgYnVmZmVyIHdhcyBjaGFuZ2VkIGFuZCB0aGUgcmVjZWl2 aW5nIHNpZGUgc2hvdWxkCisrICAgICAqIGFjdCB1cG9uIGl0IGFwcHJvcHJpYXRlbHkuIFRoZSBu ZXcgZXh0cmFkYXRhIGlzIGVtYmVkZGVkIGluIHRoZSBzaWRlCisrICAgICAqIGRhdGEgYnVmZmVy IGFuZCBzaG91bGQgYmUgaW1tZWRpYXRlbHkgdXNlZCBmb3IgcHJvY2Vzc2luZyB0aGUgY3VycmVu dAorKyAgICAgKiBmcmFtZSBvciBwYWNrZXQuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9O RVdfRVhUUkFEQVRBLAorKworKyAgICAvKioKKysgICAgICogQW4gQVZfUEtUX0RBVEFfUEFSQU1f Q0hBTkdFIHNpZGUgZGF0YSBwYWNrZXQgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKKysgICAgICog QGNvZGUKKysgICAgICogdTMybGUgcGFyYW1fZmxhZ3MKKysgICAgICogaWYgKHBhcmFtX2ZsYWdz ICYgQVZfU0lERV9EQVRBX1BBUkFNX0NIQU5HRV9TQU1QTEVfUkFURSkKKysgICAgICogICAgIHMz MmxlIHNhbXBsZV9yYXRlCisrICAgICAqIGlmIChwYXJhbV9mbGFncyAmIEFWX1NJREVfREFUQV9Q QVJBTV9DSEFOR0VfRElNRU5TSU9OUykKKysgICAgICogICAgIHMzMmxlIHdpZHRoCisrICAgICAq ICAgICBzMzJsZSBoZWlnaHQKKysgICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX1BBUkFNX0NIQU5HRSwKKysKKysgICAgLyoqCisrICAgICAqIEFuIEFWX1BLVF9EQVRB X0gyNjNfTUJfSU5GTyBzaWRlIGRhdGEgcGFja2V0IGNvbnRhaW5zIGEgbnVtYmVyIG9mCisrICAg ICAqIHN0cnVjdHVyZXMgd2l0aCBpbmZvIGFib3V0IG1hY3JvYmxvY2tzIHJlbGV2YW50IHRvIHNw bGl0dGluZyB0aGUKKysgICAgICogcGFja2V0IGludG8gc21hbGxlciBwYWNrZXRzIG9uIG1hY3Jv YmxvY2sgZWRnZXMgKGUuZy4gYXMgZm9yIFJGQyAyMTkwKS4KKysgICAgICogVGhhdCBpcywgaXQg ZG9lcyBub3QgbmVjZXNzYXJpbHkgY29udGFpbiBpbmZvIGFib3V0IGFsbCBtYWNyb2Jsb2NrcywK KysgICAgICogYXMgbG9uZyBhcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBtYWNyb2Jsb2NrcyBpbiB0 aGUgaW5mbyBpcyBzbWFsbGVyCisrICAgICAqIHRoYW4gdGhlIHRhcmdldCBwYXlsb2FkIHNpemUu CisrICAgICAqIEVhY2ggTUIgaW5mbyBzdHJ1Y3R1cmUgaXMgMTIgYnl0ZXMsIGFuZCBpcyBsYWlk IG91dCBhcyBmb2xsb3dzOgorKyAgICAgKiBAY29kZQorKyAgICAgKiB1MzJsZSBiaXQgb2Zmc2V0 IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQKKysgICAgICogdTggICAgY3VycmVudCBxdWFu dGl6ZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBtYWNyb2Jsb2NrCisrICAgICAqIHU4ICAgIEdPQiBu dW1iZXIKKysgICAgICogdTE2bGUgbWFjcm9ibG9jayBhZGRyZXNzIHdpdGhpbiB0aGUgR09CCisr ICAgICAqIHU4ICAgIGhvcml6b250YWwgTVYgcHJlZGljdG9yCisrICAgICAqIHU4ICAgIHZlcnRp Y2FsIE1WIHByZWRpY3RvcgorKyAgICAgKiB1OCAgICBob3Jpem9udGFsIE1WIHByZWRpY3RvciBm b3IgYmxvY2sgbnVtYmVyIDMKKysgICAgICogdTggICAgdmVydGljYWwgTVYgcHJlZGljdG9yIGZv ciBibG9jayBudW1iZXIgMworKyAgICAgKiBAZW5kY29kZQorKyAgICAgKi8KKysgICAgQVZfUEtU X0RBVEFfSDI2M19NQl9JTkZPLAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEg c2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhbiBhdWRpbyBzdHJlYW0gYW5kIGNvbnRhaW5zCisr ICAgICAqIFJlcGxheUdhaW4gaW5mb3JtYXRpb24gaW4gZm9ybSBvZiB0aGUgQVZSZXBsYXlHYWlu IHN0cnVjdC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1JFUExBWUdBSU4sCisrCisrICAg IC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb250YWlucyBhIDN4MyB0cmFuc2Zvcm1hdGlv biBtYXRyaXggZGVzY3JpYmluZyBhbiBhZmZpbmUKKysgICAgICogdHJhbnNmb3JtYXRpb24gdGhh dCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBkZWNvZGVkIHZpZGVvIGZyYW1lcyBmb3IKKysg ICAgICogY29ycmVjdCBwcmVzZW50YXRpb24uCisrICAgICAqCisrICAgICAqIFNlZSBsaWJhdnV0 aWwvZGlzcGxheS5oIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBkYXRhLgorKyAg ICAgKi8KKysgICAgQVZfUEtUX0RBVEFfRElTUExBWU1BVFJJWCwKKysKKysgICAgLyoqCisrICAg ICAqIFRoaXMgc2lkZSBkYXRhIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBzdHJl YW0gYW5kIGNvbnRhaW5zCisrICAgICAqIFN0ZXJlb3Njb3BpYyAzRCBpbmZvcm1hdGlvbiBpbiBm b3JtIG9mIHRoZSBBVlN0ZXJlbzNEIHN0cnVjdC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRB X1NURVJFTzNELAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEgc2hvdWxkIGJl IGFzc29jaWF0ZWQgd2l0aCBhbiBhdWRpbyBzdHJlYW0gYW5kIGNvcnJlc3BvbmRzCisrICAgICAq IHRvIGVudW0gQVZBdWRpb1NlcnZpY2VUeXBlLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFf QVVESU9fU0VSVklDRV9UWVBFLAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEg Y29udGFpbnMgcXVhbGl0eSByZWxhdGVkIGluZm9ybWF0aW9uIGZyb20gdGhlIGVuY29kZXIuCisr ICAgICAqIEBjb2RlCisrICAgICAqIHUzMmxlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBjb21wcmVz c2VkIGZyYW1lLiBBbGxvd2VkIHJhbmdlIGlzIGJldHdlZW4gMSAoZ29vZCkgYW5kIEZGX0xBTUJE QV9NQVggKGJhZCkuCisrICAgICAqIHU4ICAgIHBpY3R1cmUgdHlwZQorKyAgICAgKiB1OCAgICBl cnJvciBjb3VudAorKyAgICAgKiB1MTYgICByZXNlcnZlZAorKyAgICAgKiB1NjRsZVtlcnJvciBj b3VudF0gc3VtIG9mIHNxdWFyZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiBlbmNvZGVyIGluIGFuZCBv dXRwdXQKKysgICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1FVQUxJ VFlfU1RBVFMsCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb250YWlucyBh biBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc3RyZWFtIGluZGV4CisrICAgICAqIG9m IGEgImZhbGxiYWNrIiB0cmFjay4gIEEgZmFsbGJhY2sgdHJhY2sgaW5kaWNhdGVzIGFuIGFsdGVy bmF0ZQorKyAgICAgKiB0cmFjayB0byB1c2Ugd2hlbiB0aGUgY3VycmVudCB0cmFjayBjYW4gbm90 IGJlIGRlY29kZWQgZm9yIHNvbWUgcmVhc29uLgorKyAgICAgKiBlLmcuIG5vIGRlY29kZXIgYXZh aWxhYmxlIGZvciBjb2RlYy4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX0ZBTExCQUNLX1RS QUNLLAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEgY29ycmVzcG9uZHMgdG8g dGhlIEFWQ1BCUHJvcGVydGllcyBzdHJ1Y3QuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9D UEJfUFJPUEVSVElFUywKKysKKysgICAgLyoqCisrICAgICAqIFJlY29tbWVuZHMgc2tpcHBpbmcg dGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2FtcGxlcworKyAgICAgKiBAY29kZQorKyAgICAgKiB1 MzJsZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBza2lwIGZyb20gc3RhcnQgb2YgdGhpcyBwYWNrZXQK KysgICAgICogdTMybGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gc2tpcCBmcm9tIGVuZCBvZiB0aGlz IHBhY2tldAorKyAgICAgKiB1OCAgICByZWFzb24gZm9yIHN0YXJ0IHNraXAKKysgICAgICogdTgg ICAgcmVhc29uIGZvciBlbmQgICBza2lwICgwPXBhZGRpbmcgc2lsZW5jZSwgMT1jb252ZXJnZW5j ZSkKKysgICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1NLSVBfU0FN UExFUywKKysKKysgICAgLyoqCisrICAgICAqIEFuIEFWX1BLVF9EQVRBX0pQX0RVQUxNT05PIHNp ZGUgZGF0YSBwYWNrZXQgaW5kaWNhdGVzIHRoYXQKKysgICAgICogdGhlIHBhY2tldCBtYXkgY29u dGFpbiAiZHVhbCBtb25vIiBhdWRpbyBzcGVjaWZpYyB0byBKYXBhbmVzZSBEVFYKKysgICAgICog YW5kIGlmIGl0IGlzIHRydWUsIHJlY29tbWVuZHMgb25seSB0aGUgc2VsZWN0ZWQgY2hhbm5lbCB0 byBiZSB1c2VkLgorKyAgICAgKiBAY29kZQorKyAgICAgKiB1OCAgICBzZWxlY3RlZCBjaGFubmVs cyAoMD1tYWluL2xlZnQsIDE9c3ViL3JpZ2h0LCAyPWJvdGgpCisrICAgICAqIEBlbmRjb2RlCisr ICAgICAqLworKyAgICBBVl9QS1RfREFUQV9KUF9EVUFMTU9OTywKKysKKysgICAgLyoqCisrICAg ICAqIEEgbGlzdCBvZiB6ZXJvIHRlcm1pbmF0ZWQga2V5L3ZhbHVlIHN0cmluZ3MuIFRoZXJlIGlz IG5vIGVuZCBtYXJrZXIgZm9yCisrICAgICAqIHRoZSBsaXN0LCBzbyBpdCBpcyByZXF1aXJlZCB0 byByZWx5IG9uIHRoZSBzaWRlIGRhdGEgc2l6ZSB0byBzdG9wLgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfU1RSSU5HU19NRVRBREFUQSwKKysKKysgICAgLyoqCisrICAgICAqIFN1YnRpdGxl IGV2ZW50IHBvc2l0aW9uCisrICAgICAqIEBjb2RlCisrICAgICAqIHUzMmxlIHgxCisrICAgICAq IHUzMmxlIHkxCisrICAgICAqIHUzMmxlIHgyCisrICAgICAqIHUzMmxlIHkyCisrICAgICAqIEBl bmRjb2RlCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9TVUJUSVRMRV9QT1NJVElPTiwKKysK KysgICAgLyoqCisrICAgICAqIERhdGEgZm91bmQgaW4gQmxvY2tBZGRpdGlvbmFsIGVsZW1lbnQg b2YgbWF0cm9za2EgY29udGFpbmVyLiBUaGVyZSBpcworKyAgICAgKiBubyBlbmQgbWFya2VyIGZv ciB0aGUgZGF0YSwgc28gaXQgaXMgcmVxdWlyZWQgdG8gcmVseSBvbiB0aGUgc2lkZSBkYXRhCisr ICAgICAqIHNpemUgdG8gcmVjb2duaXplIHRoZSBlbmQuIDggYnl0ZSBpZCAoYXMgZm91bmQgaW4g QmxvY2tBZGRJZCkgZm9sbG93ZWQKKysgICAgICogYnkgZGF0YS4KKysgICAgICovCisrICAgIEFW X1BLVF9EQVRBX01BVFJPU0tBX0JMT0NLQURESVRJT05BTCwKKysKKysgICAgLyoqCisrICAgICAq IFRoZSBvcHRpb25hbCBmaXJzdCBpZGVudGlmaWVyIGxpbmUgb2YgYSBXZWJWVFQgY3VlLgorKyAg ICAgKi8KKysgICAgQVZfUEtUX0RBVEFfV0VCVlRUX0lERU5USUZJRVIsCisrCisrICAgIC8qKgor KyAgICAgKiBUaGUgb3B0aW9uYWwgc2V0dGluZ3MgKHJlbmRlcmluZyBpbnN0cnVjdGlvbnMpIHRo YXQgaW1tZWRpYXRlbHkKKysgICAgICogZm9sbG93IHRoZSB0aW1lc3RhbXAgc3BlY2lmaWVyIG9m IGEgV2ViVlRUIGN1ZS4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1dFQlZUVF9TRVRUSU5H UywKKysKKysgICAgLyoqCisrICAgICAqIEEgbGlzdCBvZiB6ZXJvIHRlcm1pbmF0ZWQga2V5L3Zh bHVlIHN0cmluZ3MuIFRoZXJlIGlzIG5vIGVuZCBtYXJrZXIgZm9yCisrICAgICAqIHRoZSBsaXN0 LCBzbyBpdCBpcyByZXF1aXJlZCB0byByZWx5IG9uIHRoZSBzaWRlIGRhdGEgc2l6ZSB0byBzdG9w LiBUaGlzCisrICAgICAqIHNpZGUgZGF0YSBpbmNsdWRlcyB1cGRhdGVkIG1ldGFkYXRhIHdoaWNo IGFwcGVhcmVkIGluIHRoZSBzdHJlYW0uCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9NRVRB REFUQV9VUERBVEUsCisrCisrICAgIC8qKgorKyAgICAgKiBNUEVHVFMgc3RyZWFtIElEIGFzIHVp bnQ4X3QsIHRoaXMgaXMgcmVxdWlyZWQgdG8gcGFzcyB0aGUgc3RyZWFtIElECisrICAgICAqIGlu Zm9ybWF0aW9uIGZyb20gdGhlIGRlbXV4ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbXV4ZXIuCisr ICAgICAqLworKyAgICBBVl9QS1RfREFUQV9NUEVHVFNfU1RSRUFNX0lELAorKworKyAgICAvKioK KysgICAgICogTWFzdGVyaW5nIGRpc3BsYXkgbWV0YWRhdGEgKGJhc2VkIG9uIFNNUFRFLTIwODY6 MjAxNCkuIFRoaXMgbWV0YWRhdGEKKysgICAgICogc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBh IHZpZGVvIHN0cmVhbSBhbmQgY29udGFpbnMgZGF0YSBpbiB0aGUgZm9ybQorKyAgICAgKiBvZiB0 aGUgQVZNYXN0ZXJpbmdEaXNwbGF5TWV0YWRhdGEgc3RydWN0LgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfTUFTVEVSSU5HX0RJU1BMQVlfTUVUQURBVEEsCisrCisrICAgIC8qKgorKyAgICAg KiBUaGlzIHNpZGUgZGF0YSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gc3RyZWFt IGFuZCBjb3JyZXNwb25kcworKyAgICAgKiB0byB0aGUgQVZTcGhlcmljYWxNYXBwaW5nIHN0cnVj dHVyZS4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1NQSEVSSUNBTCwKKysKKysgICAgLyoq CisrICAgICAqIENvbnRlbnQgbGlnaHQgbGV2ZWwgKGJhc2VkIG9uIENUQS04NjEuMykuIFRoaXMg bWV0YWRhdGEgc2hvdWxkIGJlCisrICAgICAqIGFzc29jaWF0ZWQgd2l0aCBhIHZpZGVvIHN0cmVh bSBhbmQgY29udGFpbnMgZGF0YSBpbiB0aGUgZm9ybSBvZiB0aGUKKysgICAgICogQVZDb250ZW50 TGlnaHRNZXRhZGF0YSBzdHJ1Y3QuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9DT05URU5U X0xJR0hUX0xFVkVMLAorKworKyAgICAvKioKKysgICAgICogQVRTQyBBNTMgUGFydCA0IENsb3Nl ZCBDYXB0aW9ucy4gVGhpcyBtZXRhZGF0YSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCisrICAg ICAqIGEgdmlkZW8gc3RyZWFtLiBBNTMgQ0MgYml0c3RyZWFtIGlzIHN0b3JlZCBhcyB1aW50OF90 IGluIEFWUGFja2V0U2lkZURhdGEuZGF0YS4KKysgICAgICogVGhlIG51bWJlciBvZiBieXRlcyBv ZiBDQyBkYXRhIGlzIEFWUGFja2V0U2lkZURhdGEuc2l6ZS4KKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX0E1M19DQywKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIGlzIGVu Y3J5cHRpb24gaW5pdGlhbGl6YXRpb24gZGF0YS4KKysgICAgICogVGhlIGZvcm1hdCBpcyBub3Qg cGFydCBvZiBBQkksIHVzZSBhdl9lbmNyeXB0aW9uX2luaXRfaW5mb18qIG1ldGhvZHMgdG8KKysg ICAgICogYWNjZXNzLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfRU5DUllQVElPTl9JTklU X0lORk8sCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb250YWlucyBlbmNy eXB0aW9uIGluZm8gZm9yIGhvdyB0byBkZWNyeXB0IHRoZSBwYWNrZXQuCisrICAgICAqIFRoZSBm b3JtYXQgaXMgbm90IHBhcnQgb2YgQUJJLCB1c2UgYXZfZW5jcnlwdGlvbl9pbmZvXyogbWV0aG9k cyB0byBhY2Nlc3MuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9FTkNSWVBUSU9OX0lORk8s CisrCisrICAgIC8qKgorKyAgICAgKiBBY3RpdmUgRm9ybWF0IERlc2NyaXB0aW9uIGRhdGEgY29u c2lzdGluZyBvZiBhIHNpbmdsZSBieXRlIGFzIHNwZWNpZmllZAorKyAgICAgKiBpbiBFVFNJIFRT IDEwMSAxNTQgdXNpbmcgQVZBY3RpdmVGb3JtYXREZXNjcmlwdGlvbiBlbnVtLgorKyAgICAgKi8K KysgICAgQVZfUEtUX0RBVEFfQUZELAorKworKyAgICAvKioKKysgICAgICogUHJvZHVjZXIgUmVm ZXJlbmNlIFRpbWUgZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSBBVlByb2R1Y2VyUmVmZXJlbmNl VGltZSBzdHJ1Y3QsCisrICAgICAqIHVzdWFsbHkgZXhwb3J0ZWQgYnkgc29tZSBlbmNvZGVycyAo b24gZGVtYW5kIHRocm91Z2ggdGhlIHByZnQgZmxhZyBzZXQgaW4gdGhlCisrICAgICAqIEFWQ29k ZWNDb250ZXh0IGV4cG9ydF9zaWRlX2RhdGEgZmllbGQpLgorKyAgICAgKi8KKysgICAgQVZfUEtU X0RBVEFfUFJGVCwKKysKKysgICAgLyoqCisrICAgICAqIElDQyBwcm9maWxlIGRhdGEgY29uc2lz dGluZyBvZiBhbiBvcGFxdWUgb2N0ZXQgYnVmZmVyIGZvbGxvd2luZyB0aGUKKysgICAgICogZm9y bWF0IGRlc2NyaWJlZCBieSBJU08gMTUwNzYtMS4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRB X0lDQ19QUk9GSUxFLAorKworKyAgICAvKioKKysgICAgICogRE9WSSBjb25maWd1cmF0aW9uCisr ICAgICAqIHJlZjoKKysgICAgICogZG9sYnktdmlzaW9uLWJpdHN0cmVhbXMtd2l0aGluLXRoZS1p c28tYmFzZS1tZWRpYS1maWxlLWZvcm1hdC12Mi4xLjIsIHNlY3Rpb24gMi4yCisrICAgICAqIGRv bGJ5LXZpc2lvbi1iaXRzdHJlYW1zLWluLW1wZWctMi10cmFuc3BvcnQtc3RyZWFtLW11bHRpcGxl eC12MS4yLCBzZWN0aW9uIDMuMworKyAgICAgKiBUYWdzIGFyZSBzdG9yZWQgaW4gc3RydWN0IEFW RE9WSURlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RB VEFfRE9WSV9DT05GLAorKworKyAgICAvKioKKysgICAgICogVGltZWNvZGUgd2hpY2ggY29uZm9y bXMgdG8gU01QVEUgU1QgMTItMToyMDE0LiBUaGUgZGF0YSBpcyBhbiBhcnJheSBvZiA0IHVpbnQz Ml90CisrICAgICAqIHdoZXJlIHRoZSBmaXJzdCB1aW50MzJfdCBkZXNjcmliZXMgaG93IG1hbnkg KDEtMykgb2YgdGhlIG90aGVyIHRpbWVjb2RlcyBhcmUgdXNlZC4KKysgICAgICogVGhlIHRpbWVj b2RlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYXZfdGltZWNv ZGVfZ2V0X3NtcHRlX2Zyb21fZnJhbWVudW0oKQorKyAgICAgKiBmdW5jdGlvbiBpbiBsaWJhdnV0 aWwvdGltZWNvZGUuaC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1MxMk1fVElNRUNPREUs CisrCisrICAgIC8qKgorKyAgICAgKiBIRFIxMCsgZHluYW1pYyBtZXRhZGF0YSBhc3NvY2lhdGVk IHdpdGggYSB2aWRlbyBmcmFtZS4gVGhlIG1ldGFkYXRhIGlzIGluCisrICAgICAqIHRoZSBmb3Jt IG9mIHRoZSBBVkR5bmFtaWNIRFJQbHVzIHN0cnVjdCBhbmQgY29udGFpbnMKKysgICAgICogaW5m b3JtYXRpb24gZm9yIGNvbG9yIHZvbHVtZSB0cmFuc2Zvcm0gLSBhcHBsaWNhdGlvbiA0IG9mCisr ICAgICAqIFNNUFRFIDIwOTQtNDA6MjAxNiBzdGFuZGFyZC4KKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX0RZTkFNSUNfSERSMTBfUExVUywKKysKKysgICAgLyoqCisrICAgICAqIElBTUYgTWl4 IEdhaW4gUGFyYW1ldGVyIERhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBmcmFtZS4gVGhp cyBtZXRhZGF0YQorKyAgICAgKiBpcyBpbiB0aGUgZm9ybSBvZiB0aGUgQVZJQU1GUGFyYW1EZWZp bml0aW9uIHN0cnVjdCBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24KKysgICAgICogZGVmaW5lZCBp biBzZWN0aW9ucyAzLjYuMSBhbmQgMy44LjEgb2YgdGhlIEltbWVyc2l2ZSBBdWRpbyBNb2RlbCBh bmQKKysgICAgICogRm9ybWF0cyBzdGFuZGFyZC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRB X0lBTUZfTUlYX0dBSU5fUEFSQU0sCisrCisrICAgIC8qKgorKyAgICAgKiBJQU1GIERlbWl4aW5n IEluZm8gUGFyYW1ldGVyIERhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBmcmFtZS4gVGhp cworKyAgICAgKiBtZXRhZGF0YSBpcyBpbiB0aGUgZm9ybSBvZiB0aGUgQVZJQU1GUGFyYW1EZWZp bml0aW9uIHN0cnVjdCBhbmQgY29udGFpbnMKKysgICAgICogaW5mb3JtYXRpb24gZGVmaW5lZCBp biBzZWN0aW9ucyAzLjYuMSBhbmQgMy44LjIgb2YgdGhlIEltbWVyc2l2ZSBBdWRpbyBNb2RlbAor KyAgICAgKiBhbmQgRm9ybWF0cyBzdGFuZGFyZC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRB X0lBTUZfREVNSVhJTkdfSU5GT19QQVJBTSwKKysKKysgICAgLyoqCisrICAgICAqIElBTUYgUmVj b24gR2FpbiBJbmZvIFBhcmFtZXRlciBEYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXVkaW8gZnJh bWUuIFRoaXMKKysgICAgICogbWV0YWRhdGEgaXMgaW4gdGhlIGZvcm0gb2YgdGhlIEFWSUFNRlBh cmFtRGVmaW5pdGlvbiBzdHJ1Y3QgYW5kIGNvbnRhaW5zCisrICAgICAqIGluZm9ybWF0aW9uIGRl ZmluZWQgaW4gc2VjdGlvbnMgMy42LjEgYW5kIDMuOC4zIG9mIHRoZSBJbW1lcnNpdmUgQXVkaW8g TW9kZWwKKysgICAgICogYW5kIEZvcm1hdHMgc3RhbmRhcmQuCisrICAgICAqLworKyAgICBBVl9Q S1RfREFUQV9JQU1GX1JFQ09OX0dBSU5fSU5GT19QQVJBTSwKKysKKysgICAgLyoqCisrICAgICAq IEFtYmllbnQgdmlld2luZyBlbnZpcm9ubWVudCBtZXRhZGF0YSwgYXMgZGVmaW5lZCBieSBILjI3 NC4gVGhpcyBtZXRhZGF0YQorKyAgICAgKiBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgdmlk ZW8gc3RyZWFtIGFuZCBjb250YWlucyBkYXRhIGluIHRoZSBmb3JtCisrICAgICAqIG9mIHRoZSBB VkFtYmllbnRWaWV3aW5nRW52aXJvbm1lbnQgc3RydWN0LgorKyAgICAqLworKyAgICBBVl9QS1Rf REFUQV9BTUJJRU5UX1ZJRVdJTkdfRU5WSVJPTk1FTlQsCisrCisrICAgIC8qKgorKyAgICAgKiBU aGUgbnVtYmVyIG9mIHBpeGVscyB0byBkaXNjYXJkIGZyb20gdGhlIHRvcC9ib3R0b20vbGVmdC9y aWdodCBib3JkZXIgb2YgdGhlCisrICAgICAqIGRlY29kZWQgZnJhbWUgdG8gb2J0YWluIHRoZSBz dWItcmVjdGFuZ2xlIGludGVuZGVkIGZvciBwcmVzZW50YXRpb24uCisrICAgICAqCisrICAgICAq IEBjb2RlCisrICAgICAqIHUzMmxlIGNyb3BfdG9wCisrICAgICAqIHUzMmxlIGNyb3BfYm90dG9t CisrICAgICAqIHUzMmxlIGNyb3BfbGVmdAorKyAgICAgKiB1MzJsZSBjcm9wX3JpZ2h0CisrICAg ICAqIEBlbmRjb2RlCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9GUkFNRV9DUk9QUElORywK KysKKysgICAgLyoqCisrICAgICAqIFJhdyBMQ0VWQyBwYXlsb2FkIGRhdGEsIGFzIGEgdWludDhf dCBhcnJheSwgd2l0aCBOQUwgZW11bGF0aW9uCisrICAgICAqIGJ5dGVzIGludGFjdC4KKysgICAg ICovCisrICAgIEFWX1BLVF9EQVRBX0xDRVZDLAorKworKyAgICAvKioKKysgICAgICogVGhpcyBz aWRlIGRhdGEgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlZmVyZW5jZSBkaXNwbGF5 IHdpZHRoKHMpCisrICAgICAqIGFuZCByZWZlcmVuY2Ugdmlld2luZyBkaXN0YW5jZShzKSBhcyB3 ZWxsIGFzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorKyAgICAgKiBjb3JyZXNwb25kaW5nIHJlZmVy ZW5jZSBzdGVyZW8gcGFpcihzKSwgaS5lLiwgdGhlIHBhaXIocykgb2Ygdmlld3MgdG8gYmUKKysg ICAgICogZGlzcGxheWVkIGZvciB0aGUgdmlld2VyJ3MgbGVmdCBhbmQgcmlnaHQgZXllcyBvbiB0 aGUgcmVmZXJlbmNlIGRpc3BsYXkKKysgICAgICogYXQgdGhlIHJlZmVyZW5jZSB2aWV3aW5nIGRp c3RhbmNlLgorKyAgICAgKiBUaGUgcGF5bG9hZCBpcyB0aGUgQVYzRFJlZmVyZW5jZURpc3BsYXlz SW5mbyBzdHJ1Y3QgZGVmaW5lZCBpbgorKyAgICAgKiBsaWJhdnV0aWwvdGRyZGkuaC4KKysgICAg ICovCisrICAgIEFWX1BLVF9EQVRBXzNEX1JFRkVSRU5DRV9ESVNQTEFZUywKKysKKysgICAgLyoq CisrICAgICAqIENvbnRhaW5zIHRoZSBsYXN0IHJlY2VpdmVkIFJUQ1AgU1IgKFNlbmRlciBSZXBv cnQpIGluZm9ybWF0aW9uCisrICAgICAqIGluIHRoZSBmb3JtIG9mIHRoZSBBVlJUQ1BTZW5kZXJS ZXBvcnQgc3RydWN0LgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfUlRDUF9TUiwKKysKKysg ICAgLyoqCisrICAgICAqIEV4dGVuc2libGUgaW1hZ2UgZmlsZSBmb3JtYXQgbWV0YWRhdGEuIFRo ZSBwYXlsb2FkIGlzIGEgYnVmZmVyIGNvbnRhaW5pbmcKKysgICAgICogRVhJRiBtZXRhZGF0YSwg c3RhcnRpbmcgd2l0aCBlaXRoZXIgNDkgNDkgMmEgMDAsIG9yIDRkIDRkIDAwIDJhLgorKyAgICAg Ki8KKysgICAgIEFWX1BLVF9EQVRBX0VYSUYsCisrCisrICAgIC8qKgorKyAgICAgKiBIRFIgZHlu YW1pYyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBmcmFtZS4gVGhlIHBheWxvYWQg aXMgYW4KKysgICAgICogQVZEeW5hbWljSERSU21wdGUyMDk0QXBwNSB0eXBlIGFuZCBjb250YWlu cyBpbmZvcm1hdGlvbiBmb3IgY29sb3Igdm9sdW1lCisrICAgICAqIHRyYW5zZm9ybSBhcyBzcGVj aWZpZWQgaW4gdGhlIFNNUFRFIDIwOTQtNTAgc3RhbmRhcmQuCisrICAgICAqLworKyAgICBBVl9Q S1RfREFUQV9EWU5BTUlDX0hEUl9TTVBURV8yMDk0X0FQUDUsCisrCisrICAgIC8qKgorKyAgICAg KiBEb2xieSBWaXNpb24gZW5oYW5jZW1lbnQtbGF5ZXIgSEVWQyBkZWNvZGVyIGNvbmZpZ3VyYXRp b24uCisrICAgICAqIFBhcnNlZCBmcm9tIHRoZSBAYyBodmNFIGJveCBpbiBJU09NLWJhc2VkIGNv bnRhaW5lcnMgb3IgdGhlCisrICAgICAqIGNvcnJlc3BvbmRpbmcgQmxvY2tBZGRpdGlvbk1hcHBp bmcgaW4gTWF0cm9za2EuIFRoZSBkYXRhIGlzIGEgcmF3CisrICAgICAqIEhFVkNEZWNvZGVyQ29u ZmlndXJhdGlvblJlY29yZCBhcyBkZWZpbmVkIGluIElTTyAxNDQ5Ni0xNS4KKysgICAgICovCisr ICAgIEFWX1BLVF9EQVRBX0hFVkNfQ09ORiwKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBudW1i ZXIgb2Ygc2lkZSBkYXRhIHR5cGVzLgorKyAgICAgKiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBw dWJsaWMgQVBJL0FCSSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtYXkKKysgICAgICogY2hhbmdlIHdo ZW4gbmV3IHNpZGUgZGF0YSB0eXBlcyBhcmUgYWRkZWQuCisrICAgICAqIFRoaXMgbXVzdCBzdGF5 IHRoZSBsYXN0IGVudW0gdmFsdWUuCisrICAgICAqIElmIGl0cyB2YWx1ZSBiZWNvbWVzIGh1Z2Us IHNvbWUgY29kZSB1c2luZyBpdAorKyAgICAgKiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIGl0IGFz c3VtZXMgaXQgdG8gYmUgc21hbGxlciB0aGFuIG90aGVyIGxpbWl0cy4KKysgICAgICovCisrICAg IEFWX1BLVF9EQVRBX05CCisrfTsKKysKKysvKioKKysgKiBUaGlzIHN0cnVjdHVyZSBzdG9yZXMg YXV4aWxpYXJ5IGluZm9ybWF0aW9uIGZvciBkZWNvZGluZywgcHJlc2VudGluZywgb3IKKysgKiBv dGhlcndpc2UgcHJvY2Vzc2luZyB0aGUgY29kZWQgc3RyZWFtLiBJdCBpcyB0eXBpY2FsbHkgZXhw b3J0ZWQgYnkgZGVtdXhlcnMKKysgKiBhbmQgZW5jb2RlcnMgYW5kIGNhbiBiZSBmZWQgdG8gZGVj b2RlcnMgYW5kIG11eGVycyBlaXRoZXIgaW4gYSBwZXIgcGFja2V0CisrICogYmFzaXMsIG9yIGFz IGdsb2JhbCBzaWRlIGRhdGEgKGFwcGx5aW5nIHRvIHRoZSBlbnRpcmUgY29kZWQgc3RyZWFtKS4K KysgKgorKyAqIEdsb2JhbCBzaWRlIGRhdGEgaXMgaGFuZGxlZCBhcyBmb2xsb3dzOgorKyAqIC0g RHVyaW5nIGRlbXV4aW5nLCBpdCBtYXkgYmUgZXhwb3J0ZWQgdGhyb3VnaAorKyAqICAgQHJlZiBB VkNvZGVjUGFyYW1ldGVycy5jb2RlZF9zaWRlX2RhdGEgIkFWU3RyZWFtJ3MgY29kZWMgcGFyYW1l dGVycyIsIHdoaWNoIGNhbgorKyAqICAgdGhlbiBiZSBwYXNzZWQgYXMgaW5wdXQgdG8gZGVjb2Rl cnMgdGhyb3VnaCB0aGUKKysgKiAgIEByZWYgQVZDb2RlY0NvbnRleHQuY29kZWRfc2lkZV9kYXRh ICJkZWNvZGVyIGNvbnRleHQncyBzaWRlIGRhdGEiLCBmb3IKKysgKiAgIGluaXRpYWxpemF0aW9u LgorKyAqIC0gRm9yIG11eGluZywgaXQgY2FuIGJlIGZlZCB0aHJvdWdoIEByZWYgQVZDb2RlY1Bh cmFtZXRlcnMuY29kZWRfc2lkZV9kYXRhCisrICogICAiQVZTdHJlYW0ncyBjb2RlYyBwYXJhbWV0 ZXJzIiwgdHlwaWNhbGx5ICB0aGUgb3V0cHV0IG9mIGVuY29kZXJzIHRocm91Z2gKKysgKiAgIHRo ZSBAcmVmIEFWQ29kZWNDb250ZXh0LmNvZGVkX3NpZGVfZGF0YSAiZW5jb2RlciBjb250ZXh0J3Mg c2lkZSBkYXRhIiwgZm9yCisrICogICBpbml0aWFsaXphdGlvbi4KKysgKgorKyAqIFBhY2tldCBz cGVjaWZpYyBzaWRlIGRhdGEgaXMgaGFuZGxlZCBhcyBmb2xsb3dzOgorKyAqIC0gRHVyaW5nIGRl bXV4aW5nLCBpdCBtYXkgYmUgZXhwb3J0ZWQgdGhyb3VnaCBAcmVmIEFWUGFja2V0LnNpZGVfZGF0 YQorKyAqICAgIkFWUGFja2V0J3Mgc2lkZSBkYXRhIiwgd2hpY2ggY2FuIHRoZW4gYmUgcGFzc2Vk IGFzIGlucHV0IHRvIGRlY29kZXJzLgorKyAqIC0gRm9yIG11eGluZywgaXQgY2FuIGJlIGZlZCB0 aHJvdWdoIEByZWYgQVZQYWNrZXQuc2lkZV9kYXRhICJBVlBhY2tldCdzCisrICogICBzaWRlIGRh dGEiLCB0eXBpY2FsbHkgdGhlIG91dHB1dCBvZiBlbmNvZGVycy4KKysgKgorKyAqIERpZmZlcmVu dCBtb2R1bGVzIG1heSBhY2NlcHQgb3IgZXhwb3J0IGRpZmZlcmVudCB0eXBlcyBvZiBzaWRlIGRh dGEKKysgKiBkZXBlbmRpbmcgb24gbWVkaWEgdHlwZSBhbmQgY29kZWMuIFJlZmVyIHRvIEByZWYg QVZQYWNrZXRTaWRlRGF0YVR5cGUgZm9yIGEKKysgKiBsaXN0IG9mIGRlZmluZWQgdHlwZXMgYW5k IHdoZXJlIHRoZXkgbWF5IGJlIGZvdW5kIG9yIHVzZWQuCisrICovCisrdHlwZWRlZiBzdHJ1Y3Qg QVZQYWNrZXRTaWRlRGF0YSB7CisrICAgIHVpbnQ4X3QgKmRhdGE7CisrICAgIHNpemVfdCAgIHNp emU7CisrICAgIGVudW0gQVZQYWNrZXRTaWRlRGF0YVR5cGUgdHlwZTsKKyt9IEFWUGFja2V0U2lk ZURhdGE7CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBuZXcgcGFja2V0IHNpZGUgZGF0YS4KKysg KgorKyAqIEBwYXJhbSBzZCAgICBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNpZGUgZGF0YSB0byB3 aGljaCB0aGUgc2lkZSBkYXRhIHNob3VsZAorKyAqICAgICAgICAgICAgICBiZSBhZGRlZC4gKnNk IG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBhcnJheSB3aWxsIGJlCisrICogICAgICAg ICAgICAgIGluaXRpYWxpemVkLgorKyAqIEBwYXJhbSBuYl9zZCBwb2ludGVyIHRvIGFuIGludGVn ZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KKysgKiAgICAgICAgICAgICAg dGhlIGFycmF5LiBUaGUgaW50ZWdlciB2YWx1ZSB3aWxsIGJlIGluY3JlYXNlZCBieSAxIG9uIHN1 Y2Nlc3MuCisrICogQHBhcmFtIHR5cGUgIHNpZGUgZGF0YSB0eXBlCisrICogQHBhcmFtIHNpemUg IGRlc2lyZWQgc2lkZSBkYXRhIHNpemUKKysgKiBAcGFyYW0gZmxhZ3MgY3VycmVudGx5IHVudXNl ZC4gTXVzdCBiZSB6ZXJvCisrICoKKysgKiBAcmV0dXJuIHBvaW50ZXIgdG8gZnJlc2hseSBhbGxv Y2F0ZWQgc2lkZSBkYXRhIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb3RoZXJ3aXNlLgorKyAqLworK0FW UGFja2V0U2lkZURhdGEgKmF2X3BhY2tldF9zaWRlX2RhdGFfbmV3KEFWUGFja2V0U2lkZURhdGEg Kipwc2QsIGludCAqcG5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gQVZQYWNrZXRTaWRlRGF0YVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKysKKysv KioKKysgKiBXcmFwIGV4aXN0aW5nIGRhdGEgYXMgcGFja2V0IHNpZGUgZGF0YS4KKysgKgorKyAq IEBwYXJhbSBzZCAgICBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNpZGUgZGF0YSB0byB3aGljaCB0 aGUgc2lkZSBkYXRhIHNob3VsZAorKyAqICAgICAgICAgICAgICBiZSBhZGRlZC4gKnNkIG1heSBi ZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBhcnJheSB3aWxsIGJlCisrICogICAgICAgICAgICAg IGluaXRpYWxpemVkCisrICogQHBhcmFtIG5iX3NkIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBjb250 YWluaW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgorKyAqICAgICAgICAgICAgICB0aGUgYXJy YXkuIFRoZSBpbnRlZ2VyIHZhbHVlIHdpbGwgYmUgaW5jcmVhc2VkIGJ5IDEgb24gc3VjY2Vzcy4K KysgKiBAcGFyYW0gdHlwZSAgc2lkZSBkYXRhIHR5cGUKKysgKiBAcGFyYW0gZGF0YSAgYSBkYXRh IGFycmF5LiBJdCBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxsb2MoKSBmYW1pbHkK KysgKiAgICAgICAgICAgICAgb2YgZnVuY3Rpb25zLiBUaGUgb3duZXJzaGlwIG9mIHRoZSBkYXRh IGlzIHRyYW5zZmVycmVkIHRvIHRoZQorKyAqICAgICAgICAgICAgICBzaWRlIGRhdGEgYXJyYXkg b24gc3VjY2VzcworKyAqIEBwYXJhbSBzaXplICBzaXplIG9mIHRoZSBkYXRhIGFycmF5CisrICog QHBhcmFtIGZsYWdzIGN1cnJlbnRseSB1bnVzZWQuIE11c3QgYmUgemVybworKyAqCisrICogQHJl dHVybiBwb2ludGVyIHRvIGZyZXNobHkgYWxsb2NhdGVkIHNpZGUgZGF0YSBvbiBzdWNjZXNzLCBv ciBOVUxMIG90aGVyd2lzZQorKyAqICAgICAgICAgT24gZmFpbHVyZSwgdGhlIHNpZGUgZGF0YSBh cnJheSBpcyB1bmNoYW5nZWQgYW5kIHRoZSBkYXRhIHJlbWFpbnMKKysgKiAgICAgICAgIG93bmVk IGJ5IHRoZSBjYWxsZXIuCisrICovCisrQVZQYWNrZXRTaWRlRGF0YSAqYXZfcGFja2V0X3NpZGVf ZGF0YV9hZGQoQVZQYWNrZXRTaWRlRGF0YSAqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQYWNrZXRTaWRlRGF0YVR5cGUg dHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpk YXRhLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBHZXQgc2lkZSBpbmZv cm1hdGlvbiBmcm9tIGEgc2lkZSBkYXRhIGFycmF5LgorKyAqCisrICogQHBhcmFtIHNkICAgIHRo ZSBhcnJheSBmcm9tIHdoaWNoIHRoZSBzaWRlIGRhdGEgc2hvdWxkIGJlIGZldGNoZWQKKysgKiBA cGFyYW0gbmJfc2QgdmFsdWUgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhl IGFycmF5LgorKyAqIEBwYXJhbSB0eXBlICBkZXNpcmVkIHNpZGUgaW5mb3JtYXRpb24gdHlwZQor KyAqCisrICogQHJldHVybiBwb2ludGVyIHRvIHNpZGUgZGF0YSBpZiBwcmVzZW50IG9yIE5VTEwg b3RoZXJ3aXNlCisrICovCisrY29uc3QgQVZQYWNrZXRTaWRlRGF0YSAqYXZfcGFja2V0X3NpZGVf ZGF0YV9nZXQoY29uc3QgQVZQYWNrZXRTaWRlRGF0YSAqc2QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX3NkLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQYWNrZXRTaWRlRGF0YVR5 cGUgdHlwZSk7CisrCisrLyoqCisrICogUmVtb3ZlIHNpZGUgZGF0YSBvZiB0aGUgZ2l2ZW4gdHlw ZSBmcm9tIGEgc2lkZSBkYXRhIGFycmF5LgorKyAqCisrICogQHBhcmFtIHNkICAgIHRoZSBhcnJh eSBmcm9tIHdoaWNoIHRoZSBzaWRlIGRhdGEgc2hvdWxkIGJlIHJlbW92ZWQKKysgKiBAcGFyYW0g bmJfc2QgcG9pbnRlciB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbnRy aWVzIGluCisrICogICAgICAgICAgICAgIHRoZSBhcnJheS4gV2lsbCBiZSByZWR1Y2VkIGJ5IHRo ZSBhbW91bnQgb2YgZW50cmllcyByZW1vdmVkCisrICogICAgICAgICAgICAgIHVwb24gcmV0dXJu CisrICogQHBhcmFtIHR5cGUgIHNpZGUgaW5mb3JtYXRpb24gdHlwZQorKyAqLworK3ZvaWQgYXZf cGFja2V0X3NpZGVfZGF0YV9yZW1vdmUoQVZQYWNrZXRTaWRlRGF0YSAqc2QsIGludCAqbmJfc2Qs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGFja2V0U2lkZURhdGFU eXBlIHR5cGUpOworKworKy8qKgorKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGZyZWUgYWxs IHRoZSBzaWRlIGRhdGEgc3RvcmVkIGluIGFuIGFycmF5LCBhbmQKKysgKiB0aGUgYXJyYXkgaXRz ZWxmLgorKyAqCisrICogQHBhcmFtIHNkICAgIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc2lkZSBkYXRh IHRvIGZyZWUuIFdpbGwgYmUgc2V0IHRvIE5VTEwKKysgKiAgICAgICAgICAgICAgdXBvbiByZXR1 cm4uCisrICogQHBhcmFtIG5iX3NkIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRo ZSBudW1iZXIgb2YgZW50cmllcyBpbgorKyAqICAgICAgICAgICAgICB0aGUgYXJyYXkuIFdpbGwg YmUgc2V0IHRvIDAgdXBvbiByZXR1cm4uCisrICovCisrdm9pZCBhdl9wYWNrZXRfc2lkZV9kYXRh X2ZyZWUoQVZQYWNrZXRTaWRlRGF0YSAqKnNkLCBpbnQgKm5iX3NkKTsKKysKKytzdHJ1Y3QgQVZG cmFtZVNpZGVEYXRhOworKworKy8qKgorKyAqIEFkZCBhIG5ldyBwYWNrZXQgc2lkZSBkYXRhIGVu dHJ5IHRvIGFuIGFycmF5IGJhc2VkIG9uIGV4aXN0aW5nIGZyYW1lCisrICogc2lkZSBkYXRhLCBp ZiBhIG1hdGNoaW5nIHR5cGUgZXhpc3RzIGZvciBwYWNrZXQgc2lkZSBkYXRhLgorKyAqCisrICog QHBhcmFtIGZsYWdzICAgICAgICAgICAgICBDdXJyZW50bHkgdW51c2VkLiBNdXN0IGJlIDAuCisr ICogQHJldHZhbCA+PSAwICAgICAgICAgICAgICBTdWNjZXNzCisrICogQHJldHZhbCBBVkVSUk9S KEVJTlZBTCkgICBUaGUgZnJhbWUgc2lkZSBkYXRhIHR5cGUgZG9lcyBub3QgaGF2ZSBhIG1hdGNo aW5nCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQgc2lkZSBkYXRhIHR5cGUu CisrICogQHJldHZhbCBBVkVSUk9SKEVOT01FTSkgICBGYWlsZWQgdG8gYWRkIGEgc2lkZSBkYXRh IGVudHJ5IHRvIHRoZSBhcnJheSwgb3IKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp bWlsYXIuCisrICovCisraW50IGF2X3BhY2tldF9zaWRlX2RhdGFfZnJvbV9mcmFtZShBVlBhY2tl dFNpZGVEYXRhICoqc2QsIGludCAqbmJfc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgQVZGcmFtZVNpZGVEYXRhICpzcmMsIHVuc2lnbmVkIGludCBm bGFncyk7CisrLyoqCisrICogQWRkIGEgbmV3IGZyYW1lIHNpZGUgZGF0YSBlbnRyeSB0byBhbiBh cnJheSBiYXNlZCBvbiBleGlzdGluZyBwYWNrZXQKKysgKiBzaWRlIGRhdGEsIGlmIGEgbWF0Y2hp bmcgdHlwZSBleGlzdHMgZm9yIGZyYW1lIHNpZGUgZGF0YS4KKysgKgorKyAqIEBwYXJhbSBmbGFn cyAgICAgICAgICAgICAgU29tZSBjb21iaW5hdGlvbiBvZiBBVl9GUkFNRV9TSURFX0RBVEFfRkxB R18qIGZsYWdzLAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgMC4KKysgKiBAcmV0 dmFsID49IDAgICAgICAgICAgICAgIFN1Y2Nlc3MKKysgKiBAcmV0dmFsIEFWRVJST1IoRUlOVkFM KSAgIFRoZSBwYWNrZXQgc2lkZSBkYXRhIHR5cGUgZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nCisr ICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBzaWRlIGRhdGEgdHlwZS4KKysgKiBA cmV0dmFsIEFWRVJST1IoRU5PTUVNKSAgIEZhaWxlZCB0byBhZGQgYSBzaWRlIGRhdGEgZW50cnkg dG8gdGhlIGFycmF5LCBvcgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhci4K KysgKi8KKytpbnQgYXZfcGFja2V0X3NpZGVfZGF0YV90b19mcmFtZShzdHJ1Y3QgQVZGcmFtZVNp ZGVEYXRhICoqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEFWUGFja2V0U2lkZURhdGEgKnNyYywgdW5zaWduZWQgaW50IGZsYWdzKTsKKysK Kytjb25zdCBjaGFyICphdl9wYWNrZXRfc2lkZV9kYXRhX25hbWUoZW51bSBBVlBhY2tldFNpZGVE YXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEBkZWZn cm91cCBsYXZjX3BhY2tldCBBVlBhY2tldAorKyAqCisrICogVHlwZXMgYW5kIGZ1bmN0aW9ucyBm b3Igd29ya2luZyB3aXRoIEFWUGFja2V0LgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogVGhp cyBzdHJ1Y3R1cmUgc3RvcmVzIGNvbXByZXNzZWQgZGF0YS4gSXQgaXMgdHlwaWNhbGx5IGV4cG9y dGVkIGJ5IGRlbXV4ZXJzCisrICogYW5kIHRoZW4gcGFzc2VkIGFzIGlucHV0IHRvIGRlY29kZXJz LCBvciByZWNlaXZlZCBhcyBvdXRwdXQgZnJvbSBlbmNvZGVycyBhbmQKKysgKiB0aGVuIHBhc3Nl ZCB0byBtdXhlcnMuCisrICoKKysgKiBGb3IgdmlkZW8sIGl0IHNob3VsZCB0eXBpY2FsbHkgY29u dGFpbiBvbmUgY29tcHJlc3NlZCBmcmFtZS4gRm9yIGF1ZGlvIGl0IG1heQorKyAqIGNvbnRhaW4g c2V2ZXJhbCBjb21wcmVzc2VkIGZyYW1lcy4gRW5jb2RlcnMgYXJlIGFsbG93ZWQgdG8gb3V0cHV0 IGVtcHR5CisrICogcGFja2V0cywgd2l0aCBubyBjb21wcmVzc2VkIGRhdGEsIGNvbnRhaW5pbmcg b25seSBzaWRlIGRhdGEKKysgKiAoZS5nLiB0byB1cGRhdGUgc29tZSBzdHJlYW0gcGFyYW1ldGVy cyBhdCB0aGUgZW5kIG9mIGVuY29kaW5nKS4KKysgKgorKyAqIFRoZSBzZW1hbnRpY3Mgb2YgZGF0 YSBvd25lcnNoaXAgZGVwZW5kcyBvbiB0aGUgYnVmIGZpZWxkLgorKyAqIElmIGl0IGlzIHNldCwg dGhlIHBhY2tldCBkYXRhIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaXMKKysgKiB2YWxp ZCBpbmRlZmluaXRlbHkgdW50aWwgYSBjYWxsIHRvIGF2X3BhY2tldF91bnJlZigpIHJlZHVjZXMg dGhlCisrICogcmVmZXJlbmNlIGNvdW50IHRvIDAuCisrICoKKysgKiBJZiB0aGUgYnVmIGZpZWxk IGlzIG5vdCBzZXQgYXZfcGFja2V0X3JlZigpIHdvdWxkIG1ha2UgYSBjb3B5IGluc3RlYWQKKysg KiBvZiBpbmNyZWFzaW5nIHRoZSByZWZlcmVuY2UgY291bnQuCisrICoKKysgKiBUaGUgc2lkZSBk YXRhIGlzIGFsd2F5cyBhbGxvY2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSwgY29waWVkIGJ5CisrICog YXZfcGFja2V0X3JlZigpIGFuZCBmcmVlZCBieSBhdl9wYWNrZXRfdW5yZWYoKS4KKysgKgorKyAq IHNpemVvZihBVlBhY2tldCkgYmVpbmcgYSBwYXJ0IG9mIHRoZSBwdWJsaWMgQUJJIGlzIGRlcHJl Y2F0ZWQuIG9uY2UKKysgKiBhdl9pbml0X3BhY2tldCgpIGlzIHJlbW92ZWQsIG5ldyBwYWNrZXRz IHdpbGwgb25seSBiZSBhYmxlIHRvIGJlIGFsbG9jYXRlZAorKyAqIHdpdGggYXZfcGFja2V0X2Fs bG9jKCksIGFuZCBuZXcgZmllbGRzIG1heSBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1 Y3QKKysgKiB3aXRoIGEgbWlub3IgYnVtcC4KKysgKgorKyAqIEBzZWUgYXZfcGFja2V0X2FsbG9j CisrICogQHNlZSBhdl9wYWNrZXRfcmVmCisrICogQHNlZSBhdl9wYWNrZXRfdW5yZWYKKysgKi8K Kyt0eXBlZGVmIHN0cnVjdCBBVlBhY2tldCB7CisrICAgIC8qKgorKyAgICAgKiBBIHJlZmVyZW5j ZSB0byB0aGUgcmVmZXJlbmNlLWNvdW50ZWQgYnVmZmVyIHdoZXJlIHRoZSBwYWNrZXQgZGF0YSBp cworKyAgICAgKiBzdG9yZWQuCisrICAgICAqIE1heSBiZSBOVUxMLCB0aGVuIHRoZSBwYWNrZXQg ZGF0YSBpcyBub3QgcmVmZXJlbmNlLWNvdW50ZWQuCisrICAgICAqLworKyAgICBBVkJ1ZmZlclJl ZiAqYnVmOworKyAgICAvKioKKysgICAgICogUHJlc2VudGF0aW9uIHRpbWVzdGFtcCBpbiBBVlN0 cmVhbS0+dGltZV9iYXNlIHVuaXRzOyB0aGUgdGltZSBhdCB3aGljaAorKyAgICAgKiB0aGUgZGVj b21wcmVzc2VkIHBhY2tldCB3aWxsIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKysgICAgICog Q2FuIGJlIEFWX05PUFRTX1ZBTFVFIGlmIGl0IGlzIG5vdCBzdG9yZWQgaW4gdGhlIGZpbGUuCisr ICAgICAqIHB0cyBNVVNUIGJlIGxhcmdlciBvciBlcXVhbCB0byBkdHMgYXMgcHJlc2VudGF0aW9u IGNhbm5vdCBoYXBwZW4gYmVmb3JlCisrICAgICAqIGRlY29tcHJlc3Npb24sIHVubGVzcyBvbmUg d2FudHMgdG8gdmlldyBoZXggZHVtcHMuIFNvbWUgZm9ybWF0cyBtaXN1c2UKKysgICAgICogdGhl IHRlcm1zIGR0cyBhbmQgcHRzL2N0cyB0byBtZWFuIHNvbWV0aGluZyBkaWZmZXJlbnQuIFN1Y2gg dGltZXN0YW1wcworKyAgICAgKiBtdXN0IGJlIGNvbnZlcnRlZCB0byB0cnVlIHB0cy9kdHMgYmVm b3JlIHRoZXkgYXJlIHN0b3JlZCBpbiBBVlBhY2tldC4KKysgICAgICovCisrICAgIGludDY0X3Qg cHRzOworKyAgICAvKioKKysgICAgICogRGVjb21wcmVzc2lvbiB0aW1lc3RhbXAgaW4gQVZTdHJl YW0tPnRpbWVfYmFzZSB1bml0czsgdGhlIHRpbWUgYXQgd2hpY2gKKysgICAgICogdGhlIHBhY2tl dCBpcyBkZWNvbXByZXNzZWQuCisrICAgICAqIENhbiBiZSBBVl9OT1BUU19WQUxVRSBpZiBpdCBp cyBub3Qgc3RvcmVkIGluIHRoZSBmaWxlLgorKyAgICAgKi8KKysgICAgaW50NjRfdCBkdHM7Cisr ICAgIHVpbnQ4X3QgKmRhdGE7CisrICAgIGludCAgIHNpemU7CisrICAgIGludCAgIHN0cmVhbV9p bmRleDsKKysgICAgLyoqCisrICAgICAqIEEgY29tYmluYXRpb24gb2YgQVZfUEtUX0ZMQUcgdmFs dWVzCisrICAgICAqLworKyAgICBpbnQgICBmbGFnczsKKysgICAgLyoqCisrICAgICAqIEFkZGl0 aW9uYWwgcGFja2V0IGRhdGEgdGhhdCBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5lci4K KysgICAgICogUGFja2V0IGNhbiBjb250YWluIHNldmVyYWwgdHlwZXMgb2Ygc2lkZSBpbmZvcm1h dGlvbi4KKysgICAgICovCisrICAgIEFWUGFja2V0U2lkZURhdGEgKnNpZGVfZGF0YTsKKysgICAg aW50IHNpZGVfZGF0YV9lbGVtczsKKysKKysgICAgLyoqCisrICAgICAqIER1cmF0aW9uIG9mIHRo aXMgcGFja2V0IGluIEFWU3RyZWFtLT50aW1lX2Jhc2UgdW5pdHMsIDAgaWYgdW5rbm93bi4KKysg ICAgICogRXF1YWxzIG5leHRfcHRzIC0gdGhpc19wdHMgaW4gcHJlc2VudGF0aW9uIG9yZGVyLgor KyAgICAgKi8KKysgICAgaW50NjRfdCBkdXJhdGlvbjsKKysKKysgICAgaW50NjRfdCBwb3M7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgYnl0ZSBwb3NpdGlvbiBpbiBzdHJlYW0sIC0x IGlmIHVua25vd24KKysKKysgICAgLyoqCisrICAgICAqIGZvciBzb21lIHByaXZhdGUgZGF0YSBv ZiB0aGUgdXNlcgorKyAgICAgKi8KKysgICAgdm9pZCAqb3BhcXVlOworKworKyAgICAvKioKKysg ICAgICogQVZCdWZmZXJSZWYgZm9yIGZyZWUgdXNlIGJ5IHRoZSBBUEkgdXNlci4gRkZtcGVnIHdp bGwgbmV2ZXIgY2hlY2sgdGhlCisrICAgICAqIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgcmVmLiBG Rm1wZWcgY2FsbHMgYXZfYnVmZmVyX3VucmVmKCkgb24gaXQgd2hlbgorKyAgICAgKiB0aGUgcGFj a2V0IGlzIHVucmVmZXJlbmNlZC4gYXZfcGFja2V0X2NvcHlfcHJvcHMoKSBjYWxscyBjcmVhdGUg YSBuZXcKKysgICAgICogcmVmZXJlbmNlIHdpdGggYXZfYnVmZmVyX3JlZigpIGZvciB0aGUgdGFy Z2V0IHBhY2tldCdzIG9wYXF1ZV9yZWYgZmllbGQuCisrICAgICAqCisrICAgICAqIFRoaXMgaXMg dW5yZWxhdGVkIHRvIHRoZSBvcGFxdWUgZmllbGQsIGFsdGhvdWdoIGl0IHNlcnZlcyBhIHNpbWls YXIKKysgICAgICogcHVycG9zZS4KKysgICAgICovCisrICAgIEFWQnVmZmVyUmVmICpvcGFxdWVf cmVmOworKworKyAgICAvKioKKysgICAgICogVGltZSBiYXNlIG9mIHRoZSBwYWNrZXQncyB0aW1l c3RhbXBzLgorKyAgICAgKiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZpZWxkIG1heSBiZSBzZXQgb24g cGFja2V0cyBvdXRwdXQgYnkgZW5jb2RlcnMgb3IKKysgICAgICogZGVtdXhlcnMsIGJ1dCBpdHMg dmFsdWUgd2lsbCBiZSBieSBkZWZhdWx0IGlnbm9yZWQgb24gaW5wdXQgdG8gZGVjb2RlcnMKKysg ICAgICogb3IgbXV4ZXJzLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCB0aW1lX2Jhc2U7Cisr fSBBVlBhY2tldDsKKysKKysjZGVmaW5lIEFWX1BLVF9GTEFHX0tFWSAgICAgMHgwMDAxIC8vLzwg VGhlIHBhY2tldCBjb250YWlucyBhIGtleWZyYW1lCisrI2RlZmluZSBBVl9QS1RfRkxBR19DT1JS VVBUIDB4MDAwMiAvLy88IFRoZSBwYWNrZXQgY29udGVudCBpcyBjb3JydXB0ZWQKKysvKioKKysg KiBGbGFnIGlzIHVzZWQgdG8gZGlzY2FyZCBwYWNrZXRzIHdoaWNoIGFyZSByZXF1aXJlZCB0byBt YWludGFpbiB2YWxpZAorKyAqIGRlY29kZXIgc3RhdGUgYnV0IGFyZSBub3QgcmVxdWlyZWQgZm9y IG91dHB1dCBhbmQgc2hvdWxkIGJlIGRyb3BwZWQKKysgKiBhZnRlciBkZWNvZGluZy4KKysgKiov CisrI2RlZmluZSBBVl9QS1RfRkxBR19ESVNDQVJEICAgMHgwMDA0CisrLyoqCisrICogVGhlIHBh Y2tldCBjb21lcyBmcm9tIGEgdHJ1c3RlZCBzb3VyY2UuCisrICoKKysgKiBPdGhlcndpc2UtdW5z YWZlIGNvbnN0cnVjdHMgc3VjaCBhcyBhcmJpdHJhcnkgcG9pbnRlcnMgdG8gZGF0YQorKyAqIG91 dHNpZGUgdGhlIHBhY2tldCBtYXkgYmUgZm9sbG93ZWQuCisrICovCisrI2RlZmluZSBBVl9QS1Rf RkxBR19UUlVTVEVEICAgMHgwMDA4CisrLyoqCisrICogRmxhZyBpcyB1c2VkIHRvIGluZGljYXRl IHBhY2tldHMgdGhhdCBjb250YWluIGZyYW1lcyB0aGF0IGNhbgorKyAqIGJlIGRpc2NhcmRlZCBi eSB0aGUgZGVjb2Rlci4gIEkuZS4gTm9uLXJlZmVyZW5jZSBmcmFtZXMuCisrICovCisrI2RlZmlu ZSBBVl9QS1RfRkxBR19ESVNQT1NBQkxFIDB4MDAxMAorKworK2VudW0gQVZTaWRlRGF0YVBhcmFt Q2hhbmdlRmxhZ3MgeworKyAgICBBVl9TSURFX0RBVEFfUEFSQU1fQ0hBTkdFX1NBTVBMRV9SQVRF ICAgID0gMHgwMDA0LAorKyAgICBBVl9TSURFX0RBVEFfUEFSQU1fQ0hBTkdFX0RJTUVOU0lPTlMg ICAgID0gMHgwMDA4LAorK307CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZQYWNrZXQgYW5k IHNldCBpdHMgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVzLiAgVGhlIHJlc3VsdGluZworKyAqIHN0 cnVjdCBtdXN0IGJlIGZyZWVkIHVzaW5nIGF2X3BhY2tldF9mcmVlKCkuCisrICoKKysgKiBAcmV0 dXJuIEFuIEFWUGFja2V0IGZpbGxlZCB3aXRoIGRlZmF1bHQgdmFsdWVzIG9yIE5VTEwgb24gZmFp bHVyZS4KKysgKgorKyAqIEBub3RlIHRoaXMgb25seSBhbGxvY2F0ZXMgdGhlIEFWUGFja2V0IGl0 c2VsZiwgbm90IHRoZSBkYXRhIGJ1ZmZlcnMuIFRob3NlCisrICogbXVzdCBiZSBhbGxvY2F0ZWQg dGhyb3VnaCBvdGhlciBtZWFucyBzdWNoIGFzIGF2X25ld19wYWNrZXQuCisrICoKKysgKiBAc2Vl IGF2X25ld19wYWNrZXQKKysgKi8KKytBVlBhY2tldCAqYXZfcGFja2V0X2FsbG9jKHZvaWQpOwor KworKy8qKgorKyAqIENyZWF0ZSBhIG5ldyBwYWNrZXQgdGhhdCByZWZlcmVuY2VzIHRoZSBzYW1l IGRhdGEgYXMgc3JjLgorKyAqCisrICogVGhpcyBpcyBhIHNob3J0Y3V0IGZvciBhdl9wYWNrZXRf YWxsb2MoKSthdl9wYWNrZXRfcmVmKCkuCisrICoKKysgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQg QVZQYWNrZXQgb24gc3VjY2VzcywgTlVMTCBvbiBlcnJvci4KKysgKgorKyAqIEBzZWUgYXZfcGFj a2V0X2FsbG9jCisrICogQHNlZSBhdl9wYWNrZXRfcmVmCisrICovCisrQVZQYWNrZXQgKmF2X3Bh Y2tldF9jbG9uZShjb25zdCBBVlBhY2tldCAqc3JjKTsKKysKKysvKioKKysgKiBGcmVlIHRoZSBw YWNrZXQsIGlmIHRoZSBwYWNrZXQgaXMgcmVmZXJlbmNlIGNvdW50ZWQsIGl0IHdpbGwgYmUKKysg KiB1bnJlZmVyZW5jZWQgZmlyc3QuCisrICoKKysgKiBAcGFyYW0gcGt0IHBhY2tldCB0byBiZSBm cmVlZC4gVGhlIHBvaW50ZXIgd2lsbCBiZSBzZXQgdG8gTlVMTC4KKysgKiBAbm90ZSBwYXNzaW5n IE5VTEwgaXMgYSBuby1vcC4KKysgKi8KKyt2b2lkIGF2X3BhY2tldF9mcmVlKEFWUGFja2V0ICoq cGt0KTsKKysKKysjaWYgRkZfQVBJX0lOSVRfUEFDS0VUCisrLyoqCisrICogSW5pdGlhbGl6ZSBv cHRpb25hbCBmaWVsZHMgb2YgYSBwYWNrZXQgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKysgKgorKyAq IE5vdGUsIHRoaXMgZG9lcyBub3QgdG91Y2ggdGhlIGRhdGEgYW5kIHNpemUgbWVtYmVycywgd2hp Y2ggaGF2ZSB0byBiZQorKyAqIGluaXRpYWxpemVkIHNlcGFyYXRlbHkuCisrICoKKysgKiBAcGFy YW0gcGt0IHBhY2tldAorKyAqCisrICogQHNlZSBhdl9wYWNrZXRfYWxsb2MKKysgKiBAc2VlIGF2 X3BhY2tldF91bnJlZgorKyAqCisrICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBkZXBy ZWNhdGVkLiBPbmNlIGl0J3MgcmVtb3ZlZCwKKysgICAgICAgICAgICAgICBzaXplb2YoQVZQYWNr ZXQpIHdpbGwgbm90IGJlIGEgcGFydCBvZiB0aGUgQUJJIGFueW1vcmUuCisrICovCisrYXR0cmli dXRlX2RlcHJlY2F0ZWQKKyt2b2lkIGF2X2luaXRfcGFja2V0KEFWUGFja2V0ICpwa3QpOworKyNl bmRpZgorKworKy8qKgorKyAqIEFsbG9jYXRlIHRoZSBwYXlsb2FkIG9mIGEgcGFja2V0IGFuZCBp bml0aWFsaXplIGl0cyBmaWVsZHMgd2l0aAorKyAqIGRlZmF1bHQgdmFsdWVzLgorKyAqCisrICog QHBhcmFtIHBrdCBwYWNrZXQKKysgKiBAcGFyYW0gc2l6ZSB3YW50ZWQgcGF5bG9hZCBzaXplCisr ICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvdGhlcndpc2UKKysgKi8KKytpbnQgYXZf bmV3X3BhY2tldChBVlBhY2tldCAqcGt0LCBpbnQgc2l6ZSk7CisrCisrLyoqCisrICogUmVkdWNl IHBhY2tldCBzaXplLCBjb3JyZWN0bHkgemVyb2luZyBwYWRkaW5nCisrICoKKysgKiBAcGFyYW0g cGt0IHBhY2tldAorKyAqIEBwYXJhbSBzaXplIG5ldyBzaXplCisrICovCisrdm9pZCBhdl9zaHJp bmtfcGFja2V0KEFWUGFja2V0ICpwa3QsIGludCBzaXplKTsKKysKKysvKioKKysgKiBJbmNyZWFz ZSBwYWNrZXQgc2l6ZSwgY29ycmVjdGx5IHplcm9pbmcgcGFkZGluZworKyAqCisrICogQHBhcmFt IHBrdCBwYWNrZXQKKysgKiBAcGFyYW0gZ3Jvd19ieSBudW1iZXIgb2YgYnl0ZXMgYnkgd2hpY2gg dG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHBhY2tldAorKyAqLworK2ludCBhdl9ncm93X3Bh Y2tldChBVlBhY2tldCAqcGt0LCBpbnQgZ3Jvd19ieSk7CisrCisrLyoqCisrICogSW5pdGlhbGl6 ZSBhIHJlZmVyZW5jZS1jb3VudGVkIHBhY2tldCBmcm9tIGF2X21hbGxvYygpZWQgZGF0YS4KKysg KgorKyAqIEBwYXJhbSBwa3QgcGFja2V0IHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9u IHdpbGwgc2V0IHRoZSBkYXRhLCBzaXplLAorKyAqICAgICAgICBhbmQgYnVmIGZpZWxkcywgYWxs IG90aGVycyBhcmUgbGVmdCB1bnRvdWNoZWQuCisrICogQHBhcmFtIGRhdGEgRGF0YSBhbGxvY2F0 ZWQgYnkgYXZfbWFsbG9jKCkgdG8gYmUgdXNlZCBhcyBwYWNrZXQgZGF0YS4gSWYgdGhpcworKyAq ICAgICAgICBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgdGhlIGRhdGEgaXMgb3duZWQg YnkgdGhlIHVuZGVybHlpbmcgQVZCdWZmZXIuCisrICogICAgICAgIFRoZSBjYWxsZXIgbWF5IG5v dCBhY2Nlc3MgdGhlIGRhdGEgdGhyb3VnaCBvdGhlciBtZWFucy4KKysgKiBAcGFyYW0gc2l6ZSBz aXplIG9mIGRhdGEgaW4gYnl0ZXMsIHdpdGhvdXQgdGhlIHBhZGRpbmcuIEkuZS4gdGhlIGZ1bGwg YnVmZmVyCisrICogICAgICAgIHNpemUgaXMgYXNzdW1lZCB0byBiZSBzaXplICsgQVZfSU5QVVRf QlVGRkVSX1BBRERJTkdfU0laRS4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5l Z2F0aXZlIEFWRVJST1Igb24gZXJyb3IKKysgKi8KKytpbnQgYXZfcGFja2V0X2Zyb21fZGF0YShB VlBhY2tldCAqcGt0LCB1aW50OF90ICpkYXRhLCBpbnQgc2l6ZSk7CisrCisrLyoqCisrICogQWxs b2NhdGUgbmV3IGluZm9ybWF0aW9uIG9mIGEgcGFja2V0LgorKyAqCisrICogQHBhcmFtIHBrdCBw YWNrZXQKKysgKiBAcGFyYW0gdHlwZSBzaWRlIGluZm9ybWF0aW9uIHR5cGUKKysgKiBAcGFyYW0g c2l6ZSBzaWRlIGluZm9ybWF0aW9uIHNpemUKKysgKiBAcmV0dXJuIHBvaW50ZXIgdG8gZnJlc2gg YWxsb2NhdGVkIGRhdGEgb3IgTlVMTCBvdGhlcndpc2UKKysgKi8KKyt1aW50OF90KiBhdl9wYWNr ZXRfbmV3X3NpZGVfZGF0YShBVlBhY2tldCAqcGt0LCBlbnVtIEFWUGFja2V0U2lkZURhdGFUeXBl IHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOwor KworKy8qKgorKyAqIFdyYXAgYW4gZXhpc3RpbmcgYXJyYXkgYXMgYSBwYWNrZXQgc2lkZSBkYXRh LgorKyAqCisrICogQHBhcmFtIHBrdCBwYWNrZXQKKysgKiBAcGFyYW0gdHlwZSBzaWRlIGluZm9y bWF0aW9uIHR5cGUKKysgKiBAcGFyYW0gZGF0YSB0aGUgc2lkZSBkYXRhIGFycmF5LiBJdCBtdXN0 IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxsb2MoKQorKyAqICAgICAgICAgICAgIGZhbWls eSBvZiBmdW5jdGlvbnMuIFRoZSBvd25lcnNoaXAgb2YgdGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQg dG8KKysgKiAgICAgICAgICAgICBwa3QuCisrICogQHBhcmFtIHNpemUgc2lkZSBpbmZvcm1hdGlv biBzaXplCisrICogQHJldHVybiBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgb24gc3VjY2VzcywgYSBu ZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24KKysgKiAgICAgICAgIGZhaWx1cmUuIE9uIGZhaWx1cmUs IHRoZSBwYWNrZXQgaXMgdW5jaGFuZ2VkIGFuZCB0aGUgZGF0YSByZW1haW5zCisrICogICAgICAg ICBvd25lZCBieSB0aGUgY2FsbGVyLgorKyAqLworK2ludCBhdl9wYWNrZXRfYWRkX3NpZGVfZGF0 YShBVlBhY2tldCAqcGt0LCBlbnVtIEFWUGFja2V0U2lkZURhdGFUeXBlIHR5cGUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKKysKKysv KioKKysgKiBTaHJpbmsgdGhlIGFscmVhZHkgYWxsb2NhdGVkIHNpZGUgZGF0YSBidWZmZXIKKysg KgorKyAqIEBwYXJhbSBwa3QgcGFja2V0CisrICogQHBhcmFtIHR5cGUgc2lkZSBpbmZvcm1hdGlv biB0eXBlCisrICogQHBhcmFtIHNpemUgbmV3IHNpZGUgaW5mb3JtYXRpb24gc2l6ZQorKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzLCA8IDAgb24gZmFpbHVyZQorKyAqLworK2ludCBhdl9wYWNrZXRf c2hyaW5rX3NpZGVfZGF0YShBVlBhY2tldCAqcGt0LCBlbnVtIEFWUGFja2V0U2lkZURhdGFUeXBl IHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKKysK KysvKioKKysgKiBHZXQgc2lkZSBpbmZvcm1hdGlvbiBmcm9tIHBhY2tldC4KKysgKgorKyAqIEBw YXJhbSBwa3QgcGFja2V0CisrICogQHBhcmFtIHR5cGUgZGVzaXJlZCBzaWRlIGluZm9ybWF0aW9u IHR5cGUKKysgKiBAcGFyYW0gc2l6ZSBJZiBzdXBwbGllZCwgKnNpemUgd2lsbCBiZSBzZXQgdG8g dGhlIHNpemUgb2YgdGhlIHNpZGUgZGF0YQorKyAqICAgICAgICAgICAgIG9yIHRvIHplcm8gaWYg dGhlIGRlc2lyZWQgc2lkZSBkYXRhIGlzIG5vdCBwcmVzZW50LgorKyAqIEByZXR1cm4gcG9pbnRl ciB0byBkYXRhIGlmIHByZXNlbnQgb3IgTlVMTCBvdGhlcndpc2UKKysgKi8KKyt1aW50OF90KiBh dl9wYWNrZXRfZ2V0X3NpZGVfZGF0YShjb25zdCBBVlBhY2tldCAqcGt0LCBlbnVtIEFWUGFja2V0 U2lkZURhdGFUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpzaXplKTsKKysKKysvKioKKysgKiBQYWNrIGEgZGljdGlvbmFyeSBmb3IgdXNlIGluIHNp ZGVfZGF0YS4KKysgKgorKyAqIEBwYXJhbSBkaWN0IFRoZSBkaWN0aW9uYXJ5IHRvIHBhY2suCisr ICogQHBhcmFtIHNpemUgcG9pbnRlciB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQg ZGF0YQorKyAqIEByZXR1cm4gcG9pbnRlciB0byBkYXRhIGlmIHN1Y2Nlc3NmdWwsIE5VTEwgb3Ro ZXJ3aXNlCisrICovCisrdWludDhfdCAqYXZfcGFja2V0X3BhY2tfZGljdGlvbmFyeShjb25zdCBB VkRpY3Rpb25hcnkgKmRpY3QsIHNpemVfdCAqc2l6ZSk7CisrLyoqCisrICogVW5wYWNrIGEgZGlj dGlvbmFyeSBmcm9tIHNpZGVfZGF0YS4KKysgKgorKyAqIEBwYXJhbSBkYXRhIGRhdGEgZnJvbSBz aWRlX2RhdGEKKysgKiBAcGFyYW0gc2l6ZSBzaXplIG9mIHRoZSBkYXRhCisrICogQHBhcmFtIGRp Y3QgdGhlIG1ldGFkYXRhIHN0b3JhZ2UgZGljdGlvbmFyeQorKyAqIEByZXR1cm4gMCBvbiBzdWNj ZXNzLCA8IDAgb24gZmFpbHVyZQorKyAqLworK2ludCBhdl9wYWNrZXRfdW5wYWNrX2RpY3Rpb25h cnkoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVkRpY3Rpb25hcnkgKipkaWN0KTsKKysKKysvKioKKysgKiBDb252ZW5p ZW5jZSBmdW5jdGlvbiB0byBmcmVlIGFsbCB0aGUgc2lkZSBkYXRhIHN0b3JlZC4KKysgKiBBbGwg dGhlIG90aGVyIGZpZWxkcyBzdGF5IHVudG91Y2hlZC4KKysgKgorKyAqIEBwYXJhbSBwa3QgcGFj a2V0CisrICovCisrdm9pZCBhdl9wYWNrZXRfZnJlZV9zaWRlX2RhdGEoQVZQYWNrZXQgKnBrdCk7 CisrCisrLyoqCisrICogU2V0dXAgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGRlc2NyaWJl ZCBieSBhIGdpdmVuIHBhY2tldAorKyAqCisrICogSWYgc3JjIGlzIHJlZmVyZW5jZS1jb3VudGVk LCBzZXR1cCBkc3QgYXMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZQorKyAqIGJ1ZmZlciBpbiBzcmMu IE90aGVyd2lzZSBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgaW4gZHN0IGFuZCBjb3B5IHRoZQorKyAq IGRhdGEgZnJvbSBzcmMgaW50byBpdC4KKysgKgorKyAqIEFsbCB0aGUgb3RoZXIgZmllbGRzIGFy ZSBjb3BpZWQgZnJvbSBzcmMuCisrICoKKysgKiBAc2VlIGF2X3BhY2tldF91bnJlZgorKyAqCisr ICogQHBhcmFtIGRzdCBEZXN0aW5hdGlvbiBwYWNrZXQuIFdpbGwgYmUgY29tcGxldGVseSBvdmVy d3JpdHRlbi4KKysgKiBAcGFyYW0gc3JjIFNvdXJjZSBwYWNrZXQKKysgKgorKyAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Igb24gZXJyb3IuIE9uIGVycm9yLCBkc3QK KysgKiAgICAgICAgIHdpbGwgYmUgYmxhbmsgKGFzIGlmIHJldHVybmVkIGJ5IGF2X3BhY2tldF9h bGxvYygpKS4KKysgKi8KKytpbnQgYXZfcGFja2V0X3JlZihBVlBhY2tldCAqZHN0LCBjb25zdCBB VlBhY2tldCAqc3JjKTsKKysKKysvKioKKysgKiBXaXBlIHRoZSBwYWNrZXQuCisrICoKKysgKiBV bnJlZmVyZW5jZSB0aGUgYnVmZmVyIHJlZmVyZW5jZWQgYnkgdGhlIHBhY2tldCBhbmQgcmVzZXQg dGhlCisrICogcmVtYWluaW5nIHBhY2tldCBmaWVsZHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMu CisrICoKKysgKiBAcGFyYW0gcGt0IFRoZSBwYWNrZXQgdG8gYmUgdW5yZWZlcmVuY2VkLgorKyAq LworK3ZvaWQgYXZfcGFja2V0X3VucmVmKEFWUGFja2V0ICpwa3QpOworKworKy8qKgorKyAqIE1v dmUgZXZlcnkgZmllbGQgaW4gc3JjIHRvIGRzdCBhbmQgcmVzZXQgc3JjLgorKyAqCisrICogQHNl ZSBhdl9wYWNrZXRfdW5yZWYKKysgKgorKyAqIEBwYXJhbSBzcmMgU291cmNlIHBhY2tldCwgd2ls bCBiZSByZXNldAorKyAqIEBwYXJhbSBkc3QgRGVzdGluYXRpb24gcGFja2V0CisrICovCisrdm9p ZCBhdl9wYWNrZXRfbW92ZV9yZWYoQVZQYWNrZXQgKmRzdCwgQVZQYWNrZXQgKnNyYyk7CisrCisr LyoqCisrICogQ29weSBvbmx5ICJwcm9wZXJ0aWVzIiBmaWVsZHMgZnJvbSBzcmMgdG8gZHN0Lgor KyAqCisrICogUHJvcGVydGllcyBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhcmUg YWxsIHRoZSBmaWVsZHMKKysgKiBiZXNpZGUgdGhvc2UgcmVsYXRlZCB0byB0aGUgcGFja2V0IGRh dGEgKGJ1ZiwgZGF0YSwgc2l6ZSkKKysgKgorKyAqIEBwYXJhbSBkc3QgRGVzdGluYXRpb24gcGFj a2V0CisrICogQHBhcmFtIHNyYyBTb3VyY2UgcGFja2V0CisrICoKKysgKiBAcmV0dXJuIDAgb24g c3VjY2VzcyBBVkVSUk9SIG9uIGZhaWx1cmUuCisrICovCisraW50IGF2X3BhY2tldF9jb3B5X3By b3BzKEFWUGFja2V0ICpkc3QsIGNvbnN0IEFWUGFja2V0ICpzcmMpOworKworKy8qKgorKyAqIEVu c3VyZSB0aGUgZGF0YSBkZXNjcmliZWQgYnkgYSBnaXZlbiBwYWNrZXQgaXMgcmVmZXJlbmNlIGNv dW50ZWQuCisrICoKKysgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGVuc3VyZSB0aGF0 IHRoZSByZWZlcmVuY2Ugd2lsbCBiZSB3cml0YWJsZS4KKysgKiAgICAgICBVc2UgYXZfcGFja2V0 X21ha2Vfd3JpdGFibGUgaW5zdGVhZCBmb3IgdGhhdCBwdXJwb3NlLgorKyAqCisrICogQHNlZSBh dl9wYWNrZXRfcmVmCisrICogQHNlZSBhdl9wYWNrZXRfbWFrZV93cml0YWJsZQorKyAqCisrICog QHBhcmFtIHBrdCBwYWNrZXQgd2hvc2UgZGF0YSBzaG91bGQgYmUgbWFkZSByZWZlcmVuY2UgY291 bnRlZC4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Ig b24gZXJyb3IuIE9uIGZhaWx1cmUsIHRoZQorKyAqICAgICAgICAgcGFja2V0IGlzIHVuY2hhbmdl ZC4KKysgKi8KKytpbnQgYXZfcGFja2V0X21ha2VfcmVmY291bnRlZChBVlBhY2tldCAqcGt0KTsK KysKKysvKioKKysgKiBDcmVhdGUgYSB3cml0YWJsZSByZWZlcmVuY2UgZm9yIHRoZSBkYXRhIGRl c2NyaWJlZCBieSBhIGdpdmVuIHBhY2tldCwKKysgKiBhdm9pZGluZyBkYXRhIGNvcHkgaWYgcG9z c2libGUuCisrICoKKysgKiBAcGFyYW0gcGt0IFBhY2tldCB3aG9zZSBkYXRhIHNob3VsZCBiZSBt YWRlIHdyaXRhYmxlLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg QVZFUlJPUiBvbiBmYWlsdXJlLiBPbiBmYWlsdXJlLCB0aGUKKysgKiAgICAgICAgIHBhY2tldCBp cyB1bmNoYW5nZWQuCisrICovCisraW50IGF2X3BhY2tldF9tYWtlX3dyaXRhYmxlKEFWUGFja2V0 ICpwa3QpOworKworKy8qKgorKyAqIENvbnZlcnQgdmFsaWQgdGltaW5nIGZpZWxkcyAodGltZXN0 YW1wcyAvIGR1cmF0aW9ucykgaW4gYSBwYWNrZXQgZnJvbSBvbmUKKysgKiB0aW1lYmFzZSB0byBh bm90aGVyLiBUaW1lc3RhbXBzIHdpdGggdW5rbm93biB2YWx1ZXMgKEFWX05PUFRTX1ZBTFVFKSB3 aWxsIGJlCisrICogaWdub3JlZC4KKysgKgorKyAqIEBwYXJhbSBwa3QgcGFja2V0IG9uIHdoaWNo IHRoZSBjb252ZXJzaW9uIHdpbGwgYmUgcGVyZm9ybWVkCisrICogQHBhcmFtIHRiX3NyYyBzb3Vy Y2UgdGltZWJhc2UsIGluIHdoaWNoIHRoZSB0aW1pbmcgZmllbGRzIGluIHBrdCBhcmUKKysgKiAg ICAgICAgICAgICAgIGV4cHJlc3NlZAorKyAqIEBwYXJhbSB0Yl9kc3QgZGVzdGluYXRpb24gdGlt ZWJhc2UsIHRvIHdoaWNoIHRoZSB0aW1pbmcgZmllbGRzIHdpbGwgYmUKKysgKiAgICAgICAgICAg ICAgIGNvbnZlcnRlZAorKyAqLworK3ZvaWQgYXZfcGFja2V0X3Jlc2NhbGVfdHMoQVZQYWNrZXQg KnBrdCwgQVZSYXRpb25hbCB0Yl9zcmMsIEFWUmF0aW9uYWwgdGJfZHN0KTsKKysKKysvKioKKysg KiBBbGxvY2F0ZSBhbiBBVkNvbnRhaW5lckZpZm8gaW5zdGFuY2UgZm9yIEFWUGFja2V0LgorKyAq CisrICogQHBhcmFtIGZsYWdzIGN1cnJlbnRseSB1bnVzZWQKKysgKi8KKytzdHJ1Y3QgQVZDb250 YWluZXJGaWZvICphdl9jb250YWluZXJfZmlmb19hbGxvY19hdnBhY2tldCh1bnNpZ25lZCBmbGFn cyk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLy8gQVZDT0RFQ19QQUNLRVRf SAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0 eS9mZm1wZWcvdjkvbGliYXZjb2RlYy92ZXJzaW9uLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL3ZlcnNp b24uaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkv ZmZtcGVnL3Y5L2xpYmF2Y29kZWMvdmVyc2lvbi5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0 Ny42NzQ1MDk2OTIgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL3ZlcnNpb24uaAkyMDI2LTA5LTA3IDEy OjIzOjQ3LjY3NDQ4OTIwMiArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qCisrICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkNP REVDX1ZFUlNJT05fSAorKyNkZWZpbmUgQVZDT0RFQ19WRVJTSU9OX0gKKysKKysvKioKKysgKiBA ZmlsZQorKyAqIEBpbmdyb3VwIGxpYmF2YworKyAqIExpYmF2Y29kZWMgdmVyc2lvbiBtYWNyb3Mu CisrICovCisrCisrI2luY2x1ZGUgImxpYmF2dXRpbC92ZXJzaW9uLmgiCisrCisrI2luY2x1ZGUg InZlcnNpb25fbWFqb3IuaCIKKysKKysjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NSU5PUiAg IDEKKysjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NSUNSTyAxMDAKKysKKysjZGVmaW5lIExJ QkFWQ09ERUNfVkVSU0lPTl9JTlQgIEFWX1ZFUlNJT05fSU5UKExJQkFWQ09ERUNfVkVSU0lPTl9N QUpPUiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TElCQVZDT0RFQ19WRVJTSU9OX01JTk9SLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBM SUJBVkNPREVDX1ZFUlNJT04gICAgICBBVl9WRVJTSU9OKExJQkFWQ09ERUNfVkVSU0lPTl9NQUpP UiwgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJB VkNPREVDX1ZFUlNJT05fTUlOT1IsICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCQVZD T0RFQ19CVUlMRCAgICAgICAgTElCQVZDT0RFQ19WRVJTSU9OX0lOVAorKworKyNkZWZpbmUgTElC QVZDT0RFQ19JREVOVCAgICAgICAgIkxhdmMiIEFWX1NUUklOR0lGWShMSUJBVkNPREVDX1ZFUlNJ T04pCisrCisrI2VuZGlmIC8qIEFWQ09ERUNfVkVSU0lPTl9IICovCitkaWZmIC11cCBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNv ZGVjL3ZlcnNpb25fbWFqb3IuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvdmVyc2lvbl9tYWpvci5oCist LS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcv djkvbGliYXZjb2RlYy92ZXJzaW9uX21ham9yLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3 LjY3NDU4MjQ0NSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvdmVyc2lvbl9tYWpvci5oCTIwMjYtMDkt MDcgMTI6MjM6NDcuNjc0NTYyNzAwICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrLyoKKysgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVm IEFWQ09ERUNfVkVSU0lPTl9NQUpPUl9ICisrI2RlZmluZSBBVkNPREVDX1ZFUlNJT05fTUFKT1Jf SAorKworKy8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGliYXZjCisrICogTGliYXZjb2Rl YyB2ZXJzaW9uIG1hY3Jvcy4KKysgKi8KKysKKysjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9N QUpPUiAgNjMKKysKKysvKioKKysgKiBGRl9BUElfKiBkZWZpbmVzIG1heSBiZSBwbGFjZWQgYmVs b3cgdG8gaW5kaWNhdGUgcHVibGljIEFQSSB0aGF0IHdpbGwgYmUKKysgKiBkcm9wcGVkIGF0IGEg ZnV0dXJlIHZlcnNpb24gYnVtcC4gVGhlIGRlZmluZXMgdGhlbXNlbHZlcyBhcmUgbm90IHBhcnQg b2YKKysgKiB0aGUgcHVibGljIEFQSSBhbmQgbWF5IGNoYW5nZSwgYnJlYWsgb3IgZGlzYXBwZWFy IGF0IGFueSB0aW1lLgorKyAqCisrICogQG5vdGUsIHdoZW4gYnVtcGluZyB0aGUgbWFqb3IgdmVy c2lvbiBpdCBpcyByZWNvbW1lbmRlZCB0byBtYW51YWxseQorKyAqIGRpc2FibGUgZWFjaCBGRl9B UElfKiBpbiBpdHMgb3duIGNvbW1pdCBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGVtIGFsbAorKyAq IGF0IG9uY2UgdGhyb3VnaCB0aGUgYnVtcC4gVGhpcyBpbXByb3ZlcyB0aGUgZ2l0IGJpc2VjdC1h YmlsaXR5IG9mIHRoZSBjaGFuZ2UuCisrICovCisrCisrI2RlZmluZSBGRl9BUElfSU5JVF9QQUNL RVQgICAgICAgICAoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SIDwgNjQpCisrCisrI2RlZmluZSBG Rl9BUElfSU5UUkFfRENfUFJFQ0lTSU9OICAoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SIDwgNjQp CisrI2RlZmluZSBGRl9BUElfTUpQRUdfRVhURVJOX0hVRkYgICAoTElCQVZDT0RFQ19WRVJTSU9O X01BSk9SIDwgNjQpCisrCisrI2VuZGlmIC8qIEFWQ09ERUNfVkVSU0lPTl9NQUpPUl9IICovCitk aWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdmZvcm1hdC9hdmZvcm1hdC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvYXZmb3Jt YXQuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkv ZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L2F2Zm9ybWF0LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIz OjQ3LjY3NTIxOTExMSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgJMjAyNi0wOS0w NyAxMjoyMzo0Ny42NzUwNzg5OTQgKzAyMDAKK0BAIC0wLDAgKzEsMzE5MiBAQAorKy8qCisrICog Y29weXJpZ2h0IChjKSAyMDAxIEZhYnJpY2UgQmVsbGFyZAorKyAqCisrICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkZPUk1BVF9B VkZPUk1BVF9ICisrI2RlZmluZSBBVkZPUk1BVF9BVkZPUk1BVF9ICisrCisrLyoqCisrICogQGZp bGUKKysgKiBAaW5ncm91cCBsaWJhdmYKKysgKiBNYWluIGxpYmF2Zm9ybWF0IHB1YmxpYyBBUEkg aGVhZGVyCisrICovCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxpYmF2ZiBsaWJhdmZvcm1hdAor KyAqIEkvTyBhbmQgTXV4aW5nL0RlbXV4aW5nIExpYnJhcnkKKysgKgorKyAqIExpYmF2Zm9ybWF0 IChsYXZmKSBpcyBhIGxpYnJhcnkgZm9yIGRlYWxpbmcgd2l0aCB2YXJpb3VzIG1lZGlhIGNvbnRh aW5lcgorKyAqIGZvcm1hdHMuIEl0cyBtYWluIHR3byBwdXJwb3NlcyBhcmUgZGVtdXhpbmcgLSBp LmUuIHNwbGl0dGluZyBhIG1lZGlhIGZpbGUKKysgKiBpbnRvIGNvbXBvbmVudCBzdHJlYW1zLCBh bmQgdGhlIHJldmVyc2UgcHJvY2VzcyBvZiBtdXhpbmcgLSB3cml0aW5nIHN1cHBsaWVkCisrICog ZGF0YSBpbiBhIHNwZWNpZmllZCBjb250YWluZXIgZm9ybWF0LiBJdCBhbHNvIGhhcyBhbiBAcmVm IGxhdmZfaW8KKysgKiAiSS9PIG1vZHVsZSIgd2hpY2ggc3VwcG9ydHMgYSBudW1iZXIgb2YgcHJv dG9jb2xzIGZvciBhY2Nlc3NpbmcgdGhlIGRhdGEgKGUuZy4KKysgKiBmaWxlLCB0Y3AsIGh0dHAg YW5kIG90aGVycykuCisrICogVW5sZXNzIHlvdSBhcmUgYWJzb2x1dGVseSBzdXJlIHlvdSB3b24n dCB1c2UgbGliYXZmb3JtYXQncyBuZXR3b3JrCisrICogY2FwYWJpbGl0aWVzLCB5b3Ugc2hvdWxk IGFsc28gY2FsbCBhdmZvcm1hdF9uZXR3b3JrX2luaXQoKS4KKysgKgorKyAqIEEgc3VwcG9ydGVk IGlucHV0IGZvcm1hdCBpcyBkZXNjcmliZWQgYnkgYW4gQVZJbnB1dEZvcm1hdCBzdHJ1Y3QsIGNv bnZlcnNlbHkKKysgKiBhbiBvdXRwdXQgZm9ybWF0IGlzIGRlc2NyaWJlZCBieSBBVk91dHB1dEZv cm1hdC4gWW91IGNhbiBpdGVyYXRlIG92ZXIgYWxsCisrICogaW5wdXQvb3V0cHV0IGZvcm1hdHMg dXNpbmcgdGhlICBhdl9kZW11eGVyX2l0ZXJhdGUgLyBhdl9tdXhlcl9pdGVyYXRlKCkgZnVuY3Rp b25zLgorKyAqIFRoZSBwcm90b2NvbHMgbGF5ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBB UEksIHNvIHlvdSBjYW4gb25seSBnZXQgdGhlIG5hbWVzCisrICogb2Ygc3VwcG9ydGVkIHByb3Rv Y29scyB3aXRoIHRoZSBhdmlvX2VudW1fcHJvdG9jb2xzKCkgZnVuY3Rpb24uCisrICoKKysgKiBN YWluIGxhdmYgc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggbXV4aW5nIGFuZCBkZW11eGluZyBpcyBB VkZvcm1hdENvbnRleHQsCisrICogd2hpY2ggZXhwb3J0cyBhbGwgaW5mb3JtYXRpb24gYWJvdXQg dGhlIGZpbGUgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBBcyB3aXRoCisrICogbW9zdCBMaWJhdmZv cm1hdCBzdHJ1Y3R1cmVzLCBpdHMgc2l6ZSBpcyBub3QgcGFydCBvZiBwdWJsaWMgQUJJLCBzbyBp dCBjYW5ub3QgYmUKKysgKiBhbGxvY2F0ZWQgb24gc3RhY2sgb3IgZGlyZWN0bHkgd2l0aCBhdl9t YWxsb2MoKS4gVG8gY3JlYXRlIGFuCisrICogQVZGb3JtYXRDb250ZXh0LCB1c2UgYXZmb3JtYXRf YWxsb2NfY29udGV4dCgpIChzb21lIGZ1bmN0aW9ucywgbGlrZQorKyAqIGF2Zm9ybWF0X29wZW5f aW5wdXQoKSBtaWdodCBkbyB0aGF0IGZvciB5b3UpLgorKyAqCisrICogTW9zdCBpbXBvcnRhbnRs eSBhbiBBVkZvcm1hdENvbnRleHQgY29udGFpbnM6CisrICogQGxpIHRoZSBAcmVmIEFWRm9ybWF0 Q29udGV4dC5pZm9ybWF0ICJpbnB1dCIgb3IgQHJlZiBBVkZvcm1hdENvbnRleHQub2Zvcm1hdAor KyAqICJvdXRwdXQiIGZvcm1hdC4gSXQgaXMgZWl0aGVyIGF1dG9kZXRlY3RlZCBvciBzZXQgYnkg dXNlciBmb3IgaW5wdXQ7CisrICogYWx3YXlzIHNldCBieSB1c2VyIGZvciBvdXRwdXQuCisrICog QGxpIGFuIEByZWYgQVZGb3JtYXRDb250ZXh0LnN0cmVhbXMgImFycmF5IiBvZiBBVlN0cmVhbXMs IHdoaWNoIGRlc2NyaWJlIGFsbAorKyAqIGVsZW1lbnRhcnkgc3RyZWFtcyBzdG9yZWQgaW4gdGhl IGZpbGUuIEFWU3RyZWFtcyBhcmUgdHlwaWNhbGx5IHJlZmVycmVkIHRvCisrICogdXNpbmcgdGhl aXIgaW5kZXggaW4gdGhpcyBhcnJheS4KKysgKiBAbGkgYW4gQHJlZiBBVkZvcm1hdENvbnRleHQu cGIgIkkvTyBjb250ZXh0Ii4gSXQgaXMgZWl0aGVyIG9wZW5lZCBieSBsYXZmIG9yCisrICogc2V0 IGJ5IHVzZXIgZm9yIGlucHV0LCBhbHdheXMgc2V0IGJ5IHVzZXIgZm9yIG91dHB1dCAodW5sZXNz IHlvdSBhcmUgZGVhbGluZworKyAqIHdpdGggYW4gQVZGTVRfTk9GSUxFIGZvcm1hdCkuCisrICoK KysgKiBAc2VjdGlvbiBsYXZmX29wdGlvbnMgUGFzc2luZyBvcHRpb25zIHRvIChkZSltdXhlcnMK KysgKiBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgbGF2ZiBtdXhlcnMgYW5kIGRlbXV4ZXJz IHVzaW5nIHRoZSBAcmVmIGF2b3B0aW9ucworKyAqIG1lY2hhbmlzbS4gR2VuZXJpYyAoZm9ybWF0 LWluZGVwZW5kZW50KSBsaWJhdmZvcm1hdCBvcHRpb25zIGFyZSBwcm92aWRlZCBieQorKyAqIEFW Rm9ybWF0Q29udGV4dCwgdGhleSBjYW4gYmUgZXhhbWluZWQgZnJvbSBhIHVzZXIgcHJvZ3JhbSBi eSBjYWxsaW5nCisrICogYXZfb3B0X25leHQoKSAvIGF2X29wdF9maW5kKCkgb24gYW4gYWxsb2Nh dGVkIEFWRm9ybWF0Q29udGV4dCAob3IgaXRzIEFWQ2xhc3MKKysgKiBmcm9tIGF2Zm9ybWF0X2dl dF9jbGFzcygpKS4gUHJpdmF0ZSAoZm9ybWF0LXNwZWNpZmljKSBvcHRpb25zIGFyZSBwcm92aWRl ZCBieQorKyAqIEFWRm9ybWF0Q29udGV4dC5wcml2X2RhdGEgaWYgYW5kIG9ubHkgaWYgQVZJbnB1 dEZvcm1hdC5wcml2X2NsYXNzIC8KKysgKiBBVk91dHB1dEZvcm1hdC5wcml2X2NsYXNzIG9mIHRo ZSBjb3JyZXNwb25kaW5nIGZvcm1hdCBzdHJ1Y3QgaXMgbm9uLU5VTEwuCisrICogRnVydGhlciBv cHRpb25zIG1heSBiZSBwcm92aWRlZCBieSB0aGUgQHJlZiBBVkZvcm1hdENvbnRleHQucGIgIkkv TyBjb250ZXh0IiwKKysgKiBpZiBpdHMgQVZDbGFzcyBpcyBub24tTlVMTCwgYW5kIHRoZSBwcm90 b2NvbHMgbGF5ZXIuIFNlZSB0aGUgZGlzY3Vzc2lvbiBvbgorKyAqIG5lc3RpbmcgaW4gQHJlZiBh dm9wdGlvbnMgZG9jdW1lbnRhdGlvbiB0byBsZWFybiBob3cgdG8gYWNjZXNzIHRob3NlLgorKyAq CisrICogQHNlY3Rpb24gdXJscworKyAqIFVSTCBzdHJpbmdzIGluIGxpYmF2Zm9ybWF0IGFyZSBt YWRlIG9mIGEgc2NoZW1lL3Byb3RvY29sLCBhICc6JywgYW5kIGEKKysgKiBzY2hlbWUgc3BlY2lm aWMgc3RyaW5nLiBVUkxzIHdpdGhvdXQgYSBzY2hlbWUgYW5kICc6JyB1c2VkIGZvciBsb2NhbCBm aWxlcworKyAqIGFyZSBzdXBwb3J0ZWQgYnV0IGRlcHJlY2F0ZWQuICJmaWxlOiIgc2hvdWxkIGJl IHVzZWQgZm9yIGxvY2FsIGZpbGVzLgorKyAqCisrICogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhl IHNjaGVtZSBzdHJpbmcgaXMgbm90IHRha2VuIGZyb20gdW50cnVzdGVkCisrICogc291cmNlcyB3 aXRob3V0IGNoZWNrcy4KKysgKgorKyAqIE5vdGUgdGhhdCBzb21lIHNjaGVtZXMvcHJvdG9jb2xz IGFyZSBxdWl0ZSBwb3dlcmZ1bCwgYWxsb3dpbmcgYWNjZXNzIHRvCisrICogYm90aCBsb2NhbCBh bmQgcmVtb3RlIGZpbGVzLCBwYXJ0cyBvZiB0aGVtLCBjb25jYXRlbmF0aW9ucyBvZiB0aGVtLCBs b2NhbAorKyAqIGF1ZGlvIGFuZCB2aWRlbyBkZXZpY2VzIGFuZCBzbyBvbi4KKysgKgorKyAqIEB7 CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2Zl9kZWNvZGluZyBEZW11eGluZworKyAqIEB7CisrICog RGVtdXhlcnMgcmVhZCBhIG1lZGlhIGZpbGUgYW5kIHNwbGl0IGl0IGludG8gY2h1bmtzIG9mIGRh dGEgKEBlbSBwYWNrZXRzKS4gQQorKyAqIEByZWYgQVZQYWNrZXQgInBhY2tldCIgY29udGFpbnMg b25lIG9yIG1vcmUgZW5jb2RlZCBmcmFtZXMgd2hpY2ggYmVsb25ncyB0byBhCisrICogc2luZ2xl IGVsZW1lbnRhcnkgc3RyZWFtLiBJbiB0aGUgbGF2ZiBBUEkgdGhpcyBwcm9jZXNzIGlzIHJlcHJl c2VudGVkIGJ5IHRoZQorKyAqIGF2Zm9ybWF0X29wZW5faW5wdXQoKSBmdW5jdGlvbiBmb3Igb3Bl bmluZyBhIGZpbGUsIGF2X3JlYWRfZnJhbWUoKSBmb3IKKysgKiByZWFkaW5nIGEgc2luZ2xlIHBh Y2tldCBhbmQgZmluYWxseSBhdmZvcm1hdF9jbG9zZV9pbnB1dCgpLCB3aGljaCBkb2VzIHRoZQor KyAqIGNsZWFudXAuCisrICoKKysgKiBAc2VjdGlvbiBsYXZmX2RlY29kaW5nX29wZW4gT3Blbmlu ZyBhIG1lZGlhIGZpbGUKKysgKiBUaGUgbWluaW11bSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBv cGVuIGEgZmlsZSBpcyBpdHMgVVJMLCB3aGljaAorKyAqIGlzIHBhc3NlZCB0byBhdmZvcm1hdF9v cGVuX2lucHV0KCksIGFzIGluIHRoZSBmb2xsb3dpbmcgY29kZToKKysgKiBAY29kZQorKyAqIGNv bnN0IGNoYXIgICAgKnVybCA9ICJmaWxlOmluLm1wMyI7CisrICogQVZGb3JtYXRDb250ZXh0ICpz ID0gTlVMTDsKKysgKiBpbnQgcmV0ID0gYXZmb3JtYXRfb3Blbl9pbnB1dCgmcywgdXJsLCBOVUxM LCBOVUxMKTsKKysgKiBpZiAocmV0IDwgMCkKKysgKiAgICAgYWJvcnQoKTsKKysgKiBAZW5kY29k ZQorKyAqIFRoZSBhYm92ZSBjb2RlIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGFuIEFWRm9ybWF0Q29u dGV4dCwgb3BlbiB0aGUKKysgKiBzcGVjaWZpZWQgZmlsZSAoYXV0b2RldGVjdGluZyB0aGUgZm9y bWF0KSBhbmQgcmVhZCB0aGUgaGVhZGVyLCBleHBvcnRpbmcgdGhlCisrICogaW5mb3JtYXRpb24g c3RvcmVkIHRoZXJlIGludG8gcy4gU29tZSBmb3JtYXRzIGRvIG5vdCBoYXZlIGEgaGVhZGVyIG9y IGRvIG5vdAorKyAqIHN0b3JlIGVub3VnaCBpbmZvcm1hdGlvbiB0aGVyZSwgc28gaXQgaXMgcmVj b21tZW5kZWQgdGhhdCB5b3UgY2FsbCB0aGUKKysgKiBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZv KCkgZnVuY3Rpb24gd2hpY2ggdHJpZXMgdG8gcmVhZCBhbmQgZGVjb2RlIGEgZmV3CisrICogZnJh bWVzIHRvIGZpbmQgbWlzc2luZyBpbmZvcm1hdGlvbi4KKysgKgorKyAqIEluIHNvbWUgY2FzZXMg eW91IG1pZ2h0IHdhbnQgdG8gcHJlYWxsb2NhdGUgYW4gQVZGb3JtYXRDb250ZXh0IHlvdXJzZWxm IHdpdGgKKysgKiBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCkgYW5kIGRvIHNvbWUgdHdlYWtpbmcg b24gaXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8KKysgKiBhdmZvcm1hdF9vcGVuX2lucHV0KCkuIE9u ZSBzdWNoIGNhc2UgaXMgd2hlbiB5b3Ugd2FudCB0byB1c2UgY3VzdG9tIGZ1bmN0aW9ucworKyAq IGZvciByZWFkaW5nIGlucHV0IGRhdGEgaW5zdGVhZCBvZiBsYXZmIGludGVybmFsIEkvTyBsYXll ci4KKysgKiBUbyBkbyB0aGF0LCBjcmVhdGUgeW91ciBvd24gQVZJT0NvbnRleHQgd2l0aCBhdmlv X2FsbG9jX2NvbnRleHQoKSwgcGFzc2luZworKyAqIHlvdXIgcmVhZGluZyBjYWxsYmFja3MgdG8g aXQuIFRoZW4gc2V0IHRoZSBAZW0gcGIgZmllbGQgb2YgeW91cgorKyAqIEFWRm9ybWF0Q29udGV4 dCB0byBuZXdseSBjcmVhdGVkIEFWSU9Db250ZXh0LgorKyAqCisrICogU2luY2UgdGhlIGZvcm1h dCBvZiB0aGUgb3BlbmVkIGZpbGUgaXMgaW4gZ2VuZXJhbCBub3Qga25vd24gdW50aWwgYWZ0ZXIK KysgKiBhdmZvcm1hdF9vcGVuX2lucHV0KCkgaGFzIHJldHVybmVkLCBpdCBpcyBub3QgcG9zc2li bGUgdG8gc2V0IGRlbXV4ZXIgcHJpdmF0ZQorKyAqIG9wdGlvbnMgb24gYSBwcmVhbGxvY2F0ZWQg Y29udGV4dC4gSW5zdGVhZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB0bworKyAqIGF2 Zm9ybWF0X29wZW5faW5wdXQoKSB3cmFwcGVkIGluIGFuIEFWRGljdGlvbmFyeToKKysgKiBAY29k ZQorKyAqIEFWRGljdGlvbmFyeSAqb3B0aW9ucyA9IE5VTEw7CisrICogYXZfZGljdF9zZXQoJm9w dGlvbnMsICJ2aWRlb19zaXplIiwgIjY0MHg0ODAiLCAwKTsKKysgKiBhdl9kaWN0X3NldCgmb3B0 aW9ucywgInBpeGVsX2Zvcm1hdCIsICJyZ2IyNCIsIDApOworKyAqCisrICogaWYgKGF2Zm9ybWF0 X29wZW5faW5wdXQoJnMsIHVybCwgTlVMTCwgJm9wdGlvbnMpIDwgMCkKKysgKiAgICAgYWJvcnQo KTsKKysgKiBhdl9kaWN0X2ZyZWUoJm9wdGlvbnMpOworKyAqIEBlbmRjb2RlCisrICogVGhpcyBj b2RlIHBhc3NlcyB0aGUgcHJpdmF0ZSBvcHRpb25zICd2aWRlb19zaXplJyBhbmQgJ3BpeGVsX2Zv cm1hdCcgdG8gdGhlCisrICogZGVtdXhlci4gVGhleSB3b3VsZCBiZSBuZWNlc3NhcnkgZm9yIGUu Zy4gdGhlIHJhd3ZpZGVvIGRlbXV4ZXIsIHNpbmNlIGl0CisrICogY2Fubm90IGtub3cgaG93IHRv IGludGVycHJldCByYXcgdmlkZW8gZGF0YSBvdGhlcndpc2UuIElmIHRoZSBmb3JtYXQgdHVybnMK KysgKiBvdXQgdG8gYmUgc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIHJhdyB2aWRlbywgdGhvc2Ug b3B0aW9ucyB3aWxsIG5vdCBiZQorKyAqIHJlY29nbml6ZWQgYnkgdGhlIGRlbXV4ZXIgYW5kIHRo ZXJlZm9yZSB3aWxsIG5vdCBiZSBhcHBsaWVkLiBTdWNoIHVucmVjb2duaXplZAorKyAqIG9wdGlv bnMgYXJlIHRoZW4gcmV0dXJuZWQgaW4gdGhlIG9wdGlvbnMgZGljdGlvbmFyeSAocmVjb2duaXpl ZCBvcHRpb25zIGFyZQorKyAqIGNvbnN1bWVkKS4gVGhlIGNhbGxpbmcgcHJvZ3JhbSBjYW4gaGFu ZGxlIHN1Y2ggdW5yZWNvZ25pemVkIG9wdGlvbnMgYXMgaXQKKysgKiB3aXNoZXMsIGUuZy4KKysg KiBAY29kZQorKyAqIGNvbnN0IEFWRGljdGlvbmFyeUVudHJ5ICplOworKyAqIGlmICgoZSA9IGF2 X2RpY3RfaXRlcmF0ZShvcHRpb25zLCBOVUxMKSkpIHsKKysgKiAgICAgZnByaW50ZihzdGRlcnIs ICJPcHRpb24gJXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIGRlbXV4ZXIuXG4iLCBlLT5rZXkpOwor KyAqICAgICBhYm9ydCgpOworKyAqIH0KKysgKiBAZW5kY29kZQorKyAqCisrICogQWZ0ZXIgeW91 IGhhdmUgZmluaXNoZWQgcmVhZGluZyB0aGUgZmlsZSwgeW91IG11c3QgY2xvc2UgaXQgd2l0aAor KyAqIGF2Zm9ybWF0X2Nsb3NlX2lucHV0KCkuIEl0IHdpbGwgZnJlZSBldmVyeXRoaW5nIGFzc29j aWF0ZWQgd2l0aCB0aGUgZmlsZS4KKysgKgorKyAqIEBzZWN0aW9uIGxhdmZfZGVjb2RpbmdfcmVh ZCBSZWFkaW5nIGZyb20gYW4gb3BlbmVkIGZpbGUKKysgKiBSZWFkaW5nIGRhdGEgZnJvbSBhbiBv cGVuZWQgQVZGb3JtYXRDb250ZXh0IGlzIGRvbmUgYnkgcmVwZWF0ZWRseSBjYWxsaW5nCisrICog YXZfcmVhZF9mcmFtZSgpIG9uIGl0LiBFYWNoIGNhbGwsIGlmIHN1Y2Nlc3NmdWwsIHdpbGwgcmV0 dXJuIGFuIEFWUGFja2V0CisrICogY29udGFpbmluZyBlbmNvZGVkIGRhdGEgZm9yIG9uZSBBVlN0 cmVhbSwgaWRlbnRpZmllZCBieQorKyAqIEFWUGFja2V0LnN0cmVhbV9pbmRleC4gVGhpcyBwYWNr ZXQgbWF5IGJlIHBhc3NlZCBzdHJhaWdodCBpbnRvIHRoZSBsaWJhdmNvZGVjCisrICogZGVjb2Rp bmcgZnVuY3Rpb25zIGF2Y29kZWNfc2VuZF9wYWNrZXQoKSBvciBhdmNvZGVjX2RlY29kZV9zdWJ0 aXRsZTIoKSBpZiB0aGUKKysgKiBjYWxsZXIgd2lzaGVzIHRvIGRlY29kZSB0aGUgZGF0YS4KKysg KgorKyAqIEFWUGFja2V0LnB0cywgQVZQYWNrZXQuZHRzIGFuZCBBVlBhY2tldC5kdXJhdGlvbiB0 aW1pbmcgaW5mb3JtYXRpb24gd2lsbCBiZQorKyAqIHNldCBpZiBrbm93bi4gVGhleSBtYXkgYWxz byBiZSB1bnNldCAoaS5lLiBBVl9OT1BUU19WQUxVRSBmb3IKKysgKiBwdHMvZHRzLCAwIGZvciBk dXJhdGlvbikgaWYgdGhlIHN0cmVhbSBkb2VzIG5vdCBwcm92aWRlIHRoZW0uIFRoZSB0aW1pbmcK KysgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGluIEFWU3RyZWFtLnRpbWVfYmFzZSB1bml0cywgaS5l LiBpdCBoYXMgdG8gYmUKKysgKiBtdWx0aXBsaWVkIGJ5IHRoZSB0aW1lYmFzZSB0byBjb252ZXJ0 IHRoZW0gdG8gc2Vjb25kcy4KKysgKgorKyAqIEEgcGFja2V0IHJldHVybmVkIGJ5IGF2X3JlYWRf ZnJhbWUoKSBpcyBhbHdheXMgcmVmZXJlbmNlLWNvdW50ZWQsCisrICogaS5lLiBBVlBhY2tldC5i dWYgaXMgc2V0IGFuZCB0aGUgdXNlciBtYXkga2VlcCBpdCBpbmRlZmluaXRlbHkuCisrICogVGhl IHBhY2tldCBtdXN0IGJlIGZyZWVkIHdpdGggYXZfcGFja2V0X3VucmVmKCkgd2hlbiBpdCBpcyBu bworKyAqIGxvbmdlciBuZWVkZWQuCisrICoKKysgKiBAc2VjdGlvbiBsYXZmX2RlY29kaW5nX3Nl ZWsgU2Vla2luZworKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2Zl9lbmNvZGluZyBNdXhp bmcKKysgKiBAeworKyAqIE11eGVycyB0YWtlIGVuY29kZWQgZGF0YSBpbiB0aGUgZm9ybSBvZiBA cmVmIEFWUGFja2V0ICJBVlBhY2tldHMiIGFuZCB3cml0ZQorKyAqIGl0IGludG8gZmlsZXMgb3Ig b3RoZXIgb3V0cHV0IGJ5dGVzdHJlYW1zIGluIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvcm1h dC4KKysgKgorKyAqIFRoZSBtYWluIEFQSSBmdW5jdGlvbnMgZm9yIG11eGluZyBhcmUgYXZmb3Jt YXRfd3JpdGVfaGVhZGVyKCkgZm9yIHdyaXRpbmcgdGhlCisrICogZmlsZSBoZWFkZXIsIGF2X3dy aXRlX2ZyYW1lKCkgLyBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSgpIGZvciB3cml0aW5nIHRo ZQorKyAqIHBhY2tldHMgYW5kIGF2X3dyaXRlX3RyYWlsZXIoKSBmb3IgZmluYWxpemluZyB0aGUg ZmlsZS4KKysgKgorKyAqIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG11eGluZyBwcm9jZXNzLCB0 aGUgY2FsbGVyIG11c3QgZmlyc3QgY2FsbAorKyAqIGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKSB0 byBjcmVhdGUgYSBtdXhpbmcgY29udGV4dC4gVGhlIGNhbGxlciB0aGVuIHNldHMgdXAKKysgKiB0 aGUgbXV4ZXIgYnkgZmlsbGluZyB0aGUgdmFyaW91cyBmaWVsZHMgaW4gdGhpcyBjb250ZXh0Ogor KyAqCisrICogLSBUaGUgQHJlZiBBVkZvcm1hdENvbnRleHQub2Zvcm1hdCAib2Zvcm1hdCIgZmll bGQgbXVzdCBiZSBzZXQgdG8gc2VsZWN0IHRoZQorKyAqICAgbXV4ZXIgdGhhdCB3aWxsIGJlIHVz ZWQuCisrICogLSBVbmxlc3MgdGhlIGZvcm1hdCBpcyBvZiB0aGUgQVZGTVRfTk9GSUxFIHR5cGUs IHRoZSBAcmVmIEFWRm9ybWF0Q29udGV4dC5wYgorKyAqICAgInBiIiBmaWVsZCBtdXN0IGJlIHNl dCB0byBhbiBvcGVuZWQgSU8gY29udGV4dCwgZWl0aGVyIHJldHVybmVkIGZyb20KKysgKiAgIGF2 aW9fb3BlbjIoKSBvciBhIGN1c3RvbSBvbmUuCisrICogLSBVbmxlc3MgdGhlIGZvcm1hdCBpcyBv ZiB0aGUgQVZGTVRfTk9TVFJFQU1TIHR5cGUsIGF0IGxlYXN0IG9uZSBzdHJlYW0gbXVzdAorKyAq ICAgYmUgY3JlYXRlZCB3aXRoIHRoZSBhdmZvcm1hdF9uZXdfc3RyZWFtKCkgZnVuY3Rpb24uIFRo ZSBjYWxsZXIgc2hvdWxkIGZpbGwKKysgKiAgIHRoZSBAcmVmIEFWU3RyZWFtLmNvZGVjcGFyICJz dHJlYW0gY29kZWMgcGFyYW1ldGVycyIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlCisrICogICBj b2RlYyBAcmVmIEFWQ29kZWNQYXJhbWV0ZXJzLmNvZGVjX3R5cGUgInR5cGUiLCBAcmVmIEFWQ29k ZWNQYXJhbWV0ZXJzLmNvZGVjX2lkCisrICogICAiaWQiIGFuZCBvdGhlciBwYXJhbWV0ZXJzIChl LmcuIHdpZHRoIC8gaGVpZ2h0LCB0aGUgcGl4ZWwgb3Igc2FtcGxlIGZvcm1hdCwKKysgKiAgIGV0 Yy4pIGFzIGtub3duLiBUaGUgQHJlZiBBVlN0cmVhbS50aW1lX2Jhc2UgInN0cmVhbSB0aW1lYmFz ZSIgc2hvdWxkCisrICogICBiZSBzZXQgdG8gdGhlIHRpbWViYXNlIHRoYXQgdGhlIGNhbGxlciBk ZXNpcmVzIHRvIHVzZSBmb3IgdGhpcyBzdHJlYW0gKG5vdGUKKysgKiAgIHRoYXQgdGhlIHRpbWVi YXNlIGFjdHVhbGx5IHVzZWQgYnkgdGhlIG11eGVyIGNhbiBiZSBkaWZmZXJlbnQsIGFzIHdpbGwg YmUKKysgKiAgIGRlc2NyaWJlZCBsYXRlcikuCisrICogLSBJdCBpcyBhZHZpc2VkIHRvIG1hbnVh bGx5IGluaXRpYWxpemUgb25seSB0aGUgcmVsZXZhbnQgZmllbGRzIGluCisrICogICBBVkNvZGVj UGFyYW1ldGVycywgcmF0aGVyIHRoYW4gdXNpbmcgQHJlZiBhdmNvZGVjX3BhcmFtZXRlcnNfY29w eSgpIGR1cmluZworKyAqICAgcmVtdXhpbmc6IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRo ZSBjb2RlYyBjb250ZXh0IHZhbHVlcyByZW1haW4gdmFsaWQKKysgKiAgIGZvciBib3RoIGlucHV0 IGFuZCBvdXRwdXQgZm9ybWF0IGNvbnRleHRzLgorKyAqIC0gVGhlIGNhbGxlciBtYXkgZmlsbCBp biBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzdWNoIGFzIEByZWYKKysgKiAgIEFWRm9ybWF0Q29u dGV4dC5tZXRhZGF0YSAiZ2xvYmFsIiBvciBAcmVmIEFWU3RyZWFtLm1ldGFkYXRhICJwZXItc3Ry ZWFtIgorKyAqICAgbWV0YWRhdGEsIEByZWYgQVZGb3JtYXRDb250ZXh0LmNoYXB0ZXJzICJjaGFw dGVycyIsIEByZWYKKysgKiAgIEFWRm9ybWF0Q29udGV4dC5wcm9ncmFtcyAicHJvZ3JhbXMiLCBl dGMuIGFzIGRlc2NyaWJlZCBpbiB0aGUKKysgKiAgIEFWRm9ybWF0Q29udGV4dCBkb2N1bWVudGF0 aW9uLiBXaGV0aGVyIHN1Y2ggaW5mb3JtYXRpb24gd2lsbCBhY3R1YWxseSBiZQorKyAqICAgc3Rv cmVkIGluIHRoZSBvdXRwdXQgZGVwZW5kcyBvbiB3aGF0IHRoZSBjb250YWluZXIgZm9ybWF0IGFu ZCB0aGUgbXV4ZXIKKysgKiAgIHN1cHBvcnQuCisrICoKKysgKiBXaGVuIHRoZSBtdXhpbmcgY29u dGV4dCBpcyBmdWxseSBzZXQgdXAsIHRoZSBjYWxsZXIgbXVzdCBjYWxsCisrICogYXZmb3JtYXRf d3JpdGVfaGVhZGVyKCkgdG8gaW5pdGlhbGl6ZSB0aGUgbXV4ZXIgaW50ZXJuYWxzIGFuZCB3cml0 ZSB0aGUgZmlsZQorKyAqIGhlYWRlci4gV2hldGhlciBhbnl0aGluZyBhY3R1YWxseSBpcyB3cml0 dGVuIHRvIHRoZSBJTyBjb250ZXh0IGF0IHRoaXMgc3RlcAorKyAqIGRlcGVuZHMgb24gdGhlIG11 eGVyLCBidXQgdGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyBiZSBjYWxsZWQuIEFueSBtdXhlcgor KyAqIHByaXZhdGUgb3B0aW9ucyBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgb3B0aW9ucyBwYXJhbWV0 ZXIgdG8gdGhpcyBmdW5jdGlvbi4KKysgKgorKyAqIFRoZSBkYXRhIGlzIHRoZW4gc2VudCB0byB0 aGUgbXV4ZXIgYnkgcmVwZWF0ZWRseSBjYWxsaW5nIGF2X3dyaXRlX2ZyYW1lKCkgb3IKKysgKiBh dl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSgpIChjb25zdWx0IHRob3NlIGZ1bmN0aW9ucycgZG9j dW1lbnRhdGlvbiBmb3IKKysgKiBkaXNjdXNzaW9uIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g dGhlbTsgb25seSBvbmUgb2YgdGhlbSBtYXkgYmUgdXNlZCB3aXRoCisrICogYSBzaW5nbGUgbXV4 aW5nIGNvbnRleHQsIHRoZXkgc2hvdWxkIG5vdCBiZSBtaXhlZCkuIERvIG5vdGUgdGhhdCB0aGUg dGltaW5nCisrICogaW5mb3JtYXRpb24gb24gdGhlIHBhY2tldHMgc2VudCB0byB0aGUgbXV4ZXIg bXVzdCBiZSBpbiB0aGUgY29ycmVzcG9uZGluZworKyAqIEFWU3RyZWFtJ3MgdGltZWJhc2UuIFRo YXQgdGltZWJhc2UgaXMgc2V0IGJ5IHRoZSBtdXhlciAoaW4gdGhlCisrICogYXZmb3JtYXRfd3Jp dGVfaGVhZGVyKCkgc3RlcCkgYW5kIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGltZWJhc2UK KysgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4KKysgKgorKyAqIE9uY2UgYWxsIHRoZSBkYXRh IGhhcyBiZWVuIHdyaXR0ZW4sIHRoZSBjYWxsZXIgbXVzdCBjYWxsIGF2X3dyaXRlX3RyYWlsZXIo KQorKyAqIHRvIGZsdXNoIGFueSBidWZmZXJlZCBwYWNrZXRzIGFuZCBmaW5hbGl6ZSB0aGUgb3V0 cHV0IGZpbGUsIHRoZW4gY2xvc2UgdGhlIElPCisrICogY29udGV4dCAoaWYgYW55KSBhbmQgZmlu YWxseSBmcmVlIHRoZSBtdXhpbmcgY29udGV4dCB3aXRoCisrICogYXZmb3JtYXRfZnJlZV9jb250 ZXh0KCkuCisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZmX2lvIEkvTyBSZWFkL1dyaXRl CisrICogQHsKKysgKiBAc2VjdGlvbiBsYXZmX2lvX2Rpcmxpc3QgRGlyZWN0b3J5IGxpc3RpbmcK KysgKiBUaGUgZGlyZWN0b3J5IGxpc3RpbmcgQVBJIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxpc3Qg ZmlsZXMgb24gcmVtb3RlIHNlcnZlcnMuCisrICoKKysgKiBTb21lIG9mIHBvc3NpYmxlIHVzZSBj YXNlczoKKysgKiAtIGFuICJvcGVuIGZpbGUiIGRpYWxvZyB0byBjaG9vc2UgZmlsZXMgZnJvbSBh IHJlbW90ZSBsb2NhdGlvbiwKKysgKiAtIGEgcmVjdXJzaXZlIG1lZGlhIGZpbmRlciBwcm92aWRp bmcgYSBwbGF5ZXIgd2l0aCBhbiBhYmlsaXR5IHRvIHBsYXkgYWxsCisrICogZmlsZXMgZnJvbSBh IGdpdmVuIGRpcmVjdG9yeS4KKysgKgorKyAqIEBzdWJzZWN0aW9uIGxhdmZfaW9fZGlybGlzdF9v cGVuIE9wZW5pbmcgYSBkaXJlY3RvcnkKKysgKiBBdCBmaXJzdCwgYSBkaXJlY3RvcnkgbmVlZHMg dG8gYmUgb3BlbmVkIGJ5IGNhbGxpbmcgYXZpb19vcGVuX2RpcigpCisrICogc3VwcGxpZWQgd2l0 aCBhIFVSTCBhbmQsIG9wdGlvbmFsbHksIDo6QVZEaWN0aW9uYXJ5IGNvbnRhaW5pbmcKKysgKiBw cm90b2NvbC1zcGVjaWZpYyBwYXJhbWV0ZXJzLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIG9y IHBvc2l0aXZlCisrICogaW50ZWdlciBhbmQgYWxsb2NhdGVzIEFWSU9EaXJDb250ZXh0IG9uIHN1 Y2Nlc3MuCisrICoKKysgKiBAY29kZQorKyAqIEFWSU9EaXJDb250ZXh0ICpjdHggPSBOVUxMOwor KyAqIGlmIChhdmlvX29wZW5fZGlyKCZjdHgsICJzbWI6Ly9leGFtcGxlLmNvbS9zb21lX2RpciIs IE5VTEwpIDwgMCkgeworKyAqICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBvcGVuIGRpcmVj dG9yeS5cbiIpOworKyAqICAgICBhYm9ydCgpOworKyAqIH0KKysgKiBAZW5kY29kZQorKyAqCisr ICogVGhpcyBjb2RlIHRyaWVzIHRvIG9wZW4gYSBzYW1wbGUgZGlyZWN0b3J5IHVzaW5nIHNtYiBw cm90b2NvbCB3aXRob3V0CisrICogYW55IGFkZGl0aW9uYWwgcGFyYW1ldGVycy4KKysgKgorKyAq IEBzdWJzZWN0aW9uIGxhdmZfaW9fZGlybGlzdF9yZWFkIFJlYWRpbmcgZW50cmllcworKyAqIEVh Y2ggZGlyZWN0b3J5J3MgZW50cnkgKGkuZS4gZmlsZSwgYW5vdGhlciBkaXJlY3RvcnksIGFueXRo aW5nIGVsc2UKKysgKiB3aXRoaW4gOjpBVklPRGlyRW50cnlUeXBlKSBpcyByZXByZXNlbnRlZCBi eSBBVklPRGlyRW50cnkuCisrICogUmVhZGluZyBjb25zZWN1dGl2ZSBlbnRyaWVzIGZyb20gYW4g b3BlbmVkIEFWSU9EaXJDb250ZXh0IGlzIGRvbmUgYnkKKysgKiByZXBlYXRlZGx5IGNhbGxpbmcg YXZpb19yZWFkX2RpcigpIG9uIGl0LiBFYWNoIGNhbGwgcmV0dXJucyB6ZXJvIG9yCisrICogcG9z aXRpdmUgaW50ZWdlciBpZiBzdWNjZXNzZnVsLiBSZWFkaW5nIGNhbiBiZSBzdG9wcGVkIHJpZ2h0 IGFmdGVyIHRoZQorKyAqIE5VTEwgZW50cnkgaGFzIGJlZW4gcmVhZCAtLSBpdCBtZWFucyB0aGVy ZSBhcmUgbm8gZW50cmllcyBsZWZ0IHRvIGJlCisrICogcmVhZC4gVGhlIGZvbGxvd2luZyBjb2Rl IHJlYWRzIGFsbCBlbnRyaWVzIGZyb20gYSBkaXJlY3RvcnkgYXNzb2NpYXRlZAorKyAqIHdpdGgg Y3R4IGFuZCBwcmludHMgdGhlaXIgbmFtZXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorKyAqIEBjb2Rl CisrICogQVZJT0RpckVudHJ5ICplbnRyeSA9IE5VTEw7CisrICogZm9yICg7OykgeworKyAqICAg ICBpZiAoYXZpb19yZWFkX2RpcihjdHgsICZlbnRyeSkgPCAwKSB7CisrICogICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkNhbm5vdCBsaXN0IGRpcmVjdG9yeS5cbiIpOworKyAqICAgICAgICAgYWJv cnQoKTsKKysgKiAgICAgfQorKyAqICAgICBpZiAoIWVudHJ5KQorKyAqICAgICAgICAgYnJlYWs7 CisrICogICAgIHByaW50ZigiJXNcbiIsIGVudHJ5LT5uYW1lKTsKKysgKiAgICAgYXZpb19mcmVl X2RpcmVjdG9yeV9lbnRyeSgmZW50cnkpOworKyAqIH0KKysgKiBAZW5kY29kZQorKyAqIEB9Cisr ICoKKysgKiBAZGVmZ3JvdXAgbGF2Zl9jb2RlYyBEZW11eGVycworKyAqIEB7CisrICogQGRlZmdy b3VwIGxhdmZfY29kZWNfbmF0aXZlIE5hdGl2ZSBEZW11eGVycworKyAqIEB7CisrICogQH0KKysg KiBAZGVmZ3JvdXAgbGF2Zl9jb2RlY193cmFwcGVycyBFeHRlcm5hbCBsaWJyYXJ5IHdyYXBwZXJz CisrICogQHsKKysgKiBAfQorKyAqIEB9CisrICogQGRlZmdyb3VwIGxhdmZfcHJvdG9zIEkvTyBQ cm90b2NvbHMKKysgKiBAeworKyAqIEB9CisrICogQGRlZmdyb3VwIGxhdmZfaW50ZXJuYWwgSW50 ZXJuYWwKKysgKiBAeworKyAqIEB9CisrICogQH0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8u aD4gIC8qIEZJTEUgKi8KKysKKysjaW5jbHVkZSAibGliYXZjb2RlYy9jb2RlY19wYXIuaCIKKysj aW5jbHVkZSAibGliYXZjb2RlYy9kZWZzLmgiCisrI2luY2x1ZGUgImxpYmF2Y29kZWMvcGFja2V0 LmgiCisrCisrI2luY2x1ZGUgImxpYmF2dXRpbC9kaWN0LmgiCisrI2luY2x1ZGUgImxpYmF2dXRp bC9sb2cuaCIKKysKKysjaW5jbHVkZSAiYXZpby5oIgorKyNpbmNsdWRlICJsaWJhdmZvcm1hdC92 ZXJzaW9uX21ham9yLmgiCisrI2lmbmRlZiBIQVZFX0FWX0NPTkZJR19ICisrLyogV2hlbiBpbmNs dWRlZCBhcyBwYXJ0IG9mIHRoZSBmZm1wZWcgYnVpbGQsIG9ubHkgaW5jbHVkZSB0aGUgbWFqb3Ig dmVyc2lvbgorKyAqIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlYnVpbGRzLiBXaGVuIGluY2x1ZGVk IGV4dGVybmFsbHksIGtlZXAgaW5jbHVkaW5nCisrICogdGhlIGZ1bGwgdmVyc2lvbiBpbmZvcm1h dGlvbi4gKi8KKysjaW5jbHVkZSAibGliYXZmb3JtYXQvdmVyc2lvbi5oIgorKworKyNpbmNsdWRl ICJsaWJhdnV0aWwvZnJhbWUuaCIKKysjaW5jbHVkZSAibGliYXZjb2RlYy9jb2RlYy5oIgorKyNl bmRpZgorKworK3N0cnVjdCBBVkZvcm1hdENvbnRleHQ7Cisrc3RydWN0IEFWRnJhbWU7CisrCisr LyoqCisrICogQGRlZmdyb3VwIG1ldGFkYXRhX2FwaSBQdWJsaWMgTWV0YWRhdGEgQVBJCisrICog QHsKKysgKiBAaW5ncm91cCBsaWJhdmYKKysgKiBUaGUgbWV0YWRhdGEgQVBJIGFsbG93cyBsaWJh dmZvcm1hdCB0byBleHBvcnQgbWV0YWRhdGEgdGFncyB0byBhIGNsaWVudAorKyAqIGFwcGxpY2F0 aW9uIHdoZW4gZGVtdXhpbmcuIENvbnZlcnNlbHkgaXQgYWxsb3dzIGEgY2xpZW50IGFwcGxpY2F0 aW9uIHRvCisrICogc2V0IG1ldGFkYXRhIHdoZW4gbXV4aW5nLgorKyAqCisrICogTWV0YWRhdGEg aXMgZXhwb3J0ZWQgb3Igc2V0IGFzIHBhaXJzIG9mIGtleS92YWx1ZSBzdHJpbmdzIGluIHRoZSAn bWV0YWRhdGEnCisrICogZmllbGRzIG9mIHRoZSBBVkZvcm1hdENvbnRleHQsIEFWU3RyZWFtLCBB VkNoYXB0ZXIgYW5kIEFWUHJvZ3JhbSBzdHJ1Y3RzCisrICogdXNpbmcgdGhlIEByZWYgbGF2dV9k aWN0ICJBVkRpY3Rpb25hcnkiIEFQSS4gTGlrZSBhbGwgc3RyaW5ncyBpbiBGRm1wZWcsCisrICog bWV0YWRhdGEgaXMgYXNzdW1lZCB0byBiZSBVVEYtOCBlbmNvZGVkIFVuaWNvZGUuIE5vdGUgdGhh dCBtZXRhZGF0YQorKyAqIGV4cG9ydGVkIGJ5IGRlbXV4ZXJzIGlzbid0IGNoZWNrZWQgdG8gYmUg dmFsaWQgVVRGLTggaW4gbW9zdCBjYXNlcy4KKysgKgorKyAqIEltcG9ydGFudCBjb25jZXB0cyB0 byBrZWVwIGluIG1pbmQ6CisrICogLSAgS2V5cyBhcmUgdW5pcXVlOyB0aGVyZSBjYW4gbmV2ZXIg YmUgMiB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBUaGlzIGlzCisrICogICAgYWxzbyBtZWFudCBz ZW1hbnRpY2FsbHksIGkuZS4sIGEgZGVtdXhlciBzaG91bGQgbm90IGtub3dpbmdseSBwcm9kdWNl CisrICogICAgc2V2ZXJhbCBrZXlzIHRoYXQgYXJlIGxpdGVyYWxseSBkaWZmZXJlbnQgYnV0IHNl bWFudGljYWxseSBpZGVudGljYWwuCisrICogICAgRS5nLiwga2V5PUF1dGhvcjUsIGtleT1BdXRo b3I2LiBJbiB0aGlzIGV4YW1wbGUsIGFsbCBhdXRob3JzIG11c3QgYmUKKysgKiAgICBwbGFjZWQg aW4gdGhlIHNhbWUgdGFnLgorKyAqIC0gIE1ldGFkYXRhIGlzIGZsYXQsIG5vdCBoaWVyYXJjaGlj YWw7IHRoZXJlIGFyZSBubyBzdWJ0YWdzLiBJZiB5b3UKKysgKiAgICB3YW50IHRvIHN0b3JlLCBl LmcuLCB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY2hpbGQgb2YgcHJvZHVjZXIgQWxpY2UKKysg KiAgICBhbmQgYWN0b3IgQm9iLCB0aGF0IGNvdWxkIGhhdmUga2V5PWFsaWNlX2FuZF9ib2JzX2No aWxkc19lbWFpbF9hZGRyZXNzLgorKyAqIC0gIFNldmVyYWwgbW9kaWZpZXJzIGNhbiBiZSBhcHBs aWVkIHRvIHRoZSB0YWcgbmFtZS4gVGhpcyBpcyBkb25lIGJ5CisrICogICAgYXBwZW5kaW5nIGEg ZGFzaCBjaGFyYWN0ZXIgKCctJykgYW5kIHRoZSBtb2RpZmllciBuYW1lIGluIHRoZSBvcmRlcgor KyAqICAgIHRoZXkgYXBwZWFyIGluIHRoZSBsaXN0IGJlbG93IC0tIGUuZy4gZm9vLWVuZy1zb3J0 LCBub3QgZm9vLXNvcnQtZW5nLgorKyAqICAgIC0gIGxhbmd1YWdlIC0tIGEgdGFnIHdob3NlIHZh bHVlIGlzIGxvY2FsaXplZCBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlCisrICogICAgICAgaXMg YXBwZW5kZWQgd2l0aCB0aGUgSVNPIDYzOS0yL0IgMy1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS4KKysg KiAgICAgICBGb3IgZXhhbXBsZTogQXV0aG9yLWdlcj1NaWNoYWVsLCBBdXRob3ItZW5nPU1pa2UK KysgKiAgICAgICBUaGUgb3JpZ2luYWwvZGVmYXVsdCBsYW5ndWFnZSBpcyBpbiB0aGUgdW5xdWFs aWZpZWQgIkF1dGhvciIgdGFnLgorKyAqICAgICAgIEEgZGVtdXhlciBzaG91bGQgc2V0IGEgZGVm YXVsdCBpZiBpdCBzZXRzIGFueSB0cmFuc2xhdGVkIHRhZy4KKysgKiAgICAtICBzb3J0aW5nICAt LSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSB0YWcgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IKKysg KiAgICAgICBzb3J0aW5nIHdpbGwgaGF2ZSAnLXNvcnQnIGFwcGVuZGVkLiBFLmcuIGFydGlzdD0i VGhlIEJlYXRsZXMiLAorKyAqICAgICAgIGFydGlzdC1zb3J0PSJCZWF0bGVzLCBUaGUiLgorKyAq IC0gU29tZSBwcm90b2NvbHMgYW5kIGRlbXV4ZXJzIHN1cHBvcnQgbWV0YWRhdGEgdXBkYXRlcy4g QWZ0ZXIgYSBzdWNjZXNzZnVsCisrICogICBjYWxsIHRvIGF2X3JlYWRfZnJhbWUoKSwgQVZGb3Jt YXRDb250ZXh0LmV2ZW50X2ZsYWdzIG9yIEFWU3RyZWFtLmV2ZW50X2ZsYWdzCisrICogICB3aWxs IGJlIHVwZGF0ZWQgdG8gaW5kaWNhdGUgaWYgbWV0YWRhdGEgY2hhbmdlZC4gSW4gb3JkZXIgdG8g ZGV0ZWN0IG1ldGFkYXRhCisrICogICBjaGFuZ2VzIG9uIGEgc3RyZWFtLCB5b3UgbmVlZCB0byBs b29wIHRocm91Z2ggYWxsIHN0cmVhbXMgaW4gdGhlIEFWRm9ybWF0Q29udGV4dAorKyAqICAgYW5k IGNoZWNrIHRoZWlyIGluZGl2aWR1YWwgZXZlbnRfZmxhZ3MuCisrICoKKysgKiAtICBEZW11eGVy cyBhdHRlbXB0IHRvIGV4cG9ydCBtZXRhZGF0YSBpbiBhIGdlbmVyaWMgZm9ybWF0LCBob3dldmVy IHRhZ3MKKysgKiAgICB3aXRoIG5vIGdlbmVyaWMgZXF1aXZhbGVudHMgYXJlIGxlZnQgYXMgdGhl eSBhcmUgc3RvcmVkIGluIHRoZSBjb250YWluZXIuCisrICogICAgRm9sbG93cyBhIGxpc3Qgb2Yg Z2VuZXJpYyB0YWcgbmFtZXM6CisrICoKKysgQHZlcmJhdGltCisrIGFsYnVtICAgICAgICAtLSBu YW1lIG9mIHRoZSBzZXQgdGhpcyB3b3JrIGJlbG9uZ3MgdG8KKysgYWxidW1fYXJ0aXN0IC0tIG1h aW4gY3JlYXRvciBvZiB0aGUgc2V0L2FsYnVtLCBpZiBkaWZmZXJlbnQgZnJvbSBhcnRpc3QuCisr ICAgICAgICAgICAgICAgICBlLmcuICJWYXJpb3VzIEFydGlzdHMiIGZvciBjb21waWxhdGlvbiBh bGJ1bXMuCisrIGFydGlzdCAgICAgICAtLSBtYWluIGNyZWF0b3Igb2YgdGhlIHdvcmsKKysgY29t bWVudCAgICAgIC0tIGFueSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlLgorKyBj b21wb3NlciAgICAgLS0gd2hvIGNvbXBvc2VkIHRoZSB3b3JrLCBpZiBkaWZmZXJlbnQgZnJvbSBh cnRpc3QuCisrIGNvcHlyaWdodCAgICAtLSBuYW1lIG9mIGNvcHlyaWdodCBob2xkZXIuCisrIGNy ZWF0aW9uX3RpbWUtLSBkYXRlIHdoZW4gdGhlIGZpbGUgd2FzIGNyZWF0ZWQsIHByZWZlcmFibHkg aW4gSVNPIDg2MDEuCisrIGRhdGUgICAgICAgICAtLSBkYXRlIHdoZW4gdGhlIHdvcmsgd2FzIGNy ZWF0ZWQsIHByZWZlcmFibHkgaW4gSVNPIDg2MDEuCisrIGRpc2MgICAgICAgICAtLSBudW1iZXIg b2YgYSBzdWJzZXQsIGUuZy4gZGlzYyBpbiBhIG11bHRpLWRpc2MgY29sbGVjdGlvbi4KKysgZGlz Y19zdWJ0aXRsZS0tIHRpdGxlIG9mIGEgc3Vic2V0LCBlLmcuIGRpc2Mgc3VidGl0bGUgaW4gYSBt dWx0aS1kaXNjIGNvbGxlY3Rpb24uCisrIGVuY29kZXIgICAgICAtLSBuYW1lL3NldHRpbmdzIG9m IHRoZSBzb2Z0d2FyZS9oYXJkd2FyZSB0aGF0IHByb2R1Y2VkIHRoZSBmaWxlLgorKyBlbmNvZGVk X2J5ICAgLS0gcGVyc29uL2dyb3VwIHdobyBjcmVhdGVkIHRoZSBmaWxlLgorKyBmaWxlbmFtZSAg ICAgLS0gb3JpZ2luYWwgbmFtZSBvZiB0aGUgZmlsZS4KKysgZ2VucmUgICAgICAgIC0tIDxzZWxm LWV2aWRlbnQ+LgorKyBsYW5ndWFnZSAgICAgLS0gbWFpbiBsYW5ndWFnZSBpbiB3aGljaCB0aGUg d29yayBpcyBwZXJmb3JtZWQsIHByZWZlcmFibHkKKysgICAgICAgICAgICAgICAgIGluIElTTyA2 MzktMiBmb3JtYXQuIE11bHRpcGxlIGxhbmd1YWdlcyBjYW4gYmUgc3BlY2lmaWVkIGJ5CisrICAg ICAgICAgICAgICAgICBzZXBhcmF0aW5nIHRoZW0gd2l0aCBjb21tYXMuCisrIHBlcmZvcm1lciAg ICAtLSBhcnRpc3Qgd2hvIHBlcmZvcm1lZCB0aGUgd29yaywgaWYgZGlmZmVyZW50IGZyb20gYXJ0 aXN0LgorKyAgICAgICAgICAgICAgICAgRS5nIGZvciAiQWxzbyBzcHJhY2ggWmFyYXRodXN0cmEi LCBhcnRpc3Qgd291bGQgYmUgIlJpY2hhcmQKKysgICAgICAgICAgICAgICAgIFN0cmF1c3MiIGFu ZCBwZXJmb3JtZXIgIkxvbmRvbiBQaGlsaGFybW9uaWMgT3JjaGVzdHJhIi4KKysgcHVibGlzaGVy ICAgIC0tIG5hbWUgb2YgdGhlIGxhYmVsL3B1Ymxpc2hlci4KKysgc2VydmljZV9uYW1lICAgICAt LSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGluIGJyb2FkY2FzdGluZyAoY2hhbm5lbCBuYW1lKS4KKysg c2VydmljZV9wcm92aWRlciAtLSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGluIGJyb2Fk Y2FzdGluZy4KKysgdGl0bGUgICAgICAgIC0tIG5hbWUgb2YgdGhlIHdvcmsuCisrIHRyYWNrICAg ICAgICAtLSBudW1iZXIgb2YgdGhpcyB3b3JrIGluIHRoZSBzZXQsIGNhbiBiZSBpbiBmb3JtIGN1 cnJlbnQvdG90YWwuCisrIHZhcmlhbnRfYml0cmF0ZSAtLSB0aGUgdG90YWwgYml0cmF0ZSBvZiB0 aGUgYml0cmF0ZSB2YXJpYW50IHRoYXQgdGhlIGN1cnJlbnQgc3RyZWFtIGlzIHBhcnQgb2YKKysg QGVuZHZlcmJhdGltCisrICoKKysgKiBMb29rIGluIHRoZSBleGFtcGxlcyBzZWN0aW9uIGZvciBh biBhcHBsaWNhdGlvbiBleGFtcGxlIGhvdyB0byB1c2UgdGhlIE1ldGFkYXRhIEFQSS4KKysgKgor KyAqIEB9CisrICovCisrCisrLyogcGFja2V0IGZ1bmN0aW9ucyAqLworKworKworKy8qKgorKyAq IEFsbG9jYXRlIGFuZCByZWFkIHRoZSBwYXlsb2FkIG9mIGEgcGFja2V0IGFuZCBpbml0aWFsaXpl IGl0cworKyAqIGZpZWxkcyB3aXRoIGRlZmF1bHQgdmFsdWVzLgorKyAqCisrICogQHBhcmFtIHMg ICAgYXNzb2NpYXRlZCBJTyBjb250ZXh0CisrICogQHBhcmFtIHBrdCBwYWNrZXQKKysgKiBAcGFy YW0gc2l6ZSBkZXNpcmVkIHBheWxvYWQgc2l6ZQorKyAqIEByZXR1cm4gPjAgKHJlYWQgc2l6ZSkg aWYgT0ssIEFWRVJST1JfeHh4IG90aGVyd2lzZQorKyAqLworK2ludCBhdl9nZXRfcGFja2V0KEFW SU9Db250ZXh0ICpzLCBBVlBhY2tldCAqcGt0LCBpbnQgc2l6ZSk7CisrCisrCisrLyoqCisrICog UmVhZCBkYXRhIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgQVZQ YWNrZXQuCisrICogSWYgcGt0LT5zaXplIGlzIDAgdGhpcyBpcyBpZGVudGljYWwgdG8gYXZfZ2V0 X3BhY2tldC4KKysgKiBOb3RlIHRoYXQgdGhpcyB1c2VzIGF2X2dyb3dfcGFja2V0IGFuZCB0aHVz IGludm9sdmVzIGEgcmVhbGxvYworKyAqIHdoaWNoIGlzIGluZWZmaWNpZW50LiBUaHVzIHRoaXMg ZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZAorKyAqIHdoZW4gdGhlcmUgaXMgbm8gcmVhc29u YWJsZSB3YXkgdG8ga25vdyAoYW4gdXBwZXIgYm91bmQgb2YpCisrICogdGhlIGZpbmFsIHNpemUu CisrICoKKysgKiBAcGFyYW0gcyAgICBhc3NvY2lhdGVkIElPIGNvbnRleHQKKysgKiBAcGFyYW0g cGt0IHBhY2tldAorKyAqIEBwYXJhbSBzaXplIGFtb3VudCBvZiBkYXRhIHRvIHJlYWQKKysgKiBA cmV0dXJuID4wIChyZWFkIHNpemUpIGlmIE9LLCBBVkVSUk9SX3h4eCBvdGhlcndpc2UsIHByZXZp b3VzIGRhdGEKKysgKiAgICAgICAgIHdpbGwgbm90IGJlIGxvc3QgZXZlbiBpZiBhbiBlcnJvciBv Y2N1cnMuCisrICovCisraW50IGF2X2FwcGVuZF9wYWNrZXQoQVZJT0NvbnRleHQgKnMsIEFWUGFj a2V0ICpwa3QsIGludCBzaXplKTsKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysvKiBpbnB1dC9vdXRwdXQgZm9ybWF0cyAqLworKworK3N0 cnVjdCBBVkNvZGVjVGFnOworKworKy8qKgorKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRo ZSBkYXRhIGEgZm9ybWF0IGhhcyB0byBwcm9iZSBhIGZpbGUuCisrICovCisrdHlwZWRlZiBzdHJ1 Y3QgQVZQcm9iZURhdGEgeworKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKysgICAgdW5zaWdu ZWQgY2hhciAqYnVmOyAvKio8IEJ1ZmZlciBtdXN0IGhhdmUgQVZQUk9CRV9QQURESU5HX1NJWkUg b2YgZXh0cmEgYWxsb2NhdGVkIGJ5dGVzIGZpbGxlZCB3aXRoIHplcm8uICovCisrICAgIGludCBi dWZfc2l6ZTsgICAgICAgLyoqPCBTaXplIG9mIGJ1ZiBleGNlcHQgZXh0cmEgYWxsb2NhdGVkIGJ5 dGVzICovCisrICAgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsgLyoqPCBtaW1lX3R5cGUsIHdoZW4g a25vd24uICovCisrfSBBVlByb2JlRGF0YTsKKysKKysjZGVmaW5lIEFWUFJPQkVfU0NPUkVfUkVU UlkgKEFWUFJPQkVfU0NPUkVfTUFYLzQpCisrI2RlZmluZSBBVlBST0JFX1NDT1JFX1NUUkVBTV9S RVRSWSAoQVZQUk9CRV9TQ09SRV9NQVgvNC0xKQorKworKyNkZWZpbmUgQVZQUk9CRV9TQ09SRV9F WFRFTlNJT04gIDUwIC8vLzwgc2NvcmUgZm9yIGZpbGUgZXh0ZW5zaW9uCisrI2RlZmluZSBBVlBS T0JFX1NDT1JFX01JTUVfQk9OVVMgMzAgLy8vPCBzY29yZSBhZGRlZCBmb3IgbWF0Y2hpbmcgbWlt ZSB0eXBlCisrI2RlZmluZSBBVlBST0JFX1NDT1JFX01BWCAgICAgICAxMDAgLy8vPCBtYXhpbXVt IHNjb3JlCisrCisrI2RlZmluZSBBVlBST0JFX1BBRERJTkdfU0laRSAzMiAgICAgICAgICAgICAv Ly88IGV4dHJhIGFsbG9jYXRlZCBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBwcm9iZSBidWZmZXIK KysKKysvLy8gRGVtdXhlciB3aWxsIHVzZSBhdmlvX29wZW4sIG5vIG9wZW5lZCBmaWxlIHNob3Vs ZCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorKyNkZWZpbmUgQVZGTVRfTk9GSUxFICAgICAg ICAweDAwMDEKKysjZGVmaW5lIEFWRk1UX05FRUROVU1CRVIgICAgMHgwMDAyIC8qKjwgTmVlZHMg JyVkJyBpbiBmaWxlbmFtZS4gKi8KKysvKioKKysgKiBUaGUgbXV4ZXIvZGVtdXhlciBpcyBleHBl cmltZW50YWwgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4KKysgKgorKyAqIEl0IHdp bGwgbm90IGJlIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHksIGFuZCBtdXN0IGJlIHNwZWNpZmllZCBl eHBsaWNpdGx5LgorKyAqLworKyNkZWZpbmUgQVZGTVRfRVhQRVJJTUVOVEFMICAweDAwMDQKKysj ZGVmaW5lIEFWRk1UX1NIT1dfSURTICAgICAgMHgwMDA4IC8qKjwgU2hvdyBmb3JtYXQgc3RyZWFt IElEcyBudW1iZXJzLiAqLworKyNkZWZpbmUgQVZGTVRfR0xPQkFMSEVBREVSICAweDAwNDAgLyoq PCBGb3JtYXQgd2FudHMgZ2xvYmFsIGhlYWRlci4gKi8KKysjZGVmaW5lIEFWRk1UX05PVElNRVNU QU1QUyAgMHgwMDgwIC8qKjwgRm9ybWF0IGRvZXMgbm90IG5lZWQgLyBoYXZlIGFueSB0aW1lc3Rh bXBzLiAqLworKyNkZWZpbmUgQVZGTVRfR0VORVJJQ19JTkRFWCAweDAxMDAgLyoqPCBVc2UgZ2Vu ZXJpYyBpbmRleCBidWlsZGluZyBjb2RlLiAqLworKyNkZWZpbmUgQVZGTVRfVFNfRElTQ09OVCAg ICAweDAyMDAgLyoqPCBGb3JtYXQgYWxsb3dzIHRpbWVzdGFtcCBkaXNjb250aW51aXRpZXMuIE5v dGUsIG11eGVycyBhbHdheXMgcmVxdWlyZSB2YWxpZCAobW9ub3RvbmUpIHRpbWVzdGFtcHMgKi8K KysjZGVmaW5lIEFWRk1UX1ZBUklBQkxFX0ZQUyAgMHgwNDAwIC8qKjwgRm9ybWF0IGFsbG93cyB2 YXJpYWJsZSBmcHMuICovCisrI2RlZmluZSBBVkZNVF9OT0RJTUVOU0lPTlMgIDB4MDgwMCAvKio8 IEZvcm1hdCBkb2VzIG5vdCBuZWVkIHdpZHRoL2hlaWdodCAqLworKyNkZWZpbmUgQVZGTVRfTk9T VFJFQU1TICAgICAweDEwMDAgLyoqPCBGb3JtYXQgZG9lcyBub3QgcmVxdWlyZSBhbnkgc3RyZWFt cyAqLworKyNkZWZpbmUgQVZGTVRfTk9CSU5TRUFSQ0ggICAweDIwMDAgLyoqPCBGb3JtYXQgZG9l cyBub3QgYWxsb3cgdG8gZmFsbCBiYWNrIG9uIGJpbmFyeSBzZWFyY2ggdmlhIHJlYWRfdGltZXN0 YW1wICovCisrI2RlZmluZSBBVkZNVF9OT0dFTlNFQVJDSCAgIDB4NDAwMCAvKio8IEZvcm1hdCBk b2VzIG5vdCBhbGxvdyB0byBmYWxsIGJhY2sgb24gZ2VuZXJpYyBzZWFyY2ggKi8KKysjZGVmaW5l IEFWRk1UX05PX0JZVEVfU0VFSyAgMHg4MDAwIC8qKjwgRm9ybWF0IGRvZXMgbm90IGFsbG93IHNl ZWtpbmcgYnkgYnl0ZXMgKi8KKysjZGVmaW5lIEFWRk1UX1RTX05PTlNUUklDVCAweDIwMDAwIC8q KjwgRm9ybWF0IGRvZXMgbm90IHJlcXVpcmUgc3RyaWN0bHkKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZyB0aW1lc3RhbXBzLCBidXQgdGhleSBtdXN0 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGJlIG1vbm90 b25pYyAqLworKyNkZWZpbmUgQVZGTVRfVFNfTkVHQVRJVkUgIDB4NDAwMDAgLyoqPCBGb3JtYXQg YWxsb3dzIG11eGluZyBuZWdhdGl2ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aW1lc3RhbXBzLiBJZiBub3Qgc2V0IHRoZSB0aW1lc3RhbXAKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzaGlmdGVkIGluIGF2X3dyaXRl X2ZyYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9p bnRlcmxlYXZlZF93cml0ZV9mcmFtZSBzbyB0aGV5CisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXJ0IGZyb20gMC4KKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVGhlIHVzZXIgb3IgbXV4ZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3Vn aAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZvcm1hdENvbnRl eHQuYXZvaWRfbmVnYXRpdmVfdHMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KKysjZGVmaW5lIEFWRk1UX0ZJWEVEX0ZSQU1FU0laRSAweDgwMDAwIC8qKjwgRm9y bWF0IHdhbnRzIEByZWYgQVZDb2RlY1BhcmFtZXRlcnMuZnJhbWVfc2l6ZSAiZml4ZWQgc2l6ZSBh dWRpbyBmcmFtZXMuIiAqLworKworKyNkZWZpbmUgQVZGTVRfU0VFS19UT19QVFMgICAweDQwMDAw MDAgLyoqPCBTZWVraW5nIGlzIGJhc2VkIG9uIFBUUyAqLworKworKy8qKgorKyAqIEBhZGR0b2dy b3VwIGxhdmZfZW5jb2RpbmcKKysgKiBAeworKyAqLworK3R5cGVkZWYgc3RydWN0IEFWT3V0cHV0 Rm9ybWF0IHsKKysgICAgY29uc3QgY2hhciAqbmFtZTsKKysgICAgLyoqCisrICAgICAqIERlc2Ny aXB0aXZlIG5hbWUgZm9yIHRoZSBmb3JtYXQsIG1lYW50IHRvIGJlIG1vcmUgaHVtYW4tcmVhZGFi bGUKKysgICAgICogdGhhbiBuYW1lLiBZb3Ugc2hvdWxkIHVzZSB0aGUgTlVMTF9JRl9DT05GSUdf U01BTEwoKSBtYWNybworKyAgICAgKiB0byBkZWZpbmUgaXQuCisrICAgICAqLworKyAgICBjb25z dCBjaGFyICpsb25nX25hbWU7CisrICAgIGNvbnN0IGNoYXIgKm1pbWVfdHlwZTsKKysgICAgY29u c3QgY2hhciAqZXh0ZW5zaW9uczsgLyoqPCBjb21tYS1zZXBhcmF0ZWQgZmlsZW5hbWUgZXh0ZW5z aW9ucyAqLworKyAgICAvKiBvdXRwdXQgc3VwcG9ydCAqLworKyAgICBlbnVtIEFWQ29kZWNJRCBh dWRpb19jb2RlYzsgICAgLyoqPCBkZWZhdWx0IGF1ZGlvIGNvZGVjICovCisrICAgIGVudW0gQVZD b2RlY0lEIHZpZGVvX2NvZGVjOyAgICAvKio8IGRlZmF1bHQgdmlkZW8gY29kZWMgKi8KKysgICAg ZW51bSBBVkNvZGVjSUQgc3VidGl0bGVfY29kZWM7IC8qKjwgZGVmYXVsdCBzdWJ0aXRsZSBjb2Rl YyAqLworKyAgICAvKioKKysgICAgICogY2FuIHVzZSBmbGFnczogQVZGTVRfTk9GSUxFLCBBVkZN VF9ORUVETlVNQkVSLCBBVkZNVF9FWFBFUklNRU5UQUwsCisrICAgICAqIEFWRk1UX0dMT0JBTEhF QURFUiwgQVZGTVRfTk9USU1FU1RBTVBTLCBBVkZNVF9WQVJJQUJMRV9GUFMsCisrICAgICAqIEFW Rk1UX05PRElNRU5TSU9OUywgQVZGTVRfTk9TVFJFQU1TLAorKyAgICAgKiBBVkZNVF9UU19OT05T VFJJQ1QsIEFWRk1UX1RTX05FR0FUSVZFLCBBVkZNVF9GSVhFRF9GUkFNRVNJWkUKKysgICAgICov CisrICAgIGludCBmbGFnczsKKysKKysgICAgLyoqCisrICAgICAqIExpc3Qgb2Ygc3VwcG9ydGVk IGNvZGVjX2lkLWNvZGVjX3RhZyBwYWlycywgb3JkZXJlZCBieSAiYmV0dGVyCisrICAgICAqIGNo b2ljZSBmaXJzdCIuIFRoZSBhcnJheXMgYXJlIGFsbCB0ZXJtaW5hdGVkIGJ5IEFWX0NPREVDX0lE X05PTkUuCisrICAgICAqLworKyAgICBjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqIGNvbnN0ICpj b2RlY190YWc7CisrCisrCisrICAgIGNvbnN0IEFWQ2xhc3MgKnByaXZfY2xhc3M7IC8vLzwgQVZD bGFzcyBmb3IgdGhlIHByaXZhdGUgY29udGV4dAorK30gQVZPdXRwdXRGb3JtYXQ7CisrLyoqCisr ICogQH0KKysgKi8KKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZmX2RlY29kaW5nCisrICog QHsKKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVklucHV0Rm9ybWF0IHsKKysgICAgLyoqCisrICAg ICAqIEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc2hvcnQgbmFtZXMgZm9yIHRoZSBmb3JtYXQu IE5ldyBuYW1lcworKyAgICAgKiBtYXkgYmUgYXBwZW5kZWQgd2l0aCBhIG1pbm9yIGJ1bXAuCisr ICAgICAqLworKyAgICBjb25zdCBjaGFyICpuYW1lOworKworKyAgICAvKioKKysgICAgICogRGVz Y3JpcHRpdmUgbmFtZSBmb3IgdGhlIGZvcm1hdCwgbWVhbnQgdG8gYmUgbW9yZSBodW1hbi1yZWFk YWJsZQorKyAgICAgKiB0aGFuIG5hbWUuIFlvdSBzaG91bGQgdXNlIHRoZSBOVUxMX0lGX0NPTkZJ R19TTUFMTCgpIG1hY3JvCisrICAgICAqIHRvIGRlZmluZSBpdC4KKysgICAgICovCisrICAgIGNv bnN0IGNoYXIgKmxvbmdfbmFtZTsKKysKKysgICAgLyoqCisrICAgICAqIENhbiB1c2UgZmxhZ3M6 IEFWRk1UX05PRklMRSwgQVZGTVRfTkVFRE5VTUJFUiwgQVZGTVRfRVhQRVJJTUVOVEFMLAorKyAg ICAgKiBBVkZNVF9TSE9XX0lEUywgQVZGTVRfTk9USU1FU1RBTVBTLCBBVkZNVF9HRU5FUklDX0lO REVYLAorKyAgICAgKiBBVkZNVF9UU19ESVNDT05ULCBBVkZNVF9OT0JJTlNFQVJDSCwgQVZGTVRf Tk9HRU5TRUFSQ0gsCisrICAgICAqIEFWRk1UX05PX0JZVEVfU0VFSywgQVZGTVRfU0VFS19UT19Q VFMuCisrICAgICAqLworKyAgICBpbnQgZmxhZ3M7CisrCisrICAgIC8qKgorKyAgICAgKiBJZiBl eHRlbnNpb25zIGFyZSBkZWZpbmVkLCB0aGVuIG5vIHByb2JlIGlzIGRvbmUuIFlvdSBzaG91bGQK KysgICAgICogdXN1YWxseSBub3QgdXNlIGV4dGVuc2lvbiBmb3JtYXQgZ3Vlc3NpbmcgYmVjYXVz ZSBpdCBpcyBub3QKKysgICAgICogcmVsaWFibGUgZW5vdWdoCisrICAgICAqLworKyAgICBjb25z dCBjaGFyICpleHRlbnNpb25zOworKworKyAgICBjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqIGNv bnN0ICpjb2RlY190YWc7CisrCisrICAgIGNvbnN0IEFWQ2xhc3MgKnByaXZfY2xhc3M7IC8vLzwg QVZDbGFzcyBmb3IgdGhlIHByaXZhdGUgY29udGV4dAorKworKyAgICAvKioKKysgICAgICogQ29t bWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWltZSB0eXBlcy4KKysgICAgICogSXQgaXMgdXNlZCBjaGVj ayBmb3IgbWF0Y2hpbmcgbWltZSB0eXBlcyB3aGlsZSBwcm9iaW5nLgorKyAgICAgKiBAc2VlIGF2 X3Byb2JlX2lucHV0X2Zvcm1hdDIKKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKm1pbWVfdHlw ZTsKKyt9IEFWSW5wdXRGb3JtYXQ7CisrLyoqCisrICogQH0KKysgKi8KKysKKytlbnVtIEFWU3Ry ZWFtUGFyc2VUeXBlIHsKKysgICAgQVZTVFJFQU1fUEFSU0VfTk9ORSwKKysgICAgQVZTVFJFQU1f UEFSU0VfRlVMTCwgICAgICAgLyoqPCBmdWxsIHBhcnNpbmcgYW5kIHJlcGFjayAqLworKyAgICBB VlNUUkVBTV9QQVJTRV9IRUFERVJTLCAgICAvKio8IE9ubHkgcGFyc2UgaGVhZGVycywgZG8gbm90 IHJlcGFjay4gKi8KKysgICAgQVZTVFJFQU1fUEFSU0VfVElNRVNUQU1QUywgLyoqPCBmdWxsIHBh cnNpbmcgYW5kIGludGVycG9sYXRpb24gb2YgdGltZXN0YW1wcyBmb3IgZnJhbWVzIG5vdCBzdGFy dGluZyBvbiBhIHBhY2tldCBib3VuZGFyeSAqLworKyAgICBBVlNUUkVBTV9QQVJTRV9GVUxMX09O Q0UsICAvKio8IGZ1bGwgcGFyc2luZyBhbmQgcmVwYWNrIG9mIHRoZSBmaXJzdCBmcmFtZSBvbmx5 LCBvbmx5IGltcGxlbWVudGVkIGZvciBILjI2NCBjdXJyZW50bHkgKi8KKysgICAgQVZTVFJFQU1f UEFSU0VfRlVMTF9SQVcsICAgLyoqPCBmdWxsIHBhcnNpbmcgYW5kIHJlcGFjayB3aXRoIHRpbWVz dGFtcCBhbmQgcG9zaXRpb24gZ2VuZXJhdGlvbiBieSBwYXJzZXIgZm9yIHJhdworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYXNzdW1lcyB0aGF0IGVhY2ggcGFja2V0 IGluIHRoZSBmaWxlIGNvbnRhaW5zIG5vIGRlbXV4ZXIgbGV2ZWwgaGVhZGVycyBhbmQKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IGNvZGVjIGxldmVsIGRhdGEsIG90 aGVyd2lzZSBwb3NpdGlvbiBnZW5lcmF0aW9uIHdvdWxkIGZhaWwgKi8KKyt9OworKworK3R5cGVk ZWYgc3RydWN0IEFWSW5kZXhFbnRyeSB7CisrICAgIGludDY0X3QgcG9zOworKyAgICBpbnQ2NF90 IHRpbWVzdGFtcDsgICAgICAgIC8qKjwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBUaW1lc3RhbXAgaW4gQVZTdHJlYW0udGltZV9iYXNlIHVuaXRzLCBwcmVmZXJhYmx5IHRoZSB0 aW1lIGZyb20gd2hpY2ggb24gY29ycmVjdGx5IGRlY29kZWQgZnJhbWVzIGFyZSBhdmFpbGFibGUK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aGVuIHNlZWtpbmcgdG8gdGhpcyBl bnRyeS4gVGhhdCBtZWFucyBwcmVmZXJhYmxlIFBUUyBvbiBrZXlmcmFtZSBiYXNlZCBmb3JtYXRz LgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEJ1dCBkZW11eGVycyBjYW4gY2hv b3NlIHRvIHN0b3JlIGEgZGlmZmVyZW50IHRpbWVzdGFtcCwgaWYgaXQgaXMgbW9yZSBjb252ZW5p ZW50IGZvciB0aGUgaW1wbGVtZW50YXRpb24gb3Igbm90aGluZyBiZXR0ZXIKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpcyBrbm93bgorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworKyNkZWZpbmUgQVZJTkRFWF9LRVlGUkFNRSAweDAwMDEKKysjZGVmaW5lIEFW SU5ERVhfRElTQ0FSRF9GUkFNRSAgMHgwMDAyICAgIC8qKgorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogRmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHdoaWNoIGZy YW1lIHNob3VsZCBiZSBkaXNjYXJkZWQgYWZ0ZXIgZGVjb2RpbmcuCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgaW50IGZsYWdzOjI7CisrICAgIGlu dCBzaXplOjMwOyAvL1llYWgsIHRyeWluZyB0byBrZWVwIHRoZSBzaXplIG9mIHRoaXMgc21hbGwg dG8gcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMgKGl0IGlzIDI0IHZzLiAzMiBieXRlcyBkdWUg dG8gcG9zc2libGUgOC1ieXRlIGFsaWdubWVudCkuCisrICAgIGludCBtaW5fZGlzdGFuY2U7ICAg ICAgICAgLyoqPCBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBhbmQgdGhlIHByZXZpb3Vz IGtleWZyYW1lLCB1c2VkIHRvIGF2b2lkIHVubmVlZGVkIHNlYXJjaGluZy4gKi8KKyt9IEFWSW5k ZXhFbnRyeTsKKysKKysvKioKKysgKiBUaGUgc3RyZWFtIHNob3VsZCBiZSBjaG9zZW4gYnkgZGVm YXVsdCBhbW9uZyBvdGhlciBzdHJlYW1zIG9mIHRoZSBzYW1lIHR5cGUsCisrICogdW5sZXNzIHRo ZSB1c2VyIGhhcyBleHBsaWNpdGx5IHNwZWNpZmllZCBvdGhlcndpc2UuCisrICovCisrI2RlZmlu ZSBBVl9ESVNQT1NJVElPTl9ERUZBVUxUICAgICAgICAgICAgICAoMSA8PCAwKQorKy8qKgorKyAq IFRoZSBzdHJlYW0gaXMgbm90IGluIG9yaWdpbmFsIGxhbmd1YWdlLgorKyAqCisrICogQG5vdGUg QVZfRElTUE9TSVRJT05fT1JJR0lOQUwgaXMgdGhlIGludmVyc2Ugb2YgdGhpcyBkaXNwb3NpdGlv bi4gQXQgbW9zdAorKyAqICAgICAgIG9uZSBvZiB0aGVtIHNob3VsZCBiZSBzZXQgaW4gcHJvcGVy bHkgdGFnZ2VkIHN0cmVhbXMuCisrICogQG5vdGUgVGhpcyBkaXNwb3NpdGlvbiBtYXkgYXBwbHkg dG8gYW55IHN0cmVhbSB0eXBlLCBub3QganVzdCBhdWRpby4KKysgKi8KKysjZGVmaW5lIEFWX0RJ U1BPU0lUSU9OX0RVQiAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisrLyoqCisrICogVGhlIHN0 cmVhbSBpcyBpbiBvcmlnaW5hbCBsYW5ndWFnZS4KKysgKgorKyAqIEBzZWUgdGhlIG5vdGVzIGZv ciBBVl9ESVNQT1NJVElPTl9EVUIKKysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX09SSUdJ TkFMICAgICAgICAgICAgICgxIDw8IDIpCisrLyoqCisrICogVGhlIHN0cmVhbSBpcyBhIGNvbW1l bnRhcnkgdHJhY2suCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9DT01NRU5UICAgICAg ICAgICAgICAoMSA8PCAzKQorKy8qKgorKyAqIFRoZSBzdHJlYW0gY29udGFpbnMgc29uZyBseXJp Y3MuCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9MWVJJQ1MgICAgICAgICAgICAgICAo MSA8PCA0KQorKy8qKgorKyAqIFRoZSBzdHJlYW0gY29udGFpbnMga2FyYW9rZSBhdWRpby4KKysg Ki8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0tBUkFPS0UgICAgICAgICAgICAgICgxIDw8IDUp CisrCisrLyoqCisrICogVHJhY2sgc2hvdWxkIGJlIHVzZWQgZHVyaW5nIHBsYXliYWNrIGJ5IGRl ZmF1bHQuCisrICogVXNlZnVsIGZvciBzdWJ0aXRsZSB0cmFjayB0aGF0IHNob3VsZCBiZSBkaXNw bGF5ZWQKKysgKiBldmVuIHdoZW4gdXNlciBkaWQgbm90IGV4cGxpY2l0bHkgYXNrIGZvciBzdWJ0 aXRsZXMuCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9GT1JDRUQgICAgICAgICAgICAg ICAoMSA8PCA2KQorKy8qKgorKyAqIFRoZSBzdHJlYW0gaXMgaW50ZW5kZWQgZm9yIGhlYXJpbmcg aW1wYWlyZWQgYXVkaWVuY2VzLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fSEVBUklO R19JTVBBSVJFRCAgICAgKDEgPDwgNykKKysvKioKKysgKiBUaGUgc3RyZWFtIGlzIGludGVuZGVk IGZvciB2aXN1YWxseSBpbXBhaXJlZCBhdWRpZW5jZXMuCisrICovCisrI2RlZmluZSBBVl9ESVNQ T1NJVElPTl9WSVNVQUxfSU1QQUlSRUQgICAgICAoMSA8PCA4KQorKy8qKgorKyAqIFRoZSBhdWRp byBzdHJlYW0gY29udGFpbnMgbXVzaWMgYW5kIHNvdW5kIGVmZmVjdHMgd2l0aG91dCB2b2ljZS4K KysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0NMRUFOX0VGRkVDVFMgICAgICAgICgxIDw8 IDkpCisrLyoqCisrICogVGhlIHN0cmVhbSBpcyBzdG9yZWQgaW4gdGhlIGZpbGUgYXMgYW4gYXR0 YWNoZWQgcGljdHVyZS8iY292ZXIgYXJ0IiAoZS5nLgorKyAqIEFQSUMgZnJhbWUgaW4gSUQzdjIp LiBUaGUgZmlyc3QgKHVzdWFsbHkgb25seSkgcGFja2V0IGFzc29jaWF0ZWQgd2l0aCBpdAorKyAq IHdpbGwgYmUgcmV0dXJuZWQgYW1vbmcgdGhlIGZpcnN0IGZldyBwYWNrZXRzIHJlYWQgZnJvbSB0 aGUgZmlsZSB1bmxlc3MKKysgKiBzZWVraW5nIHRha2VzIHBsYWNlLiBJdCBjYW4gYWxzbyBiZSBh Y2Nlc3NlZCBhdCBhbnkgdGltZSBpbgorKyAqIEFWU3RyZWFtLmF0dGFjaGVkX3BpYy4KKysgKi8K KysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0FUVEFDSEVEX1BJQyAgICAgICAgICgxIDw8IDEwKQor Ky8qKgorKyAqIFRoZSBzdHJlYW0gaXMgc3BhcnNlLCBhbmQgY29udGFpbnMgdGh1bWJuYWlsIGlt YWdlcywgb2Z0ZW4gY29ycmVzcG9uZGluZworKyAqIHRvIGNoYXB0ZXIgbWFya2Vycy4gT25seSBl dmVyIHVzZWQgd2l0aCBBVl9ESVNQT1NJVElPTl9BVFRBQ0hFRF9QSUMuCisrICovCisrI2RlZmlu ZSBBVl9ESVNQT1NJVElPTl9USU1FRF9USFVNQk5BSUxTICAgICAoMSA8PCAxMSkKKysKKysvKioK KysgKiBUaGUgc3RyZWFtIGlzIGludGVuZGVkIHRvIGJlIG1peGVkIHdpdGggYSBzcGF0aWFsIGF1 ZGlvIHRyYWNrLiBGb3IgZXhhbXBsZSwKKysgKiBpdCBjb3VsZCBiZSB1c2VkIGZvciBuYXJyYXRp b24gb3Igc3RlcmVvIG11c2ljLCBhbmQgbWF5IHJlbWFpbiB1bmNoYW5nZWQgYnkKKysgKiBsaXN0 ZW5lciBoZWFkIHJvdGF0aW9uLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fTk9OX0RJ RUdFVElDICAgICAgICAgKDEgPDwgMTIpCisrCisrLyoqCisrICogVGhlIHN1YnRpdGxlIHN0cmVh bSBjb250YWlucyBjYXB0aW9ucywgcHJvdmlkaW5nIGEgdHJhbnNjcmlwdGlvbiBhbmQgcG9zc2li bHkKKysgKiBhIHRyYW5zbGF0aW9uIG9mIGF1ZGlvLiBUeXBpY2FsbHkgaW50ZW5kZWQgZm9yIGhl YXJpbmctaW1wYWlyZWQgYXVkaWVuY2VzLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05f Q0FQVElPTlMgICAgICAgICAgICAgKDEgPDwgMTYpCisrLyoqCisrICogVGhlIHN1YnRpdGxlIHN0 cmVhbSBjb250YWlucyBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHZpZGVvIGNvbnRlbnQu CisrICogVHlwaWNhbGx5IGludGVuZGVkIGZvciB2aXN1YWxseS1pbXBhaXJlZCBhdWRpZW5jZXMg b3IgZm9yIHRoZSBjYXNlcyB3aGVyZSB0aGUKKysgKiB2aWRlbyBjYW5ub3QgYmUgc2Vlbi4KKysg Ki8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0RFU0NSSVBUSU9OUyAgICAgICAgICgxIDw8IDE3 KQorKy8qKgorKyAqIFRoZSBzdWJ0aXRsZSBzdHJlYW0gY29udGFpbnMgdGltZS1hbGlnbmVkIG1l dGFkYXRhIHRoYXQgaXMgbm90IGludGVuZGVkIHRvIGJlCisrICogZGlyZWN0bHkgcHJlc2VudGVk IHRvIHRoZSB1c2VyLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fTUVUQURBVEEgICAg ICAgICAgICAgKDEgPDwgMTgpCisrLyoqCisrICogVGhlIHN0cmVhbSBpcyBpbnRlbmRlZCB0byBi ZSBtaXhlZCB3aXRoIGFub3RoZXIgc3RyZWFtIGJlZm9yZSBwcmVzZW50YXRpb24uCisrICogVXNl ZCBmb3IgZXhhbXBsZSB0byBzaWduYWwgdGhlIHN0cmVhbSBjb250YWlucyBhbiBpbWFnZSBwYXJ0 IG9mIGEgSEVJRiBncmlkLAorKyAqIG9yIGZvciBtaXhfdHlwZT0wIGluIG1wZWd0cy4KKysgKi8K KysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0RFUEVOREVOVCAgICAgICAgICAgICgxIDw8IDE5KQor Ky8qKgorKyAqIFRoZSB2aWRlbyBzdHJlYW0gY29udGFpbnMgc3RpbGwgaW1hZ2VzLgorKyAqLwor KyNkZWZpbmUgQVZfRElTUE9TSVRJT05fU1RJTExfSU1BR0UgICAgICAgICAgKDEgPDwgMjApCisr LyoqCisrICogVGhlIHZpZGVvIHN0cmVhbSBjb250YWlucyBtdWx0aXBsZSBsYXllcnMsIGUuZy4g c3RlcmVvc2NvcGljIHZpZXdzIChjZi4gSC4yNjQKKysgKiBBbm5leCBHL0gsIG9yIEhFVkMgQW5u ZXggRikuCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9NVUxUSUxBWUVSICAgICAgICAg ICAoMSA8PCAyMSkKKysKKysvKioKKysgKiBAcmV0dXJuIFRoZSBBVl9ESVNQT1NJVElPTl8qIGZs YWcgY29ycmVzcG9uZGluZyB0byBkaXNwIG9yIGEgbmVnYXRpdmUgZXJyb3IKKysgKiAgICAgICAg IGNvZGUgaWYgZGlzcCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEga25vd24gc3RyZWFtIGRpc3Bv c2l0aW9uLgorKyAqLworK2ludCBhdl9kaXNwb3NpdGlvbl9mcm9tX3N0cmluZyhjb25zdCBjaGFy ICpkaXNwKTsKKysKKysvKioKKysgKiBAcGFyYW0gZGlzcG9zaXRpb24gYSBjb21iaW5hdGlvbiBv ZiBBVl9ESVNQT1NJVElPTl8qIHZhbHVlcworKyAqIEByZXR1cm4gVGhlIHN0cmluZyBkZXNjcmlw dGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbgorKyAqICAgICAgICAg ZGlzcG9zaXRpb24uIE5VTEwgd2hlbiB0aGUgbG93ZXN0IHNldCBiaXQgZG9lcyBub3QgY29ycmVz cG9uZAorKyAqICAgICAgICAgdG8gYSBrbm93biBkaXNwb3NpdGlvbiBvciB3aGVuIGRpc3Bvc2l0 aW9uIGlzIDAuCisrICovCisrY29uc3QgY2hhciAqYXZfZGlzcG9zaXRpb25fdG9fc3RyaW5nKGlu dCBkaXNwb3NpdGlvbik7CisrCisrLyoqCisrICogT3B0aW9ucyBmb3IgYmVoYXZpb3Igb24gdGlt ZXN0YW1wIHdyYXAgZGV0ZWN0aW9uLgorKyAqLworKyNkZWZpbmUgQVZfUFRTX1dSQVBfSUdOT1JF ICAgICAgMCAgIC8vLzwgaWdub3JlIHRoZSB3cmFwCisrI2RlZmluZSBBVl9QVFNfV1JBUF9BRERf T0ZGU0VUICAxICAgLy8vPCBhZGQgdGhlIGZvcm1hdCBzcGVjaWZpYyBvZmZzZXQgb24gd3JhcCBk ZXRlY3Rpb24KKysjZGVmaW5lIEFWX1BUU19XUkFQX1NVQl9PRkZTRVQgIC0xICAvLy88IHN1YnRy YWN0IHRoZSBmb3JtYXQgc3BlY2lmaWMgb2Zmc2V0IG9uIHdyYXAgZGV0ZWN0aW9uCisrCisrLyoq CisrICogU3RyZWFtIHN0cnVjdHVyZS4KKysgKiBOZXcgZmllbGRzIGNhbiBiZSBhZGRlZCB0byB0 aGUgZW5kIHdpdGggbWlub3IgdmVyc2lvbiBidW1wcy4KKysgKiBSZW1vdmFsLCByZW9yZGVyaW5n IGFuZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGZpZWxkcyByZXF1aXJlIGEgbWFqb3IKKysgKiB2ZXJz aW9uIGJ1bXAuCisrICogc2l6ZW9mKEFWU3RyZWFtKSBtdXN0IG5vdCBiZSB1c2VkIG91dHNpZGUg bGliYXYqLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWU3RyZWFtIHsKKysgICAgLyoqCisrICAg ICAqIEEgY2xhc3MgZm9yIEByZWYgYXZvcHRpb25zLiBTZXQgb24gc3RyZWFtIGNyZWF0aW9uLgor KyAgICAgKi8KKysgICAgY29uc3QgQVZDbGFzcyAqYXZfY2xhc3M7CisrCisrICAgIGludCBpbmRl eDsgICAgLyoqPCBzdHJlYW0gaW5kZXggaW4gQVZGb3JtYXRDb250ZXh0ICovCisrICAgIC8qKgor KyAgICAgKiBGb3JtYXQtc3BlY2lmaWMgc3RyZWFtIElELgorKyAgICAgKiBkZWNvZGluZzogc2V0 IGJ5IGxpYmF2Zm9ybWF0CisrICAgICAqIGVuY29kaW5nOiBzZXQgYnkgdGhlIHVzZXIsIHJlcGxh Y2VkIGJ5IGxpYmF2Zm9ybWF0IGlmIGxlZnQgdW5zZXQKKysgICAgICovCisrICAgIGludCBpZDsK KysKKysgICAgLyoqCisrICAgICAqIENvZGVjIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRo aXMgc3RyZWFtLiBBbGxvY2F0ZWQgYW5kIGZyZWVkIGJ5CisrICAgICAqIGxpYmF2Zm9ybWF0IGlu IGF2Zm9ybWF0X25ld19zdHJlYW0oKSBhbmQgYXZmb3JtYXRfZnJlZV9jb250ZXh0KCkKKysgICAg ICogcmVzcGVjdGl2ZWx5LgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBmaWxsZWQgYnkg bGliYXZmb3JtYXQgb24gc3RyZWFtIGNyZWF0aW9uIG9yIGluCisrICAgICAqICAgICAgICAgICAg IGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oKQorKyAgICAgKiAtIG11eGluZzogZmlsbGVkIGJ5 IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpCisrICAgICAqLworKyAg ICBBVkNvZGVjUGFyYW1ldGVycyAqY29kZWNwYXI7CisrCisrICAgIHZvaWQgKnByaXZfZGF0YTsK KysKKysgICAgLyoqCisrICAgICAqIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHVuaXQgb2YgdGlt ZSAoaW4gc2Vjb25kcykgaW4gdGVybXMKKysgICAgICogb2Ygd2hpY2ggZnJhbWUgdGltZXN0YW1w cyBhcmUgcmVwcmVzZW50ZWQuCisrICAgICAqCisrICAgICAqIGRlY29kaW5nOiBzZXQgYnkgbGli YXZmb3JtYXQKKysgICAgICogZW5jb2Rpbmc6IE1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZv cmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkgdG8KKysgICAgICogICAgICAgICAgIHByb3ZpZGUg YSBoaW50IHRvIHRoZSBtdXhlciBhYm91dCB0aGUgZGVzaXJlZCB0aW1lYmFzZS4gSW4KKysgICAg ICogICAgICAgICAgIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLCB0aGUgbXV4ZXIgd2lsbCBvdmVy d3JpdGUgdGhpcyBmaWVsZAorKyAgICAgKiAgICAgICAgICAgd2l0aCB0aGUgdGltZWJhc2UgdGhh dCB3aWxsIGFjdHVhbGx5IGJlIHVzZWQgZm9yIHRoZSB0aW1lc3RhbXBzCisrICAgICAqICAgICAg ICAgICB3cml0dGVuIGludG8gdGhlIGZpbGUgKHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHJlbGF0 ZWQgdG8gdGhlCisrICAgICAqICAgICAgICAgICB1c2VyLXByb3ZpZGVkIG9uZSwgZGVwZW5kaW5n IG9uIHRoZSBmb3JtYXQpLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCB0aW1lX2Jhc2U7Cisr CisrICAgIC8qKgorKyAgICAgKiBEZWNvZGluZzogcHRzIG9mIHRoZSBmaXJzdCBmcmFtZSBvZiB0 aGUgc3RyZWFtIGluIHByZXNlbnRhdGlvbiBvcmRlciwgaW4gc3RyZWFtIHRpbWUgYmFzZS4KKysg ICAgICogT25seSBzZXQgdGhpcyBpZiB5b3UgYXJlIGFic29sdXRlbHkgMTAwJSBzdXJlIHRoYXQg dGhlIHZhbHVlIHlvdSBzZXQKKysgICAgICogaXQgdG8gcmVhbGx5IGlzIHRoZSBwdHMgb2YgdGhl IGZpcnN0IGZyYW1lLgorKyAgICAgKiBUaGlzIG1heSBiZSB1bmRlZmluZWQgKEFWX05PUFRTX1ZB TFVFKS4KKysgICAgICogQG5vdGUgVGhlIEFTRiBoZWFkZXIgZG9lcyBOT1QgY29udGFpbiBhIGNv cnJlY3Qgc3RhcnRfdGltZSB0aGUgQVNGCisrICAgICAqIGRlbXV4ZXIgbXVzdCBOT1Qgc2V0IHRo aXMuCisrICAgICAqLworKyAgICBpbnQ2NF90IHN0YXJ0X3RpbWU7CisrCisrICAgIC8qKgorKyAg ICAgKiBEZWNvZGluZzogZHVyYXRpb24gb2YgdGhlIHN0cmVhbSwgaW4gc3RyZWFtIHRpbWUgYmFz ZS4KKysgICAgICogSWYgYSBzb3VyY2UgZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZHVyYXRpb24s IGJ1dCBkb2VzIHNwZWNpZnkKKysgICAgICogYSBiaXRyYXRlLCB0aGlzIHZhbHVlIHdpbGwgYmUg ZXN0aW1hdGVkIGZyb20gYml0cmF0ZSBhbmQgZmlsZSBzaXplLgorKyAgICAgKgorKyAgICAgKiBF bmNvZGluZzogTWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF93cml0ZV9o ZWFkZXIoKSB0bworKyAgICAgKiBwcm92aWRlIGEgaGludCB0byB0aGUgbXV4ZXIgYWJvdXQgdGhl IGVzdGltYXRlZCBkdXJhdGlvbi4KKysgICAgICovCisrICAgIGludDY0X3QgZHVyYXRpb247Cisr CisrICAgIGludDY0X3QgbmJfZnJhbWVzOyAgICAgICAgICAgICAgICAgLy8vPCBudW1iZXIgb2Yg ZnJhbWVzIGluIHRoaXMgc3RyZWFtIGlmIGtub3duIG9yIDAKKysKKysgICAgLyoqCisrICAgICAq IFN0cmVhbSBkaXNwb3NpdGlvbiAtIGEgY29tYmluYXRpb24gb2YgQVZfRElTUE9TSVRJT05fKiBm bGFncy4KKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGxpYmF2Zm9ybWF0IHdoZW4gY3JlYXRp bmcgdGhlIHN0cmVhbSBvciBpbgorKyAgICAgKiAgICAgICAgICAgICBhdmZvcm1hdF9maW5kX3N0 cmVhbV9pbmZvKCkuCisrICAgICAqIC0gbXV4aW5nOiBtYXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIg YmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLgorKyAgICAgKi8KKysgICAgaW50IGRpc3Bv c2l0aW9uOworKworKyAgICBlbnVtIEFWRGlzY2FyZCBkaXNjYXJkOyAvLy88IFNlbGVjdHMgd2hp Y2ggcGFja2V0cyBjYW4gYmUgZGlzY2FyZGVkIGF0IHdpbGwgYW5kIGRvIG5vdCBuZWVkIHRvIGJl IGRlbXV4ZWQuCisrCisrICAgIC8qKgorKyAgICAgKiBzYW1wbGUgYXNwZWN0IHJhdGlvICgwIGlm IHVua25vd24pCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRl Y29kaW5nOiBTZXQgYnkgbGliYXZmb3JtYXQuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIHNh bXBsZV9hc3BlY3RfcmF0aW87CisrCisrICAgIEFWRGljdGlvbmFyeSAqbWV0YWRhdGE7CisrCisr ICAgIC8qKgorKyAgICAgKiBBdmVyYWdlIGZyYW1lcmF0ZQorKyAgICAgKgorKyAgICAgKiAtIGRl bXV4aW5nOiBNYXkgYmUgc2V0IGJ5IGxpYmF2Zm9ybWF0IHdoZW4gY3JlYXRpbmcgdGhlIHN0cmVh bSBvciBpbgorKyAgICAgKiAgICAgICAgICAgICBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKCku CisrICAgICAqIC0gbXV4aW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9y bWF0X3dyaXRlX2hlYWRlcigpLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCBhdmdfZnJhbWVf cmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIEZvciBzdHJlYW1zIHdpdGggQVZfRElTUE9TSVRJ T05fQVRUQUNIRURfUElDIGRpc3Bvc2l0aW9uLCB0aGlzIHBhY2tldAorKyAgICAgKiB3aWxsIGNv bnRhaW4gdGhlIGF0dGFjaGVkIHBpY3R1cmUuCisrICAgICAqCisrICAgICAqIGRlY29kaW5nOiBz ZXQgYnkgbGliYXZmb3JtYXQsIG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIuCisr ICAgICAqIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIEFWUGFja2V0IGF0dGFjaGVk X3BpYzsKKysKKysgICAgLyoqCisrICAgICAqIEZsYWdzIGluZGljYXRpbmcgZXZlbnRzIGhhcHBl bmluZyBvbiB0aGUgc3RyZWFtLCBhIGNvbWJpbmF0aW9uIG9mCisrICAgICAqIEFWU1RSRUFNX0VW RU5UX0ZMQUdfKi4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogbWF5IGJlIHNldCBieSB0 aGUgZGVtdXhlciBpbiBhdmZvcm1hdF9vcGVuX2lucHV0KCksCisrICAgICAqICAgYXZmb3JtYXRf ZmluZF9zdHJlYW1faW5mbygpIGFuZCBhdl9yZWFkX2ZyYW1lKCkuIEZsYWdzIG11c3QgYmUgY2xl YXJlZAorKyAgICAgKiAgIGJ5IHRoZSB1c2VyIG9uY2UgdGhlIGV2ZW50IGhhcyBiZWVuIGhhbmRs ZWQuCisrICAgICAqIC0gbXV4aW5nOiBtYXkgYmUgc2V0IGJ5IHRoZSB1c2VyIGFmdGVyIGF2Zm9y bWF0X3dyaXRlX2hlYWRlcigpLiB0bworKyAgICAgKiAgIGluZGljYXRlIGEgdXNlci10cmlnZ2Vy ZWQgZXZlbnQuICBUaGUgbXV4ZXIgd2lsbCBjbGVhciB0aGUgZmxhZ3MgZm9yCisrICAgICAqICAg ZXZlbnRzIGl0IGhhcyBoYW5kbGVkIGluIGF2X1tpbnRlcmxlYXZlZF1fd3JpdGVfZnJhbWUoKS4K KysgICAgICovCisrICAgIGludCBldmVudF9mbGFnczsKKysvKioKKysgKiAtIGRlbXV4aW5nOiB0 aGUgZGVtdXhlciByZWFkIG5ldyBtZXRhZGF0YSBmcm9tIHRoZSBmaWxlIGFuZCB1cGRhdGVkCisr ICogICAgIEFWU3RyZWFtLm1ldGFkYXRhIGFjY29yZGluZ2x5CisrICogLSBtdXhpbmc6IHRoZSB1 c2VyIHVwZGF0ZWQgQVZTdHJlYW0ubWV0YWRhdGEgYW5kIHdpc2hlcyB0aGUgbXV4ZXIgdG8gd3Jp dGUKKysgKiAgICAgaXQgaW50byB0aGUgZmlsZQorKyAqLworKyNkZWZpbmUgQVZTVFJFQU1fRVZF TlRfRkxBR19NRVRBREFUQV9VUERBVEVEIDB4MDAwMQorKy8qKgorKyAqIC0gZGVtdXhpbmc6IG5l dyBwYWNrZXRzIGZvciB0aGlzIHN0cmVhbSB3ZXJlIHJlYWQgZnJvbSB0aGUgZmlsZS4gVGhpcwor KyAqICAgZXZlbnQgaXMgaW5mb3JtYXRpb25hbCBvbmx5IGFuZCBkb2VzIG5vdCBndWFyYW50ZWUg dGhhdCBuZXcgcGFja2V0cworKyAqICAgZm9yIHRoaXMgc3RyZWFtIHdpbGwgbmVjZXNzYXJpbHkg YmUgcmV0dXJuZWQgZnJvbSBhdl9yZWFkX2ZyYW1lKCkuCisrICovCisrI2RlZmluZSBBVlNUUkVB TV9FVkVOVF9GTEFHX05FV19QQUNLRVRTICgxIDw8IDEpCisrCisrICAgIC8qKgorKyAgICAgKiBS ZWFsIGJhc2UgZnJhbWVyYXRlIG9mIHRoZSBzdHJlYW0uCisrICAgICAqIFRoaXMgaXMgdGhlIGxv d2VzdCBmcmFtZXJhdGUgd2l0aCB3aGljaCBhbGwgdGltZXN0YW1wcyBjYW4gYmUKKysgICAgICog cmVwcmVzZW50ZWQgYWNjdXJhdGVseSAoaXQgaXMgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBv ZiBhbGwKKysgICAgICogZnJhbWVyYXRlcyBpbiB0aGUgc3RyZWFtKS4gTm90ZSwgdGhpcyB2YWx1 ZSBpcyBqdXN0IGEgZ3Vlc3MhCisrICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgdGltZSBiYXNl IGlzIDEvOTAwMDAgYW5kIGFsbCBmcmFtZXMgaGF2ZSBlaXRoZXIKKysgICAgICogYXBwcm94aW1h dGVseSAzNjAwIG9yIDE4MDAgdGltZXIgdGlja3MsIHRoZW4gcl9mcmFtZV9yYXRlIHdpbGwgYmUg NTAvMS4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgcl9mcmFtZV9yYXRlOworKworKyAgICAv KioKKysgICAgICogTnVtYmVyIG9mIGJpdHMgaW4gdGltZXN0YW1wcy4gVXNlZCBmb3Igd3JhcHBp bmcgY29udHJvbC4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGxpYmF2Zm9y bWF0CisrICAgICAqIC0gbXV4aW5nOiBzZXQgYnkgbGliYXZmb3JtYXQKKysgICAgICoKKysgICAg ICovCisrICAgIGludCBwdHNfd3JhcF9iaXRzOworK30gQVZTdHJlYW07CisrCisrLyoqCisrICog QVZTdHJlYW1Hcm91cFRpbGVHcmlkIGhvbGRzIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb21iaW5l IHNldmVyYWwKKysgKiBpbmRlcGVuZGVudCBpbWFnZXMgb24gYSBzaW5nbGUgY2FudmFzIGZvciBw cmVzZW50YXRpb24uCisrICoKKysgKiBUaGUgb3V0cHV0IHNob3VsZCBiZSBhIEByZWYgQVZTdHJl YW1Hcm91cFRpbGVHcmlkLmJhY2tncm91bmQgImJhY2tncm91bmQiCisrICogY29sb3JlZCBAcmVm IEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5jb2RlZF93aWR0aCAiY29kZWRfd2lkdGgiIHgKKysgKiBA cmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5jb2RlZF9oZWlnaHQgImNvZGVkX2hlaWdodCIgY2Fu dmFzIHdoZXJlIGEKKysgKiBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5uYl90aWxlcyAibmJf dGlsZXMiIGFtb3VudCBvZiB0aWxlcyBhcmUgcGxhY2VkIGluCisrICogdGhlIG9yZGVyIHRoZXkg YXBwZWFyIGluIHRoZSBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5vZmZzZXRzICJvZmZzZXRz IgorKyAqIGFycmF5LCBhdCB0aGUgZXhhY3Qgb2Zmc2V0IGRlc2NyaWJlZCBmb3IgdGhlbS4gSW4g cGFydGljdWxhciwgaWYgdHdvIG9yIG1vcmUKKysgKiB0aWxlcyBvdmVybGFwLCB0aGUgaW1hZ2Ug d2l0aCBoaWdoZXIgaW5kZXggaW4gdGhlCisrICogQHJlZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQu b2Zmc2V0cyAib2Zmc2V0cyIgYXJyYXkgdGFrZXMgcHJpb3JpdHkuCisrICogTm90ZSB0aGF0IGEg c2luZ2xlIGltYWdlIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCBpLmUuIG11bHRpcGxlIGVu dHJpZXMKKysgKiBpbiBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5vZmZzZXRzICJvZmZzZXRz IiBtYXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBvZgorKyAqIGlkeC4KKysgKgorKyAqIFRoZSBmb2xs b3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBncmlkIHdpdGggMyByb3dzIGFuZCA0IGNv bHVtbnM6CisrICoKKysgKiArLS0tKy0tLSstLS0rLS0tKworKyAqIHwgMCB8IDEgfCAyIHwgMyB8 CisrICogKy0tLSstLS0rLS0tKy0tLSsKKysgKiB8IDQgfCA1IHwgNiB8IDcgfAorKyAqICstLS0r LS0tKy0tLSstLS0rCisrICogfCA4IHwgOSB8MTAgfDExIHwKKysgKiArLS0tKy0tLSstLS0rLS0t KworKyAqCisrICogQXNzdW1pbmcgYWxsIHRpbGVzIGhhdmUgYSBkaW1lbnNpb24gb2YgNTEyeDUx MiwgdGhlCisrICogQHJlZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQub2Zmc2V0cyAib2Zmc2V0IiBv ZiB0aGUgdG9wbGVmdCBwaXhlbCBvZgorKyAqIHRoZSBmaXJzdCBAcmVmIEFWU3RyZWFtR3JvdXAu c3RyZWFtcyAic3RyZWFtIiBpbiB0aGUgZ3JvdXAgaXMgIjAsMCIsIHRoZQorKyAqIEByZWYgQVZT dHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMgIm9mZnNldCIgb2YgdGhlIHRvcGxlZnQgcGl4ZWwg b2YKKysgKiB0aGUgc2Vjb25kIEByZWYgQVZTdHJlYW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGlu IHRoZSBncm91cCBpcyAiNTEyLDAiLCB0aGUKKysgKiBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3Jp ZC5vZmZzZXRzICJvZmZzZXQiIG9mIHRoZSB0b3BsZWZ0IHBpeGVsIG9mCisrICogdGhlIGZpZnRo IEByZWYgQVZTdHJlYW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cCBpcyAiMCw1 MTIiLCB0aGUKKysgKiBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5vZmZzZXRzICJvZmZzZXQi LCBvZiB0aGUgdG9wbGVmdCBwaXhlbCBvZgorKyAqIHRoZSBzaXh0aCBAcmVmIEFWU3RyZWFtR3Jv dXAuc3RyZWFtcyAic3RyZWFtIiBpbiB0aGUgZ3JvdXAgaXMgIjUxMiw1MTIiLAorKyAqIGV0Yy4K KysgKgorKyAqIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIGNhbnZhcyB3aXRoIG92 ZXJsYXBwaW5nIHRpbGVzOgorKyAqCisrICogKy0tLS0tLS0tLS0tKworKyAqIHwgICAlJSUlJSAg IHwKKysgKiB8KioqJSUzJSVAQEB8CisrICogfCoqMCUlJSUlMkBAfAorKyAqIHwqKiojIzFAQEBA QHwKKysgKiB8ICAgIyMjIyMgICB8CisrICogKy0tLS0tLS0tLS0tKworKyAqCisrICogQXNzdW1p bmcgYSBjYW52YXMgd2l0aCBzaXplIDEwMjR4MTAyNCBhbmQgYWxsIHRpbGVzIHdpdGggYSBkaW1l bnNpb24gb2YKKysgKiA1MTJ4NTEyLCBhIHBvc3NpYmxlIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVH cmlkLm9mZnNldHMgIm9mZnNldCIgZm9yIHRoZQorKyAqIHRvcGxlZnQgcGl4ZWwgb2YgdGhlIGZp cnN0IEByZWYgQVZTdHJlYW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cAorKyAq IHdvdWxkIGJlIDB4MjU2LCB0aGUgQHJlZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQub2Zmc2V0cyAi b2Zmc2V0IiBmb3IgdGhlCisrICogdG9wbGVmdCBwaXhlbCBvZiB0aGUgc2Vjb25kIEByZWYgQVZT dHJlYW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cAorKyAqIHdvdWxkIGJlIDI1 Nng1MTIsIHRoZSBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5vZmZzZXRzICJvZmZzZXQiIGZv ciB0aGUKKysgKiB0b3BsZWZ0IHBpeGVsIG9mIHRoZSB0aGlyZCBAcmVmIEFWU3RyZWFtR3JvdXAu c3RyZWFtcyAic3RyZWFtIiBpbiB0aGUgZ3JvdXAKKysgKiB3b3VsZCBiZSA1MTJ4MjU2LCBhbmQg dGhlIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMgIm9mZnNldCIgZm9yCisrICog dGhlIHRvcGxlZnQgcGl4ZWwgb2YgdGhlIGZvdXJ0aCBAcmVmIEFWU3RyZWFtR3JvdXAuc3RyZWFt cyAic3RyZWFtIiBpbiB0aGUKKysgKiBncm91cCB3b3VsZCBiZSAyNTZ4MC4KKysgKgorKyAqIHNp emVvZihBVlN0cmVhbUdyb3VwVGlsZUdyaWQpIGlzIG5vdCBhIHBhcnQgb2YgdGhlIEFCSSBhbmQg bWF5IG9ubHkgYmUKKysgKiBhbGxvY2F0ZWQgYnkgYXZmb3JtYXRfc3RyZWFtX2dyb3VwX2NyZWF0 ZSgpLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWU3RyZWFtR3JvdXBUaWxlR3JpZCB7CisrICAg IGNvbnN0IEFWQ2xhc3MgKmF2X2NsYXNzOworKworKyAgICAvKioKKysgICAgICogQW1vdW50IG9m IHRpbGVzIGluIHRoZSBncmlkLgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlID4gMC4KKysgICAg ICovCisrICAgIHVuc2lnbmVkIGludCBuYl90aWxlczsKKysKKysgICAgLyoqCisrICAgICAqIFdp ZHRoIG9mIHRoZSBjYW52YXMuCisrICAgICAqCisrICAgICAqIE11c3QgYmUgPiAwLgorKyAgICAg Ki8KKysgICAgaW50IGNvZGVkX3dpZHRoOworKyAgICAvKioKKysgICAgICogV2lkdGggb2YgdGhl IGNhbnZhcy4KKysgICAgICoKKysgICAgICogTXVzdCBiZSA+IDAuCisrICAgICAqLworKyAgICBp bnQgY29kZWRfaGVpZ2h0OworKworKyAgICAvKioKKysgICAgICogQW4gQHJlZiBuYl90aWxlcyBz aXplZCBhcnJheSBvZiBvZmZzZXRzIGluIHBpeGVscyBmcm9tIHRoZSB0b3BsZWZ0IGVkZ2UKKysg ICAgICogb2YgdGhlIGNhbnZhcywgaW5kaWNhdGluZyB3aGVyZSBlYWNoIHN0cmVhbSBzaG91bGQg YmUgcGxhY2VkLgorKyAgICAgKiBJdCBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxs b2MoKSBmYW1pbHkgb2YgZnVuY3Rpb25zLgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBz ZXQgYnkgbGliYXZmb3JtYXQsIG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIuCisr ICAgICAqIC0gbXV4aW5nOiBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVf aGVhZGVyKCkuCisrICAgICAqCisrICAgICAqIEZyZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9y bWF0X2ZyZWVfY29udGV4dCgpLgorKyAgICAgKi8KKysgICAgc3RydWN0IHsKKysgICAgICAgIC8q KgorKyAgICAgICAgICogSW5kZXggb2YgdGhlIHN0cmVhbSBpbiB0aGUgZ3JvdXAgdGhpcyB0aWxl IHJlZmVyZW5jZXMuCisrICAgICAgICAgKgorKyAgICAgICAgICogTXVzdCBiZSA8IEByZWYgQVZT dHJlYW1Hcm91cC5uYl9zdHJlYW1zICJuYl9zdHJlYW1zIi4KKysgICAgICAgICAqLworKyAgICAg ICAgdW5zaWduZWQgaW50IGlkeDsKKysgICAgICAgIC8qKgorKyAgICAgICAgICogT2Zmc2V0IGlu IHBpeGVscyBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNhbnZhcyB3aGVyZSB0aGUgdGlsZQor KyAgICAgICAgICogc2hvdWxkIGJlIHBsYWNlZC4KKysgICAgICAgICAqLworKyAgICAgICAgaW50 IGhvcml6b250YWw7CisrICAgICAgICAvKioKKysgICAgICAgICAqIE9mZnNldCBpbiBwaXhlbHMg ZnJvbSB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGNhbnZhcyB3aGVyZSB0aGUgdGlsZQorKyAgICAgICAg ICogc2hvdWxkIGJlIHBsYWNlZC4KKysgICAgICAgICAqLworKyAgICAgICAgaW50IHZlcnRpY2Fs OworKyAgICB9ICpvZmZzZXRzOworKworKyAgICAvKioKKysgICAgICogVGhlIHBpeGVsIHZhbHVl IHBlciBjaGFubmVsIGluIFJHQkEgZm9ybWF0IHVzZWQgaWYgbm8gcGl4ZWwgb2YgYW55IHRpbGUK KysgICAgICogaXMgbG9jYXRlZCBhdCBhIHBhcnRpY3VsYXIgcGl4ZWwgbG9jYXRpb24uCisrICAg ICAqCisrICAgICAqIEBzZWUgYXZfaW1hZ2VfZmlsbF9jb2xvcigpLgorKyAgICAgKiBAc2VlIGF2 X3BhcnNlX2NvbG9yKCkuCisrICAgICAqLworKyAgICB1aW50OF90IGJhY2tncm91bmRbNF07Cisr CisrICAgIC8qKgorKyAgICAgKiBPZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIGxlZnQgZWRnZSBv ZiB0aGUgY2FudmFzIHdoZXJlIHRoZSBhY3R1YWwgaW1hZ2UKKysgICAgICogbWVhbnQgZm9yIHBy ZXNlbnRhdGlvbiBzdGFydHMuCisrICAgICAqCisrICAgICAqIFRoaXMgZmllbGQgbXVzdCBiZSA+ PSAwIGFuZCA8IEByZWYgY29kZWRfd2lkdGguCisrICAgICAqLworKyAgICBpbnQgaG9yaXpvbnRh bF9vZmZzZXQ7CisrICAgIC8qKgorKyAgICAgKiBPZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIHRv cCBlZGdlIG9mIHRoZSBjYW52YXMgd2hlcmUgdGhlIGFjdHVhbCBpbWFnZQorKyAgICAgKiBtZWFu dCBmb3IgcHJlc2VudGF0aW9uIHN0YXJ0cy4KKysgICAgICoKKysgICAgICogVGhpcyBmaWVsZCBt dXN0IGJlID49IDAgYW5kIDwgQHJlZiBjb2RlZF9oZWlnaHQuCisrICAgICAqLworKyAgICBpbnQg dmVydGljYWxfb2Zmc2V0OworKworKyAgICAvKioKKysgICAgICogV2lkdGggb2YgdGhlIGZpbmFs IGltYWdlIGZvciBwcmVzZW50YXRpb24uCisrICAgICAqCisrICAgICAqIE11c3QgYmUgPiAwIGFu ZCA8PSAoQHJlZiBjb2RlZF93aWR0aCAtIEByZWYgaG9yaXpvbnRhbF9vZmZzZXQpLgorKyAgICAg KiBXaGVuIGl0J3Mgbm90IGVxdWFsIHRvIChAcmVmIGNvZGVkX3dpZHRoIC0gQHJlZiBob3Jpem9u dGFsX29mZnNldCksIHRoZQorKyAgICAgKiByZXN1bHQgb2YgKEByZWYgY29kZWRfd2lkdGggLSB3 aWR0aCAtIEByZWYgaG9yaXpvbnRhbF9vZmZzZXQpIGlzIHRoZQorKyAgICAgKiBhbW91bnQgYW1v dW50IG9mIHBpeGVscyB0byBiZSBjcm9wcGVkIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCisr ICAgICAqIGZpbmFsIGltYWdlIGJlZm9yZSBwcmVzZW50YXRpb24uCisrICAgICAqLworKyAgICBp bnQgd2lkdGg7CisrICAgIC8qKgorKyAgICAgKiBIZWlnaHQgb2YgdGhlIGZpbmFsIGltYWdlIGZv ciBwcmVzZW50YXRpb24uCisrICAgICAqCisrICAgICAqIE11c3QgYmUgPiAwIGFuZCA8PSAoQHJl ZiBjb2RlZF9oZWlnaHQgLSBAcmVmIHZlcnRpY2FsX29mZnNldCkuCisrICAgICAqIFdoZW4gaXQn cyBub3QgZXF1YWwgdG8gKEByZWYgY29kZWRfaGVpZ2h0IC0gQHJlZiB2ZXJ0aWNhbF9vZmZzZXQp LCB0aGUKKysgICAgICogcmVzdWx0IG9mIChAcmVmIGNvZGVkX2hlaWdodCAtIGhlaWdodCAtIEBy ZWYgdmVydGljYWxfb2Zmc2V0KSBpcyB0aGUKKysgICAgICogYW1vdW50IGFtb3VudCBvZiBwaXhl bHMgdG8gYmUgY3JvcHBlZCBmcm9tIHRoZSBib3R0b20gZWRnZSBvZiB0aGUKKysgICAgICogZmlu YWwgaW1hZ2UgYmVmb3JlIHByZXNlbnRhdGlvbi4KKysgICAgICovCisrICAgIGludCBoZWlnaHQ7 CisrCisrICAgIC8qKgorKyAgICAgKiBBZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRo ZSBncmlkLgorKyAgICAgKgorKyAgICAgKiBTaG91bGQgYmUgYWxsb2NhdGVkIHdpdGggYXZfcGFj a2V0X3NpZGVfZGF0YV9uZXcoKSBvcgorKyAgICAgKiBhdl9wYWNrZXRfc2lkZV9kYXRhX2FkZCgp LCBhbmQgd2lsbCBiZSBmcmVlZCBieSBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKS4KKysgICAgICov CisrICAgIEFWUGFja2V0U2lkZURhdGEgKmNvZGVkX3NpZGVfZGF0YTsKKysKKysgICAgLyoqCisr ICAgICAqIEFtb3VudCBvZiBlbnRyaWVzIGluIEByZWYgY29kZWRfc2lkZV9kYXRhLgorKyAgICAg Ki8KKysgICAgaW50IG5iX2NvZGVkX3NpZGVfZGF0YTsKKyt9IEFWU3RyZWFtR3JvdXBUaWxlR3Jp ZDsKKysKKysvKioKKysgKiBBVlN0cmVhbUdyb3VwTGF5ZXJlZFZpZGVvIGlzIG1lYW50IHRvIGRl ZmluZSB0aGUgcmVsYXRpb24gYmV0d2VlbiBhIGJhc2UKKysgKiBsYXllciB2aWRlbyBzdHJlYW0g YW5kIGEgc2VwYXJhdGUgZW5oYW5jZW1lbnQgbGF5ZXIgc3RyZWFtIHRoYXQgdG9nZXRoZXIKKysg KiBmb3JtIGEgc2luZ2xlIGxheWVyZWQgdmlkZW8gcHJlc2VudGF0aW9uIChmb3IgZXhhbXBsZSBh IHZpZGVvIHN0cmVhbSBhbmQgYQorKyAqIGRhdGEgc3RyZWFtIGNvbnRhaW5pbmcgTENFVkMgZW5o YW5jZW1lbnQgbGF5ZXIgTkFMVXMsIG9yIERvbGJ5IFZpc2lvbgorKyAqIFByb2ZpbGUgNyBkdWFs LWxheWVyIGVuY29kaW5nKS4KKysgKgorKyAqIFRoZSBlbmhhbmNlbWVudCBsYXllciBzdHJlYW0g aXMgaWRlbnRpZmllZCBieSBAcmVmIGVsX2luZGV4LgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFW U3RyZWFtR3JvdXBMYXllcmVkVmlkZW8geworKyAgICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsK KysKKysgICAgLyoqCisrICAgICAqIEluZGV4IG9mIHRoZSBlbmhhbmNlbWVudCBsYXllciBzdHJl YW0gaW4gQVZTdHJlYW1Hcm91cC4KKysgICAgICovCisrI2lmIEZGX0FQSV9MQ0VWQ19TVFJVQ1QK KysgICAgdW5pb24geworKyNlbmRpZgorKyAgICAgICAgdW5zaWduZWQgaW50IGVsX2luZGV4Owor KyNpZiBGRl9BUElfTENFVkNfU1RSVUNUCisrICAgICAgICAvKioKKysgICAgICAgICAqIEFsaWFz IGZvciBAcmVmIGVsX2luZGV4LCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorKyAg ICAgICAgICovCisrICAgICAgICBhdHRyaWJ1dGVfZGVwcmVjYXRlZAorKyAgICAgICAgdW5zaWdu ZWQgaW50IGxjZXZjX2luZGV4OworKyAgICB9OworKyNlbmRpZgorKyAgICAvKioKKysgICAgICog V2lkdGggb2YgdGhlIGZpbmFsIHN0cmVhbSBmb3IgcHJlc2VudGF0aW9uLgorKyAgICAgKi8KKysg ICAgaW50IHdpZHRoOworKyAgICAvKioKKysgICAgICogSGVpZ2h0IG9mIHRoZSBmaW5hbCBpbWFn ZSBmb3IgcHJlc2VudGF0aW9uLgorKyAgICAgKi8KKysgICAgaW50IGhlaWdodDsKKyt9IEFWU3Ry ZWFtR3JvdXBMYXllcmVkVmlkZW87CisrCisrI2lmIEZGX0FQSV9MQ0VWQ19TVFJVQ1QKKysvKioK KysgKiBBbGlhcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorKyAqCisrICogQVZT dHJlYW1Hcm91cExDRVZDIHdhcyByZW5hbWVkIHRvIEByZWYgQVZTdHJlYW1Hcm91cExheWVyZWRW aWRlby4KKysgKi8KKysjZGVmaW5lIEFWU3RyZWFtR3JvdXBMQ0VWQyBBVlN0cmVhbUdyb3VwTGF5 ZXJlZFZpZGVvCisrI2VuZGlmCisrCisrLyoqCisrICogQVZTdHJlYW1Hcm91cFRSRUYgaXMgbWVh bnQgdG8gZGVmaW5lIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHZpZGVvLCBhdWRpbywKKysgKiBvciBz dWJ0aXRsZSBzdHJlYW1zLCBhbmQgYSBkYXRhIHN0cmVhbSBjb250YWluaW5nIG1ldGFkYXRhLgor KyAqCisrICogTm8gbW9yZSB0aGFuIG9uZSBzdHJlYW0gb2YgQHJlZiBBVkNvZGVjUGFyYW1ldGVy cy5jb2RlY190eXBlICJjb2RlY190eXBlIgorKyAqIEFWTUVESUFfVFlQRV9EQVRBIHNoYWxsIGJl IHByZXNlbnQuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdHJlYW1Hcm91cFRSRUYgeworKyAg ICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsKKysKKysgICAgLyoqCisrICAgICAqIEluZGV4IG9m IHRoZSBtZXRhZGF0YSBzdHJlYW0gaW4gdGhlIEFWU3RyZWFtR3JvdXAuCisrICAgICAqLworKyAg ICB1bnNpZ25lZCBpbnQgbWV0YWRhdGFfaW5kZXg7CisrfSBBVlN0cmVhbUdyb3VwVFJFRjsKKysK KytlbnVtIEFWU3RyZWFtR3JvdXBQYXJhbXNUeXBlIHsKKysgICAgQVZfU1RSRUFNX0dST1VQX1BB UkFNU19OT05FLAorKyAgICBBVl9TVFJFQU1fR1JPVVBfUEFSQU1TX0lBTUZfQVVESU9fRUxFTUVO VCwKKysgICAgQVZfU1RSRUFNX0dST1VQX1BBUkFNU19JQU1GX01JWF9QUkVTRU5UQVRJT04sCisr ICAgIEFWX1NUUkVBTV9HUk9VUF9QQVJBTVNfVElMRV9HUklELAorKyAgICBBVl9TVFJFQU1fR1JP VVBfUEFSQU1TX0xDRVZDLAorKyAgICBBVl9TVFJFQU1fR1JPVVBfUEFSQU1TX1RSRUYsCisrICAg IEFWX1NUUkVBTV9HUk9VUF9QQVJBTVNfRE9MQllfVklTSU9OLAorK307CisrCisrc3RydWN0IEFW SUFNRkF1ZGlvRWxlbWVudDsKKytzdHJ1Y3QgQVZJQU1GTWl4UHJlc2VudGF0aW9uOworKworK3R5 cGVkZWYgc3RydWN0IEFWU3RyZWFtR3JvdXAgeworKyAgICAvKioKKysgICAgICogQSBjbGFzcyBm b3IgQHJlZiBhdm9wdGlvbnMuIFNldCBieSBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfY3JlYXRlKCku CisrICAgICAqLworKyAgICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsKKysKKysgICAgdm9pZCAq cHJpdl9kYXRhOworKworKyAgICAvKioKKysgICAgICogR3JvdXAgaW5kZXggaW4gQVZGb3JtYXRD b250ZXh0LgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgaW50IGluZGV4OworKworKyAgICAvKioK KysgICAgICogR3JvdXAgdHlwZS1zcGVjaWZpYyBncm91cCBJRC4KKysgICAgICoKKysgICAgICog ZGVjb2Rpbmc6IHNldCBieSBsaWJhdmZvcm1hdAorKyAgICAgKiBlbmNvZGluZzogbWF5IHNldCBi eSB0aGUgdXNlcgorKyAgICAgKi8KKysgICAgaW50NjRfdCBpZDsKKysKKysgICAgLyoqCisrICAg ICAqIEdyb3VwIHR5cGUKKysgICAgICoKKysgICAgICogZGVjb2Rpbmc6IHNldCBieSBsaWJhdmZv cm1hdCBvbiBncm91cCBjcmVhdGlvbgorKyAgICAgKiBlbmNvZGluZzogc2V0IGJ5IGF2Zm9ybWF0 X3N0cmVhbV9ncm91cF9jcmVhdGUoKQorKyAgICAgKi8KKysgICAgZW51bSBBVlN0cmVhbUdyb3Vw UGFyYW1zVHlwZSB0eXBlOworKworKyAgICAvKioKKysgICAgICogR3JvdXAgdHlwZS1zcGVjaWZp YyBwYXJhbWV0ZXJzCisrICAgICAqLworKyAgICB1bmlvbiB7CisrICAgICAgICBzdHJ1Y3QgQVZJ QU1GQXVkaW9FbGVtZW50ICppYW1mX2F1ZGlvX2VsZW1lbnQ7CisrICAgICAgICBzdHJ1Y3QgQVZJ QU1GTWl4UHJlc2VudGF0aW9uICppYW1mX21peF9wcmVzZW50YXRpb247CisrICAgICAgICBzdHJ1 Y3QgQVZTdHJlYW1Hcm91cFRpbGVHcmlkICp0aWxlX2dyaWQ7CisrICAgICAgICBzdHJ1Y3QgQVZT dHJlYW1Hcm91cExheWVyZWRWaWRlbyAqbGF5ZXJlZF92aWRlbzsKKysjaWYgRkZfQVBJX0xDRVZD X1NUUlVDVAorKyAgICAgICAgLyoqCisrICAgICAgICAgKiBkZXByZWNhdGVkLCB1c2UgbGF5ZXJl ZF92aWRlby4KKysgICAgICAgICAqLworKyAgICAgICAgYXR0cmlidXRlX2RlcHJlY2F0ZWQKKysg ICAgICAgIHN0cnVjdCBBVlN0cmVhbUdyb3VwTENFVkMgKmxjZXZjOworKyNlbmRpZgorKyAgICAg ICAgc3RydWN0IEFWU3RyZWFtR3JvdXBUUkVGICp0cmVmOworKyAgICB9IHBhcmFtczsKKysKKysg ICAgLyoqCisrICAgICAqIE1ldGFkYXRhIHRoYXQgYXBwbGllcyB0byB0aGUgd2hvbGUgZ3JvdXAu CisrICAgICAqCisrICAgICAqIC0gZGVtdXhpbmc6IHNldCBieSBsaWJhdmZvcm1hdCBvbiBncm91 cCBjcmVhdGlvbgorKyAgICAgKiAtIG11eGluZzogbWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJl Zm9yZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKQorKyAgICAgKgorKyAgICAgKiBGcmVlZCBieSBs aWJhdmZvcm1hdCBpbiBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKS4KKysgICAgICovCisrICAgIEFW RGljdGlvbmFyeSAqbWV0YWRhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgZWxl bWVudHMgaW4gQVZTdHJlYW1Hcm91cC5zdHJlYW1zLgorKyAgICAgKgorKyAgICAgKiBTZXQgYnkg YXZmb3JtYXRfc3RyZWFtX2dyb3VwX2FkZF9zdHJlYW0oKSBtdXN0IG5vdCBiZSBtb2RpZmllZCBi eSBhbnkgb3RoZXIgY29kZS4KKysgICAgICovCisrICAgIHVuc2lnbmVkIGludCBuYl9zdHJlYW1z OworKworKyAgICAvKioKKysgICAgICogQSBsaXN0IG9mIHN0cmVhbXMgaW4gdGhlIGdyb3VwLiBO ZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoCisrICAgICAqIGF2Zm9ybWF0X3N0cmVhbV9ncm91 cF9hZGRfc3RyZWFtKCkuCisrICAgICAqCisrICAgICAqIC0gZGVtdXhpbmc6IGVudHJpZXMgYXJl IGNyZWF0ZWQgYnkgbGliYXZmb3JtYXQgb24gZ3JvdXAgY3JlYXRpb24uCisrICAgICAqICAgICAg ICAgICAgIElmIEFWRk1UQ1RYX05PSEVBREVSIGlzIHNldCBpbiBjdHhfZmxhZ3MsIHRoZW4gbmV3 IGVudHJpZXMgbWF5IGFsc28KKysgICAgICogICAgICAgICAgICAgYXBwZWFyIGluIGF2X3JlYWRf ZnJhbWUoKS4KKysgICAgICogLSBtdXhpbmc6IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgdGhlIHVz ZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLgorKyAgICAgKgorKyAgICAgKiBGcmVl ZCBieSBsaWJhdmZvcm1hdCBpbiBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKS4KKysgICAgICovCisr ICAgIEFWU3RyZWFtICoqc3RyZWFtczsKKysKKysgICAgLyoqCisrICAgICAqIFN0cmVhbSBncm91 cCBkaXNwb3NpdGlvbiAtIGEgY29tYmluYXRpb24gb2YgQVZfRElTUE9TSVRJT05fKiBmbGFncy4K KysgICAgICogVGhpcyBmaWVsZCBjdXJyZW50bHkgYXBwbGllcyB0byBhbGwgZGVmaW5lZCBBVlN0 cmVhbUdyb3VwUGFyYW1zVHlwZS4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5 IGxpYmF2Zm9ybWF0IHdoZW4gY3JlYXRpbmcgdGhlIGdyb3VwIG9yIGluCisrICAgICAqICAgICAg ICAgICAgIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oKS4KKysgICAgICogLSBtdXhpbmc6IG1h eSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisr ICAgICAqLworKyAgICBpbnQgZGlzcG9zaXRpb247CisrfSBBVlN0cmVhbUdyb3VwOworKworK3N0 cnVjdCBBVkNvZGVjUGFyc2VyQ29udGV4dCAqYXZfc3RyZWFtX2dldF9wYXJzZXIoY29uc3QgQVZT dHJlYW0gKnMpOworKworKyNkZWZpbmUgQVZfUFJPR1JBTV9SVU5OSU5HIDEKKysKKysvKioKKysg KiBOZXcgZmllbGRzIGNhbiBiZSBhZGRlZCB0byB0aGUgZW5kIHdpdGggbWlub3IgdmVyc2lvbiBi dW1wcy4KKysgKiBSZW1vdmFsLCByZW9yZGVyaW5nIGFuZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGZp ZWxkcyByZXF1aXJlIGEgbWFqb3IKKysgKiB2ZXJzaW9uIGJ1bXAuCisrICogc2l6ZW9mKEFWUHJv Z3JhbSkgbXVzdCBub3QgYmUgdXNlZCBvdXRzaWRlIGxpYmF2Ki4KKysgKi8KKyt0eXBlZGVmIHN0 cnVjdCBBVlByb2dyYW0geworKyAgICBpbnQgICAgICAgICAgICBpZDsKKysgICAgaW50ICAgICAg ICAgICAgZmxhZ3M7CisrICAgIGVudW0gQVZEaXNjYXJkIGRpc2NhcmQ7ICAgICAgICAvLy88IHNl bGVjdHMgd2hpY2ggcHJvZ3JhbSB0byBkaXNjYXJkIGFuZCB3aGljaCB0byBmZWVkIHRvIHRoZSBj YWxsZXIKKysgICAgdW5zaWduZWQgaW50ICAgKnN0cmVhbV9pbmRleDsKKysgICAgdW5zaWduZWQg aW50ICAgbmJfc3RyZWFtX2luZGV4ZXM7CisrICAgIEFWRGljdGlvbmFyeSAqbWV0YWRhdGE7Cisr CisrICAgIGludCBwcm9ncmFtX251bTsKKysgICAgaW50IHBtdF9waWQ7CisrICAgIGludCBwY3Jf cGlkOworKyAgICBpbnQgcG10X3ZlcnNpb247CisrCisrICAgIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAgICAgKiBB bGwgZmllbGRzIGJlbG93IHRoaXMgbGluZSBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEku IFRoZXkKKysgICAgICogbWF5IG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgbGliYXZmb3JtYXQgYW5k IGNhbiBiZSBjaGFuZ2VkIGFuZAorKyAgICAgKiByZW1vdmVkIGF0IHdpbGwuCisrICAgICAqIE5l dyBwdWJsaWMgZmllbGRzIHNob3VsZCBiZSBhZGRlZCByaWdodCBhYm92ZS4KKysgICAgICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisrICAgICAqLworKyAgICBpbnQ2NF90IHN0YXJ0X3RpbWU7CisrICAgIGludDY0X3QgZW5k X3RpbWU7CisrCisrICAgIGludDY0X3QgcHRzX3dyYXBfcmVmZXJlbmNlOyAgICAvLy88IHJlZmVy ZW5jZSBkdHMgZm9yIHdyYXAgZGV0ZWN0aW9uCisrICAgIGludCBwdHNfd3JhcF9iZWhhdmlvcjsg ICAgICAgICAvLy88IGJlaGF2aW9yIG9uIHdyYXAgZGV0ZWN0aW9uCisrfSBBVlByb2dyYW07Cisr CisrI2RlZmluZSBBVkZNVENUWF9OT0hFQURFUiAgICAgIDB4MDAwMSAvKio8IHNpZ25hbCB0aGF0 IG5vIGhlYWRlciBpcyBwcmVzZW50CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3RyZWFtcyBhcmUgYWRkZWQgZHluYW1pY2FsbHkpICovCisrI2RlZmluZSBBVkZN VENUWF9VTlNFRUtBQkxFICAgIDB4MDAwMiAvKio8IHNpZ25hbCB0aGF0IHRoZSBzdHJlYW0gaXMg ZGVmaW5pdGVseQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90 IHNlZWthYmxlLCBhbmQgYXR0ZW1wdHMgdG8gY2FsbCB0aGUKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZWsgZnVuY3Rpb24gd2lsbCBmYWlsLiBGb3Igc29tZQor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBwcm90b2Nv bHMgKGUuZy4gSExTKSwgdGhpcyBjYW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYW5nZSBkeW5hbWljYWxseSBhdCBydW50aW1lLiAqLworKworK3R5cGVkZWYg c3RydWN0IEFWQ2hhcHRlciB7CisrICAgIGludDY0X3QgaWQ7ICAgICAgICAgICAgIC8vLzwgdW5p cXVlIElEIHRvIGlkZW50aWZ5IHRoZSBjaGFwdGVyCisrICAgIEFWUmF0aW9uYWwgdGltZV9iYXNl OyAgIC8vLzwgdGltZSBiYXNlIGluIHdoaWNoIHRoZSBzdGFydC9lbmQgdGltZXN0YW1wcyBhcmUg c3BlY2lmaWVkCisrICAgIGludDY0X3Qgc3RhcnQsIGVuZDsgICAgIC8vLzwgY2hhcHRlciBzdGFy dC9lbmQgdGltZSBpbiB0aW1lX2Jhc2UgdW5pdHMKKysgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0 YTsKKyt9IEFWQ2hhcHRlcjsKKysKKysKKysvKioKKysgKiBDYWxsYmFjayB1c2VkIGJ5IGRldmlj ZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBhcHBsaWNhdGlvbi4KKysgKi8KKyt0eXBlZGVmIGludCAo KmF2X2Zvcm1hdF9jb250cm9sX21lc3NhZ2UpKHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMsIGlu dCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq ZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSk7CisrCisrdHlwZWRlZiBpbnQgKCpBVk9wZW5DYWxsYmFj aykoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcywgQVZJT0NvbnRleHQgKipwYiwgY29uc3QgY2hh ciAqdXJsLCBpbnQgZmxhZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QVZJT0ludGVycnVwdENCICppbnRfY2IsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOworKworKy8q KgorKyAqIFRoZSBkdXJhdGlvbiBvZiBhIHZpZGVvIGNhbiBiZSBlc3RpbWF0ZWQgdGhyb3VnaCB2 YXJpb3VzIHdheXMsIGFuZCB0aGlzIGVudW0gY2FuIGJlIHVzZWQKKysgKiB0byBrbm93IGhvdyB0 aGUgZHVyYXRpb24gd2FzIGVzdGltYXRlZC4KKysgKi8KKytlbnVtIEFWRHVyYXRpb25Fc3RpbWF0 aW9uTWV0aG9kIHsKKysgICAgQVZGTVRfRFVSQVRJT05fRlJPTV9QVFMsICAgIC8vLzwgRHVyYXRp b24gYWNjdXJhdGVseSBlc3RpbWF0ZWQgZnJvbSBQVFNlcworKyAgICBBVkZNVF9EVVJBVElPTl9G Uk9NX1NUUkVBTSwgLy8vPCBEdXJhdGlvbiBlc3RpbWF0ZWQgZnJvbSBhIHN0cmVhbSB3aXRoIGEg a25vd24gZHVyYXRpb24KKysgICAgQVZGTVRfRFVSQVRJT05fRlJPTV9CSVRSQVRFIC8vLzwgRHVy YXRpb24gZXN0aW1hdGVkIGZyb20gYml0cmF0ZSAobGVzcyBhY2N1cmF0ZSkKKyt9OworKworKy8q KgorKyAqIEZvcm1hdCBJL08gY29udGV4dC4KKysgKiBOZXcgZmllbGRzIGNhbiBiZSBhZGRlZCB0 byB0aGUgZW5kIHdpdGggbWlub3IgdmVyc2lvbiBidW1wcy4KKysgKiBSZW1vdmFsLCByZW9yZGVy aW5nIGFuZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGZpZWxkcyByZXF1aXJlIGEgbWFqb3IKKysgKiB2 ZXJzaW9uIGJ1bXAuCisrICogc2l6ZW9mKEFWRm9ybWF0Q29udGV4dCkgbXVzdCBub3QgYmUgdXNl ZCBvdXRzaWRlIGxpYmF2KiwgdXNlCisrICogYXZmb3JtYXRfYWxsb2NfY29udGV4dCgpIHRvIGNy ZWF0ZSBhbiBBVkZvcm1hdENvbnRleHQuCisrICoKKysgKiBGaWVsZHMgY2FuIGJlIGFjY2Vzc2Vk IHRocm91Z2ggQVZPcHRpb25zIChhdl9vcHQqKSwKKysgKiB0aGUgbmFtZSBzdHJpbmcgdXNlZCBt YXRjaGVzIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgbmFtZSBhbmQKKysg KiBjYW4gYmUgZm91bmQgaW4gbGliYXZmb3JtYXQvb3B0aW9uc190YWJsZS5oLgorKyAqIFRoZSBB Vk9wdGlvbi9jb21tYW5kIGxpbmUgcGFyYW1ldGVyIG5hbWVzIGRpZmZlciBpbiBzb21lIGNhc2Vz IGZyb20gdGhlIEMKKysgKiBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMgZm9yIGhpc3RvcmljIHJlYXNv bnMgb3IgYnJldml0eS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkZvcm1hdENvbnRleHQgewor KyAgICAvKioKKysgICAgICogQSBjbGFzcyBmb3IgbG9nZ2luZyBhbmQgQHJlZiBhdm9wdGlvbnMu IFNldCBieSBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCkuCisrICAgICAqIEV4cG9ydHMgKGRlKW11 eGVyIHByaXZhdGUgb3B0aW9ucyBpZiB0aGV5IGV4aXN0LgorKyAgICAgKi8KKysgICAgY29uc3Qg QVZDbGFzcyAqYXZfY2xhc3M7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgaW5wdXQgY29udGFp bmVyIGZvcm1hdC4KKysgICAgICoKKysgICAgICogRGVtdXhpbmcgb25seSwgc2V0IGJ5IGF2Zm9y bWF0X29wZW5faW5wdXQoKS4KKysgICAgICovCisrICAgIGNvbnN0IHN0cnVjdCBBVklucHV0Rm9y bWF0ICppZm9ybWF0OworKworKyAgICAvKioKKysgICAgICogVGhlIG91dHB1dCBjb250YWluZXIg Zm9ybWF0LgorKyAgICAgKgorKyAgICAgKiBNdXhpbmcgb25seSwgbXVzdCBiZSBzZXQgYnkgdGhl IGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqLworKyAgICBj b25zdCBzdHJ1Y3QgQVZPdXRwdXRGb3JtYXQgKm9mb3JtYXQ7CisrCisrICAgIC8qKgorKyAgICAg KiBGb3JtYXQgcHJpdmF0ZSBkYXRhLiBUaGlzIGlzIGFuIEFWT3B0aW9ucy1lbmFibGVkIHN0cnVj dAorKyAgICAgKiBpZiBhbmQgb25seSBpZiBpZm9ybWF0L29mb3JtYXQucHJpdl9jbGFzcyBpcyBu b3QgTlVMTC4KKysgICAgICoKKysgICAgICogLSBtdXhpbmc6IHNldCBieSBhdmZvcm1hdF93cml0 ZV9oZWFkZXIoKQorKyAgICAgKiAtIGRlbXV4aW5nOiBzZXQgYnkgYXZmb3JtYXRfb3Blbl9pbnB1 dCgpCisrICAgICAqLworKyAgICB2b2lkICpwcml2X2RhdGE7CisrCisrICAgIC8qKgorKyAgICAg KiBJL08gY29udGV4dC4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogZWl0aGVyIHNldCBi eSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpICh0aGVuCisrICAgICAqICAg ICAgICAgICAgIHRoZSB1c2VyIG11c3QgY2xvc2UgaXQgbWFudWFsbHkpIG9yIHNldCBieSBhdmZv cm1hdF9vcGVuX2lucHV0KCkuCisrICAgICAqIC0gbXV4aW5nOiBzZXQgYnkgdGhlIHVzZXIgYmVm b3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLiBUaGUgY2FsbGVyIG11c3QKKysgICAgICogICAg ICAgICAgIHRha2UgY2FyZSBvZiBjbG9zaW5nIC8gZnJlZWluZyB0aGUgSU8gY29udGV4dC4KKysg ICAgICoKKysgICAgICogRG8gTk9UIHNldCB0aGlzIGZpZWxkIGlmIEFWRk1UX05PRklMRSBmbGFn IGlzIHNldCBpbgorKyAgICAgKiBpZm9ybWF0L29mb3JtYXQuZmxhZ3MuIEluIHN1Y2ggYSBjYXNl LCB0aGUgKGRlKW11eGVyIHdpbGwgaGFuZGxlCisrICAgICAqIEkvTyBpbiBzb21lIG90aGVyIHdh eSBhbmQgdGhpcyBmaWVsZCB3aWxsIGJlIE5VTEwuCisrICAgICAqLworKyAgICBBVklPQ29udGV4 dCAqcGI7CisrCisrICAgIC8qIHN0cmVhbSBpbmZvICovCisrICAgIC8qKgorKyAgICAgKiBGbGFn cyBzaWduYWxsaW5nIHN0cmVhbSBwcm9wZXJ0aWVzLiBBIGNvbWJpbmF0aW9uIG9mIEFWRk1UQ1RY XyouCisrICAgICAqIFNldCBieSBsaWJhdmZvcm1hdC4KKysgICAgICovCisrICAgIGludCBjdHhf ZmxhZ3M7CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gQVZGb3Jt YXRDb250ZXh0LnN0cmVhbXMuCisrICAgICAqCisrICAgICAqIFNldCBieSBhdmZvcm1hdF9uZXdf c3RyZWFtKCksIG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IGFueSBvdGhlciBjb2RlLgorKyAgICAg Ki8KKysgICAgdW5zaWduZWQgaW50IG5iX3N0cmVhbXM7CisrICAgIC8qKgorKyAgICAgKiBBIGxp c3Qgb2YgYWxsIHN0cmVhbXMgaW4gdGhlIGZpbGUuIE5ldyBzdHJlYW1zIGFyZSBjcmVhdGVkIHdp dGgKKysgICAgICogYXZmb3JtYXRfbmV3X3N0cmVhbSgpLgorKyAgICAgKgorKyAgICAgKiAtIGRl bXV4aW5nOiBzdHJlYW1zIGFyZSBjcmVhdGVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X29w ZW5faW5wdXQoKS4KKysgICAgICogICAgICAgICAgICAgSWYgQVZGTVRDVFhfTk9IRUFERVIgaXMg c2V0IGluIGN0eF9mbGFncywgdGhlbiBuZXcgc3RyZWFtcyBtYXkgYWxzbworKyAgICAgKiAgICAg ICAgICAgICBhcHBlYXIgaW4gYXZfcmVhZF9mcmFtZSgpLgorKyAgICAgKiAtIG11eGluZzogc3Ry ZWFtcyBhcmUgY3JlYXRlZCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVy KCkuCisrICAgICAqCisrICAgICAqIEZyZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X2Zy ZWVfY29udGV4dCgpLgorKyAgICAgKi8KKysgICAgQVZTdHJlYW0gKipzdHJlYW1zOworKworKyAg ICAvKioKKysgICAgICogTnVtYmVyIG9mIGVsZW1lbnRzIGluIEFWRm9ybWF0Q29udGV4dC5zdHJl YW1fZ3JvdXBzLgorKyAgICAgKgorKyAgICAgKiBTZXQgYnkgYXZmb3JtYXRfc3RyZWFtX2dyb3Vw X2NyZWF0ZSgpLCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSBhbnkgb3RoZXIgY29kZS4KKysgICAg ICovCisrICAgIHVuc2lnbmVkIGludCBuYl9zdHJlYW1fZ3JvdXBzOworKyAgICAvKioKKysgICAg ICogQSBsaXN0IG9mIGFsbCBzdHJlYW0gZ3JvdXBzIGluIHRoZSBmaWxlLiBOZXcgZ3JvdXBzIGFy ZSBjcmVhdGVkIHdpdGgKKysgICAgICogYXZmb3JtYXRfc3RyZWFtX2dyb3VwX2NyZWF0ZSgpLCBh bmQgZmlsbGVkIHdpdGggYXZmb3JtYXRfc3RyZWFtX2dyb3VwX2FkZF9zdHJlYW0oKS4KKysgICAg ICoKKysgICAgICogLSBkZW11eGluZzogZ3JvdXBzIG1heSBiZSBjcmVhdGVkIGJ5IGxpYmF2Zm9y bWF0IGluIGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KKysgICAgICogICAgICAgICAgICAgSWYgQVZG TVRDVFhfTk9IRUFERVIgaXMgc2V0IGluIGN0eF9mbGFncywgdGhlbiBuZXcgZ3JvdXBzIG1heSBh bHNvCisrICAgICAqICAgICAgICAgICAgIGFwcGVhciBpbiBhdl9yZWFkX2ZyYW1lKCkuCisrICAg ICAqIC0gbXV4aW5nOiBncm91cHMgbWF5IGJlIGNyZWF0ZWQgYnkgdGhlIHVzZXIgYmVmb3JlIGF2 Zm9ybWF0X3dyaXRlX2hlYWRlcigpLgorKyAgICAgKgorKyAgICAgKiBGcmVlZCBieSBsaWJhdmZv cm1hdCBpbiBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKS4KKysgICAgICovCisrICAgIEFWU3RyZWFt R3JvdXAgKipzdHJlYW1fZ3JvdXBzOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGNo YXB0ZXJzIGluIEFWQ2hhcHRlciBhcnJheS4KKysgICAgICogV2hlbiBtdXhpbmcsIGNoYXB0ZXJz IGFyZSBub3JtYWxseSB3cml0dGVuIGluIHRoZSBmaWxlIGhlYWRlciwKKysgICAgICogc28gbmJf Y2hhcHRlcnMgc2hvdWxkIG5vcm1hbGx5IGJlIGluaXRpYWxpemVkIGJlZm9yZSB3cml0ZV9oZWFk ZXIKKysgICAgICogaXMgY2FsbGVkLiBTb21lIG11eGVycyAoZS5nLiBtb3YgYW5kIG1rdikgY2Fu IGFsc28gd3JpdGUgY2hhcHRlcnMKKysgICAgICogaW4gdGhlIHRyYWlsZXIuICBUbyB3cml0ZSBj aGFwdGVycyBpbiB0aGUgdHJhaWxlciwgbmJfY2hhcHRlcnMKKysgICAgICogbXVzdCBiZSB6ZXJv IHdoZW4gd3JpdGVfaGVhZGVyIGlzIGNhbGxlZCBhbmQgbm9uLXplcm8gd2hlbgorKyAgICAgKiB3 cml0ZV90cmFpbGVyIGlzIGNhbGxlZC4KKysgICAgICogLSBtdXhpbmc6IHNldCBieSB1c2VyCisr ICAgICAqIC0gZGVtdXhpbmc6IHNldCBieSBsaWJhdmZvcm1hdAorKyAgICAgKi8KKysgICAgdW5z aWduZWQgaW50IG5iX2NoYXB0ZXJzOworKyAgICBBVkNoYXB0ZXIgKipjaGFwdGVyczsKKysKKysg ICAgLyoqCisrICAgICAqIGlucHV0IG9yIG91dHB1dCBVUkwuIFVubGlrZSB0aGUgb2xkIGZpbGVu YW1lIGZpZWxkLCB0aGlzIGZpZWxkIGhhcyBubworKyAgICAgKiBsZW5ndGggcmVzdHJpY3Rpb24u CisrICAgICAqCisrICAgICAqIC0gZGVtdXhpbmc6IHNldCBieSBhdmZvcm1hdF9vcGVuX2lucHV0 KCksIGluaXRpYWxpemVkIHRvIGFuIGVtcHR5CisrICAgICAqICAgICAgICAgICAgIHN0cmluZyBp ZiB1cmwgcGFyYW1ldGVyIHdhcyBOVUxMIGluIGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KKysgICAg ICogLSBtdXhpbmc6IG1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgY2FsbGluZyBhdmZv cm1hdF93cml0ZV9oZWFkZXIoKQorKyAgICAgKiAgICAgICAgICAgKG9yIGF2Zm9ybWF0X2luaXRf b3V0cHV0KCkgaWYgdGhhdCBpcyBjYWxsZWQgZmlyc3QpIHRvIGEgc3RyaW5nCisrICAgICAqICAg ICAgICAgICB3aGljaCBpcyBmcmVlYWJsZSBieSBhdl9mcmVlKCkuIFNldCB0byBhbiBlbXB0eSBz dHJpbmcgaWYgaXQKKysgICAgICogICAgICAgICAgIHdhcyBOVUxMIGluIGF2Zm9ybWF0X2luaXRf b3V0cHV0KCkuCisrICAgICAqCisrICAgICAqIEZyZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9y bWF0X2ZyZWVfY29udGV4dCgpLgorKyAgICAgKi8KKysgICAgY2hhciAqdXJsOworKworKyAgICAv KioKKysgICAgICogUG9zaXRpb24gb2YgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBjb21wb25lbnQs IGluCisrICAgICAqIEFWX1RJTUVfQkFTRSBmcmFjdGlvbmFsIHNlY29uZHMuIE5FVkVSIHNldCB0 aGlzIHZhbHVlIGRpcmVjdGx5OgorKyAgICAgKiBJdCBpcyBkZWR1Y2VkIGZyb20gdGhlIEFWU3Ry ZWFtIHZhbHVlcy4KKysgICAgICoKKysgICAgICogRGVtdXhpbmcgb25seSwgc2V0IGJ5IGxpYmF2 Zm9ybWF0LgorKyAgICAgKi8KKysgICAgaW50NjRfdCBzdGFydF90aW1lOworKworKyAgICAvKioK KysgICAgICogRHVyYXRpb24gb2YgdGhlIHN0cmVhbSwgaW4gQVZfVElNRV9CQVNFIGZyYWN0aW9u YWwKKysgICAgICogc2Vjb25kcy4gT25seSBzZXQgdGhpcyB2YWx1ZSBpZiB5b3Uga25vdyBub25l IG9mIHRoZSBpbmRpdmlkdWFsIHN0cmVhbQorKyAgICAgKiBkdXJhdGlvbnMgYW5kIGFsc28gZG8g bm90IHNldCBhbnkgb2YgdGhlbS4gVGhpcyBpcyBkZWR1Y2VkIGZyb20gdGhlCisrICAgICAqIEFW U3RyZWFtIHZhbHVlcyBpZiBub3Qgc2V0LgorKyAgICAgKgorKyAgICAgKiBEZW11eGluZyBvbmx5 LCBzZXQgYnkgbGliYXZmb3JtYXQuCisrICAgICAqLworKyAgICBpbnQ2NF90IGR1cmF0aW9uOwor KworKyAgICAvKioKKysgICAgICogVG90YWwgc3RyZWFtIGJpdHJhdGUgaW4gYml0L3MsIDAgaWYg bm90CisrICAgICAqIGF2YWlsYWJsZS4gTmV2ZXIgc2V0IGl0IGRpcmVjdGx5IGlmIHRoZSBmaWxl X3NpemUgYW5kIHRoZQorKyAgICAgKiBkdXJhdGlvbiBhcmUga25vd24gYXMgRkZtcGVnIGNhbiBj b21wdXRlIGl0IGF1dG9tYXRpY2FsbHkuCisrICAgICAqLworKyAgICBpbnQ2NF90IGJpdF9yYXRl OworKworKyAgICB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemU7CisrICAgIGludCBtYXhfZGVsYXk7 CisrCisrICAgIC8qKgorKyAgICAgKiBGbGFncyBtb2RpZnlpbmcgdGhlIChkZSltdXhlciBiZWhh dmlvdXIuIEEgY29tYmluYXRpb24gb2YgQVZGTVRfRkxBR18qLgorKyAgICAgKiBTZXQgYnkgdGhl IHVzZXIgYmVmb3JlIGF2Zm9ybWF0X29wZW5faW5wdXQoKSAvIGF2Zm9ybWF0X3dyaXRlX2hlYWRl cigpLgorKyAgICAgKi8KKysgICAgaW50IGZsYWdzOworKyNkZWZpbmUgQVZGTVRfRkxBR19HRU5Q VFMgICAgICAgMHgwMDAxIC8vLzwgR2VuZXJhdGUgbWlzc2luZyBwdHMgZXZlbiBpZiBpdCByZXF1 aXJlcyBwYXJzaW5nIGZ1dHVyZSBmcmFtZXMuCisrI2RlZmluZSBBVkZNVF9GTEFHX0lHTklEWCAg ICAgICAweDAwMDIgLy8vPCBJZ25vcmUgaW5kZXguCisrI2RlZmluZSBBVkZNVF9GTEFHX05PTkJM T0NLICAgICAweDAwMDQgLy8vPCBEbyBub3QgYmxvY2sgd2hlbiByZWFkaW5nIHBhY2tldHMgZnJv bSBpbnB1dC4KKysjZGVmaW5lIEFWRk1UX0ZMQUdfSUdORFRTICAgICAgIDB4MDAwOCAvLy88IEln bm9yZSBEVFMgb24gZnJhbWVzIHRoYXQgY29udGFpbiBib3RoIERUUyAmIFBUUworKyNkZWZpbmUg QVZGTVRfRkxBR19OT0ZJTExJTiAgICAgMHgwMDEwIC8vLzwgRG8gbm90IGluZmVyIGFueSB2YWx1 ZXMgZnJvbSBvdGhlciB2YWx1ZXMsIGp1c3QgcmV0dXJuIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBj b250YWluZXIKKysjZGVmaW5lIEFWRk1UX0ZMQUdfTk9QQVJTRSAgICAgIDB4MDAyMCAvLy88IERv IG5vdCB1c2UgQVZQYXJzZXJzLCB5b3UgYWxzbyBtdXN0IHNldCBBVkZNVF9GTEFHX05PRklMTElO IGFzIHRoZSBmaWxsaW5nIGNvZGUgd29ya3Mgb24gZnJhbWVzIGFuZCBubyBwYXJzaW5nIC0+IG5v IGZyYW1lcy4gQWxzbyBzZWVraW5nIHRvIGZyYW1lcyBjYW4gbm90IHdvcmsgaWYgcGFyc2luZyB0 byBmaW5kIGZyYW1lIGJvdW5kYXJpZXMgaGFzIGJlZW4gZGlzYWJsZWQKKysjZGVmaW5lIEFWRk1U X0ZMQUdfTk9CVUZGRVIgICAgIDB4MDA0MCAvLy88IERvIG5vdCBidWZmZXIgZnJhbWVzIHdoZW4g cG9zc2libGUKKysjZGVmaW5lIEFWRk1UX0ZMQUdfQ1VTVE9NX0lPICAgIDB4MDA4MCAvLy88IFRo ZSBjYWxsZXIgaGFzIHN1cHBsaWVkIGEgY3VzdG9tIEFWSU9Db250ZXh0LCBkb24ndCBhdmlvX2Ns b3NlKCkgaXQuCisrI2RlZmluZSBBVkZNVF9GTEFHX0RJU0NBUkRfQ09SUlVQVCAgMHgwMTAwIC8v LzwgRGlzY2FyZCBmcmFtZXMgbWFya2VkIGNvcnJ1cHRlZAorKyNkZWZpbmUgQVZGTVRfRkxBR19G TFVTSF9QQUNLRVRTICAgIDB4MDIwMCAvLy88IEZsdXNoIHRoZSBBVklPQ29udGV4dCBldmVyeSBw YWNrZXQuCisrLyoqCisrICogV2hlbiBtdXhpbmcsIHRyeSB0byBhdm9pZCB3cml0aW5nIGFueSBy YW5kb20vdm9sYXRpbGUgZGF0YSB0byB0aGUgb3V0cHV0LgorKyAqIFRoaXMgaW5jbHVkZXMgYW55 IHJhbmRvbSBJRHMsIHJlYWwtdGltZSB0aW1lc3RhbXBzL2RhdGVzLCBtdXhlciB2ZXJzaW9uLCBl dGMuCisrICoKKysgKiBUaGlzIGZsYWcgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLgor KyAqLworKyNkZWZpbmUgQVZGTVRfRkxBR19CSVRFWEFDVCAgICAgICAgIDB4MDQwMAorKyNkZWZp bmUgQVZGTVRfRkxBR19TT1JUX0RUUyAgICAweDEwMDAwIC8vLzwgdHJ5IHRvIGludGVybGVhdmUg b3V0cHV0dGVkIHBhY2tldHMgYnkgZHRzICh1c2luZyB0aGlzIGZsYWcgY2FuIHNsb3cgZGVtdXhp bmcgZG93bikKKysjZGVmaW5lIEFWRk1UX0ZMQUdfRkFTVF9TRUVLICAgMHg4MDAwMCAvLy88IEVu YWJsZSBmYXN0LCBidXQgaW5hY2N1cmF0ZSBzZWVrcyBmb3Igc29tZSBmb3JtYXRzCisrI2RlZmlu ZSBBVkZNVF9GTEFHX0FVVE9fQlNGICAgMHgyMDAwMDAgLy8vPCBBZGQgYml0c3RyZWFtIGZpbHRl cnMgYXMgcmVxdWVzdGVkIGJ5IHRoZSBtdXhlcgorKworKyAgICAvKioKKysgICAgICogTWF4aW11 bSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIGlucHV0IGluIG9yZGVyIHRvIGRldGVybWluZSBz dHJlYW0KKysgICAgICogcHJvcGVydGllcy4gVXNlZCB3aGVuIHJlYWRpbmcgdGhlIGdsb2JhbCBo ZWFkZXIgYW5kIGluCisrICAgICAqIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oKS4KKysgICAg ICoKKysgICAgICogRGVtdXhpbmcgb25seSwgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9y bWF0X29wZW5faW5wdXQoKS4KKysgICAgICoKKysgICAgICogQG5vdGUgdGhpcyBpcyBcZSBub3Qg IHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSBccmVmIEFWSW5wdXRGb3JtYXQKKysgICAgICogICAg ICAgImlucHV0IGZvcm1hdCIKKysgICAgICogQHNlZSBmb3JtYXRfcHJvYmVzaXplCisrICAgICAq LworKyAgICBpbnQ2NF90IHByb2Jlc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIE1heGltdW0g ZHVyYXRpb24gKGluIEFWX1RJTUVfQkFTRSB1bml0cykgb2YgdGhlIGRhdGEgcmVhZAorKyAgICAg KiBmcm9tIGlucHV0IGluIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oKS4KKysgICAgICogRGVt dXhpbmcgb25seSwgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9ybWF0X2ZpbmRfc3RyZWFt X2luZm8oKS4KKysgICAgICogQ2FuIGJlIHNldCB0byAwIHRvIGxldCBhdmZvcm1hdCBjaG9vc2Ug dXNpbmcgYSBoZXVyaXN0aWMuCisrICAgICAqLworKyAgICBpbnQ2NF90IG1heF9hbmFseXplX2R1 cmF0aW9uOworKworKyAgICBjb25zdCB1aW50OF90ICprZXk7CisrICAgIGludCBrZXlsZW47Cisr CisrICAgIHVuc2lnbmVkIGludCBuYl9wcm9ncmFtczsKKysgICAgQVZQcm9ncmFtICoqcHJvZ3Jh bXM7CisrCisrICAgIC8qKgorKyAgICAgKiBGb3JjZWQgdmlkZW8gY29kZWNfaWQuCisrICAgICAq IERlbXV4aW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAgIGVudW0gQVZDb2RlY0lEIHZp ZGVvX2NvZGVjX2lkOworKworKyAgICAvKioKKysgICAgICogRm9yY2VkIGF1ZGlvIGNvZGVjX2lk LgorKyAgICAgKiBEZW11eGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBlbnVtIEFW Q29kZWNJRCBhdWRpb19jb2RlY19pZDsKKysKKysgICAgLyoqCisrICAgICAqIEZvcmNlZCBzdWJ0 aXRsZSBjb2RlY19pZC4KKysgICAgICogRGVtdXhpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8K KysgICAgZW51bSBBVkNvZGVjSUQgc3VidGl0bGVfY29kZWNfaWQ7CisrCisrICAgIC8qKgorKyAg ICAgKiBGb3JjZWQgRGF0YSBjb2RlY19pZC4KKysgICAgICogRGVtdXhpbmc6IFNldCBieSB1c2Vy LgorKyAgICAgKi8KKysgICAgZW51bSBBVkNvZGVjSUQgZGF0YV9jb2RlY19pZDsKKysKKysgICAg LyoqCisrICAgICAqIE1ldGFkYXRhIHRoYXQgYXBwbGllcyB0byB0aGUgd2hvbGUgZmlsZS4KKysg ICAgICoKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0 X29wZW5faW5wdXQoKQorKyAgICAgKiAtIG11eGluZzogbWF5IGJlIHNldCBieSB0aGUgY2FsbGVy IGJlZm9yZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKQorKyAgICAgKgorKyAgICAgKiBGcmVlZCBi eSBsaWJhdmZvcm1hdCBpbiBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKS4KKysgICAgICovCisrICAg IEFWRGljdGlvbmFyeSAqbWV0YWRhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBTdGFydCB0aW1l IG9mIHRoZSBzdHJlYW0gaW4gcmVhbCB3b3JsZCB0aW1lLCBpbiBtaWNyb3NlY29uZHMKKysgICAg ICogc2luY2UgdGhlIFVuaXggZXBvY2ggKDAwOjAwIDFzdCBKYW51YXJ5IDE5NzApLiBUaGF0IGlz LCBwdHM9MCBpbiB0aGUKKysgICAgICogc3RyZWFtIHdhcyBjYXB0dXJlZCBhdCB0aGlzIHJlYWwg d29ybGQgdGltZS4KKysgICAgICogLSBtdXhpbmc6IFNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBh dmZvcm1hdF93cml0ZV9oZWFkZXIoKS4gSWYgc2V0IHRvCisrICAgICAqICAgICAgICAgICBlaXRo ZXIgMCBvciBBVl9OT1BUU19WQUxVRSwgdGhlbiB0aGUgY3VycmVudCB3YWxsLXRpbWUgd2lsbAor KyAgICAgKiAgICAgICAgICAgYmUgdXNlZC4KKysgICAgICogLSBkZW11eGluZzogU2V0IGJ5IGxp YmF2Zm9ybWF0LiBBVl9OT1BUU19WQUxVRSBpZiB1bmtub3duLiBOb3RlIHRoYXQKKysgICAgICog ICAgICAgICAgICAgdGhlIHZhbHVlIG1heSBiZWNvbWUga25vd24gYWZ0ZXIgc29tZSBudW1iZXIg b2YgZnJhbWVzCisrICAgICAqICAgICAgICAgICAgIGhhdmUgYmVlbiByZWNlaXZlZC4KKysgICAg ICovCisrICAgIGludDY0X3Qgc3RhcnRfdGltZV9yZWFsdGltZTsKKysKKysgICAgLyoqCisrICAg ICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSBmcmFtZXJh dGUgaW4KKysgICAgICogYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpLgorKyAgICAgKiBEZW11 eGluZyBvbmx5LCBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfZmluZF9zdHJlYW1f aW5mbygpLgorKyAgICAgKi8KKysgICAgaW50IGZwc19wcm9iZV9zaXplOworKworKyAgICAvKioK KysgICAgICogRXJyb3IgcmVjb2duaXRpb247IGhpZ2hlciB2YWx1ZXMgd2lsbCBkZXRlY3QgbW9y ZSBlcnJvcnMgYnV0IG1heQorKyAgICAgKiBtaXNkZXRlY3Qgc29tZSBtb3JlIG9yIGxlc3MgdmFs aWQgcGFydHMgYXMgZXJyb3JzLgorKyAgICAgKiBEZW11eGluZyBvbmx5LCBzZXQgYnkgdGhlIGNh bGxlciBiZWZvcmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAgICAgKi8KKysgICAgaW50IGVy cm9yX3JlY29nbml0aW9uOworKworKyAgICAvKioKKysgICAgICogQ3VzdG9tIGludGVycnVwdCBj YWxsYmFja3MgZm9yIHRoZSBJL08gbGF5ZXIuCisrICAgICAqCisrICAgICAqIGRlbXV4aW5nOiBz ZXQgYnkgdGhlIHVzZXIgYmVmb3JlIGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KKysgICAgICogbXV4 aW5nOiBzZXQgYnkgdGhlIHVzZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpCisrICAg ICAqIChtYWlubHkgdXNlZnVsIGZvciBBVkZNVF9OT0ZJTEUgZm9ybWF0cykuIFRoZSBjYWxsYmFj aworKyAgICAgKiBzaG91bGQgYWxzbyBiZSBwYXNzZWQgdG8gYXZpb19vcGVuMigpIGlmIGl0J3Mg dXNlZCB0bworKyAgICAgKiBvcGVuIHRoZSBmaWxlLgorKyAgICAgKi8KKysgICAgQVZJT0ludGVy cnVwdENCIGludGVycnVwdF9jYWxsYmFjazsKKysKKysgICAgLyoqCisrICAgICAqIEZsYWdzIHRv IGVuYWJsZSBkZWJ1Z2dpbmcuCisrICAgICAqLworKyAgICBpbnQgZGVidWc7CisrI2RlZmluZSBB Vl9GREVCVUdfVFMgICAgICAgIDB4MDAwMQorKyNkZWZpbmUgQVZfRkRFQlVHX0lEM1YyICAgICAw eDAwMDIKKysKKysjaWYgRkZfQVBJX0ZERUJVR19UUworKyNkZWZpbmUgRkZfRkRFQlVHX1RTIEFW X0ZERUJVR19UUworKyNlbmRpZgorKworKyAgICAvKioKKysgICAgICogVGhlIG1heGltdW0gbnVt YmVyIG9mIHN0cmVhbXMuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRl Y29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgaW50IG1heF9zdHJlYW1zOworKwor KyAgICAvKioKKysgICAgICogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIHRvIHVz ZSBmb3IgdGhlIGluZGV4IG9mIGVhY2ggc3RyZWFtLgorKyAgICAgKiBJZiB0aGUgaW5kZXggZXhj ZWVkcyB0aGlzIHNpemUsIGVudHJpZXMgd2lsbCBiZSBkaXNjYXJkZWQgYXMKKysgICAgICogbmVl ZGVkIHRvIG1haW50YWluIGEgc21hbGxlciBzaXplLiBUaGlzIGNhbiBsZWFkIHRvIHNsb3dlciBv ciBsZXNzCisrICAgICAqIGFjY3VyYXRlIHNlZWtpbmcgKGRlcGVuZHMgb24gZGVtdXhlcikuCisr ICAgICAqIERlbXV4ZXJzIGZvciB3aGljaCBhIGZ1bGwgaW4tbWVtb3J5IGluZGV4IGlzIG1hbmRh dG9yeSB3aWxsIGlnbm9yZQorKyAgICAgKiB0aGlzLgorKyAgICAgKiAtIG11eGluZzogdW51c2Vk CisrICAgICAqIC0gZGVtdXhpbmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICB1bnNpZ25l ZCBpbnQgbWF4X2luZGV4X3NpemU7CisrCisrICAgIC8qKgorKyAgICAgKiBNYXhpbXVtIGFtb3Vu dCBvZiBtZW1vcnkgaW4gYnl0ZXMgdG8gdXNlIGZvciBidWZmZXJpbmcgZnJhbWVzCisrICAgICAq IG9idGFpbmVkIGZyb20gcmVhbHRpbWUgY2FwdHVyZSBkZXZpY2VzLgorKyAgICAgKi8KKysgICAg dW5zaWduZWQgaW50IG1heF9waWN0dXJlX2J1ZmZlcjsKKysKKysgICAgLyoqCisrICAgICAqIE1h eGltdW0gYnVmZmVyaW5nIGR1cmF0aW9uIGZvciBpbnRlcmxlYXZpbmcuCisrICAgICAqCisrICAg ICAqIFRvIGVuc3VyZSBhbGwgdGhlIHN0cmVhbXMgYXJlIGludGVybGVhdmVkIGNvcnJlY3RseSwK KysgICAgICogYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUoKSB3aWxsIHdhaXQgdW50aWwgaXQg aGFzIGF0IGxlYXN0IG9uZSBwYWNrZXQKKysgICAgICogZm9yIGVhY2ggc3RyZWFtIGJlZm9yZSBh Y3R1YWxseSB3cml0aW5nIGFueSBwYWNrZXRzIHRvIHRoZSBvdXRwdXQgZmlsZS4KKysgICAgICog V2hlbiBzb21lIHN0cmVhbXMgYXJlICJzcGFyc2UiIChpLmUuIHRoZXJlIGFyZSBsYXJnZSBnYXBz IGJldHdlZW4KKysgICAgICogc3VjY2Vzc2l2ZSBwYWNrZXRzKSwgdGhpcyBjYW4gcmVzdWx0IGlu IGV4Y2Vzc2l2ZSBidWZmZXJpbmcuCisrICAgICAqCisrICAgICAqIFRoaXMgZmllbGQgc3BlY2lm aWVzIHRoZSBtYXhpbXVtIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZXN0YW1wcyBvZiB0aGUK KysgICAgICogZmlyc3QgYW5kIHRoZSBsYXN0IHBhY2tldCBpbiB0aGUgbXV4aW5nIHF1ZXVlLCBh Ym92ZSB3aGljaCBsaWJhdmZvcm1hdAorKyAgICAgKiB3aWxsIG91dHB1dCBhIHBhY2tldCByZWdh cmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFzIHF1ZXVlZCBhIHBhY2tldCBmb3IgYWxsCisrICAgICAq IHRoZSBzdHJlYW1zLgorKyAgICAgKgorKyAgICAgKiBNdXhpbmcgb25seSwgc2V0IGJ5IHRoZSBj YWxsZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLgorKyAgICAgKi8KKysgICAgaW50 NjRfdCBtYXhfaW50ZXJsZWF2ZV9kZWx0YTsKKysKKysgICAgLyoqCisrICAgICAqIE1heGltdW0g bnVtYmVyIG9mIHBhY2tldHMgdG8gcmVhZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmlyc3QgdGlt ZXN0YW1wLgorKyAgICAgKiBEZWNvZGluZyBvbmx5LgorKyAgICAgKi8KKysgICAgaW50IG1heF90 c19wcm9iZTsKKysKKysgICAgLyoqCisrICAgICAqIE1heCBjaHVuayB0aW1lIGluIG1pY3Jvc2Vj b25kcy4KKysgICAgICogTm90ZSwgbm90IGFsbCBmb3JtYXRzIHN1cHBvcnQgdGhpcyBhbmQgdW5w cmVkaWN0YWJsZSB0aGluZ3MgbWF5IGhhcHBlbiBpZiBpdCBpcyB1c2VkIHdoZW4gbm90IHN1cHBv cnRlZC4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGlu ZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbWF4X2NodW5rX2R1cmF0aW9uOworKworKyAg ICAvKioKKysgICAgICogTWF4IGNodW5rIHNpemUgaW4gYnl0ZXMKKysgICAgICogTm90ZSwgbm90 IGFsbCBmb3JtYXRzIHN1cHBvcnQgdGhpcyBhbmQgdW5wcmVkaWN0YWJsZSB0aGluZ3MgbWF5IGhh cHBlbiBpZiBpdCBpcyB1c2VkIHdoZW4gbm90IHN1cHBvcnRlZC4KKysgICAgICogLSBlbmNvZGlu ZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAg ICBpbnQgbWF4X2NodW5rX3NpemU7CisrCisrICAgIC8qKgorKyAgICAgKiBNYXhpbXVtIG51bWJl ciBvZiBwYWNrZXRzIHRoYXQgY2FuIGJlIHByb2JlZAorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVz ZWQKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGludCBt YXhfcHJvYmVfcGFja2V0czsKKysKKysgICAgLyoqCisrICAgICAqIEFsbG93IG5vbi1zdGFuZGFy ZCBhbmQgZXhwZXJpbWVudGFsIGV4dGVuc2lvbgorKyAgICAgKiBAc2VlIEFWQ29kZWNDb250ZXh0 LnN0cmljdF9zdGRfY29tcGxpYW5jZQorKyAgICAgKi8KKysgICAgaW50IHN0cmljdF9zdGRfY29t cGxpYW5jZTsKKysKKysgICAgLyoqCisrICAgICAqIEZsYWdzIGluZGljYXRpbmcgZXZlbnRzIGhh cHBlbmluZyBvbiB0aGUgZmlsZSwgYSBjb21iaW5hdGlvbiBvZgorKyAgICAgKiBBVkZNVF9FVkVO VF9GTEFHXyouCisrICAgICAqCisrICAgICAqIC0gZGVtdXhpbmc6IG1heSBiZSBzZXQgYnkgdGhl IGRlbXV4ZXIgaW4gYXZmb3JtYXRfb3Blbl9pbnB1dCgpLAorKyAgICAgKiAgIGF2Zm9ybWF0X2Zp bmRfc3RyZWFtX2luZm8oKSBhbmQgYXZfcmVhZF9mcmFtZSgpLiBGbGFncyBtdXN0IGJlIGNsZWFy ZWQKKysgICAgICogICBieSB0aGUgdXNlciBvbmNlIHRoZSBldmVudCBoYXMgYmVlbiBoYW5kbGVk LgorKyAgICAgKiAtIG11eGluZzogbWF5IGJlIHNldCBieSB0aGUgdXNlciBhZnRlciBhdmZvcm1h dF93cml0ZV9oZWFkZXIoKSB0bworKyAgICAgKiAgIGluZGljYXRlIGEgdXNlci10cmlnZ2VyZWQg ZXZlbnQuICBUaGUgbXV4ZXIgd2lsbCBjbGVhciB0aGUgZmxhZ3MgZm9yCisrICAgICAqICAgZXZl bnRzIGl0IGhhcyBoYW5kbGVkIGluIGF2X1tpbnRlcmxlYXZlZF1fd3JpdGVfZnJhbWUoKS4KKysg ICAgICovCisrICAgIGludCBldmVudF9mbGFnczsKKysvKioKKysgKiAtIGRlbXV4aW5nOiB0aGUg ZGVtdXhlciByZWFkIG5ldyBtZXRhZGF0YSBmcm9tIHRoZSBmaWxlIGFuZCB1cGRhdGVkCisrICog ICBBVkZvcm1hdENvbnRleHQubWV0YWRhdGEgYWNjb3JkaW5nbHkKKysgKiAtIG11eGluZzogdGhl IHVzZXIgdXBkYXRlZCBBVkZvcm1hdENvbnRleHQubWV0YWRhdGEgYW5kIHdpc2hlcyB0aGUgbXV4 ZXIgdG8KKysgKiAgIHdyaXRlIGl0IGludG8gdGhlIGZpbGUKKysgKi8KKysjZGVmaW5lIEFWRk1U X0VWRU5UX0ZMQUdfTUVUQURBVEFfVVBEQVRFRCAweDAwMDEKKysKKysKKysgICAgLyoqCisrICAg ICAqIEF2b2lkIG5lZ2F0aXZlIHRpbWVzdGFtcHMgZHVyaW5nIG11eGluZy4KKysgICAgICogQW55 IHZhbHVlIG9mIHRoZSBBVkZNVF9BVk9JRF9ORUdfVFNfKiBjb25zdGFudHMuCisrICAgICAqIE5v dGUsIHRoaXMgd29ya3MgYmV0dGVyIHdoZW4gdXNpbmcgYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJh bWUoKS4KKysgICAgICogLSBtdXhpbmc6IFNldCBieSB1c2VyCisrICAgICAqIC0gZGVtdXhpbmc6 IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IGF2b2lkX25lZ2F0aXZlX3RzOworKyNkZWZpbmUg QVZGTVRfQVZPSURfTkVHX1RTX0FVVE8gICAgICAgICAgICAgLTEgLy8vPCBFbmFibGVkIHdoZW4g cmVxdWlyZWQgYnkgdGFyZ2V0IGZvcm1hdAorKyNkZWZpbmUgQVZGTVRfQVZPSURfTkVHX1RTX0RJ U0FCTEVEICAgICAgICAgIDAgLy8vPCBEbyBub3Qgc2hpZnQgdGltZXN0YW1wcyBldmVuIHdoZW4g dGhleSBhcmUgbmVnYXRpdmUuCisrI2RlZmluZSBBVkZNVF9BVk9JRF9ORUdfVFNfTUFLRV9OT05f TkVHQVRJVkUgMSAvLy88IFNoaWZ0IHRpbWVzdGFtcHMgc28gdGhleSBhcmUgbm9uIG5lZ2F0aXZl CisrI2RlZmluZSBBVkZNVF9BVk9JRF9ORUdfVFNfTUFLRV9aRVJPICAgICAgICAgMiAvLy88IFNo aWZ0IHRpbWVzdGFtcHMgc28gdGhhdCB0aGV5IHN0YXJ0IGF0IDAKKysKKysgICAgLyoqCisrICAg ICAqIEF1ZGlvIHByZWxvYWQgaW4gbWljcm9zZWNvbmRzLgorKyAgICAgKiBOb3RlLCBub3QgYWxs IGZvcm1hdHMgc3VwcG9ydCB0aGlzIGFuZCB1bnByZWRpY3RhYmxlIHRoaW5ncyBtYXkgaGFwcGVu IGlmIGl0IGlzIHVzZWQgd2hlbiBub3Qgc3VwcG9ydGVkLgorKyAgICAgKiAtIGVuY29kaW5nOiBT ZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGlu dCBhdWRpb19wcmVsb2FkOworKworKyAgICAvKioKKysgICAgICogZm9yY2VzIHRoZSB1c2Ugb2Yg d2FsbGNsb2NrIHRpbWVzdGFtcHMgYXMgcHRzL2R0cyBvZiBwYWNrZXRzCisrICAgICAqIFRoaXMg aGFzIHVuZGVmaW5lZCByZXN1bHRzIGluIHRoZSBwcmVzZW5jZSBvZiBCIGZyYW1lcy4KKysgICAg ICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyCisr ICAgICAqLworKyAgICBpbnQgdXNlX3dhbGxjbG9ja19hc190aW1lc3RhbXBzOworKworKyAgICAv KioKKysgICAgICogU2tpcCBkdXJhdGlvbiBjYWxjdWxhdGlvbiBpbiBlc3RpbWF0ZV90aW1pbmdz X2Zyb21fcHRzLgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGlu Zzogc2V0IGJ5IHVzZXIKKysgICAgICoKKysgICAgICogQHNlZSBkdXJhdGlvbl9wcm9iZXNpemUK KysgICAgICovCisrICAgIGludCBza2lwX2VzdGltYXRlX2R1cmF0aW9uX2Zyb21fcHRzOworKwor KyAgICAvKioKKysgICAgICogYXZpbyBmbGFncywgdXNlZCB0byBmb3JjZSBBVklPX0ZMQUdfRElS RUNULgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0 IGJ5IHVzZXIKKysgICAgICovCisrICAgIGludCBhdmlvX2ZsYWdzOworKworKyAgICAvKioKKysg ICAgICogVGhlIGR1cmF0aW9uIGZpZWxkIGNhbiBiZSBlc3RpbWF0ZWQgdGhyb3VnaCB2YXJpb3Vz IHdheXMsIGFuZCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkCisrICAgICAqIHRvIGtub3cgaG93IHRo ZSBkdXJhdGlvbiB3YXMgZXN0aW1hdGVkLgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysg ICAgICogLSBkZWNvZGluZzogUmVhZCBieSB1c2VyCisrICAgICAqLworKyAgICBlbnVtIEFWRHVy YXRpb25Fc3RpbWF0aW9uTWV0aG9kIGR1cmF0aW9uX2VzdGltYXRpb25fbWV0aG9kOworKworKyAg ICAvKioKKysgICAgICogU2tpcCBpbml0aWFsIGJ5dGVzIHdoZW4gb3BlbmluZyBzdHJlYW0KKysg ICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2Vy CisrICAgICAqLworKyAgICBpbnQ2NF90IHNraXBfaW5pdGlhbF9ieXRlczsKKysKKysgICAgLyoq CisrICAgICAqIENvcnJlY3Qgc2luZ2xlIHRpbWVzdGFtcCBvdmVyZmxvd3MKKysgICAgICogLSBl bmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAq LworKyAgICB1bnNpZ25lZCBpbnQgY29ycmVjdF90c19vdmVyZmxvdzsKKysKKysgICAgLyoqCisr ICAgICAqIEZvcmNlIHNlZWtpbmcgdG8gYW55IChhbHNvIG5vbiBrZXkpIGZyYW1lcy4KKysgICAg ICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyCisr ICAgICAqLworKyAgICBpbnQgc2VlazJhbnk7CisrCisrICAgIC8qKgorKyAgICAgKiBGbHVzaCB0 aGUgSS9PIGNvbnRleHQgYWZ0ZXIgZWFjaCBwYWNrZXQuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNl dCBieSB1c2VyCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50 IGZsdXNoX3BhY2tldHM7CisrCisrICAgIC8qKgorKyAgICAgKiBmb3JtYXQgcHJvYmluZyBzY29y ZS4KKysgICAgICogVGhlIG1heGltYWwgc2NvcmUgaXMgQVZQUk9CRV9TQ09SRV9NQVgsIGl0cyBz ZXQgd2hlbiB0aGUgZGVtdXhlciBwcm9iZXMKKysgICAgICogdGhlIGZvcm1hdC4KKysgICAgICog LSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSBhdmZvcm1hdCwg cmVhZCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQgcHJvYmVfc2NvcmU7CisrCisrICAgIC8q KgorKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gaW5wdXQgaW4gb3Jk ZXIgdG8gaWRlbnRpZnkgdGhlCisrICAgICAqIFxyZWYgQVZJbnB1dEZvcm1hdCAiaW5wdXQgZm9y bWF0Ii4gT25seSB1c2VkIHdoZW4gdGhlIGZvcm1hdCBpcyBub3Qgc2V0CisrICAgICAqIGV4cGxp Y2l0bHkgYnkgdGhlIGNhbGxlci4KKysgICAgICoKKysgICAgICogRGVtdXhpbmcgb25seSwgc2V0 IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KKysgICAgICoKKysg ICAgICogQHNlZSBwcm9iZXNpemUKKysgICAgICovCisrICAgIGludCBmb3JtYXRfcHJvYmVzaXpl OworKworKyAgICAvKioKKysgICAgICogJywnIHNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgZGVj b2RlcnMuCisrICAgICAqIElmIE5VTEwgdGhlbiBhbGwgYXJlIGFsbG93ZWQKKysgICAgICogLSBl bmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAq LworKyAgICBjaGFyICpjb2RlY193aGl0ZWxpc3Q7CisrCisrICAgIC8qKgorKyAgICAgKiAnLCcg c2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBkZW11eGVycy4KKysgICAgICogSWYgTlVMTCB0aGVu IGFsbCBhcmUgYWxsb3dlZAorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBk ZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGNoYXIgKmZvcm1hdF93aGl0ZWxp c3Q7CisrCisrICAgIC8qKgorKyAgICAgKiAnLCcgc2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBw cm90b2NvbHMuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5n OiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgY2hhciAqcHJvdG9jb2xfd2hpdGVsaXN0Owor KworKyAgICAvKioKKysgICAgICogJywnIHNlcGFyYXRlZCBsaXN0IG9mIGRpc2FsbG93ZWQgcHJv dG9jb2xzLgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzog c2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGNoYXIgKnByb3RvY29sX2JsYWNrbGlzdDsKKysK KysgICAgLyoqCisrICAgICAqIElPIHJlcG9zaXRpb25lZCBmbGFnLgorKyAgICAgKiBUaGlzIGlz IHNldCBieSBhdmZvcm1hdCB3aGVuIHRoZSB1bmRlcmx5aW5nIElPIGNvbnRleHQgcmVhZCBwb2lu dGVyCisrICAgICAqIGlzIHJlcG9zaXRpb25lZCwgZm9yIGV4YW1wbGUgd2hlbiBkb2luZyBieXRl IGJhc2VkIHNlZWtpbmcuCisrICAgICAqIERlbXV4ZXJzIGNhbiB1c2UgdGhlIGZsYWcgdG8gZGV0 ZWN0IHN1Y2ggY2hhbmdlcy4KKysgICAgICovCisrICAgIGludCBpb19yZXBvc2l0aW9uZWQ7Cisr CisrICAgIC8qKgorKyAgICAgKiBGb3JjZWQgdmlkZW8gY29kZWMuCisrICAgICAqIFRoaXMgYWxs b3dzIGZvcmNpbmcgYSBzcGVjaWZpYyBkZWNvZGVyLCBldmVuIHdoZW4gdGhlcmUgYXJlIG11bHRp cGxlIHdpdGgKKysgICAgICogdGhlIHNhbWUgY29kZWNfaWQuCisrICAgICAqIERlbXV4aW5nOiBT ZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgY29uc3Qgc3RydWN0IEFWQ29kZWMgKnZpZGVvX2Nv ZGVjOworKworKyAgICAvKioKKysgICAgICogRm9yY2VkIGF1ZGlvIGNvZGVjLgorKyAgICAgKiBU aGlzIGFsbG93cyBmb3JjaW5nIGEgc3BlY2lmaWMgZGVjb2RlciwgZXZlbiB3aGVuIHRoZXJlIGFy ZSBtdWx0aXBsZSB3aXRoCisrICAgICAqIHRoZSBzYW1lIGNvZGVjX2lkLgorKyAgICAgKiBEZW11 eGluZzogU2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGNvbnN0IHN0cnVjdCBBVkNvZGVjICph dWRpb19jb2RlYzsKKysKKysgICAgLyoqCisrICAgICAqIEZvcmNlZCBzdWJ0aXRsZSBjb2RlYy4K KysgICAgICogVGhpcyBhbGxvd3MgZm9yY2luZyBhIHNwZWNpZmljIGRlY29kZXIsIGV2ZW4gd2hl biB0aGVyZSBhcmUgbXVsdGlwbGUgd2l0aAorKyAgICAgKiB0aGUgc2FtZSBjb2RlY19pZC4KKysg ICAgICogRGVtdXhpbmc6IFNldCBieSB1c2VyCisrICAgICAqLworKyAgICBjb25zdCBzdHJ1Y3Qg QVZDb2RlYyAqc3VidGl0bGVfY29kZWM7CisrCisrICAgIC8qKgorKyAgICAgKiBGb3JjZWQgZGF0 YSBjb2RlYy4KKysgICAgICogVGhpcyBhbGxvd3MgZm9yY2luZyBhIHNwZWNpZmljIGRlY29kZXIs IGV2ZW4gd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgd2l0aAorKyAgICAgKiB0aGUgc2FtZSBjb2Rl Y19pZC4KKysgICAgICogRGVtdXhpbmc6IFNldCBieSB1c2VyCisrICAgICAqLworKyAgICBjb25z dCBzdHJ1Y3QgQVZDb2RlYyAqZGF0YV9jb2RlYzsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJl ciBvZiBieXRlcyB0byBiZSB3cml0dGVuIGFzIHBhZGRpbmcgaW4gYSBtZXRhZGF0YSBoZWFkZXIu CisrICAgICAqIERlbXV4aW5nOiBVbnVzZWQuCisrICAgICAqIE11eGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqLworKyAgICBpbnQgbWV0YWRhdGFfaGVhZGVyX3BhZGRpbmc7CisrCisrICAgIC8q KgorKyAgICAgKiBVc2VyIGRhdGEuCisrICAgICAqIFRoaXMgaXMgYSBwbGFjZSBmb3Igc29tZSBw cml2YXRlIGRhdGEgb2YgdGhlIHVzZXIuCisrICAgICAqLworKyAgICB2b2lkICpvcGFxdWU7Cisr CisrICAgIC8qKgorKyAgICAgKiBDYWxsYmFjayB1c2VkIGJ5IGRldmljZXMgdG8gY29tbXVuaWNh dGUgd2l0aCBhcHBsaWNhdGlvbi4KKysgICAgICovCisrICAgIGF2X2Zvcm1hdF9jb250cm9sX21l c3NhZ2UgY29udHJvbF9tZXNzYWdlX2NiOworKworKyAgICAvKioKKysgICAgICogT3V0cHV0IHRp bWVzdGFtcCBvZmZzZXQsIGluIG1pY3Jvc2Vjb25kcy4KKysgICAgICogTXV4aW5nOiBzZXQgYnkg dXNlcgorKyAgICAgKi8KKysgICAgaW50NjRfdCBvdXRwdXRfdHNfb2Zmc2V0OworKworKyAgICAv KioKKysgICAgICogZHVtcCBmb3JtYXQgc2VwYXJhdG9yLgorKyAgICAgKiBjYW4gYmUgIiwgIiBv ciAiXG4gICAgICAiIG9yIGFueXRoaW5nIGVsc2UKKysgICAgICogLSBtdXhpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlbXV4aW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAgIHVp bnQ4X3QgKmR1bXBfc2VwYXJhdG9yOworKworKyAgICAvKioKKysgICAgICogQSBjYWxsYmFjayBm b3Igb3BlbmluZyBuZXcgSU8gc3RyZWFtcy4KKysgICAgICoKKysgICAgICogV2hlbmV2ZXIgYSBt dXhlciBvciBhIGRlbXV4ZXIgbmVlZHMgdG8gb3BlbiBhbiBJTyBzdHJlYW0gKHR5cGljYWxseSBm cm9tCisrICAgICAqIGF2Zm9ybWF0X29wZW5faW5wdXQoKSBmb3IgZGVtdXhlcnMsIGJ1dCBmb3Ig Y2VydGFpbiBmb3JtYXRzIGNhbiBoYXBwZW4gYXQKKysgICAgICogb3RoZXIgdGltZXMgYXMgd2Vs bCksIGl0IHdpbGwgY2FsbCB0aGlzIGNhbGxiYWNrIHRvIG9idGFpbiBhbiBJTyBjb250ZXh0Lgor KyAgICAgKgorKyAgICAgKiBAcGFyYW0gcyB0aGUgZm9ybWF0IGNvbnRleHQKKysgICAgICogQHBh cmFtIHBiIG9uIHN1Y2Nlc3MsIHRoZSBuZXdseSBvcGVuZWQgSU8gY29udGV4dCBzaG91bGQgYmUg cmV0dXJuZWQgaGVyZQorKyAgICAgKiBAcGFyYW0gdXJsIHRoZSB1cmwgdG8gb3BlbgorKyAgICAg KiBAcGFyYW0gZmxhZ3MgYSBjb21iaW5hdGlvbiBvZiBBVklPX0ZMQUdfKgorKyAgICAgKiBAcGFy YW0gb3B0aW9ucyBhIGRpY3Rpb25hcnkgb2YgYWRkaXRpb25hbCBvcHRpb25zLCB3aXRoIHRoZSBz YW1lCisrICAgICAqICAgICAgICAgICAgICAgIHNlbWFudGljcyBhcyBpbiBhdmlvX29wZW4yKCkK KysgICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG9u IGZhaWx1cmUKKysgICAgICoKKysgICAgICogQG5vdGUgQ2VydGFpbiBtdXhlcnMgYW5kIGRlbXV4 ZXJzIGRvIG5lc3RpbmcsIGkuZS4gdGhleSBvcGVuIG9uZSBvciBtb3JlCisrICAgICAqIGFkZGl0 aW9uYWwgaW50ZXJuYWwgZm9ybWF0IGNvbnRleHRzLiBUaHVzIHRoZSBBVkZvcm1hdENvbnRleHQg cG9pbnRlcgorKyAgICAgKiBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjayBtYXkgYmUgZGlmZmVyZW50 IGZyb20gdGhlIG9uZSBmYWNpbmcgdGhlIGNhbGxlci4KKysgICAgICogSXQgd2lsbCwgaG93ZXZl ciwgaGF2ZSB0aGUgc2FtZSAnb3BhcXVlJyBmaWVsZC4KKysgICAgICovCisrICAgIGludCAoKmlv X29wZW4pKHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMsIEFWSU9Db250ZXh0ICoqcGIsIGNvbnN0 IGNoYXIgKnVybCwKKysgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkg KipvcHRpb25zKTsKKysKKysgICAgLyoqCisrICAgICAqIEEgY2FsbGJhY2sgZm9yIGNsb3Npbmcg dGhlIHN0cmVhbXMgb3BlbmVkIHdpdGggQVZGb3JtYXRDb250ZXh0LmlvX29wZW4oKS4KKysgICAg ICoKKysgICAgICogQHBhcmFtIHMgdGhlIGZvcm1hdCBjb250ZXh0CisrICAgICAqIEBwYXJhbSBw YiBJTyBjb250ZXh0IHRvIGJlIGNsb3NlZCBhbmQgZnJlZWQKKysgICAgICogQHJldHVybiAwIG9u IHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG9uIGZhaWx1cmUKKysgICAgICovCisr ICAgIGludCAoKmlvX2Nsb3NlMikoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcywgQVZJT0NvbnRl eHQgKnBiKTsKKysKKysgICAgLyoqCisrICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHJl YWQgZnJvbSBpbnB1dCBpbiBvcmRlciB0byBkZXRlcm1pbmUgc3RyZWFtIGR1cmF0aW9ucworKyAg ICAgKiB3aGVuIHVzaW5nIGVzdGltYXRlX3RpbWluZ3NfZnJvbV9wdHMgaW4gYXZmb3JtYXRfZmlu ZF9zdHJlYW1faW5mbygpLgorKyAgICAgKiBEZW11eGluZyBvbmx5LCBzZXQgYnkgdGhlIGNhbGxl ciBiZWZvcmUgYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpLgorKyAgICAgKiBDYW4gYmUgc2V0 IHRvIDAgdG8gbGV0IGF2Zm9ybWF0IGNob29zZSB1c2luZyBhIGhldXJpc3RpYy4KKysgICAgICoK KysgICAgICogQHNlZSBza2lwX2VzdGltYXRlX2R1cmF0aW9uX2Zyb21fcHRzCisrICAgICAqLwor KyAgICBpbnQ2NF90IGR1cmF0aW9uX3Byb2Jlc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIE5h bWUgb2YgdGhpcyBmb3JtYXQgY29udGV4dCwgb25seSB1c2VkIGZvciBsb2dnaW5nIHB1cnBvc2Vz LgorKyAgICAgKi8KKysgICAgY2hhciAqbmFtZTsKKyt9IEFWRm9ybWF0Q29udGV4dDsKKysKKysv KioKKysgKiBAZGVmZ3JvdXAgbGF2Zl9jb3JlIENvcmUgZnVuY3Rpb25zCisrICogQGluZ3JvdXAg bGliYXZmCisrICoKKysgKiBGdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIGxpYmF2Zm9ybWF0IGNhcGFi aWxpdGllcywgYWxsb2NhdGluZyBjb3JlIHN0cnVjdHVyZXMsCisrICogZXRjLgorKyAqIEB7Cisr ICovCisrCisrLyoqCisrICogUmV0dXJuIHRoZSBMSUJBVkZPUk1BVF9WRVJTSU9OX0lOVCBjb25z dGFudC4KKysgKi8KKyt1bnNpZ25lZCBhdmZvcm1hdF92ZXJzaW9uKHZvaWQpOworKworKy8qKgor KyAqIFJldHVybiB0aGUgbGliYXZmb3JtYXQgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLgorKyAq LworK2NvbnN0IGNoYXIgKmF2Zm9ybWF0X2NvbmZpZ3VyYXRpb24odm9pZCk7CisrCisrLyoqCisr ICogUmV0dXJuIHRoZSBsaWJhdmZvcm1hdCBsaWNlbnNlLgorKyAqLworK2NvbnN0IGNoYXIgKmF2 Zm9ybWF0X2xpY2Vuc2Uodm9pZCk7CisrCisrLyoqCisrICogRG8gZ2xvYmFsIGluaXRpYWxpemF0 aW9uIG9mIG5ldHdvcmsgbGlicmFyaWVzLiBUaGlzIGlzIG9wdGlvbmFsLAorKyAqIGFuZCBub3Qg cmVjb21tZW5kZWQgYW55bW9yZS4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb25zIG9ubHkgZXhpc3Rz IHRvIHdvcmsgYXJvdW5kIHRocmVhZC1zYWZldHkgaXNzdWVzCisrICogd2l0aCBvbGRlciBHbnVU TFMgb3IgT3BlblNTTCBsaWJyYXJpZXMuIElmIGxpYmF2Zm9ybWF0IGlzIGxpbmtlZAorKyAqIHRv IG5ld2VyIHZlcnNpb25zIG9mIHRob3NlIGxpYnJhcmllcywgb3IgaWYgeW91IGRvIG5vdCB1c2Ug dGhlbSwKKysgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaXMgdW5uZWNlc3NhcnkuIE90aGVyd2lz ZSwgeW91IG5lZWQgdG8gY2FsbAorKyAqIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFueSBvdGhlciB0 aHJlYWRzIHVzaW5nIHRoZW0gYXJlIHN0YXJ0ZWQuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIHdp bGwgYmUgZGVwcmVjYXRlZCBvbmNlIHN1cHBvcnQgZm9yIG9sZGVyIEdudVRMUyBhbmQKKysgKiBP cGVuU1NMIGxpYnJhcmllcyBpcyByZW1vdmVkLCBhbmQgdGhpcyBmdW5jdGlvbiBoYXMgbm8gcHVy cG9zZQorKyAqIGFueW1vcmUuCisrICovCisraW50IGF2Zm9ybWF0X25ldHdvcmtfaW5pdCh2b2lk KTsKKysKKysvKioKKysgKiBVbmRvIHRoZSBpbml0aWFsaXphdGlvbiBkb25lIGJ5IGF2Zm9ybWF0 X25ldHdvcmtfaW5pdC4gQ2FsbCBpdCBvbmx5CisrICogb25jZSBmb3IgZWFjaCB0aW1lIHlvdSBj YWxsZWQgYXZmb3JtYXRfbmV0d29ya19pbml0LgorKyAqLworK2ludCBhdmZvcm1hdF9uZXR3b3Jr X2RlaW5pdCh2b2lkKTsKKysKKysvKioKKysgKiBJdGVyYXRlIG92ZXIgYWxsIHJlZ2lzdGVyZWQg bXV4ZXJzLgorKyAqCisrICogQHBhcmFtIG9wYXF1ZSBhIHBvaW50ZXIgd2hlcmUgbGliYXZmb3Jt YXQgd2lsbCBzdG9yZSB0aGUgaXRlcmF0aW9uIHN0YXRlLiBNdXN0CisrICogICAgICAgICAgICAg ICBwb2ludCB0byBOVUxMIHRvIHN0YXJ0IHRoZSBpdGVyYXRpb24uCisrICoKKysgKiBAcmV0dXJu IHRoZSBuZXh0IHJlZ2lzdGVyZWQgbXV4ZXIgb3IgTlVMTCB3aGVuIHRoZSBpdGVyYXRpb24gaXMK KysgKiAgICAgICAgIGZpbmlzaGVkCisrICovCisrY29uc3QgQVZPdXRwdXRGb3JtYXQgKmF2X211 eGVyX2l0ZXJhdGUodm9pZCAqKm9wYXF1ZSk7CisrCisrLyoqCisrICogSXRlcmF0ZSBvdmVyIGFs bCByZWdpc3RlcmVkIGRlbXV4ZXJzLgorKyAqCisrICogQHBhcmFtIG9wYXF1ZSBhIHBvaW50ZXIg d2hlcmUgbGliYXZmb3JtYXQgd2lsbCBzdG9yZSB0aGUgaXRlcmF0aW9uIHN0YXRlLgorKyAqICAg ICAgICAgICAgICAgTXVzdCBwb2ludCB0byBOVUxMIHRvIHN0YXJ0IHRoZSBpdGVyYXRpb24uCisr ICoKKysgKiBAcmV0dXJuIHRoZSBuZXh0IHJlZ2lzdGVyZWQgZGVtdXhlciBvciBOVUxMIHdoZW4g dGhlIGl0ZXJhdGlvbiBpcworKyAqICAgICAgICAgZmluaXNoZWQKKysgKi8KKytjb25zdCBBVklu cHV0Rm9ybWF0ICphdl9kZW11eGVyX2l0ZXJhdGUodm9pZCAqKm9wYXF1ZSk7CisrCisrLyoqCisr ICogQWxsb2NhdGUgYW4gQVZGb3JtYXRDb250ZXh0LgorKyAqIGF2Zm9ybWF0X2ZyZWVfY29udGV4 dCgpIGNhbiBiZSB1c2VkIHRvIGZyZWUgdGhlIGNvbnRleHQgYW5kIGV2ZXJ5dGhpbmcKKysgKiBh bGxvY2F0ZWQgYnkgdGhlIGZyYW1ld29yayB3aXRoaW4gaXQuCisrICovCisrQVZGb3JtYXRDb250 ZXh0ICphdmZvcm1hdF9hbGxvY19jb250ZXh0KHZvaWQpOworKworKy8qKgorKyAqIEZyZWUgYW4g QVZGb3JtYXRDb250ZXh0IGFuZCBhbGwgaXRzIHN0cmVhbXMuCisrICogQHBhcmFtIHMgY29udGV4 dCB0byBmcmVlCisrICovCisrdm9pZCBhdmZvcm1hdF9mcmVlX2NvbnRleHQoQVZGb3JtYXRDb250 ZXh0ICpzKTsKKysKKysvKioKKysgKiBHZXQgdGhlIEFWQ2xhc3MgZm9yIEFWRm9ybWF0Q29udGV4 dC4gSXQgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aAorKyAqIEFWX09QVF9TRUFSQ0hf RkFLRV9PQkogZm9yIGV4YW1pbmluZyBvcHRpb25zLgorKyAqCisrICogQHNlZSBhdl9vcHRfZmlu ZCgpLgorKyAqLworK2NvbnN0IEFWQ2xhc3MgKmF2Zm9ybWF0X2dldF9jbGFzcyh2b2lkKTsKKysK KysvKioKKysgKiBHZXQgdGhlIEFWQ2xhc3MgZm9yIEFWU3RyZWFtLiBJdCBjYW4gYmUgdXNlZCBp biBjb21iaW5hdGlvbiB3aXRoCisrICogQVZfT1BUX1NFQVJDSF9GQUtFX09CSiBmb3IgZXhhbWlu aW5nIG9wdGlvbnMuCisrICoKKysgKiBAc2VlIGF2X29wdF9maW5kKCkuCisrICovCisrY29uc3Qg QVZDbGFzcyAqYXZfc3RyZWFtX2dldF9jbGFzcyh2b2lkKTsKKysKKysvKioKKysgKiBHZXQgdGhl IEFWQ2xhc3MgZm9yIEFWU3RyZWFtR3JvdXAuIEl0IGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9u IHdpdGgKKysgKiBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIGZvciBleGFtaW5pbmcgb3B0aW9ucy4K KysgKgorKyAqIEBzZWUgYXZfb3B0X2ZpbmQoKS4KKysgKi8KKytjb25zdCBBVkNsYXNzICphdl9z dHJlYW1fZ3JvdXBfZ2V0X2NsYXNzKHZvaWQpOworKworKy8qKgorKyAqIEByZXR1cm4gYSBzdHJp bmcgaWRlbnRpZnlpbmcgdGhlIHN0cmVhbSBncm91cCB0eXBlLCBvciBOVUxMIGlmIHVua25vd24K KysgKi8KKytjb25zdCBjaGFyICphdmZvcm1hdF9zdHJlYW1fZ3JvdXBfbmFtZShlbnVtIEFWU3Ry ZWFtR3JvdXBQYXJhbXNUeXBlIHR5cGUpOworKworKy8qKgorKyAqIEFkZCBhIG5ldyBlbXB0eSBz dHJlYW0gZ3JvdXAgdG8gYSBtZWRpYSBmaWxlLgorKyAqCisrICogV2hlbiBkZW11eGluZywgaXQg bWF5IGJlIGNhbGxlZCBieSB0aGUgZGVtdXhlciBpbiByZWFkX2hlYWRlcigpLiBJZiB0aGUKKysg KiBmbGFnIEFWRk1UQ1RYX05PSEVBREVSIGlzIHNldCBpbiBzLmN0eF9mbGFncywgdGhlbiBpdCBt YXkgYWxzbworKyAqIGJlIGNhbGxlZCBpbiByZWFkX3BhY2tldCgpLgorKyAqCisrICogV2hlbiBt dXhpbmcsIG1heSBiZSBjYWxsZWQgYnkgdGhlIHVzZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hl YWRlcigpLgorKyAqCisrICogVXNlciBpcyByZXF1aXJlZCB0byBjYWxsIGF2Zm9ybWF0X2ZyZWVf Y29udGV4dCgpIHRvIGNsZWFuIHVwIHRoZSBhbGxvY2F0aW9uCisrICogYnkgYXZmb3JtYXRfc3Ry ZWFtX2dyb3VwX2NyZWF0ZSgpLgorKyAqCisrICogTmV3IHN0cmVhbXMgY2FuIGJlIGFkZGVkIHRv IHRoZSBncm91cCB3aXRoIGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9hZGRfc3RyZWFtKCkuCisrICoK KysgKiBAcGFyYW0gcyBtZWRpYSBmaWxlIGhhbmRsZQorKyAqCisrICogQHJldHVybiBuZXdseSBj cmVhdGVkIGdyb3VwIG9yIE5VTEwgb24gZXJyb3IuCisrICogQHNlZSBhdmZvcm1hdF9uZXdfc3Ry ZWFtLCBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfYWRkX3N0cmVhbS4KKysgKi8KKytBVlN0cmVhbUdy b3VwICphdmZvcm1hdF9zdHJlYW1fZ3JvdXBfY3JlYXRlKEFWRm9ybWF0Q29udGV4dCAqcywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZTdHJlYW1H cm91cFBhcmFtc1R5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOworKworKy8qKgorKyAqIEFkZCBhIG5l dyBzdHJlYW0gdG8gYSBtZWRpYSBmaWxlLgorKyAqCisrICogV2hlbiBkZW11eGluZywgaXQgaXMg Y2FsbGVkIGJ5IHRoZSBkZW11eGVyIGluIHJlYWRfaGVhZGVyKCkuIElmIHRoZQorKyAqIGZsYWcg QVZGTVRDVFhfTk9IRUFERVIgaXMgc2V0IGluIHMuY3R4X2ZsYWdzLCB0aGVuIGl0IG1heSBhbHNv CisrICogYmUgY2FsbGVkIGluIHJlYWRfcGFja2V0KCkuCisrICoKKysgKiBXaGVuIG11eGluZywg c2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVy KCkuCisrICoKKysgKiBVc2VyIGlzIHJlcXVpcmVkIHRvIGNhbGwgYXZmb3JtYXRfZnJlZV9jb250 ZXh0KCkgdG8gY2xlYW4gdXAgdGhlIGFsbG9jYXRpb24KKysgKiBieSBhdmZvcm1hdF9uZXdfc3Ry ZWFtKCkuCisrICoKKysgKiBAcGFyYW0gcyBtZWRpYSBmaWxlIGhhbmRsZQorKyAqIEBwYXJhbSBj IHVudXNlZCwgZG9lcyBub3RoaW5nCisrICoKKysgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgc3Ry ZWFtIG9yIE5VTEwgb24gZXJyb3IuCisrICovCisrQVZTdHJlYW0gKmF2Zm9ybWF0X25ld19zdHJl YW0oQVZGb3JtYXRDb250ZXh0ICpzLCBjb25zdCBzdHJ1Y3QgQVZDb2RlYyAqYyk7CisrCisrLyoq CisrICogQWRkIGFuIGFscmVhZHkgYWxsb2NhdGVkIHN0cmVhbSB0byBhIHN0cmVhbSBncm91cC4K KysgKgorKyAqIFdoZW4gZGVtdXhpbmcsIGl0IG1heSBiZSBjYWxsZWQgYnkgdGhlIGRlbXV4ZXIg aW4gcmVhZF9oZWFkZXIoKS4gSWYgdGhlCisrICogZmxhZyBBVkZNVENUWF9OT0hFQURFUiBpcyBz ZXQgaW4gcy5jdHhfZmxhZ3MsIHRoZW4gaXQgbWF5IGFsc28KKysgKiBiZSBjYWxsZWQgaW4gcmVh ZF9wYWNrZXQoKS4KKysgKgorKyAqIFdoZW4gbXV4aW5nLCBtYXkgYmUgY2FsbGVkIGJ5IHRoZSB1 c2VyIGJlZm9yZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKSBhZnRlcgorKyAqIGhhdmluZyBhbGxv Y2F0ZWQgYSBuZXcgZ3JvdXAgd2l0aCBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfY3JlYXRlKCkgYW5k IHN0cmVhbSB3aXRoCisrICogYXZmb3JtYXRfbmV3X3N0cmVhbSgpLgorKyAqCisrICogVXNlciBp cyByZXF1aXJlZCB0byBjYWxsIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpIHRvIGNsZWFuIHVwIHRo ZSBhbGxvY2F0aW9uCisrICogYnkgYXZmb3JtYXRfc3RyZWFtX2dyb3VwX2FkZF9zdHJlYW0oKS4K KysgKgorKyAqIEBwYXJhbSBzdGcgc3RyZWFtIGdyb3VwIGJlbG9uZ2luZyB0byBhIG1lZGlhIGZp bGUuCisrICogQHBhcmFtIHN0ICBzdHJlYW0gaW4gdGhlIG1lZGlhIGZpbGUgdG8gYWRkIHRvIHRo ZSBncm91cC4KKysgKgorKyAqIEByZXR2YWwgMCAgICAgICAgICAgICAgICAgc3VjY2VzcworKyAq IEByZXR2YWwgQVZFUlJPUihFRVhJU1QpICAgdGhlIHN0cmVhbSB3YXMgYWxyZWFkeSBpbiB0aGUg Z3JvdXAKKysgKiBAcmV0dmFsICJhbm90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUiIGxlZ2l0aW1h dGUgZXJyb3JzCisrICoKKysgKiBAc2VlIGF2Zm9ybWF0X25ld19zdHJlYW0sIGF2Zm9ybWF0X3N0 cmVhbV9ncm91cF9jcmVhdGUuCisrICovCisraW50IGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9hZGRf c3RyZWFtKEFWU3RyZWFtR3JvdXAgKnN0ZywgQVZTdHJlYW0gKnN0KTsKKysKKytBVlByb2dyYW0g KmF2X25ld19wcm9ncmFtKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IGlkKTsKKysKKysKKysjZGVm aW5lIEFWRk1UX1BST0dDT1BZX01BVENIX0JZX0lEICAgICAgICAgICgxIDw8IDApIC8vLzwgbWF0 Y2ggc3RyZWFtcyB1c2luZyBzdHJlYW0gaWQKKysjZGVmaW5lIEFWRk1UX1BST0dDT1BZX01BVENI X0JZX0lOREVYICAgICAgICgxIDw8IDEpIC8vLzwgbWF0Y2ggc3RyZWFtcyB1c2luZyBzdHJlYW0g aW5kZXgKKysjZGVmaW5lIEFWRk1UX1BST0dDT1BZX09WRVJXUklURSAgICAgICAgICAgICgxIDw8 IDgpIC8vLzwgb3ZlcndyaXRlIHByZS1leGlzdGluZyBwcm9ncmFtIGhhdmluZyBzYW1lIElECisr CisrLyoqCisrICogQ29weSBhbiBBVlByb2dyYW0gZnJvbSBvbmUgQVZGb3JtYXRDb250ZXh0IHRv IGFub3RoZXIuCisrICoKKysgKiBTdHJlYW1zIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0IHdo b3NlIGRlc2lnbmF0ZWQgYXR0cmlidXRlIG1hdGNoIHRoZSBhdHRyaWJ1dGUgb2YKKysgKiB0aGUg c3RyZWFtcyBpbiB0aGUgc291cmNlIEFWUHJvZ3JhbSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIHN0 cmVhbSBpbmRleCBvZiB0aGUgY29waWVkCisrICogQVZQcm9ncmFtLiBUaGUgYXR0cmlidXRlIGlz IGRlc2lnbmF0ZWQgdXNpbmcgQVZGTVRfUFJPR0NPUFlfTUFUQ0hfIGZsYWdzLgorKyAqCisrICog SWYgYSBuZXcgcHJvZ3JhbSBoYXMgdG8gYmUgYWRkZWQsIHRoZSBmdW5jdGlvbiBleHBlY3RzIGFu ZCByZXF1aXJlcyBhbnkgZXhpc3RpbmcgYnVmZmVyCisrICogaG9sZGluZyB0aGUgYXJyYXkgb2Yg cG9pbnRlcnMgdG8gQVZQcm9ncmFtcyBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4dCB0byBoYXZl IGl0cyBzaXplCisrICogYmUgYSBwb3dlci1vZi10d28gdmFsdWUuIFRoaXMgc2hvdWxkIGJlIHRo ZSBjYXNlIGlmIGFsbCBlYXJsaWVyIHByb2dyYW1zIHdlcmUgY3JlYXRlZAorKyAqIHVzaW5nIGF2 X25ld19wcm9ncmFtIG9yIHRoaXMgZnVuY3Rpb24uCisrICoKKysgKiBAcGFyYW0gZHN0ICAgICAg ICAgICBwb2ludGVyIHRvIHRoZSB0YXJnZXQgbXV4ZXIgY29udGV4dAorKyAqIEBwYXJhbSBzcmMg ICAgICAgICAgIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBtdXhlciBjb250ZXh0CisrICogQHBhcmFt IHByb2dpZCAgICAgICAgSUQgb2YgdGhlIHByb2dyYW0gdG8gYmUgY29waWVkCisrICogQHBhcmFt IGZsYWdzICAgICAgICAgY29tYmluYXRpb24gb2YgZmxhZ3Mgd2hpY2ggZGV0ZXJtaW5lIGhvdyBz dHJlYW1zIGFyZSBtYXRjaGVkIGFuZAorKyAqICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIg cHJlLWV4aXN0aW5nIEFWUHJvZ3JhbSBpbiB0YXJnZXQgaXMgb3ZlcndyaXR0ZW4uCisrICogICAg ICAgICAgICAgICAgICAgICAgSWYgbm8gbWF0Y2ggY29uZGl0aW9uIGlzIHNldCwgc3RyZWFtcyB3 aWxsIGJlIG1hdGNoZWQgYnkgaWRzIGlmCisrICogICAgICAgICAgICAgICAgICAgICAgYWxsIHNv dXJjZSBzdHJlYW0gaWRzIGFyZSBub24temVybyBhbmQgdW5pcXVlLCBlbHNlIGJ5IGluZGV4Lgor KyAqCisrICogQHJldHVybiAgPj0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEVycm9yIEVFWElTVCBp ZiB0YXJnZXQgYWxyZWFkeSBoYXMgcHJvZ3JhbSB3aXRoIHNhbWUgSUQKKysgKiAgICAgICAgICBh bmQgb3ZlcndyaXRlIGZsYWcgaXNuJ3Qgc2V0LCBlbHNlIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2Rl IGluIGNhc2Ugb2Ygb3RoZXIKKysgKiAgICAgICAgICBmYWlsdXJlcy4KKysgKi8KKytpbnQgYXZf cHJvZ3JhbV9jb3B5KEFWRm9ybWF0Q29udGV4dCAqZHN0LCBjb25zdCBBVkZvcm1hdENvbnRleHQg KnNyYywgaW50IHByb2dpZCwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKwor KworKy8qKgorKyAqIEFsbG9jYXRlIGFuIEFWRm9ybWF0Q29udGV4dCBmb3IgYW4gb3V0cHV0IGZv cm1hdC4KKysgKiBhdmZvcm1hdF9mcmVlX2NvbnRleHQoKSBjYW4gYmUgdXNlZCB0byBmcmVlIHRo ZSBjb250ZXh0IGFuZAorKyAqIGV2ZXJ5dGhpbmcgYWxsb2NhdGVkIGJ5IHRoZSBmcmFtZXdvcmsg d2l0aGluIGl0LgorKyAqCisrICogQHBhcmFtIGN0eCAgICAgICAgICAgcG9pbnRlZSBpcyBzZXQg dG8gdGhlIGNyZWF0ZWQgZm9ybWF0IGNvbnRleHQsCisrICogICAgICAgICAgICAgICAgICAgICAg b3IgdG8gTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUKKysgKiBAcGFyYW0gb2Zvcm1hdCAgICAgICBm b3JtYXQgdG8gdXNlIGZvciBhbGxvY2F0aW5nIHRoZSBjb250ZXh0LCBpZiBOVUxMCisrICogICAg ICAgICAgICAgICAgICAgICAgZm9ybWF0X25hbWUgYW5kIGZpbGVuYW1lIGFyZSB1c2VkIGluc3Rl YWQKKysgKiBAcGFyYW0gZm9ybWF0X25hbWUgICB0aGUgbmFtZSBvZiBvdXRwdXQgZm9ybWF0IHRv IHVzZSBmb3IgYWxsb2NhdGluZyB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0 LCBpZiBOVUxMIGZpbGVuYW1lIGlzIHVzZWQgaW5zdGVhZAorKyAqIEBwYXJhbSBmaWxlbmFtZSAg ICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlbmFtZSB0byB1c2UgZm9yIGFsbG9jYXRpbmcgdGhlCisr ICogICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbWF5IGJlIE5VTEwKKysgKgorKyAqIEBy ZXR1cm4gID49IDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBp biBjYXNlIG9mCisrICogICAgICAgICAgZmFpbHVyZQorKyAqLworK2ludCBhdmZvcm1hdF9hbGxv Y19vdXRwdXRfY29udGV4dDIoQVZGb3JtYXRDb250ZXh0ICoqY3R4LCBjb25zdCBBVk91dHB1dEZv cm1hdCAqb2Zvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmZvcm1hdF9uYW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisrCisrLyoqCisrICog QGFkZHRvZ3JvdXAgbGF2Zl9kZWNvZGluZworKyAqIEB7CisrICovCisrCisrLyoqCisrICogRmlu ZCBBVklucHV0Rm9ybWF0IGJhc2VkIG9uIHRoZSBzaG9ydCBuYW1lIG9mIHRoZSBpbnB1dCBmb3Jt YXQuCisrICovCisrY29uc3QgQVZJbnB1dEZvcm1hdCAqYXZfZmluZF9pbnB1dF9mb3JtYXQoY29u c3QgY2hhciAqc2hvcnRfbmFtZSk7CisrCisrLyoqCisrICogR3Vlc3MgdGhlIGZpbGUgZm9ybWF0 LgorKyAqCisrICogQHBhcmFtIHBkICAgICAgICBkYXRhIHRvIGJlIHByb2JlZAorKyAqIEBwYXJh bSBpc19vcGVuZWQgV2hldGhlciB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW5lZDsgZGV0ZXJtaW5l cyB3aGV0aGVyCisrICogICAgICAgICAgICAgICAgICBkZW11eGVycyB3aXRoIG9yIHdpdGhvdXQg QVZGTVRfTk9GSUxFIGFyZSBwcm9iZWQuCisrICovCisrY29uc3QgQVZJbnB1dEZvcm1hdCAqYXZf cHJvYmVfaW5wdXRfZm9ybWF0KGNvbnN0IEFWUHJvYmVEYXRhICpwZCwgaW50IGlzX29wZW5lZCk7 CisrCisrLyoqCisrICogR3Vlc3MgdGhlIGZpbGUgZm9ybWF0LgorKyAqCisrICogQHBhcmFtIHBk ICAgICAgICBkYXRhIHRvIGJlIHByb2JlZAorKyAqIEBwYXJhbSBpc19vcGVuZWQgV2hldGhlciB0 aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW5lZDsgZGV0ZXJtaW5lcyB3aGV0aGVyCisrICogICAgICAg ICAgICAgICAgICBkZW11eGVycyB3aXRoIG9yIHdpdGhvdXQgQVZGTVRfTk9GSUxFIGFyZSBwcm9i ZWQuCisrICogQHBhcmFtIHNjb3JlX21heCBBIHByb2JlIHNjb3JlIGxhcmdlciB0aGF0IHRoaXMg aXMgcmVxdWlyZWQgdG8gYWNjZXB0IGEKKysgKiAgICAgICAgICAgICAgICAgIGRldGVjdGlvbiwg dGhlIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgYWN0dWFsIGRldGVjdGlvbgorKyAqICAgICAgICAg ICAgICAgICAgc2NvcmUgYWZ0ZXJ3YXJkcy4KKysgKiAgICAgICAgICAgICAgICAgIElmIHRoZSBz Y29yZSBpcyA8PSBBVlBST0JFX1NDT1JFX01BWCAvIDQgaXQgaXMgcmVjb21tZW5kZWQKKysgKiAg ICAgICAgICAgICAgICAgIHRvIHJldHJ5IHdpdGggYSBsYXJnZXIgcHJvYmUgYnVmZmVyLgorKyAq LworK2NvbnN0IEFWSW5wdXRGb3JtYXQgKmF2X3Byb2JlX2lucHV0X2Zvcm1hdDIoY29uc3QgQVZQ cm9iZURhdGEgKnBkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGlzX29wZW5lZCwgaW50ICpzY29yZV9tYXgpOworKworKy8qKgorKyAqIEd1ZXNzIHRo ZSBmaWxlIGZvcm1hdC4KKysgKgorKyAqIEBwYXJhbSBpc19vcGVuZWQgV2hldGhlciB0aGUgZmls ZSBpcyBhbHJlYWR5IG9wZW5lZDsgZGV0ZXJtaW5lcyB3aGV0aGVyCisrICogICAgICAgICAgICAg ICAgICBkZW11eGVycyB3aXRoIG9yIHdpdGhvdXQgQVZGTVRfTk9GSUxFIGFyZSBwcm9iZWQuCisr ICogQHBhcmFtIHNjb3JlX3JldCBUaGUgc2NvcmUgb2YgdGhlIGJlc3QgZGV0ZWN0aW9uLgorKyAq LworK2NvbnN0IEFWSW5wdXRGb3JtYXQgKmF2X3Byb2JlX2lucHV0X2Zvcm1hdDMoY29uc3QgQVZQ cm9iZURhdGEgKnBkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGlzX29wZW5lZCwgaW50ICpzY29yZV9yZXQpOworKworKy8qKgorKyAqIFByb2JlIGEg Ynl0ZXN0cmVhbSB0byBkZXRlcm1pbmUgdGhlIGlucHV0IGZvcm1hdC4gRWFjaCB0aW1lIGEgcHJv YmUgcmV0dXJucworKyAqIHdpdGggYSBzY29yZSB0aGF0IGlzIHRvbyBsb3csIHRoZSBwcm9iZSBi dWZmZXIgc2l6ZSBpcyBpbmNyZWFzZWQgYW5kIGFub3RoZXIKKysgKiBhdHRlbXB0IGlzIG1hZGUu IFdoZW4gdGhlIG1heGltdW0gcHJvYmUgc2l6ZSBpcyByZWFjaGVkLCB0aGUgaW5wdXQgZm9ybWF0 CisrICogd2l0aCB0aGUgaGlnaGVzdCBzY29yZSBpcyByZXR1cm5lZC4KKysgKgorKyAqIEBwYXJh bSBwYiAgICAgICAgICAgICB0aGUgYnl0ZXN0cmVhbSB0byBwcm9iZQorKyAqIEBwYXJhbSBmbXQg ICAgICAgICAgICB0aGUgaW5wdXQgZm9ybWF0IGlzIHB1dCBoZXJlCisrICogQHBhcmFtIHVybCAg ICAgICAgICAgIHRoZSB1cmwgb2YgdGhlIHN0cmVhbQorKyAqIEBwYXJhbSBsb2djdHggICAgICAg ICB0aGUgbG9nIGNvbnRleHQKKysgKiBAcGFyYW0gb2Zmc2V0ICAgICAgICAgdGhlIG9mZnNldCB3 aXRoaW4gdGhlIGJ5dGVzdHJlYW0gdG8gcHJvYmUgZnJvbQorKyAqIEBwYXJhbSBtYXhfcHJvYmVf c2l6ZSB0aGUgbWF4aW11bSBwcm9iZSBidWZmZXIgc2l6ZSAoemVybyBmb3IgZGVmYXVsdCkKKysg KgorKyAqIEByZXR1cm4gdGhlIHNjb3JlIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2 YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuCisrICogICAgICAgICB0aGUgbWF4aW1hbCBzY29yZSBp cyBBVlBST0JFX1NDT1JFX01BWAorKyAqICAgICAgICAgQVZFUlJPUiBjb2RlIG90aGVyd2lzZQor KyAqLworK2ludCBhdl9wcm9iZV9pbnB1dF9idWZmZXIyKEFWSU9Db250ZXh0ICpwYiwgY29uc3Qg QVZJbnB1dEZvcm1hdCAqKmZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICp1cmwsIHZvaWQgKmxvZ2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbWF4X3Byb2JlX3NpemUpOworKworKy8qKgor KyAqIExpa2UgYXZfcHJvYmVfaW5wdXRfYnVmZmVyMigpIGJ1dCByZXR1cm5zIDAgb24gc3VjY2Vz cworKyAqLworK2ludCBhdl9wcm9iZV9pbnB1dF9idWZmZXIoQVZJT0NvbnRleHQgKnBiLCBjb25z dCBBVklucHV0Rm9ybWF0ICoqZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqdXJsLCB2b2lkICpsb2djdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbWF4X3Byb2JlX3NpemUpOworKworKy8qKgor KyAqIE9wZW4gYW4gaW5wdXQgc3RyZWFtIGFuZCByZWFkIHRoZSBoZWFkZXIuIFRoZSBjb2RlY3Mg YXJlIG5vdCBvcGVuZWQuCisrICogVGhlIHN0cmVhbSBtdXN0IGJlIGNsb3NlZCB3aXRoIGF2Zm9y bWF0X2Nsb3NlX2lucHV0KCkuCisrICoKKysgKiBAcGFyYW0gcHMgICAgICAgUG9pbnRlciB0byB1 c2VyLXN1cHBsaWVkIEFWRm9ybWF0Q29udGV4dCAoYWxsb2NhdGVkIGJ5CisrICogICAgICAgICAg ICAgICAgIGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQpLiBNYXkgYmUgYSBwb2ludGVyIHRvIE5VTEws IGluCisrICogICAgICAgICAgICAgICAgIHdoaWNoIGNhc2UgYW4gQVZGb3JtYXRDb250ZXh0IGlz IGFsbG9jYXRlZCBieSB0aGlzCisrICogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFuZCB3cml0 dGVuIGludG8gcHMuCisrICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBhIHVzZXItc3VwcGxp ZWQgQVZGb3JtYXRDb250ZXh0IHdpbGwgYmUgZnJlZWQKKysgKiAgICAgICAgICAgICAgICAgb24g ZmFpbHVyZSBhbmQgaXRzIHBvaW50ZXIgc2V0IHRvIE5VTEwuCisrICogQHBhcmFtIHVybCAgICAg IFVSTCBvZiB0aGUgc3RyZWFtIHRvIG9wZW4uCisrICogQHBhcmFtIGZtdCAgICAgIElmIG5vbi1O VUxMLCB0aGlzIHBhcmFtZXRlciBmb3JjZXMgYSBzcGVjaWZpYyBpbnB1dCBmb3JtYXQuCisrICog ICAgICAgICAgICAgICAgIE90aGVyd2lzZSB0aGUgZm9ybWF0IGlzIGF1dG9kZXRlY3RlZC4KKysg KiBAcGFyYW0gb3B0aW9ucyAgQSBkaWN0aW9uYXJ5IGZpbGxlZCB3aXRoIEFWRm9ybWF0Q29udGV4 dCBhbmQgZGVtdXhlci1wcml2YXRlCisrICogICAgICAgICAgICAgICAgIG9wdGlvbnMuCisrICog ICAgICAgICAgICAgICAgIE9uIHJldHVybiB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIGRlc3Ryb3ll ZCBhbmQgcmVwbGFjZWQgd2l0aAorKyAqICAgICAgICAgICAgICAgICBhIGRpY3QgY29udGFpbmlu ZyBvcHRpb25zIHRoYXQgd2VyZSBub3QgZm91bmQuIE1heSBiZSBOVUxMLgorKyAqCisrICogQHJl dHVybiAwIG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmU6IGZyZWVzIHBzLCBzZXRzIGl0cyBwb2ludGVy IHRvIE5VTEwsCisrICogICAgICAgICBhbmQgcmV0dXJucyBhIG5lZ2F0aXZlIEFWRVJST1IuCisr ICoKKysgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byB1c2UgY3VzdG9tIElPLCBwcmVhbGxvY2F0ZSB0 aGUgZm9ybWF0IGNvbnRleHQgYW5kIHNldCBpdHMgcGIgZmllbGQuCisrICovCisraW50IGF2Zm9y bWF0X29wZW5faW5wdXQoQVZGb3JtYXRDb250ZXh0ICoqcHMsIGNvbnN0IGNoYXIgKnVybCwKKysg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVklucHV0Rm9ybWF0ICpmbXQsIEFWRGljdGlv bmFyeSAqKm9wdGlvbnMpOworKworKy8qKgorKyAqIFJlYWQgcGFja2V0cyBvZiBhIG1lZGlhIGZp bGUgdG8gZ2V0IHN0cmVhbSBpbmZvcm1hdGlvbi4gVGhpcworKyAqIGlzIHVzZWZ1bCBmb3IgZmls ZSBmb3JtYXRzIHdpdGggbm8gaGVhZGVycyBzdWNoIGFzIE1QRUcuIFRoaXMKKysgKiBmdW5jdGlv biBhbHNvIGNvbXB1dGVzIHRoZSByZWFsIGZyYW1lcmF0ZSBpbiBjYXNlIG9mIE1QRUctMiByZXBl YXQKKysgKiBmcmFtZSBtb2RlLgorKyAqIFRoZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24gaXMgbm90 IGNoYW5nZWQgYnkgdGhpcyBmdW5jdGlvbjsKKysgKiBleGFtaW5lZCBwYWNrZXRzIG1heSBiZSBi dWZmZXJlZCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KKysgKgorKyAqIEBwYXJhbSBpYyBtZWRpYSBm aWxlIGhhbmRsZQorKyAqIEBwYXJhbSBvcHRpb25zICBJZiBub24tTlVMTCwgYW4gaWMubmJfc3Ry ZWFtcyBsb25nIGFycmF5IG9mIHBvaW50ZXJzIHRvCisrICogICAgICAgICAgICAgICAgIGRpY3Rp b25hcmllcywgd2hlcmUgaS10aCBtZW1iZXIgY29udGFpbnMgb3B0aW9ucyBmb3IKKysgKiAgICAg ICAgICAgICAgICAgY29kZWMgY29ycmVzcG9uZGluZyB0byBpLXRoIHN0cmVhbS4KKysgKiAgICAg ICAgICAgICAgICAgT24gcmV0dXJuIGVhY2ggZGljdGlvbmFyeSB3aWxsIGJlIGZpbGxlZCB3aXRo IG9wdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZC4KKysgKiBAcmV0dXJuID49MCBpZiBPSywgQVZF UlJPUl94eHggb24gZXJyb3IKKysgKgorKyAqIEBub3RlIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZ3Vh cmFudGVlZCB0byBvcGVuIGFsbCB0aGUgY29kZWNzLCBzbworKyAqICAgICAgIG9wdGlvbnMgYmVp bmcgbm9uLWVtcHR5IGF0IHJldHVybiBpcyBhIHBlcmZlY3RseSBub3JtYWwgYmVoYXZpb3IuCisr ICoKKysgKiBAdG9kbyBMZXQgdGhlIHVzZXIgZGVjaWRlIHNvbWVob3cgd2hhdCBpbmZvcm1hdGlv biBpcyBuZWVkZWQgc28gdGhhdAorKyAqICAgICAgIHdlIGRvIG5vdCB3YXN0ZSB0aW1lIGdldHRp bmcgc3R1ZmYgdGhlIHVzZXIgZG9lcyBub3QgbmVlZC4KKysgKi8KKytpbnQgYXZmb3JtYXRfZmlu ZF9zdHJlYW1faW5mbyhBVkZvcm1hdENvbnRleHQgKmljLCBBVkRpY3Rpb25hcnkgKipvcHRpb25z KTsKKysKKysvKioKKysgKiBGaW5kIHRoZSBwcm9ncmFtcyB3aGljaCBiZWxvbmcgdG8gYSBnaXZl biBzdHJlYW0uCisrICoKKysgKiBAcGFyYW0gaWMgICAgbWVkaWEgZmlsZSBoYW5kbGUKKysgKiBA cGFyYW0gbGFzdCAgdGhlIGxhc3QgZm91bmQgcHJvZ3JhbSwgdGhlIHNlYXJjaCB3aWxsIHN0YXJ0 IGFmdGVyIHRoaXMKKysgKiAgICAgICAgICAgICAgcHJvZ3JhbSwgb3IgZnJvbSB0aGUgYmVnaW5u aW5nIGlmIGl0IGlzIE5VTEwKKysgKiBAcGFyYW0gcyAgICAgc3RyZWFtIGluZGV4CisrICoKKysg KiBAcmV0dXJuIHRoZSBuZXh0IHByb2dyYW0gd2hpY2ggYmVsb25ncyB0byBzLCBOVUxMIGlmIG5v IHByb2dyYW0gaXMgZm91bmQgb3IKKysgKiAgICAgICAgIHRoZSBsYXN0IHByb2dyYW0gaXMgbm90 IGFtb25nIHRoZSBwcm9ncmFtcyBvZiBpYy4KKysgKi8KKytBVlByb2dyYW0gKmF2X2ZpbmRfcHJv Z3JhbV9mcm9tX3N0cmVhbShBVkZvcm1hdENvbnRleHQgKmljLCBBVlByb2dyYW0gKmxhc3QsIGlu dCBzKTsKKysKKyt2b2lkIGF2X3Byb2dyYW1fYWRkX3N0cmVhbV9pbmRleChBVkZvcm1hdENvbnRl eHQgKmFjLCBpbnQgcHJvZ2lkLCB1bnNpZ25lZCBpbnQgaWR4KTsKKysKKysvKioKKysgKiBBZGQg dGhlIHN1cHBsaWVkIGluZGV4IG9mIGEgc3RyZWFtIHRvIHRoZSBBVlByb2dyYW0gd2l0aCBtYXRj aGluZyBpZC4KKysgKgorKyAqIEBwYXJhbSBhYyAgICAgIHRoZSBmb3JtYXQgY29udGV4dCB3aGlj aCBjb250YWlucyB0aGUgdGFyZ2V0IEFWUHJvZ3JhbQorKyAqIEBwYXJhbSBwcm9naWQgIHRoZSBJ RCBvZiB0aGUgQVZQcm9ncmFtIHdob3NlIHN0cmVhbSBpbmRleCBpcyB0byBiZSB1cGRhdGVkCisr ICogQHBhcmFtIGlkeCAgICAgdGhlIGluZGV4IG9mIHRoZSBzdHJlYW0gdG8gYmUgYWRkZWQKKysg KgorKyAqIEByZXR1cm4gPj0wIHVwb24gc3VjY2Vzc2Z1bCBhZGRpdGlvbiBvciBpZiBpbmRleCB3 YXMgYWxyZWFkeSBwcmVzZW50LAorKyAqICAgICAgICAgQVZFUlJPUiBpZiBubyBtYXRjaGluZyBw cm9ncmFtIGlzIGZvdW5kIG9yIHN0cmVhbSBpbmRleCBpcyBpbnZhbGlkIG9yCisrICogICAgICAg ICB0aGUgc3RyZWFtIGluZGV4IGFycmF5IHJlYWxsb2NhdGlvbiBmYWlsZWQuCisrICovCisraW50 IGF2X3Byb2dyYW1fYWRkX3N0cmVhbV9pbmRleDIoQVZGb3JtYXRDb250ZXh0ICphYywgaW50IHBy b2dpZCwgdW5zaWduZWQgaW50IGlkeCk7CisrCisrLyoqCisrICogRmluZCB0aGUgImJlc3QiIHN0 cmVhbSBpbiB0aGUgZmlsZS4KKysgKiBUaGUgYmVzdCBzdHJlYW0gaXMgZGV0ZXJtaW5lZCBhY2Nv cmRpbmcgdG8gdmFyaW91cyBoZXVyaXN0aWNzIGFzIHRoZSBtb3N0CisrICogbGlrZWx5IHRvIGJl IHdoYXQgdGhlIHVzZXIgZXhwZWN0cy4KKysgKiBJZiB0aGUgZGVjb2RlciBwYXJhbWV0ZXIgaXMg bm9uLU5VTEwsIGF2X2ZpbmRfYmVzdF9zdHJlYW0gd2lsbCBmaW5kIHRoZQorKyAqIGRlZmF1bHQg ZGVjb2RlciBmb3IgdGhlIHN0cmVhbSdzIGNvZGVjOyBzdHJlYW1zIGZvciB3aGljaCBubyBkZWNv ZGVyIGNhbgorKyAqIGJlIGZvdW5kIGFyZSBpZ25vcmVkLgorKyAqCisrICogQHBhcmFtIGljICAg ICAgICAgICAgICAgIG1lZGlhIGZpbGUgaGFuZGxlCisrICogQHBhcmFtIHR5cGUgICAgICAgICAg ICAgIHN0cmVhbSB0eXBlOiB2aWRlbywgYXVkaW8sIHN1YnRpdGxlcywgZXRjLgorKyAqIEBwYXJh bSB3YW50ZWRfc3RyZWFtX25iICB1c2VyLXJlcXVlc3RlZCBzdHJlYW0gbnVtYmVyLAorKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICBvciAtMSBmb3IgYXV0b21hdGljIHNlbGVjdGlvbgorKyAq IEBwYXJhbSByZWxhdGVkX3N0cmVhbSAgICB0cnkgdG8gZmluZCBhIHN0cmVhbSByZWxhdGVkIChl Zy4gaW4gdGhlIHNhbWUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSkgdG8g dGhpcyBvbmUsIG9yIC0xIGlmIG5vbmUKKysgKiBAcGFyYW0gZGVjb2Rlcl9yZXQgICAgICAgaWYg bm9uLU5VTEwsIHJldHVybnMgdGhlIGRlY29kZXIgZm9yIHRoZQorKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxlY3RlZCBzdHJlYW0KKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgICAgICAg ZmxhZ3M7IG5vbmUgYXJlIGN1cnJlbnRseSBkZWZpbmVkCisrICoKKysgKiBAcmV0dXJuICB0aGUg bm9uLW5lZ2F0aXZlIHN0cmVhbSBudW1iZXIgaW4gY2FzZSBvZiBzdWNjZXNzLAorKyAqICAgICAg ICAgIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORCBpZiBubyBzdHJlYW0gd2l0aCB0aGUgcmVxdWVz dGVkIHR5cGUKKysgKiAgICAgICAgICBjb3VsZCBiZSBmb3VuZCwKKysgKiAgICAgICAgICBBVkVS Uk9SX0RFQ09ERVJfTk9UX0ZPVU5EIGlmIHN0cmVhbXMgd2VyZSBmb3VuZCBidXQgbm8gZGVjb2Rl cgorKyAqCisrICogQG5vdGUgIElmIGF2X2ZpbmRfYmVzdF9zdHJlYW0gcmV0dXJucyBzdWNjZXNz ZnVsbHkgYW5kIGRlY29kZXJfcmV0IGlzIG5vdAorKyAqICAgICAgICBOVUxMLCB0aGVuICpkZWNv ZGVyX3JldCBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCB0byBhIHZhbGlkIEFWQ29kZWMuCisrICov CisraW50IGF2X2ZpbmRfYmVzdF9zdHJlYW0oQVZGb3JtYXRDb250ZXh0ICppYywKKysgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIEFWTWVkaWFUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHdhbnRlZF9zdHJlYW1fbmIsCisrICAgICAgICAgICAgICAgICAgICAgICAg aW50IHJlbGF0ZWRfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBBVkNvZGVjICoqZGVjb2Rlcl9yZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZs YWdzKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIG5leHQgZnJhbWUgb2YgYSBzdHJlYW0uCisr ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBmaWxlLCBhbmQg ZG9lcyBub3QgdmFsaWRhdGUKKysgKiB0aGF0IHdoYXQgaXMgdGhlcmUgYXJlIHZhbGlkIGZyYW1l cyBmb3IgdGhlIGRlY29kZXIuIEl0IHdpbGwgc3BsaXQgd2hhdCBpcworKyAqIHN0b3JlZCBpbiB0 aGUgZmlsZSBpbnRvIGZyYW1lcyBhbmQgcmV0dXJuIG9uZSBmb3IgZWFjaCBjYWxsLiBJdCB3aWxs IG5vdAorKyAqIG9taXQgaW52YWxpZCBkYXRhIGJldHdlZW4gdmFsaWQgZnJhbWVzIHNvIGFzIHRv IGdpdmUgdGhlIGRlY29kZXIgdGhlIG1heGltdW0KKysgKiBpbmZvcm1hdGlvbiBwb3NzaWJsZSBm b3IgZGVjb2RpbmcuCisrICoKKysgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuZWQgcGFja2V0IGlz IHJlZmVyZW5jZS1jb3VudGVkIChwa3QtPmJ1ZiBpcyBzZXQpIGFuZAorKyAqIHZhbGlkIGluZGVm aW5pdGVseS4gVGhlIHBhY2tldCBtdXN0IGJlIGZyZWVkIHdpdGggYXZfcGFja2V0X3VucmVmKCkg d2hlbgorKyAqIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIEZvciB2aWRlbywgdGhlIHBhY2tldCBj b250YWlucyBleGFjdGx5IG9uZSBmcmFtZS4KKysgKiBGb3IgYXVkaW8sIGl0IGNvbnRhaW5zIGFu IGludGVnZXIgbnVtYmVyIG9mIGZyYW1lcyBpZiBlYWNoIGZyYW1lIGhhcworKyAqIGEga25vd24g Zml4ZWQgc2l6ZSAoZS5nLiBQQ00gb3IgQURQQ00gZGF0YSkuIElmIHRoZSBhdWRpbyBmcmFtZXMg aGF2ZQorKyAqIGEgdmFyaWFibGUgc2l6ZSAoZS5nLiBNUEVHIGF1ZGlvKSwgdGhlbiBpdCBjb250 YWlucyBvbmUgZnJhbWUuCisrICoKKysgKiBwa3QtPnB0cywgcGt0LT5kdHMgYW5kIHBrdC0+ZHVy YXRpb24gYXJlIGFsd2F5cyBzZXQgdG8gY29ycmVjdAorKyAqIHZhbHVlcyBpbiBBVlN0cmVhbS50 aW1lX2Jhc2UgdW5pdHMgKGFuZCBndWVzc2VkIGlmIHRoZSBmb3JtYXQgY2Fubm90CisrICogcHJv dmlkZSB0aGVtKS4gcGt0LT5wdHMgY2FuIGJlIEFWX05PUFRTX1ZBTFVFIGlmIHRoZSB2aWRlbyBm b3JtYXQKKysgKiBoYXMgQi1mcmFtZXMsIHNvIGl0IGlzIGJldHRlciB0byByZWx5IG9uIHBrdC0+ ZHRzIGlmIHlvdSBkbyBub3QKKysgKiBkZWNvbXByZXNzIHRoZSBwYXlsb2FkLgorKyAqCisrICog QHJldHVybiAwIGlmIE9LLCA8IDAgb24gZXJyb3Igb3IgZW5kIG9mIGZpbGUuIE9uIGVycm9yLCBw a3Qgd2lsbCBiZSBibGFuaworKyAqICAgICAgICAgKGFzIGlmIGl0IGNhbWUgZnJvbSBhdl9wYWNr ZXRfYWxsb2MoKSkuCisrICoKKysgKiBAbm90ZSBwa3Qgd2lsbCBiZSBpbml0aWFsaXplZCwgc28g aXQgbWF5IGJlIHVuaW5pdGlhbGl6ZWQsIGJ1dCBpdCBtdXN0IG5vdAorKyAqICAgICAgIGNvbnRh aW4gZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZyZWVkLgorKyAqLworK2ludCBhdl9yZWFkX2ZyYW1l KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCk7CisrCisrLyoqCisrICogU2VlayB0 byB0aGUga2V5ZnJhbWUgYXQgdGltZXN0YW1wLgorKyAqICd0aW1lc3RhbXAnIGluICdzdHJlYW1f aW5kZXgnLgorKyAqCisrICogQHBhcmFtIHMgICAgICAgICAgICBtZWRpYSBmaWxlIGhhbmRsZQor KyAqIEBwYXJhbSBzdHJlYW1faW5kZXggSWYgc3RyZWFtX2luZGV4IGlzICgtMSksIGEgZGVmYXVs dCBzdHJlYW0gaXMgc2VsZWN0ZWQsCisrICogICAgICAgICAgICAgICAgICAgICBhbmQgdGltZXN0 YW1wIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGZyb20KKysgKiAgICAgICAgICAgICAgICAg ICAgIEFWX1RJTUVfQkFTRSB1bml0cyB0byB0aGUgc3RyZWFtIHNwZWNpZmljIHRpbWVfYmFzZS4K KysgKiBAcGFyYW0gdGltZXN0YW1wICAgIFRpbWVzdGFtcCBpbiBBVlN0cmVhbS50aW1lX2Jhc2Ug dW5pdHMgb3IsIGlmIG5vIHN0cmVhbQorKyAqICAgICAgICAgICAgICAgICAgICAgaXMgc3BlY2lm aWVkLCBpbiBBVl9USU1FX0JBU0UgdW5pdHMuCisrICogQHBhcmFtIGZsYWdzICAgICAgICBmbGFn cyB3aGljaCBzZWxlY3QgZGlyZWN0aW9uIGFuZCBzZWVraW5nIG1vZGUKKysgKgorKyAqIEByZXR1 cm4gPj0gMCBvbiBzdWNjZXNzCisrICovCisraW50IGF2X3NlZWtfZnJhbWUoQVZGb3JtYXRDb250 ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LCBpbnQ2NF90IHRpbWVzdGFtcCwKKysgICAgICAgICAg ICAgICAgICBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIFNlZWsgdG8gdGltZXN0YW1wIHRzLgor KyAqIFNlZWtpbmcgd2lsbCBiZSBkb25lIHNvIHRoYXQgdGhlIHBvaW50IGZyb20gd2hpY2ggYWxs IGFjdGl2ZSBzdHJlYW1zCisrICogY2FuIGJlIHByZXNlbnRlZCBzdWNjZXNzZnVsbHkgd2lsbCBi ZSBjbG9zZXN0IHRvIHRzIGFuZCB3aXRoaW4gbWluL21heF90cy4KKysgKiBBY3RpdmUgc3RyZWFt cyBhcmUgYWxsIHN0cmVhbXMgdGhhdCBoYXZlIEFWU3RyZWFtLmRpc2NhcmQgPCBBVkRJU0NBUkRf QUxMLgorKyAqCisrICogSWYgZmxhZ3MgY29udGFpbiBBVlNFRUtfRkxBR19CWVRFLCB0aGVuIGFs bCB0aW1lc3RhbXBzIGFyZSBpbiBieXRlcyBhbmQKKysgKiBhcmUgdGhlIGZpbGUgcG9zaXRpb24g KHRoaXMgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRlbXV4ZXJzKS4KKysgKiBJZiBmbGFn cyBjb250YWluIEFWU0VFS19GTEFHX0ZSQU1FLCB0aGVuIGFsbCB0aW1lc3RhbXBzIGFyZSBpbiBm cmFtZXMKKysgKiBpbiB0aGUgc3RyZWFtIHdpdGggc3RyZWFtX2luZGV4ICh0aGlzIG1heSBub3Qg YmUgc3VwcG9ydGVkIGJ5IGFsbCBkZW11eGVycykuCisrICogT3RoZXJ3aXNlIGFsbCB0aW1lc3Rh bXBzIGFyZSBpbiB1bml0cyBvZiB0aGUgc3RyZWFtIHNlbGVjdGVkIGJ5IHN0cmVhbV9pbmRleAor KyAqIG9yIGlmIHN0cmVhbV9pbmRleCBpcyAtMSwgaW4gQVZfVElNRV9CQVNFIHVuaXRzLgorKyAq IElmIGZsYWdzIGNvbnRhaW4gQVZTRUVLX0ZMQUdfQU5ZLCB0aGVuIG5vbi1rZXlmcmFtZXMgYXJl IHRyZWF0ZWQgYXMKKysgKiBrZXlmcmFtZXMgKHRoaXMgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkg YWxsIGRlbXV4ZXJzKS4KKysgKiBJZiBmbGFncyBjb250YWluIEFWU0VFS19GTEFHX0JBQ0tXQVJE LCBpdCBpcyBpZ25vcmVkLgorKyAqCisrICogQHBhcmFtIHMgICAgICAgICAgICBtZWRpYSBmaWxl IGhhbmRsZQorKyAqIEBwYXJhbSBzdHJlYW1faW5kZXggaW5kZXggb2YgdGhlIHN0cmVhbSB3aGlj aCBpcyB1c2VkIGFzIHRpbWUgYmFzZSByZWZlcmVuY2UKKysgKiBAcGFyYW0gbWluX3RzICAgICAg IHNtYWxsZXN0IGFjY2VwdGFibGUgdGltZXN0YW1wCisrICogQHBhcmFtIHRzICAgICAgICAgICB0 YXJnZXQgdGltZXN0YW1wCisrICogQHBhcmFtIG1heF90cyAgICAgICBsYXJnZXN0IGFjY2VwdGFi bGUgdGltZXN0YW1wCisrICogQHBhcmFtIGZsYWdzICAgICAgICBmbGFncworKyAqIEByZXR1cm4g Pj0wIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisrICoKKysgKiBAbm90ZSBUaGlz IGlzIHBhcnQgb2YgdGhlIG5ldyBzZWVrIEFQSSB3aGljaCBpcyBzdGlsbCB1bmRlciBjb25zdHJ1 Y3Rpb24uCisrICovCisraW50IGF2Zm9ybWF0X3NlZWtfZmlsZShBVkZvcm1hdENvbnRleHQgKnMs IGludCBzdHJlYW1faW5kZXgsIGludDY0X3QgbWluX3RzLCBpbnQ2NF90IHRzLCBpbnQ2NF90IG1h eF90cywgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBEaXNjYXJkIGFsbCBpbnRlcm5hbGx5IGJ1 ZmZlcmVkIGRhdGEuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aAorKyAqIGRp c2NvbnRpbnVpdGllcyBpbiB0aGUgYnl0ZSBzdHJlYW0uIEdlbmVyYWxseSB3b3JrcyBvbmx5IHdp dGggZm9ybWF0cyB0aGF0CisrICogY2FuIHJlc3luYy4gVGhpcyBpbmNsdWRlcyBoZWFkZXJsZXNz IGZvcm1hdHMgbGlrZSBNUEVHLVRTL1RTIGJ1dCBzaG91bGQgYWxzbworKyAqIHdvcmsgd2l0aCBO VVQsIE9nZyBhbmQgaW4gYSBsaW1pdGVkIHdheSBBVkkgZm9yIGV4YW1wbGUuCisrICoKKysgKiBU aGUgc2V0IG9mIHN0cmVhbXMsIHRoZSBkZXRlY3RlZCBkdXJhdGlvbiwgc3RyZWFtIHBhcmFtZXRl cnMgYW5kIGNvZGVjcyBkbworKyAqIG5vdCBjaGFuZ2Ugd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rp b24uIElmIHlvdSB3YW50IGEgY29tcGxldGUgcmVzZXQsIGl0J3MKKysgKiBiZXR0ZXIgdG8gb3Bl biBhIG5ldyBBVkZvcm1hdENvbnRleHQuCisrICoKKysgKiBUaGlzIGRvZXMgbm90IGZsdXNoIHRo ZSBBVklPQ29udGV4dCAocy0+cGIpLiBJZiBuZWNlc3NhcnksIGNhbGwKKysgKiBhdmlvX2ZsdXNo KHMtPnBiKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKyAqCisrICogQHBhcmFtIHMg bWVkaWEgZmlsZSBoYW5kbGUKKysgKiBAcmV0dXJuID49MCBvbiBzdWNjZXNzLCBlcnJvciBjb2Rl IG90aGVyd2lzZQorKyAqLworK2ludCBhdmZvcm1hdF9mbHVzaChBVkZvcm1hdENvbnRleHQgKnMp OworKworKy8qKgorKyAqIFN0YXJ0IHBsYXlpbmcgYSBuZXR3b3JrLWJhc2VkIHN0cmVhbSAoZS5n LiBSVFNQIHN0cmVhbSkgYXQgdGhlCisrICogY3VycmVudCBwb3NpdGlvbi4KKysgKi8KKytpbnQg YXZfcmVhZF9wbGF5KEFWRm9ybWF0Q29udGV4dCAqcyk7CisrCisrLyoqCisrICogUGF1c2UgYSBu ZXR3b3JrLWJhc2VkIHN0cmVhbSAoZS5nLiBSVFNQIHN0cmVhbSkuCisrICoKKysgKiBVc2UgYXZf cmVhZF9wbGF5KCkgdG8gcmVzdW1lIGl0LgorKyAqLworK2ludCBhdl9yZWFkX3BhdXNlKEFWRm9y bWF0Q29udGV4dCAqcyk7CisrCisrLyoqCisrICogQ29tbWFuZCBJRHMgdGhhdCBjYW4gYmUgc2Vu dCB0byB0aGUgZGVtdXhlcgorKyAqCisrICogVGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUg c2VudCB0byBhIGRlbXV4ZXIKKysgKiB1c2luZyA6OmF2Zm9ybWF0X3NlbmRfY29tbWFuZC4KKysg Ki8KKytlbnVtIEFWRm9ybWF0Q29tbWFuZElEIHsKKysgICAgLyoqCisrICAgICAqIFNlbmQgYSBS VFNQIGBTRVRfUEFSQU1FVEVSYCByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIKKysgICAgICoKKysgICAg ICogU2VuZHMgYW4gU0VUX1BBUkFNRVRFUiBSVFNQIGNvbW1hbmQgdG8gdGhlIHNlcnZlciwKKysg ICAgICogd2l0aCBhIGRhdGEgcGF5bG9hZCBvZiB0eXBlIDo6QVZSVFNQQ29tbWFuZFJlcXVlc3Qs CisrICAgICAqIG93bmVyc2hpcCBvZiBpdCBhbmQgaXRzIGRhdGEgcmVtYWlucyB3aXRoIHRoZSBj YWxsZXIuCisrICAgICAqCisrICAgICAqIEEgcmVwbHkgcmV0cmlldmVkIGlzIG9mIHR5cGUgOjpB VlJUU1BSZXNwb25zZSBhbmQgaXQKKysgICAgICogYW5kIGl0cyBjb250ZW50cyBtdXN0IGJlIGZy ZWVkIGJ5IHRoZSBjYWxsZXIuCisrICAgICAqLworKyAgICBBVkZPUk1BVF9DT01NQU5EX1JUU1Bf U0VUX1BBUkFNRVRFUiwKKyt9OworKworK3R5cGVkZWYgc3RydWN0IEFWUlRTUENvbW1hbmRSZXF1 ZXN0IHsKKysgICAgLyoqCisrICAgICAqIEhlYWRlcnMgc2VudCBpbiB0aGUgcmVxdWVzdCB0byB0 aGUgc2VydmVyCisrICAgICAqLworKyAgICBBVkRpY3Rpb25hcnkgKmhlYWRlcnM7CisrCisrICAg IC8qKgorKyAgICAgKiBCb2R5IHBheWxvYWQgc2l6ZQorKyAgICAgKi8KKysgICAgc2l6ZV90IGJv ZHlfbGVuOworKworKyAgICAvKioKKysgICAgICogQm9keSBwYXlsb2FkCisrICAgICAqLworKyAg ICBjaGFyICpib2R5OworK30gQVZSVFNQQ29tbWFuZFJlcXVlc3Q7CisrCisrdHlwZWRlZiBzdHJ1 Y3QgQVZSVFNQUmVzcG9uc2UgeworKyAgICAvKioKKysgICAgICogUmVzcG9uc2Ugc3RhdHVzIGNv ZGUgZnJvbSBzZXJ2ZXIKKysgICAgICovCisrICAgIGludCBzdGF0dXNfY29kZTsKKysKKysgICAg LyoqCisrICAgICAqIFJlYXNvbiBwaHJhc2UgZnJvbSB0aGUgc2VydmVyLCBkZXNjcmliaW5nIHRo ZQorKyAgICAgKiBzdGF0dXMgaW4gYSBodW1hbi1yZWFkYWJsZSB3YXkuCisrICAgICAqLworKyAg ICBjaGFyICpyZWFzb247CisrCisrICAgIC8qKgorKyAgICAgKiBCb2R5IHBheWxvYWQgc2l6ZQor KyAgICAgKi8KKysgICAgc2l6ZV90IGJvZHlfbGVuOworKworKyAgICAvKioKKysgICAgICogQm9k eSBwYXlsb2FkCisrICAgICAqLworKyAgICB1bnNpZ25lZCBjaGFyICpib2R5OworK30gQVZSVFNQ UmVzcG9uc2U7CisrCisrLyoqCisrICogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIGRlbXV4ZXIKKysg KgorKyAqIFNlbmRzIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBhbmQgKGRlcGVuZGluZyBvbiB0aGUg Y29tbWFuZCkKKysgKiBvcHRpb25hbGx5IGEgY29tbWFuZC1zcGVjaWZpYyBwYXlsb2FkIHRvIHRo ZSBkZW11eGVyIHRvIGhhbmRsZS4KKysgKgorKyAqIEBwYXJhbSBzICAgICBGb3JtYXQgY29udGV4 dCwgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aAorKyAqICAgICAgICAgICAgICA6OmF2Zm9ybWF0X2Fs bG9jX2NvbnRleHQuCisrICogQHBhcmFtIGlkICAgIElkZW50aWZpZXIgb2YgdHlwZSA6OkFWRm9y bWF0Q29tbWFuZElELAorKyAqICAgICAgICAgICAgICBpbmRpY2F0aW5nIHRoZSBjb21tYW5kIHRv IHNlbmQuCisrICogQHBhcmFtIGRhdGEgIENvbW1hbmQtc3BlY2lmaWMgZGF0YSwgYWxsb2NhdGVk IGJ5IHRoZSBjYWxsZXIKKysgKiAgICAgICAgICAgICAgYW5kIG93bmVyc2hpcCByZW1haW5zIHdp dGggdGhlIGNhbGxlci4KKysgKiAgICAgICAgICAgICAgRm9yIGRldGFpbHMgd2hhdCBpcyBleHBl Y3RlZCBoZXJlLCBjb25zdWx0IHRoZQorKyAqICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9m IHRoZSByZXNwZWN0aXZlIDo6QVZGb3JtYXRDb21tYW5kSUQuCisrICovCisraW50IGF2Zm9ybWF0 X3NlbmRfY29tbWFuZChBVkZvcm1hdENvbnRleHQgKnMsIGVudW0gQVZGb3JtYXRDb21tYW5kSUQg aWQsIHZvaWQgKmRhdGEpOworKworKy8qKgorKyAqIFJlY2VpdmUgYSBjb21tYW5kIHJlcGx5IGZy b20gdGhlIGRlbXV4ZXIKKysgKgorKyAqIFJldHJpZXZlcyBhIHJlcGx5IGZvciBhIHByZXZpb3Vz bHkgc2VudCBjb21tYW5kIGZyb20gdGhlIG11eGVyLgorKyAqCisrICogQHBhcmFtIHMgICAgICAg ICBGb3JtYXQgY29udGV4dCwgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aAorKyAqICAgICAgICAgICAg ICAgICAgOjphdmZvcm1hdF9hbGxvY19jb250ZXh0LgorKyAqIEBwYXJhbSBpZCAgICAgICAgSWRl bnRpZmllciBvZiB0eXBlIDo6QVZGb3JtYXRDb21tYW5kSUQsCisrICogICAgICAgICAgICAgICAg ICBpbmRpY2F0aW5nIHRoZSBjb21tYW5kIGZvciB3aGljaCB0byByZXRyaWV2ZQorKyAqICAgICAg ICAgICAgICAgICAgdGhlIHJlcGx5LgorKyAqIEBwYXJhbSBkYXRhX291dCAgUG9pbnRlZSBpcyBz ZXQgdG8gdGhlIGNvbW1hbmQgcmVwbHksIHRoZSBhY3R1YWwKKysgKiAgICAgICAgICAgICAgICAg IHR5cGUgZGVwZW5kcyBvbiB0aGUgY29tbWFuZC4gVGhpcyBpcyBhbGxvY2F0ZWQgYnkKKysgKiAg ICAgICAgICAgICAgICAgIHRoZSBtdXhlciBhbmQgbXVzdCBiZSBmcmVlZCB3aXRoIDo6YXZfZnJl ZS4KKysgKiAgICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIHRoZSBhY3R1YWwgZGF0YSBz ZXQgaGVyZSwgY29uc3VsdCB0aGUKKysgKiAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24g b2YgdGhlIHJlc3BlY3RpdmUgOjpBVkZvcm1hdENvbW1hbmRJRC4KKysgKi8KKytpbnQgYXZmb3Jt YXRfcmVjZWl2ZV9jb21tYW5kX3JlcGx5KEFWRm9ybWF0Q29udGV4dCAqcywgZW51bSBBVkZvcm1h dENvbW1hbmRJRCBpZCwgdm9pZCAqKmRhdGFfb3V0KTsKKysKKysvKioKKysgKiBDbG9zZSBhbiBv cGVuZWQgaW5wdXQgQVZGb3JtYXRDb250ZXh0LiBGcmVlIGl0IGFuZCBhbGwgaXRzIGNvbnRlbnRz CisrICogYW5kIHNldCAqcyB0byBOVUxMLgorKyAqLworK3ZvaWQgYXZmb3JtYXRfY2xvc2VfaW5w dXQoQVZGb3JtYXRDb250ZXh0ICoqcyk7CisrLyoqCisrICogQH0KKysgKi8KKysKKysjZGVmaW5l IEFWU0VFS19GTEFHX0JBQ0tXQVJEIDEgLy8vPCBzZWVrIGJhY2t3YXJkCisrI2RlZmluZSBBVlNF RUtfRkxBR19CWVRFICAgICAyIC8vLzwgc2Vla2luZyBiYXNlZCBvbiBwb3NpdGlvbiBpbiBieXRl cworKyNkZWZpbmUgQVZTRUVLX0ZMQUdfQU5ZICAgICAgNCAvLy88IHNlZWsgdG8gYW55IGZyYW1l LCBldmVuIG5vbi1rZXlmcmFtZXMKKysjZGVmaW5lIEFWU0VFS19GTEFHX0ZSQU1FICAgIDggLy8v PCBzZWVraW5nIGJhc2VkIG9uIGZyYW1lIG51bWJlcgorKworKy8qKgorKyAqIEBhZGR0b2dyb3Vw IGxhdmZfZW5jb2RpbmcKKysgKiBAeworKyAqLworKworKyNkZWZpbmUgQVZTVFJFQU1fSU5JVF9J Tl9XUklURV9IRUFERVIgMCAvLy88IHN0cmVhbSBwYXJhbWV0ZXJzIGluaXRpYWxpemVkIGluIGF2 Zm9ybWF0X3dyaXRlX2hlYWRlcgorKyNkZWZpbmUgQVZTVFJFQU1fSU5JVF9JTl9JTklUX09VVFBV VCAgMSAvLy88IHN0cmVhbSBwYXJhbWV0ZXJzIGluaXRpYWxpemVkIGluIGF2Zm9ybWF0X2luaXRf b3V0cHV0CisrCisrLyoqCisrICogQWxsb2NhdGUgdGhlIHN0cmVhbSBwcml2YXRlIGRhdGEgYW5k IHdyaXRlIHRoZSBzdHJlYW0gaGVhZGVyIHRvCisrICogYW4gb3V0cHV0IG1lZGlhIGZpbGUuCisr ICoKKysgKiBAcGFyYW0gcyAgICAgICAgTWVkaWEgZmlsZSBoYW5kbGUsIG11c3QgYmUgYWxsb2Nh dGVkIHdpdGgKKysgKiAgICAgICAgICAgICAgICAgYXZmb3JtYXRfYWxsb2NfY29udGV4dCgpLgor KyAqICAgICAgICAgICAgICAgICBJdHMgXHJlZiBBVkZvcm1hdENvbnRleHQub2Zvcm1hdCAib2Zv cm1hdCIgZmllbGQgbXVzdCBiZSBzZXQKKysgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGRlc2ly ZWQgb3V0cHV0IGZvcm1hdDsKKysgKiAgICAgICAgICAgICAgICAgSXRzIFxyZWYgQVZGb3JtYXRD b250ZXh0LnBiICJwYiIgZmllbGQgbXVzdCBiZSBzZXQgdG8gYW4KKysgKiAgICAgICAgICAgICAg ICAgYWxyZWFkeSBvcGVuZWQgOjpBVklPQ29udGV4dC4KKysgKiBAcGFyYW0gb3B0aW9ucyAgQW4g OjpBVkRpY3Rpb25hcnkgZmlsbGVkIHdpdGggQVZGb3JtYXRDb250ZXh0IGFuZAorKyAqICAgICAg ICAgICAgICAgICBtdXhlci1wcml2YXRlIG9wdGlvbnMuCisrICogICAgICAgICAgICAgICAgIE9u IHJldHVybiB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgcmVwbGFjZWQgd2l0 aAorKyAqICAgICAgICAgICAgICAgICBhIGRpY3QgY29udGFpbmluZyBvcHRpb25zIHRoYXQgd2Vy ZSBub3QgZm91bmQuIE1heSBiZSBOVUxMLgorKyAqCisrICogQHJldHZhbCBBVlNUUkVBTV9JTklU X0lOX1dSSVRFX0hFQURFUiBPbiBzdWNjZXNzLCBpZiB0aGUgY29kZWMgaGFkIG5vdCBhbHJlYWR5 IGJlZW4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5IGlu aXRpYWxpemVkIGluIGF2Zm9ybWF0X2luaXRfb3V0cHV0KCkuCisrICogQHJldHZhbCBBVlNUUkVB TV9JTklUX0lOX0lOSVRfT1VUUFVUICBPbiBzdWNjZXNzLCBpZiB0aGUgY29kZWMgaGFkIGFscmVh ZHkgYmVlbiBmdWxseQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5pdGlhbGl6ZWQgaW4gYXZmb3JtYXRfaW5pdF9vdXRwdXQoKS4KKysgKiBAcmV0dmFsIEFWRVJS T1IgICAgICAgICAgICAgICAgICAgICAgIEEgbmVnYXRpdmUgQVZFUlJPUiBvbiBmYWlsdXJlLgor KyAqCisrICogQHNlZSBhdl9vcHRfZmluZCwgYXZfZGljdF9zZXQsIGF2aW9fb3BlbiwgYXZfb2Zv cm1hdF9uZXh0LCBhdmZvcm1hdF9pbml0X291dHB1dC4KKysgKi8KKythdl93YXJuX3VudXNlZF9y ZXN1bHQKKytpbnQgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcywgQVZE aWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisrCisrLyoqCisrICogQWxsb2NhdGUgdGhlIHN0cmVhbSBw cml2YXRlIGRhdGEgYW5kIGluaXRpYWxpemUgdGhlIGNvZGVjLCBidXQgZG8gbm90IHdyaXRlIHRo ZSBoZWFkZXIuCisrICogTWF5IG9wdGlvbmFsbHkgYmUgdXNlZCBiZWZvcmUgYXZmb3JtYXRfd3Jp dGVfaGVhZGVyKCkgdG8gaW5pdGlhbGl6ZSBzdHJlYW0gcGFyYW1ldGVycworKyAqIGJlZm9yZSBh Y3R1YWxseSB3cml0aW5nIHRoZSBoZWFkZXIuCisrICogSWYgdXNpbmcgdGhpcyBmdW5jdGlvbiwg ZG8gbm90IHBhc3MgdGhlIHNhbWUgb3B0aW9ucyB0byBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKS4K KysgKgorKyAqIEBwYXJhbSBzICAgICAgICBNZWRpYSBmaWxlIGhhbmRsZSwgbXVzdCBiZSBhbGxv Y2F0ZWQgd2l0aAorKyAqICAgICAgICAgICAgICAgICBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCku CisrICogICAgICAgICAgICAgICAgIEl0cyBccmVmIEFWRm9ybWF0Q29udGV4dC5vZm9ybWF0ICJv Zm9ybWF0IiBmaWVsZCBtdXN0IGJlIHNldAorKyAqICAgICAgICAgICAgICAgICB0byB0aGUgZGVz aXJlZCBvdXRwdXQgZm9ybWF0OworKyAqICAgICAgICAgICAgICAgICBJdHMgXHJlZiBBVkZvcm1h dENvbnRleHQucGIgInBiIiBmaWVsZCBtdXN0IGJlIHNldCB0byBhbgorKyAqICAgICAgICAgICAg ICAgICBhbHJlYWR5IG9wZW5lZCA6OkFWSU9Db250ZXh0LgorKyAqIEBwYXJhbSBvcHRpb25zICBB biA6OkFWRGljdGlvbmFyeSBmaWxsZWQgd2l0aCBBVkZvcm1hdENvbnRleHQgYW5kCisrICogICAg ICAgICAgICAgICAgIG11eGVyLXByaXZhdGUgb3B0aW9ucy4KKysgKiAgICAgICAgICAgICAgICAg T24gcmV0dXJuIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgZGVzdHJveWVkIGFuZCByZXBsYWNlZCB3 aXRoCisrICogICAgICAgICAgICAgICAgIGEgZGljdCBjb250YWluaW5nIG9wdGlvbnMgdGhhdCB3 ZXJlIG5vdCBmb3VuZC4gTWF5IGJlIE5VTEwuCisrICoKKysgKiBAcmV0dmFsIEFWU1RSRUFNX0lO SVRfSU5fV1JJVEVfSEVBREVSIE9uIHN1Y2Nlc3MsIGlmIHRoZSBjb2RlYyByZXF1aXJlcworKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZmb3JtYXRfd3JpdGVfaGVh ZGVyIHRvIGZ1bGx5IGluaXRpYWxpemUuCisrICogQHJldHZhbCBBVlNUUkVBTV9JTklUX0lOX0lO SVRfT1VUUFVUICBPbiBzdWNjZXNzLCBpZiB0aGUgY29kZWMgaGFzIGJlZW4gZnVsbHkKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkLgorKyAqIEBy ZXR2YWwgQVZFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgQW5lZ2F0aXZlIEFWRVJST1Igb24g ZmFpbHVyZS4KKysgKgorKyAqIEBzZWUgYXZfb3B0X2ZpbmQsIGF2X2RpY3Rfc2V0LCBhdmlvX29w ZW4sIGF2X29mb3JtYXRfbmV4dCwgYXZmb3JtYXRfd3JpdGVfaGVhZGVyLgorKyAqLworK2F2X3dh cm5fdW51c2VkX3Jlc3VsdAorK2ludCBhdmZvcm1hdF9pbml0X291dHB1dChBVkZvcm1hdENvbnRl eHQgKnMsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOworKworKy8qKgorKyAqIFdyaXRlIGEgcGFj a2V0IHRvIGFuIG91dHB1dCBtZWRpYSBmaWxlLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBwYXNz ZXMgdGhlIHBhY2tldCBkaXJlY3RseSB0byB0aGUgbXV4ZXIsIHdpdGhvdXQgYW55IGJ1ZmZlcmlu ZworKyAqIG9yIHJlb3JkZXJpbmcuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNvcnJl Y3RseSBpbnRlcmxlYXZpbmcgdGhlCisrICogcGFja2V0cyBpZiB0aGUgZm9ybWF0IHJlcXVpcmVz IGl0LiBDYWxsZXJzIHRoYXQgd2FudCBsaWJhdmZvcm1hdCB0byBoYW5kbGUKKysgKiB0aGUgaW50 ZXJsZWF2aW5nIHNob3VsZCBjYWxsIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkgaW5zdGVh ZCBvZiB0aGlzCisrICogZnVuY3Rpb24uCisrICoKKysgKiBAcGFyYW0gcyBtZWRpYSBmaWxlIGhh bmRsZQorKyAqIEBwYXJhbSBwa3QgVGhlIHBhY2tldCBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJl IHdyaXR0ZW4uIE5vdGUgdGhhdCB1bmxpa2UKKysgKiAgICAgICAgICAgIGF2X2ludGVybGVhdmVk X3dyaXRlX2ZyYW1lKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZQorKyAqICAgICAgICAg ICAgb3duZXJzaGlwIG9mIHRoZSBwYWNrZXQgcGFzc2VkIHRvIGl0ICh0aG91Z2ggc29tZSBtdXhl cnMgbWF5IG1ha2UKKysgKiAgICAgICAgICAgIGFuIGludGVybmFsIHJlZmVyZW5jZSB0byB0aGUg aW5wdXQgcGFja2V0KS4KKysgKiAgICAgICAgICAgIDxicj4KKysgKiAgICAgICAgICAgIFRoaXMg cGFyYW1ldGVyIGNhbiBiZSBOVUxMIChhdCBhbnkgdGltZSwgbm90IGp1c3QgYXQgdGhlIGVuZCks IGluCisrICogICAgICAgICAgICBvcmRlciB0byBpbW1lZGlhdGVseSBmbHVzaCBkYXRhIGJ1ZmZl cmVkIHdpdGhpbiB0aGUgbXV4ZXIsIGZvcgorKyAqICAgICAgICAgICAgbXV4ZXJzIHRoYXQgYnVm ZmVyIHVwIGRhdGEgaW50ZXJuYWxseSBiZWZvcmUgd3JpdGluZyBpdCB0byB0aGUKKysgKiAgICAg ICAgICAgIG91dHB1dC4KKysgKiAgICAgICAgICAgIDxicj4KKysgKiAgICAgICAgICAgIFBhY2tl dCdzIEByZWYgQVZQYWNrZXQuc3RyZWFtX2luZGV4ICJzdHJlYW1faW5kZXgiIGZpZWxkIG11c3Qg YmUKKysgKiAgICAgICAgICAgIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGNvcnJlc3BvbmRpbmcg c3RyZWFtIGluIEByZWYKKysgKiAgICAgICAgICAgIEFWRm9ybWF0Q29udGV4dC5zdHJlYW1zICJz LT5zdHJlYW1zIi4KKysgKiAgICAgICAgICAgIDxicj4KKysgKiAgICAgICAgICAgIFRoZSB0aW1l c3RhbXBzIChAcmVmIEFWUGFja2V0LnB0cyAicHRzIiwgQHJlZiBBVlBhY2tldC5kdHMgImR0cyIp CisrICogICAgICAgICAgICBtdXN0IGJlIHNldCB0byBjb3JyZWN0IHZhbHVlcyBpbiB0aGUgc3Ry ZWFtJ3MgdGltZWJhc2UgKHVubGVzcyB0aGUKKysgKiAgICAgICAgICAgIG91dHB1dCBmb3JtYXQg aXMgZmxhZ2dlZCB3aXRoIHRoZSBBVkZNVF9OT1RJTUVTVEFNUFMgZmxhZywgdGhlbgorKyAqICAg ICAgICAgICAgdGhleSBjYW4gYmUgc2V0IHRvIEFWX05PUFRTX1ZBTFVFKS4KKysgKiAgICAgICAg ICAgIFRoZSBkdHMgZm9yIHN1YnNlcXVlbnQgcGFja2V0cyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlv biBtdXN0IGJlIHN0cmljdGx5CisrICogICAgICAgICAgICBpbmNyZWFzaW5nIHdoZW4gY29tcGFy ZWQgaW4gdGhlaXIgcmVzcGVjdGl2ZSB0aW1lYmFzZXMgKHVubGVzcyB0aGUKKysgKiAgICAgICAg ICAgIG91dHB1dCBmb3JtYXQgaXMgZmxhZ2dlZCB3aXRoIHRoZSBBVkZNVF9UU19OT05TVFJJQ1Qs IHRoZW4gdGhleQorKyAqICAgICAgICAgICAgbWVyZWx5IGhhdmUgdG8gYmUgbm9uZGVjcmVhc2lu ZykuICBAcmVmIEFWUGFja2V0LmR1cmF0aW9uCisrICogICAgICAgICAgICAiZHVyYXRpb24iKSBz aG91bGQgYWxzbyBiZSBzZXQgaWYga25vd24uCisrICogQHJldHVybiA8IDAgb24gZXJyb3IsID0g MCBpZiBPSywgMSBpZiBmbHVzaGVkIGFuZCB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gZmx1c2gK KysgKgorKyAqIEBzZWUgYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUoKQorKyAqLworK2ludCBh dl93cml0ZV9mcmFtZShBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpOworKworKy8q KgorKyAqIFdyaXRlIGEgcGFja2V0IHRvIGFuIG91dHB1dCBtZWRpYSBmaWxlIGVuc3VyaW5nIGNv cnJlY3QgaW50ZXJsZWF2aW5nLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiB3aWxsIGJ1ZmZlciB0 aGUgcGFja2V0cyBpbnRlcm5hbGx5IGFzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhlCisrICogcGFj a2V0cyBpbiB0aGUgb3V0cHV0IGZpbGUgYXJlIHByb3Blcmx5IGludGVybGVhdmVkLCB1c3VhbGx5 IG9yZGVyZWQgYnkKKysgKiBpbmNyZWFzaW5nIGR0cy4gQ2FsbGVycyBkb2luZyB0aGVpciBvd24g aW50ZXJsZWF2aW5nIHNob3VsZCBjYWxsCisrICogYXZfd3JpdGVfZnJhbWUoKSBpbnN0ZWFkIG9m IHRoaXMgZnVuY3Rpb24uCisrICoKKysgKiBVc2luZyB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2Yg YXZfd3JpdGVfZnJhbWUoKSBjYW4gZ2l2ZSBtdXhlcnMgYWR2YW5jZQorKyAqIGtub3dsZWRnZSBv ZiBmdXR1cmUgcGFja2V0cywgaW1wcm92aW5nIGUuZy4gdGhlIGJlaGF2aW91ciBvZiB0aGUgbXA0 CisrICogbXV4ZXIgZm9yIFZGUiBjb250ZW50IGluIGZyYWdtZW50aW5nIG1vZGUuCisrICoKKysg KiBAcGFyYW0gcyBtZWRpYSBmaWxlIGhhbmRsZQorKyAqIEBwYXJhbSBwa3QgVGhlIHBhY2tldCBj b250YWluaW5nIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisrICogICAgICAgICAgICA8YnI+Cisr ICogICAgICAgICAgICBJZiB0aGUgcGFja2V0IGlzIHJlZmVyZW5jZS1jb3VudGVkLCB0aGlzIGZ1 bmN0aW9uIHdpbGwgdGFrZQorKyAqICAgICAgICAgICAgb3duZXJzaGlwIG9mIHRoaXMgcmVmZXJl bmNlIGFuZCB1bnJlZmVyZW5jZSBpdCBsYXRlciB3aGVuIGl0IHNlZXMKKysgKiAgICAgICAgICAg IGZpdC4gSWYgdGhlIHBhY2tldCBpcyBub3QgcmVmZXJlbmNlLWNvdW50ZWQsIGxpYmF2Zm9ybWF0 IHdpbGwKKysgKiAgICAgICAgICAgIG1ha2UgYSBjb3B5LgorKyAqICAgICAgICAgICAgVGhlIHJl dHVybmVkIHBhY2tldCB3aWxsIGJlIGJsYW5rIChhcyBpZiByZXR1cm5lZCBmcm9tCisrICogICAg ICAgICAgICBhdl9wYWNrZXRfYWxsb2MoKSksIGV2ZW4gb24gZXJyb3IuCisrICogICAgICAgICAg ICA8YnI+CisrICogICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgTlVMTCAoYXQgYW55 IHRpbWUsIG5vdCBqdXN0IGF0IHRoZSBlbmQpLCB0bworKyAqICAgICAgICAgICAgZmx1c2ggdGhl IGludGVybGVhdmluZyBxdWV1ZXMuCisrICogICAgICAgICAgICA8YnI+CisrICogICAgICAgICAg ICBQYWNrZXQncyBAcmVmIEFWUGFja2V0LnN0cmVhbV9pbmRleCAic3RyZWFtX2luZGV4IiBmaWVs ZCBtdXN0IGJlCisrICogICAgICAgICAgICBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBjb3JyZXNw b25kaW5nIHN0cmVhbSBpbiBAcmVmCisrICogICAgICAgICAgICBBVkZvcm1hdENvbnRleHQuc3Ry ZWFtcyAicy0+c3RyZWFtcyIuCisrICogICAgICAgICAgICA8YnI+CisrICogICAgICAgICAgICBU aGUgdGltZXN0YW1wcyAoQHJlZiBBVlBhY2tldC5wdHMgInB0cyIsIEByZWYgQVZQYWNrZXQuZHRz ICJkdHMiKQorKyAqICAgICAgICAgICAgbXVzdCBiZSBzZXQgdG8gY29ycmVjdCB2YWx1ZXMgaW4g dGhlIHN0cmVhbSdzIHRpbWViYXNlICh1bmxlc3MgdGhlCisrICogICAgICAgICAgICBvdXRwdXQg Zm9ybWF0IGlzIGZsYWdnZWQgd2l0aCB0aGUgQVZGTVRfTk9USU1FU1RBTVBTIGZsYWcsIHRoZW4K KysgKiAgICAgICAgICAgIHRoZXkgY2FuIGJlIHNldCB0byBBVl9OT1BUU19WQUxVRSkuCisrICog ICAgICAgICAgICBUaGUgZHRzIGZvciBzdWJzZXF1ZW50IHBhY2tldHMgaW4gb25lIHN0cmVhbSBt dXN0IGJlIHN0cmljdGx5CisrICogICAgICAgICAgICBpbmNyZWFzaW5nICh1bmxlc3MgdGhlIG91 dHB1dCBmb3JtYXQgaXMgZmxhZ2dlZCB3aXRoIHRoZQorKyAqICAgICAgICAgICAgQVZGTVRfVFNf Tk9OU1RSSUNULCB0aGVuIHRoZXkgbWVyZWx5IGhhdmUgdG8gYmUgbm9uZGVjcmVhc2luZykuCisr ICogICAgICAgICAgICBAcmVmIEFWUGFja2V0LmR1cmF0aW9uICJkdXJhdGlvbiIgc2hvdWxkIGFs c28gYmUgc2V0IGlmIGtub3duLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVn YXRpdmUgQVZFUlJPUiBvbiBlcnJvci4KKysgKgorKyAqIEBzZWUgYXZfd3JpdGVfZnJhbWUoKSwg QVZGb3JtYXRDb250ZXh0Lm1heF9pbnRlcmxlYXZlX2RlbHRhCisrICovCisraW50IGF2X2ludGVy bGVhdmVkX3dyaXRlX2ZyYW1lKEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCk7Cisr CisrLyoqCisrICogV3JpdGUgYW4gdW5jb2RlZCBmcmFtZSB0byBhbiBvdXRwdXQgbWVkaWEgZmls ZS4KKysgKgorKyAqIFRoZSBmcmFtZSBtdXN0IGJlIGNvcnJlY3RseSBpbnRlcmxlYXZlZCBhY2Nv cmRpbmcgdG8gdGhlIGNvbnRhaW5lcgorKyAqIHNwZWNpZmljYXRpb247IGlmIG5vdCwgYXZfaW50 ZXJsZWF2ZWRfd3JpdGVfdW5jb2RlZF9mcmFtZSgpIG11c3QgYmUgdXNlZC4KKysgKgorKyAqIFNl ZSBhdl9pbnRlcmxlYXZlZF93cml0ZV91bmNvZGVkX2ZyYW1lKCkgZm9yIGRldGFpbHMuCisrICov CisraW50IGF2X3dyaXRlX3VuY29kZWRfZnJhbWUoQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3Ry ZWFtX2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBBVkZyYW1lICpm cmFtZSk7CisrCisrLyoqCisrICogV3JpdGUgYW4gdW5jb2RlZCBmcmFtZSB0byBhbiBvdXRwdXQg bWVkaWEgZmlsZS4KKysgKgorKyAqIElmIHRoZSBtdXhlciBzdXBwb3J0cyBpdCwgdGhpcyBmdW5j dGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBhbiBBVkZyYW1lCisrICogc3RydWN0dXJl IGRpcmVjdGx5LCB3aXRob3V0IGVuY29kaW5nIGl0IGludG8gYSBwYWNrZXQuCisrICogSXQgaXMg bW9zdGx5IHVzZWZ1bCBmb3IgZGV2aWNlcyBhbmQgc2ltaWxhciBzcGVjaWFsIG11eGVycyB0aGF0 IHVzZSByYXcKKysgKiB2aWRlbyBvciBQQ00gZGF0YSBhbmQgd2lsbCBub3Qgc2VyaWFsaXplIGl0 IGludG8gYSBieXRlIHN0cmVhbS4KKysgKgorKyAqIFRvIHRlc3Qgd2hldGhlciBpdCBpcyBwb3Nz aWJsZSB0byB1c2UgaXQgd2l0aCBhIGdpdmVuIG11eGVyIGFuZCBzdHJlYW0sCisrICogdXNlIGF2 X3dyaXRlX3VuY29kZWRfZnJhbWVfcXVlcnkoKS4KKysgKgorKyAqIFRoZSBjYWxsZXIgZ2l2ZXMg dXAgb3duZXJzaGlwIG9mIHRoZSBmcmFtZSBhbmQgbXVzdCBub3QgYWNjZXNzIGl0CisrICogYWZ0 ZXJ3YXJkcy4KKysgKgorKyAqIEByZXR1cm4gID49MCBmb3Igc3VjY2VzcywgYSBuZWdhdGl2ZSBj b2RlIG9uIGVycm9yCisrICovCisraW50IGF2X2ludGVybGVhdmVkX3dyaXRlX3VuY29kZWRfZnJh bWUoQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBBVkZyYW1lICpmcmFtZSk7CisrCisrLyoq CisrICogVGVzdCB3aGV0aGVyIGEgbXV4ZXIgc3VwcG9ydHMgdW5jb2RlZCBmcmFtZS4KKysgKgor KyAqIEByZXR1cm4gID49MCBpZiBhbiB1bmNvZGVkIGZyYW1lIGNhbiBiZSB3cml0dGVuIHRvIHRo YXQgbXV4ZXIgYW5kIHN0cmVhbSwKKysgKiAgICAgICAgICA8MCBpZiBub3QKKysgKi8KKytpbnQg YXZfd3JpdGVfdW5jb2RlZF9mcmFtZV9xdWVyeShBVkZvcm1hdENvbnRleHQgKnMsIGludCBzdHJl YW1faW5kZXgpOworKworKy8qKgorKyAqIFdyaXRlIHRoZSBzdHJlYW0gdHJhaWxlciB0byBhbiBv dXRwdXQgbWVkaWEgZmlsZSBhbmQgZnJlZSB0aGUKKysgKiBmaWxlIHByaXZhdGUgZGF0YS4KKysg KgorKyAqIE1heSBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBhdmZv cm1hdF93cml0ZV9oZWFkZXIuCisrICoKKysgKiBAcGFyYW0gcyBtZWRpYSBmaWxlIGhhbmRsZQor KyAqIEByZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJyb3IKKysgKi8KKytpbnQgYXZf d3JpdGVfdHJhaWxlcihBVkZvcm1hdENvbnRleHQgKnMpOworKworKy8qKgorKyAqIFJldHVybiB0 aGUgb3V0cHV0IGZvcm1hdCBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIG91dHB1dCBmb3JtYXRz CisrICogd2hpY2ggYmVzdCBtYXRjaGVzIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLCBvciByZXR1 cm4gTlVMTCBpZgorKyAqIHRoZXJlIGlzIG5vIG1hdGNoLgorKyAqCisrICogQHBhcmFtIHNob3J0 X25hbWUgaWYgbm9uLU5VTEwgY2hlY2tzIGlmIHNob3J0X25hbWUgbWF0Y2hlcyB3aXRoIHRoZQor KyAqICAgICAgICAgICAgICAgICAgIG5hbWVzIG9mIHRoZSByZWdpc3RlcmVkIGZvcm1hdHMKKysg KiBAcGFyYW0gZmlsZW5hbWUgICBpZiBub24tTlVMTCBjaGVja3MgaWYgZmlsZW5hbWUgdGVybWlu YXRlcyB3aXRoIHRoZQorKyAqICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgb2YgdGhlIHJl Z2lzdGVyZWQgZm9ybWF0cworKyAqIEBwYXJhbSBtaW1lX3R5cGUgIGlmIG5vbi1OVUxMIGNoZWNr cyBpZiBtaW1lX3R5cGUgbWF0Y2hlcyB3aXRoIHRoZQorKyAqICAgICAgICAgICAgICAgICAgIE1J TUUgdHlwZSBvZiB0aGUgcmVnaXN0ZXJlZCBmb3JtYXRzCisrICovCisrY29uc3QgQVZPdXRwdXRG b3JtYXQgKmF2X2d1ZXNzX2Zvcm1hdChjb25zdCBjaGFyICpzaG9ydF9uYW1lLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX3R5cGUp OworKworKy8qKgorKyAqIEd1ZXNzIHRoZSBjb2RlYyBJRCBiYXNlZCB1cG9uIG11eGVyIGFuZCBm aWxlbmFtZS4KKysgKi8KKytlbnVtIEFWQ29kZWNJRCBhdl9ndWVzc19jb2RlYyhjb25zdCBBVk91 dHB1dEZvcm1hdCAqZm10LCBjb25zdCBjaGFyICpzaG9ydF9uYW1lLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptaW1lX3R5 cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVk1lZGlhVHlwZSB0eXBl KTsKKysKKysvKioKKysgKiBHZXQgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZGF0YSBjdXJy ZW50bHkgb3V0cHV0LgorKyAqIFRoZSBleGFjdCBtZWFuaW5nIG9mICJjdXJyZW50bHkgb3V0cHV0 IiBkZXBlbmRzIG9uIHRoZSBmb3JtYXQuCisrICogSXQgaXMgbW9zdGx5IHJlbGV2YW50IGZvciBk ZXZpY2VzIHRoYXQgaGF2ZSBhbiBpbnRlcm5hbCBidWZmZXIgYW5kL29yCisrICogd29yayBpbiBy ZWFsIHRpbWUuCisrICogQHBhcmFtIHMgICAgICAgICAgbWVkaWEgZmlsZSBoYW5kbGUKKysgKiBA cGFyYW0gc3RyZWFtICAgICBzdHJlYW0gaW4gdGhlIG1lZGlhIGZpbGUKKysgKiBAcGFyYW1bb3V0 XSBkdHMgICBEVFMgb2YgdGhlIGxhc3QgcGFja2V0IG91dHB1dCBmb3IgdGhlIHN0cmVhbSwgaW4g c3RyZWFtCisrICogICAgICAgICAgICAgICAgICAgdGltZV9iYXNlIHVuaXRzCisrICogQHBhcmFt W291dF0gd2FsbCAgYWJzb2x1dGUgdGltZSB3aGVuIHRoYXQgcGFja2V0IHdoYXMgb3V0cHV0LAor KyAqICAgICAgICAgICAgICAgICAgIGluIG1pY3Jvc2Vjb25kCisrICogQHJldHZhbCAgMCAgICAg ICAgICAgICAgIFN1Y2Nlc3MKKysgKiBAcmV0dmFsICBBVkVSUk9SKEVOT1NZUykgVGhlIGZvcm1h dCBkb2VzIG5vdCBzdXBwb3J0IGl0CisrICoKKysgKiBAbm90ZSBTb21lIGZvcm1hdHMgb3IgZGV2 aWNlcyBtYXkgbm90IGFsbG93IHRvIG1lYXN1cmUgZHRzIGFuZCB3YWxsCisrICogICAgICAgYXRv bWljYWxseS4KKysgKi8KKytpbnQgYXZfZ2V0X291dHB1dF90aW1lc3RhbXAoc3RydWN0IEFWRm9y bWF0Q29udGV4dCAqcywgaW50IHN0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50NjRfdCAqZHRzLCBpbnQ2NF90ICp3YWxsKTsKKysKKysKKysvKioKKysgKiBAfQorKyAqLwor KworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZmX21pc2MgVXRpbGl0eSBmdW5jdGlvbnMKKysg KiBAaW5ncm91cCBsaWJhdmYKKysgKiBAeworKyAqCisrICogTWlzY2VsbGFuZW91cyB1dGlsaXR5 IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGJvdGggbXV4aW5nIGFuZCBkZW11eGluZworKyAqIChvciBu ZWl0aGVyKS4KKysgKi8KKysKKysvKioKKysgKiBTZW5kIGEgbmljZSBoZXhhZGVjaW1hbCBkdW1w IG9mIGEgYnVmZmVyIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBzdHJlYW0uCisrICoKKysgKiBAcGFy YW0gZiBUaGUgZmlsZSBzdHJlYW0gcG9pbnRlciB3aGVyZSB0aGUgZHVtcCBzaG91bGQgYmUgc2Vu dCB0by4KKysgKiBAcGFyYW0gYnVmIGJ1ZmZlcgorKyAqIEBwYXJhbSBzaXplIGJ1ZmZlciBzaXpl CisrICoKKysgKiBAc2VlIGF2X2hleF9kdW1wX2xvZywgYXZfcGt0X2R1bXAyLCBhdl9wa3RfZHVt cF9sb2cyCisrICovCisrdm9pZCBhdl9oZXhfZHVtcChGSUxFICpmLCBjb25zdCB1aW50OF90ICpi dWYsIGludCBzaXplKTsKKysKKysvKioKKysgKiBTZW5kIGEgbmljZSBoZXhhZGVjaW1hbCBkdW1w IG9mIGEgYnVmZmVyIHRvIHRoZSBsb2cuCisrICoKKysgKiBAcGFyYW0gYXZjbCBBIHBvaW50ZXIg dG8gYW4gYXJiaXRyYXJ5IHN0cnVjdCBvZiB3aGljaCB0aGUgZmlyc3QgZmllbGQgaXMgYQorKyAq IHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QuCisrICogQHBhcmFtIGxldmVsIFRoZSBpbXBv cnRhbmNlIGxldmVsIG9mIHRoZSBtZXNzYWdlLCBsb3dlciB2YWx1ZXMgc2lnbmlmeWluZworKyAq IGhpZ2hlciBpbXBvcnRhbmNlLgorKyAqIEBwYXJhbSBidWYgYnVmZmVyCisrICogQHBhcmFtIHNp emUgYnVmZmVyIHNpemUKKysgKgorKyAqIEBzZWUgYXZfaGV4X2R1bXAsIGF2X3BrdF9kdW1wMiwg YXZfcGt0X2R1bXBfbG9nMgorKyAqLworK3ZvaWQgYXZfaGV4X2R1bXBfbG9nKHZvaWQgKmF2Y2ws IGludCBsZXZlbCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSk7CisrCisrLyoqCisrICog U2VuZCBhIG5pY2UgZHVtcCBvZiBhIHBhY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGUgc3RyZWFt LgorKyAqCisrICogQHBhcmFtIGYgVGhlIGZpbGUgc3RyZWFtIHBvaW50ZXIgd2hlcmUgdGhlIGR1 bXAgc2hvdWxkIGJlIHNlbnQgdG8uCisrICogQHBhcmFtIHBrdCBwYWNrZXQgdG8gZHVtcAorKyAq IEBwYXJhbSBkdW1wX3BheWxvYWQgVHJ1ZSBpZiB0aGUgcGF5bG9hZCBtdXN0IGJlIGRpc3BsYXll ZCwgdG9vLgorKyAqIEBwYXJhbSBzdCBBVlN0cmVhbSB0aGF0IHRoZSBwYWNrZXQgYmVsb25ncyB0 bworKyAqLworK3ZvaWQgYXZfcGt0X2R1bXAyKEZJTEUgKmYsIGNvbnN0IEFWUGFja2V0ICpwa3Qs IGludCBkdW1wX3BheWxvYWQsIGNvbnN0IEFWU3RyZWFtICpzdCk7CisrCisrCisrLyoqCisrICog U2VuZCBhIG5pY2UgZHVtcCBvZiBhIHBhY2tldCB0byB0aGUgbG9nLgorKyAqCisrICogQHBhcmFt IGF2Y2wgQSBwb2ludGVyIHRvIGFuIGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0 IGZpZWxkIGlzIGEKKysgKiBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0LgorKyAqIEBwYXJh bSBsZXZlbCBUaGUgaW1wb3J0YW5jZSBsZXZlbCBvZiB0aGUgbWVzc2FnZSwgbG93ZXIgdmFsdWVz IHNpZ25pZnlpbmcKKysgKiBoaWdoZXIgaW1wb3J0YW5jZS4KKysgKiBAcGFyYW0gcGt0IHBhY2tl dCB0byBkdW1wCisrICogQHBhcmFtIGR1bXBfcGF5bG9hZCBUcnVlIGlmIHRoZSBwYXlsb2FkIG11 c3QgYmUgZGlzcGxheWVkLCB0b28uCisrICogQHBhcmFtIHN0IEFWU3RyZWFtIHRoYXQgdGhlIHBh Y2tldCBiZWxvbmdzIHRvCisrICovCisrdm9pZCBhdl9wa3RfZHVtcF9sb2cyKHZvaWQgKmF2Y2ws IGludCBsZXZlbCwgY29uc3QgQVZQYWNrZXQgKnBrdCwgaW50IGR1bXBfcGF5bG9hZCwKKysgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQVZTdHJlYW0gKnN0KTsKKysKKysvKioKKysgKiBHZXQg dGhlIEFWQ29kZWNJRCBmb3IgdGhlIGdpdmVuIGNvZGVjIHRhZyB0YWcuCisrICogSWYgbm8gY29k ZWMgaWQgaXMgZm91bmQgcmV0dXJucyBBVl9DT0RFQ19JRF9OT05FLgorKyAqCisrICogQHBhcmFt IHRhZ3MgbGlzdCBvZiBzdXBwb3J0ZWQgY29kZWNfaWQtY29kZWNfdGFnIHBhaXJzLCBhcyBzdG9y ZWQKKysgKiBpbiBBVklucHV0Rm9ybWF0LmNvZGVjX3RhZyBhbmQgQVZPdXRwdXRGb3JtYXQuY29k ZWNfdGFnCisrICogQHBhcmFtIHRhZyAgY29kZWMgdGFnIHRvIG1hdGNoIHRvIGEgY29kZWMgSUQK KysgKi8KKytlbnVtIEFWQ29kZWNJRCBhdl9jb2RlY19nZXRfaWQoY29uc3Qgc3RydWN0IEFWQ29k ZWNUYWcgKiBjb25zdCAqdGFncywgdW5zaWduZWQgaW50IHRhZyk7CisrCisrLyoqCisrICogR2V0 IHRoZSBjb2RlYyB0YWcgZm9yIHRoZSBnaXZlbiBjb2RlYyBpZCBpZC4KKysgKiBJZiBubyBjb2Rl YyB0YWcgaXMgZm91bmQgcmV0dXJucyAwLgorKyAqCisrICogQHBhcmFtIHRhZ3MgbGlzdCBvZiBz dXBwb3J0ZWQgY29kZWNfaWQtY29kZWNfdGFnIHBhaXJzLCBhcyBzdG9yZWQKKysgKiBpbiBBVklu cHV0Rm9ybWF0LmNvZGVjX3RhZyBhbmQgQVZPdXRwdXRGb3JtYXQuY29kZWNfdGFnCisrICogQHBh cmFtIGlkICAgY29kZWMgSUQgdG8gbWF0Y2ggdG8gYSBjb2RlYyB0YWcKKysgKi8KKyt1bnNpZ25l ZCBpbnQgYXZfY29kZWNfZ2V0X3RhZyhjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqIGNvbnN0ICp0 YWdzLCBlbnVtIEFWQ29kZWNJRCBpZCk7CisrCisrLyoqCisrICogR2V0IHRoZSBjb2RlYyB0YWcg Zm9yIHRoZSBnaXZlbiBjb2RlYyBpZC4KKysgKgorKyAqIEBwYXJhbSB0YWdzIGxpc3Qgb2Ygc3Vw cG9ydGVkIGNvZGVjX2lkIC0gY29kZWNfdGFnIHBhaXJzLCBhcyBzdG9yZWQKKysgKiBpbiBBVklu cHV0Rm9ybWF0LmNvZGVjX3RhZyBhbmQgQVZPdXRwdXRGb3JtYXQuY29kZWNfdGFnCisrICogQHBh cmFtIGlkIGNvZGVjIGlkIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBpbiB0aGUgbGlzdAor KyAqIEBwYXJhbSB0YWcgQSBwb2ludGVyIHRvIHRoZSBmb3VuZCB0YWcKKysgKiBAcmV0dXJuIDAg aWYgaWQgd2FzIG5vdCBmb3VuZCBpbiB0YWdzLCA+IDAgaWYgaXQgd2FzIGZvdW5kCisrICovCisr aW50IGF2X2NvZGVjX2dldF90YWcyKGNvbnN0IHN0cnVjdCBBVkNvZGVjVGFnICogY29uc3QgKnRh Z3MsIGVudW0gQVZDb2RlY0lEIGlkLAorKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgKnRhZyk7CisrCisraW50IGF2X2ZpbmRfZGVmYXVsdF9zdHJlYW1faW5kZXgoQVZGb3JtYXRD b250ZXh0ICpzKTsKKysKKysvKioKKysgKiBHZXQgdGhlIGluZGV4IGZvciBhIHNwZWNpZmljIHRp bWVzdGFtcC4KKysgKgorKyAqIEBwYXJhbSBzdCAgICAgICAgc3RyZWFtIHRoYXQgdGhlIHRpbWVz dGFtcCBiZWxvbmdzIHRvCisrICogQHBhcmFtIHRpbWVzdGFtcCB0aW1lc3RhbXAgdG8gcmV0cmll dmUgdGhlIGluZGV4IGZvcgorKyAqIEBwYXJhbSBmbGFncyBpZiBBVlNFRUtfRkxBR19CQUNLV0FS RCB0aGVuIHRoZSByZXR1cm5lZCBpbmRleCB3aWxsIGNvcnJlc3BvbmQKKysgKiAgICAgICAgICAg ICAgICAgdG8gdGhlIHRpbWVzdGFtcCB3aGljaCBpcyA8PSB0aGUgcmVxdWVzdGVkIG9uZSwgaWYg YmFja3dhcmQKKysgKiAgICAgICAgICAgICAgICAgaXMgMCwgdGhlbiBpdCB3aWxsIGJlID49Cisr ICogICAgICAgICAgICAgIGlmIEFWU0VFS19GTEFHX0FOWSBzZWVrIHRvIGFueSBmcmFtZSwgb25s eSBrZXlmcmFtZXMgb3RoZXJ3aXNlCisrICogQHJldHVybiA8IDAgaWYgbm8gc3VjaCB0aW1lc3Rh bXAgY291bGQgYmUgZm91bmQKKysgKi8KKytpbnQgYXZfaW5kZXhfc2VhcmNoX3RpbWVzdGFtcChB VlN0cmVhbSAqc3QsIGludDY0X3QgdGltZXN0YW1wLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAq IEdldCB0aGUgaW5kZXggZW50cnkgY291bnQgZm9yIHRoZSBnaXZlbiBBVlN0cmVhbS4KKysgKgor KyAqIEBwYXJhbSBzdCBzdHJlYW0KKysgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgaW5kZXggZW50 cmllcyBpbiB0aGUgc3RyZWFtCisrICovCisraW50IGF2Zm9ybWF0X2luZGV4X2dldF9lbnRyaWVz X2NvdW50KGNvbnN0IEFWU3RyZWFtICpzdCk7CisrCisrLyoqCisrICogR2V0IHRoZSBBVkluZGV4 RW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gaW5kZXguCisrICoKKysgKiBAcGFyYW0g c3QgICAgICAgICAgU3RyZWFtIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBBVkluZGV4RW50cnku CisrICogQHBhcmFtIGlkeCAgICAgICAgIFRoZSBkZXNpcmVkIGluZGV4LgorKyAqIEByZXR1cm4g QSBwb2ludGVyIHRvIHRoZSByZXF1ZXN0ZWQgQVZJbmRleEVudHJ5IGlmIGl0IGV4aXN0cywgTlVM TCBvdGhlcndpc2UuCisrICoKKysgKiBAbm90ZSBUaGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlz IGZ1bmN0aW9uIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZAorKyAqICAgICAgIHVudGls IGFueSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzdHJlYW0gb3IgdGhlIHBhcmVudCBBVkZvcm1h dENvbnRleHQKKysgKiAgICAgICBhcyBpbnB1dCBhcmd1bWVudCBpcyBjYWxsZWQuCisrICovCisr Y29uc3QgQVZJbmRleEVudHJ5ICphdmZvcm1hdF9pbmRleF9nZXRfZW50cnkoQVZTdHJlYW0gKnN0 LCBpbnQgaWR4KTsKKysKKysvKioKKysgKiBHZXQgdGhlIEFWSW5kZXhFbnRyeSBjb3JyZXNwb25k aW5nIHRvIHRoZSBnaXZlbiB0aW1lc3RhbXAuCisrICoKKysgKiBAcGFyYW0gc3QgICAgICAgICAg U3RyZWFtIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBBVkluZGV4RW50cnkuCisrICogQHBhcmFt IHdhbnRlZF90aW1lc3RhbXAgICBUaW1lc3RhbXAgdG8gcmV0cmlldmUgdGhlIGluZGV4IGVudHJ5 IGZvci4KKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgSWYgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgdGhl biB0aGUgcmV0dXJuZWQgZW50cnkgd2lsbCBjb3JyZXNwb25kCisrICogICAgICAgICAgICAgICAg ICAgIHRvIHRoZSB0aW1lc3RhbXAgd2hpY2ggaXMgPD0gdGhlIHJlcXVlc3RlZCBvbmUsIGlmIGJh Y2t3YXJkCisrICogICAgICAgICAgICAgICAgICAgIGlzIDAsIHRoZW4gaXQgd2lsbCBiZSA+PQor KyAqICAgICAgICAgICAgICAgICAgICBpZiBBVlNFRUtfRkxBR19BTlkgc2VlayB0byBhbnkgZnJh bWUsIG9ubHkga2V5ZnJhbWVzIG90aGVyd2lzZS4KKysgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0 aGUgcmVxdWVzdGVkIEFWSW5kZXhFbnRyeSBpZiBpdCBleGlzdHMsIE5VTEwgb3RoZXJ3aXNlLgor KyAqCisrICogQG5vdGUgVGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBv bmx5IGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQKKysgKiAgICAgICB1bnRpbCBhbnkgZnVuY3Rpb24g dGhhdCB0YWtlcyB0aGUgc3RyZWFtIG9yIHRoZSBwYXJlbnQgQVZGb3JtYXRDb250ZXh0CisrICog ICAgICAgYXMgaW5wdXQgYXJndW1lbnQgaXMgY2FsbGVkLgorKyAqLworK2NvbnN0IEFWSW5kZXhF bnRyeSAqYXZmb3JtYXRfaW5kZXhfZ2V0X2VudHJ5X2Zyb21fdGltZXN0YW1wKEFWU3RyZWFtICpz dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQ2NF90IHdhbnRlZF90aW1lc3RhbXAsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKysvKioK KysgKiBBZGQgYW4gaW5kZXggZW50cnkgaW50byBhIHNvcnRlZCBsaXN0LiBVcGRhdGUgdGhlIGVu dHJ5IGlmIHRoZSBsaXN0CisrICogYWxyZWFkeSBjb250YWlucyBpdC4KKysgKgorKyAqIEBwYXJh bSB0aW1lc3RhbXAgdGltZXN0YW1wIGluIHRoZSB0aW1lIGJhc2Ugb2YgdGhlIGdpdmVuIHN0cmVh bQorKyAqLworK2ludCBhdl9hZGRfaW5kZXhfZW50cnkoQVZTdHJlYW0gKnN0LCBpbnQ2NF90IHBv cywgaW50NjRfdCB0aW1lc3RhbXAsCisrICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwg aW50IGRpc3RhbmNlLCBpbnQgZmxhZ3MpOworKworKworKy8qKgorKyAqIFNwbGl0IGEgVVJMIHN0 cmluZyBpbnRvIGNvbXBvbmVudHMuCisrICoKKysgKiBUaGUgcG9pbnRlcnMgdG8gYnVmZmVycyBm b3Igc3RvcmluZyBpbmRpdmlkdWFsIGNvbXBvbmVudHMgbWF5IGJlIG51bGwsCisrICogaW4gb3Jk ZXIgdG8gaWdub3JlIHRoYXQgY29tcG9uZW50LiBCdWZmZXJzIGZvciBjb21wb25lbnRzIG5vdCBm b3VuZCBhcmUKKysgKiBzZXQgdG8gZW1wdHkgc3RyaW5ncy4gSWYgdGhlIHBvcnQgaXMgbm90IGZv dW5kLCBpdCBpcyBzZXQgdG8gYSBuZWdhdGl2ZQorKyAqIHZhbHVlLgorKyAqCisrICogQHBhcmFt IHByb3RvIHRoZSBidWZmZXIgZm9yIHRoZSBwcm90b2NvbAorKyAqIEBwYXJhbSBwcm90b19zaXpl IHRoZSBzaXplIG9mIHRoZSBwcm90byBidWZmZXIKKysgKiBAcGFyYW0gYXV0aG9yaXphdGlvbiB0 aGUgYnVmZmVyIGZvciB0aGUgYXV0aG9yaXphdGlvbgorKyAqIEBwYXJhbSBhdXRob3JpemF0aW9u X3NpemUgdGhlIHNpemUgb2YgdGhlIGF1dGhvcml6YXRpb24gYnVmZmVyCisrICogQHBhcmFtIGhv c3RuYW1lIHRoZSBidWZmZXIgZm9yIHRoZSBob3N0IG5hbWUKKysgKiBAcGFyYW0gaG9zdG5hbWVf c2l6ZSB0aGUgc2l6ZSBvZiB0aGUgaG9zdG5hbWUgYnVmZmVyCisrICogQHBhcmFtIHBvcnRfcHRy IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcG9ydCBudW1iZXIgaW4KKysgKiBAcGFyYW0gcGF0aCB0 aGUgYnVmZmVyIGZvciB0aGUgcGF0aAorKyAqIEBwYXJhbSBwYXRoX3NpemUgdGhlIHNpemUgb2Yg dGhlIHBhdGggYnVmZmVyCisrICogQHBhcmFtIHVybCB0aGUgVVJMIHRvIHNwbGl0CisrICovCisr dm9pZCBhdl91cmxfc3BsaXQoY2hhciAqcHJvdG8sICAgICAgICAgaW50IHByb3RvX3NpemUsCisr ICAgICAgICAgICAgICAgICAgY2hhciAqYXV0aG9yaXphdGlvbiwgaW50IGF1dGhvcml6YXRpb25f c2l6ZSwKKysgICAgICAgICAgICAgICAgICBjaGFyICpob3N0bmFtZSwgICAgICBpbnQgaG9zdG5h bWVfc2l6ZSwKKysgICAgICAgICAgICAgICAgICBpbnQgKnBvcnRfcHRyLAorKyAgICAgICAgICAg ICAgICAgIGNoYXIgKnBhdGgsICAgICAgICAgIGludCBwYXRoX3NpemUsCisrICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqdXJsKTsKKysKKysKKysvKioKKysgKiBQcmludCBkZXRhaWxlZCBp bmZvcm1hdGlvbiBhYm91dCB0aGUgaW5wdXQgb3Igb3V0cHV0IGZvcm1hdCwgc3VjaCBhcworKyAq IGR1cmF0aW9uLCBiaXRyYXRlLCBzdHJlYW1zLCBjb250YWluZXIsIHByb2dyYW1zLCBtZXRhZGF0 YSwgc2lkZSBkYXRhLAorKyAqIGNvZGVjIGFuZCB0aW1lIGJhc2UuCisrICoKKysgKiBAcGFyYW0g aWMgICAgICAgIHRoZSBjb250ZXh0IHRvIGFuYWx5emUKKysgKiBAcGFyYW0gaW5kZXggICAgIGlu ZGV4IG9mIHRoZSBzdHJlYW0gdG8gZHVtcCBpbmZvcm1hdGlvbiBhYm91dAorKyAqIEBwYXJhbSB1 cmwgICAgICAgdGhlIFVSTCB0byBwcmludCwgc3VjaCBhcyBzb3VyY2Ugb3IgZGVzdGluYXRpb24g ZmlsZQorKyAqIEBwYXJhbSBpc19vdXRwdXQgU2VsZWN0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBj b250ZXh0IGlzIGFuIGlucHV0KDApIG9yIG91dHB1dCgxKQorKyAqLworK3ZvaWQgYXZfZHVtcF9m b3JtYXQoQVZGb3JtYXRDb250ZXh0ICppYywKKysgICAgICAgICAgICAgICAgICAgIGludCBpbmRl eCwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwKKysgICAgICAgICAgICAg ICAgICAgIGludCBpc19vdXRwdXQpOworKworKworKyNkZWZpbmUgQVZfRlJBTUVfRklMRU5BTUVf RkxBR1NfTVVMVElQTEUgICAgICAgICAgMSAgLy8vPCBBbGxvdyBtdWx0aXBsZSAlZAorKyNkZWZp bmUgQVZfRlJBTUVfRklMRU5BTUVfRkxBR1NfSUdOT1JFX1RSVU5DQVRJT04gMiAgLy8vPCBJZ25v cmUgdHJ1bmNhdGVkIG91dHB1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvcgorKworKy8q KgorKyAqIFJldHVybiBpbiAnYnVmJyB0aGUgcGF0aCB3aXRoICclZCcgcmVwbGFjZWQgYnkgYSBu dW1iZXIuCisrICoKKysgKiBBbHNvIGhhbmRsZXMgdGhlICclMG5kJyBmb3JtYXQgd2hlcmUgJ24n IGlzIHRoZSB0b3RhbCBudW1iZXIKKysgKiBvZiBkaWdpdHMgYW5kICclJScuCisrICoKKysgKiBA cGFyYW0gYnVmIGRlc3RpbmF0aW9uIGJ1ZmZlcgorKyAqIEBwYXJhbSBidWZfc2l6ZSBkZXN0aW5h dGlvbiBidWZmZXIgc2l6ZQorKyAqIEBwYXJhbSBwYXRoIG51bWJlcmVkIHNlcXVlbmNlIHN0cmlu ZworKyAqIEBwYXJhbSBudW1iZXIgZnJhbWUgbnVtYmVyCisrICogQHBhcmFtIGZsYWdzIEFWX0ZS QU1FX0ZJTEVOQU1FX0ZMQUdTXyoKKysgKiBAcmV0dXJuIDAgaWYgT0ssIC0xIG9uIGZvcm1hdCBl cnJvcgorKyAqLworK2ludCBhdl9nZXRfZnJhbWVfZmlsZW5hbWUyKGNoYXIgKmJ1ZiwgaW50IGJ1 Zl9zaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50 IG51bWJlciwgaW50IGZsYWdzKTsKKysKKytpbnQgYXZfZ2V0X2ZyYW1lX2ZpbGVuYW1lKGNoYXIg KmJ1ZiwgaW50IGJ1Zl9zaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqcGF0aCwgaW50IG51bWJlcik7CisrCisrLyoqCisrICogQ2hlY2sgd2hldGhlciBmaWxlbmFt ZSBhY3R1YWxseSBpcyBhIG51bWJlcmVkIHNlcXVlbmNlIGdlbmVyYXRvci4KKysgKgorKyAqIEBw YXJhbSBmaWxlbmFtZSBwb3NzaWJsZSBudW1iZXJlZCBzZXF1ZW5jZSBzdHJpbmcKKysgKiBAcmV0 dXJuIDEgaWYgYSB2YWxpZCBudW1iZXJlZCBzZXF1ZW5jZSBzdHJpbmcsIDAgb3RoZXJ3aXNlCisr ICovCisraW50IGF2X2ZpbGVuYW1lX251bWJlcl90ZXN0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsK KysKKysvKioKKysgKiBHZW5lcmF0ZSBhbiBTRFAgZm9yIGFuIFJUUCBzZXNzaW9uLgorKyAqCisr ICogTm90ZSwgdGhpcyBvdmVyd3JpdGVzIHRoZSBpZCB2YWx1ZXMgb2YgQVZTdHJlYW1zIGluIHRo ZSBtdXhlciBjb250ZXh0cworKyAqIGZvciBnZXR0aW5nIHVuaXF1ZSBkeW5hbWljIHBheWxvYWQg dHlwZXMuCisrICoKKysgKiBAcGFyYW0gYWMgYXJyYXkgb2YgQVZGb3JtYXRDb250ZXh0cyBkZXNj cmliaW5nIHRoZSBSVFAgc3RyZWFtcy4gSWYgdGhlCisrICogICAgICAgICAgIGFycmF5IGlzIGNv bXBvc2VkIGJ5IG9ubHkgb25lIGNvbnRleHQsIHN1Y2ggY29udGV4dCBjYW4gY29udGFpbgorKyAq ICAgICAgICAgICBtdWx0aXBsZSBBVlN0cmVhbXMgKG9uZSBBVlN0cmVhbSBwZXIgUlRQIHN0cmVh bSkuIE90aGVyd2lzZSwKKysgKiAgICAgICAgICAgYWxsIHRoZSBjb250ZXh0cyBpbiB0aGUgYXJy YXkgKGFuIEFWQ29kZWNDb250ZXh0IHBlciBSVFAgc3RyZWFtKQorKyAqICAgICAgICAgICBtdXN0 IGNvbnRhaW4gb25seSBvbmUgQVZTdHJlYW0uCisrICogQHBhcmFtIG5fZmlsZXMgbnVtYmVyIG9m IEFWQ29kZWNDb250ZXh0cyBjb250YWluZWQgaW4gYWMKKysgKiBAcGFyYW0gYnVmIGJ1ZmZlciB3 aGVyZSB0aGUgU0RQIHdpbGwgYmUgc3RvcmVkIChtdXN0IGJlIGFsbG9jYXRlZCBieQorKyAqICAg ICAgICAgICAgdGhlIGNhbGxlcikKKysgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVm ZmVyCisrICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgorKyAqLworK2lu dCBhdl9zZHBfY3JlYXRlKEFWRm9ybWF0Q29udGV4dCAqYWNbXSwgaW50IG5fZmlsZXMsIGNoYXIg KmJ1ZiwgaW50IHNpemUpOworKworKy8qKgorKyAqIFJldHVybiBhIHBvc2l0aXZlIHZhbHVlIGlm IHRoZSBnaXZlbiBmaWxlbmFtZSBoYXMgb25lIG9mIHRoZSBnaXZlbgorKyAqIGV4dGVuc2lvbnMs IDAgb3RoZXJ3aXNlLgorKyAqCisrICogQHBhcmFtIGZpbGVuYW1lICAgZmlsZSBuYW1lIHRvIGNo ZWNrIGFnYWluc3QgdGhlIGdpdmVuIGV4dGVuc2lvbnMKKysgKiBAcGFyYW0gZXh0ZW5zaW9ucyBh IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVuYW1lIGV4dGVuc2lvbnMKKysgKi8KKytpbnQg YXZfbWF0Y2hfZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpleHRlbnNpb25z KTsKKysKKysvKioKKysgKiBUZXN0IGlmIHRoZSBnaXZlbiBjb250YWluZXIgY2FuIHN0b3JlIGEg Y29kZWMuCisrICoKKysgKiBAcGFyYW0gb2ZtdCAgICAgICAgICAgY29udGFpbmVyIHRvIGNoZWNr IGZvciBjb21wYXRpYmlsaXR5CisrICogQHBhcmFtIGNvZGVjX2lkICAgICAgIGNvZGVjIHRvIHBv dGVudGlhbGx5IHN0b3JlIGluIGNvbnRhaW5lcgorKyAqIEBwYXJhbSBzdGRfY29tcGxpYW5jZSBz dGFuZGFyZHMgY29tcGxpYW5jZSBsZXZlbCwgb25lIG9mIEZGX0NPTVBMSUFOQ0VfKgorKyAqCisr ICogQHJldHVybiAxIGlmIGNvZGVjIHdpdGggSUQgY29kZWNfaWQgY2FuIGJlIHN0b3JlZCBpbiBv Zm10LCAwIGlmIGl0IGNhbm5vdC4KKysgKiAgICAgICAgIEEgbmVnYXRpdmUgbnVtYmVyIGlmIHRo aXMgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKysgKi8KKytpbnQgYXZmb3JtYXRfcXVl cnlfY29kZWMoY29uc3QgQVZPdXRwdXRGb3JtYXQgKm9mbXQsIGVudW0gQVZDb2RlY0lEIGNvZGVj X2lkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RkX2NvbXBsaWFuY2UpOworKwor K3N0cnVjdCBBVkJQcmludDsKKysvKioKKysgKiBNYWtlIGEgUkZDIDQyODEvNjM4MSBsaWtlIHN0 cmluZyBkZXNjcmliaW5nIGEgY29kZWMgZm9yIE1JTUUgdHlwZXMuCisrICoKKysgKiBAcGFyYW0g cGFyIHBvaW50ZXIgdG8gYW4gQVZDb2RlY1BhcmFtZXRlcnMgc3RydWN0IGRlc2NyaWJpbmcgdGhl IGNvZGVjCisrICogQHBhcmFtIGZyYW1lX3JhdGUgYW4gQVZSYXRpb25hbCBmb3IgdGhlIGZyYW1l IHJhdGUsIGZvciBkZWNpZGluZyB0aGUKKysgKiAgICAgICAgICAgICAgICAgICByaWdodCBwcm9m aWxlIGZvciB2aWRlbyBjb2RlY3MuIFBhc3MgYW4gaW52YWxpZAorKyAqICAgICAgICAgICAgICAg ICAgIEFWUmF0aW9uYWwgKDEvMCkgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyB1bmtub3duLgorKyAq IEBwYXJhbSBvdXQgdGhlIEFWQlByaW50IHRvIHdyaXRlIHRoZSBvdXRwdXQgdG8KKysgKiBAcmV0 dXJuIDwwIG9uIGVycm9yCisrICovCisraW50IGF2X21pbWVfY29kZWNfc3RyKGNvbnN0IEFWQ29k ZWNQYXJhbWV0ZXJzICpwYXIsCisrICAgICAgICAgICAgICAgICAgICAgIEFWUmF0aW9uYWwgZnJh bWVfcmF0ZSwgc3RydWN0IEFWQlByaW50ICpvdXQpOworKworKy8qKgorKyAqIEBkZWZncm91cCBy aWZmX2ZvdXJjYyBSSUZGIEZvdXJDQ3MKKysgKiBAeworKyAqIEdldCB0aGUgdGFibGVzIG1hcHBp bmcgUklGRiBGb3VyQ0NzIHRvIGxpYmF2Y29kZWMgQVZDb2RlY0lEcy4gVGhlIHRhYmxlcyBhcmUK KysgKiBtZWFudCB0byBiZSBwYXNzZWQgdG8gYXZfY29kZWNfZ2V0X2lkKCkvYXZfY29kZWNfZ2V0 X3RhZygpIGFzIGluIHRoZQorKyAqIGZvbGxvd2luZyBjb2RlOgorKyAqIEBjb2RlCisrICogdWlu dDMyX3QgdGFnID0gTUtUQUcoJ0gnLCAnMicsICc2JywgJzQnKTsKKysgKiBjb25zdCBzdHJ1Y3Qg QVZDb2RlY1RhZyAqdGFibGVbXSA9IHsgYXZmb3JtYXRfZ2V0X3JpZmZfdmlkZW9fdGFncygpLCAw IH07CisrICogZW51bSBBVkNvZGVjSUQgaWQgPSBhdl9jb2RlY19nZXRfaWQodGFibGUsIHRhZyk7 CisrICogQGVuZGNvZGUKKysgKi8KKysvKioKKysgKiBAcmV0dXJuIHRoZSB0YWJsZSBtYXBwaW5n IFJJRkYgRm91ckNDcyBmb3IgdmlkZW8gdG8gbGliYXZjb2RlYyBBVkNvZGVjSUQuCisrICovCisr Y29uc3Qgc3RydWN0IEFWQ29kZWNUYWcgKmF2Zm9ybWF0X2dldF9yaWZmX3ZpZGVvX3RhZ3Modm9p ZCk7CisrLyoqCisrICogQHJldHVybiB0aGUgdGFibGUgbWFwcGluZyBSSUZGIEZvdXJDQ3MgZm9y IGF1ZGlvIHRvIEFWQ29kZWNJRC4KKysgKi8KKytjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqYXZm b3JtYXRfZ2V0X3JpZmZfYXVkaW9fdGFncyh2b2lkKTsKKysvKioKKysgKiBAcmV0dXJuIHRoZSB0 YWJsZSBtYXBwaW5nIE1PViBGb3VyQ0NzIGZvciB2aWRlbyB0byBsaWJhdmNvZGVjIEFWQ29kZWNJ RC4KKysgKi8KKytjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqYXZmb3JtYXRfZ2V0X21vdl92aWRl b190YWdzKHZvaWQpOworKy8qKgorKyAqIEByZXR1cm4gdGhlIHRhYmxlIG1hcHBpbmcgTU9WIEZv dXJDQ3MgZm9yIGF1ZGlvIHRvIEFWQ29kZWNJRC4KKysgKi8KKytjb25zdCBzdHJ1Y3QgQVZDb2Rl Y1RhZyAqYXZmb3JtYXRfZ2V0X21vdl9hdWRpb190YWdzKHZvaWQpOworKworKy8qKgorKyAqIEB9 CisrICovCisrCisrLyoqCisrICogR3Vlc3MgdGhlIHNhbXBsZSBhc3BlY3QgcmF0aW8gb2YgYSBm cmFtZSwgYmFzZWQgb24gYm90aCB0aGUgc3RyZWFtIGFuZCB0aGUKKysgKiBmcmFtZSBhc3BlY3Qg cmF0aW8uCisrICoKKysgKiBTaW5jZSB0aGUgZnJhbWUgYXNwZWN0IHJhdGlvIGlzIHNldCBieSB0 aGUgY29kZWMgYnV0IHRoZSBzdHJlYW0gYXNwZWN0IHJhdGlvCisrICogaXMgc2V0IGJ5IHRoZSBk ZW11eGVyLCB0aGVzZSB0d28gbWF5IG5vdCBiZSBlcXVhbC4gVGhpcyBmdW5jdGlvbiB0cmllcyB0 bworKyAqIHJldHVybiB0aGUgdmFsdWUgdGhhdCB5b3Ugc2hvdWxkIHVzZSBpZiB5b3Ugd291bGQg bGlrZSB0byBkaXNwbGF5IHRoZSBmcmFtZS4KKysgKgorKyAqIEJhc2ljIGxvZ2ljIGlzIHRvIHVz ZSB0aGUgc3RyZWFtIGFzcGVjdCByYXRpbyBpZiBpdCBpcyBzZXQgdG8gc29tZXRoaW5nIHNhbmUK KysgKiBvdGhlcndpc2UgdXNlIHRoZSBmcmFtZSBhc3BlY3QgcmF0aW8uIFRoaXMgd2F5IGEgY29u dGFpbmVyIHNldHRpbmcsIHdoaWNoIGlzCisrICogdXN1YWxseSBlYXN5IHRvIG1vZGlmeSBjYW4g b3ZlcnJpZGUgdGhlIGNvZGVkIHZhbHVlIGluIHRoZSBmcmFtZXMuCisrICoKKysgKiBAcGFyYW0g Zm9ybWF0IHRoZSBmb3JtYXQgY29udGV4dCB3aGljaCB0aGUgc3RyZWFtIGlzIHBhcnQgb2YKKysg KiBAcGFyYW0gc3RyZWFtIHRoZSBzdHJlYW0gd2hpY2ggdGhlIGZyYW1lIGlzIHBhcnQgb2YKKysg KiBAcGFyYW0gZnJhbWUgdGhlIGZyYW1lIHdpdGggdGhlIGFzcGVjdCByYXRpbyB0byBiZSBkZXRl cm1pbmVkCisrICogQHJldHVybiB0aGUgZ3Vlc3NlZCAodmFsaWQpIHNhbXBsZV9hc3BlY3RfcmF0 aW8sIDAvMSBpZiBubyBpZGVhCisrICovCisrQVZSYXRpb25hbCBhdl9ndWVzc19zYW1wbGVfYXNw ZWN0X3JhdGlvKEFWRm9ybWF0Q29udGV4dCAqZm9ybWF0LCBBVlN0cmVhbSAqc3RyZWFtLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQVZGcmFtZSAqZnJh bWUpOworKworKy8qKgorKyAqIEd1ZXNzIHRoZSBmcmFtZSByYXRlLCBiYXNlZCBvbiBib3RoIHRo ZSBjb250YWluZXIgYW5kIGNvZGVjIGluZm9ybWF0aW9uLgorKyAqCisrICogQHBhcmFtIGN0eCB0 aGUgZm9ybWF0IGNvbnRleHQgd2hpY2ggdGhlIHN0cmVhbSBpcyBwYXJ0IG9mCisrICogQHBhcmFt IHN0cmVhbSB0aGUgc3RyZWFtIHdoaWNoIHRoZSBmcmFtZSBpcyBwYXJ0IG9mCisrICogQHBhcmFt IGZyYW1lIHRoZSBmcmFtZSBmb3Igd2hpY2ggdGhlIGZyYW1lIHJhdGUgc2hvdWxkIGJlIGRldGVy bWluZWQsIG1heSBiZSBOVUxMCisrICogQHJldHVybiB0aGUgZ3Vlc3NlZCAodmFsaWQpIGZyYW1l IHJhdGUsIDAvMSBpZiBubyBpZGVhCisrICovCisrQVZSYXRpb25hbCBhdl9ndWVzc19mcmFtZV9y YXRlKEFWRm9ybWF0Q29udGV4dCAqY3R4LCBBVlN0cmVhbSAqc3RyZWFtLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQVZGcmFtZSAqZnJhbWUpOworKworKy8qKgorKyAq IENoZWNrIGlmIHRoZSBzdHJlYW0gc3QgY29udGFpbmVkIGluIHMgaXMgbWF0Y2hlZCBieSB0aGUg c3RyZWFtIHNwZWNpZmllcgorKyAqIHNwZWMuCisrICoKKysgKiBTZWUgdGhlICJzdHJlYW0gc3Bl Y2lmaWVycyIgY2hhcHRlciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5bnRheAorKyAq IG9mIHNwZWMuCisrICoKKysgKiBAcmV0dXJuICA+MCBpZiBzdCBpcyBtYXRjaGVkIGJ5IHNwZWM7 CisrICogICAgICAgICAgMCAgaWYgc3QgaXMgbm90IG1hdGNoZWQgYnkgc3BlYzsKKysgKiAgICAg ICAgICBBVkVSUk9SIGNvZGUgaWYgc3BlYyBpcyBpbnZhbGlkCisrICoKKysgKiBAbm90ZSAgQSBz dHJlYW0gc3BlY2lmaWVyIGNhbiBtYXRjaCBzZXZlcmFsIHN0cmVhbXMgaW4gdGhlIGZvcm1hdC4K KysgKi8KKytpbnQgYXZmb3JtYXRfbWF0Y2hfc3RyZWFtX3NwZWNpZmllcihBVkZvcm1hdENvbnRl eHQgKnMsIEFWU3RyZWFtICpzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpzcGVjKTsKKysKKytpbnQgYXZmb3JtYXRfcXVldWVfYXR0YWNoZWRfcGlj dHVyZXMoQVZGb3JtYXRDb250ZXh0ICpzKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNl bmRpZiAvKiBBVkZPUk1BVF9BVkZPUk1BVF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC9hdmlv LmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy92OS9saWJhdmZvcm1hdC9hdmlvLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC9hdmlvLmguZmZt cGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTQzMjMyMSArMDIwMAorKysrIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0 L2F2aW8uaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTI3NTM0MSArMDIwMAorQEAgLTAsMCArMSw4 MzEgQEAKKysvKgorKyAqIGNvcHlyaWdodCAoYykgMjAwMSBGYWJyaWNlIEJlbGxhcmQKKysgKgor KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKyNpZm5k ZWYgQVZGT1JNQVRfQVZJT19ICisrI2RlZmluZSBBVkZPUk1BVF9BVklPX0gKKysKKysvKioKKysg KiBAZmlsZQorKyAqIEBpbmdyb3VwIGxhdmZfaW8KKysgKiBCdWZmZXJlZCBJL08gb3BlcmF0aW9u cworKyAqLworKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysK KysjaW5jbHVkZSAibGliYXZ1dGlsL2F0dHJpYnV0ZXMuaCIKKysjaW5jbHVkZSAibGliYXZ1dGls L2RpY3QuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgorKworKyNpbmNsdWRlICJsaWJh dmZvcm1hdC92ZXJzaW9uX21ham9yLmgiCisrCisrLyoqCisrICogU2Vla2luZyB3b3JrcyBsaWtl IGZvciBhIGxvY2FsIGZpbGUuCisrICovCisrI2RlZmluZSBBVklPX1NFRUtBQkxFX05PUk1BTCAo MSA8PCAwKQorKworKy8qKgorKyAqIFNlZWtpbmcgYnkgdGltZXN0YW1wIHdpdGggYXZpb19zZWVr X3RpbWUoKSBpcyBwb3NzaWJsZS4KKysgKi8KKysjZGVmaW5lIEFWSU9fU0VFS0FCTEVfVElNRSAg ICgxIDw8IDEpCisrCisrLyoqCisrICogQ2FsbGJhY2sgZm9yIGNoZWNraW5nIHdoZXRoZXIgdG8g YWJvcnQgYmxvY2tpbmcgZnVuY3Rpb25zLgorKyAqIEFWRVJST1JfRVhJVCBpcyByZXR1cm5lZCBp biB0aGlzIGNhc2UgYnkgdGhlIGludGVycnVwdGVkCisrICogZnVuY3Rpb24uIER1cmluZyBibG9j a2luZyBvcGVyYXRpb25zLCBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aAorKyAqIG9wYXF1ZSBhcyBw YXJhbWV0ZXIuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIDEsIHRoZQorKyAqIGJsb2NraW5nIG9w ZXJhdGlvbiB3aWxsIGJlIGFib3J0ZWQuCisrICoKKysgKiBObyBtZW1iZXJzIGNhbiBiZSBhZGRl ZCB0byB0aGlzIHN0cnVjdCB3aXRob3V0IGEgbWFqb3IgYnVtcCwgaWYKKysgKiBuZXcgZWxlbWVu dHMgaGF2ZSBiZWVuIGFkZGVkIGFmdGVyIHRoaXMgc3RydWN0IGluIEFWRm9ybWF0Q29udGV4dAor KyAqIG9yIEFWSU9Db250ZXh0LgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWSU9JbnRlcnJ1cHRD QiB7CisrICAgIGludCAoKmNhbGxiYWNrKSh2b2lkKik7CisrICAgIHZvaWQgKm9wYXF1ZTsKKyt9 IEFWSU9JbnRlcnJ1cHRDQjsKKysKKysvKioKKysgKiBEaXJlY3RvcnkgZW50cnkgdHlwZXMuCisr ICovCisrZW51bSBBVklPRGlyRW50cnlUeXBlIHsKKysgICAgQVZJT19FTlRSWV9VTktOT1dOLAor KyAgICBBVklPX0VOVFJZX0JMT0NLX0RFVklDRSwKKysgICAgQVZJT19FTlRSWV9DSEFSQUNURVJf REVWSUNFLAorKyAgICBBVklPX0VOVFJZX0RJUkVDVE9SWSwKKysgICAgQVZJT19FTlRSWV9OQU1F RF9QSVBFLAorKyAgICBBVklPX0VOVFJZX1NZTUJPTElDX0xJTkssCisrICAgIEFWSU9fRU5UUllf U09DS0VULAorKyAgICBBVklPX0VOVFJZX0ZJTEUsCisrICAgIEFWSU9fRU5UUllfU0VSVkVSLAor KyAgICBBVklPX0VOVFJZX1NIQVJFLAorKyAgICBBVklPX0VOVFJZX1dPUktHUk9VUCwKKyt9Owor KworKy8qKgorKyAqIERlc2NyaWJlcyBzaW5nbGUgZW50cnkgb2YgdGhlIGRpcmVjdG9yeS4KKysg KgorKyAqIE9ubHkgbmFtZSBhbmQgdHlwZSBmaWVsZHMgYXJlIGd1YXJhbnRlZWQgYmUgc2V0Lgor KyAqIFJlc3Qgb2YgZmllbGRzIGFyZSBwcm90b2NvbCBvci9hbmQgcGxhdGZvcm0gZGVwZW5kZW50 IGFuZCBtaWdodCBiZSB1bmtub3duLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWSU9EaXJFbnRy eSB7CisrICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGaWxl bmFtZSAqLworKyAgICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwg VHlwZSBvZiB0aGUgZW50cnkgKi8KKysgICAgaW50IHV0Zjg7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKio8IFNldCB0byAxIHdoZW4gbmFtZSBpcyBlbmNvZGVkIHdpdGggVVRGLTgsIDAg b3RoZXJ3aXNlLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmFtZSBjYW4gYmUgZW5jb2RlZCB3aXRoIFVURi04IGV2ZW4gdGhvdWdoIDAgaXMgc2V0LiAq LworKyAgICBpbnQ2NF90IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmlsZSBz aXplIGluIGJ5dGVzLCAtMSBpZiB1bmtub3duLiAqLworKyAgICBpbnQ2NF90IG1vZGlmaWNhdGlv bl90aW1lc3RhbXA7ICAgICAgIC8qKjwgVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiBpbiBtaWNy b3NlY29uZHMgc2luY2UgdW5peAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXBvY2gsIC0xIGlmIHVua25vd24uICovCisrICAgIGludDY0X3QgYWNjZXNz X3RpbWVzdGFtcDsgICAgICAgICAgICAgLyoqPCBUaW1lIG9mIGxhc3QgYWNjZXNzIGluIG1pY3Jv c2Vjb25kcyBzaW5jZSB1bml4IGVwb2NoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLTEgaWYgdW5rbm93bi4gKi8KKysgICAgaW50NjRfdCBzdGF0dXNf Y2hhbmdlX3RpbWVzdGFtcDsgICAgICAvKio8IFRpbWUgb2YgbGFzdCBzdGF0dXMgY2hhbmdlIGlu IG1pY3Jvc2Vjb25kcyBzaW5jZSB1bml4CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlcG9jaCwgLTEgaWYgdW5rbm93bi4gKi8KKysgICAgaW50NjRfdCB1 c2VyX2lkOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFVzZXIgSUQgb2Ygb3duZXIsIC0xIGlm IHVua25vd24uICovCisrICAgIGludDY0X3QgZ3JvdXBfaWQ7ICAgICAgICAgICAgICAgICAgICAg LyoqPCBHcm91cCBJRCBvZiBvd25lciwgLTEgaWYgdW5rbm93bi4gKi8KKysgICAgaW50NjRfdCBm aWxlbW9kZTsgICAgICAgICAgICAgICAgICAgICAvKio8IFVuaXggZmlsZSBtb2RlLCAtMSBpZiB1 bmtub3duLiAqLworK30gQVZJT0RpckVudHJ5OworKworK3R5cGVkZWYgc3RydWN0IEFWSU9EaXJD b250ZXh0IEFWSU9EaXJDb250ZXh0OworKworKy8qKgorKyAqIERpZmZlcmVudCBkYXRhIHR5cGVz IHRoYXQgY2FuIGJlIHJldHVybmVkIHZpYSB0aGUgQVZJTworKyAqIHdyaXRlX2RhdGFfdHlwZSBj YWxsYmFjay4KKysgKi8KKytlbnVtIEFWSU9EYXRhTWFya2VyVHlwZSB7CisrICAgIC8qKgorKyAg ICAgKiBIZWFkZXIgZGF0YTsgdGhpcyBuZWVkcyB0byBiZSBwcmVzZW50IGZvciB0aGUgc3RyZWFt IHRvIGJlIGRlY29kZWFibGUuCisrICAgICAqLworKyAgICBBVklPX0RBVEFfTUFSS0VSX0hFQURF UiwKKysgICAgLyoqCisrICAgICAqIEEgcG9pbnQgaW4gdGhlIG91dHB1dCBieXRlc3RyZWFtIHdo ZXJlIGEgZGVjb2RlciBjYW4gc3RhcnQgZGVjb2RpbmcKKysgICAgICogKGkuZS4gYSBrZXlmcmFt ZSkuIEEgZGVtdXhlci9kZWNvZGVyIGdpdmVuIHRoZSBkYXRhIGZsYWdnZWQgd2l0aAorKyAgICAg KiBBVklPX0RBVEFfTUFSS0VSX0hFQURFUiwgZm9sbG93ZWQgYnkgYW55IEFWSU9fREFUQV9NQVJL RVJfU1lOQ19QT0lOVCwKKysgICAgICogc2hvdWxkIGdpdmUgZGVjb2RlYWJsZSByZXN1bHRzLgor KyAgICAgKi8KKysgICAgQVZJT19EQVRBX01BUktFUl9TWU5DX1BPSU5ULAorKyAgICAvKioKKysg ICAgICogQSBwb2ludCBpbiB0aGUgb3V0cHV0IGJ5dGVzdHJlYW0gd2hlcmUgYSBkZW11eGVyIGNh biBzdGFydCBwYXJzaW5nCisrICAgICAqIChmb3Igbm9uIHNlbGYgc3luY2hyb25pemluZyBieXRl c3RyZWFtIGZvcm1hdHMpLiBUaGF0IGlzLCBhbnkKKysgICAgICogbm9uLWtleWZyYW1lIHBhY2tl dCBzdGFydCBwb2ludC4KKysgICAgICovCisrICAgIEFWSU9fREFUQV9NQVJLRVJfQk9VTkRBUllf UE9JTlQsCisrICAgIC8qKgorKyAgICAgKiBUaGlzIGlzIGFueSwgdW5sYWJlbGxlZCBkYXRhLiBJ dCBjYW4gZWl0aGVyIGJlIGEgbXV4ZXIgbm90IG1hcmtpbmcKKysgICAgICogYW55IHBvc2l0aW9u cyBhdCBhbGwsIGl0IGNhbiBiZSBhbiBhY3R1YWwgYm91bmRhcnkvc3luYyBwb2ludAorKyAgICAg KiB0aGF0IHRoZSBtdXhlciBjaG9vc2VzIG5vdCB0byBtYXJrLCBvciBhIGxhdGVyIHBhcnQgb2Yg YSBwYWNrZXQvZnJhZ21lbnQKKysgICAgICogdGhhdCBpcyBjdXQgaW50byBtdWx0aXBsZSB3cml0 ZSBjYWxsYmFja3MgZHVlIHRvIGxpbWl0ZWQgSU8gYnVmZmVyIHNpemUuCisrICAgICAqLworKyAg ICBBVklPX0RBVEFfTUFSS0VSX1VOS05PV04sCisrICAgIC8qKgorKyAgICAgKiBUcmFpbGVyIGRh dGEsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiBhY3R1YWwgY29udGVudCwgYnV0IG9ubHkgZm9yCisr ICAgICAqIGZpbmFsaXppbmcgdGhlIG91dHB1dCBmaWxlLgorKyAgICAgKi8KKysgICAgQVZJT19E QVRBX01BUktFUl9UUkFJTEVSLAorKyAgICAvKioKKysgICAgICogQSBwb2ludCBpbiB0aGUgb3V0 cHV0IGJ5dGVzdHJlYW0gd2hlcmUgdGhlIHVuZGVybHlpbmcgQVZJT0NvbnRleHQgbWlnaHQKKysg ICAgICogZmx1c2ggdGhlIGJ1ZmZlciBkZXBlbmRpbmcgb24gbGF0ZW5jeSBvciBidWZmZXJpbmcg cmVxdWlyZW1lbnRzLiBUeXBpY2FsbHkKKysgICAgICogbWVhbnMgdGhlIGVuZCBvZiBhIHBhY2tl dC4KKysgICAgICovCisrICAgIEFWSU9fREFUQV9NQVJLRVJfRkxVU0hfUE9JTlQsCisrfTsKKysK KysvKioKKysgKiBCeXRlc3RyZWFtIElPIENvbnRleHQuCisrICogTmV3IHB1YmxpYyBmaWVsZHMg Y2FuIGJlIGFkZGVkIHdpdGggbWlub3IgdmVyc2lvbiBidW1wcy4KKysgKiBSZW1vdmFsLCByZW9y ZGVyaW5nIGFuZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIHB1YmxpYyBmaWVsZHMgcmVxdWlyZQorKyAq IGEgbWFqb3IgdmVyc2lvbiBidW1wLgorKyAqIHNpemVvZihBVklPQ29udGV4dCkgbXVzdCBub3Qg YmUgdXNlZCBvdXRzaWRlIGxpYmF2Ki4KKysgKgorKyAqIEBub3RlIE5vbmUgb2YgdGhlIGZ1bmN0 aW9uIHBvaW50ZXJzIGluIEFWSU9Db250ZXh0IHNob3VsZCBiZSBjYWxsZWQKKysgKiAgICAgICBk aXJlY3RseSwgdGhleSBzaG91bGQgb25seSBiZSBzZXQgYnkgdGhlIGNsaWVudCBhcHBsaWNhdGlv bgorKyAqICAgICAgIHdoZW4gaW1wbGVtZW50aW5nIGN1c3RvbSBJL08uIE5vcm1hbGx5IHRoZXNl IGFyZSBzZXQgdG8gdGhlCisrICogICAgICAgZnVuY3Rpb24gcG9pbnRlcnMgc3BlY2lmaWVkIGlu IGF2aW9fYWxsb2NfY29udGV4dCgpCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZJT0NvbnRleHQg eworKyAgICAvKioKKysgICAgICogQSBjbGFzcyBmb3IgcHJpdmF0ZSBvcHRpb25zLgorKyAgICAg KgorKyAgICAgKiBJZiB0aGlzIEFWSU9Db250ZXh0IGlzIGNyZWF0ZWQgYnkgYXZpb19vcGVuMigp LCBhdl9jbGFzcyBpcyBzZXQgYW5kCisrICAgICAqIHBhc3NlcyB0aGUgb3B0aW9ucyBkb3duIHRv IHByb3RvY29scy4KKysgICAgICoKKysgICAgICogSWYgdGhpcyBBVklPQ29udGV4dCBpcyBtYW51 YWxseSBhbGxvY2F0ZWQsIHRoZW4gYXZfY2xhc3MgbWF5IGJlIHNldCBieQorKyAgICAgKiB0aGUg Y2FsbGVyLgorKyAgICAgKgorKyAgICAgKiB3YXJuaW5nIC0tIHRoaXMgZmllbGQgY2FuIGJlIE5V TEwsIGJlIHN1cmUgdG8gbm90IHBhc3MgdGhpcyBBVklPQ29udGV4dAorKyAgICAgKiB0byBhbnkg YXZfb3B0XyogZnVuY3Rpb25zIGluIHRoYXQgY2FzZS4KKysgICAgICovCisrICAgIGNvbnN0IEFW Q2xhc3MgKmF2X2NsYXNzOworKworKyAgICAvKgorKyAgICAgKiBUaGUgZm9sbG93aW5nIHNob3dz IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBidWZmZXIsIGJ1Zl9wdHIsCisrICAgICAqIGJ1Zl9w dHJfbWF4LCBidWZfZW5kLCBidWZfc2l6ZSwgYW5kIHBvcywgd2hlbiByZWFkaW5nIGFuZCB3aGVu IHdyaXRpbmcKKysgICAgICogKHNpbmNlIEFWSU9Db250ZXh0IGlzIHVzZWQgZm9yIGJvdGgpOgor KyAgICAgKgorKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAgICAgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRElORworKyAgICAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorKyAgICAgKgorKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICBidWZmZXJfc2l6ZSAgICAgICAgICAgICAgfAorKyAgICAgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tfAorKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgKgorKyAgICAgKiAgICAgICAgICAgICAg ICAgICAgICAgICBidWZmZXIgICAgICAgICAgYnVmX3B0ciAgICAgICBidWZfZW5kCisrICAgICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwvIC8gLyAv IC8gLyAvIC98LyAvIC8gLyAvIC8gL3wgICAgICAgICB8CisrICAgICAqICByZWFkIGJ1ZmZlcjog ICAgICAgICAgICAgIHwvIC8gY29uc3VtZWQgLyB8IHRvIGJlIHJlYWQgL3wgICAgICAgICB8Cisr ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwvIC8gLyAvIC8gLyAvIC98LyAvIC8g LyAvIC8gL3wgICAgICAgICB8CisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAqCisrICAgICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cG9zCisrICAgICAqICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICogIGlucHV0IGZpbGU6IHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgfAorKyAgICAgKiAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAqCisrICAgICAqCisrICAg ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICAgICAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBXUklUSU5HCisrICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisr ICAgICAqCisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIGJ1 ZmZlcl9zaXplICAgICAgICAgICAgICAgICB8CisrICAgICAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisrICAgICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8CisrICAgICAqCisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVmX3B0cl9tYXgKKysgICAgICogICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1ZmZlciAgICAgICAgICAgICAgICAgKGJ1Zl9wdHIpICAgICAgIGJ1Zl9lbmQK KysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLSsKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwvIC8gLyAvIC8gLyAvIC8gLyAvIC8gL3wgICAgICAgICAgICAgIHwKKysgICAgICogIHdyaXRl IGJ1ZmZlcjogICAgICAgICAgICAgIHwgLyAvIHRvIGJlIGZsdXNoZWQgLyAvIHwgICAgICAgICAg ICAgIHwKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwvIC8gLyAvIC8gLyAv IC8gLyAvIC8gL3wgICAgICAgICAgICAgIHwKKysgICAgICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKKysgICAgICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX3B0ciBjYW4gYmUgaW4gdGhpcworKyAg ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gYSBiYWNrd2FyZCBzZWVr CisrICAgICAqCisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcworKyAgICAg KiAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAqICBvdXRwdXQgZmlsZTogfCAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAg ICogICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgKgorKyAgICAgKi8KKysgICAgdW5zaWduZWQg Y2hhciAqYnVmZmVyOyAgLyoqPCBTdGFydCBvZiB0aGUgYnVmZmVyLiAqLworKyAgICBpbnQgYnVm ZmVyX3NpemU7ICAgICAgICAvKio8IE1heGltdW0gYnVmZmVyIHNpemUgKi8KKysgICAgdW5zaWdu ZWQgY2hhciAqYnVmX3B0cjsgLyoqPCBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8K KysgICAgdW5zaWduZWQgY2hhciAqYnVmX2VuZDsgLyoqPCBFbmQgb2YgdGhlIGRhdGEsIG1heSBi ZSBsZXNzIHRoYW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIrYnVm ZmVyX3NpemUgaWYgdGhlIHJlYWQgZnVuY3Rpb24gcmV0dXJuZWQKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZXNzIGRhdGEgdGhhbiByZXF1ZXN0ZWQsIGUuZy4gZm9yIHN0cmVh bXMgd2hlcmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBtb3JlIGRhdGEg aGFzIGJlZW4gcmVjZWl2ZWQgeWV0LiAqLworKyAgICB2b2lkICpvcGFxdWU7ICAgICAgICAgICAv Kio8IEEgcHJpdmF0ZSBwb2ludGVyLCBwYXNzZWQgdG8gdGhlIHJlYWQvd3JpdGUvc2Vlay8uLi4K KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuICovCisrICAgIGlu dCAoKnJlYWRfcGFja2V0KSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXpl KTsKKysgICAgaW50ICgqd3JpdGVfcGFja2V0KSh2b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3Qg KmJ1ZiwgaW50IGJ1Zl9zaXplKTsKKysgICAgaW50NjRfdCAoKnNlZWspKHZvaWQgKm9wYXF1ZSwg aW50NjRfdCBvZmZzZXQsIGludCB3aGVuY2UpOworKyAgICBpbnQ2NF90IHBvczsgICAgICAgICAg ICAvKio8IHBvc2l0aW9uIGluIHRoZSBmaWxlIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworKyAg ICBpbnQgZW9mX3JlYWNoZWQ7ICAgICAgICAvKio8IHRydWUgaWYgd2FzIHVuYWJsZSB0byByZWFk IGR1ZSB0byBlcnJvciBvciBlb2YgKi8KKysgICAgaW50IGVycm9yOyAgICAgICAgICAgICAgLyoq PCBjb250YWlucyB0aGUgZXJyb3IgY29kZSBvciAwIGlmIG5vIGVycm9yIGhhcHBlbmVkICovCisr ICAgIGludCB3cml0ZV9mbGFnOyAgICAgICAgIC8qKjwgdHJ1ZSBpZiBvcGVuIGZvciB3cml0aW5n ICovCisrICAgIGludCBtYXhfcGFja2V0X3NpemU7CisrICAgIGludCBtaW5fcGFja2V0X3NpemU7 ICAgIC8qKjwgVHJ5IHRvIGJ1ZmZlciBhdCBsZWFzdCB0aGlzIGFtb3VudCBvZiBkYXRhCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGZsdXNoaW5nIGl0LiAqLworKyAg ICB1bnNpZ25lZCBsb25nIGNoZWNrc3VtOworKyAgICB1bnNpZ25lZCBjaGFyICpjaGVja3N1bV9w dHI7CisrICAgIHVuc2lnbmVkIGxvbmcgKCp1cGRhdGVfY2hlY2tzdW0pKHVuc2lnbmVkIGxvbmcg Y2hlY2tzdW0sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOworKyAgICAv KioKKysgICAgICogUGF1c2Ugb3IgcmVzdW1lIHBsYXliYWNrIGZvciBuZXR3b3JrIHN0cmVhbWlu ZyBwcm90b2NvbHMgLSBlLmcuIE1NUy4KKysgICAgICovCisrICAgIGludCAoKnJlYWRfcGF1c2Up KHZvaWQgKm9wYXF1ZSwgaW50IHBhdXNlKTsKKysgICAgLyoqCisrICAgICAqIFNlZWsgdG8gYSBn aXZlbiB0aW1lc3RhbXAgaW4gc3RyZWFtIHdpdGggdGhlIHNwZWNpZmllZCBzdHJlYW1faW5kZXgu CisrICAgICAqIE5lZWRlZCBmb3Igc29tZSBuZXR3b3JrIHN0cmVhbWluZyBwcm90b2NvbHMgd2hp Y2ggZG9uJ3Qgc3VwcG9ydCBzZWVraW5nCisrICAgICAqIHRvIGJ5dGUgcG9zaXRpb24uCisrICAg ICAqLworKyAgICBpbnQ2NF90ICgqcmVhZF9zZWVrKSh2b2lkICpvcGFxdWUsIGludCBzdHJlYW1f aW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wLCBpbnQg ZmxhZ3MpOworKyAgICAvKioKKysgICAgICogQSBjb21iaW5hdGlvbiBvZiBBVklPX1NFRUtBQkxF XyBmbGFncyBvciAwIHdoZW4gdGhlIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUuCisrICAgICAqLwor KyAgICBpbnQgc2Vla2FibGU7CisrCisrICAgIC8qKgorKyAgICAgKiBhdmlvX3JlYWQgYW5kIGF2 aW9fd3JpdGUgc2hvdWxkIGlmIHBvc3NpYmxlIGJlIHNhdGlzZmllZCBkaXJlY3RseQorKyAgICAg KiBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggYSBidWZmZXIsIGFuZCBhdmlvX3NlZWsgd2lsbCBh bHdheXMKKysgICAgICogY2FsbCB0aGUgdW5kZXJseWluZyBzZWVrIGZ1bmN0aW9uIGRpcmVjdGx5 LgorKyAgICAgKi8KKysgICAgaW50IGRpcmVjdDsKKysKKysgICAgLyoqCisrICAgICAqICcsJyBz ZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIHByb3RvY29scy4KKysgICAgICovCisrICAgIGNvbnN0 IGNoYXIgKnByb3RvY29sX3doaXRlbGlzdDsKKysKKysgICAgLyoqCisrICAgICAqICcsJyBzZXBh cmF0ZWQgbGlzdCBvZiBkaXNhbGxvd2VkIHByb3RvY29scy4KKysgICAgICovCisrICAgIGNvbnN0 IGNoYXIgKnByb3RvY29sX2JsYWNrbGlzdDsKKysKKysgICAgLyoqCisrICAgICAqIEEgY2FsbGJh Y2sgdGhhdCBpcyB1c2VkIGluc3RlYWQgb2Ygd3JpdGVfcGFja2V0LgorKyAgICAgKi8KKysgICAg aW50ICgqd3JpdGVfZGF0YV90eXBlKSh2b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwg aW50IGJ1Zl9zaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZJT0RhdGFN YXJrZXJUeXBlIHR5cGUsIGludDY0X3QgdGltZSk7CisrICAgIC8qKgorKyAgICAgKiBJZiBzZXQs IGRvbid0IGNhbGwgd3JpdGVfZGF0YV90eXBlIHNlcGFyYXRlbHkgZm9yIEFWSU9fREFUQV9NQVJL RVJfQk9VTkRBUllfUE9JTlQsCisrICAgICAqIGJ1dCBpZ25vcmUgdGhlbSBhbmQgdHJlYXQgdGhl bSBhcyBBVklPX0RBVEFfTUFSS0VSX1VOS05PV04gKHRvIGF2b2lkIG5lZWRsZXNzbHkKKysgICAg ICogc21hbGwgY2h1bmtzIG9mIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJhY2spLgorKyAg ICAgKi8KKysgICAgaW50IGlnbm9yZV9ib3VuZGFyeV9wb2ludDsKKysKKysgICAgLyoqCisrICAg ICAqIE1heGltdW0gcmVhY2hlZCBwb3NpdGlvbiBiZWZvcmUgYSBiYWNrd2FyZCBzZWVrIGluIHRo ZSB3cml0ZSBidWZmZXIsCisrICAgICAqIHVzZWQga2VlcGluZyB0cmFjayBvZiBhbHJlYWR5IHdy aXR0ZW4gZGF0YSBmb3IgYSBsYXRlciBmbHVzaC4KKysgICAgICovCisrICAgIHVuc2lnbmVkIGNo YXIgKmJ1Zl9wdHJfbWF4OworKworKyAgICAvKioKKysgICAgICogUmVhZC1vbmx5IHN0YXRpc3Rp YyBvZiBieXRlcyByZWFkIGZvciB0aGlzIEFWSU9Db250ZXh0LgorKyAgICAgKi8KKysgICAgaW50 NjRfdCBieXRlc19yZWFkOworKworKyAgICAvKioKKysgICAgICogUmVhZC1vbmx5IHN0YXRpc3Rp YyBvZiBieXRlcyB3cml0dGVuIGZvciB0aGlzIEFWSU9Db250ZXh0LgorKyAgICAgKi8KKysgICAg aW50NjRfdCBieXRlc193cml0dGVuOworK30gQVZJT0NvbnRleHQ7CisrCisrLyoqCisrICogUmV0 dXJuIHRoZSBuYW1lIG9mIHRoZSBwcm90b2NvbCB0aGF0IHdpbGwgaGFuZGxlIHRoZSBwYXNzZWQg VVJMLgorKyAqCisrICogTlVMTCBpcyByZXR1cm5lZCBpZiBubyBwcm90b2NvbCBjb3VsZCBiZSBm b3VuZCBmb3IgdGhlIGdpdmVuIFVSTC4KKysgKgorKyAqIEByZXR1cm4gTmFtZSBvZiB0aGUgcHJv dG9jb2wgb3IgTlVMTC4KKysgKi8KKytjb25zdCBjaGFyICphdmlvX2ZpbmRfcHJvdG9jb2xfbmFt ZShjb25zdCBjaGFyICp1cmwpOworKworKy8qKgorKyAqIFJldHVybiBBVklPX0ZMQUdfKiBhY2Nl c3MgZmxhZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYWNjZXNzIHBlcm1pc3Npb25zCisrICogb2Yg dGhlIHJlc291cmNlIGluIHVybCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRv IGFuCisrICogQVZFUlJPUiBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4gVGhlIHJldHVybmVkIGFj Y2VzcyBmbGFncyBhcmUKKysgKiBtYXNrZWQgYnkgdGhlIHZhbHVlIGluIGZsYWdzLgorKyAqCisr ICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpcyBpbnRyaW5zaWNhbGx5IHVuc2FmZSwgaW4gdGhlIHNl bnNlIHRoYXQgdGhlCisrICogY2hlY2tlZCByZXNvdXJjZSBtYXkgY2hhbmdlIGl0cyBleGlzdGVu Y2Ugb3IgcGVybWlzc2lvbiBzdGF0dXMgZnJvbQorKyAqIG9uZSBjYWxsIHRvIGFub3RoZXIuIFRo dXMgeW91IHNob3VsZCBub3QgdHJ1c3QgdGhlIHJldHVybmVkIHZhbHVlLAorKyAqIHVubGVzcyB5 b3UgYXJlIHN1cmUgdGhhdCBubyBvdGhlciBwcm9jZXNzZXMgYXJlIGFjY2Vzc2luZyB0aGUKKysg KiBjaGVja2VkIHJlc291cmNlLgorKyAqLworK2ludCBhdmlvX2NoZWNrKGNvbnN0IGNoYXIgKnVy bCwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBPcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZy4K KysgKgorKyAqIEBwYXJhbSBzICAgICAgIGRpcmVjdG9yeSByZWFkIGNvbnRleHQuIFBvaW50ZXIg dG8gYSBOVUxMIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQuCisrICogQHBhcmFtIHVybCAgICAgZGly ZWN0b3J5IHRvIGJlIGxpc3RlZC4KKysgKiBAcGFyYW0gb3B0aW9ucyBBIGRpY3Rpb25hcnkgZmls bGVkIHdpdGggcHJvdG9jb2wtcHJpdmF0ZSBvcHRpb25zLiBPbiByZXR1cm4KKysgKiAgICAgICAg ICAgICAgICB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgcmVwbGFjZWQgd2l0 aCBhIGRpY3Rpb25hcnkKKysgKiAgICAgICAgICAgICAgICBjb250YWluaW5nIG9wdGlvbnMgdGhh dCB3ZXJlIG5vdCBmb3VuZC4gTWF5IGJlIE5VTEwuCisrICogQHJldHVybiA+PTAgb24gc3VjY2Vz cyBvciBuZWdhdGl2ZSBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZpb19vcGVuX2RpcihBVklPRGly Q29udGV4dCAqKnMsIGNvbnN0IGNoYXIgKnVybCwgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7Cisr CisrLyoqCisrICogR2V0IG5leHQgZGlyZWN0b3J5IGVudHJ5LgorKyAqCisrICogUmV0dXJuZWQg ZW50cnkgbXVzdCBiZSBmcmVlZCB3aXRoIGF2aW9fZnJlZV9kaXJlY3RvcnlfZW50cnkoKS4gSW4g cGFydGljdWxhcgorKyAqIGl0IG1heSBvdXRsaXZlIEFWSU9EaXJDb250ZXh0LgorKyAqCisrICog QHBhcmFtIHMgICAgICAgICBkaXJlY3RvcnkgcmVhZCBjb250ZXh0LgorKyAqIEBwYXJhbVtvdXRd IG5leHQgbmV4dCBlbnRyeSBvciBOVUxMIHdoZW4gbm8gbW9yZSBlbnRyaWVzLgorKyAqIEByZXR1 cm4gPj0wIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgb24gZXJyb3IuIEVuZCBvZiBsaXN0IGlzIG5v dCBjb25zaWRlcmVkIGFuCisrICogICAgICAgICAgICAgZXJyb3IuCisrICovCisraW50IGF2aW9f cmVhZF9kaXIoQVZJT0RpckNvbnRleHQgKnMsIEFWSU9EaXJFbnRyeSAqKm5leHQpOworKworKy8q KgorKyAqIENsb3NlIGRpcmVjdG9yeS4KKysgKgorKyAqIEBub3RlIEVudHJpZXMgY3JlYXRlZCB1 c2luZyBhdmlvX3JlYWRfZGlyKCkgYXJlIG5vdCBkZWxldGVkIGFuZCBtdXN0IGJlCisrICogZnJl ZWRlZCB3aXRoIGF2aW9fZnJlZV9kaXJlY3RvcnlfZW50cnkoKS4KKysgKgorKyAqIEBwYXJhbSBz ICAgICAgICAgZGlyZWN0b3J5IHJlYWQgY29udGV4dC4KKysgKiBAcmV0dXJuID49MCBvbiBzdWNj ZXNzIG9yIG5lZ2F0aXZlIG9uIGVycm9yLgorKyAqLworK2ludCBhdmlvX2Nsb3NlX2RpcihBVklP RGlyQ29udGV4dCAqKnMpOworKworKy8qKgorKyAqIEZyZWUgZW50cnkgYWxsb2NhdGVkIGJ5IGF2 aW9fcmVhZF9kaXIoKS4KKysgKgorKyAqIEBwYXJhbSBlbnRyeSBlbnRyeSB0byBiZSBmcmVlZC4K KysgKi8KKyt2b2lkIGF2aW9fZnJlZV9kaXJlY3RvcnlfZW50cnkoQVZJT0RpckVudHJ5ICoqZW50 cnkpOworKworKy8qKgorKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIEFWSU9Db250ZXh0 IGZvciBidWZmZXJlZCBJL08uIEl0IG11c3QgYmUgbGF0ZXIKKysgKiBmcmVlZCB3aXRoIGF2aW9f Y29udGV4dF9mcmVlKCkuCisrICoKKysgKiBAcGFyYW0gYnVmZmVyIE1lbW9yeSBibG9jayBmb3Ig aW5wdXQvb3V0cHV0IG9wZXJhdGlvbnMgdmlhIEFWSU9Db250ZXh0LgorKyAqICAgICAgICBUaGUg YnVmZmVyIG11c3QgYmUgYWxsb2NhdGVkIHdpdGggYXZfbWFsbG9jKCkgYW5kIGZyaWVuZHMuCisr ICogICAgICAgIEl0IG1heSBiZSBmcmVlZCBhbmQgcmVwbGFjZWQgd2l0aCBhIG5ldyBidWZmZXIg YnkgbGliYXZmb3JtYXQuCisrICogICAgICAgIEFWSU9Db250ZXh0LmJ1ZmZlciBob2xkcyB0aGUg YnVmZmVyIGN1cnJlbnRseSBpbiB1c2UsCisrICogICAgICAgIHdoaWNoIG11c3QgYmUgbGF0ZXIg ZnJlZWQgd2l0aCBhdl9mcmVlKCkuCisrICogQHBhcmFtIGJ1ZmZlcl9zaXplIFRoZSBidWZmZXIg c2l6ZSBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UuCisrICogICAgICAgIEZvciBw cm90b2NvbHMgd2l0aCBmaXhlZCBibG9ja3NpemUgaXQgc2hvdWxkIGJlIHNldCB0byB0aGlzIGJs b2Nrc2l6ZS4KKysgKiAgICAgICAgRm9yIG90aGVycyBhIHR5cGljYWwgc2l6ZSBpcyBhIGNhY2hl IHBhZ2UsIGUuZy4gNGtiLgorKyAqIEBwYXJhbSB3cml0ZV9mbGFnIFNldCB0byAxIGlmIHRoZSBi dWZmZXIgc2hvdWxkIGJlIHdyaXRhYmxlLCAwIG90aGVyd2lzZS4KKysgKiBAcGFyYW0gb3BhcXVl IEFuIG9wYXF1ZSBwb2ludGVyIHRvIHVzZXItc3BlY2lmaWMgZGF0YS4KKysgKiBAcGFyYW0gcmVh ZF9wYWNrZXQgIEEgZnVuY3Rpb24gZm9yIHJlZmlsbGluZyB0aGUgYnVmZmVyLCBtYXkgYmUgTlVM TC4KKysgKiAgICAgICAgICAgICAgICAgICAgIEZvciBzdHJlYW0gcHJvdG9jb2xzLCBtdXN0IG5l dmVyIHJldHVybiAwIGJ1dCByYXRoZXIKKysgKiAgICAgICAgICAgICAgICAgICAgIGEgcHJvcGVy IEFWRVJST1IgY29kZS4KKysgKiBAcGFyYW0gd3JpdGVfcGFja2V0IEEgZnVuY3Rpb24gZm9yIHdy aXRpbmcgdGhlIGJ1ZmZlciBjb250ZW50cywgbWF5IGJlIE5VTEwuCisrICogICAgICAgIFRoZSBm dW5jdGlvbiBtYXkgbm90IGNoYW5nZSB0aGUgaW5wdXQgYnVmZmVycyBjb250ZW50LgorKyAqIEBw YXJhbSBzZWVrIEEgZnVuY3Rpb24gZm9yIHNlZWtpbmcgdG8gc3BlY2lmaWVkIGJ5dGUgcG9zaXRp b24sIG1heSBiZSBOVUxMLgorKyAqCisrICogQHJldHVybiBBbGxvY2F0ZWQgQVZJT0NvbnRleHQg b3IgTlVMTCBvbiBmYWlsdXJlLgorKyAqLworK0FWSU9Db250ZXh0ICphdmlvX2FsbG9jX2NvbnRl eHQoCisrICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorKyAgICAgICAg ICAgICAgICAgIGludCBidWZmZXJfc2l6ZSwKKysgICAgICAgICAgICAgICAgICBpbnQgd3JpdGVf ZmxhZywKKysgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUsCisrICAgICAgICAgICAgICAg ICAgaW50ICgqcmVhZF9wYWNrZXQpKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLCBpbnQgYnVm X3NpemUpLAorKyAgICAgICAgICAgICAgICAgIGludCAoKndyaXRlX3BhY2tldCkodm9pZCAqb3Bh cXVlLCBjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSksCisrICAgICAgICAgICAgICAg ICAgaW50NjRfdCAoKnNlZWspKHZvaWQgKm9wYXF1ZSwgaW50NjRfdCBvZmZzZXQsIGludCB3aGVu Y2UpKTsKKysKKysvKioKKysgKiBGcmVlIHRoZSBzdXBwbGllZCBJTyBjb250ZXh0IGFuZCBldmVy eXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBpdC4KKysgKgorKyAqIEBwYXJhbSBzIERvdWJsZSBwb2lu dGVyIHRvIHRoZSBJTyBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgTlVMTAorKyAq IGludG8gcy4KKysgKi8KKyt2b2lkIGF2aW9fY29udGV4dF9mcmVlKEFWSU9Db250ZXh0ICoqcyk7 CisrCisrdm9pZCBhdmlvX3c4KEFWSU9Db250ZXh0ICpzLCBpbnQgYik7Cisrdm9pZCBhdmlvX3dy aXRlKEFWSU9Db250ZXh0ICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplKTsK Kyt2b2lkIGF2aW9fd2w2NChBVklPQ29udGV4dCAqcywgdWludDY0X3QgdmFsKTsKKyt2b2lkIGF2 aW9fd2I2NChBVklPQ29udGV4dCAqcywgdWludDY0X3QgdmFsKTsKKyt2b2lkIGF2aW9fd2wzMihB VklPQ29udGV4dCAqcywgdW5zaWduZWQgaW50IHZhbCk7Cisrdm9pZCBhdmlvX3diMzIoQVZJT0Nv bnRleHQgKnMsIHVuc2lnbmVkIGludCB2YWwpOworK3ZvaWQgYXZpb193bDI0KEFWSU9Db250ZXh0 ICpzLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyt2b2lkIGF2aW9fd2IyNChBVklPQ29udGV4dCAqcywg dW5zaWduZWQgaW50IHZhbCk7Cisrdm9pZCBhdmlvX3dsMTYoQVZJT0NvbnRleHQgKnMsIHVuc2ln bmVkIGludCB2YWwpOworK3ZvaWQgYXZpb193YjE2KEFWSU9Db250ZXh0ICpzLCB1bnNpZ25lZCBp bnQgdmFsKTsKKysKKysvKioKKysgKiBXcml0ZSBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisr ICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKysgKi8KKytpbnQgYXZpb19wdXRf c3RyKEFWSU9Db250ZXh0ICpzLCBjb25zdCBjaGFyICpzdHIpOworKworKy8qKgorKyAqIENvbnZl cnQgYW4gVVRGLTggc3RyaW5nIHRvIFVURi0xNkxFIGFuZCB3cml0ZSBpdC4KKysgKiBAcGFyYW0g cyB0aGUgQVZJT0NvbnRleHQKKysgKiBAcGFyYW0gc3RyIE5VTEwtdGVybWluYXRlZCBVVEYtOCBz dHJpbmcKKysgKgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisrICovCisr aW50IGF2aW9fcHV0X3N0cjE2bGUoQVZJT0NvbnRleHQgKnMsIGNvbnN0IGNoYXIgKnN0cik7Cisr CisrLyoqCisrICogQ29udmVydCBhbiBVVEYtOCBzdHJpbmcgdG8gVVRGLTE2QkUgYW5kIHdyaXRl IGl0LgorKyAqIEBwYXJhbSBzIHRoZSBBVklPQ29udGV4dAorKyAqIEBwYXJhbSBzdHIgTlVMTC10 ZXJtaW5hdGVkIFVURi04IHN0cmluZworKyAqCisrICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMg d3JpdHRlbi4KKysgKi8KKytpbnQgYXZpb19wdXRfc3RyMTZiZShBVklPQ29udGV4dCAqcywgY29u c3QgY2hhciAqc3RyKTsKKysKKysvKioKKysgKiBNYXJrIHRoZSB3cml0dGVuIGJ5dGVzdHJlYW0g YXMgYSBzcGVjaWZpYyB0eXBlLgorKyAqCisrICogWmVyby1sZW5ndGggcmFuZ2VzIGFyZSBvbWl0 dGVkIGZyb20gdGhlIG91dHB1dC4KKysgKgorKyAqIEBwYXJhbSBzICAgIHRoZSBBVklPQ29udGV4 dAorKyAqIEBwYXJhbSB0aW1lIHRoZSBzdHJlYW0gdGltZSB0aGUgY3VycmVudCBieXRlc3RyZWFt IHBvcyBjb3JyZXNwb25kcyB0bworKyAqICAgICAgICAgICAgIChpbiBBVl9USU1FX0JBU0UgdW5p dHMpLCBvciBBVl9OT1BUU19WQUxVRSBpZiB1bmtub3duIG9yIG5vdAorKyAqICAgICAgICAgICAg IGFwcGxpY2FibGUKKysgKiBAcGFyYW0gdHlwZSB0aGUga2luZCBvZiBkYXRhIHdyaXR0ZW4gc3Rh cnRpbmcgYXQgdGhlIGN1cnJlbnQgcG9zCisrICovCisrdm9pZCBhdmlvX3dyaXRlX21hcmtlcihB VklPQ29udGV4dCAqcywgaW50NjRfdCB0aW1lLCBlbnVtIEFWSU9EYXRhTWFya2VyVHlwZSB0eXBl KTsKKysKKysvKioKKysgKiBQYXNzaW5nIHRoaXMgYXMgdGhlICJ3aGVuY2UiIHBhcmFtZXRlciB0 byBhIHNlZWsgZnVuY3Rpb24gY2F1c2VzIGl0IHRvCisrICogcmV0dXJuIHRoZSBmaWxlc2l6ZSB3 aXRob3V0IHNlZWtpbmcgYW55d2hlcmUuIFN1cHBvcnRpbmcgdGhpcyBpcyBvcHRpb25hbC4KKysg KiBJZiBpdCBpcyBub3Qgc3VwcG9ydGVkIHRoZW4gdGhlIHNlZWsgZnVuY3Rpb24gd2lsbCByZXR1 cm4gPDAuCisrICovCisrI2RlZmluZSBBVlNFRUtfU0laRSAweDEwMDAwCisrCisrLyoqCisrICog T1InaW5nIHRoaXMgZmxhZyBpbnRvIHRoZSAid2hlbmNlIiBwYXJhbWV0ZXIgdG8gYSBzZWVrIGZ1 bmN0aW9uIGNhdXNlcyBpdCB0bworKyAqIHNlZWsgYnkgYW55IG1lYW5zIChsaWtlIHJlb3Blbmlu ZyBhbmQgbGluZWFyIHJlYWRpbmcpIG9yIG90aGVyIG5vcm1hbGx5IHVucmVhc29uYWJsZQorKyAq IG1lYW5zIHRoYXQgY2FuIGJlIGV4dHJlbWVseSBzbG93LgorKyAqIFRoaXMgaXMgdGhlIGRlZmF1 bHQgYW5kIHRoZXJlZm9yZSBpZ25vcmVkIGJ5IHRoZSBzZWVrIGNvZGUgc2luY2UgMjAxMC4KKysg Ki8KKysjZGVmaW5lIEFWU0VFS19GT1JDRSAweDIwMDAwCisrCisrLyoqCisrICogZnNlZWsoKSBl cXVpdmFsZW50IGZvciBBVklPQ29udGV4dC4KKysgKiBAcmV0dXJuIG5ldyBwb3NpdGlvbiBvciBB VkVSUk9SLgorKyAqLworK2ludDY0X3QgYXZpb19zZWVrKEFWSU9Db250ZXh0ICpzLCBpbnQ2NF90 IG9mZnNldCwgaW50IHdoZW5jZSk7CisrCisrLyoqCisrICogU2tpcCBnaXZlbiBudW1iZXIgb2Yg Ynl0ZXMgZm9yd2FyZAorKyAqIEByZXR1cm4gbmV3IHBvc2l0aW9uIG9yIEFWRVJST1IuCisrICov CisraW50NjRfdCBhdmlvX3NraXAoQVZJT0NvbnRleHQgKnMsIGludDY0X3Qgb2Zmc2V0KTsKKysK KysvKioKKysgKiBmdGVsbCgpIGVxdWl2YWxlbnQgZm9yIEFWSU9Db250ZXh0LgorKyAqIEByZXR1 cm4gcG9zaXRpb24gb3IgQVZFUlJPUi4KKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBp bnQ2NF90IGF2aW9fdGVsbChBVklPQ29udGV4dCAqcykKKyt7CisrICAgIHJldHVybiBhdmlvX3Nl ZWsocywgMCwgU0VFS19DVVIpOworK30KKysKKysvKioKKysgKiBHZXQgdGhlIGZpbGVzaXplLgor KyAqIEByZXR1cm4gZmlsZXNpemUgb3IgQVZFUlJPUgorKyAqLworK2ludDY0X3QgYXZpb19zaXpl KEFWSU9Db250ZXh0ICpzKTsKKysKKysvKioKKysgKiBTaW1pbGFyIHRvIGZlb2YoKSBidXQgYWxz byByZXR1cm5zIG5vbnplcm8gb24gcmVhZCBlcnJvcnMuCisrICogQHJldHVybiBub24gemVybyBp ZiBhbmQgb25seSBpZiBhdCBlbmQgb2YgZmlsZSBvciBhIHJlYWQgZXJyb3IgaGFwcGVuZWQgd2hl biByZWFkaW5nLgorKyAqLworK2ludCBhdmlvX2Zlb2YoQVZJT0NvbnRleHQgKnMpOworKworKy8q KgorKyAqIFdyaXRlcyBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIGNvbnRleHQgdGFraW5nIGEg dmFfbGlzdC4KKysgKiBAcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCA8IDAgb24gZXJy b3IuCisrICovCisraW50IGF2aW9fdnByaW50ZihBVklPQ29udGV4dCAqcywgY29uc3QgY2hhciAq Zm10LCB2YV9saXN0IGFwKTsKKysKKysvKioKKysgKiBXcml0ZXMgYSBmb3JtYXR0ZWQgc3RyaW5n IHRvIHRoZSBjb250ZXh0LgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIDwg MCBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZpb19wcmludGYoQVZJT0NvbnRleHQgKnMsIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKSBhdl9wcmludGZfZm9ybWF0KDIsIDMpOworKworKy8qKgorKyAqIFdy aXRlIGEgTlVMTCB0ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnRleHQuCisr ICogVXN1YWxseSB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBi dXQgaXRzIG1hY3JvIHdyYXBwZXIsCisrICogYXZpb19wcmludC4KKysgKi8KKyt2b2lkIGF2aW9f cHJpbnRfc3RyaW5nX2FycmF5KEFWSU9Db250ZXh0ICpzLCBjb25zdCBjaGFyICogY29uc3Qgc3Ry aW5nc1tdKTsKKysKKysvKioKKysgKiBXcml0ZSBzdHJpbmdzIChjb25zdCBjaGFyICopIHRvIHRo ZSBjb250ZXh0LgorKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtYWNybyBhcm91bmQgYXZpb19w cmludF9zdHJpbmdfYXJyYXkgYW5kIGl0CisrICogYXV0b21hdGljYWxseSBjcmVhdGVzIHRoZSBz dHJpbmcgYXJyYXkgZnJvbSB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KKysgKiBGb3Igc2lt cGxlIHN0cmluZyBjb25jYXRlbmF0aW9ucyB0aGlzIGZ1bmN0aW9uIGlzIG1vcmUgcGVyZm9ybWFu dCB0aGFuIHVzaW5nCisrICogYXZpb19wcmludGYgc2luY2UgaXQgZG9lcyBub3QgbmVlZCBhIHRl bXBvcmFyeSBidWZmZXIuCisrICovCisrI2RlZmluZSBhdmlvX3ByaW50KHMsIC4uLikgXAorKyAg ICBhdmlvX3ByaW50X3N0cmluZ19hcnJheShzLCAoY29uc3QgY2hhcipbXSl7X19WQV9BUkdTX18s IE5VTEx9KQorKworKy8qKgorKyAqIEZvcmNlIGZsdXNoaW5nIG9mIGJ1ZmZlcmVkIGRhdGEuCisr ICoKKysgKiBGb3Igd3JpdGUgc3RyZWFtcywgZm9yY2UgdGhlIGJ1ZmZlcmVkIGRhdGEgdG8gYmUg aW1tZWRpYXRlbHkgd3JpdHRlbiB0byB0aGUgb3V0cHV0LAorKyAqIHdpdGhvdXQgdG8gd2FpdCB0 byBmaWxsIHRoZSBpbnRlcm5hbCBidWZmZXIuCisrICoKKysgKiBGb3IgcmVhZCBzdHJlYW1zLCBk aXNjYXJkIGFsbCBjdXJyZW50bHkgYnVmZmVyZWQgZGF0YSwgYW5kIGFkdmFuY2UgdGhlCisrICog cmVwb3J0ZWQgZmlsZSBwb3NpdGlvbiB0byB0aGF0IG9mIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4g VGhpcyBkb2VzIG5vdAorKyAqIHJlYWQgbmV3IGRhdGEsIGFuZCBkb2VzIG5vdCBwZXJmb3JtIGFu eSBzZWVrcy4KKysgKi8KKyt2b2lkIGF2aW9fZmx1c2goQVZJT0NvbnRleHQgKnMpOworKworKy8q KgorKyAqIFJlYWQgc2l6ZSBieXRlcyBmcm9tIEFWSU9Db250ZXh0IGludG8gYnVmLgorKyAqIEBy ZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgQVZFUlJPUgorKyAqLworK2ludCBhdmlvX3Jl YWQoQVZJT0NvbnRleHQgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHNpemUpOworKworKy8q KgorKyAqIFJlYWQgc2l6ZSBieXRlcyBmcm9tIEFWSU9Db250ZXh0IGludG8gYnVmLiBVbmxpa2Ug YXZpb19yZWFkKCksIHRoaXMgaXMgYWxsb3dlZAorKyAqIHRvIHJlYWQgZmV3ZXIgYnl0ZXMgdGhh biByZXF1ZXN0ZWQuIFRoZSBtaXNzaW5nIGJ5dGVzIGNhbiBiZSByZWFkIGluIHRoZSBuZXh0Cisr ICogY2FsbC4gVGhpcyBhbHdheXMgdHJpZXMgdG8gcmVhZCBhdCBsZWFzdCAxIGJ5dGUuCisrICog VXNlZnVsIHRvIHJlZHVjZSBsYXRlbmN5IGluIGNlcnRhaW4gY2FzZXMuCisrICogQHJldHVybiBu dW1iZXIgb2YgYnl0ZXMgcmVhZCBvciBBVkVSUk9SCisrICovCisraW50IGF2aW9fcmVhZF9wYXJ0 aWFsKEFWSU9Db250ZXh0ICpzLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplKTsKKysKKysv KioKKysgKiBAbmFtZSBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgZnJvbSBBVklPQ29udGV4dAorKyAq IEB7CisrICoKKysgKiBAbm90ZSByZXR1cm4gMCBpZiBFT0YsIHNvIHlvdSBjYW5ub3QgdXNlIGl0 IGlmIEVPRiBoYW5kbGluZyBpcworKyAqICAgICAgIG5lY2Vzc2FyeQorKyAqLworK2ludCAgICAg ICAgICBhdmlvX3I4ICAoQVZJT0NvbnRleHQgKnMpOworK3Vuc2lnbmVkIGludCBhdmlvX3JsMTYo QVZJT0NvbnRleHQgKnMpOworK3Vuc2lnbmVkIGludCBhdmlvX3JsMjQoQVZJT0NvbnRleHQgKnMp OworK3Vuc2lnbmVkIGludCBhdmlvX3JsMzIoQVZJT0NvbnRleHQgKnMpOworK3VpbnQ2NF90ICAg ICBhdmlvX3JsNjQoQVZJT0NvbnRleHQgKnMpOworK3Vuc2lnbmVkIGludCBhdmlvX3JiMTYoQVZJ T0NvbnRleHQgKnMpOworK3Vuc2lnbmVkIGludCBhdmlvX3JiMjQoQVZJT0NvbnRleHQgKnMpOwor K3Vuc2lnbmVkIGludCBhdmlvX3JiMzIoQVZJT0NvbnRleHQgKnMpOworK3VpbnQ2NF90ICAgICBh dmlvX3JiNjQoQVZJT0NvbnRleHQgKnMpOworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisr ICogUmVhZCBhIHN0cmluZyBmcm9tIHBiIGludG8gYnVmLiBUaGUgcmVhZGluZyB3aWxsIHRlcm1p bmF0ZSB3aGVuIGVpdGhlcgorKyAqIGEgTlVMTCBjaGFyYWN0ZXIgd2FzIGVuY291bnRlcmVkLCBt YXhsZW4gYnl0ZXMgaGF2ZSBiZWVuIHJlYWQsIG9yIG5vdGhpbmcKKysgKiBtb3JlIGNhbiBiZSBy ZWFkIGZyb20gcGIuIFRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCB0byBiZSBOVUxMLXRlcm1pbmF0 ZWQsIGl0CisrICogd2lsbCBiZSB0cnVuY2F0ZWQgaWYgYnVmIGlzIHRvbyBzbWFsbC4KKysgKiBO b3RlIHRoYXQgdGhlIHN0cmluZyBpcyBub3QgaW50ZXJwcmV0ZWQgb3IgdmFsaWRhdGVkIGluIGFu eSB3YXksIGl0CisrICogbWlnaHQgZ2V0IHRydW5jYXRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc2Vx dWVuY2UgZm9yIG11bHRpLWJ5dGUgZW5jb2RpbmdzLgorKyAqCisrICogQHJldHVybiBudW1iZXIg b2YgYnl0ZXMgcmVhZCAoaXMgYWx3YXlzIDw9IG1heGxlbikuCisrICogSWYgcmVhZGluZyBlbmRz IG9uIEVPRiBvciBlcnJvciwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIG9uZSBtb3JlIHRoYW4K KysgKiBieXRlcyBhY3R1YWxseSByZWFkLgorKyAqLworK2ludCBhdmlvX2dldF9zdHIoQVZJT0Nv bnRleHQgKnBiLCBpbnQgbWF4bGVuLCBjaGFyICpidWYsIGludCBidWZsZW4pOworKworKy8qKgor KyAqIFJlYWQgYSBVVEYtMTYgc3RyaW5nIGZyb20gcGIgYW5kIGNvbnZlcnQgaXQgdG8gVVRGLTgu CisrICogVGhlIHJlYWRpbmcgd2lsbCB0ZXJtaW5hdGUgd2hlbiBlaXRoZXIgYSBudWxsIG9yIGlu dmFsaWQgY2hhcmFjdGVyIHdhcworKyAqIGVuY291bnRlcmVkIG9yIG1heGxlbiBieXRlcyBoYXZl IGJlZW4gcmVhZC4KKysgKiBAcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIChpcyBhbHdheXMg PD0gbWF4bGVuKQorKyAqLworK2ludCBhdmlvX2dldF9zdHIxNmxlKEFWSU9Db250ZXh0ICpwYiwg aW50IG1heGxlbiwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKKytpbnQgYXZpb19nZXRfc3RyMTZi ZShBVklPQ29udGV4dCAqcGIsIGludCBtYXhsZW4sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Cisr CisrCisrLyoqCisrICogQG5hbWUgVVJMIG9wZW4gbW9kZXMKKysgKiBUaGUgZmxhZ3MgYXJndW1l bnQgdG8gYXZpb19vcGVuIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKKysgKiBjb25zdGFu dHMsIG9wdGlvbmFsbHkgT1JlZCB3aXRoIG90aGVyIGZsYWdzLgorKyAqIEB7CisrICovCisrI2Rl ZmluZSBBVklPX0ZMQUdfUkVBRCAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyoqPCByZWFkLW9ubHkgKi8KKysjZGVmaW5lIEFWSU9fRkxBR19XUklURSAyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHdyaXRlLW9ubHkgKi8KKysjZGVmaW5l IEFWSU9fRkxBR19SRUFEX1dSSVRFIChBVklPX0ZMQUdfUkVBRHxBVklPX0ZMQUdfV1JJVEUpICAv Kio8IHJlYWQtd3JpdGUgcHNldWRvIGZsYWcgKi8KKysvKioKKysgKiBAfQorKyAqLworKworKy8q KgorKyAqIFVzZSBub24tYmxvY2tpbmcgbW9kZS4KKysgKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBv cGVyYXRpb25zIG9uIHRoZSBjb250ZXh0IHdpbGwgcmV0dXJuCisrICogQVZFUlJPUihFQUdBSU4p IGlmIHRoZXkgY2FuIG5vdCBiZSBwZXJmb3JtZWQgaW1tZWRpYXRlbHkuCisrICogSWYgdGhpcyBm bGFnIGlzIG5vdCBzZXQsIG9wZXJhdGlvbnMgb24gdGhlIGNvbnRleHQgd2lsbCBuZXZlciByZXR1 cm4KKysgKiBBVkVSUk9SKEVBR0FJTikuCisrICogTm90ZSB0aGF0IHRoaXMgZmxhZyBkb2VzIG5v dCBhZmZlY3QgdGhlIG9wZW5pbmcvY29ubmVjdGluZyBvZiB0aGUKKysgKiBjb250ZXh0LiBDb25u ZWN0aW5nIGEgcHJvdG9jb2wgd2lsbCBhbHdheXMgYmxvY2sgaWYgbmVjZXNzYXJ5IChlLmcuIG9u CisrICogbmV0d29yayBwcm90b2NvbHMpIGJ1dCBuZXZlciBoYW5nIChlLmcuIG9uIGJ1c3kgZGV2 aWNlcykuCisrICogV2FybmluZzogbm9uLWJsb2NraW5nIHByb3RvY29scyBpcyB3b3JrLWluLXBy b2dyZXNzOyB0aGlzIGZsYWcgbWF5IGJlCisrICogc2lsZW50bHkgaWdub3JlZC4KKysgKi8KKysj ZGVmaW5lIEFWSU9fRkxBR19OT05CTE9DSyA4CisrCisrLyoqCisrICogVXNlIGRpcmVjdCBtb2Rl LgorKyAqIGF2aW9fcmVhZCBhbmQgYXZpb193cml0ZSBzaG91bGQgaWYgcG9zc2libGUgYmUgc2F0 aXNmaWVkIGRpcmVjdGx5CisrICogaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIGEgYnVmZmVyLCBh bmQgYXZpb19zZWVrIHdpbGwgYWx3YXlzCisrICogY2FsbCB0aGUgdW5kZXJseWluZyBzZWVrIGZ1 bmN0aW9uIGRpcmVjdGx5LgorKyAqLworKyNkZWZpbmUgQVZJT19GTEFHX0RJUkVDVCAweDgwMDAK KysKKysvKioKKysgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBBVklPQ29udGV4dCBmb3IgYWNj ZXNzaW5nIHRoZQorKyAqIHJlc291cmNlIGluZGljYXRlZCBieSB1cmwuCisrICogQG5vdGUgV2hl biB0aGUgcmVzb3VyY2UgaW5kaWNhdGVkIGJ5IHVybCBoYXMgYmVlbiBvcGVuZWQgaW4KKysgKiBy ZWFkK3dyaXRlIG1vZGUsIHRoZSBBVklPQ29udGV4dCBjYW4gYmUgdXNlZCBvbmx5IGZvciB3cml0 aW5nLgorKyAqCisrICogQHBhcmFtIHMgVXNlZCB0byByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhl IGNyZWF0ZWQgQVZJT0NvbnRleHQuCisrICogSW4gY2FzZSBvZiBmYWlsdXJlIHRoZSBwb2ludGVk IHRvIHZhbHVlIGlzIHNldCB0byBOVUxMLgorKyAqIEBwYXJhbSB1cmwgcmVzb3VyY2UgdG8gYWNj ZXNzCisrICogQHBhcmFtIGZsYWdzIGZsYWdzIHdoaWNoIGNvbnRyb2wgaG93IHRoZSByZXNvdXJj ZSBpbmRpY2F0ZWQgYnkgdXJsCisrICogaXMgdG8gYmUgb3BlbmVkCisrICogQHJldHVybiA+PSAw IGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFu CisrICogQVZFUlJPUiBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqLworK2ludCBhdmlvX29w ZW4oQVZJT0NvbnRleHQgKipzLCBjb25zdCBjaGFyICp1cmwsIGludCBmbGFncyk7CisrCisrLyoq CisrICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgQVZJT0NvbnRleHQgZm9yIGFjY2Vzc2luZyB0 aGUKKysgKiByZXNvdXJjZSBpbmRpY2F0ZWQgYnkgdXJsLgorKyAqIEBub3RlIFdoZW4gdGhlIHJl c291cmNlIGluZGljYXRlZCBieSB1cmwgaGFzIGJlZW4gb3BlbmVkIGluCisrICogcmVhZCt3cml0 ZSBtb2RlLCB0aGUgQVZJT0NvbnRleHQgY2FuIGJlIHVzZWQgb25seSBmb3Igd3JpdGluZy4KKysg KgorKyAqIEBwYXJhbSBzIFVzZWQgdG8gcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjcmVhdGVk IEFWSU9Db250ZXh0LgorKyAqIEluIGNhc2Ugb2YgZmFpbHVyZSB0aGUgcG9pbnRlZCB0byB2YWx1 ZSBpcyBzZXQgdG8gTlVMTC4KKysgKiBAcGFyYW0gdXJsIHJlc291cmNlIHRvIGFjY2VzcworKyAq IEBwYXJhbSBmbGFncyBmbGFncyB3aGljaCBjb250cm9sIGhvdyB0aGUgcmVzb3VyY2UgaW5kaWNh dGVkIGJ5IHVybAorKyAqIGlzIHRvIGJlIG9wZW5lZAorKyAqIEBwYXJhbSBpbnRfY2IgYW4gaW50 ZXJydXB0IGNhbGxiYWNrIHRvIGJlIHVzZWQgYXQgdGhlIHByb3RvY29scyBsZXZlbAorKyAqIEBw YXJhbSBvcHRpb25zICBBIGRpY3Rpb25hcnkgZmlsbGVkIHdpdGggcHJvdG9jb2wtcHJpdmF0ZSBv cHRpb25zLiBPbiByZXR1cm4KKysgKiB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIGRlc3Ryb3llZCBh bmQgcmVwbGFjZWQgd2l0aCBhIGRpY3QgY29udGFpbmluZyBvcHRpb25zCisrICogdGhhdCB3ZXJl IG5vdCBmb3VuZC4gTWF5IGJlIE5VTEwuCisrICogQHJldHVybiA+PSAwIGluIGNhc2Ugb2Ygc3Vj Y2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuCisrICogQVZFUlJPUiBj b2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqLworK2ludCBhdmlvX29wZW4yKEFWSU9Db250ZXh0 ICoqcywgY29uc3QgY2hhciAqdXJsLCBpbnQgZmxhZ3MsCisrICAgICAgICAgICAgICAgY29uc3Qg QVZJT0ludGVycnVwdENCICppbnRfY2IsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOworKworKy8q KgorKyAqIENsb3NlIHRoZSByZXNvdXJjZSBhY2Nlc3NlZCBieSB0aGUgQVZJT0NvbnRleHQgcyBh bmQgZnJlZSBpdC4KKysgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaWYgcyB3YXMg b3BlbmVkIGJ5IGF2aW9fb3BlbigpLgorKyAqCisrICogVGhlIGludGVybmFsIGJ1ZmZlciBpcyBh dXRvbWF0aWNhbGx5IGZsdXNoZWQgYmVmb3JlIGNsb3NpbmcgdGhlCisrICogcmVzb3VyY2UuCisr ICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYW4gQVZFUlJPUiA8IDAgb24gZXJyb3IuCisr ICogQHNlZSBhdmlvX2Nsb3NlcAorKyAqLworK2ludCBhdmlvX2Nsb3NlKEFWSU9Db250ZXh0ICpz KTsKKysKKysvKioKKysgKiBDbG9zZSB0aGUgcmVzb3VyY2UgYWNjZXNzZWQgYnkgdGhlIEFWSU9D b250ZXh0ICpzLCBmcmVlIGl0CisrICogYW5kIHNldCB0aGUgcG9pbnRlciBwb2ludGluZyB0byBp dCB0byBOVUxMLgorKyAqIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBpZiBzIHdhcyBv cGVuZWQgYnkgYXZpb19vcGVuKCkuCisrICoKKysgKiBUaGUgaW50ZXJuYWwgYnVmZmVyIGlzIGF1 dG9tYXRpY2FsbHkgZmx1c2hlZCBiZWZvcmUgY2xvc2luZyB0aGUKKysgKiByZXNvdXJjZS4KKysg KgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBBVkVSUk9SIDwgMCBvbiBlcnJvci4KKysg KiBAc2VlIGF2aW9fY2xvc2UKKysgKi8KKytpbnQgYXZpb19jbG9zZXAoQVZJT0NvbnRleHQgKipz KTsKKysKKysKKysvKioKKysgKiBPcGVuIGEgd3JpdGUgb25seSBtZW1vcnkgc3RyZWFtLgorKyAq CisrICogQHBhcmFtIHMgbmV3IElPIGNvbnRleHQKKysgKiBAcmV0dXJuIHplcm8gaWYgbm8gZXJy b3IuCisrICovCisraW50IGF2aW9fb3Blbl9keW5fYnVmKEFWSU9Db250ZXh0ICoqcyk7CisrCisr LyoqCisrICogUmV0dXJuIHRoZSB3cml0dGVuIHNpemUgYW5kIGEgcG9pbnRlciB0byB0aGUgYnVm ZmVyLgorKyAqIFRoZSBBVklPQ29udGV4dCBzdHJlYW0gaXMgbGVmdCBpbnRhY3QuCisrICogVGhl IGJ1ZmZlciBtdXN0IE5PVCBiZSBmcmVlZC4KKysgKiBObyBwYWRkaW5nIGlzIGFkZGVkIHRvIHRo ZSBidWZmZXIuCisrICoKKysgKiBAcGFyYW0gcyBJTyBjb250ZXh0CisrICogQHBhcmFtIHBidWZm ZXIgcG9pbnRlciB0byBhIGJ5dGUgYnVmZmVyCisrICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRo ZSBieXRlIGJ1ZmZlcgorKyAqLworK2ludCBhdmlvX2dldF9keW5fYnVmKEFWSU9Db250ZXh0ICpz LCB1aW50OF90ICoqcGJ1ZmZlcik7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSB3cml0dGVuIHNp emUgYW5kIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyLiBUaGUgYnVmZmVyCisrICogbXVzdCBiZSBm cmVlZCB3aXRoIGF2X2ZyZWUoKS4KKysgKiBQYWRkaW5nIG9mIEFWX0lOUFVUX0JVRkZFUl9QQURE SU5HX1NJWkUgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlci4KKysgKgorKyAqIEBwYXJhbSBzIElPIGNv bnRleHQKKysgKiBAcGFyYW0gcGJ1ZmZlciBwb2ludGVyIHRvIGEgYnl0ZSBidWZmZXIKKysgKiBA cmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgYnVmZmVyCisrICovCisraW50IGF2aW9fY2xv c2VfZHluX2J1ZihBVklPQ29udGV4dCAqcywgdWludDhfdCAqKnBidWZmZXIpOworKworKy8qKgor KyAqIEl0ZXJhdGUgdGhyb3VnaCBuYW1lcyBvZiBhdmFpbGFibGUgcHJvdG9jb2xzLgorKyAqCisr ICogQHBhcmFtIG9wYXF1ZSBBIHByaXZhdGUgcG9pbnRlciByZXByZXNlbnRpbmcgY3VycmVudCBw cm90b2NvbC4KKysgKiAgICAgICAgSXQgbXVzdCBiZSBhIHBvaW50ZXIgdG8gTlVMTCBvbiBmaXJz dCBpdGVyYXRpb24gYW5kIHdpbGwKKysgKiAgICAgICAgYmUgdXBkYXRlZCBieSBzdWNjZXNzaXZl IGNhbGxzIHRvIGF2aW9fZW51bV9wcm90b2NvbHMuCisrICogQHBhcmFtIG91dHB1dCBJZiBzZXQg dG8gMSwgaXRlcmF0ZSBvdmVyIG91dHB1dCBwcm90b2NvbHMsCisrICogICAgICAgICAgICAgICBv dGhlcndpc2Ugb3ZlciBpbnB1dCBwcm90b2NvbHMuCisrICoKKysgKiBAcmV0dXJuIEEgc3RhdGlj IHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIGN1cnJlbnQgcHJvdG9jb2wgb3IgTlVMTAor KyAqLworK2NvbnN0IGNoYXIgKmF2aW9fZW51bV9wcm90b2NvbHModm9pZCAqKm9wYXF1ZSwgaW50 IG91dHB1dCk7CisrCisrLyoqCisrICogR2V0IEFWQ2xhc3MgYnkgbmFtZXMgb2YgYXZhaWxhYmxl IHByb3RvY29scy4KKysgKgorKyAqIEByZXR1cm4gQSBBVkNsYXNzIG9mIGlucHV0IHByb3RvY29s IG5hbWUgb3IgTlVMTAorKyAqLworK2NvbnN0IEFWQ2xhc3MgKmF2aW9fcHJvdG9jb2xfZ2V0X2Ns YXNzKGNvbnN0IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIFBhdXNlIGFuZCByZXN1bWUgcGxh eWluZyAtIG9ubHkgbWVhbmluZ2Z1bCBpZiB1c2luZyBhIG5ldHdvcmsgc3RyZWFtaW5nCisrICog cHJvdG9jb2wgKGUuZy4gTU1TKS4KKysgKgorKyAqIEBwYXJhbSBoICAgICBJTyBjb250ZXh0IGZy b20gd2hpY2ggdG8gY2FsbCB0aGUgcmVhZF9wYXVzZSBmdW5jdGlvbiBwb2ludGVyCisrICogQHBh cmFtIHBhdXNlIDEgZm9yIHBhdXNlLCAwIGZvciByZXN1bWUKKysgKi8KKytpbnQgICAgIGF2aW9f cGF1c2UoQVZJT0NvbnRleHQgKmgsIGludCBwYXVzZSk7CisrCisrLyoqCisrICogU2VlayB0byBh IGdpdmVuIHRpbWVzdGFtcCByZWxhdGl2ZSB0byBzb21lIGNvbXBvbmVudCBzdHJlYW0uCisrICog T25seSBtZWFuaW5nZnVsIGlmIHVzaW5nIGEgbmV0d29yayBzdHJlYW1pbmcgcHJvdG9jb2wgKGUu Zy4gTU1TLikuCisrICoKKysgKiBAcGFyYW0gaCBJTyBjb250ZXh0IGZyb20gd2hpY2ggdG8gY2Fs bCB0aGUgc2VlayBmdW5jdGlvbiBwb2ludGVycworKyAqIEBwYXJhbSBzdHJlYW1faW5kZXggVGhl IHN0cmVhbSBpbmRleCB0aGF0IHRoZSB0aW1lc3RhbXAgaXMgcmVsYXRpdmUgdG8uCisrICogICAg ICAgIElmIHN0cmVhbV9pbmRleCBpcyAoLTEpIHRoZSB0aW1lc3RhbXAgc2hvdWxkIGJlIGluIEFW X1RJTUVfQkFTRQorKyAqICAgICAgICB1bml0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBy ZXNlbnRhdGlvbi4KKysgKiAgICAgICAgSWYgYSBzdHJlYW1faW5kZXggPj0gMCBpcyB1c2VkIGFu ZCB0aGUgcHJvdG9jb2wgZG9lcyBub3Qgc3VwcG9ydAorKyAqICAgICAgICBzZWVraW5nIGJhc2Vk IG9uIGNvbXBvbmVudCBzdHJlYW1zLCB0aGUgY2FsbCB3aWxsIGZhaWwuCisrICogQHBhcmFtIHRp bWVzdGFtcCB0aW1lc3RhbXAgaW4gQVZTdHJlYW0udGltZV9iYXNlIHVuaXRzCisrICogICAgICAg IG9yIGlmIHRoZXJlIGlzIG5vIHN0cmVhbSBzcGVjaWZpZWQgdGhlbiBpbiBBVl9USU1FX0JBU0Ug dW5pdHMuCisrICogQHBhcmFtIGZsYWdzIE9wdGlvbmFsIGNvbWJpbmF0aW9uIG9mIEFWU0VFS19G TEFHX0JBQ0tXQVJELCBBVlNFRUtfRkxBR19CWVRFCisrICogICAgICAgIGFuZCBBVlNFRUtfRkxB R19BTlkuIFRoZSBwcm90b2NvbCBtYXkgc2lsZW50bHkgaWdub3JlCisrICogICAgICAgIEFWU0VF S19GTEFHX0JBQ0tXQVJEIGFuZCBBVlNFRUtfRkxBR19BTlksIGJ1dCBBVlNFRUtfRkxBR19CWVRF IHdpbGwKKysgKiAgICAgICAgZmFpbCBpZiB1c2VkIGFuZCBub3Qgc3VwcG9ydGVkLgorKyAqIEBy ZXR1cm4gPj0gMCBvbiBzdWNjZXNzCisrICogQHNlZSBBVklucHV0Rm9ybWF0OjpyZWFkX3NlZWsK KysgKi8KKytpbnQ2NF90IGF2aW9fc2Vla190aW1lKEFWSU9Db250ZXh0ICpoLCBpbnQgc3RyZWFt X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lc3RhbXAsIGludCBm bGFncyk7CisrCisrLyogQXZvaWQgYSB3YXJuaW5nLiBUaGUgaGVhZGVyIGNhbiBub3QgYmUgaW5j bHVkZWQgYmVjYXVzZSBpdCBicmVha3MgYysrLiAqLworK3N0cnVjdCBBVkJQcmludDsKKysKKysv KioKKysgKiBSZWFkIGNvbnRlbnRzIG9mIGggaW50byBwcmludCBidWZmZXIsIHVwIHRvIG1heF9z aXplIGJ5dGVzLCBvciB1cCB0byBFT0YuCisrICoKKysgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mg KG1heF9zaXplIGJ5dGVzIHJlYWQgb3IgRU9GIHJlYWNoZWQpLCBuZWdhdGl2ZSBlcnJvcgorKyAq IGNvZGUgb3RoZXJ3aXNlCisrICovCisraW50IGF2aW9fcmVhZF90b19icHJpbnQoQVZJT0NvbnRl eHQgKmgsIHN0cnVjdCBBVkJQcmludCAqcGIsIHNpemVfdCBtYXhfc2l6ZSk7CisrCisrLyoqCisr ICogQWNjZXB0IGFuZCBhbGxvY2F0ZSBhIGNsaWVudCBjb250ZXh0IG9uIGEgc2VydmVyIGNvbnRl eHQuCisrICogQHBhcmFtICBzIHRoZSBzZXJ2ZXIgY29udGV4dAorKyAqIEBwYXJhbSAgYyB0aGUg Y2xpZW50IGNvbnRleHQsIG11c3QgYmUgdW5hbGxvY2F0ZWQKKysgKiBAcmV0dXJuICAgPj0gMCBv biBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZworKyAqICAgICAgICAg ICB0byBhbiBBVkVSUk9SIG9uIGZhaWx1cmUKKysgKi8KKytpbnQgYXZpb19hY2NlcHQoQVZJT0Nv bnRleHQgKnMsIEFWSU9Db250ZXh0ICoqYyk7CisrCisrLyoqCisrICogUGVyZm9ybSBvbmUgc3Rl cCBvZiB0aGUgcHJvdG9jb2wgaGFuZHNoYWtlIHRvIGFjY2VwdCBhIG5ldyBjbGllbnQuCisrICog VGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbiBhIGNsaWVudCByZXR1cm5lZCBieSBhdmlv X2FjY2VwdCgpIGJlZm9yZQorKyAqIHVzaW5nIGl0IGFzIGEgcmVhZC93cml0ZSBjb250ZXh0Lgor KyAqIEl0IGlzIHNlcGFyYXRlIGZyb20gYXZpb19hY2NlcHQoKSBiZWNhdXNlIGl0IG1heSBibG9j ay4KKysgKiBBIHN0ZXAgb2YgdGhlIGhhbmRzaGFrZSBpcyBkZWZpbmVkIGJ5IHBsYWNlcyB3aGVy ZSB0aGUgYXBwbGljYXRpb24gbWF5CisrICogZGVjaWRlIHRvIGNoYW5nZSB0aGUgcHJvY2VlZGlu Z3MuCisrICogRm9yIGV4YW1wbGUsIG9uIGEgcHJvdG9jb2wgd2l0aCBhIHJlcXVlc3QgaGVhZGVy IGFuZCBhIHJlcGx5IGhlYWRlciwgZWFjaAorKyAqIG9uZSBjYW4gY29uc3RpdHV0ZSBhIHN0ZXAg YmVjYXVzZSB0aGUgYXBwbGljYXRpb24gbWF5IHVzZSB0aGUgcGFyYW1ldGVycworKyAqIGZyb20g dGhlIHJlcXVlc3QgdG8gY2hhbmdlIHBhcmFtZXRlcnMgaW4gdGhlIHJlcGx5OyBvciBlYWNoIGlu ZGl2aWR1YWwKKysgKiBjaHVuayBvZiB0aGUgcmVxdWVzdCBjYW4gY29uc3RpdHV0ZSBhIHN0ZXAu CisrICogSWYgdGhlIGhhbmRzaGFrZSBpcyBhbHJlYWR5IGZpbmlzaGVkLCBhdmlvX2hhbmRzaGFr ZSgpIGRvZXMgbm90aGluZyBhbmQKKysgKiByZXR1cm5zIDAgaW1tZWRpYXRlbHkuCisrICoKKysg KiBAcGFyYW0gIGMgdGhlIGNsaWVudCBjb250ZXh0IHRvIHBlcmZvcm0gdGhlIGhhbmRzaGFrZSBv bgorKyAqIEByZXR1cm4gICAwICAgb24gYSBjb21wbGV0ZSBhbmQgc3VjY2Vzc2Z1bCBoYW5kc2hh a2UKKysgKiAgICAgICAgICAgPiAwIGlmIHRoZSBoYW5kc2hha2UgcHJvZ3Jlc3NlZCwgYnV0IGlz IG5vdCBjb21wbGV0ZQorKyAqICAgICAgICAgICA8IDAgZm9yIGFuIEFWRVJST1IgY29kZQorKyAq LworK2ludCBhdmlvX2hhbmRzaGFrZShBVklPQ29udGV4dCAqYyk7CisrI2VuZGlmIC8qIEFWRk9S TUFUX0FWSU9fSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvdmVyc2lvbi5oLmZmbXBlZzkgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZmb3JtYXQvdmVyc2lvbi5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvdmVyc2lvbi5oLmZmbXBlZzkJMjAy Ni0wOS0wNyAxMjoyMzo0Ny42NzU1MDg3NDMgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC92ZXJzaW9u LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU0ODg0MTggKzAyMDAKK0BAIC0wLDAgKzEsNDcgQEAK KysvKgorKyAqIFZlcnNpb24gbWFjcm9zLgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkZPUk1BVF9WRVJTSU9OX0gK KysjZGVmaW5lIEFWRk9STUFUX1ZFUlNJT05fSAorKworKy8qKgorKyAqIEBmaWxlCisrICogQGlu Z3JvdXAgbGliYXZmCisrICogTGliYXZmb3JtYXQgdmVyc2lvbiBtYWNyb3MKKysgKi8KKysKKysj aW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIKKysKKysjaW5jbHVkZSAidmVyc2lvbl9tYWpv ci5oIgorKworKyNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSU5PUiAgIDEKKysjZGVmaW5l IExJQkFWRk9STUFUX1ZFUlNJT05fTUlDUk8gMTAwCisrCisrI2RlZmluZSBMSUJBVkZPUk1BVF9W RVJTSU9OX0lOVCBBVl9WRVJTSU9OX0lOVChMSUJBVkZPUk1BVF9WRVJTSU9OX01BSk9SLCBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVkZPUk1B VF9WRVJTSU9OX01JTk9SLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMSUJBVkZPUk1BVF9WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCQVZGT1JN QVRfVkVSU0lPTiAgICAgQVZfVkVSU0lPTihMSUJBVkZPUk1BVF9WRVJTSU9OX01BSk9SLCAgIFwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCQVZGT1JNQVRf VkVSU0lPTl9NSU5PUiwgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQkFWRk9STUFUX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBMSUJBVkZPUk1BVF9C VUlMRCAgICAgICBMSUJBVkZPUk1BVF9WRVJTSU9OX0lOVAorKworKyNkZWZpbmUgTElCQVZGT1JN QVRfSURFTlQgICAgICAgIkxhdmYiIEFWX1NUUklOR0lGWShMSUJBVkZPUk1BVF9WRVJTSU9OKQor KworKyNlbmRpZiAvKiBBVkZPUk1BVF9WRVJTSU9OX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0 L3ZlcnNpb25fbWFqb3IuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L3ZlcnNpb25fbWFqb3IuaAorLS0t IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2Zm9ybWF0L3ZlcnNpb25fbWFqb3IuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcu Njc1NTgzOTE2ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvdmVyc2lvbl9tYWpvci5oCTIwMjYtMDkt MDcgMTI6MjM6NDcuNjc1NTYxMzE2ICswMjAwCitAQCAtMCwwICsxLDUyIEBACisrLyoKKysgKiBW ZXJzaW9uIG1hY3Jvcy4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysg KgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZGT1JNQVRfVkVSU0lPTl9NQUpPUl9ICisrI2Rl ZmluZSBBVkZPUk1BVF9WRVJTSU9OX01BSk9SX0gKKysKKysvKioKKysgKiBAZmlsZQorKyAqIEBp bmdyb3VwIGxpYmF2ZgorKyAqIExpYmF2Zm9ybWF0IHZlcnNpb24gbWFjcm9zCisrICovCisrCisr Ly8gTWFqb3IgYnVtcGluZyBtYXkgYWZmZWN0IFRpY2tldDU0NjcsIDU0MjEsIDU0NTEoY29tcGF0 aWJpbGl0eSB3aXRoIENocm9taXVtKQorKy8vIEFsc28gcGxlYXNlIGFkZCBhbnkgdGlja2V0IG51 bWJlcnMgdGhhdCB5b3UgYmVsaWV2ZSBtaWdodCBiZSBhZmZlY3RlZCBoZXJlCisrI2RlZmluZSBM SUJBVkZPUk1BVF9WRVJTSU9OX01BSk9SICA2MworKworKy8qKgorKyAqIEZGX0FQSV8qIGRlZmlu ZXMgbWF5IGJlIHBsYWNlZCBiZWxvdyB0byBpbmRpY2F0ZSBwdWJsaWMgQVBJIHRoYXQgd2lsbCBi ZQorKyAqIGRyb3BwZWQgYXQgYSBmdXR1cmUgdmVyc2lvbiBidW1wLiBUaGUgZGVmaW5lcyB0aGVt c2VsdmVzIGFyZSBub3QgcGFydCBvZgorKyAqIHRoZSBwdWJsaWMgQVBJIGFuZCBtYXkgY2hhbmdl LCBicmVhayBvciBkaXNhcHBlYXIgYXQgYW55IHRpbWUuCisrICoKKysgKiBAbm90ZSwgd2hlbiBi dW1waW5nIHRoZSBtYWpvciB2ZXJzaW9uIGl0IGlzIHJlY29tbWVuZGVkIHRvIG1hbnVhbGx5Cisr ICogZGlzYWJsZSBlYWNoIEZGX0FQSV8qIGluIGl0cyBvd24gY29tbWl0IGluc3RlYWQgb2YgZGlz YWJsaW5nIHRoZW0gYWxsCisrICogYXQgb25jZSB0aHJvdWdoIHRoZSBidW1wLiBUaGlzIGltcHJv dmVzIHRoZSBnaXQgYmlzZWN0LWFiaWxpdHkgb2YgdGhlIGNoYW5nZS4KKysgKgorKyAqLworKyNk ZWZpbmUgRkZfQVBJX0NPTVBVVEVfUEtUX0ZJRUxEUzIgICAgICAoTElCQVZGT1JNQVRfVkVSU0lP Tl9NQUpPUiA8IDY0KQorKworKyNkZWZpbmUgRkZfQVBJX0ZERUJVR19UUyAgICAgICAgICAgICAg ICAoTElCQVZGT1JNQVRfVkVSU0lPTl9NQUpPUiA8IDY0KQorKworKyNkZWZpbmUgRkZfQVBJX0xD RVZDX1NUUlVDVCAgICAgICAgICAgICAoTElCQVZGT1JNQVRfVkVSU0lPTl9NQUpPUiA8IDY0KQor KworKyNkZWZpbmUgRkZfQVBJX1JfRlJBTUVfUkFURSAgICAgICAgICAgIDEKKysKKysjZW5kaWYg LyogQVZGT1JNQVRfVkVSU0lPTl9NQUpPUl9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYXR0cmli dXRlcy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRw YXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2F0dHJpYnV0ZXMuaAorLS0tIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9hdHRy aWJ1dGVzLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTY5MjkzMCArMDIwMAorKysr IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2dXRpbC9hdHRyaWJ1dGVzLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU2ODA5ODIgKzAy MDAKK0BAIC0wLDAgKzEsMjM1IEBACisrLyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFl bCBOaWVkZXJtYXllciA8bWljaGFlbG5pQGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisr ICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICog TWFjcm8gZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMgZnVuY3Rpb24vdmFyaWFibGUgYXR0cmlidXRl cworKyAqLworKworKyNpZm5kZWYgQVZVVElMX0FUVFJJQlVURVNfSAorKyNkZWZpbmUgQVZVVElM X0FUVFJJQlVURVNfSAorKworKyNpZmRlZiBfX0dOVUNfXworKyMgICAgZGVmaW5lIEFWX0dDQ19W RVJTSU9OX0FUX0xFQVNUKHgseSkgKF9fR05VQ19fID4gKHgpIHx8IF9fR05VQ19fID09ICh4KSAm JiBfX0dOVUNfTUlOT1JfXyA+PSAoeSkpCisrIyAgICBkZWZpbmUgQVZfR0NDX1ZFUlNJT05fQVRf TU9TVCh4LHkpICAoX19HTlVDX18gPCAoeCkgfHwgX19HTlVDX18gPT0gKHgpICYmIF9fR05VQ19N SU5PUl9fIDw9ICh5KSkKKysjZWxzZQorKyMgICAgZGVmaW5lIEFWX0dDQ19WRVJTSU9OX0FUX0xF QVNUKHgseSkgMAorKyMgICAgZGVmaW5lIEFWX0dDQ19WRVJTSU9OX0FUX01PU1QoeCx5KSAgMAor KyNlbmRpZgorKworKyNpZmRlZiBfX2hhc19idWlsdGluCisrIyAgICBkZWZpbmUgQVZfSEFTX0JV SUxUSU4oeCkgX19oYXNfYnVpbHRpbih4KQorKyNlbHNlCisrIyAgICBkZWZpbmUgQVZfSEFTX0JV SUxUSU4oeCkgMAorKyNlbmRpZgorKworKyNpZmRlZiBfX2hhc19hdHRyaWJ1dGUKKysjICAgIGRl ZmluZSBBVl9IQVNfQVRUUklCVVRFKHgpIF9faGFzX2F0dHJpYnV0ZSh4KQorKyNlbHNlCisrIyAg ICBkZWZpbmUgQVZfSEFTX0FUVFJJQlVURSh4KSAwCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQo X19jcGx1c3BsdXMpICYmIFwKKysgICAgZGVmaW5lZChfX2hhc19jcHBfYXR0cmlidXRlKSAmJiBc CisrICAgIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKysjICAgIGRlZmluZSBBVl9IQVNfU1REX0FU VFJJQlVURSh4KSBfX2hhc19jcHBfYXR0cmlidXRlKHgpCisrI2VsaWYgIWRlZmluZWQoX19jcGx1 c3BsdXMpICYmIFwKKysgICAgICBkZWZpbmVkKF9faGFzX2NfYXR0cmlidXRlKSAmJiBcCisrICAg ICAgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBcCisrICAgICAgX19TVERDX1ZFUlNJT05f XyA+PSAyMDIzMTFMCisrIyAgICBkZWZpbmUgQVZfSEFTX1NURF9BVFRSSUJVVEUoeCkgX19oYXNf Y19hdHRyaWJ1dGUoeCkKKysjZWxzZQorKyMgICAgZGVmaW5lIEFWX0hBU19TVERfQVRUUklCVVRF KHgpIDAKKysjZW5kaWYKKysKKysjaWYgQVZfSEFTX1NURF9BVFRSSUJVVEUoZmFsbHRocm91Z2gp CisrIyAgICBkZWZpbmUgYXZfZmFsbHRocm91Z2ggW1tmYWxsdGhyb3VnaF1dCisrI2VsaWYgQVZf SEFTX0FUVFJJQlVURShmYWxsdGhyb3VnaCkKKysjICAgIGRlZmluZSBhdl9mYWxsdGhyb3VnaCBf X2F0dHJpYnV0ZV9fKChmYWxsdGhyb3VnaCkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9mYWxs dGhyb3VnaCBkbyB7fSB3aGlsZSgwKQorKyNlbmRpZgorKworKyNpZm5kZWYgYXZfYWx3YXlzX2lu bGluZQorKyNpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCgzLDEpIHx8IGRlZmluZWQoX19jbGFu Z19fKQorKyMgICAgZGVmaW5lIGF2X2Fsd2F5c19pbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlz X2lubGluZSkpIGlubGluZQorKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisrIyAgICBkZWZpbmUg YXZfYWx3YXlzX2lubGluZSBfX2ZvcmNlaW5saW5lCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9h bHdheXNfaW5saW5lIGlubGluZQorKyNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgYXZfZXh0 ZXJuX2lubGluZQorKyNpZiBkZWZpbmVkKF9fSUNMKSAmJiBfX0lDTCA+PSAxMjEwIHx8IGRlZmlu ZWQoX19HTlVDX1NURENfSU5MSU5FX18pCisrIyAgICBkZWZpbmUgYXZfZXh0ZXJuX2lubGluZSBl eHRlcm4gaW5saW5lCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9leHRlcm5faW5saW5lIGlubGlu ZQorKyNlbmRpZgorKyNlbmRpZgorKworKyNpZiBBVl9IQVNfU1REX0FUVFJJQlVURShub2Rpc2Nh cmQpCisrIyAgICBkZWZpbmUgYXZfd2Fybl91bnVzZWRfcmVzdWx0IFtbbm9kaXNjYXJkXV0KKysj ZWxpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCgzLDQpIHx8IGRlZmluZWQoX19jbGFuZ19fKQor KyMgICAgZGVmaW5lIGF2X3dhcm5fdW51c2VkX3Jlc3VsdCBfX2F0dHJpYnV0ZV9fKCh3YXJuX3Vu dXNlZF9yZXN1bHQpKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZfd2Fybl91bnVzZWRfcmVzdWx0 CisrI2VuZGlmCisrCisrI2lmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDMsMSkgfHwgZGVmaW5l ZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfbm9pbmxpbmUgX19hdHRyaWJ1dGVfXygobm9p bmxpbmUpKQorKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisrIyAgICBkZWZpbmUgYXZfbm9pbmxp bmUgX19kZWNsc3BlYyhub2lubGluZSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X25vaW5saW5l CisrI2VuZGlmCisrCisrI2lmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDMsMSkgfHwgZGVmaW5l ZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfcHVyZSBfX2F0dHJpYnV0ZV9fKChwdXJlKSkK KysjZWxzZQorKyMgICAgZGVmaW5lIGF2X3B1cmUKKysjZW5kaWYKKysKKysjaWYgQVZfR0NDX1ZF UlNJT05fQVRfTEVBU1QoMiw2KSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmluZSBh dl9jb25zdCBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9j b25zdAorKyNlbmRpZgorKworKyNpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCg0LDMpIHx8IGRl ZmluZWQoX19jbGFuZ19fKQorKyMgICAgZGVmaW5lIGF2X2NvbGQgX19hdHRyaWJ1dGVfXygoY29s ZCkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9jb2xkCisrI2VuZGlmCisrCisrI2lmIChBVl9H Q0NfVkVSU0lPTl9BVF9MRUFTVCg0LDEpICYmICFkZWZpbmVkKF9fY2xhbmdfXyApKSB8fCBBVl9I QVNfQVRUUklCVVRFKGZsYXR0ZW4pCisrIyAgICBkZWZpbmUgYXZfZmxhdHRlbiBfX2F0dHJpYnV0 ZV9fKChmbGF0dGVuKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X2ZsYXR0ZW4KKysjZW5kaWYK KysKKysjaWYgQVZfSEFTX1NURF9BVFRSSUJVVEUoZGVwcmVjYXRlZCkKKysjICAgIGRlZmluZSBh dHRyaWJ1dGVfZGVwcmVjYXRlZCBbW2RlcHJlY2F0ZWRdXQorKyNlbGlmIEFWX0dDQ19WRVJTSU9O X0FUX0xFQVNUKDMsMSkgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXR0cmli dXRlX2RlcHJlY2F0ZWQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCisrI2VsaWYgZGVmaW5l ZChfTVNDX1ZFUikKKysjICAgIGRlZmluZSBhdHRyaWJ1dGVfZGVwcmVjYXRlZCBfX2RlY2xzcGVj KGRlcHJlY2F0ZWQpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdHRyaWJ1dGVfZGVwcmVjYXRlZAor KyNlbmRpZgorKworKy8qKgorKyAqIERpc2FibGUgd2FybmluZ3MgYWJvdXQgZGVwcmVjYXRlZCBm ZWF0dXJlcworKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBzZWN0aW9ucyBvZiBjb2RlIGtlcHQgZm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kCisrICogc2NoZWR1bGVkIGZvciByZW1vdmFsLgor KyAqLworKyNpZm5kZWYgQVZfTk9XQVJOX0RFUFJFQ0FURUQKKysjaWYgQVZfR0NDX1ZFUlNJT05f QVRfTEVBU1QoNCw2KSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmluZSBBVl9OT1dB Uk5fREVQUkVDQVRFRChjb2RlKSBcCisrICAgICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBw dXNoIikgXAorKyAgICAgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZGVw cmVjYXRlZC1kZWNsYXJhdGlvbnNcIiIpIFwKKysgICAgICAgIGNvZGUgXAorKyAgICAgICAgX1By YWdtYSgiR0NDIGRpYWdub3N0aWMgcG9wIikKKysjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorKyMg ICAgZGVmaW5lIEFWX05PV0FSTl9ERVBSRUNBVEVEKGNvZGUpIFwKKysgICAgICAgIF9fcHJhZ21h KHdhcm5pbmcocHVzaCkpIFwKKysgICAgICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZSA6IDQ5 OTYpKSBcCisrICAgICAgICBjb2RlOyBcCisrICAgICAgICBfX3ByYWdtYSh3YXJuaW5nKHBvcCkp CisrI2Vsc2UKKysjICAgIGRlZmluZSBBVl9OT1dBUk5fREVQUkVDQVRFRChjb2RlKSBjb2RlCisr I2VuZGlmCisrI2VuZGlmCisrCisrI2lmIEFWX0hBU19TVERfQVRUUklCVVRFKG1heWJlX3VudXNl ZCkKKysjICAgIGRlZmluZSBhdl91bnVzZWQgW1ttYXliZV91bnVzZWRdXQorKyNlbGlmIGRlZmlu ZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19jbGFuZ19fKQorKyMgICAgZGVmaW5lIGF2X3VudXNl ZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZfdW51c2Vk CisrI2VuZGlmCisrCisrLyoqCisrICogTWFyayBhIHZhcmlhYmxlIGFzIHVzZWQgYW5kIHByZXZl bnQgdGhlIGNvbXBpbGVyIGZyb20gb3B0aW1pemluZyBpdAorKyAqIGF3YXkuICBUaGlzIGlzIHVz ZWZ1bCBmb3IgdmFyaWFibGVzIGFjY2Vzc2VkIG9ubHkgZnJvbSBpbmxpbmUKKysgKiBhc3NlbWJs ZXIgd2l0aG91dCB0aGUgY29tcGlsZXIgYmVpbmcgYXdhcmUuCisrICovCisrI2lmIEFWX0dDQ19W RVJTSU9OX0FUX0xFQVNUKDMsMSkgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUg YXZfdXNlZCBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X3Vz ZWQKKysjZW5kaWYKKysKKysjaWYgQVZfR0NDX1ZFUlNJT05fQVRfTEVBU1QoMywzKSB8fCBkZWZp bmVkKF9fY2xhbmdfXykKKysjICAgZGVmaW5lIGF2X2FsaWFzIF9fYXR0cmlidXRlX18oKG1heV9h bGlhcykpCisrI2Vsc2UKKysjICAgZGVmaW5lIGF2X2FsaWFzCisrI2VuZGlmCisrCisrI2lmIChk ZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykpICYmICFkZWZpbmVkKF9fSU5U RUxfQ09NUElMRVIpCisrIyAgICBkZWZpbmUgYXZfdW5pbml0KHgpIHg9eAorKyNlbHNlCisrIyAg ICBkZWZpbmUgYXZfdW5pbml0KHgpIHgKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChfX0dOVUNf XykgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfYnVpbHRpbl9jb25zdGFu dF9wIF9fYnVpbHRpbl9jb25zdGFudF9wCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9idWlsdGlu X2NvbnN0YW50X3AoeCkgMAorKyNlbmRpZgorKworKy8vIGZvciBfX01JTkdXX1BSSU5URl9GT1JN QVQgYW5kIF9fTUlOR1dfU0NBTkZfRk9STUFUCisrI2lmZGVmIF9fTUlOR1czMl9fCisrIyAgICBp bmNsdWRlIDxzdGRpby5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfX01JTkdXX1BSSU5URl9GT1JN QVQKKysjICAgIGRlZmluZSBBVl9QUklOVEZfRk1UIF9fTUlOR1dfUFJJTlRGX0ZPUk1BVAorKyNl bGlmIEFWX0hBU19BVFRSSUJVVEUoZm9ybWF0KQorKyMgICAgZGVmaW5lIEFWX1BSSU5URl9GTVQg X19wcmludGZfXworKyNlbmRpZgorKworKyNpZmRlZiBfX01JTkdXX1NDQU5GX0ZPUk1BVAorKyMg ICAgZGVmaW5lIEFWX1NDQU5GX0ZNVCBfX01JTkdXX1NDQU5GX0ZPUk1BVAorKyNlbGlmIEFWX0hB U19BVFRSSUJVVEUoZm9ybWF0KQorKyMgICAgZGVmaW5lIEFWX1NDQU5GX0ZNVCBfX3NjYW5mX18K KysjZW5kaWYKKysKKysjaWZkZWYgQVZfUFJJTlRGX0ZNVAorKyMgICAgZGVmaW5lIGF2X3ByaW50 Zl9mb3JtYXQoZm10cG9zLCBhdHRycG9zKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoQVZfUFJJTlRG X0ZNVCwgZm10cG9zLCBhdHRycG9zKSkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl9wcmludGZf Zm9ybWF0KGZtdHBvcywgYXR0cnBvcykKKysjZW5kaWYKKysKKysjaWZkZWYgQVZfU0NBTkZfRk1U CisrIyAgICBkZWZpbmUgYXZfc2NhbmZfZm9ybWF0KGZtdHBvcywgYXR0cnBvcykgX19hdHRyaWJ1 dGVfXygoZm9ybWF0KEFWX1NDQU5GX0ZNVCwgZm10cG9zLCBhdHRycG9zKSkpCisrI2Vsc2UKKysj ICAgIGRlZmluZSBhdl9zY2FuZl9mb3JtYXQoZm10cG9zLCBhdHRycG9zKQorKyNlbmRpZgorKwor KyNpZiBBVl9IQVNfU1REX0FUVFJJQlVURShub3JldHVybikKKysjICAgIGRlZmluZSBhdl9ub3Jl dHVybiBbW25vcmV0dXJuXV0KKysjZWxpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCgyLDUpIHx8 IGRlZmluZWQoX19jbGFuZ19fKQorKyMgICAgZGVmaW5lIGF2X25vcmV0dXJuIF9fYXR0cmlidXRl X18oKG5vcmV0dXJuKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X25vcmV0dXJuCisrI2VuZGlm CisrCisrI2VuZGlmIC8qIEFWVVRJTF9BVFRSSUJVVEVTX0ggKi8KK2RpZmYgLXVwIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRp bC9hdmNvbmZpZy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2F2Y29uZmlnLmgKKy0tLSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv YXZjb25maWcuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1NzU1NjE1ICswMjAwCisr KysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcv djkvbGliYXZ1dGlsL2F2Y29uZmlnLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU3MzkwNDEgKzAy MDAKK0BAIC0wLDAgKzEsMjQgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZVVElMX0FWQ09ORklHX0gKKysjZGVm aW5lIEFWVVRJTF9BVkNPTkZJR19ICisrCisrI2RlZmluZSBBVl9IQVZFX0JJR0VORElBTiAwCisr CisrI2VuZGlmIC8qIEFWVVRJTF9BVkNPTkZJR19IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYXZz dHJpbmcuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9hdnN0cmluZy5oCistLS0gTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2F2c3Ry aW5nLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTg5Nzk5OSArMDIwMAorKysrIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9hdnN0cmluZy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1ODA3Nzk5ICswMjAwCitA QCAtMCwwICsxLDQyOCBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDA3IE1hbnMgUnVsbGdh cmQKKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAq LworKworKyNpZm5kZWYgQVZVVElMX0FWU1RSSU5HX0gKKysjZGVmaW5lIEFWVVRJTF9BVlNUUklO R19ICisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5j bHVkZSAiYXR0cmlidXRlcy5oIgorKworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdnVfc3RyaW5n CisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBSZXR1cm4gbm9uLXplcm8gaWYgcGZ4IGlzIGEg cHJlZml4IG9mIHN0ci4gSWYgaXQgaXMsICpwdHIgaXMgc2V0IHRvCisrICogdGhlIGFkZHJlc3Mg b2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBzdHIgYWZ0ZXIgdGhlIHByZWZpeC4KKysgKgorKyAq IEBwYXJhbSBzdHIgaW5wdXQgc3RyaW5nCisrICogQHBhcmFtIHBmeCBwcmVmaXggdG8gdGVzdAor KyAqIEBwYXJhbSBwdHIgdXBkYXRlZCBpZiB0aGUgcHJlZml4IGlzIG1hdGNoZWQgaW5zaWRlIHN0 cgorKyAqIEByZXR1cm4gbm9uLXplcm8gaWYgdGhlIHByZWZpeCBtYXRjaGVzLCB6ZXJvIG90aGVy d2lzZQorKyAqLworK2ludCBhdl9zdHJzdGFydChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIg KnBmeCwgY29uc3QgY2hhciAqKnB0cik7CisrCisrLyoqCisrICogUmV0dXJuIG5vbi16ZXJvIGlm IHBmeCBpcyBhIHByZWZpeCBvZiBzdHIgaW5kZXBlbmRlbnQgb2YgY2FzZS4gSWYKKysgKiBpdCBp cywgKnB0ciBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBz dHIKKysgKiBhZnRlciB0aGUgcHJlZml4LgorKyAqCisrICogQHBhcmFtIHN0ciBpbnB1dCBzdHJp bmcKKysgKiBAcGFyYW0gcGZ4IHByZWZpeCB0byB0ZXN0CisrICogQHBhcmFtIHB0ciB1cGRhdGVk IGlmIHRoZSBwcmVmaXggaXMgbWF0Y2hlZCBpbnNpZGUgc3RyCisrICogQHJldHVybiBub24temVy byBpZiB0aGUgcHJlZml4IG1hdGNoZXMsIHplcm8gb3RoZXJ3aXNlCisrICovCisraW50IGF2X3N0 cmlzdGFydChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqKnB0 cik7CisrCisrLyoqCisrICogTG9jYXRlIHRoZSBmaXJzdCBjYXNlLWluZGVwZW5kZW50IG9jY3Vy cmVuY2UgaW4gdGhlIHN0cmluZyBoYXlzdGFjaworKyAqIG9mIHRoZSBzdHJpbmcgbmVlZGxlLiAg QSB6ZXJvLWxlbmd0aCBzdHJpbmcgbmVlZGxlIGlzIGNvbnNpZGVyZWQgdG8KKysgKiBtYXRjaCBh dCB0aGUgc3RhcnQgb2YgaGF5c3RhY2suCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY2Fz ZS1pbnNlbnNpdGl2ZSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBzdHJzdHIoKS4KKysgKgorKyAq IEBwYXJhbSBoYXlzdGFjayBzdHJpbmcgdG8gc2VhcmNoIGluCisrICogQHBhcmFtIG5lZWRsZSAg IHN0cmluZyB0byBzZWFyY2ggZm9yCisrICogQHJldHVybiAgICAgICAgIHBvaW50ZXIgdG8gdGhl IGxvY2F0ZWQgbWF0Y2ggd2l0aGluIGhheXN0YWNrCisrICogICAgICAgICAgICAgICAgIG9yIGEg bnVsbCBwb2ludGVyIGlmIG5vIG1hdGNoCisrICovCisrY2hhciAqYXZfc3RyaXN0cihjb25zdCBj aGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKysKKysvKioKKysgKiBMb2NhdGUg dGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHN0cmluZyBuZWVkbGUgaW4gdGhlIHN0cmluZyBo YXlzdGFjaworKyAqIHdoZXJlIG5vdCBtb3JlIHRoYW4gaGF5X2xlbmd0aCBjaGFyYWN0ZXJzIGFy ZSBzZWFyY2hlZC4gQSB6ZXJvLWxlbmd0aAorKyAqIHN0cmluZyBuZWVkbGUgaXMgY29uc2lkZXJl ZCB0byBtYXRjaCBhdCB0aGUgc3RhcnQgb2YgaGF5c3RhY2suCisrICoKKysgKiBUaGlzIGZ1bmN0 aW9uIGlzIGEgbGVuZ3RoLWxpbWl0ZWQgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgc3Ryc3RyKCku CisrICoKKysgKiBAcGFyYW0gaGF5c3RhY2sgICBzdHJpbmcgdG8gc2VhcmNoIGluCisrICogQHBh cmFtIG5lZWRsZSAgICAgc3RyaW5nIHRvIHNlYXJjaCBmb3IKKysgKiBAcGFyYW0gaGF5X2xlbmd0 aCBsZW5ndGggb2Ygc3RyaW5nIHRvIHNlYXJjaCBpbgorKyAqIEByZXR1cm4gICAgICAgICAgIHBv aW50ZXIgdG8gdGhlIGxvY2F0ZWQgbWF0Y2ggd2l0aGluIGhheXN0YWNrCisrICogICAgICAgICAg ICAgICAgICAgb3IgYSBudWxsIHBvaW50ZXIgaWYgbm8gbWF0Y2gKKysgKi8KKytjaGFyICphdl9z dHJuc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUsIHNpemVfdCBo YXlfbGVuZ3RoKTsKKysKKysvKioKKysgKiBDb3B5IHRoZSBzdHJpbmcgc3JjIHRvIGRzdCwgYnV0 IG5vIG1vcmUgdGhhbiBzaXplIC0gMSBieXRlcywgYW5kCisrICogbnVsbC10ZXJtaW5hdGUgZHN0 LgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBCU0Qgc3RybGNweSgpLgor KyAqCisrICogQHBhcmFtIGRzdCBkZXN0aW5hdGlvbiBidWZmZXIKKysgKiBAcGFyYW0gc3JjIHNv dXJjZSBzdHJpbmcKKysgKiBAcGFyYW0gc2l6ZSBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgor KyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiBzcmMKKysgKgorKyAqIEB3YXJuaW5nIHNpbmNlIHRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIGxlbmd0aCBvZiBzcmMsIHNyYyBhYnNvbHV0ZWx5CisrICog X211c3RfIGJlIGEgcHJvcGVybHkgMC10ZXJtaW5hdGVkIHN0cmluZywgb3RoZXJ3aXNlIHRoaXMg d2lsbCByZWFkIGJleW9uZAorKyAqIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhbmQgcG9zc2libHkg Y3Jhc2guCisrICovCisrc2l6ZV90IGF2X3N0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpz cmMsIHNpemVfdCBzaXplKTsKKysKKysvKioKKysgKiBBcHBlbmQgdGhlIHN0cmluZyBzcmMgdG8g dGhlIHN0cmluZyBkc3QsIGJ1dCB0byBhIHRvdGFsIGxlbmd0aCBvZgorKyAqIG5vIG1vcmUgdGhh biBzaXplIC0gMSBieXRlcywgYW5kIG51bGwtdGVybWluYXRlIGRzdC4KKysgKgorKyAqIFRoaXMg ZnVuY3Rpb24gaXMgc2ltaWxhciB0byBCU0Qgc3RybGNhdCgpLCBidXQgZGlmZmVycyB3aGVuCisr ICogc2l6ZSA8PSBzdHJsZW4oZHN0KS4KKysgKgorKyAqIEBwYXJhbSBkc3QgZGVzdGluYXRpb24g YnVmZmVyCisrICogQHBhcmFtIHNyYyBzb3VyY2Ugc3RyaW5nCisrICogQHBhcmFtIHNpemUgc2l6 ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKysgKiBAcmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2Yg c3JjIGFuZCBkc3QKKysgKgorKyAqIEB3YXJuaW5nIHNpbmNlIHRoZSByZXR1cm4gdmFsdWUgdXNl IHRoZSBsZW5ndGggb2Ygc3JjIGFuZCBkc3QsIHRoZXNlCisrICogYWJzb2x1dGVseSBfbXVzdF8g YmUgYSBwcm9wZXJseSAwLXRlcm1pbmF0ZWQgc3RyaW5ncywgb3RoZXJ3aXNlIHRoaXMKKysgKiB3 aWxsIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhbmQgcG9zc2libHkgY3Jhc2gu CisrICovCisrc2l6ZV90IGF2X3N0cmxjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNp emVfdCBzaXplKTsKKysKKysvKioKKysgKiBBcHBlbmQgb3V0cHV0IHRvIGEgc3RyaW5nLCBhY2Nv cmRpbmcgdG8gYSBmb3JtYXQuIE5ldmVyIHdyaXRlIG91dCBvZgorKyAqIHRoZSBkZXN0aW5hdGlv biBidWZmZXIsIGFuZCBhbHdheXMgcHV0IGEgdGVybWluYXRpbmcgMCB3aXRoaW4KKysgKiB0aGUg YnVmZmVyLgorKyAqIEBwYXJhbSBkc3QgZGVzdGluYXRpb24gYnVmZmVyIChzdHJpbmcgdG8gd2hp Y2ggdGhlIG91dHB1dCBpcworKyAqICBhcHBlbmRlZCkKKysgKiBAcGFyYW0gc2l6ZSB0b3RhbCBz aXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKysgKiBAcGFyYW0gZm10IHByaW50Zi1jb21w YXRpYmxlIGZvcm1hdCBzdHJpbmcsIHNwZWNpZnlpbmcgaG93IHRoZQorKyAqICBmb2xsb3dpbmcg cGFyYW1ldGVycyBhcmUgdXNlZAorKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n IHRoYXQgd291bGQgaGF2ZSBiZWVuIGdlbmVyYXRlZAorKyAqICBpZiBlbm91Z2ggc3BhY2UgaGFk IGJlZW4gYXZhaWxhYmxlCisrICovCisrc2l6ZV90IGF2X3N0cmxjYXRmKGNoYXIgKmRzdCwgc2l6 ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBhdl9wcmludGZfZm9ybWF0KDMsIDQpOwor KworKy8qKgorKyAqIEdldCB0aGUgY291bnQgb2YgY29udGludW91cyBub24gemVybyBjaGFycyBz dGFydGluZyBmcm9tIHRoZSBiZWdpbm5pbmcuCisrICoKKysgKiBAcGFyYW0gcyAgIHRoZSBzdHJp bmcgd2hvc2UgbGVuZ3RoIHRvIGNvdW50CisrICogQHBhcmFtIGxlbiBtYXhpbXVtIG51bWJlciBv ZiBjaGFyYWN0ZXJzIHRvIGNoZWNrIGluIHRoZSBzdHJpbmcsIHRoYXQKKysgKiAgICAgICAgICAg IGlzIHRoZSBtYXhpbXVtIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbgor KyAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGF2X3N0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6 ZV90IGxlbikKKyt7CisrICAgIHNpemVfdCBpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuICYm IHNbaV07IGkrKykKKysgICAgICAgIDsKKysgICAgcmV0dXJuIGk7CisrfQorKworKy8qKgorKyAq IFByaW50IGFyZ3VtZW50cyBmb2xsb3dpbmcgc3BlY2lmaWVkIGZvcm1hdCBpbnRvIGEgbGFyZ2Ug ZW5vdWdoIGF1dG8KKysgKiBhbGxvY2F0ZWQgYnVmZmVyLiBJdCBpcyBzaW1pbGFyIHRvIEdOVSBh c3ByaW50ZigpLgorKyAqIEBwYXJhbSBmbXQgcHJpbnRmLWNvbXBhdGlibGUgZm9ybWF0IHN0cmlu Zywgc3BlY2lmeWluZyBob3cgdGhlCisrICogICAgICAgICAgICBmb2xsb3dpbmcgcGFyYW1ldGVy cyBhcmUgdXNlZC4KKysgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgc3RyaW5nCisrICogQG5vdGUg WW91IGhhdmUgdG8gZnJlZSB0aGUgc3RyaW5nIHlvdXJzZWxmIHdpdGggYXZfZnJlZSgpLgorKyAq LworK2NoYXIgKmF2X2FzcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBhdl9wcmludGZfZm9y bWF0KDEsIDIpOworKworKy8qKgorKyAqIFVuZXNjYXBlIHRoZSBnaXZlbiBzdHJpbmcgdW50aWwg YSBub24gZXNjYXBlZCB0ZXJtaW5hdGluZyBjaGFyLAorKyAqIGFuZCByZXR1cm4gdGhlIHRva2Vu IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuZXNjYXBlZCBzdHJpbmcuCisrICoKKysgKiBUaGUgbm9y bWFsIFwgYW5kICcgZXNjYXBpbmcgaXMgc3VwcG9ydGVkLiBMZWFkaW5nIGFuZCB0cmFpbGluZwor KyAqIHdoaXRlc3BhY2VzIGFyZSByZW1vdmVkLCB1bmxlc3MgdGhleSBhcmUgZXNjYXBlZCB3aXRo ICdcJyBvciBhcmUKKysgKiBlbmNsb3NlZCBiZXR3ZWVuICcnLgorKyAqCisrICogQHBhcmFtIGJ1 ZiB0aGUgYnVmZmVyIHRvIHBhcnNlLCBidWYgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRo ZQorKyAqIHRlcm1pbmF0aW5nIGNoYXIKKysgKiBAcGFyYW0gdGVybSBhIDAtdGVybWluYXRlZCBs aXN0IG9mIHRlcm1pbmF0aW5nIGNoYXJzCisrICogQHJldHVybiB0aGUgbWFsbG9jZWQgdW5lc2Nh cGVkIHN0cmluZywgd2hpY2ggbXVzdCBiZSBhdl9mcmVlZCBieQorKyAqIHRoZSB1c2VyLCBOVUxM IGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlCisrICovCisrY2hhciAqYXZfZ2V0X3Rva2Vu KGNvbnN0IGNoYXIgKipidWYsIGNvbnN0IGNoYXIgKnRlcm0pOworKworKy8qKgorKyAqIFNwbGl0 IHRoZSBzdHJpbmcgaW50byBzZXZlcmFsIHRva2VucyB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYnkK KysgKiBzdWNjZXNzaXZlIGNhbGxzIHRvIGF2X3N0cnRvaygpLgorKyAqCisrICogQSB0b2tlbiBp cyBkZWZpbmVkIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBub3QgYmVsb25naW5nIHRvIHRo ZQorKyAqIHNldCBzcGVjaWZpZWQgaW4gZGVsaW0uCisrICoKKysgKiBPbiB0aGUgZmlyc3QgY2Fs bCB0byBhdl9zdHJ0b2soKSwgcyBzaG91bGQgcG9pbnQgdG8gdGhlIHN0cmluZyB0bworKyAqIHBh cnNlLCBhbmQgdGhlIHZhbHVlIG9mIHNhdmVwdHIgaXMgaWdub3JlZC4gSW4gc3Vic2VxdWVudCBj YWxscywgcworKyAqIHNob3VsZCBiZSBOVUxMLCBhbmQgc2F2ZXB0ciBzaG91bGQgYmUgdW5jaGFu Z2VkIHNpbmNlIHRoZSBwcmV2aW91cworKyAqIGNhbGwuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9u IGlzIHNpbWlsYXIgdG8gc3RydG9rX3IoKSBkZWZpbmVkIGluIFBPU0lYLjEuCisrICoKKysgKiBA cGFyYW0gcyB0aGUgc3RyaW5nIHRvIHBhcnNlLCBtYXkgYmUgTlVMTAorKyAqIEBwYXJhbSBkZWxp bSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiB0b2tlbiBkZWxpbWl0ZXJzLCBtdXN0IGJlIG5vbi1OVUxM CisrICogQHBhcmFtIHNhdmVwdHIgdXNlci1wcm92aWRlZCBwb2ludGVyIHdoaWNoIHBvaW50cyB0 byBzdG9yZWQKKysgKiBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGF2X3N0cnRvaygpIHRvIGNv bnRpbnVlIHNjYW5uaW5nIHRoZSBzYW1lCisrICogc3RyaW5nLiBzYXZlcHRyIGlzIHVwZGF0ZWQg dG8gcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFmdGVyIHRoZQorKyAqIGZpcnN0IGRlbGlt aXRlciBmb3VuZCwgb3IgdG8gTlVMTCBpZiB0aGUgc3RyaW5nIHdhcyB0ZXJtaW5hdGVkCisrICog QHJldHVybiB0aGUgZm91bmQgdG9rZW4sIG9yIE5VTEwgd2hlbiBubyB0b2tlbiBpcyBmb3VuZAor KyAqLworK2NoYXIgKmF2X3N0cnRvayhjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAq KnNhdmVwdHIpOworKworKy8qKgorKyAqIExvY2FsZS1pbmRlcGVuZGVudCBjb252ZXJzaW9uIG9m IEFTQ0lJIGlzZGlnaXQuCisrICovCisrc3RhdGljIGlubGluZSBhdl9jb25zdCBpbnQgYXZfaXNk aWdpdChpbnQgYykKKyt7CisrICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JzsKKyt9Cisr CisrLyoqCisrICogTG9jYWxlLWluZGVwZW5kZW50IGNvbnZlcnNpb24gb2YgQVNDSUkgaXNncmFw aC4KKysgKi8KKytzdGF0aWMgaW5saW5lIGF2X2NvbnN0IGludCBhdl9pc2dyYXBoKGludCBjKQor K3sKKysgICAgcmV0dXJuIGMgPiAzMiAmJiBjIDwgMTI3OworK30KKysKKysvKioKKysgKiBMb2Nh bGUtaW5kZXBlbmRlbnQgY29udmVyc2lvbiBvZiBBU0NJSSBpc3NwYWNlLgorKyAqLworK3N0YXRp YyBpbmxpbmUgYXZfY29uc3QgaW50IGF2X2lzc3BhY2UoaW50IGMpCisreworKyAgICByZXR1cm4g YyA9PSAnICcgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAn XHQnIHx8CisrICAgICAgICAgICBjID09ICdcdic7CisrfQorKworKy8qKgorKyAqIExvY2FsZS1p bmRlcGVuZGVudCBjb252ZXJzaW9uIG9mIEFTQ0lJIGNoYXJhY3RlcnMgdG8gdXBwZXJjYXNlLgor KyAqLworK3N0YXRpYyBpbmxpbmUgYXZfY29uc3QgaW50IGF2X3RvdXBwZXIoaW50IGMpCisrewor KyAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCisrICAgICAgICBjIF49IDB4MjA7CisrICAg IHJldHVybiBjOworK30KKysKKysvKioKKysgKiBMb2NhbGUtaW5kZXBlbmRlbnQgY29udmVyc2lv biBvZiBBU0NJSSBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZS4KKysgKi8KKytzdGF0aWMgaW5saW5l IGF2X2NvbnN0IGludCBhdl90b2xvd2VyKGludCBjKQorK3sKKysgICAgaWYgKGMgPj0gJ0EnICYm IGMgPD0gJ1onKQorKyAgICAgICAgYyBePSAweDIwOworKyAgICByZXR1cm4gYzsKKyt9CisrCisr LyoqCisrICogTG9jYWxlLWluZGVwZW5kZW50IGNvbnZlcnNpb24gb2YgQVNDSUkgaXN4ZGlnaXQu CisrICovCisrc3RhdGljIGlubGluZSBhdl9jb25zdCBpbnQgYXZfaXN4ZGlnaXQoaW50IGMpCisr eworKyAgICBjID0gYXZfdG9sb3dlcihjKTsKKysgICAgcmV0dXJuIGF2X2lzZGlnaXQoYykgfHwg KGMgPj0gJ2EnICYmIGMgPD0gJ2YnKTsKKyt9CisrCisrLyoqCisrICogTG9jYWxlLWluZGVwZW5k ZW50IGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyZS4KKysgKiBAbm90ZSBUaGlzIG1lYW5zIG9ubHkg QVNDSUktcmFuZ2UgY2hhcmFjdGVycyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQorKyAqLworK2ludCBh dl9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworKworKy8qKgorKyAq IExvY2FsZS1pbmRlcGVuZGVudCBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmUuCisrICogQG5vdGUg VGhpcyBtZWFucyBvbmx5IEFTQ0lJLXJhbmdlIGNoYXJhY3RlcnMgYXJlIGNhc2UtaW5zZW5zaXRp dmUKKysgKi8KKytpbnQgYXZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAq Yiwgc2l6ZV90IG4pOworKworKy8qKgorKyAqIExvY2FsZS1pbmRlcGVuZGVudCBzdHJpbmdzIHJl cGxhY2UuCisrICogQG5vdGUgVGhpcyBtZWFucyBvbmx5IEFTQ0lJLXJhbmdlIGNoYXJhY3RlcnMg YXJlIHJlcGxhY2VkLgorKyAqLworK2NoYXIgKmF2X3N0cmlyZXBsYWNlKGNvbnN0IGNoYXIgKnN0 ciwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworKworKy8qKgorKyAqIFRocmVh ZCBzYWZlIGJhc2VuYW1lLgorKyAqIEBwYXJhbSBwYXRoIHRoZSBzdHJpbmcgdG8gcGFyc2UsIG9u IERPUyBib3RoIFwgYW5kIC8gYXJlIGNvbnNpZGVyZWQgc2VwYXJhdG9ycy4KKysgKiBAcmV0dXJu IHBvaW50ZXIgdG8gdGhlIGJhc2VuYW1lIHN1YnN0cmluZy4KKysgKiBJZiBwYXRoIGRvZXMgbm90 IGNvbnRhaW4gYSBzbGFzaCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBjb3B5IG9mIHBhdGguCisr ICogSWYgcGF0aCBpcyBhIE5VTEwgcG9pbnRlciBvciBwb2ludHMgdG8gYW4gZW1wdHkgc3RyaW5n LCBhIHBvaW50ZXIKKysgKiB0byBhIHN0cmluZyAiLiIgaXMgcmV0dXJuZWQuCisrICovCisrY29u c3QgY2hhciAqYXZfYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCk7CisrCisrLyoqCisrICogVGhy ZWFkIHNhZmUgZGlybmFtZS4KKysgKiBAcGFyYW0gcGF0aCB0aGUgc3RyaW5nIHRvIHBhcnNlLCBv biBET1MgYm90aCBcIGFuZCAvIGFyZSBjb25zaWRlcmVkIHNlcGFyYXRvcnMuCisrICogQHJldHVy biBBIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCdzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHBh dGguCisrICogSWYgcGF0aCBpcyBhIE5VTEwgcG9pbnRlciBvciBwb2ludHMgdG8gYW4gZW1wdHkg c3RyaW5nLCBhIHBvaW50ZXIKKysgKiB0byBhIHN0cmluZyAiLiIgaXMgcmV0dXJuZWQuCisrICog QG5vdGUgdGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXRoLCBz byBjb3BpZXMgc2hvdWxkIGJlIHBhc3NlZC4KKysgKi8KKytjb25zdCBjaGFyICphdl9kaXJuYW1l KGNoYXIgKnBhdGgpOworKworKy8qKgorKyAqIE1hdGNoIGluc3RhbmNlcyBvZiBhIG5hbWUgaW4g YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBuYW1lcy4KKysgKiBMaXN0IGVudHJpZXMgYXJlIGNo ZWNrZWQgZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZXMgbGlzdCwKKysgKiB0 aGUgZmlyc3QgbWF0Y2ggZW5kcyBmdXJ0aGVyIHByb2Nlc3NpbmcuIElmIGFuIGVudHJ5IHByZWZp eGVkIHdpdGggJy0nCisrICogbWF0Y2hlcywgdGhlbiAwIGlzIHJldHVybmVkLiBUaGUgIkFMTCIg bGlzdCBlbnRyeSBpcyBjb25zaWRlcmVkIHRvCisrICogbWF0Y2ggYWxsIG5hbWVzLgorKyAqCisr ICogQHBhcmFtIG5hbWUgIE5hbWUgdG8gbG9vayBmb3IuCisrICogQHBhcmFtIG5hbWVzIExpc3Qg b2YgbmFtZXMuCisrICogQHJldHVybiAxIG9uIG1hdGNoLCAwIG90aGVyd2lzZS4KKysgKi8KKytp bnQgYXZfbWF0Y2hfbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpuYW1lcyk7Cisr CisrLyoqCisrICogQXBwZW5kIHBhdGggY29tcG9uZW50IHRvIHRoZSBleGlzdGluZyBwYXRoLgor KyAqIFBhdGggc2VwYXJhdG9yICcvJyBpcyBwbGFjZWQgYmV0d2VlbiB3aGVuIG5lZWRlZC4KKysg KiBSZXN1bHRpbmcgc3RyaW5nIGhhdmUgdG8gYmUgZnJlZWQgd2l0aCBhdl9mcmVlKCkuCisrICog QHBhcmFtIHBhdGggICAgICBiYXNlIHBhdGgKKysgKiBAcGFyYW0gY29tcG9uZW50IGNvbXBvbmVu dCB0byBiZSBhcHBlbmRlZAorKyAqIEByZXR1cm4gbmV3IHBhdGggb3IgTlVMTCBvbiBlcnJvci4K KysgKi8KKytjaGFyICphdl9hcHBlbmRfcGF0aF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqY29tcG9uZW50KTsKKysKKytlbnVtIEFWRXNjYXBlTW9kZSB7CisrICAgIEFW X0VTQ0FQRV9NT0RFX0FVVE8sICAgICAgLy8vPCBVc2UgYXV0by1zZWxlY3RlZCBlc2NhcGluZyBt b2RlLgorKyAgICBBVl9FU0NBUEVfTU9ERV9CQUNLU0xBU0gsIC8vLzwgVXNlIGJhY2tzbGFzaCBl c2NhcGluZy4KKysgICAgQVZfRVNDQVBFX01PREVfUVVPVEUsICAgICAvLy88IFVzZSBzaW5nbGUt cXVvdGUgZXNjYXBpbmcuCisrICAgIEFWX0VTQ0FQRV9NT0RFX1hNTCwgICAgICAgLy8vPCBVc2Ug WE1MIG5vbi1tYXJrdXAgY2hhcmFjdGVyIGRhdGEgZXNjYXBpbmcuCisrfTsKKysKKysvKioKKysg KiBDb25zaWRlciBzcGFjZXMgc3BlY2lhbCBhbmQgZXNjYXBlIHRoZW0gZXZlbiBpbiB0aGUgbWlk ZGxlIG9mIHRoZQorKyAqIHN0cmluZy4KKysgKgorKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBh ZGRpbmcgdGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byB0aGUgc3BlY2lhbAorKyAqIGNoYXJh Y3RlcnMgbGlzdHMsIGV4Y2VwdCBpdCBpcyBndWFyYW50ZWVkIHRvIHVzZSB0aGUgZXhhY3Qgc2Ft ZSBsaXN0CisrICogb2Ygd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFzIHRoZSByZXN0IG9mIGxpYmF2 dXRpbC4KKysgKi8KKysjZGVmaW5lIEFWX0VTQ0FQRV9GTEFHX1dISVRFU1BBQ0UgKDEgPDwgMCkK KysKKysvKioKKysgKiBFc2NhcGUgb25seSBzcGVjaWZpZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgor KyAqIFdpdGhvdXQgdGhpcyBmbGFnLCBlc2NhcGUgYWxzbyBhbnkgY2hhcmFjdGVycyB0aGF0IG1h eSBiZSBjb25zaWRlcmVkCisrICogc3BlY2lhbCBieSBhdl9nZXRfdG9rZW4oKSwgc3VjaCBhcyB0 aGUgc2luZ2xlIHF1b3RlLgorKyAqLworKyNkZWZpbmUgQVZfRVNDQVBFX0ZMQUdfU1RSSUNUICgx IDw8IDEpCisrCisrLyoqCisrICogV2l0aGluIEFWX0VTQ0FQRV9NT0RFX1hNTCwgYWRkaXRpb25h bGx5IGVzY2FwZSBzaW5nbGUgcXVvdGVzIGZvciBzaW5nbGUKKysgKiBxdW90ZWQgYXR0cmlidXRl cy4KKysgKi8KKysjZGVmaW5lIEFWX0VTQ0FQRV9GTEFHX1hNTF9TSU5HTEVfUVVPVEVTICgxIDw8 IDIpCisrCisrLyoqCisrICogV2l0aGluIEFWX0VTQ0FQRV9NT0RFX1hNTCwgYWRkaXRpb25hbGx5 IGVzY2FwZSBkb3VibGUgcXVvdGVzIGZvciBkb3VibGUKKysgKiBxdW90ZWQgYXR0cmlidXRlcy4K KysgKi8KKysjZGVmaW5lIEFWX0VTQ0FQRV9GTEFHX1hNTF9ET1VCTEVfUVVPVEVTICgxIDw8IDMp CisrCisrCisrLyoqCisrICogRXNjYXBlIHN0cmluZyBpbiBzcmMsIGFuZCBwdXQgdGhlIGVzY2Fw ZWQgc3RyaW5nIGluIGFuIGFsbG9jYXRlZAorKyAqIHN0cmluZyBpbiAqZHN0LCB3aGljaCBtdXN0 IGJlIGZyZWVkIHdpdGggYXZfZnJlZSgpLgorKyAqCisrICogQHBhcmFtIGRzdCAgICAgICAgICAg cG9pbnRlciB3aGVyZSBhbiBhbGxvY2F0ZWQgc3RyaW5nIGlzIHB1dAorKyAqIEBwYXJhbSBzcmMg ICAgICAgICAgIHN0cmluZyB0byBlc2NhcGUsIG11c3QgYmUgbm9uLU5VTEwKKysgKiBAcGFyYW0g c3BlY2lhbF9jaGFycyBzdHJpbmcgY29udGFpbmluZyB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHdo aWNoCisrICogICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBlc2NhcGVkLCBjYW4gYmUg TlVMTAorKyAqIEBwYXJhbSBtb2RlICAgICAgICAgIGVzY2FwZSBtb2RlIHRvIGVtcGxveSwgc2Vl IEFWX0VTQ0FQRV9NT0RFXyogbWFjcm9zLgorKyAqICAgICAgICAgICAgICAgICAgICAgIEFueSB1 bmtub3duIHZhbHVlIGZvciBtb2RlIHdpbGwgYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvCisr ICogICAgICAgICAgICAgICAgICAgICAgQVZfRVNDQVBFX01PREVfQkFDS1NMQVNILCBidXQgdGhp cyBiZWhhdmlvdXIgY2FuIGNoYW5nZSB3aXRob3V0CisrICogICAgICAgICAgICAgICAgICAgICAg bm90aWNlLgorKyAqIEBwYXJhbSBmbGFncyAgICAgICAgIGZsYWdzIHdoaWNoIGNvbnRyb2wgaG93 IHRvIGVzY2FwZSwgc2VlIEFWX0VTQ0FQRV9GTEFHXyBtYWNyb3MKKysgKiBAcmV0dXJuIHRoZSBs ZW5ndGggb2YgdGhlIGFsbG9jYXRlZCBzdHJpbmcsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBp biBjYXNlIG9mIGVycm9yCisrICogQHNlZSBhdl9icHJpbnRfZXNjYXBlKCkKKysgKi8KKythdl93 YXJuX3VudXNlZF9yZXN1bHQKKytpbnQgYXZfZXNjYXBlKGNoYXIgKipkc3QsIGNvbnN0IGNoYXIg KnNyYywgY29uc3QgY2hhciAqc3BlY2lhbF9jaGFycywKKysgICAgICAgICAgICAgIGVudW0gQVZF c2NhcGVNb2RlIG1vZGUsIGludCBmbGFncyk7CisrCisrI2RlZmluZSBBVl9VVEY4X0ZMQUdfQUND RVBUX0lOVkFMSURfQklHX0NPREVTICAgICAgICAgIDEgLy8vPCBhY2NlcHQgY29kZXBvaW50cyBv dmVyIDB4MTBGRkZGCisrI2RlZmluZSBBVl9VVEY4X0ZMQUdfQUNDRVBUX05PTl9DSEFSQUNURVJT ICAgICAgICAgICAgIDIgLy8vPCBhY2NlcHQgbm9uLWNoYXJhY3RlcnMgLSAweEZGRkUgYW5kIDB4 RkZGRgorKyNkZWZpbmUgQVZfVVRGOF9GTEFHX0FDQ0VQVF9TVVJST0dBVEVTICAgICAgICAgICAg ICAgICA0IC8vLzwgYWNjZXB0IFVURi0xNiBzdXJyb2dhdGVzIGNvZGVzCisrI2RlZmluZSBBVl9V VEY4X0ZMQUdfRVhDTFVERV9YTUxfSU5WQUxJRF9DT05UUk9MX0NPREVTIDggLy8vPCBleGNsdWRl IGNvbnRyb2wgY29kZXMgbm90IGFjY2VwdGVkIGJ5IFhNTAorKworKyNkZWZpbmUgQVZfVVRGOF9G TEFHX0FDQ0VQVF9BTEwgXAorKyAgICBBVl9VVEY4X0ZMQUdfQUNDRVBUX0lOVkFMSURfQklHX0NP REVTfEFWX1VURjhfRkxBR19BQ0NFUFRfTk9OX0NIQVJBQ1RFUlN8QVZfVVRGOF9GTEFHX0FDQ0VQ VF9TVVJST0dBVEVTCisrCisrLyoqCisrICogUmVhZCBhbmQgZGVjb2RlIGEgc2luZ2xlIFVURi04 IGNvZGUgcG9pbnQgKGNoYXJhY3RlcikgZnJvbSB0aGUKKysgKiBidWZmZXIgaW4gKmJ1ZiwgYW5k IHVwZGF0ZSAqYnVmIHRvIHBvaW50IHRvIHRoZSBuZXh0IGJ5dGUgdG8KKysgKiBkZWNvZGUuCisr ICoKKysgKiBJbiBjYXNlIG9mIGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZSwgdGhlIHBvaW50ZXIg d2lsbCBiZSB1cGRhdGVkIHRvCisrICogdGhlIG5leHQgYnl0ZSBhZnRlciB0aGUgaW52YWxpZCBz ZXF1ZW5jZSBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwKKysgKiByZXR1cm4gYW4gZXJyb3IgY29kZS4K KysgKgorKyAqIERlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWVkIGZsYWdzLCB0aGUgZnVuY3Rpb24g d2lsbCBhbHNvIGZhaWwgaW4KKysgKiBjYXNlIHRoZSBkZWNvZGVkIGNvZGUgcG9pbnQgZG9lcyBu b3QgYmVsb25nIHRvIGEgdmFsaWQgcmFuZ2UuCisrICoKKysgKiBAbm90ZSBGb3Igc3BlZWQtcmVs ZXZhbnQgY29kZSBhIGNhcmVmdWxseSBpbXBsZW1lbnRlZCB1c2Ugb2YKKysgKiBHRVRfVVRGOCgp IG1heSBiZSBwcmVmZXJyZWQuCisrICoKKysgKiBAcGFyYW0gY29kZXAgICBwb2ludGVyIHVzZWQg dG8gcmV0dXJuIHRoZSBwYXJzZWQgY29kZSBpbiBjYXNlIG9mIHN1Y2Nlc3MuCisrICogICAgICAg ICAgICAgICAgVGhlIHZhbHVlIGluICpjb2RlcCBpcyBzZXQgZXZlbiBpbiBjYXNlIHRoZSByYW5n ZSBjaGVjayBmYWlscy4KKysgKiBAcGFyYW0gYnVmcCAgICBwb2ludGVyIHRvIHRoZSBhZGRyZXNz IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzZXF1ZW5jZQorKyAqICAgICAgICAgICAgICAgIHRvIGRl Y29kZSwgdXBkYXRlZCBieSB0aGUgZnVuY3Rpb24gdG8gcG9pbnQgdG8gdGhlCisrICogICAgICAg ICAgICAgICAgYnl0ZSBuZXh0IGFmdGVyIHRoZSBkZWNvZGVkIHNlcXVlbmNlCisrICogQHBhcmFt IGJ1Zl9lbmQgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHBvaW50cyB0byB0aGUg bmV4dAorKyAqICAgICAgICAgICAgICAgIGJ5dGUgcGFzdCB0aGUgbGFzdCBpbiB0aGUgYnVmZmVy LiBUaGlzIGlzIHVzZWQgdG8KKysgKiAgICAgICAgICAgICAgICBhdm9pZCBidWZmZXIgb3ZlcnJl YWRzIChpbiBjYXNlIG9mIGFuIHVuZmluaXNoZWQKKysgKiAgICAgICAgICAgICAgICBVVEYtOCBz ZXF1ZW5jZSB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcikuCisrICogQHBhcmFtIGZsYWdz ICAgYSBjb2xsZWN0aW9uIG9mIEFWX1VURjhfRkxBR18qIGZsYWdzCisrICogQHJldHVybiA+PSAw IGluIGNhc2UgYSBzZXF1ZW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQsIGEgbmVnYXRpdmUKKysg KiB2YWx1ZSBpbiBjYXNlIG9mIGludmFsaWQgc2VxdWVuY2UKKysgKi8KKythdl93YXJuX3VudXNl ZF9yZXN1bHQKKytpbnQgYXZfdXRmOF9kZWNvZGUoaW50MzJfdCAqY29kZXAsIGNvbnN0IHVpbnQ4 X3QgKipidWZwLCBjb25zdCB1aW50OF90ICpidWZfZW5kLAorKyAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIENoZWNrIGlmIGEgbmFtZSBpcyBpbiBh IGxpc3QuCisrICogQHJldHVybnMgMCBpZiBub3QgZm91bmQsIG9yIHRoZSAxIGJhc2VkIGluZGV4 IHdoZXJlIGl0IGhhcyBiZWVuIGZvdW5kIGluIHRoZQorKyAqICAgICAgICAgICAgbGlzdC4KKysg Ki8KKytpbnQgYXZfbWF0Y2hfbGlzdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpsaXN0 LCBjaGFyIHNlcGFyYXRvcik7CisrCisrLyoqCisrICogU2VlIGxpYmMgc3NjYW5mIG1hbnVhbCBm b3IgbW9yZSBpbmZvcm1hdGlvbi4KKysgKiBMb2NhbGUtaW5kZXBlbmRlbnQgc3NjYW5mIGltcGxl bWVudGF0aW9uLgorKyAqLworK2ludCBhdl9zc2NhbmYoY29uc3QgY2hhciAqc3RyaW5nLCBjb25z dCBjaGFyICpmb3JtYXQsIC4uLikgYXZfc2NhbmZfZm9ybWF0KDIsIDMpOworKworKy8qKgorKyAq IEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9BVlNUUklOR19IICovCitkaWZmIC11cCBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJhdnV0aWwvYXZ1dGlsLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYXZ1dGlsLmgKKy0tLSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0 aWwvYXZ1dGlsLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjAwMzczNCArMDIwMAor KysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVn L3Y5L2xpYmF2dXRpbC9hdnV0aWwuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTk0MjI0OSArMDIw MAorQEAgLTAsMCArMSwzNDAgQEAKKysvKgorKyAqIGNvcHlyaWdodCAoYykgMjAwNiBNaWNoYWVs IE5pZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysg KgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQVZVVElM X0gKKysjZGVmaW5lIEFWVVRJTF9BVlVUSUxfSAorKworKy8qKgorKyAqIEBmaWxlCisrICogQGlu Z3JvdXAgbGF2dQorKyAqIENvbnZlbmllbmNlIGhlYWRlciB0aGF0IGluY2x1ZGVzIEByZWYgbGF2 dSAibGliYXZ1dGlsIidzIGNvcmUuCisrICovCisrCisrLyoqCisrICogQG1haW5wYWdlCisrICoK KysgKiBAc2VjdGlvbiBmZm1wZWdfaW50cm8gSW50cm9kdWN0aW9uCisrICoKKysgKiBUaGlzIGRv Y3VtZW50IGRlc2NyaWJlcyB0aGUgdXNhZ2Ugb2YgdGhlIGRpZmZlcmVudCBsaWJyYXJpZXMKKysg KiBwcm92aWRlZCBieSBGRm1wZWcuCisrICoKKysgKiBAbGkgQHJlZiBsaWJhdmMgImxpYmF2Y29k ZWMiIGVuY29kaW5nL2RlY29kaW5nIGxpYnJhcnkKKysgKiBAbGkgQHJlZiBsYXZmaSAibGliYXZm aWx0ZXIiIGdyYXBoLWJhc2VkIGZyYW1lIGVkaXRpbmcgbGlicmFyeQorKyAqIEBsaSBAcmVmIGxp YmF2ZiAibGliYXZmb3JtYXQiIEkvTyBhbmQgbXV4aW5nL2RlbXV4aW5nIGxpYnJhcnkKKysgKiBA bGkgQHJlZiBsYXZkICJsaWJhdmRldmljZSIgc3BlY2lhbCBkZXZpY2VzIG11eGluZy9kZW11eGlu ZyBsaWJyYXJ5CisrICogQGxpIEByZWYgbGF2dSAibGliYXZ1dGlsIiBjb21tb24gdXRpbGl0eSBs aWJyYXJ5CisrICogQGxpIEByZWYgbHN3ciAibGlic3dyZXNhbXBsZSIgYXVkaW8gcmVzYW1wbGlu ZywgZm9ybWF0IGNvbnZlcnNpb24gYW5kIG1peGluZworKyAqIEBsaSBAcmVmIGxpYnN3cyAibGli c3dzY2FsZSIgY29sb3IgY29udmVyc2lvbiBhbmQgc2NhbGluZyBsaWJyYXJ5CisrICoKKysgKiBA c2VjdGlvbiBmZm1wZWdfdmVyc2lvbmluZyBWZXJzaW9uaW5nIGFuZCBjb21wYXRpYmlsaXR5Cisr ICoKKysgKiBFYWNoIG9mIHRoZSBGRm1wZWcgbGlicmFyaWVzIGNvbnRhaW5zIGEgdmVyc2lvbi5o IGhlYWRlciwgd2hpY2ggZGVmaW5lcyBhCisrICogbWFqb3IsIG1pbm9yIGFuZCBtaWNybyB2ZXJz aW9uIG51bWJlciB3aXRoIHRoZQorKyAqIDxlbT5MSUJSQVJZTkFNRV9WRVJTSU9OX3tNQUpPUixN SU5PUixNSUNST308L2VtPiBtYWNyb3MuIFRoZSBtYWpvciB2ZXJzaW9uCisrICogbnVtYmVyIGlz IGluY3JlbWVudGVkIHdpdGggYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZXMgLSBlLmcuIHJl bW92aW5nCisrICogcGFydHMgb2YgdGhlIHB1YmxpYyBBUEksIHJlb3JkZXJpbmcgcHVibGljIHN0 cnVjdCBtZW1iZXJzLCBldGMuIFRoZSBtaW5vcgorKyAqIHZlcnNpb24gbnVtYmVyIGlzIGluY3Jl bWVudGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlIEFQSSBjaGFuZ2VzIG9yIG1ham9yCisrICog bmV3IGZlYXR1cmVzIC0gZS5nLiBhZGRpbmcgYSBuZXcgcHVibGljIGZ1bmN0aW9uIG9yIGEgbmV3 IGRlY29kZXIuIFRoZSBtaWNybworKyAqIHZlcnNpb24gbnVtYmVyIGlzIGluY3JlbWVudGVkIGZv ciBzbWFsbGVyIGNoYW5nZXMgdGhhdCBhIGNhbGxpbmcgcHJvZ3JhbQorKyAqIG1pZ2h0IHN0aWxs IHdhbnQgdG8gY2hlY2sgZm9yIC0gZS5nLiBjaGFuZ2luZyBiZWhhdmlvciBpbiBhIHByZXZpb3Vz bHkKKysgKiB1bnNwZWNpZmllZCBzaXR1YXRpb24uCisrICoKKysgKiBGRm1wZWcgZ3VhcmFudGVl cyBiYWNrd2FyZCBBUEkgYW5kIEFCSSBjb21wYXRpYmlsaXR5IGZvciBlYWNoIGxpYnJhcnkgYXMg bG9uZworKyAqIGFzIGl0cyBtYWpvciB2ZXJzaW9uIG51bWJlciBpcyB1bmNoYW5nZWQuIFRoaXMg bWVhbnMgdGhhdCBubyBwdWJsaWMgc3ltYm9scworKyAqIHdpbGwgYmUgcmVtb3ZlZCBvciByZW5h bWVkLiBUeXBlcyBhbmQgbmFtZXMgb2YgdGhlIHB1YmxpYyBzdHJ1Y3QgbWVtYmVycyBhbmQKKysg KiB2YWx1ZXMgb2YgcHVibGljIG1hY3JvcyBhbmQgZW51bXMgd2lsbCByZW1haW4gdGhlIHNhbWUg KHVubGVzcyB0aGV5IHdlcmUKKysgKiBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIG5vdCBwYXJ0IG9m IHRoZSBwdWJsaWMgQVBJKS4gRG9jdW1lbnRlZCBiZWhhdmlvciB3aWxsCisrICogbm90IGNoYW5n ZS4KKysgKgorKyAqIEluIG90aGVyIHdvcmRzLCBhbnkgY29ycmVjdCBwcm9ncmFtIHRoYXQgd29y a3Mgd2l0aCBhIGdpdmVuIEZGbXBlZyBzbmFwc2hvdAorKyAqIHNob3VsZCB3b3JrIGp1c3QgYXMg d2VsbCB3aXRob3V0IGFueSBjaGFuZ2VzIHdpdGggYW55IGxhdGVyIHNuYXBzaG90IHdpdGggdGhl CisrICogc2FtZSBtYWpvciB2ZXJzaW9ucy4gVGhpcyBhcHBsaWVzIHRvIGJvdGggcmVidWlsZGlu ZyB0aGUgcHJvZ3JhbSBhZ2FpbnN0IG5ldworKyAqIEZGbXBlZyB2ZXJzaW9ucyBvciB0byByZXBs YWNpbmcgdGhlIGR5bmFtaWMgRkZtcGVnIGxpYnJhcmllcyB0aGF0IGEgcHJvZ3JhbQorKyAqIGxp bmtzIGFnYWluc3QuCisrICoKKysgKiBIb3dldmVyLCBuZXcgcHVibGljIHN5bWJvbHMgbWF5IGJl IGFkZGVkIGFuZCBuZXcgbWVtYmVycyBtYXkgYmUgYXBwZW5kZWQgdG8KKysgKiBwdWJsaWMgc3Ry dWN0cyB3aG9zZSBzaXplIGlzIG5vdCBwYXJ0IG9mIHB1YmxpYyBBQkkgKG1vc3QgcHVibGljIHN0 cnVjdHMgaW4KKysgKiBGRm1wZWcpLiBOZXcgbWFjcm9zIGFuZCBlbnVtIHZhbHVlcyBtYXkgYmUg YWRkZWQuIEJlaGF2aW9yIGluIHVuZG9jdW1lbnRlZAorKyAqIHNpdHVhdGlvbnMgbWF5IGNoYW5n ZSBzbGlnaHRseSAoYW5kIGJlIGRvY3VtZW50ZWQpLiBBbGwgdGhvc2UgYXJlIGFjY29tcGFuaWVk CisrICogYnkgYW4gZW50cnkgaW4gZG9jL0FQSWNoYW5nZXMgYW5kIGluY3JlbWVudGluZyBlaXRo ZXIgdGhlIG1pbm9yIG9yIG1pY3JvCisrICogdmVyc2lvbiBudW1iZXIuCisrICovCisrCisrLyoq CisrICogQGRlZmdyb3VwIGxhdnUgbGliYXZ1dGlsCisrICogQ29tbW9uIGNvZGUgc2hhcmVkIGFj cm9zcyBhbGwgRkZtcGVnIGxpYnJhcmllcy4KKysgKgorKyAqIEBub3RlCisrICogbGliYXZ1dGls IGlzIGRlc2lnbmVkIHRvIGJlIG1vZHVsYXIuIEluIG1vc3QgY2FzZXMsIGluIG9yZGVyIHRvIHVz ZSB0aGUKKysgKiBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgb25lIGNvbXBvbmVudCBvZiBsaWJhdnV0 aWwgeW91IG11c3QgZXhwbGljaXRseSBpbmNsdWRlCisrICogdGhlIHNwZWNpZmljIGhlYWRlciBj b250YWluaW5nIHRoYXQgZmVhdHVyZS4gSWYgeW91IGFyZSBvbmx5IHVzaW5nCisrICogbWVkaWEt cmVsYXRlZCBjb21wb25lbnRzLCB5b3UgY291bGQgc2ltcGx5IGluY2x1ZGUgbGliYXZ1dGlsL2F2 dXRpbC5oLCB3aGljaAorKyAqIGJyaW5ncyBpbiBtb3N0IG9mIHRoZSAiY29yZSIgY29tcG9uZW50 cy4KKysgKgorKyAqIEB7CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9jcnlwdG8gQ3J5cHRvIGFu ZCBIYXNoaW5nCisrICoKKysgKiBAeworKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9t YXRoIE1hdGhlbWF0aWNzCisrICogQHsKKysgKgorKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAg bGF2dV9zdHJpbmcgU3RyaW5nIE1hbmlwdWxhdGlvbgorKyAqCisrICogQHsKKysgKgorKyAqIEB9 CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9tZW0gTWVtb3J5IE1hbmFnZW1lbnQKKysgKgorKyAq IEB7CisrICoKKysgKiBAfQorKyAqCisrICogQGRlZmdyb3VwIGxhdnVfZGF0YSBEYXRhIFN0cnVj dHVyZXMKKysgKiBAeworKyAqCisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X3ZpZGVv IFZpZGVvIHJlbGF0ZWQKKysgKgorKyAqIEB7CisrICoKKysgKiBAfQorKyAqCisrICogQGRlZmdy b3VwIGxhdnVfYXVkaW8gQXVkaW8gcmVsYXRlZAorKyAqCisrICogQHsKKysgKgorKyAqIEB9Cisr ICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9lcnJvciBFcnJvciBDb2RlcworKyAqCisrICogQHsKKysg KgorKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9sb2cgTG9nZ2luZyBGYWNpbGl0eQor KyAqCisrICogQHsKKysgKgorKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9taXNjIE90 aGVyCisrICoKKysgKiBAeworKyAqCisrICogQGRlZmdyb3VwIHByZXByb2NfbWlzYyBQcmVwcm9j ZXNzb3IgU3RyaW5nIE1hY3JvcworKyAqCisrICogQHsKKysgKgorKyAqIEB9CisrICoKKysgKiBA ZGVmZ3JvdXAgdmVyc2lvbl91dGlscyBMaWJyYXJ5IFZlcnNpb24gTWFjcm9zCisrICoKKysgKiBA eworKyAqCisrICogQH0KKysgKi8KKysKKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZ1X3Zl cgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogUmV0dXJuIHRoZSBMSUJBVlVUSUxfVkVSU0lP Tl9JTlQgY29uc3RhbnQuCisrICovCisrdW5zaWduZWQgYXZ1dGlsX3ZlcnNpb24odm9pZCk7Cisr CisrLyoqCisrICogUmV0dXJuIGFuIGluZm9ybWF0aXZlIHZlcnNpb24gc3RyaW5nLiBUaGlzIHVz dWFsbHkgaXMgdGhlIGFjdHVhbCByZWxlYXNlCisrICogdmVyc2lvbiBudW1iZXIgb3IgYSBnaXQg Y29tbWl0IGRlc2NyaXB0aW9uLiBUaGlzIHN0cmluZyBoYXMgbm8gZml4ZWQgZm9ybWF0CisrICog YW5kIGNhbiBjaGFuZ2UgYW55IHRpbWUuIEl0IHNob3VsZCBuZXZlciBiZSBwYXJzZWQgYnkgY29k ZS4KKysgKi8KKytjb25zdCBjaGFyICphdl92ZXJzaW9uX2luZm8odm9pZCk7CisrCisrLyoqCisr ICogUmV0dXJuIHRoZSBsaWJhdnV0aWwgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLgorKyAqLwor K2NvbnN0IGNoYXIgKmF2dXRpbF9jb25maWd1cmF0aW9uKHZvaWQpOworKworKy8qKgorKyAqIFJl dHVybiB0aGUgbGliYXZ1dGlsIGxpY2Vuc2UuCisrICovCisrY29uc3QgY2hhciAqYXZ1dGlsX2xp Y2Vuc2Uodm9pZCk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBAYWRkdG9n cm91cCBsYXZ1X21lZGlhIE1lZGlhIFR5cGUKKysgKiBAYnJpZWYgTWVkaWEgVHlwZQorKyAqLwor KworK2VudW0gQVZNZWRpYVR5cGUgeworKyAgICBBVk1FRElBX1RZUEVfVU5LTk9XTiA9IC0xLCAg Ly8vPCBVc3VhbGx5IHRyZWF0ZWQgYXMgQVZNRURJQV9UWVBFX0RBVEEKKysgICAgQVZNRURJQV9U WVBFX1ZJREVPLAorKyAgICBBVk1FRElBX1RZUEVfQVVESU8sCisrICAgIEFWTUVESUFfVFlQRV9E QVRBLCAgICAgICAgICAvLy88IE9wYXF1ZSBkYXRhIGluZm9ybWF0aW9uIHVzdWFsbHkgY29udGlu dW91cworKyAgICBBVk1FRElBX1RZUEVfU1VCVElUTEUsCisrICAgIEFWTUVESUFfVFlQRV9BVFRB Q0hNRU5ULCAgICAvLy88IE9wYXF1ZSBkYXRhIGluZm9ybWF0aW9uIHVzdWFsbHkgc3BhcnNlCisr ICAgIEFWTUVESUFfVFlQRV9OQgorK307CisrCisrLyoqCisrICogUmV0dXJuIGEgc3RyaW5nIGRl c2NyaWJpbmcgdGhlIG1lZGlhX3R5cGUgZW51bSwgTlVMTCBpZiBtZWRpYV90eXBlCisrICogaXMg dW5rbm93bi4KKysgKi8KKytjb25zdCBjaGFyICphdl9nZXRfbWVkaWFfdHlwZV9zdHJpbmcoZW51 bSBBVk1lZGlhVHlwZSBtZWRpYV90eXBlKTsKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2dV9j b25zdCBDb25zdGFudHMKKysgKiBAeworKyAqCisrICogQGRlZmdyb3VwIGxhdnVfZW5jIEVuY29k aW5nIHNwZWNpZmljCisrICoKKysgKiBAbm90ZSB0aG9zZSBkZWZpbml0aW9uIHNob3VsZCBtb3Zl IHRvIGF2Y29kZWMKKysgKiBAeworKyAqLworKworKyNkZWZpbmUgRkZfTEFNQkRBX1NISUZUIDcK KysjZGVmaW5lIEZGX0xBTUJEQV9TQ0FMRSAoMTw8RkZfTEFNQkRBX1NISUZUKQorKyNkZWZpbmUg RkZfUVAyTEFNQkRBIDExOCAvLy88IGZhY3RvciB0byBjb252ZXJ0IGZyb20gSC4yNjMgUVAgdG8g bGFtYmRhCisrI2RlZmluZSBGRl9MQU1CREFfTUFYICgyNTYqMTI4LTEpCisrCisrI2RlZmluZSBG Rl9RVUFMSVRZX1NDQUxFIEZGX0xBTUJEQV9TQ0FMRSAvL0ZJWE1FIG1heWJlIHJlbW92ZQorKwor Ky8qKgorKyAqIEB9CisrICogQGRlZmdyb3VwIGxhdnVfdGltZSBUaW1lc3RhbXAgc3BlY2lmaWMK KysgKgorKyAqIEZGbXBlZyBpbnRlcm5hbCB0aW1lYmFzZSBhbmQgdGltZXN0YW1wIGRlZmluaXRp b25zCisrICoKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIEBicmllZiBVbmRlZmluZWQgdGlt ZXN0YW1wIHZhbHVlCisrICoKKysgKiBVc3VhbGx5IHJlcG9ydGVkIGJ5IGRlbXV4ZXIgdGhhdCB3 b3JrIG9uIGNvbnRhaW5lcnMgdGhhdCBkbyBub3QgcHJvdmlkZQorKyAqIGVpdGhlciBwdHMgb3Ig ZHRzLgorKyAqLworKworKyNkZWZpbmUgQVZfTk9QVFNfVkFMVUUgICAgICAgICAgKChpbnQ2NF90 KVVJTlQ2NF9DKDB4ODAwMDAwMDAwMDAwMDAwMCkpCisrCisrLyoqCisrICogSW50ZXJuYWwgdGlt ZSBiYXNlIHJlcHJlc2VudGVkIGFzIGludGVnZXIKKysgKi8KKysKKysjZGVmaW5lIEFWX1RJTUVf QkFTRSAgICAgICAgICAgIDEwMDAwMDAKKysKKysvKioKKysgKiBJbnRlcm5hbCB0aW1lIGJhc2Ug cmVwcmVzZW50ZWQgYXMgZnJhY3Rpb25hbCB2YWx1ZQorKyAqLworKworKyNpZmRlZiBfX2NwbHVz cGx1cworKy8qIElTTyBDKysgZm9yYmlkcyBjb21wb3VuZC1saXRlcmFscy4gKi8KKysjZGVmaW5l IEFWX1RJTUVfQkFTRV9RICAgICAgICAgIGF2X21ha2VfcSgxLCBBVl9USU1FX0JBU0UpCisrI2Vs c2UKKysjZGVmaW5lIEFWX1RJTUVfQkFTRV9RICAgICAgICAgIChBVlJhdGlvbmFsKXsxLCBBVl9U SU1FX0JBU0V9CisrI2VuZGlmCisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqIEBkZWZncm91 cCBsYXZ1X3BpY3R1cmUgSW1hZ2UgcmVsYXRlZAorKyAqCisrICogQVZQaWN0dXJlIHR5cGVzLCBw aXhlbCBmb3JtYXRzIGFuZCBiYXNpYyBpbWFnZSBwbGFuZXMgbWFuaXB1bGF0aW9uLgorKyAqCisr ICogQHsKKysgKi8KKysKKytlbnVtIEFWUGljdHVyZVR5cGUgeworKyAgICBBVl9QSUNUVVJFX1RZ UEVfTk9ORSA9IDAsIC8vLzwgVW5kZWZpbmVkCisrICAgIEFWX1BJQ1RVUkVfVFlQRV9JLCAgICAg Ly8vPCBJbnRyYQorKyAgICBBVl9QSUNUVVJFX1RZUEVfUCwgICAgIC8vLzwgUHJlZGljdGVkCisr ICAgIEFWX1BJQ1RVUkVfVFlQRV9CLCAgICAgLy8vPCBCaS1kaXIgcHJlZGljdGVkCisrICAgIEFW X1BJQ1RVUkVfVFlQRV9TLCAgICAgLy8vPCBTKEdNQyktVk9QIE1QRUctNAorKyAgICBBVl9QSUNU VVJFX1RZUEVfU0ksICAgIC8vLzwgU3dpdGNoaW5nIEludHJhCisrICAgIEFWX1BJQ1RVUkVfVFlQ RV9TUCwgICAgLy8vPCBTd2l0Y2hpbmcgUHJlZGljdGVkCisrICAgIEFWX1BJQ1RVUkVfVFlQRV9C SSwgICAgLy8vPCBCSSB0eXBlCisrfTsKKysKKysvKioKKysgKiBSZXR1cm4gYSBzaW5nbGUgbGV0 dGVyIHRvIGRlc2NyaWJlIHRoZSBnaXZlbiBwaWN0dXJlIHR5cGUKKysgKiBwaWN0X3R5cGUuCisr ICoKKysgKiBAcGFyYW1baW5dIHBpY3RfdHlwZSB0aGUgcGljdHVyZSB0eXBlIEByZXR1cm4gYSBz aW5nbGUgY2hhcmFjdGVyCisrICogcmVwcmVzZW50aW5nIHRoZSBwaWN0dXJlIHR5cGUsICc/JyBp ZiBwaWN0X3R5cGUgaXMgdW5rbm93bgorKyAqLworK2NoYXIgYXZfZ2V0X3BpY3R1cmVfdHlwZV9j aGFyKGVudW0gQVZQaWN0dXJlVHlwZSBwaWN0X3R5cGUpOworKworKy8qKgorKyAqIEB9CisrICov CisrCisrI2luY2x1ZGUgImNvbW1vbi5oIgorKyNpbmNsdWRlICJyYXRpb25hbC5oIgorKyNpbmNs dWRlICJ2ZXJzaW9uLmgiCisrI2luY2x1ZGUgIm1hY3Jvcy5oIgorKyNpbmNsdWRlICJtYXRoZW1h dGljcy5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAicGl4Zm10LmgiCisrCisrLyoq CisrICogUmV0dXJuIHggZGVmYXVsdCBwb2ludGVyIGluIGNhc2UgcCBpcyBOVUxMLgorKyAqLwor K3N0YXRpYyBpbmxpbmUgdm9pZCAqYXZfeF9pZl9udWxsKGNvbnN0IHZvaWQgKnAsIGNvbnN0IHZv aWQgKngpCisreworKyAgICByZXR1cm4gKHZvaWQgKikoaW50cHRyX3QpKHAgPyBwIDogeCk7Cisr fQorKworKy8qKgorKyAqIFJldHVybiB0aGUgZnJhY3Rpb25hbCByZXByZXNlbnRhdGlvbiBvZiB0 aGUgaW50ZXJuYWwgdGltZSBiYXNlLgorKyAqLworK0FWUmF0aW9uYWwgYXZfZ2V0X3RpbWVfYmFz ZV9xKHZvaWQpOworKworKyNkZWZpbmUgQVZfRk9VUkNDX01BWF9TVFJJTkdfU0laRSAzMgorKwor KyNkZWZpbmUgYXZfZm91cmNjMnN0cihmb3VyY2MpIGF2X2ZvdXJjY19tYWtlX3N0cmluZygoY2hh cltBVl9GT1VSQ0NfTUFYX1NUUklOR19TSVpFXSl7MH0sIGZvdXJjYykKKysKKysvKioKKysgKiBG aWxsIHRoZSBwcm92aWRlZCBidWZmZXIgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGEgRm91ckND IChmb3VyLWNoYXJhY3RlcgorKyAqIGNvZGUpIHJlcHJlc2VudGF0aW9uLgorKyAqCisrICogQHBh cmFtIGJ1ZiAgICBhIGJ1ZmZlciB3aXRoIHNpemUgaW4gYnl0ZXMgb2YgYXQgbGVhc3QgQVZfRk9V UkNDX01BWF9TVFJJTkdfU0laRQorKyAqIEBwYXJhbSBmb3VyY2MgdGhlIGZvdXJjYyB0byByZXBy ZXNlbnQKKysgKiBAcmV0dXJuIHRoZSBidWZmZXIgaW4gaW5wdXQKKysgKi8KKytjaGFyICphdl9m b3VyY2NfbWFrZV9zdHJpbmcoY2hhciAqYnVmLCB1aW50MzJfdCBmb3VyY2MpOworKworKy8qKgor KyAqIEB9CisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElMX0FWVVRJTF9IICovCitk aWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdnV0aWwvYnVmZmVyLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYnVmZmVyLmgKKy0t LSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92 OS9saWJhdnV0aWwvYnVmZmVyLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjEzNDg0 NCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9idWZmZXIuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjA2 NTk3OSArMDIwMAorQEAgLTAsMCArMSwzMjIgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoK KysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisr ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICogQGlu Z3JvdXAgbGF2dV9idWZmZXIKKysgKiByZWZjb3VudGVkIGRhdGEgYnVmZmVyIEFQSQorKyAqLwor KworKyNpZm5kZWYgQVZVVElMX0JVRkZFUl9ICisrI2RlZmluZSBBVlVUSUxfQlVGRkVSX0gKKysK KysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKy8qKgorKyAq IEBkZWZncm91cCBsYXZ1X2J1ZmZlciBBVkJ1ZmZlcgorKyAqIEBpbmdyb3VwIGxhdnVfZGF0YQor KyAqCisrICogQHsKKysgKiBBVkJ1ZmZlciBpcyBhbiBBUEkgZm9yIHJlZmVyZW5jZS1jb3VudGVk IGRhdGEgYnVmZmVycy4KKysgKgorKyAqIFRoZXJlIGFyZSB0d28gY29yZSBvYmplY3RzIGluIHRo aXMgQVBJIC0tIEFWQnVmZmVyIGFuZCBBVkJ1ZmZlclJlZi4gQVZCdWZmZXIKKysgKiByZXByZXNl bnRzIHRoZSBkYXRhIGJ1ZmZlciBpdHNlbGY7IGl0IGlzIG9wYXF1ZSBhbmQgbm90IG1lYW50IHRv IGJlIGFjY2Vzc2VkCisrICogYnkgdGhlIGNhbGxlciBkaXJlY3RseSwgYnV0IG9ubHkgdGhyb3Vn aCBBVkJ1ZmZlclJlZi4gSG93ZXZlciwgdGhlIGNhbGxlciBtYXkKKysgKiBlLmcuIGNvbXBhcmUg dHdvIEFWQnVmZmVyIHBvaW50ZXJzIHRvIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCByZWZl cmVuY2VzCisrICogYXJlIGRlc2NyaWJpbmcgdGhlIHNhbWUgZGF0YSBidWZmZXIuIEFWQnVmZmVy UmVmIHJlcHJlc2VudHMgYSBzaW5nbGUKKysgKiByZWZlcmVuY2UgdG8gYW4gQVZCdWZmZXIgYW5k IGl0IGlzIHRoZSBvYmplY3QgdGhhdCBtYXkgYmUgbWFuaXB1bGF0ZWQgYnkgdGhlCisrICogY2Fs bGVyIGRpcmVjdGx5LgorKyAqCisrICogVGhlcmUgYXJlIHR3byBmdW5jdGlvbnMgcHJvdmlkZWQg Zm9yIGNyZWF0aW5nIGEgbmV3IEFWQnVmZmVyIHdpdGggYSBzaW5nbGUKKysgKiByZWZlcmVuY2Ug LS0gYXZfYnVmZmVyX2FsbG9jKCkgdG8ganVzdCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGFuZAor KyAqIGF2X2J1ZmZlcl9jcmVhdGUoKSB0byB3cmFwIGFuIGV4aXN0aW5nIGFycmF5IGluIGFuIEFW QnVmZmVyLiBGcm9tIGFuIGV4aXN0aW5nCisrICogcmVmZXJlbmNlLCBhZGRpdGlvbmFsIHJlZmVy ZW5jZXMgbWF5IGJlIGNyZWF0ZWQgd2l0aCBhdl9idWZmZXJfcmVmKCkuCisrICogVXNlIGF2X2J1 ZmZlcl91bnJlZigpIHRvIGZyZWUgYSByZWZlcmVuY2UgKHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5 IGZyZWUgdGhlCisrICogZGF0YSBvbmNlIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgZnJlZWQpLgor KyAqCisrICogVGhlIGNvbnZlbnRpb24gdGhyb3VnaG91dCB0aGlzIEFQSSBhbmQgdGhlIHJlc3Qg b2YgRkZtcGVnIGlzIHN1Y2ggdGhhdCB0aGUKKysgKiBidWZmZXIgaXMgY29uc2lkZXJlZCB3cml0 YWJsZSBpZiB0aGVyZSBleGlzdHMgb25seSBvbmUgcmVmZXJlbmNlIHRvIGl0IChhbmQKKysgKiBp dCBoYXMgbm90IGJlZW4gbWFya2VkIGFzIHJlYWQtb25seSkuIFRoZSBhdl9idWZmZXJfaXNfd3Jp dGFibGUoKSBmdW5jdGlvbiBpcworKyAqIHByb3ZpZGVkIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBp cyB0cnVlIGFuZCBhdl9idWZmZXJfbWFrZV93cml0YWJsZSgpIHdpbGwKKysgKiBhdXRvbWF0aWNh bGx5IGNyZWF0ZSBhIG5ldyB3cml0YWJsZSBidWZmZXIgd2hlbiBuZWNlc3NhcnkuCisrICogT2Yg Y291cnNlIG5vdGhpbmcgcHJldmVudHMgdGhlIGNhbGxpbmcgY29kZSBmcm9tIHZpb2xhdGluZyB0 aGlzIGNvbnZlbnRpb24sCisrICogaG93ZXZlciB0aGF0IGlzIHNhZmUgb25seSB3aGVuIGFsbCB0 aGUgZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgdW5kZXIgaXRzCisrICogY29udHJvbC4KKysgKgor KyAqIEBub3RlIFJlZmVyZW5jaW5nIGFuZCB1bnJlZmVyZW5jaW5nIHRoZSBidWZmZXJzIGlzIHRo cmVhZC1zYWZlIGFuZCB0aHVzCisrICogbWF5IGJlIGRvbmUgZnJvbSBtdWx0aXBsZSB0aHJlYWRz IHNpbXVsdGFuZW91c2x5IHdpdGhvdXQgYW55IG5lZWQgZm9yCisrICogYWRkaXRpb25hbCBsb2Nr aW5nLgorKyAqCisrICogQG5vdGUgVHdvIGRpZmZlcmVudCByZWZlcmVuY2VzIHRvIHRoZSBzYW1l IGJ1ZmZlciBjYW4gcG9pbnQgdG8gZGlmZmVyZW50CisrICogcGFydHMgb2YgdGhlIGJ1ZmZlciAo aS5lLiB0aGVpciBBVkJ1ZmZlclJlZi5kYXRhIHdpbGwgbm90IGJlIGVxdWFsKS4KKysgKi8KKysK KysvKioKKysgKiBBIHJlZmVyZW5jZSBjb3VudGVkIGJ1ZmZlciB0eXBlLiBJdCBpcyBvcGFxdWUg YW5kIGlzIG1lYW50IHRvIGJlIHVzZWQgdGhyb3VnaAorKyAqIHJlZmVyZW5jZXMgKEFWQnVmZmVy UmVmKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkJ1ZmZlciBBVkJ1ZmZlcjsKKysKKysvKioK KysgKiBBIHJlZmVyZW5jZSB0byBhIGRhdGEgYnVmZmVyLgorKyAqCisrICogVGhlIHNpemUgb2Yg dGhpcyBzdHJ1Y3QgaXMgbm90IGEgcGFydCBvZiB0aGUgcHVibGljIEFCSSBhbmQgaXQgaXMgbm90 IG1lYW50CisrICogdG8gYmUgYWxsb2NhdGVkIGRpcmVjdGx5LgorKyAqLworK3R5cGVkZWYgc3Ry dWN0IEFWQnVmZmVyUmVmIHsKKysgICAgQVZCdWZmZXIgKmJ1ZmZlcjsKKysKKysgICAgLyoqCisr ICAgICAqIFRoZSBkYXRhIGJ1ZmZlci4gSXQgaXMgY29uc2lkZXJlZCB3cml0YWJsZSBpZiBhbmQg b25seSBpZgorKyAgICAgKiB0aGlzIGlzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgYnVmZmVy LCBpbiB3aGljaCBjYXNlCisrICAgICAqIGF2X2J1ZmZlcl9pc193cml0YWJsZSgpIHJldHVybnMg MS4KKysgICAgICovCisrICAgIHVpbnQ4X3QgKmRhdGE7CisrICAgIC8qKgorKyAgICAgKiBTaXpl IG9mIGRhdGEgaW4gYnl0ZXMuCisrICAgICAqLworKyAgICBzaXplX3QgICBzaXplOworK30gQVZC dWZmZXJSZWY7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZCdWZmZXIgb2YgdGhlIGdpdmVu IHNpemUgdXNpbmcgYXZfbWFsbG9jKCkuCisrICoKKysgKiBAcmV0dXJuIGFuIEFWQnVmZmVyUmVm IG9mIGdpdmVuIHNpemUgb3IgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkKKysgKi8KKytBVkJ1ZmZl clJlZiAqYXZfYnVmZmVyX2FsbG9jKHNpemVfdCBzaXplKTsKKysKKysvKioKKysgKiBTYW1lIGFz IGF2X2J1ZmZlcl9hbGxvYygpLCBleGNlcHQgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsIGJlIGlu aXRpYWxpemVkCisrICogdG8gemVyby4KKysgKi8KKytBVkJ1ZmZlclJlZiAqYXZfYnVmZmVyX2Fs bG9jeihzaXplX3Qgc2l6ZSk7CisrCisrLyoqCisrICogQWx3YXlzIHRyZWF0IHRoZSBidWZmZXIg YXMgcmVhZC1vbmx5LCBldmVuIHdoZW4gaXQgaGFzIG9ubHkgb25lCisrICogcmVmZXJlbmNlLgor KyAqLworKyNkZWZpbmUgQVZfQlVGRkVSX0ZMQUdfUkVBRE9OTFkgKDEgPDwgMCkKKysKKysvKioK KysgKiBDcmVhdGUgYW4gQVZCdWZmZXIgZnJvbSBhbiBleGlzdGluZyBhcnJheS4KKysgKgorKyAq IElmIHRoaXMgZnVuY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgZGF0YSBpcyBvd25lZCBieSB0aGUgQVZC dWZmZXIuIFRoZSBjYWxsZXIgbWF5CisrICogb25seSBhY2Nlc3MgZGF0YSB0aHJvdWdoIHRoZSBy ZXR1cm5lZCBBVkJ1ZmZlclJlZiBhbmQgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20KKysgKiBpdC4K KysgKiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBkYXRhIGlzIGxlZnQgdW50b3VjaGVkLgorKyAq IEBwYXJhbSBkYXRhICAgZGF0YSBhcnJheQorKyAqIEBwYXJhbSBzaXplICAgc2l6ZSBvZiBkYXRh IGluIGJ5dGVzCisrICogQHBhcmFtIGZyZWUgICBhIGNhbGxiYWNrIGZvciBmcmVlaW5nIHRoaXMg YnVmZmVyJ3MgZGF0YQorKyAqIEBwYXJhbSBvcGFxdWUgcGFyYW1ldGVyIHRvIGJlIGdvdCBmb3Ig cHJvY2Vzc2luZyBvciBwYXNzZWQgdG8gZnJlZQorKyAqIEBwYXJhbSBmbGFncyAgYSBjb21iaW5h dGlvbiBvZiBBVl9CVUZGRVJfRkxBR18qCisrICoKKysgKiBAcmV0dXJuIGFuIEFWQnVmZmVyUmVm IHJlZmVycmluZyB0byBkYXRhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKysgKi8KKytB VkJ1ZmZlclJlZiAqYXZfYnVmZmVyX2NyZWF0ZSh1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnJlZSkodm9pZCAqb3BhcXVl LCB1aW50OF90ICpkYXRhKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpv cGFxdWUsIGludCBmbGFncyk7CisrCisrLyoqCisrICogRGVmYXVsdCBmcmVlIGNhbGxiYWNrLCB3 aGljaCBjYWxscyBhdl9mcmVlKCkgb24gdGhlIGJ1ZmZlciBkYXRhLgorKyAqIFRoaXMgZnVuY3Rp b24gaXMgbWVhbnQgdG8gYmUgcGFzc2VkIHRvIGF2X2J1ZmZlcl9jcmVhdGUoKSwgbm90IGNhbGxl ZAorKyAqIGRpcmVjdGx5LgorKyAqLworK3ZvaWQgYXZfYnVmZmVyX2RlZmF1bHRfZnJlZSh2b2lk ICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpOworKworKy8qKgorKyAqIENyZWF0ZSBhIG5ldyByZWZl cmVuY2UgdG8gYW4gQVZCdWZmZXIuCisrICoKKysgKiBAcmV0dXJuIGEgbmV3IEFWQnVmZmVyUmVm IHJlZmVycmluZyB0byB0aGUgc2FtZSBBVkJ1ZmZlciBhcyBidWYgb3IgTlVMTCBvbgorKyAqIGZh aWx1cmUuCisrICovCisrQVZCdWZmZXJSZWYgKmF2X2J1ZmZlcl9yZWYoY29uc3QgQVZCdWZmZXJS ZWYgKmJ1Zik7CisrCisrLyoqCisrICogRnJlZSBhIGdpdmVuIHJlZmVyZW5jZSBhbmQgYXV0b21h dGljYWxseSBmcmVlIHRoZSBidWZmZXIgaWYgdGhlcmUgYXJlIG5vIG1vcmUKKysgKiByZWZlcmVu Y2VzIHRvIGl0LgorKyAqCisrICogQHBhcmFtIGJ1ZiB0aGUgcmVmZXJlbmNlIHRvIGJlIGZyZWVk LiBUaGUgcG9pbnRlciBpcyBzZXQgdG8gTlVMTCBvbiByZXR1cm4uCisrICovCisrdm9pZCBhdl9i dWZmZXJfdW5yZWYoQVZCdWZmZXJSZWYgKipidWYpOworKworKy8qKgorKyAqIEByZXR1cm4gMSBp ZiB0aGUgY2FsbGVyIG1heSB3cml0ZSB0byB0aGUgZGF0YSByZWZlcnJlZCB0byBieSBidWYgKHdo aWNoIGlzCisrICogdHJ1ZSBpZiBhbmQgb25seSBpZiBidWYgaXMgdGhlIG9ubHkgcmVmZXJlbmNl IHRvIHRoZSB1bmRlcmx5aW5nIEFWQnVmZmVyKS4KKysgKiBSZXR1cm4gMCBvdGhlcndpc2UuCisr ICogQSBwb3NpdGl2ZSBhbnN3ZXIgaXMgdmFsaWQgdW50aWwgYXZfYnVmZmVyX3JlZigpIGlzIGNh bGxlZCBvbiBidWYuCisrICovCisraW50IGF2X2J1ZmZlcl9pc193cml0YWJsZShjb25zdCBBVkJ1 ZmZlclJlZiAqYnVmKTsKKysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBvcGFxdWUgcGFyYW1ldGVy IHNldCBieSBhdl9idWZmZXJfY3JlYXRlLgorKyAqLworK3ZvaWQgKmF2X2J1ZmZlcl9nZXRfb3Bh cXVlKGNvbnN0IEFWQnVmZmVyUmVmICpidWYpOworKworK2ludCBhdl9idWZmZXJfZ2V0X3JlZl9j b3VudChjb25zdCBBVkJ1ZmZlclJlZiAqYnVmKTsKKysKKysvKioKKysgKiBDcmVhdGUgYSB3cml0 YWJsZSByZWZlcmVuY2UgZnJvbSBhIGdpdmVuIGJ1ZmZlciByZWZlcmVuY2UsIGF2b2lkaW5nIGRh dGEgY29weQorKyAqIGlmIHBvc3NpYmxlLgorKyAqCisrICogQHBhcmFtIGJ1ZiBidWZmZXIgcmVm ZXJlbmNlIHRvIG1ha2Ugd3JpdGFibGUuIE9uIHN1Y2Nlc3MsIGJ1ZiBpcyBlaXRoZXIgbGVmdAor KyAqICAgICAgICAgICAgdW50b3VjaGVkLCBvciBpdCBpcyB1bnJlZmVyZW5jZWQgYW5kIGEgbmV3 IHdyaXRhYmxlIEFWQnVmZmVyUmVmIGlzCisrICogICAgICAgICAgICB3cml0dGVuIGluIGl0cyBw bGFjZS4gT24gZmFpbHVyZSwgYnVmIGlzIGxlZnQgdW50b3VjaGVkLgorKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Igb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZf YnVmZmVyX21ha2Vfd3JpdGFibGUoQVZCdWZmZXJSZWYgKipidWYpOworKworKy8qKgorKyAqIFJl YWxsb2NhdGUgYSBnaXZlbiBidWZmZXIuCisrICoKKysgKiBAcGFyYW0gYnVmICBhIGJ1ZmZlciBy ZWZlcmVuY2UgdG8gcmVhbGxvY2F0ZS4gT24gc3VjY2VzcywgYnVmIHdpbGwgYmUKKysgKiAgICAg ICAgICAgICB1bnJlZmVyZW5jZWQgYW5kIGEgbmV3IHJlZmVyZW5jZSB3aXRoIHRoZSByZXF1aXJl ZCBzaXplIHdpbGwgYmUKKysgKiAgICAgICAgICAgICB3cml0dGVuIGluIGl0cyBwbGFjZS4gT24g ZmFpbHVyZSBidWYgd2lsbCBiZSBsZWZ0IHVudG91Y2hlZC4gKmJ1ZgorKyAqICAgICAgICAgICAg IG1heSBiZSBOVUxMLCB0aGVuIGEgbmV3IGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisrICogQHBhcmFt IHNpemUgcmVxdWlyZWQgbmV3IGJ1ZmZlciBzaXplLgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNz LCBhIG5lZ2F0aXZlIEFWRVJST1Igb24gZmFpbHVyZS4KKysgKgorKyAqIEBub3RlIHRoZSBidWZm ZXIgaXMgYWN0dWFsbHkgcmVhbGxvY2F0ZWQgd2l0aCBhdl9yZWFsbG9jKCkgb25seSBpZiBpdCB3 YXMKKysgKiBpbml0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggYXZfYnVmZmVyX3JlYWxsb2MoTlVM TCkgYW5kIHRoZXJlIGlzIG9ubHkgb25lCisrICogcmVmZXJlbmNlIHRvIGl0IChpLmUuIHRoZSBv bmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBJbiBhbGwgb3RoZXIgY2FzZXMKKysgKiBhIG5l dyBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCB0aGUgZGF0YSBpcyBjb3BpZWQuCisrICovCisraW50 IGF2X2J1ZmZlcl9yZWFsbG9jKEFWQnVmZmVyUmVmICoqYnVmLCBzaXplX3Qgc2l6ZSk7CisrCisr LyoqCisrICogRW5zdXJlIGRzdCByZWZlcnMgdG8gdGhlIHNhbWUgZGF0YSBhcyBzcmMuCisrICoK KysgKiBXaGVuICpkc3QgaXMgYWxyZWFkeSBlcXVpdmFsZW50IHRvIHNyYywgZG8gbm90aGluZy4g T3RoZXJ3aXNlIHVucmVmZXJlbmNlIGRzdAorKyAqIGFuZCByZXBsYWNlIGl0IHdpdGggYSBuZXcg cmVmZXJlbmNlIHRvIHNyYy4KKysgKgorKyAqIEBwYXJhbSBkc3QgUG9pbnRlciB0byBlaXRoZXIg YSB2YWxpZCBidWZmZXIgcmVmZXJlbmNlIG9yIE5VTEwuIE9uIHN1Y2Nlc3MsCisrICogICAgICAg ICAgICB0aGlzIHdpbGwgcG9pbnQgdG8gYSBidWZmZXIgcmVmZXJlbmNlIGVxdWl2YWxlbnQgdG8g c3JjLiBPbgorKyAqICAgICAgICAgICAgZmFpbHVyZSwgZHN0IHdpbGwgYmUgbGVmdCB1bnRvdWNo ZWQuCisrICogQHBhcmFtIHNyYyBBIGJ1ZmZlciByZWZlcmVuY2UgdG8gcmVwbGFjZSBkc3Qgd2l0 aC4gTWF5IGJlIE5VTEwsIHRoZW4gdGhpcworKyAqICAgICAgICAgICAgZnVuY3Rpb24gaXMgZXF1 aXZhbGVudCB0byBhdl9idWZmZXJfdW5yZWYoZHN0KS4KKysgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cworKyAqICAgICAgICAgQVZFUlJPUihFTk9NRU0pIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmUuCisrICovCisraW50IGF2X2J1ZmZlcl9yZXBsYWNlKEFWQnVmZmVyUmVmICoqZHN0LCBjb25z dCBBVkJ1ZmZlclJlZiAqc3JjKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAq IEBkZWZncm91cCBsYXZ1X2J1ZmZlcnBvb2wgQVZCdWZmZXJQb29sCisrICogQGluZ3JvdXAgbGF2 dV9kYXRhCisrICoKKysgKiBAeworKyAqIEFWQnVmZmVyUG9vbCBpcyBhbiBBUEkgZm9yIGEgbG9j ay1mcmVlIHRocmVhZC1zYWZlIHBvb2wgb2YgQVZCdWZmZXJzLgorKyAqCisrICogRnJlcXVlbnRs eSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGxhcmdlIGJ1ZmZlcnMgbWF5IGJlIHNsb3cuIEFWQnVm ZmVyUG9vbCBpcworKyAqIG1lYW50IHRvIHNvbHZlIHRoaXMgaW4gY2FzZXMgd2hlbiB0aGUgY2Fs bGVyIG5lZWRzIGEgc2V0IG9mIGJ1ZmZlcnMgb2YgdGhlCisrICogc2FtZSBzaXplICh0aGUgbW9z dCBvYnZpb3VzIHVzZSBjYXNlIGJlaW5nIGJ1ZmZlcnMgZm9yIHJhdyB2aWRlbyBvciBhdWRpbwor KyAqIGZyYW1lcykuCisrICoKKysgKiBBdCB0aGUgYmVnaW5uaW5nLCB0aGUgdXNlciBtdXN0IGNh bGwgYXZfYnVmZmVyX3Bvb2xfaW5pdCgpIHRvIGNyZWF0ZSB0aGUKKysgKiBidWZmZXIgcG9vbC4g VGhlbiB3aGVuZXZlciBhIGJ1ZmZlciBpcyBuZWVkZWQsIGNhbGwgYXZfYnVmZmVyX3Bvb2xfZ2V0 KCkgdG8KKysgKiBnZXQgYSByZWZlcmVuY2UgdG8gYSBuZXcgYnVmZmVyLCBzaW1pbGFyIHRvIGF2 X2J1ZmZlcl9hbGxvYygpLiBUaGlzIG5ldworKyAqIHJlZmVyZW5jZSB3b3JrcyBpbiBhbGwgYXNw ZWN0cyB0aGUgc2FtZSB3YXkgYXMgdGhlIG9uZSBjcmVhdGVkIGJ5CisrICogYXZfYnVmZmVyX2Fs bG9jKCkuIEhvd2V2ZXIsIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgYnVmZmVyIGlz CisrICogdW5yZWZlcmVuY2VkLCBpdCBpcyByZXR1cm5lZCB0byB0aGUgcG9vbCBpbnN0ZWFkIG9m IGJlaW5nIGZyZWVkIGFuZCB3aWxsIGJlCisrICogcmV1c2VkIGZvciBzdWJzZXF1ZW50IGF2X2J1 ZmZlcl9wb29sX2dldCgpIGNhbGxzLgorKyAqCisrICogV2hlbiB0aGUgY2FsbGVyIGlzIGRvbmUg d2l0aCB0aGUgcG9vbCBhbmQgbm8gbG9uZ2VyIG5lZWRzIHRvIGFsbG9jYXRlIGFueSBuZXcKKysg KiBidWZmZXJzLCBhdl9idWZmZXJfcG9vbF91bmluaXQoKSBtdXN0IGJlIGNhbGxlZCB0byBtYXJr IHRoZSBwb29sIGFzIGZyZWVhYmxlLgorKyAqIE9uY2UgYWxsIHRoZSBidWZmZXJzIGFyZSByZWxl YXNlZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZyZWVkLgorKyAqCisrICogQWxsb2NhdGlu ZyBhbmQgcmVsZWFzaW5nIGJ1ZmZlcnMgd2l0aCB0aGlzIEFQSSBpcyB0aHJlYWQtc2FmZSBhcyBs b25nIGFzCisrICogZWl0aGVyIHRoZSBkZWZhdWx0IGFsbG9jIGNhbGxiYWNrIGlzIHVzZWQsIG9y IHRoZSB1c2VyLXN1cHBsaWVkIG9uZSBpcworKyAqIHRocmVhZC1zYWZlLgorKyAqLworKworKy8q KgorKyAqIFRoZSBidWZmZXIgcG9vbC4gVGhpcyBzdHJ1Y3R1cmUgaXMgb3BhcXVlIGFuZCBub3Qg bWVhbnQgdG8gYmUgYWNjZXNzZWQKKysgKiBkaXJlY3RseS4gSXQgaXMgYWxsb2NhdGVkIHdpdGgg YXZfYnVmZmVyX3Bvb2xfaW5pdCgpIGFuZCBmcmVlZCB3aXRoCisrICogYXZfYnVmZmVyX3Bvb2xf dW5pbml0KCkuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZCdWZmZXJQb29sIEFWQnVmZmVyUG9v bDsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGJ1ZmZlciBwb29sLgor KyAqCisrICogQHBhcmFtIHNpemUgc2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiB0aGlzIHBvb2wKKysg KiBAcGFyYW0gYWxsb2MgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBhbGxvY2F0ZSBu ZXcgYnVmZmVycyB3aGVuIHRoZQorKyAqIHBvb2wgaXMgZW1wdHkuIE1heSBiZSBOVUxMLCB0aGVu IHRoZSBkZWZhdWx0IGFsbG9jYXRvciB3aWxsIGJlIHVzZWQKKysgKiAoYXZfYnVmZmVyX2FsbG9j KCkpLgorKyAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBidWZmZXIgcG9vbCBvbiBzdWNjZXNzLCBO VUxMIG9uIGVycm9yLgorKyAqLworK0FWQnVmZmVyUG9vbCAqYXZfYnVmZmVyX3Bvb2xfaW5pdChz aXplX3Qgc2l6ZSwgQVZCdWZmZXJSZWYqICgqYWxsb2MpKHNpemVfdCBzaXplKSk7CisrCisrLyoq CisrICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBidWZmZXIgcG9vbCB3aXRoIGEgbW9yZSBj b21wbGV4IGFsbG9jYXRvci4KKysgKgorKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgZWFjaCBidWZm ZXIgaW4gdGhpcyBwb29sCisrICogQHBhcmFtIG9wYXF1ZSBhcmJpdHJhcnkgdXNlciBkYXRhIHVz ZWQgYnkgdGhlIGFsbG9jYXRvcgorKyAqIEBwYXJhbSBhbGxvYyBhIGZ1bmN0aW9uIHRoYXQgd2ls bCBiZSB1c2VkIHRvIGFsbG9jYXRlIG5ldyBidWZmZXJzIHdoZW4gdGhlCisrICogICAgICAgICAg ICAgIHBvb2wgaXMgZW1wdHkuIE1heSBiZSBOVUxMLCB0aGVuIHRoZSBkZWZhdWx0IGFsbG9jYXRv ciB3aWxsIGJlCisrICogICAgICAgICAgICAgIHVzZWQgKGF2X2J1ZmZlcl9hbGxvYygpKS4KKysg KiBAcGFyYW0gcG9vbF9mcmVlIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbW1lZGlh dGVseSBiZWZvcmUgdGhlIHBvb2wKKysgKiAgICAgICAgICAgICAgICAgIGlzIGZyZWVkLiBJLmUu IGFmdGVyIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgpIGlzIGNhbGxlZAorKyAqICAgICAgICAgICAg ICAgICAgYnkgdGhlIGNhbGxlciBhbmQgYWxsIHRoZSBmcmFtZXMgYXJlIHJldHVybmVkIHRvIHRo ZSBwb29sCisrICogICAgICAgICAgICAgICAgICBhbmQgZnJlZWQuIEl0IGlzIGludGVuZGVkIHRv IHVuaW5pdGlhbGl6ZSB0aGUgdXNlciBvcGFxdWUKKysgKiAgICAgICAgICAgICAgICAgIGRhdGEu IE1heSBiZSBOVUxMLgorKyAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBidWZmZXIgcG9vbCBvbiBz dWNjZXNzLCBOVUxMIG9uIGVycm9yLgorKyAqLworK0FWQnVmZmVyUG9vbCAqYXZfYnVmZmVyX3Bv b2xfaW5pdDIoc2l6ZV90IHNpemUsIHZvaWQgKm9wYXF1ZSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWQnVmZmVyUmVmKiAoKmFsbG9jKSh2b2lkICpvcGFxdWUsIHNpemVf dCBzaXplKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwb29s X2ZyZWUpKHZvaWQgKm9wYXF1ZSkpOworKworKy8qKgorKyAqIE1hcmsgdGhlIHBvb2wgYXMgYmVp bmcgYXZhaWxhYmxlIGZvciBmcmVlaW5nLiBJdCB3aWxsIGFjdHVhbGx5IGJlIGZyZWVkIG9ubHkK KysgKiBvbmNlIGFsbCB0aGUgYWxsb2NhdGVkIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBw b29sIGFyZSByZWxlYXNlZC4gVGh1cyBpdAorKyAqIGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0 aW9uIHdoaWxlIHNvbWUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJzIGFyZSBzdGlsbAorKyAqIGlu IHVzZS4KKysgKgorKyAqIEBwYXJhbSBwb29sIHBvaW50ZXIgdG8gdGhlIHBvb2wgdG8gYmUgZnJl ZWQuIEl0IHdpbGwgYmUgc2V0IHRvIE5VTEwuCisrICovCisrdm9pZCBhdl9idWZmZXJfcG9vbF91 bmluaXQoQVZCdWZmZXJQb29sICoqcG9vbCk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBuZXcg QVZCdWZmZXIsIHJldXNpbmcgYW4gb2xkIGJ1ZmZlciBmcm9tIHRoZSBwb29sIHdoZW4gYXZhaWxh YmxlLgorKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBzaW11bHRhbmVvdXNseSBmcm9t IG11bHRpcGxlIHRocmVhZHMuCisrICoKKysgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBu ZXcgYnVmZmVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuCisrICovCisrQVZCdWZmZXJSZWYg KmF2X2J1ZmZlcl9wb29sX2dldChBVkJ1ZmZlclBvb2wgKnBvb2wpOworKworKy8qKgorKyAqIFF1 ZXJ5IHRoZSBvcmlnaW5hbCBvcGFxdWUgcGFyYW1ldGVyIG9mIGFuIGFsbG9jYXRlZCBidWZmZXIg aW4gdGhlIHBvb2wuCisrICoKKysgKiBAcGFyYW0gcmVmIGEgYnVmZmVyIHJlZmVyZW5jZSB0byBh IGJ1ZmZlciByZXR1cm5lZCBieSBhdl9idWZmZXJfcG9vbF9nZXQuCisrICogQHJldHVybiB0aGUg b3BhcXVlIHBhcmFtZXRlciBzZXQgYnkgdGhlIGJ1ZmZlciBhbGxvY2F0b3IgZnVuY3Rpb24gb2Yg dGhlCisrICogICAgICAgICBidWZmZXIgcG9vbC4KKysgKgorKyAqIEBub3RlIHRoZSBvcGFxdWUg cGFyYW1ldGVyIG9mIHJlZiBpcyB1c2VkIGJ5IHRoZSBidWZmZXIgcG9vbCBpbXBsZW1lbnRhdGlv biwKKysgKiB0aGVyZWZvcmUgeW91IGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gdG8gYWNjZXNz IHRoZSBvcmlnaW5hbCBvcGFxdWUKKysgKiBwYXJhbWV0ZXIgb2YgYW4gYWxsb2NhdGVkIGJ1ZmZl ci4KKysgKi8KKyt2b2lkICphdl9idWZmZXJfcG9vbF9idWZmZXJfZ2V0X29wYXF1ZShjb25zdCBB VkJ1ZmZlclJlZiAqcmVmKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBB VlVUSUxfQlVGRkVSX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oLmZm bXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvY2hhbm5lbF9s YXlvdXQuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2MzQ1Mjg5ICswMjAwCisrKysg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzYxODM1NTMg KzAyMDAKK0BAIC0wLDAgKzEsNzYyIEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDYgTWlj aGFlbCBOaWVkZXJtYXllciA8bWljaGFlbG5pQGdteC5hdD4KKysgKiBDb3B5cmlnaHQgKGMpIDIw MDggUGV0ZXIgUm9zcworKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAq CisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQ0hBTk5FTF9MQVlPVVRfSAorKyNkZWZp bmUgQVZVVElMX0NIQU5ORUxfTEFZT1VUX0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorKworKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisrI2luY2x1ZGUgImF0 dHJpYnV0ZXMuaCIKKysKKysvKioKKysgKiBAZmlsZQorKyAqIEBpbmdyb3VwIGxhdnVfYXVkaW9f Y2hhbm5lbHMKKysgKiBQdWJsaWMgbGliYXZ1dGlsIGNoYW5uZWwgbGF5b3V0IEFQSXMgaGVhZGVy LgorKyAqLworKworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZ1X2F1ZGlvX2NoYW5uZWxzIEF1 ZGlvIGNoYW5uZWxzCisrICogQGluZ3JvdXAgbGF2dV9hdWRpbworKyAqCisrICogQXVkaW8gY2hh bm5lbCBsYXlvdXQgdXRpbGl0eSBmdW5jdGlvbnMKKysgKgorKyAqIEB7CisrICovCisrCisrZW51 bSBBVkNoYW5uZWwgeworKyAgICAvLy8gSW52YWxpZCBjaGFubmVsIGluZGV4CisrICAgIEFWX0NI QU5fTk9ORSA9IC0xLAorKyAgICBBVl9DSEFOX0ZST05UX0xFRlQsCisrICAgIEFWX0NIQU5fRlJP TlRfUklHSFQsCisrICAgIEFWX0NIQU5fRlJPTlRfQ0VOVEVSLAorKyAgICBBVl9DSEFOX0xPV19G UkVRVUVOQ1ksCisrICAgIEFWX0NIQU5fQkFDS19MRUZULAorKyAgICBBVl9DSEFOX0JBQ0tfUklH SFQsCisrICAgIEFWX0NIQU5fRlJPTlRfTEVGVF9PRl9DRU5URVIsCisrICAgIEFWX0NIQU5fRlJP TlRfUklHSFRfT0ZfQ0VOVEVSLAorKyAgICBBVl9DSEFOX0JBQ0tfQ0VOVEVSLAorKyAgICBBVl9D SEFOX1NJREVfTEVGVCwKKysgICAgQVZfQ0hBTl9TSURFX1JJR0hULAorKyAgICBBVl9DSEFOX1RP UF9DRU5URVIsCisrICAgIEFWX0NIQU5fVE9QX0ZST05UX0xFRlQsCisrICAgIEFWX0NIQU5fVE9Q X0ZST05UX0NFTlRFUiwKKysgICAgQVZfQ0hBTl9UT1BfRlJPTlRfUklHSFQsCisrICAgIEFWX0NI QU5fVE9QX0JBQ0tfTEVGVCwKKysgICAgQVZfQ0hBTl9UT1BfQkFDS19DRU5URVIsCisrICAgIEFW X0NIQU5fVE9QX0JBQ0tfUklHSFQsCisrICAgIC8qKiBTdGVyZW8gZG93bm1peC4gKi8KKysgICAg QVZfQ0hBTl9TVEVSRU9fTEVGVCA9IDI5LAorKyAgICAvKiogU2VlIGFib3ZlLiAqLworKyAgICBB Vl9DSEFOX1NURVJFT19SSUdIVCwKKysgICAgQVZfQ0hBTl9XSURFX0xFRlQsCisrICAgIEFWX0NI QU5fV0lERV9SSUdIVCwKKysgICAgQVZfQ0hBTl9TVVJST1VORF9ESVJFQ1RfTEVGVCwKKysgICAg QVZfQ0hBTl9TVVJST1VORF9ESVJFQ1RfUklHSFQsCisrICAgIEFWX0NIQU5fTE9XX0ZSRVFVRU5D WV8yLAorKyAgICBBVl9DSEFOX1RPUF9TSURFX0xFRlQsCisrICAgIEFWX0NIQU5fVE9QX1NJREVf UklHSFQsCisrICAgIEFWX0NIQU5fQk9UVE9NX0ZST05UX0NFTlRFUiwKKysgICAgQVZfQ0hBTl9C T1RUT01fRlJPTlRfTEVGVCwKKysgICAgQVZfQ0hBTl9CT1RUT01fRlJPTlRfUklHSFQsCisrICAg IEFWX0NIQU5fU0lERV9TVVJST1VORF9MRUZULCAgICAgLy8vPCAgKzkwIGRlZ3JlZXMsIExzcywg U2lMCisrICAgIEFWX0NIQU5fU0lERV9TVVJST1VORF9SSUdIVCwgICAgLy8vPCAgLTkwIGRlZ3Jl ZXMsIFJzcywgU2lSCisrICAgIEFWX0NIQU5fVE9QX1NVUlJPVU5EX0xFRlQsICAgICAgLy8vPCAr MTEwIGRlZ3JlZXMsIEx2cywgVHBMUworKyAgICBBVl9DSEFOX1RPUF9TVVJST1VORF9SSUdIVCwg ICAgIC8vLzwgLTExMCBkZWdyZWVzLCBSdnMsIFRwUlMKKysKKysgICAgQVZfQ0hBTl9CSU5BVVJB TF9MRUZUID0gNjEsCisrICAgIEFWX0NIQU5fQklOQVVSQUxfUklHSFQsCisrCisrICAgIC8qKiBD aGFubmVsIGlzIGVtcHR5IGNhbiBiZSBzYWZlbHkgc2tpcHBlZC4gKi8KKysgICAgQVZfQ0hBTl9V TlVTRUQgPSAweDIwMCwKKysKKysgICAgLyoqIENoYW5uZWwgY29udGFpbnMgZGF0YSwgYnV0IGl0 cyBwb3NpdGlvbiBpcyB1bmtub3duLiAqLworKyAgICBBVl9DSEFOX1VOS05PV04gPSAweDMwMCwK KysKKysgICAgLyoqCisrICAgICAqIFJhbmdlIG9mIGNoYW5uZWxzIGJldHdlZW4gQVZfQ0hBTl9B TUJJU09OSUNfQkFTRSBhbmQKKysgICAgICogQVZfQ0hBTl9BTUJJU09OSUNfRU5EIHJlcHJlc2Vu dCBBbWJpc29uaWMgY29tcG9uZW50cyB1c2luZyB0aGUgQUNOIHN5c3RlbS4KKysgICAgICoKKysg ICAgICogR2l2ZW4gYSBjaGFubmVsIGlkIGA8aT5gIGJldHdlZW4gQVZfQ0hBTl9BTUJJU09OSUNf QkFTRSBhbmQKKysgICAgICogQVZfQ0hBTl9BTUJJU09OSUNfRU5EIChpbmNsdXNpdmUpLCB0aGUg QUNOIGluZGV4IG9mIHRoZSBjaGFubmVsIGA8bj5gIGlzCisrICAgICAqIGA8bj4gPSA8aT4gLSBB Vl9DSEFOX0FNQklTT05JQ19CQVNFYC4KKysgICAgICoKKysgICAgICogQG5vdGUgdGhlc2UgdmFs dWVzIGFyZSBvbmx5IHVzZWQgZm9yIEFWX0NIQU5ORUxfT1JERVJfQ1VTVE9NIGNoYW5uZWwKKysg ICAgICogb3JkZXJpbmdzLCB0aGUgQVZfQ0hBTk5FTF9PUkRFUl9BTUJJU09OSUMgb3JkZXJpbmcg b3JkZXJzIHRoZSBjaGFubmVscworKyAgICAgKiBpbXBsaWNpdGx5IGJ5IHRoZWlyIHBvc2l0aW9u IGluIHRoZSBzdHJlYW0uCisrICAgICAqLworKyAgICBBVl9DSEFOX0FNQklTT05JQ19CQVNFID0g MHg0MDAsCisrICAgIC8vIGxlYXZlIHNwYWNlIGZvciAxMDI0IGlkcywgd2hpY2ggY29ycmVzcG9u ZCB0byBtYXhpbXVtIG9yZGVyLTMyIGhhcm1vbmljcywKKysgICAgLy8gd2hpY2ggc2hvdWxkIGJl IGVub3VnaCBmb3IgdGhlIGZvcmVzZWVhYmxlIHVzZSBjYXNlcworKyAgICBBVl9DSEFOX0FNQklT T05JQ19FTkQgID0gMHg3ZmYsCisrfTsKKysKKytlbnVtIEFWQ2hhbm5lbE9yZGVyIHsKKysgICAg LyoqCisrICAgICAqIE9ubHkgdGhlIGNoYW5uZWwgY291bnQgaXMgc3BlY2lmaWVkLCB3aXRob3V0 IGFueSBmdXJ0aGVyIGluZm9ybWF0aW9uCisrICAgICAqIGFib3V0IHRoZSBjaGFubmVsIG9yZGVy LgorKyAgICAgKi8KKysgICAgQVZfQ0hBTk5FTF9PUkRFUl9VTlNQRUMsCisrICAgIC8qKgorKyAg ICAgKiBUaGUgbmF0aXZlIGNoYW5uZWwgb3JkZXIsIGkuZS4gdGhlIGNoYW5uZWxzIGFyZSBpbiB0 aGUgc2FtZSBvcmRlciBpbgorKyAgICAgKiB3aGljaCB0aGV5IGFyZSBkZWZpbmVkIGluIHRoZSBB VkNoYW5uZWwgZW51bS4gVGhpcyBzdXBwb3J0cyB1cCB0byA2MworKyAgICAgKiBkaWZmZXJlbnQg Y2hhbm5lbHMuCisrICAgICAqLworKyAgICBBVl9DSEFOTkVMX09SREVSX05BVElWRSwKKysgICAg LyoqCisrICAgICAqIFRoZSBjaGFubmVsIG9yZGVyIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55 IG90aGVyIHByZWRlZmluZWQgb3JkZXIgYW5kCisrICAgICAqIGlzIHN0b3JlZCBhcyBhbiBleHBs aWNpdCBtYXAuIEZvciBleGFtcGxlLCB0aGlzIGNvdWxkIGJlIHVzZWQgdG8gc3VwcG9ydAorKyAg ICAgKiBsYXlvdXRzIHdpdGggNjQgb3IgbW9yZSBjaGFubmVscywgb3Igd2l0aCBlbXB0eS9za2lw cGVkIChBVl9DSEFOX1VOVVNFRCkKKysgICAgICogY2hhbm5lbHMgYXQgYXJiaXRyYXJ5IHBvc2l0 aW9ucy4KKysgICAgICovCisrICAgIEFWX0NIQU5ORUxfT1JERVJfQ1VTVE9NLAorKyAgICAvKioK KysgICAgICogVGhlIGF1ZGlvIGlzIHJlcHJlc2VudGVkIGFzIHRoZSBkZWNvbXBvc2l0aW9uIG9m IHRoZSBzb3VuZCBmaWVsZCBpbnRvCisrICAgICAqIHNwaGVyaWNhbCBoYXJtb25pY3MuIEVhY2gg Y2hhbm5lbCBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSBleHBhbnNpb24KKysgICAgICogY29tcG9u ZW50LiBDaGFubmVscyBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gQUNOIChBbWJpc29uaWMgQ2hh bm5lbAorKyAgICAgKiBOdW1iZXIpLgorKyAgICAgKgorKyAgICAgKiBUaGUgY2hhbm5lbCB3aXRo IHRoZSBpbmRleCBuIGluIHRoZSBzdHJlYW0gY29udGFpbnMgdGhlIHNwaGVyaWNhbAorKyAgICAg KiBoYXJtb25pYyBvZiBkZWdyZWUgbCBhbmQgb3JkZXIgbSBnaXZlbiBieQorKyAgICAgKiBAY29k ZXsudW5wYXJzZWR9CisrICAgICAqICAgbCAgID0gZmxvb3Ioc3FydChuKSksCisrICAgICAqICAg bSAgID0gbiAtIGwgKiAobCArIDEpLgorKyAgICAgKiBAZW5kY29kZQorKyAgICAgKgorKyAgICAg KiBDb252ZXJzZWx5IGdpdmVuIGEgc3BoZXJpY2FsIGhhcm1vbmljIG9mIGRlZ3JlZSBsIGFuZCBv cmRlciBtLCB0aGUKKysgICAgICogY29ycmVzcG9uZGluZyBjaGFubmVsIGluZGV4IG4gaXMgZ2l2 ZW4gYnkKKysgICAgICogQGNvZGV7LnVucGFyc2VkfQorKyAgICAgKiAgIG4gPSBsICogKGwgKyAx KSArIG0uCisrICAgICAqIEBlbmRjb2RlCisrICAgICAqCisrICAgICAqIE5vcm1hbGl6YXRpb24g aXMgYXNzdW1lZCB0byBiZSBTTjNEIChTY2htaWR0IFNlbWktTm9ybWFsaXphdGlvbikKKysgICAg ICogYXMgZGVmaW5lZCBpbiBBbWJpWCBmb3JtYXQgJCAyLjEuCisrICAgICAqLworKyAgICBBVl9D SEFOTkVMX09SREVSX0FNQklTT05JQywKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBjaGFu bmVsIG9yZGVycywgbm90IHBhcnQgb2YgQUJJL0FQSQorKyAgICAgKi8KKysgICAgRkZfQ0hBTk5F TF9PUkRFUl9OQgorK307CisrCisrCisrLyoqCisrICogQGRlZmdyb3VwIGNoYW5uZWxfbWFza3Mg QXVkaW8gY2hhbm5lbCBtYXNrcworKyAqCisrICogQSBjaGFubmVsIGxheW91dCBpcyBhIDY0LWJp dHMgaW50ZWdlciB3aXRoIGEgYml0IHNldCBmb3IgZXZlcnkgY2hhbm5lbC4KKysgKiBUaGUgbnVt YmVyIG9mIGJpdHMgc2V0IG11c3QgYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjaGFubmVscy4K KysgKiBUaGUgdmFsdWUgMCBtZWFucyB0aGF0IHRoZSBjaGFubmVsIGxheW91dCBpcyBub3Qga25v d24uCisrICogQG5vdGUgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBub3QgcG93ZXJmdWwgZW5vdWdo IHRvIGhhbmRsZSBjaGFubmVscworKyAqIGNvbWJpbmF0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUg Y2hhbm5lbCBtdWx0aXBsZSB0aW1lcywgc3VjaCBhcworKyAqIGR1YWwtbW9uby4KKysgKgorKyAq IEB7CisrICovCisrI2RlZmluZSBBVl9DSF9GUk9OVF9MRUZUICAgICAgICAgICAgICgxVUxMIDw8 IEFWX0NIQU5fRlJPTlRfTEVGVCAgICAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfRlJPTlRfUklH SFQgICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX0ZST05UX1JJR0hUICAgICAgICAgICkKKysj ZGVmaW5lIEFWX0NIX0ZST05UX0NFTlRFUiAgICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9GUk9O VF9DRU5URVIgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9MT1dfRlJFUVVFTkNZICAgICAgICAg ICgxVUxMIDw8IEFWX0NIQU5fTE9XX0ZSRVFVRU5DWSAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hf QkFDS19MRUZUICAgICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX0JBQ0tfTEVGVCAgICAgICAg ICAgICkKKysjZGVmaW5lIEFWX0NIX0JBQ0tfUklHSFQgICAgICAgICAgICAgKDFVTEwgPDwgQVZf Q0hBTl9CQUNLX1JJR0hUICAgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9GUk9OVF9MRUZUX09G X0NFTlRFUiAgICgxVUxMIDw8IEFWX0NIQU5fRlJPTlRfTEVGVF9PRl9DRU5URVIgKQorKyNkZWZp bmUgQVZfQ0hfRlJPTlRfUklHSFRfT0ZfQ0VOVEVSICAoMVVMTCA8PCBBVl9DSEFOX0ZST05UX1JJ R0hUX09GX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0JBQ0tfQ0VOVEVSICAgICAgICAgICAgKDFV TEwgPDwgQVZfQ0hBTl9CQUNLX0NFTlRFUiAgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9TSURF X0xFRlQgICAgICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fU0lERV9MRUZUICAgICAgICAgICAg KQorKyNkZWZpbmUgQVZfQ0hfU0lERV9SSUdIVCAgICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFO X1NJREVfUklHSFQgICAgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX1RPUF9DRU5URVIgICAgICAg ICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9UT1BfQ0VOVEVSICAgICAgICAgICApCisrI2RlZmluZSBB Vl9DSF9UT1BfRlJPTlRfTEVGVCAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fVE9QX0ZST05UX0xF RlQgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfVE9QX0ZST05UX0NFTlRFUiAgICAgICAoMVVMTCA8 PCBBVl9DSEFOX1RPUF9GUk9OVF9DRU5URVIgICAgICkKKysjZGVmaW5lIEFWX0NIX1RPUF9GUk9O VF9SSUdIVCAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9UT1BfRlJPTlRfUklHSFQgICAgICApCisr I2RlZmluZSBBVl9DSF9UT1BfQkFDS19MRUZUICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fVE9Q X0JBQ0tfTEVGVCAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfVE9QX0JBQ0tfQ0VOVEVSICAgICAg ICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9CQUNLX0NFTlRFUiAgICAgICkKKysjZGVmaW5lIEFWX0NI X1RPUF9CQUNLX1JJR0hUICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9UT1BfQkFDS19SSUdIVCAg ICAgICApCisrI2RlZmluZSBBVl9DSF9TVEVSRU9fTEVGVCAgICAgICAgICAgICgxVUxMIDw8IEFW X0NIQU5fU1RFUkVPX0xFRlQgICAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfU1RFUkVPX1JJR0hU ICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX1NURVJFT19SSUdIVCAgICAgICAgICkKKysjZGVm aW5lIEFWX0NIX1dJREVfTEVGVCAgICAgICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9XSURFX0xF RlQgICAgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9XSURFX1JJR0hUICAgICAgICAgICAgICgx VUxMIDw8IEFWX0NIQU5fV0lERV9SSUdIVCAgICAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfU1VS Uk9VTkRfRElSRUNUX0xFRlQgICAoMVVMTCA8PCBBVl9DSEFOX1NVUlJPVU5EX0RJUkVDVF9MRUZU ICkKKysjZGVmaW5lIEFWX0NIX1NVUlJPVU5EX0RJUkVDVF9SSUdIVCAgKDFVTEwgPDwgQVZfQ0hB Tl9TVVJST1VORF9ESVJFQ1RfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MT1dfRlJFUVVFTkNZXzIg ICAgICAgICgxVUxMIDw8IEFWX0NIQU5fTE9XX0ZSRVFVRU5DWV8yICAgICAgKQorKyNkZWZpbmUg QVZfQ0hfVE9QX1NJREVfTEVGVCAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9TSURFX0xF RlQgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX1RPUF9TSURFX1JJR0hUICAgICAgICAgKDFVTEwg PDwgQVZfQ0hBTl9UT1BfU0lERV9SSUdIVCAgICAgICApCisrI2RlZmluZSBBVl9DSF9CT1RUT01f RlJPTlRfQ0VOVEVSICAgICgxVUxMIDw8IEFWX0NIQU5fQk9UVE9NX0ZST05UX0NFTlRFUiAgKQor KyNkZWZpbmUgQVZfQ0hfQk9UVE9NX0ZST05UX0xFRlQgICAgICAoMVVMTCA8PCBBVl9DSEFOX0JP VFRPTV9GUk9OVF9MRUZUICAgICkKKysjZGVmaW5lIEFWX0NIX0JPVFRPTV9GUk9OVF9SSUdIVCAg ICAgKDFVTEwgPDwgQVZfQ0hBTl9CT1RUT01fRlJPTlRfUklHSFQgICApCisrI2RlZmluZSBBVl9D SF9TSURFX1NVUlJPVU5EX0xFRlQgICAgICgxVUxMIDw8IEFWX0NIQU5fU0lERV9TVVJST1VORF9M RUZUICAgKQorKyNkZWZpbmUgQVZfQ0hfU0lERV9TVVJST1VORF9SSUdIVCAgICAoMVVMTCA8PCBB Vl9DSEFOX1NJREVfU1VSUk9VTkRfUklHSFQgICkKKysjZGVmaW5lIEFWX0NIX1RPUF9TVVJST1VO RF9MRUZUICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9UT1BfU1VSUk9VTkRfTEVGVCAgICApCisrI2Rl ZmluZSBBVl9DSF9UT1BfU1VSUk9VTkRfUklHSFQgICAgICgxVUxMIDw8IEFWX0NIQU5fVE9QX1NV UlJPVU5EX1JJR0hUICAgKQorKyNkZWZpbmUgQVZfQ0hfQklOQVVSQUxfTEVGVCAgICAgICAgICAo MVVMTCA8PCBBVl9DSEFOX0JJTkFVUkFMX0xFRlQgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX0JJ TkFVUkFMX1JJR0hUICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9CSU5BVVJBTF9SSUdIVCAgICAg ICApCisrCisrLyoqCisrICogQH0KKysgKiBAZGVmZ3JvdXAgY2hhbm5lbF9tYXNrX2MgQXVkaW8g Y2hhbm5lbCBsYXlvdXRzCisrICogQHsKKysgKiAqLworKyNkZWZpbmUgQVZfQ0hfTEFZT1VUX01P Tk8gICAgICAgICAgICAgIChBVl9DSF9GUk9OVF9DRU5URVIpCisrI2RlZmluZSBBVl9DSF9MQVlP VVRfU1RFUkVPICAgICAgICAgICAgKEFWX0NIX0ZST05UX0xFRlR8QVZfQ0hfRlJPTlRfUklHSFQp CisrI2RlZmluZSBBVl9DSF9MQVlPVVRfMlBPSU5UMSAgICAgICAgICAgKEFWX0NIX0xBWU9VVF9T VEVSRU98QVZfQ0hfTE9XX0ZSRVFVRU5DWSkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF8yXzEgICAg ICAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1NURVJFT3xBVl9DSF9CQUNLX0NFTlRFUikKKysjZGVm aW5lIEFWX0NIX0xBWU9VVF9TVVJST1VORCAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1NURVJFT3xB Vl9DSF9GUk9OVF9DRU5URVIpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfM1BPSU5UMSAgICAgICAg ICAgKEFWX0NIX0xBWU9VVF9TVVJST1VORHxBVl9DSF9MT1dfRlJFUVVFTkNZKQorKyNkZWZpbmUg QVZfQ0hfTEFZT1VUXzRQT0lOVDAgICAgICAgICAgIChBVl9DSF9MQVlPVVRfU1VSUk9VTkR8QVZf Q0hfQkFDS19DRU5URVIpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfNFBPSU5UMSAgICAgICAgICAg KEFWX0NIX0xBWU9VVF80UE9JTlQwfEFWX0NIX0xPV19GUkVRVUVOQ1kpCisrI2RlZmluZSBBVl9D SF9MQVlPVVRfMl8yICAgICAgICAgICAgICAgKEFWX0NIX0xBWU9VVF9TVEVSRU98QVZfQ0hfU0lE RV9MRUZUfEFWX0NIX1NJREVfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfUVVBRCAgICAg ICAgICAgICAgKEFWX0NIX0xBWU9VVF9TVEVSRU98QVZfQ0hfQkFDS19MRUZUfEFWX0NIX0JBQ0tf UklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfNVBPSU5UMCAgICAgICAgICAgKEFWX0NIX0xB WU9VVF9TVVJST1VORHxBVl9DSF9TSURFX0xFRlR8QVZfQ0hfU0lERV9SSUdIVCkKKysjZGVmaW5l IEFWX0NIX0xBWU9VVF81UE9JTlQxICAgICAgICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDB8QVZf Q0hfTE9XX0ZSRVFVRU5DWSkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF81UE9JTlQwX0JBQ0sgICAg ICAoQVZfQ0hfTEFZT1VUX1NVUlJPVU5EfEFWX0NIX0JBQ0tfTEVGVHxBVl9DSF9CQUNLX1JJR0hU KQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzVQT0lOVDFfQkFDSyAgICAgIChBVl9DSF9MQVlPVVRf NVBPSU5UMF9CQUNLfEFWX0NIX0xPV19GUkVRVUVOQ1kpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRf NlBPSU5UMCAgICAgICAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQwfEFWX0NIX0JBQ0tfQ0VOVEVS KQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzZQT0lOVDBfRlJPTlQgICAgIChBVl9DSF9MQVlPVVRf Ml8yfEFWX0NIX0ZST05UX0xFRlRfT0ZfQ0VOVEVSfEFWX0NIX0ZST05UX1JJR0hUX09GX0NFTlRF UikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF9IRVhBR09OQUwgICAgICAgICAoQVZfQ0hfTEFZT1VU XzVQT0lOVDBfQkFDS3xBVl9DSF9CQUNLX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF8z UE9JTlQxUE9JTlQyICAgICAoQVZfQ0hfTEFZT1VUXzNQT0lOVDF8QVZfQ0hfVE9QX0ZST05UX0xF RlR8QVZfQ0hfVE9QX0ZST05UX1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzZQT0lOVDEg ICAgICAgICAgIChBVl9DSF9MQVlPVVRfNVBPSU5UMXxBVl9DSF9CQUNLX0NFTlRFUikKKysjZGVm aW5lIEFWX0NIX0xBWU9VVF82UE9JTlQxX0JBQ0sgICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDFf QkFDS3xBVl9DSF9CQUNLX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF82UE9JTlQxX0ZS T05UICAgICAoQVZfQ0hfTEFZT1VUXzZQT0lOVDBfRlJPTlR8QVZfQ0hfTE9XX0ZSRVFVRU5DWSkK KysjZGVmaW5lIEFWX0NIX0xBWU9VVF83UE9JTlQwICAgICAgICAgICAoQVZfQ0hfTEFZT1VUXzVQ T0lOVDB8QVZfQ0hfQkFDS19MRUZUfEFWX0NIX0JBQ0tfUklHSFQpCisrI2RlZmluZSBBVl9DSF9M QVlPVVRfN1BPSU5UMF9GUk9OVCAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQwfEFWX0NIX0ZST05U X0xFRlRfT0ZfQ0VOVEVSfEFWX0NIX0ZST05UX1JJR0hUX09GX0NFTlRFUikKKysjZGVmaW5lIEFW X0NIX0xBWU9VVF83UE9JTlQxICAgICAgICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDF8QVZfQ0hf QkFDS19MRUZUfEFWX0NIX0JBQ0tfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfN1BPSU5U MV9XSURFICAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQxfEFWX0NIX0ZST05UX0xFRlRfT0ZfQ0VO VEVSfEFWX0NIX0ZST05UX1JJR0hUX09GX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF83 UE9JTlQxX1dJREVfQkFDSyAoQVZfQ0hfTEFZT1VUXzVQT0lOVDFfQkFDS3xBVl9DSF9GUk9OVF9M RUZUX09GX0NFTlRFUnxBVl9DSF9GUk9OVF9SSUdIVF9PRl9DRU5URVIpCisrI2RlZmluZSBBVl9D SF9MQVlPVVRfNVBPSU5UMVBPSU5UMiAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQxfEFWX0NIX1RP UF9GUk9OVF9MRUZUfEFWX0NIX1RPUF9GUk9OVF9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9V VF81UE9JTlQxUE9JTlQyX0JBQ0sgKEFWX0NIX0xBWU9VVF81UE9JTlQxX0JBQ0t8QVZfQ0hfVE9Q X0ZST05UX0xFRlR8QVZfQ0hfVE9QX0ZST05UX1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VU X09DVEFHT05BTCAgICAgICAgIChBVl9DSF9MQVlPVVRfNVBPSU5UMHxBVl9DSF9CQUNLX0xFRlR8 QVZfQ0hfQkFDS19DRU5URVJ8QVZfQ0hfQkFDS19SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9V VF9DVUJFICAgICAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1FVQUR8QVZfQ0hfVE9QX0ZST05UX0xF RlR8QVZfQ0hfVE9QX0ZST05UX1JJR0hUfEFWX0NIX1RPUF9CQUNLX0xFRlR8QVZfQ0hfVE9QX0JB Q0tfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfNVBPSU5UMVBPSU5UNF9CQUNLIChBVl9D SF9MQVlPVVRfNVBPSU5UMVBPSU5UMnxBVl9DSF9UT1BfQkFDS19MRUZUfEFWX0NIX1RPUF9CQUNL X1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzdQT0lOVDFQT0lOVDIgICAgIChBVl9DSF9M QVlPVVRfN1BPSU5UMXxBVl9DSF9UT1BfRlJPTlRfTEVGVHxBVl9DSF9UT1BfRlJPTlRfUklHSFQp CisrI2RlZmluZSBBVl9DSF9MQVlPVVRfN1BPSU5UMVBPSU5UNF9CQUNLIChBVl9DSF9MQVlPVVRf N1BPSU5UMVBPSU5UMnxBVl9DSF9UT1BfQkFDS19MRUZUfEFWX0NIX1RPUF9CQUNLX1JJR0hUKQor KyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzdQT0lOVDJQT0lOVDMgICAgIChBVl9DSF9MQVlPVVRfN1BP SU5UMVBPSU5UMnxBVl9DSF9UT1BfQkFDS19DRU5URVJ8QVZfQ0hfTE9XX0ZSRVFVRU5DWV8yKQor KyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDSyAoQVZfQ0hfTEFZT1VUXzdQ T0lOVDFQT0lOVDRfQkFDS3xBVl9DSF9GUk9OVF9MRUZUX09GX0NFTlRFUnxBVl9DSF9GUk9OVF9S SUdIVF9PRl9DRU5URVIpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfOVBPSU5UMVBPSU5UNiAgICAg KEFWX0NIX0xBWU9VVF85UE9JTlQxUE9JTlQ0X0JBQ0t8QVZfQ0hfVE9QX1NJREVfTEVGVHxBVl9D SF9UT1BfU0lERV9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF9IRVhBREVDQUdPTkFMICAg ICAoQVZfQ0hfTEFZT1VUX09DVEFHT05BTHxBVl9DSF9XSURFX0xFRlR8QVZfQ0hfV0lERV9SSUdI VHxBVl9DSF9UT1BfQkFDS19MRUZUfEFWX0NIX1RPUF9CQUNLX1JJR0hUfEFWX0NIX1RPUF9CQUNL X0NFTlRFUnxBVl9DSF9UT1BfRlJPTlRfQ0VOVEVSfEFWX0NIX1RPUF9GUk9OVF9MRUZUfEFWX0NI X1RPUF9GUk9OVF9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF9CSU5BVVJBTCAgICAgICAg ICAoQVZfQ0hfQklOQVVSQUxfTEVGVHxBVl9DSF9CSU5BVVJBTF9SSUdIVCkKKysjZGVmaW5lIEFW X0NIX0xBWU9VVF9TVEVSRU9fRE9XTk1JWCAgICAoQVZfQ0hfU1RFUkVPX0xFRlR8QVZfQ0hfU1RF UkVPX1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzIyUE9JTlQyICAgICAgICAgIChBVl9D SF9MQVlPVVRfOVBPSU5UMVBPSU5UNnxBVl9DSF9CQUNLX0NFTlRFUnxBVl9DSF9MT1dfRlJFUVVF TkNZXzJ8QVZfQ0hfVE9QX0ZST05UX0NFTlRFUnxBVl9DSF9UT1BfQ0VOVEVSfEFWX0NIX1RPUF9C QUNLX0NFTlRFUnxBVl9DSF9CT1RUT01fRlJPTlRfQ0VOVEVSfEFWX0NIX0JPVFRPTV9GUk9OVF9M RUZUfEFWX0NIX0JPVFRPTV9GUk9OVF9SSUdIVCkKKysKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF83 UE9JTlQxX1RPUF9CQUNLIEFWX0NIX0xBWU9VVF81UE9JTlQxUE9JTlQyX0JBQ0sKKysKKytlbnVt IEFWTWF0cml4RW5jb2RpbmcgeworKyAgICBBVl9NQVRSSVhfRU5DT0RJTkdfTk9ORSwKKysgICAg QVZfTUFUUklYX0VOQ09ESU5HX0RPTEJZLAorKyAgICBBVl9NQVRSSVhfRU5DT0RJTkdfRFBMSUks CisrICAgIEFWX01BVFJJWF9FTkNPRElOR19EUExJSVgsCisrICAgIEFWX01BVFJJWF9FTkNPRElO R19EUExJSVosCisrICAgIEFWX01BVFJJWF9FTkNPRElOR19ET0xCWUVYLAorKyAgICBBVl9NQVRS SVhfRU5DT0RJTkdfRE9MQllIRUFEUEhPTkUsCisrICAgIEFWX01BVFJJWF9FTkNPRElOR19OQgor K307CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBBbiBBVkNoYW5uZWxDdXN0 b20gZGVmaW5lcyBhIHNpbmdsZSBjaGFubmVsIHdpdGhpbiBhIGN1c3RvbSBvcmRlciBsYXlvdXQK KysgKgorKyAqIFVubGlrZSBtb3N0IHN0cnVjdHVyZXMgaW4gRkZtcGVnLCBzaXplb2YoQVZDaGFu bmVsQ3VzdG9tKSBpcyBhIHBhcnQgb2YgdGhlCisrICogcHVibGljIEFCSS4KKysgKgorKyAqIE5v IG5ldyBmaWVsZHMgbWF5IGJlIGFkZGVkIHRvIGl0IHdpdGhvdXQgYSBtYWpvciB2ZXJzaW9uIGJ1 bXAuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZDaGFubmVsQ3VzdG9tIHsKKysgICAgZW51bSBB VkNoYW5uZWwgaWQ7CisrICAgIGNoYXIgbmFtZVsxNl07CisrICAgIHZvaWQgKm9wYXF1ZTsKKyt9 IEFWQ2hhbm5lbEN1c3RvbTsKKysKKysvKioKKysgKiBBbiBBVkNoYW5uZWxMYXlvdXQgaG9sZHMg aW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5uZWwgbGF5b3V0IG9mIGF1ZGlvIGRhdGEuCisrICoK KysgKiBBIGNoYW5uZWwgbGF5b3V0IGhlcmUgaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBjaGFubmVs cyBvcmRlcmVkIGluIGEgc3BlY2lmaWMKKysgKiB3YXkgKHVubGVzcyB0aGUgY2hhbm5lbCBvcmRl ciBpcyBBVl9DSEFOTkVMX09SREVSX1VOU1BFQywgaW4gd2hpY2ggY2FzZSBhbgorKyAqIEFWQ2hh bm5lbExheW91dCBjYXJyaWVzIG9ubHkgdGhlIGNoYW5uZWwgY291bnQpLgorKyAqIEFsbCBvcmRl cnMgbWF5IGJlIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIEFWX0NIQU5ORUxfT1JERVJfVU5TUEVD IGJ5CisrICogaWdub3JpbmcgZXZlcnl0aGluZyBidXQgdGhlIGNoYW5uZWwgY291bnQsIGFzIGxv bmcgYXMgYXZfY2hhbm5lbF9sYXlvdXRfY2hlY2soKQorKyAqIGNvbnNpZGVycyB0aGV5IGFyZSB2 YWxpZC4KKysgKgorKyAqIFVubGlrZSBtb3N0IHN0cnVjdHVyZXMgaW4gRkZtcGVnLCBzaXplb2Yo QVZDaGFubmVsTGF5b3V0KSBpcyBhIHBhcnQgb2YgdGhlCisrICogcHVibGljIEFCSSBhbmQgbWF5 IGJlIHVzZWQgYnkgdGhlIGNhbGxlci4gRS5nLiBpdCBtYXkgYmUgYWxsb2NhdGVkIG9uIHN0YWNr CisrICogb3IgZW1iZWRkZWQgaW4gY2FsbGVyLWRlZmluZWQgc3RydWN0cy4KKysgKgorKyAqIEFW Q2hhbm5lbExheW91dCBjYW4gYmUgaW5pdGlhbGl6ZWQgYXMgZm9sbG93czoKKysgKiAtIGRlZmF1 bHQgaW5pdGlhbGl6YXRpb24gd2l0aCB7MH0sIGZvbGxvd2VkIGJ5IHNldHRpbmcgYWxsIHVzZWQg ZmllbGRzCisrICogICBjb3JyZWN0bHk7CisrICogLSBieSBhc3NpZ25pbmcgb25lIG9mIHRoZSBw cmVkZWZpbmVkIEFWX0NIQU5ORUxfTEFZT1VUXyogaW5pdGlhbGl6ZXJzOworKyAqIC0gd2l0aCBh IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBzdWNoIGFzIGF2X2NoYW5uZWxfbGF5b3V0X2RlZmF1bHQo KSwKKysgKiAgIGF2X2NoYW5uZWxfbGF5b3V0X2Zyb21fbWFzaygpIG9yIGF2X2NoYW5uZWxfbGF5 b3V0X2Zyb21fc3RyaW5nKCkuCisrICoKKysgKiBUaGUgY2hhbm5lbCBsYXlvdXQgbXVzdCBiZSB1 bmluaXRpYWxpemVkIHdpdGggYXZfY2hhbm5lbF9sYXlvdXRfdW5pbml0KCkKKysgKgorKyAqIENv cHlpbmcgYW4gQVZDaGFubmVsTGF5b3V0IHZpYSBhc3NpZ25pbmcgaXMgZm9yYmlkZGVuLAorKyAq IGF2X2NoYW5uZWxfbGF5b3V0X2NvcHkoKSBtdXN0IGJlIHVzZWQgaW5zdGVhZCAoYW5kIGl0cyBy ZXR1cm4gdmFsdWUgc2hvdWxkCisrICogYmUgY2hlY2tlZCkKKysgKgorKyAqIE5vIG5ldyBmaWVs ZHMgbWF5IGJlIGFkZGVkIHRvIGl0IHdpdGhvdXQgYSBtYWpvciB2ZXJzaW9uIGJ1bXAsIGV4Y2Vw dCBmb3IKKysgKiBuZXcgZWxlbWVudHMgb2YgdGhlIHVuaW9uIGZpdHRpbmcgaW4gc2l6ZW9mKHVp bnQ2NF90KS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNoYW5uZWxMYXlvdXQgeworKyAgICAv KioKKysgICAgICogQ2hhbm5lbCBvcmRlciB1c2VkIGluIHRoaXMgbGF5b3V0LgorKyAgICAgKiBU aGlzIGlzIGEgbWFuZGF0b3J5IGZpZWxkLgorKyAgICAgKi8KKysgICAgZW51bSBBVkNoYW5uZWxP cmRlciBvcmRlcjsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBjaGFubmVscyBpbiB0 aGlzIGxheW91dC4gTWFuZGF0b3J5IGZpZWxkLgorKyAgICAgKi8KKysgICAgaW50IG5iX2NoYW5u ZWxzOworKworKyAgICAvKioKKysgICAgICogRGV0YWlscyBhYm91dCB3aGljaCBjaGFubmVscyBh cmUgcHJlc2VudCBpbiB0aGlzIGxheW91dC4KKysgICAgICogRm9yIEFWX0NIQU5ORUxfT1JERVJf VU5TUEVDLCB0aGlzIGZpZWxkIGlzIHVuZGVmaW5lZCBhbmQgbXVzdCBub3QgYmUKKysgICAgICog dXNlZC4KKysgICAgICovCisrICAgIHVuaW9uIHsKKysgICAgICAgIC8qKgorKyAgICAgICAgICog VGhpcyBtZW1iZXIgbXVzdCBiZSB1c2VkIGZvciBBVl9DSEFOTkVMX09SREVSX05BVElWRSwgYW5k IG1heSBiZSB1c2VkCisrICAgICAgICAgKiBmb3IgQVZfQ0hBTk5FTF9PUkRFUl9BTUJJU09OSUMg dG8gc2lnbmFsIG5vbi1kaWVnZXRpYyBjaGFubmVscy4KKysgICAgICAgICAqIEl0IGlzIGEgYml0 bWFzaywgd2hlcmUgdGhlIHBvc2l0aW9uIG9mIGVhY2ggc2V0IGJpdCBtZWFucyB0aGF0IHRoZQor KyAgICAgICAgICogQVZDaGFubmVsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgcHJl c2VudC4KKysgICAgICAgICAqCisrICAgICAgICAgKiBJLmUuIHdoZW4gKG1hc2sgJiAoMSA8PCBB Vl9DSEFOX0ZPTykpIGlzIG5vbi16ZXJvLCB0aGVuIEFWX0NIQU5fRk9PCisrICAgICAgICAgKiBp cyBwcmVzZW50IGluIHRoZSBsYXlvdXQuIE90aGVyd2lzZSBpdCBpcyBub3QgcHJlc2VudC4KKysg ICAgICAgICAqCisrICAgICAgICAgKiBAbm90ZSB3aGVuIGEgY2hhbm5lbCBsYXlvdXQgdXNpbmcg YSBiaXRtYXNrIGlzIGNvbnN0cnVjdGVkIG9yCisrICAgICAgICAgKiBtb2RpZmllZCBtYW51YWxs eSAoaS5lLiAgbm90IHVzaW5nIGFueSBvZiB0aGUgYXZfY2hhbm5lbF9sYXlvdXRfKgorKyAgICAg ICAgICogZnVuY3Rpb25zKSwgdGhlIGNvZGUgZG9pbmcgaXQgbXVzdCBlbnN1cmUgdGhhdCB0aGUg bnVtYmVyIG9mIHNldCBiaXRzCisrICAgICAgICAgKiBpcyBlcXVhbCB0byBuYl9jaGFubmVscy4K KysgICAgICAgICAqLworKyAgICAgICAgdWludDY0X3QgbWFzazsKKysgICAgICAgIC8qKgorKyAg ICAgICAgICogVGhpcyBtZW1iZXIgbXVzdCBiZSB1c2VkIHdoZW4gdGhlIGNoYW5uZWwgb3JkZXIg aXMKKysgICAgICAgICAqIEFWX0NIQU5ORUxfT1JERVJfQ1VTVE9NLiBJdCBpcyBhIG5iX2NoYW5u ZWxzLXNpemVkIGFycmF5LCB3aXRoIGVhY2gKKysgICAgICAgICAqIGVsZW1lbnQgc2lnbmFsbGlu ZyB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFWQ2hhbm5lbCB3aXRoIHRoZQorKyAgICAgICAgICogY29y cmVzcG9uZGluZyB2YWx1ZSBpbiBtYXBbaV0uaWQuCisrICAgICAgICAgKgorKyAgICAgICAgICog SS5lLiB3aGVuIG1hcFtpXS5pZCBpcyBlcXVhbCB0byBBVl9DSEFOX0ZPTywgdGhlbiBBVl9DSF9G T08gaXMgdGhlCisrICAgICAgICAgKiBpLXRoIGNoYW5uZWwgaW4gdGhlIGF1ZGlvIGRhdGEuCisr ICAgICAgICAgKgorKyAgICAgICAgICogV2hlbiBtYXBbaV0uaWQgaXMgaW4gdGhlIHJhbmdlIGJl dHdlZW4gQVZfQ0hBTl9BTUJJU09OSUNfQkFTRSBhbmQKKysgICAgICAgICAqIEFWX0NIQU5fQU1C SVNPTklDX0VORCAoaW5jbHVzaXZlKSwgdGhlIGNoYW5uZWwgY29udGFpbnMgYW4gYW1iaXNvbmlj CisrICAgICAgICAgKiBjb21wb25lbnQgd2l0aCBBQ04gaW5kZXggKGFzIGRlZmluZWQgYWJvdmUp CisrICAgICAgICAgKiBuID0gbWFwW2ldLmlkIC0gQVZfQ0hBTl9BTUJJU09OSUNfQkFTRS4KKysg ICAgICAgICAqCisrICAgICAgICAgKiBtYXBbaV0ubmFtZSBtYXkgYmUgZmlsbGVkIHdpdGggYSAw LXRlcm1pbmF0ZWQgc3RyaW5nLCBpbiB3aGljaCBjYXNlCisrICAgICAgICAgKiBpdCB3aWxsIGJl IHVzZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGlkZW50aWZ5aW5nIHRoZSBjaGFubmVsIHdpdGggdGhl CisrICAgICAgICAgKiBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYmVsb3cuIE90aGVyd2lzZSBpdCBt dXN0IGJlIHplcm9lZC4KKysgICAgICAgICAqLworKyAgICAgICAgQVZDaGFubmVsQ3VzdG9tICpt YXA7CisrICAgIH0gdTsKKysKKysgICAgLyoqCisrICAgICAqIEZvciBzb21lIHByaXZhdGUgZGF0 YSBvZiB0aGUgdXNlci4KKysgICAgICovCisrICAgIHZvaWQgKm9wYXF1ZTsKKyt9IEFWQ2hhbm5l bExheW91dDsKKysKKysvKioKKysgKiBNYWNybyB0byBkZWZpbmUgbmF0aXZlIGNoYW5uZWwgbGF5 b3V0cworKyAqCisrICogQG5vdGUgVGhpcyBkb2Vzbid0IHVzZSBkZXNpZ25hdGVkIGluaXRpYWxp emVycyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEMrKyAxNyBhbmQgb2xkZXIuCisrICovCisrI2Rl ZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKG5iLCBtKSBcCisrICAgIHsgLyogLm9yZGVyICov IEFWX0NIQU5ORUxfT1JERVJfTkFUSVZFLCBcCisrICAgICAgLyogLm5iX2NoYW5uZWxzICovICAo bmIpLCBcCisrICAgICAgLyogLnUubWFzayAqLyB7IG0gfSwgXAorKyAgICAgIC8qIC5vcGFxdWUg Ki8gTlVMTCB9CisrCisrLyoqCisrICogQG5hbWUgQ29tbW9uIHByZS1kZWZpbmVkIGNoYW5uZWwg bGF5b3V0cworKyAqIEB7CisrICovCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9NT05PICAg ICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDEsICBBVl9DSF9MQVlPVVRfTU9OTykK KysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyAgICAgICAgICAgIEFWX0NIQU5ORUxf TEFZT1VUX01BU0soMiwgIEFWX0NIX0xBWU9VVF9TVEVSRU8pCisrI2RlZmluZSBBVl9DSEFOTkVM X0xBWU9VVF8yUE9JTlQxICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDMsICBBVl9D SF9MQVlPVVRfMlBPSU5UMSkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzJfMSAgICAgICAg ICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMywgIEFWX0NIX0xBWU9VVF8yXzEpCisrI2Rl ZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9TVVJST1VORCAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9V VF9NQVNLKDMsICBBVl9DSF9MQVlPVVRfU1VSUk9VTkQpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xB WU9VVF8zUE9JTlQxICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDQsICBBVl9DSF9M QVlPVVRfM1BPSU5UMSkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzRQT0lOVDAgICAgICAg ICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNCwgIEFWX0NIX0xBWU9VVF80UE9JTlQwKQorKyNk ZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNFBPSU5UMSAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlP VVRfTUFTSyg1LCAgQVZfQ0hfTEFZT1VUXzRQT0lOVDEpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xB WU9VVF8yXzIgICAgICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDQsICBBVl9DSF9M QVlPVVRfMl8yKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfUVVBRCAgICAgICAgICAgICAg QVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg0LCAgQVZfQ0hfTEFZT1VUX1FVQUQpCisrI2RlZmluZSBB Vl9DSEFOTkVMX0xBWU9VVF81UE9JTlQwICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNL KDUsICBBVl9DSF9MQVlPVVRfNVBPSU5UMCkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzVQ T0lOVDEgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNiwgIEFWX0NIX0xBWU9VVF81 UE9JTlQxKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMF9CQUNLICAgICAgQVZf Q0hBTk5FTF9MQVlPVVRfTUFTSyg1LCAgQVZfQ0hfTEFZT1VUXzVQT0lOVDBfQkFDSykKKysjZGVm aW5lIEFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDFfQkFDSyAgICAgIEFWX0NIQU5ORUxfTEFZT1VU X01BU0soNiwgIEFWX0NIX0xBWU9VVF81UE9JTlQxX0JBQ0spCisrI2RlZmluZSBBVl9DSEFOTkVM X0xBWU9VVF82UE9JTlQwICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDYsICBBVl9D SF9MQVlPVVRfNlBPSU5UMCkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzZQT0lOVDBfRlJP TlQgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNiwgIEFWX0NIX0xBWU9VVF82UE9JTlQwX0ZS T05UKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfM1BPSU5UMVBPSU5UMiAgICAgQVZfQ0hB Tk5FTF9MQVlPVVRfTUFTSyg2LCAgQVZfQ0hfTEFZT1VUXzNQT0lOVDFQT0lOVDIpCisrI2RlZmlu ZSBBVl9DSEFOTkVMX0xBWU9VVF9IRVhBR09OQUwgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9N QVNLKDYsICBBVl9DSF9MQVlPVVRfSEVYQUdPTkFMKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlP VVRfNlBPSU5UMSAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg3LCAgQVZfQ0hfTEFZ T1VUXzZQT0lOVDEpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF82UE9JTlQxX0JBQ0sgICAg ICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDcsICBBVl9DSF9MQVlPVVRfNlBPSU5UMV9CQUNLKQor KyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNlBPSU5UMV9GUk9OVCAgICAgQVZfQ0hBTk5FTF9M QVlPVVRfTUFTSyg3LCAgQVZfQ0hfTEFZT1VUXzZQT0lOVDFfRlJPTlQpCisrI2RlZmluZSBBVl9D SEFOTkVMX0xBWU9VVF83UE9JTlQwICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDcs ICBBVl9DSF9MQVlPVVRfN1BPSU5UMCkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQT0lO VDBfRlJPTlQgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNywgIEFWX0NIX0xBWU9VVF83UE9J TlQwX0ZST05UKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfN1BPSU5UMSAgICAgICAgICAg QVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg4LCAgQVZfQ0hfTEFZT1VUXzdQT0lOVDEpCisrI2RlZmlu ZSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxX1dJREUgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9N QVNLKDgsICBBVl9DSF9MQVlPVVRfN1BPSU5UMV9XSURFKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9M QVlPVVRfN1BPSU5UMV9XSURFX0JBQ0sgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg4LCAgQVZfQ0hf TEFZT1VUXzdQT0lOVDFfV0lERV9CQUNLKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNVBP SU5UMVBPSU5UMiAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg4LCAgQVZfQ0hfTEFZT1VUXzVQ T0lOVDFQT0lOVDIpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQxUE9JTlQyX0JB Q0sgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg4LCBBVl9DSF9MQVlPVVRfNVBPSU5UMVBPSU5UMl9C QUNLKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfT0NUQUdPTkFMICAgICAgICAgQVZfQ0hB Tk5FTF9MQVlPVVRfTUFTSyg4LCAgQVZfQ0hfTEFZT1VUX09DVEFHT05BTCkKKysjZGVmaW5lIEFW X0NIQU5ORUxfTEFZT1VUX0NVQkUgICAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0so OCwgIEFWX0NIX0xBWU9VVF9DVUJFKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5U MVBPSU5UNF9CQUNLIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMTAsIEFWX0NIX0xBWU9VVF81UE9J TlQxUE9JTlQ0X0JBQ0spCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxUE9JTlQy ICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDEwLCBBVl9DSF9MQVlPVVRfN1BPSU5UMVBPSU5U MikKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQT0lOVDFQT0lOVDRfQkFDSyBBVl9DSEFO TkVMX0xBWU9VVF9NQVNLKDEyLCBBVl9DSF9MQVlPVVRfN1BPSU5UMVBPSU5UNF9CQUNLKQorKyNk ZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfN1BPSU5UMlBPSU5UMyAgICAgQVZfQ0hBTk5FTF9MQVlP VVRfTUFTSygxMiwgQVZfQ0hfTEFZT1VUXzdQT0lOVDJQT0lOVDMpCisrI2RlZmluZSBBVl9DSEFO TkVMX0xBWU9VVF85UE9JTlQxUE9JTlQ0X0JBQ0sgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSygxNCwg QVZfQ0hfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDSykKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZ T1VUXzlQT0lOVDFQT0lOVDYgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMTYsIEFWX0NIX0xB WU9VVF85UE9JTlQxUE9JTlQ2KQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfSEVYQURFQ0FH T05BTCAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSygxNiwgQVZfQ0hfTEFZT1VUX0hFWEFERUNB R09OQUwpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9CSU5BVVJBTCAgICAgICAgICBBVl9D SEFOTkVMX0xBWU9VVF9NQVNLKDIsICBBVl9DSF9MQVlPVVRfQklOQVVSQUwpCisrI2RlZmluZSBB Vl9DSEFOTkVMX0xBWU9VVF9TVEVSRU9fRE9XTk1JWCAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNL KDIsICBBVl9DSF9MQVlPVVRfU1RFUkVPX0RPV05NSVgpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xB WU9VVF8yMlBPSU5UMiAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDI0LCBBVl9DSF9M QVlPVVRfMjJQT0lOVDIpCisrCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxX1RP UF9CQUNLICBBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQxUE9JTlQyX0JBQ0sKKysKKysjZGVmaW5l IEFWX0NIQU5ORUxfTEFZT1VUX0FNQklTT05JQ19GSVJTVF9PUkRFUiBcCisrICAgIHsgLyogLm9y ZGVyICovIEFWX0NIQU5ORUxfT1JERVJfQU1CSVNPTklDLCBcCisrICAgICAgLyogLm5iX2NoYW5u ZWxzICovIDQsIFwKKysgICAgICAvKiAudS5tYXNrICovIHsgMCB9LCBcCisrICAgICAgLyogLm9w YXF1ZSAqLyBOVUxMIH0KKysvKiogQH0gKi8KKysKKytzdHJ1Y3QgQVZCUHJpbnQ7CisrCisrLyoq CisrICogR2V0IGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIGluIGFuIGFiYnJldmlhdGVkIGZvcm0g ZGVzY3JpYmluZyBhIGdpdmVuIGNoYW5uZWwuCisrICogVGhpcyBpcyB0aGUgaW52ZXJzZSBmdW5j dGlvbiBvZiBAcmVmIGF2X2NoYW5uZWxfZnJvbV9zdHJpbmcoKS4KKysgKgorKyAqIEBwYXJhbSBi dWYgcHJlLWFsbG9jYXRlZCBidWZmZXIgd2hlcmUgdG8gcHV0IHRoZSBnZW5lcmF0ZWQgc3RyaW5n CisrICogQHBhcmFtIGJ1Zl9zaXplIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlci4KKysgKiBA cGFyYW0gY2hhbm5lbCB0aGUgQVZDaGFubmVsIHdob3NlIG5hbWUgdG8gZ2V0CisrICogQHJldHVy biBhbW91bnQgb2YgYnl0ZXMgbmVlZGVkIHRvIGhvbGQgdGhlIG91dHB1dCBzdHJpbmcsIG9yIGEg bmVnYXRpdmUgQVZFUlJPUgorKyAqICAgICAgICAgb24gZmFpbHVyZS4gSWYgdGhlIHJldHVybmVk IHZhbHVlIGlzIGJpZ2dlciB0aGFuIGJ1Zl9zaXplLCB0aGVuIHRoZQorKyAqICAgICAgICAgc3Ry aW5nIHdhcyB0cnVuY2F0ZWQuCisrICovCisraW50IGF2X2NoYW5uZWxfbmFtZShjaGFyICpidWYs IHNpemVfdCBidWZfc2l6ZSwgZW51bSBBVkNoYW5uZWwgY2hhbm5lbCk7CisrCisrLyoqCisrICog YnByaW50IHZhcmlhbnQgb2YgYXZfY2hhbm5lbF9uYW1lKCkuCisrICoKKysgKiBAbm90ZSB0aGUg c3RyaW5nIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJwcmludCBidWZmZXIuCisrICovCisrdm9p ZCBhdl9jaGFubmVsX25hbWVfYnByaW50KHN0cnVjdCBBVkJQcmludCAqYnAsIGVudW0gQVZDaGFu bmVsIGNoYW5uZWxfaWQpOworKworKy8qKgorKyAqIEdldCBhIGh1bWFuIHJlYWRhYmxlIHN0cmlu ZyBkZXNjcmliaW5nIGEgZ2l2ZW4gY2hhbm5lbC4KKysgKgorKyAqIEBwYXJhbSBidWYgcHJlLWFs bG9jYXRlZCBidWZmZXIgd2hlcmUgdG8gcHV0IHRoZSBnZW5lcmF0ZWQgc3RyaW5nCisrICogQHBh cmFtIGJ1Zl9zaXplIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlci4KKysgKiBAcGFyYW0gY2hh bm5lbCB0aGUgQVZDaGFubmVsIHdob3NlIGRlc2NyaXB0aW9uIHRvIGdldAorKyAqIEByZXR1cm4g YW1vdW50IG9mIGJ5dGVzIG5lZWRlZCB0byBob2xkIHRoZSBvdXRwdXQgc3RyaW5nLCBvciBhIG5l Z2F0aXZlIEFWRVJST1IKKysgKiAgICAgICAgIG9uIGZhaWx1cmUuIElmIHRoZSByZXR1cm5lZCB2 YWx1ZSBpcyBiaWdnZXIgdGhhbiBidWZfc2l6ZSwgdGhlbiB0aGUKKysgKiAgICAgICAgIHN0cmlu ZyB3YXMgdHJ1bmNhdGVkLgorKyAqLworK2ludCBhdl9jaGFubmVsX2Rlc2NyaXB0aW9uKGNoYXIg KmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBlbnVtIEFWQ2hhbm5lbCBjaGFubmVsKTsKKysKKysvKioK KysgKiBicHJpbnQgdmFyaWFudCBvZiBhdl9jaGFubmVsX2Rlc2NyaXB0aW9uKCkuCisrICoKKysg KiBAbm90ZSB0aGUgc3RyaW5nIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJwcmludCBidWZmZXIu CisrICovCisrdm9pZCBhdl9jaGFubmVsX2Rlc2NyaXB0aW9uX2JwcmludChzdHJ1Y3QgQVZCUHJp bnQgKmJwLCBlbnVtIEFWQ2hhbm5lbCBjaGFubmVsX2lkKTsKKysKKysvKioKKysgKiBUaGlzIGlz IHRoZSBpbnZlcnNlIGZ1bmN0aW9uIG9mIEByZWYgYXZfY2hhbm5lbF9uYW1lKCkuCisrICoKKysg KiBAcmV0dXJuIHRoZSBjaGFubmVsIHdpdGggdGhlIGdpdmVuIG5hbWUKKysgKiAgICAgICAgIEFW X0NIQU5fTk9ORSB3aGVuIG5hbWUgZG9lcyBub3QgaWRlbnRpZnkgYSBrbm93biBjaGFubmVsCisr ICovCisrZW51bSBBVkNoYW5uZWwgYXZfY2hhbm5lbF9mcm9tX3N0cmluZyhjb25zdCBjaGFyICpu YW1lKTsKKysKKysvKioKKysgKiBJbml0aWFsaXplIGEgY3VzdG9tIGNoYW5uZWwgbGF5b3V0IHdp dGggdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhbm5lbHMuCisrICogVGhlIGNoYW5uZWwgbWFw IHdpbGwgYmUgYWxsb2NhdGVkIGFuZCB0aGUgZGVzaWduYXRpb24gb2YgYWxsIGNoYW5uZWxzIHdp bGwKKysgKiBiZSBzZXQgdG8gQVZfQ0hBTl9VTktOT1dOLgorKyAqCisrICogVGhpcyBpcyBvbmx5 IGEgY29udmVuaWVuY2UgaGVscGVyIGZ1bmN0aW9uLCBhIGN1c3RvbSBjaGFubmVsIGxheW91dCBj YW4gYWxzbworKyAqIGJlIGNvbnN0cnVjdGVkIHdpdGhvdXQgdXNpbmcgdGhpcy4KKysgKgorKyAq IEBwYXJhbSBjaGFubmVsX2xheW91dCB0aGUgbGF5b3V0IHN0cnVjdHVyZSB0byBiZSBpbml0aWFs aXplZAorKyAqIEBwYXJhbSBuYl9jaGFubmVscyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisrICoK KysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcworKyAqICAgICAgICAgQVZFUlJPUihFSU5WQUwpIGlm IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgPD0gMAorKyAqICAgICAgICAgQVZFUlJPUihFTk9NRU0p IGlmIHRoZSBjaGFubmVsIG1hcCBjb3VsZCBub3QgYmUgYWxsb2NhdGVkCisrICovCisraW50IGF2 X2NoYW5uZWxfbGF5b3V0X2N1c3RvbV9pbml0KEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlv dXQsIGludCBuYl9jaGFubmVscyk7CisrCisrLyoqCisrICogSW5pdGlhbGl6ZSBhIG5hdGl2ZSBj aGFubmVsIGxheW91dCBmcm9tIGEgYml0bWFzayBpbmRpY2F0aW5nIHdoaWNoIGNoYW5uZWxzCisr ICogYXJlIHByZXNlbnQuCisrICoKKysgKiBAcGFyYW0gY2hhbm5lbF9sYXlvdXQgdGhlIGxheW91 dCBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKysgKiBAcGFyYW0gbWFzayBiaXRtYXNrIGRl c2NyaWJpbmcgdGhlIGNoYW5uZWwgbGF5b3V0CisrICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cworKyAqICAgICAgICAgQVZFUlJPUihFSU5WQUwpIGZvciBpbnZhbGlkIG1hc2sgdmFsdWVzCisr ICovCisraW50IGF2X2NoYW5uZWxfbGF5b3V0X2Zyb21fbWFzayhBVkNoYW5uZWxMYXlvdXQgKmNo YW5uZWxfbGF5b3V0LCB1aW50NjRfdCBtYXNrKTsKKysKKysvKioKKysgKiBJbml0aWFsaXplIGEg Y2hhbm5lbCBsYXlvdXQgZnJvbSBhIGdpdmVuIHN0cmluZyBkZXNjcmlwdGlvbi4KKysgKiBUaGUg aW5wdXQgc3RyaW5nIGNhbiBiZSByZXByZXNlbnRlZCBieToKKysgKiAgLSB0aGUgZm9ybWFsIGNo YW5uZWwgbGF5b3V0IG5hbWUgKHJldHVybmVkIGJ5IGF2X2NoYW5uZWxfbGF5b3V0X2Rlc2NyaWJl KCkpCisrICogIC0gc2luZ2xlIG9yIG11bHRpcGxlIGNoYW5uZWwgbmFtZXMgKHJldHVybmVkIGJ5 IGF2X2NoYW5uZWxfbmFtZSgpLCBlZy4gIkZMIiwKKysgKiAgICBvciBjb25jYXRlbmF0ZWQgd2l0 aCAiKyIsIGVhY2ggb3B0aW9uYWxseSBjb250YWluaW5nIGEgY3VzdG9tIG5hbWUgYWZ0ZXIKKysg KiAgICBhICJAIiwgZWcuICJGTEBMZWZ0K0ZSQFJpZ2h0K0xGRSIpCisrICogIC0gYSBkZWNpbWFs IG9yIGhleGFkZWNpbWFsIHZhbHVlIG9mIGEgbmF0aXZlIGNoYW5uZWwgbGF5b3V0IChlZy4gIjQi IG9yICIweDQiKQorKyAqICAtIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgd2l0aCBkZWZhdWx0IGxh eW91dCAoZWcuICI0YyIpCisrICogIC0gdGhlIG51bWJlciBvZiB1bm9yZGVyZWQgY2hhbm5lbHMg KGVnLiAiNEMiIG9yICI0IGNoYW5uZWxzIikKKysgKiAgLSB0aGUgYW1iaXNvbmljIG9yZGVyIGZv bGxvd2VkIGJ5IG9wdGlvbmFsIG5vbi1kaWVnZXRpYyBjaGFubmVscyAoZWcuCisrICogICAgImFt Ymlzb25pYyAyK3N0ZXJlbyIpCisrICogT24gZXJyb3IsIHRoZSBjaGFubmVsIGxheW91dCB3aWxs IHJlbWFpbiB1bmluaXRpYWxpemVkLCBidXQgbm90IG5lY2Vzc2FyaWx5CisrICogdW50b3VjaGVk LgorKyAqCisrICogQHBhcmFtIGNoYW5uZWxfbGF5b3V0IHVuaW5pdGlhbGl6ZWQgY2hhbm5lbCBs YXlvdXQgZm9yIHRoZSByZXN1bHQKKysgKiBAcGFyYW0gc3RyIHN0cmluZyBkZXNjcmliaW5nIHRo ZSBjaGFubmVsIGxheW91dAorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIHBhcnNpbmcgdGhlIGNo YW5uZWwgbGF5b3V0CisrICogICAgICAgICBBVkVSUk9SKEVJTlZBTCkgaWYgYW4gaW52YWxpZCBj aGFubmVsIGxheW91dCBzdHJpbmcgd2FzIHByb3ZpZGVkCisrICogICAgICAgICBBVkVSUk9SKEVO T01FTSkgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5CisrICovCisraW50IGF2X2NoYW5u ZWxfbGF5b3V0X2Zyb21fc3RyaW5nKEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlvdXQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cik7CisrCisr LyoqCisrICogR2V0IHRoZSBkZWZhdWx0IGNoYW5uZWwgbGF5b3V0IGZvciBhIGdpdmVuIG51bWJl ciBvZiBjaGFubmVscy4KKysgKgorKyAqIEBwYXJhbSBjaF9sYXlvdXQgdGhlIGxheW91dCBzdHJ1 Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKysgKiBAcGFyYW0gbmJfY2hhbm5lbHMgbnVtYmVyIG9m IGNoYW5uZWxzCisrICovCisrdm9pZCBhdl9jaGFubmVsX2xheW91dF9kZWZhdWx0KEFWQ2hhbm5l bExheW91dCAqY2hfbGF5b3V0LCBpbnQgbmJfY2hhbm5lbHMpOworKworKy8qKgorKyAqIEl0ZXJh dGUgb3ZlciBhbGwgc3RhbmRhcmQgY2hhbm5lbCBsYXlvdXRzLgorKyAqCisrICogQHBhcmFtIG9w YXF1ZSBhIHBvaW50ZXIgd2hlcmUgbGliYXZ1dGlsIHdpbGwgc3RvcmUgdGhlIGl0ZXJhdGlvbiBz dGF0ZS4gTXVzdAorKyAqICAgICAgICAgICAgICAgcG9pbnQgdG8gTlVMTCB0byBzdGFydCB0aGUg aXRlcmF0aW9uLgorKyAqCisrICogQHJldHVybiB0aGUgc3RhbmRhcmQgY2hhbm5lbCBsYXlvdXQg b3IgTlVMTCB3aGVuIHRoZSBpdGVyYXRpb24gaXMKKysgKiAgICAgICAgIGZpbmlzaGVkCisrICov CisrY29uc3QgQVZDaGFubmVsTGF5b3V0ICphdl9jaGFubmVsX2xheW91dF9zdGFuZGFyZCh2b2lk ICoqb3BhcXVlKTsKKysKKysvKioKKysgKiBGcmVlIGFueSBhbGxvY2F0ZWQgZGF0YSBpbiB0aGUg Y2hhbm5lbCBsYXlvdXQgYW5kIHJlc2V0IHRoZSBjaGFubmVsCisrICogY291bnQgdG8gMC4KKysg KgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91dCB0aGUgbGF5b3V0IHN0cnVjdHVyZSB0byBiZSB1 bmluaXRpYWxpemVkCisrICovCisrdm9pZCBhdl9jaGFubmVsX2xheW91dF91bmluaXQoQVZDaGFu bmVsTGF5b3V0ICpjaGFubmVsX2xheW91dCk7CisrCisrLyoqCisrICogTWFrZSBhIGNvcHkgb2Yg YSBjaGFubmVsIGxheW91dC4gVGhpcyBkaWZmZXJzIGZyb20ganVzdCBhc3NpZ25pbmcgc3JjIHRv IGRzdAorKyAqIGluIHRoYXQgaXQgYWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIG1hcCBmb3IgQVZf Q0hBTk5FTF9PUkRFUl9DVVNUT00uCisrICoKKysgKiBAbm90ZSB0aGUgZGVzdGluYXRpb24gY2hh bm5lbF9sYXlvdXQgd2lsbCBiZSBhbHdheXMgdW5pbml0aWFsaXplZCBiZWZvcmUgY29weS4KKysg KgorKyAqIEBwYXJhbSBkc3QgZGVzdGluYXRpb24gY2hhbm5lbCBsYXlvdXQKKysgKiBAcGFyYW0g c3JjIHNvdXJjZSBjaGFubmVsIGxheW91dAorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5l Z2F0aXZlIEFWRVJST1Igb24gZXJyb3IuCisrICovCisraW50IGF2X2NoYW5uZWxfbGF5b3V0X2Nv cHkoQVZDaGFubmVsTGF5b3V0ICpkc3QsIGNvbnN0IEFWQ2hhbm5lbExheW91dCAqc3JjKTsKKysK KysvKioKKysgKiBHZXQgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2hh bm5lbCBsYXlvdXQgcHJvcGVydGllcy4KKysgKiBUaGUgc3RyaW5nIHdpbGwgYmUgaW4gdGhlIHNh bWUgZm9ybWF0IHRoYXQgaXMgYWNjZXB0ZWQgYnkKKysgKiBAcmVmIGF2X2NoYW5uZWxfbGF5b3V0 X2Zyb21fc3RyaW5nKCksIGFsbG93aW5nIHRvIHJlYnVpbGQgdGhlIHNhbWUKKysgKiBjaGFubmVs IGxheW91dCwgZXhjZXB0IGZvciBvcGFxdWUgcG9pbnRlcnMuCisrICoKKysgKiBAcGFyYW0gY2hh bm5lbF9sYXlvdXQgY2hhbm5lbCBsYXlvdXQgdG8gYmUgZGVzY3JpYmVkCisrICogQHBhcmFtIGJ1 ZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciB3aGVyZSB0byBwdXQgdGhlIGdlbmVyYXRlZCBzdHJpbmcK KysgKiBAcGFyYW0gYnVmX3NpemUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyLgorKyAqIEBy ZXR1cm4gYW1vdW50IG9mIGJ5dGVzIG5lZWRlZCB0byBob2xkIHRoZSBvdXRwdXQgc3RyaW5nLCBv ciBhIG5lZ2F0aXZlIEFWRVJST1IKKysgKiAgICAgICAgIG9uIGZhaWx1cmUuIElmIHRoZSByZXR1 cm5lZCB2YWx1ZSBpcyBiaWdnZXIgdGhhbiBidWZfc2l6ZSwgdGhlbiB0aGUKKysgKiAgICAgICAg IHN0cmluZyB3YXMgdHJ1bmNhdGVkLgorKyAqLworK2ludCBhdl9jaGFubmVsX2xheW91dF9kZXNj cmliZShjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSk7CisrCisrLyoq CisrICogYnByaW50IHZhcmlhbnQgb2YgYXZfY2hhbm5lbF9sYXlvdXRfZGVzY3JpYmUoKS4KKysg KgorKyAqIEBub3RlIHRoZSBzdHJpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnByaW50IGJ1 ZmZlci4KKysgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBBVkVSUk9SIHZh bHVlIG9uIGZhaWx1cmUuCisrICovCisraW50IGF2X2NoYW5uZWxfbGF5b3V0X2Rlc2NyaWJlX2Jw cmludChjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEFWQlByaW50ICpicCk7CisrCisrLyoq CisrICogR2V0IHRoZSBjaGFubmVsIHdpdGggdGhlIGdpdmVuIGluZGV4IGluIGEgY2hhbm5lbCBs YXlvdXQuCisrICoKKysgKiBAcGFyYW0gY2hhbm5lbF9sYXlvdXQgaW5wdXQgY2hhbm5lbCBsYXlv dXQKKysgKiBAcGFyYW0gaWR4IGluZGV4IG9mIHRoZSBjaGFubmVsCisrICogQHJldHVybiBjaGFu bmVsIHdpdGggdGhlIGluZGV4IGlkeCBpbiBjaGFubmVsX2xheW91dCBvbiBzdWNjZXNzIG9yCisr ICogICAgICAgICBBVl9DSEFOX05PTkUgb24gZmFpbHVyZSAoaWYgaWR4IGlzIG5vdCB2YWxpZCBv ciB0aGUgY2hhbm5lbCBvcmRlciBpcworKyAqICAgICAgICAgdW5zcGVjaWZpZWQpCisrICovCisr ZW51bSBBVkNoYW5uZWwKKythdl9jaGFubmVsX2xheW91dF9jaGFubmVsX2Zyb21faW5kZXgoY29u c3QgQVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xheW91dCwgdW5zaWduZWQgaW50IGlkeCk7Cisr CisrLyoqCisrICogR2V0IHRoZSBpbmRleCBvZiBhIGdpdmVuIGNoYW5uZWwgaW4gYSBjaGFubmVs IGxheW91dC4gSW4gY2FzZSBtdWx0aXBsZQorKyAqIGNoYW5uZWxzIGFyZSBmb3VuZCwgb25seSB0 aGUgZmlyc3QgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZC4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVs X2xheW91dCBpbnB1dCBjaGFubmVsIGxheW91dAorKyAqIEBwYXJhbSBjaGFubmVsIHRoZSBjaGFu bmVsIHdob3NlIGluZGV4IHRvIG9idGFpbgorKyAqIEByZXR1cm4gaW5kZXggb2YgY2hhbm5lbCBp biBjaGFubmVsX2xheW91dCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGlmCisrICog ICAgICAgICBjaGFubmVsIGlzIG5vdCBwcmVzZW50IGluIGNoYW5uZWxfbGF5b3V0LgorKyAqLwor K2ludCBhdl9jaGFubmVsX2xheW91dF9pbmRleF9mcm9tX2NoYW5uZWwoY29uc3QgQVZDaGFubmVs TGF5b3V0ICpjaGFubmVsX2xheW91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gQVZDaGFubmVsIGNoYW5uZWwpOworKworKy8qKgorKyAqIEdldCB0aGUg aW5kZXggaW4gYSBjaGFubmVsIGxheW91dCBvZiBhIGNoYW5uZWwgZGVzY3JpYmVkIGJ5IHRoZSBn aXZlbiBzdHJpbmcuCisrICogSW4gY2FzZSBtdWx0aXBsZSBjaGFubmVscyBhcmUgZm91bmQsIG9u bHkgdGhlIGZpcnN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQuCisrICoKKysgKiBUaGlzIGZ1bmN0 aW9uIGFjY2VwdHMgY2hhbm5lbCBuYW1lcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMKKysgKiBAcmVm IGF2X2NoYW5uZWxfZnJvbV9zdHJpbmcoKS4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91 dCBpbnB1dCBjaGFubmVsIGxheW91dAorKyAqIEBwYXJhbSBuYW1lIHN0cmluZyBkZXNjcmliaW5n IHRoZSBjaGFubmVsIHdob3NlIGluZGV4IHRvIG9idGFpbgorKyAqIEByZXR1cm4gYSBjaGFubmVs IGluZGV4IGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gc3RyaW5nLCBvciBhIG5lZ2F0aXZlIEFWRVJS T1IKKysgKiAgICAgICAgIHZhbHVlLgorKyAqLworK2ludCBhdl9jaGFubmVsX2xheW91dF9pbmRl eF9mcm9tX3N0cmluZyhjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsK KysKKysvKioKKysgKiBHZXQgYSBjaGFubmVsIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gc3RyaW5n LgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGNoYW5uZWwgbmFtZXMgaW4gdGhlIHNh bWUgZm9ybWF0IGFzCisrICogQHJlZiBhdl9jaGFubmVsX2Zyb21fc3RyaW5nKCkuCisrICoKKysg KiBAcGFyYW0gY2hhbm5lbF9sYXlvdXQgaW5wdXQgY2hhbm5lbCBsYXlvdXQKKysgKiBAcGFyYW0g bmFtZSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2hhbm5lbCB0byBvYnRhaW4KKysgKiBAcmV0dXJu IGEgY2hhbm5lbCBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIHN0cmluZyBpbiBjaGFubmVsX2xheW91 dCBvbiBzdWNjZXNzCisrICogICAgICAgICBvciBBVl9DSEFOX05PTkUgb24gZmFpbHVyZSAoaWYg dGhlIHN0cmluZyBpcyBub3QgdmFsaWQgb3IgdGhlIGNoYW5uZWwKKysgKiAgICAgICAgIG9yZGVy IGlzIHVuc3BlY2lmaWVkKQorKyAqLworK2VudW0gQVZDaGFubmVsCisrYXZfY2hhbm5lbF9sYXlv dXRfY2hhbm5lbF9mcm9tX3N0cmluZyhjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5 b3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bmFtZSk7CisrCisrLyoqCisrICogRmluZCBvdXQgd2hhdCBjaGFubmVscyBmcm9tIGEgZ2l2ZW4g c2V0IGFyZSBwcmVzZW50IGluIGEgY2hhbm5lbCBsYXlvdXQsCisrICogd2l0aG91dCByZWdhcmQg Zm9yIHRoZWlyIHBvc2l0aW9ucy4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91dCBpbnB1 dCBjaGFubmVsIGxheW91dAorKyAqIEBwYXJhbSBtYXNrIGEgY29tYmluYXRpb24gb2YgQVZfQ0hf KiByZXByZXNlbnRpbmcgYSBzZXQgb2YgY2hhbm5lbHMKKysgKiBAcmV0dXJuIGEgYml0ZmllbGQg cmVwcmVzZW50aW5nIGFsbCB0aGUgY2hhbm5lbHMgZnJvbSBtYXNrIHRoYXQgYXJlIHByZXNlbnQK KysgKiAgICAgICAgIGluIGNoYW5uZWxfbGF5b3V0CisrICovCisrdWludDY0X3QgYXZfY2hhbm5l bF9sYXlvdXRfc3Vic2V0KGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlvdXQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2spOworKworKy8q KgorKyAqIENoZWNrIHdoZXRoZXIgYSBjaGFubmVsIGxheW91dCBpcyB2YWxpZCwgaS5lLiBjYW4g cG9zc2libHkgZGVzY3JpYmUgYXVkaW8KKysgKiBkYXRhLgorKyAqCisrICogQHBhcmFtIGNoYW5u ZWxfbGF5b3V0IGlucHV0IGNoYW5uZWwgbGF5b3V0CisrICogQHJldHVybiAxIGlmIGNoYW5uZWxf bGF5b3V0IGlzIHZhbGlkLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQgYXZfY2hhbm5lbF9sYXlv dXRfY2hlY2soY29uc3QgQVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xheW91dCk7CisrCisrLyoq CisrICogQ2hlY2sgd2hldGhlciB0d28gY2hhbm5lbCBsYXlvdXRzIGFyZSBzZW1hbnRpY2FsbHkg dGhlIHNhbWUsIGkuZS4gdGhlIHNhbWUKKysgKiBjaGFubmVscyBhcmUgcHJlc2VudCBvbiB0aGUg c2FtZSBwb3NpdGlvbnMgaW4gYm90aC4KKysgKgorKyAqIElmIG9uZSBvZiB0aGUgY2hhbm5lbCBs YXlvdXRzIGlzIEFWX0NIQU5ORUxfT1JERVJfVU5TUEVDLCB3aGlsZSB0aGUgb3RoZXIgaXMKKysg KiBub3QsIHRoZXkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5lcXVhbC4gSWYgYm90aCBhcmUgQVZf Q0hBTk5FTF9PUkRFUl9VTlNQRUMsCisrICogdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZmYg dGhlIGNoYW5uZWwgY291bnRzIGFyZSB0aGUgc2FtZSBpbiBib3RoLgorKyAqCisrICogQHBhcmFt IGNobCBpbnB1dCBjaGFubmVsIGxheW91dAorKyAqIEBwYXJhbSBjaGwxIGlucHV0IGNoYW5uZWwg bGF5b3V0CisrICogQHJldHVybiAwIGlmIGNobCBhbmQgY2hsMSBhcmUgZXF1YWwsIDEgaWYgdGhl eSBhcmUgbm90IGVxdWFsLiBBIG5lZ2F0aXZlCisrICogICAgICAgICBBVkVSUk9SIGNvZGUgaWYg b25lIG9yIGJvdGggYXJlIGludmFsaWQuCisrICovCisraW50IGF2X2NoYW5uZWxfbGF5b3V0X2Nv bXBhcmUoY29uc3QgQVZDaGFubmVsTGF5b3V0ICpjaGwsIGNvbnN0IEFWQ2hhbm5lbExheW91dCAq Y2hsMSk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBvcmRlciBpZiB0aGUgbGF5b3V0IGlzIG4t dGggb3JkZXIgc3RhbmRhcmQtb3JkZXIgYW1iaXNvbmljLgorKyAqIFRoZSBwcmVzZW5jZSBvZiBv cHRpb25hbCBleHRyYSBub24tZGllZ2V0aWMgY2hhbm5lbHMgYXQgdGhlIGVuZCBpcyBub3QgdGFr ZW4KKysgKiBpbnRvIGFjY291bnQuCisrICoKKysgKiBAcGFyYW0gY2hhbm5lbF9sYXlvdXQgaW5w dXQgY2hhbm5lbCBsYXlvdXQKKysgKiBAcmV0dXJuIHRoZSBvcmRlciBvZiB0aGUgbGF5b3V0LCBh IG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKyAqLworK2ludCBhdl9jaGFubmVsX2xh eW91dF9hbWJpc29uaWNfb3JkZXIoY29uc3QgQVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xheW91 dCk7CisrCisrLyoqCisrICogVGhlIGNvbnZlcnNpb24gbXVzdCBiZSBsb3NzbGVzcy4KKysgKi8K KysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX1JFVFlQRV9GTEFHX0xPU1NMRVNTICgxIDw8IDAp CisrCisrLyoqCisrICogVGhlIHNwZWNpZmllZCByZXR5cGUgdGFyZ2V0IG9yZGVyIGlzIGlnbm9y ZWQgYW5kIHRoZSBzaW1wbGVzdCBwb3NzaWJsZQorKyAqIChjYW5vbmljYWwpIG9yZGVyIGlzIHVz ZWQgZm9yIHdoaWNoIHRoZSBpbnB1dCBsYXlvdXQgY2FuIGJlIGxvc3NsZXNzeQorKyAqIHJlcHJl c2VudGVkLgorKyAqLworKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfUkVUWVBFX0ZMQUdfQ0FO T05JQ0FMICgxIDw8IDEpCisrCisrLyoqCisrICogQ2hhbmdlIHRoZSBBVkNoYW5uZWxPcmRlciBv ZiBhIGNoYW5uZWwgbGF5b3V0LgorKyAqCisrICogQ2hhbmdlIG9mIEFWQ2hhbm5lbE9yZGVyIGNh biBiZSBlaXRoZXIgbG9zc2xlc3Mgb3IgbG9zc3kuIEluIGNhc2Ugb2YgYQorKyAqIGxvc3NsZXNz IGNvbnZlcnNpb24gYWxsIHRoZSBjaGFubmVsIGRlc2lnbmF0aW9ucyBhbmQgdGhlIGFzc29jaWF0 ZWQgY2hhbm5lbAorKyAqIG5hbWVzIChpZiBhbnkpIGFyZSBrZXB0LiBPbiBhIGxvc3N5IGNvbnZl cnNpb24gdGhlIGNoYW5uZWwgbmFtZXMgYW5kIGNoYW5uZWwKKysgKiBkZXNpZ25hdGlvbnMgbWln aHQgYmUgbG9zdCBkZXBlbmRpbmcgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGVzaXJlZAor KyAqIEFWQ2hhbm5lbE9yZGVyLiBOb3RlIHRoYXQgc29tZSBjb252ZXJzaW9ucyBhcmUgc2ltcGx5 IG5vdCBwb3NzaWJsZSBpbiB3aGljaAorKyAqIGNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEFW RVJST1IoRU5PU1lTKS4KKysgKgorKyAqIFRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnMgYXJlIHN1 cHBvcnRlZDoKKysgKgorKyAqIEFueSAgICAgICAtPiBDdXN0b20gICAgIDogQWx3YXlzIHBvc3Np YmxlLCBhbHdheXMgbG9zc2xlc3MuCisrICogQW55ICAgICAgIC0+IFVuc3BlY2lmaWVkOiBBbHdh eXMgcG9zc2libGUsIGxvc3NsZXNzIGlmIGNoYW5uZWwgZGVzaWduYXRpb25zCisrICogICBhcmUg YWxsIHVua25vd24gYW5kIGNoYW5uZWwgbmFtZXMgYXJlIG5vdCB1c2VkLCBsb3NzeSBvdGhlcndp c2UuCisrICogQ3VzdG9tICAgIC0+IEFtYmlzb25pYyAgOiBQb3NzaWJsZSBpZiBpdCBjb250YWlu cyBhbWJpc29uaWMgY2hhbm5lbHMgd2l0aAorKyAqICAgb3B0aW9uYWwgbm9uLWRpZWdldGljIGNo YW5uZWxzIGluIHRoZSBlbmQuIExvc3N5IGlmIHRoZSBjaGFubmVscyBoYXZlCisrICogICBjdXN0 b20gbmFtZXMsIGxvc3NsZXNzIG90aGVyd2lzZS4KKysgKiBDdXN0b20gICAgLT4gTmF0aXZlICAg ICA6IFBvc3NpYmxlIGlmIGl0IGNvbnRhaW5zIG5hdGl2ZSBjaGFubmVscyBpbiBuYXRpdmUKKysg KiAgICAgb3JkZXIuIExvc3N5IGlmIHRoZSBjaGFubmVscyBoYXZlIGN1c3RvbSBuYW1lcywgbG9z c2xlc3Mgb3RoZXJ3aXNlLgorKyAqCisrICogT24gZXJyb3IgdGhpcyBmdW5jdGlvbiBrZWVwcyB0 aGUgb3JpZ2luYWwgY2hhbm5lbCBsYXlvdXQgdW50b3VjaGVkLgorKyAqCisrICogQHBhcmFtIGNo YW5uZWxfbGF5b3V0IGNoYW5uZWwgbGF5b3V0IHdoaWNoIHdpbGwgYmUgY2hhbmdlZAorKyAqIEBw YXJhbSBvcmRlciB0aGUgZGVzaXJlZCBjaGFubmVsIGxheW91dCBvcmRlcgorKyAqIEBwYXJhbSBm bGFncyBhIGNvbWJpbmF0aW9uIG9mIEFWX0NIQU5ORUxfTEFZT1VUX1JFVFlQRV9GTEFHXyogY29u c3RhbnRzCisrICogQHJldHVybiAwIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsIGFu ZCBsb3NzbGVzcyBvciBpZiB0aGUgY2hhbm5lbAorKyAqICAgICAgICAgICBsYXlvdXQgd2FzIGFs cmVhZHkgaW4gdGhlIGRlc2lyZWQgb3JkZXIKKysgKiAgICAgICAgID4wIGlmIHRoZSBjb252ZXJz aW9uIHdhcyBzdWNjZXNzZnVsIGJ1dCBsb3NzeQorKyAqICAgICAgICAgQVZFUlJPUihFTk9TWVMp IGlmIHRoZSBjb252ZXJzaW9uIHdhcyBub3QgcG9zc2libGUgKG9yIHdvdWxkIGJlCisrICogICAg ICAgICAgIGxvc3N5IGFuZCBBVl9DSEFOTkVMX0xBWU9VVF9SRVRZUEVfRkxBR19MT1NTTEVTUyB3 YXMgc3BlY2lmaWVkKQorKyAqICAgICAgICAgQVZFUlJPUihFSU5WQUwpLCBBVkVSUk9SKEVOT01F TSkgb24gZXJyb3IKKysgKi8KKytpbnQgYXZfY2hhbm5lbF9sYXlvdXRfcmV0eXBlKEFWQ2hhbm5l bExheW91dCAqY2hhbm5lbF9sYXlvdXQsIGVudW0gQVZDaGFubmVsT3JkZXIgb3JkZXIsIGludCBm bGFncyk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElMX0NIQU5O RUxfTEFZT1VUX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9jb21tb24uaC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 dXRpbC9jb21tb24uaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9jb21tb24uaC5mZm1wZWc5CTIwMjYtMDktMDcg MTI6MjM6NDcuNjc2NTAwMDE0ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdv cmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2NvbW1vbi5oCTIwMjYtMDkt MDcgMTI6MjM6NDcuNjc2Mzk4NzgzICswMjAwCitAQCAtMCwwICsxLDU3OCBAQAorKy8qCisrICog Y29weXJpZ2h0IChjKSAyMDA2IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+ CisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisr ICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8K KysKKysvKioKKysgKiBAZmlsZQorKyAqIGNvbW1vbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgQVBJ IGhlYWRlcgorKyAqLworKworKyNpZm5kZWYgQVZVVElMX0NPTU1PTl9ICisrI2RlZmluZSBBVlVU SUxfQ09NTU9OX0gKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgIWRlZmluZWQoX19T VERDX0NPTlNUQU5UX01BQ1JPUykgJiYgIWRlZmluZWQoVUlOVDY0X0MpCisrI2Vycm9yIG1pc3Np bmcgLURfX1NURENfQ09OU1RBTlRfTUFDUk9TIC8gI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFD Uk9TCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGludHR5cGVz Lmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUg PHN0ZGludC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIKKysjaW5jbHVk ZSAiZXJyb3IuaCIKKysjaW5jbHVkZSAibWFjcm9zLmgiCisrI2luY2x1ZGUgInZlcnNpb24uaCIK KysKKysjaWZkZWYgSEFWRV9BVl9DT05GSUdfSAorKyMgICBpbmNsdWRlICJjb25maWcuaCIKKysj ICAgaW5jbHVkZSAiaW50bWF0aC5oIgorKyMgICBpbmNsdWRlICJpbnRlcm5hbC5oIgorKyNlbHNl CisrIyAgIGluY2x1ZGUgIm1lbS5oIgorKyNlbmRpZiAvKiBIQVZFX0FWX0NPTkZJR19IICovCisr CisrLy9yb3VuZGVkIGRpdmlzaW9uICYgc2hpZnQKKysjZGVmaW5lIFJTSElGVChhLGIpICgoYSkg PiAwID8gKChhKSArICgoMTw8KGIpKT4+MSkpPj4oYikgOiAoKGEpICsgKCgxPDwoYikpPj4xKS0x KT4+KGIpKQorKy8qIGFzc3VtZSBiPjAgKi8KKysjZGVmaW5lIFJPVU5ERURfRElWKGEsYikgKCgo YSk+PTAgPyAoYSkgKyAoKGIpPj4xKSA6IChhKSAtICgoYik+PjEpKS8oYikpCisrLyogRmFzdCBh LygxPDxiKSByb3VuZGVkIHRvd2FyZCAraW5mLiBBc3N1bWUgYT49MCBhbmQgYj49MCAqLworKyNk ZWZpbmUgQVZfQ0VJTF9SU0hJRlQoYSxiKSAoIWF2X2J1aWx0aW5fY29uc3RhbnRfcChiKSA/IC0o KC0oYSkpID4+IChiKSkgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6ICgoYSkgKyAoMTw8KGIpKSAtIDEpID4+IChiKSkKKysvKiBCYWNr d2FyZHMgY29tcGF0LiAqLworKyNkZWZpbmUgRkZfQ0VJTF9SU0hJRlQgQVZfQ0VJTF9SU0hJRlQK KysKKysjZGVmaW5lIEZGVURJVihhLGIpICgoKGEpPjAgPyhhKTooYSktKGIpKzEpIC8gKGIpKQor KyNkZWZpbmUgRkZVTU9EKGEsYikgKChhKS0oYikqRkZVRElWKGEsYikpCisrCisrLyoqCisrICog QWJzb2x1dGUgdmFsdWUsIE5vdGUsIElOVF9NSU4gLyBJTlQ2NF9NSU4gcmVzdWx0IGluIHVuZGVm aW5lZCBiZWhhdmlvciBhcyB0aGV5CisrICogYXJlIG5vdCByZXByZXNlbnRhYmxlIGFzIGFic29s dXRlIHZhbHVlcyBvZiB0aGVpciB0eXBlLiBUaGlzIGlzIHRoZSBzYW1lCisrICogYXMgd2l0aCAq YWJzKCkKKysgKiBAc2VlIEZGTkFCUygpCisrICovCisrI2RlZmluZSBGRkFCUyhhKSAoKGEpID49 IDAgPyAoYSkgOiAoLShhKSkpCisrI2RlZmluZSBGRlNJR04oYSkgKChhKSA+IDAgPyAxIDogLTEp CisrCisrLyoqCisrICogTmVnYXRpdmUgQWJzb2x1dGUgdmFsdWUuCisrICogdGhpcyB3b3JrcyBm b3IgYWxsIGludGVnZXJzIG9mIGFsbCB0eXBlcy4KKysgKiBBcyB3aXRoIG1hbnkgbWFjcm9zLCB0 aGlzIGV2YWx1YXRlcyBpdHMgYXJndW1lbnQgdHdpY2UsIGl0IHRodXMgbXVzdCBub3QgaGF2ZQor KyAqIGEgc2lkZWVmZmVjdCwgdGhhdCBpcyBGRk5BQlMoeCsrKSBoYXMgdW5kZWZpbmVkIGJlaGF2 aW9yLgorKyAqLworKyNkZWZpbmUgRkZOQUJTKGEpICgoYSkgPD0gMCA/IChhKSA6ICgtKGEpKSkK KysKKysvKioKKysgKiBVbnNpZ25lZCBBYnNvbHV0ZSB2YWx1ZS4KKysgKiBUaGlzIHRha2VzIHRo ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhIHNpZ25lZCBpbnQgYW5kIHJldHVybnMgaXQgYXMgYSB1bnNp Z25lZC4KKysgKiBUaGlzIGFsc28gd29ya3Mgd2l0aCBJTlRfTUlOIHdoaWNoIHdvdWxkIG90aGVy d2lzZSBub3QgYmUgcmVwcmVzZW50YWJsZQorKyAqIEFzIHdpdGggbWFueSBtYWNyb3MsIHRoaXMg ZXZhbHVhdGVzIGl0cyBhcmd1bWVudCB0d2ljZS4KKysgKi8KKysjZGVmaW5lIEZGQUJTVShhKSAo KGEpIDw9IDAgPyAtKHVuc2lnbmVkKShhKSA6ICh1bnNpZ25lZCkoYSkpCisrI2RlZmluZSBGRkFC UzY0VShhKSAoKGEpIDw9IDAgPyAtKHVpbnQ2NF90KShhKSA6ICh1aW50NjRfdCkoYSkpCisrCisr LyogbWlzYyBtYXRoIGZ1bmN0aW9ucyAqLworKworKyNpZm5kZWYgYXZfY2VpbF9sb2cyCisrIyAg IGRlZmluZSBhdl9jZWlsX2xvZzIgICAgIGF2X2NlaWxfbG9nMl9jCisrI2VuZGlmCisrI2lmbmRl ZiBhdl9jbGlwCisrIyAgIGRlZmluZSBhdl9jbGlwICAgICAgICAgIGF2X2NsaXBfYworKyNlbmRp ZgorKyNpZm5kZWYgYXZfY2xpcDY0CisrIyAgIGRlZmluZSBhdl9jbGlwNjQgICAgICAgIGF2X2Ns aXA2NF9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwX3VpbnQ4CisrIyAgIGRlZmluZSBhdl9j bGlwX3VpbnQ4ICAgIGF2X2NsaXBfdWludDhfYworKyNlbmRpZgorKyNpZm5kZWYgYXZfY2xpcF9p bnQ4CisrIyAgIGRlZmluZSBhdl9jbGlwX2ludDggICAgIGF2X2NsaXBfaW50OF9jCisrI2VuZGlm CisrI2lmbmRlZiBhdl9jbGlwX3VpbnQxNgorKyMgICBkZWZpbmUgYXZfY2xpcF91aW50MTYgICBh dl9jbGlwX3VpbnQxNl9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwX2ludDE2CisrIyAgIGRl ZmluZSBhdl9jbGlwX2ludDE2ICAgIGF2X2NsaXBfaW50MTZfYworKyNlbmRpZgorKyNpZm5kZWYg YXZfY2xpcGxfaW50MzIKKysjICAgZGVmaW5lIGF2X2NsaXBsX2ludDMyICAgYXZfY2xpcGxfaW50 MzJfYworKyNlbmRpZgorKyNpZm5kZWYgYXZfY2xpcF9pbnRwMgorKyMgICBkZWZpbmUgYXZfY2xp cF9pbnRwMiAgICBhdl9jbGlwX2ludHAyX2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBfdWlu dHAyCisrIyAgIGRlZmluZSBhdl9jbGlwX3VpbnRwMiAgIGF2X2NsaXBfdWludHAyX2MKKysjZW5k aWYKKysjaWZuZGVmIGF2X3NhdF9hZGQzMgorKyMgICBkZWZpbmUgYXZfc2F0X2FkZDMyICAgICBh dl9zYXRfYWRkMzJfYworKyNlbmRpZgorKyNpZm5kZWYgYXZfc2F0X2RhZGQzMgorKyMgICBkZWZp bmUgYXZfc2F0X2RhZGQzMiAgICBhdl9zYXRfZGFkZDMyX2MKKysjZW5kaWYKKysjaWZuZGVmIGF2 X3NhdF9zdWIzMgorKyMgICBkZWZpbmUgYXZfc2F0X3N1YjMyICAgICBhdl9zYXRfc3ViMzJfYwor KyNlbmRpZgorKyNpZm5kZWYgYXZfc2F0X2RzdWIzMgorKyMgICBkZWZpbmUgYXZfc2F0X2RzdWIz MiAgICBhdl9zYXRfZHN1YjMyX2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X3NhdF9hZGQ2NAorKyMg ICBkZWZpbmUgYXZfc2F0X2FkZDY0ICAgICBhdl9zYXRfYWRkNjRfYworKyNlbmRpZgorKyNpZm5k ZWYgYXZfc2F0X3N1YjY0CisrIyAgIGRlZmluZSBhdl9zYXRfc3ViNjQgICAgIGF2X3NhdF9zdWI2 NF9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwZgorKyMgICBkZWZpbmUgYXZfY2xpcGYgICAg ICAgICBhdl9jbGlwZl9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwZAorKyMgICBkZWZpbmUg YXZfY2xpcGQgICAgICAgICBhdl9jbGlwZF9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl96ZXJvX2V4 dGVuZAorKyMgICBkZWZpbmUgYXZfemVyb19leHRlbmQgICBhdl96ZXJvX2V4dGVuZF9jCisrI2Vu ZGlmCisrI2lmbmRlZiBhdl9wb3Bjb3VudAorKyMgICBkZWZpbmUgYXZfcG9wY291bnQgICAgICBh dl9wb3Bjb3VudF9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9wb3Bjb3VudDY0CisrIyAgIGRlZmlu ZSBhdl9wb3Bjb3VudDY0ICAgIGF2X3BvcGNvdW50NjRfYworKyNlbmRpZgorKyNpZm5kZWYgYXZf cGFyaXR5CisrIyAgIGRlZmluZSBhdl9wYXJpdHkgICAgICAgIGF2X3Bhcml0eV9jCisrI2VuZGlm CisrCisrI2lmbmRlZiBhdl9sb2cyCisrYXZfY29uc3QgaW50IGF2X2xvZzIodW5zaWduZWQgdik7 CisrI2VuZGlmCisrCisrI2lmbmRlZiBhdl9sb2cyXzE2Yml0CisrYXZfY29uc3QgaW50IGF2X2xv ZzJfMTZiaXQodW5zaWduZWQgdik7CisrI2VuZGlmCisrCisrLyoqCisrICogQ2xpcCBhIHNpZ25l ZCBpbnRlZ2VyIHZhbHVlIGludG8gdGhlIGFtaW4tYW1heCByYW5nZS4KKysgKiBAcGFyYW0gYSB2 YWx1ZSB0byBjbGlwCisrICogQHBhcmFtIGFtaW4gbWluaW11bSB2YWx1ZSBvZiB0aGUgY2xpcCBy YW5nZQorKyAqIEBwYXJhbSBhbWF4IG1heGltdW0gdmFsdWUgb2YgdGhlIGNsaXAgcmFuZ2UKKysg KiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUKKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBh dl9jb25zdCBpbnQgYXZfY2xpcF9jKGludCBhLCBpbnQgYW1pbiwgaW50IGFtYXgpCisreworKyNp ZiBkZWZpbmVkKEhBVkVfQVZfQ09ORklHX0gpICYmIGRlZmluZWQoQVNTRVJUX0xFVkVMKSAmJiBB U1NFUlRfTEVWRUwgPj0gMgorKyAgICBpZiAoYW1pbiA+IGFtYXgpIGFib3J0KCk7CisrI2VuZGlm CisrICAgIGlmICAgICAgKGEgPCBhbWluKSByZXR1cm4gYW1pbjsKKysgICAgZWxzZSBpZiAoYSA+ IGFtYXgpIHJldHVybiBhbWF4OworKyAgICBlbHNlICAgICAgICAgICAgICAgcmV0dXJuIGE7Cisr fQorKworKy8qKgorKyAqIENsaXAgYSBzaWduZWQgNjRiaXQgaW50ZWdlciB2YWx1ZSBpbnRvIHRo ZSBhbWluLWFtYXggcmFuZ2UuCisrICogQHBhcmFtIGEgdmFsdWUgdG8gY2xpcAorKyAqIEBwYXJh bSBhbWluIG1pbmltdW0gdmFsdWUgb2YgdGhlIGNsaXAgcmFuZ2UKKysgKiBAcGFyYW0gYW1heCBt YXhpbXVtIHZhbHVlIG9mIHRoZSBjbGlwIHJhbmdlCisrICogQHJldHVybiBjbGlwcGVkIHZhbHVl CisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgaW50NjRfdCBhdl9jbGlw NjRfYyhpbnQ2NF90IGEsIGludDY0X3QgYW1pbiwgaW50NjRfdCBhbWF4KQorK3sKKysjaWYgZGVm aW5lZChIQVZFX0FWX0NPTkZJR19IKSAmJiBkZWZpbmVkKEFTU0VSVF9MRVZFTCkgJiYgQVNTRVJU X0xFVkVMID49IDIKKysgICAgaWYgKGFtaW4gPiBhbWF4KSBhYm9ydCgpOworKyNlbmRpZgorKyAg ICBpZiAgICAgIChhIDwgYW1pbikgcmV0dXJuIGFtaW47CisrICAgIGVsc2UgaWYgKGEgPiBhbWF4 KSByZXR1cm4gYW1heDsKKysgICAgZWxzZSAgICAgICAgICAgICAgIHJldHVybiBhOworK30KKysK KysvKioKKysgKiBDbGlwIGEgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgMC0yNTUgcmFu Z2UuCisrICogQHBhcmFtIGEgdmFsdWUgdG8gY2xpcAorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1 ZQorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IHVpbnQ4X3QgYXZfY2xp cF91aW50OF9jKGludCBhKQorK3sKKysgICAgaWYgKGEmKH4weEZGKSkgcmV0dXJuICh+YSk+PjMx OworKyAgICBlbHNlICAgICAgICAgICByZXR1cm4gYTsKKyt9CisrCisrLyoqCisrICogQ2xpcCBh IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGludG8gdGhlIC0xMjgsMTI3IHJhbmdlLgorKyAqIEBwYXJh bSBhIHZhbHVlIHRvIGNsaXAKKysgKiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUKKysgKi8KKytzdGF0 aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCBpbnQ4X3QgYXZfY2xpcF9pbnQ4X2MoaW50IGEp CisreworKyAgICBpZiAoKGErMHg4MFUpICYgfjB4RkYpIHJldHVybiAoYT4+MzEpIF4gMHg3RjsK KysgICAgZWxzZSAgICAgICAgICAgICAgICAgIHJldHVybiBhOworK30KKysKKysvKioKKysgKiBD bGlwIGEgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgMC02NTUzNSByYW5nZS4KKysgKiBA cGFyYW0gYSB2YWx1ZSB0byBjbGlwCisrICogQHJldHVybiBjbGlwcGVkIHZhbHVlCisrICovCisr c3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgdWludDE2X3QgYXZfY2xpcF91aW50MTZf YyhpbnQgYSkKKyt7CisrICAgIGlmIChhJih+MHhGRkZGKSkgcmV0dXJuICh+YSk+PjMxOworKyAg ICBlbHNlICAgICAgICAgICAgIHJldHVybiBhOworK30KKysKKysvKioKKysgKiBDbGlwIGEgc2ln bmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgLTMyNzY4LDMyNzY3IHJhbmdlLgorKyAqIEBwYXJh bSBhIHZhbHVlIHRvIGNsaXAKKysgKiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUKKysgKi8KKytzdGF0 aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCBpbnQxNl90IGF2X2NsaXBfaW50MTZfYyhpbnQg YSkKKyt7CisrICAgIGlmICgoYSsweDgwMDBVKSAmIH4weEZGRkYpIHJldHVybiAoYT4+MzEpIF4g MHg3RkZGOworKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhOworK30KKysK KysvKioKKysgKiBDbGlwIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZhbHVlIGludG8gdGhlIC0y MTQ3NDgzNjQ4LDIxNDc0ODM2NDcgcmFuZ2UuCisrICogQHBhcmFtIGEgdmFsdWUgdG8gY2xpcAor KyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5l IGF2X2NvbnN0IGludDMyX3QgYXZfY2xpcGxfaW50MzJfYyhpbnQ2NF90IGEpCisreworKyAgICBp ZiAoKGErVUlOVDY0X0MoMHg4MDAwMDAwMCkpICYgflVJTlQ2NF9DKDB4RkZGRkZGRkYpKSByZXR1 cm4gKGludDMyX3QpKChhPj42MykgXiAweDdGRkZGRkZGKTsKKysgICAgZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQzMl90KWE7 CisrfQorKworKy8qKgorKyAqIENsaXAgYSBzaWduZWQgaW50ZWdlciBpbnRvIHRoZSAtKDJecCks KDJecC0xKSByYW5nZS4KKysgKiBAcGFyYW0gIGEgdmFsdWUgdG8gY2xpcAorKyAqIEBwYXJhbSAg cCBiaXQgcG9zaXRpb24gdG8gY2xpcCBhdAorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAq LworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IGludCBhdl9jbGlwX2ludHAyX2Mo aW50IGEsIGludCBwKQorK3sKKysgICAgaWYgKCgodW5zaWduZWQpYSArICgxVSA8PCBwKSkgJiB+ KCgyVSA8PCBwKSAtIDEpKQorKyAgICAgICAgcmV0dXJuIChhID4+IDMxKSBeICgoMSA8PCBwKSAt IDEpOworKyAgICBlbHNlCisrICAgICAgICByZXR1cm4gYTsKKyt9CisrCisrLyoqCisrICogQ2xp cCBhIHNpZ25lZCBpbnRlZ2VyIHRvIGFuIHVuc2lnbmVkIHBvd2VyIG9mIHR3byByYW5nZS4KKysg KiBAcGFyYW0gIGEgdmFsdWUgdG8gY2xpcAorKyAqIEBwYXJhbSAgcCBiaXQgcG9zaXRpb24gdG8g Y2xpcCBhdAorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAqLworK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIGF2X2NvbnN0IHVuc2lnbmVkIGF2X2NsaXBfdWludHAyX2MoaW50IGEsIGludCBw KQorK3sKKysgICAgaWYgKGEgJiB+KCgxVTw8cCkgLSAxKSkgcmV0dXJuICh+YSkgPj4gMzEgJiAo KDFVPDxwKSAtIDEpOworKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICByZXR1cm4gIGE7Cisr fQorKworKy8qKgorKyAqIENsZWFyIGhpZ2ggYml0cyBmcm9tIGFuIHVuc2lnbmVkIGludGVnZXIg c3RhcnRpbmcgd2l0aCBzcGVjaWZpYyBiaXQgcG9zaXRpb24KKysgKiBAcGFyYW0gIGEgdmFsdWUg dG8gY2xpcAorKyAqIEBwYXJhbSAgcCBiaXQgcG9zaXRpb24gdG8gY2xpcCBhdC4gTXVzdCBiZSBi ZXR3ZWVuIDAgYW5kIDMxLgorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAqLworK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IHVuc2lnbmVkIGF2X3plcm9fZXh0ZW5kX2ModW5z aWduZWQgYSwgdW5zaWduZWQgcCkKKyt7CisrI2lmIGRlZmluZWQoSEFWRV9BVl9DT05GSUdfSCkg JiYgZGVmaW5lZChBU1NFUlRfTEVWRUwpICYmIEFTU0VSVF9MRVZFTCA+PSAyCisrICAgIGlmIChw ID4gMzEpIGFib3J0KCk7CisrI2VuZGlmCisrICAgIHJldHVybiBhICYgKCgxVSA8PCBwKSAtIDEp OworK30KKysKKysvKioKKysgKiBBZGQgdHdvIHNpZ25lZCAzMi1iaXQgdmFsdWVzIHdpdGggc2F0 dXJhdGlvbi4KKysgKgorKyAqIEBwYXJhbSAgYSBvbmUgdmFsdWUKKysgKiBAcGFyYW0gIGIgYW5v dGhlciB2YWx1ZQorKyAqIEByZXR1cm4gc3VtIHdpdGggc2lnbmVkIHNhdHVyYXRpb24KKysgKi8K KytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgYXZfc2F0X2FkZDMyX2MoaW50IGEsIGludCBi KQorK3sKKysgICAgcmV0dXJuIGF2X2NsaXBsX2ludDMyKChpbnQ2NF90KWEgKyBiKTsKKyt9Cisr CisrLyoqCisrICogQWRkIGEgZG91YmxlZCB2YWx1ZSB0byBhbm90aGVyIHZhbHVlIHdpdGggc2F0 dXJhdGlvbiBhdCBib3RoIHN0YWdlcy4KKysgKgorKyAqIEBwYXJhbSAgYSBmaXJzdCB2YWx1ZQor KyAqIEBwYXJhbSAgYiB2YWx1ZSBkb3VibGVkIGFuZCBhZGRlZCB0byBhCisrICogQHJldHVybiBz dW0gc2F0KGEgKyBzYXQoMipiKSkgd2l0aCBzaWduZWQgc2F0dXJhdGlvbgorKyAqLworK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIGludCBhdl9zYXRfZGFkZDMyX2MoaW50IGEsIGludCBiKQorK3sK KysgICAgcmV0dXJuIGF2X3NhdF9hZGQzMihhLCBhdl9zYXRfYWRkMzIoYiwgYikpOworK30KKysK KysvKioKKysgKiBTdWJ0cmFjdCB0d28gc2lnbmVkIDMyLWJpdCB2YWx1ZXMgd2l0aCBzYXR1cmF0 aW9uLgorKyAqCisrICogQHBhcmFtICBhIG9uZSB2YWx1ZQorKyAqIEBwYXJhbSAgYiBhbm90aGVy IHZhbHVlCisrICogQHJldHVybiBkaWZmZXJlbmNlIHdpdGggc2lnbmVkIHNhdHVyYXRpb24KKysg Ki8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgYXZfc2F0X3N1YjMyX2MoaW50IGEsIGlu dCBiKQorK3sKKysgICAgcmV0dXJuIGF2X2NsaXBsX2ludDMyKChpbnQ2NF90KWEgLSBiKTsKKyt9 CisrCisrLyoqCisrICogU3VidHJhY3QgYSBkb3VibGVkIHZhbHVlIGZyb20gYW5vdGhlciB2YWx1 ZSB3aXRoIHNhdHVyYXRpb24gYXQgYm90aCBzdGFnZXMuCisrICoKKysgKiBAcGFyYW0gIGEgZmly c3QgdmFsdWUKKysgKiBAcGFyYW0gIGIgdmFsdWUgZG91YmxlZCBhbmQgc3VidHJhY3RlZCBmcm9t IGEKKysgKiBAcmV0dXJuIGRpZmZlcmVuY2Ugc2F0KGEgLSBzYXQoMipiKSkgd2l0aCBzaWduZWQg c2F0dXJhdGlvbgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBhdl9zYXRfZHN1 YjMyX2MoaW50IGEsIGludCBiKQorK3sKKysgICAgcmV0dXJuIGF2X3NhdF9zdWIzMihhLCBhdl9z YXRfYWRkMzIoYiwgYikpOworK30KKysKKysvKioKKysgKiBBZGQgdHdvIHNpZ25lZCA2NC1iaXQg dmFsdWVzIHdpdGggc2F0dXJhdGlvbi4KKysgKgorKyAqIEBwYXJhbSAgYSBvbmUgdmFsdWUKKysg KiBAcGFyYW0gIGIgYW5vdGhlciB2YWx1ZQorKyAqIEByZXR1cm4gc3VtIHdpdGggc2lnbmVkIHNh dHVyYXRpb24KKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQ2NF90IGF2X3NhdF9h ZGQ2NF9jKGludDY0X3QgYSwgaW50NjRfdCBiKSB7CisrI2lmICghZGVmaW5lZChfX0lOVEVMX0NP TVBJTEVSKSAmJiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCg1LDEpKSB8fCBBVl9IQVNfQlVJTFRJ TihfX2J1aWx0aW5fYWRkX292ZXJmbG93KQorKyAgICBpbnQ2NF90IHRtcDsKKysgICAgcmV0dXJu ICFfX2J1aWx0aW5fYWRkX292ZXJmbG93KGEsIGIsICZ0bXApID8gdG1wIDogKHRtcCA8IDAgPyBJ TlQ2NF9NQVggOiBJTlQ2NF9NSU4pOworKyNlbHNlCisrICAgIGludDY0X3QgcyA9IGErKHVpbnQ2 NF90KWI7CisrICAgIGlmICgoaW50NjRfdCkoYV5iIHwgfnNeYikgPj0gMCkKKysgICAgICAgIHJl dHVybiBJTlQ2NF9NQVggXiAoYiA+PiA2Myk7CisrICAgIHJldHVybiBzOworKyNlbmRpZgorK30K KysKKysvKioKKysgKiBTdWJ0cmFjdCB0d28gc2lnbmVkIDY0LWJpdCB2YWx1ZXMgd2l0aCBzYXR1 cmF0aW9uLgorKyAqCisrICogQHBhcmFtICBhIG9uZSB2YWx1ZQorKyAqIEBwYXJhbSAgYiBhbm90 aGVyIHZhbHVlCisrICogQHJldHVybiBkaWZmZXJlbmNlIHdpdGggc2lnbmVkIHNhdHVyYXRpb24K KysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQ2NF90IGF2X3NhdF9zdWI2NF9jKGlu dDY0X3QgYSwgaW50NjRfdCBiKSB7CisrI2lmICghZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAm JiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCg1LDEpKSB8fCBBVl9IQVNfQlVJTFRJTihfX2J1aWx0 aW5fc3ViX292ZXJmbG93KQorKyAgICBpbnQ2NF90IHRtcDsKKysgICAgcmV0dXJuICFfX2J1aWx0 aW5fc3ViX292ZXJmbG93KGEsIGIsICZ0bXApID8gdG1wIDogKHRtcCA8IDAgPyBJTlQ2NF9NQVgg OiBJTlQ2NF9NSU4pOworKyNlbHNlCisrICAgIGlmIChiIDw9IDAgJiYgYSA+PSBJTlQ2NF9NQVgg KyBiKQorKyAgICAgICAgcmV0dXJuIElOVDY0X01BWDsKKysgICAgaWYgKGIgPj0gMCAmJiBhIDw9 IElOVDY0X01JTiArIGIpCisrICAgICAgICByZXR1cm4gSU5UNjRfTUlOOworKyAgICByZXR1cm4g YSAtIGI7CisrI2VuZGlmCisrfQorKworKy8qKgorKyAqIENsaXAgYSBmbG9hdCB2YWx1ZSBpbnRv IHRoZSBhbWluLWFtYXggcmFuZ2UuCisrICogSWYgYSBpcyBuYW4gb3IgLWluZiBhbWluIHdpbGwg YmUgcmV0dXJuZWQuCisrICogSWYgYSBpcyAraW5mIGFtYXggd2lsbCBiZSByZXR1cm5lZC4KKysg KiBAcGFyYW0gYSB2YWx1ZSB0byBjbGlwCisrICogQHBhcmFtIGFtaW4gbWluaW11bSB2YWx1ZSBv ZiB0aGUgY2xpcCByYW5nZQorKyAqIEBwYXJhbSBhbWF4IG1heGltdW0gdmFsdWUgb2YgdGhlIGNs aXAgcmFuZ2UKKysgKiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUKKysgKi8KKytzdGF0aWMgYXZfYWx3 YXlzX2lubGluZSBhdl9jb25zdCBmbG9hdCBhdl9jbGlwZl9jKGZsb2F0IGEsIGZsb2F0IGFtaW4s IGZsb2F0IGFtYXgpCisreworKyNpZiBkZWZpbmVkKEhBVkVfQVZfQ09ORklHX0gpICYmIGRlZmlu ZWQoQVNTRVJUX0xFVkVMKSAmJiBBU1NFUlRfTEVWRUwgPj0gMgorKyAgICBpZiAoYW1pbiA+IGFt YXgpIGFib3J0KCk7CisrI2VuZGlmCisrICAgIHJldHVybiBGRk1JTihGRk1BWChhLCBhbWluKSwg YW1heCk7CisrfQorKworKy8qKgorKyAqIENsaXAgYSBkb3VibGUgdmFsdWUgaW50byB0aGUgYW1p bi1hbWF4IHJhbmdlLgorKyAqIElmIGEgaXMgbmFuIG9yIC1pbmYgYW1pbiB3aWxsIGJlIHJldHVy bmVkLgorKyAqIElmIGEgaXMgK2luZiBhbWF4IHdpbGwgYmUgcmV0dXJuZWQuCisrICogQHBhcmFt IGEgdmFsdWUgdG8gY2xpcAorKyAqIEBwYXJhbSBhbWluIG1pbmltdW0gdmFsdWUgb2YgdGhlIGNs aXAgcmFuZ2UKKysgKiBAcGFyYW0gYW1heCBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjbGlwIHJhbmdl CisrICogQHJldHVybiBjbGlwcGVkIHZhbHVlCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgYXZfY29uc3QgZG91YmxlIGF2X2NsaXBkX2MoZG91YmxlIGEsIGRvdWJsZSBhbWluLCBkb3Vi bGUgYW1heCkKKyt7CisrI2lmIGRlZmluZWQoSEFWRV9BVl9DT05GSUdfSCkgJiYgZGVmaW5lZChB U1NFUlRfTEVWRUwpICYmIEFTU0VSVF9MRVZFTCA+PSAyCisrICAgIGlmIChhbWluID4gYW1heCkg YWJvcnQoKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIEZGTUlOKEZGTUFYKGEsIGFtaW4pLCBhbWF4 KTsKKyt9CisrCisrLyoqIENvbXB1dGUgY2VpbChsb2cyKHgpKS4KKysgKiBAcGFyYW0geCB2YWx1 ZSB1c2VkIHRvIGNvbXB1dGUgY2VpbChsb2cyKHgpKQorKyAqIEByZXR1cm4gY29tcHV0ZWQgY2Vp bGluZyBvZiBsb2cyKHgpCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3Qg aW50IGF2X2NlaWxfbG9nMl9jKGludCB4KQorK3sKKysgICAgcmV0dXJuIGF2X2xvZzIoKHggLSAx VSkgPDwgMSk7CisrfQorKworKy8qKgorKyAqIENvdW50IG51bWJlciBvZiBiaXRzIHNldCB0byBv bmUgaW4geAorKyAqIEBwYXJhbSB4IHZhbHVlIHRvIGNvdW50IGJpdHMgb2YKKysgKiBAcmV0dXJu IHRoZSBudW1iZXIgb2YgYml0cyBzZXQgdG8gb25lIGluIHgKKysgKi8KKytzdGF0aWMgYXZfYWx3 YXlzX2lubGluZSBhdl9jb25zdCBpbnQgYXZfcG9wY291bnRfYyh1aW50MzJfdCB4KQorK3sKKysg ICAgeCAtPSAoeCA+PiAxKSAmIDB4NTU1NTU1NTU7CisrICAgIHggPSAoeCAmIDB4MzMzMzMzMzMp ICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7CisrICAgIHggPSAoeCArICh4ID4+IDQpKSAmIDB4 MEYwRjBGMEY7CisrICAgIHggKz0geCA+PiA4OworKyAgICByZXR1cm4gKHggKyAoeCA+PiAxNikp ICYgMHgzRjsKKyt9CisrCisrLyoqCisrICogQ291bnQgbnVtYmVyIG9mIGJpdHMgc2V0IHRvIG9u ZSBpbiB4CisrICogQHBhcmFtIHggdmFsdWUgdG8gY291bnQgYml0cyBvZgorKyAqIEByZXR1cm4g dGhlIG51bWJlciBvZiBiaXRzIHNldCB0byBvbmUgaW4geAorKyAqLworK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIGF2X2NvbnN0IGludCBhdl9wb3Bjb3VudDY0X2ModWludDY0X3QgeCkKKyt7Cisr ICAgIHJldHVybiBhdl9wb3Bjb3VudCgodWludDMyX3QpeCkgKyBhdl9wb3Bjb3VudCgodWludDMy X3QpKHggPj4gMzIpKTsKKyt9CisrCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3Qg aW50IGF2X3Bhcml0eV9jKHVpbnQzMl90IHYpCisreworKyAgICByZXR1cm4gYXZfcG9wY291bnQo dikgJiAxOworK30KKysKKysvKioKKysgKiBDb252ZXJ0IGEgVVRGLTggY2hhcmFjdGVyICh1cCB0 byA0IGJ5dGVzKSB0byBpdHMgMzItYml0IFVDUy00IGVuY29kZWQgZm9ybS4KKysgKgorKyAqIEBw YXJhbSB2YWwgICAgICBPdXRwdXQgdmFsdWUsIG11c3QgYmUgYW4gbHZhbHVlIG9mIHR5cGUgdWlu dDMyX3QuCisrICogQHBhcmFtIEdFVF9CWVRFIEV4cHJlc3Npb24gcmVhZGluZyBvbmUgYnl0ZSBm cm9tIHRoZSBpbnB1dC4KKysgKiAgICAgICAgICAgICAgICAgRXZhbHVhdGVkIHVwIHRvIDcgdGlt ZXMgKDQgZm9yIHRoZSBjdXJyZW50bHkKKysgKiAgICAgICAgICAgICAgICAgYXNzaWduZWQgVW5p Y29kZSByYW5nZSkuICBXaXRoIGEgbWVtb3J5IGJ1ZmZlcgorKyAqICAgICAgICAgICAgICAgICBp bnB1dCwgdGhpcyBjb3VsZCBiZSAqcHRyKyssIG9yIGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZQor KyAqICAgICAgICAgICAgICAgICB0aGF0ICpwdHIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIE5VTEwg dGVybWluYXRlZCBzdHJpbmcgdGhlbgorKyAqICAgICAgICAgICAgICAgICAqcHRyID8gKnB0cisr IDogMAorKyAqIEBwYXJhbSBFUlJPUiAgICBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBvbiBp bnZhbGlkIGlucHV0LAorKyAqICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYSBnb3RvIHN0YXRl bWVudC4KKysgKgorKyAqIEB3YXJuaW5nIEVSUk9SIHNob3VsZCBub3QgY29udGFpbiBhIGxvb3Ag Y29udHJvbCBzdGF0ZW1lbnQgd2hpY2gKKysgKiBjb3VsZCBpbnRlcmFjdCB3aXRoIHRoZSBpbnRl cm5hbCB3aGlsZSBsb29wLCBhbmQgc2hvdWxkIGZvcmNlIGFuCisrICogZXhpdCBmcm9tIHRoZSBt YWNybyBjb2RlIChlLmcuIHRocm91Z2ggYSBnb3RvIG9yIGEgcmV0dXJuKSBpbiBvcmRlcgorKyAq IHRvIHByZXZlbnQgdW5kZWZpbmVkIHJlc3VsdHMuCisrICovCisrI2RlZmluZSBHRVRfVVRGOCh2 YWwsIEdFVF9CWVRFLCBFUlJPUilcCisrICAgIHZhbD0gKHVpbnQ4X3QpKEdFVF9CWVRFKTtcCisr ICAgIHtcCisrICAgICAgICB1aW50MzJfdCB0b3AgPSAodmFsICYgMTI4KSA+PiAxO1wKKysgICAg ICAgIGlmICgodmFsICYgMHhjMCkgPT0gMHg4MCB8fCB2YWwgPj0gMHhGRSlcCisrICAgICAgICAg ICAge0VSUk9SfVwKKysgICAgICAgIHdoaWxlICh2YWwgJiB0b3ApIHtcCisrICAgICAgICAgICAg dW5zaWduZWQgaW50IHRtcCA9ICh1aW50OF90KShHRVRfQllURSkgLSAxMjg7XAorKyAgICAgICAg ICAgIGlmKHRtcD4+NilcCisrICAgICAgICAgICAgICAgIHtFUlJPUn1cCisrICAgICAgICAgICAg dmFsPSAodmFsPDw2KSArIHRtcDtcCisrICAgICAgICAgICAgdG9wIDw8PSA1O1wKKysgICAgICAg IH1cCisrICAgICAgICB2YWwgJj0gKHRvcCA8PCAxKSAtIDE7XAorKyAgICB9CisrCisrLyoqCisr ICogQ29udmVydCBhIFVURi0xNiBjaGFyYWN0ZXIgKDIgb3IgNCBieXRlcykgdG8gaXRzIDMyLWJp dCBVQ1MtNCBlbmNvZGVkIGZvcm0uCisrICoKKysgKiBAcGFyYW0gdmFsICAgICAgIE91dHB1dCB2 YWx1ZSwgbXVzdCBiZSBhbiBsdmFsdWUgb2YgdHlwZSB1aW50MzJfdC4KKysgKiBAcGFyYW0gR0VU XzE2QklUIEV4cHJlc3Npb24gcmV0dXJuaW5nIHR3byBieXRlcyBvZiBVVEYtMTYgZGF0YSBjb252 ZXJ0ZWQKKysgKiAgICAgICAgICAgICAgICAgIHRvIG5hdGl2ZSBieXRlIG9yZGVyLiAgRXZhbHVh dGVkIG9uZSBvciB0d28gdGltZXMuCisrICogQHBhcmFtIEVSUk9SICAgICBFeHByZXNzaW9uIHRv IGJlIGV2YWx1YXRlZCBvbiBpbnZhbGlkIGlucHV0LAorKyAqICAgICAgICAgICAgICAgICAgdHlw aWNhbGx5IGEgZ290byBzdGF0ZW1lbnQuCisrICovCisrI2RlZmluZSBHRVRfVVRGMTYodmFsLCBH RVRfMTZCSVQsIEVSUk9SKVwKKysgICAgdmFsID0gKHVpbnQxNl90KShHRVRfMTZCSVQpO1wKKysg ICAge1wKKysgICAgICAgIHVuc2lnbmVkIGludCBoaSA9IHZhbCAtIDB4RDgwMDtcCisrICAgICAg ICBpZiAoaGkgPCAweDgwMCkge1wKKysgICAgICAgICAgICB2YWwgPSAodWludDE2X3QpKEdFVF8x NkJJVCkgLSAweERDMDA7XAorKyAgICAgICAgICAgIGlmICh2YWwgPiAweDNGRlUgfHwgaGkgPiAw eDNGRlUpXAorKyAgICAgICAgICAgICAgICB7RVJST1J9XAorKyAgICAgICAgICAgIHZhbCArPSAo aGk8PDEwKSArIDB4MTAwMDA7XAorKyAgICAgICAgfVwKKysgICAgfVwKKysKKysvKioKKysgKiBA ZGVmIFBVVF9VVEY4KHZhbCwgdG1wLCBQVVRfQllURSkKKysgKiBDb252ZXJ0IGEgMzItYml0IFVu aWNvZGUgY2hhcmFjdGVyIHRvIGl0cyBVVEYtOCBlbmNvZGVkIGZvcm0gKHVwIHRvIDQgYnl0ZXMg bG9uZykuCisrICogQHBhcmFtIHZhbCBpcyBhbiBpbnB1dC1vbmx5IGFyZ3VtZW50IGFuZCBzaG91 bGQgYmUgb2YgdHlwZSB1aW50MzJfdC4gSXQgaG9sZHMKKysgKiBhIFVDUy00IGVuY29kZWQgVW5p Y29kZSBjaGFyYWN0ZXIgdGhhdCBpcyB0byBiZSBjb252ZXJ0ZWQgdG8gVVRGLTguIElmCisrICog dmFsIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gaXQgaXMgZXhlY3V0ZWQgb25seSBvbmNlLgorKyAq IEBwYXJhbSB0bXAgaXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUgYW5kIHNob3VsZCBiZSBvZiB0eXBl IHVpbnQ4X3QuIEl0CisrICogcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUgdmFsdWUgZHVyaW5n IGNvbnZlcnNpb24gdGhhdCBpcyB0byBiZQorKyAqIG91dHB1dCBieSBQVVRfQllURS4KKysgKiBA cGFyYW0gUFVUX0JZVEUgd3JpdGVzIHRoZSBjb252ZXJ0ZWQgVVRGLTggYnl0ZXMgdG8gYW55IHBy b3BlciBkZXN0aW5hdGlvbi4KKysgKiBJdCBjb3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RhdGVt ZW50LCBhbmQgdXNlcyB0bXAgYXMgdGhlIGlucHV0IGJ5dGUuCisrICogRm9yIGV4YW1wbGUsIFBV VF9CWVRFIGNvdWxkIGJlICIqb3V0cHV0KysgPSB0bXA7IiBQVVRfQllURSB3aWxsIGJlCisrICog ZXhlY3V0ZWQgdXAgdG8gNCB0aW1lcyBmb3IgdmFsdWVzIGluIHRoZSB2YWxpZCBVVEYtOCByYW5n ZSBhbmQgdXAgdG8KKysgKiA3IHRpbWVzIGluIHRoZSBnZW5lcmFsIGNhc2UsIGRlcGVuZGluZyBv biB0aGUgbGVuZ3RoIG9mIHRoZSBjb252ZXJ0ZWQKKysgKiBVbmljb2RlIGNoYXJhY3Rlci4KKysg Ki8KKysjZGVmaW5lIFBVVF9VVEY4KHZhbCwgdG1wLCBQVVRfQllURSlcCisrICAgIHtcCisrICAg ICAgICBpbnQgYnl0ZXMsIHNoaWZ0O1wKKysgICAgICAgIHVpbnQzMl90IGluID0gdmFsO1wKKysg ICAgICAgIGlmIChpbiA8IDB4ODApIHtcCisrICAgICAgICAgICAgdG1wID0gaW47XAorKyAgICAg ICAgICAgIFBVVF9CWVRFXAorKyAgICAgICAgfSBlbHNlIHtcCisrICAgICAgICAgICAgYnl0ZXMg PSAoYXZfbG9nMihpbikgKyA0KSAvIDU7XAorKyAgICAgICAgICAgIHNoaWZ0ID0gKGJ5dGVzIC0g MSkgKiA2O1wKKysgICAgICAgICAgICB0bXAgPSAoMjU2IC0gKDI1NiA+PiBieXRlcykpIHwgKGlu ID4+IHNoaWZ0KTtcCisrICAgICAgICAgICAgUFVUX0JZVEVcCisrICAgICAgICAgICAgd2hpbGUg KHNoaWZ0ID49IDYpIHtcCisrICAgICAgICAgICAgICAgIHNoaWZ0IC09IDY7XAorKyAgICAgICAg ICAgICAgICB0bXAgPSAweDgwIHwgKChpbiA+PiBzaGlmdCkgJiAweDNmKTtcCisrICAgICAgICAg ICAgICAgIFBVVF9CWVRFXAorKyAgICAgICAgICAgIH1cCisrICAgICAgICB9XAorKyAgICB9Cisr CisrLyoqCisrICogQGRlZiBQVVRfVVRGMTYodmFsLCB0bXAsIFBVVF8xNkJJVCkKKysgKiBDb252 ZXJ0IGEgMzItYml0IFVuaWNvZGUgY2hhcmFjdGVyIHRvIGl0cyBVVEYtMTYgZW5jb2RlZCBmb3Jt ICgyIG9yIDQgYnl0ZXMpLgorKyAqIEBwYXJhbSB2YWwgaXMgYW4gaW5wdXQtb25seSBhcmd1bWVu dCBhbmQgc2hvdWxkIGJlIG9mIHR5cGUgdWludDMyX3QuIEl0IGhvbGRzCisrICogYSBVQ1MtNCBl bmNvZGVkIFVuaWNvZGUgY2hhcmFjdGVyIHRoYXQgaXMgdG8gYmUgY29udmVydGVkIHRvIFVURi0x Ni4gSWYKKysgKiB2YWwgaXMgZ2l2ZW4gYXMgYSBmdW5jdGlvbiBpdCBpcyBleGVjdXRlZCBvbmx5 IG9uY2UuCisrICogQHBhcmFtIHRtcCBpcyBhIHRlbXBvcmFyeSB2YXJpYWJsZSBhbmQgc2hvdWxk IGJlIG9mIHR5cGUgdWludDE2X3QuIEl0CisrICogcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUg dmFsdWUgZHVyaW5nIGNvbnZlcnNpb24gdGhhdCBpcyB0byBiZQorKyAqIG91dHB1dCBieSBQVVRf MTZCSVQuCisrICogQHBhcmFtIFBVVF8xNkJJVCB3cml0ZXMgdGhlIGNvbnZlcnRlZCBVVEYtMTYg ZGF0YSB0byBhbnkgcHJvcGVyIGRlc3RpbmF0aW9uCisrICogaW4gZGVzaXJlZCBlbmRpYW5uZXNz LiBJdCBjb3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RhdGVtZW50LCBhbmQgdXNlcyB0bXAKKysg KiBhcyB0aGUgaW5wdXQgYnl0ZS4gIEZvciBleGFtcGxlLCBQVVRfQllURSBjb3VsZCBiZSAiKm91 dHB1dCsrID0gdG1wOyIKKysgKiBQVVRfQllURSB3aWxsIGJlIGV4ZWN1dGVkIDEgb3IgMiB0aW1l cyBkZXBlbmRpbmcgb24gaW5wdXQgY2hhcmFjdGVyLgorKyAqLworKyNkZWZpbmUgUFVUX1VURjE2 KHZhbCwgdG1wLCBQVVRfMTZCSVQpXAorKyAgICB7XAorKyAgICAgICAgdWludDMyX3QgaW4gPSB2 YWw7XAorKyAgICAgICAgaWYgKGluIDwgMHgxMDAwMCkge1wKKysgICAgICAgICAgICB0bXAgPSBp bjtcCisrICAgICAgICAgICAgUFVUXzE2QklUXAorKyAgICAgICAgfSBlbHNlIHtcCisrICAgICAg ICAgICAgdG1wID0gMHhEODAwIHwgKChpbiAtIDB4MTAwMDApID4+IDEwKTtcCisrICAgICAgICAg ICAgUFVUXzE2QklUXAorKyAgICAgICAgICAgIHRtcCA9IDB4REMwMCB8ICgoaW4gLSAweDEwMDAw KSAmIDB4M0ZGKTtcCisrICAgICAgICAgICAgUFVUXzE2QklUXAorKyAgICAgICAgfVwKKysgICAg fVwKKysKKysjZW5kaWYgLyogQVZVVElMX0NPTU1PTl9IICovCitkaWZmIC11cCBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv ZGljdC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRw YXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2RpY3QuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9kaWN0LmguZmZt cGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjYxMDQ1NCArMDIwMAorKysrIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9k aWN0LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzY1NTIyODAgKzAyMDAKK0BAIC0wLDAgKzEsMjQy IEBACisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysg Ki8KKysKKysvKioKKysgKiBAZmlsZQorKyAqIFB1YmxpYyBkaWN0aW9uYXJ5IEFQSS4KKysgKiBA ZGVwcmVjYXRlZAorKyAqICBBVkRpY3Rpb25hcnkgaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxp dHkgd2l0aCBsaWJhdi4gSXQgaXMgYm90aCBpbgorKyAqICBpbXBsZW1lbnRhdGlvbiBhcyB3ZWxs IGFzIEFQSSBpbmVmZmljaWVudC4gSXQgZG9lcyBub3Qgc2NhbGUgYW5kIGlzCisrICogIGV4dHJl bWVseSBzbG93IHdpdGggbGFyZ2UgZGljdGlvbmFyaWVzLgorKyAqICBJdCBpcyByZWNvbW1lbmRl ZCB0aGF0IG5ldyBjb2RlIHVzZXMgb3VyIHRyZWUgY29udGFpbmVyIGZyb20gdHJlZS5jL2gKKysg KiAgd2hlcmUgYXBwbGljYWJsZSwgd2hpY2ggdXNlcyBBVkwgdHJlZXMgdG8gYWNoaWV2ZSBPKGxv ZyBuKSBwZXJmb3JtYW5jZS4KKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9ESUNUX0gKKysjZGVm aW5lIEFWVVRJTF9ESUNUX0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrLyoqCisrICog QGFkZHRvZ3JvdXAgbGF2dV9kaWN0IEFWRGljdGlvbmFyeQorKyAqIEBpbmdyb3VwIGxhdnVfZGF0 YQorKyAqCisrICogQGJyaWVmIFNpbXBsZSBrZXk6dmFsdWUgc3RvcmUKKysgKgorKyAqIEB7Cisr ICogRGljdGlvbmFyaWVzIGFyZSB1c2VkIGZvciBzdG9yaW5nIGtleS12YWx1ZSBwYWlycy4KKysg KgorKyAqIC0gVG8gKipjcmVhdGUgYW4gQVZEaWN0aW9uYXJ5KiosIHNpbXBseSBwYXNzIGFuIGFk ZHJlc3Mgb2YgYSBOVUxMCisrICogICBwb2ludGVyIHRvIGF2X2RpY3Rfc2V0KCkuIE5VTEwgY2Fu IGJlIHVzZWQgYXMgYW4gZW1wdHkgZGljdGlvbmFyeQorKyAqICAgd2hlcmV2ZXIgYSBwb2ludGVy IHRvIGFuIEFWRGljdGlvbmFyeSBpcyByZXF1aXJlZC4KKysgKiAtIFRvICoqaW5zZXJ0IGFuIGVu dHJ5KiosIHVzZSBhdl9kaWN0X3NldCgpLgorKyAqIC0gVXNlIGF2X2RpY3RfZ2V0KCkgdG8gKipy ZXRyaWV2ZSBhbiBlbnRyeSoqLgorKyAqIC0gVG8gKippdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMq KiwgdXNlIGF2X2RpY3RfaXRlcmF0ZSgpLgorKyAqIC0gSW4gb3JkZXIgdG8gKipmcmVlIHRoZSBk aWN0aW9uYXJ5IGFuZCBhbGwgaXRzIGNvbnRlbnRzKiosIHVzZSBhdl9kaWN0X2ZyZWUoKS4KKysg KgorKyBAY29kZQorKyAgIEFWRGljdGlvbmFyeSAqZCA9IE5VTEw7ICAgICAgICAgICAvLyAiY3Jl YXRlIiBhbiBlbXB0eSBkaWN0aW9uYXJ5CisrICAgQVZEaWN0aW9uYXJ5RW50cnkgKnQgPSBOVUxM OworKworKyAgIGF2X2RpY3Rfc2V0KCZkLCAiZm9vIiwgImJhciIsIDApOyAvLyBhZGQgYW4gZW50 cnkKKysKKysgICBjaGFyICprID0gYXZfc3RyZHVwKCJrZXkiKTsgICAgICAgLy8gaWYgeW91ciBz dHJpbmdzIGFyZSBhbHJlYWR5IGFsbG9jYXRlZCwKKysgICBjaGFyICp2ID0gYXZfc3RyZHVwKCJ2 YWx1ZSIpOyAgICAgLy8geW91IGNhbiBhdm9pZCBjb3B5aW5nIHRoZW0gbGlrZSB0aGlzCisrICAg YXZfZGljdF9zZXQoJmQsIGssIHYsIEFWX0RJQ1RfRE9OVF9TVFJEVVBfS0VZIHwgQVZfRElDVF9E T05UX1NUUkRVUF9WQUwpOworKworKyAgIHdoaWxlICgodCA9IGF2X2RpY3RfaXRlcmF0ZShkLCB0 KSkpIHsKKysgICAgICAgPC4uLi4+ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBv dmVyIGFsbCBlbnRyaWVzIGluIGQKKysgICB9CisrICAgYXZfZGljdF9mcmVlKCZkKTsKKysgQGVu ZGNvZGUKKysgKi8KKysKKysvKioKKysgKiBAbmFtZSBBVkRpY3Rpb25hcnkgRmxhZ3MKKysgKiBG bGFncyB0aGF0IGluZmx1ZW5jZSBiZWhhdmlvciBvZiB0aGUgbWF0Y2hpbmcgb2Yga2V5cyBvciBp bnNlcnRpb24gdG8gdGhlIGRpY3Rpb25hcnkuCisrICogQHsKKysgKi8KKysjZGVmaW5lIEFWX0RJ Q1RfTUFUQ0hfQ0FTRSAgICAgIDEgICAvKio8IE9ubHkgZ2V0IGFuIGVudHJ5IHdpdGggZXhhY3Qt Y2FzZSBrZXkgbWF0Y2guIE9ubHkgcmVsZXZhbnQgaW4gYXZfZGljdF9nZXQoKS4gKi8KKysjZGVm aW5lIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCAgIDIgICAvKio8IFJldHVybiBmaXJzdCBlbnRyeSBp biBhIGRpY3Rpb25hcnkgd2hvc2UgZmlyc3QgcGFydCBjb3JyZXNwb25kcyB0byB0aGUgc2VhcmNo IGtleSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yaW5n IHRoZSBzdWZmaXggb2YgdGhlIGZvdW5kIGtleSBzdHJpbmcuIE9ubHkgcmVsZXZhbnQgaW4gYXZf ZGljdF9nZXQoKS4gKi8KKysjZGVmaW5lIEFWX0RJQ1RfRE9OVF9TVFJEVVBfS0VZIDQgICAvKio8 IFRha2Ugb3duZXJzaGlwIG9mIGEga2V5IHRoYXQncyBiZWVuCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSBvciBhbm90 aGVyIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiAqLworKyNkZWZpbmUgQVZfRElDVF9ET05U X1NUUkRVUF9WQUwgOCAgIC8qKjwgVGFrZSBvd25lcnNoaXAgb2YgYSB2YWx1ZSB0aGF0J3MgYmVl bgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIHdp dGggYXZfbWFsbG9jKCkgb3IgYW5vdGhlciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbi4gKi8K KysjZGVmaW5lIEFWX0RJQ1RfRE9OVF9PVkVSV1JJVEUgMTYgICAvKio8IERvbid0IG92ZXJ3cml0 ZSBleGlzdGluZyBlbnRyaWVzLiAqLworKyNkZWZpbmUgQVZfRElDVF9BUFBFTkQgICAgICAgICAz MiAgIC8qKjwgSWYgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLCBhcHBlbmQgdG8gaXQuICBOb3Rl IHRoYXQgbm8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGlt aXRlciBpcyBhZGRlZCwgdGhlIHN0cmluZ3MgYXJlIHNpbXBseSBjb25jYXRlbmF0ZWQuICovCisr I2RlZmluZSBBVl9ESUNUX01VTFRJS0VZICAgICAgIDY0ICAgLyoqPCBBbGxvdyB0byBzdG9yZSBz ZXZlcmFsIGVxdWFsIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkgKi8KKysjZGVmaW5lIEFWX0RJQ1Rf REVEVVAgICAgICAgICAxMjggICAvKio8IElmIGluc2VydGluZyBhIHZhbHVlIHRoYXQgYWxyZWFk eSBleGlzdHMgZm9yIGEga2V5LCBkbyBub3RoaW5nLiBPbmx5IHJlbGV2YW50IHdpdGggQVZfRElD VF9NVUxUSUtFWS4gKi8KKysvKioKKysgKiBAfQorKyAqLworKworK3R5cGVkZWYgc3RydWN0IEFW RGljdGlvbmFyeUVudHJ5IHsKKysgICAgY2hhciAqa2V5OworKyAgICBjaGFyICp2YWx1ZTsKKyt9 IEFWRGljdGlvbmFyeUVudHJ5OworKworK3R5cGVkZWYgc3RydWN0IEFWRGljdGlvbmFyeSBBVkRp Y3Rpb25hcnk7CisrCisrLyoqCisrICogR2V0IGEgZGljdGlvbmFyeSBlbnRyeSB3aXRoIG1hdGNo aW5nIGtleS4KKysgKgorKyAqIFRoZSByZXR1cm5lZCBlbnRyeSBrZXkgb3IgdmFsdWUgbXVzdCBu b3QgYmUgY2hhbmdlZCwgb3IgaXQgd2lsbAorKyAqIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvci4K KysgKgorKyAqIEBwYXJhbSBwcmV2ICBTZXQgdG8gdGhlIHByZXZpb3VzIG1hdGNoaW5nIGVsZW1l bnQgdG8gZmluZCB0aGUgbmV4dC4KKysgKiAgICAgICAgICAgICAgSWYgc2V0IHRvIE5VTEwgdGhl IGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgaXMgcmV0dXJuZWQuCisrICogQHBhcmFtIGtleSAgIE1h dGNoaW5nIGtleQorKyAqIEBwYXJhbSBmbGFncyBBIGNvbGxlY3Rpb24gb2YgQVZfRElDVF8qIGZs YWdzIGNvbnRyb2xsaW5nIGhvdyB0aGUKKysgKiAgICAgICAgICAgICAgZW50cnkgaXMgcmV0cmll dmVkCisrICoKKysgKiBAcmV0dXJuICAgICAgRm91bmQgZW50cnkgb3IgTlVMTCBpbiBjYXNlIG5v IG1hdGNoaW5nIGVudHJ5IHdhcyBmb3VuZCBpbiB0aGUgZGljdGlvbmFyeQorKyAqLworK0FWRGlj dGlvbmFyeUVudHJ5ICphdl9kaWN0X2dldChjb25zdCBBVkRpY3Rpb25hcnkgKm0sIGNvbnN0IGNo YXIgKmtleSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZEaWN0aW9u YXJ5RW50cnkgKnByZXYsIGludCBmbGFncyk7CisrCisrLyoqCisrICogSXRlcmF0ZSBvdmVyIGEg ZGljdGlvbmFyeQorKyAqCisrICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgZW50cmllcyBpbiB0aGUg ZGljdGlvbmFyeS4KKysgKgorKyAqIEB3YXJuaW5nIFRoZSByZXR1cm5lZCBBVkRpY3Rpb25hcnlF bnRyeSBrZXkvdmFsdWUgbXVzdCBub3QgYmUgY2hhbmdlZC4KKysgKgorKyAqIEB3YXJuaW5nIEFz IGF2X2RpY3Rfc2V0KCkgaW52YWxpZGF0ZXMgYWxsIHByZXZpb3VzIGVudHJpZXMgcmV0dXJuZWQK KysgKiBieSB0aGlzIGZ1bmN0aW9uLCBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgaXRlcmF0 aW5nIG92ZXIgdGhlIGRpY3QuCisrICoKKysgKiBUeXBpY2FsIHVzYWdlOgorKyAqIEBjb2RlCisr ICogY29uc3QgQVZEaWN0aW9uYXJ5RW50cnkgKmUgPSBOVUxMOworKyAqIHdoaWxlICgoZSA9IGF2 X2RpY3RfaXRlcmF0ZShtLCBlKSkpIHsKKysgKiAgICAgLy8gLi4uCisrICogfQorKyAqIEBlbmRj b2RlCisrICoKKysgKiBAcGFyYW0gbSAgICAgVGhlIGRpY3Rpb25hcnkgdG8gaXRlcmF0ZSBvdmVy CisrICogQHBhcmFtIHByZXYgIFBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIEFWRGljdGlvbmFyeUVu dHJ5LCBOVUxMIGluaXRpYWxseQorKyAqCisrICogQHJldHZhbCBBVkRpY3Rpb25hcnlFbnRyeSog VGhlIG5leHQgZWxlbWVudCBpbiB0aGUgZGljdGlvbmFyeQorKyAqIEByZXR2YWwgTlVMTCAgICAg ICAgICAgICAgIE5vIG1vcmUgZWxlbWVudHMgaW4gdGhlIGRpY3Rpb25hcnkKKysgKi8KKytjb25z dCBBVkRpY3Rpb25hcnlFbnRyeSAqYXZfZGljdF9pdGVyYXRlKGNvbnN0IEFWRGljdGlvbmFyeSAq bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRGlj dGlvbmFyeUVudHJ5ICpwcmV2KTsKKysKKysvKioKKysgKiBHZXQgbnVtYmVyIG9mIGVudHJpZXMg aW4gZGljdGlvbmFyeS4KKysgKgorKyAqIEBwYXJhbSBtIGRpY3Rpb25hcnkKKysgKiBAcmV0dXJu ICBudW1iZXIgb2YgZW50cmllcyBpbiBkaWN0aW9uYXJ5CisrICovCisraW50IGF2X2RpY3RfY291 bnQoY29uc3QgQVZEaWN0aW9uYXJ5ICptKTsKKysKKysvKioKKysgKiBTZXQgdGhlIGdpdmVuIGVu dHJ5IGluICpwbSwgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZW50cnkuCisrICoKKysgKiBOb3Rl OiBJZiBBVl9ESUNUX0RPTlRfU1RSRFVQX0tFWSBvciBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCBp cyBzZXQsCisrICogdGhlc2UgYXJndW1lbnRzIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IuCisrICoK KysgKiBAd2FybmluZyBBZGRpbmcgYSBuZXcgZW50cnkgdG8gYSBkaWN0aW9uYXJ5IGludmFsaWRh dGVzIGFsbCBleGlzdGluZyBlbnRyaWVzCisrICogcHJldmlvdXNseSByZXR1cm5lZCB3aXRoIGF2 X2RpY3RfZ2V0KCkgb3IgYXZfZGljdF9pdGVyYXRlKCkuCisrICoKKysgKiBAcGFyYW0gcG0gICAg ICAgIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgZGljdGlvbmFyeSBzdHJ1Y3QuIElmICpwbSBp cyBOVUxMCisrICogICAgICAgICAgICAgICAgICBhIGRpY3Rpb25hcnkgc3RydWN0IGlzIGFsbG9j YXRlZCBhbmQgcHV0IGluICpwbS4KKysgKiBAcGFyYW0ga2V5ICAgICAgIEVudHJ5IGtleSB0byBh ZGQgdG8gKnBtICh3aWxsIGVpdGhlciBiZSBhdl9zdHJkdXBlZCBvciBhZGRlZCBhcyBhIG5ldyBr ZXkgZGVwZW5kaW5nIG9uIGZsYWdzKQorKyAqIEBwYXJhbSB2YWx1ZSAgICAgRW50cnkgdmFsdWUg dG8gYWRkIHRvICpwbSAod2lsbCBiZSBhdl9zdHJkdXBlZCBvciBhZGRlZCBhcyBhIG5ldyBrZXkg ZGVwZW5kaW5nIG9uIGZsYWdzKS4KKysgKiAgICAgICAgICAgICAgICAgIFBhc3NpbmcgYSBOVUxM IHZhbHVlIHdpbGwgY2F1c2UgYW4gZXhpc3RpbmcgZW50cnkgdG8gYmUgZGVsZXRlZC4KKysgKgor KyAqIEByZXR1cm4gICAgICAgICAgPj0gMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBhbiBlcnJvciBj b2RlIDwwCisrICovCisraW50IGF2X2RpY3Rfc2V0KEFWRGljdGlvbmFyeSAqKnBtLCBjb25zdCBj aGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIENv bnZlbmllbmNlIHdyYXBwZXIgZm9yIGF2X2RpY3Rfc2V0KCkgdGhhdCBjb252ZXJ0cyB0aGUgdmFs dWUgdG8gYSBzdHJpbmcKKysgKiBhbmQgc3RvcmVzIGl0LgorKyAqCisrICogTm90ZTogSWYgOjpB Vl9ESUNUX0RPTlRfU1RSRFVQX0tFWSBpcyBzZXQsIGtleSB3aWxsIGJlIGZyZWVkIG9uIGVycm9y LgorKyAqLworK2ludCBhdl9kaWN0X3NldF9pbnQoQVZEaWN0aW9uYXJ5ICoqcG0sIGNvbnN0IGNo YXIgKmtleSwgaW50NjRfdCB2YWx1ZSwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBQYXJzZSB0 aGUga2V5L3ZhbHVlIHBhaXJzIGxpc3QgYW5kIGFkZCB0aGUgcGFyc2VkIGVudHJpZXMgdG8gYSBk aWN0aW9uYXJ5LgorKyAqCisrICogSW4gY2FzZSBvZiBmYWlsdXJlLCBhbGwgdGhlIHN1Y2Nlc3Nm dWxseSBzZXQgZW50cmllcyBhcmUgc3RvcmVkIGluCisrICogKnBtLiBZb3UgbWF5IG5lZWQgdG8g bWFudWFsbHkgZnJlZSB0aGUgY3JlYXRlZCBkaWN0aW9uYXJ5LgorKyAqCisrICogQHBhcmFtIGtl eV92YWxfc2VwICBBIDAtdGVybWluYXRlZCBsaXN0IG9mIGNoYXJhY3RlcnMgdXNlZCB0byBzZXBh cmF0ZQorKyAqICAgICAgICAgICAgICAgICAgICAga2V5IGZyb20gdmFsdWUKKysgKiBAcGFyYW0g cGFpcnNfc2VwICAgIEEgMC10ZXJtaW5hdGVkIGxpc3Qgb2YgY2hhcmFjdGVycyB1c2VkIHRvIHNl cGFyYXRlCisrICogICAgICAgICAgICAgICAgICAgICB0d28gcGFpcnMgZnJvbSBlYWNoIG90aGVy CisrICogQHBhcmFtIGZsYWdzICAgICAgICBGbGFncyB0byB1c2Ugd2hlbiBhZGRpbmcgdG8gdGhl IGRpY3Rpb25hcnkuCisrICogICAgICAgICAgICAgICAgICAgICA6OkFWX0RJQ1RfRE9OVF9TVFJE VVBfS0VZIGFuZCA6OkFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMCisrICogICAgICAgICAgICAgICAg ICAgICBhcmUgaWdub3JlZCBzaW5jZSB0aGUga2V5L3ZhbHVlIHRva2VucyB3aWxsIGFsd2F5cwor KyAqICAgICAgICAgICAgICAgICAgICAgYmUgZHVwbGljYXRlZC4KKysgKgorKyAqIEByZXR1cm4g ICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVy ZQorKyAqLworK2ludCBhdl9kaWN0X3BhcnNlX3N0cmluZyhBVkRpY3Rpb25hcnkgKipwbSwgY29u c3QgY2hhciAqc3RyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlf dmFsX3NlcCwgY29uc3QgY2hhciAqcGFpcnNfc2VwLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIENvcHkgZW50cmllcyBmcm9tIG9uZSBBVkRpY3Rp b25hcnkgc3RydWN0IGludG8gYW5vdGhlci4KKysgKgorKyAqIEBub3RlIE1ldGFkYXRhIGlzIHJl YWQgdXNpbmcgdGhlIDo6QVZfRElDVF9JR05PUkVfU1VGRklYIGZsYWcKKysgKgorKyAqIEBwYXJh bSBkc3QgICBQb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIEFWRGljdGlvbmFyeSBzdHJ1Y3QgdG8g Y29weSBpbnRvLiBJZiAqZHN0IGlzIE5VTEwsCisrICogICAgICAgICAgICAgIHRoaXMgZnVuY3Rp b24gd2lsbCBhbGxvY2F0ZSBhIHN0cnVjdCBmb3IgeW91IGFuZCBwdXQgaXQgaW4gKmRzdAorKyAq IEBwYXJhbSBzcmMgICBQb2ludGVyIHRvIHRoZSBzb3VyY2UgQVZEaWN0aW9uYXJ5IHN0cnVjdCB0 byBjb3B5IGl0ZW1zIGZyb20uCisrICogQHBhcmFtIGZsYWdzIEZsYWdzIHRvIHVzZSB3aGVuIHNl dHRpbmcgZW50cmllcyBpbiAqZHN0CisrICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVn YXRpdmUgQVZFUlJPUiBjb2RlIG9uIGZhaWx1cmUuIElmIGRzdCB3YXMgYWxsb2NhdGVkCisrICog ICAgICAgICAgIGJ5IHRoaXMgZnVuY3Rpb24sIGNhbGxlcnMgc2hvdWxkIGZyZWUgdGhlIGFzc29j aWF0ZWQgbWVtb3J5LgorKyAqLworK2ludCBhdl9kaWN0X2NvcHkoQVZEaWN0aW9uYXJ5ICoqZHN0 LCBjb25zdCBBVkRpY3Rpb25hcnkgKnNyYywgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBGcmVl IGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYW4gQVZEaWN0aW9uYXJ5IHN0cnVjdAorKyAq IGFuZCBhbGwga2V5cyBhbmQgdmFsdWVzLgorKyAqLworK3ZvaWQgYXZfZGljdF9mcmVlKEFWRGlj dGlvbmFyeSAqKm0pOworKworKy8qKgorKyAqIEdldCBkaWN0aW9uYXJ5IGVudHJpZXMgYXMgYSBz dHJpbmcuCisrICoKKysgKiBDcmVhdGUgYSBzdHJpbmcgY29udGFpbmluZyBkaWN0aW9uYXJ5J3Mg ZW50cmllcy4KKysgKiBTdWNoIHN0cmluZyBtYXkgYmUgcGFzc2VkIGJhY2sgdG8gYXZfZGljdF9w YXJzZV9zdHJpbmcoKS4KKysgKiBAbm90ZSBTdHJpbmcgaXMgZXNjYXBlZCB3aXRoIGJhY2tzbGFz aGVzICgnXCcpLgorKyAqCisrICogQHdhcm5pbmcgU2VwYXJhdG9ycyBjYW5ub3QgYmUgbmVpdGhl ciAnXFwnIG5vciAnXDAnLiBUaGV5IGFsc28gY2Fubm90IGJlIHRoZSBzYW1lLgorKyAqCisrICog QHBhcmFtW2luXSAgbSAgICAgICAgICAgICBUaGUgZGljdGlvbmFyeQorKyAqIEBwYXJhbVtvdXRd IGJ1ZmZlciAgICAgICAgUG9pbnRlciB0byBidWZmZXIgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCB3 aXRoIHN0cmluZyBjb250YWluaW5nIGVudHJpZXMuCisrICogICAgICAgICAgICAgICAgICAgICAg ICAgICBCdWZmZXIgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyIHdoZW4gaXMgbm8gbG9uZ2Vy IG5lZWRlZC4KKysgKiBAcGFyYW1baW5dICBrZXlfdmFsX3NlcCAgIENoYXJhY3RlciB1c2VkIHRv IHNlcGFyYXRlIGtleSBmcm9tIHZhbHVlCisrICogQHBhcmFtW2luXSAgcGFpcnNfc2VwICAgICBD aGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSB0d28gcGFpcnMgZnJvbSBlYWNoIG90aGVyCisrICoK KysgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgID49IDAgb24gc3VjY2VzcywgbmVnYXRpdmUg b24gZXJyb3IKKysgKi8KKytpbnQgYXZfZGljdF9nZXRfc3RyaW5nKGNvbnN0IEFWRGljdGlvbmFy eSAqbSwgY2hhciAqKmJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg a2V5X3ZhbF9zZXAsIGNvbnN0IGNoYXIgcGFpcnNfc2VwKTsKKysKKysvKioKKysgKiBAfQorKyAq LworKworKyNlbmRpZiAvKiBBVlVUSUxfRElDVF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvZXJy b3IuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9lcnJvci5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2Vycm9yLmguZmZt cGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjcwNDIzNiArMDIwMAorKysrIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9l cnJvci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2NjY0OTg4ICswMjAwCitAQCAtMCwwICsxLDEy OSBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisr ICovCisrCisrLyoqCisrICogQGZpbGUKKysgKiBlcnJvciBjb2RlIGRlZmluaXRpb25zCisrICov CisrCisrI2lmbmRlZiBBVlVUSUxfRVJST1JfSAorKyNkZWZpbmUgQVZVVElMX0VSUk9SX0gKKysK KysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2luY2x1ZGUg Im1hY3Jvcy5oIgorKworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdnVfZXJyb3IKKysgKgorKyAq IEB7CisrICovCisrCisrCisrLyogZXJyb3IgaGFuZGxpbmcgKi8KKysjaWYgRURPTSA+IDAKKysj ZGVmaW5lIEFWRVJST1IoZSkgKC0oZSkpICAgLy8vPCBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3Ig Y29kZSBmcm9tIGEgUE9TSVggZXJyb3IgY29kZSwgdG8gcmV0dXJuIGZyb20gbGlicmFyeSBmdW5j dGlvbnMuCisrI2RlZmluZSBBVlVORVJST1IoZSkgKC0oZSkpIC8vLzwgUmV0dXJucyBhIFBPU0lY IGVycm9yIGNvZGUgZnJvbSBhIGxpYnJhcnkgZnVuY3Rpb24gZXJyb3IgcmV0dXJuIHZhbHVlLgor KyNlbHNlCisrLyogU29tZSBwbGF0Zm9ybXMgaGF2ZSBFKiBhbmQgZXJybm8gYWxyZWFkeSBuZWdh dGVkLiAqLworKyNkZWZpbmUgQVZFUlJPUihlKSAoZSkKKysjZGVmaW5lIEFWVU5FUlJPUihlKSAo ZSkKKysjZW5kaWYKKysKKysjZGVmaW5lIEZGRVJSVEFHKGEsIGIsIGMsIGQpICgtKGludClNS1RB RyhhLCBiLCBjLCBkKSkKKysKKysjZGVmaW5lIEFWRVJST1JfQlNGX05PVF9GT1VORCAgICAgIEZG RVJSVEFHKDB4RjgsJ0InLCdTJywnRicpIC8vLzwgQml0c3RyZWFtIGZpbHRlciBub3QgZm91bmQK KysjZGVmaW5lIEFWRVJST1JfQlVHICAgICAgICAgICAgICAgIEZGRVJSVEFHKCAnQicsJ1UnLCdH JywnIScpIC8vLzwgSW50ZXJuYWwgYnVnLCBhbHNvIHNlZSBBVkVSUk9SX0JVRzIKKysjZGVmaW5l IEFWRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgIEZGRVJSVEFHKCAnQicsJ1UnLCdGJywnUycpIC8v LzwgQnVmZmVyIHRvbyBzbWFsbAorKyNkZWZpbmUgQVZFUlJPUl9ERUNPREVSX05PVF9GT1VORCAg RkZFUlJUQUcoMHhGOCwnRCcsJ0UnLCdDJykgLy8vPCBEZWNvZGVyIG5vdCBmb3VuZAorKyNkZWZp bmUgQVZFUlJPUl9ERU1VWEVSX05PVF9GT1VORCAgRkZFUlJUQUcoMHhGOCwnRCcsJ0UnLCdNJykg Ly8vPCBEZW11eGVyIG5vdCBmb3VuZAorKyNkZWZpbmUgQVZFUlJPUl9FTkNPREVSX05PVF9GT1VO RCAgRkZFUlJUQUcoMHhGOCwnRScsJ04nLCdDJykgLy8vPCBFbmNvZGVyIG5vdCBmb3VuZAorKyNk ZWZpbmUgQVZFUlJPUl9FT0YgICAgICAgICAgICAgICAgRkZFUlJUQUcoICdFJywnTycsJ0YnLCcg JykgLy8vPCBFbmQgb2YgZmlsZQorKyNkZWZpbmUgQVZFUlJPUl9FWElUICAgICAgICAgICAgICAg RkZFUlJUQUcoICdFJywnWCcsJ0knLCdUJykgLy8vPCBJbW1lZGlhdGUgZXhpdCB3YXMgcmVxdWVz dGVkOyB0aGUgY2FsbGVkIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgcmVzdGFydGVkCisrI2RlZmlu ZSBBVkVSUk9SX0VYVEVSTkFMICAgICAgICAgICBGRkVSUlRBRyggJ0UnLCdYJywnVCcsJyAnKSAv Ly88IEdlbmVyaWMgZXJyb3IgaW4gYW4gZXh0ZXJuYWwgbGlicmFyeQorKyNkZWZpbmUgQVZFUlJP Ul9GSUxURVJfTk9UX0ZPVU5EICAgRkZFUlJUQUcoMHhGOCwnRicsJ0knLCdMJykgLy8vPCBGaWx0 ZXIgbm90IGZvdW5kCisrI2RlZmluZSBBVkVSUk9SX0lOVkFMSUREQVRBICAgICAgICBGRkVSUlRB RyggJ0knLCdOJywnRCcsJ0EnKSAvLy88IEludmFsaWQgZGF0YSBmb3VuZCB3aGVuIHByb2Nlc3Np bmcgaW5wdXQKKysjZGVmaW5lIEFWRVJST1JfTVVYRVJfTk9UX0ZPVU5EICAgIEZGRVJSVEFHKDB4 RjgsJ00nLCdVJywnWCcpIC8vLzwgTXV4ZXIgbm90IGZvdW5kCisrI2RlZmluZSBBVkVSUk9SX09Q VElPTl9OT1RfRk9VTkQgICBGRkVSUlRBRygweEY4LCdPJywnUCcsJ1QnKSAvLy88IE9wdGlvbiBu b3QgZm91bmQKKysjZGVmaW5lIEFWRVJST1JfUEFUQ0hXRUxDT01FICAgICAgIEZGRVJSVEFHKCAn UCcsJ0EnLCdXJywnRScpIC8vLzwgTm90IHlldCBpbXBsZW1lbnRlZCBpbiBGRm1wZWcsIHBhdGNo ZXMgd2VsY29tZQorKyNkZWZpbmUgQVZFUlJPUl9QUk9UT0NPTF9OT1RfRk9VTkQgRkZFUlJUQUco MHhGOCwnUCcsJ1InLCdPJykgLy8vPCBQcm90b2NvbCBub3QgZm91bmQKKysKKysjZGVmaW5lIEFW RVJST1JfU1RSRUFNX05PVF9GT1VORCAgIEZGRVJSVEFHKDB4RjgsJ1MnLCdUJywnUicpIC8vLzwg U3RyZWFtIG5vdCBmb3VuZAorKy8qKgorKyAqIFRoaXMgaXMgc2VtYW50aWNhbGx5IGlkZW50aWNh bCB0byBBVkVSUk9SX0JVRworKyAqIGl0IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gTGliYXYgYWZ0 ZXIgb3VyIEFWRVJST1JfQlVHIGFuZCB3aXRoIGEgbW9kaWZpZWQgdmFsdWUuCisrICovCisrI2Rl ZmluZSBBVkVSUk9SX0JVRzIgICAgICAgICAgICAgICBGRkVSUlRBRyggJ0InLCdVJywnRycsJyAn KQorKyNkZWZpbmUgQVZFUlJPUl9VTktOT1dOICAgICAgICAgICAgRkZFUlJUQUcoICdVJywnTics J0snLCdOJykgLy8vPCBVbmtub3duIGVycm9yLCB0eXBpY2FsbHkgZnJvbSBhbiBleHRlcm5hbCBs aWJyYXJ5CisrI2RlZmluZSBBVkVSUk9SX0VYUEVSSU1FTlRBTCAgICAgICAoLTB4MmJiMmFmYTgp IC8vLzwgUmVxdWVzdGVkIGZlYXR1cmUgaXMgZmxhZ2dlZCBleHBlcmltZW50YWwuIFNldCBzdHJp Y3Rfc3RkX2NvbXBsaWFuY2UgaWYgeW91IHJlYWxseSB3YW50IHRvIHVzZSBpdC4KKysjZGVmaW5l IEFWRVJST1JfSU5QVVRfQ0hBTkdFRCAgICAgICgtMHg2MzZlNjcwMSkgLy8vPCBJbnB1dCBjaGFu Z2VkIGJldHdlZW4gY2FsbHMuIFJlY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZC4gKGNhbiBiZSBP Ui1lZCB3aXRoIEFWRVJST1JfT1VUUFVUX0NIQU5HRUQpCisrI2RlZmluZSBBVkVSUk9SX09VVFBV VF9DSEFOR0VEICAgICAoLTB4NjM2ZTY3MDIpIC8vLzwgT3V0cHV0IGNoYW5nZWQgYmV0d2VlbiBj YWxscy4gUmVjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLiAoY2FuIGJlIE9SLWVkIHdpdGggQVZF UlJPUl9JTlBVVF9DSEFOR0VEKQorKy8qIEhUVFAgJiBSVFNQIGVycm9ycyAqLworKyNkZWZpbmUg QVZFUlJPUl9IVFRQX0JBRF9SRVFVRVNUICAgRkZFUlJUQUcoMHhGOCwnNCcsJzAnLCcwJykKKysj ZGVmaW5lIEFWRVJST1JfSFRUUF9VTkFVVEhPUklaRUQgIEZGRVJSVEFHKDB4RjgsJzQnLCcwJywn MScpCisrI2RlZmluZSBBVkVSUk9SX0hUVFBfRk9SQklEREVOICAgICBGRkVSUlRBRygweEY4LCc0 JywnMCcsJzMnKQorKyNkZWZpbmUgQVZFUlJPUl9IVFRQX05PVF9GT1VORCAgICAgRkZFUlJUQUco MHhGOCwnNCcsJzAnLCc0JykKKysjZGVmaW5lIEFWRVJST1JfSFRUUF9UT09fTUFOWV9SRVFVRVNU UyBGRkVSUlRBRygweEY4LCc0JywnMicsJzknKQorKyNkZWZpbmUgQVZFUlJPUl9IVFRQX09USEVS XzRYWCAgICAgRkZFUlJUQUcoMHhGOCwnNCcsJ1gnLCdYJykKKysjZGVmaW5lIEFWRVJST1JfSFRU UF9TRVJWRVJfRVJST1IgIEZGRVJSVEFHKDB4RjgsJzUnLCdYJywnWCcpCisrCisrI2RlZmluZSBB Vl9FUlJPUl9NQVhfU1RSSU5HX1NJWkUgNjQKKysKKysvKioKKysgKiBQdXQgYSBkZXNjcmlwdGlv biBvZiB0aGUgQVZFUlJPUiBjb2RlIGVycm51bSBpbiBlcnJidWYuCisrICogSW4gY2FzZSBvZiBm YWlsdXJlIHRoZSBnbG9iYWwgdmFyaWFibGUgZXJybm8gaXMgc2V0IHRvIGluZGljYXRlIHRoZQor KyAqIGVycm9yLiBFdmVuIGluIGNhc2Ugb2YgZmFpbHVyZSBhdl9zdHJlcnJvcigpIHdpbGwgcHJp bnQgYSBnZW5lcmljCisrICogZXJyb3IgbWVzc2FnZSBpbmRpY2F0aW5nIHRoZSBlcnJudW0gcHJv dmlkZWQgdG8gZXJyYnVmLgorKyAqCisrICogQHBhcmFtIGVycm51bSAgICAgIGVycm9yIGNvZGUg dG8gZGVzY3JpYmUKKysgKiBAcGFyYW0gZXJyYnVmICAgICAgYnVmZmVyIHRvIHdoaWNoIGRlc2Ny aXB0aW9uIGlzIHdyaXR0ZW4KKysgKiBAcGFyYW0gZXJyYnVmX3NpemUgdGhlIHNpemUgaW4gYnl0 ZXMgb2YgZXJyYnVmCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUg aWYgYSBkZXNjcmlwdGlvbiBmb3IgZXJybnVtCisrICogY2Fubm90IGJlIGZvdW5kCisrICovCisr aW50IGF2X3N0cmVycm9yKGludCBlcnJudW0sIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9z aXplKTsKKysKKysvKioKKysgKiBGaWxsIHRoZSBwcm92aWRlZCBidWZmZXIgd2l0aCBhIHN0cmlu ZyBjb250YWluaW5nIGFuIGVycm9yIHN0cmluZworKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFW RVJST1IgY29kZSBlcnJudW0uCisrICoKKysgKiBAcGFyYW0gZXJyYnVmICAgICAgICAgYSBidWZm ZXIKKysgKiBAcGFyYW0gZXJyYnVmX3NpemUgICAgc2l6ZSBpbiBieXRlcyBvZiBlcnJidWYKKysg KiBAcGFyYW0gZXJybnVtICAgICAgICAgZXJyb3IgY29kZSB0byBkZXNjcmliZQorKyAqIEByZXR1 cm4gdGhlIGJ1ZmZlciBpbiBpbnB1dCwgZmlsbGVkIHdpdGggdGhlIGVycm9yIGRlc2NyaXB0aW9u CisrICogQHNlZSBhdl9zdHJlcnJvcigpCisrICovCisrc3RhdGljIGlubGluZSBjaGFyICphdl9t YWtlX2Vycm9yX3N0cmluZyhjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSwgaW50IGVy cm51bSkKKyt7CisrICAgIGF2X3N0cmVycm9yKGVycm51bSwgZXJyYnVmLCBlcnJidWZfc2l6ZSk7 CisrICAgIHJldHVybiBlcnJidWY7CisrfQorKworKy8qKgorKyAqIENvbnZlbmllbmNlIG1hY3Jv LCB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSB1c2VkIG9ubHkgZGlyZWN0bHkgaW4KKysgKiBm dW5jdGlvbiBhcmd1bWVudHMgYnV0IG5ldmVyIHN0YW5kLWFsb25lLgorKyAqLworKyNkZWZpbmUg YXZfZXJyMnN0cihlcnJudW0pIFwKKysgICAgYXZfbWFrZV9lcnJvcl9zdHJpbmcoKGNoYXJbQVZf RVJST1JfTUFYX1NUUklOR19TSVpFXSl7MH0sIEFWX0VSUk9SX01BWF9TVFJJTkdfU0laRSwgZXJy bnVtKQorKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9FUlJPUl9I ICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvZnJhbWUuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9mcmFtZS5o CistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL2ZyYW1lLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3Njk4 MjI3OCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9mcmFtZS5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2 NzU2MzI3ICswMjAwCitAQCAtMCwwICsxLDEyMTUgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisr ICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICog QGluZ3JvdXAgbGF2dV9mcmFtZQorKyAqIHJlZmVyZW5jZS1jb3VudGVkIGZyYW1lIEFQSQorKyAq LworKworKyNpZm5kZWYgQVZVVElMX0ZSQU1FX0gKKysjZGVmaW5lIEFWVVRJTF9GUkFNRV9ICisr CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVk ZSAiYXZ1dGlsLmgiCisrI2luY2x1ZGUgImJ1ZmZlci5oIgorKyNpbmNsdWRlICJjaGFubmVsX2xh eW91dC5oIgorKyNpbmNsdWRlICJkaWN0LmgiCisrI2luY2x1ZGUgInJhdGlvbmFsLmgiCisrI2lu Y2x1ZGUgInNhbXBsZWZtdC5oIgorKyNpbmNsdWRlICJwaXhmbXQuaCIKKysjaW5jbHVkZSAidmVy c2lvbi5oIgorKworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZ1X2ZyYW1lIEFWRnJhbWUKKysg KiBAaW5ncm91cCBsYXZ1X2RhdGEKKysgKgorKyAqIEB7CisrICogQVZGcmFtZSBpcyBhbiBhYnN0 cmFjdGlvbiBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgcmF3IG11bHRpbWVkaWEgZGF0YS4KKysgKi8K KysKKytlbnVtIEFWRnJhbWVTaWRlRGF0YVR5cGUgeworKyAgICAvKioKKysgICAgICogVGhlIGRh dGEgaXMgdGhlIEFWUGFuU2NhbiBzdHJ1Y3QgZGVmaW5lZCBpbiBsaWJhdmNvZGVjLgorKyAgICAg Ki8KKysgICAgQVZfRlJBTUVfREFUQV9QQU5TQ0FOLAorKyAgICAvKioKKysgICAgICogQVRTQyBB NTMgUGFydCA0IENsb3NlZCBDYXB0aW9ucy4KKysgICAgICogQTUzIENDIGJpdHN0cmVhbSBpcyBz dG9yZWQgYXMgdWludDhfdCBpbiBBVkZyYW1lU2lkZURhdGEuZGF0YS4KKysgICAgICogVGhlIG51 bWJlciBvZiBieXRlcyBvZiBDQyBkYXRhIGlzIEFWRnJhbWVTaWRlRGF0YS5zaXplLgorKyAgICAg Ki8KKysgICAgQVZfRlJBTUVfREFUQV9BNTNfQ0MsCisrICAgIC8qKgorKyAgICAgKiBTdGVyZW9z Y29waWMgM2QgbWV0YWRhdGEuCisrICAgICAqIFRoZSBkYXRhIGlzIHRoZSBBVlN0ZXJlbzNEIHN0 cnVjdCBkZWZpbmVkIGluIGxpYmF2dXRpbC9zdGVyZW8zZC5oLgorKyAgICAgKi8KKysgICAgQVZf RlJBTUVfREFUQV9TVEVSRU8zRCwKKysgICAgLyoqCisrICAgICAqIFRoZSBkYXRhIGlzIHRoZSBB Vk1hdHJpeEVuY29kaW5nIGVudW0gZGVmaW5lZCBpbiBsaWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQu aC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfTUFUUklYRU5DT0RJTkcsCisrICAgIC8q KgorKyAgICAgKiBNZXRhZGF0YSByZWxldmFudCB0byBhIGRvd25taXggcHJvY2VkdXJlLgorKyAg ICAgKiBUaGUgZGF0YSBpcyB0aGUgQVZEb3dubWl4SW5mbyBzdHJ1Y3QgZGVmaW5lZCBpbiBsaWJh dnV0aWwvZG93bm1peF9pbmZvLmguCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0RPV05N SVhfSU5GTywKKysgICAgLyoqCisrICAgICAqIFJlcGxheUdhaW4gaW5mb3JtYXRpb24gaW4gdGhl IGZvcm0gb2YgdGhlIEFWUmVwbGF5R2FpbiBzdHJ1Y3QuCisrICAgICAqLworKyAgICBBVl9GUkFN RV9EQVRBX1JFUExBWUdBSU4sCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb250 YWlucyBhIDN4MyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZGVzY3JpYmluZyBhbiBhZmZpbmUKKysg ICAgICogdHJhbnNmb3JtYXRpb24gdGhhdCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBmcmFt ZSBmb3IgY29ycmVjdAorKyAgICAgKiBwcmVzZW50YXRpb24uCisrICAgICAqCisrICAgICAqIFNl ZSBsaWJhdnV0aWwvZGlzcGxheS5oIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBk YXRhLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9ESVNQTEFZTUFUUklYLAorKyAgICAv KioKKysgICAgICogQWN0aXZlIEZvcm1hdCBEZXNjcmlwdGlvbiBkYXRhIGNvbnNpc3Rpbmcgb2Yg YSBzaW5nbGUgYnl0ZSBhcyBzcGVjaWZpZWQKKysgICAgICogaW4gRVRTSSBUUyAxMDEgMTU0IHVz aW5nIEFWQWN0aXZlRm9ybWF0RGVzY3JpcHRpb24gZW51bS4KKysgICAgICovCisrICAgIEFWX0ZS QU1FX0RBVEFfQUZELAorKyAgICAvKioKKysgICAgICogTW90aW9uIHZlY3RvcnMgZXhwb3J0ZWQg Ynkgc29tZSBjb2RlY3MgKG9uIGRlbWFuZCB0aHJvdWdoIHRoZSBleHBvcnRfbXZzCisrICAgICAq IGZsYWcgc2V0IGluIHRoZSBsaWJhdmNvZGVjIEFWQ29kZWNDb250ZXh0IGZsYWdzMiBvcHRpb24p LgorKyAgICAgKiBUaGUgZGF0YSBpcyB0aGUgQVZNb3Rpb25WZWN0b3Igc3RydWN0IGRlZmluZWQg aW4KKysgICAgICogbGliYXZ1dGlsL21vdGlvbl92ZWN0b3IuaC4KKysgICAgICovCisrICAgIEFW X0ZSQU1FX0RBVEFfTU9USU9OX1ZFQ1RPUlMsCisrICAgIC8qKgorKyAgICAgKiBSZWNvbW1lbmRz IHNraXBwaW5nIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNhbXBsZXMuIFRoaXMgaXMgZXhwb3J0 ZWQKKysgICAgICogb25seSBpZiB0aGUgInNraXBfbWFudWFsIiBBVk9wdGlvbiBpcyBzZXQgaW4g bGliYXZjb2RlYy4KKysgICAgICogVGhpcyBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIEFWX1BLVF9E QVRBX1NLSVBfU0FNUExFUy4KKysgICAgICogQGNvZGUKKysgICAgICogdTMybGUgbnVtYmVyIG9m IHNhbXBsZXMgdG8gc2tpcCBmcm9tIHN0YXJ0IG9mIHRoaXMgcGFja2V0CisrICAgICAqIHUzMmxl IG51bWJlciBvZiBzYW1wbGVzIHRvIHNraXAgZnJvbSBlbmQgb2YgdGhpcyBwYWNrZXQKKysgICAg ICogdTggICAgcmVhc29uIGZvciBzdGFydCBza2lwCisrICAgICAqIHU4ICAgIHJlYXNvbiBmb3Ig ZW5kICAgc2tpcCAoMD1wYWRkaW5nIHNpbGVuY2UsIDE9Y29udmVyZ2VuY2UpCisrICAgICAqIEBl bmRjb2RlCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX1NLSVBfU0FNUExFUywKKysgICAg LyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGF1 ZGlvIGZyYW1lIGFuZCBjb3JyZXNwb25kcyB0bworKyAgICAgKiBlbnVtIEFWQXVkaW9TZXJ2aWNl VHlwZSBkZWZpbmVkIGluIGF2Y29kZWMuaC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFf QVVESU9fU0VSVklDRV9UWVBFLAorKyAgICAvKioKKysgICAgICogTWFzdGVyaW5nIGRpc3BsYXkg bWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gZnJhbWUuIFRoZSBwYXlsb2FkIGlzCisr ICAgICAqIGFuIEFWTWFzdGVyaW5nRGlzcGxheU1ldGFkYXRhIHR5cGUgYW5kIGNvbnRhaW5zIGlu Zm9ybWF0aW9uIGFib3V0IHRoZQorKyAgICAgKiBtYXN0ZXJpbmcgZGlzcGxheSBjb2xvciB2b2x1 bWUuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX01BU1RFUklOR19ESVNQTEFZX01FVEFE QVRBLAorKyAgICAvKioKKysgICAgICogVGhlIEdPUCB0aW1lY29kZSBpbiAyNSBiaXQgdGltZWNv ZGUgZm9ybWF0LiBEYXRhIGZvcm1hdCBpcyA2NC1iaXQgaW50ZWdlci4KKysgICAgICogVGhpcyBp cyBzZXQgb24gdGhlIGZpcnN0IGZyYW1lIG9mIGEgR09QIHRoYXQgaGFzIGEgdGVtcG9yYWwgcmVm ZXJlbmNlIG9mIDAuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0dPUF9USU1FQ09ERSwK KysKKysgICAgLyoqCisrICAgICAqIFRoZSBkYXRhIHJlcHJlc2VudHMgdGhlIEFWU3BoZXJpY2Fs TWFwcGluZyBzdHJ1Y3R1cmUgZGVmaW5lZCBpbgorKyAgICAgKiBsaWJhdnV0aWwvc3BoZXJpY2Fs LmguCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX1NQSEVSSUNBTCwKKysKKysgICAgLyoq CisrICAgICAqIENvbnRlbnQgbGlnaHQgbGV2ZWwgKGJhc2VkIG9uIENUQS04NjEuMykuIFRoaXMg cGF5bG9hZCBjb250YWlucyBkYXRhIGluCisrICAgICAqIHRoZSBmb3JtIG9mIHRoZSBBVkNvbnRl bnRMaWdodE1ldGFkYXRhIHN0cnVjdC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfQ09O VEVOVF9MSUdIVF9MRVZFTCwKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBkYXRhIGNvbnRhaW5z IGFuIElDQyBwcm9maWxlIGFzIGFuIG9wYXF1ZSBvY3RldCBidWZmZXIgZm9sbG93aW5nIHRoZQor KyAgICAgKiBmb3JtYXQgZGVzY3JpYmVkIGJ5IElTTyAxNTA3Ni0xIHdpdGggYW4gb3B0aW9uYWwg bmFtZSBkZWZpbmVkIGluIHRoZQorKyAgICAgKiBtZXRhZGF0YSBrZXkgZW50cnkgIm5hbWUiLgor KyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9JQ0NfUFJPRklMRSwKKysKKysgICAgLyoqCisr ICAgICAqIFRpbWVjb2RlIHdoaWNoIGNvbmZvcm1zIHRvIFNNUFRFIFNUIDEyLTEuIFRoZSBkYXRh IGlzIGFuIGFycmF5IG9mIDQgdWludDMyX3QKKysgICAgICogd2hlcmUgdGhlIGZpcnN0IHVpbnQz Ml90IGRlc2NyaWJlcyBob3cgbWFueSAoMS0zKSBvZiB0aGUgb3RoZXIgdGltZWNvZGVzIGFyZSB1 c2VkLgorKyAgICAgKiBUaGUgdGltZWNvZGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9j dW1lbnRhdGlvbiBvZiBhdl90aW1lY29kZV9nZXRfc21wdGVfZnJvbV9mcmFtZW51bSgpCisrICAg ICAqIGZ1bmN0aW9uIGluIGxpYmF2dXRpbC90aW1lY29kZS5oLgorKyAgICAgKi8KKysgICAgQVZf RlJBTUVfREFUQV9TMTJNX1RJTUVDT0RFLAorKworKyAgICAvKioKKysgICAgICogSERSIGR5bmFt aWMgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gZnJhbWUuIFRoZSBwYXlsb2FkIGlz CisrICAgICAqIGFuIEFWRHluYW1pY0hEUlBsdXMgdHlwZSBhbmQgY29udGFpbnMgaW5mb3JtYXRp b24gZm9yIGNvbG9yCisrICAgICAqIHZvbHVtZSB0cmFuc2Zvcm0gLSBhcHBsaWNhdGlvbiA0IG9m IFNNUFRFIDIwOTQtNDA6MjAxNiBzdGFuZGFyZC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RB VEFfRFlOQU1JQ19IRFJfUExVUywKKysKKysgICAgLyoqCisrICAgICAqIFJlZ2lvbnMgT2YgSW50 ZXJlc3QsIHRoZSBkYXRhIGlzIGFuIGFycmF5IG9mIEFWUmVnaW9uT2ZJbnRlcmVzdCB0eXBlLCB0 aGUgbnVtYmVyIG9mCisrICAgICAqIGFycmF5IGVsZW1lbnQgaXMgaW1wbGllZCBieSBBVkZyYW1l U2lkZURhdGEuc2l6ZSAvIEFWUmVnaW9uT2ZJbnRlcmVzdC5zZWxmX3NpemUuCisrICAgICAqLwor KyAgICBBVl9GUkFNRV9EQVRBX1JFR0lPTlNfT0ZfSU5URVJFU1QsCisrCisrICAgIC8qKgorKyAg ICAgKiBFbmNvZGluZyBwYXJhbWV0ZXJzIGZvciBhIHZpZGVvIGZyYW1lLCBhcyBkZXNjcmliZWQg YnkgQVZWaWRlb0VuY1BhcmFtcy4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfVklERU9f RU5DX1BBUkFNUywKKysKKysgICAgLyoqCisrICAgICAqIFVzZXIgZGF0YSB1bnJlZ2lzdGVyZWQg bWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gZnJhbWUuCisrICAgICAqIFRoaXMgaXMg dGhlIEguMjZbNDVdIFVEVSBTRUkgbWVzc2FnZSwgYW5kIHNob3VsZG4ndCBiZSB1c2VkIGZvciBh bnkgb3RoZXIgcHVycG9zZQorKyAgICAgKiBUaGUgZGF0YSBpcyBzdG9yZWQgYXMgdWludDhfdCBp biBBVkZyYW1lU2lkZURhdGEuZGF0YSB3aGljaCBpcyAxNiBieXRlcyBvZgorKyAgICAgKiB1dWlk X2lzb19pZWNfMTE1NzggZm9sbG93ZWQgYnkgQVZGcmFtZVNpZGVEYXRhLnNpemUgLSAxNiBieXRl cyBvZiB1c2VyX2RhdGFfcGF5bG9hZF9ieXRlLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFU QV9TRUlfVU5SRUdJU1RFUkVELAorKworKyAgICAvKioKKysgICAgICogRmlsbSBncmFpbiBwYXJh bWV0ZXJzIGZvciBhIGZyYW1lLCBkZXNjcmliZWQgYnkgQVZGaWxtR3JhaW5QYXJhbXMuCisrICAg ICAqIE11c3QgYmUgcHJlc2VudCBmb3IgZXZlcnkgZnJhbWUgd2hpY2ggc2hvdWxkIGhhdmUgZmls bSBncmFpbiBhcHBsaWVkLgorKyAgICAgKgorKyAgICAgKiBNYXkgYmUgcHJlc2VudCBtdWx0aXBs ZSB0aW1lcywgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKKysgICAgICogYWx0 ZXJuYXRpdmUgcGFyYW1ldGVyIHNldHMgZm9yIGRpZmZlcmVudCB2aWRlbyBzaWduYWwgY2hhcmFj dGVyaXN0aWNzLgorKyAgICAgKiBUaGUgdXNlciBzaG91bGQgc2VsZWN0IHRoZSBtb3N0IGFwcHJv cHJpYXRlIHNldCBmb3IgdGhlIGFwcGxpY2F0aW9uLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVf REFUQV9GSUxNX0dSQUlOX1BBUkFNUywKKysKKysgICAgLyoqCisrICAgICAqIEJvdW5kaW5nIGJv eGVzIGZvciBvYmplY3QgZGV0ZWN0aW9uIGFuZCBjbGFzc2lmaWNhdGlvbiwKKysgICAgICogYXMg ZGVzY3JpYmVkIGJ5IEFWRGV0ZWN0aW9uQkJveEhlYWRlci4KKysgICAgICovCisrICAgIEFWX0ZS QU1FX0RBVEFfREVURUNUSU9OX0JCT1hFUywKKysKKysgICAgLyoqCisrICAgICAqIERvbGJ5IFZp c2lvbiBSUFUgcmF3IGRhdGEsIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHgyNjUKKysgICAgICog b3Igb3RoZXIgbGlicmFyaWVzLiBBcnJheSBvZiB1aW50OF90LCB3aXRoIE5BTCBlbXVsYXRpb24K KysgICAgICogYnl0ZXMgaW50YWN0LgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9ET1ZJ X1JQVV9CVUZGRVIsCisrCisrICAgIC8qKgorKyAgICAgKiBQYXJzZWQgRG9sYnkgVmlzaW9uIG1l dGFkYXRhLCBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhIHNvZnR3YXJlCisrICAgICAqIGltcGxl bWVudGF0aW9uLiBUaGUgcGF5bG9hZCBpcyB0aGUgQVZET1ZJTWV0YWRhdGEgc3RydWN0IGRlZmlu ZWQgaW4KKysgICAgICogbGliYXZ1dGlsL2RvdmlfbWV0YS5oLgorKyAgICAgKi8KKysgICAgQVZf RlJBTUVfREFUQV9ET1ZJX01FVEFEQVRBLAorKworKyAgICAvKioKKysgICAgICogSERSIFZpdmlk IGR5bmFtaWMgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gZnJhbWUuIFRoZSBwYXls b2FkIGlzCisrICAgICAqIGFuIEFWRHluYW1pY0hEUlZpdmlkIHR5cGUgYW5kIGNvbnRhaW5zIGlu Zm9ybWF0aW9uIGZvciBjb2xvcgorKyAgICAgKiB2b2x1bWUgdHJhbnNmb3JtIC0gQ1VWQSAwMDUu MS0yMDIxLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9EWU5BTUlDX0hEUl9WSVZJRCwK KysKKysgICAgLyoqCisrICAgICAqIEFtYmllbnQgdmlld2luZyBlbnZpcm9ubWVudCBtZXRhZGF0 YSwgYXMgZGVmaW5lZCBieSBILjI3NC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfQU1C SUVOVF9WSUVXSU5HX0VOVklST05NRU5ULAorKworKyAgICAvKioKKysgICAgICogUHJvdmlkZSBl bmNvZGVyLXNwZWNpZmljIGhpbnRpbmcgaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlZC91bmNoYW5n ZWQKKysgICAgICogcG9ydGlvbnMgb2YgYSBmcmFtZS4gIEl0IGNhbiBiZSB1c2VkIHRvIHBhc3Mg aW5mb3JtYXRpb24gYWJvdXQgd2hpY2gKKysgICAgICogbWFjcm9ibG9ja3MgY2FuIGJlIHNraXBw ZWQgYmVjYXVzZSB0aGV5IGRpZG4ndCBjaGFuZ2UgZnJvbSB0aGUKKysgICAgICogY29ycmVzcG9u ZGluZyBvbmVzIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9y CisrICAgICAqIGFwcGxpY2F0aW9ucyB3aGljaCBrbm93IHRoaXMgaW5mb3JtYXRpb24gaW4gYWR2 YW5jZSB0byBzcGVlZCB1cAorKyAgICAgKiBlbmNvZGluZy4KKysgICAgICovCisrICAgIEFWX0ZS QU1FX0RBVEFfVklERU9fSElOVCwKKysKKysgICAgLyoqCisrICAgICAqIFJhdyBMQ0VWQyBwYXls b2FkIGRhdGEsIGFzIGEgdWludDhfdCBhcnJheSwgd2l0aCBOQUwgZW11bGF0aW9uCisrICAgICAq IGJ5dGVzIGludGFjdC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfTENFVkMsCisrCisr ICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBh IHZpZGVvIGZyYW1lLgorKyAgICAgKiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBzaWRlIGRhdGEgaW5k aWNhdGVzIHRoYXQgdGhlIHZpZGVvIHN0cmVhbSBpcworKyAgICAgKiBjb21wb3NlZCBvZiBtdWx0 aXBsZSB2aWV3cyAoZS5nLiBzdGVyZW9zY29waWMgM0QgY29udGVudCwKKysgICAgICogY2YuIEgu MjY0IEFubmV4IEggb3IgSC4yNjUgQW5uZXggRykuCisrICAgICAqIFRoZSBkYXRhIGlzIGFuIGlu dCBzdG9yaW5nIHRoZSB2aWV3IElELgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9WSUVX X0lELAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEgY29udGFpbnMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIHJlZmVyZW5jZSBkaXNwbGF5IHdpZHRoKHMpCisrICAgICAqIGFuZCBy ZWZlcmVuY2Ugdmlld2luZyBkaXN0YW5jZShzKSBhcyB3ZWxsIGFzIGluZm9ybWF0aW9uIGFib3V0 IHRoZQorKyAgICAgKiBjb3JyZXNwb25kaW5nIHJlZmVyZW5jZSBzdGVyZW8gcGFpcihzKSwgaS5l LiwgdGhlIHBhaXIocykgb2Ygdmlld3MgdG8gYmUKKysgICAgICogZGlzcGxheWVkIGZvciB0aGUg dmlld2VyJ3MgbGVmdCBhbmQgcmlnaHQgZXllcyBvbiB0aGUgcmVmZXJlbmNlIGRpc3BsYXkKKysg ICAgICogYXQgdGhlIHJlZmVyZW5jZSB2aWV3aW5nIGRpc3RhbmNlLgorKyAgICAgKiBUaGUgcGF5 bG9hZCBpcyB0aGUgQVYzRFJlZmVyZW5jZURpc3BsYXlzSW5mbyBzdHJ1Y3QgZGVmaW5lZCBpbgor KyAgICAgKiBsaWJhdnV0aWwvdGRyZGkuaC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFf M0RfUkVGRVJFTkNFX0RJU1BMQVlTLAorKworKyAgICAvKioKKysgICAgICogRXhjaGFuZ2VhYmxl IGltYWdlIGZpbGUgZm9ybWF0IG1ldGFkYXRhLiBUaGUgcGF5bG9hZCBpcyBhIGJ1ZmZlciBjb250 YWluaW5nCisrICAgICAqIEVYSUYgbWV0YWRhdGEsIHN0YXJ0aW5nIHdpdGggZWl0aGVyIDQ5IDQ5 IDJhIDAwLCBvciA0ZCA0ZCAwMCAyYS4gVGhlc2UgZm91cgorKyAgICAgKiBieXRlcyBzaWduaWZ5 IHRoZSBlbmRpYW5uZXNzLCBhbmQgb2NjdXIgYXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIFRJRkYg aGVhZGVyLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9FWElGLAorKworKyAgICAvKioK KysgICAgICogSERSIGR5bmFtaWMgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdmlkZW8gZnJh bWUuIFRoZSBwYXlsb2FkIGlzCisrICAgICAqIGFuIEFWRHluYW1pY0hEUlNtcHRlMjA5NEFwcDUg dHlwZSBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGNvbG9yCisrICAgICAqIHZvbHVtZSB0 cmFuc2Zvcm0gYXMgc3BlY2lmaWVkIGluIHRoZSBTTVBURSAyMDk0LTUwIHN0YW5kYXJkLgorKyAg ICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9EWU5BTUlDX0hEUl9TTVBURV8yMDk0X0FQUDUsCisr CisrICAgIC8qKgorKyAgICAgKiBJQU1GIE1peCBHYWluIFBhcmFtZXRlciBEYXRhIGFzc29jaWF0 ZWQgd2l0aCB0aGUgYXVkaW8gZnJhbWUuIFRoaXMgbWV0YWRhdGEKKysgICAgICogaXMgaW4gdGhl IGZvcm0gb2YgdGhlIEFWSUFNRlBhcmFtRGVmaW5pdGlvbiBzdHJ1Y3QgYW5kIGNvbnRhaW5zIGlu Zm9ybWF0aW9uCisrICAgICAqIGRlZmluZWQgaW4gc2VjdGlvbnMgMy42LjEgYW5kIDMuOC4xIG9m IHRoZSBJbW1lcnNpdmUgQXVkaW8gTW9kZWwgYW5kCisrICAgICAqIEZvcm1hdHMgc3RhbmRhcmQu CisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0lBTUZfTUlYX0dBSU5fUEFSQU0sCisrCisr ICAgIC8qKgorKyAgICAqIElBTUYgRGVtaXhpbmcgSW5mbyBQYXJhbWV0ZXIgRGF0YSBhc3NvY2lh dGVkIHdpdGggdGhlIGF1ZGlvIGZyYW1lLiBUaGlzCisrICAgICogbWV0YWRhdGEgaXMgaW4gdGhl IGZvcm0gb2YgdGhlIEFWSUFNRlBhcmFtRGVmaW5pdGlvbiBzdHJ1Y3QgYW5kIGNvbnRhaW5zCisr ICAgICogaW5mb3JtYXRpb24gZGVmaW5lZCBpbiBzZWN0aW9ucyAzLjYuMSBhbmQgMy44LjIgb2Yg dGhlIEltbWVyc2l2ZSBBdWRpbyBNb2RlbAorKyAgICAqIGFuZCBGb3JtYXRzIHN0YW5kYXJkLgor KyAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0lBTUZfREVNSVhJTkdfSU5GT19QQVJBTSwKKysK KysgICAgLyoqCisrICAgICogSUFNRiBSZWNvbiBHYWluIEluZm8gUGFyYW1ldGVyIERhdGEgYXNz b2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBmcmFtZS4gVGhpcworKyAgICAqIG1ldGFkYXRhIGlzIGlu IHRoZSBmb3JtIG9mIHRoZSBBVklBTUZQYXJhbURlZmluaXRpb24gc3RydWN0IGFuZCBjb250YWlu cworKyAgICAqIGluZm9ybWF0aW9uIGRlZmluZWQgaW4gc2VjdGlvbnMgMy42LjEgYW5kIDMuOC4z IG9mIHRoZSBJbW1lcnNpdmUgQXVkaW8gTW9kZWwKKysgICAgKiBhbmQgRm9ybWF0cyBzdGFuZGFy ZC4KKysgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9JQU1GX1JFQ09OX0dBSU5fSU5GT19QQVJB TSwKKysKKysgICAgLyoqCisrICAgICAqIENvbG9yIGluZm9ybWF0aW9uIGZyb20gYSBSQVcgY2Ft ZXJhIGNvZGVjcywgbmVlZGVkIHRvIGNvcnJlY3RseSBwcm9jZXNzCisrICAgICAqIHRoZSB2aWRl byBkYXRhLiBUaGUgcGF5bG9hZCBpcyBhbiBBVlJhd0NvbG9yUGFyYW1zIHN0cnVjdCBkZWZpbmVk IGluCisrICAgICAqIGxpYmF2dXRpbC9yYXdfY29sb3JfcGFyYW1zLmguCisrICAgICAqLworKyAg ICBBVl9GUkFNRV9EQVRBX1JBV19DT0xPUl9QQVJBTVMsCisrfTsKKysKKytlbnVtIEFWQWN0aXZl Rm9ybWF0RGVzY3JpcHRpb24geworKyAgICBBVl9BRkRfU0FNRSAgICAgICAgID0gOCwKKysgICAg QVZfQUZEXzRfMyAgICAgICAgICA9IDksCisrICAgIEFWX0FGRF8xNl85ICAgICAgICAgPSAxMCwK KysgICAgQVZfQUZEXzE0XzkgICAgICAgICA9IDExLAorKyAgICBBVl9BRkRfNF8zX1NQXzE0Xzkg ID0gMTMsCisrICAgIEFWX0FGRF8xNl85X1NQXzE0XzkgPSAxNCwKKysgICAgQVZfQUZEX1NQXzRf MyAgICAgICA9IDE1LAorK307CisrCisrCisrLyoqCisrICogU3RydWN0dXJlIHRvIGhvbGQgc2lk ZSBkYXRhIGZvciBhbiBBVkZyYW1lLgorKyAqCisrICogc2l6ZW9mKEFWRnJhbWVTaWRlRGF0YSkg aXMgbm90IGEgcGFydCBvZiB0aGUgcHVibGljIEFCSSwgc28gbmV3IGZpZWxkcyBtYXkgYmUgYWRk ZWQKKysgKiB0byB0aGUgZW5kIHdpdGggYSBtaW5vciBidW1wLgorKyAqLworK3R5cGVkZWYgc3Ry dWN0IEFWRnJhbWVTaWRlRGF0YSB7CisrICAgIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBl OworKyAgICB1aW50OF90ICpkYXRhOworKyAgICBzaXplX3QgICBzaXplOworKyAgICBBVkRpY3Rp b25hcnkgKm1ldGFkYXRhOworKyAgICBBVkJ1ZmZlclJlZiAqYnVmOworK30gQVZGcmFtZVNpZGVE YXRhOworKworK2VudW0gQVZTaWRlRGF0YVByb3BzIHsKKysgICAgLyoqCisrICAgICAqIFRoZSBz aWRlIGRhdGEgdHlwZSBjYW4gYmUgdXNlZCBpbiBzdHJlYW0tZ2xvYmFsIHN0cnVjdHVyZXMuCisr ICAgICAqIFNpZGUgZGF0YSB0eXBlcyB3aXRob3V0IHRoaXMgcHJvcGVydHkgYXJlIG9ubHkgbWVh bmluZ2Z1bCBvbiBwZXItZnJhbWUKKysgICAgICogYmFzaXMuCisrICAgICAqLworKyAgICBBVl9T SURFX0RBVEFfUFJPUF9HTE9CQUwgPSAoMSA8PCAwKSwKKysKKysgICAgLyoqCisrICAgICAqIE11 bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIHNpZGUgZGF0YSB0eXBlIGNhbiBiZSBtZWFuaW5nZnVs bHkgcHJlc2VudCBpbgorKyAgICAgKiBhIHNpbmdsZSBzaWRlIGRhdGEgYXJyYXkuCisrICAgICAq LworKyAgICBBVl9TSURFX0RBVEFfUFJPUF9NVUxUSSAgPSAoMSA8PCAxKSwKKysKKysgICAgLyoq CisrICAgICAqIFNpZGUgZGF0YSBkZXBlbmRzIG9uIHRoZSB2aWRlbyBkaW1lbnNpb25zLiBTaWRl IGRhdGEgd2l0aCB0aGlzIHByb3BlcnR5CisrICAgICAqIGxvc2VzIGl0cyBtZWFuaW5nIHdoZW4g cmVzY2FsaW5nIG9yIGNyb3BwaW5nIHRoZSBpbWFnZSwgdW5sZXNzCisrICAgICAqIGVpdGhlciBy ZWNvbXB1dGVkIG9yIGFkanVzdGVkIHRvIHRoZSBuZXcgcmVzb2x1dGlvbi4KKysgICAgICovCisr ICAgIEFWX1NJREVfREFUQV9QUk9QX1NJWkVfREVQRU5ERU5UID0gKDEgPDwgMiksCisrCisrICAg IC8qKgorKyAgICAgKiBTaWRlIGRhdGEgZGVwZW5kcyBvbiB0aGUgdmlkZW8gY29sb3Igc3BhY2Uu IFNpZGUgZGF0YSB3aXRoIHRoaXMgcHJvcGVydHkKKysgICAgICogbG9zZXMgaXRzIG1lYW5pbmcg d2hlbiBjaGFuZ2luZyB0aGUgdmlkZW8gY29sb3IgZW5jb2RpbmcsIGUuZy4gYnkKKysgICAgICog YWRhcHRpbmcgdG8gYSBkaWZmZXJlbnQgc2V0IG9mIHByaW1hcmllcyBvciB0cmFuc2ZlciBjaGFy YWN0ZXJpc3RpY3MuCisrICAgICAqLworKyAgICBBVl9TSURFX0RBVEFfUFJPUF9DT0xPUl9ERVBF TkRFTlQgPSAoMSA8PCAzKSwKKysKKysgICAgLyoqCisrICAgICAqIFNpZGUgZGF0YSBkZXBlbmRz IG9uIHRoZSBjaGFubmVsIGxheW91dC4gU2lkZSBkYXRhIHdpdGggdGhpcyBwcm9wZXJ0eQorKyAg ICAgKiBsb3NlcyBpdHMgbWVhbmluZyB3aGVuIGRvd25taXhpbmcgb3IgdXBtaXhpbmcsIHVubGVz cyBlaXRoZXIgcmVjb21wdXRlZAorKyAgICAgKiBvciBhZGp1c3RlZCB0byB0aGUgbmV3IGxheW91 dC4KKysgICAgICovCisrICAgIEFWX1NJREVfREFUQV9QUk9QX0NIQU5ORUxfREVQRU5ERU5UID0g KDEgPDwgNCksCisrfTsKKysKKysvKioKKysgKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIHBy b3BlcnRpZXMgb2YgYSBzaWRlIGRhdGEgdHlwZS4gSXRzIGluc3RhbmNlCisrICogY29ycmVzcG9u ZGluZyB0byBhIGdpdmVuIHR5cGUgY2FuIGJlIG9idGFpbmVkIGZyb20gYXZfZnJhbWVfc2lkZV9k YXRhX2Rlc2MoKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVlNpZGVEYXRhRGVzY3JpcHRvciB7 CisrICAgIC8qKgorKyAgICAgKiBIdW1hbi1yZWFkYWJsZSBzaWRlIGRhdGEgZGVzY3JpcHRpb24u CisrICAgICAqLworKyAgICBjb25zdCBjaGFyICAgICAgKm5hbWU7CisrCisrICAgIC8qKgorKyAg ICAgKiBTaWRlIGRhdGEgcHJvcGVydHkgZmxhZ3MsIGEgY29tYmluYXRpb24gb2YgQVZTaWRlRGF0 YVByb3BzIHZhbHVlcy4KKysgICAgICovCisrICAgIHVuc2lnbmVkICAgICAgICAgcHJvcHM7Cisr fSBBVlNpZGVEYXRhRGVzY3JpcHRvcjsKKysKKysvKioKKysgKiBTdHJ1Y3R1cmUgZGVzY3JpYmlu ZyBhIHNpbmdsZSBSZWdpb24gT2YgSW50ZXJlc3QuCisrICoKKysgKiBXaGVuIG11bHRpcGxlIHJl Z2lvbnMgYXJlIGRlZmluZWQgaW4gYSBzaW5nbGUgc2lkZS1kYXRhIGJsb2NrLCB0aGV5CisrICog c2hvdWxkIGJlIG9yZGVyZWQgZnJvbSBtb3N0IHRvIGxlYXN0IGltcG9ydGFudCAtIHNvbWUgZW5j b2RlcnMgYXJlIG9ubHkKKysgKiBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgYSBsaW1pdGVkIG51bWJl ciBvZiBkaXN0aW5jdCByZWdpb25zLCBzbyB3aWxsIGhhdmUKKysgKiB0byB0cnVuY2F0ZSB0aGUg bGlzdC4KKysgKgorKyAqIFdoZW4gb3ZlcmxhcHBpbmcgcmVnaW9ucyBhcmUgZGVmaW5lZCwgdGhl IGZpcnN0IHJlZ2lvbiBjb250YWluaW5nIGEgZ2l2ZW4KKysgKiBhcmVhIG9mIHRoZSBmcmFtZSBh cHBsaWVzLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWUmVnaW9uT2ZJbnRlcmVzdCB7CisrICAg IC8qKgorKyAgICAgKiBNdXN0IGJlIHNldCB0byB0aGUgc2l6ZSBvZiB0aGlzIGRhdGEgc3RydWN0 dXJlICh0aGF0IGlzLAorKyAgICAgKiBzaXplb2YoQVZSZWdpb25PZkludGVyZXN0KSkuCisrICAg ICAqLworKyAgICB1aW50MzJfdCBzZWxmX3NpemU7CisrICAgIC8qKgorKyAgICAgKiBEaXN0YW5j ZSBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGZyYW1lIHRvIHRoZSB0b3AgYW5k CisrICAgICAqIGJvdHRvbSBlZGdlcyBhbmQgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZSBmcmFt ZSB0byB0aGUgbGVmdCBhbmQKKysgICAgICogcmlnaHQgZWRnZXMgb2YgdGhlIHJlY3RhbmdsZSBk ZWZpbmluZyB0aGlzIHJlZ2lvbiBvZiBpbnRlcmVzdC4KKysgICAgICoKKysgICAgICogVGhlIGNv bnN0cmFpbnRzIG9uIGEgcmVnaW9uIGFyZSBlbmNvZGVyIGRlcGVuZGVudCwgc28gdGhlIHJlZ2lv bgorKyAgICAgKiBhY3R1YWxseSBhZmZlY3RlZCBtYXkgYmUgc2xpZ2h0bHkgbGFyZ2VyIGZvciBh bGlnbm1lbnQgb3Igb3RoZXIKKysgICAgICogcmVhc29ucy4KKysgICAgICovCisrICAgIGludCB0 b3A7CisrICAgIGludCBib3R0b207CisrICAgIGludCBsZWZ0OworKyAgICBpbnQgcmlnaHQ7Cisr ICAgIC8qKgorKyAgICAgKiBRdWFudGlzYXRpb24gb2Zmc2V0LgorKyAgICAgKgorKyAgICAgKiBN dXN0IGJlIGluIHRoZSByYW5nZSAtMSB0byArMS4gIEEgdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMg bm8gcXVhbGl0eQorKyAgICAgKiBjaGFuZ2UuICBBIG5lZ2F0aXZlIHZhbHVlIGFza3MgZm9yIGJl dHRlciBxdWFsaXR5IChsZXNzIHF1YW50aXNhdGlvbiksCisrICAgICAqIHdoaWxlIGEgcG9zaXRp dmUgdmFsdWUgYXNrcyBmb3Igd29yc2UgcXVhbGl0eSAoZ3JlYXRlciBxdWFudGlzYXRpb24pLgor KyAgICAgKgorKyAgICAgKiBUaGUgcmFuZ2UgaXMgY2FsaWJyYXRlZCBzbyB0aGF0IHRoZSBleHRy ZW1lIHZhbHVlcyBpbmRpY2F0ZSB0aGUKKysgICAgICogbGFyZ2VzdCBwb3NzaWJsZSBvZmZzZXQg LSBpZiB0aGUgcmVzdCBvZiB0aGUgZnJhbWUgaXMgZW5jb2RlZCB3aXRoIHRoZQorKyAgICAgKiB3 b3JzdCBwb3NzaWJsZSBxdWFsaXR5LCBhbiBvZmZzZXQgb2YgLTEgaW5kaWNhdGVzIHRoYXQgdGhp cyByZWdpb24KKysgICAgICogc2hvdWxkIGJlIGVuY29kZWQgd2l0aCB0aGUgYmVzdCBwb3NzaWJs ZSBxdWFsaXR5IGFueXdheS4gIEludGVybWVkaWF0ZQorKyAgICAgKiB2YWx1ZXMgYXJlIHRoZW4g aW50ZXJwb2xhdGVkIGluIHNvbWUgY29kZWMtZGVwZW5kZW50IHdheS4KKysgICAgICoKKysgICAg ICogRm9yIGV4YW1wbGUsIGluIDEwLWJpdCBILjI2NCB0aGUgcXVhbnRpc2F0aW9uIHBhcmFtZXRl ciB2YXJpZXMgYmV0d2VlbgorKyAgICAgKiAtMTIgYW5kIDUxLiAgQSB0eXBpY2FsIHFvZmZzZXQg dmFsdWUgb2YgLTEvMTAgdGhlcmVmb3JlIGluZGljYXRlcyB0aGF0CisrICAgICAqIHRoaXMgcmVn aW9uIHNob3VsZCBiZSBlbmNvZGVkIHdpdGggYSBRUCBhcm91bmQgb25lLXRlbnRoIG9mIHRoZSBm dWxsCisrICAgICAqIHJhbmdlIGJldHRlciB0aGFuIHRoZSByZXN0IG9mIHRoZSBmcmFtZS4gIFNv LCBpZiBtb3N0IG9mIHRoZSBmcmFtZQorKyAgICAgKiB3ZXJlIHRvIGJlIGVuY29kZWQgd2l0aCBh IFFQIG9mIGFyb3VuZCAzMCwgdGhpcyByZWdpb24gd291bGQgZ2V0IGEgUVAKKysgICAgICogb2Yg YXJvdW5kIDI0IChhbiBvZmZzZXQgb2YgYXBwcm94aW1hdGVseSAtMS8xMCAqICg1MSAtIC0xMikg PSAtNi4zKS4KKysgICAgICogQW4gZXh0cmVtZSB2YWx1ZSBvZiAtMSB3b3VsZCBpbmRpY2F0ZSB0 aGF0IHRoaXMgcmVnaW9uIHNob3VsZCBiZQorKyAgICAgKiBlbmNvZGVkIHdpdGggdGhlIGJlc3Qg cG9zc2libGUgcXVhbGl0eSByZWdhcmRsZXNzIG9mIHRoZSB0cmVhdG1lbnQgb2YKKysgICAgICog dGhlIHJlc3Qgb2YgdGhlIGZyYW1lIC0gdGhhdCBpcywgc2hvdWxkIGJlIGVuY29kZWQgYXQgYSBR UCBvZiAtMTIuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIHFvZmZzZXQ7CisrfSBBVlJlZ2lv bk9mSW50ZXJlc3Q7CisrCisrLyoqCisrICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGRlY29k ZWQgKHJhdykgYXVkaW8gb3IgdmlkZW8gZGF0YS4KKysgKgorKyAqIEFWRnJhbWUgbXVzdCBiZSBh bGxvY2F0ZWQgdXNpbmcgYXZfZnJhbWVfYWxsb2MoKS4gTm90ZSB0aGF0IHRoaXMgb25seQorKyAq IGFsbG9jYXRlcyB0aGUgQVZGcmFtZSBpdHNlbGYsIHRoZSBidWZmZXJzIGZvciB0aGUgZGF0YSBt dXN0IGJlIG1hbmFnZWQKKysgKiB0aHJvdWdoIG90aGVyIG1lYW5zIChzZWUgYmVsb3cpLgorKyAq IEFWRnJhbWUgbXVzdCBiZSBmcmVlZCB3aXRoIGF2X2ZyYW1lX2ZyZWUoKS4KKysgKgorKyAqIEFW RnJhbWUgaXMgdHlwaWNhbGx5IGFsbG9jYXRlZCBvbmNlIGFuZCB0aGVuIHJldXNlZCBtdWx0aXBs ZSB0aW1lcyB0byBob2xkCisrICogZGlmZmVyZW50IGRhdGEgKGUuZy4gYSBzaW5nbGUgQVZGcmFt ZSB0byBob2xkIGZyYW1lcyByZWNlaXZlZCBmcm9tIGEKKysgKiBkZWNvZGVyKS4gSW4gc3VjaCBh IGNhc2UsIGF2X2ZyYW1lX3VucmVmKCkgd2lsbCBmcmVlIGFueSByZWZlcmVuY2VzIGhlbGQgYnkK KysgKiB0aGUgZnJhbWUgYW5kIHJlc2V0IGl0IHRvIGl0cyBvcmlnaW5hbCBjbGVhbiBzdGF0ZSBi ZWZvcmUgaXQKKysgKiBpcyByZXVzZWQgYWdhaW4uCisrICoKKysgKiBUaGUgZGF0YSBkZXNjcmli ZWQgYnkgYW4gQVZGcmFtZSBpcyB1c3VhbGx5IHJlZmVyZW5jZSBjb3VudGVkIHRocm91Z2ggdGhl CisrICogQVZCdWZmZXIgQVBJLiBUaGUgdW5kZXJseWluZyBidWZmZXIgcmVmZXJlbmNlcyBhcmUg c3RvcmVkIGluIEFWRnJhbWUuYnVmIC8KKysgKiBBVkZyYW1lLmV4dGVuZGVkX2J1Zi4gQW4gQVZG cmFtZSBpcyBjb25zaWRlcmVkIHRvIGJlIHJlZmVyZW5jZSBjb3VudGVkIGlmIGF0CisrICogbGVh c3Qgb25lIHJlZmVyZW5jZSBpcyBzZXQsIGkuZS4gaWYgQVZGcmFtZS5idWZbMF0gIT0gTlVMTC4g SW4gc3VjaCBhIGNhc2UsCisrICogZXZlcnkgc2luZ2xlIGRhdGEgcGxhbmUgbXVzdCBiZSBjb250 YWluZWQgaW4gb25lIG9mIHRoZSBidWZmZXJzIGluCisrICogQVZGcmFtZS5idWYgb3IgQVZGcmFt ZS5leHRlbmRlZF9idWYuCisrICogVGhlcmUgbWF5IGJlIGEgc2luZ2xlIGJ1ZmZlciBmb3IgYWxs IHRoZSBkYXRhLCBvciBvbmUgc2VwYXJhdGUgYnVmZmVyIGZvcgorKyAqIGVhY2ggcGxhbmUsIG9y IGFueXRoaW5nIGluIGJldHdlZW4uCisrICoKKysgKiBzaXplb2YoQVZGcmFtZSkgaXMgbm90IGEg cGFydCBvZiB0aGUgcHVibGljIEFCSSwgc28gbmV3IGZpZWxkcyBtYXkgYmUgYWRkZWQKKysgKiB0 byB0aGUgZW5kIHdpdGggYSBtaW5vciBidW1wLgorKyAqCisrICogRmllbGRzIGNhbiBiZSBhY2Nl c3NlZCB0aHJvdWdoIEFWT3B0aW9ucywgdGhlIG5hbWUgc3RyaW5nIHVzZWQsIG1hdGNoZXMgdGhl CisrICogQyBzdHJ1Y3R1cmUgZmllbGQgbmFtZSBmb3IgZmllbGRzIGFjY2Vzc2libGUgdGhyb3Vn aCBBVk9wdGlvbnMuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZGcmFtZSB7CisrI2RlZmluZSBB Vl9OVU1fREFUQV9QT0lOVEVSUyA4CisrICAgIC8qKgorKyAgICAgKiBwb2ludGVyIHRvIHRoZSBw aWN0dXJlL2NoYW5uZWwgcGxhbmVzLgorKyAgICAgKiBUaGlzIG1pZ2h0IGJlIGRpZmZlcmVudCBm cm9tIHRoZSBmaXJzdCBhbGxvY2F0ZWQgYnl0ZS4gRm9yIHZpZGVvLAorKyAgICAgKiBpdCBjb3Vs ZCBldmVuIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEuCisrICAgICAqCisrICAg ICAqIEFsbCBwb2ludGVycyBpbiBkYXRhIGFuZCBleHRlbmRlZF9kYXRhIG11c3QgcG9pbnQgaW50 byBvbmUgb2YgdGhlCisrICAgICAqIEFWQnVmZmVyUmVmIGluIGJ1ZiBvciBleHRlbmRlZF9idWYu CisrICAgICAqCisrICAgICAqIFNvbWUgZGVjb2RlcnMgYWNjZXNzIGFyZWFzIG91dHNpZGUgMCww IC0gd2lkdGgsaGVpZ2h0LCBwbGVhc2UKKysgICAgICogc2VlIGF2Y29kZWNfYWxpZ25fZGltZW5z aW9uczIoKS4gU29tZSBmaWx0ZXJzIGFuZCBzd3NjYWxlIGNhbiByZWFkCisrICAgICAqIHVwIHRv IDE2IGJ5dGVzIGJleW9uZCB0aGUgcGxhbmVzLCBpZiB0aGVzZSBmaWx0ZXJzIGFyZSB0byBiZSB1 c2VkLAorKyAgICAgKiB0aGVuIDE2IGV4dHJhIGJ5dGVzIG11c3QgYmUgYWxsb2NhdGVkLgorKyAg ICAgKgorKyAgICAgKiBOT1RFOiBQb2ludGVycyBub3QgbmVlZGVkIGJ5IHRoZSBmb3JtYXQgTVVT VCBiZSBzZXQgdG8gTlVMTC4KKysgICAgICoKKysgICAgICogQGF0dGVudGlvbiBJbiBjYXNlIG9m IHZpZGVvLCB0aGUgZGF0YVtdIHBvaW50ZXJzIGNhbiBwb2ludCB0byB0aGUKKysgICAgICogZW5k IG9mIGltYWdlIGRhdGEgaW4gb3JkZXIgdG8gcmV2ZXJzZSBsaW5lIG9yZGVyLCB3aGVuIHVzZWQg aW4KKysgICAgICogY29tYmluYXRpb24gd2l0aCBuZWdhdGl2ZSB2YWx1ZXMgaW4gdGhlIGxpbmVz aXplW10gYXJyYXkuCisrICAgICAqLworKyAgICB1aW50OF90ICpkYXRhW0FWX05VTV9EQVRBX1BP SU5URVJTXTsKKysKKysgICAgLyoqCisrICAgICAqIEZvciB2aWRlbywgYSBwb3NpdGl2ZSBvciBu ZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGluZGljYXRpbmcKKysgICAgICogdGhl IHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBwaWN0dXJlIGxpbmUsIGJ1dCBpdCBjYW4gYWxzbyBiZToK KysgICAgICogLSB0aGUgbmVnYXRpdmUgYnl0ZSBzaXplIG9mIGxpbmVzIGZvciB2ZXJ0aWNhbCBm bGlwcGluZworKyAgICAgKiAgICh3aXRoIGRhdGFbbl0gcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0 aGUgZGF0YQorKyAgICAgKiAtIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgbXVsdGlwbGUgb2YgdGhl IGJ5dGUgc2l6ZSBhcyBmb3IgYWNjZXNzaW5nCisrICAgICAqICAgZXZlbiBhbmQgb2RkIGZpZWxk cyBvZiBhIGZyYW1lIChwb3NzaWJseSBmbGlwcGVkKQorKyAgICAgKgorKyAgICAgKiBGb3IgYXVk aW8sIG9ubHkgbGluZXNpemVbMF0gbWF5IGJlIHNldC4gRm9yIHBsYW5hciBhdWRpbywgZWFjaCBj aGFubmVsCisrICAgICAqIHBsYW5lIG11c3QgYmUgdGhlIHNhbWUgc2l6ZS4KKysgICAgICoKKysg ICAgICogRm9yIHZpZGVvIHRoZSBsaW5lc2l6ZXMgc2hvdWxkIGJlIG11bHRpcGxlcyBvZiB0aGUg Q1BVcyBhbGlnbm1lbnQKKysgICAgICogcHJlZmVyZW5jZSwgdGhpcyBpcyAxNiBvciAzMiBmb3Ig bW9kZXJuIGRlc2t0b3AgQ1BVcy4KKysgICAgICogU29tZSBjb2RlIHJlcXVpcmVzIHN1Y2ggYWxp Z25tZW50IG90aGVyIGNvZGUgY2FuIGJlIHNsb3dlciB3aXRob3V0CisrICAgICAqIGNvcnJlY3Qg YWxpZ25tZW50LCBmb3IgeWV0IG90aGVyIGl0IG1ha2VzIG5vIGRpZmZlcmVuY2UuCisrICAgICAq CisrICAgICAqIEBub3RlIFRoZSBsaW5lc2l6ZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUg b2YgdXNhYmxlIGRhdGEgLS0gdGhlcmUKKysgICAgICogbWF5IGJlIGV4dHJhIHBhZGRpbmcgcHJl c2VudCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKysgICAgICoKKysgICAgICogQGF0dGVudGlv biBJbiBjYXNlIG9mIHZpZGVvLCBsaW5lIHNpemUgdmFsdWVzIGNhbiBiZSBuZWdhdGl2ZSB0byBh Y2hpZXZlCisrICAgICAqIGEgdmVydGljYWxseSBpbnZlcnRlZCBpdGVyYXRpb24gb3ZlciBpbWFn ZSBsaW5lcy4KKysgICAgICovCisrICAgIGludCBsaW5lc2l6ZVtBVl9OVU1fREFUQV9QT0lOVEVS U107CisrCisrICAgIC8qKgorKyAgICAgKiBwb2ludGVycyB0byB0aGUgZGF0YSBwbGFuZXMvY2hh bm5lbHMuCisrICAgICAqCisrICAgICAqIEZvciB2aWRlbywgdGhpcyBzaG91bGQgc2ltcGx5IHBv aW50IHRvIGRhdGFbXS4KKysgICAgICoKKysgICAgICogRm9yIHBsYW5hciBhdWRpbywgZWFjaCBj aGFubmVsIGhhcyBhIHNlcGFyYXRlIGRhdGEgcG9pbnRlciwgYW5kCisrICAgICAqIGxpbmVzaXpl WzBdIGNvbnRhaW5zIHRoZSBzaXplIG9mIGVhY2ggY2hhbm5lbCBidWZmZXIuCisrICAgICAqIEZv ciBwYWNrZWQgYXVkaW8sIHRoZXJlIGlzIGp1c3Qgb25lIGRhdGEgcG9pbnRlciwgYW5kIGxpbmVz aXplWzBdCisrICAgICAqIGNvbnRhaW5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIgZm9y IGFsbCBjaGFubmVscy4KKysgICAgICoKKysgICAgICogTm90ZTogQm90aCBkYXRhIGFuZCBleHRl bmRlZF9kYXRhIHNob3VsZCBhbHdheXMgYmUgc2V0IGluIGEgdmFsaWQgZnJhbWUsCisrICAgICAq IGJ1dCBmb3IgcGxhbmFyIGF1ZGlvIHdpdGggbW9yZSBjaGFubmVscyB0aGF0IGNhbiBmaXQgaW4g ZGF0YSwKKysgICAgICogZXh0ZW5kZWRfZGF0YSBtdXN0IGJlIHVzZWQgaW4gb3JkZXIgdG8gYWNj ZXNzIGFsbCBjaGFubmVscy4KKysgICAgICovCisrICAgIHVpbnQ4X3QgKipleHRlbmRlZF9kYXRh OworKworKyAgICAvKioKKysgICAgICogQG5hbWUgVmlkZW8gZGltZW5zaW9ucworKyAgICAgKiBW aWRlbyBmcmFtZXMgb25seS4gVGhlIGNvZGVkIGRpbWVuc2lvbnMgKGluIHBpeGVscykgb2YgdGhl IHZpZGVvIGZyYW1lLAorKyAgICAgKiBpLmUuIHRoZSBzaXplIG9mIHRoZSByZWN0YW5nbGUgdGhh dCBjb250YWlucyBzb21lIHdlbGwtZGVmaW5lZCB2YWx1ZXMuCisrICAgICAqCisrICAgICAqIEBu b3RlIFRoZSBwYXJ0IG9mIHRoZSBmcmFtZSBpbnRlbmRlZCBmb3IgZGlzcGxheS9wcmVzZW50YXRp b24gaXMgZnVydGhlcgorKyAgICAgKiByZXN0cmljdGVkIGJ5IHRoZSBAcmVmIGNyb3BwaW5nICJD cm9wcGluZyByZWN0YW5nbGUiLgorKyAgICAgKiBAeworKyAgICAgKi8KKysgICAgaW50IHdpZHRo LCBoZWlnaHQ7CisrICAgIC8qKgorKyAgICAgKiBAfQorKyAgICAgKi8KKysKKysgICAgLyoqCisr ICAgICAqIG51bWJlciBvZiBhdWRpbyBzYW1wbGVzIChwZXIgY2hhbm5lbCkgZGVzY3JpYmVkIGJ5 IHRoaXMgZnJhbWUKKysgICAgICovCisrICAgIGludCBuYl9zYW1wbGVzOworKworKyAgICAvKioK KysgICAgICogZm9ybWF0IG9mIHRoZSBmcmFtZSwgLTEgaWYgdW5rbm93biBvciB1bnNldAorKyAg ICAgKiBWYWx1ZXMgY29ycmVzcG9uZCB0byBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9yIHZpZGVvIGZy YW1lcywKKysgICAgICogZW51bSBBVlNhbXBsZUZvcm1hdCBmb3IgYXVkaW8pCisrICAgICAqLwor KyAgICBpbnQgZm9ybWF0OworKworKyAgICAvKioKKysgICAgICogUGljdHVyZSB0eXBlIG9mIHRo ZSBmcmFtZS4KKysgICAgICovCisrICAgIGVudW0gQVZQaWN0dXJlVHlwZSBwaWN0X3R5cGU7Cisr CisrICAgIC8qKgorKyAgICAgKiBTYW1wbGUgYXNwZWN0IHJhdGlvIGZvciB0aGUgdmlkZW8gZnJh bWUsIDAvMSBpZiB1bmtub3duL3Vuc3BlY2lmaWVkLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25h bCBzYW1wbGVfYXNwZWN0X3JhdGlvOworKworKyAgICAvKioKKysgICAgICogUHJlc2VudGF0aW9u IHRpbWVzdGFtcCBpbiB0aW1lX2Jhc2UgdW5pdHMgKHRpbWUgd2hlbiBmcmFtZSBzaG91bGQgYmUg c2hvd24gdG8gdXNlcikuCisrICAgICAqLworKyAgICBpbnQ2NF90IHB0czsKKysKKysgICAgLyoq CisrICAgICAqIERUUyBjb3BpZWQgZnJvbSB0aGUgQVZQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgcmV0 dXJuaW5nIHRoaXMgZnJhbWUuIChpZiBmcmFtZSB0aHJlYWRpbmcgaXNuJ3QgdXNlZCkKKysgICAg ICogVGhpcyBpcyBhbHNvIHRoZSBQcmVzZW50YXRpb24gdGltZSBvZiB0aGlzIEFWRnJhbWUgY2Fs Y3VsYXRlZCBmcm9tCisrICAgICAqIG9ubHkgQVZQYWNrZXQuZHRzIHZhbHVlcyB3aXRob3V0IHB0 cyB2YWx1ZXMuCisrICAgICAqLworKyAgICBpbnQ2NF90IHBrdF9kdHM7CisrCisrICAgIC8qKgor KyAgICAgKiBUaW1lIGJhc2UgZm9yIHRoZSB0aW1lc3RhbXBzIGluIHRoaXMgZnJhbWUuCisrICAg ICAqIEluIHRoZSBmdXR1cmUsIHRoaXMgZmllbGQgbWF5IGJlIHNldCBvbiBmcmFtZXMgb3V0cHV0 IGJ5IGRlY29kZXJzIG9yCisrICAgICAqIGZpbHRlcnMsIGJ1dCBpdHMgdmFsdWUgd2lsbCBiZSBi eSBkZWZhdWx0IGlnbm9yZWQgb24gaW5wdXQgdG8gZW5jb2RlcnMKKysgICAgICogb3IgZmlsdGVy cy4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgdGltZV9iYXNlOworKworKyAgICAvKioKKysg ICAgICogcXVhbGl0eSAoYmV0d2VlbiAxIChnb29kKSBhbmQgRkZfTEFNQkRBX01BWCAoYmFkKSkK KysgICAgICovCisrICAgIGludCBxdWFsaXR5OworKworKyAgICAvKioKKysgICAgICogRnJhbWUg b3duZXIncyBwcml2YXRlIGRhdGEuCisrICAgICAqCisrICAgICAqIFRoaXMgZmllbGQgbWF5IGJl IHNldCBieSB0aGUgY29kZSB0aGF0IGFsbG9jYXRlcy9vd25zIHRoZSBmcmFtZSBkYXRhLgorKyAg ICAgKiBJdCBpcyB0aGVuIG5vdCB0b3VjaGVkIGJ5IGFueSBsaWJyYXJ5IGZ1bmN0aW9ucywgZXhj ZXB0OgorKyAgICAgKiAtIGl0IGlzIGNvcGllZCB0byBvdGhlciByZWZlcmVuY2VzIGJ5IGF2X2Zy YW1lX2NvcHlfcHJvcHMoKSAoYW5kIGhlbmNlIGJ5CisrICAgICAqICAgYXZfZnJhbWVfcmVmKCkp OworKyAgICAgKiAtIGl0IGlzIHNldCB0byBOVUxMIHdoZW4gdGhlIGZyYW1lIGlzIGNsZWFyZWQg YnkgYXZfZnJhbWVfdW5yZWYoKQorKyAgICAgKiAtIG9uIHRoZSBjYWxsZXIncyBleHBsaWNpdCBy ZXF1ZXN0LiBFLmcuIGxpYmF2Y29kZWMgZW5jb2RlcnMvZGVjb2RlcnMKKysgICAgICogICB3aWxs IGNvcHkgdGhpcyBmaWVsZCB0by9mcm9tIEByZWYgQVZQYWNrZXQgIkFWUGFja2V0cyIgaWYgdGhl IGNhbGxlciBzZXRzCisrICAgICAqICAgQHJlZiBBVl9DT0RFQ19GTEFHX0NPUFlfT1BBUVVFLgor KyAgICAgKgorKyAgICAgKiBAc2VlIG9wYXF1ZV9yZWYgdGhlIHJlZmVyZW5jZS1jb3VudGVkIGFu YWxvZ3VlCisrICAgICAqLworKyAgICB2b2lkICpvcGFxdWU7CisrCisrICAgIC8qKgorKyAgICAg KiBOdW1iZXIgb2YgZmllbGRzIGluIHRoaXMgZnJhbWUgd2hpY2ggc2hvdWxkIGJlIHJlcGVhdGVk LCBpLmUuIHRoZSB0b3RhbAorKyAgICAgKiBkdXJhdGlvbiBvZiB0aGlzIGZyYW1lIHNob3VsZCBi ZSByZXBlYXRfcGljdCArIDIgbm9ybWFsIGZpZWxkIGR1cmF0aW9ucy4KKysgICAgICoKKysgICAg ICogRm9yIGludGVybGFjZWQgZnJhbWVzIHRoaXMgZmllbGQgbWF5IGJlIHNldCB0byAxLCB3aGlj aCBzaWduYWxzIHRoYXQgdGhpcworKyAgICAgKiBmcmFtZSBzaG91bGQgYmUgcHJlc2VudGVkIGFz IDMgZmllbGRzOiBiZWdpbm5pbmcgd2l0aCB0aGUgZmlyc3QgZmllbGQgKGFzCisrICAgICAqIGRl dGVybWluZWQgYnkgQVZfRlJBTUVfRkxBR19UT1BfRklFTERfRklSU1QgYmVpbmcgc2V0IG9yIG5v dCksIGZvbGxvd2VkCisrICAgICAqIGJ5IHRoZSBzZWNvbmQgZmllbGQsIGFuZCB0aGVuIHRoZSBm aXJzdCBmaWVsZCBhZ2Fpbi4KKysgICAgICoKKysgICAgICogRm9yIHByb2dyZXNzaXZlIGZyYW1l cyB0aGlzIGZpZWxkIG1heSBiZSBzZXQgdG8gYSBtdWx0aXBsZSBvZiAyLCB3aGljaAorKyAgICAg KiBzaWduYWxzIHRoYXQgdGhpcyBmcmFtZSdzIGR1cmF0aW9uIHNob3VsZCBiZSAocmVwZWF0X3Bp Y3QgKyAyKSAvIDIKKysgICAgICogbm9ybWFsIGZyYW1lIGR1cmF0aW9ucy4KKysgICAgICoKKysg ICAgICogQG5vdGUgVGhpcyBmaWVsZCBpcyBjb21wdXRlZCBmcm9tIE1QRUcyIHJlcGVhdF9maXJz dF9maWVsZCBmbGFnIGFuZCBpdHMKKysgICAgICogYXNzb2NpYXRlZCBmbGFncywgSC4yNjQgcGlj X3N0cnVjdCBmcm9tIHBpY3R1cmUgdGltaW5nIFNFSSwgYW5kCisrICAgICAqIHRoZWlyIGFuYWxv Z3VlcyBpbiBvdGhlciBjb2RlY3MuIFR5cGljYWxseSBpdCBzaG91bGQgb25seSBiZSB1c2VkIHdo ZW4KKysgICAgICogaGlnaGVyLWxheWVyIHRpbWluZyBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxh YmxlLgorKyAgICAgKi8KKysgICAgaW50IHJlcGVhdF9waWN0OworKworKyAgICAvKioKKysgICAg ICogU2FtcGxlIHJhdGUgb2YgdGhlIGF1ZGlvIGRhdGEuCisrICAgICAqLworKyAgICBpbnQgc2Ft cGxlX3JhdGU7CisrCisrICAgIC8qKgorKyAgICAgKiBBVkJ1ZmZlciByZWZlcmVuY2VzIGJhY2tp bmcgdGhlIGRhdGEgZm9yIHRoaXMgZnJhbWUuIEFsbCB0aGUgcG9pbnRlcnMgaW4KKysgICAgICog ZGF0YSBhbmQgZXh0ZW5kZWRfZGF0YSBtdXN0IHBvaW50IGluc2lkZSBvbmUgb2YgdGhlIGJ1ZmZl cnMgaW4gYnVmIG9yCisrICAgICAqIGV4dGVuZGVkX2J1Zi4gVGhpcyBhcnJheSBtdXN0IGJlIGZp bGxlZCBjb250aWd1b3VzbHkgLS0gaWYgYnVmW2ldIGlzCisrICAgICAqIG5vbi1OVUxMIHRoZW4g YnVmW2pdIG11c3QgYWxzbyBiZSBub24tTlVMTCBmb3IgYWxsIGogPCBpLgorKyAgICAgKgorKyAg ICAgKiBUaGVyZSBtYXkgYmUgYXQgbW9zdCBvbmUgQVZCdWZmZXIgcGVyIGRhdGEgcGxhbmUsIHNv IGZvciB2aWRlbyB0aGlzIGFycmF5CisrICAgICAqIGFsd2F5cyBjb250YWlucyBhbGwgdGhlIHJl ZmVyZW5jZXMuIEZvciBwbGFuYXIgYXVkaW8gd2l0aCBtb3JlIHRoYW4KKysgICAgICogQVZfTlVN X0RBVEFfUE9JTlRFUlMgY2hhbm5lbHMsIHRoZXJlIG1heSBiZSBtb3JlIGJ1ZmZlcnMgdGhhbiBj YW4gZml0IGluCisrICAgICAqIHRoaXMgYXJyYXkuIFRoZW4gdGhlIGV4dHJhIEFWQnVmZmVyUmVm IHBvaW50ZXJzIGFyZSBzdG9yZWQgaW4gdGhlCisrICAgICAqIGV4dGVuZGVkX2J1ZiBhcnJheS4K KysgICAgICovCisrICAgIEFWQnVmZmVyUmVmICpidWZbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwor KworKyAgICAvKioKKysgICAgICogRm9yIHBsYW5hciBhdWRpbyB3aGljaCByZXF1aXJlcyBtb3Jl IHRoYW4gQVZfTlVNX0RBVEFfUE9JTlRFUlMKKysgICAgICogQVZCdWZmZXJSZWYgcG9pbnRlcnMs IHRoaXMgYXJyYXkgd2lsbCBob2xkIGFsbCB0aGUgcmVmZXJlbmNlcyB3aGljaAorKyAgICAgKiBj YW5ub3QgZml0IGludG8gQVZGcmFtZS5idWYuCisrICAgICAqCisrICAgICAqIE5vdGUgdGhhdCB0 aGlzIGlzIGRpZmZlcmVudCBmcm9tIEFWRnJhbWUuZXh0ZW5kZWRfZGF0YSwgd2hpY2ggYWx3YXlz CisrICAgICAqIGNvbnRhaW5zIGFsbCB0aGUgcG9pbnRlcnMuIFRoaXMgYXJyYXkgb25seSBjb250 YWlucyB0aGUgZXh0cmEgcG9pbnRlcnMsCisrICAgICAqIHdoaWNoIGNhbm5vdCBmaXQgaW50byBB VkZyYW1lLmJ1Zi4KKysgICAgICoKKysgICAgICogVGhpcyBhcnJheSBpcyBhbHdheXMgYWxsb2Nh dGVkIHVzaW5nIGF2X21hbGxvYygpIGJ5IHdob2V2ZXIgY29uc3RydWN0cworKyAgICAgKiB0aGUg ZnJhbWUuIEl0IGlzIGZyZWVkIGluIGF2X2ZyYW1lX3VucmVmKCkuCisrICAgICAqLworKyAgICBB VkJ1ZmZlclJlZiAqKmV4dGVuZGVkX2J1ZjsKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBl bGVtZW50cyBpbiBleHRlbmRlZF9idWYuCisrICAgICAqLworKyAgICBpbnQgICAgICAgIG5iX2V4 dGVuZGVkX2J1ZjsKKysKKysgICAgQVZGcmFtZVNpZGVEYXRhICoqc2lkZV9kYXRhOworKyAgICBp bnQgICAgICAgICAgICBuYl9zaWRlX2RhdGE7CisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdnVf ZnJhbWVfZmxhZ3MgQVZfRlJBTUVfRkxBR1MKKysgKiBAaW5ncm91cCBsYXZ1X2ZyYW1lCisrICog RmxhZ3MgZGVzY3JpYmluZyBhZGRpdGlvbmFsIGZyYW1lIHByb3BlcnRpZXMuCisrICoKKysgKiBA eworKyAqLworKworKy8qKgorKyAqIFRoZSBmcmFtZSBkYXRhIG1heSBiZSBjb3JydXB0ZWQsIGUu Zy4gZHVlIHRvIGRlY29kaW5nIGVycm9ycy4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1FX0ZMQUdf Q09SUlVQVCAgICAgICAoMSA8PCAwKQorKy8qKgorKyAqIEEgZmxhZyB0byBtYXJrIGZyYW1lcyB0 aGF0IGFyZSBrZXlmcmFtZXMuCisrICovCisrI2RlZmluZSBBVl9GUkFNRV9GTEFHX0tFWSAoMSA8 PCAxKQorKy8qKgorKyAqIEEgZmxhZyB0byBtYXJrIHRoZSBmcmFtZXMgd2hpY2ggbmVlZCB0byBi ZSBkZWNvZGVkLCBidXQgc2hvdWxkbid0IGJlIG91dHB1dC4KKysgKi8KKysjZGVmaW5lIEFWX0ZS QU1FX0ZMQUdfRElTQ0FSRCAgICgxIDw8IDIpCisrLyoqCisrICogQSBmbGFnIHRvIG1hcmsgZnJh bWVzIHdob3NlIGNvbnRlbnQgaXMgaW50ZXJsYWNlZC4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1F X0ZMQUdfSU5URVJMQUNFRCAoMSA8PCAzKQorKy8qKgorKyAqIEEgZmxhZyB0byBtYXJrIGZyYW1l cyB3aGVyZSB0aGUgdG9wIGZpZWxkIGlzIGRpc3BsYXllZCBmaXJzdCBpZiB0aGUgY29udGVudAor KyAqIGlzIGludGVybGFjZWQuCisrICovCisrI2RlZmluZSBBVl9GUkFNRV9GTEFHX1RPUF9GSUVM RF9GSVJTVCAoMSA8PCA0KQorKy8qKgorKyAqIEEgZGVjb2RlciBjYW4gdXNlIHRoaXMgZmxhZyB0 byBtYXJrIGZyYW1lcyB3aGljaCB3ZXJlIG9yaWdpbmFsbHkgZW5jb2RlZCBsb3NzbGVzc2x5Lgor KyAqCisrICogRm9yIGNvZGluZyBiaXRzdHJlYW0gZm9ybWF0cyB3aGljaCBzdXBwb3J0IGJvdGgg bG9zc2xlc3MgYW5kIGxvc3N5CisrICogZW5jb2RpbmcsIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJs ZSBmb3IgYSBkZWNvZGVyIHRvIGRldGVybWluZSB3aGljaCBtZXRob2QKKysgKiB3YXMgdXNlZCB3 aGVuIHRoZSBiaXRzdHJlYW0gd2FzIGVuY29kZWQuCisrICovCisrI2RlZmluZSBBVl9GUkFNRV9G TEFHX0xPU1NMRVNTICAgICAgICAoMSA8PCA1KQorKy8qKgorKyAqIEB9CisrICovCisrCisrICAg IC8qKgorKyAgICAgKiBGcmFtZSBmbGFncywgYSBjb21iaW5hdGlvbiBvZiBAcmVmIGxhdnVfZnJh bWVfZmxhZ3MKKysgICAgICovCisrICAgIGludCBmbGFnczsKKysKKysgICAgLyoqCisrICAgICAq IE1QRUcgdnMgSlBFRyBZVVYgcmFuZ2UuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2Vy CisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjCisrICAgICAqLworKyAgICBl bnVtIEFWQ29sb3JSYW5nZSBjb2xvcl9yYW5nZTsKKysKKysgICAgZW51bSBBVkNvbG9yUHJpbWFy aWVzIGNvbG9yX3ByaW1hcmllczsKKysKKysgICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0 ZXJpc3RpYyBjb2xvcl90cmM7CisrCisrICAgIC8qKgorKyAgICAgKiBZVVYgY29sb3JzcGFjZSB0 eXBlLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5n OiBTZXQgYnkgbGliYXZjb2RlYworKyAgICAgKi8KKysgICAgZW51bSBBVkNvbG9yU3BhY2UgY29s b3JzcGFjZTsKKysKKysgICAgZW51bSBBVkNocm9tYUxvY2F0aW9uIGNocm9tYV9sb2NhdGlvbjsK KysKKysgICAgLyoqCisrICAgICAqIGZyYW1lIHRpbWVzdGFtcCBlc3RpbWF0ZWQgdXNpbmcgdmFy aW91cyBoZXVyaXN0aWNzLCBpbiBzdHJlYW0gdGltZSBiYXNlCisrICAgICAqIC0gZW5jb2Rpbmc6 IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgbGliYXZjb2RlYywgcmVhZCBieSB1 c2VyLgorKyAgICAgKi8KKysgICAgaW50NjRfdCBiZXN0X2VmZm9ydF90aW1lc3RhbXA7CisrCisr ICAgIC8qKgorKyAgICAgKiBtZXRhZGF0YS4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVz ZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysg ICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0YTsKKysKKysgICAgLyoqCisrICAgICAqIGRlY29kZSBl cnJvciBmbGFncyBvZiB0aGUgZnJhbWUsIHNldCB0byBhIGNvbWJpbmF0aW9uIG9mCisrICAgICAq IEZGX0RFQ09ERV9FUlJPUl94eHggZmxhZ3MgaWYgdGhlIGRlY29kZXIgcHJvZHVjZWQgYSBmcmFt ZSwgYnV0IHRoZXJlCisrICAgICAqIHdlcmUgZXJyb3JzIGR1cmluZyB0aGUgZGVjb2RpbmcuCisr ICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgbGli YXZjb2RlYywgcmVhZCBieSB1c2VyLgorKyAgICAgKi8KKysgICAgaW50IGRlY29kZV9lcnJvcl9m bGFnczsKKysjZGVmaW5lIEZGX0RFQ09ERV9FUlJPUl9JTlZBTElEX0JJVFNUUkVBTSAgIDEKKysj ZGVmaW5lIEZGX0RFQ09ERV9FUlJPUl9NSVNTSU5HX1JFRkVSRU5DRSAgIDIKKysjZGVmaW5lIEZG X0RFQ09ERV9FUlJPUl9DT05DRUFMTUVOVF9BQ1RJVkUgIDQKKysjZGVmaW5lIEZGX0RFQ09ERV9F UlJPUl9ERUNPREVfU0xJQ0VTICAgICAgIDgKKysKKysgICAgLyoqCisrICAgICAqIEZvciBod2Fj Y2VsLWZvcm1hdCBmcmFtZXMsIHRoaXMgc2hvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIHRoZQorKyAg ICAgKiBBVkhXRnJhbWVzQ29udGV4dCBkZXNjcmliaW5nIHRoZSBmcmFtZS4KKysgICAgICovCisr ICAgIEFWQnVmZmVyUmVmICpod19mcmFtZXNfY3R4OworKworKyAgICAvKioKKysgICAgICogRnJh bWUgb3duZXIncyBwcml2YXRlIGRhdGEuCisrICAgICAqCisrICAgICAqIFRoaXMgZmllbGQgbWF5 IGJlIHNldCBieSB0aGUgY29kZSB0aGF0IGFsbG9jYXRlcy9vd25zIHRoZSBmcmFtZSBkYXRhLgor KyAgICAgKiBJdCBpcyB0aGVuIG5vdCB0b3VjaGVkIGJ5IGFueSBsaWJyYXJ5IGZ1bmN0aW9ucywg ZXhjZXB0OgorKyAgICAgKiAtIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBidWZm ZXIgaXMgcHJvcGFnYXRlZCBieQorKyAgICAgKiAgIGF2X2ZyYW1lX2NvcHlfcHJvcHMoKSAoYW5k IGhlbmNlIGJ5IGF2X2ZyYW1lX3JlZigpKTsKKysgICAgICogLSBpdCBpcyB1bnJlZmVyZW5jZWQg aW4gYXZfZnJhbWVfdW5yZWYoKTsKKysgICAgICogLSBvbiB0aGUgY2FsbGVyJ3MgZXhwbGljaXQg cmVxdWVzdC4gRS5nLiBsaWJhdmNvZGVjIGVuY29kZXJzL2RlY29kZXJzCisrICAgICAqICAgd2ls bCBwcm9wYWdhdGUgYSBuZXcgcmVmZXJlbmNlIHRvL2Zyb20gQHJlZiBBVlBhY2tldCAiQVZQYWNr ZXRzIiBpZiB0aGUKKysgICAgICogICBjYWxsZXIgc2V0cyBAcmVmIEFWX0NPREVDX0ZMQUdfQ09Q WV9PUEFRVUUuCisrICAgICAqCisrICAgICAqIEBzZWUgb3BhcXVlIHRoZSBwbGFpbiBwb2ludGVy IGFuYWxvZ3VlCisrICAgICAqLworKyAgICBBVkJ1ZmZlclJlZiAqb3BhcXVlX3JlZjsKKysKKysg ICAgLyoqCisrICAgICAqIEBhbmNob3IgY3JvcHBpbmcKKysgICAgICogQG5hbWUgQ3JvcHBpbmcK KysgICAgICogVmlkZW8gZnJhbWVzIG9ubHkuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGRpc2Nh cmQgZnJvbSB0aGUKKysgICAgICogdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0IGJvcmRlciBvZiB0aGUg ZnJhbWUgdG8gb2J0YWluIHRoZSBzdWItcmVjdGFuZ2xlIG9mCisrICAgICAqIHRoZSBmcmFtZSBp bnRlbmRlZCBmb3IgcHJlc2VudGF0aW9uLgorKyAgICAgKiBAeworKyAgICAgKi8KKysgICAgc2l6 ZV90IGNyb3BfdG9wOworKyAgICBzaXplX3QgY3JvcF9ib3R0b207CisrICAgIHNpemVfdCBjcm9w X2xlZnQ7CisrICAgIHNpemVfdCBjcm9wX3JpZ2h0OworKyAgICAvKioKKysgICAgICogQH0KKysg ICAgICovCisrCisrICAgIC8qKgorKyAgICAgKiBSZWZTdHJ1Y3QgcmVmZXJlbmNlIGZvciBpbnRl cm5hbCB1c2UgYnkgYSBzaW5nbGUgbGliYXYqIGxpYnJhcnkuCisrICAgICAqIE11c3Qgbm90IGJl IHVzZWQgdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGxpYnJhcmllcy4KKysgICAgICogSGFzIHRv IGJlIE5VTEwgd2hlbiBvd25lcnNoaXAgb2YgdGhlIGZyYW1lIGxlYXZlcyB0aGUgcmVzcGVjdGl2 ZSBsaWJyYXJ5LgorKyAgICAgKgorKyAgICAgKiBDb2RlIG91dHNpZGUgdGhlIEZGbXBlZyBsaWJz IG11c3QgbmV2ZXIgY2hlY2sgb3IgY2hhbmdlIHByaXZhdGVfcmVmLgorKyAgICAgKi8KKysgICAg dm9pZCAqcHJpdmF0ZV9yZWY7CisrCisrICAgIC8qKgorKyAgICAgKiBDaGFubmVsIGxheW91dCBv ZiB0aGUgYXVkaW8gZGF0YS4KKysgICAgICovCisrICAgIEFWQ2hhbm5lbExheW91dCBjaF9sYXlv dXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBEdXJhdGlvbiBvZiB0aGUgZnJhbWUsIGluIHRoZSBz YW1lIHVuaXRzIGFzIHB0cy4gMCBpZiB1bmtub3duLgorKyAgICAgKi8KKysgICAgaW50NjRfdCBk dXJhdGlvbjsKKysKKysgICAgLyoqCisrICAgICAqIEluZGljYXRlcyBob3cgdGhlIGFscGhhIGNo YW5uZWwgb2YgdGhlIHZpZGVvIGlzIHRvIGJlIGhhbmRsZWQuCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjCisrICAg ICAqLworKyAgICBlbnVtIEFWQWxwaGFNb2RlIGFscGhhX21vZGU7CisrfSBBVkZyYW1lOworKwor KworKy8qKgorKyAqIEFsbG9jYXRlIGFuIEFWRnJhbWUgYW5kIHNldCBpdHMgZmllbGRzIHRvIGRl ZmF1bHQgdmFsdWVzLiAgVGhlIHJlc3VsdGluZworKyAqIHN0cnVjdCBtdXN0IGJlIGZyZWVkIHVz aW5nIGF2X2ZyYW1lX2ZyZWUoKS4KKysgKgorKyAqIEByZXR1cm4gQW4gQVZGcmFtZSBmaWxsZWQg d2l0aCBkZWZhdWx0IHZhbHVlcyBvciBOVUxMIG9uIGZhaWx1cmUuCisrICoKKysgKiBAbm90ZSB0 aGlzIG9ubHkgYWxsb2NhdGVzIHRoZSBBVkZyYW1lIGl0c2VsZiwgbm90IHRoZSBkYXRhIGJ1ZmZl cnMuIFRob3NlCisrICogbXVzdCBiZSBhbGxvY2F0ZWQgdGhyb3VnaCBvdGhlciBtZWFucywgZS5n LiB3aXRoIGF2X2ZyYW1lX2dldF9idWZmZXIoKSBvcgorKyAqIG1hbnVhbGx5LgorKyAqLworK0FW RnJhbWUgKmF2X2ZyYW1lX2FsbG9jKHZvaWQpOworKworKy8qKgorKyAqIEZyZWUgdGhlIGZyYW1l IGFuZCBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG9iamVjdHMgaW4gaXQsCisrICogZS5nLiBl eHRlbmRlZF9kYXRhLiBJZiB0aGUgZnJhbWUgaXMgcmVmZXJlbmNlIGNvdW50ZWQsIGl0IHdpbGwg YmUKKysgKiB1bnJlZmVyZW5jZWQgZmlyc3QuCisrICoKKysgKiBAcGFyYW0gZnJhbWUgZnJhbWUg dG8gYmUgZnJlZWQuIFRoZSBwb2ludGVyIHdpbGwgYmUgc2V0IHRvIE5VTEwuCisrICovCisrdm9p ZCBhdl9mcmFtZV9mcmVlKEFWRnJhbWUgKipmcmFtZSk7CisrCisrLyoqCisrICogU2V0IHVwIGEg bmV3IHJlZmVyZW5jZSB0byB0aGUgZGF0YSBkZXNjcmliZWQgYnkgdGhlIHNvdXJjZSBmcmFtZS4K KysgKgorKyAqIENvcHkgZnJhbWUgcHJvcGVydGllcyBmcm9tIHNyYyB0byBkc3QgYW5kIGNyZWF0 ZSBhIG5ldyByZWZlcmVuY2UgZm9yIGVhY2gKKysgKiBBVkJ1ZmZlclJlZiBmcm9tIHNyYy4KKysg KgorKyAqIElmIHNyYyBpcyBub3QgcmVmZXJlbmNlIGNvdW50ZWQsIG5ldyBidWZmZXJzIGFyZSBh bGxvY2F0ZWQgYW5kIHRoZSBkYXRhIGlzCisrICogY29waWVkLgorKyAqCisrICogQHdhcm5pbmc6 IGRzdCBNVVNUIGhhdmUgYmVlbiBlaXRoZXIgdW5yZWZlcmVuY2VkIHdpdGggYXZfZnJhbWVfdW5y ZWYoZHN0KSwKKysgKiAgICAgICAgICAgb3IgbmV3bHkgYWxsb2NhdGVkIHdpdGggYXZfZnJhbWVf YWxsb2MoKSBiZWZvcmUgY2FsbGluZyB0aGlzCisrICogICAgICAgICAgIGZ1bmN0aW9uLCBvciB1 bmRlZmluZWQgYmVoYXZpb3Igd2lsbCBvY2N1ci4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Igb24gZXJyb3IKKysgKi8KKytpbnQgYXZfZnJhbWVfcmVm KEFWRnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioKKysgKiBFbnN1cmUg dGhlIGRlc3RpbmF0aW9uIGZyYW1lIHJlZmVycyB0byB0aGUgc2FtZSBkYXRhIGRlc2NyaWJlZCBi eSB0aGUgc291cmNlCisrICogZnJhbWUsIGVpdGhlciBieSBjcmVhdGluZyBhIG5ldyByZWZlcmVu Y2UgZm9yIGVhY2ggQVZCdWZmZXJSZWYgZnJvbSBzcmMgaWYKKysgKiB0aGV5IGRpZmZlciBmcm9t IHRob3NlIGluIGRzdCwgYnkgYWxsb2NhdGluZyBuZXcgYnVmZmVycyBhbmQgY29weWluZyBkYXRh IGlmCisrICogc3JjIGlzIG5vdCByZWZlcmVuY2UgY291bnRlZCwgb3IgYnkgdW5yZWZlcmVuY2lu ZyBpdCBpZiBzcmMgaXMgZW1wdHkuCisrICoKKysgKiBGcmFtZSBwcm9wZXJ0aWVzIG9uIGRzdCB3 aWxsIGJlIHJlcGxhY2VkIGJ5IHRob3NlIGZyb20gc3JjLgorKyAqCisrICogQHJldHVybiAwIG9u IHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvci4gT24gZXJyb3IsIGRzdCBpcwor KyAqICAgICAgICAgdW5yZWZlcmVuY2VkLgorKyAqLworK2ludCBhdl9mcmFtZV9yZXBsYWNlKEFW RnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioKKysgKiBDcmVhdGUgYSBu ZXcgZnJhbWUgdGhhdCByZWZlcmVuY2VzIHRoZSBzYW1lIGRhdGEgYXMgc3JjLgorKyAqCisrICog VGhpcyBpcyBhIHNob3J0Y3V0IGZvciBhdl9mcmFtZV9hbGxvYygpK2F2X2ZyYW1lX3JlZigpLgor KyAqCisrICogQHJldHVybiBuZXdseSBjcmVhdGVkIEFWRnJhbWUgb24gc3VjY2VzcywgTlVMTCBv biBlcnJvci4KKysgKi8KKytBVkZyYW1lICphdl9mcmFtZV9jbG9uZShjb25zdCBBVkZyYW1lICpz cmMpOworKworKy8qKgorKyAqIFVucmVmZXJlbmNlIGFsbCB0aGUgYnVmZmVycyByZWZlcmVuY2Vk IGJ5IGZyYW1lIGFuZCByZXNldCB0aGUgZnJhbWUgZmllbGRzLgorKyAqLworK3ZvaWQgYXZfZnJh bWVfdW5yZWYoQVZGcmFtZSAqZnJhbWUpOworKworKy8qKgorKyAqIE1vdmUgZXZlcnl0aGluZyBj b250YWluZWQgaW4gc3JjIHRvIGRzdCBhbmQgcmVzZXQgc3JjLgorKyAqCisrICogQHdhcm5pbmc6 IGRzdCBpcyBub3QgdW5yZWZlcmVuY2VkLCBidXQgZGlyZWN0bHkgb3ZlcndyaXR0ZW4gd2l0aG91 dCByZWFkaW5nCisrICogICAgICAgICAgIG9yIGRlYWxsb2NhdGluZyBpdHMgY29udGVudHMuIENh bGwgYXZfZnJhbWVfdW5yZWYoZHN0KSBtYW51YWxseQorKyAqICAgICAgICAgICBiZWZvcmUgY2Fs bGluZyB0aGlzIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IG5vIG1lbW9yeSBpcyBsZWFrZWQuCisr ICovCisrdm9pZCBhdl9mcmFtZV9tb3ZlX3JlZihBVkZyYW1lICpkc3QsIEFWRnJhbWUgKnNyYyk7 CisrCisrLyoqCisrICogQWxsb2NhdGUgbmV3IGJ1ZmZlcihzKSBmb3IgYXVkaW8gb3IgdmlkZW8g ZGF0YS4KKysgKgorKyAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIG11c3QgYmUgc2V0IG9uIGZyYW1l IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb246CisrICogLSBmb3JtYXQgKHBpeGVsIGZvcm1h dCBmb3IgdmlkZW8sIHNhbXBsZSBmb3JtYXQgZm9yIGF1ZGlvKQorKyAqIC0gd2lkdGggYW5kIGhl aWdodCBmb3IgdmlkZW8KKysgKiAtIG5iX3NhbXBsZXMgYW5kIGNoX2xheW91dCBmb3IgYXVkaW8K KysgKgorKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmaWxsIEFWRnJhbWUuZGF0YSBhbmQgQVZGcmFt ZS5idWYgYXJyYXlzIGFuZCwgaWYKKysgKiBuZWNlc3NhcnksIGFsbG9jYXRlIGFuZCBmaWxsIEFW RnJhbWUuZXh0ZW5kZWRfZGF0YSBhbmQgQVZGcmFtZS5leHRlbmRlZF9idWYuCisrICogRm9yIHBs YW5hciBmb3JtYXRzLCBvbmUgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIGZvciBlYWNoIHBsYW5l LgorKyAqCisrICogQHdhcm5pbmc6IGlmIGZyYW1lIGFscmVhZHkgaGFzIGJlZW4gYWxsb2NhdGVk LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbAorKyAqICAgICAgICAgICBsZWFrIG1lbW9yeS4g SW4gYWRkaXRpb24sIHVuZGVmaW5lZCBiZWhhdmlvciBjYW4gb2NjdXIgaW4gY2VydGFpbgorKyAq ICAgICAgICAgICBjYXNlcy4KKysgKgorKyAqIEBwYXJhbSBmcmFtZSBmcmFtZSBpbiB3aGljaCB0 byBzdG9yZSB0aGUgbmV3IGJ1ZmZlcnMuCisrICogQHBhcmFtIGFsaWduIFJlcXVpcmVkIGJ1ZmZl ciBzaXplIGFuZCBkYXRhIHBvaW50ZXIgYWxpZ25tZW50LiBJZiBlcXVhbCB0byAwLAorKyAqICAg ICAgICAgICAgICBhbGlnbm1lbnQgd2lsbCBiZSBjaG9zZW4gYXV0b21hdGljYWxseSBmb3IgdGhl IGN1cnJlbnQgQ1BVLgorKyAqICAgICAgICAgICAgICBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQg dG8gcGFzcyAwIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQKKysgKiAgICAgICAgICAgICAgeW91 IGFyZSBkb2luZy4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFW RVJST1Igb24gZXJyb3IuCisrICovCisraW50IGF2X2ZyYW1lX2dldF9idWZmZXIoQVZGcmFtZSAq ZnJhbWUsIGludCBhbGlnbik7CisrCisrLyoqCisrICogQ2hlY2sgaWYgdGhlIGZyYW1lIGRhdGEg aXMgd3JpdGFibGUuCisrICoKKysgKiBAcmV0dXJuIEEgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIGZy YW1lIGRhdGEgaXMgd3JpdGFibGUgKHdoaWNoIGlzIHRydWUgaWYgYW5kCisrICogb25seSBpZiBl YWNoIG9mIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcnMgaGFzIG9ubHkgb25lIHJlZmVyZW5jZSwgbmFt ZWx5IHRoZSBvbmUKKysgKiBzdG9yZWQgaW4gdGhpcyBmcmFtZSkuIFJldHVybiAwIG90aGVyd2lz ZS4KKysgKgorKyAqIElmIDEgaXMgcmV0dXJuZWQgdGhlIGFuc3dlciBpcyB2YWxpZCB1bnRpbCBh dl9idWZmZXJfcmVmKCkgaXMgY2FsbGVkIG9uIGFueQorKyAqIG9mIHRoZSB1bmRlcmx5aW5nIEFW QnVmZmVyUmVmcyAoZS5nLiB0aHJvdWdoIGF2X2ZyYW1lX3JlZigpIG9yIGRpcmVjdGx5KS4KKysg KgorKyAqIEBzZWUgYXZfZnJhbWVfbWFrZV93cml0YWJsZSgpLCBhdl9idWZmZXJfaXNfd3JpdGFi bGUoKQorKyAqLworK2ludCBhdl9mcmFtZV9pc193cml0YWJsZShBVkZyYW1lICpmcmFtZSk7Cisr CisrLyoqCisrICogRW5zdXJlIHRoYXQgdGhlIGZyYW1lIGRhdGEgaXMgd3JpdGFibGUsIGF2b2lk aW5nIGRhdGEgY29weSBpZiBwb3NzaWJsZS4KKysgKgorKyAqIERvIG5vdGhpbmcgaWYgdGhlIGZy YW1lIGlzIHdyaXRhYmxlLCBhbGxvY2F0ZSBuZXcgYnVmZmVycyBhbmQgY29weSB0aGUgZGF0YQor KyAqIGlmIGl0IGlzIG5vdC4gTm9uLXJlZmNvdW50ZWQgZnJhbWVzIGJlaGF2ZSBhcyBub24td3Jp dGFibGUsIGkuZS4gYSBjb3B5CisrICogaXMgYWx3YXlzIG1hZGUuCisrICoKKysgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIG9uIGVycm9yLgorKyAqCisrICogQHNl ZSBhdl9mcmFtZV9pc193cml0YWJsZSgpLCBhdl9idWZmZXJfaXNfd3JpdGFibGUoKSwKKysgKiBh dl9idWZmZXJfbWFrZV93cml0YWJsZSgpCisrICovCisraW50IGF2X2ZyYW1lX21ha2Vfd3JpdGFi bGUoQVZGcmFtZSAqZnJhbWUpOworKworKy8qKgorKyAqIENvcHkgdGhlIGZyYW1lIGRhdGEgZnJv bSBzcmMgdG8gZHN0LgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvY2F0ZSBh bnl0aGluZywgZHN0IG11c3QgYmUgYWxyZWFkeSBpbml0aWFsaXplZCBhbmQKKysgKiBhbGxvY2F0 ZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHNyYy4KKysgKgorKyAqIFRoaXMgZnVuY3Rp b24gb25seSBjb3BpZXMgdGhlIGZyYW1lIGRhdGEgKGkuZS4gdGhlIGNvbnRlbnRzIG9mIHRoZSBk YXRhIC8KKysgKiBleHRlbmRlZCBkYXRhIGFycmF5cyksIG5vdCBhbnkgb3RoZXIgcHJvcGVydGll cy4KKysgKgorKyAqIEByZXR1cm4gPj0gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Ig b24gZXJyb3IuCisrICovCisraW50IGF2X2ZyYW1lX2NvcHkoQVZGcmFtZSAqZHN0LCBjb25zdCBB VkZyYW1lICpzcmMpOworKworKy8qKgorKyAqIENvcHkgb25seSAibWV0YWRhdGEiIGZpZWxkcyBm cm9tIHNyYyB0byBkc3QuCisrICoKKysgKiBNZXRhZGF0YSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhp cyBmdW5jdGlvbiBhcmUgdGhvc2UgZmllbGRzIHRoYXQgZG8gbm90IGFmZmVjdAorKyAqIHRoZSBk YXRhIGxheW91dCBpbiB0aGUgYnVmZmVycy4gIEUuZy4gcHRzLCBzYW1wbGUgcmF0ZSAoZm9yIGF1 ZGlvKSBvciBzYW1wbGUKKysgKiBhc3BlY3QgcmF0aW8gKGZvciB2aWRlbyksIGJ1dCBub3Qgd2lk dGgvaGVpZ2h0IG9yIGNoYW5uZWwgbGF5b3V0LgorKyAqIFNpZGUgZGF0YSBpcyBhbHNvIGNvcGll ZC4KKysgKi8KKytpbnQgYXZfZnJhbWVfY29weV9wcm9wcyhBVkZyYW1lICpkc3QsIGNvbnN0IEFW RnJhbWUgKnNyYyk7CisrCisrLyoqCisrICogR2V0IHRoZSBidWZmZXIgcmVmZXJlbmNlIGEgZ2l2 ZW4gZGF0YSBwbGFuZSBpcyBzdG9yZWQgaW4uCisrICoKKysgKiBAcGFyYW0gZnJhbWUgdGhlIGZy YW1lIHRvIGdldCB0aGUgcGxhbmUncyBidWZmZXIgZnJvbQorKyAqIEBwYXJhbSBwbGFuZSBpbmRl eCBvZiB0aGUgZGF0YSBwbGFuZSBvZiBpbnRlcmVzdCBpbiBmcmFtZS0+ZXh0ZW5kZWRfZGF0YS4K KysgKgorKyAqIEByZXR1cm4gdGhlIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjb250YWlucyB0aGUg cGxhbmUgb3IgTlVMTCBpZiB0aGUgaW5wdXQKKysgKiBmcmFtZSBpcyBub3QgdmFsaWQuCisrICov CisrQVZCdWZmZXJSZWYgKmF2X2ZyYW1lX2dldF9wbGFuZV9idWZmZXIoY29uc3QgQVZGcmFtZSAq ZnJhbWUsIGludCBwbGFuZSk7CisrCisrLyoqCisrICogQWRkIGEgbmV3IHNpZGUgZGF0YSB0byBh IGZyYW1lLgorKyAqCisrICogQHBhcmFtIGZyYW1lIGEgZnJhbWUgdG8gd2hpY2ggdGhlIHNpZGUg ZGF0YSBzaG91bGQgYmUgYWRkZWQKKysgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBhZGRlZCBz aWRlIGRhdGEKKysgKiBAcGFyYW0gc2l6ZSBzaXplIG9mIHRoZSBzaWRlIGRhdGEKKysgKgorKyAq IEByZXR1cm4gbmV3bHkgYWRkZWQgc2lkZSBkYXRhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IK KysgKi8KKytBVkZyYW1lU2lkZURhdGEgKmF2X2ZyYW1lX25ld19zaWRlX2RhdGEoQVZGcmFtZSAq ZnJhbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZG cmFtZVNpZGVEYXRhVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc2l6ZSk7CisrCisrLyoqCisrICogQWRkIGEgbmV3IHNpZGUgZGF0YSB0 byBhIGZyYW1lIGZyb20gYW4gZXhpc3RpbmcgQVZCdWZmZXJSZWYKKysgKgorKyAqIEBwYXJhbSBm cmFtZSBhIGZyYW1lIHRvIHdoaWNoIHRoZSBzaWRlIGRhdGEgc2hvdWxkIGJlIGFkZGVkCisrICog QHBhcmFtIHR5cGUgIHRoZSB0eXBlIG9mIHRoZSBhZGRlZCBzaWRlIGRhdGEKKysgKiBAcGFyYW0g YnVmICAgYW4gQVZCdWZmZXJSZWYgdG8gYWRkIGFzIHNpZGUgZGF0YS4gVGhlIG93bmVyc2hpcCBv ZgorKyAqICAgICAgICAgICAgICB0aGUgcmVmZXJlbmNlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBm cmFtZS4KKysgKgorKyAqIEByZXR1cm4gbmV3bHkgYWRkZWQgc2lkZSBkYXRhIG9uIHN1Y2Nlc3Ms IE5VTEwgb24gZXJyb3IuIE9uIGZhaWx1cmUKKysgKiAgICAgICAgIHRoZSBmcmFtZSBpcyB1bmNo YW5nZWQgYW5kIHRoZSBBVkJ1ZmZlclJlZiByZW1haW5zIG93bmVkIGJ5CisrICogICAgICAgICB0 aGUgY2FsbGVyLgorKyAqLworK0FWRnJhbWVTaWRlRGF0YSAqYXZfZnJhbWVfbmV3X3NpZGVfZGF0 YV9mcm9tX2J1ZihBVkZyYW1lICpmcmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQnVmZmVyUmVm ICpidWYpOworKworKy8qKgorKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzaWRlIGRhdGEg b2YgYSBnaXZlbiB0eXBlIG9uIHN1Y2Nlc3MsIE5VTEwgaWYgdGhlcmUKKysgKiBpcyBubyBzaWRl IGRhdGEgd2l0aCBzdWNoIHR5cGUgaW4gdGhpcyBmcmFtZS4KKysgKi8KKytBVkZyYW1lU2lkZURh dGEgKmF2X2ZyYW1lX2dldF9zaWRlX2RhdGEoY29uc3QgQVZGcmFtZSAqZnJhbWUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlw ZSB0eXBlKTsKKysKKysvKioKKysgKiBSZW1vdmUgYW5kIGZyZWUgYWxsIHNpZGUgZGF0YSBpbnN0 YW5jZXMgb2YgdGhlIGdpdmVuIHR5cGUuCisrICovCisrdm9pZCBhdl9mcmFtZV9yZW1vdmVfc2lk ZV9kYXRhKEFWRnJhbWUgKmZyYW1lLCBlbnVtIEFWRnJhbWVTaWRlRGF0YVR5cGUgdHlwZSk7Cisr CisrCisrLyoqCisrICogRmxhZ3MgZm9yIGZyYW1lIGNyb3BwaW5nLgorKyAqLworK2VudW0gewor KyAgICAvKioKKysgICAgICogQXBwbHkgdGhlIG1heGltdW0gcG9zc2libGUgY3JvcHBpbmcsIGV2 ZW4gaWYgaXQgcmVxdWlyZXMgc2V0dGluZyB0aGUKKysgICAgICogQVZGcmFtZS5kYXRhW10gZW50 cmllcyB0byB1bmFsaWduZWQgcG9pbnRlcnMuIFBhc3NpbmcgdW5hbGlnbmVkIGRhdGEKKysgICAg ICogdG8gRkZtcGVnIEFQSSBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQsIGFuZCBjYXVzZXMgdW5k ZWZpbmVkIGJlaGF2aW9yCisrICAgICAqIChzdWNoIGFzIGNyYXNoZXMpLiBZb3UgY2FuIHBhc3Mg dW5hbGlnbmVkIGRhdGEgb25seSB0byBGRm1wZWcgQVBJcyB0aGF0CisrICAgICAqIGFyZSBleHBs aWNpdGx5IGRvY3VtZW50ZWQgdG8gYWNjZXB0IGl0LiBVc2UgdGhpcyBmbGFnIG9ubHkgaWYgeW91 CisrICAgICAqIGFic29sdXRlbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisrICAgICAqLwor KyAgICBBVl9GUkFNRV9DUk9QX1VOQUxJR05FRCAgICAgPSAxIDw8IDAsCisrfTsKKysKKysvKioK KysgKiBDcm9wIHRoZSBnaXZlbiB2aWRlbyBBVkZyYW1lIGFjY29yZGluZyB0byBpdHMgY3JvcF9s ZWZ0L2Nyb3BfdG9wL2Nyb3BfcmlnaHQvCisrICogY3JvcF9ib3R0b20gZmllbGRzLiBJZiBjcm9w cGluZyBpcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gd2lsbCBhZGp1c3QgdGhlCisrICogZGF0 YSBwb2ludGVycyBhbmQgdGhlIHdpZHRoL2hlaWdodCBmaWVsZHMsIGFuZCBzZXQgdGhlIGNyb3Ag ZmllbGRzIHRvIDAuCisrICoKKysgKiBJbiBhbGwgY2FzZXMsIHRoZSBjcm9wcGluZyBib3VuZGFy aWVzIHdpbGwgYmUgcm91bmRlZCB0byB0aGUgaW5oZXJlbnQKKysgKiBhbGlnbm1lbnQgb2YgdGhl IHBpeGVsIGZvcm1hdC4gSW4gc29tZSBjYXNlcywgc3VjaCBhcyBmb3Igb3BhcXVlIGh3YWNjZWwK KysgKiBmb3JtYXRzLCB0aGUgbGVmdC90b3AgY3JvcHBpbmcgaXMgaWdub3JlZC4gVGhlIGNyb3Ag ZmllbGRzIGFyZSBzZXQgdG8gMCBldmVuCisrICogaWYgdGhlIGNyb3BwaW5nIHdhcyByb3VuZGVk IG9yIGlnbm9yZWQuCisrICoKKysgKiBAcGFyYW0gZnJhbWUgdGhlIGZyYW1lIHdoaWNoIHNob3Vs ZCBiZSBjcm9wcGVkCisrICogQHBhcmFtIGZsYWdzIFNvbWUgY29tYmluYXRpb24gb2YgQVZfRlJB TUVfQ1JPUF8qIGZsYWdzLCBvciAwLgorKyAqCisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3Ms IGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvci4gSWYgdGhlIGNyb3BwaW5nIGZpZWxkcworKyAq IHdlcmUgaW52YWxpZCwgQVZFUlJPUihFUkFOR0UpIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBp cyBjaGFuZ2VkLgorKyAqLworK2ludCBhdl9mcmFtZV9hcHBseV9jcm9wcGluZyhBVkZyYW1lICpm cmFtZSwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBAcmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5 aW5nIHRoZSBzaWRlIGRhdGEgdHlwZQorKyAqLworK2NvbnN0IGNoYXIgKmF2X2ZyYW1lX3NpZGVf ZGF0YV9uYW1lKGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBA cmV0dXJuIHNpZGUgZGF0YSBkZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBzaWRl IGRhdGEgdHlwZSwgTlVMTAorKyAqICAgICAgICAgd2hlbiBub3QgYXZhaWxhYmxlLgorKyAqLwor K2NvbnN0IEFWU2lkZURhdGFEZXNjcmlwdG9yICphdl9mcmFtZV9zaWRlX2RhdGFfZGVzYyhlbnVt IEFWRnJhbWVTaWRlRGF0YVR5cGUgdHlwZSk7CisrCisrLyoqCisrICogRnJlZSBhbGwgc2lkZSBk YXRhIGVudHJpZXMgYW5kIHRoZWlyIGNvbnRlbnRzLCB0aGVuIHplcm9lcyBvdXQgdGhlCisrICog dmFsdWVzIHdoaWNoIHRoZSBwb2ludGVycyBhcmUgcG9pbnRpbmcgdG8uCisrICoKKysgKiBAcGFy YW0gc2QgICAgcG9pbnRlciB0byBhcnJheSBvZiBzaWRlIGRhdGEgdG8gZnJlZS4gV2lsbCBiZSBz ZXQgdG8gTlVMTAorKyAqICAgICAgICAgICAgICB1cG9uIHJldHVybi4KKysgKiBAcGFyYW0gbmJf c2QgcG9pbnRlciB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbnRyaWVz IGluCisrICogICAgICAgICAgICAgIHRoZSBhcnJheS4gV2lsbCBiZSBzZXQgdG8gMCB1cG9uIHJl dHVybi4KKysgKi8KKyt2b2lkIGF2X2ZyYW1lX3NpZGVfZGF0YV9mcmVlKEFWRnJhbWVTaWRlRGF0 YSAqKipzZCwgaW50ICpuYl9zZCk7CisrCisrLyoqCisrICogUmVtb3ZlIGV4aXN0aW5nIGVudHJp ZXMgYmVmb3JlIGFkZGluZyBuZXcgb25lcy4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1FX1NJREVf REFUQV9GTEFHX1VOSVFVRSAoMSA8PCAwKQorKy8qKgorKyAqIERvbid0IGFkZCBhIG5ldyBlbnRy eSBpZiBhbm90aGVyIG9mIHRoZSBzYW1lIHR5cGUgZXhpc3RzLgorKyAqIEFwcGxpZXMgb25seSBm b3Igc2lkZSBkYXRhIHR5cGVzIHdpdGhvdXQgdGhlIEFWX1NJREVfREFUQV9QUk9QX01VTFRJIHBy b3AuCisrICovCisrI2RlZmluZSBBVl9GUkFNRV9TSURFX0RBVEFfRkxBR19SRVBMQUNFICgxIDw8 IDEpCisrLyoqCisrICogQ3JlYXRlIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgcGFzc2VkIGluIGJ1 ZmZlciBpbnN0ZWFkIG9mIHRha2luZyBvd25lcnNoaXAKKysgKiBvZiBpdC4KKysgKi8KKysjZGVm aW5lIEFWX0ZSQU1FX1NJREVfREFUQV9GTEFHX05FV19SRUYgKDEgPDwgMikKKysKKysvKioKKysg KiBBZGQgbmV3IHNpZGUgZGF0YSBlbnRyeSB0byBhbiBhcnJheS4KKysgKgorKyAqIEBwYXJhbSBz ZCAgICBwb2ludGVyIHRvIGFycmF5IG9mIHNpZGUgZGF0YSB0byB3aGljaCB0byBhZGQgYW5vdGhl ciBlbnRyeSwKKysgKiAgICAgICAgICAgICAgb3IgdG8gTlVMTCBpbiBvcmRlciB0byBzdGFydCBh IG5ldyBhcnJheS4KKysgKiBAcGFyYW0gbmJfc2QgcG9pbnRlciB0byBhbiBpbnRlZ2VyIGNvbnRh aW5pbmcgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisrICogICAgICAgICAgICAgIHRoZSBhcnJh eS4KKysgKiBAcGFyYW0gdHlwZSAgdHlwZSBvZiB0aGUgYWRkZWQgc2lkZSBkYXRhCisrICogQHBh cmFtIHNpemUgIHNpemUgb2YgdGhlIHNpZGUgZGF0YQorKyAqIEBwYXJhbSBmbGFncyBTb21lIGNv bWJpbmF0aW9uIG9mIEFWX0ZSQU1FX1NJREVfREFUQV9GTEFHXyogZmxhZ3MsIG9yIDAuCisrICoK KysgKiBAcmV0dXJuIG5ld2x5IGFkZGVkIHNpZGUgZGF0YSBvbiBzdWNjZXNzLCBOVUxMIG9uIGVy cm9yLgorKyAqIEBub3RlIEluIGNhc2Ugb2YgQVZfRlJBTUVfU0lERV9EQVRBX0ZMQUdfVU5JUVVF IGJlaW5nIHNldCwgZW50cmllcyBvZgorKyAqICAgICAgIG1hdGNoaW5nIEFWRnJhbWVTaWRlRGF0 YVR5cGUgd2lsbCBiZSByZW1vdmVkIGJlZm9yZSB0aGUgYWRkaXRpb24KKysgKiAgICAgICBpcyBh dHRlbXB0ZWQuCisrICogQG5vdGUgSW4gY2FzZSBvZiBBVl9GUkFNRV9TSURFX0RBVEFfRkxBR19S RVBMQUNFIGJlaW5nIHNldCwgaWYgYW4KKysgKiAgICAgICBlbnRyeSBvZiB0aGUgc2FtZSB0eXBl IGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluc3RlYWQuCisrICovCisrQVZG cmFtZVNpZGVEYXRhICphdl9mcmFtZV9zaWRlX2RhdGFfbmV3KEFWRnJhbWVTaWRlRGF0YSAqKipz ZCwgaW50ICpuYl9zZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKworKy8q KgorKyAqIEFkZCBhIG5ldyBzaWRlIGRhdGEgZW50cnkgdG8gYW4gYXJyYXkgZnJvbSBhbiBleGlz dGluZyBBVkJ1ZmZlclJlZi4KKysgKgorKyAqIEBwYXJhbSBzZCAgICBwb2ludGVyIHRvIGFycmF5 IG9mIHNpZGUgZGF0YSB0byB3aGljaCB0byBhZGQgYW5vdGhlciBlbnRyeSwKKysgKiAgICAgICAg ICAgICAgb3IgdG8gTlVMTCBpbiBvcmRlciB0byBzdGFydCBhIG5ldyBhcnJheS4KKysgKiBAcGFy YW0gbmJfc2QgcG9pbnRlciB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBl bnRyaWVzIGluCisrICogICAgICAgICAgICAgIHRoZSBhcnJheS4KKysgKiBAcGFyYW0gdHlwZSAg dHlwZSBvZiB0aGUgYWRkZWQgc2lkZSBkYXRhCisrICogQHBhcmFtIGJ1ZiAgIFBvaW50ZXIgdG8g QVZCdWZmZXJSZWYgdG8gYWRkIHRvIHRoZSBhcnJheS4gT24gc3VjY2VzcywKKysgKiAgICAgICAg ICAgICAgdGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgQVZCdWZmZXJSZWYgYW5k ICpidWYgaXMKKysgKiAgICAgICAgICAgICAgc2V0IHRvIE5VTEwsIHVubGVzcyBBVl9GUkFNRV9T SURFX0RBVEFfRkxBR19ORVdfUkVGIGlzIHNldAorKyAqICAgICAgICAgICAgICBpbiB3aGljaCBj YXNlIHRoZSBvd25lcnNoaXAgd2lsbCByZW1haW4gd2l0aCB0aGUgY2FsbGVyLgorKyAqIEBwYXJh bSBmbGFncyBTb21lIGNvbWJpbmF0aW9uIG9mIEFWX0ZSQU1FX1NJREVfREFUQV9GTEFHXyogZmxh Z3MsIG9yIDAuCisrICoKKysgKiBAcmV0dXJuIG5ld2x5IGFkZGVkIHNpZGUgZGF0YSBvbiBzdWNj ZXNzLCBOVUxMIG9uIGVycm9yLgorKyAqIEBub3RlIEluIGNhc2Ugb2YgQVZfRlJBTUVfU0lERV9E QVRBX0ZMQUdfVU5JUVVFIGJlaW5nIHNldCwgZW50cmllcyBvZgorKyAqICAgICAgIG1hdGNoaW5n IEFWRnJhbWVTaWRlRGF0YVR5cGUgd2lsbCBiZSByZW1vdmVkIGJlZm9yZSB0aGUgYWRkaXRpb24K KysgKiAgICAgICBpcyBhdHRlbXB0ZWQuCisrICogQG5vdGUgSW4gY2FzZSBvZiBBVl9GUkFNRV9T SURFX0RBVEFfRkxBR19SRVBMQUNFIGJlaW5nIHNldCwgaWYgYW4KKysgKiAgICAgICBlbnRyeSBv ZiB0aGUgc2FtZSB0eXBlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluc3Rl YWQuCisrICoKKysgKi8KKytBVkZyYW1lU2lkZURhdGEgKmF2X2ZyYW1lX3NpZGVfZGF0YV9hZGQo QVZGcmFtZVNpZGVEYXRhICoqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIEFWRnJhbWVTaWRlRGF0YVR5cGUgdHlwZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKipidWYsIHVu c2lnbmVkIGludCBmbGFncyk7CisrCisrLyoqCisrICogQWRkIGEgbmV3IHNpZGUgZGF0YSBlbnRy eSB0byBhbiBhcnJheSBiYXNlZCBvbiBleGlzdGluZyBzaWRlIGRhdGEsIHRha2luZworKyAqIGEg cmVmZXJlbmNlIHRvd2FyZHMgdGhlIGNvbnRhaW5lZCBBVkJ1ZmZlclJlZi4KKysgKgorKyAqIEBw YXJhbSBzZCAgICBwb2ludGVyIHRvIGFycmF5IG9mIHNpZGUgZGF0YSB0byB3aGljaCB0byBhZGQg YW5vdGhlciBlbnRyeSwKKysgKiAgICAgICAgICAgICAgb3IgdG8gTlVMTCBpbiBvcmRlciB0byBz dGFydCBhIG5ldyBhcnJheS4KKysgKiBAcGFyYW0gbmJfc2QgcG9pbnRlciB0byBhbiBpbnRlZ2Vy IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisrICogICAgICAgICAgICAgIHRo ZSBhcnJheS4KKysgKiBAcGFyYW0gc3JjICAgc2lkZSBkYXRhIHRvIGJlIGNsb25lZCwgd2l0aCBh IG5ldyByZWZlcmVuY2UgdXRpbGl6ZWQKKysgKiAgICAgICAgICAgICAgZm9yIHRoZSBidWZmZXIu CisrICogQHBhcmFtIGZsYWdzIFNvbWUgY29tYmluYXRpb24gb2YgQVZfRlJBTUVfU0lERV9EQVRB X0ZMQUdfKiBmbGFncywgb3IgMC4KKysgKgorKyAqIEByZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLCA+PTAgb24gc3VjY2Vzcy4KKysgKiBAbm90ZSBJbiBjYXNlIG9mIEFWX0ZS QU1FX1NJREVfREFUQV9GTEFHX1VOSVFVRSBiZWluZyBzZXQsIGVudHJpZXMgb2YKKysgKiAgICAg ICBtYXRjaGluZyBBVkZyYW1lU2lkZURhdGFUeXBlIHdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdGhl IGFkZGl0aW9uCisrICogICAgICAgaXMgYXR0ZW1wdGVkLgorKyAqIEBub3RlIEluIGNhc2Ugb2Yg QVZfRlJBTUVfU0lERV9EQVRBX0ZMQUdfUkVQTEFDRSBiZWluZyBzZXQsIGlmIGFuCisrICogICAg ICAgZW50cnkgb2YgdGhlIHNhbWUgdHlwZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXBs YWNlZCBpbnN0ZWFkLgorKyAqLworK2ludCBhdl9mcmFtZV9zaWRlX2RhdGFfY2xvbmUoQVZGcmFt ZVNpZGVEYXRhICoqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQVZGcmFtZVNpZGVEYXRhICpzcmMsIHVuc2lnbmVkIGludCBmbGFncyk7CisrCisr LyoqCisrICogR2V0IGEgc2lkZSBkYXRhIGVudHJ5IG9mIGEgc3BlY2lmaWMgdHlwZSBmcm9tIGFu IGFycmF5LgorKyAqCisrICogQHBhcmFtIHNkICAgIGFycmF5IG9mIHNpZGUgZGF0YS4KKysgKiBA cGFyYW0gbmJfc2QgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0 aGUgYXJyYXkuCisrICogQHBhcmFtIHR5cGUgIHR5cGUgb2Ygc2lkZSBkYXRhIHRvIGJlIHF1ZXJp ZWQKKysgKgorKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzaWRlIGRhdGEgb2YgYSBnaXZl biB0eXBlIG9uIHN1Y2Nlc3MsIE5VTEwgaWYgdGhlcmUKKysgKiAgICAgICAgIGlzIG5vIHNpZGUg ZGF0YSB3aXRoIHN1Y2ggdHlwZSBpbiB0aGlzIHNldC4KKysgKi8KKytjb25zdCBBVkZyYW1lU2lk ZURhdGEgKmF2X2ZyYW1lX3NpZGVfZGF0YV9nZXRfYyhjb25zdCBBVkZyYW1lU2lkZURhdGEgKiBj b25zdCAqc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgaW50IG5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysg KiBXcmFwcGVyIGFyb3VuZCBhdl9mcmFtZV9zaWRlX2RhdGFfZ2V0X2MoKSB0byB3b3JrYXJvdW5k IHRoZSBsaW1pdGF0aW9uCisrICogdGhhdCBmb3IgYW55IHR5cGUgVCB0aGUgY29udmVyc2lvbiBm cm9tIFQgKiBjb25zdCAqIHRvIGNvbnN0IFQgKiBjb25zdCAqCisrICogaXMgbm90IHBlcmZvcm1l ZCBhdXRvbWF0aWNhbGx5IGluIEMuCisrICogQHNlZSBhdl9mcmFtZV9zaWRlX2RhdGFfZ2V0X2Mo KQorKyAqLworK3N0YXRpYyBpbmxpbmUKKytjb25zdCBBVkZyYW1lU2lkZURhdGEgKmF2X2ZyYW1l X3NpZGVfZGF0YV9nZXQoQVZGcmFtZVNpZGVEYXRhICogY29uc3QgKnNkLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbmJfc2QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZGcmFtZVNp ZGVEYXRhVHlwZSB0eXBlKQorK3sKKysgICAgcmV0dXJuIGF2X2ZyYW1lX3NpZGVfZGF0YV9nZXRf YygoY29uc3QgQVZGcmFtZVNpZGVEYXRhICogY29uc3QgKilzZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuYl9zZCwgdHlwZSk7CisrfQorKworKy8qKgorKyAqIFJlbW92 ZSBhbmQgZnJlZSBhbGwgc2lkZSBkYXRhIGluc3RhbmNlcyBvZiB0aGUgZ2l2ZW4gdHlwZSBmcm9t IGFuIGFycmF5LgorKyAqLworK3ZvaWQgYXZfZnJhbWVfc2lkZV9kYXRhX3JlbW92ZShBVkZyYW1l U2lkZURhdGEgKioqc2QsIGludCAqbmJfc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBSZW1vdmUg YW5kIGZyZWUgYWxsIHNpZGUgZGF0YSBpbnN0YW5jZXMgdGhhdCBtYXRjaCBhbnkgb2YgdGhlIGdp dmVuCisrICogc2lkZSBkYXRhIHByb3BlcnRpZXMuIChTZWUgZW51bSBBVlNpZGVEYXRhUHJvcHMp CisrICovCisrdm9pZCBhdl9mcmFtZV9zaWRlX2RhdGFfcmVtb3ZlX2J5X3Byb3BzKEFWRnJhbWVT aWRlRGF0YSAqKipzZCwgaW50ICpuYl9zZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHByb3BzKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRp ZiAvKiBBVlVUSUxfRlJBTUVfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2h3Y29udGV4dC5oLmZm bXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL2h3Y29udGV4dC5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2h3Y29udGV4dC5oLmZm bXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzcxNTk0NTYgKzAyMDAKKysrKyBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv aHdjb250ZXh0LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzcwMzQ5MTUgKzAyMDAKK0BAIC0wLDAg KzEsNjAxIEBACisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y CisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfSAorKyNkZWZpbmUgQVZVVElM X0hXQ09OVEVYVF9ICisrCisrI2luY2x1ZGUgImJ1ZmZlci5oIgorKyNpbmNsdWRlICJmcmFtZS5o IgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAicGl4Zm10LmgiCisrCisrZW51bSBBVkhX RGV2aWNlVHlwZSB7CisrICAgIEFWX0hXREVWSUNFX1RZUEVfTk9ORSwKKysgICAgQVZfSFdERVZJ Q0VfVFlQRV9WRFBBVSwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9DVURBLAorKyAgICBBVl9IV0RF VklDRV9UWVBFX1ZBQVBJLAorKyAgICBBVl9IV0RFVklDRV9UWVBFX0RYVkEyLAorKyAgICBBVl9I V0RFVklDRV9UWVBFX1FTViwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsCisr ICAgIEFWX0hXREVWSUNFX1RZUEVfRDNEMTFWQSwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9EUk0s CisrICAgIEFWX0hXREVWSUNFX1RZUEVfT1BFTkNMLAorKyAgICBBVl9IV0RFVklDRV9UWVBFX01F RElBQ09ERUMsCisrICAgIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FOLAorKyAgICBBVl9IV0RFVklD RV9UWVBFX0QzRDEyVkEsCisrICAgIEFWX0hXREVWSUNFX1RZUEVfQU1GLAorKyAgICAvKiBPcGVu SGFybW9ueSBDb2RlYyBkZXZpY2UgKi8KKysgICAgQVZfSFdERVZJQ0VfVFlQRV9PSENPREVDLAor K307CisrCisrLyoqCisrICogVGhpcyBzdHJ1Y3QgYWdncmVnYXRlcyBhbGwgdGhlIChoYXJkd2Fy ZS92ZW5kb3Itc3BlY2lmaWMpICJoaWdoLWxldmVsIiBzdGF0ZSwKKysgKiBpLmUuIHN0YXRlIHRo YXQgaXMgbm90IHRpZWQgdG8gYSBjb25jcmV0ZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uCisr ICogRS5nLiwgaW4gYW4gQVBJIHRoYXQgc3VwcG9ydHMgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgZW5j b2RpbmcgYW5kIGRlY29kaW5nLAorKyAqIHRoaXMgc3RydWN0IHdpbGwgKGlmIHBvc3NpYmxlKSB3 cmFwIHRoZSBzdGF0ZSB0aGF0IGlzIGNvbW1vbiB0byBib3RoIGVuY29kaW5nCisrICogYW5kIGRl Y29kaW5nIGFuZCBmcm9tIHdoaWNoIHNwZWNpZmljIGluc3RhbmNlcyBvZiBlbmNvZGVycyBvciBk ZWNvZGVycyBjYW4gYmUKKysgKiBkZXJpdmVkLgorKyAqCisrICogVGhpcyBzdHJ1Y3QgaXMgcmVm ZXJlbmNlLWNvdW50ZWQgd2l0aCB0aGUgQVZCdWZmZXIgbWVjaGFuaXNtLiBUaGUKKysgKiBhdl9o d2RldmljZV9jdHhfYWxsb2MoKSBjb25zdHJ1Y3RvciB5aWVsZHMgYSByZWZlcmVuY2UsIHdob3Nl IGRhdGEgZmllbGQKKysgKiBwb2ludHMgdG8gdGhlIGFjdHVhbCBBVkhXRGV2aWNlQ29udGV4dC4g RnVydGhlciBvYmplY3RzIGRlcml2ZWQgZnJvbQorKyAqIEFWSFdEZXZpY2VDb250ZXh0IChzdWNo IGFzIEFWSFdGcmFtZXNDb250ZXh0LCBkZXNjcmliaW5nIGEgZnJhbWUgcG9vbCB3aXRoCisrICog c3BlY2lmaWMgcHJvcGVydGllcykgd2lsbCBob2xkIGFuIGludGVybmFsIHJlZmVyZW5jZSB0byBp dC4gQWZ0ZXIgYWxsIHRoZQorKyAqIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLCB0aGUgQVZIV0Rl dmljZUNvbnRleHQgaXRzZWxmIHdpbGwgYmUgZnJlZWQsCisrICogb3B0aW9uYWxseSBpbnZva2lu ZyBhIHVzZXItc3BlY2lmaWVkIGNhbGxiYWNrIGZvciB1bmluaXRpYWxpemluZyB0aGUgaGFyZHdh cmUKKysgKiBzdGF0ZS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkhXRGV2aWNlQ29udGV4dCB7 CisrICAgIC8qKgorKyAgICAgKiBBIGNsYXNzIGZvciBsb2dnaW5nLiBTZXQgYnkgYXZfaHdkZXZp Y2VfY3R4X2FsbG9jKCkuCisrICAgICAqLworKyAgICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsK KysKKysgICAgLyoqCisrICAgICAqIFRoaXMgZmllbGQgaWRlbnRpZmllcyB0aGUgdW5kZXJseWlu ZyBBUEkgdXNlZCBmb3IgaGFyZHdhcmUgYWNjZXNzLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGZp ZWxkIGlzIHNldCB3aGVuIHRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhbmQgbmV2ZXIgY2hhbmdl ZAorKyAgICAgKiBhZnRlcndhcmRzLgorKyAgICAgKi8KKysgICAgZW51bSBBVkhXRGV2aWNlVHlw ZSB0eXBlOworKworKyAgICAvKioKKysgICAgICogVGhlIGZvcm1hdC1zcGVjaWZpYyBkYXRhLCBh bGxvY2F0ZWQgYW5kIGZyZWVkIGJ5IGxpYmF2dXRpbCBhbG9uZyB3aXRoCisrICAgICAqIHRoaXMg Y29udGV4dC4KKysgICAgICoKKysgICAgICogU2hvdWxkIGJlIGNhc3QgYnkgdGhlIHVzZXIgdG8g dGhlIGZvcm1hdC1zcGVjaWZpYyBjb250ZXh0IGRlZmluZWQgaW4gdGhlCisrICAgICAqIGNvcnJl c3BvbmRpbmcgaGVhZGVyIChod2NvbnRleHRfKi5oKSBhbmQgZmlsbGVkIGFzIGRlc2NyaWJlZCBp biB0aGUKKysgICAgICogZG9jdW1lbnRhdGlvbiBiZWZvcmUgY2FsbGluZyBhdl9od2RldmljZV9j dHhfaW5pdCgpLgorKyAgICAgKgorKyAgICAgKiBBZnRlciBjYWxsaW5nIGF2X2h3ZGV2aWNlX2N0 eF9pbml0KCkgdGhpcyBzdHJ1Y3Qgc2hvdWxkIG5vdCBiZSBtb2RpZmllZAorKyAgICAgKiBieSB0 aGUgY2FsbGVyLgorKyAgICAgKi8KKysgICAgdm9pZCAqaHdjdHg7CisrCisrICAgIC8qKgorKyAg ICAgKiBUaGlzIGZpZWxkIG1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgY2FsbGluZyBh dl9od2RldmljZV9jdHhfaW5pdCgpLgorKyAgICAgKgorKyAgICAgKiBJZiBub24tTlVMTCwgdGhp cyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0bworKyAg ICAgKiB0aGlzIGNvbnRleHQgaXMgdW5yZWZlcmVuY2VkLCBpbW1lZGlhdGVseSBiZWZvcmUgaXQg aXMgZnJlZWQuCisrICAgICAqCisrICAgICAqIEBub3RlIHdoZW4gb3RoZXIgb2JqZWN0cyAoZS5n IGFuIEFWSFdGcmFtZXNDb250ZXh0KSBhcmUgZGVyaXZlZCBmcm9tIHRoaXMKKysgICAgICogICAg ICAgc3RydWN0LCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhZnRlciBhbGwgc3VjaCBj aGlsZCBvYmplY3RzCisrICAgICAqICAgICAgIGFyZSBmdWxseSB1bmluaXRpYWxpemVkIGFuZCB0 aGVpciByZXNwZWN0aXZlIGRlc3RydWN0b3JzIGludm9rZWQuCisrICAgICAqLworKyAgICB2b2lk ICgqZnJlZSkoc3RydWN0IEFWSFdEZXZpY2VDb250ZXh0ICpjdHgpOworKworKyAgICAvKioKKysg ICAgICogQXJiaXRyYXJ5IHVzZXIgZGF0YSwgdG8gYmUgdXNlZCBlLmcuIGJ5IHRoZSBmcmVlKCkg Y2FsbGJhY2suCisrICAgICAqLworKyAgICB2b2lkICp1c2VyX29wYXF1ZTsKKyt9IEFWSFdEZXZp Y2VDb250ZXh0OworKworKy8qKgorKyAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBhIHNldCBvciBw b29sIG9mICJoYXJkd2FyZSIgZnJhbWVzIChpLmUuIHRob3NlIHdpdGgKKysgKiBkYXRhIG5vdCBs b2NhdGVkIGluIG5vcm1hbCBzeXN0ZW0gbWVtb3J5KS4gQWxsIHRoZSBmcmFtZXMgaW4gdGhlIHBv b2wgYXJlCisrICogYXNzdW1lZCB0byBiZSBhbGxvY2F0ZWQgaW4gdGhlIHNhbWUgd2F5IGFuZCBp bnRlcmNoYW5nZWFibGUuCisrICoKKysgKiBUaGlzIHN0cnVjdCBpcyByZWZlcmVuY2UtY291bnRl ZCB3aXRoIHRoZSBBVkJ1ZmZlciBtZWNoYW5pc20gYW5kIHRpZWQgdG8gYQorKyAqIGdpdmVuIEFW SFdEZXZpY2VDb250ZXh0IGluc3RhbmNlLiBUaGUgYXZfaHdmcmFtZV9jdHhfYWxsb2MoKSBjb25z dHJ1Y3RvcgorKyAqIHlpZWxkcyBhIHJlZmVyZW5jZSwgd2hvc2UgZGF0YSBmaWVsZCBwb2ludHMg dG8gdGhlIGFjdHVhbCBBVkhXRnJhbWVzQ29udGV4dAorKyAqIHN0cnVjdC4KKysgKi8KKyt0eXBl ZGVmIHN0cnVjdCBBVkhXRnJhbWVzQ29udGV4dCB7CisrICAgIC8qKgorKyAgICAgKiBBIGNsYXNz IGZvciBsb2dnaW5nLgorKyAgICAgKi8KKysgICAgY29uc3QgQVZDbGFzcyAqYXZfY2xhc3M7Cisr CisrICAgIC8qKgorKyAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IEFWSFdEZXZpY2VD b250ZXh0LiBUaGlzIHJlZmVyZW5jZSBpcyBvd25lZCBhbmQKKysgICAgICogbWFuYWdlZCBieSB0 aGUgZW5jbG9zaW5nIEFWSFdGcmFtZXNDb250ZXh0LCBidXQgdGhlIGNhbGxlciBtYXkgZGVyaXZl CisrICAgICAqIGFkZGl0aW9uYWwgcmVmZXJlbmNlcyBmcm9tIGl0LgorKyAgICAgKi8KKysgICAg QVZCdWZmZXJSZWYgKmRldmljZV9yZWY7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgcGFyZW50 IEFWSFdEZXZpY2VDb250ZXh0LiBUaGlzIGlzIHNpbXBseSBhIHBvaW50ZXIgdG8KKysgICAgICog ZGV2aWNlX3JlZi0+ZGF0YSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UuCisrICAgICAqCisrICAg ICAqIFNldCBieSBsaWJhdnV0aWwgaW4gYXZfaHdmcmFtZV9jdHhfaW5pdCgpLgorKyAgICAgKi8K KysgICAgQVZIV0RldmljZUNvbnRleHQgKmRldmljZV9jdHg7CisrCisrICAgIC8qKgorKyAgICAg KiBUaGUgZm9ybWF0LXNwZWNpZmljIGRhdGEsIGFsbG9jYXRlZCBhbmQgZnJlZWQgYXV0b21hdGlj YWxseSBhbG9uZyB3aXRoCisrICAgICAqIHRoaXMgY29udGV4dC4KKysgICAgICoKKysgICAgICog VGhlIHVzZXIgc2hhbGwgaWdub3JlIHRoaXMgZmllbGQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZm9y bWF0LXNwZWNpZmljCisrICAgICAqIGhlYWRlciAoaHdjb250ZXh0XyouaCkgZG9lcyBub3QgZGVm aW5lIGEgY29udGV4dCB0byBiZSB1c2VkIGFzCisrICAgICAqIEFWSFdGcmFtZXNDb250ZXh0Lmh3 Y3R4LgorKyAgICAgKgorKyAgICAgKiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBjYXN0IGJ5IHRo ZSB1c2VyIHRvIHNhaWQgY29udGV4dCBhbmQgZmlsbGVkCisrICAgICAqIGFzIGRlc2NyaWJlZCBp biB0aGUgZG9jdW1lbnRhdGlvbiBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCku CisrICAgICAqCisrICAgICAqIEFmdGVyIGFueSBmcmFtZXMgdXNpbmcgdGhpcyBjb250ZXh0IGFy ZSBjcmVhdGVkLCB0aGUgY29udGVudHMgb2YgdGhpcworKyAgICAgKiBzdHJ1Y3Qgc2hvdWxkIG5v dCBiZSBtb2RpZmllZCBieSB0aGUgY2FsbGVyLgorKyAgICAgKi8KKysgICAgdm9pZCAqaHdjdHg7 CisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIGZpZWxkIG1heSBiZSBzZXQgYnkgdGhlIGNhbGxl ciBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisrICAgICAqCisrICAgICAq IElmIG5vbi1OVUxMLCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGxhc3Qg cmVmZXJlbmNlIHRvCisrICAgICAqIHRoaXMgY29udGV4dCBpcyB1bnJlZmVyZW5jZWQsIGltbWVk aWF0ZWx5IGJlZm9yZSBpdCBpcyBmcmVlZC4KKysgICAgICovCisrICAgIHZvaWQgKCpmcmVlKShz dHJ1Y3QgQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCk7CisrCisrICAgIC8qKgorKyAgICAgKiBBcmJp dHJhcnkgdXNlciBkYXRhLCB0byBiZSB1c2VkIGUuZy4gYnkgdGhlIGZyZWUoKSBjYWxsYmFjay4K KysgICAgICovCisrICAgIHZvaWQgKnVzZXJfb3BhcXVlOworKworKyAgICAvKioKKysgICAgICog QSBwb29sIGZyb20gd2hpY2ggdGhlIGZyYW1lcyBhcmUgYWxsb2NhdGVkIGJ5IGF2X2h3ZnJhbWVf Z2V0X2J1ZmZlcigpLgorKyAgICAgKiBUaGlzIGZpZWxkIG1heSBiZSBzZXQgYnkgdGhlIGNhbGxl ciBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisrICAgICAqIFRoZSBidWZm ZXJzIHJldHVybmVkIGJ5IGNhbGxpbmcgYXZfYnVmZmVyX3Bvb2xfZ2V0KCkgb24gdGhpcyBwb29s IG11c3QKKysgICAgICogaGF2ZSB0aGUgcHJvcGVydGllcyBkZXNjcmliZWQgaW4gdGhlIGRvY3Vt ZW50YXRpb24gaW4gdGhlIGNvcnJlc3BvbmRpbmcgaHcKKysgICAgICogdHlwZSdzIGhlYWRlciAo aHdjb250ZXh0XyouaCkuIFRoZSBwb29sIHdpbGwgYmUgZnJlZWQgc3RyaWN0bHkgYmVmb3JlCisr ICAgICAqIHRoaXMgc3RydWN0J3MgZnJlZSgpIGNhbGxiYWNrIGlzIGludm9rZWQuCisrICAgICAq CisrICAgICAqIFRoaXMgZmllbGQgbWF5IGJlIE5VTEwsIHRoZW4gbGliYXZ1dGlsIHdpbGwgYXR0 ZW1wdCB0byBhbGxvY2F0ZSBhIHBvb2wKKysgICAgICogaW50ZXJuYWxseS4gTm90ZSB0aGF0IGNl cnRhaW4gZGV2aWNlIHR5cGVzIGVuZm9yY2UgcG9vbHMgYWxsb2NhdGVkIGF0CisrICAgICAqIGZp eGVkIHNpemUgKGZyYW1lIGNvdW50KSwgd2hpY2ggY2Fubm90IGJlIGV4dGVuZGVkIGR5bmFtaWNh bGx5LiBJbiBzdWNoIGEKKysgICAgICogY2FzZSwgaW5pdGlhbF9wb29sX3NpemUgbXVzdCBiZSBz ZXQgYXBwcm9wcmlhdGVseS4KKysgICAgICovCisrICAgIEFWQnVmZmVyUG9vbCAqcG9vbDsKKysK KysgICAgLyoqCisrICAgICAqIEluaXRpYWwgc2l6ZSBvZiB0aGUgZnJhbWUgcG9vbC4gSWYgYSBk ZXZpY2UgdHlwZSBkb2VzIG5vdCBzdXBwb3J0CisrICAgICAqIGR5bmFtaWNhbGx5IHJlc2l6aW5n IHRoZSBwb29sLCB0aGVuIHRoaXMgaXMgYWxzbyB0aGUgbWF4aW11bSBwb29sIHNpemUuCisrICAg ICAqCisrICAgICAqIE1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgY2FsbGluZyBhdl9o d2ZyYW1lX2N0eF9pbml0KCkuIE11c3QgYmUKKysgICAgICogc2V0IGlmIHBvb2wgaXMgTlVMTCBh bmQgdGhlIGRldmljZSB0eXBlIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyBwb29scy4KKysgICAg ICovCisrICAgIGludCBpbml0aWFsX3Bvb2xfc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIFRo ZSBwaXhlbCBmb3JtYXQgaWRlbnRpZnlpbmcgdGhlIHVuZGVybHlpbmcgSFcgc3VyZmFjZSB0eXBl LgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlIGEgaHdhY2NlbCBmb3JtYXQsIGkuZS4gdGhlIGNv cnJlc3BvbmRpbmcgZGVzY3JpcHRvciBtdXN0IGhhdmUgdGhlCisrICAgICAqIEFWX1BJWF9GTVRf RkxBR19IV0FDQ0VMIGZsYWcgc2V0LgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlIHNldCBieSB0 aGUgdXNlciBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisrICAgICAqLwor KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0OworKworKyAgICAvKioKKysgICAgICogVGhl IHBpeGVsIGZvcm1hdCBpZGVudGlmeWluZyB0aGUgYWN0dWFsIGRhdGEgbGF5b3V0IG9mIHRoZSBo YXJkd2FyZQorKyAgICAgKiBmcmFtZXMuCisrICAgICAqCisrICAgICAqIE11c3QgYmUgc2V0IGJ5 IHRoZSBjYWxsZXIgYmVmb3JlIGNhbGxpbmcgYXZfaHdmcmFtZV9jdHhfaW5pdCgpLgorKyAgICAg KgorKyAgICAgKiBAbm90ZSB3aGVuIHRoZSB1bmRlcmx5aW5nIEFQSSBkb2VzIG5vdCBwcm92aWRl IHRoZSBleGFjdCBkYXRhIGxheW91dCwgYnV0CisrICAgICAqIG9ubHkgdGhlIGNvbG9yc3BhY2Uv Yml0IGRlcHRoLCB0aGlzIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIGZ1bGx5CisrICAgICAq IHBsYW5hciB2ZXJzaW9uIG9mIHRoYXQgZm9ybWF0IChlLmcuIGZvciA4LWJpdCA0MjAgWVVWIGl0 IHNob3VsZCBiZQorKyAgICAgKiBBVl9QSVhfRk1UX1lVVjQyMFAsIG5vdCBBVl9QSVhfRk1UX05W MTIgb3IgYW55dGhpbmcgZWxzZSkuCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQg c3dfZm9ybWF0OworKworKyAgICAvKioKKysgICAgICogVGhlIGFsbG9jYXRlZCBkaW1lbnNpb25z IG9mIHRoZSBmcmFtZXMgaW4gdGhpcyBwb29sLgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlIHNl dCBieSB0aGUgdXNlciBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisrICAg ICAqLworKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyt9IEFWSFdGcmFtZXNDb250ZXh0OworKwor Ky8qKgorKyAqIExvb2sgdXAgYW4gQVZIV0RldmljZVR5cGUgYnkgbmFtZS4KKysgKgorKyAqIEBw YXJhbSBuYW1lIFN0cmluZyBuYW1lIG9mIHRoZSBkZXZpY2UgdHlwZSAoY2FzZS1pbnNlbnNpdGl2 ZSkuCisrICogQHJldHVybiBUaGUgdHlwZSBmcm9tIGVudW0gQVZIV0RldmljZVR5cGUsIG9yIEFW X0hXREVWSUNFX1RZUEVfTk9ORSBpZgorKyAqICAgICAgICAgbm90IGZvdW5kLgorKyAqLworK2Vu dW0gQVZIV0RldmljZVR5cGUgYXZfaHdkZXZpY2VfZmluZF90eXBlX2J5X25hbWUoY29uc3QgY2hh ciAqbmFtZSk7CisrCisrLyoqIEdldCB0aGUgc3RyaW5nIG5hbWUgb2YgYW4gQVZIV0RldmljZVR5 cGUuCisrICoKKysgKiBAcGFyYW0gdHlwZSBUeXBlIGZyb20gZW51bSBBVkhXRGV2aWNlVHlwZS4K KysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gYSBzdGF0aWMgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5h bWUsIG9yIE5VTEwgaWYgdGhlIHR5cGUKKysgKiAgICAgICAgIGlzIG5vdCB2YWxpZC4KKysgKi8K Kytjb25zdCBjaGFyICphdl9od2RldmljZV9nZXRfdHlwZV9uYW1lKGVudW0gQVZIV0RldmljZVR5 cGUgdHlwZSk7CisrCisrLyoqCisrICogSXRlcmF0ZSBvdmVyIHN1cHBvcnRlZCBkZXZpY2UgdHlw ZXMuCisrICoKKysgKiBAcGFyYW0gcHJldiBBVl9IV0RFVklDRV9UWVBFX05PTkUgaW5pdGlhbGx5 LCB0aGVuIHRoZSBwcmV2aW91cyB0eXBlCisrICogICAgICAgICAgICAgcmV0dXJuZWQgYnkgdGhp cyBmdW5jdGlvbiBpbiBzdWJzZXF1ZW50IGl0ZXJhdGlvbnMuCisrICogQHJldHVybiBUaGUgbmV4 dCB1c2FibGUgZGV2aWNlIHR5cGUgZnJvbSBlbnVtIEFWSFdEZXZpY2VUeXBlLCBvcgorKyAqICAg ICAgICAgQVZfSFdERVZJQ0VfVFlQRV9OT05FIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorKyAqLwor K2VudW0gQVZIV0RldmljZVR5cGUgYXZfaHdkZXZpY2VfaXRlcmF0ZV90eXBlcyhlbnVtIEFWSFdE ZXZpY2VUeXBlIHByZXYpOworKworKy8qKgorKyAqIEFsbG9jYXRlIGFuIEFWSFdEZXZpY2VDb250 ZXh0IGZvciBhIGdpdmVuIGhhcmR3YXJlIHR5cGUuCisrICoKKysgKiBAcGFyYW0gdHlwZSB0aGUg dHlwZSBvZiB0aGUgaGFyZHdhcmUgZGV2aWNlIHRvIGFsbG9jYXRlLgorKyAqIEByZXR1cm4gYSBy ZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgQVZIV0RldmljZUNvbnRleHQgb24gc3VjY2Vz cyBvciBOVUxMCisrICogICAgICAgICBvbiBmYWlsdXJlLgorKyAqLworK0FWQnVmZmVyUmVmICph dl9od2RldmljZV9jdHhfYWxsb2MoZW51bSBBVkhXRGV2aWNlVHlwZSB0eXBlKTsKKysKKysvKioK KysgKiBGaW5hbGl6ZSB0aGUgZGV2aWNlIGNvbnRleHQgYmVmb3JlIHVzZS4gVGhpcyBmdW5jdGlv biBtdXN0IGJlIGNhbGxlZCBhZnRlcgorKyAqIHRoZSBjb250ZXh0IGlzIGZpbGxlZCB3aXRoIGFs bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gYW5kIGJlZm9yZSBpdCBpcworKyAqIHVzZWQgaW4g YW55IHdheS4KKysgKgorKyAqIEBwYXJhbSByZWYgYSByZWZlcmVuY2UgdG8gdGhlIEFWSFdEZXZp Y2VDb250ZXh0CisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBj b2RlIG9uIGZhaWx1cmUKKysgKi8KKytpbnQgYXZfaHdkZXZpY2VfY3R4X2luaXQoQVZCdWZmZXJS ZWYgKnJlZik7CisrCisrLyoqCisrICogT3BlbiBhIGRldmljZSBvZiB0aGUgc3BlY2lmaWVkIHR5 cGUgYW5kIGNyZWF0ZSBhbiBBVkhXRGV2aWNlQ29udGV4dCBmb3IgaXQuCisrICoKKysgKiBUaGlz IGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gaW50ZW5kZWQgdG8gY292ZXIgdGhlIHNpbXBsZSBj YXNlcy4gQ2FsbGVycworKyAqIHdobyBuZWVkIHRvIGZpbmUtdHVuZSBkZXZpY2UgY3JlYXRpb24v bWFuYWdlbWVudCBzaG91bGQgb3BlbiB0aGUgZGV2aWNlCisrICogbWFudWFsbHkgYW5kIHRoZW4g d3JhcCBpdCBpbiBhbiBBVkhXRGV2aWNlQ29udGV4dCB1c2luZworKyAqIGF2X2h3ZGV2aWNlX2N0 eF9hbGxvYygpL2F2X2h3ZGV2aWNlX2N0eF9pbml0KCkuCisrICoKKysgKiBUaGUgcmV0dXJuZWQg Y29udGV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCByZWFkeSBmb3IgdXNlLCB0aGUgY2Fs bGVyCisrICogc2hvdWxkIG5vdCBjYWxsIGF2X2h3ZGV2aWNlX2N0eF9pbml0KCkgb24gaXQuIFRo ZSB1c2VyX29wYXF1ZS9mcmVlIGZpZWxkcyBvZgorKyAqIHRoZSBjcmVhdGVkIEFWSFdEZXZpY2VD b250ZXh0IGFyZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZQorKyAqIHRv dWNoZWQgYnkgdGhlIGNhbGxlci4KKysgKgorKyAqIEBwYXJhbSBkZXZpY2VfY3R4IE9uIHN1Y2Nl c3MsIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGRldmljZSBjb250ZXh0CisrICog ICAgICAgICAgICAgICAgICAgd2lsbCBiZSB3cml0dGVuIGhlcmUuIFRoZSByZWZlcmVuY2UgaXMg b3duZWQgYnkgdGhlIGNhbGxlcgorKyAqICAgICAgICAgICAgICAgICAgIGFuZCBtdXN0IGJlIHJl bGVhc2VkIHdpdGggYXZfYnVmZmVyX3VucmVmKCkgd2hlbiBubyBsb25nZXIKKysgKiAgICAgICAg ICAgICAgICAgICBuZWVkZWQuIE9uIGZhaWx1cmUsIE5VTEwgd2lsbCBiZSB3cml0dGVuIHRvIHRo aXMgcG9pbnRlci4KKysgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZGV2aWNlIHRvIGNy ZWF0ZS4KKysgKiBAcGFyYW0gZGV2aWNlIEEgdHlwZS1zcGVjaWZpYyBzdHJpbmcgaWRlbnRpZnlp bmcgdGhlIGRldmljZSB0byBvcGVuLgorKyAqIEBwYXJhbSBvcHRzIEEgZGljdGlvbmFyeSBvZiBh ZGRpdGlvbmFsICh0eXBlLXNwZWNpZmljKSBvcHRpb25zIHRvIHVzZSBpbgorKyAqICAgICAgICAg ICAgIG9wZW5pbmcgdGhlIGRldmljZS4gVGhlIGRpY3Rpb25hcnkgcmVtYWlucyBvd25lZCBieSB0 aGUgY2FsbGVyLgorKyAqIEBwYXJhbSBmbGFncyBjdXJyZW50bHkgdW51c2VkCisrICoKKysgKiBA cmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4K KysgKi8KKytpbnQgYXZfaHdkZXZpY2VfY3R4X2NyZWF0ZShBVkJ1ZmZlclJlZiAqKmRldmljZV9j dHgsIGVudW0gQVZIV0RldmljZVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpkZXZpY2UsIEFWRGljdGlvbmFyeSAqb3B0cywgaW50IGZsYWdzKTsKKysK KysvKioKKysgKiBDcmVhdGUgYSBuZXcgZGV2aWNlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBmcm9t IGFuIGV4aXN0aW5nIGRldmljZS4KKysgKgorKyAqIElmIHRoZSBzb3VyY2UgZGV2aWNlIGlzIGEg ZGV2aWNlIG9mIHRoZSB0YXJnZXQgdHlwZSBvciB3YXMgb3JpZ2luYWxseQorKyAqIGRlcml2ZWQg ZnJvbSBzdWNoIGEgZGV2aWNlIChwb3NzaWJseSB0aHJvdWdoIG9uZSBvciBtb3JlIGludGVybWVk aWF0ZQorKyAqIGRldmljZXMgb2Ygb3RoZXIgdHlwZXMpLCB0aGVuIHRoaXMgd2lsbCByZXR1cm4g YSByZWZlcmVuY2UgdG8gdGhlCisrICogZXhpc3RpbmcgZGV2aWNlIG9mIHRoZSBzYW1lIHR5cGUg YXMgaXMgcmVxdWVzdGVkLgorKyAqCisrICogT3RoZXJ3aXNlLCBpdCB3aWxsIGF0dGVtcHQgdG8g ZGVyaXZlIGEgbmV3IGRldmljZSBmcm9tIHRoZSBnaXZlbiBzb3VyY2UKKysgKiBkZXZpY2UuICBJ ZiBkaXJlY3QgZGVyaXZhdGlvbiB0byB0aGUgbmV3IHR5cGUgaXMgbm90IGltcGxlbWVudGVkLCBp dCB3aWxsCisrICogYXR0ZW1wdCB0aGUgc2FtZSBkZXJpdmF0aW9uIGZyb20gZWFjaCBhbmNlc3Rv ciBvZiB0aGUgc291cmNlIGRldmljZSBpbgorKyAqIHR1cm4gbG9va2luZyBmb3IgYW4gaW1wbGVt ZW50ZWQgZGVyaXZhdGlvbiBtZXRob2QuCisrICoKKysgKiBAcGFyYW0gZHN0X2N0eCBPbiBzdWNj ZXNzLCBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHktY3JlYXRlZAorKyAqICAgICAgICAgICAgICAg IEFWSFdEZXZpY2VDb250ZXh0LgorKyAqIEBwYXJhbSB0eXBlICAgIFRoZSB0eXBlIG9mIHRoZSBu ZXcgZGV2aWNlIHRvIGNyZWF0ZS4KKysgKiBAcGFyYW0gc3JjX2N0eCBBIHJlZmVyZW5jZSB0byBh biBleGlzdGluZyBBVkhXRGV2aWNlQ29udGV4dCB3aGljaCB3aWxsIGJlCisrICogICAgICAgICAg ICAgICAgdXNlZCB0byBjcmVhdGUgdGhlIG5ldyBkZXZpY2UuCisrICogQHBhcmFtIGZsYWdzICAg Q3VycmVudGx5IHVudXNlZDsgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorKyAqIEByZXR1cm4gICAg ICAgIFplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4K KysgKi8KKytpbnQgYXZfaHdkZXZpY2VfY3R4X2NyZWF0ZV9kZXJpdmVkKEFWQnVmZmVyUmVmICoq ZHN0X2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZIV0Rl dmljZVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQnVm ZmVyUmVmICpzcmNfY3R4LCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIENyZWF0ZSBhIG5ldyBk ZXZpY2Ugb2YgdGhlIHNwZWNpZmllZCB0eXBlIGZyb20gYW4gZXhpc3RpbmcgZGV2aWNlLgorKyAq CisrICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBhY3Rpb24gYXMgYXZfaHdkZXZp Y2VfY3R4X2NyZWF0ZV9kZXJpdmVkLAorKyAqIGhvd2V2ZXIsIGl0IGlzIGFibGUgdG8gc2V0IG9w dGlvbnMgZm9yIHRoZSBuZXcgZGV2aWNlIHRvIGJlIGRlcml2ZWQuCisrICoKKysgKiBAcGFyYW0g ZHN0X2N0eCBPbiBzdWNjZXNzLCBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHktY3JlYXRlZAorKyAq ICAgICAgICAgICAgICAgIEFWSFdEZXZpY2VDb250ZXh0LgorKyAqIEBwYXJhbSB0eXBlICAgIFRo ZSB0eXBlIG9mIHRoZSBuZXcgZGV2aWNlIHRvIGNyZWF0ZS4KKysgKiBAcGFyYW0gc3JjX2N0eCBB IHJlZmVyZW5jZSB0byBhbiBleGlzdGluZyBBVkhXRGV2aWNlQ29udGV4dCB3aGljaCB3aWxsIGJl CisrICogICAgICAgICAgICAgICAgdXNlZCB0byBjcmVhdGUgdGhlIG5ldyBkZXZpY2UuCisrICog QHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIG5ldyBkZXZpY2UgdG8gY3JlYXRlLCBzYW1l IGZvcm1hdCBhcyBpbgorKyAqICAgICAgICAgICAgICAgIGF2X2h3ZGV2aWNlX2N0eF9jcmVhdGUu CisrICogQHBhcmFtIGZsYWdzICAgQ3VycmVudGx5IHVudXNlZDsgc2hvdWxkIGJlIHNldCB0byB6 ZXJvLgorKyAqIEByZXR1cm4gICAgICAgIFplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVS Uk9SIGNvZGUgb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZfaHdkZXZpY2VfY3R4X2NyZWF0ZV9k ZXJpdmVkX29wdHMoQVZCdWZmZXJSZWYgKipkc3RfY3R4LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIEFWSFdEZXZpY2VUeXBlIHR5cGUsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQnVmZmVyUmVmICpzcmNfY3R4LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkRpY3Rpb25hcnkgKm9wdGlv bnMsIGludCBmbGFncyk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZIV0ZyYW1lc0NvbnRl eHQgdGllZCB0byBhIGdpdmVuIGRldmljZSBjb250ZXh0LgorKyAqCisrICogQHBhcmFtIGRldmlj ZV9jdHggYSByZWZlcmVuY2UgdG8gYSBBVkhXRGV2aWNlQ29udGV4dC4gVGhpcyBmdW5jdGlvbiB3 aWxsIG1ha2UKKysgKiAgICAgICAgICAgICAgICAgICBhIG5ldyByZWZlcmVuY2UgZm9yIGludGVy bmFsIHVzZSwgdGhlIG9uZSBwYXNzZWQgdG8gdGhlCisrICogICAgICAgICAgICAgICAgICAgZnVu Y3Rpb24gcmVtYWlucyBvd25lZCBieSB0aGUgY2FsbGVyLgorKyAqIEByZXR1cm4gYSByZWZlcmVu Y2UgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgQVZIV0ZyYW1lc0NvbnRleHQgb24gc3VjY2VzcyBvciBO VUxMCisrICogICAgICAgICBvbiBmYWlsdXJlLgorKyAqLworK0FWQnVmZmVyUmVmICphdl9od2Zy YW1lX2N0eF9hbGxvYyhBVkJ1ZmZlclJlZiAqZGV2aWNlX2N0eCk7CisrCisrLyoqCisrICogRmlu YWxpemUgdGhlIGNvbnRleHQgYmVmb3JlIHVzZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxl ZCBhZnRlciB0aGUKKysgKiBjb250ZXh0IGlzIGZpbGxlZCB3aXRoIGFsbCB0aGUgcmVxdWlyZWQg aW5mb3JtYXRpb24gYW5kIGJlZm9yZSBpdCBpcyBhdHRhY2hlZAorKyAqIHRvIGFueSBmcmFtZXMu CisrICoKKysgKiBAcGFyYW0gcmVmIGEgcmVmZXJlbmNlIHRvIHRoZSBBVkhXRnJhbWVzQ29udGV4 dAorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBm YWlsdXJlCisrICovCisraW50IGF2X2h3ZnJhbWVfY3R4X2luaXQoQVZCdWZmZXJSZWYgKnJlZik7 CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBuZXcgZnJhbWUgYXR0YWNoZWQgdG8gdGhlIGdpdmVu IEFWSFdGcmFtZXNDb250ZXh0LgorKyAqCisrICogQHBhcmFtIGh3ZnJhbWVfY3R4IGEgcmVmZXJl bmNlIHRvIGFuIEFWSFdGcmFtZXNDb250ZXh0CisrICogQHBhcmFtIGZyYW1lIGFuIGVtcHR5IChm cmVzaGx5IGFsbG9jYXRlZCBvciB1bnJlZmZlZCkgZnJhbWUgdG8gYmUgZmlsbGVkIHdpdGgKKysg KiAgICAgICAgICAgICAgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMuCisrICogQHBhcmFtIGZsYWdz IGN1cnJlbnRseSB1bnVzZWQsIHNob3VsZCBiZSBzZXQgdG8gemVybworKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlCisrICovCisraW50 IGF2X2h3ZnJhbWVfZ2V0X2J1ZmZlcihBVkJ1ZmZlclJlZiAqaHdmcmFtZV9jdHgsIEFWRnJhbWUg KmZyYW1lLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIENvcHkgZGF0YSB0byBvciBmcm9tIGEg aHcgc3VyZmFjZS4gQXQgbGVhc3Qgb25lIG9mIGRzdC9zcmMgbXVzdCBoYXZlIGFuCisrICogQVZI V0ZyYW1lc0NvbnRleHQgYXR0YWNoZWQuCisrICoKKysgKiBJZiBzcmMgaGFzIGFuIEFWSFdGcmFt ZXNDb250ZXh0IGF0dGFjaGVkLCB0aGVuIHRoZSBmb3JtYXQgb2YgZHN0IChpZiBzZXQpCisrICog bXVzdCB1c2Ugb25lIG9mIHRoZSBmb3JtYXRzIHJldHVybmVkIGJ5IGF2X2h3ZnJhbWVfdHJhbnNm ZXJfZ2V0X2Zvcm1hdHMoc3JjLAorKyAqIEFWX0hXRlJBTUVfVFJBTlNGRVJfRElSRUNUSU9OX0ZS T00pLgorKyAqIElmIGRzdCBoYXMgYW4gQVZIV0ZyYW1lc0NvbnRleHQgYXR0YWNoZWQsIHRoZW4g dGhlIGZvcm1hdCBvZiBzcmMgbXVzdCB1c2Ugb25lCisrICogb2YgdGhlIGZvcm1hdHMgcmV0dXJu ZWQgYnkgYXZfaHdmcmFtZV90cmFuc2Zlcl9nZXRfZm9ybWF0cyhkc3QsCisrICogQVZfSFdGUkFN RV9UUkFOU0ZFUl9ESVJFQ1RJT05fVE8pCisrICoKKysgKiBkc3QgbWF5IGJlICJjbGVhbiIgKGku ZS4gd2l0aCBkYXRhL2J1ZiBwb2ludGVycyB1bnNldCksIGluIHdoaWNoIGNhc2UgdGhlCisrICog ZGF0YSBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gdXNpbmcgYXZf ZnJhbWVfZ2V0X2J1ZmZlcigpLgorKyAqIElmIGRzdC0+Zm9ybWF0IGlzIHNldCwgdGhlbiB0aGlz IGZvcm1hdCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSAod2hlbgorKyAqIGRzdC0+Zm9ybWF0IGlz IEFWX1BJWF9GTVRfTk9ORSkgdGhlIGZpcnN0IGFjY2VwdGFibGUgZm9ybWF0IHdpbGwgYmUgY2hv c2VuLgorKyAqCisrICogVGhlIHR3byBmcmFtZXMgbXVzdCBoYXZlIG1hdGNoaW5nIGFsbG9jYXRl ZCBkaW1lbnNpb25zIChpLmUuIGVxdWFsIHRvCisrICogQVZIV0ZyYW1lc0NvbnRleHQud2lkdGgv aGVpZ2h0KSwgc2luY2Ugbm90IGFsbCBkZXZpY2UgdHlwZXMgc3VwcG9ydAorKyAqIHRyYW5zZmVy cmluZyBhIHN1Yi1yZWN0YW5nbGUgb2YgdGhlIHdob2xlIHN1cmZhY2UuIFRoZSBkaXNwbGF5IGRp bWVuc2lvbnMKKysgKiAoaS5lLiBBVkZyYW1lLndpZHRoL2hlaWdodCkgbWF5IGJlIHNtYWxsZXIg dGhhbiB0aGUgYWxsb2NhdGVkIGRpbWVuc2lvbnMsIGJ1dAorKyAqIGFsc28gaGF2ZSB0byBiZSBl cXVhbCBmb3IgYm90aCBmcmFtZXMuIFdoZW4gdGhlIGRpc3BsYXkgZGltZW5zaW9ucyBhcmUKKysg KiBzbWFsbGVyIHRoYW4gdGhlIGFsbG9jYXRlZCBkaW1lbnNpb25zLCB0aGUgY29udGVudCBvZiB0 aGUgcGFkZGluZyBpbiB0aGUKKysgKiBkZXN0aW5hdGlvbiBmcmFtZSBpcyB1bnNwZWNpZmllZC4K KysgKgorKyAqIEBwYXJhbSBkc3QgdGhlIGRlc3RpbmF0aW9uIGZyYW1lLiBkc3QgaXMgbm90IHRv dWNoZWQgb24gZmFpbHVyZS4KKysgKiBAcGFyYW0gc3JjIHRoZSBzb3VyY2UgZnJhbWUuCisrICog QHBhcmFtIGZsYWdzIGN1cnJlbnRseSB1bnVzZWQsIHNob3VsZCBiZSBzZXQgdG8gemVybworKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgZXJyb3IgY29kZSBvbiBm YWlsdXJlLgorKyAqLworK2ludCBhdl9od2ZyYW1lX3RyYW5zZmVyX2RhdGEoQVZGcmFtZSAqZHN0 LCBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncyk7CisrCisrZW51bSBBVkhXRnJhbWVUcmFu c2ZlckRpcmVjdGlvbiB7CisrICAgIC8qKgorKyAgICAgKiBUcmFuc2ZlciB0aGUgZGF0YSBmcm9t IHRoZSBxdWVyaWVkIGh3IGZyYW1lLgorKyAgICAgKi8KKysgICAgQVZfSFdGUkFNRV9UUkFOU0ZF Ul9ESVJFQ1RJT05fRlJPTSwKKysKKysgICAgLyoqCisrICAgICAqIFRyYW5zZmVyIHRoZSBkYXRh IHRvIHRoZSBxdWVyaWVkIGh3IGZyYW1lLgorKyAgICAgKi8KKysgICAgQVZfSFdGUkFNRV9UUkFO U0ZFUl9ESVJFQ1RJT05fVE8sCisrfTsKKysKKysvKioKKysgKiBHZXQgYSBsaXN0IG9mIHBvc3Np YmxlIHNvdXJjZSBvciB0YXJnZXQgZm9ybWF0cyB1c2FibGUgaW4KKysgKiBhdl9od2ZyYW1lX3Ry YW5zZmVyX2RhdGEoKS4KKysgKgorKyAqIEBwYXJhbSBod2ZyYW1lX2N0eCB0aGUgZnJhbWUgY29u dGV4dCB0byBvYnRhaW4gdGhlIGluZm9ybWF0aW9uIGZvcgorKyAqIEBwYXJhbSBkaXIgdGhlIGRp cmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIKKysgKiBAcGFyYW0gZm9ybWF0cyB0aGUgcG9pbnRlciB0 byB0aGUgb3V0cHV0IGZvcm1hdCBsaXN0IHdpbGwgYmUgd3JpdHRlbiBoZXJlLgorKyAqICAgICAg ICAgICAgICAgIFRoZSBsaXN0IGlzIHRlcm1pbmF0ZWQgd2l0aCBBVl9QSVhfRk1UX05PTkUgYW5k IG11c3QgYmUgZnJlZWQKKysgKiAgICAgICAgICAgICAgICBieSB0aGUgY2FsbGVyIHdoZW4gbm8g bG9uZ2VyIG5lZWRlZCB1c2luZyBhdl9mcmVlKCkuCisrICogICAgICAgICAgICAgICAgSWYgdGhp cyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgdGhlIGZvcm1hdCBsaXN0IHdpbGwKKysg KiAgICAgICAgICAgICAgICBoYXZlIGF0IGxlYXN0IG9uZSBpdGVtIChub3QgY291bnRpbmcgdGhl IHRlcm1pbmF0b3IpLgorKyAqICAgICAgICAgICAgICAgIE9uIGZhaWx1cmUsIHRoZSBjb250ZW50 cyBvZiB0aGlzIHBvaW50ZXIgYXJlIHVuc3BlY2lmaWVkLgorKyAqIEBwYXJhbSBmbGFncyBjdXJy ZW50bHkgdW51c2VkLCBzaG91bGQgYmUgc2V0IHRvIHplcm8KKysgKiBAcmV0dXJuIDAgb24gc3Vj Y2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZf aHdmcmFtZV90cmFuc2Zlcl9nZXRfZm9ybWF0cyhBVkJ1ZmZlclJlZiAqaHdmcmFtZV9jdHgsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkhXRnJhbWVUcmFuc2Zl ckRpcmVjdGlvbiBkaXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVlBpeGVsRm9ybWF0ICoqZm9ybWF0cywgaW50IGZsYWdzKTsKKysKKysKKysvKioKKysgKiBU aGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIGNvbnN0cmFpbnRzIG9uIGhhcmR3YXJlIGZyYW1lcyBh dHRhY2hlZCB0bworKyAqIGEgZ2l2ZW4gZGV2aWNlIHdpdGggYSBoYXJkd2FyZS1zcGVjaWZpYyBj b25maWd1cmF0aW9uLiAgVGhpcyBpcyByZXR1cm5lZAorKyAqIGJ5IGF2X2h3ZGV2aWNlX2dldF9o d2ZyYW1lX2NvbnN0cmFpbnRzKCkgYW5kIG11c3QgYmUgZnJlZWQgYnkKKysgKiBhdl9od2ZyYW1l X2NvbnN0cmFpbnRzX2ZyZWUoKSBhZnRlciB1c2UuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZI V0ZyYW1lc0NvbnN0cmFpbnRzIHsKKysgICAgLyoqCisrICAgICAqIEEgbGlzdCBvZiBwb3NzaWJs ZSB2YWx1ZXMgZm9yIGZvcm1hdCBpbiB0aGUgaHdfZnJhbWVzX2N0eCwKKysgICAgICogdGVybWlu YXRlZCBieSBBVl9QSVhfRk1UX05PTkUuICBUaGlzIG1lbWJlciB3aWxsIGFsd2F5cyBiZSBmaWxs ZWQuCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKnZhbGlkX2h3X2Zvcm1hdHM7 CisrCisrICAgIC8qKgorKyAgICAgKiBBIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBzd19m b3JtYXQgaW4gdGhlIGh3X2ZyYW1lc19jdHgsCisrICAgICAqIHRlcm1pbmF0ZWQgYnkgQVZfUElY X0ZNVF9OT05FLiAgQ2FuIGJlIE5VTEwgaWYgdGhpcyBpbmZvcm1hdGlvbiBpcworKyAgICAgKiBu b3Qga25vd24uCisrICAgICAqLworKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKnZhbGlkX3N3X2Zv cm1hdHM7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgbWluaW11bSBzaXplIG9mIGZyYW1lcyBp biB0aGlzIGh3X2ZyYW1lc19jdHguCisrICAgICAqIChaZXJvIGlmIG5vdCBrbm93bi4pCisrICAg ICAqLworKyAgICBpbnQgbWluX3dpZHRoOworKyAgICBpbnQgbWluX2hlaWdodDsKKysKKysgICAg LyoqCisrICAgICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgZnJhbWVzIGluIHRoaXMgaHdfZnJhbWVz X2N0eC4KKysgICAgICogKElOVF9NQVggaWYgbm90IGtub3duIC8gbm8gbGltaXQuKQorKyAgICAg Ki8KKysgICAgaW50IG1heF93aWR0aDsKKysgICAgaW50IG1heF9oZWlnaHQ7CisrfSBBVkhXRnJh bWVzQ29uc3RyYWludHM7CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBIVy1zcGVjaWZpYyBjb25m aWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBnaXZlbiBIVyBkZXZpY2UuCisrICogQWZ0ZXIgdXNl LCB0aGUgdXNlciBtdXN0IGZyZWUgYWxsIG1lbWJlcnMgYXMgcmVxdWlyZWQgYnkgdGhlIHNwZWNp ZmljCisrICogaGFyZHdhcmUgc3RydWN0dXJlIGJlaW5nIHVzZWQsIHRoZW4gZnJlZSB0aGUgc3Ry dWN0dXJlIGl0c2VsZiB3aXRoCisrICogYXZfZnJlZSgpLgorKyAqCisrICogQHBhcmFtIGRldmlj ZV9jdHggYSByZWZlcmVuY2UgdG8gdGhlIGFzc29jaWF0ZWQgQVZIV0RldmljZUNvbnRleHQuCisr ICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHN0 cnVjdHVyZSBvbgorKyAqICAgICAgICAgc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuCisrICov Cisrdm9pZCAqYXZfaHdkZXZpY2VfaHdjb25maWdfYWxsb2MoQVZCdWZmZXJSZWYgKmRldmljZV9j dHgpOworKworKy8qKgorKyAqIEdldCB0aGUgY29uc3RyYWludHMgb24gSFcgZnJhbWVzIGdpdmVu IGEgZGV2aWNlIGFuZCB0aGUgSFctc3BlY2lmaWMKKysgKiBjb25maWd1cmF0aW9uIHRvIGJlIHVz ZWQgd2l0aCB0aGF0IGRldmljZS4gIElmIG5vIEhXLXNwZWNpZmljCisrICogY29uZmlndXJhdGlv biBpcyBwcm92aWRlZCwgcmV0dXJucyB0aGUgbWF4aW11bSBwb3NzaWJsZSBjYXBhYmlsaXRpZXMK KysgKiBvZiB0aGUgZGV2aWNlLgorKyAqCisrICogQHBhcmFtIHJlZiBhIHJlZmVyZW5jZSB0byB0 aGUgYXNzb2NpYXRlZCBBVkhXRGV2aWNlQ29udGV4dC4KKysgKiBAcGFyYW0gaHdjb25maWcgYSBm aWxsZWQgSFctc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUsIG9yIE5VTEwKKysgKiAg ICAgICAgdG8gcmV0dXJuIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGNhcGFiaWxpdGllcyBvZiB0aGUg ZGV2aWNlLgorKyAqIEByZXR1cm4gQVZIV0ZyYW1lc0NvbnN0cmFpbnRzIHN0cnVjdHVyZSBkZXNj cmliaW5nIHRoZSBjb25zdHJhaW50cworKyAqICAgICAgICAgb24gdGhlIGRldmljZSwgb3IgTlVM TCBpZiBub3QgYXZhaWxhYmxlLgorKyAqLworK0FWSFdGcmFtZXNDb25zdHJhaW50cyAqYXZfaHdk ZXZpY2VfZ2V0X2h3ZnJhbWVfY29uc3RyYWludHMoQVZCdWZmZXJSZWYgKnJlZiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHZvaWQgKmh3Y29uZmlnKTsKKysKKysvKioKKysgKiBGcmVlIGFuIEFWSFdGcmFtZUNvbnN0cmFp bnRzIHN0cnVjdHVyZS4KKysgKgorKyAqIEBwYXJhbSBjb25zdHJhaW50cyBUaGUgKGZpbGxlZCBv ciB1bmZpbGxlZCkgQVZIV0ZyYW1lQ29uc3RyYWludHMgc3RydWN0dXJlLgorKyAqLworK3ZvaWQg YXZfaHdmcmFtZV9jb25zdHJhaW50c19mcmVlKEFWSFdGcmFtZXNDb25zdHJhaW50cyAqKmNvbnN0 cmFpbnRzKTsKKysKKysKKysvKioKKysgKiBGbGFncyB0byBhcHBseSB0byBmcmFtZSBtYXBwaW5n cy4KKysgKi8KKytlbnVtIHsKKysgICAgLyoqCisrICAgICAqIFRoZSBtYXBwaW5nIG11c3QgYmUg cmVhZGFibGUuCisrICAgICAqLworKyAgICBBVl9IV0ZSQU1FX01BUF9SRUFEICAgICAgPSAxIDw8 IDAsCisrICAgIC8qKgorKyAgICAgKiBUaGUgbWFwcGluZyBtdXN0IGJlIHdyaXRlYWJsZS4KKysg ICAgICovCisrICAgIEFWX0hXRlJBTUVfTUFQX1dSSVRFICAgICA9IDEgPDwgMSwKKysgICAgLyoq CisrICAgICAqIFRoZSBtYXBwZWQgZnJhbWUgd2lsbCBiZSBvdmVyd3JpdHRlbiBjb21wbGV0ZWx5 IGluIHN1YnNlcXVlbnQKKysgICAgICogb3BlcmF0aW9ucywgc28gdGhlIGN1cnJlbnQgZnJhbWUg ZGF0YSBuZWVkIG5vdCBiZSBsb2FkZWQuICBBbnkgdmFsdWVzCisrICAgICAqIHdoaWNoIGFyZSBu b3Qgb3ZlcndyaXR0ZW4gYXJlIHVuc3BlY2lmaWVkLgorKyAgICAgKi8KKysgICAgQVZfSFdGUkFN RV9NQVBfT1ZFUldSSVRFID0gMSA8PCAyLAorKyAgICAvKioKKysgICAgICogVGhlIG1hcHBpbmcg bXVzdCBiZSBkaXJlY3QuICBUaGF0IGlzLCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgY29weWluZyBp bgorKyAgICAgKiB0aGUgbWFwIG9yIHVubWFwIHN0ZXBzLiAgTm90ZSB0aGF0IHBlcmZvcm1hbmNl IG9mIGRpcmVjdCBtYXBwaW5ncyBtYXkKKysgICAgICogYmUgbXVjaCBsb3dlciB0aGFuIG5vcm1h bCBtZW1vcnkuCisrICAgICAqLworKyAgICBBVl9IV0ZSQU1FX01BUF9ESVJFQ1QgICAgPSAxIDw8 IDMsCisrfTsKKysKKysvKioKKysgKiBNYXAgYSBoYXJkd2FyZSBmcmFtZS4KKysgKgorKyAqIFRo aXMgaGFzIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBwb3NzaWJsZSBlZmZlY3RzLCBkZXBlbmRpbmcg b24gdGhlIGZvcm1hdAorKyAqIGFuZCBvcmlnaW4gb2YgdGhlIHNyYyBhbmQgZHN0IGZyYW1lcy4g IE9uIGlucHV0LCBzcmMgc2hvdWxkIGJlIGEgdXNhYmxlCisrICogZnJhbWUgd2l0aCB2YWxpZCBi dWZmZXJzIGFuZCBkc3Qgc2hvdWxkIGJlIGJsYW5rICh0eXBpY2FsbHkgYXMganVzdCBjcmVhdGVk CisrICogYnkgYXZfZnJhbWVfYWxsb2MoKSkuICBzcmMgc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRl ZCBod2ZyYW1lIGNvbnRleHQsIGFuZAorKyAqIGRzdCBtYXkgb3B0aW9uYWxseSBoYXZlIGEgZm9y bWF0IGFuZCBhc3NvY2lhdGVkIGh3ZnJhbWUgY29udGV4dC4KKysgKgorKyAqIElmIHNyYyB3YXMg Y3JlYXRlZCBieSBtYXBwaW5nIGEgZnJhbWUgZnJvbSB0aGUgaHdmcmFtZSBjb250ZXh0IG9mIGRz dCwKKysgKiB0aGVuIHRoaXMgZnVuY3Rpb24gdW5kb2VzIHRoZSBtYXBwaW5nIC0gZHN0IGlzIHJl cGxhY2VkIGJ5IGEgcmVmZXJlbmNlIHRvCisrICogdGhlIGZyYW1lIHRoYXQgc3JjIHdhcyBvcmln aW5hbGx5IG1hcHBlZCBmcm9tLgorKyAqCisrICogSWYgYm90aCBzcmMgYW5kIGRzdCBoYXZlIGFu IGFzc29jaWF0ZWQgaHdmcmFtZSBjb250ZXh0LCB0aGVuIHRoaXMgZnVuY3Rpb24KKysgKiBhdHRl bXB0cyB0byBtYXAgdGhlIHNyYyBmcmFtZSBmcm9tIGl0cyBoYXJkd2FyZSBjb250ZXh0IHRvIHRo YXQgb2YgZHN0IGFuZAorKyAqIHRoZW4gZmlsbCBkc3Qgd2l0aCBhcHByb3ByaWF0ZSBkYXRhIHRv IGJlIHVzYWJsZSB0aGVyZS4gIFRoaXMgd2lsbCBvbmx5IGJlCisrICogcG9zc2libGUgaWYgdGhl IGh3ZnJhbWUgY29udGV4dHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlcyBhcmUgY29tcGF0aWJsZSAt CisrICogZ2l2ZW4gY29tcGF0aWJsZSBkZXZpY2VzLCBhdl9od2ZyYW1lX2N0eF9jcmVhdGVfZGVy aXZlZCgpIGNhbiBiZSB1c2VkIHRvCisrICogY3JlYXRlIGEgaHdmcmFtZSBjb250ZXh0IGZvciBk c3QgaW4gd2hpY2ggbWFwcGluZyBzaG91bGQgYmUgcG9zc2libGUuCisrICoKKysgKiBJZiBzcmMg aGFzIGEgaHdmcmFtZSBjb250ZXh0IGJ1dCBkc3QgZG9lcyBub3QsIHRoZW4gdGhlIHNyYyBmcmFt ZSBpcworKyAqIG1hcHBlZCB0byBub3JtYWwgbWVtb3J5IGFuZCBzaG91bGQgdGhlcmVhZnRlciBi ZSB1c2FibGUgYXMgYSBub3JtYWwgZnJhbWUuCisrICogSWYgdGhlIGZvcm1hdCBpcyBzZXQgb24g ZHN0LCB0aGVuIHRoZSBtYXBwaW5nIHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgZHN0CisrICogd2l0 aCB0aGF0IGZvcm1hdCBhbmQgZmFpbCBpZiBpdCBpcyBub3QgcG9zc2libGUuICBJZiBmb3JtYXQg aXMgdW5zZXQgKGlzCisrICogQVZfUElYX0ZNVF9OT05FKSB0aGVuIGRzdCB3aWxsIGJlIG1hcHBl ZCB3aXRoIHdoYXRldmVyIHRoZSBtb3N0IGFwcHJvcHJpYXRlCisrICogZm9ybWF0IHRvIHVzZSBp cyAocHJvYmFibHkgdGhlIHN3X2Zvcm1hdCBvZiB0aGUgc3JjIGh3ZnJhbWUgY29udGV4dCkuCisr ICoKKysgKiBBIHJldHVybiB2YWx1ZSBvZiBBVkVSUk9SKEVOT1NZUykgaW5kaWNhdGVzIHRoYXQg dGhlIG1hcHBpbmcgaXMgbm90CisrICogcG9zc2libGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRz IGFuZCBod2ZyYW1lIHNldHVwLCB3aGlsZSBvdGhlciByZXR1cm4KKysgKiB2YWx1ZXMgaW5kaWNh dGUgdGhhdCBpdCBmYWlsZWQgc29tZWhvdy4KKysgKgorKyAqIE9uIGZhaWx1cmUsIHRoZSBkZXN0 aW5hdGlvbiBmcmFtZSB3aWxsIGJlIGxlZnQgYmxhbmssIGV4Y2VwdCBmb3IgdGhlCisrICogaHdf ZnJhbWVzX2N0eC9mb3JtYXQgZmllbGRzIHRoZXkgbWF5IGhhdmUgYmVlbiBzZXQgYnkgdGhlIGNh bGxlciAtIHRob3NlIHdpbGwKKysgKiBiZSBwcmVzZXJ2ZWQgYXMgdGhleSB3ZXJlLgorKyAqCisr ICogQHBhcmFtIGRzdCBEZXN0aW5hdGlvbiBmcmFtZSwgdG8gY29udGFpbiB0aGUgbWFwcGluZy4K KysgKiBAcGFyYW0gc3JjIFNvdXJjZSBmcmFtZSwgdG8gYmUgbWFwcGVkLgorKyAqIEBwYXJhbSBm bGFncyBTb21lIGNvbWJpbmF0aW9uIG9mIEFWX0hXRlJBTUVfTUFQXyogZmxhZ3MuCisrICogQHJl dHVybiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLgor KyAqLworK2ludCBhdl9od2ZyYW1lX21hcChBVkZyYW1lICpkc3QsIGNvbnN0IEFWRnJhbWUgKnNy YywgaW50IGZsYWdzKTsKKysKKysKKysvKioKKysgKiBDcmVhdGUgYW5kIGluaXRpYWxpc2UgYW4g QVZIV0ZyYW1lc0NvbnRleHQgYXMgYSBtYXBwaW5nIG9mIGFub3RoZXIgZXhpc3RpbmcKKysgKiBB VkhXRnJhbWVzQ29udGV4dCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuCisrICoKKysgKiBhdl9od2Zy YW1lX2N0eF9pbml0KCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcy4KKysgKgorKyAq IEBwYXJhbSBkZXJpdmVkX2ZyYW1lX2N0eCAgT24gc3VjY2VzcywgYSByZWZlcmVuY2UgdG8gdGhl IG5ld2x5IGNyZWF0ZWQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWSFdGcmFtZXND b250ZXh0LgorKyAqIEBwYXJhbSBmb3JtYXQgICAgICAgICAgICAgVGhlIEFWUGl4ZWxGb3JtYXQg Zm9yIHRoZSBkZXJpdmVkIGNvbnRleHQuCisrICogQHBhcmFtIGRlcml2ZWRfZGV2aWNlX2N0eCBB IHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHRvIGNyZWF0ZSB0aGUgbmV3CisrICogICAgICAgICAg ICAgICAgICAgICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCBvbi4KKysgKiBAcGFyYW0gc291cmNl X2ZyYW1lX2N0eCAgIEEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIEFWSFdGcmFtZXNDb250ZXh0 CisrICogICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGJlIG1hcHBlZCB0byB0 aGUgZGVyaXZlZCBjb250ZXh0LgorKyAqIEBwYXJhbSBmbGFncyAgU29tZSBjb21iaW5hdGlvbiBv ZiBBVl9IV0ZSQU1FX01BUF8qIGZsYWdzLCBkZWZpbmluZyB0aGUKKysgKiAgICAgICAgICAgICAg IG1hcHBpbmcgcGFyYW1ldGVycyB0byBhcHBseSB0byBmcmFtZXMgd2hpY2ggYXJlIGFsbG9jYXRl ZAorKyAqICAgICAgICAgICAgICAgaW4gdGhlIGRlcml2ZWQgZGV2aWNlLgorKyAqIEByZXR1cm4g ICAgICAgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4K KysgKi8KKytpbnQgYXZfaHdmcmFtZV9jdHhfY3JlYXRlX2Rlcml2ZWQoQVZCdWZmZXJSZWYgKipk ZXJpdmVkX2ZyYW1lX2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVlBpeGVsRm9ybWF0IGZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZCdWZmZXJSZWYgKmRlcml2ZWRfZGV2aWNlX2N0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKnNvdXJjZV9mcmFtZV9jdHgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisrCisrI2VuZGlmIC8qIEFWVVRJ TF9IV0NPTlRFWFRfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2ltZ3V0aWxzLmguZmZtcGVnOSBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJhdnV0aWwvaW1ndXRpbHMuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9pbWd1dGlscy5oLmZmbXBlZzkJMjAy Ni0wOS0wNyAxMjoyMzo0Ny42NzczMTAyMTYgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvaW1ndXRpbHMu aAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzIxNTU1NCArMDIwMAorQEAgLTAsMCArMSwzNzcgQEAK KysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisr ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V CisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysg KgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLwor KworKyNpZm5kZWYgQVZVVElMX0lNR1VUSUxTX0gKKysjZGVmaW5lIEFWVVRJTF9JTUdVVElMU19I CisrCisrLyoqCisrICogQGZpbGUKKysgKiBtaXNjIGltYWdlIHV0aWxpdGllcworKyAqCisrICog QGFkZHRvZ3JvdXAgbGF2dV9waWN0dXJlCisrICogQHsKKysgKi8KKysKKysjaW5jbHVkZSA8c3Rk ZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlICJwaXhkZXNjLmgiCisrI2lu Y2x1ZGUgInBpeGZtdC5oIgorKyNpbmNsdWRlICJyYXRpb25hbC5oIgorKworKy8qKgorKyAqIENv bXB1dGUgdGhlIG1heCBwaXhlbCBzdGVwIGZvciBlYWNoIHBsYW5lIG9mIGFuIGltYWdlIHdpdGgg YQorKyAqIGZvcm1hdCBkZXNjcmliZWQgYnkgcGl4ZGVzYy4KKysgKgorKyAqIFRoZSBwaXhlbCBz dGVwIGlzIHRoZSBkaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBmaXJzdCBieXRlIG9mCisr ICogdGhlIGdyb3VwIG9mIGJ5dGVzIHdoaWNoIGRlc2NyaWJlIGEgcGl4ZWwgY29tcG9uZW50IGFu ZCB0aGUgZmlyc3QKKysgKiBieXRlIG9mIHRoZSBzdWNjZXNzaXZlIGdyb3VwIGluIHRoZSBzYW1l IHBsYW5lIGZvciB0aGUgc2FtZQorKyAqIGNvbXBvbmVudC4KKysgKgorKyAqIEBwYXJhbSBtYXhf cGl4c3RlcHMgYW4gYXJyYXkgd2hpY2ggaXMgZmlsbGVkIHdpdGggdGhlIG1heCBwaXhlbCBzdGVw CisrICogZm9yIGVhY2ggcGxhbmUuIFNpbmNlIGEgcGxhbmUgbWF5IGNvbnRhaW4gZGlmZmVyZW50 IHBpeGVsCisrICogY29tcG9uZW50cywgdGhlIGNvbXB1dGVkIG1heF9waXhzdGVwc1twbGFuZV0g aXMgcmVsYXRpdmUgdG8gdGhlCisrICogY29tcG9uZW50IGluIHRoZSBwbGFuZSB3aXRoIHRoZSBt YXggcGl4ZWwgc3RlcC4KKysgKiBAcGFyYW0gbWF4X3BpeHN0ZXBfY29tcHMgYW4gYXJyYXkgd2hp Y2ggaXMgZmlsbGVkIHdpdGggdGhlIGNvbXBvbmVudAorKyAqIGZvciBlYWNoIHBsYW5lIHdoaWNo IGhhcyB0aGUgbWF4IHBpeGVsIHN0ZXAuIE1heSBiZSBOVUxMLgorKyAqIEBwYXJhbSBwaXhkZXNj IHRoZSBBVlBpeEZtdERlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSwgZGVzY3JpYmluZyBpdHMgZm9y bWF0CisrICovCisrdm9pZCBhdl9pbWFnZV9maWxsX21heF9waXhzdGVwcyhpbnQgbWF4X3BpeHN0 ZXBzWzRdLCBpbnQgbWF4X3BpeHN0ZXBfY29tcHNbNF0sCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKnBpeGRlc2MpOworKworKy8qKgor KyAqIENvbXB1dGUgdGhlIHNpemUgb2YgYW4gaW1hZ2UgbGluZSB3aXRoIGZvcm1hdCBwaXhfZm10 IGFuZCB3aWR0aAorKyAqIHdpZHRoIGZvciB0aGUgcGxhbmUgcGxhbmUuCisrICoKKysgKiBAcmV0 dXJuIHRoZSBjb21wdXRlZCBzaXplIGluIGJ5dGVzCisrICovCisraW50IGF2X2ltYWdlX2dldF9s aW5lc2l6ZShlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBpbnQgcGxhbmUp OworKworKy8qKgorKyAqIEZpbGwgcGxhbmUgbGluZXNpemVzIGZvciBhbiBpbWFnZSB3aXRoIHBp eGVsIGZvcm1hdCBwaXhfZm10IGFuZAorKyAqIHdpZHRoIHdpZHRoLgorKyAqCisrICogQHBhcmFt IGxpbmVzaXplcyBhcnJheSB0byBiZSBmaWxsZWQgd2l0aCB0aGUgbGluZXNpemUgZm9yIGVhY2gg cGxhbmUKKysgKiBAcGFyYW0gcGl4X2ZtdCB0aGUgQVZQaXhlbEZvcm1hdCBvZiB0aGUgaW1hZ2UK KysgKiBAcGFyYW0gd2lkdGggd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscworKyAqIEByZXR1 cm4gPj0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndp c2UKKysgKi8KKytpbnQgYXZfaW1hZ2VfZmlsbF9saW5lc2l6ZXMoaW50IGxpbmVzaXplc1s0XSwg ZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCk7CisrCisrLyoqCisrICogRmls bCBwbGFuZSBzaXplcyBmb3IgYW4gaW1hZ2Ugd2l0aCBwaXhlbCBmb3JtYXQgcGl4X2ZtdCBhbmQg aGVpZ2h0IGhlaWdodC4KKysgKgorKyAqIEBwYXJhbSBzaXplIHRoZSBhcnJheSB0byBiZSBmaWxs ZWQgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGltYWdlIHBsYW5lCisrICogQHBhcmFtIHBpeF9mbXQg dGhlIEFWUGl4ZWxGb3JtYXQgb2YgdGhlIGltYWdlCisrICogQHBhcmFtIGhlaWdodCBoZWlnaHQg b2YgdGhlIGltYWdlIGluIHBpeGVscworKyAqIEBwYXJhbSBsaW5lc2l6ZXMgdGhlIGFycmF5IGNv bnRhaW5pbmcgdGhlIGxpbmVzaXplIGZvciBlYWNoCisrICogICAgICAgIHBsYW5lLCBzaG91bGQg YmUgZmlsbGVkIGJ5IGF2X2ltYWdlX2ZpbGxfbGluZXNpemVzKCkKKysgKiBAcmV0dXJuID49IDAg aW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisrICoK KysgKiBAbm90ZSBUaGUgbGluZXNpemUgcGFyYW1ldGVycyBoYXZlIHRoZSB0eXBlIHB0cmRpZmZf dCBoZXJlLCB3aGlsZSB0aGV5IGFyZQorKyAqICAgICAgIGludCBmb3IgYXZfaW1hZ2VfZmlsbF9s aW5lc2l6ZXMoKS4KKysgKi8KKytpbnQgYXZfaW1hZ2VfZmlsbF9wbGFuZV9zaXplcyhzaXplX3Qg c2l6ZVs0XSwgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGxpbmVzaXplc1s0XSk7Cisr CisrLyoqCisrICogRmlsbCBwbGFuZSBkYXRhIHBvaW50ZXJzIGZvciBhbiBpbWFnZSB3aXRoIHBp eGVsIGZvcm1hdCBwaXhfZm10IGFuZAorKyAqIGhlaWdodCBoZWlnaHQuCisrICoKKysgKiBAcGFy YW0gZGF0YSBwb2ludGVycyBhcnJheSB0byBiZSBmaWxsZWQgd2l0aCB0aGUgcG9pbnRlciBmb3Ig ZWFjaCBpbWFnZSBwbGFuZQorKyAqIEBwYXJhbSBwaXhfZm10IHRoZSBBVlBpeGVsRm9ybWF0IG9m IHRoZSBpbWFnZQorKyAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhl bHMKKysgKiBAcGFyYW0gcHRyIHRoZSBwb2ludGVyIHRvIGEgYnVmZmVyIHdoaWNoIHdpbGwgY29u dGFpbiB0aGUgaW1hZ2UKKysgKiBAcGFyYW0gbGluZXNpemVzIHRoZSBhcnJheSBjb250YWluaW5n IHRoZSBsaW5lc2l6ZSBmb3IgZWFjaAorKyAqIHBsYW5lLCBzaG91bGQgYmUgZmlsbGVkIGJ5IGF2 X2ltYWdlX2ZpbGxfbGluZXNpemVzKCkKKysgKiBAcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIHJl cXVpcmVkIGZvciB0aGUgaW1hZ2UgYnVmZmVyLCBhIG5lZ2F0aXZlCisrICogZXJyb3IgY29kZSBp biBjYXNlIG9mIGZhaWx1cmUKKysgKi8KKytpbnQgYXZfaW1hZ2VfZmlsbF9wb2ludGVycyh1aW50 OF90ICpkYXRhWzRdLCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IGhlaWdodCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwdHIsIGNvbnN0IGludCBsaW5lc2l6 ZXNbNF0pOworKworKy8qKgorKyAqIEFsbG9jYXRlIGFuIGltYWdlIHdpdGggc2l6ZSB3IGFuZCBo IGFuZCBwaXhlbCBmb3JtYXQgcGl4X2ZtdCwgYW5kCisrICogZmlsbCBwb2ludGVycyBhbmQgbGlu ZXNpemVzIGFjY29yZGluZ2x5LgorKyAqIFRoZSBhbGxvY2F0ZWQgaW1hZ2UgYnVmZmVyIGhhcyB0 byBiZSBmcmVlZCBieSB1c2luZworKyAqIGF2X2ZyZWVwKCZwb2ludGVyc1swXSkuCisrICoKKysg KiBAcGFyYW0gcG9pbnRlcnMgYXJyYXkgdG8gYmUgZmlsbGVkIHdpdGggdGhlIHBvaW50ZXIgZm9y IGVhY2ggaW1hZ2UgcGxhbmUKKysgKiBAcGFyYW0gbGluZXNpemVzIHRoZSBhcnJheSBmaWxsZWQg d2l0aCB0aGUgbGluZXNpemUgZm9yIGVhY2ggcGxhbmUKKysgKiBAcGFyYW0gdyB3aWR0aCBvZiB0 aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGggaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBw aXhlbHMKKysgKiBAcGFyYW0gcGl4X2ZtdCB0aGUgQVZQaXhlbEZvcm1hdCBvZiB0aGUgaW1hZ2UK KysgKiBAcGFyYW0gYWxpZ24gdGhlIHZhbHVlIHRvIHVzZSBmb3IgYnVmZmVyIHNpemUgYWxpZ25t ZW50CisrICogQHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIGltYWdl IGJ1ZmZlciwgYSBuZWdhdGl2ZQorKyAqIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisr ICovCisraW50IGF2X2ltYWdlX2FsbG9jKHVpbnQ4X3QgKnBvaW50ZXJzWzRdLCBpbnQgbGluZXNp emVzWzRdLAorKyAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgsIGVudW0gQVZQaXhlbEZv cm1hdCBwaXhfZm10LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIENvcHkgaW1hZ2UgcGxhbmUg ZnJvbSBzcmMgdG8gZHN0LgorKyAqIFRoYXQgaXMsIGNvcHkgImhlaWdodCIgbnVtYmVyIG9mIGxp bmVzIG9mICJieXRld2lkdGgiIGJ5dGVzIGVhY2guCisrICogVGhlIGZpcnN0IGJ5dGUgb2YgZWFj aCBzdWNjZXNzaXZlIGxpbmUgaXMgc2VwYXJhdGVkIGJ5ICpfbGluZXNpemUKKysgKiBieXRlcy4K KysgKgorKyAqIGJ5dGV3aWR0aCBtdXN0IGJlIGNvbnRhaW5lZCBieSBib3RoIGFic29sdXRlIHZh bHVlcyBvZiBkc3RfbGluZXNpemUKKysgKiBhbmQgc3JjX2xpbmVzaXplLCBvdGhlcndpc2UgdGhl IGZ1bmN0aW9uIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKysgKgorKyAqIEBwYXJhbSBkc3QgICAg ICAgICAgZGVzdGluYXRpb24gcGxhbmUgdG8gY29weSB0bworKyAqIEBwYXJhbSBkc3RfbGluZXNp emUgbGluZXNpemUgZm9yIHRoZSBpbWFnZSBwbGFuZSBpbiBkc3QKKysgKiBAcGFyYW0gc3JjICAg ICAgICAgIHNvdXJjZSBwbGFuZSB0byBjb3B5IGZyb20KKysgKiBAcGFyYW0gc3JjX2xpbmVzaXpl IGxpbmVzaXplIGZvciB0aGUgaW1hZ2UgcGxhbmUgaW4gc3JjCisrICogQHBhcmFtIGhlaWdodCAg ICAgICBoZWlnaHQgKG51bWJlciBvZiBsaW5lcykgb2YgdGhlIHBsYW5lCisrICovCisrdm9pZCBh dl9pbWFnZV9jb3B5X3BsYW5lKHVpbnQ4X3QgICAgICAgKmRzdCwgaW50IGRzdF9saW5lc2l6ZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLCBpbnQgc3JjX2xp bmVzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXdpZHRoLCBpbnQgaGVp Z2h0KTsKKysKKysvKioKKysgKiBDb3B5IGltYWdlIGRhdGEgbG9jYXRlZCBpbiB1bmNhY2hlYWJs ZSAoZS5nLiBHUFUgbWFwcGVkKSBtZW1vcnkuIFdoZXJlCisrICogYXZhaWxhYmxlLCB0aGlzIGZ1 bmN0aW9uIHdpbGwgdXNlIHNwZWNpYWwgZnVuY3Rpb25hbGl0eSBmb3IgcmVhZGluZyBmcm9tIHN1 Y2gKKysgKiBtZW1vcnksIHdoaWNoIG1heSByZXN1bHQgaW4gZ3JlYXRseSBpbXByb3ZlZCBwZXJm b3JtYW5jZSBjb21wYXJlZCB0byBwbGFpbgorKyAqIGF2X2ltYWdlX2NvcHlfcGxhbmUoKS4KKysg KgorKyAqIGJ5dGV3aWR0aCBtdXN0IGJlIGNvbnRhaW5lZCBieSBib3RoIGFic29sdXRlIHZhbHVl cyBvZiBkc3RfbGluZXNpemUKKysgKiBhbmQgc3JjX2xpbmVzaXplLCBvdGhlcndpc2UgdGhlIGZ1 bmN0aW9uIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKysgKgorKyAqIEBub3RlIFRoZSBsaW5lc2l6 ZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHR5cGUgcHRyZGlmZl90IGhlcmUsIHdoaWxlIHRoZXkgYXJl CisrICogICAgICAgaW50IGZvciBhdl9pbWFnZV9jb3B5X3BsYW5lKCkuCisrICogQG5vdGUgT24g eDg2LCB0aGUgbGluZXNpemVzIGN1cnJlbnRseSBuZWVkIHRvIGJlIGFsaWduZWQgdG8gdGhlIGNh Y2hlbGluZQorKyAqICAgICAgIHNpemUgKGkuZS4gNjQpIHRvIGdldCBpbXByb3ZlZCBwZXJmb3Jt YW5jZS4KKysgKi8KKyt2b2lkIGF2X2ltYWdlX2NvcHlfcGxhbmVfdWNfZnJvbSh1aW50OF90ICAg ICAgICpkc3QsIHB0cmRpZmZfdCBkc3RfbGluZXNpemUsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLCBwdHJkaWZmX3Qgc3JjX2xpbmVzaXplLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBieXRld2lkdGgsIGlu dCBoZWlnaHQpOworKworKy8qKgorKyAqIENvcHkgaW1hZ2UgaW4gc3JjX2RhdGEgdG8gZHN0X2Rh dGEuCisrICoKKysgKiBAcGFyYW0gZHN0X2RhdGEgICAgICBkZXN0aW5hdGlvbiBpbWFnZSBkYXRh IGJ1ZmZlciB0byBjb3B5IHRvCisrICogQHBhcmFtIGRzdF9saW5lc2l6ZXMgbGluZXNpemVzIGZv ciB0aGUgaW1hZ2UgaW4gZHN0X2RhdGEKKysgKiBAcGFyYW0gc3JjX2RhdGEgICAgICBzb3VyY2Ug aW1hZ2UgZGF0YSBidWZmZXIgdG8gY29weSBmcm9tCisrICogQHBhcmFtIHNyY19saW5lc2l6ZXMg bGluZXNpemVzIGZvciB0aGUgaW1hZ2UgaW4gc3JjX2RhdGEKKysgKiBAcGFyYW0gcGl4X2ZtdCAg ICAgICB0aGUgQVZQaXhlbEZvcm1hdCBvZiB0aGUgaW1hZ2UKKysgKiBAcGFyYW0gd2lkdGggICAg ICAgICB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGhlaWdodCAgICAg ICAgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKi8KKyt2b2lkIGF2X2ltYWdlX2Nv cHkodWludDhfdCAqIGNvbnN0IGRzdF9kYXRhWzRdLCBjb25zdCBpbnQgZHN0X2xpbmVzaXplc1s0 XSwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIGNvbnN0IHNyY19kYXRhWzRd LCBjb25zdCBpbnQgc3JjX2xpbmVzaXplc1s0XSwKKysgICAgICAgICAgICAgICAgICAgZW51bSBB VlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisrCisrLyoqCisr ICogV3JhcHBlciBhcm91bmQgYXZfaW1hZ2VfY29weSgpIHRvIHdvcmthcm91bmQgdGhlIGxpbWl0 YXRpb24KKysgKiB0aGF0IHRoZSBjb252ZXJzaW9uIGZyb20gdWludDhfdCAqIGNvbnN0ICogdG8g Y29uc3QgdWludDhfdCAqIGNvbnN0ICoKKysgKiBpcyBub3QgcGVyZm9ybWVkIGF1dG9tYXRpY2Fs bHkgaW4gQy4KKysgKiBAc2VlIGF2X2ltYWdlX2NvcHkoKQorKyAqLworK3N0YXRpYyBpbmxpbmUK Kyt2b2lkIGF2X2ltYWdlX2NvcHkyKHVpbnQ4X3QgKiBjb25zdCBkc3RfZGF0YVs0XSwgY29uc3Qg aW50IGRzdF9saW5lc2l6ZXNbNF0sCisrICAgICAgICAgICAgICAgICAgICB1aW50OF90ICogY29u c3Qgc3JjX2RhdGFbNF0sIGNvbnN0IGludCBzcmNfbGluZXNpemVzWzRdLAorKyAgICAgICAgICAg ICAgICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdo dCkKKyt7CisrICAgIGF2X2ltYWdlX2NvcHkoZHN0X2RhdGEsIGRzdF9saW5lc2l6ZXMsCisrICAg ICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKiBjb25zdCAqKXNyY19kYXRhLCBzcmNfbGlu ZXNpemVzLAorKyAgICAgICAgICAgICAgICAgIHBpeF9mbXQsIHdpZHRoLCBoZWlnaHQpOworK30K KysKKysvKioKKysgKiBDb3B5IGltYWdlIGRhdGEgbG9jYXRlZCBpbiB1bmNhY2hlYWJsZSAoZS5n LiBHUFUgbWFwcGVkKSBtZW1vcnkuIFdoZXJlCisrICogYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9u IHdpbGwgdXNlIHNwZWNpYWwgZnVuY3Rpb25hbGl0eSBmb3IgcmVhZGluZyBmcm9tIHN1Y2gKKysg KiBtZW1vcnksIHdoaWNoIG1heSByZXN1bHQgaW4gZ3JlYXRseSBpbXByb3ZlZCBwZXJmb3JtYW5j ZSBjb21wYXJlZCB0byBwbGFpbgorKyAqIGF2X2ltYWdlX2NvcHkoKS4KKysgKgorKyAqIFRoZSBk YXRhIHBvaW50ZXJzIGFuZCB0aGUgbGluZXNpemVzIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgbWF4 aW11bSByZXF1aXJlZAorKyAqIGJ5IHRoZSBDUFUgYXJjaGl0ZWN0dXJlLgorKyAqCisrICogQG5v dGUgVGhlIGxpbmVzaXplIHBhcmFtZXRlcnMgaGF2ZSB0aGUgdHlwZSBwdHJkaWZmX3QgaGVyZSwg d2hpbGUgdGhleSBhcmUKKysgKiAgICAgICBpbnQgZm9yIGF2X2ltYWdlX2NvcHkoKS4KKysgKiBA bm90ZSBPbiB4ODYsIHRoZSBsaW5lc2l6ZXMgY3VycmVudGx5IG5lZWQgdG8gYmUgYWxpZ25lZCB0 byB0aGUgY2FjaGVsaW5lCisrICogICAgICAgc2l6ZSAoaS5lLiA2NCkgdG8gZ2V0IGltcHJvdmVk IHBlcmZvcm1hbmNlLgorKyAqLworK3ZvaWQgYXZfaW1hZ2VfY29weV91Y19mcm9tKHVpbnQ4X3Qg KiBjb25zdCBkc3RfZGF0YVs0XSwgICAgICAgY29uc3QgcHRyZGlmZl90IGRzdF9saW5lc2l6ZXNb NF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIGNvbnN0IHNy Y19kYXRhWzRdLCBjb25zdCBwdHJkaWZmX3Qgc3JjX2xpbmVzaXplc1s0XSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBp bnQgaGVpZ2h0KTsKKysKKysvKioKKysgKiBTZXR1cCB0aGUgZGF0YSBwb2ludGVycyBhbmQgbGlu ZXNpemVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgaW1hZ2UKKysgKiBwYXJhbWV0ZXJzIGFuZCB0 aGUgcHJvdmlkZWQgYXJyYXkuCisrICoKKysgKiBUaGUgZmllbGRzIG9mIHRoZSBnaXZlbiBpbWFn ZSBhcmUgZmlsbGVkIGluIGJ5IHVzaW5nIHRoZSBzcmMKKysgKiBhZGRyZXNzIHdoaWNoIHBvaW50 cyB0byB0aGUgaW1hZ2UgZGF0YSBidWZmZXIuIERlcGVuZGluZyBvbiB0aGUKKysgKiBzcGVjaWZp ZWQgcGl4ZWwgZm9ybWF0LCBvbmUgb3IgbXVsdGlwbGUgaW1hZ2UgZGF0YSBwb2ludGVycyBhbmQK KysgKiBsaW5lIHNpemVzIHdpbGwgYmUgc2V0LiAgSWYgYSBwbGFuYXIgZm9ybWF0IGlzIHNwZWNp ZmllZCwgc2V2ZXJhbAorKyAqIHBvaW50ZXJzIHdpbGwgYmUgc2V0IHBvaW50aW5nIHRvIHRoZSBk aWZmZXJlbnQgcGljdHVyZSBwbGFuZXMgYW5kCisrICogdGhlIGxpbmUgc2l6ZXMgb2YgdGhlIGRp ZmZlcmVudCBwbGFuZXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlCisrICogbGluZXNfc2l6ZXMgYXJy YXkuIENhbGwgd2l0aCBzcmMgPT0gTlVMTCB0byBnZXQgdGhlIHJlcXVpcmVkCisrICogc2l6ZSBm b3IgdGhlIHNyYyBidWZmZXIuCisrICoKKysgKiBUbyBhbGxvY2F0ZSB0aGUgYnVmZmVyIGFuZCBm aWxsIGluIHRoZSBkc3RfZGF0YSBhbmQgZHN0X2xpbmVzaXplIGluCisrICogb25lIGNhbGwsIHVz ZSBhdl9pbWFnZV9hbGxvYygpLgorKyAqCisrICogQHBhcmFtIGRzdF9kYXRhICAgICAgZGF0YSBw b2ludGVycyB0byBiZSBmaWxsZWQgaW4KKysgKiBAcGFyYW0gZHN0X2xpbmVzaXplICBsaW5lc2l6 ZXMgZm9yIHRoZSBpbWFnZSBpbiBkc3RfZGF0YSB0byBiZSBmaWxsZWQgaW4KKysgKiBAcGFyYW0g c3JjICAgICAgICAgICBidWZmZXIgd2hpY2ggd2lsbCBjb250YWluIG9yIGNvbnRhaW5zIHRoZSBh Y3R1YWwgaW1hZ2UgZGF0YSwgY2FuIGJlIE5VTEwKKysgKiBAcGFyYW0gcGl4X2ZtdCAgICAgICB0 aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBpbWFnZQorKyAqIEBwYXJhbSB3aWR0aCAgICAgICAgIHRo ZSB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGhlaWdodCAgICAgICAg dGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGFsaWduICAgICAg ICAgdGhlIHZhbHVlIHVzZWQgaW4gc3JjIGZvciBsaW5lc2l6ZSBhbGlnbm1lbnQKKysgKiBAcmV0 dXJuIHRoZSBzaXplIGluIGJ5dGVzIHJlcXVpcmVkIGZvciBzcmMsIGEgbmVnYXRpdmUgZXJyb3Ig Y29kZQorKyAqIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX2Fy cmF5cyh1aW50OF90ICpkc3RfZGF0YVs0XSwgaW50IGRzdF9saW5lc2l6ZVs0XSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0 LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIFJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0 aGUgYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgdG8gc3RvcmUgYW4KKysgKiBpbWFnZSB3aXRoIHRo ZSBnaXZlbiBwYXJhbWV0ZXJzLgorKyAqCisrICogQHBhcmFtIHBpeF9mbXQgIHRoZSBwaXhlbCBm b3JtYXQgb2YgdGhlIGltYWdlCisrICogQHBhcmFtIHdpZHRoICAgIHRoZSB3aWR0aCBvZiB0aGUg aW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGhlaWdodCAgIHRoZSBoZWlnaHQgb2YgdGhlIGlt YWdlIGluIHBpeGVscworKyAqIEBwYXJhbSBhbGlnbiAgICB0aGUgYXNzdW1lZCBsaW5lc2l6ZSBh bGlnbm1lbnQKKysgKiBAcmV0dXJuIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcywgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqLworK2ludCBhdl9pbWFnZV9nZXRf YnVmZmVyX3NpemUoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhl aWdodCwgaW50IGFsaWduKTsKKysKKysvKioKKysgKiBDb3B5IGltYWdlIGRhdGEgZnJvbSBhbiBp bWFnZSBpbnRvIGEgYnVmZmVyLgorKyAqCisrICogYXZfaW1hZ2VfZ2V0X2J1ZmZlcl9zaXplKCkg Y2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgcmVxdWlyZWQgc2l6ZQorKyAqIGZvciB0aGUgYnVm ZmVyIHRvIGZpbGwuCisrICoKKysgKiBAcGFyYW0gZHN0ICAgICAgICAgICBhIGJ1ZmZlciBpbnRv IHdoaWNoIHBpY3R1cmUgZGF0YSB3aWxsIGJlIGNvcGllZAorKyAqIEBwYXJhbSBkc3Rfc2l6ZSAg ICAgIHRoZSBzaXplIGluIGJ5dGVzIG9mIGRzdAorKyAqIEBwYXJhbSBzcmNfZGF0YSAgICAgIHBv aW50ZXJzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBpbWFnZSBkYXRhCisrICogQHBhcmFtIHNyY19s aW5lc2l6ZSAgbGluZXNpemVzIGZvciB0aGUgaW1hZ2UgaW4gc3JjX2RhdGEKKysgKiBAcGFyYW0g cGl4X2ZtdCAgICAgICB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UKKysgKiBA cGFyYW0gd2lkdGggICAgICAgICB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSBpbiBwaXhl bHMKKysgKiBAcGFyYW0gaGVpZ2h0ICAgICAgICB0aGUgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgaW1h Z2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGFsaWduICAgICAgICAgdGhlIGFzc3VtZWQgbGluZXNp emUgYWxpZ25tZW50IGZvciBkc3QKKysgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3Jp dHRlbiB0byBkc3QsIG9yIGEgbmVnYXRpdmUgdmFsdWUKKysgKiAoZXJyb3IgY29kZSkgb24gZXJy b3IKKysgKi8KKytpbnQgYXZfaW1hZ2VfY29weV90b19idWZmZXIodWludDhfdCAqZHN0LCBpbnQg ZHN0X3NpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKiBj b25zdCBzcmNfZGF0YVs0XSwgY29uc3QgaW50IHNyY19saW5lc2l6ZVs0XSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCB3aWR0aCwg aW50IGhlaWdodCwgaW50IGFsaWduKTsKKysKKysvKioKKysgKiBDaGVjayBpZiB0aGUgZ2l2ZW4g ZGltZW5zaW9uIG9mIGFuIGltYWdlIGlzIHZhbGlkLCBtZWFuaW5nIHRoYXQgYWxsCisrICogYnl0 ZXMgb2YgdGhlIGltYWdlIGNhbiBiZSBhZGRyZXNzZWQgd2l0aCBhIHNpZ25lZCBpbnQuCisrICoK KysgKiBAcGFyYW0gdyB0aGUgd2lkdGggb2YgdGhlIHBpY3R1cmUKKysgKiBAcGFyYW0gaCB0aGUg aGVpZ2h0IG9mIHRoZSBwaWN0dXJlCisrICogQHBhcmFtIGxvZ19vZmZzZXQgdGhlIG9mZnNldCB0 byBzdW0gdG8gdGhlIGxvZyBsZXZlbCBmb3IgbG9nZ2luZyB3aXRoIGxvZ19jdHgKKysgKiBAcGFy YW0gbG9nX2N0eCB0aGUgcGFyZW50IGxvZ2dpbmcgY29udGV4dCwgaXQgbWF5IGJlIE5VTEwKKysg KiBAcmV0dXJuID49IDAgaWYgdmFsaWQsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UK KysgKi8KKytpbnQgYXZfaW1hZ2VfY2hlY2tfc2l6ZSh1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQg aW50IGgsIGludCBsb2dfb2Zmc2V0LCB2b2lkICpsb2dfY3R4KTsKKysKKysvKioKKysgKiBDaGVj ayBpZiB0aGUgZ2l2ZW4gZGltZW5zaW9uIG9mIGFuIGltYWdlIGlzIHZhbGlkLCBtZWFuaW5nIHRo YXQgYWxsCisrICogYnl0ZXMgb2YgYSBwbGFuZSBvZiBhbiBpbWFnZSB3aXRoIHRoZSBzcGVjaWZp ZWQgcGl4X2ZtdCBjYW4gYmUgYWRkcmVzc2VkCisrICogd2l0aCBhIHNpZ25lZCBpbnQuCisrICoK KysgKiBAcGFyYW0gdyB0aGUgd2lkdGggb2YgdGhlIHBpY3R1cmUKKysgKiBAcGFyYW0gaCB0aGUg aGVpZ2h0IG9mIHRoZSBwaWN0dXJlCisrICogQHBhcmFtIG1heF9waXhlbHMgdGhlIG1heGltdW0g bnVtYmVyIG9mIHBpeGVscyB0aGUgdXNlciB3YW50cyB0byBhY2NlcHQKKysgKiBAcGFyYW0gcGl4 X2ZtdCB0aGUgcGl4ZWwgZm9ybWF0LCBjYW4gYmUgQVZfUElYX0ZNVF9OT05FIGlmIHVua25vd24u CisrICogQHBhcmFtIGxvZ19vZmZzZXQgdGhlIG9mZnNldCB0byBzdW0gdG8gdGhlIGxvZyBsZXZl bCBmb3IgbG9nZ2luZyB3aXRoIGxvZ19jdHgKKysgKiBAcGFyYW0gbG9nX2N0eCB0aGUgcGFyZW50 IGxvZ2dpbmcgY29udGV4dCwgaXQgbWF5IGJlIE5VTEwKKysgKiBAcmV0dXJuID49IDAgaWYgdmFs aWQsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKysgKi8KKytpbnQgYXZfaW1hZ2Vf Y2hlY2tfc2l6ZTIodW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLCBpbnQ2NF90IG1heF9w aXhlbHMsIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgbG9nX29mZnNldCwgdm9pZCAq bG9nX2N0eCk7CisrCisrLyoqCisrICogQ2hlY2sgaWYgdGhlIGdpdmVuIHNhbXBsZSBhc3BlY3Qg cmF0aW8gb2YgYW4gaW1hZ2UgaXMgdmFsaWQuCisrICoKKysgKiBJdCBpcyBjb25zaWRlcmVkIGlu dmFsaWQgaWYgdGhlIGRlbm9taW5hdG9yIGlzIDAgb3IgaWYgYXBwbHlpbmcgdGhlIHJhdGlvCisr ICogdG8gdGhlIGltYWdlIHNpemUgd291bGQgbWFrZSB0aGUgc21hbGxlciBkaW1lbnNpb24gbGVz cyB0aGFuIDEuIElmIHRoZQorKyAqIHNhciBudW1lcmF0b3IgaXMgMCwgaXQgaXMgY29uc2lkZXJl ZCB1bmtub3duIGFuZCB3aWxsIHJldHVybiBhcyB2YWxpZC4KKysgKgorKyAqIEBwYXJhbSB3IHdp ZHRoIG9mIHRoZSBpbWFnZQorKyAqIEBwYXJhbSBoIGhlaWdodCBvZiB0aGUgaW1hZ2UKKysgKiBA cGFyYW0gc2FyIHNhbXBsZSBhc3BlY3QgcmF0aW8gb2YgdGhlIGltYWdlCisrICogQHJldHVybiAw IGlmIHZhbGlkLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvdGhlcndpc2UKKysgKi8KKytpbnQg YXZfaW1hZ2VfY2hlY2tfc2FyKHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwgQVZSYXRp b25hbCBzYXIpOworKworKy8qKgorKyAqIE92ZXJ3cml0ZSB0aGUgaW1hZ2UgZGF0YSB3aXRoIGJs YWNrLiBUaGlzIGlzIHN1aXRhYmxlIGZvciBmaWxsaW5nIGEKKysgKiBzdWItcmVjdGFuZ2xlIG9m IGFuIGltYWdlLCBtZWFuaW5nIHRoZSBwYWRkaW5nIGJldHdlZW4gdGhlIHJpZ2h0IG1vc3QgcGl4 ZWwKKysgKiBhbmQgdGhlIGxlZnQgbW9zdCBwaXhlbCBvbiB0aGUgbmV4dCBsaW5lIHdpbGwgbm90 IGJlIG92ZXJ3cml0dGVuLiBGb3Igc29tZQorKyAqIGZvcm1hdHMsIHRoZSBpbWFnZSBzaXplIG1p Z2h0IGJlIHJvdW5kZWQgdXAgZHVlIHRvIGluaGVyZW50IGFsaWdubWVudC4KKysgKgorKyAqIElm IHRoZSBwaXhlbCBmb3JtYXQgaGFzIGFscGhhLCB0aGUgYWxwaGEgaXMgY2xlYXJlZCB0byBvcGFx dWUuCisrICoKKysgKiBUaGlzIGNhbiByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHBpeGVsIGZvcm1h dCBpcyBub3Qgc3VwcG9ydGVkLiBOb3JtYWxseSwgYWxsCisrICogbm9uLWh3YWNjZWwgcGl4ZWwg Zm9ybWF0cyBzaG91bGQgYmUgc3VwcG9ydGVkLgorKyAqCisrICogUGFzc2luZyBOVUxMIGZvciBk c3RfZGF0YSBpcyBhbGxvd2VkLiBUaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgdGhl CisrICogb3BlcmF0aW9uIHdvdWxkIGhhdmUgc3VjY2VlZGVkLiAoSXQgY2FuIHJldHVybiBhbiBl cnJvciBpZiB0aGUgcGl4X2ZtdCBpcworKyAqIG5vdCBzdXBwb3J0ZWQuKQorKyAqCisrICogQHBh cmFtIGRzdF9kYXRhICAgICAgZGF0YSBwb2ludGVycyB0byBkZXN0aW5hdGlvbiBpbWFnZQorKyAq IEBwYXJhbSBkc3RfbGluZXNpemUgIGxpbmVzaXplcyBmb3IgdGhlIGRlc3RpbmF0aW9uIGltYWdl CisrICogQHBhcmFtIHBpeF9mbXQgICAgICAgdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgaW1hZ2UK KysgKiBAcGFyYW0gcmFuZ2UgICAgICAgICB0aGUgY29sb3IgcmFuZ2Ugb2YgdGhlIGltYWdlIChp bXBvcnRhbnQgZm9yIGNvbG9yc3BhY2VzIHN1Y2ggYXMgWVVWKQorKyAqIEBwYXJhbSB3aWR0aCAg ICAgICAgIHRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGhlaWdo dCAgICAgICAgdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHJldHVybiAw IGlmIHRoZSBpbWFnZSBkYXRhIHdhcyBjbGVhcmVkLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBv dGhlcndpc2UKKysgKi8KKytpbnQgYXZfaW1hZ2VfZmlsbF9ibGFjayh1aW50OF90ICogY29uc3Qg ZHN0X2RhdGFbNF0sIGNvbnN0IHB0cmRpZmZfdCBkc3RfbGluZXNpemVbNF0sCisrICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGVudW0gQVZDb2xvclJh bmdlIHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdo dCk7CisrCisrLyoqCisrICogT3ZlcndyaXRlIHRoZSBpbWFnZSBkYXRhIHdpdGggYSBjb2xvci4g VGhpcyBpcyBzdWl0YWJsZSBmb3IgZmlsbGluZyBhCisrICogc3ViLXJlY3RhbmdsZSBvZiBhbiBp bWFnZSwgbWVhbmluZyB0aGUgcGFkZGluZyBiZXR3ZWVuIHRoZSByaWdodCBtb3N0IHBpeGVsCisr ICogYW5kIHRoZSBsZWZ0IG1vc3QgcGl4ZWwgb24gdGhlIG5leHQgbGluZSB3aWxsIG5vdCBiZSBv dmVyd3JpdHRlbi4gRm9yIHNvbWUKKysgKiBmb3JtYXRzLCB0aGUgaW1hZ2Ugc2l6ZSBtaWdodCBi ZSByb3VuZGVkIHVwIGR1ZSB0byBpbmhlcmVudCBhbGlnbm1lbnQuCisrICoKKysgKiBJZiB0aGUg cGl4ZWwgZm9ybWF0IGhhcyBhbHBoYSwgaXQgaXMgYWxzbyByZXBsYWNlZC4gQ29sb3IgY29tcG9u ZW50IHZhbHVlcworKyAqIGFyZSBpbnRlcnByZXRlZCBhcyBuYXRpdmUgaW50ZWdlcnMgKG9yIGlu dGZsb2F0cykgcmVnYXJkbGVzcyBvZiBhY3R1YWwgcGl4ZWwKKysgKiBmb3JtYXQgZW5kaWFubmVz cy4KKysgKgorKyAqIFRoaXMgY2FuIHJldHVybiBhbiBlcnJvciBpZiB0aGUgcGl4ZWwgZm9ybWF0 IGlzIG5vdCBzdXBwb3J0ZWQuIE5vcm1hbGx5LCBhbGwKKysgKiBub24taHdhY2NlbCBwaXhlbCBm b3JtYXRzIHNob3VsZCBiZSBzdXBwb3J0ZWQuCisrICoKKysgKiBQYXNzaW5nIE5VTEwgZm9yIGRz dF9kYXRhIGlzIGFsbG93ZWQuIFRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciB0aGUK KysgKiBvcGVyYXRpb24gd291bGQgaGF2ZSBzdWNjZWVkZWQuIChJdCBjYW4gcmV0dXJuIGFuIGVy cm9yIGlmIHRoZSBwaXhfZm10IGlzCisrICogbm90IHN1cHBvcnRlZC4pCisrICoKKysgKiBAcGFy YW0gZHN0X2RhdGEgICAgICBkYXRhIHBvaW50ZXJzIHRvIGRlc3RpbmF0aW9uIGltYWdlCisrICog QHBhcmFtIGRzdF9saW5lc2l6ZSAgbGluZXNpemVzIGZvciB0aGUgZGVzdGluYXRpb24gaW1hZ2UK KysgKiBAcGFyYW0gcGl4X2ZtdCAgICAgICB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBpbWFnZQor KyAqIEBwYXJhbSBjb2xvciAgICAgICAgIHRoZSBjb2xvciBjb21wb25lbnRzIHRvIGJlIHVzZWQg Zm9yIHRoZSBmaWxsCisrICogQHBhcmFtIHdpZHRoICAgICAgICAgdGhlIHdpZHRoIG9mIHRoZSBp bWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gaGVpZ2h0ICAgICAgICB0aGUgaGVpZ2h0IG9mIHRo ZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgICBjdXJyZW50bHkgdW51 c2VkCisrICogQHJldHVybiAwIGlmIHRoZSBpbWFnZSBkYXRhIHdhcyBmaWxsZWQsIGEgbmVnYXRp dmUgQVZFUlJPUiBjb2RlIG90aGVyd2lzZQorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX2NvbG9y KHVpbnQ4X3QgKiBjb25zdCBkc3RfZGF0YVs0XSwgY29uc3QgcHRyZGlmZl90IGRzdF9saW5lc2l6 ZVs0XSwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2Zt dCwgY29uc3QgdWludDMyX3QgY29sb3JbNF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIEB9CisrICovCisr CisrCisrI2VuZGlmIC8qIEFWVVRJTF9JTUdVVElMU19IICovCitkaWZmIC11cCBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv aW50ZmxvYXQuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9pbnRmbG9hdC5oCistLS0gTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2lu dGZsb2F0LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzM4NTk0MiArMDIwMAorKysr IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2dXRpbC9pbnRmbG9hdC5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3MzYyMDcyICswMjAw CitAQCAtMCwwICsxLDc3IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFucyBSdWxs Z2FyZAorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisr ICovCisrCisrI2lmbmRlZiBBVlVUSUxfSU5URkxPQVRfSAorKyNkZWZpbmUgQVZVVElMX0lOVEZM T0FUX0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIK KysKKyt1bmlvbiBhdl9pbnRmbG9hdDMyIHsKKysgICAgdWludDMyX3QgaTsKKysgICAgZmxvYXQg ICAgZjsKKyt9OworKworK3VuaW9uIGF2X2ludGZsb2F0NjQgeworKyAgICB1aW50NjRfdCBpOwor KyAgICBkb3VibGUgICBmOworK307CisrCisrLyoqCisrICogUmVpbnRlcnByZXQgYSAzMi1iaXQg aW50ZWdlciBhcyBhIGZsb2F0LgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGZsb2F0 IGF2X2ludDJmbG9hdCh1aW50MzJfdCBpKQorK3sKKysgICAgdW5pb24gYXZfaW50ZmxvYXQzMiB2 OworKyAgICB2LmkgPSBpOworKyAgICByZXR1cm4gdi5mOworK30KKysKKysvKioKKysgKiBSZWlu dGVycHJldCBhIGZsb2F0IGFzIGEgMzItYml0IGludGVnZXIuCisrICovCisrc3RhdGljIGF2X2Fs d2F5c19pbmxpbmUgdWludDMyX3QgYXZfZmxvYXQyaW50KGZsb2F0IGYpCisreworKyAgICB1bmlv biBhdl9pbnRmbG9hdDMyIHY7CisrICAgIHYuZiA9IGY7CisrICAgIHJldHVybiB2Lmk7CisrfQor KworKy8qKgorKyAqIFJlaW50ZXJwcmV0IGEgNjQtYml0IGludGVnZXIgYXMgYSBkb3VibGUuCisr ICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgZG91YmxlIGF2X2ludDJkb3VibGUodWludDY0 X3QgaSkKKyt7CisrICAgIHVuaW9uIGF2X2ludGZsb2F0NjQgdjsKKysgICAgdi5pID0gaTsKKysg ICAgcmV0dXJuIHYuZjsKKyt9CisrCisrLyoqCisrICogUmVpbnRlcnByZXQgYSBkb3VibGUgYXMg YSA2NC1iaXQgaW50ZWdlci4KKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB1aW50NjRf dCBhdl9kb3VibGUyaW50KGRvdWJsZSBmKQorK3sKKysgICAgdW5pb24gYXZfaW50ZmxvYXQ2NCB2 OworKyAgICB2LmYgPSBmOworKyAgICByZXR1cm4gdi5pOworK30KKysKKysjZW5kaWYgLyogQVZV VElMX0lOVEZMT0FUX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9sb2cuaC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 dXRpbC9sb2cuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9sb2cuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6 NDcuNjc3NTI3NjMwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2xvZy5oCTIwMjYtMDktMDcgMTI6MjM6 NDcuNjc3NDQ1ODk0ICswMjAwCitAQCAtMCwwICsxLDQyNyBAQAorKy8qCisrICogY29weXJpZ2h0 IChjKSAyMDA2IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+CisrICoKKysg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZu ZGVmIEFWVVRJTF9MT0dfSAorKyNkZWZpbmUgQVZVVElMX0xPR19ICisrCisrI2luY2x1ZGUgPHN0 ZGFyZy5oPgorKyNpbmNsdWRlICJhdHRyaWJ1dGVzLmgiCisrI2luY2x1ZGUgInZlcnNpb24uaCIK KysKKyt0eXBlZGVmIGVudW0geworKyAgICBBVl9DTEFTU19DQVRFR09SWV9OQSA9IDAsCisrICAg IEFWX0NMQVNTX0NBVEVHT1JZX0lOUFVULAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9PVVRQVVQs CisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX01VWEVSLAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9E RU1VWEVSLAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9FTkNPREVSLAorKyAgICBBVl9DTEFTU19D QVRFR09SWV9ERUNPREVSLAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9GSUxURVIsCisrICAgIEFW X0NMQVNTX0NBVEVHT1JZX0JJVFNUUkVBTV9GSUxURVIsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZ X1NXU0NBTEVSLAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9TV1JFU0FNUExFUiwKKysgICAgQVZf Q0xBU1NfQ0FURUdPUllfSFdERVZJQ0UsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9W SURFT19PVVRQVVQgPSA0MCwKKysgICAgQVZfQ0xBU1NfQ0FURUdPUllfREVWSUNFX1ZJREVPX0lO UFVULAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9ERVZJQ0VfQVVESU9fT1VUUFVULAorKyAgICBB Vl9DTEFTU19DQVRFR09SWV9ERVZJQ0VfQVVESU9fSU5QVVQsCisrICAgIEFWX0NMQVNTX0NBVEVH T1JZX0RFVklDRV9PVVRQVVQsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9JTlBVVCwK KysgICAgQVZfQ0xBU1NfQ0FURUdPUllfTkIgIC8vLzwgbm90IHBhcnQgb2YgQUJJL0FQSQorK31B VkNsYXNzQ2F0ZWdvcnk7CisrCisrZW51bSBBVkNsYXNzU3RhdGVGbGFncyB7CisrICAgIC8qKgor KyAgICAgKiBPYmplY3QgaW5pdGlhbGl6YXRpb24gaGFzIGZpbmlzaGVkIGFuZCBpdCBpcyBub3cg aW4gdGhlICdydW50aW1lJyBzdGFnZS4KKysgICAgICogVGhpcyBhZmZlY3RzIGUuZy4gd2hhdCBv cHRpb25zIGNhbiBiZSBzZXQgb24gdGhlIG9iamVjdCAob25seQorKyAgICAgKiBBVl9PUFRfRkxB R19SVU5USU1FX1BBUkFNIG9wdGlvbnMgY2FuIGJlIHNldCBvbiBpbml0aWFsaXplZCBvYmplY3Rz KS4KKysgICAgICovCisrICAgIEFWX0NMQVNTX1NUQVRFX0lOSVRJQUxJWkVEICAgICAgICAgPSAo MSA8PCAwKSwKKyt9OworKworKyNkZWZpbmUgQVZfSVNfSU5QVVRfREVWSUNFKGNhdGVnb3J5KSBc CisrICAgICgoKGNhdGVnb3J5KSA9PSBBVl9DTEFTU19DQVRFR09SWV9ERVZJQ0VfVklERU9fSU5Q VVQpIHx8IFwKKysgICAgICgoY2F0ZWdvcnkpID09IEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9B VURJT19JTlBVVCkgfHwgXAorKyAgICAgKChjYXRlZ29yeSkgPT0gQVZfQ0xBU1NfQ0FURUdPUllf REVWSUNFX0lOUFVUKSkKKysKKysjZGVmaW5lIEFWX0lTX09VVFBVVF9ERVZJQ0UoY2F0ZWdvcnkp IFwKKysgICAgKCgoY2F0ZWdvcnkpID09IEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9WSURFT19P VVRQVVQpIHx8IFwKKysgICAgICgoY2F0ZWdvcnkpID09IEFWX0NMQVNTX0NBVEVHT1JZX0RFVklD RV9BVURJT19PVVRQVVQpIHx8IFwKKysgICAgICgoY2F0ZWdvcnkpID09IEFWX0NMQVNTX0NBVEVH T1JZX0RFVklDRV9PVVRQVVQpKQorKworK3N0cnVjdCBBVk9wdGlvblJhbmdlczsKKysKKysvKioK KysgKiBEZXNjcmliZSB0aGUgY2xhc3Mgb2YgYW4gQVZDbGFzcyBjb250ZXh0IHN0cnVjdHVyZS4g VGhhdCBpcyBhbgorKyAqIGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0IGZpZWxk IGlzIGEgcG9pbnRlciB0byBhbgorKyAqIEFWQ2xhc3Mgc3RydWN0IChlLmcuIEFWQ29kZWNDb250 ZXh0LCBBVkZvcm1hdENvbnRleHQgZXRjLikuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZDbGFz cyB7CisrICAgIC8qKgorKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xhc3M7IHVzdWFsbHkgaXQg aXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUKKysgICAgICogY29udGV4dCBzdHJ1Y3R1cmUgdHlwZSB0 byB3aGljaCB0aGUgQVZDbGFzcyBpcyBhc3NvY2lhdGVkLgorKyAgICAgKi8KKysgICAgY29uc3Qg Y2hhciogY2xhc3NfbmFtZTsKKysKKysgICAgLyoqCisrICAgICAqIEEgcG9pbnRlciB0byBhIGZ1 bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIG5hbWUgb2YgYSBjb250ZXh0CisrICAgICAqIGluc3Rh bmNlIGN0eCBhc3NvY2lhdGVkIHdpdGggdGhlIGNsYXNzLgorKyAgICAgKi8KKysgICAgY29uc3Qg Y2hhciogKCppdGVtX25hbWUpKHZvaWQqIGN0eCk7CisrCisrICAgIC8qKgorKyAgICAgKiBBbiBh cnJheSBvZiBvcHRpb25zIGZvciB0aGUgc3RydWN0dXJlIG9yIE5VTEwuCisrICAgICAqIFdoZW4g bm9uLU5VTEwsIHRoZSBhcnJheSBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYW4gb3B0aW9uIHdpdGgg YSBOVUxMCisrICAgICAqIG5hbWUuCisrICAgICAqCisrICAgICAqIEBzZWUgYXZfc2V0X2RlZmF1 bHRfb3B0aW9ucygpCisrICAgICAqLworKyAgICBjb25zdCBzdHJ1Y3QgQVZPcHRpb24gKm9wdGlv bjsKKysKKysgICAgLyoqCisrICAgICAqIExJQkFWVVRJTF9WRVJTSU9OIHdpdGggd2hpY2ggdGhp cyBzdHJ1Y3R1cmUgd2FzIGNyZWF0ZWQuCisrICAgICAqIFRoaXMgaXMgdXNlZCB0byBhbGxvdyBm aWVsZHMgdG8gYmUgYWRkZWQgdG8gQVZDbGFzcyB3aXRob3V0IHJlcXVpcmluZworKyAgICAgKiBt YWpvciB2ZXJzaW9uIGJ1bXBzIGV2ZXJ5d2hlcmUuCisrICAgICAqLworKworKyAgICBpbnQgdmVy c2lvbjsKKysKKysgICAgLyoqCisrICAgICAqIE9mZnNldCBpbiB0aGUgc3RydWN0dXJlIHdoZXJl IHRoZSBsb2cgbGV2ZWwgb2Zmc2V0IGlzIHN0b3JlZC4gVGhlIGxvZworKyAgICAgKiBsZXZlbCBv ZmZzZXQgaXMgYW4gaW50IGFkZGVkIHRvIHRoZSBsb2cgbGV2ZWwgZm9yIGxvZ2dpbmcgd2l0aCB0 aGlzCisrICAgICAqIG9iamVjdCBhcyB0aGUgY29udGV4dC4KKysgICAgICoKKysgICAgICogMCBt ZWFucyB0aGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlLgorKyAgICAgKi8KKysgICAgaW50IGxvZ19s ZXZlbF9vZmZzZXRfb2Zmc2V0OworKworKyAgICAvKioKKysgICAgICogT2Zmc2V0IGluIHRoZSBz dHJ1Y3R1cmUgd2hlcmUgYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgY29udGV4dCBmb3IKKysgICAg ICogbG9nZ2luZyBpcyBzdG9yZWQuIEZvciBleGFtcGxlIGEgZGVjb2RlciBjb3VsZCBwYXNzIGl0 cyBBVkNvZGVjQ29udGV4dAorKyAgICAgKiB0byBldmFsIGFzIHN1Y2ggYSBwYXJlbnQgY29udGV4 dCwgd2hpY2ggYW4gOjphdl9sb2coKSBpbXBsZW1lbnRhdGlvbgorKyAgICAgKiBjb3VsZCB0aGVu IGxldmVyYWdlIHRvIGRpc3BsYXkgdGhlIHBhcmVudCBjb250ZXh0LgorKyAgICAgKgorKyAgICAg KiBXaGVuIHRoZSBwb2ludGVyIGlzIE5VTEwsIG9yIHRoaXMgb2Zmc2V0IGlzIHplcm8sIHRoZSBv YmplY3QgaXMgYXNzdW1lZAorKyAgICAgKiB0byBoYXZlIG5vIHBhcmVudC4KKysgICAgICovCisr ICAgIGludCBwYXJlbnRfbG9nX2NvbnRleHRfb2Zmc2V0OworKworKyAgICAvKioKKysgICAgICog Q2F0ZWdvcnkgdXNlZCBmb3IgdmlzdWFsaXphdGlvbiAobGlrZSBjb2xvcikuCisrICAgICAqCisr ICAgICAqIE9ubHkgdXNlZCB3aGVuIDo6Z2V0X2NhdGVnb3J5KCkgaXMgTlVMTC4gVXNlIHRoaXMg ZmllbGQgd2hlbiBhbGwKKysgICAgICogaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgaGF2ZSB0aGUg c2FtZSBjYXRlZ29yeSwgdXNlIDo6Z2V0X2NhdGVnb3J5KCkKKysgICAgICogb3RoZXJ3aXNlLgor KyAgICAgKi8KKysgICAgQVZDbGFzc0NhdGVnb3J5IGNhdGVnb3J5OworKworKyAgICAvKioKKysg ICAgICogQ2FsbGJhY2sgdG8gcmV0dXJuIHRoZSBpbnN0YW5jZSBjYXRlZ29yeS4gVXNlIHRoaXMg Y2FsbGJhY2sgd2hlbgorKyAgICAgKiBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mg bWF5IGhhdmUgZGlmZmVyZW50IGNhdGVnb3JpZXMsCisrICAgICAqIDo6Y2F0ZWdvcnkgb3RoZXJ3 aXNlLgorKyAgICAgKi8KKysgICAgQVZDbGFzc0NhdGVnb3J5ICgqZ2V0X2NhdGVnb3J5KSh2b2lk KiBjdHgpOworKworKyAgICAvKioKKysgICAgICogQ2FsbGJhY2sgdG8gcmV0dXJuIHRoZSBzdXBw b3J0ZWQvYWxsb3dlZCByYW5nZXMuCisrICAgICAqLworKyAgICBpbnQgKCpxdWVyeV9yYW5nZXMp KHN0cnVjdCBBVk9wdGlvblJhbmdlcyAqKiwgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGlu dCBmbGFncyk7CisrCisrICAgIC8qKgorKyAgICAgKiBSZXR1cm4gbmV4dCBBVk9wdGlvbnMtZW5h YmxlZCBjaGlsZCBvciBOVUxMCisrICAgICAqLworKyAgICB2b2lkKiAoKmNoaWxkX25leHQpKHZv aWQgKm9iaiwgdm9pZCAqcHJldik7CisrCisrICAgIC8qKgorKyAgICAgKiBJdGVyYXRlIG92ZXIg dGhlIEFWQ2xhc3NlcyBjb3JyZXNwb25kaW5nIHRvIHBvdGVudGlhbCBBVk9wdGlvbnMtZW5hYmxl ZAorKyAgICAgKiBjaGlsZHJlbi4KKysgICAgICoKKysgICAgICogQHBhcmFtIGl0ZXIgcG9pbnRl ciB0byBvcGFxdWUgaXRlcmF0aW9uIHN0YXRlLiBUaGUgY2FsbGVyIG11c3QgaW5pdGlhbGl6ZQor KyAgICAgKiAgICAgICAgICAgICAqaXRlciB0byBOVUxMIGJlZm9yZSB0aGUgZmlyc3QgY2FsbC4K KysgICAgICogQHJldHVybiBBVkNsYXNzIGZvciB0aGUgbmV4dCBBVk9wdGlvbnMtZW5hYmxlZCBj aGlsZCBvciBOVUxMIGlmIHRoZXJlIGFyZQorKyAgICAgKiAgICAgICAgIG5vIG1vcmUgc3VjaCBj aGlsZHJlbi4KKysgICAgICoKKysgICAgICogQG5vdGUgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiA6 OmNoaWxkX25leHQoKSBhbmQgOjpjaGlsZF9jbGFzc19pdGVyYXRlKCkKKysgICAgICogICAgICAg aXMgdGhhdCA6OmNoaWxkX25leHQoKSBpdGVyYXRlcyBvdmVyIF9hY3R1YWxfIGNoaWxkcmVuIG9m IGFuCisrICAgICAqICAgICAgIF9leGlzdGluZ18gb2JqZWN0IGluc3RhbmNlLCB3aGlsZSA6OmNo aWxkX2NsYXNzX2l0ZXJhdGUoKSBpdGVyYXRlcworKyAgICAgKiAgICAgICBvdmVyIHRoZSBjbGFz c2VzIG9mIGFsbCBfcG90ZW50aWFsXyBjaGlsZHJlbiBvZiBhbnkgcG9zc2libGUKKysgICAgICog ICAgICAgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KKysgICAgICovCisrICAgIGNvbnN0IHN0cnVj dCBBVkNsYXNzKiAoKmNoaWxkX2NsYXNzX2l0ZXJhdGUpKHZvaWQgKippdGVyKTsKKysKKysgICAg LyoqCisrICAgICAqIFdoZW4gbm9uLXplcm8sIG9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIGFuIHVu c2lnbmVkIGludCBob2xkaW5nIG9iamVjdAorKyAgICAgKiBzdGF0ZSBmbGFncywgYSBjb21iaW5h dGlvbiBvZiBBVkNsYXNzU3RhdGVGbGFncyB2YWx1ZXMuIFRoZSBmbGFncyBhcmUKKysgICAgICog dXBkYXRlZCBieSB0aGUgb2JqZWN0IHRvIHNpZ25hbCBpdHMgc3RhdGUgdG8gdGhlIGdlbmVyaWMg Y29kZS4KKysgICAgICoKKysgICAgICogQWRkZWQgaW4gdmVyc2lvbiA1OS40MS4xMDAuCisrICAg ICAqLworKyAgICBpbnQgc3RhdGVfZmxhZ3Nfb2Zmc2V0OworK30gQVZDbGFzczsKKysKKysvKioK KysgKiBAYWRkdG9ncm91cCBsYXZ1X2xvZworKyAqCisrICogQHsKKysgKgorKyAqIEBkZWZncm91 cCBsYXZ1X2xvZ19jb25zdGFudHMgTG9nZ2luZyBDb25zdGFudHMKKysgKgorKyAqIEB7CisrICov CisrCisrLyoqCisrICogUHJpbnQgbm8gb3V0cHV0LgorKyAqLworKyNkZWZpbmUgQVZfTE9HX1FV SUVUICAgIC04CisrCisrLyoqCisrICogU29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nIGFuZCB3 ZSB3aWxsIGNyYXNoIG5vdy4KKysgKi8KKysjZGVmaW5lIEFWX0xPR19QQU5JQyAgICAgMAorKwor Ky8qKgorKyAqIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCByZWNvdmVyeSBpcyBub3QgcG9zc2li bGUuCisrICogRm9yIGV4YW1wbGUsIG5vIGhlYWRlciB3YXMgZm91bmQgZm9yIGEgZm9ybWF0IHdo aWNoIGRlcGVuZHMKKysgKiBvbiBoZWFkZXJzIG9yIGFuIGlsbGVnYWwgY29tYmluYXRpb24gb2Yg cGFyYW1ldGVycyBpcyB1c2VkLgorKyAqLworKyNkZWZpbmUgQVZfTE9HX0ZBVEFMICAgICA4Cisr CisrLyoqCisrICogU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGNhbm5vdCBsb3NzbGVzc2x5IGJl IHJlY292ZXJlZC4KKysgKiBIb3dldmVyLCBub3QgYWxsIGZ1dHVyZSBkYXRhIGlzIGFmZmVjdGVk LgorKyAqLworKyNkZWZpbmUgQVZfTE9HX0VSUk9SICAgIDE2CisrCisrLyoqCisrICogU29tZXRo aW5nIHNvbWVob3cgZG9lcyBub3QgbG9vayBjb3JyZWN0LiBUaGlzIG1heSBvciBtYXkgbm90Cisr ICogbGVhZCB0byBwcm9ibGVtcy4gQW4gZXhhbXBsZSB3b3VsZCBiZSB0aGUgdXNlIG9mICctdnN0 cmljdCAtMicuCisrICovCisrI2RlZmluZSBBVl9MT0dfV0FSTklORyAgMjQKKysKKysvKioKKysg KiBTdGFuZGFyZCBpbmZvcm1hdGlvbi4KKysgKi8KKysjZGVmaW5lIEFWX0xPR19JTkZPICAgICAz MgorKworKy8qKgorKyAqIERldGFpbGVkIGluZm9ybWF0aW9uLgorKyAqLworKyNkZWZpbmUgQVZf TE9HX1ZFUkJPU0UgIDQwCisrCisrLyoqCisrICogU3R1ZmYgd2hpY2ggaXMgb25seSB1c2VmdWwg Zm9yIGxpYmF2KiBkZXZlbG9wZXJzLgorKyAqLworKyNkZWZpbmUgQVZfTE9HX0RFQlVHICAgIDQ4 CisrCisrLyoqCisrICogRXh0cmVtZWx5IHZlcmJvc2UgZGVidWdnaW5nLCB1c2VmdWwgZm9yIGxp YmF2KiBkZXZlbG9wbWVudC4KKysgKi8KKysjZGVmaW5lIEFWX0xPR19UUkFDRSAgICA1NgorKwor KyNkZWZpbmUgQVZfTE9HX01BWF9PRkZTRVQgKEFWX0xPR19UUkFDRSAtIEFWX0xPR19RVUlFVCkK KysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIFNldHMgYWRkaXRpb25hbCBjb2xv cnMgZm9yIGV4dGVuZGVkIGRlYnVnZ2luZyBzZXNzaW9ucy4KKysgKiBAY29kZQorKyAgIGF2X2xv ZyhjdHgsIEFWX0xPR19ERUJVR3xBVl9MT0dfQygxMzQpLCAiTWVzc2FnZSBpbiBwdXJwbGVcbiIp OworKyAgIEBlbmRjb2RlCisrICogUmVxdWlyZXMgMjU2Y29sb3IgdGVybWluYWwgc3VwcG9ydC4g VXNlcyBvdXRzaWRlIGRlYnVnZ2luZyBpcyBub3QKKysgKiByZWNvbW1lbmRlZC4KKysgKi8KKysj ZGVmaW5lIEFWX0xPR19DKHgpICgoeCkgPDwgOCkKKysKKysvKioKKysgKiBTZW5kIHRoZSBzcGVj aWZpZWQgbWVzc2FnZSB0byB0aGUgbG9nIGlmIHRoZSBsZXZlbCBpcyBsZXNzIHRoYW4gb3IgZXF1 YWwKKysgKiB0byB0aGUgY3VycmVudCBhdl9sb2dfbGV2ZWwuIEJ5IGRlZmF1bHQsIGFsbCBsb2dn aW5nIG1lc3NhZ2VzIGFyZSBzZW50IHRvCisrICogc3RkZXJyLiBUaGlzIGJlaGF2aW9yIGNhbiBi ZSBhbHRlcmVkIGJ5IHNldHRpbmcgYSBkaWZmZXJlbnQgbG9nZ2luZyBjYWxsYmFjaworKyAqIGZ1 bmN0aW9uLgorKyAqIEBzZWUgYXZfbG9nX3NldF9jYWxsYmFjaworKyAqCisrICogQHBhcmFtIGF2 Y2wgQSBwb2ludGVyIHRvIGFuIGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0IGZp ZWxkIGlzIGEKKysgKiAgICAgICAgcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdCBvciBOVUxM IGlmIGdlbmVyYWwgbG9nLgorKyAqIEBwYXJhbSBsZXZlbCBUaGUgaW1wb3J0YW5jZSBsZXZlbCBv ZiB0aGUgbWVzc2FnZSBleHByZXNzZWQgdXNpbmcgYSBAcmVmCisrICogICAgICAgIGxhdnVfbG9n X2NvbnN0YW50cyAiTG9nZ2luZyBDb25zdGFudCIuCisrICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0 IHN0cmluZyAocHJpbnRmLWNvbXBhdGlibGUpIHRoYXQgc3BlY2lmaWVzIGhvdworKyAqICAgICAg ICBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIG91dHB1dC4KKysgKi8KKyt2 b2lkIGF2X2xvZyh2b2lkICphdmNsLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBh dl9wcmludGZfZm9ybWF0KDMsIDQpOworKworKy8qKgorKyAqIFNlbmQgdGhlIHNwZWNpZmllZCBt ZXNzYWdlIHRvIHRoZSBsb2cgb25jZSB3aXRoIHRoZSBpbml0aWFsX2xldmVsIGFuZCB0aGVuIHdp dGgKKysgKiB0aGUgc3Vic2VxdWVudF9sZXZlbC4gQnkgZGVmYXVsdCwgYWxsIGxvZ2dpbmcgbWVz c2FnZXMgYXJlIHNlbnQgdG8KKysgKiBzdGRlcnIuIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGFsdGVy ZWQgYnkgc2V0dGluZyBhIGRpZmZlcmVudCBsb2dnaW5nIGNhbGxiYWNrCisrICogZnVuY3Rpb24u CisrICogQHNlZSBhdl9sb2cKKysgKgorKyAqIEBwYXJhbSBhdmNsIEEgcG9pbnRlciB0byBhbiBh cmJpdHJhcnkgc3RydWN0IG9mIHdoaWNoIHRoZSBmaXJzdCBmaWVsZCBpcyBhCisrICogICAgICAg IHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3Qgb3IgTlVMTCBpZiBnZW5lcmFsIGxvZy4KKysg KiBAcGFyYW0gaW5pdGlhbF9sZXZlbCBpbXBvcnRhbmNlIGxldmVsIG9mIHRoZSBtZXNzYWdlIGV4 cHJlc3NlZCB1c2luZyBhIEByZWYKKysgKiAgICAgICAgbGF2dV9sb2dfY29uc3RhbnRzICJMb2dn aW5nIENvbnN0YW50IiBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2UuCisrICogQHBhcmFtIHN1YnNl cXVlbnRfbGV2ZWwgaW1wb3J0YW5jZSBsZXZlbCBvZiB0aGUgbWVzc2FnZSBleHByZXNzZWQgdXNp bmcgYSBAcmVmCisrICogICAgICAgIGxhdnVfbG9nX2NvbnN0YW50cyAiTG9nZ2luZyBDb25zdGFu dCIgYWZ0ZXIgdGhlIGZpcnN0IG9jY3VycmVuY2UuCisrICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0 IHN0cmluZyAocHJpbnRmLWNvbXBhdGlibGUpIHRoYXQgc3BlY2lmaWVzIGhvdworKyAqICAgICAg ICBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIG91dHB1dC4KKysgKiBAcGFy YW0gc3RhdGUgYSB2YXJpYWJsZSB0byBrZWVwIHRyYWsgb2YgaWYgYSBtZXNzYWdlIGhhcyBhbHJl YWR5IGJlZW4gcHJpbnRlZAorKyAqICAgICAgICB0aGlzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8g MCBiZWZvcmUgdGhlIGZpcnN0IHVzZS4gVGhlIHNhbWUgc3RhdGUKKysgKiAgICAgICAgbXVzdCBu b3QgYmUgYWNjZXNzZWQgYnkgMiBUaHJlYWRzIHNpbXVsdGFuZW91c2x5LgorKyAqLworK3ZvaWQg YXZfbG9nX29uY2Uodm9pZCogYXZjbCwgaW50IGluaXRpYWxfbGV2ZWwsIGludCBzdWJzZXF1ZW50 X2xldmVsLCBpbnQgKnN0YXRlLCBjb25zdCBjaGFyICpmbXQsIC4uLikgYXZfcHJpbnRmX2Zvcm1h dCg1LCA2KTsKKysKKysKKysvKioKKysgKiBTZW5kIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSB0byB0 aGUgbG9nIGlmIHRoZSBsZXZlbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKKysgKiB0byB0aGUgY3Vy cmVudCBhdl9sb2dfbGV2ZWwuIEJ5IGRlZmF1bHQsIGFsbCBsb2dnaW5nIG1lc3NhZ2VzIGFyZSBz ZW50IHRvCisrICogc3RkZXJyLiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBhbHRlcmVkIGJ5IHNldHRp bmcgYSBkaWZmZXJlbnQgbG9nZ2luZyBjYWxsYmFjaworKyAqIGZ1bmN0aW9uLgorKyAqIEBzZWUg YXZfbG9nX3NldF9jYWxsYmFjaworKyAqCisrICogQHBhcmFtIGF2Y2wgQSBwb2ludGVyIHRvIGFu IGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0IGZpZWxkIGlzIGEKKysgKiAgICAg ICAgcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdC4KKysgKiBAcGFyYW0gbGV2ZWwgVGhlIGlt cG9ydGFuY2UgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgZXhwcmVzc2VkIHVzaW5nIGEgQHJlZgorKyAq ICAgICAgICBsYXZ1X2xvZ19jb25zdGFudHMgIkxvZ2dpbmcgQ29uc3RhbnQiLgorKyAqIEBwYXJh bSBmbXQgVGhlIGZvcm1hdCBzdHJpbmcgKHByaW50Zi1jb21wYXRpYmxlKSB0aGF0IHNwZWNpZmll cyBob3cKKysgKiAgICAgICAgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBv dXRwdXQuCisrICogQHBhcmFtIHZsIFRoZSBhcmd1bWVudHMgcmVmZXJlbmNlZCBieSB0aGUgZm9y bWF0IHN0cmluZy4KKysgKi8KKyt2b2lkIGF2X3Zsb2codm9pZCAqYXZjbCwgaW50IGxldmVsLCBj b25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmwpOworKworKy8qKgorKyAqIEdldCB0aGUgY3VycmVu dCBsb2cgbGV2ZWwKKysgKgorKyAqIEBzZWUgbGF2dV9sb2dfY29uc3RhbnRzCisrICoKKysgKiBA cmV0dXJuIEN1cnJlbnQgbG9nIGxldmVsCisrICovCisraW50IGF2X2xvZ19nZXRfbGV2ZWwodm9p ZCk7CisrCisrLyoqCisrICogU2V0IHRoZSBsb2cgbGV2ZWwKKysgKgorKyAqIEBzZWUgbGF2dV9s b2dfY29uc3RhbnRzCisrICoKKysgKiBAcGFyYW0gbGV2ZWwgTG9nZ2luZyBsZXZlbAorKyAqLwor K3ZvaWQgYXZfbG9nX3NldF9sZXZlbChpbnQgbGV2ZWwpOworKworKy8qKgorKyAqIFNldCB0aGUg bG9nZ2luZyBjYWxsYmFjaworKyAqCisrICogQG5vdGUgVGhlIGNhbGxiYWNrIG11c3QgYmUgdGhy ZWFkIHNhZmUsIGV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZQorKyAqICAgICAg IHRocmVhZHMgaXRzZWxmIGFzIHNvbWUgY29kZWNzIGFyZSBtdWx0aXRocmVhZGVkLgorKyAqCisr ICogQHNlZSBhdl9sb2dfZGVmYXVsdF9jYWxsYmFjaworKyAqCisrICogQHBhcmFtIGNhbGxiYWNr IEEgbG9nZ2luZyBmdW5jdGlvbiB3aXRoIGEgY29tcGF0aWJsZSBzaWduYXR1cmUuCisrICovCisr dm9pZCBhdl9sb2dfc2V0X2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCosIGludCwgY29u c3QgY2hhciosIHZhX2xpc3QpKTsKKysKKysvKioKKysgKiBEZWZhdWx0IGxvZ2dpbmcgY2FsbGJh Y2sKKysgKgorKyAqIEl0IHByaW50cyB0aGUgbWVzc2FnZSB0byBzdGRlcnIsIG9wdGlvbmFsbHkg Y29sb3JpemluZyBpdC4KKysgKgorKyAqIEBwYXJhbSBhdmNsIEEgcG9pbnRlciB0byBhbiBhcmJp dHJhcnkgc3RydWN0IG9mIHdoaWNoIHRoZSBmaXJzdCBmaWVsZCBpcyBhCisrICogICAgICAgIHBv aW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QuCisrICogQHBhcmFtIGxldmVsIFRoZSBpbXBvcnRh bmNlIGxldmVsIG9mIHRoZSBtZXNzYWdlIGV4cHJlc3NlZCB1c2luZyBhIEByZWYKKysgKiAgICAg ICAgbGF2dV9sb2dfY29uc3RhbnRzICJMb2dnaW5nIENvbnN0YW50Ii4KKysgKiBAcGFyYW0gZm10 IFRoZSBmb3JtYXQgc3RyaW5nIChwcmludGYtY29tcGF0aWJsZSkgdGhhdCBzcGVjaWZpZXMgaG93 CisrICogICAgICAgIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gb3V0cHV0 LgorKyAqIEBwYXJhbSB2bCBUaGUgYXJndW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGZvcm1hdCBz dHJpbmcuCisrICovCisrdm9pZCBhdl9sb2dfZGVmYXVsdF9jYWxsYmFjayh2b2lkICphdmNsLCBp bnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhX2xpc3QgdmwpOworKworKy8qKgorKyAqIFJldHVybiB0aGUgY29udGV4dCBuYW1lCisrICoK KysgKiBAcGFyYW0gIGN0eCBUaGUgQVZDbGFzcyBjb250ZXh0CisrICoKKysgKiBAcmV0dXJuIFRo ZSBBVkNsYXNzIGNsYXNzX25hbWUKKysgKi8KKytjb25zdCBjaGFyKiBhdl9kZWZhdWx0X2l0ZW1f bmFtZSh2b2lkKiBjdHgpOworK0FWQ2xhc3NDYXRlZ29yeSBhdl9kZWZhdWx0X2dldF9jYXRlZ29y eSh2b2lkICpwdHIpOworKworKy8qKgorKyAqIEZvcm1hdCBhIGxpbmUgb2YgbG9nIHRoZSBzYW1l IHdheSBhcyB0aGUgZGVmYXVsdCBjYWxsYmFjay4KKysgKiBAcGFyYW0gbGluZSAgICAgICAgICBi dWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIGxpbmUKKysgKiBAcGFyYW0gbGluZV9zaXpl ICAgICBzaXplIG9mIHRoZSBidWZmZXIKKysgKiBAcGFyYW0gcHJpbnRfcHJlZml4ICB1c2VkIHRv IHN0b3JlIHdoZXRoZXIgdGhlIHByZWZpeCBtdXN0IGJlIHByaW50ZWQ7CisrICogICAgICAgICAg ICAgICAgICAgICAgbXVzdCBwb2ludCB0byBhIHBlcnNpc3RlbnQgaW50ZWdlciBpbml0aWFsbHkg c2V0IHRvIDEKKysgKi8KKyt2b2lkIGF2X2xvZ19mb3JtYXRfbGluZSh2b2lkICpwdHIsIGludCBs ZXZlbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHZsLAorKyAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKmxpbmUsIGludCBsaW5lX3NpemUsIGludCAqcHJpbnRfcHJlZml4KTsKKysKKysv KioKKysgKiBGb3JtYXQgYSBsaW5lIG9mIGxvZyB0aGUgc2FtZSB3YXkgYXMgdGhlIGRlZmF1bHQg Y2FsbGJhY2suCisrICogQHBhcmFtIGxpbmUgICAgICAgICAgYnVmZmVyIHRvIHJlY2VpdmUgdGhl IGZvcm1hdHRlZCBsaW5lOworKyAqICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMIGlm IGxpbmVfc2l6ZSBpcyAwCisrICogQHBhcmFtIGxpbmVfc2l6ZSAgICAgc2l6ZSBvZiB0aGUgYnVm ZmVyOyBhdCBtb3N0IGxpbmVfc2l6ZS0xIGNoYXJhY3RlcnMgd2lsbAorKyAqICAgICAgICAgICAg ICAgICAgICAgIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwgcGx1cyBvbmUgbnVsbCB0ZXJtaW5h dG9yCisrICogQHBhcmFtIHByaW50X3ByZWZpeCAgdXNlZCB0byBzdG9yZSB3aGV0aGVyIHRoZSBw cmVmaXggbXVzdCBiZSBwcmludGVkOworKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgcG9p bnQgdG8gYSBwZXJzaXN0ZW50IGludGVnZXIgaW5pdGlhbGx5IHNldCB0byAxCisrICogQHJldHVy biBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG90aGVyd2lz ZSByZXR1cm5zCisrICogICAgICAgICB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3Vs ZCBoYXZlIGJlZW4gd3JpdHRlbiBmb3IgYQorKyAqICAgICAgICAgc3VmZmljaWVudGx5IGxhcmdl IGJ1ZmZlciwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbAorKyAqICAgICAgICAg Y2hhcmFjdGVyLiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBsZXNzIHRoYW4gbGluZV9zaXpl LCBpdCBtZWFucworKyAqICAgICAgICAgdGhhdCB0aGUgbG9nIG1lc3NhZ2Ugd2FzIHRydW5jYXRl ZCB0byBmaXQgdGhlIGJ1ZmZlci4KKysgKi8KKytpbnQgYXZfbG9nX2Zvcm1hdF9saW5lMih2b2lk ICpwdHIsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHZsLAorKyAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUsIGludCBsaW5lX3NpemUsIGludCAqcHJpbnRfcHJl Zml4KTsKKysKKysvKioKKysgKiBTa2lwIHJlcGVhdGVkIG1lc3NhZ2VzLCB0aGlzIHJlcXVpcmVz IHRoZSB1c2VyIGFwcCB0byB1c2UgYXZfbG9nKCkgaW5zdGVhZCBvZgorKyAqIChmKXByaW50ZiBh cyB0aGUgMiB3b3VsZCBvdGhlcndpc2UgaW50ZXJmZXJlIGFuZCBsZWFkIHRvCisrICogIkxhc3Qg bWVzc2FnZSByZXBlYXRlZCB4IHRpbWVzIiBtZXNzYWdlcyBiZWxvdyAoZilwcmludGYgbWVzc2Fn ZXMgd2l0aCBzb21lCisrICogYmFkIGx1Y2suCisrICogQWxzbyB0byByZWNlaXZlIHRoZSBsYXN0 LCAibGFzdCByZXBlYXRlZCIgbGluZSBpZiBhbnksIHRoZSB1c2VyIGFwcCBtdXN0CisrICogY2Fs bCBhdl9sb2coTlVMTCwgQVZfTE9HX1FVSUVULCAiJXMiLCAiIik7IGF0IHRoZSBlbmQKKysgKi8K KysjZGVmaW5lIEFWX0xPR19TS0lQX1JFUEVBVEVEIDEKKysKKysvKioKKysgKiBJbmNsdWRlIHRo ZSBsb2cgc2V2ZXJpdHkgaW4gbWVzc2FnZXMgb3JpZ2luYXRpbmcgZnJvbSBjb2RlY3MuCisrICoK KysgKiBSZXN1bHRzIGluIG1lc3NhZ2VzIHN1Y2ggYXM6CisrICogW3Jhd3ZpZGVvIEAgMHhERUFE QkVFRl0gW2Vycm9yXSBlbmNvZGUgZGlkIG5vdCBwcm9kdWNlIHZhbGlkIHB0cworKyAqLworKyNk ZWZpbmUgQVZfTE9HX1BSSU5UX0xFVkVMIDIKKysKKysvKioKKysgKiBJbmNsdWRlIHN5c3RlbSB0 aW1lIGluIGxvZyBvdXRwdXQuCisrICovCisrI2RlZmluZSBBVl9MT0dfUFJJTlRfVElNRSA0Cisr CisrLyoqCisrICogSW5jbHVkZSBzeXN0ZW0gZGF0ZSBhbmQgdGltZSBpbiBsb2cgb3V0cHV0Lgor KyAqLworKyNkZWZpbmUgQVZfTE9HX1BSSU5UX0RBVEVUSU1FIDgKKysKKyt2b2lkIGF2X2xvZ19z ZXRfZmxhZ3MoaW50IGFyZyk7CisraW50IGF2X2xvZ19nZXRfZmxhZ3Modm9pZCk7CisrCisrLyoq CisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElMX0xPR19IICovCitkaWZmIC11cCBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJhdnV0aWwvbWFjcm9zLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvbWFjcm9zLmgKKy0tLSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0 aWwvbWFjcm9zLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzYxMjk5MCArMDIwMAor KysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVn L3Y5L2xpYmF2dXRpbC9tYWNyb3MuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzU4ODE5MiArMDIw MAorQEAgLTAsMCArMSw4MCBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn LgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZpbGUKKysgKiBAaW5ncm91cCBsYXZ1 CisrICogVXRpbGl0eSBQcmVwcm9jZXNzb3IgbWFjcm9zCisrICovCisrCisrI2lmbmRlZiBBVlVU SUxfTUFDUk9TX0gKKysjZGVmaW5lIEFWVVRJTF9NQUNST1NfSAorKworKyNpbmNsdWRlICJsaWJh dnV0aWwvYXZjb25maWcuaCIKKysKKysjaWYgQVZfSEFWRV9CSUdFTkRJQU4KKysjICAgZGVmaW5l IEFWX05FKGJlLCBsZSkgKGJlKQorKyNlbHNlCisrIyAgIGRlZmluZSBBVl9ORShiZSwgbGUpIChs ZSkKKysjZW5kaWYKKysKKysvKioKKysgKiBDb21wYXJhdG9yLgorKyAqIEZvciB0d28gbnVtZXJp Y2FsIGV4cHJlc3Npb25zIHggYW5kIHksIGdpdmVzIDEgaWYgeCA+IHksIC0xIGlmIHggPCB5LCBh bmQgMAorKyAqIGlmIHggPT0geS4gVGhpcyBpcyB1c2VmdWwgZm9yIGluc3RhbmNlIGluIGEgcXNv cnQgY29tcGFyYXRvciBjYWxsYmFjay4KKysgKiBGdXJ0aGVybW9yZSwgY29tcGlsZXJzIGFyZSBh YmxlIHRvIG9wdGltaXplIHRoaXMgdG8gYnJhbmNobGVzcyBjb2RlLCBhbmQKKysgKiB0aGVyZSBp cyBubyByaXNrIG9mIG92ZXJmbG93IHdpdGggc2lnbmVkIHR5cGVzLgorKyAqIEFzIHdpdGggbWFu eSBtYWNyb3MsIHRoaXMgZXZhbHVhdGVzIGl0cyBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcywgaXQg dGh1cworKyAqIG11c3Qgbm90IGhhdmUgYSBzaWRlLWVmZmVjdC4KKysgKi8KKysjZGVmaW5lIEZG RElGRlNJR04oeCx5KSAoKCh4KT4oeSkpIC0gKCh4KTwoeSkpKQorKworKyNkZWZpbmUgRkZNQVgo YSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorKyNkZWZpbmUgRkZNQVgzKGEsYixjKSBGRk1B WChGRk1BWChhLGIpLGMpCisrI2RlZmluZSBGRk1JTihhLGIpICgoYSkgPiAoYikgPyAoYikgOiAo YSkpCisrI2RlZmluZSBGRk1JTjMoYSxiLGMpIEZGTUlOKEZGTUlOKGEsYiksYykKKysKKysjZGVm aW5lIEZGU1dBUCh0eXBlLGEsYikgZG97dHlwZSBTV0FQX3RtcD0gYjsgYj0gYTsgYT0gU1dBUF90 bXA7fXdoaWxlKDApCisrI2RlZmluZSBGRl9BUlJBWV9FTEVNUyhhKSAoc2l6ZW9mKGEpIC8gc2l6 ZW9mKChhKVswXSkpCisrCisrI2RlZmluZSBNS1RBRyhhLGIsYyxkKSAgICgoYSkgfCAoKGIpIDw8 IDgpIHwgKChjKSA8PCAxNikgfCAoKHVuc2lnbmVkKShkKSA8PCAyNCkpCisrI2RlZmluZSBNS0JF VEFHKGEsYixjLGQpICgoZCkgfCAoKGMpIDw8IDgpIHwgKChiKSA8PCAxNikgfCAoKHVuc2lnbmVk KShhKSA8PCAyNCkpCisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgcHJlcHJvY19taXNjIFByZXBy b2Nlc3NvciBTdHJpbmcgTWFjcm9zCisrICoKKysgKiBTdHJpbmcgbWFuaXB1bGF0aW9uIG1hY3Jv cworKyAqCisrICogQHsKKysgKi8KKysKKysjZGVmaW5lIEFWX1NUUklOR0lGWShzKSAgICAgICAg IEFWX1RPU1RSSU5HKHMpCisrI2RlZmluZSBBVl9UT1NUUklORyhzKSAjcworKworKyNkZWZpbmUg QVZfR0xVRShhLCBiKSBhICMjIGIKKysjZGVmaW5lIEFWX0pPSU4oYSwgYikgQVZfR0xVRShhLCBi KQorKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2RlZmluZSBBVl9QUkFHTUEocykgX1ByYWdt YSgjcykKKysKKysjZGVmaW5lIEZGQUxJR04oeCwgYSkgKCgoeCkrKGEpLTEpJn4oKGEpLTEpKQor KworKyNlbmRpZiAvKiBBVlVUSUxfTUFDUk9TX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9tYXRo ZW1hdGljcy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhp cmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL21hdGhlbWF0aWNzLmgKKy0tLSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv bWF0aGVtYXRpY3MuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3NzI4MzEwICswMjAw CisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL21hdGhlbWF0aWNzLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzc2NjYy MzAgKzAyMDAKK0BAIC0wLDAgKzEsMzAwIEBACisrLyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDUt MjAxMiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICog QGZpbGUKKysgKiBAYWRkdG9ncm91cCBsYXZ1X21hdGgKKysgKiBNYXRoZW1hdGljYWwgdXRpbGl0 aWVzIGZvciB3b3JraW5nIHdpdGggdGltZXN0YW1wIGFuZCB0aW1lIGJhc2UuCisrICovCisrCisr I2lmbmRlZiBBVlVUSUxfTUFUSEVNQVRJQ1NfSAorKyNkZWZpbmUgQVZVVElMX01BVEhFTUFUSUNT X0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVk ZSAiYXR0cmlidXRlcy5oIgorKyNpbmNsdWRlICJyYXRpb25hbC5oIgorKyNpbmNsdWRlICJpbnRm bG9hdC5oIgorKworKyNpZm5kZWYgTV9FCisrI2RlZmluZSBNX0UgICAgICAgICAgICAyLjcxODI4 MTgyODQ1OTA0NTIzNTQgICAvKiBlICovCisrI2VuZGlmCisrI2lmbmRlZiBNX0VmCisrI2RlZmlu ZSBNX0VmICAgICAgICAgICAyLjcxODI4MTgyODQ1OTA0NTIzNTRmICAvKiBlICovCisrI2VuZGlm CisrI2lmbmRlZiBNX0xOMgorKyNkZWZpbmUgTV9MTjIgICAgICAgICAgMC42OTMxNDcxODA1NTk5 NDUzMDk0MiAgLyogbG9nX2UgMiAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9MTjJmCisrI2RlZmlu ZSBNX0xOMmYgICAgICAgICAwLjY5MzE0NzE4MDU1OTk0NTMwOTQyZiAvKiBsb2dfZSAyICovCisr I2VuZGlmCisrI2lmbmRlZiBNX0xOMTAKKysjZGVmaW5lIE1fTE4xMCAgICAgICAgIDIuMzAyNTg1 MDkyOTk0MDQ1Njg0MDIgIC8qIGxvZ19lIDEwICovCisrI2VuZGlmCisrI2lmbmRlZiBNX0xOMTBm CisrI2RlZmluZSBNX0xOMTBmICAgICAgICAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAyZiAvKiBsb2df ZSAxMCAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9MT0cyXzEwCisrI2RlZmluZSBNX0xPRzJfMTAg ICAgICAzLjMyMTkyODA5NDg4NzM2MjM0Nzg3ICAvKiBsb2dfMiAxMCAqLworKyNlbmRpZgorKyNp Zm5kZWYgTV9MT0cyXzEwZgorKyNkZWZpbmUgTV9MT0cyXzEwZiAgICAgMy4zMjE5MjgwOTQ4ODcz NjIzNDc4N2YgLyogbG9nXzIgMTAgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fUEhJCisrI2RlZmlu ZSBNX1BISSAgICAgICAgICAxLjYxODAzMzk4ODc0OTg5NDg0ODIwICAgLyogcGhpIC8gZ29sZGVu IHJhdGlvICovCisrI2VuZGlmCisrI2lmbmRlZiBNX1BISWYKKysjZGVmaW5lIE1fUEhJZiAgICAg ICAgIDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjBmICAvKiBwaGkgLyBnb2xkZW4gcmF0aW8gKi8KKysj ZW5kaWYKKysjaWZuZGVmIE1fUEkKKysjZGVmaW5lIE1fUEkgICAgICAgICAgIDMuMTQxNTkyNjUz NTg5NzkzMjM4NDYgIC8qIHBpICovCisrI2VuZGlmCisrI2lmbmRlZiBNX1BJZgorKyNkZWZpbmUg TV9QSWYgICAgICAgICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NmYgLyogcGkgKi8KKysjZW5kaWYK KysjaWZuZGVmIE1fUElfMgorKyNkZWZpbmUgTV9QSV8yICAgICAgICAgMS41NzA3OTYzMjY3OTQ4 OTY2MTkyMyAgLyogcGkvMiAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9QSV8yZgorKyNkZWZpbmUg TV9QSV8yZiAgICAgICAgMS41NzA3OTYzMjY3OTQ4OTY2MTkyM2YgLyogcGkvMiAqLworKyNlbmRp ZgorKyNpZm5kZWYgTV9QSV80CisrI2RlZmluZSBNX1BJXzQgICAgICAgICAwLjc4NTM5ODE2MzM5 NzQ0ODMwOTYyICAvKiBwaS80ICovCisrI2VuZGlmCisrI2lmbmRlZiBNX1BJXzRmCisrI2RlZmlu ZSBNX1BJXzRmICAgICAgICAwLjc4NTM5ODE2MzM5NzQ0ODMwOTYyZiAvKiBwaS80ICovCisrI2Vu ZGlmCisrI2lmbmRlZiBNXzFfUEkKKysjZGVmaW5lIE1fMV9QSSAgICAgICAgIDAuMzE4MzA5ODg2 MTgzNzkwNjcxNTQgIC8qIDEvcGkgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fMV9QSWYKKysjZGVm aW5lIE1fMV9QSWYgICAgICAgIDAuMzE4MzA5ODg2MTgzNzkwNjcxNTRmIC8qIDEvcGkgKi8KKysj ZW5kaWYKKysjaWZuZGVmIE1fMl9QSQorKyNkZWZpbmUgTV8yX1BJICAgICAgICAgMC42MzY2MTk3 NzIzNjc1ODEzNDMwOCAgLyogMi9waSAqLworKyNlbmRpZgorKyNpZm5kZWYgTV8yX1BJZgorKyNk ZWZpbmUgTV8yX1BJZiAgICAgICAgMC42MzY2MTk3NzIzNjc1ODEzNDMwOGYgLyogMi9waSAqLwor KyNlbmRpZgorKyNpZm5kZWYgTV8yX1NRUlRQSQorKyNkZWZpbmUgTV8yX1NRUlRQSSAgICAgMS4x MjgzNzkxNjcwOTU1MTI1NzM5MCAgLyogMi9zcXJ0KHBpKSAqLworKyNlbmRpZgorKyNpZm5kZWYg TV8yX1NRUlRQSWYKKysjZGVmaW5lIE1fMl9TUVJUUElmICAgIDEuMTI4Mzc5MTY3MDk1NTEyNTcz OTBmIC8qIDIvc3FydChwaSkgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fU1FSVDFfMgorKyNkZWZp bmUgTV9TUVJUMV8yICAgICAgMC43MDcxMDY3ODExODY1NDc1MjQ0MCAgLyogMS9zcXJ0KDIpICov CisrI2VuZGlmCisrI2lmbmRlZiBNX1NRUlQxXzJmCisrI2RlZmluZSBNX1NRUlQxXzJmICAgICAw LjcwNzEwNjc4MTE4NjU0NzUyNDQwZiAvKiAxL3NxcnQoMikgKi8KKysjZW5kaWYKKysjaWZuZGVm IE1fU1FSVDIKKysjZGVmaW5lIE1fU1FSVDIgICAgICAgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAg IC8qIHNxcnQoMikgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fU1FSVDJmCisrI2RlZmluZSBNX1NR UlQyZiAgICAgICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwZiAvKiBzcXJ0KDIpICovCisrI2VuZGlm CisrI2lmbmRlZiBOQU4KKysjZGVmaW5lIE5BTiAgICAgICAgICAgIGF2X2ludDJmbG9hdCgweDdm YzAwMDAwKQorKyNlbmRpZgorKyNpZm5kZWYgSU5GSU5JVFkKKysjZGVmaW5lIElORklOSVRZICAg ICAgIGF2X2ludDJmbG9hdCgweDdmODAwMDAwKQorKyNlbmRpZgorKworKy8qKgorKyAqIEBhZGR0 b2dyb3VwIGxhdnVfbWF0aAorKyAqCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBSb3VuZGlu ZyBtZXRob2RzLgorKyAqLworK2VudW0gQVZSb3VuZGluZyB7CisrICAgIEFWX1JPVU5EX1pFUk8g ICAgID0gMCwgLy8vPCBSb3VuZCB0b3dhcmQgemVyby4KKysgICAgQVZfUk9VTkRfSU5GICAgICAg PSAxLCAvLy88IFJvdW5kIGF3YXkgZnJvbSB6ZXJvLgorKyAgICBBVl9ST1VORF9ET1dOICAgICA9 IDIsIC8vLzwgUm91bmQgdG93YXJkIC1pbmZpbml0eS4KKysgICAgQVZfUk9VTkRfVVAgICAgICAg PSAzLCAvLy88IFJvdW5kIHRvd2FyZCAraW5maW5pdHkuCisrICAgIEFWX1JPVU5EX05FQVJfSU5G ID0gNSwgLy8vPCBSb3VuZCB0byBuZWFyZXN0IGFuZCBoYWxmd2F5IGNhc2VzIGF3YXkgZnJvbSB6 ZXJvLgorKyAgICAvKioKKysgICAgICogRmxhZyB0ZWxsaW5nIHJlc2NhbGluZyBmdW5jdGlvbnMg dG8gcGFzcyBgSU5UNjRfTUlOYC9gTUFYYCB0aHJvdWdoCisrICAgICAqIHVuY2hhbmdlZCwgYXZv aWRpbmcgc3BlY2lhbCBjYXNlcyBmb3IgI0FWX05PUFRTX1ZBTFVFLgorKyAgICAgKgorKyAgICAg KiBVbmxpa2Ugb3RoZXIgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdGlvbiBBVlJvdW5kaW5nLCB0aGlz IHZhbHVlIGlzIGEKKysgICAgICogYml0bWFzayB0aGF0IG11c3QgYmUgdXNlZCBpbiBjb25qdW5j dGlvbiB3aXRoIGFub3RoZXIgdmFsdWUgb2YgdGhlCisrICAgICAqIGVudW1lcmF0aW9uIHRocm91 Z2ggYSBiaXR3aXNlIE9SLCBpbiBvcmRlciB0byBzZXQgYmVoYXZpb3IgZm9yIG5vcm1hbAorKyAg ICAgKiBjYXNlcy4KKysgICAgICoKKysgICAgICogQGNvZGV7LmN9CisrICAgICAqIGF2X3Jlc2Nh bGVfcm5kKDMsIDEsIDIsIEFWX1JPVU5EX1VQIHwgQVZfUk9VTkRfUEFTU19NSU5NQVgpOworKyAg ICAgKiAvLyBSZXNjYWxpbmcgMzoKKysgICAgICogLy8gICAgIENhbGN1bGF0aW5nIDMgKiAxIC8g MgorKyAgICAgKiAvLyAgICAgMyAvIDIgaXMgcm91bmRlZCB1cCB0byAyCisrICAgICAqIC8vICAg ICA9PiAyCisrICAgICAqCisrICAgICAqIGF2X3Jlc2NhbGVfcm5kKEFWX05PUFRTX1ZBTFVFLCAx LCAyLCBBVl9ST1VORF9VUCB8IEFWX1JPVU5EX1BBU1NfTUlOTUFYKTsKKysgICAgICogLy8gUmVz Y2FsaW5nIEFWX05PUFRTX1ZBTFVFOgorKyAgICAgKiAvLyAgICAgQVZfTk9QVFNfVkFMVUUgPT0g SU5UNjRfTUlOCisrICAgICAqIC8vICAgICBBVl9OT1BUU19WQUxVRSBpcyBwYXNzZWQgdGhyb3Vn aAorKyAgICAgKiAvLyAgICAgPT4gQVZfTk9QVFNfVkFMVUUKKysgICAgICogQGVuZGNvZGUKKysg ICAgICovCisrICAgIEFWX1JPVU5EX1BBU1NfTUlOTUFYID0gODE5MiwKKyt9OworKworKy8qKgor KyAqIENvbXB1dGUgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHR3byBpbnRlZ2VyIG9w ZXJhbmRzLgorKyAqCisrICogQHBhcmFtIGEgT3BlcmFuZAorKyAqIEBwYXJhbSBiIE9wZXJhbmQK KysgKiBAcmV0dXJuIEdDRCBvZiBhIGFuZCBiIHVwIHRvIHNpZ247IGlmIGEgPj0gMCBhbmQgYiA+ PSAwLCByZXR1cm4gdmFsdWUgaXMgPj0gMDsKKysgKiBpZiBhID09IDAgYW5kIGIgPT0gMCwgcmV0 dXJucyAwLgorKyAqLworK2ludDY0X3QgYXZfY29uc3QgYXZfZ2NkKGludDY0X3QgYSwgaW50NjRf dCBiKTsKKysKKysvKioKKysgKiBSZXNjYWxlIGEgNjQtYml0IGludGVnZXIgd2l0aCByb3VuZGlu ZyB0byBuZWFyZXN0LgorKyAqCisrICogVGhlIG9wZXJhdGlvbiBpcyBtYXRoZW1hdGljYWxseSBl cXVpdmFsZW50IHRvIGBhICogYiAvIGNgLCBidXQgd3JpdGluZyB0aGF0CisrICogZGlyZWN0bHkg Y2FuIG92ZXJmbG93LgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGF2 X3Jlc2NhbGVfcm5kKCkgd2l0aCAjQVZfUk9VTkRfTkVBUl9JTkYuCisrICoKKysgKiBAc2VlIGF2 X3Jlc2NhbGVfcm5kKCksIGF2X3Jlc2NhbGVfcSgpLCBhdl9yZXNjYWxlX3Ffcm5kKCkKKysgKi8K KytpbnQ2NF90IGF2X3Jlc2NhbGUoaW50NjRfdCBhLCBpbnQ2NF90IGIsIGludDY0X3QgYykgYXZf Y29uc3Q7CisrCisrLyoqCisrICogUmVzY2FsZSBhIDY0LWJpdCBpbnRlZ2VyIHdpdGggc3BlY2lm aWVkIHJvdW5kaW5nLgorKyAqCisrICogVGhlIG9wZXJhdGlvbiBpcyBtYXRoZW1hdGljYWxseSBl cXVpdmFsZW50IHRvIGBhICogYiAvIGNgLCBidXQgd3JpdGluZyB0aGF0CisrICogZGlyZWN0bHkg Y2FuIG92ZXJmbG93LCBhbmQgZG9lcyBub3Qgc3VwcG9ydCBkaWZmZXJlbnQgcm91bmRpbmcgbWV0 aG9kcy4KKysgKiBJZiB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlIHRoZW4gSU5UNjRf TUlOIGlzIHJldHVybmVkLgorKyAqCisrICogQHNlZSBhdl9yZXNjYWxlKCksIGF2X3Jlc2NhbGVf cSgpLCBhdl9yZXNjYWxlX3Ffcm5kKCkKKysgKi8KKytpbnQ2NF90IGF2X3Jlc2NhbGVfcm5kKGlu dDY0X3QgYSwgaW50NjRfdCBiLCBpbnQ2NF90IGMsIGVudW0gQVZSb3VuZGluZyBybmQpIGF2X2Nv bnN0OworKworKy8qKgorKyAqIFJlc2NhbGUgYSA2NC1iaXQgaW50ZWdlciBieSAyIHJhdGlvbmFs IG51bWJlcnMuCisrICoKKysgKiBUaGUgb3BlcmF0aW9uIGlzIG1hdGhlbWF0aWNhbGx5IGVxdWl2 YWxlbnQgdG8gYGEgKiBicSAvIGNxYC4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZh bGVudCB0byBhdl9yZXNjYWxlX3Ffcm5kKCkgd2l0aCAjQVZfUk9VTkRfTkVBUl9JTkYuCisrICoK KysgKiBAc2VlIGF2X3Jlc2NhbGUoKSwgYXZfcmVzY2FsZV9ybmQoKSwgYXZfcmVzY2FsZV9xX3Ju ZCgpCisrICovCisraW50NjRfdCBhdl9yZXNjYWxlX3EoaW50NjRfdCBhLCBBVlJhdGlvbmFsIGJx LCBBVlJhdGlvbmFsIGNxKSBhdl9jb25zdDsKKysKKysvKioKKysgKiBSZXNjYWxlIGEgNjQtYml0 IGludGVnZXIgYnkgMiByYXRpb25hbCBudW1iZXJzIHdpdGggc3BlY2lmaWVkIHJvdW5kaW5nLgor KyAqCisrICogVGhlIG9wZXJhdGlvbiBpcyBtYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvIGBh ICogYnEgLyBjcWAuCisrICoKKysgKiBAc2VlIGF2X3Jlc2NhbGUoKSwgYXZfcmVzY2FsZV9ybmQo KSwgYXZfcmVzY2FsZV9xKCkKKysgKi8KKytpbnQ2NF90IGF2X3Jlc2NhbGVfcV9ybmQoaW50NjRf dCBhLCBBVlJhdGlvbmFsIGJxLCBBVlJhdGlvbmFsIGNxLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIEFWUm91bmRpbmcgcm5kKSBhdl9jb25zdDsKKysKKysvKioKKysgKiBDb21wYXJl IHR3byB0aW1lc3RhbXBzIGVhY2ggaW4gaXRzIG93biB0aW1lIGJhc2UuCisrICoKKysgKiBAcmV0 dXJuIE9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKysgKiAgICAgICAgIC0gLTEgaWYgYHRz X2FgIGlzIGJlZm9yZSBgdHNfYmAKKysgKiAgICAgICAgIC0gMSBpZiBgdHNfYWAgaXMgYWZ0ZXIg YHRzX2JgCisrICogICAgICAgICAtIDAgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgcG9zaXRp b24KKysgKgorKyAqIEB3YXJuaW5nCisrICogVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gaXMg dW5kZWZpbmVkIGlmIG9uZSBvZiB0aGUgdGltZXN0YW1wcyBpcyBvdXRzaWRlCisrICogdGhlIGBp bnQ2NF90YCByYW5nZSB3aGVuIHJlcHJlc2VudGVkIGluIHRoZSBvdGhlcidzIHRpbWViYXNlLgor KyAqLworK2ludCBhdl9jb21wYXJlX3RzKGludDY0X3QgdHNfYSwgQVZSYXRpb25hbCB0Yl9hLCBp bnQ2NF90IHRzX2IsIEFWUmF0aW9uYWwgdGJfYik7CisrCisrLyoqCisrICogQ29tcGFyZSB0aGUg cmVtYWluZGVycyBvZiB0d28gaW50ZWdlciBvcGVyYW5kcyBkaXZpZGVkIGJ5IGEgY29tbW9uIGRp dmlzb3IuCisrICoKKysgKiBJbiBvdGhlciB3b3JkcywgY29tcGFyZSB0aGUgbGVhc3Qgc2lnbmlm aWNhbnQgYGxvZzIobW9kKWAgYml0cyBvZiBpbnRlZ2VycworKyAqIGBhYCBhbmQgYGJgLgorKyAq CisrICogQGNvZGV7LmN9CisrICogYXZfY29tcGFyZV9tb2QoMHgxMSwgMHgwMiwgMHgxMCkgPCAw IC8vIHNpbmNlIDB4MTEgJSAweDEwICAoMHgxKSA8IDB4MDIgJSAweDEwICAoMHgyKQorKyAqIGF2 X2NvbXBhcmVfbW9kKDB4MTEsIDB4MDIsIDB4MjApID4gMCAvLyBzaW5jZSAweDExICUgMHgyMCAo MHgxMSkgPiAweDAyICUgMHgyMCAoMHgwMikKKysgKiBAZW5kY29kZQorKyAqCisrICogQHBhcmFt IGEgT3BlcmFuZAorKyAqIEBwYXJhbSBiIE9wZXJhbmQKKysgKiBAcGFyYW0gbW9kIERpdmlzb3I7 IG11c3QgYmUgYSBwb3dlciBvZiAyCisrICogQHJldHVybgorKyAqICAgICAgICAgLSBhIG5lZ2F0 aXZlIHZhbHVlIGlmIGBhICUgbW9kIDwgYiAlIG1vZGAKKysgKiAgICAgICAgIC0gYSBwb3NpdGl2 ZSB2YWx1ZSBpZiBgYSAlIG1vZCA+IGIgJSBtb2RgCisrICogICAgICAgICAtIHplcm8gICAgICAg ICAgICAgaWYgYGEgJSBtb2QgPT0gYiAlIG1vZGAKKysgKi8KKytpbnQ2NF90IGF2X2NvbXBhcmVf bW9kKHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIsIHVpbnQ2NF90IG1vZCk7CisrCisrLyoqCisrICog UmVzY2FsZSBhIHRpbWVzdGFtcCB3aGlsZSBwcmVzZXJ2aW5nIGtub3duIGR1cmF0aW9ucy4KKysg KgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgY2FsbGVkIHBlciBhdWRpbyBw YWNrZXQgdG8gc2NhbGUgdGhlIGlucHV0CisrICogdGltZXN0YW1wIHRvIGEgZGlmZmVyZW50IHRp bWUgYmFzZS4gQ29tcGFyZWQgdG8gYSBzaW1wbGUgYXZfcmVzY2FsZV9xKCkKKysgKiBjYWxsLCB0 aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCBhZ2FpbnN0IHBvc3NpYmxlIGluY29uc2lzdGVudCBmcmFt ZSBkdXJhdGlvbnMuCisrICoKKysgKiBUaGUgYGxhc3RgIHBhcmFtZXRlciBpcyBhIHN0YXRlIHZh cmlhYmxlIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgZm9yIGFsbAorKyAqIHN1YnNlcXVlbnQgY2Fs bHMgZm9yIHRoZSBzYW1lIHN0cmVhbS4gRm9yIHRoZSBmaXJzdCBjYWxsLCBgKmxhc3RgIHNob3Vs ZCBiZQorKyAqIGluaXRpYWxpemVkIHRvICNBVl9OT1BUU19WQUxVRS4KKysgKgorKyAqIEBwYXJh bVtpbl0gICAgIGluX3RiICAgIElucHV0IHRpbWUgYmFzZQorKyAqIEBwYXJhbVtpbl0gICAgIGlu X3RzICAgIElucHV0IHRpbWVzdGFtcAorKyAqIEBwYXJhbVtpbl0gICAgIGZzX3RiICAgIER1cmF0 aW9uIHRpbWUgYmFzZTsgdHlwaWNhbGx5IHRoaXMgaXMgZmluZXItZ3JhaW5lZAorKyAqICAgICAg ICAgICAgICAgICAgICAgICAgIChncmVhdGVyKSB0aGFuIGBpbl90YmAgYW5kIGBvdXRfdGJgCisr ICogQHBhcmFtW2luXSAgICAgZHVyYXRpb24gRHVyYXRpb24gdGlsbCB0aGUgbmV4dCBjYWxsIHRv IHRoaXMgZnVuY3Rpb24gKGkuZS4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlv biBvZiB0aGUgY3VycmVudCBwYWNrZXQvZnJhbWUpCisrICogQHBhcmFtW2luLG91dF0gbGFzdCAg ICAgUG9pbnRlciB0byBhIHRpbWVzdGFtcCBleHByZXNzZWQgaW4gdGVybXMgb2YKKysgKiAgICAg ICAgICAgICAgICAgICAgICAgICBgZnNfdGJgLCBhY3RpbmcgYXMgYSBzdGF0ZSB2YXJpYWJsZQor KyAqIEBwYXJhbVtpbl0gICAgIG91dF90YiAgIE91dHB1dCB0aW1lYmFzZQorKyAqIEByZXR1cm4g ICAgICAgIFRpbWVzdGFtcCBleHByZXNzZWQgaW4gdGVybXMgb2YgYG91dF90YmAKKysgKgorKyAq IEBub3RlIEluIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24sICJkdXJhdGlvbiIgaXMgaW4g dGVybSBvZiBzYW1wbGVzLCBub3QKKysgKiAgICAgICBzZWNvbmRzLgorKyAqLworK2ludDY0X3Qg YXZfcmVzY2FsZV9kZWx0YShBVlJhdGlvbmFsIGluX3RiLCBpbnQ2NF90IGluX3RzLCAgQVZSYXRp b25hbCBmc190YiwgaW50IGR1cmF0aW9uLCBpbnQ2NF90ICpsYXN0LCBBVlJhdGlvbmFsIG91dF90 Yik7CisrCisrLyoqCisrICogQWRkIGEgdmFsdWUgdG8gYSB0aW1lc3RhbXAuCisrICoKKysgKiBU aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCB3aGVuIHRoZSBzYW1lIHZhbHVlIGlzIHJlcGVh dGVkbHkgYWRkZWQgdGhhdAorKyAqIG5vIGFjY3VtdWxhdGlvbiBvZiByb3VuZGluZyBlcnJvcnMg b2NjdXJzLgorKyAqCisrICogQHBhcmFtW2luXSB0cyAgICAgSW5wdXQgdGltZXN0YW1wCisrICog QHBhcmFtW2luXSB0c190YiAgSW5wdXQgdGltZXN0YW1wIHRpbWUgYmFzZQorKyAqIEBwYXJhbVtp bl0gaW5jICAgIFZhbHVlIHRvIGJlIGFkZGVkCisrICogQHBhcmFtW2luXSBpbmNfdGIgVGltZSBi YXNlIG9mIGBpbmNgCisrICovCisraW50NjRfdCBhdl9hZGRfc3RhYmxlKEFWUmF0aW9uYWwgdHNf dGIsIGludDY0X3QgdHMsIEFWUmF0aW9uYWwgaW5jX3RiLCBpbnQ2NF90IGluYyk7CisrCisrLyoq CisrICogMHRoIG9yZGVyIG1vZGlmaWVkIGJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2lu ZC4KKysgKi8KKytkb3VibGUgYXZfYmVzc2VsX2kwKGRvdWJsZSB4KTsKKysKKysvKioKKysgKiBA fQorKyAqLworKworKyNlbmRpZiAvKiBBVlVUSUxfTUFUSEVNQVRJQ1NfSCAqLworZGlmZiAtdXAg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZ1dGlsL21lbS5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL21lbS5oCistLS0gTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL21l bS5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzc5MTM2OTcgKzAyMDAKKysrKyBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJh dnV0aWwvbWVtLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzc3OTY2NzcgKzAyMDAKK0BAIC0wLDAg KzEsNjA3IEBACisrLyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFlbCBOaWVkZXJtYXll ciA8bWljaGFlbG5pQGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGF2 dV9tZW0KKysgKiBNZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zCisrICovCisrCisrI2lmbmRlZiBB VlVUSUxfTUVNX0gKKysjZGVmaW5lIEFWVVRJTF9NRU1fSAorKworKyNpbmNsdWRlIDxzdGRkZWYu aD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIKKysK KysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZ1X21lbQorKyAqIFV0aWxpdGllcyBmb3IgbWFuaXB1 bGF0aW5nIG1lbW9yeS4KKysgKgorKyAqIEZGbXBlZyBoYXMgc2V2ZXJhbCBhcHBsaWNhdGlvbnMg b2YgbWVtb3J5IHRoYXQgYXJlIG5vdCByZXF1aXJlZCBvZiBhIHR5cGljYWwKKysgKiBwcm9ncmFt LiBGb3IgZXhhbXBsZSwgdGhlIGNvbXB1dGluZy1oZWF2eSBjb21wb25lbnRzIGxpa2UgdmlkZW8g ZGVjb2RpbmcgYW5kCisrICogZW5jb2RpbmcgY2FuIGJlIHNwZWQgdXAgc2lnbmlmaWNhbnRseSB0 aHJvdWdoIHRoZSB1c2Ugb2YgYWxpZ25lZCBtZW1vcnkuCisrICoKKysgKiBIb3dldmVyLCBmb3Ig ZWFjaCBvZiBGRm1wZWcncyBhcHBsaWNhdGlvbnMgb2YgbWVtb3J5LCB0aGVyZSBtaWdodCBub3Qg YmUgYQorKyAqIHJlY29nbml6ZWQgb3Igc3RhbmRhcmRpemVkIEFQSSBmb3IgdGhhdCBzcGVjaWZp YyB1c2UuIE1lbW9yeSBhbGlnbm1lbnQsIGZvcgorKyAqIGluc3RhbmNlLCB2YXJpZXMgd2lsZGx5 IGRlcGVuZGluZyBvbiBvcGVyYXRpbmcgc3lzdGVtcywgYXJjaGl0ZWN0dXJlcywgYW5kCisrICog Y29tcGlsZXJzLiBIZW5jZSwgdGhpcyBjb21wb25lbnQgb2YgQHJlZiBsaWJhdnV0aWwgaXMgY3Jl YXRlZCB0byBtYWtlCisrICogZGVhbGluZyB3aXRoIG1lbW9yeSBjb25zaXN0ZW50bHkgcG9zc2li bGUgb24gYWxsIHBsYXRmb3Jtcy4KKysgKgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogQGRl Zmdyb3VwIGxhdnVfbWVtX2F0dHJzIEZ1bmN0aW9uIEF0dHJpYnV0ZXMKKysgKiBGdW5jdGlvbiBh dHRyaWJ1dGVzIGFwcGxpY2FibGUgdG8gbWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9ucy4KKysgKgor KyAqIFRoZXNlIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgY2FuIGhlbHAgY29tcGlsZXJzIGVtaXQgbW9y ZSB1c2VmdWwgd2FybmluZ3MsIG9yCisrICogZ2VuZXJhdGUgYmV0dGVyIGNvZGUuCisrICogQHsK KysgKi8KKysKKysvKioKKysgKiBAZGVmIGF2X21hbGxvY19hdHRyaWIKKysgKiBGdW5jdGlvbiBh dHRyaWJ1dGUgZGVub3RpbmcgYSBtYWxsb2MtbGlrZSBmdW5jdGlvbi4KKysgKgorKyAqIEBzZWUg PGEgaHJlZj0iaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db21tb24tRnVuY3Rp b24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibWFsbG9jXzAwN2QtZnVu Y3Rpb24tYXR0cmlidXRlLTMyNTEiPkZ1bmN0aW9uIGF0dHJpYnV0ZSBgbWFsbG9jYCBpbiBHQ0Mn cyBkb2N1bWVudGF0aW9uPC9hPgorKyAqLworKworKyNpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFT VCgzLDEpCisrICAgICNkZWZpbmUgYXZfbWFsbG9jX2F0dHJpYiBfX2F0dHJpYnV0ZV9fKChfX21h bGxvY19fKSkKKysjZWxzZQorKyAgICAjZGVmaW5lIGF2X21hbGxvY19hdHRyaWIKKysjZW5kaWYK KysKKysvKioKKysgKiBAZGVmIGF2X2FsbG9jX3NpemUoLi4uKQorKyAqIEZ1bmN0aW9uIGF0dHJp YnV0ZSB1c2VkIG9uIGEgZnVuY3Rpb24gdGhhdCBhbGxvY2F0ZXMgbWVtb3J5LCB3aG9zZSBzaXpl IGlzCisrICogZ2l2ZW4gYnkgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIocykuCisrICoKKysgKiBA Y29kZXsuY30KKysgKiB2b2lkICphdl9tYWxsb2Moc2l6ZV90IHNpemUpIGF2X2FsbG9jX3NpemUo MSk7CisrICogdm9pZCAqYXZfY2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpIGF2X2Fs bG9jX3NpemUoMSwgMik7CisrICogQGVuZGNvZGUKKysgKgorKyAqIEBwYXJhbSAuLi4gT25lIG9y IHR3byBwYXJhbWV0ZXIgaW5kZXhlcywgc2VwYXJhdGVkIGJ5IGEgY29tbWEKKysgKgorKyAqIEBz ZWUgPGEgaHJlZj0iaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db21tb24tRnVu Y3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxsb2NfMDA1ZnNp emVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMzIyMCI+RnVuY3Rpb24gYXR0cmlidXRlIGBhbGxv Y19zaXplYCBpbiBHQ0MncyBkb2N1bWVudGF0aW9uPC9hPgorKyAqLworKworKyNpZiBBVl9HQ0Nf VkVSU0lPTl9BVF9MRUFTVCg0LDMpCisrICAgICNkZWZpbmUgYXZfYWxsb2Nfc2l6ZSguLi4pIF9f YXR0cmlidXRlX18oKGFsbG9jX3NpemUoX19WQV9BUkdTX18pKSkKKysjZWxzZQorKyAgICAjZGVm aW5lIGF2X2FsbG9jX3NpemUoLi4uKQorKyNlbmRpZgorKworKy8qKgorKyAqIEB9CisrICovCisr CisrLyoqCisrICogQGRlZmdyb3VwIGxhdnVfbWVtX2Z1bmNzIEhlYXAgTWFuYWdlbWVudAorKyAq IEZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZywgZnJlZWluZywgYW5kIGNvcHlp bmcgbWVtb3J5LgorKyAqCisrICogQWxsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBoYXZl IGEgYnVpbHQtaW4gdXBwZXIgbGltaXQgb2YgYElOVF9NQVhgCisrICogYnl0ZXMuIFRoaXMgbWF5 IGJlIGNoYW5nZWQgd2l0aCBhdl9tYXhfYWxsb2MoKSwgYWx0aG91Z2ggZXhlcmNpc2UgZXh0cmVt ZQorKyAqIGNhdXRpb24gd2hlbiBkb2luZyBzby4KKysgKgorKyAqIEB7CisrICovCisrCisrLyoq CisrICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgd2l0aCBhbGlnbm1lbnQgc3VpdGFibGUgZm9y IGFsbCBtZW1vcnkgYWNjZXNzZXMKKysgKiAoaW5jbHVkaW5nIHZlY3RvcnMgaWYgYXZhaWxhYmxl IG9uIHRoZSBDUFUpLgorKyAqCisrICogQHBhcmFtIHNpemUgU2l6ZSBpbiBieXRlcyBmb3IgdGhl IG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQKKysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhl IGFsbG9jYXRlZCBibG9jaywgb3IgYE5VTExgIGlmIHRoZSBibG9jayBjYW5ub3QKKysgKiAgICAg ICAgIGJlIGFsbG9jYXRlZAorKyAqIEBzZWUgYXZfbWFsbG9jeigpCisrICovCisrdm9pZCAqYXZf bWFsbG9jKHNpemVfdCBzaXplKSBhdl9tYWxsb2NfYXR0cmliIGF2X2FsbG9jX3NpemUoMSk7Cisr CisrLyoqCisrICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgd2l0aCBhbGlnbm1lbnQgc3VpdGFi bGUgZm9yIGFsbCBtZW1vcnkgYWNjZXNzZXMKKysgKiAoaW5jbHVkaW5nIHZlY3RvcnMgaWYgYXZh aWxhYmxlIG9uIHRoZSBDUFUpIGFuZCB6ZXJvIGFsbCB0aGUgYnl0ZXMgb2YgdGhlCisrICogYmxv Y2suCisrICoKKysgKiBAcGFyYW0gc2l6ZSBTaXplIGluIGJ5dGVzIGZvciB0aGUgbWVtb3J5IGJs b2NrIHRvIGJlIGFsbG9jYXRlZAorKyAqIEByZXR1cm4gUG9pbnRlciB0byB0aGUgYWxsb2NhdGVk IGJsb2NrLCBvciBgTlVMTGAgaWYgaXQgY2Fubm90IGJlIGFsbG9jYXRlZAorKyAqIEBzZWUgYXZf bWFsbG9jKCkKKysgKi8KKyt2b2lkICphdl9tYWxsb2N6KHNpemVfdCBzaXplKSBhdl9tYWxsb2Nf YXR0cmliIGF2X2FsbG9jX3NpemUoMSk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBtZW1vcnkg YmxvY2sgZm9yIGFuIGFycmF5IHdpdGggYXZfbWFsbG9jKCkuCisrICoKKysgKiBUaGUgYWxsb2Nh dGVkIG1lbW9yeSB3aWxsIGhhdmUgc2l6ZSBgc2l6ZSAqIG5tZW1iYCBieXRlcy4KKysgKgorKyAq IEBwYXJhbSBubWVtYiBOdW1iZXIgb2YgZWxlbWVudAorKyAqIEBwYXJhbSBzaXplICBTaXplIG9m IGEgc2luZ2xlIGVsZW1lbnQKKysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBi bG9jaywgb3IgYE5VTExgIGlmIHRoZSBibG9jayBjYW5ub3QKKysgKiAgICAgICAgIGJlIGFsbG9j YXRlZAorKyAqIEBzZWUgYXZfbWFsbG9jKCkKKysgKi8KKythdl9hbGxvY19zaXplKDEsIDIpIHZv aWQgKmF2X21hbGxvY19hcnJheShzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKKysKKysvKioK KysgKiBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBmb3IgYW4gYXJyYXkgd2l0aCBhdl9tYWxsb2N6 KCkuCisrICoKKysgKiBUaGUgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGhhdmUgc2l6ZSBgc2l6ZSAq IG5tZW1iYCBieXRlcy4KKysgKgorKyAqIEBwYXJhbSBubWVtYiBOdW1iZXIgb2YgZWxlbWVudHMK KysgKiBAcGFyYW0gc2l6ZSAgU2l6ZSBvZiB0aGUgc2luZ2xlIGVsZW1lbnQKKysgKiBAcmV0dXJu IFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBibG9jaywgb3IgYE5VTExgIGlmIHRoZSBibG9jayBj YW5ub3QKKysgKiAgICAgICAgIGJlIGFsbG9jYXRlZAorKyAqCisrICogQHNlZSBhdl9tYWxsb2N6 KCkKKysgKiBAc2VlIGF2X21hbGxvY19hcnJheSgpCisrICovCisrdm9pZCAqYXZfY2FsbG9jKHNp emVfdCBubWVtYiwgc2l6ZV90IHNpemUpIGF2X21hbGxvY19hdHRyaWIgYXZfYWxsb2Nfc2l6ZSgx LCAyKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgb3IgZnJlZSBhIGJsb2Nr IG9mIG1lbW9yeS4KKysgKgorKyAqIElmIGBwdHJgIGlzIGBOVUxMYCBhbmQgYHNpemVgID4gMCwg YWxsb2NhdGUgYSBuZXcgYmxvY2suIE90aGVyd2lzZSwgZXhwYW5kIG9yCisrICogc2hyaW5rIHRo YXQgYmxvY2sgb2YgbWVtb3J5IGFjY29yZGluZyB0byBgc2l6ZWAuCisrICoKKysgKiBAcGFyYW0g cHRyICBQb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIGFscmVhZHkgYWxsb2NhdGVkIHdpdGgKKysg KiAgICAgICAgICAgICBhdl9yZWFsbG9jKCkgb3IgYE5VTExgCisrICogQHBhcmFtIHNpemUgU2l6 ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IGJsb2NrIHRvIGJlIGFsbG9jYXRlZCBvcgorKyAqICAg ICAgICAgICAgIHJlYWxsb2NhdGVkCisrICoKKysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gYSBuZXds eS1yZWFsbG9jYXRlZCBibG9jayBvciBgTlVMTGAgaWYgdGhlIGJsb2NrCisrICogICAgICAgICBj YW5ub3QgYmUgcmVhbGxvY2F0ZWQKKysgKgorKyAqIEB3YXJuaW5nIFVubGlrZSBhdl9tYWxsb2Mo KSwgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKKysgKiAgICAg ICAgICBjb3JyZWN0bHkgYWxpZ25lZC4gVGhlIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBmcmVl ZCBhZnRlciBldmVuCisrICogICAgICAgICAgaWYgc2l6ZSBpcyB6ZXJvLgorKyAqIEBzZWUgYXZf ZmFzdF9yZWFsbG9jKCkKKysgKiBAc2VlIGF2X3JlYWxsb2NwKCkKKysgKi8KKyt2b2lkICphdl9y ZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIGF2X2FsbG9jX3NpemUoMik7CisrCisrLyoq CisrICogQWxsb2NhdGUsIHJlYWxsb2NhdGUsIG9yIGZyZWUgYSBibG9jayBvZiBtZW1vcnkgdGhy b3VnaCBhIHBvaW50ZXIgdG8gYQorKyAqIHBvaW50ZXIuCisrICoKKysgKiBJZiBgKnB0cmAgaXMg YE5VTExgIGFuZCBgc2l6ZWAgPiAwLCBhbGxvY2F0ZSBhIG5ldyBibG9jay4gSWYgYHNpemVgIGlz CisrICogemVybywgZnJlZSB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgYCpwdHJgLiBP dGhlcndpc2UsIGV4cGFuZCBvcgorKyAqIHNocmluayB0aGF0IGJsb2NrIG9mIG1lbW9yeSBhY2Nv cmRpbmcgdG8gYHNpemVgLgorKyAqCisrICogQHBhcmFtW2luLG91dF0gcHRyICBQb2ludGVyIHRv IGEgcG9pbnRlciB0byBhIG1lbW9yeSBibG9jayBhbHJlYWR5IGFsbG9jYXRlZAorKyAqICAgICAg ICAgICAgICAgICAgICAgd2l0aCBhdl9yZWFsbG9jKCksIG9yIGEgcG9pbnRlciB0byBgTlVMTGAu IFRoZSBwb2ludGVyCisrICogICAgICAgICAgICAgICAgICAgICBpcyB1cGRhdGVkIG9uIHN1Y2Nl c3MsIG9yIGZyZWVkIG9uIGZhaWx1cmUuCisrICogQHBhcmFtW2luXSAgICAgc2l6ZSBTaXplIGlu IGJ5dGVzIGZvciB0aGUgbWVtb3J5IGJsb2NrIHRvIGJlIGFsbG9jYXRlZCBvcgorKyAqICAgICAg ICAgICAgICAgICAgICAgcmVhbGxvY2F0ZWQKKysgKgorKyAqIEByZXR1cm4gWmVybyBvbiBzdWNj ZXNzLCBhbiBBVkVSUk9SIGVycm9yIGNvZGUgb24gZmFpbHVyZQorKyAqCisrICogQHdhcm5pbmcg VW5saWtlIGF2X21hbGxvYygpLCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBub3QgZ3VhcmFudGVl ZCB0byBiZQorKyAqICAgICAgICAgIGNvcnJlY3RseSBhbGlnbmVkLgorKyAqLworK2F2X3dhcm5f dW51c2VkX3Jlc3VsdAorK2ludCBhdl9yZWFsbG9jcCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsK KysKKysvKioKKysgKiBBbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgb3IgZnJlZSBhIGJsb2NrIG9mIG1l bW9yeS4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBhdl9y ZWFsbG9jKCksIGV4Y2VwdDoKKysgKiAtIEl0IHRha2VzIHR3byBzaXplIGFyZ3VtZW50cyBhbmQg YWxsb2NhdGVzIGBuZWxlbSAqIGVsc2l6ZWAgYnl0ZXMsCisrICogICBhZnRlciBjaGVja2luZyB0 aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBsaWNhdGlvbiBmb3IgaW50ZWdlciBvdmVyZmxvdy4KKysg KiAtIEl0IGZyZWVzIHRoZSBpbnB1dCBibG9jayBpbiBjYXNlIG9mIGZhaWx1cmUsIHRodXMgYXZv aWRpbmcgdGhlIG1lbW9yeQorKyAqICAgbGVhayB3aXRoIHRoZSBjbGFzc2ljCisrICogICBAY29k ZXsuY30KKysgKiAgIGJ1ZiA9IHJlYWxsb2MoYnVmKTsKKysgKiAgIGlmICghYnVmKQorKyAqICAg ICAgIHJldHVybiAtMTsKKysgKiAgIEBlbmRjb2RlCisrICogICBwYXR0ZXJuLgorKyAqLworK3Zv aWQgKmF2X3JlYWxsb2NfZih2b2lkICpwdHIsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSk7 CisrCisrLyoqCisrICogQWxsb2NhdGUsIHJlYWxsb2NhdGUsIG9yIGZyZWUgYW4gYXJyYXkuCisr ICoKKysgKiBJZiBgcHRyYCBpcyBgTlVMTGAgYW5kIGBubWVtYmAgPiAwLCBhbGxvY2F0ZSBhIG5l dyBibG9jay4KKysgKgorKyAqIEBwYXJhbSBwdHIgICBQb2ludGVyIHRvIGEgbWVtb3J5IGJsb2Nr IGFscmVhZHkgYWxsb2NhdGVkIHdpdGgKKysgKiAgICAgICAgICAgICAgYXZfcmVhbGxvYygpIG9y IGBOVUxMYAorKyAqIEBwYXJhbSBubWVtYiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5 CisrICogQHBhcmFtIHNpemUgIFNpemUgb2YgdGhlIHNpbmdsZSBlbGVtZW50IG9mIHRoZSBhcnJh eQorKyAqCisrICogQHJldHVybiBQb2ludGVyIHRvIGEgbmV3bHktcmVhbGxvY2F0ZWQgYmxvY2sg b3IgTlVMTCBpZiB0aGUgYmxvY2sKKysgKiAgICAgICAgIGNhbm5vdCBiZSByZWFsbG9jYXRlZAor KyAqCisrICogQHdhcm5pbmcgVW5saWtlIGF2X21hbGxvYygpLCB0aGUgYWxsb2NhdGVkIG1lbW9y eSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQorKyAqICAgICAgICAgIGNvcnJlY3RseSBhbGlnbmVk LiBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkIGFmdGVyIGV2ZW4gaWYKKysgKiAg ICAgICAgICBubWVtYiBpcyB6ZXJvLgorKyAqIEBzZWUgYXZfcmVhbGxvY3BfYXJyYXkoKQorKyAq LworK2F2X2FsbG9jX3NpemUoMiwgMykgdm9pZCAqYXZfcmVhbGxvY19hcnJheSh2b2lkICpwdHIs IHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOworKworKy8qKgorKyAqIEFsbG9jYXRlLCByZWFs bG9jYXRlIGFuIGFycmF5IHRocm91Z2ggYSBwb2ludGVyIHRvIGEgcG9pbnRlci4KKysgKgorKyAq IElmIGAqcHRyYCBpcyBgTlVMTGAgYW5kIGBubWVtYmAgPiAwLCBhbGxvY2F0ZSBhIG5ldyBibG9j ay4KKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHB0ciAgIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRv IGEgbWVtb3J5IGJsb2NrIGFscmVhZHkKKysgKiAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0 ZWQgd2l0aCBhdl9yZWFsbG9jKCksIG9yIGEgcG9pbnRlciB0byBgTlVMTGAuCisrICogICAgICAg ICAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgaXMgdXBkYXRlZCBvbiBzdWNjZXNzLCBvciBmcmVl ZCBvbiBmYWlsdXJlLgorKyAqIEBwYXJhbVtpbl0gICAgIG5tZW1iIE51bWJlciBvZiBlbGVtZW50 cworKyAqIEBwYXJhbVtpbl0gICAgIHNpemUgIFNpemUgb2YgdGhlIHNpbmdsZSBlbGVtZW50Cisr ICoKKysgKiBAcmV0dXJuIFplcm8gb24gc3VjY2VzcywgYW4gQVZFUlJPUiBlcnJvciBjb2RlIG9u IGZhaWx1cmUKKysgKgorKyAqIEB3YXJuaW5nIFVubGlrZSBhdl9tYWxsb2MoKSwgdGhlIGFsbG9j YXRlZCBtZW1vcnkgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKKysgKiAgICAgICAgICBjb3JyZWN0 bHkgYWxpZ25lZC4gKnB0ciBtdXN0IGJlIGZyZWVkIGFmdGVyIGV2ZW4gaWYgbm1lbWIgaXMgemVy by4KKysgKi8KKytpbnQgYXZfcmVhbGxvY3BfYXJyYXkodm9pZCAqcHRyLCBzaXplX3Qgbm1lbWIs IHNpemVfdCBzaXplKTsKKysKKysvKioKKysgKiBSZWFsbG9jYXRlIHRoZSBnaXZlbiBidWZmZXIg aWYgaXQgaXMgbm90IGxhcmdlIGVub3VnaCwgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuCisrICoKKysg KiBJZiB0aGUgZ2l2ZW4gYnVmZmVyIGlzIGBOVUxMYCwgdGhlbiBhIG5ldyB1bmluaXRpYWxpemVk IGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisrICoKKysgKiBJZiB0aGUgZ2l2ZW4gYnVmZmVyIGlzIG5v dCBsYXJnZSBlbm91Z2gsIGFuZCByZWFsbG9jYXRpb24gZmFpbHMsIGBOVUxMYCBpcworKyAqIHJl dHVybmVkIGFuZCBgKnNpemVgIGlzIHNldCB0byAwLCBidXQgdGhlIG9yaWdpbmFsIGJ1ZmZlciBp cyBub3QgY2hhbmdlZCBvcgorKyAqIGZyZWVkLgorKyAqCisrICogQSB0eXBpY2FsIHVzZSBwYXR0 ZXJuIGZvbGxvd3M6CisrICoKKysgKiBAY29kZXsuY30KKysgKiB1aW50OF90ICpidWYgPSAuLi47 CisrICogdWludDhfdCAqbmV3X2J1ZiA9IGF2X2Zhc3RfcmVhbGxvYyhidWYsICZjdXJyZW50X3Np emUsIHNpemVfbmVlZGVkKTsKKysgKiBpZiAoIW5ld19idWYpIHsKKysgKiAgICAgLy8gQWxsb2Nh dGlvbiBmYWlsZWQ7IGNsZWFuIHVwIG9yaWdpbmFsIGJ1ZmZlcgorKyAqICAgICBhdl9mcmVlcCgm YnVmKTsKKysgKiAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKysgKiB9CisrICogQGVuZGNv ZGUKKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHB0ciAgICAgIEFscmVhZHkgYWxsb2NhdGVkIGJ1 ZmZlciwgb3IgYE5VTExgCisrICogQHBhcmFtW2luLG91dF0gc2l6ZSAgICAgUG9pbnRlciB0byB0 aGUgc2l6ZSBvZiBidWZmZXIgYHB0cmAuIGAqc2l6ZWAgaXMKKysgKiAgICAgICAgICAgICAgICAg ICAgICAgICB1cGRhdGVkIHRvIHRoZSBuZXcgYWxsb2NhdGVkIHNpemUsIGluIHBhcnRpY3VsYXIg MAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGluIGNhc2Ugb2YgZmFpbHVyZS4KKysgKiBA cGFyYW1baW5dICAgICBtaW5fc2l6ZSBEZXNpcmVkIG1pbmltYWwgc2l6ZSBvZiBidWZmZXIgYHB0 cmAKKysgKiBAcmV0dXJuIGBwdHJgIGlmIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLCBhIHBv aW50ZXIgdG8gbmV3bHkgcmVhbGxvY2F0ZWQKKysgKiAgICAgICAgIGJ1ZmZlciBpZiB0aGUgYnVm ZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCBvciBgTlVMTGAgaW4gY2FzZSBvZgorKyAqICAgICAg ICAgZXJyb3IKKysgKiBAc2VlIGF2X3JlYWxsb2MoKQorKyAqIEBzZWUgYXZfZmFzdF9tYWxsb2Mo KQorKyAqLworK3ZvaWQgKmF2X2Zhc3RfcmVhbGxvYyh2b2lkICpwdHIsIHVuc2lnbmVkIGludCAq c2l6ZSwgc2l6ZV90IG1pbl9zaXplKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIGJ1ZmZlciwg cmV1c2luZyB0aGUgZ2l2ZW4gb25lIGlmIGxhcmdlIGVub3VnaC4KKysgKgorKyAqIENvbnRyYXJ5 IHRvIGF2X2Zhc3RfcmVhbGxvYygpLCB0aGUgY3VycmVudCBidWZmZXIgY29udGVudHMgbWlnaHQg bm90IGJlCisrICogcHJlc2VydmVkIGFuZCBvbiBlcnJvciB0aGUgb2xkIGJ1ZmZlciBpcyBmcmVl ZCwgdGh1cyBubyBzcGVjaWFsIGhhbmRsaW5nIHRvCisrICogYXZvaWQgbWVtbGVha3MgaXMgbmVj ZXNzYXJ5LgorKyAqCisrICogYCpwdHJgIGlzIGFsbG93ZWQgdG8gYmUgYE5VTExgLCBpbiB3aGlj aCBjYXNlIGFsbG9jYXRpb24gYWx3YXlzIGhhcHBlbnMgaWYKKysgKiBgc2l6ZV9uZWVkZWRgIGlz IGdyZWF0ZXIgdGhhbiAwLgorKyAqCisrICogQGNvZGV7LmN9CisrICogdWludDhfdCAqYnVmID0g Li4uOworKyAqIGF2X2Zhc3RfbWFsbG9jKCZidWYsICZjdXJyZW50X3NpemUsIHNpemVfbmVlZGVk KTsKKysgKiBpZiAoIWJ1ZikgeworKyAqICAgICAvLyBBbGxvY2F0aW9uIGZhaWxlZDsgYnVmIGFs cmVhZHkgZnJlZWQKKysgKiAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKysgKiB9CisrICog QGVuZGNvZGUKKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHB0ciAgICAgIFBvaW50ZXIgdG8gcG9p bnRlciB0byBhbiBhbHJlYWR5IGFsbG9jYXRlZCBidWZmZXIuCisrICogICAgICAgICAgICAgICAg ICAgICAgICAgYCpwdHJgIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBwb2ludGVyIHRvIG5ldwor KyAqICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBvbiBzdWNjZXNzIG9yIGBOVUxMYCBv biBmYWlsdXJlCisrICogQHBhcmFtW2luLG91dF0gc2l6ZSAgICAgUG9pbnRlciB0byB0aGUgc2l6 ZSBvZiBidWZmZXIgYCpwdHJgLiBgKnNpemVgIGlzCisrICogICAgICAgICAgICAgICAgICAgICAg ICAgdXBkYXRlZCB0byB0aGUgbmV3IGFsbG9jYXRlZCBzaXplLCBpbiBwYXJ0aWN1bGFyIDAKKysg KiAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIG9mIGZhaWx1cmUuCisrICogQHBhcmFt W2luXSAgICAgbWluX3NpemUgRGVzaXJlZCBtaW5pbWFsIHNpemUgb2YgYnVmZmVyIGAqcHRyYAor KyAqIEBzZWUgYXZfcmVhbGxvYygpCisrICogQHNlZSBhdl9mYXN0X21hbGxvY3ooKQorKyAqLwor K3ZvaWQgYXZfZmFzdF9tYWxsb2Modm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgKnNpemUsIHNpemVf dCBtaW5fc2l6ZSk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW5kIGNsZWFyIGEgYnVmZmVyLCBy ZXVzaW5nIHRoZSBnaXZlbiBvbmUgaWYgbGFyZ2UgZW5vdWdoLgorKyAqCisrICogTGlrZSBhdl9m YXN0X21hbGxvYygpLCBidXQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzcGFjZSBpcyBpbml0aWFsbHkg Y2xlYXJlZC4KKysgKiBSZXVzZWQgYnVmZmVyIGlzIG5vdCBjbGVhcmVkLgorKyAqCisrICogYCpw dHJgIGlzIGFsbG93ZWQgdG8gYmUgYE5VTExgLCBpbiB3aGljaCBjYXNlIGFsbG9jYXRpb24gYWx3 YXlzIGhhcHBlbnMgaWYKKysgKiBgc2l6ZV9uZWVkZWRgIGlzIGdyZWF0ZXIgdGhhbiAwLgorKyAq CisrICogQHBhcmFtW2luLG91dF0gcHRyICAgICAgUG9pbnRlciB0byBwb2ludGVyIHRvIGFuIGFs cmVhZHkgYWxsb2NhdGVkIGJ1ZmZlci4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBgKnB0 cmAgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHBvaW50ZXIgdG8gbmV3CisrICogICAgICAgICAg ICAgICAgICAgICAgICAgYnVmZmVyIG9uIHN1Y2Nlc3Mgb3IgYE5VTExgIG9uIGZhaWx1cmUKKysg KiBAcGFyYW1baW4sb3V0XSBzaXplICAgICBQb2ludGVyIHRvIHRoZSBzaXplIG9mIGJ1ZmZlciBg KnB0cmAuIGAqc2l6ZWAgaXMKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIHRv IHRoZSBuZXcgYWxsb2NhdGVkIHNpemUsIGluIHBhcnRpY3VsYXIgMAorKyAqICAgICAgICAgICAg ICAgICAgICAgICAgIGluIGNhc2Ugb2YgZmFpbHVyZS4KKysgKiBAcGFyYW1baW5dICAgICBtaW5f c2l6ZSBEZXNpcmVkIG1pbmltYWwgc2l6ZSBvZiBidWZmZXIgYCpwdHJgCisrICogQHNlZSBhdl9m YXN0X21hbGxvYygpCisrICovCisrdm9pZCBhdl9mYXN0X21hbGxvY3oodm9pZCAqcHRyLCB1bnNp Z25lZCBpbnQgKnNpemUsIHNpemVfdCBtaW5fc2l6ZSk7CisrCisrLyoqCisrICogRnJlZSBhIG1l bW9yeSBibG9jayB3aGljaCBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aCBhIGZ1bmN0aW9uIG9mIGF2 X21hbGxvYygpCisrICogb3IgYXZfcmVhbGxvYygpIGZhbWlseS4KKysgKgorKyAqIEBwYXJhbSBw dHIgUG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIHdoaWNoIHNob3VsZCBiZSBmcmVlZC4KKysg KgorKyAqIEBub3RlIGBwdHIgPSBOVUxMYCBpcyBleHBsaWNpdGx5IGFsbG93ZWQuCisrICogQG5v dGUgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGF2X2ZyZWVwKCkgaW5zdGVhZCwgdG8g cHJldmVudCBsZWF2aW5nCisrICogICAgICAgYmVoaW5kIGRhbmdsaW5nIHBvaW50ZXJzLgorKyAq IEBzZWUgYXZfZnJlZXAoKQorKyAqLworK3ZvaWQgYXZfZnJlZSh2b2lkICpwdHIpOworKworKy8q KgorKyAqIEZyZWUgYSBtZW1vcnkgYmxvY2sgd2hpY2ggaGFzIGJlZW4gYWxsb2NhdGVkIHdpdGgg YSBmdW5jdGlvbiBvZiBhdl9tYWxsb2MoKQorKyAqIG9yIGF2X3JlYWxsb2MoKSBmYW1pbHksIGFu ZCBzZXQgdGhlIHBvaW50ZXIgcG9pbnRpbmcgdG8gaXQgdG8gYE5VTExgLgorKyAqCisrICogQGNv ZGV7LmN9CisrICogdWludDhfdCAqYnVmID0gYXZfbWFsbG9jKDE2KTsKKysgKiBhdl9mcmVlKGJ1 Zik7CisrICogLy8gYnVmIG5vdyBjb250YWlucyBhIGRhbmdsaW5nIHBvaW50ZXIgdG8gZnJlZWQg bWVtb3J5LCBhbmQgYWNjaWRlbnRhbAorKyAqIC8vIGRlcmVmZXJlbmNlIG9mIGJ1ZiB3aWxsIHJl c3VsdCBpbiBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCBtYXkgYmUgYQorKyAqIC8vIHNlY3VyaXR5 IHJpc2suCisrICoKKysgKiB1aW50OF90ICpidWYgPSBhdl9tYWxsb2MoMTYpOworKyAqIGF2X2Zy ZWVwKCZidWYpOworKyAqIC8vIGJ1ZiBpcyBub3cgTlVMTCwgYW5kIGFjY2lkZW50YWwgZGVyZWZl cmVuY2Ugd2lsbCBvbmx5IHJlc3VsdCBpbiBhCisrICogLy8gTlVMTC1wb2ludGVyIGRlcmVmZXJl bmNlLgorKyAqIEBlbmRjb2RlCisrICoKKysgKiBAcGFyYW0gcHRyIFBvaW50ZXIgdG8gdGhlIHBv aW50ZXIgdG8gdGhlIG1lbW9yeSBibG9jayB3aGljaCBzaG91bGQgYmUgZnJlZWQKKysgKiBAbm90 ZSBgKnB0ciA9IE5VTExgIGlzIHNhZmUgYW5kIGxlYWRzIHRvIG5vIGFjdGlvbi4KKysgKiBAc2Vl IGF2X2ZyZWUoKQorKyAqLworK3ZvaWQgYXZfZnJlZXAodm9pZCAqcHRyKTsKKysKKysvKioKKysg KiBEdXBsaWNhdGUgYSBzdHJpbmcuCisrICoKKysgKiBAcGFyYW0gcyBTdHJpbmcgdG8gYmUgZHVw bGljYXRlZAorKyAqIEByZXR1cm4gUG9pbnRlciB0byBhIG5ld2x5LWFsbG9jYXRlZCBzdHJpbmcg Y29udGFpbmluZyBhCisrICogICAgICAgICBjb3B5IG9mIGBzYCBvciBgTlVMTGAgaWYgdGhlIHN0 cmluZyBjYW5ub3QgYmUgYWxsb2NhdGVkCisrICogQHNlZSBhdl9zdHJuZHVwKCkKKysgKi8KKytj aGFyICphdl9zdHJkdXAoY29uc3QgY2hhciAqcykgYXZfbWFsbG9jX2F0dHJpYjsKKysKKysvKioK KysgKiBEdXBsaWNhdGUgYSBzdWJzdHJpbmcgb2YgYSBzdHJpbmcuCisrICoKKysgKiBAcGFyYW0g cyAgIFN0cmluZyB0byBiZSBkdXBsaWNhdGVkCisrICogQHBhcmFtIGxlbiBNYXhpbXVtIGxlbmd0 aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyAobm90IGNvdW50aW5nIHRoZQorKyAqICAgICAgICAg ICAgdGVybWluYXRpbmcgYnl0ZSkKKysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gYSBuZXdseS1hbGxv Y2F0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgYQorKyAqICAgICAgICAgc3Vic3RyaW5nIG9mIGBzYCBv ciBgTlVMTGAgaWYgdGhlIHN0cmluZyBjYW5ub3QgYmUgYWxsb2NhdGVkCisrICovCisrY2hhciAq YXZfc3RybmR1cChjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKSBhdl9tYWxsb2NfYXR0cmliOwor KworKy8qKgorKyAqIER1cGxpY2F0ZSBhIGJ1ZmZlciB3aXRoIGF2X21hbGxvYygpLgorKyAqCisr ICogQHBhcmFtIHAgICAgQnVmZmVyIHRvIGJlIGR1cGxpY2F0ZWQKKysgKiBAcGFyYW0gc2l6ZSBT aXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgY29waWVkCisrICogQHJldHVybiBQb2ludGVyIHRv IGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIGEKKysgKiAgICAgICAgIGNvcHkg b2YgYHBgIG9yIGBOVUxMYCBpZiB0aGUgYnVmZmVyIGNhbm5vdCBiZSBhbGxvY2F0ZWQKKysgKi8K Kyt2b2lkICphdl9tZW1kdXAoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOworKworKy8qKgor KyAqIE92ZXJsYXBwaW5nIG1lbWNweSgpIGltcGxlbWVudGF0aW9uLgorKyAqCisrICogQHBhcmFt IGRzdCAgRGVzdGluYXRpb24gYnVmZmVyCisrICogQHBhcmFtIGJhY2sgTnVtYmVyIG9mIGJ5dGVz IGJhY2sgdG8gc3RhcnQgY29weWluZyAoaS5lLiB0aGUgaW5pdGlhbCBzaXplIG9mCisrICogICAg ICAgICAgICAgdGhlIG92ZXJsYXBwaW5nIHdpbmRvdyk7IG11c3QgYmUgPiAwCisrICogQHBhcmFt IGNudCAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHk7IG11c3QgYmUgPj0gMAorKyAqCisrICogQG5v dGUgYGNudCA+IGJhY2tgIGlzIHZhbGlkLCB0aGlzIHdpbGwgY29weSB0aGUgYnl0ZXMgd2UganVz dCBjb3BpZWQsCisrICogICAgICAgdGh1cyBjcmVhdGluZyBhIHJlcGVhdGluZyBwYXR0ZXJuIHdp dGggYSBwZXJpb2QgbGVuZ3RoIG9mIGBiYWNrYC4KKysgKi8KKyt2b2lkIGF2X21lbWNweV9iYWNr cHRyKHVpbnQ4X3QgKmRzdCwgaW50IGJhY2ssIGludCBjbnQpOworKworKy8qKgorKyAqIEB9Cisr ICovCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdnVfbWVtX2R5bmFycmF5IER5bmFtaWMgQXJy YXkKKysgKgorKyAqIFV0aWxpdGllcyB0byBtYWtlIGFuIGFycmF5IGdyb3cgd2hlbiBuZWVkZWQu CisrICoKKysgKiBTb21ldGltZXMsIHRoZSBwcm9ncmFtbWVyIHdvdWxkIHdhbnQgdG8gaGF2ZSBh biBhcnJheSB0aGF0IGNhbiBncm93IHdoZW4KKysgKiBuZWVkZWQuIFRoZSBsaWJhdnV0aWwgZHlu YW1pYyBhcnJheSB1dGlsaXRpZXMgZmlsbCB0aGF0IG5lZWQuCisrICoKKysgKiBsaWJhdnV0aWwg c3VwcG9ydHMgdHdvIHN5c3RlbXMgb2YgYXBwZW5kaW5nIGVsZW1lbnRzIG9udG8gYSBkeW5hbWlj YWxseQorKyAqIGFsbG9jYXRlZCBhcnJheSwgdGhlIGZpcnN0IG9uZSBzdG9yaW5nIHRoZSBwb2lu dGVyIHRvIHRoZSB2YWx1ZSBpbiB0aGUKKysgKiBhcnJheSwgYW5kIHRoZSBzZWNvbmQgc3Rvcmlu ZyB0aGUgdmFsdWUgZGlyZWN0bHkuIEluIGJvdGggc3lzdGVtcywgdGhlCisrICogY2FsbGVyIGlz IHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGxl bmd0aCBvZgorKyAqIHRoZSBhcnJheSwgYXMgd2VsbCBhcyBmcmVlaW5nIG9mIHRoZSBhcnJheSBh ZnRlciB1c2UuCisrICoKKysgKiBUaGUgZmlyc3Qgc3lzdGVtIHN0b3JlcyBwb2ludGVycyB0byB2 YWx1ZXMgaW4gYSBibG9jayBvZiBkeW5hbWljYWxseQorKyAqIGFsbG9jYXRlZCBtZW1vcnkuIFNp bmNlIG9ubHkgcG9pbnRlcnMgYXJlIHN0b3JlZCwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQK KysgKiB0byBrbm93IHRoZSBzaXplIG9mIHRoZSB0eXBlLiBCb3RoIGF2X2R5bmFycmF5X2FkZCgp IGFuZAorKyAqIGF2X2R5bmFycmF5X2FkZF9ub2ZyZWUoKSBpbXBsZW1lbnQgdGhpcyBzeXN0ZW0u CisrICoKKysgKiBAY29kZQorKyAqIHR5cGUgKiphcnJheSA9IE5VTEw7IC8vPCBhbiBhcnJheSBv ZiBwb2ludGVycyB0byB2YWx1ZXMKKysgKiBpbnQgICAgbmIgICAgPSAwOyAgICAvLzwgYSB2YXJp YWJsZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5CisrICoKKysgKiB0 eXBlIHRvX2JlX2FkZGVkICA9IC4uLjsKKysgKiB0eXBlIHRvX2JlX2FkZGVkMiA9IC4uLjsKKysg KgorKyAqIGF2X2R5bmFycmF5X2FkZCgmYXJyYXksICZuYiwgJnRvX2JlX2FkZGVkKTsKKysgKiBp ZiAobmIgPT0gMCkKKysgKiAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKysgKgorKyAqIGF2 X2R5bmFycmF5X2FkZCgmYXJyYXksICZuYiwgJnRvX2JlX2FkZGVkMik7CisrICogaWYgKG5iID09 IDApCisrICogICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisrICoKKysgKiAvLyBOb3c6Cisr ICogLy8gIG5iICAgICAgICAgICA9PSAyCisrICogLy8gJnRvX2JlX2FkZGVkICA9PSBhcnJheVsw XQorKyAqIC8vICZ0b19iZV9hZGRlZDIgPT0gYXJyYXlbMV0KKysgKgorKyAqIGF2X2ZyZWVwKCZh cnJheSk7CisrICogQGVuZGNvZGUKKysgKgorKyAqIFRoZSBzZWNvbmQgc3lzdGVtIHN0b3JlcyB0 aGUgdmFsdWUgZGlyZWN0bHkgaW4gYSBibG9jayBvZiBtZW1vcnkuIEFzIGEKKysgKiByZXN1bHQs IHRoZSBmdW5jdGlvbiBoYXMgdG8ga25vdyB0aGUgc2l6ZSBvZiB0aGUgdHlwZS4gYXZfZHluYXJy YXkyX2FkZCgpCisrICogaW1wbGVtZW50cyB0aGlzIG1lY2hhbmlzbS4KKysgKgorKyAqIEBjb2Rl CisrICogdHlwZSAqYXJyYXkgPSBOVUxMOyAvLzwgYW4gYXJyYXkgb2YgdmFsdWVzCisrICogaW50 ICAgbmIgICAgPSAwOyAgICAvLzwgYSB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBsZW5n dGggb2YgdGhlIGFycmF5CisrICoKKysgKiB0eXBlIHRvX2JlX2FkZGVkICA9IC4uLjsKKysgKiB0 eXBlIHRvX2JlX2FkZGVkMiA9IC4uLjsKKysgKgorKyAqIHR5cGUgKmFkZHIgPSBhdl9keW5hcnJh eTJfYWRkKCh2b2lkICoqKSZhcnJheSwgJm5iLCBzaXplb2YoKmFycmF5KSwgTlVMTCk7CisrICog aWYgKCFhZGRyKQorKyAqICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworKyAqIG1lbWNweShh ZGRyLCAmdG9fYmVfYWRkZWQsIHNpemVvZih0b19iZV9hZGRlZCkpOworKyAqCisrICogLy8gU2hv cnRjdXQgb2YgdGhlIGFib3ZlLgorKyAqIHR5cGUgKmFkZHIgPSBhdl9keW5hcnJheTJfYWRkKCh2 b2lkICoqKSZhcnJheSwgJm5iLCBzaXplb2YoKmFycmF5KSwKKysgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSZ0b19iZV9hZGRlZDIpOworKyAqIGlmICghYWRk cikKKysgKiAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKysgKgorKyAqIC8vIE5vdzoKKysg KiAvLyAgbmIgICAgICAgICAgID09IDIKKysgKiAvLyAgdG9fYmVfYWRkZWQgID09IGFycmF5WzBd CisrICogLy8gIHRvX2JlX2FkZGVkMiA9PSBhcnJheVsxXQorKyAqCisrICogYXZfZnJlZXAoJmFy cmF5KTsKKysgKiBAZW5kY29kZQorKyAqCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBBZGQg dGhlIHBvaW50ZXIgdG8gYW4gZWxlbWVudCB0byBhIGR5bmFtaWMgYXJyYXkuCisrICoKKysgKiBU aGUgYXJyYXkgdG8gZ3JvdyBpcyBzdXBwb3NlZCB0byBiZSBhbiBhcnJheSBvZiBwb2ludGVycyB0 bworKyAqIHN0cnVjdHVyZXMsIGFuZCB0aGUgZWxlbWVudCB0byBhZGQgbXVzdCBiZSBhIHBvaW50 ZXIgdG8gYW4gYWxyZWFkeQorKyAqIGFsbG9jYXRlZCBzdHJ1Y3R1cmUuCisrICoKKysgKiBUaGUg YXJyYXkgaXMgcmVhbGxvY2F0ZWQgd2hlbiBpdHMgc2l6ZSByZWFjaGVzIHBvd2VycyBvZiAyLgor KyAqIFRoZXJlZm9yZSwgdGhlIGFtb3J0aXplZCBjb3N0IG9mIGFkZGluZyBhbiBlbGVtZW50IGlz IGNvbnN0YW50LgorKyAqCisrICogSW4gY2FzZSBvZiBzdWNjZXNzLCB0aGUgcG9pbnRlciB0byB0 aGUgYXJyYXkgaXMgdXBkYXRlZCBpbiBvcmRlciB0bworKyAqIHBvaW50IHRvIHRoZSBuZXcgZ3Jv d24gYXJyYXksIGFuZCB0aGUgbnVtYmVyIHBvaW50ZWQgdG8gYnkgYG5iX3B0cmAKKysgKiBpcyBp bmNyZW1lbnRlZC4KKysgKiBJbiBjYXNlIG9mIGZhaWx1cmUsIHRoZSBhcnJheSBpcyBmcmVlZCwg YCp0YWJfcHRyYCBpcyBzZXQgdG8gYE5VTExgIGFuZAorKyAqIGAqbmJfcHRyYCBpcyBzZXQgdG8g MC4KKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHRhYl9wdHIgUG9pbnRlciB0byB0aGUgYXJyYXkg dG8gZ3JvdworKyAqIEBwYXJhbVtpbixvdXRdIG5iX3B0ciAgUG9pbnRlciB0byB0aGUgbnVtYmVy IG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQorKyAqIEBwYXJhbVtpbl0gICAgIGVsZW0gICAgRWxl bWVudCB0byBhZGQKKysgKiBAc2VlIGF2X2R5bmFycmF5X2FkZF9ub2ZyZWUoKSwgYXZfZHluYXJy YXkyX2FkZCgpCisrICovCisrdm9pZCBhdl9keW5hcnJheV9hZGQodm9pZCAqdGFiX3B0ciwgaW50 ICpuYl9wdHIsIHZvaWQgKmVsZW0pOworKworKy8qKgorKyAqIEFkZCBhbiBlbGVtZW50IHRvIGEg ZHluYW1pYyBhcnJheS4KKysgKgorKyAqIEZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFs aXR5IGFzIGF2X2R5bmFycmF5X2FkZCgpLAorKyAqIGJ1dCBpdCBkb2Vzbid0IGZyZWUgbWVtb3J5 IG9uIGZhaWxzLiBJdCByZXR1cm5zIGVycm9yIGNvZGUKKysgKiBpbnN0ZWFkIGFuZCBsZWF2ZSBj dXJyZW50IGJ1ZmZlciB1bnRvdWNoZWQuCisrICoKKysgKiBAcmV0dXJuID49MCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBvdGhlcndpc2UKKysgKiBAc2VlIGF2X2R5bmFycmF5X2FkZCgpLCBhdl9keW5h cnJheTJfYWRkKCkKKysgKi8KKythdl93YXJuX3VudXNlZF9yZXN1bHQKKytpbnQgYXZfZHluYXJy YXlfYWRkX25vZnJlZSh2b2lkICp0YWJfcHRyLCBpbnQgKm5iX3B0ciwgdm9pZCAqZWxlbSk7Cisr CisrLyoqCisrICogQWRkIGFuIGVsZW1lbnQgb2Ygc2l6ZSBgZWxlbV9zaXplYCB0byBhIGR5bmFt aWMgYXJyYXkuCisrICoKKysgKiBUaGUgYXJyYXkgaXMgcmVhbGxvY2F0ZWQgd2hlbiBpdHMgbnVt YmVyIG9mIGVsZW1lbnRzIHJlYWNoZXMgcG93ZXJzIG9mIDIuCisrICogVGhlcmVmb3JlLCB0aGUg YW1vcnRpemVkIGNvc3Qgb2YgYWRkaW5nIGFuIGVsZW1lbnQgaXMgY29uc3RhbnQuCisrICoKKysg KiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSBwb2ludGVyIHRvIHRoZSBhcnJheSBpcyB1cGRhdGVk IGluIG9yZGVyIHRvCisrICogcG9pbnQgdG8gdGhlIG5ldyBncm93biBhcnJheSwgYW5kIHRoZSBu dW1iZXIgcG9pbnRlZCB0byBieSBgbmJfcHRyYAorKyAqIGlzIGluY3JlbWVudGVkLgorKyAqIElu IGNhc2Ugb2YgZmFpbHVyZSwgdGhlIGFycmF5IGlzIGZyZWVkLCBgKnRhYl9wdHJgIGlzIHNldCB0 byBgTlVMTGAgYW5kCisrICogYCpuYl9wdHJgIGlzIHNldCB0byAwLgorKyAqCisrICogQHBhcmFt W2luLG91dF0gdGFiX3B0ciAgIFBvaW50ZXIgdG8gdGhlIGFycmF5IHRvIGdyb3cKKysgKiBAcGFy YW1baW4sb3V0XSBuYl9wdHIgICAgUG9pbnRlciB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlu IHRoZSBhcnJheQorKyAqIEBwYXJhbVtpbl0gICAgIGVsZW1fc2l6ZSBTaXplIGluIGJ5dGVzIG9m IGFuIGVsZW1lbnQgaW4gdGhlIGFycmF5CisrICogQHBhcmFtW2luXSAgICAgZWxlbV9kYXRhIFBv aW50ZXIgdG8gdGhlIGRhdGEgb2YgdGhlIGVsZW1lbnQgdG8gYWRkLiBJZgorKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICBgTlVMTGAsIHRoZSBzcGFjZSBvZiB0aGUgbmV3bHkgYWRkZWQgZWxl bWVudCBpcworKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgYnV0IGxlZnQg dW5pbml0aWFsaXplZC4KKysgKgorKyAqIEByZXR1cm4gUG9pbnRlciB0byB0aGUgZGF0YSBvZiB0 aGUgZWxlbWVudCB0byBjb3B5IGluIHRoZSBuZXdseSBhbGxvY2F0ZWQKKysgKiAgICAgICAgIHNw YWNlCisrICogQHNlZSBhdl9keW5hcnJheV9hZGQoKSwgYXZfZHluYXJyYXlfYWRkX25vZnJlZSgp CisrICovCisrdm9pZCAqYXZfZHluYXJyYXkyX2FkZCh2b2lkICoqdGFiX3B0ciwgaW50ICpuYl9w dHIsIHNpemVfdCBlbGVtX3NpemUsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90ICplbGVtX2RhdGEpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisrICogQGRl Zmdyb3VwIGxhdnVfbWVtX21pc2MgTWlzY2VsbGFuZW91cyBGdW5jdGlvbnMKKysgKgorKyAqIE90 aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAqCisrICogQHsK KysgKi8KKysKKysvKioKKysgKiBNdWx0aXBseSB0d28gYHNpemVfdGAgdmFsdWVzIGNoZWNraW5n IGZvciBvdmVyZmxvdy4KKysgKgorKyAqIEBwYXJhbVtpbl0gIGEgICBPcGVyYW5kIG9mIG11bHRp cGxpY2F0aW9uCisrICogQHBhcmFtW2luXSAgYiAgIE9wZXJhbmQgb2YgbXVsdGlwbGljYXRpb24K KysgKiBAcGFyYW1bb3V0XSByICAgUG9pbnRlciB0byB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRp b24KKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgQVZFUlJPUihFSU5WQUwpIG9uIG92ZXJmbG93 CisrICovCisraW50IGF2X3NpemVfbXVsdChzaXplX3QgYSwgc2l6ZV90IGIsIHNpemVfdCAqcik7 CisrCisrLyoqCisrICogU2V0IHRoZSBtYXhpbXVtIHNpemUgdGhhdCBtYXkgYmUgYWxsb2NhdGVk IGluIG9uZSBibG9jay4KKysgKgorKyAqIFRoZSB2YWx1ZSBzcGVjaWZpZWQgd2l0aCB0aGlzIGZ1 bmN0aW9uIGlzIGVmZmVjdGl2ZSBmb3IgYWxsIGxpYmF2dXRpbCdzIEByZWYKKysgKiBsYXZ1X21l bV9mdW5jcyAiaGVhcCBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4iCisrICoKKysgKiBCeSBkZWZhdWx0 LCB0aGUgbWF4IHZhbHVlIGlzIGRlZmluZWQgYXMgYElOVF9NQVhgLgorKyAqCisrICogQHBhcmFt IG1heCBWYWx1ZSB0byBiZSBzZXQgYXMgdGhlIG5ldyBtYXhpbXVtIHNpemUKKysgKgorKyAqIEB3 YXJuaW5nIEV4ZXJjaXNlIGV4dHJlbWUgY2F1dGlvbiB3aGVuIHVzaW5nIHRoaXMgZnVuY3Rpb24u IERvbid0IHRvdWNoCisrICogICAgICAgICAgdGhpcyBpZiB5b3UgZG8gbm90IHVuZGVyc3RhbmQg dGhlIGZ1bGwgY29uc2VxdWVuY2Ugb2YgZG9pbmcgc28uCisrICovCisrdm9pZCBhdl9tYXhfYWxs b2Moc2l6ZV90IG1heCk7CisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLworKworKyNlbmRp ZiAvKiBBVlVUSUxfTUVNX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9vcHQuaC5mZm1wZWc5IE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9vcHQuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9vcHQuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6 MjM6NDcuNjc4MjkwMDQxICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL29wdC5oCTIwMjYtMDktMDcgMTI6 MjM6NDcuNjc3OTg2NjUyICswMjAwCitAQCAtMCwwICsxLDExNjAgQEAKKysvKgorKyAqIEFWT3B0 aW9ucworKyAqIGNvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVs bmlAZ214LmF0PgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisr ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfT1BUX0gKKysjZGVmaW5lIEFWVVRJTF9PUFRf SAorKworKy8qKgorKyAqIEBmaWxlCisrICogQVZPcHRpb25zCisrICovCisrCisrI2luY2x1ZGUg InJhdGlvbmFsLmgiCisrI2luY2x1ZGUgImNoYW5uZWxfbGF5b3V0LmgiCisrI2luY2x1ZGUgImRp Y3QuaCIKKysjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1ZGUgInBpeGZtdC5oIgorKyNpbmNsdWRl ICJzYW1wbGVmbXQuaCIKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgYXZvcHRpb25zIEFWT3B0aW9u cworKyAqIEBpbmdyb3VwIGxhdnVfZGF0YQorKyAqIEB7CisrICogQVZPcHRpb25zIHByb3ZpZGUg YSBnZW5lcmljIHN5c3RlbSB0byBkZWNsYXJlIG9wdGlvbnMgb24gYXJiaXRyYXJ5IHN0cnVjdHMK KysgKiAoIm9iamVjdHMiKS4gQW4gb3B0aW9uIGNhbiBoYXZlIGEgaGVscCB0ZXh0LCBhIHR5cGUg YW5kIGEgcmFuZ2Ugb2YgcG9zc2libGUKKysgKiB2YWx1ZXMuIE9wdGlvbnMgbWF5IHRoZW4gYmUg ZW51bWVyYXRlZCwgcmVhZCBhbmQgd3JpdHRlbiB0by4KKysgKgorKyAqIFRoZXJlIGFyZSB0d28g bW9kZXMgb2YgYWNjZXNzIHRvIG1lbWJlcnMgb2YgQVZPcHRpb24gYW5kIGl0cyBjaGlsZCBzdHJ1 Y3RzLgorKyAqIE9uZSBpcyBjYWxsZWQgJ25hdGl2ZSBhY2Nlc3MnLCBhbmQgcmVmZXJzIHRvIGFj Y2VzcyBmcm9tIHRoZSBjb2RlIHRoYXQKKysgKiBkZWNsYXJlcyB0aGUgQVZPcHRpb24gaW4gcXVl c3Rpb24uICBUaGUgb3RoZXIgaXMgJ2ZvcmVpZ24gYWNjZXNzJywgYW5kIHJlZmVycworKyAqIHRv IGFjY2VzcyBmcm9tIG90aGVyIGNvZGUuCisrICoKKysgKiBDZXJ0YWluIHN0cnVjdCBtZW1iZXJz IGluIHRoaXMgaGVhZGVyIGFyZSBkb2N1bWVudGVkIGFzICduYXRpdmUgYWNjZXNzIG9ubHknCisr ICogb3Igc2ltaWxhciAtIGl0IG1lYW5zIHRoYXQgb25seSB0aGUgY29kZSB0aGF0IGRlY2xhcmVk IHRoZSBBVk9wdGlvbiBpbgorKyAqIHF1ZXN0aW9uIGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBm aWVsZC4gVGhpcyBhbGxvd3MgdXMgdG8gZXh0ZW5kIHRoZQorKyAqIHNlbWFudGljcyBvZiB0aG9z ZSBmaWVsZHMgd2l0aG91dCBicmVha2luZyBBUEkgY29tcGF0aWJpbGl0eS4KKysgKgorKyAqIEBz ZWN0aW9uIGF2b3B0aW9uc19zY29wZSBTY29wZSBvZiBBVk9wdGlvbnMKKysgKgorKyAqIEFWT3B0 aW9ucyBpcyBkZXNpZ25lZCB0byBzdXBwb3J0IGFueSBzZXQgb2YgbXVsdGltZWRpYSBjb25maWd1 cmF0aW9uIG9wdGlvbnMKKysgKiB0aGF0IGNhbiBiZSBkZWZpbmVkIGF0IGNvbXBpbGUtdGltZS4g IEFsdGhvdWdoIGl0IGlzIG1haW5seSB1c2VkIHRvIGV4cG9zZQorKyAqIEZGbXBlZyBvcHRpb25z LCB5b3UgYXJlIHdlbGNvbWUgdG8gYWRhcHQgaXQgdG8geW91ciBvd24gdXNlIGNhc2UuCisrICoK KysgKiBObyBzaW5nbGUgYXBwcm9hY2ggY2FuIGV2ZXIgZnVsbHkgc29sdmUgdGhlIHByb2JsZW0g b2YgY29uZmlndXJhdGlvbiwKKysgKiBidXQgcGxlYXNlIHN1Ym1pdCBhIHBhdGNoIGlmIHlvdSBi ZWxpZXZlIHlvdSBoYXZlIGZvdW5kIGEgcHJvYmxlbQorKyAqIHRoYXQgaXMgYmVzdCBzb2x2ZWQg YnkgZXh0ZW5kaW5nIEFWT3B0aW9ucy4KKysgKgorKyAqIEBzZWN0aW9uIGF2b3B0aW9uc19pbXBs ZW1lbnQgSW1wbGVtZW50aW5nIEFWT3B0aW9ucworKyAqIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMg aG93IHRvIGFkZCBBVk9wdGlvbnMgY2FwYWJpbGl0aWVzIHRvIGEgc3RydWN0LgorKyAqCisrICog QWxsIEFWT3B0aW9ucy1yZWxhdGVkIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhbiBBVkNsYXNz LiBUaGVyZWZvcmUKKysgKiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3Qgc2hvdWxkIGJl IGEgcG9pbnRlciB0byBhbiBBVkNsYXNzIGRlc2NyaWJpbmcgaXQuCisrICogVGhlIG9wdGlvbiBm aWVsZCBvZiB0aGUgQVZDbGFzcyBtdXN0IGJlIHNldCB0byBhIE5VTEwtdGVybWluYXRlZCBzdGF0 aWMgYXJyYXkKKysgKiBvZiBBVk9wdGlvbnMuIEVhY2ggQVZPcHRpb24gbXVzdCBoYXZlIGEgbm9u LWVtcHR5IG5hbWUsIGEgdHlwZSwgYSBkZWZhdWx0CisrICogdmFsdWUgYW5kIGZvciBudW1iZXIt dHlwZSBBVk9wdGlvbnMgYWxzbyBhIHJhbmdlIG9mIGFsbG93ZWQgdmFsdWVzLiBJdCBtdXN0Cisr ICogYWxzbyBkZWNsYXJlIGFuIG9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUg c3RydWN0LCB3aGVyZSB0aGUgZmllbGQKKysgKiBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVk9wdGlv biBpcyBsb2NhdGVkLiBPdGhlciBmaWVsZHMgaW4gdGhlIEFWT3B0aW9uIHN0cnVjdAorKyAqIHNo b3VsZCBhbHNvIGJlIHNldCB3aGVuIGFwcGxpY2FibGUsIGJ1dCBhcmUgbm90IHJlcXVpcmVkLgor KyAqCisrICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGlsbHVzdHJhdGVzIGFuIEFWT3B0aW9ucy1l bmFibGVkIHN0cnVjdDoKKysgKiBAY29kZQorKyAqIHR5cGVkZWYgc3RydWN0IHRlc3Rfc3RydWN0 IHsKKysgKiAgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7CisrICogICAgIGludCAgICAgIGludF9v cHQ7CisrICogICAgIGNoYXIgICAgKnN0cl9vcHQ7CisrICogICAgIHVpbnQ4X3QgKmJpbl9vcHQ7 CisrICogICAgIGludCAgICAgIGJpbl9sZW47CisrICogfSB0ZXN0X3N0cnVjdDsKKysgKgorKyAq IHN0YXRpYyBjb25zdCBBVk9wdGlvbiB0ZXN0X29wdGlvbnNbXSA9IHsKKysgKiAgIHsgInRlc3Rf aW50IiwgIlRoaXMgaXMgYSB0ZXN0IG9wdGlvbiBvZiBpbnQgdHlwZS4iLCBvZmZzZXRvZih0ZXN0 X3N0cnVjdCwgaW50X29wdCksCisrICogICAgIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEg fSwgSU5UX01JTiwgSU5UX01BWCB9LAorKyAqICAgeyAidGVzdF9zdHIiLCAiVGhpcyBpcyBhIHRl c3Qgb3B0aW9uIG9mIHN0cmluZyB0eXBlLiIsIG9mZnNldG9mKHRlc3Rfc3RydWN0LCBzdHJfb3B0 KSwKKysgKiAgICAgQVZfT1BUX1RZUEVfU1RSSU5HIH0sCisrICogICB7ICJ0ZXN0X2JpbiIsICJU aGlzIGlzIGEgdGVzdCBvcHRpb24gb2YgYmluYXJ5IHR5cGUuIiwgb2Zmc2V0b2YodGVzdF9zdHJ1 Y3QsIGJpbl9vcHQpLAorKyAqICAgICBBVl9PUFRfVFlQRV9CSU5BUlkgfSwKKysgKiAgIHsgTlVM TCB9LAorKyAqIH07CisrICoKKysgKiBzdGF0aWMgY29uc3QgQVZDbGFzcyB0ZXN0X2NsYXNzID0g eworKyAqICAgICAuY2xhc3NfbmFtZSA9ICJ0ZXN0IGNsYXNzIiwKKysgKiAgICAgLml0ZW1fbmFt ZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKKysgKiAgICAgLm9wdGlvbiAgICAgPSB0ZXN0X29w dGlvbnMsCisrICogICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorKyAq IH07CisrICogQGVuZGNvZGUKKysgKgorKyAqIE5leHQsIHdoZW4gYWxsb2NhdGluZyB5b3VyIHN0 cnVjdCwgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIEFWQ2xhc3MgcG9pbnRlcgorKyAqIGlzIHNl dCB0byB0aGUgY29ycmVjdCB2YWx1ZS4gVGhlbiwgYXZfb3B0X3NldF9kZWZhdWx0cygpIGNhbiBi ZSBjYWxsZWQgdG8KKysgKiBpbml0aWFsaXplIGRlZmF1bHRzLiBBZnRlciB0aGF0IHRoZSBzdHJ1 Y3QgaXMgcmVhZHkgdG8gYmUgdXNlZCB3aXRoIHRoZQorKyAqIEFWT3B0aW9ucyBBUEkuCisrICoK KysgKiBXaGVuIGNsZWFuaW5nIHVwLCB5b3UgbWF5IHVzZSB0aGUgYXZfb3B0X2ZyZWUoKSBmdW5j dGlvbiB0byBhdXRvbWF0aWNhbGx5CisrICogZnJlZSBhbGwgdGhlIGFsbG9jYXRlZCBzdHJpbmcg YW5kIGJpbmFyeSBvcHRpb25zLgorKyAqCisrICogQ29udGludWluZyB3aXRoIHRoZSBhYm92ZSBl eGFtcGxlOgorKyAqCisrICogQGNvZGUKKysgKiB0ZXN0X3N0cnVjdCAqYWxsb2NfdGVzdF9zdHJ1 Y3Qodm9pZCkKKysgKiB7CisrICogICAgIHRlc3Rfc3RydWN0ICpyZXQgPSBhdl9tYWxsb2N6KHNp emVvZigqcmV0KSk7CisrICogICAgIHJldC0+Y2xhc3MgPSAmdGVzdF9jbGFzczsKKysgKiAgICAg YXZfb3B0X3NldF9kZWZhdWx0cyhyZXQpOworKyAqICAgICByZXR1cm4gcmV0OworKyAqIH0KKysg KiB2b2lkIGZyZWVfdGVzdF9zdHJ1Y3QodGVzdF9zdHJ1Y3QgKipmb28pCisrICogeworKyAqICAg ICBhdl9vcHRfZnJlZSgqZm9vKTsKKysgKiAgICAgYXZfZnJlZXAoZm9vKTsKKysgKiB9CisrICog QGVuZGNvZGUKKysgKgorKyAqIEBzdWJzZWN0aW9uIGF2b3B0aW9uc19pbXBsZW1lbnRfbmVzdGlu ZyBOZXN0aW5nCisrICogICAgICBJdCBtYXkgaGFwcGVuIHRoYXQgYW4gQVZPcHRpb25zLWVuYWJs ZWQgc3RydWN0IGNvbnRhaW5zIGFub3RoZXIKKysgKiAgICAgIEFWT3B0aW9ucy1lbmFibGVkIHN0 cnVjdCBhcyBhIG1lbWJlciAoZS5nLiBBVkNvZGVjQ29udGV4dCBpbgorKyAqICAgICAgbGliYXZj b2RlYyBleHBvcnRzIGdlbmVyaWMgb3B0aW9ucywgd2hpbGUgaXRzIHByaXZfZGF0YSBmaWVsZCBl eHBvcnRzCisrICogICAgICBjb2RlYy1zcGVjaWZpYyBvcHRpb25zKS4gSW4gc3VjaCBhIGNhc2Us IGl0IGlzIHBvc3NpYmxlIHRvIHNldCB1cCB0aGUKKysgKiAgICAgIHBhcmVudCBzdHJ1Y3QgdG8g ZXhwb3J0IGEgY2hpbGQncyBvcHRpb25zLiBUbyBkbyB0aGF0LCBzaW1wbHkKKysgKiAgICAgIGlt cGxlbWVudCBBVkNsYXNzLmNoaWxkX25leHQoKSBhbmQgQVZDbGFzcy5jaGlsZF9jbGFzc19pdGVy YXRlKCkgaW4gdGhlCisrICogICAgICBwYXJlbnQgc3RydWN0J3MgQVZDbGFzcy4KKysgKiAgICAg IEFzc3VtaW5nIHRoYXQgdGhlIHRlc3Rfc3RydWN0IGZyb20gYWJvdmUgbm93IGFsc28gY29udGFp bnMgYQorKyAqICAgICAgY2hpbGRfc3RydWN0IGZpZWxkOgorKyAqCisrICogICAgICBAY29kZQor KyAqICAgICAgdHlwZWRlZiBzdHJ1Y3QgY2hpbGRfc3RydWN0IHsKKysgKiAgICAgICAgICBBVkNs YXNzICpjbGFzczsKKysgKiAgICAgICAgICBpbnQgZmxhZ3Nfb3B0OworKyAqICAgICAgfSBjaGls ZF9zdHJ1Y3Q7CisrICogICAgICBzdGF0aWMgY29uc3QgQVZPcHRpb24gY2hpbGRfb3B0c1tdID0g eworKyAqICAgICAgICAgIHsgInRlc3RfZmxhZ3MiLCAiVGhpcyBpcyBhIHRlc3Qgb3B0aW9uIG9m IGZsYWdzIHR5cGUuIiwKKysgKiAgICAgICAgICAgIG9mZnNldG9mKGNoaWxkX3N0cnVjdCwgZmxh Z3Nfb3B0KSwgQVZfT1BUX1RZUEVfRkxBR1MsIHsgLmk2NCA9IDAgfSwgSU5UX01JTiwgSU5UX01B WCB9LAorKyAqICAgICAgICAgIHsgTlVMTCB9LAorKyAqICAgICAgfTsKKysgKiAgICAgIHN0YXRp YyBjb25zdCBBVkNsYXNzIGNoaWxkX2NsYXNzID0geworKyAqICAgICAgICAgIC5jbGFzc19uYW1l ID0gImNoaWxkIGNsYXNzIiwKKysgKiAgICAgICAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRf aXRlbV9uYW1lLAorKyAqICAgICAgICAgIC5vcHRpb24gICAgID0gY2hpbGRfb3B0cywKKysgKiAg ICAgICAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKKysgKiAgICAgIH07 CisrICoKKysgKiAgICAgIHZvaWQgKmNoaWxkX25leHQodm9pZCAqb2JqLCB2b2lkICpwcmV2KQor KyAqICAgICAgeworKyAqICAgICAgICAgIHRlc3Rfc3RydWN0ICp0ID0gb2JqOworKyAqICAgICAg ICAgIGlmICghcHJldiAmJiB0LT5jaGlsZF9zdHJ1Y3QpCisrICogICAgICAgICAgICAgIHJldHVy biB0LT5jaGlsZF9zdHJ1Y3Q7CisrICogICAgICAgICAgcmV0dXJuIE5VTEwKKysgKiAgICAgIH0K KysgKiAgICAgIGNvbnN0IEFWQ2xhc3MgY2hpbGRfY2xhc3NfaXRlcmF0ZSh2b2lkICoqaXRlcikK KysgKiAgICAgIHsKKysgKiAgICAgICAgICBjb25zdCBBVkNsYXNzICpjID0gKml0ZXIgPyBOVUxM IDogJmNoaWxkX2NsYXNzOworKyAqICAgICAgICAgICppdGVyID0gKHZvaWQqKSh1aW50cHRyX3Qp YzsKKysgKiAgICAgICAgICByZXR1cm4gYzsKKysgKiAgICAgIH0KKysgKiAgICAgIEBlbmRjb2Rl CisrICogICAgICBQdXR0aW5nIGNoaWxkX25leHQoKSBhbmQgY2hpbGRfY2xhc3NfaXRlcmF0ZSgp IGFzIGRlZmluZWQgYWJvdmUgaW50bworKyAqICAgICAgdGVzdF9jbGFzcyB3aWxsIG5vdyBtYWtl IGNoaWxkX3N0cnVjdCdzIG9wdGlvbnMgYWNjZXNzaWJsZSB0aHJvdWdoCisrICogICAgICB0ZXN0 X3N0cnVjdCAoYWdhaW4sIHByb3BlciBzZXR1cCBhcyBkZXNjcmliZWQgYWJvdmUgbmVlZHMgdG8g YmUgZG9uZSBvbgorKyAqICAgICAgY2hpbGRfc3RydWN0IHJpZ2h0IGFmdGVyIGl0IGlzIGNyZWF0 ZWQpLgorKyAqCisrICogICAgICBGcm9tIHRoZSBhYm92ZSBleGFtcGxlIGl0IG1pZ2h0IG5vdCBi ZSBjbGVhciB3aHkgYm90aCBjaGlsZF9uZXh0KCkKKysgKiAgICAgIGFuZCBjaGlsZF9jbGFzc19p dGVyYXRlKCkgYXJlIG5lZWRlZC4gVGhlIGRpc3RpbmN0aW9uIGlzIHRoYXQgY2hpbGRfbmV4dCgp CisrICogICAgICBpdGVyYXRlcyBvdmVyIGFjdHVhbGx5IGV4aXN0aW5nIG9iamVjdHMsIHdoaWxl IGNoaWxkX2NsYXNzX2l0ZXJhdGUoKQorKyAqICAgICAgaXRlcmF0ZXMgb3ZlciBhbGwgcG9zc2li bGUgY2hpbGQgY2xhc3Nlcy4gRS5nLiBpZiBhbiBBVkNvZGVjQ29udGV4dAorKyAqICAgICAgd2Fz IGluaXRpYWxpemVkIHRvIHVzZSBhIGNvZGVjIHdoaWNoIGhhcyBwcml2YXRlIG9wdGlvbnMsIHRo ZW4gaXRzCisrICogICAgICBjaGlsZF9uZXh0KCkgd2lsbCByZXR1cm4gQVZDb2RlY0NvbnRleHQu cHJpdl9kYXRhIGFuZCBmaW5pc2gKKysgKiAgICAgIGl0ZXJhdGluZy4gT1RPSCBjaGlsZF9jbGFz c19pdGVyYXRlKCkgb24gQVZDb2RlY0NvbnRleHQuYXZfY2xhc3Mgd2lsbAorKyAqICAgICAgaXRl cmF0ZSBvdmVyIGFsbCBhdmFpbGFibGUgY29kZWNzIHdpdGggcHJpdmF0ZSBvcHRpb25zLgorKyAq CisrICogQHN1YnNlY3Rpb24gYXZvcHRpb25zX2ltcGxlbWVudF9uYW1lZF9jb25zdGFudHMgTmFt ZWQgY29uc3RhbnRzCisrICogICAgICBJdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgbmFtZWQgY29u c3RhbnRzIGZvciBvcHRpb25zLiBTaW1wbHkgc2V0IHRoZSB1bml0CisrICogICAgICBmaWVsZCBv ZiB0aGUgb3B0aW9uIHRoZSBjb25zdGFudHMgc2hvdWxkIGFwcGx5IHRvIGEgc3RyaW5nIGFuZAor KyAqICAgICAgY3JlYXRlIHRoZSBjb25zdGFudHMgdGhlbXNlbHZlcyBhcyBvcHRpb25zIG9mIHR5 cGUgQVZfT1BUX1RZUEVfQ09OU1QKKysgKiAgICAgIHdpdGggdGhlaXIgdW5pdCBmaWVsZCBzZXQg dG8gdGhlIHNhbWUgc3RyaW5nLgorKyAqICAgICAgVGhlaXIgZGVmYXVsdF92YWwgZmllbGQgc2hv dWxkIGNvbnRhaW4gdGhlIHZhbHVlIG9mIHRoZSBuYW1lZAorKyAqICAgICAgY29uc3RhbnQuCisr ICogICAgICBGb3IgZXhhbXBsZSwgdG8gYWRkIHNvbWUgbmFtZWQgY29uc3RhbnRzIGZvciB0aGUg dGVzdF9mbGFncyBvcHRpb24KKysgKiAgICAgIGFib3ZlLCBwdXQgdGhlIGZvbGxvd2luZyBpbnRv IHRoZSBjaGlsZF9vcHRzIGFycmF5OgorKyAqICAgICAgQGNvZGUKKysgKiAgICAgIHsgInRlc3Rf ZmxhZ3MiLCAiVGhpcyBpcyBhIHRlc3Qgb3B0aW9uIG9mIGZsYWdzIHR5cGUuIiwKKysgKiAgICAg ICAgb2Zmc2V0b2YoY2hpbGRfc3RydWN0LCBmbGFnc19vcHQpLCBBVl9PUFRfVFlQRV9GTEFHUywg eyAuaTY0ID0gMCB9LCBJTlRfTUlOLCBJTlRfTUFYLCAidGVzdF91bml0IiB9LAorKyAqICAgICAg eyAiZmxhZzEiLCAiVGhpcyBpcyBhIGZsYWcgd2l0aCB2YWx1ZSAxNiIsIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7IC5pNjQgPSAxNiB9LCAwLCAwLCAidGVzdF91bml0IiB9LAorKyAqICAgICAgQGVu ZGNvZGUKKysgKgorKyAqIEBzZWN0aW9uIGF2b3B0aW9uc191c2UgVXNpbmcgQVZPcHRpb25zCisr ICogVGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggYWNjZXNzaW5nIG9wdGlvbnMgaW4gYW4gQVZPcHRp b25zLWVuYWJsZWQgc3RydWN0LgorKyAqIFN1Y2ggc3RydWN0cyBpbiBGRm1wZWcgYXJlIGUuZy4g QVZDb2RlY0NvbnRleHQgaW4gbGliYXZjb2RlYyBvcgorKyAqIEFWRm9ybWF0Q29udGV4dCBpbiBs aWJhdmZvcm1hdC4KKysgKgorKyAqIEBzdWJzZWN0aW9uIGF2b3B0aW9uc191c2VfZXhhbWluZSBF eGFtaW5pbmcgQVZPcHRpb25zCisrICogVGhlIGJhc2ljIGZ1bmN0aW9ucyBmb3IgZXhhbWluaW5n IG9wdGlvbnMgYXJlIGF2X29wdF9uZXh0KCksIHdoaWNoIGl0ZXJhdGVzCisrICogb3ZlciBhbGwg b3B0aW9ucyBkZWZpbmVkIGZvciBvbmUgb2JqZWN0LCBhbmQgYXZfb3B0X2ZpbmQoKSwgd2hpY2gg c2VhcmNoZXMKKysgKiBmb3IgYW4gb3B0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUuCisrICoKKysg KiBUaGUgc2l0dWF0aW9uIGlzIG1vcmUgY29tcGxpY2F0ZWQgd2l0aCBuZXN0aW5nLiBBbiBBVk9w dGlvbnMtZW5hYmxlZCBzdHJ1Y3QKKysgKiBtYXkgaGF2ZSBBVk9wdGlvbnMtZW5hYmxlZCBjaGls ZHJlbi4gUGFzc2luZyB0aGUgQVZfT1BUX1NFQVJDSF9DSElMRFJFTiBmbGFnCisrICogdG8gYXZf b3B0X2ZpbmQoKSB3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIHNlYXJjaCBjaGlsZHJlbiByZWN1cnNp dmVseS4KKysgKgorKyAqIEZvciBlbnVtZXJhdGluZyB0aGVyZSBhcmUgYmFzaWNhbGx5IHR3byBj YXNlcy4gVGhlIGZpcnN0IGlzIHdoZW4geW91IHdhbnQgdG8KKysgKiBnZXQgYWxsIG9wdGlvbnMg dGhhdCBtYXkgcG90ZW50aWFsbHkgZXhpc3Qgb24gdGhlIHN0cnVjdCBhbmQgaXRzIGNoaWxkcmVu CisrICogKGUuZy4gIHdoZW4gY29uc3RydWN0aW5nIGRvY3VtZW50YXRpb24pLiBJbiB0aGF0IGNh c2UgeW91IHNob3VsZCBjYWxsCisrICogYXZfb3B0X2NoaWxkX2NsYXNzX2l0ZXJhdGUoKSByZWN1 cnNpdmVseSBvbiB0aGUgcGFyZW50IHN0cnVjdCdzIEFWQ2xhc3MuICBUaGUKKysgKiBzZWNvbmQg Y2FzZSBpcyB3aGVuIHlvdSBoYXZlIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgc3RydWN0IHdpdGgg YWxsIGl0cworKyAqIGNoaWxkcmVuIGFuZCB5b3Ugd2FudCB0byBnZXQgYWxsIG9wdGlvbnMgdGhh dCBjYW4gYmUgYWN0dWFsbHkgd3JpdHRlbiBvciByZWFkCisrICogZnJvbSBpdC4gSW4gdGhhdCBj YXNlIHlvdSBzaG91bGQgY2FsbCBhdl9vcHRfY2hpbGRfbmV4dCgpIHJlY3Vyc2l2ZWx5IChhbmQK KysgKiBhdl9vcHRfbmV4dCgpIG9uIGVhY2ggcmVzdWx0KS4KKysgKgorKyAqIEBzdWJzZWN0aW9u IGF2b3B0aW9uc191c2VfZ2V0X3NldCBSZWFkaW5nIGFuZCB3cml0aW5nIEFWT3B0aW9ucworKyAq IFdoZW4gc2V0dGluZyBvcHRpb25zLCB5b3Ugb2Z0ZW4gaGF2ZSBhIHN0cmluZyByZWFkIGRpcmVj dGx5IGZyb20gdGhlCisrICogdXNlci4gSW4gc3VjaCBhIGNhc2UsIHNpbXBseSBwYXNzaW5nIGl0 IHRvIGF2X29wdF9zZXQoKSBpcyBlbm91Z2guIEZvcgorKyAqIG5vbi1zdHJpbmcgdHlwZSBvcHRp b25zLCBhdl9vcHRfc2V0KCkgd2lsbCBwYXJzZSB0aGUgc3RyaW5nIGFjY29yZGluZyB0byB0aGUK KysgKiBvcHRpb24gdHlwZS4KKysgKgorKyAqIFNpbWlsYXJseSBhdl9vcHRfZ2V0KCkgd2lsbCBy ZWFkIGFueSBvcHRpb24gdHlwZSBhbmQgY29udmVydCBpdCB0byBhIHN0cmluZworKyAqIHdoaWNo IHdpbGwgYmUgcmV0dXJuZWQuIERvIG5vdCBmb3JnZXQgdGhhdCB0aGUgc3RyaW5nIGlzIGFsbG9j YXRlZCwgc28geW91CisrICogaGF2ZSB0byBmcmVlIGl0IHdpdGggYXZfZnJlZSgpLgorKyAqCisr ICogSW4gc29tZSBjYXNlcyBpdCBtYXkgYmUgbW9yZSBjb252ZW5pZW50IHRvIHB1dCBhbGwgb3B0 aW9ucyBpbnRvIGFuCisrICogQVZEaWN0aW9uYXJ5IGFuZCBjYWxsIGF2X29wdF9zZXRfZGljdCgp IG9uIGl0LiBBIHNwZWNpZmljIGNhc2Ugb2YgdGhpcworKyAqIGFyZSB0aGUgZm9ybWF0L2NvZGVj IG9wZW4gZnVuY3Rpb25zIGluIGxhdmYvbGF2YyB3aGljaCB0YWtlIGEgZGljdGlvbmFyeQorKyAq IGZpbGxlZCB3aXRoIG9wdGlvbiBhcyBhIHBhcmFtZXRlci4gVGhpcyBtYWtlcyBpdCBwb3NzaWJs ZSB0byBzZXQgc29tZSBvcHRpb25zCisrICogdGhhdCBjYW5ub3QgYmUgc2V0IG90aGVyd2lzZSwg c2luY2UgZS5nLiB0aGUgaW5wdXQgZmlsZSBmb3JtYXQgaXMgbm90IGtub3duCisrICogYmVmb3Jl IHRoZSBmaWxlIGlzIGFjdHVhbGx5IG9wZW5lZC4KKysgKi8KKysKKysvKioKKysgKiBBbiBvcHRp b24gdHlwZSBkZXRlcm1pbmVzOgorKyAqIC0gZm9yIG5hdGl2ZSBhY2Nlc3MsIHRoZSB1bmRlcmx5 aW5nIEMgdHlwZSBvZiB0aGUgZmllbGQgdGhhdCBhbiBBVk9wdGlvbgorKyAqICAgcmVmZXJzIHRv OworKyAqIC0gZm9yIGZvcmVpZ24gYWNjZXNzLCB0aGUgc2VtYW50aWNzIG9mIGFjY2Vzc2luZyB0 aGUgb3B0aW9uIHRocm91Z2ggdGhpcyBBUEksCisrICogICBlLmcuIHdoaWNoIGF2X29wdF9nZXRf KigpIGFuZCBhdl9vcHRfc2V0XyooKSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCwgb3IKKysgKiAg IHdoYXQgZm9ybWF0IHdpbGwgYXZfb3B0X2dldCgpL2F2X29wdF9zZXQoKSBleHBlY3QvcHJvZHVj ZS4KKysgKi8KKytlbnVtIEFWT3B0aW9uVHlwZXsKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlp bmcgQyB0eXBlIGlzIHVuc2lnbmVkIGludC4KKysgICAgICovCisrICAgIEFWX09QVF9UWVBFX0ZM QUdTID0gMSwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGludC4KKysg ICAgICovCisrICAgIEFWX09QVF9UWVBFX0lOVCwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlp bmcgQyB0eXBlIGlzIGludDY0X3QuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9JTlQ2NCwK KysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGRvdWJsZS4KKysgICAgICov CisrICAgIEFWX09QVF9UWVBFX0RPVUJMRSwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcg QyB0eXBlIGlzIGZsb2F0LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfRkxPQVQsCisrICAg IC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBhIHVpbnQ4X3QqIHRoYXQgaXMgZWl0 aGVyIE5VTEwgb3IgcG9pbnRzIHRvIGEgQworKyAgICAgKiBzdHJpbmcgYWxsb2NhdGVkIHdpdGgg dGhlIGF2X21hbGxvYygpIGZhbWlseSBvZiBmdW5jdGlvbnMuCisrICAgICAqLworKyAgICBBVl9P UFRfVFlQRV9TVFJJTkcsCisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBB VlJhdGlvbmFsLgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsCisrICAgIC8q KgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBhIHVpbnQ4X3QqIHRoYXQgaXMgZWl0aGVy IE5VTEwgb3IgcG9pbnRzIHRvIGFuIGFycmF5CisrICAgICAqIGFsbG9jYXRlZCB3aXRoIHRoZSBh dl9tYWxsb2MoKSBmYW1pbHkgb2YgZnVuY3Rpb25zLiBUaGUgcG9pbnRlciBpcworKyAgICAgKiBp bW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbiBpbnQgY29udGFpbmluZyB0aGUgYXJyYXkgbGVuZ3Ro IGluIGJ5dGVzLgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfQklOQVJZLAorKyAgICAvKioK KysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMgQVZEaWN0aW9uYXJ5Ki4KKysgICAgICovCisr ICAgIEFWX09QVF9UWVBFX0RJQ1QsCisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlw ZSBpcyB1aW50NjRfdC4KKysgICAgICovCisrICAgIEFWX09QVF9UWVBFX1VJTlQ2NCwKKysgICAg LyoqCisrICAgICAqIFNwZWNpYWwgb3B0aW9uIHR5cGUgZm9yIGRlY2xhcmluZyBuYW1lZCBjb25z dGFudHMuIERvZXMgbm90IGNvcnJlc3BvbmQgdG8KKysgICAgICogYW4gYWN0dWFsIGZpZWxkIGlu IHRoZSBvYmplY3QsIG9mZnNldCBtdXN0IGJlIDAuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQ RV9DT05TVCwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIHR3byBjb25z ZWN1dGl2ZSBpbnRlZ2Vycy4KKysgICAgICovCisrICAgIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUs CisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBlbnVtIEFWUGl4ZWxGb3Jt YXQuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9QSVhFTF9GTVQsCisrICAgIC8qKgorKyAg ICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBlbnVtIEFWU2FtcGxlRm9ybWF0LgorKyAgICAgKi8K KysgICAgQVZfT1BUX1RZUEVfU0FNUExFX0ZNVCwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlp bmcgQyB0eXBlIGlzIEFWUmF0aW9uYWwuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9WSURF T19SQVRFLAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMgaW50NjRfdC4K KysgICAgICovCisrICAgIEFWX09QVF9UWVBFX0RVUkFUSU9OLAorKyAgICAvKioKKysgICAgICog VW5kZXJseWluZyBDIHR5cGUgaXMgdWludDhfdFs0XS4KKysgICAgICovCisrICAgIEFWX09QVF9U WVBFX0NPTE9SLAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMgaW50Lgor KyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfQk9PTCwKKysgICAgLyoqCisrICAgICAqIFVuZGVy bHlpbmcgQyB0eXBlIGlzIEFWQ2hhbm5lbExheW91dC4KKysgICAgICovCisrICAgIEFWX09QVF9U WVBFX0NITEFZT1VULAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMgdW5z aWduZWQgaW50LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfVUlOVCwKKysKKysgICAgLyoq CisrICAgICAqIE1heSBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgcmVndWxhciBvcHRpb24gdHlw ZSB0byBkZWNsYXJlIGFuIGFycmF5CisrICAgICAqIG9wdGlvbi4KKysgICAgICoKKysgICAgICog Rm9yIGFycmF5IG9wdGlvbnMsIEByZWYgQVZPcHRpb24ub2Zmc2V0IHNob3VsZCByZWZlciB0byBh IHBvaW50ZXIKKysgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgb3B0aW9uIHR5cGUuIFRoZSBw b2ludGVyIHNob3VsZCBiZSBpbW1lZGlhdGVseQorKyAgICAgKiBmb2xsb3dlZCBieSBhbiB1bnNp Z25lZCBpbnQgdGhhdCB3aWxsIHN0b3JlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlCisr ICAgICAqIGFycmF5LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSA9ICgx IDw8IDE2KSwKKyt9OworKworKy8qKgorKyAqIEEgZ2VuZXJpYyBwYXJhbWV0ZXIgd2hpY2ggY2Fu IGJlIHNldCBieSB0aGUgdXNlciBmb3IgbXV4aW5nIG9yIGVuY29kaW5nLgorKyAqLworKyNkZWZp bmUgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0gICgxIDw8IDApCisrLyoqCisrICogQSBnZW5l cmljIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyIGZvciBkZW11eGluZyBv ciBkZWNvZGluZy4KKysgKi8KKysjZGVmaW5lIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNICAo MSA8PCAxKQorKyNkZWZpbmUgQVZfT1BUX0ZMQUdfQVVESU9fUEFSQU0gICAgICgxIDw8IDMpCisr I2RlZmluZSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSAgICAgKDEgPDwgNCkKKysjZGVmaW5lIEFW X09QVF9GTEFHX1NVQlRJVExFX1BBUkFNICAoMSA8PCA1KQorKy8qKgorKyAqIFRoZSBvcHRpb24g aXMgaW50ZW5kZWQgZm9yIGV4cG9ydGluZyB2YWx1ZXMgdG8gdGhlIGNhbGxlci4KKysgKi8KKysj ZGVmaW5lIEFWX09QVF9GTEFHX0VYUE9SVCAgICAgICAgICAoMSA8PCA2KQorKy8qKgorKyAqIFRo ZSBvcHRpb24gbWF5IG5vdCBiZSBzZXQgdGhyb3VnaCB0aGUgQVZPcHRpb25zIEFQSSwgb25seSBy ZWFkLgorKyAqIFRoaXMgZmxhZyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gQVZfT1BUX0ZMQUdfRVhQ T1JUIGlzIGFsc28gc2V0LgorKyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfUkVBRE9OTFkgICAg ICAgICgxIDw8IDcpCisrLyoqCisrICogQSBnZW5lcmljIHBhcmFtZXRlciB3aGljaCBjYW4gYmUg c2V0IGJ5IHRoZSB1c2VyIGZvciBiaXQgc3RyZWFtIGZpbHRlcmluZy4KKysgKi8KKysjZGVmaW5l IEFWX09QVF9GTEFHX0JTRl9QQVJBTSAgICAgICAoMSA8PCA4KQorKworKy8qKgorKyAqIEEgZ2Vu ZXJpYyBwYXJhbWV0ZXIgd2hpY2ggY2FuIGJlIHNldCBieSB0aGUgdXNlciBhdCBydW50aW1lLgor KyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfUlVOVElNRV9QQVJBTSAgICgxIDw8IDE1KQorKy8q KgorKyAqIEEgZ2VuZXJpYyBwYXJhbWV0ZXIgd2hpY2ggY2FuIGJlIHNldCBieSB0aGUgdXNlciBm b3IgZmlsdGVyaW5nLgorKyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFN ICgxIDw8IDE2KQorKy8qKgorKyAqIFNldCBpZiBvcHRpb24gaXMgZGVwcmVjYXRlZCwgdXNlcnMg c2hvdWxkIHJlZmVyIHRvIEFWT3B0aW9uLmhlbHAgdGV4dCBmb3IKKysgKiBtb3JlIGluZm9ybWF0 aW9uLgorKyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfREVQUkVDQVRFRCAgICAgICgxIDw8IDE3 KQorKy8qKgorKyAqIFNldCBpZiBvcHRpb24gY29uc3RhbnRzIGNhbiBhbHNvIHJlc2lkZSBpbiBj aGlsZCBvYmplY3RzLgorKyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfQ0hJTERfQ09OU1RTICAg ICgxIDw8IDE4KQorKworKy8qKgorKyAqIE1heSBiZSBzZXQgYXMgZGVmYXVsdF92YWwgZm9yIEFW X09QVF9UWVBFX0ZMQUdfQVJSQVkgb3B0aW9ucy4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVk9w dGlvbkFycmF5RGVmIHsKKysgICAgLyoqCisrICAgICAqIE5hdGl2ZSBhY2Nlc3Mgb25seS4KKysg ICAgICoKKysgICAgICogRGVmYXVsdCB2YWx1ZSBvZiB0aGUgb3B0aW9uLCBhcyB3b3VsZCBiZSBz ZXJpYWxpemVkIGJ5IGF2X29wdF9nZXQoKSAoaS5lLgorKyAgICAgKiB1c2luZyB0aGUgdmFsdWUg b2Ygc2VwIGFzIHRoZSBzZXBhcmF0b3IpLgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAgICAg ICAgICpkZWY7CisrCisrICAgIC8qKgorKyAgICAgKiBNaW5pbXVtIG51bWJlciBvZiBlbGVtZW50 cyBpbiB0aGUgYXJyYXkuIFdoZW4gdGhpcyBmaWVsZCBpcyBub24temVybywgZGVmCisrICAgICAq IG11c3QgYmUgbm9uLU5VTEwgYW5kIGNvbnRhaW4gYXQgbGVhc3QgdGhpcyBudW1iZXIgb2YgZWxl bWVudHMuCisrICAgICAqLworKyAgICB1bnNpZ25lZCAgICAgICAgICAgIHNpemVfbWluOworKyAg ICAvKioKKysgICAgICogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LCAw IHdoZW4gdW5saW1pdGVkLgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgICAgICAgICAgICBzaXpl X21heDsKKysKKysgICAgLyoqCisrICAgICAqIFNlcGFyYXRvciBiZXR3ZWVuIGFycmF5IGVsZW1l bnRzIGluIHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgdGhpcworKyAgICAgKiBvcHRpb24sIHVz ZWQgYnkgYXZfb3B0X3NldCgpIGFuZCBhdl9vcHRfZ2V0KCkuIEl0IG11c3QgYmUgYSBwcmludGFi bGUKKysgICAgICogQVNDSUkgY2hhcmFjdGVyLCBleGNsdWRpbmcgYWxwaGFudW1lcmljIGFuZCB0 aGUgYmFja3NsYXNoLiBBIGNvbW1hIGlzCisrICAgICAqIHVzZWQgd2hlbiBzZXA9MC4KKysgICAg ICoKKysgICAgICogVGhlIHNlcGFyYXRvciBhbmQgdGhlIGJhY2tzbGFzaCBtdXN0IGJlIGJhY2tz bGFzaC1lc2NhcGVkIGluIG9yZGVyIHRvCisrICAgICAqIGFwcGVhciBpbiBzdHJpbmcgcmVwcmVz ZW50YXRpb25zIG9mIHRoZSBvcHRpb24gdmFsdWUuCisrICAgICAqLworKyAgICBjaGFyICAgICAg ICAgICAgICAgIHNlcDsKKyt9IEFWT3B0aW9uQXJyYXlEZWY7CisrCisrLyoqCisrICogQVZPcHRp b24KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVk9wdGlvbiB7CisrICAgIGNvbnN0IGNoYXIgKm5h bWU7CisrCisrICAgIC8qKgorKyAgICAgKiBzaG9ydCBFbmdsaXNoIGhlbHAgdGV4dAorKyAgICAg KiBAdG9kbyBXaGF0IGFib3V0IG90aGVyIGxhbmd1YWdlcz8KKysgICAgICovCisrICAgIGNvbnN0 IGNoYXIgKmhlbHA7CisrCisrICAgIC8qKgorKyAgICAgKiBOYXRpdmUgYWNjZXNzIG9ubHkuCisr ICAgICAqCisrICAgICAqIFRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGNvbnRleHQgc3RydWN0 dXJlIHdoZXJlIHRoZSBvcHRpb24KKysgICAgICogdmFsdWUgaXMgc3RvcmVkLiBJdCBzaG91bGQg YmUgMCBmb3IgbmFtZWQgY29uc3RhbnRzLgorKyAgICAgKi8KKysgICAgaW50IG9mZnNldDsKKysg ICAgZW51bSBBVk9wdGlvblR5cGUgdHlwZTsKKysKKysgICAgLyoqCisrICAgICAqIE5hdGl2ZSBh Y2Nlc3Mgb25seSwgZXhjZXB0IHdoZW4gZG9jdW1lbnRlZCBvdGhlcndpc2UuCisrICAgICAqIHRo ZSBkZWZhdWx0IHZhbHVlIGZvciBzY2FsYXIgb3B0aW9ucworKyAgICAgKi8KKysgICAgdW5pb24g eworKyAgICAgICAgaW50NjRfdCBpNjQ7CisrICAgICAgICBkb3VibGUgZGJsOworKyAgICAgICAg Y29uc3QgY2hhciAqc3RyOworKyAgICAgICAgLyogVE9ETyB0aG9zZSBhcmUgdW51c2VkIG5vdyAq LworKyAgICAgICAgQVZSYXRpb25hbCBxOworKworKyAgICAgICAgLyoqCisrICAgICAgICAgKiBV c2VkIGZvciBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZIG9wdGlvbnMuIE1heSBiZSBOVUxMLgorKyAg ICAgICAgICoKKysgICAgICAgICAqIEZvcmVpZ24gYWNjZXNzIHRvIHNvbWUgbWVtYmVycyBhbGxv d2VkLCBhcyBub3RlZCBpbiBBVk9wdGlvbkFycmF5RGVmCisrICAgICAgICAgKiBkb2N1bWVudGF0 aW9uLgorKyAgICAgICAgICovCisrICAgICAgICBjb25zdCBBVk9wdGlvbkFycmF5RGVmICphcnI7 CisrICAgIH0gZGVmYXVsdF92YWw7CisrICAgIGRvdWJsZSBtaW47ICAgICAgICAgICAgICAgICAv Ly88IG1pbmltdW0gdmFsaWQgdmFsdWUgZm9yIHRoZSBvcHRpb24KKysgICAgZG91YmxlIG1heDsg ICAgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSB2YWxpZCB2YWx1ZSBmb3IgdGhlIG9wdGlvbgor KworKyAgICAvKioKKysgICAgICogQSBjb21iaW5hdGlvbiBvZiBBVl9PUFRfRkxBR18qLgorKyAg ICAgKi8KKysgICAgaW50IGZsYWdzOworKworKyAgICAvKioKKysgICAgICogVGhlIGxvZ2ljYWwg dW5pdCB0byB3aGljaCB0aGUgb3B0aW9uIGJlbG9uZ3MuIE5vbi1jb25zdGFudAorKyAgICAgKiBv cHRpb25zIGFuZCBjb3JyZXNwb25kaW5nIG5hbWVkIGNvbnN0YW50cyBzaGFyZSB0aGUgc2FtZQor KyAgICAgKiB1bml0LiBNYXkgYmUgTlVMTC4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKnVu aXQ7CisrfSBBVk9wdGlvbjsKKysKKysvKioKKysgKiBBIHNpbmdsZSBhbGxvd2VkIHJhbmdlIG9m IHZhbHVlcywgb3IgYSBzaW5nbGUgYWxsb3dlZCB2YWx1ZS4KKysgKi8KKyt0eXBlZGVmIHN0cnVj dCBBVk9wdGlvblJhbmdlIHsKKysgICAgY29uc3QgY2hhciAqc3RyOworKyAgICAvKioKKysgICAg ICogVmFsdWUgcmFuZ2UuCisrICAgICAqIEZvciBzdHJpbmcgcmFuZ2VzIHRoaXMgcmVwcmVzZW50 cyB0aGUgbWluL21heCBsZW5ndGguCisrICAgICAqIEZvciBkaW1lbnNpb25zIHRoaXMgcmVwcmVz ZW50cyB0aGUgbWluL21heCBwaXhlbCBjb3VudCBvciB3aWR0aC9oZWlnaHQgaW4gbXVsdGktY29t cG9uZW50IGNhc2UuCisrICAgICAqLworKyAgICBkb3VibGUgdmFsdWVfbWluLCB2YWx1ZV9tYXg7 CisrICAgIC8qKgorKyAgICAgKiBWYWx1ZSdzIGNvbXBvbmVudCByYW5nZS4KKysgICAgICogRm9y IHN0cmluZyB0aGlzIHJlcHJlc2VudHMgdGhlIHVuaWNvZGUgcmFuZ2UgZm9yIGNoYXJzLCAwLTEy NyBsaW1pdHMgdG8gQVNDSUkuCisrICAgICAqLworKyAgICBkb3VibGUgY29tcG9uZW50X21pbiwg Y29tcG9uZW50X21heDsKKysgICAgLyoqCisrICAgICAqIFJhbmdlIGZsYWcuCisrICAgICAqIElm IHNldCB0byAxIHRoZSBzdHJ1Y3QgZW5jb2RlcyBhIHJhbmdlLCBpZiBzZXQgdG8gMCBhIHNpbmds ZSB2YWx1ZS4KKysgICAgICovCisrICAgIGludCBpc19yYW5nZTsKKyt9IEFWT3B0aW9uUmFuZ2U7 CisrCisrLyoqCisrICogTGlzdCBvZiBBVk9wdGlvblJhbmdlIHN0cnVjdHMuCisrICovCisrdHlw ZWRlZiBzdHJ1Y3QgQVZPcHRpb25SYW5nZXMgeworKyAgICAvKioKKysgICAgICogQXJyYXkgb2Yg b3B0aW9uIHJhbmdlcy4KKysgICAgICoKKysgICAgICogTW9zdCBvZiBvcHRpb24gdHlwZXMgdXNl IGp1c3Qgb25lIGNvbXBvbmVudC4KKysgICAgICogRm9sbG93aW5nIGRlc2NyaWJlcyBtdWx0aS1j b21wb25lbnQgb3B0aW9uIHR5cGVzOgorKyAgICAgKgorKyAgICAgKiBBVl9PUFRfVFlQRV9JTUFH RV9TSVpFOgorKyAgICAgKiBjb21wb25lbnQgaW5kZXggMDogcmFuZ2Ugb2YgcGl4ZWwgY291bnQg KHdpZHRoICogaGVpZ2h0KS4KKysgICAgICogY29tcG9uZW50IGluZGV4IDE6IHJhbmdlIG9mIHdp ZHRoLgorKyAgICAgKiBjb21wb25lbnQgaW5kZXggMjogcmFuZ2Ugb2YgaGVpZ2h0LgorKyAgICAg KgorKyAgICAgKiBAbm90ZSBUbyBvYnRhaW4gbXVsdGktY29tcG9uZW50IHZlcnNpb24gb2YgdGhp cyBzdHJ1Y3R1cmUsIHVzZXIgbXVzdAorKyAgICAgKiAgICAgICBwcm92aWRlIEFWX09QVF9NVUxU SV9DT01QT05FTlRfUkFOR0UgdG8gYXZfb3B0X3F1ZXJ5X3JhbmdlcyBvcgorKyAgICAgKiAgICAg ICBhdl9vcHRfcXVlcnlfcmFuZ2VzX2RlZmF1bHQgZnVuY3Rpb24uCisrICAgICAqCisrICAgICAq IE11bHRpLWNvbXBvbmVudCByYW5nZSBjYW4gYmUgcmVhZCBhcyBpbiBmb2xsb3dpbmcgZXhhbXBs ZToKKysgICAgICoKKysgICAgICogQGNvZGUKKysgICAgICogaW50IHJhbmdlX2luZGV4LCBjb21w b25lbnRfaW5kZXg7CisrICAgICAqIEFWT3B0aW9uUmFuZ2VzICpyYW5nZXM7CisrICAgICAqIEFW T3B0aW9uUmFuZ2UgKnJhbmdlWzNdOyAvL21heSByZXF1aXJlIG1vcmUgdGhhbiAzIGluIHRoZSBm dXR1cmUuCisrICAgICAqIGF2X29wdF9xdWVyeV9yYW5nZXMoJnJhbmdlcywgb2JqLCBrZXksIEFW X09QVF9NVUxUSV9DT01QT05FTlRfUkFOR0UpOworKyAgICAgKiBmb3IgKHJhbmdlX2luZGV4ID0g MDsgcmFuZ2VfaW5kZXggPCByYW5nZXMtPm5iX3JhbmdlczsgcmFuZ2VfaW5kZXgrKykgeworKyAg ICAgKiAgICAgZm9yIChjb21wb25lbnRfaW5kZXggPSAwOyBjb21wb25lbnRfaW5kZXggPCByYW5n ZXMtPm5iX2NvbXBvbmVudHM7IGNvbXBvbmVudF9pbmRleCsrKQorKyAgICAgKiAgICAgICAgIHJh bmdlW2NvbXBvbmVudF9pbmRleF0gPSByYW5nZXMtPnJhbmdlW3Jhbmdlcy0+bmJfcmFuZ2VzICog Y29tcG9uZW50X2luZGV4ICsgcmFuZ2VfaW5kZXhdOworKyAgICAgKiAgICAgLy9kbyBzb21ldGhp bmcgd2l0aCByYW5nZSBoZXJlLgorKyAgICAgKiB9CisrICAgICAqIGF2X29wdF9mcmVlcF9yYW5n ZXMoJnJhbmdlcyk7CisrICAgICAqIEBlbmRjb2RlCisrICAgICAqLworKyAgICBBVk9wdGlvblJh bmdlICoqcmFuZ2U7CisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgcmFuZ2VzIHBlciBjb21w b25lbnQuCisrICAgICAqLworKyAgICBpbnQgbmJfcmFuZ2VzOworKyAgICAvKioKKysgICAgICog TnVtYmVyIG9mIGNvbXBvbmVudHMuCisrICAgICAqLworKyAgICBpbnQgbmJfY29tcG9uZW50czsK Kyt9IEFWT3B0aW9uUmFuZ2VzOworKworKy8qKgorKyAqIEBkZWZncm91cCBvcHRfbW5nIEFWT3B0 aW9uICh1bilpbml0aWFsaXphdGlvbiBhbmQgaW5zcGVjdGlvbi4KKysgKiBAeworKyAqLworKwor Ky8qKgorKyAqIFNldCB0aGUgdmFsdWVzIG9mIGFsbCBBVk9wdGlvbiBmaWVsZHMgdG8gdGhlaXIg ZGVmYXVsdCB2YWx1ZXMuCisrICoKKysgKiBAcGFyYW0gcyBhbiBBVk9wdGlvbi1lbmFibGVkIHN0 cnVjdCAoaXRzIGZpcnN0IG1lbWJlciBtdXN0IGJlIGEgcG9pbnRlciB0byBBVkNsYXNzKQorKyAq LworK3ZvaWQgYXZfb3B0X3NldF9kZWZhdWx0cyh2b2lkICpzKTsKKysKKysvKioKKysgKiBTZXQg dGhlIHZhbHVlcyBvZiBhbGwgQVZPcHRpb24gZmllbGRzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVz LiBPbmx5IHRoZXNlCisrICogQVZPcHRpb24gZmllbGRzIGZvciB3aGljaCAob3B0LT5mbGFncyAm IG1hc2spID09IGZsYWdzIHdpbGwgaGF2ZSB0aGVpcgorKyAqIGRlZmF1bHQgYXBwbGllZCB0byBz LgorKyAqCisrICogQHBhcmFtIHMgYW4gQVZPcHRpb24tZW5hYmxlZCBzdHJ1Y3QgKGl0cyBmaXJz dCBtZW1iZXIgbXVzdCBiZSBhIHBvaW50ZXIgdG8gQVZDbGFzcykKKysgKiBAcGFyYW0gbWFzayBj b21iaW5hdGlvbiBvZiBBVl9PUFRfRkxBR18qCisrICogQHBhcmFtIGZsYWdzIGNvbWJpbmF0aW9u IG9mIEFWX09QVF9GTEFHXyoKKysgKi8KKyt2b2lkIGF2X29wdF9zZXRfZGVmYXVsdHMyKHZvaWQg KnMsIGludCBtYXNrLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIEZyZWUgYWxsIGFsbG9jYXRl ZCBvYmplY3RzIGluIG9iai4KKysgKi8KKyt2b2lkIGF2X29wdF9mcmVlKHZvaWQgKm9iaik7Cisr CisrLyoqCisrICogSXRlcmF0ZSBvdmVyIGFsbCBBVk9wdGlvbnMgYmVsb25naW5nIHRvIG9iai4K KysgKgorKyAqIEBwYXJhbSBvYmogYW4gQVZPcHRpb25zLWVuYWJsZWQgc3RydWN0IG9yIGEgZG91 YmxlIHBvaW50ZXIgdG8gYW4KKysgKiAgICAgICAgICAgIEFWQ2xhc3MgZGVzY3JpYmluZyBpdC4K KysgKiBAcGFyYW0gcHJldiByZXN1bHQgb2YgdGhlIHByZXZpb3VzIGNhbGwgdG8gYXZfb3B0X25l eHQoKSBvbiB0aGlzIG9iamVjdAorKyAqICAgICAgICAgICAgIG9yIE5VTEwKKysgKiBAcmV0dXJu IG5leHQgQVZPcHRpb24gb3IgTlVMTAorKyAqLworK2NvbnN0IEFWT3B0aW9uICphdl9vcHRfbmV4 dChjb25zdCB2b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpwcmV2KTsKKysKKysvKioKKysgKiBJ dGVyYXRlIG92ZXIgQVZPcHRpb25zLWVuYWJsZWQgY2hpbGRyZW4gb2Ygb2JqLgorKyAqCisrICog QHBhcmFtIHByZXYgcmVzdWx0IG9mIGEgcHJldmlvdXMgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIG9y IE5VTEwKKysgKiBAcmV0dXJuIG5leHQgQVZPcHRpb25zLWVuYWJsZWQgY2hpbGQgb3IgTlVMTAor KyAqLworK3ZvaWQgKmF2X29wdF9jaGlsZF9uZXh0KHZvaWQgKm9iaiwgdm9pZCAqcHJldik7Cisr CisrLyoqCisrICogSXRlcmF0ZSBvdmVyIHBvdGVudGlhbCBBVk9wdGlvbnMtZW5hYmxlZCBjaGls ZHJlbiBvZiBwYXJlbnQuCisrICoKKysgKiBAcGFyYW0gaXRlciBhIHBvaW50ZXIgd2hlcmUgaXRl cmF0aW9uIHN0YXRlIGlzIHN0b3JlZC4KKysgKiBAcmV0dXJuIEFWQ2xhc3MgY29ycmVzcG9uZGlu ZyB0byBuZXh0IHBvdGVudGlhbCBjaGlsZCBvciBOVUxMCisrICovCisrY29uc3QgQVZDbGFzcyAq YXZfb3B0X2NoaWxkX2NsYXNzX2l0ZXJhdGUoY29uc3QgQVZDbGFzcyAqcGFyZW50LCB2b2lkICoq aXRlcik7CisrCisrI2RlZmluZSBBVl9PUFRfU0VBUkNIX0NISUxEUkVOICAgKDEgPDwgMCkgLyoq PCBTZWFyY2ggaW4gcG9zc2libGUgY2hpbGRyZW4gb2YgdGhlCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBvYmplY3QgZmlyc3QuICovCisrLyoq CisrICogIFRoZSBvYmogcGFzc2VkIHRvIGF2X29wdF9maW5kKCkgaXMgZmFrZSAtLSBvbmx5IGEg ZG91YmxlIHBvaW50ZXIgdG8gQVZDbGFzcworKyAqICBpbnN0ZWFkIG9mIGEgcmVxdWlyZWQgcG9p bnRlciB0byBhIHN0cnVjdCBjb250YWluaW5nIEFWQ2xhc3MuIFRoaXMgaXMKKysgKiAgdXNlZnVs IGZvciBzZWFyY2hpbmcgZm9yIG9wdGlvbnMgd2l0aG91dCBuZWVkaW5nIHRvIGFsbG9jYXRlIHRo ZSBjb3JyZXNwb25kaW5nCisrICogIG9iamVjdC4KKysgKi8KKysjZGVmaW5lIEFWX09QVF9TRUFS Q0hfRkFLRV9PQkogICAoMSA8PCAxKQorKworKy8qKgorKyAqICBJbiBhdl9vcHRfZ2V0LCByZXR1 cm4gTlVMTCBpZiB0aGUgb3B0aW9uIGhhcyBhIHBvaW50ZXIgdHlwZSBhbmQgaXMgc2V0IHRvIE5V TEwsCisrICogIHJhdGhlciB0aGFuIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcuCisrICovCisr I2RlZmluZSBBVl9PUFRfQUxMT1dfTlVMTCAoMSA8PCAyKQorKworKy8qKgorKyAqIE1heSBiZSB1 c2VkIHdpdGggYXZfb3B0X3NldF9hcnJheSgpIHRvIHNpZ25hbCB0aGF0IG5ldyBlbGVtZW50cyBz aG91bGQKKysgKiByZXBsYWNlIHRoZSBleGlzdGluZyBvbmVzIGluIHRoZSBpbmRpY2F0ZWQgcmFu Z2UuCisrICovCisrI2RlZmluZSBBVl9PUFRfQVJSQVlfUkVQTEFDRSAoMSA8PCAzKQorKworKy8q KgorKyAqICBBbGxvd3MgYXZfb3B0X3F1ZXJ5X3JhbmdlcyBhbmQgYXZfb3B0X3F1ZXJ5X3Jhbmdl c19kZWZhdWx0IHRvIHJldHVybiBtb3JlIHRoYW4KKysgKiAgb25lIGNvbXBvbmVudCBmb3IgY2Vy dGFpbiBvcHRpb24gdHlwZXMuCisrICogIEBzZWUgQVZPcHRpb25SYW5nZXMgZm9yIGRldGFpbHMu CisrICovCisrI2RlZmluZSBBVl9PUFRfTVVMVElfQ09NUE9ORU5UX1JBTkdFICgxIDw8IDEyKQor KworKy8qKgorKyAqIExvb2sgZm9yIGFuIG9wdGlvbiBpbiBhbiBvYmplY3QuIENvbnNpZGVyIG9u bHkgb3B0aW9ucyB3aGljaAorKyAqIGhhdmUgYWxsIHRoZSBzcGVjaWZpZWQgZmxhZ3Mgc2V0Lgor KyAqCisrICogQHBhcmFtW2luXSBvYmogQSBwb2ludGVyIHRvIGEgc3RydWN0IHdob3NlIGZpcnN0 IGVsZW1lbnQgaXMgYQorKyAqICAgICAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gQVZDbGFzcy4K KysgKiAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5IGEgZG91YmxlIHBvaW50ZXIgdG8gYW4g QVZDbGFzcywgaWYKKysgKiAgICAgICAgICAgICAgICBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIHNl YXJjaCBmbGFnIGlzIHNldC4KKysgKiBAcGFyYW1baW5dIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG9w dGlvbiB0byBsb29rIGZvci4KKysgKiBAcGFyYW1baW5dIHVuaXQgV2hlbiBzZWFyY2hpbmcgZm9y IG5hbWVkIGNvbnN0YW50cywgbmFtZSBvZiB0aGUgdW5pdAorKyAqICAgICAgICAgICAgICAgICBp dCBiZWxvbmdzIHRvLgorKyAqIEBwYXJhbSBvcHRfZmxhZ3MgRmluZCBvbmx5IG9wdGlvbnMgd2l0 aCBhbGwgdGhlIHNwZWNpZmllZCBmbGFncyBzZXQgKEFWX09QVF9GTEFHKS4KKysgKiBAcGFyYW0g c2VhcmNoX2ZsYWdzIEEgY29tYmluYXRpb24gb2YgQVZfT1BUX1NFQVJDSF8qLgorKyAqCisrICog QHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiBmb3VuZCwgb3IgTlVMTCBpZiBubyBvcHRp b24KKysgKiAgICAgICAgIHdhcyBmb3VuZC4KKysgKgorKyAqIEBub3RlIE9wdGlvbnMgZm91bmQg d2l0aCBBVl9PUFRfU0VBUkNIX0NISUxEUkVOIGZsYWcgbWF5IG5vdCBiZSBzZXR0YWJsZQorKyAq IGRpcmVjdGx5IHdpdGggYXZfb3B0X3NldCgpLiBVc2Ugc3BlY2lhbCBjYWxscyB3aGljaCB0YWtl IGFuIG9wdGlvbnMKKysgKiBBVkRpY3Rpb25hcnkgKGUuZy4gYXZmb3JtYXRfb3Blbl9pbnB1dCgp KSB0byBzZXQgb3B0aW9ucyBmb3VuZCB3aXRoIHRoaXMKKysgKiBmbGFnLgorKyAqLworK2NvbnN0 IEFWT3B0aW9uICphdl9vcHRfZmluZCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnVuaXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRfZmxhZ3Ms IGludCBzZWFyY2hfZmxhZ3MpOworKworKy8qKgorKyAqIExvb2sgZm9yIGFuIG9wdGlvbiBpbiBh biBvYmplY3QuIENvbnNpZGVyIG9ubHkgb3B0aW9ucyB3aGljaAorKyAqIGhhdmUgYWxsIHRoZSBz cGVjaWZpZWQgZmxhZ3Mgc2V0LgorKyAqCisrICogQHBhcmFtW2luXSBvYmogQSBwb2ludGVyIHRv IGEgc3RydWN0IHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYQorKyAqICAgICAgICAgICAgICAgIHBv aW50ZXIgdG8gYW4gQVZDbGFzcy4KKysgKiAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5IGEg ZG91YmxlIHBvaW50ZXIgdG8gYW4gQVZDbGFzcywgaWYKKysgKiAgICAgICAgICAgICAgICBBVl9P UFRfU0VBUkNIX0ZBS0VfT0JKIHNlYXJjaCBmbGFnIGlzIHNldC4KKysgKiBAcGFyYW1baW5dIG5h bWUgVGhlIG5hbWUgb2YgdGhlIG9wdGlvbiB0byBsb29rIGZvci4KKysgKiBAcGFyYW1baW5dIHVu aXQgV2hlbiBzZWFyY2hpbmcgZm9yIG5hbWVkIGNvbnN0YW50cywgbmFtZSBvZiB0aGUgdW5pdAor KyAqICAgICAgICAgICAgICAgICBpdCBiZWxvbmdzIHRvLgorKyAqIEBwYXJhbSBvcHRfZmxhZ3Mg RmluZCBvbmx5IG9wdGlvbnMgd2l0aCBhbGwgdGhlIHNwZWNpZmllZCBmbGFncyBzZXQgKEFWX09Q VF9GTEFHKS4KKysgKiBAcGFyYW0gc2VhcmNoX2ZsYWdzIEEgY29tYmluYXRpb24gb2YgQVZfT1BU X1NFQVJDSF8qLgorKyAqIEBwYXJhbVtvdXRdIHRhcmdldF9vYmogaWYgbm9uLU5VTEwsIGFuIG9i amVjdCB0byB3aGljaCB0aGUgb3B0aW9uIGJlbG9uZ3Mgd2lsbCBiZQorKyAqIHdyaXR0ZW4gaGVy ZS4gSXQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIG9iaiBpZiBBVl9PUFRfU0VBUkNIX0NISUxEUkVO IGlzIHByZXNlbnQKKysgKiBpbiBzZWFyY2hfZmxhZ3MuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9y ZWQgaWYgc2VhcmNoX2ZsYWdzIGNvbnRhaW4KKysgKiBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKLgor KyAqCisrICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiBmb3VuZCwgb3IgTlVMTCBp ZiBubyBvcHRpb24KKysgKiAgICAgICAgIHdhcyBmb3VuZC4KKysgKi8KKytjb25zdCBBVk9wdGlv biAqYXZfb3B0X2ZpbmQyKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq dW5pdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRfZmxhZ3MsIGludCBz ZWFyY2hfZmxhZ3MsIHZvaWQgKip0YXJnZXRfb2JqKTsKKysKKysvKioKKysgKiBTaG93IHRoZSBv Ymogb3B0aW9ucy4KKysgKgorKyAqIEBwYXJhbSByZXFfZmxhZ3MgcmVxdWVzdGVkIGZsYWdzIGZv ciB0aGUgb3B0aW9ucyB0byBzaG93LiBTaG93IG9ubHkgdGhlCisrICogb3B0aW9ucyBmb3Igd2hp Y2ggaXQgaXMgb3B0LT5mbGFncyAmIHJlcV9mbGFncy4KKysgKiBAcGFyYW0gcmVqX2ZsYWdzIHJl amVjdGVkIGZsYWdzIGZvciB0aGUgb3B0aW9ucyB0byBzaG93LiBTaG93IG9ubHkgdGhlCisrICog b3B0aW9ucyBmb3Igd2hpY2ggaXQgaXMgIShvcHQtPmZsYWdzICYgcmVxX2ZsYWdzKS4KKysgKiBA cGFyYW0gYXZfbG9nX29iaiBsb2cgY29udGV4dCB0byB1c2UgZm9yIHNob3dpbmcgdGhlIG9wdGlv bnMKKysgKi8KKytpbnQgYXZfb3B0X3Nob3cyKHZvaWQgKm9iaiwgdm9pZCAqYXZfbG9nX29iaiwg aW50IHJlcV9mbGFncywgaW50IHJlal9mbGFncyk7CisrCisrLyoqCisrICogRXh0cmFjdCBhIGtl eS12YWx1ZSBwYWlyIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy4KKysgKgorKyAqIEBw YXJhbSByb3B0cyAgICAgICAgcG9pbnRlciB0byB0aGUgb3B0aW9ucyBzdHJpbmcsIHdpbGwgYmUg dXBkYXRlZCB0bworKyAqICAgICAgICAgICAgICAgICAgICAgcG9pbnQgdG8gdGhlIHJlc3Qgb2Yg dGhlIHN0cmluZyAob25lIG9mIHRoZSBwYWlyc19zZXAKKysgKiAgICAgICAgICAgICAgICAgICAg IG9yIHRoZSBmaW5hbCBOVUwpCisrICogQHBhcmFtIGtleV92YWxfc2VwICBhIDAtdGVybWluYXRl ZCBsaXN0IG9mIGNoYXJhY3RlcnMgdXNlZCB0byBzZXBhcmF0ZQorKyAqICAgICAgICAgICAgICAg ICAgICAga2V5IGZyb20gdmFsdWUsIGZvciBleGFtcGxlICc9JworKyAqIEBwYXJhbSBwYWlyc19z ZXAgICAgYSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzIHVzZWQgdG8gc2VwYXJhdGUK KysgKiAgICAgICAgICAgICAgICAgICAgIHR3byBwYWlycyBmcm9tIGVhY2ggb3RoZXIsIGZvciBl eGFtcGxlICc6JyBvciAnLCcKKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgIGZsYWdzOyBzZWUgdGhl IEFWX09QVF9GTEFHXyogdmFsdWVzIGJlbG93CisrICogQHBhcmFtIHJrZXkgICAgICAgICBwYXJz ZWQga2V5OyBtdXN0IGJlIGZyZWVkIHVzaW5nIGF2X2ZyZWUoKQorKyAqIEBwYXJhbSBydmFsICAg ICAgICAgcGFyc2VkIHZhbHVlOyBtdXN0IGJlIGZyZWVkIHVzaW5nIGF2X2ZyZWUoKQorKyAqCisr ICogQHJldHVybiAgPj0wIGZvciBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3Bv bmRpbmcgdG8gYW4KKysgKiAgICAgICAgICBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBlcnJvcjsg aW4gcGFydGljdWxhcjoKKysgKiAgICAgICAgICBBVkVSUk9SKEVJTlZBTCkgaWYgbm8ga2V5IGlz IHByZXNlbnQKKysgKgorKyAqLworK2ludCBhdl9vcHRfZ2V0X2tleV92YWx1ZShjb25zdCBjaGFy ICoqcm9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV92YWxf c2VwLCBjb25zdCBjaGFyICpwYWlyc19zZXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmtleSwgY2hh ciAqKnJ2YWwpOworKworK2VudW0geworKworKyAgICAvKioKKysgICAgICogQWNjZXB0IHRvIHBh cnNlIGEgdmFsdWUgd2l0aG91dCBhIGtleTsgdGhlIGtleSB3aWxsIHRoZW4gYmUgcmV0dXJuZWQK KysgICAgICogYXMgTlVMTC4KKysgICAgICovCisrICAgIEFWX09QVF9GTEFHX0lNUExJQ0lUX0tF WSA9IDEsCisrfTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEBkZWZncm91 cCBvcHRfd3JpdGUgU2V0dGluZyBhbmQgbW9kaWZ5aW5nIG9wdGlvbiB2YWx1ZXMKKysgKiBAewor KyAqLworKworKy8qKgorKyAqIFBhcnNlIHRoZSBrZXkvdmFsdWUgcGFpcnMgbGlzdCBpbiBvcHRz LiBGb3IgZWFjaCBrZXkvdmFsdWUgcGFpcgorKyAqIGZvdW5kLCBzdG9yZXMgdGhlIHZhbHVlIGlu IHRoZSBmaWVsZCBpbiBjdHggdGhhdCBpcyBuYW1lZCBsaWtlIHRoZQorKyAqIGtleS4gY3R4IG11 c3QgYmUgYW4gQVZDbGFzcyBjb250ZXh0LCBzdG9yaW5nIGlzIGRvbmUgdXNpbmcKKysgKiBBVk9w dGlvbnMuCisrICoKKysgKiBAcGFyYW0gb3B0cyBvcHRpb25zIHN0cmluZyB0byBwYXJzZSwgbWF5 IGJlIE5VTEwKKysgKiBAcGFyYW0ga2V5X3ZhbF9zZXAgYSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBj aGFyYWN0ZXJzIHVzZWQgdG8KKysgKiBzZXBhcmF0ZSBrZXkgZnJvbSB2YWx1ZQorKyAqIEBwYXJh bSBwYWlyc19zZXAgYSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzIHVzZWQgdG8gc2Vw YXJhdGUKKysgKiB0d28gcGFpcnMgZnJvbSBlYWNoIG90aGVyCisrICogQHJldHVybiB0aGUgbnVt YmVyIG9mIHN1Y2Nlc3NmdWxseSBzZXQga2V5L3ZhbHVlIHBhaXJzLCBvciBhIG5lZ2F0aXZlCisr ICogdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBlcnJv cjoKKysgKiBBVkVSUk9SKEVJTlZBTCkgaWYgb3B0cyBjYW5ub3QgYmUgcGFyc2VkLAorKyAqIHRo ZSBlcnJvciBjb2RlIGlzc3VlZCBieSBhdl9vcHRfc2V0KCkgaWYgYSBrZXkvdmFsdWUgcGFpcgor KyAqIGNhbm5vdCBiZSBzZXQKKysgKi8KKytpbnQgYXZfc2V0X29wdGlvbnNfc3RyaW5nKHZvaWQg KmN0eCwgY29uc3QgY2hhciAqb3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmtleV92YWxfc2VwLCBjb25zdCBjaGFyICpwYWlyc19zZXApOworKworKy8qKgorKyAq IFBhcnNlIHRoZSBrZXktdmFsdWUgcGFpcnMgbGlzdCBpbiBvcHRzLiBGb3IgZWFjaCBrZXk9dmFs dWUgcGFpciBmb3VuZCwKKysgKiBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIG9w dGlvbiBpbiBjdHguCisrICoKKysgKiBAcGFyYW0gY3R4ICAgICAgICAgIHRoZSBBVkNsYXNzIG9i amVjdCB0byBzZXQgb3B0aW9ucyBvbgorKyAqIEBwYXJhbSBvcHRzICAgICAgICAgdGhlIG9wdGlv bnMgc3RyaW5nLCBrZXktdmFsdWUgcGFpcnMgc2VwYXJhdGVkIGJ5IGEKKysgKiAgICAgICAgICAg ICAgICAgICAgIGRlbGltaXRlcgorKyAqIEBwYXJhbSBzaG9ydGhhbmQgICAgYSBOVUxMLXRlcm1p bmF0ZWQgYXJyYXkgb2Ygb3B0aW9ucyBuYW1lcyBmb3Igc2hvcnRoYW5kCisrICogICAgICAgICAg ICAgICAgICAgICBub3RhdGlvbjogaWYgdGhlIGZpcnN0IGZpZWxkIGluIG9wdHMgaGFzIG5vIGtl eSBwYXJ0LAorKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIGtleSBpcyB0YWtlbiBmcm9tIHRo ZSBmaXJzdCBlbGVtZW50IG9mIHNob3J0aGFuZDsKKysgKiAgICAgICAgICAgICAgICAgICAgIHRo ZW4gYWdhaW4gZm9yIHRoZSBzZWNvbmQsIGV0Yy4sIHVudGlsIGVpdGhlciBvcHRzIGlzCisrICog ICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCwgc2hvcnRoYW5kIGlzIGZpbmlzaGVkIG9yIGEg bmFtZWQgb3B0aW9uIGlzCisrICogICAgICAgICAgICAgICAgICAgICBmb3VuZDsgYWZ0ZXIgdGhh dCwgYWxsIG9wdGlvbnMgbXVzdCBiZSBuYW1lZAorKyAqIEBwYXJhbSBrZXlfdmFsX3NlcCAgYSAw LXRlcm1pbmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzIHVzZWQgdG8gc2VwYXJhdGUKKysgKiAgICAg ICAgICAgICAgICAgICAgIGtleSBmcm9tIHZhbHVlLCBmb3IgZXhhbXBsZSAnPScKKysgKiBAcGFy YW0gcGFpcnNfc2VwICAgIGEgMC10ZXJtaW5hdGVkIGxpc3Qgb2YgY2hhcmFjdGVycyB1c2VkIHRv IHNlcGFyYXRlCisrICogICAgICAgICAgICAgICAgICAgICB0d28gcGFpcnMgZnJvbSBlYWNoIG90 aGVyLCBmb3IgZXhhbXBsZSAnOicgb3IgJywnCisrICogQHJldHVybiAgdGhlIG51bWJlciBvZiBz dWNjZXNzZnVsbHkgc2V0IGtleT12YWx1ZSBwYWlycywgb3IgYSBuZWdhdGl2ZQorKyAqICAgICAg ICAgIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUiBjb2RlIGluIGNhc2Ugb2YgZXJy b3I6CisrICogICAgICAgICAgQVZFUlJPUihFSU5WQUwpIGlmIG9wdHMgY2Fubm90IGJlIHBhcnNl ZCwKKysgKiAgICAgICAgICB0aGUgZXJyb3IgY29kZSBpc3N1ZWQgYnkgYXZfc2V0X3N0cmluZzMo KSBpZiBhIGtleS92YWx1ZSBwYWlyCisrICogICAgICAgICAgY2Fubm90IGJlIHNldAorKyAqCisr ICogT3B0aW9ucyBuYW1lcyBtdXN0IHVzZSBvbmx5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczog YS16IEEtWiAwLTkgLSAuIC8gXworKyAqIFNlcGFyYXRvcnMgbXVzdCB1c2UgY2hhcmFjdGVycyBk aXN0aW5jdCBmcm9tIG9wdGlvbiBuYW1lcyBhbmQgZnJvbSBlYWNoCisrICogb3RoZXIuCisrICov CisraW50IGF2X29wdF9zZXRfZnJvbV9zdHJpbmcodm9pZCAqY3R4LCBjb25zdCBjaGFyICpvcHRz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpzaG9ydGhh bmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5X3ZhbF9zZXAs IGNvbnN0IGNoYXIgKnBhaXJzX3NlcCk7CisrCisrLyoqCisrICogU2V0IGFsbCB0aGUgb3B0aW9u cyBmcm9tIGEgZ2l2ZW4gZGljdGlvbmFyeSBvbiBhbiBvYmplY3QuCisrICoKKysgKiBAcGFyYW0g b2JqIGEgc3RydWN0IHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBwb2ludGVyIHRvIEFWQ2xhc3MK KysgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIHRvIHByb2Nlc3MuIFRoaXMgZGljdGlvbmFyeSB3 aWxsIGJlIGZyZWVkIGFuZCByZXBsYWNlZAorKyAqICAgICAgICAgICAgICAgIGJ5IGEgbmV3IG9u ZSBjb250YWluaW5nIGFsbCBvcHRpb25zIG5vdCBmb3VuZCBpbiBvYmouCisrICogICAgICAgICAg ICAgICAgT2YgY291cnNlIHRoaXMgbmV3IGRpY3Rpb25hcnkgbmVlZHMgdG8gYmUgZnJlZWQgYnkg Y2FsbGVyCisrICogICAgICAgICAgICAgICAgd2l0aCBhdl9kaWN0X2ZyZWUoKS4KKysgKgorKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgaWYgc29tZSBvcHRpb24g d2FzIGZvdW5kIGluIG9iaiwKKysgKiAgICAgICAgIGJ1dCBjb3VsZCBub3QgYmUgc2V0LgorKyAq CisrICogQHNlZSBhdl9kaWN0X2NvcHkoKQorKyAqLworK2ludCBhdl9vcHRfc2V0X2RpY3Qodm9p ZCAqb2JqLCBzdHJ1Y3QgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisrCisrCisrLyoqCisrICog U2V0IGFsbCB0aGUgb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gZGljdGlvbmFyeSBvbiBhbiBvYmplY3Qu CisrICoKKysgKiBAcGFyYW0gb2JqIGEgc3RydWN0IHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBw b2ludGVyIHRvIEFWQ2xhc3MKKysgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIHRvIHByb2Nlc3Mu IFRoaXMgZGljdGlvbmFyeSB3aWxsIGJlIGZyZWVkIGFuZCByZXBsYWNlZAorKyAqICAgICAgICAg ICAgICAgIGJ5IGEgbmV3IG9uZSBjb250YWluaW5nIGFsbCBvcHRpb25zIG5vdCBmb3VuZCBpbiBv YmouCisrICogICAgICAgICAgICAgICAgT2YgY291cnNlIHRoaXMgbmV3IGRpY3Rpb25hcnkgbmVl ZHMgdG8gYmUgZnJlZWQgYnkgY2FsbGVyCisrICogICAgICAgICAgICAgICAgd2l0aCBhdl9kaWN0 X2ZyZWUoKS4KKysgKiBAcGFyYW0gc2VhcmNoX2ZsYWdzIEEgY29tYmluYXRpb24gb2YgQVZfT1BU X1NFQVJDSF8qLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZF UlJPUiBpZiBzb21lIG9wdGlvbiB3YXMgZm91bmQgaW4gb2JqLAorKyAqICAgICAgICAgYnV0IGNv dWxkIG5vdCBiZSBzZXQuCisrICoKKysgKiBAc2VlIGF2X2RpY3RfY29weSgpCisrICovCisraW50 IGF2X29wdF9zZXRfZGljdDIodm9pZCAqb2JqLCBzdHJ1Y3QgQVZEaWN0aW9uYXJ5ICoqb3B0aW9u cywgaW50IHNlYXJjaF9mbGFncyk7CisrCisrLyoqCisrICogQ29weSBvcHRpb25zIGZyb20gc3Jj IG9iamVjdCBpbnRvIGRlc3Qgb2JqZWN0LgorKyAqCisrICogVGhlIHVuZGVybHlpbmcgQVZDbGFz cyBvZiBib3RoIHNyYyBhbmQgZGVzdCBtdXN0IGNvaW5jaWRlLiBUaGUgZ3VhcmFudGVlCisrICog YmVsb3cgZG9lcyBub3QgYXBwbHkgaWYgdGhpcyBpcyBub3QgZnVsZmlsbGVkLgorKyAqCisrICog T3B0aW9ucyB0aGF0IHJlcXVpcmUgbWVtb3J5IGFsbG9jYXRpb24gKGUuZy4gc3RyaW5nIG9yIGJp bmFyeSkgYXJlIG1hbGxvYydlZCBpbiBkZXN0IG9iamVjdC4KKysgKiBPcmlnaW5hbCBtZW1vcnkg YWxsb2NhdGVkIGZvciBzdWNoIG9wdGlvbnMgaXMgZnJlZWQgdW5sZXNzIGJvdGggc3JjIGFuZCBk ZXN0IG9wdGlvbnMgcG9pbnRzIHRvIHRoZSBzYW1lIG1lbW9yeS4KKysgKgorKyAqIEV2ZW4gb24g ZXJyb3IgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IGFsbG9jYXRlZCBvcHRpb25zIGZyb20gc3JjIGFu ZCBkZXN0CisrICogbm8gbG9uZ2VyIGFsaWFzIGVhY2ggb3RoZXIgYWZ0ZXJ3YXJkczsgaW4gcGFy dGljdWxhciBjYWxsaW5nIGF2X29wdF9mcmVlKCkKKysgKiBvbiBib3RoIHNyYyBhbmQgZGVzdCBp cyBzYWZlIGFmdGVyd2FyZHMgaWYgZGVzdCBoYXMgYmVlbiBtZW1kdXAnZWQgZnJvbSBzcmMuCisr ICoKKysgKiBAcGFyYW0gZGVzdCBPYmplY3QgdG8gY29weSBmcm9tCisrICogQHBhcmFtIHNyYyAg T2JqZWN0IHRvIGNvcHkgaW50bworKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBv biBlcnJvcgorKyAqLworK2ludCBhdl9vcHRfY29weSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpz cmMpOworKworKy8qKgorKyAqIEBkZWZncm91cCBvcHRfc2V0X2Z1bmNzIE9wdGlvbiBzZXR0aW5n IGZ1bmN0aW9ucworKyAqIEB7CisrICogVGhvc2UgZnVuY3Rpb25zIHNldCB0aGUgZmllbGQgb2Yg b2JqIHdpdGggdGhlIGdpdmVuIG5hbWUgdG8gdmFsdWUuCisrICoKKysgKiBAcGFyYW1baW5dIG9i aiBBIHN0cnVjdCB3aG9zZSBmaXJzdCBlbGVtZW50IGlzIGEgcG9pbnRlciB0byBhbiBBVkNsYXNz LgorKyAqIEBwYXJhbVtpbl0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0CisrICog QHBhcmFtW2luXSB2YWwgVGhlIHZhbHVlIHRvIHNldC4gSW4gY2FzZSBvZiBhdl9vcHRfc2V0KCkg aWYgdGhlIGZpZWxkIGlzIG5vdAorKyAqIG9mIGEgc3RyaW5nIHR5cGUsIHRoZW4gdGhlIGdpdmVu IHN0cmluZyBpcyBwYXJzZWQuCisrICogU0kgcG9zdGZpeGVzIGFuZCBzb21lIG5hbWVkIHNjYWxh cnMgYXJlIHN1cHBvcnRlZC4KKysgKiBJZiB0aGUgZmllbGQgaXMgb2YgYSBudW1lcmljIHR5cGUs IGl0IGhhcyB0byBiZSBhIG51bWVyaWMgb3IgbmFtZWQKKysgKiBzY2FsYXIuIEJlaGF2aW9yIHdp dGggbW9yZSB0aGFuIG9uZSBzY2FsYXIgYW5kICstIGluZml4IG9wZXJhdG9ycworKyAqIGlzIHVu ZGVmaW5lZC4KKysgKiBJZiB0aGUgZmllbGQgaXMgb2YgYSBmbGFncyB0eXBlLCBpdCBoYXMgdG8g YmUgYSBzZXF1ZW5jZSBvZiBudW1lcmljCisrICogc2NhbGFycyBvciBuYW1lZCBmbGFncyBzZXBh cmF0ZWQgYnkgJysnIG9yICctJy4gUHJlZml4aW5nIGEgZmxhZworKyAqIHdpdGggJysnIGNhdXNl cyBpdCB0byBiZSBzZXQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG90aGVyIGZsYWdzOworKyAqIHNp bWlsYXJseSwgJy0nIHVuc2V0cyBhIGZsYWcuCisrICogSWYgdGhlIGZpZWxkIGlzIG9mIGEgZGlj dGlvbmFyeSB0eXBlLCBpdCBoYXMgdG8gYmUgYSAnOicgc2VwYXJhdGVkIGxpc3Qgb2YKKysgKiBr ZXk9dmFsdWUgcGFyYW1ldGVycy4gVmFsdWVzIGNvbnRhaW5pbmcgJzonIHNwZWNpYWwgY2hhcmFj dGVycyBtdXN0IGJlCisrICogZXNjYXBlZC4KKysgKiBAcGFyYW0gc2VhcmNoX2ZsYWdzIGZsYWdz IHBhc3NlZCB0byBhdl9vcHRfZmluZDIuIEkuZS4gaWYgQVZfT1BUX1NFQVJDSF9DSElMRFJFTgor KyAqIGlzIHBhc3NlZCBoZXJlLCB0aGVuIHRoZSBvcHRpb24gbWF5IGJlIHNldCBvbiBhIGNoaWxk IG9mIG9iai4KKysgKgorKyAqIEByZXR1cm4gMCBpZiB0aGUgdmFsdWUgaGFzIGJlZW4gc2V0LCBv ciBhbiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZgorKyAqIGVycm9yOgorKyAqIEFWRVJST1JfT1BU SU9OX05PVF9GT1VORCBpZiBubyBtYXRjaGluZyBvcHRpb24gZXhpc3RzCisrICogQVZFUlJPUihF UkFOR0UpIGlmIHRoZSB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UKKysgKiBBVkVSUk9SKEVJTlZBTCkg aWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZAorKyAqLworK2ludCBhdl9vcHRfc2V0ICAgICAgICAg KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsLCBpbnQgc2VhcmNo X2ZsYWdzKTsKKytpbnQgYXZfb3B0X3NldF9pbnQgICAgICh2b2lkICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIGludDY0X3QgICAgIHZhbCwgaW50IHNlYXJjaF9mbGFncyk7CisraW50IGF2X29wdF9z ZXRfZG91YmxlICAodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgICAgICB2YWws IGludCBzZWFyY2hfZmxhZ3MpOworK2ludCBhdl9vcHRfc2V0X3EgICAgICAgKHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqbmFtZSwgQVZSYXRpb25hbCAgdmFsLCBpbnQgc2VhcmNoX2ZsYWdzKTsKKytp bnQgYXZfb3B0X3NldF9iaW4gICAgICh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IHVpbnQ4X3QgKnZhbCwgaW50IHNpemUsIGludCBzZWFyY2hfZmxhZ3MpOworK2ludCBhdl9vcHRf c2V0X2ltYWdlX3NpemUodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgdywgaW50IGgs IGludCBzZWFyY2hfZmxhZ3MpOworK2ludCBhdl9vcHRfc2V0X3BpeGVsX2ZtdCAodm9pZCAqb2Jq LCBjb25zdCBjaGFyICpuYW1lLCBlbnVtIEFWUGl4ZWxGb3JtYXQgZm10LCBpbnQgc2VhcmNoX2Zs YWdzKTsKKytpbnQgYXZfb3B0X3NldF9zYW1wbGVfZm10KHZvaWQgKm9iaiwgY29uc3QgY2hhciAq bmFtZSwgZW51bSBBVlNhbXBsZUZvcm1hdCBmbXQsIGludCBzZWFyY2hfZmxhZ3MpOworK2ludCBh dl9vcHRfc2V0X3ZpZGVvX3JhdGUodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBBVlJhdGlv bmFsIHZhbCwgaW50IHNlYXJjaF9mbGFncyk7CisrLyoqCisrICogQG5vdGUgQW55IG9sZCBjaGxh eW91dCBwcmVzZW50IGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgd2l0aCBhIGNvcHkgb2YgdGhl IG5ldyBvbmUuIFRoZQorKyAqIGNhbGxlciBzdGlsbCBvd25zIGxheW91dCBhbmQgaXMgcmVzcG9u c2libGUgZm9yIHVuaW5pdGlhbGl6aW5nIGl0LgorKyAqLworK2ludCBhdl9vcHRfc2V0X2NobGF5 b3V0KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgQVZDaGFubmVsTGF5b3V0ICps YXlvdXQsIGludCBzZWFyY2hfZmxhZ3MpOworKy8qKgorKyAqIEBub3RlIEFueSBvbGQgZGljdGlv bmFyeSBwcmVzZW50IGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgd2l0aCBhIGNvcHkgb2YgdGhl IG5ldyBvbmUuIFRoZQorKyAqIGNhbGxlciBzdGlsbCBvd25zIHZhbCBpcyBhbmQgcmVzcG9uc2li bGUgZm9yIGZyZWVpbmcgaXQuCisrICovCisraW50IGF2X29wdF9zZXRfZGljdF92YWwodm9pZCAq b2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBBVkRpY3Rpb25hcnkgKnZhbCwgaW50IHNlYXJj aF9mbGFncyk7CisrCisrLyoqCisrICogQWRkLCByZXBsYWNlLCBvciByZW1vdmUgZWxlbWVudHMg Zm9yIGFuIGFycmF5IG9wdGlvbi4gV2hpY2ggb2YgdGhlc2UKKysgKiBvcGVyYXRpb25zIGlzIHBl cmZvcm1lZCBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgdmFsIGFuZCBzZWFyY2hfZmxhZ3MuCisr ICoKKysgKiBAcGFyYW0gc3RhcnRfZWxlbSBJbmRleCBvZiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVu dCB0byBtb2RpZnk7IG11c3Qgbm90IGJlCisrICogICAgICAgICAgICAgICAgICAgbGFyZ2VyIHRo YW4gYXJyYXkgc2l6ZSBhcyByZXR1cm5lZCBieQorKyAqICAgICAgICAgICAgICAgICAgIGF2X29w dF9nZXRfYXJyYXlfc2l6ZSgpLgorKyAqIEBwYXJhbSBuYl9lbGVtcyBudW1iZXIgb2YgYXJyYXkg ZWxlbWVudHMgdG8gbW9kaWZ5OyB3aGVuIHZhbCBpcyBOVUxMLAorKyAqICAgICAgICAgICAgICAg ICBzdGFydF9lbGVtK25iX2VsZW1zIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIGFycmF5IHNpemUg YXMKKysgKiAgICAgICAgICAgICAgICAgcmV0dXJuZWQgYnkgYXZfb3B0X2dldF9hcnJheV9zaXpl KCkKKysgKgorKyAqIEBwYXJhbSB2YWxfdHlwZSBPcHRpb24gdHlwZSBjb3JyZXNwb25kaW5nIHRv IHRoZSB0eXBlIG9mIHZhbCwgaWdub3JlZCB3aGVuIHZhbCBpcworKyAqICAgICAgICAgICAgICAg ICBOVUxMLgorKyAqCisrICogICAgICAgICAgICAgICAgIFRoZSBlZmZlY3Qgb2YgdGhpcyBmdW5j dGlvbiB3aWxsIHdpbGwgYmUgYXMgaWYgYXZfb3B0X3NldFgoKQorKyAqICAgICAgICAgICAgICAg ICB3YXMgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQsIHdoZXJlIFggaXMgc3BlY2lmaWVkIGJ5IHR5 cGUuCisrICogICAgICAgICAgICAgICAgIEUuZy4gQVZfT1BUX1RZUEVfU1RSSU5HIGNvcnJlc3Bv bmRzIHRvIGF2X29wdF9zZXQoKS4KKysgKgorKyAqICAgICAgICAgICAgICAgICBUeXBpY2FsbHkg dGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHNjYWxhcml6ZWQgdHlwZSBvZgorKyAqICAg ICAgICAgICAgICAgICB0aGUgQVZPcHRpb24gYmVpbmcgc2V0LCBidXQgY2VydGFpbiBjb252ZXJz aW9ucyBhcmUgYWxzbworKyAqICAgICAgICAgICAgICAgICBwb3NzaWJsZSAtIHRoZSBzYW1lIGFz IHRob3NlIGRvbmUgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKysgKiAgICAgICAgICAgICAgICAgYXZf b3B0X3NldCooKSBmdW5jdGlvbi4gRS5nLiBhbnkgb3B0aW9uIHR5cGUgY2FuIGJlIHNldCBmcm9t CisrICogICAgICAgICAgICAgICAgIGEgc3RyaW5nLCBudW1lcmljIHR5cGVzIGNhbiBiZSBzZXQg ZnJvbSBpbnQ2NCwgZG91YmxlLCBvcgorKyAqICAgICAgICAgICAgICAgICByYXRpb25hbCwgZXRj LgorKyAqCisrICogQHBhcmFtIHZhbCBBcnJheSB3aXRoIG5iX2VsZW1zIGVsZW1lbnRzIG9yIE5V TEwuCisrICoKKysgKiAgICAgICAgICAgIFdoZW4gTlVMTCwgbmJfZWxlbXMgYXJyYXkgZWxlbWVu dHMgc3RhcnRpbmcgYXQgc3RhcnRfZWxlbSBhcmUKKysgKiAgICAgICAgICAgIHJlbW92ZWQgZnJv bSB0aGUgYXJyYXkuIEFueSBhcnJheSBlbGVtZW50cyByZW1haW5pbmcgYXQgdGhlIGVuZAorKyAq ICAgICAgICAgICAgYXJlIHNoaWZ0ZWQgYnkgbmJfZWxlbXMgdG93YXJkcyB0aGUgZmlyc3QgZWxl bWVudCBpbiBvcmRlciB0byBrZWVwCisrICogICAgICAgICAgICB0aGUgYXJyYXkgY29udGlndW91 cy4KKysgKgorKyAqICAgICAgICAgICAgT3RoZXJ3aXNlICh2YWwgaXMgbm9uLU5VTEwpLCB0aGUg dHlwZSBvZiB2YWwgbXVzdCBtYXRjaCB0aGUKKysgKiAgICAgICAgICAgIHVuZGVybHlpbmcgQyB0 eXBlIGFzIGRvY3VtZW50ZWQgZm9yIHZhbF90eXBlLgorKyAqCisrICogICAgICAgICAgICBXaGVu IEFWX09QVF9BUlJBWV9SRVBMQUNFIGlzIG5vdCBzZXQgaW4gc2VhcmNoX2ZsYWdzLCB0aGUgYXJy YXkgaXMKKysgKiAgICAgICAgICAgIGVubGFyZ2VkIGJ5IG5iX2VsZW1zLCBhbmQgdGhlIGNvbnRl bnRzIG9mIHZhbCBhcmUgaW5zZXJ0ZWQgYXQKKysgKiAgICAgICAgICAgIHN0YXJ0X2VsZW0uIFBy ZXZpb3VzbHkgZXhpc3RpbmcgYXJyYXkgZWxlbWVudHMgZnJvbSBzdGFydF9lbGVtCisrICogICAg ICAgICAgICBvbndhcmRzIChpZiBwcmVzZW50KSBhcmUgc2hpZnRlZCBieSBuYl9lbGVtcyBhd2F5 IGZyb20gdGhlIGZpcnN0CisrICogICAgICAgICAgICBlbGVtZW50IGluIG9yZGVyIHRvIG1ha2Ug c3BhY2UgZm9yIHRoZSBuZXcgZWxlbWVudHMuCisrICoKKysgKiAgICAgICAgICAgIFdoZW4gQVZf T1BUX0FSUkFZX1JFUExBQ0UgaXMgc2V0IGluIHNlYXJjaF9mbGFncywgdGhlIGNvbnRlbnRzCisr ICogICAgICAgICAgICBvZiB2YWwgcmVwbGFjZSBleGlzdGluZyBhcnJheSBlbGVtZW50cyBmcm9t IHN0YXJ0X2VsZW0gdG8KKysgKiAgICAgICAgICAgIHN0YXJ0X2VsZW0rbmJfZWxlbXMgKGlmIHBy ZXNlbnQpLiBOZXcgYXJyYXkgc2l6ZSBpcworKyAqICAgICAgICAgICAgbWF4KHN0YXJ0X2VsZW0g KyBuYl9lbGVtcywgb2xkIGFycmF5IHNpemUpLgorKyAqLworK2ludCBhdl9vcHRfc2V0X2FycmF5 KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywKKysgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRfZWxlbSwgdW5zaWduZWQgaW50IG5iX2Vs ZW1zLAorKyAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZPcHRpb25UeXBlIHZhbF90eXBlLCBj b25zdCB2b2lkICp2YWwpOworKworKy8qKgorKyAqIEB9CisrICogQH0KKysgKi8KKysKKysvKioK KysgKiBAZGVmZ3JvdXAgb3B0X3JlYWQgUmVhZGluZyBvcHRpb24gdmFsdWVzCisrICogQHsKKysg Ki8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgb3B0X2dldF9mdW5jcyBPcHRpb24gZ2V0dGluZyBm dW5jdGlvbnMKKysgKiBAeworKyAqIFRob3NlIGZ1bmN0aW9ucyBnZXQgYSB2YWx1ZSBvZiB0aGUg b3B0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSBhbiBvYmplY3QuCisrICoKKysgKiBAcGFy YW1baW5dIG9iaiBhIHN0cnVjdCB3aG9zZSBmaXJzdCBlbGVtZW50IGlzIGEgcG9pbnRlciB0byBh biBBVkNsYXNzLgorKyAqIEBwYXJhbVtpbl0gbmFtZSBuYW1lIG9mIHRoZSBvcHRpb24gdG8gZ2V0 LgorKyAqIEBwYXJhbVtpbl0gc2VhcmNoX2ZsYWdzIGZsYWdzIHBhc3NlZCB0byBhdl9vcHRfZmlu ZDIuIEkuZS4gaWYgQVZfT1BUX1NFQVJDSF9DSElMRFJFTgorKyAqIGlzIHBhc3NlZCBoZXJlLCB0 aGVuIHRoZSBvcHRpb24gbWF5IGJlIGZvdW5kIGluIGEgY2hpbGQgb2Ygb2JqLgorKyAqIEBwYXJh bVtvdXRdIG91dF92YWwgdmFsdWUgb2YgdGhlIG9wdGlvbiB3aWxsIGJlIHdyaXR0ZW4gaGVyZQor KyAqIEByZXR1cm4gPj0wIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndp c2UKKysgKi8KKysvKioKKysgKiBAbm90ZSB0aGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUgYXZf bWFsbG9jKCllZCBhbmQgbXVzdCBiZSBhdl9mcmVlKCllZCBieSB0aGUgY2FsbGVyCisrICoKKysg KiBAbm90ZSBpZiBBVl9PUFRfQUxMT1dfTlVMTCBpcyBzZXQgaW4gc2VhcmNoX2ZsYWdzIGluIGF2 X29wdF9nZXQsIGFuZCB0aGUKKysgKiBvcHRpb24gaXMgb2YgdHlwZSBBVl9PUFRfVFlQRV9TVFJJ TkcsIEFWX09QVF9UWVBFX0JJTkFSWSBvciBBVl9PUFRfVFlQRV9ESUNUCisrICogYW5kIGlzIHNl dCB0byBOVUxMLCAqb3V0X3ZhbCB3aWxsIGJlIHNldCB0byBOVUxMIGluc3RlYWQgb2YgYW4gYWxs b2NhdGVkCisrICogZW1wdHkgc3RyaW5nLgorKyAqLworK2ludCBhdl9vcHRfZ2V0ICAgICAgICAg KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywgdWludDhfdCAg ICoqb3V0X3ZhbCk7CisraW50IGF2X29wdF9nZXRfaW50ICAgICAodm9pZCAqb2JqLCBjb25zdCBj aGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLCBpbnQ2NF90ICAgICpvdXRfdmFsKTsKKytpbnQg YXZfb3B0X2dldF9kb3VibGUgICh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzZWFy Y2hfZmxhZ3MsIGRvdWJsZSAgICAgKm91dF92YWwpOworK2ludCBhdl9vcHRfZ2V0X3EgICAgICAg KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywgQVZSYXRpb25h bCAqb3V0X3ZhbCk7CisraW50IGF2X29wdF9nZXRfaW1hZ2Vfc2l6ZSh2b2lkICpvYmosIGNvbnN0 IGNoYXIgKm5hbWUsIGludCBzZWFyY2hfZmxhZ3MsIGludCAqd19vdXQsIGludCAqaF9vdXQpOwor K2ludCBhdl9vcHRfZ2V0X3BpeGVsX2ZtdCAodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBp bnQgc2VhcmNoX2ZsYWdzLCBlbnVtIEFWUGl4ZWxGb3JtYXQgKm91dF9mbXQpOworK2ludCBhdl9v cHRfZ2V0X3NhbXBsZV9mbXQodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNo X2ZsYWdzLCBlbnVtIEFWU2FtcGxlRm9ybWF0ICpvdXRfZm10KTsKKytpbnQgYXZfb3B0X2dldF92 aWRlb19yYXRlKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywg QVZSYXRpb25hbCAqb3V0X3ZhbCk7CisrLyoqCisrICogQHBhcmFtW291dF0gbGF5b3V0IFRoZSBy ZXR1cm5lZCBsYXlvdXQgaXMgYSBjb3B5IG9mIHRoZSBhY3R1YWwgdmFsdWUgYW5kIG11c3QKKysg KiBiZSBmcmVlZCB3aXRoIGF2X2NoYW5uZWxfbGF5b3V0X3VuaW5pdCgpIGJ5IHRoZSBjYWxsZXIK KysgKi8KKytpbnQgYXZfb3B0X2dldF9jaGxheW91dCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5h bWUsIGludCBzZWFyY2hfZmxhZ3MsIEFWQ2hhbm5lbExheW91dCAqbGF5b3V0KTsKKysvKioKKysg KiBAcGFyYW1bb3V0XSBvdXRfdmFsIFRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGlzIGEgY29weSBv ZiB0aGUgYWN0dWFsIHZhbHVlIGFuZCBtdXN0CisrICogYmUgZnJlZWQgd2l0aCBhdl9kaWN0X2Zy ZWUoKSBieSB0aGUgY2FsbGVyCisrICovCisraW50IGF2X29wdF9nZXRfZGljdF92YWwodm9pZCAq b2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLCBBVkRpY3Rpb25hcnkgKipv dXRfdmFsKTsKKysKKysvKioKKysgKiBGb3IgYW4gYXJyYXktdHlwZSBvcHRpb24sIGdldCB0aGUg bnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KKysgKi8KKytpbnQgYXZfb3B0X2dldF9h cnJheV9zaXplKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywK KysgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0X3ZhbCk7CisrCisr LyoqCisrICogRm9yIGFuIGFycmF5LXR5cGUgb3B0aW9uLCByZXRyaWV2ZSB0aGUgdmFsdWVzIG9m IG9uZSBvciBtb3JlIGFycmF5IGVsZW1lbnRzLgorKyAqCisrICogQHBhcmFtIHN0YXJ0X2VsZW0g aW5kZXggb2YgdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgdG8gcmV0cmlldmUKKysgKiBAcGFyYW0g bmJfZWxlbXMgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHRvIHJldHJpZXZlOyBzdGFydF9lbGVt K25iX2VsZW1zCisrICogICAgICAgICAgICAgICAgIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIGFy cmF5IHNpemUgYXMgcmV0dXJuZWQgYnkKKysgKiAgICAgICAgICAgICAgICAgYXZfb3B0X2dldF9h cnJheV9zaXplKCkKKysgKgorKyAqIEBwYXJhbSBvdXRfdHlwZSBPcHRpb24gdHlwZSBjb3JyZXNw b25kaW5nIHRvIHRoZSBkZXNpcmVkIG91dHB1dC4KKysgKgorKyAqICAgICAgICAgICAgICAgICBU aGUgYXJyYXkgZWxlbWVudHMgcHJvZHVjZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsCisrICogICAg ICAgICAgICAgICAgIHdpbGwgYmUgYXMgaWYgYXZfb3B0X2dldFgoKSB3YXMgY2FsbGVkIGZvciBl YWNoIGVsZW1lbnQsCisrICogICAgICAgICAgICAgICAgIHdoZXJlIFggaXMgc3BlY2lmaWVkIGJ5 IG91dF90eXBlLiBFLmcuIEFWX09QVF9UWVBFX1NUUklORworKyAqICAgICAgICAgICAgICAgICBj b3JyZXNwb25kcyB0byBhdl9vcHRfZ2V0KCkuCisrICoKKysgKiAgICAgICAgICAgICAgICAgVHlw aWNhbGx5IHRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBzY2FsYXJpemVkIHR5cGUgb2YK KysgKiAgICAgICAgICAgICAgICAgdGhlIEFWT3B0aW9uIGJlaW5nIHJldHJpZXZlZCwgYnV0IGNl cnRhaW4gY29udmVyc2lvbnMgYXJlCisrICogICAgICAgICAgICAgICAgIGFsc28gcG9zc2libGUg LSB0aGUgc2FtZSBhcyB0aG9zZSBkb25lIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisrICogICAgICAg ICAgICAgICAgIGF2X29wdF9nZXQqKCkgZnVuY3Rpb24uIEUuZy4gYW55IG9wdGlvbiB0eXBlIGNh biBiZSByZXRyaWV2ZWQKKysgKiAgICAgICAgICAgICAgICAgYXMgYSBzdHJpbmcsIG51bWVyaWMg dHlwZXMgY2FuIGJlIHJldHJpZXZlZCBhcyBpbnQ2NCwgZG91YmxlLAorKyAqICAgICAgICAgICAg ICAgICBvciByYXRpb25hbCwgZXRjLgorKyAqCisrICogQHBhcmFtIG91dF92YWwgIEFycmF5IHdp dGggbmJfZWxlbXMgbWVtYmVycyBpbnRvIHdoaWNoIHRoZSBvdXRwdXQgd2lsbCBiZQorKyAqICAg ICAgICAgICAgICAgICB3cml0dGVuLiBUaGUgYXJyYXkgdHlwZSBtdXN0IG1hdGNoIHRoZSB1bmRl cmx5aW5nIEMgdHlwZSBhcworKyAqICAgICAgICAgICAgICAgICBkb2N1bWVudGVkIGZvciBvdXRf dHlwZSwgYW5kIGJlIHplcm9lZCBvbiBlbnRyeSB0byB0aGlzCisrICogICAgICAgICAgICAgICAg IGZ1bmN0aW9uLgorKyAqCisrICogICAgICAgICAgICAgICAgIEZvciBkeW5hbWljYWxseSBhbGxv Y2F0ZWQgdHlwZXMgKHN0cmluZ3MsIGJpbmFyeSwgZGljdHMsCisrICogICAgICAgICAgICAgICAg IGV0Yy4pLCB0aGUgcmVzdWx0IGlzIG93bmVkIGFuZCBmcmVlZCBieSB0aGUgY2FsbGVyLgorKyAq LworK2ludCBhdl9vcHRfZ2V0X2FycmF5KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50 IHNlYXJjaF9mbGFncywKKysgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnRf ZWxlbSwgdW5zaWduZWQgaW50IG5iX2VsZW1zLAorKyAgICAgICAgICAgICAgICAgICAgIGVudW0g QVZPcHRpb25UeXBlIG91dF90eXBlLCB2b2lkICpvdXRfdmFsKTsKKysvKioKKysgKiBAfQorKyAq LworKworKy8qKgorKyAqIEBkZWZncm91cCBvcHRfZXZhbF9mdW5jcyBFdmFsdWF0aW5nIG9wdGlv biBzdHJpbmdzCisrICogQHsKKysgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBjYW4gYmUgdXNl ZCB0byBldmFsdWF0ZSBvcHRpb24gc3RyaW5ncworKyAqIGFuZCBnZXQgbnVtYmVycyBvdXQgb2Yg dGhlbS4gVGhleSBkbyB0aGUgc2FtZSB0aGluZyBhcyBhdl9vcHRfc2V0KCksCisrICogZXhjZXB0 IHRoZSByZXN1bHQgaXMgd3JpdHRlbiBpbnRvIHRoZSBjYWxsZXItc3VwcGxpZWQgcG9pbnRlci4K KysgKgorKyAqIEBwYXJhbSBvYmogYSBzdHJ1Y3Qgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyBhIHBv aW50ZXIgdG8gQVZDbGFzcy4KKysgKiBAcGFyYW0gbyBhbiBvcHRpb24gZm9yIHdoaWNoIHRoZSBz dHJpbmcgaXMgdG8gYmUgZXZhbHVhdGVkLgorKyAqIEBwYXJhbSB2YWwgc3RyaW5nIHRvIGJlIGV2 YWx1YXRlZC4KKysgKiBAcGFyYW0gKl9vdXQgdmFsdWUgb2YgdGhlIHN0cmluZyB3aWxsIGJlIHdy aXR0ZW4gaGVyZS4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51 bWJlciBvbiBmYWlsdXJlLgorKyAqLworK2ludCBhdl9vcHRfZXZhbF9mbGFncyAodm9pZCAqb2Jq LCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hhciAqdmFsLCBpbnQgICAgICAgICpmbGFnc19v dXQpOworK2ludCBhdl9vcHRfZXZhbF9pbnQgICAodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAq bywgY29uc3QgY2hhciAqdmFsLCBpbnQgICAgICAgICppbnRfb3V0KTsKKytpbnQgYXZfb3B0X2V2 YWxfdWludCAgKHZvaWQgKm9iaiwgY29uc3QgQVZPcHRpb24gKm8sIGNvbnN0IGNoYXIgKnZhbCwg dW5zaWduZWQgICAqdWludF9vdXQpOworK2ludCBhdl9vcHRfZXZhbF9pbnQ2NCAodm9pZCAqb2Jq LCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hhciAqdmFsLCBpbnQ2NF90ICAgICppbnQ2NF9v dXQpOworK2ludCBhdl9vcHRfZXZhbF9mbG9hdCAodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAq bywgY29uc3QgY2hhciAqdmFsLCBmbG9hdCAgICAgICpmbG9hdF9vdXQpOworK2ludCBhdl9vcHRf ZXZhbF9kb3VibGUodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hhciAqdmFs LCBkb3VibGUgICAgICpkb3VibGVfb3V0KTsKKytpbnQgYXZfb3B0X2V2YWxfcSAgICAgKHZvaWQg Km9iaiwgY29uc3QgQVZPcHRpb24gKm8sIGNvbnN0IGNoYXIgKnZhbCwgQVZSYXRpb25hbCAqcV9v dXQpOworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisrICogQ2hlY2sgaWYgZ2l2ZW4gb3B0 aW9uIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKysgKgorKyAqIE9wdGlvbnMgbyBtdXN0 IGJlbG9uZyB0byB0aGUgb2JqLiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB0byBj aGVjayBjaGlsZCdzIG9wdGlvbnMgc3RhdGUuCisrICogQHNlZSBhdl9vcHRfaXNfc2V0X3RvX2Rl ZmF1bHRfYnlfbmFtZSgpLgorKyAqCisrICogQHBhcmFtIG9iaiAgQVZDbGFzcyBvYmplY3QgdG8g Y2hlY2sgb3B0aW9uIG9uCisrICogQHBhcmFtIG8gICAgb3B0aW9uIHRvIGJlIGNoZWNrZWQKKysg KiBAcmV0dXJuICAgICA+MCB3aGVuIG9wdGlvbiBpcyBzZXQgdG8gaXRzIGRlZmF1bHQsCisrICog ICAgICAgICAgICAgIDAgd2hlbiBvcHRpb24gaXMgbm90IHNldCBpdHMgZGVmYXVsdCwKKysgKiAg ICAgICAgICAgICA8MCBvbiBlcnJvcgorKyAqLworK2ludCBhdl9vcHRfaXNfc2V0X3RvX2RlZmF1 bHQodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbyk7CisrCisrLyoqCisrICogQ2hlY2sgaWYg Z2l2ZW4gb3B0aW9uIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKysgKgorKyAqIEBwYXJh bSBvYmogICAgICAgICAgQVZDbGFzcyBvYmplY3QgdG8gY2hlY2sgb3B0aW9uIG9uCisrICogQHBh cmFtIG5hbWUgICAgICAgICBvcHRpb24gbmFtZQorKyAqIEBwYXJhbSBzZWFyY2hfZmxhZ3MgY29t YmluYXRpb24gb2YgQVZfT1BUX1NFQVJDSF8qCisrICogQHJldHVybiAgICAgICAgICAgICA+MCB3 aGVuIG9wdGlvbiBpcyBzZXQgdG8gaXRzIGRlZmF1bHQsCisrICogICAgICAgICAgICAgICAgICAg ICAwIHdoZW4gb3B0aW9uIGlzIG5vdCBzZXQgaXRzIGRlZmF1bHQsCisrICogICAgICAgICAgICAg ICAgICAgICA8MCBvbiBlcnJvcgorKyAqLworK2ludCBhdl9vcHRfaXNfc2V0X3RvX2RlZmF1bHRf YnlfbmFtZSh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzZWFyY2hfZmxhZ3MpOwor KworKy8qKgorKyAqIENoZWNrIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGZsYWcgaXMgc2V0IGluIGEg ZmxhZ3MgZmllbGQuCisrICoKKysgKiBAcGFyYW0gZmllbGRfbmFtZSB0aGUgbmFtZSBvZiB0aGUg ZmxhZyBmaWVsZCBvcHRpb24KKysgKiBAcGFyYW0gZmxhZ19uYW1lIHRoZSBuYW1lIG9mIHRoZSBm bGFnIHRvIGNoZWNrCisrICogQHJldHVybiBub24temVybyBpZiB0aGUgZmxhZyBpcyBzZXQsIHpl cm8gaWYgdGhlIGZsYWcgaXNuJ3Qgc2V0LAorKyAqICAgICAgICAgaXNuJ3Qgb2YgdGhlIHJpZ2h0 IHR5cGUsIG9yIHRoZSBmbGFncyBmaWVsZCBkb2Vzbid0IGV4aXN0LgorKyAqLworK2ludCBhdl9v cHRfZmxhZ19pc19zZXQodm9pZCAqb2JqLCBjb25zdCBjaGFyICpmaWVsZF9uYW1lLCBjb25zdCBj aGFyICpmbGFnX25hbWUpOworKworKyNkZWZpbmUgQVZfT1BUX1NFUklBTElaRV9TS0lQX0RFRkFV TFRTICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLy88IFNlcmlhbGl6ZSBvcHRpb25zIHRoYXQg YXJlIG5vdCBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMgb25seS4KKysjZGVmaW5lIEFWX09QVF9TRVJJ QUxJWkVfT1BUX0ZMQUdTX0VYQUNUICAgICAgICAgICAgMHgwMDAwMDAwMiAgLy8vPCBTZXJpYWxp emUgb3B0aW9ucyB0aGF0IGV4YWN0bHkgbWF0Y2ggb3B0X2ZsYWdzIG9ubHkuCisrI2RlZmluZSBB Vl9PUFRfU0VSSUFMSVpFX1NFQVJDSF9DSElMRFJFTiAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8v LzwgU2VyaWFsaXplIG9wdGlvbnMgaW4gcG9zc2libGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIG9i amVjdC4KKysKKysvKioKKysgKiBTZXJpYWxpemUgb2JqZWN0J3Mgb3B0aW9ucy4KKysgKgorKyAq IENyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nIG9iamVjdCdzIHNlcmlhbGl6ZWQgb3B0aW9ucy4K KysgKiBTdWNoIHN0cmluZyBtYXkgYmUgcGFzc2VkIGJhY2sgdG8gYXZfb3B0X3NldF9mcm9tX3N0 cmluZygpIGluIG9yZGVyIHRvIHJlc3RvcmUgb3B0aW9uIHZhbHVlcy4KKysgKiBBIGtleS92YWx1 ZSBvciBwYWlycyBzZXBhcmF0b3Igb2NjdXJyaW5nIGluIHRoZSBzZXJpYWxpemVkIHZhbHVlIG9y CisrICogbmFtZSBzdHJpbmcgYXJlIGVzY2FwZWQgdGhyb3VnaCB0aGUgYXZfZXNjYXBlKCkgZnVu Y3Rpb24uCisrICoKKysgKiBAcGFyYW1baW5dICBvYmogICAgICAgICAgIEFWQ2xhc3Mgb2JqZWN0 IHRvIHNlcmlhbGl6ZQorKyAqIEBwYXJhbVtpbl0gIG9wdF9mbGFncyAgICAgc2VyaWFsaXplIG9w dGlvbnMgd2l0aCBhbGwgdGhlIHNwZWNpZmllZCBmbGFncyBzZXQgKEFWX09QVF9GTEFHKQorKyAq IEBwYXJhbVtpbl0gIGZsYWdzICAgICAgICAgY29tYmluYXRpb24gb2YgQVZfT1BUX1NFUklBTEla RV8qIGZsYWdzCisrICogQHBhcmFtW291dF0gYnVmZmVyICAgICAgICBQb2ludGVyIHRvIGJ1ZmZl ciB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgc2VyaWFsaXpl ZCBvcHRpb25zLgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIG11c3QgYmUg ZnJlZWQgYnkgdGhlIGNhbGxlciB3aGVuIGlzIG5vIGxvbmdlciBuZWVkZWQuCisrICogQHBhcmFt W2luXSAga2V5X3ZhbF9zZXAgICBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBrZXkgZnJvbSB2 YWx1ZQorKyAqIEBwYXJhbVtpbl0gIHBhaXJzX3NlcCAgICAgY2hhcmFjdGVyIHVzZWQgdG8gc2Vw YXJhdGUgdHdvIHBhaXJzIGZyb20gZWFjaCBvdGhlcgorKyAqIEByZXR1cm4gICAgICAgICAgICAg ICAgICAgPj0gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvcgorKyAqIEB3YXJuaW5nIFNl cGFyYXRvcnMgY2Fubm90IGJlIG5laXRoZXIgJ1xcJyBub3IgJ1wwJy4gVGhleSBhbHNvIGNhbm5v dCBiZSB0aGUgc2FtZS4KKysgKi8KKytpbnQgYXZfb3B0X3NlcmlhbGl6ZSh2b2lkICpvYmosIGlu dCBvcHRfZmxhZ3MsIGludCBmbGFncywgY2hhciAqKmJ1ZmZlciwKKysgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyIGtleV92YWxfc2VwLCBjb25zdCBjaGFyIHBhaXJzX3NlcCk7CisrCisr LyoqCisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBGcmVlIGFuIEFWT3B0aW9uUmFuZ2VzIHN0 cnVjdCBhbmQgc2V0IGl0IHRvIE5VTEwuCisrICovCisrdm9pZCBhdl9vcHRfZnJlZXBfcmFuZ2Vz KEFWT3B0aW9uUmFuZ2VzICoqcmFuZ2VzKTsKKysKKysvKioKKysgKiBHZXQgYSBsaXN0IG9mIGFs bG93ZWQgcmFuZ2VzIGZvciB0aGUgZ2l2ZW4gb3B0aW9uLgorKyAqCisrICogVGhlIHJldHVybmVk IGxpc3QgbWF5IGRlcGVuZCBvbiBvdGhlciBmaWVsZHMgaW4gb2JqIGxpa2UgZm9yIGV4YW1wbGUg cHJvZmlsZS4KKysgKgorKyAqIEBwYXJhbSBmbGFncyBpcyBhIGJpdG1hc2sgb2YgZmxhZ3MsIHVu ZGVmaW5lZCBmbGFncyBzaG91bGQgbm90IGJlIHNldCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQKKysg KiAgICAgICAgICAgICAgQVZfT1BUX1NFQVJDSF9GQUtFX09CSiBpbmRpY2F0ZXMgdGhhdCB0aGUg b2JqIGlzIGEgZG91YmxlIHBvaW50ZXIgdG8gYSBBVkNsYXNzIGluc3RlYWQgb2YgYSBmdWxsIGlu c3RhbmNlCisrICogICAgICAgICAgICAgIEFWX09QVF9NVUxUSV9DT01QT05FTlRfUkFOR0UgaW5k aWNhdGVzIHRoYXQgZnVuY3Rpb24gbWF5IHJldHVybiBtb3JlIHRoYW4gb25lIGNvbXBvbmVudCwg QHNlZSBBVk9wdGlvblJhbmdlcworKyAqCisrICogVGhlIHJlc3VsdCBtdXN0IGJlIGZyZWVkIHdp dGggYXZfb3B0X2ZyZWVwX3Jhbmdlcy4KKysgKgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGNvbXBv bmVudHMgcmV0dXJuZWQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lz ZQorKyAqLworK2ludCBhdl9vcHRfcXVlcnlfcmFuZ2VzKEFWT3B0aW9uUmFuZ2VzICoqLCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBHZXQgYSBk ZWZhdWx0IGxpc3Qgb2YgYWxsb3dlZCByYW5nZXMgZm9yIHRoZSBnaXZlbiBvcHRpb24uCisrICoK KysgKiBUaGlzIGxpc3QgaXMgY29uc3RydWN0ZWQgd2l0aG91dCB1c2luZyB0aGUgQVZDbGFzcy5x dWVyeV9yYW5nZXMoKSBjYWxsYmFjaworKyAqIGFuZCBjYW4gYmUgdXNlZCBhcyBmYWxsYmFjayBm cm9tIHdpdGhpbiB0aGUgY2FsbGJhY2suCisrICoKKysgKiBAcGFyYW0gZmxhZ3MgaXMgYSBiaXRt YXNrIG9mIGZsYWdzLCB1bmRlZmluZWQgZmxhZ3Mgc2hvdWxkIG5vdCBiZSBzZXQgYW5kIHNob3Vs ZCBiZSBpZ25vcmVkCisrICogICAgICAgICAgICAgIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogaW5k aWNhdGVzIHRoYXQgdGhlIG9iaiBpcyBhIGRvdWJsZSBwb2ludGVyIHRvIGEgQVZDbGFzcyBpbnN0 ZWFkIG9mIGEgZnVsbCBpbnN0YW5jZQorKyAqICAgICAgICAgICAgICBBVl9PUFRfTVVMVElfQ09N UE9ORU5UX1JBTkdFIGluZGljYXRlcyB0aGF0IGZ1bmN0aW9uIG1heSByZXR1cm4gbW9yZSB0aGFu IG9uZSBjb21wb25lbnQsIEBzZWUgQVZPcHRpb25SYW5nZXMKKysgKgorKyAqIFRoZSByZXN1bHQg bXVzdCBiZSBmcmVlZCB3aXRoIGF2X29wdF9mcmVlX3Jhbmdlcy4KKysgKgorKyAqIEByZXR1cm4g bnVtYmVyIG9mIGNvbXBvbmVudHMgcmV0dXJuZWQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIG90aGVyd2lzZQorKyAqLworK2ludCBhdl9vcHRfcXVlcnlfcmFuZ2VzX2RlZmF1bHQo QVZPcHRpb25SYW5nZXMgKiosIHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgZmxhZ3Mp OworKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9PUFRfSCAqLwor ZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZ1dGlsL3BpeGRlc2MuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9waXhkZXNjLmgK Ky0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBl Zy92OS9saWJhdnV0aWwvcGl4ZGVzYy5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzg0 OTY4OTAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGly ZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvcGl4ZGVzYy5oCTIwMjYtMDktMDcgMTI6MjM6NDcu Njc4MzczMDQ0ICswMjAwCitAQCAtMCwwICsxLDQ1MCBAQAorKy8qCisrICogcGl4ZWwgZm9ybWF0 IGRlc2NyaXB0b3IKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWljaGFlbCBOaWVkZXJtYXllciA8 bWljaGFlbG5pQGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K KysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZVVElMX1BJWERFU0NfSAorKyNkZWZpbmUg QVZVVElMX1BJWERFU0NfSAorKworKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRl ICJhdHRyaWJ1dGVzLmgiCisrI2luY2x1ZGUgInBpeGZtdC5oIgorKworK3R5cGVkZWYgc3RydWN0 IEFWQ29tcG9uZW50RGVzY3JpcHRvciB7CisrICAgIC8qKgorKyAgICAgKiBXaGljaCBvZiB0aGUg NCBwbGFuZXMgY29udGFpbnMgdGhlIGNvbXBvbmVudC4KKysgICAgICovCisrICAgIGludCBwbGFu ZTsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIDIgaG9y aXpvbnRhbGx5IGNvbnNlY3V0aXZlIHBpeGVscy4KKysgICAgICogRWxlbWVudHMgYXJlIGJpdHMg Zm9yIGJpdHN0cmVhbSBmb3JtYXRzLCBieXRlcyBvdGhlcndpc2UuCisrICAgICAqLworKyAgICBp bnQgc3RlcDsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBlbGVtZW50cyBiZWZvcmUg dGhlIGNvbXBvbmVudCBvZiB0aGUgZmlyc3QgcGl4ZWwuCisrICAgICAqIEVsZW1lbnRzIGFyZSBi aXRzIGZvciBiaXRzdHJlYW0gZm9ybWF0cywgYnl0ZXMgb3RoZXJ3aXNlLgorKyAgICAgKi8KKysg ICAgaW50IG9mZnNldDsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBsZWFzdCBzaWdu aWZpY2FudCBiaXRzIHRoYXQgbXVzdCBiZSBzaGlmdGVkIGF3YXkKKysgICAgICogdG8gZ2V0IHRo ZSB2YWx1ZS4KKysgICAgICovCisrICAgIGludCBzaGlmdDsKKysKKysgICAgLyoqCisrICAgICAq IE51bWJlciBvZiBiaXRzIGluIHRoZSBjb21wb25lbnQuCisrICAgICAqLworKyAgICBpbnQgZGVw dGg7CisrfSBBVkNvbXBvbmVudERlc2NyaXB0b3I7CisrCisrLyoqCisrICogRGVzY3JpcHRvciB0 aGF0IHVuYW1iaWd1b3VzbHkgZGVzY3JpYmVzIGhvdyB0aGUgYml0cyBvZiBhIHBpeGVsIGFyZQor KyAqIHN0b3JlZCBpbiB0aGUgdXAgdG8gNCBkYXRhIHBsYW5lcyBvZiBhbiBpbWFnZS4gSXQgYWxz byBzdG9yZXMgdGhlCisrICogc3Vic2FtcGxpbmcgZmFjdG9ycyBhbmQgbnVtYmVyIG9mIGNvbXBv bmVudHMuCisrICoKKysgKiBAbm90ZSBUaGlzIGlzIHNlcGFyYXRlIG9mIHRoZSBjb2xvcnNwYWNl IChSR0IsIFlDYkNyLCBZUGJQciwgSlBFRy1zdHlsZSBZVVYKKysgKiAgICAgICBhbmQgYWxsIHRo ZSBZVVYgdmFyaWFudHMpIEFWUGl4Rm10RGVzY3JpcHRvciBqdXN0IHN0b3JlcyBob3cgdmFsdWVz CisrICogICAgICAgYXJlIHN0b3JlZCBub3Qgd2hhdCB0aGVzZSB2YWx1ZXMgcmVwcmVzZW50Lgor KyAqLworK3R5cGVkZWYgc3RydWN0IEFWUGl4Rm10RGVzY3JpcHRvciB7CisrICAgIGNvbnN0IGNo YXIgKm5hbWU7CisrICAgIHVpbnQ4X3QgbmJfY29tcG9uZW50czsgIC8vLzwgVGhlIG51bWJlciBv ZiBjb21wb25lbnRzIGVhY2ggcGl4ZWwgaGFzLCAoMS00KQorKworKyAgICAvKioKKysgICAgICog QW1vdW50IHRvIHNoaWZ0IHRoZSBsdW1hIHdpZHRoIHJpZ2h0IHRvIGZpbmQgdGhlIGNocm9tYSB3 aWR0aC4KKysgICAgICogRm9yIFlWMTIgdGhpcyBpcyAxIGZvciBleGFtcGxlLgorKyAgICAgKiBj aHJvbWFfd2lkdGggPSBBVl9DRUlMX1JTSElGVChsdW1hX3dpZHRoLCBsb2cyX2Nocm9tYV93KQor KyAgICAgKiBUaGUgbm90ZSBhYm92ZSBpcyBuZWVkZWQgdG8gZW5zdXJlIHJvdW5kaW5nIHVwLgor KyAgICAgKiBUaGlzIHZhbHVlIG9ubHkgcmVmZXJzIHRvIHRoZSBjaHJvbWEgY29tcG9uZW50cy4K KysgICAgICovCisrICAgIHVpbnQ4X3QgbG9nMl9jaHJvbWFfdzsKKysKKysgICAgLyoqCisrICAg ICAqIEFtb3VudCB0byBzaGlmdCB0aGUgbHVtYSBoZWlnaHQgcmlnaHQgdG8gZmluZCB0aGUgY2hy b21hIGhlaWdodC4KKysgICAgICogRm9yIFlWMTIgdGhpcyBpcyAxIGZvciBleGFtcGxlLgorKyAg ICAgKiBjaHJvbWFfaGVpZ2h0PSBBVl9DRUlMX1JTSElGVChsdW1hX2hlaWdodCwgbG9nMl9jaHJv bWFfaCkKKysgICAgICogVGhlIG5vdGUgYWJvdmUgaXMgbmVlZGVkIHRvIGVuc3VyZSByb3VuZGlu ZyB1cC4KKysgICAgICogVGhpcyB2YWx1ZSBvbmx5IHJlZmVycyB0byB0aGUgY2hyb21hIGNvbXBv bmVudHMuCisrICAgICAqLworKyAgICB1aW50OF90IGxvZzJfY2hyb21hX2g7CisrCisrICAgIC8q KgorKyAgICAgKiBDb21iaW5hdGlvbiBvZiBBVl9QSVhfRk1UX0ZMQUdfLi4uIGZsYWdzLgorKyAg ICAgKi8KKysgICAgdWludDY0X3QgZmxhZ3M7CisrCisrICAgIC8qKgorKyAgICAgKiBQYXJhbWV0 ZXJzIHRoYXQgZGVzY3JpYmUgaG93IHBpeGVscyBhcmUgcGFja2VkLgorKyAgICAgKiBJZiB0aGUg Zm9ybWF0IGhhcyAxIG9yIDIgY29tcG9uZW50cywgdGhlbiBsdW1hIGlzIDAuCisrICAgICAqIElm IHRoZSBmb3JtYXQgaGFzIDMgb3IgNCBjb21wb25lbnRzOgorKyAgICAgKiAgIGlmIHRoZSBSR0Ig ZmxhZyBpcyBzZXQgdGhlbiAwIGlzIHJlZCwgMSBpcyBncmVlbiBhbmQgMiBpcyBibHVlOworKyAg ICAgKiAgIG90aGVyd2lzZSAwIGlzIGx1bWEsIDEgaXMgY2hyb21hLVUgYW5kIDIgaXMgY2hyb21h LVYuCisrICAgICAqCisrICAgICAqIElmIHByZXNlbnQsIHRoZSBBbHBoYSBjaGFubmVsIGlzIGFs d2F5cyB0aGUgbGFzdCBjb21wb25lbnQuCisrICAgICAqLworKyAgICBBVkNvbXBvbmVudERlc2Ny aXB0b3IgY29tcFs0XTsKKysKKysgICAgLyoqCisrICAgICAqIEFsdGVybmF0aXZlIGNvbW1hLXNl cGFyYXRlZCBuYW1lcy4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKmFsaWFzOworK30gQVZQ aXhGbXREZXNjcmlwdG9yOworKworKy8qKgorKyAqIFBpeGVsIGZvcm1hdCBpcyBiaWctZW5kaWFu LgorKyAqLworKyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX0JFICAgICAgICAgICAoMSA8PCAwKQor Ky8qKgorKyAqIFBpeGVsIGZvcm1hdCBoYXMgYSBwYWxldHRlIGluIGRhdGFbMV0sIHZhbHVlcyBh cmUgaW5kZXhlcyBpbiB0aGlzIHBhbGV0dGUuCisrICovCisrI2RlZmluZSBBVl9QSVhfRk1UX0ZM QUdfUEFMICAgICAgICAgICgxIDw8IDEpCisrLyoqCisrICogQWxsIHZhbHVlcyBvZiBhIGNvbXBv bmVudCBhcmUgYml0LXdpc2UgcGFja2VkIGVuZCB0byBlbmQuCisrICovCisrI2RlZmluZSBBVl9Q SVhfRk1UX0ZMQUdfQklUU1RSRUFNICAgICgxIDw8IDIpCisrLyoqCisrICogUGl4ZWwgZm9ybWF0 IGlzIGFuIEhXIGFjY2VsZXJhdGVkIGZvcm1hdC4KKysgKi8KKysjZGVmaW5lIEFWX1BJWF9GTVRf RkxBR19IV0FDQ0VMICAgICAgKDEgPDwgMykKKysvKioKKysgKiBBdCBsZWFzdCBvbmUgcGl4ZWwg Y29tcG9uZW50IGlzIG5vdCBpbiB0aGUgZmlyc3QgZGF0YSBwbGFuZS4KKysgKi8KKysjZGVmaW5l IEFWX1BJWF9GTVRfRkxBR19QTEFOQVIgICAgICAgKDEgPDwgNCkKKysvKioKKysgKiBUaGUgcGl4 ZWwgZm9ybWF0IGNvbnRhaW5zIFJHQi1saWtlIGRhdGEgKGFzIG9wcG9zZWQgdG8gWVVWL2dyYXlz Y2FsZSkuCisrICovCisrI2RlZmluZSBBVl9QSVhfRk1UX0ZMQUdfUkdCICAgICAgICAgICgxIDw8 IDUpCisrCisrLyoqCisrICogVGhlIHBpeGVsIGZvcm1hdCBoYXMgYW4gYWxwaGEgY2hhbm5lbC4g VGhpcyBpcyBzZXQgb24gYWxsIGZvcm1hdHMgdGhhdAorKyAqIHN1cHBvcnQgYWxwaGEgaW4gc29t ZSB3YXksIGluY2x1ZGluZyBBVl9QSVhfRk1UX1BBTDguIFRoZSBhbHBoYSBpcyBhbHdheXMKKysg KiBzdHJhaWdodCwgbmV2ZXIgcHJlLW11bHRpcGxpZWQuCisrICoKKysgKiBJZiBhIGNvZGVjIG9y IGEgZmlsdGVyIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEsIGl0IHNob3VsZCBzZXQgYWxsIGFscGhh IHRvCisrICogb3BhcXVlLCBvciB1c2UgdGhlIGVxdWl2YWxlbnQgcGl4ZWwgZm9ybWF0cyB3aXRo b3V0IGFscGhhIGNvbXBvbmVudCwgZS5nLgorKyAqIEFWX1BJWF9GTVRfUkdCMCAob3IgQVZfUElY X0ZNVF9SR0IyNCBldGMuKSBpbnN0ZWFkIG9mIEFWX1BJWF9GTVRfUkdCQS4KKysgKi8KKysjZGVm aW5lIEFWX1BJWF9GTVRfRkxBR19BTFBIQSAgICAgICAgKDEgPDwgNykKKysKKysvKioKKysgKiBU aGUgcGl4ZWwgZm9ybWF0IGlzIGZvbGxvd2luZyBhIEJheWVyIHBhdHRlcm4KKysgKi8KKysjZGVm aW5lIEFWX1BJWF9GTVRfRkxBR19CQVlFUiAgICAgICAgKDEgPDwgOCkKKysKKysvKioKKysgKiBU aGUgcGl4ZWwgZm9ybWF0IGNvbnRhaW5zIElFRUUtNzU0IGZsb2F0aW5nIHBvaW50IHZhbHVlcy4g UHJlY2lzaW9uIChkb3VibGUsCisrICogc2luZ2xlLCBvciBoYWxmKSBzaG91bGQgYmUgZGV0ZXJt aW5lZCBieSB0aGUgcGl4ZWwgc2l6ZSAoNjQsIDMyLCBvciAxNiBiaXRzKS4KKysgKi8KKysjZGVm aW5lIEFWX1BJWF9GTVRfRkxBR19GTE9BVCAgICAgICAgKDEgPDwgOSkKKysKKysvKioKKysgKiBU aGUgcGl4ZWwgZm9ybWF0IGNvbnRhaW5zIFhZWi1saWtlIGRhdGEgKGFzIG9wcG9zZWQgdG8gWVVW L1JHQi9ncmF5c2NhbGUpLgorKyAqLworKyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX1hZWiAgICAg ICAgICAoMSA8PCAxMCkKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIHBl ciBwaXhlbCB1c2VkIGJ5IHRoZSBwaXhlbCBmb3JtYXQKKysgKiBkZXNjcmliZWQgYnkgcGl4ZGVz Yy4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKysgKiBvZiBi aXRzIHBlciBzYW1wbGUuCisrICoKKysgKiBUaGUgcmV0dXJuZWQgbnVtYmVyIG9mIGJpdHMgcmVm ZXJzIHRvIHRoZSBudW1iZXIgb2YgYml0cyBhY3R1YWxseQorKyAqIHVzZWQgZm9yIHN0b3Jpbmcg dGhlIHBpeGVsIGluZm9ybWF0aW9uLCB0aGF0IGlzIHBhZGRpbmcgYml0cyBhcmUKKysgKiBub3Qg Y291bnRlZC4KKysgKi8KKytpbnQgYXZfZ2V0X2JpdHNfcGVyX3BpeGVsKGNvbnN0IEFWUGl4Rm10 RGVzY3JpcHRvciAqcGl4ZGVzYyk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBudW1iZXIgb2Yg Yml0cyBwZXIgcGl4ZWwgZm9yIHRoZSBwaXhlbCBmb3JtYXQKKysgKiBkZXNjcmliZWQgYnkgcGl4 ZGVzYywgaW5jbHVkaW5nIGFueSBwYWRkaW5nIG9yIHVudXNlZCBiaXRzLgorKyAqLworK2ludCBh dl9nZXRfcGFkZGVkX2JpdHNfcGVyX3BpeGVsKGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqcGl4 ZGVzYyk7CisrCisrLyoqCisrICogQHJldHVybiBhIHBpeGVsIGZvcm1hdCBkZXNjcmlwdG9yIGZv ciBwcm92aWRlZCBwaXhlbCBmb3JtYXQgb3IgTlVMTCBpZgorKyAqIHRoaXMgcGl4ZWwgZm9ybWF0 IGlzIHVua25vd24uCisrICovCisrY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICphdl9waXhfZm10 X2Rlc2NfZ2V0KGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10KTsKKysKKysvKioKKysgKiBJdGVy YXRlIG92ZXIgYWxsIHBpeGVsIGZvcm1hdCBkZXNjcmlwdG9ycyBrbm93biB0byBsaWJhdnV0aWwu CisrICoKKysgKiBAcGFyYW0gcHJldiBwcmV2aW91cyBkZXNjcmlwdG9yLiBOVUxMIHRvIGdldCB0 aGUgZmlyc3QgZGVzY3JpcHRvci4KKysgKgorKyAqIEByZXR1cm4gbmV4dCBkZXNjcmlwdG9yIG9y IE5VTEwgYWZ0ZXIgdGhlIGxhc3QgZGVzY3JpcHRvcgorKyAqLworK2NvbnN0IEFWUGl4Rm10RGVz Y3JpcHRvciAqYXZfcGl4X2ZtdF9kZXNjX25leHQoY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpw cmV2KTsKKysKKysvKioKKysgKiBAcmV0dXJuIGFuIEFWUGl4ZWxGb3JtYXQgaWQgZGVzY3JpYmVk IGJ5IGRlc2MsIG9yIEFWX1BJWF9GTVRfTk9ORSBpZiBkZXNjCisrICogaXMgbm90IGEgdmFsaWQg cG9pbnRlciB0byBhIHBpeGVsIGZvcm1hdCBkZXNjcmlwdG9yLgorKyAqLworK2VudW0gQVZQaXhl bEZvcm1hdCBhdl9waXhfZm10X2Rlc2NfZ2V0X2lkKGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAq ZGVzYyk7CisrCisrLyoqCisrICogVXRpbGl0eSBmdW5jdGlvbiB0byBhY2Nlc3MgbG9nMl9jaHJv bWFfdyBsb2cyX2Nocm9tYV9oIGZyb20KKysgKiB0aGUgcGl4ZWwgZm9ybWF0IEFWUGl4Rm10RGVz Y3JpcHRvci4KKysgKgorKyAqIEBwYXJhbVtpbl0gIHBpeF9mbXQgdGhlIHBpeGVsIGZvcm1hdAor KyAqIEBwYXJhbVtvdXRdIGhfc2hpZnQgc3RvcmUgbG9nMl9jaHJvbWFfdyAoaG9yaXpvbnRhbC93 aWR0aCBzaGlmdCkKKysgKiBAcGFyYW1bb3V0XSB2X3NoaWZ0IHN0b3JlIGxvZzJfY2hyb21hX2gg KHZlcnRpY2FsL2hlaWdodCBzaGlmdCkKKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBB VkVSUk9SKEVOT1NZUykgb24gaW52YWxpZCBvciB1bmtub3duIHBpeGVsIGZvcm1hdAorKyAqLwor K2ludCBhdl9waXhfZm10X2dldF9jaHJvbWFfc3ViX3NhbXBsZShlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoX3No aWZ0LCBpbnQgKnZfc2hpZnQpOworKworKy8qKgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIHBsYW5l cyBpbiBwaXhfZm10LCBhIG5lZ2F0aXZlIEFWRVJST1IgaWYgcGl4X2ZtdCBpcyBub3QgYQorKyAq IHZhbGlkIHBpeGVsIGZvcm1hdC4KKysgKi8KKytpbnQgYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMo ZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIG5h bWUgZm9yIHByb3ZpZGVkIGNvbG9yIHJhbmdlIG9yIE5VTEwgaWYgdW5rbm93bi4KKysgKi8KKytj b25zdCBjaGFyICphdl9jb2xvcl9yYW5nZV9uYW1lKGVudW0gQVZDb2xvclJhbmdlIHJhbmdlKTsK KysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBBVkNvbG9yUmFuZ2UgdmFsdWUgZm9yIG5hbWUgb3Ig YW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisraW50IGF2X2NvbG9yX3JhbmdlX2Zyb21f bmFtZShjb25zdCBjaGFyICpuYW1lKTsKKysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBuYW1lIGZv ciBwcm92aWRlZCBjb2xvciBwcmltYXJpZXMgb3IgTlVMTCBpZiB1bmtub3duLgorKyAqLworK2Nv bnN0IGNoYXIgKmF2X2NvbG9yX3ByaW1hcmllc19uYW1lKGVudW0gQVZDb2xvclByaW1hcmllcyBw cmltYXJpZXMpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIEFWQ29sb3JQcmltYXJpZXMgdmFs dWUgZm9yIG5hbWUgb3IgYW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisraW50IGF2X2Nv bG9yX3ByaW1hcmllc19mcm9tX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisrICog QHJldHVybiB0aGUgbmFtZSBmb3IgcHJvdmlkZWQgY29sb3IgdHJhbnNmZXIgb3IgTlVMTCBpZiB1 bmtub3duLgorKyAqLworK2NvbnN0IGNoYXIgKmF2X2NvbG9yX3RyYW5zZmVyX25hbWUoZW51bSBB VkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmFuc2Zlcik7CisrCisrLyoqCisrICogQHJl dHVybiB0aGUgQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdmFsdWUgZm9yIG5hbWUgb3Ig YW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisraW50IGF2X2NvbG9yX3RyYW5zZmVyX2Zy b21fbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBuYW1l IGZvciBwcm92aWRlZCBjb2xvciBzcGFjZSBvciBOVUxMIGlmIHVua25vd24uCisrICovCisrY29u c3QgY2hhciAqYXZfY29sb3Jfc3BhY2VfbmFtZShlbnVtIEFWQ29sb3JTcGFjZSBzcGFjZSk7Cisr CisrLyoqCisrICogQHJldHVybiB0aGUgQVZDb2xvclNwYWNlIHZhbHVlIGZvciBuYW1lIG9yIGFu IEFWRXJyb3IgaWYgbm90IGZvdW5kLgorKyAqLworK2ludCBhdl9jb2xvcl9zcGFjZV9mcm9tX25h bWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisrICogQHJldHVybiB0aGUgbmFtZSBmb3Ig cHJvdmlkZWQgY2hyb21hIGxvY2F0aW9uIG9yIE5VTEwgaWYgdW5rbm93bi4KKysgKi8KKytjb25z dCBjaGFyICphdl9jaHJvbWFfbG9jYXRpb25fbmFtZShlbnVtIEFWQ2hyb21hTG9jYXRpb24gbG9j YXRpb24pOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIEFWQ2hyb21hTG9jYXRpb24gdmFsdWUg Zm9yIG5hbWUgb3IgYW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisraW50IGF2X2Nocm9t YV9sb2NhdGlvbl9mcm9tX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisrICogQ29u dmVydHMgQVZDaHJvbWFMb2NhdGlvbiB0byBzd3NjYWxlIHgveSBjaHJvbWEgcG9zaXRpb24uCisr ICoKKysgKiBUaGUgcG9zaXRpb25zIHJlcHJlc2VudCB0aGUgY2hyb21hICgwLDApIHBvc2l0aW9u IGluIGEgY29vcmRpbmF0ZXMgc3lzdGVtCisrICogd2l0aCBsdW1hICgwLDApIHJlcHJlc2VudGlu ZyB0aGUgb3JpZ2luIGFuZCBsdW1hKDEsMSkgcmVwcmVzZW50aW5nIDI1NiwyNTYKKysgKgorKyAq IEBwYXJhbSB4cG9zICBob3Jpem9udGFsIGNocm9tYSBzYW1wbGUgcG9zaXRpb24KKysgKiBAcGFy YW0geXBvcyAgdmVydGljYWwgICBjaHJvbWEgc2FtcGxlIHBvc2l0aW9uCisrICovCisraW50IGF2 X2Nocm9tYV9sb2NhdGlvbl9lbnVtX3RvX3BvcyhpbnQgKnhwb3MsIGludCAqeXBvcywgZW51bSBB VkNocm9tYUxvY2F0aW9uIHBvcyk7CisrCisrLyoqCisrICogQ29udmVydHMgc3dzY2FsZSB4L3kg Y2hyb21hIHBvc2l0aW9uIHRvIEFWQ2hyb21hTG9jYXRpb24uCisrICoKKysgKiBUaGUgcG9zaXRp b25zIHJlcHJlc2VudCB0aGUgY2hyb21hICgwLDApIHBvc2l0aW9uIGluIGEgY29vcmRpbmF0ZXMg c3lzdGVtCisrICogd2l0aCBsdW1hICgwLDApIHJlcHJlc2VudGluZyB0aGUgb3JpZ2luIGFuZCBs dW1hKDEsMSkgcmVwcmVzZW50aW5nIDI1NiwyNTYKKysgKgorKyAqIEBwYXJhbSB4cG9zICBob3Jp em9udGFsIGNocm9tYSBzYW1wbGUgcG9zaXRpb24KKysgKiBAcGFyYW0geXBvcyAgdmVydGljYWwg ICBjaHJvbWEgc2FtcGxlIHBvc2l0aW9uCisrICovCisrZW51bSBBVkNocm9tYUxvY2F0aW9uIGF2 X2Nocm9tYV9sb2NhdGlvbl9wb3NfdG9fZW51bShpbnQgeHBvcywgaW50IHlwb3MpOworKworKy8q KgorKyAqIEByZXR1cm4gdGhlIG5hbWUgZm9yIHByb3ZpZGVkIGFscGhhIG1vZGUgb3IgTlVMTCBp ZiB1bmtub3duLgorKyAqLworK2NvbnN0IGNoYXIgKmF2X2FscGhhX21vZGVfbmFtZShlbnVtIEFW QWxwaGFNb2RlIG1vZGUpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIEFWQWxwaGFNb2RlIHZh bHVlIGZvciBuYW1lIG9yIGFuIEFWRXJyb3IgaWYgbm90IGZvdW5kLgorKyAqLworK2VudW0gQVZB bHBoYU1vZGUgYXZfYWxwaGFfbW9kZV9mcm9tX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisr LyoqCisrICogUmV0dXJuIHRoZSBwaXhlbCBmb3JtYXQgY29ycmVzcG9uZGluZyB0byBuYW1lLgor KyAqCisrICogSWYgdGhlcmUgaXMgbm8gcGl4ZWwgZm9ybWF0IHdpdGggbmFtZSBuYW1lLCB0aGVu IGxvb2tzIGZvciBhCisrICogcGl4ZWwgZm9ybWF0IHdpdGggdGhlIG5hbWUgY29ycmVzcG9uZGlu ZyB0byB0aGUgbmF0aXZlIGVuZGlhbgorKyAqIGZvcm1hdCBvZiBuYW1lLgorKyAqIEZvciBleGFt cGxlIGluIGEgbGl0dGxlLWVuZGlhbiBzeXN0ZW0sIGZpcnN0IGxvb2tzIGZvciAiZ3JheTE2IiwK KysgKiB0aGVuIGZvciAiZ3JheTE2bGUiLgorKyAqCisrICogRmluYWxseSBpZiBubyBwaXhlbCBm b3JtYXQgaGFzIGJlZW4gZm91bmQsIHJldHVybnMgQVZfUElYX0ZNVF9OT05FLgorKyAqLworK2Vu dW0gQVZQaXhlbEZvcm1hdCBhdl9nZXRfcGl4X2ZtdChjb25zdCBjaGFyICpuYW1lKTsKKysKKysv KioKKysgKiBSZXR1cm4gdGhlIHNob3J0IG5hbWUgZm9yIGEgcGl4ZWwgZm9ybWF0LCBOVUxMIGlu IGNhc2UgcGl4X2ZtdCBpcworKyAqIHVua25vd24uCisrICoKKysgKiBAc2VlIGF2X2dldF9waXhf Zm10KCksIGF2X2dldF9waXhfZm10X3N0cmluZygpCisrICovCisrY29uc3QgY2hhciAqYXZfZ2V0 X3BpeF9mbXRfbmFtZShlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7CisrCisrLyoqCisrICog UHJpbnQgaW4gYnVmIHRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgcGl4ZWwgZm9ybWF0 IHdpdGgKKysgKiBudW1iZXIgcGl4X2ZtdCwgb3IgYSBoZWFkZXIgaWYgcGl4X2ZtdCBpcyBuZWdh dGl2ZS4KKysgKgorKyAqIEBwYXJhbSBidWYgdGhlIGJ1ZmZlciB3aGVyZSB0byB3cml0ZSB0aGUg c3RyaW5nCisrICogQHBhcmFtIGJ1Zl9zaXplIHRoZSBzaXplIG9mIGJ1ZgorKyAqIEBwYXJhbSBw aXhfZm10IHRoZSBudW1iZXIgb2YgdGhlIHBpeGVsIGZvcm1hdCB0byBwcmludCB0aGUKKysgKiBj b3JyZXNwb25kaW5nIGluZm8gc3RyaW5nLCBvciBhIG5lZ2F0aXZlIHZhbHVlIHRvIHByaW50IHRo ZQorKyAqIGNvcnJlc3BvbmRpbmcgaGVhZGVyLgorKyAqLworK2NoYXIgKmF2X2dldF9waXhfZm10 X3N0cmluZyhjaGFyICpidWYsIGludCBidWZfc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKy8qKgorKyAqIFJlYWQgYSBs aW5lIGZyb20gYW4gaW1hZ2UsIGFuZCB3cml0ZSB0aGUgdmFsdWVzIG9mIHRoZQorKyAqIHBpeGVs IGZvcm1hdCBjb21wb25lbnQgYyB0byBkc3QuCisrICoKKysgKiBAcGFyYW0gZGF0YSB0aGUgYXJy YXkgY29udGFpbmluZyB0aGUgcG9pbnRlcnMgdG8gdGhlIHBsYW5lcyBvZiB0aGUgaW1hZ2UKKysg KiBAcGFyYW0gbGluZXNpemUgdGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpbmVzaXplcyBvZiB0 aGUgaW1hZ2UKKysgKiBAcGFyYW0gZGVzYyB0aGUgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3IgZm9y IHRoZSBpbWFnZQorKyAqIEBwYXJhbSB4IHRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhl IGZpcnN0IHBpeGVsIHRvIHJlYWQKKysgKiBAcGFyYW0geSB0aGUgdmVydGljYWwgY29vcmRpbmF0 ZSBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gcmVhZAorKyAqIEBwYXJhbSB3IHRoZSB3aWR0aCBvZiB0 aGUgbGluZSB0byByZWFkLCB0aGF0IGlzIHRoZSBudW1iZXIgb2YKKysgKiB2YWx1ZXMgdG8gd3Jp dGUgdG8gZHN0CisrICogQHBhcmFtIHJlYWRfcGFsX2NvbXBvbmVudCBpZiBub3QgemVybyBhbmQg dGhlIGZvcm1hdCBpcyBhIHBhbGV0dGVkCisrICogZm9ybWF0IHdyaXRlcyB0aGUgdmFsdWVzIGNv cnJlc3BvbmRpbmcgdG8gdGhlIHBhbGV0dGUKKysgKiBjb21wb25lbnQgYyBpbiBkYXRhWzFdIHRv IGRzdCwgcmF0aGVyIHRoYW4gdGhlIHBhbGV0dGUgaW5kZXhlcyBpbgorKyAqIGRhdGFbMF0uIFRo ZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIGZvcm1hdCBpcyBub3QgcGFsZXR0ZWQuCisr ICogQHBhcmFtIGRzdF9lbGVtZW50X3NpemUgc2l6ZSBvZiBlbGVtZW50cyBpbiBkc3QgYXJyYXkg KDIgb3IgNCBieXRlKQorKyAqLworK3ZvaWQgYXZfcmVhZF9pbWFnZV9saW5lMih2b2lkICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKmRhdGFbNF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg aW50IGxpbmVzaXplWzRdLCBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgYywgaW50IHcsIGludCByZWFkX3Bh bF9jb21wb25lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdF9lbGVtZW50X3Np emUpOworKworK3ZvaWQgYXZfcmVhZF9pbWFnZV9saW5lKHVpbnQxNl90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKmRhdGFbNF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxpbmVz aXplWzRdLCBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgYywgaW50IHcsIGludCByZWFkX3BhbF9jb21wb25l bnQpOworKworKy8qKgorKyAqIFdyaXRlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgdG8gdGhlIHBpeGVs IGZvcm1hdCBjb21wb25lbnQgYyBvZiBhbgorKyAqIGltYWdlIGxpbmUuCisrICoKKysgKiBAcGFy YW0gc3JjIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3cml0ZQorKyAqIEBwYXJhbSBk YXRhIHRoZSBhcnJheSBjb250YWluaW5nIHRoZSBwb2ludGVycyB0byB0aGUgcGxhbmVzIG9mIHRo ZQorKyAqIGltYWdlIHRvIHdyaXRlIGludG8uIEl0IGlzIHN1cHBvc2VkIHRvIGJlIHplcm9lZC4K KysgKiBAcGFyYW0gbGluZXNpemUgdGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpbmVzaXplcyBv ZiB0aGUgaW1hZ2UKKysgKiBAcGFyYW0gZGVzYyB0aGUgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3Ig Zm9yIHRoZSBpbWFnZQorKyAqIEBwYXJhbSB4IHRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgb2Yg dGhlIGZpcnN0IHBpeGVsIHRvIHdyaXRlCisrICogQHBhcmFtIHkgdGhlIHZlcnRpY2FsIGNvb3Jk aW5hdGUgb2YgdGhlIGZpcnN0IHBpeGVsIHRvIHdyaXRlCisrICogQHBhcmFtIHcgdGhlIHdpZHRo IG9mIHRoZSBsaW5lIHRvIHdyaXRlLCB0aGF0IGlzIHRoZSBudW1iZXIgb2YKKysgKiB2YWx1ZXMg dG8gd3JpdGUgdG8gdGhlIGltYWdlIGxpbmUKKysgKiBAcGFyYW0gc3JjX2VsZW1lbnRfc2l6ZSBz aXplIG9mIGVsZW1lbnRzIGluIHNyYyBhcnJheSAoMiBvciA0IGJ5dGUpCisrICovCisrdm9pZCBh dl93cml0ZV9pbWFnZV9saW5lMihjb25zdCB2b2lkICpzcmMsIHVpbnQ4X3QgKmRhdGFbNF0sCisr ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsaW5lc2l6ZVs0XSwgY29uc3QgQVZQ aXhGbXREZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwg aW50IHksIGludCBjLCBpbnQgdywgaW50IHNyY19lbGVtZW50X3NpemUpOworKworK3ZvaWQgYXZf d3JpdGVfaW1hZ2VfbGluZShjb25zdCB1aW50MTZfdCAqc3JjLCB1aW50OF90ICpkYXRhWzRdLAor KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGluZXNpemVbNF0sIGNvbnN0IEFW UGl4Rm10RGVzY3JpcHRvciAqZGVzYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgs IGludCB5LCBpbnQgYywgaW50IHcpOworKworKy8qKgorKyAqIFV0aWxpdHkgZnVuY3Rpb24gdG8g c3dhcCB0aGUgZW5kaWFubmVzcyBvZiBhIHBpeGVsIGZvcm1hdC4KKysgKgorKyAqIEBwYXJhbVtp bl0gIHBpeF9mbXQgdGhlIHBpeGVsIGZvcm1hdAorKyAqCisrICogQHJldHVybiBwaXhlbCBmb3Jt YXQgd2l0aCBzd2FwcGVkIGVuZGlhbm5lc3MgaWYgaXQgZXhpc3RzLAorKyAqIG90aGVyd2lzZSBB Vl9QSVhfRk1UX05PTkUKKysgKi8KKytlbnVtIEFWUGl4ZWxGb3JtYXQgYXZfcGl4X2ZtdF9zd2Fw X2VuZGlhbm5lc3MoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKyNkZWZpbmUgRkZf TE9TU19SRVNPTFVUSU9OICAgICAgICAweDAwMDEgLyoqPCBsb3NzIGR1ZSB0byByZXNvbHV0aW9u IGNoYW5nZSAqLworKyNkZWZpbmUgRkZfTE9TU19ERVBUSCAgICAgICAgICAgICAweDAwMDIgLyoq PCBsb3NzIGR1ZSB0byBjb2xvciBkZXB0aCBjaGFuZ2UgKi8KKysjZGVmaW5lIEZGX0xPU1NfQ09M T1JTUEFDRSAgICAgICAgMHgwMDA0IC8qKjwgbG9zcyBkdWUgdG8gY29sb3Igc3BhY2UgY29udmVy c2lvbiAqLworKyNkZWZpbmUgRkZfTE9TU19BTFBIQSAgICAgICAgICAgICAweDAwMDggLyoqPCBs b3NzIG9mIGFscGhhIGJpdHMgKi8KKysjZGVmaW5lIEZGX0xPU1NfQ09MT1JRVUFOVCAgICAgICAg MHgwMDEwIC8qKjwgbG9zcyBkdWUgdG8gY29sb3IgcXVhbnRpemF0aW9uICovCisrI2RlZmluZSBG Rl9MT1NTX0NIUk9NQSAgICAgICAgICAgIDB4MDAyMCAvKio8IGxvc3Mgb2YgY2hyb21hIChlLmcu IFJHQiB0byBncmF5IGNvbnZlcnNpb24pICovCisrI2RlZmluZSBGRl9MT1NTX0VYQ0VTU19SRVNP TFVUSU9OIDB4MDA0MCAvKio8IGxvc3MgZHVlIHRvIHVubmVlZGVkIGV4dHJhIHJlc29sdXRpb24g Ki8KKysjZGVmaW5lIEZGX0xPU1NfRVhDRVNTX0RFUFRIICAgICAgMHgwMDgwIC8qKjwgbG9zcyBk dWUgdG8gdW5uZWVkZWQgZXh0cmEgY29sb3IgZGVwdGggKi8KKysKKysKKysvKioKKysgKiBDb21w dXRlIHdoYXQga2luZCBvZiBsb3NzZXMgd2lsbCBvY2N1ciB3aGVuIGNvbnZlcnRpbmcgZnJvbSBv bmUgc3BlY2lmaWMKKysgKiBwaXhlbCBmb3JtYXQgdG8gYW5vdGhlci4KKysgKiBXaGVuIGNvbnZl cnRpbmcgZnJvbSBvbmUgcGl4ZWwgZm9ybWF0IHRvIGFub3RoZXIsIGluZm9ybWF0aW9uIGxvc3Mg bWF5IG9jY3VyLgorKyAqIEZvciBleGFtcGxlLCB3aGVuIGNvbnZlcnRpbmcgZnJvbSBSR0IyNCB0 byBHUkFZLCB0aGUgY29sb3IgaW5mb3JtYXRpb24gd2lsbAorKyAqIGJlIGxvc3QuIFNpbWlsYXJs eSwgb3RoZXIgbG9zc2VzIG9jY3VyIHdoZW4gY29udmVydGluZyBmcm9tIHNvbWUgZm9ybWF0cyB0 bworKyAqIG90aGVyIGZvcm1hdHMuIFRoZXNlIGxvc3NlcyBjYW4gaW52b2x2ZSBsb3NzIG9mIGNo cm9tYSwgYnV0IGFsc28gbG9zcyBvZgorKyAqIHJlc29sdXRpb24sIGxvc3Mgb2YgY29sb3IgZGVw dGgsIGxvc3MgZHVlIHRvIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uLCBsb3NzCisrICogb2Yg dGhlIGFscGhhIGJpdHMgb3IgbG9zcyBkdWUgdG8gY29sb3IgcXVhbnRpemF0aW9uLgorKyAqIGF2 X2dldF9maXhfZm10X2xvc3MoKSBpbmZvcm1zIHlvdSBhYm91dCB0aGUgdmFyaW91cyB0eXBlcyBv ZiBsb3NzZXMKKysgKiB3aGljaCB3aWxsIG9jY3VyIHdoZW4gY29udmVydGluZyBmcm9tIG9uZSBw aXhlbCBmb3JtYXQgdG8gYW5vdGhlci4KKysgKgorKyAqIEBwYXJhbVtpbl0gZHN0X3BpeF9mbXQg ZGVzdGluYXRpb24gcGl4ZWwgZm9ybWF0CisrICogQHBhcmFtW2luXSBzcmNfcGl4X2ZtdCBzb3Vy Y2UgcGl4ZWwgZm9ybWF0CisrICogQHBhcmFtW2luXSBoYXNfYWxwaGEgV2hldGhlciB0aGUgc291 cmNlIHBpeGVsIGZvcm1hdCBhbHBoYSBjaGFubmVsIGlzIHVzZWQuCisrICogQHJldHVybiBDb21i aW5hdGlvbiBvZiBmbGFncyBpbmZvcm1pbmcgeW91IHdoYXQga2luZCBvZiBsb3NzZXMgd2lsbCBv Y2N1cgorKyAqIChtYXhpbXVtIGxvc3MgZm9yIGFuIGludmFsaWQgZHN0X3BpeF9mbXQpLgorKyAq LworK2ludCBhdl9nZXRfcGl4X2ZtdF9sb3NzKGVudW0gQVZQaXhlbEZvcm1hdCBkc3RfcGl4X2Zt dCwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgc3JjX3BpeF9m bXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc19hbHBoYSk7CisrCisrLyoqCisr ICogQ29tcHV0ZSB3aGF0IGtpbmQgb2YgbG9zc2VzIHdpbGwgb2NjdXIgd2hlbiBjb252ZXJ0aW5n IGZyb20gb25lIHNwZWNpZmljCisrICogcGl4ZWwgZm9ybWF0IHRvIGFub3RoZXIuCisrICogV2hl biBjb252ZXJ0aW5nIGZyb20gb25lIHBpeGVsIGZvcm1hdCB0byBhbm90aGVyLCBpbmZvcm1hdGlv biBsb3NzIG1heSBvY2N1ci4KKysgKiBGb3IgZXhhbXBsZSwgd2hlbiBjb252ZXJ0aW5nIGZyb20g UkdCMjQgdG8gR1JBWSwgdGhlIGNvbG9yIGluZm9ybWF0aW9uIHdpbGwKKysgKiBiZSBsb3N0LiBT aW1pbGFybHksIG90aGVyIGxvc3NlcyBvY2N1ciB3aGVuIGNvbnZlcnRpbmcgZnJvbSBzb21lIGZv cm1hdHMgdG8KKysgKiBvdGhlciBmb3JtYXRzLiBUaGVzZSBsb3NzZXMgY2FuIGludm9sdmUgbG9z cyBvZiBjaHJvbWEsIGJ1dCBhbHNvIGxvc3Mgb2YKKysgKiByZXNvbHV0aW9uLCBsb3NzIG9mIGNv bG9yIGRlcHRoLCBsb3NzIGR1ZSB0byB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiwgbG9zcwor KyAqIG9mIHRoZSBhbHBoYSBiaXRzIG9yIGxvc3MgZHVlIHRvIGNvbG9yIHF1YW50aXphdGlvbi4K KysgKiBhdl9nZXRfZml4X2ZtdF9sb3NzKCkgaW5mb3JtcyB5b3UgYWJvdXQgdGhlIHZhcmlvdXMg dHlwZXMgb2YgbG9zc2VzCisrICogd2hpY2ggd2lsbCBvY2N1ciB3aGVuIGNvbnZlcnRpbmcgZnJv bSBvbmUgcGl4ZWwgZm9ybWF0IHRvIGFub3RoZXIuCisrICoKKysgKiBAcGFyYW1baW5dIGRzdF9w aXhfZm10IGRlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdAorKyAqIEBwYXJhbVtpbl0gc3JjX3BpeF9m bXQgc291cmNlIHBpeGVsIGZvcm1hdAorKyAqIEBwYXJhbVtpbl0gaGFzX2FscGhhIFdoZXRoZXIg dGhlIHNvdXJjZSBwaXhlbCBmb3JtYXQgYWxwaGEgY2hhbm5lbCBpcyB1c2VkLgorKyAqIEByZXR1 cm4gQ29tYmluYXRpb24gb2YgZmxhZ3MgaW5mb3JtaW5nIHlvdSB3aGF0IGtpbmQgb2YgbG9zc2Vz IHdpbGwgb2NjdXIKKysgKiAobWF4aW11bSBsb3NzIGZvciBhbiBpbnZhbGlkIGRzdF9waXhfZm10 KS4KKysgKi8KKytlbnVtIEFWUGl4ZWxGb3JtYXQgYXZfZmluZF9iZXN0X3BpeF9mbXRfb2ZfMihl bnVtIEFWUGl4ZWxGb3JtYXQgZHN0X3BpeF9mbXQxLCBlbnVtIEFWUGl4ZWxGb3JtYXQgZHN0X3Bp eF9mbXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gQVZQaXhlbEZvcm1hdCBzcmNfcGl4X2ZtdCwgaW50IGhhc19hbHBoYSwgaW50ICpsb3NzX3B0 cik7CisrCisrI2VuZGlmIC8qIEFWVVRJTF9QSVhERVNDX0ggKi8KK2RpZmYgLXVwIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRp bC9waXhmbXQuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9waXhmbXQuaAorLS0tIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9waXhm bXQuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc4ODU4MzMxICswMjAwCisrKysgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZ1dGlsL3BpeGZtdC5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc4NTcwNjIzICswMjAwCitAQCAt MCwwICsxLDgxNyBAQAorKy8qCisrICogY29weXJpZ2h0IChjKSAyMDA2IE1pY2hhZWwgTmllZGVy bWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+CisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9QSVhGTVRfSAorKyNk ZWZpbmUgQVZVVElMX1BJWEZNVF9ICisrCisrLyoqCisrICogQGZpbGUKKysgKiBwaXhlbCBmb3Jt YXQgZGVmaW5pdGlvbnMKKysgKi8KKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL2F2Y29uZmlnLmgi CisrI2luY2x1ZGUgInZlcnNpb24uaCIKKysKKysjZGVmaW5lIEFWUEFMRVRURV9TSVpFIDEwMjQK KysjZGVmaW5lIEFWUEFMRVRURV9DT1VOVCAyNTYKKysKKysvKioKKysgKiBNYXhpbXVtIG51bWJl ciBvZiBwbGFuZXMgaW4gYW55IHBpeGVsIGZvcm1hdC4KKysgKiBUaGlzIHNob3VsZCBiZSB1c2Vk IHdoZW4gYSBtYXhpbXVtIGlzIG5lZWRlZCwgYnV0IGNvZGUgc2hvdWxkIG5vdAorKyAqIGJlIHdy aXR0ZW4gdG8gcmVxdWlyZSBhIG1heGltdW0gZm9yIG5vIGdvb2QgcmVhc29uLgorKyAqLworKyNk ZWZpbmUgQVZfVklERU9fTUFYX1BMQU5FUyA0CisrCisrLyoqCisrICogUGl4ZWwgZm9ybWF0Lgor KyAqCisrICogQG5vdGUKKysgKiBBVl9QSVhfRk1UX1JHQjMyIGlzIGhhbmRsZWQgaW4gYW4gZW5k aWFuLXNwZWNpZmljIG1hbm5lci4gQW4gUkdCQQorKyAqIGNvbG9yIGlzIHB1dCB0b2dldGhlciBh czoKKysgKiAgKEEgPDwgMjQpIHwgKFIgPDwgMTYpIHwgKEcgPDwgOCkgfCBCCisrICogVGhpcyBp cyBzdG9yZWQgYXMgQkdSQSBvbiBsaXR0bGUtZW5kaWFuIENQVSBhcmNoaXRlY3R1cmVzIGFuZCBB UkdCIG9uCisrICogYmlnLWVuZGlhbiBDUFVzLgorKyAqCisrICogQG5vdGUKKysgKiBJZiB0aGUg cmVzb2x1dGlvbiBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2hyb21hIHN1YnNhbXBsaW5nIGZh Y3RvcgorKyAqIHRoZW4gdGhlIGNocm9tYSBwbGFuZSByZXNvbHV0aW9uIG11c3QgYmUgcm91bmRl ZCB1cC4KKysgKgorKyAqIEBwYXIKKysgKiBXaGVuIHRoZSBwaXhlbCBmb3JtYXQgaXMgcGFsZXR0 aXplZCBSR0IzMiAoQVZfUElYX0ZNVF9QQUw4KSwgdGhlIHBhbGV0dGl6ZWQKKysgKiBpbWFnZSBk YXRhIGlzIHN0b3JlZCBpbiBBVkZyYW1lLmRhdGFbMF0uIFRoZSBwYWxldHRlIGlzIHRyYW5zcG9y dGVkIGluCisrICogQVZGcmFtZS5kYXRhWzFdLCBpcyAxMDI0IGJ5dGVzIGxvbmcgKDI1NiA0LWJ5 dGUgZW50cmllcykgYW5kIGlzCisrICogZm9ybWF0dGVkIHRoZSBzYW1lIGFzIGluIEFWX1BJWF9G TVRfUkdCMzIgZGVzY3JpYmVkIGFib3ZlIChpLmUuLCBpdCBpcworKyAqIGFsc28gZW5kaWFuLXNw ZWNpZmljKS4gTm90ZSBhbHNvIHRoYXQgdGhlIGluZGl2aWR1YWwgUkdCMzIgcGFsZXR0ZQorKyAq IGNvbXBvbmVudHMgc3RvcmVkIGluIEFWRnJhbWUuZGF0YVsxXSBzaG91bGQgYmUgaW4gdGhlIHJh bmdlIDAuLjI1NS4KKysgKiBUaGlzIGlzIGltcG9ydGFudCBhcyBtYW55IGN1c3RvbSBQQUw4IHZp ZGVvIGNvZGVjcyB0aGF0IHdlcmUgZGVzaWduZWQKKysgKiB0byBydW4gb24gdGhlIElCTSBWR0Eg Z3JhcGhpY3MgYWRhcHRlciB1c2UgNi1iaXQgcGFsZXR0ZSBjb21wb25lbnRzLgorKyAqCisrICog QHBhcgorKyAqIEZvciBhbGwgdGhlIDggYml0cyBwZXIgcGl4ZWwgZm9ybWF0cywgYW4gUkdCMzIg cGFsZXR0ZSBpcyBpbiBkYXRhWzFdIGxpa2UKKysgKiBmb3IgcGFsOC4gVGhpcyBwYWxldHRlIGlz IGZpbGxlZCBpbiBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBmdW5jdGlvbgorKyAqIGFsbG9jYXRpbmcg dGhlIHBpY3R1cmUuCisrICovCisrZW51bSBBVlBpeGVsRm9ybWF0IHsKKysgICAgQVZfUElYX0ZN VF9OT05FID0gLTEsCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUCwgICAvLy88IHBsYW5hciBZVVYg NDoyOjAsIDEyYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2FtcGxlcykKKysgICAg QVZfUElYX0ZNVF9ZVVlWNDIyLCAgIC8vLzwgcGFja2VkIFlVViA0OjI6MiwgMTZicHAsIFkwIENi IFkxIENyCisrICAgIEFWX1BJWF9GTVRfUkdCMjQsICAgICAvLy88IHBhY2tlZCBSR0IgODo4Ojgs IDI0YnBwLCBSR0JSR0IuLi4KKysgICAgQVZfUElYX0ZNVF9CR1IyNCwgICAgIC8vLzwgcGFja2Vk IFJHQiA4Ojg6OCwgMjRicHAsIEJHUkJHUi4uLgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMlAsICAg Ly8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAxNmJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZ IHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRfWVVWNDQ0UCwgICAvLy88IHBsYW5hciBZVVYgNDo0 OjQsIDI0YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcykKKysgICAgQVZf UElYX0ZNVF9ZVVY0MTBQLCAgIC8vLzwgcGxhbmFyIFlVViA0OjE6MCwgIDlicHAsICgxIENyICYg Q2Igc2FtcGxlIHBlciA0eDQgWSBzYW1wbGVzKQorKyAgICBBVl9QSVhfRk1UX1lVVjQxMVAsICAg Ly8vPCBwbGFuYXIgWVVWIDQ6MToxLCAxMmJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDR4MSBZ IHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRfR1JBWTgsICAgICAvLy88ICAgICAgICBZICAgICAg ICAsICA4YnBwCisrICAgIEFWX1BJWF9GTVRfTU9OT1dISVRFLCAvLy88ICAgICAgICBZICAgICAg ICAsICAxYnBwLCAwIGlzIHdoaXRlLCAxIGlzIGJsYWNrLCBpbiBlYWNoIGJ5dGUgcGl4ZWxzIGFy ZSBvcmRlcmVkIGZyb20gdGhlIG1zYiB0byB0aGUgbHNiCisrICAgIEFWX1BJWF9GTVRfTU9OT0JM QUNLLCAvLy88ICAgICAgICBZICAgICAgICAsICAxYnBwLCAwIGlzIGJsYWNrLCAxIGlzIHdoaXRl LCBpbiBlYWNoIGJ5dGUgcGl4ZWxzIGFyZSBvcmRlcmVkIGZyb20gdGhlIG1zYiB0byB0aGUgbHNi CisrICAgIEFWX1BJWF9GTVRfUEFMOCwgICAgICAvLy88IDggYml0cyB3aXRoIEFWX1BJWF9GTVRf UkdCMzIgcGFsZXR0ZQorKyAgICBBVl9QSVhfRk1UX1lVVko0MjBQLCAgLy8vPCBwbGFuYXIgWVVW IDQ6MjowLCAxMmJwcCwgZnVsbCBzY2FsZSAoSlBFRyksIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Yg QVZfUElYX0ZNVF9ZVVY0MjBQIGFuZCBzZXR0aW5nIGNvbG9yX3JhbmdlCisrICAgIEFWX1BJWF9G TVRfWVVWSjQyMlAsICAvLy88IHBsYW5hciBZVVYgNDoyOjIsIDE2YnBwLCBmdWxsIHNjYWxlIChK UEVHKSwgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBBVl9QSVhfRk1UX1lVVjQyMlAgYW5kIHNldHRp bmcgY29sb3JfcmFuZ2UKKysgICAgQVZfUElYX0ZNVF9ZVVZKNDQ0UCwgIC8vLzwgcGxhbmFyIFlV ViA0OjQ6NCwgMjRicHAsIGZ1bGwgc2NhbGUgKEpQRUcpLCBkZXByZWNhdGVkIGluIGZhdm9yIG9m IEFWX1BJWF9GTVRfWVVWNDQ0UCBhbmQgc2V0dGluZyBjb2xvcl9yYW5nZQorKyAgICBBVl9QSVhf Rk1UX1VZVlk0MjIsICAgLy8vPCBwYWNrZWQgWVVWIDQ6MjoyLCAxNmJwcCwgQ2IgWTAgQ3IgWTEK KysgICAgQVZfUElYX0ZNVF9VWVlWWVk0MTEsIC8vLzwgcGFja2VkIFlVViA0OjE6MSwgMTJicHAs IENiIFkwIFkxIENyIFkyIFkzCisrICAgIEFWX1BJWF9GTVRfQkdSOCwgICAgICAvLy88IHBhY2tl ZCBSR0IgMzozOjIsICA4YnBwLCAobXNiKTJCIDNHIDNSKGxzYikKKysgICAgQVZfUElYX0ZNVF9C R1I0LCAgICAgIC8vLzwgcGFja2VkIFJHQiAxOjI6MSBiaXRzdHJlYW0sICA0YnBwLCAobXNiKTFC IDJHIDFSKGxzYiksIGEgYnl0ZSBjb250YWlucyB0d28gcGl4ZWxzLCB0aGUgZmlyc3QgcGl4ZWwg aW4gdGhlIGJ5dGUgaXMgdGhlIG9uZSBjb21wb3NlZCBieSB0aGUgNCBtc2IgYml0cworKyAgICBB Vl9QSVhfRk1UX0JHUjRfQllURSwgLy8vPCBwYWNrZWQgUkdCIDE6MjoxLCAgOGJwcCwgKG1zYikx QiAyRyAxUihsc2IpCisrICAgIEFWX1BJWF9GTVRfUkdCOCwgICAgICAvLy88IHBhY2tlZCBSR0Ig MzozOjIsICA4YnBwLCAobXNiKTNSIDNHIDJCKGxzYikKKysgICAgQVZfUElYX0ZNVF9SR0I0LCAg ICAgIC8vLzwgcGFja2VkIFJHQiAxOjI6MSBiaXRzdHJlYW0sICA0YnBwLCAobXNiKTFSIDJHIDFC KGxzYiksIGEgYnl0ZSBjb250YWlucyB0d28gcGl4ZWxzLCB0aGUgZmlyc3QgcGl4ZWwgaW4gdGhl IGJ5dGUgaXMgdGhlIG9uZSBjb21wb3NlZCBieSB0aGUgNCBtc2IgYml0cworKyAgICBBVl9QSVhf Rk1UX1JHQjRfQllURSwgLy8vPCBwYWNrZWQgUkdCIDE6MjoxLCAgOGJwcCwgKG1zYikxUiAyRyAx Qihsc2IpCisrICAgIEFWX1BJWF9GTVRfTlYxMiwgICAgICAvLy88IHBsYW5hciBZVVYgNDoyOjAs IDEyYnBwLCAxIHBsYW5lIGZvciBZIGFuZCAxIHBsYW5lIGZvciB0aGUgVVYgY29tcG9uZW50cywg d2hpY2ggYXJlIGludGVybGVhdmVkIChmaXJzdCBieXRlIFUgYW5kIHRoZSBmb2xsb3dpbmcgYnl0 ZSBWKQorKyAgICBBVl9QSVhfRk1UX05WMjEsICAgICAgLy8vPCBhcyBhYm92ZSwgYnV0IFUgYW5k IFYgYnl0ZXMgYXJlIHN3YXBwZWQKKysKKysgICAgQVZfUElYX0ZNVF9BUkdCLCAgICAgIC8vLzwg cGFja2VkIEFSR0IgODo4Ojg6OCwgMzJicHAsIEFSR0JBUkdCLi4uCisrICAgIEFWX1BJWF9GTVRf UkdCQSwgICAgICAvLy88IHBhY2tlZCBSR0JBIDg6ODo4OjgsIDMyYnBwLCBSR0JBUkdCQS4uLgor KyAgICBBVl9QSVhfRk1UX0FCR1IsICAgICAgLy8vPCBwYWNrZWQgQUJHUiA4Ojg6ODo4LCAzMmJw cCwgQUJHUkFCR1IuLi4KKysgICAgQVZfUElYX0ZNVF9CR1JBLCAgICAgIC8vLzwgcGFja2VkIEJH UkEgODo4Ojg6OCwgMzJicHAsIEJHUkFCR1JBLi4uCisrCisrICAgIEFWX1BJWF9GTVRfR1JBWTE2 QkUsICAvLy88ICAgICAgICBZICAgICAgICAsIDE2YnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJ WF9GTVRfR1JBWTE2TEUsICAvLy88ICAgICAgICBZICAgICAgICAsIDE2YnBwLCBsaXR0bGUtZW5k aWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDQwUCwgICAvLy88IHBsYW5hciBZVVYgNDo0OjAgKDEg Q3IgJiBDYiBzYW1wbGUgcGVyIDF4MiBZIHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRfWVVWSjQ0 MFAsICAvLy88IHBsYW5hciBZVVYgNDo0OjAgZnVsbCBzY2FsZSAoSlBFRyksIGRlcHJlY2F0ZWQg aW4gZmF2b3Igb2YgQVZfUElYX0ZNVF9ZVVY0NDBQIGFuZCBzZXR0aW5nIGNvbG9yX3JhbmdlCisr ICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsICAvLy88IHBsYW5hciBZVVYgNDoyOjAsIDIwYnBwLCAo MSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgJiBBIHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRf UkdCNDhCRSwgICAvLy88IHBhY2tlZCBSR0IgMTY6MTY6MTYsIDQ4YnBwLCAxNlIsIDE2RywgMTZC LCB0aGUgMi1ieXRlIHZhbHVlIGZvciBlYWNoIFIvRy9CIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMg YmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1JHQjQ4TEUsICAgLy8vPCBwYWNrZWQgUkdCIDE2 OjE2OjE2LCA0OGJwcCwgMTZSLCAxNkcsIDE2QiwgdGhlIDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBS L0cvQiBjb21wb25lbnQgaXMgc3RvcmVkIGFzIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElY X0ZNVF9SR0I1NjVCRSwgIC8vLzwgcGFja2VkIFJHQiA1OjY6NSwgMTZicHAsIChtc2IpICAgNVIg NkcgNUIobHNiKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1JHQjU2NUxFLCAgLy8vPCBw YWNrZWQgUkdCIDU6Njo1LCAxNmJwcCwgKG1zYikgICA1UiA2RyA1Qihsc2IpLCBsaXR0bGUtZW5k aWFuCisrICAgIEFWX1BJWF9GTVRfUkdCNTU1QkUsICAvLy88IHBhY2tlZCBSR0IgNTo1OjUsIDE2 YnBwLCAobXNiKTFYIDVSIDVHIDVCKGxzYiksIGJpZy1lbmRpYW4gICAsIFg9dW51c2VkL3VuZGVm aW5lZAorKyAgICBBVl9QSVhfRk1UX1JHQjU1NUxFLCAgLy8vPCBwYWNrZWQgUkdCIDU6NTo1LCAx NmJwcCwgKG1zYikxWCA1UiA1RyA1Qihsc2IpLCBsaXR0bGUtZW5kaWFuLCBYPXVudXNlZC91bmRl ZmluZWQKKysKKysgICAgQVZfUElYX0ZNVF9CR1I1NjVCRSwgIC8vLzwgcGFja2VkIEJHUiA1OjY6 NSwgMTZicHAsIChtc2IpICAgNUIgNkcgNVIobHNiKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0JHUjU2NUxFLCAgLy8vPCBwYWNrZWQgQkdSIDU6Njo1LCAxNmJwcCwgKG1zYikgICA1QiA2 RyA1Uihsc2IpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfQkdSNTU1QkUsICAvLy88 IHBhY2tlZCBCR1IgNTo1OjUsIDE2YnBwLCAobXNiKTFYIDVCIDVHIDVSKGxzYiksIGJpZy1lbmRp YW4gICAsIFg9dW51c2VkL3VuZGVmaW5lZAorKyAgICBBVl9QSVhfRk1UX0JHUjU1NUxFLCAgLy8v PCBwYWNrZWQgQkdSIDU6NTo1LCAxNmJwcCwgKG1zYikxWCA1QiA1RyA1Uihsc2IpLCBsaXR0bGUt ZW5kaWFuLCBYPXVudXNlZC91bmRlZmluZWQKKysKKysgICAgLyoqCisrICAgICAqICBIYXJkd2Fy ZSBhY2NlbGVyYXRpb24gdGhyb3VnaCBWQS1BUEksIGRhdGFbM10gY29udGFpbnMgYQorKyAgICAg KiAgVkFTdXJmYWNlSUQuCisrICAgICAqLworKyAgICBBVl9QSVhfRk1UX1ZBQVBJLAorKworKyAg ICBBVl9QSVhfRk1UX1lVVjQyMFAxNkxFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6MjowLCAyNGJwcCwg KDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfWVVWNDIwUDE2QkUsICAvLy88IHBsYW5hciBZVVYgNDoyOjAsIDI0YnBwLCAo MSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZf UElYX0ZNVF9ZVVY0MjJQMTZMRSwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MiwgMzJicHAsICgxIENy ICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9Q SVhfRk1UX1lVVjQyMlAxNkJFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAzMmJwcCwgKDEgQ3Ig JiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9G TVRfWVVWNDQ0UDE2TEUsICAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDQ4YnBwLCAoMSBDciAmIENi IHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9ZVVY0NDRQMTZCRSwgIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCwgNDhicHAsICgxIENyICYgQ2Ig c2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0RY VkEyX1ZMRCwgICAgLy8vPCBIVyBkZWNvZGluZyB0aHJvdWdoIERYVkEyLCBQaWN0dXJlLmRhdGFb M10gY29udGFpbnMgYSBMUERJUkVDVDNEU1VSRkFDRTkgcG9pbnRlcgorKworKyAgICBBVl9QSVhf Rk1UX1JHQjQ0NExFLCAgLy8vPCBwYWNrZWQgUkdCIDQ6NDo0LCAxNmJwcCwgKG1zYik0WCA0UiA0 RyA0Qihsc2IpLCBsaXR0bGUtZW5kaWFuLCBYPXVudXNlZC91bmRlZmluZWQKKysgICAgQVZfUElY X0ZNVF9SR0I0NDRCRSwgIC8vLzwgcGFja2VkIFJHQiA0OjQ6NCwgMTZicHAsIChtc2IpNFggNFIg NEcgNEIobHNiKSwgYmlnLWVuZGlhbiwgICAgWD11bnVzZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJ WF9GTVRfQkdSNDQ0TEUsICAvLy88IHBhY2tlZCBCR1IgNDo0OjQsIDE2YnBwLCAobXNiKTRYIDRC IDRHIDRSKGxzYiksIGxpdHRsZS1lbmRpYW4sIFg9dW51c2VkL3VuZGVmaW5lZAorKyAgICBBVl9Q SVhfRk1UX0JHUjQ0NEJFLCAgLy8vPCBwYWNrZWQgQkdSIDQ6NDo0LCAxNmJwcCwgKG1zYik0WCA0 QiA0RyA0Uihsc2IpLCBiaWctZW5kaWFuLCAgICBYPXVudXNlZC91bmRlZmluZWQKKysgICAgQVZf UElYX0ZNVF9ZQTgsICAgICAgIC8vLzwgOCBiaXRzIGdyYXksIDggYml0cyBhbHBoYQorKworKyAg ICBBVl9QSVhfRk1UX1k0MDBBID0gQVZfUElYX0ZNVF9ZQTgsIC8vLzwgYWxpYXMgZm9yIEFWX1BJ WF9GTVRfWUE4CisrICAgIEFWX1BJWF9GTVRfR1JBWThBPSBBVl9QSVhfRk1UX1lBOCwgLy8vPCBh bGlhcyBmb3IgQVZfUElYX0ZNVF9ZQTgKKysKKysgICAgQVZfUElYX0ZNVF9CR1I0OEJFLCAgIC8v LzwgcGFja2VkIFJHQiAxNjoxNjoxNiwgNDhicHAsIDE2QiwgMTZHLCAxNlIsIHRoZSAyLWJ5dGUg dmFsdWUgZm9yIGVhY2ggUi9HL0IgY29tcG9uZW50IGlzIHN0b3JlZCBhcyBiaWctZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfQkdSNDhMRSwgICAvLy88IHBhY2tlZCBSR0IgMTY6MTY6MTYsIDQ4YnBw LCAxNkIsIDE2RywgMTZSLCB0aGUgMi1ieXRlIHZhbHVlIGZvciBlYWNoIFIvRy9CIGNvbXBvbmVu dCBpcyBzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbgorKworKyAgICAvKioKKysgICAgICogVGhlIGZv bGxvd2luZyAxMiBmb3JtYXRzIGhhdmUgdGhlIGRpc2FkdmFudGFnZSBvZiBuZWVkaW5nIDEgZm9y bWF0IGZvciBlYWNoIGJpdCBkZXB0aC4KKysgICAgICogTm90aWNlIHRoYXQgZWFjaCA5LzEwIGJp dHMgc2FtcGxlIGlzIHN0b3JlZCBpbiAxNiBiaXRzIHdpdGggZXh0cmEgcGFkZGluZy4KKysgICAg ICogSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBtdWx0aXBsZSBiaXQgZGVwdGhzLCB0aGVuIHVzaW5n IEFWX1BJWF9GTVRfWVVWNDIwUDE2KiB3aXRoIHRoZSBicHAgc3RvcmVkIHNlcGFyYXRlbHkgaXMg YmV0dGVyLgorKyAgICAgKi8KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjBQOUJFLCAvLy88IHBsYW5h ciBZVVYgNDoyOjAsIDEzLjVicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSBzYW1wbGVz KSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMFA5TEUsIC8vLzwgcGxhbmFyIFlV ViA0OjI6MCwgMTMuNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZIHNhbXBsZXMpLCBs aXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUDEwQkUsLy8vPCBwbGFuYXIgWVVW IDQ6MjowLCAxNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZIHNhbXBsZXMpLCBiaWct ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUDEwTEUsLy8vPCBwbGFuYXIgWVVWIDQ6Mjow LCAxNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZIHNhbXBsZXMpLCBsaXR0bGUtZW5k aWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDEwQkUsLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAy MGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfWVVWNDIyUDEwTEUsLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAyMGJwcCwg KDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfWVVWNDQ0UDlCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAyN2JwcCwgKDEg Q3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJ WF9GTVRfWVVWNDQ0UDlMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAyN2JwcCwgKDEgQ3IgJiBD YiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9G TVRfWVVWNDQ0UDEwQkUsLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAzMGJwcCwgKDEgQ3IgJiBDYiBz YW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVW NDQ0UDEwTEUsLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAzMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDF4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIy UDlCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAxOGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVy IDJ4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDlMRSwg Ly8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAxOGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZ IHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSUCwgICAgICAvLy88 IHBsYW5hciBHQlIgNDo0OjQgMjRicHAKKysgICAgQVZfUElYX0ZNVF9HQlIyNFAgPSBBVl9QSVhf Rk1UX0dCUlAsIC8vIGFsaWFzIGZvciAjQVZfUElYX0ZNVF9HQlJQCisrICAgIEFWX1BJWF9GTVRf R0JSUDlCRSwgICAvLy88IHBsYW5hciBHQlIgNDo0OjQgMjdicHAsIGJpZy1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9HQlJQOUxFLCAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAyN2JwcCwgbGl0dGxl LWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUlAxMEJFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0 IDMwYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSUDEwTEUsICAvLy88IHBsYW5h ciBHQlIgNDo0OjQgMzBicHAsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJQMTZC RSwgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCA0OGJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0dCUlAxNkxFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0IDQ4YnBwLCBsaXR0bGUtZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfWVVWQTQyMlAsICAvLy88IHBsYW5hciBZVVYgNDoyOjIgMjRicHAs ICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSAmIEEgc2FtcGxlcykKKysgICAgQVZfUElYX0ZN VF9ZVVZBNDQ0UCwgIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCAzMmJwcCwgKDEgQ3IgJiBDYiBzYW1w bGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzKQorKyAgICBBVl9QSVhfRk1UX1lVVkE0MjBQOUJFLCAg Ly8vPCBwbGFuYXIgWVVWIDQ6MjowIDIyLjVicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIg WSAmIEEgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUDlMRSwg IC8vLzwgcGxhbmFyIFlVViA0OjI6MCAyMi41YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngy IFkgJiBBIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWQTQyMlA5 QkUsICAvLy88IHBsYW5hciBZVVYgNDoyOjIgMjdicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAy eDEgWSAmIEEgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIyUDlM RSwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MiAyN2JwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4 MSBZICYgQSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVkE0NDRQ OUJFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0IDM2YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIg MXgxIFkgJiBBIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWQTQ0NFA5 TEUsICAvLy88IHBsYW5hciBZVVYgNDo0OjQgMzZicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAx eDEgWSAmIEEgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIw UDEwQkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MCAyNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVy IDJ4MiBZICYgQSBzYW1wbGVzLCBiaWctZW5kaWFuKQorKyAgICBBVl9QSVhfRk1UX1lVVkE0MjBQ MTBMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjowIDI1YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIg MngyIFkgJiBBIHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4pCisrICAgIEFWX1BJWF9GTVRfWVVWQTQy MlAxMEJFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIgMzBicHAsICgxIENyICYgQ2Igc2FtcGxlIHBl ciAyeDEgWSAmIEEgc2FtcGxlcywgYmlnLWVuZGlhbikKKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIy UDEwTEUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MiAzMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVy IDJ4MSBZICYgQSBzYW1wbGVzLCBsaXR0bGUtZW5kaWFuKQorKyAgICBBVl9QSVhfRk1UX1lVVkE0 NDRQMTBCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0IDQwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBw ZXIgMXgxIFkgJiBBIHNhbXBsZXMsIGJpZy1lbmRpYW4pCisrICAgIEFWX1BJWF9GTVRfWVVWQTQ0 NFAxMExFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQgNDBicHAsICgxIENyICYgQ2Igc2FtcGxlIHBl ciAxeDEgWSAmIEEgc2FtcGxlcywgbGl0dGxlLWVuZGlhbikKKysgICAgQVZfUElYX0ZNVF9ZVVZB NDIwUDE2QkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MCA0MGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDJ4MiBZICYgQSBzYW1wbGVzLCBiaWctZW5kaWFuKQorKyAgICBBVl9QSVhfRk1UX1lVVkE0 MjBQMTZMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjowIDQwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBw ZXIgMngyIFkgJiBBIHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4pCisrICAgIEFWX1BJWF9GTVRfWVVW QTQyMlAxNkJFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIgNDhicHAsICgxIENyICYgQ2Igc2FtcGxl IHBlciAyeDEgWSAmIEEgc2FtcGxlcywgYmlnLWVuZGlhbikKKysgICAgQVZfUElYX0ZNVF9ZVVZB NDIyUDE2TEUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MiA0OGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDJ4MSBZICYgQSBzYW1wbGVzLCBsaXR0bGUtZW5kaWFuKQorKyAgICBBVl9QSVhfRk1UX1lV VkE0NDRQMTZCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0IDY0YnBwLCAoMSBDciAmIENiIHNhbXBs ZSBwZXIgMXgxIFkgJiBBIHNhbXBsZXMsIGJpZy1lbmRpYW4pCisrICAgIEFWX1BJWF9GTVRfWVVW QTQ0NFAxNkxFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQgNjRicHAsICgxIENyICYgQ2Igc2FtcGxl IHBlciAxeDEgWSAmIEEgc2FtcGxlcywgbGl0dGxlLWVuZGlhbikKKysKKysgICAgQVZfUElYX0ZN VF9WRFBBVSwgICAgIC8vLzwgSFcgYWNjZWxlcmF0aW9uIHRocm91Z2ggVkRQQVUsIFBpY3R1cmUu ZGF0YVszXSBjb250YWlucyBhIFZkcFZpZGVvU3VyZmFjZQorKworKyAgICBBVl9QSVhfRk1UX1hZ WjEyTEUsICAgICAgLy8vPCBwYWNrZWQgWFlaIDQ6NDo0LCAzNiBicHAsIChtc2IpIDEyWCwgMTJZ LCAxMlogKGxzYiksIHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggWC9ZL1ogaXMgc3RvcmVkIGFz IGxpdHRsZS1lbmRpYW4sIHRoZSA0IGxvd2VyIGJpdHMgYXJlIHNldCB0byAwCisrICAgIEFWX1BJ WF9GTVRfWFlaMTJCRSwgICAgICAvLy88IHBhY2tlZCBYWVogNDo0OjQsIDM2IGJwcCwgKG1zYikg MTJYLCAxMlksIDEyWiAobHNiKSwgdGhlIDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBYL1kvWiBpcyBz dG9yZWQgYXMgYmlnLWVuZGlhbiwgdGhlIDQgbG93ZXIgYml0cyBhcmUgc2V0IHRvIDAKKysgICAg QVZfUElYX0ZNVF9OVjE2LCAgICAgICAgIC8vLzwgaW50ZXJsZWF2ZWQgY2hyb21hIFlVViA0OjI6 MiwgMTZicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKQorKyAgICBBVl9Q SVhfRk1UX05WMjBMRSwgICAgICAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAy MGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfTlYyMEJFLCAgICAgICAvLy88IGludGVybGVhdmVkIGNocm9tYSBZ VVYgNDoyOjIsIDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGJp Zy1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9SR0JBNjRCRSwgICAgIC8vLzwgcGFja2VkIFJH QkEgMTY6MTY6MTY6MTYsIDY0YnBwLCAxNlIsIDE2RywgMTZCLCAxNkEsIHRoZSAyLWJ5dGUgdmFs dWUgZm9yIGVhY2ggUi9HL0IvQSBjb21wb25lbnQgaXMgc3RvcmVkIGFzIGJpZy1lbmRpYW4KKysg ICAgQVZfUElYX0ZNVF9SR0JBNjRMRSwgICAgIC8vLzwgcGFja2VkIFJHQkEgMTY6MTY6MTY6MTYs IDY0YnBwLCAxNlIsIDE2RywgMTZCLCAxNkEsIHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggUi9H L0IvQSBjb21wb25lbnQgaXMgc3RvcmVkIGFzIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9CR1JBNjRCRSwgICAgIC8vLzwgcGFja2VkIFJHQkEgMTY6MTY6MTY6MTYsIDY0YnBwLCAxNkIs IDE2RywgMTZSLCAxNkEsIHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggUi9HL0IvQSBjb21wb25l bnQgaXMgc3RvcmVkIGFzIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CR1JBNjRMRSwgICAg IC8vLzwgcGFja2VkIFJHQkEgMTY6MTY6MTY6MTYsIDY0YnBwLCAxNkIsIDE2RywgMTZSLCAxNkEs IHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggUi9HL0IvQSBjb21wb25lbnQgaXMgc3RvcmVkIGFz IGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9ZVllVNDIyLCAgIC8vLzwgcGFja2Vk IFlVViA0OjI6MiwgMTZicHAsIFkwIENyIFkxIENiCisrCisrICAgIEFWX1BJWF9GTVRfWUExNkJF LCAgICAgICAvLy88IDE2IGJpdHMgZ3JheSwgMTYgYml0cyBhbHBoYSAoYmlnLWVuZGlhbikKKysg ICAgQVZfUElYX0ZNVF9ZQTE2TEUsICAgICAgIC8vLzwgMTYgYml0cyBncmF5LCAxNiBiaXRzIGFs cGhhIChsaXR0bGUtZW5kaWFuKQorKworKyAgICBBVl9QSVhfRk1UX0dCUkFQLCAgICAgICAgLy8v PCBwbGFuYXIgR0JSQSA0OjQ6NDo0IDMyYnBwCisrICAgIEFWX1BJWF9GTVRfR0JSQVAxNkJFLCAg ICAvLy88IHBsYW5hciBHQlJBIDQ6NDo0OjQgNjRicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElY X0ZNVF9HQlJBUDE2TEUsICAgIC8vLzwgcGxhbmFyIEdCUkEgNDo0OjQ6NCA2NGJwcCwgbGl0dGxl LWVuZGlhbgorKyAgICAvKioKKysgICAgICogSFcgYWNjZWxlcmF0aW9uIHRocm91Z2ggUVNWLCBk YXRhWzNdIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUKKysgICAgICogbWZ4RnJhbWVTdXJmYWNl MSBzdHJ1Y3R1cmUuCisrICAgICAqCisrICAgICAqIEJlZm9yZSBGRm1wZWcgNS4wOgorKyAgICAg KiBtZnhGcmFtZVN1cmZhY2UxLkRhdGEuTWVtSWQgY29udGFpbnMgYSBwb2ludGVyIHdoZW4gaW1w b3J0aW5nCisrICAgICAqIHRoZSBmb2xsb3dpbmcgZnJhbWVzIGFzIFFTViBmcmFtZXM6CisrICAg ICAqCisrICAgICAqIFZBQVBJOgorKyAgICAgKiBtZnhGcmFtZVN1cmZhY2UxLkRhdGEuTWVtSWQg Y29udGFpbnMgYSBwb2ludGVyIHRvIFZBU3VyZmFjZUlECisrICAgICAqCisrICAgICAqIERYVkEy OgorKyAgICAgKiBtZnhGcmFtZVN1cmZhY2UxLkRhdGEuTWVtSWQgY29udGFpbnMgYSBwb2ludGVy IHRvIElEaXJlY3QzRFN1cmZhY2U5CisrICAgICAqCisrICAgICAqIEZGbXBlZyA1LjAgYW5kIGFi b3ZlOgorKyAgICAgKiBtZnhGcmFtZVN1cmZhY2UxLkRhdGEuTWVtSWQgY29udGFpbnMgYSBwb2lu dGVyIHRvIHRoZSBtZnhIRExQYWlyCisrICAgICAqIHN0cnVjdHVyZSB3aGVuIGltcG9ydGluZyB0 aGUgZm9sbG93aW5nIGZyYW1lcyBhcyBRU1YgZnJhbWVzOgorKyAgICAgKgorKyAgICAgKiBWQUFQ SToKKysgICAgICogbWZ4SERMUGFpci5maXJzdCBjb250YWlucyBhIFZBU3VyZmFjZUlEIHBvaW50 ZXIuCisrICAgICAqIG1meEhETFBhaXIuc2Vjb25kIGlzIGFsd2F5cyBNRlhfSU5GSU5JVEUuCisr ICAgICAqCisrICAgICAqIERYVkEyOgorKyAgICAgKiBtZnhIRExQYWlyLmZpcnN0IGNvbnRhaW5z IElEaXJlY3QzRFN1cmZhY2U5IHBvaW50ZXIuCisrICAgICAqIG1meEhETFBhaXIuc2Vjb25kIGlz IGFsd2F5cyBNRlhfSU5GSU5JVEUuCisrICAgICAqCisrICAgICAqIEQzRDExOgorKyAgICAgKiBt ZnhIRExQYWlyLmZpcnN0IGNvbnRhaW5zIGEgSUQzRDExVGV4dHVyZTJEIHBvaW50ZXIuCisrICAg ICAqIG1meEhETFBhaXIuc2Vjb25kIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGFycmF5IGluZGV4IG9m IHRoZSBmcmFtZSBpZiB0aGUKKysgICAgICogSUQzRDExVGV4dHVyZTJEIGlzIGFuIGFycmF5IHRl eHR1cmUsIG9yIGFsd2F5cyBNRlhfSU5GSU5JVEUgaWYgaXQgaXMgYQorKyAgICAgKiBub3JtYWwg dGV4dHVyZS4KKysgICAgICovCisrICAgIEFWX1BJWF9GTVRfUVNWLAorKyAgICAvKioKKysgICAg ICogSFcgYWNjZWxlcmF0aW9uIHRob3VnaCBNTUFMLCBkYXRhWzNdIGNvbnRhaW5zIGEgcG9pbnRl ciB0byB0aGUKKysgICAgICogTU1BTF9CVUZGRVJfSEVBREVSX1Qgc3RydWN0dXJlLgorKyAgICAg Ki8KKysgICAgQVZfUElYX0ZNVF9NTUFMLAorKworKyAgICBBVl9QSVhfRk1UX0QzRDExVkFfVkxE LCAgLy8vPCBIVyBkZWNvZGluZyB0aHJvdWdoIERpcmVjdDNEMTEgdmlhIG9sZCBBUEksIFBpY3R1 cmUuZGF0YVszXSBjb250YWlucyBhIElEM0QxMVZpZGVvRGVjb2Rlck91dHB1dFZpZXcgcG9pbnRl cgorKworKyAgICAvKioKKysgICAgICogSFcgYWNjZWxlcmF0aW9uIHRocm91Z2ggQ1VEQS4gZGF0 YVtpXSBjb250YWluIENVZGV2aWNlcHRyIHBvaW50ZXJzCisrICAgICAqIGV4YWN0bHkgYXMgZm9y IHN5c3RlbSBtZW1vcnkgZnJhbWVzLgorKyAgICAgKi8KKysgICAgQVZfUElYX0ZNVF9DVURBLAor KworKyAgICBBVl9QSVhfRk1UXzBSR0IsICAgICAgICAvLy88IHBhY2tlZCBSR0IgODo4OjgsIDMy YnBwLCBYUkdCWFJHQi4uLiAgIFg9dW51c2VkL3VuZGVmaW5lZAorKyAgICBBVl9QSVhfRk1UX1JH QjAsICAgICAgICAvLy88IHBhY2tlZCBSR0IgODo4OjgsIDMyYnBwLCBSR0JYUkdCWC4uLiAgIFg9 dW51c2VkL3VuZGVmaW5lZAorKyAgICBBVl9QSVhfRk1UXzBCR1IsICAgICAgICAvLy88IHBhY2tl ZCBCR1IgODo4OjgsIDMyYnBwLCBYQkdSWEJHUi4uLiAgIFg9dW51c2VkL3VuZGVmaW5lZAorKyAg ICBBVl9QSVhfRk1UX0JHUjAsICAgICAgICAvLy88IHBhY2tlZCBCR1IgODo4OjgsIDMyYnBwLCBC R1JYQkdSWC4uLiAgIFg9dW51c2VkL3VuZGVmaW5lZAorKworKyAgICBBVl9QSVhfRk1UX1lVVjQy MFAxMkJFLCAvLy88IHBsYW5hciBZVVYgNDoyOjAsMThicHAsICgxIENyICYgQ2Igc2FtcGxlIHBl ciAyeDIgWSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAxMkxF LCAvLy88IHBsYW5hciBZVVYgNDoyOjAsMThicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIg WSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAxNEJFLCAv Ly88IHBsYW5hciBZVVYgNDoyOjAsMjFicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSBz YW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAxNExFLCAvLy88IHBs YW5hciBZVVYgNDoyOjAsMjFicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSBzYW1wbGVz KSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMlAxMkJFLCAvLy88IHBsYW5h ciBZVVYgNDoyOjIsMjRicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwg YmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMlAxMkxFLCAvLy88IHBsYW5hciBZVVYg NDoyOjIsMjRicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgbGl0dGxl LWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMlAxNEJFLCAvLy88IHBsYW5hciBZVVYgNDoy OjIsMjhicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgYmlnLWVuZGlh bgorKyAgICBBVl9QSVhfRk1UX1lVVjQyMlAxNExFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIsMjhi cHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgor KyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAxMkJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsMzZicHAs ICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX1lVVjQ0NFAxMkxFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsMzZicHAsICgxIENy ICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9Q SVhfRk1UX1lVVjQ0NFAxNEJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsNDJicHAsICgxIENyICYg Q2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1U X1lVVjQ0NFAxNExFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsNDJicHAsICgxIENyICYgQ2Igc2Ft cGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dC UlAxMkJFLCAgICAvLy88IHBsYW5hciBHQlIgNDo0OjQgMzZicHAsIGJpZy1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9HQlJQMTJMRSwgICAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0IDM2YnBwLCBsaXR0 bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSUDE0QkUsICAgIC8vLzwgcGxhbmFyIEdCUiA0 OjQ6NCA0MmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUlAxNExFLCAgICAvLy88 IHBsYW5hciBHQlIgNDo0OjQgNDJicHAsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9Z VVZKNDExUCwgICAgLy8vPCBwbGFuYXIgWVVWIDQ6MToxLCAxMmJwcCwgKDEgQ3IgJiBDYiBzYW1w bGUgcGVyIDR4MSBZIHNhbXBsZXMpIGZ1bGwgc2NhbGUgKEpQRUcpLCBkZXByZWNhdGVkIGluIGZh dm9yIG9mIEFWX1BJWF9GTVRfWVVWNDExUCBhbmQgc2V0dGluZyBjb2xvcl9yYW5nZQorKworKyAg ICBBVl9QSVhfRk1UX0JBWUVSX0JHR1I4LCAgICAvLy88IGJheWVyLCBCR0JHLi4ob2RkIGxpbmUp LCBHUkdSLi4oZXZlbiBsaW5lKSwgOC1iaXQgc2FtcGxlcworKyAgICBBVl9QSVhfRk1UX0JBWUVS X1JHR0I4LCAgICAvLy88IGJheWVyLCBSR1JHLi4ob2RkIGxpbmUpLCBHQkdCLi4oZXZlbiBsaW5l KSwgOC1iaXQgc2FtcGxlcworKyAgICBBVl9QSVhfRk1UX0JBWUVSX0dCUkc4LCAgICAvLy88IGJh eWVyLCBHQkdCLi4ob2RkIGxpbmUpLCBSR1JHLi4oZXZlbiBsaW5lKSwgOC1iaXQgc2FtcGxlcwor KyAgICBBVl9QSVhfRk1UX0JBWUVSX0dSQkc4LCAgICAvLy88IGJheWVyLCBHUkdSLi4ob2RkIGxp bmUpLCBCR0JHLi4oZXZlbiBsaW5lKSwgOC1iaXQgc2FtcGxlcworKyAgICBBVl9QSVhfRk1UX0JB WUVSX0JHR1IxNkxFLCAvLy88IGJheWVyLCBCR0JHLi4ob2RkIGxpbmUpLCBHUkdSLi4oZXZlbiBs aW5lKSwgMTYtYml0IHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CQVlF Ul9CR0dSMTZCRSwgLy8vPCBiYXllciwgQkdCRy4uKG9kZCBsaW5lKSwgR1JHUi4uKGV2ZW4gbGlu ZSksIDE2LWJpdCBzYW1wbGVzLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfUkdH QjE2TEUsIC8vLzwgYmF5ZXIsIFJHUkcuLihvZGQgbGluZSksIEdCR0IuLihldmVuIGxpbmUpLCAx Ni1iaXQgc2FtcGxlcywgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0JBWUVSX1JHR0Ix NkJFLCAvLy88IGJheWVyLCBSR1JHLi4ob2RkIGxpbmUpLCBHQkdCLi4oZXZlbiBsaW5lKSwgMTYt Yml0IHNhbXBsZXMsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CQVlFUl9HQlJHMTZMRSwg Ly8vPCBiYXllciwgR0JHQi4uKG9kZCBsaW5lKSwgUkdSRy4uKGV2ZW4gbGluZSksIDE2LWJpdCBz YW1wbGVzLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfR0JSRzE2QkUsIC8v LzwgYmF5ZXIsIEdCR0IuLihvZGQgbGluZSksIFJHUkcuLihldmVuIGxpbmUpLCAxNi1iaXQgc2Ft cGxlcywgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0JBWUVSX0dSQkcxNkxFLCAvLy88IGJh eWVyLCBHUkdSLi4ob2RkIGxpbmUpLCBCR0JHLi4oZXZlbiBsaW5lKSwgMTYtYml0IHNhbXBsZXMs IGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CQVlFUl9HUkJHMTZCRSwgLy8vPCBiYXll ciwgR1JHUi4uKG9kZCBsaW5lKSwgQkdCRy4uKGV2ZW4gbGluZSksIDE2LWJpdCBzYW1wbGVzLCBi aWctZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfWVVWNDQwUDEwTEUsIC8vLzwgcGxhbmFyIFlV ViA0OjQ6MCwyMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MiBZIHNhbXBsZXMpLCBsaXR0 bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDQwUDEwQkUsIC8vLzwgcGxhbmFyIFlVViA0 OjQ6MCwyMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MiBZIHNhbXBsZXMpLCBiaWctZW5k aWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDQwUDEyTEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6MCwy NGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MiBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfWVVWNDQwUDEyQkUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6MCwyNGJw cCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MiBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfQVlVVjY0TEUsICAgIC8vLzwgcGFja2VkIEFZVVYgNDo0OjQsNjRicHAgKDEg Q3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAg ICBBVl9QSVhfRk1UX0FZVVY2NEJFLCAgICAvLy88IHBhY2tlZCBBWVVWIDQ6NDo0LDY0YnBwICgx IENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSAmIEEgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysKKysg ICAgQVZfUElYX0ZNVF9WSURFT1RPT0xCT1gsIC8vLzwgaGFyZHdhcmUgZGVjb2RpbmcgdGhyb3Vn aCBWaWRlb3Rvb2xib3gKKysKKysgICAgQVZfUElYX0ZNVF9QMDEwTEUsIC8vLzwgbGlrZSBOVjEy LCB3aXRoIDEwYnBwIHBlciBjb21wb25lbnQsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgemVyb3Mg aW4gdGhlIGxvdyBiaXRzLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUDAxMEJFLCAv Ly88IGxpa2UgTlYxMiwgd2l0aCAxMGJwcCBwZXIgY29tcG9uZW50LCBkYXRhIGluIHRoZSBoaWdo IGJpdHMsIHplcm9zIGluIHRoZSBsb3cgYml0cywgYmlnLWVuZGlhbgorKworKyAgICBBVl9QSVhf Rk1UX0dCUkFQMTJCRSwgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NDo0IDQ4YnBwLCBiaWctZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfR0JSQVAxMkxFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0OjQgNDhi cHAsIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9HQlJBUDEwQkUsICAvLy88IHBs YW5hciBHQlIgNDo0OjQ6NCA0MGJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUkFQ MTBMRSwgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NDo0IDQwYnBwLCBsaXR0bGUtZW5kaWFuCisrCisr ICAgIEFWX1BJWF9GTVRfTUVESUFDT0RFQywgLy8vPCBoYXJkd2FyZSBkZWNvZGluZyB0aHJvdWdo IE1lZGlhQ29kZWMKKysKKysgICAgQVZfUElYX0ZNVF9HUkFZMTJCRSwgICAvLy88ICAgICAgICBZ ICAgICAgICAsIDEyYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR1JBWTEyTEUsICAg Ly8vPCAgICAgICAgWSAgICAgICAgLCAxMmJwcCwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0dSQVkxMEJFLCAgIC8vLzwgICAgICAgIFkgICAgICAgICwgMTBicHAsIGJpZy1lbmRpYW4K KysgICAgQVZfUElYX0ZNVF9HUkFZMTBMRSwgICAvLy88ICAgICAgICBZICAgICAgICAsIDEwYnBw LCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfUDAxNkxFLCAvLy88IGxpa2UgTlYx Miwgd2l0aCAxNmJwcCBwZXIgY29tcG9uZW50LCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9G TVRfUDAxNkJFLCAvLy88IGxpa2UgTlYxMiwgd2l0aCAxNmJwcCBwZXIgY29tcG9uZW50LCBiaWct ZW5kaWFuCisrCisrICAgIC8qKgorKyAgICAgKiBIYXJkd2FyZSBzdXJmYWNlcyBmb3IgRGlyZWN0 M0QxMS4KKysgICAgICoKKysgICAgICogVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgbGVnYWN5 IEFWX1BJWF9GTVRfRDNEMTFWQV9WTEQuIFRoZSBuZXcgRDNEMTEKKysgICAgICogaHdhY2NlbCBB UEkgYW5kIGZpbHRlcmluZyBzdXBwb3J0IEFWX1BJWF9GTVRfRDNEMTEgb25seS4KKysgICAgICoK KysgICAgICogZGF0YVswXSBjb250YWlucyBhIElEM0QxMVRleHR1cmUyRCBwb2ludGVyLCBhbmQg ZGF0YVsxXSBjb250YWlucyB0aGUKKysgICAgICogdGV4dHVyZSBhcnJheSBpbmRleCBvZiB0aGUg ZnJhbWUgYXMgaW50cHRyX3QgaWYgdGhlIElEM0QxMVRleHR1cmUyRCBpcworKyAgICAgKiBhbiBh cnJheSB0ZXh0dXJlIChvciBhbHdheXMgMCBpZiBpdCdzIGEgbm9ybWFsIHRleHR1cmUpLgorKyAg ICAgKi8KKysgICAgQVZfUElYX0ZNVF9EM0QxMSwKKysKKysgICAgQVZfUElYX0ZNVF9HUkFZOUJF LCAgIC8vLzwgICAgICAgIFkgICAgICAgICwgOWJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0dSQVk5TEUsICAgLy8vPCAgICAgICAgWSAgICAgICAgLCA5YnBwLCBsaXR0bGUtZW5kaWFu CisrCisrICAgIEFWX1BJWF9GTVRfR0JSUEYzMkJFLCAgLy8vPCBJRUVFLTc1NCBzaW5nbGUgcHJl Y2lzaW9uIHBsYW5hciBHQlIgNDo0OjQsICAgICA5NmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9Q SVhfRk1UX0dCUlBGMzJMRSwgIC8vLzwgSUVFRS03NTQgc2luZ2xlIHByZWNpc2lvbiBwbGFuYXIg R0JSIDQ6NDo0LCAgICAgOTZicHAsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJB UEYzMkJFLCAvLy88IElFRUUtNzU0IHNpbmdsZSBwcmVjaXNpb24gcGxhbmFyIEdCUkEgNDo0OjQ6 NCwgMTI4YnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSQVBGMzJMRSwgLy8vPCBJ RUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBsYW5hciBHQlJBIDQ6NDo0OjQsIDEyOGJwcCwgbGl0 dGxlLWVuZGlhbgorKworKyAgICAvKioKKysgICAgICogRFJNLW1hbmFnZWQgYnVmZmVycyBleHBv c2VkIHRocm91Z2ggUFJJTUUgYnVmZmVyIHNoYXJpbmcuCisrICAgICAqCisrICAgICAqIGRhdGFb MF0gcG9pbnRzIHRvIGFuIEFWRFJNRnJhbWVEZXNjcmlwdG9yLgorKyAgICAgKi8KKysgICAgQVZf UElYX0ZNVF9EUk1fUFJJTUUsCisrICAgIC8qKgorKyAgICAgKiBIYXJkd2FyZSBzdXJmYWNlcyBm b3IgT3BlbkNMLgorKyAgICAgKgorKyAgICAgKiBkYXRhW2ldIGNvbnRhaW4gMkQgaW1hZ2Ugb2Jq ZWN0cyAodHlwZWQgaW4gQyBhcyBjbF9tZW0sIHVzZWQKKysgICAgICogaW4gT3BlbkNMIGFzIGlt YWdlMmRfdCkgZm9yIGVhY2ggcGxhbmUgb2YgdGhlIHN1cmZhY2UuCisrICAgICAqLworKyAgICBB Vl9QSVhfRk1UX09QRU5DTCwKKysKKysgICAgQVZfUElYX0ZNVF9HUkFZMTRCRSwgICAvLy88ICAg ICAgICBZICAgICAgICAsIDE0YnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR1JBWTE0 TEUsICAgLy8vPCAgICAgICAgWSAgICAgICAgLCAxNGJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAg ICBBVl9QSVhfRk1UX0dSQVlGMzJCRSwgIC8vLzwgSUVFRS03NTQgc2luZ2xlIHByZWNpc2lvbiBZ LCAzMmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dSQVlGMzJMRSwgIC8vLzwgSUVF RS03NTQgc2luZ2xlIHByZWNpc2lvbiBZLCAzMmJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICBB Vl9QSVhfRk1UX1lVVkE0MjJQMTJCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLDI0YnBwLCAoMSBD ciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIDEyYiBhbHBoYSwgYmlnLWVuZGlhbgor KyAgICBBVl9QSVhfRk1UX1lVVkE0MjJQMTJMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLDI0YnBw LCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIDEyYiBhbHBoYSwgbGl0dGxl LWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVkE0NDRQMTJCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6 NDo0LDM2YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIDEyYiBhbHBo YSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVkE0NDRQMTJMRSwgLy8vPCBwbGFuYXIg WVVWIDQ6NDo0LDM2YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIDEy YiBhbHBoYSwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX05WMjQsICAgICAgLy8v PCBwbGFuYXIgWVVWIDQ6NDo0LCAyNGJwcCwgMSBwbGFuZSBmb3IgWSBhbmQgMSBwbGFuZSBmb3Ig dGhlIFVWIGNvbXBvbmVudHMsIHdoaWNoIGFyZSBpbnRlcmxlYXZlZCAoZmlyc3QgYnl0ZSBVIGFu ZCB0aGUgZm9sbG93aW5nIGJ5dGUgVikKKysgICAgQVZfUElYX0ZNVF9OVjQyLCAgICAgIC8vLzwg YXMgYWJvdmUsIGJ1dCBVIGFuZCBWIGJ5dGVzIGFyZSBzd2FwcGVkCisrCisrICAgIC8qKgorKyAg ICAgKiBWdWxrYW4gaGFyZHdhcmUgaW1hZ2VzLgorKyAgICAgKgorKyAgICAgKiBkYXRhWzBdIHBv aW50cyB0byBhbiBBVlZrRnJhbWUKKysgICAgICovCisrICAgIEFWX1BJWF9GTVRfVlVMS0FOLAor KworKyAgICBBVl9QSVhfRk1UX1kyMTBCRSwgICAgLy8vPCBwYWNrZWQgWVVWIDQ6MjoyIGxpa2Ug WVVZVjQyMiwgMjBicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgYmlnLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX1kyMTBMRSwgICAgLy8vPCBwYWNrZWQgWVVWIDQ6MjoyIGxpa2UgWVVZVjQyMiwg MjBicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9Q SVhfRk1UX1gyUkdCMTBMRSwgLy8vPCBwYWNrZWQgUkdCIDEwOjEwOjEwLCAzMGJwcCwgKG1zYiky WCAxMFIgMTBHIDEwQihsc2IpLCBsaXR0bGUtZW5kaWFuLCBYPXVudXNlZC91bmRlZmluZWQKKysg ICAgQVZfUElYX0ZNVF9YMlJHQjEwQkUsIC8vLzwgcGFja2VkIFJHQiAxMDoxMDoxMCwgMzBicHAs IChtc2IpMlggMTBSIDEwRyAxMEIobHNiKSwgYmlnLWVuZGlhbiwgWD11bnVzZWQvdW5kZWZpbmVk CisrICAgIEFWX1BJWF9GTVRfWDJCR1IxMExFLCAvLy88IHBhY2tlZCBCR1IgMTA6MTA6MTAsIDMw YnBwLCAobXNiKTJYIDEwQiAxMEcgMTBSKGxzYiksIGxpdHRsZS1lbmRpYW4sIFg9dW51c2VkL3Vu ZGVmaW5lZAorKyAgICBBVl9QSVhfRk1UX1gyQkdSMTBCRSwgLy8vPCBwYWNrZWQgQkdSIDEwOjEw OjEwLCAzMGJwcCwgKG1zYikyWCAxMEIgMTBHIDEwUihsc2IpLCBiaWctZW5kaWFuLCBYPXVudXNl ZC91bmRlZmluZWQKKysKKysgICAgQVZfUElYX0ZNVF9QMjEwQkUsICAgICAgLy8vPCBpbnRlcmxl YXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAyMGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBiaWct ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUDIxMExFLCAgICAgIC8vLzwgaW50ZXJsZWF2ZWQgY2hy b21hIFlVViA0OjI6MiwgMjBicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgbGl0dGxlLWVuZGlh bgorKworKyAgICBBVl9QSVhfRk1UX1A0MTBCRSwgICAgICAvLy88IGludGVybGVhdmVkIGNocm9t YSBZVVYgNDo0OjQsIDMwYnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIGJpZy1lbmRpYW4KKysg ICAgQVZfUElYX0ZNVF9QNDEwTEUsICAgICAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6 NDo0LCAzMGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBsaXR0bGUtZW5kaWFuCisrCisrICAg IEFWX1BJWF9GTVRfUDIxNkJFLCAgICAgIC8vLzwgaW50ZXJsZWF2ZWQgY2hyb21hIFlVViA0OjI6 MiwgMzJicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9QMjE2TEUsICAgICAgLy8vPCBp bnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAzMmJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAg ICBBVl9QSVhfRk1UX1A0MTZCRSwgICAgICAvLy88IGludGVybGVhdmVkIGNocm9tYSBZVVYgNDo0 OjQsIDQ4YnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUDQxNkxFLCAgICAgIC8vLzwg aW50ZXJsZWF2ZWQgY2hyb21hIFlVViA0OjQ6NCwgNDhicHAsIGxpdHRsZS1lbmRpYW4KKysKKysg ICAgQVZfUElYX0ZNVF9WVVlBLCAgICAgICAgLy8vPCBwYWNrZWQgVlVZQSA0OjQ6NDo0LCAzMmJw cCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgJiBBIHNhbXBsZXMpLCBWVVlBVlVZQS4uLgor KworKyAgICBBVl9QSVhfRk1UX1JHQkFGMTZCRSwgICAvLy88IElFRUUtNzU0IGhhbGYgcHJlY2lz aW9uIHBhY2tlZCBSR0JBIDE2OjE2OjE2OjE2LCA2NGJwcCwgUkdCQVJHQkEuLi4sIGJpZy1lbmRp YW4KKysgICAgQVZfUElYX0ZNVF9SR0JBRjE2TEUsICAgLy8vPCBJRUVFLTc1NCBoYWxmIHByZWNp c2lvbiBwYWNrZWQgUkdCQSAxNjoxNjoxNjoxNiwgNjRicHAsIFJHQkFSR0JBLi4uLCBsaXR0bGUt ZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfVlVZWCwgICAgICAgIC8vLzwgcGFja2VkIFZVWVgg NDo0OjQ6NCwgMzJicHAsIFZhcmlhbnQgb2YgVlVZQSB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGxl ZnQgdW5kZWZpbmVkCisrCisrICAgIEFWX1BJWF9GTVRfUDAxMkxFLCAgICAgIC8vLzwgbGlrZSBO VjEyLCB3aXRoIDEyYnBwIHBlciBjb21wb25lbnQsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgemVy b3MgaW4gdGhlIGxvdyBiaXRzLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUDAxMkJF LCAgICAgIC8vLzwgbGlrZSBOVjEyLCB3aXRoIDEyYnBwIHBlciBjb21wb25lbnQsIGRhdGEgaW4g dGhlIGhpZ2ggYml0cywgemVyb3MgaW4gdGhlIGxvdyBiaXRzLCBiaWctZW5kaWFuCisrCisrICAg IEFWX1BJWF9GTVRfWTIxMkJFLCAgICAgIC8vLzwgcGFja2VkIFlVViA0OjI6MiBsaWtlIFlVWVY0 MjIsIDI0YnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIHplcm9zIGluIHRoZSBsb3cgYml0cywg YmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1kyMTJMRSwgICAgICAvLy88IHBhY2tlZCBZVVYg NDoyOjIgbGlrZSBZVVlWNDIyLCAyNGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCB6ZXJvcyBp biB0aGUgbG93IGJpdHMsIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9YVjMwQkUs ICAgICAgLy8vPCBwYWNrZWQgWFZZVSA0OjQ6NCwgMzJicHAsIChtc2IpMlggMTBWIDEwWSAxMFUo bHNiKSwgYmlnLWVuZGlhbiwgdmFyaWFudCBvZiBZNDEwIHdoZXJlIGFscGhhIGNoYW5uZWwgaXMg bGVmdCB1bmRlZmluZWQKKysgICAgQVZfUElYX0ZNVF9YVjMwTEUsICAgICAgLy8vPCBwYWNrZWQg WFZZVSA0OjQ6NCwgMzJicHAsIChtc2IpMlggMTBWIDEwWSAxMFUobHNiKSwgbGl0dGxlLWVuZGlh biwgdmFyaWFudCBvZiBZNDEwIHdoZXJlIGFscGhhIGNoYW5uZWwgaXMgbGVmdCB1bmRlZmluZWQK KysKKysgICAgQVZfUElYX0ZNVF9YVjM2QkUsICAgICAgLy8vPCBwYWNrZWQgWFZZVSA0OjQ6NCwg NDhicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgemVyb3MgaW4gdGhlIGxvdyBiaXRzLCBiaWct ZW5kaWFuLCB2YXJpYW50IG9mIFk0MTIgd2hlcmUgYWxwaGEgY2hhbm5lbCBpcyBsZWZ0IHVuZGVm aW5lZAorKyAgICBBVl9QSVhfRk1UX1hWMzZMRSwgICAgICAvLy88IHBhY2tlZCBYVllVIDQ6NDo0 LCA0OGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCB6ZXJvcyBpbiB0aGUgbG93IGJpdHMsIGxp dHRsZS1lbmRpYW4sIHZhcmlhbnQgb2YgWTQxMiB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGxlZnQg dW5kZWZpbmVkCisrCisrICAgIEFWX1BJWF9GTVRfUkdCRjMyQkUsICAgIC8vLzwgSUVFRS03NTQg c2luZ2xlIHByZWNpc2lvbiBwYWNrZWQgUkdCIDMyOjMyOjMyLCA5NmJwcCwgUkdCUkdCLi4uLCBi aWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUkdCRjMyTEUsICAgIC8vLzwgSUVFRS03NTQgc2lu Z2xlIHByZWNpc2lvbiBwYWNrZWQgUkdCIDMyOjMyOjMyLCA5NmJwcCwgUkdCUkdCLi4uLCBsaXR0 bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfUkdCQUYzMkJFLCAgIC8vLzwgSUVFRS03NTQg c2luZ2xlIHByZWNpc2lvbiBwYWNrZWQgUkdCQSAzMjozMjozMjozMiwgMTI4YnBwLCBSR0JBUkdC QS4uLiwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1JHQkFGMzJMRSwgICAvLy88IElFRUUt NzU0IHNpbmdsZSBwcmVjaXNpb24gcGFja2VkIFJHQkEgMzI6MzI6MzI6MzIsIDEyOGJwcCwgUkdC QVJHQkEuLi4sIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9QMjEyQkUsICAgICAg Ly8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAyNGJwcCwgZGF0YSBpbiB0aGUgaGln aCBiaXRzLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUDIxMkxFLCAgICAgIC8vLzwgaW50 ZXJsZWF2ZWQgY2hyb21hIFlVViA0OjI6MiwgMjRicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywg bGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1A0MTJCRSwgICAgICAvLy88IGludGVy bGVhdmVkIGNocm9tYSBZVVYgNDo0OjQsIDM2YnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIGJp Zy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9QNDEyTEUsICAgICAgLy8vPCBpbnRlcmxlYXZlZCBj aHJvbWEgWVVWIDQ6NDo0LCAzNmJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBsaXR0bGUtZW5k aWFuCisrCisrICAgIEFWX1BJWF9GTVRfR0JSQVAxNEJFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0 OjQgNTZicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUDE0TEUsICAvLy88IHBs YW5hciBHQlIgNDo0OjQ6NCA1NmJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICAvKioKKysgICAg ICogSGFyZHdhcmUgc3VyZmFjZXMgZm9yIERpcmVjdDNEIDEyLgorKyAgICAgKgorKyAgICAgKiBk YXRhWzBdIHBvaW50cyB0byBhbiBBVkQzRDEyVkFGcmFtZQorKyAgICAgKi8KKysgICAgQVZfUElY X0ZNVF9EM0QxMiwKKysKKysgICAgQVZfUElYX0ZNVF9BWVVWLCAgICAgICAgLy8vPCBwYWNrZWQg QVlVViA0OjQ6NDo0LCAzMmJwcCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgJiBBIHNhbXBs ZXMpLCBBWVVWQVlVVi4uLgorKworKyAgICBBVl9QSVhfRk1UX1VZVkEsICAgICAgICAvLy88IHBh Y2tlZCBVWVZBIDQ6NDo0OjQsIDMyYnBwICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSAmIEEg c2FtcGxlcyksIFVZVkFVWVZBLi4uCisrCisrICAgIEFWX1BJWF9GTVRfVllVNDQ0LCAgICAgIC8v LzwgcGFja2VkIFZZVSA0OjQ6NCwgMjRicHAgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZKSwg VllVVllVLi4uCisrCisrICAgIEFWX1BJWF9GTVRfVjMwWEJFLCAgICAgIC8vLzwgcGFja2VkIFZZ VVggNDo0OjQgbGlrZSBYVjMwLCAzMmJwcCwgKG1zYikxMFYgMTBZIDEwVSAyWChsc2IpLCBiaWct ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfVjMwWExFLCAgICAgIC8vLzwgcGFja2VkIFZZVVggNDo0 OjQgbGlrZSBYVjMwLCAzMmJwcCwgKG1zYikxMFYgMTBZIDEwVSAyWChsc2IpLCBsaXR0bGUtZW5k aWFuCisrCisrICAgIEFWX1BJWF9GTVRfUkdCRjE2QkUsICAgIC8vLzwgSUVFRS03NTQgaGFsZiBw cmVjaXNpb24gcGFja2VkIFJHQiAxNjoxNjoxNiwgNDhicHAsIFJHQlJHQi4uLiwgYmlnLWVuZGlh bgorKyAgICBBVl9QSVhfRk1UX1JHQkYxNkxFLCAgICAvLy88IElFRUUtNzU0IGhhbGYgcHJlY2lz aW9uIHBhY2tlZCBSR0IgMTY6MTY6MTYsIDQ4YnBwLCBSR0JSR0IuLi4sIGxpdHRsZS1lbmRpYW4K KysKKysgICAgQVZfUElYX0ZNVF9SR0JBMTI4QkUsICAgLy8vPCBwYWNrZWQgUkdCQSAzMjozMjoz MjozMiwgMTI4YnBwLCBSR0JBUkdCQS4uLiwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1JH QkExMjhMRSwgICAvLy88IHBhY2tlZCBSR0JBIDMyOjMyOjMyOjMyLCAxMjhicHAsIFJHQkFSR0JB Li4uLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfUkdCOTZCRSwgICAgIC8vLzwg cGFja2VkIFJHQkEgMzI6MzI6MzIsIDk2YnBwLCBSR0JSR0IuLi4sIGJpZy1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9SR0I5NkxFLCAgICAgLy8vPCBwYWNrZWQgUkdCQSAzMjozMjozMiwgOTZicHAs IFJHQlJHQi4uLiwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1kyMTZCRSwgICAg ICAvLy88IHBhY2tlZCBZVVYgNDoyOjIgbGlrZSBZVVlWNDIyLCAzMmJwcCwgYmlnLWVuZGlhbgor KyAgICBBVl9QSVhfRk1UX1kyMTZMRSwgICAgICAvLy88IHBhY2tlZCBZVVYgNDoyOjIgbGlrZSBZ VVlWNDIyLCAzMmJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1hWNDhCRSwg ICAgICAvLy88IHBhY2tlZCBYVllVIDQ6NDo0LCA2NGJwcCwgYmlnLWVuZGlhbiwgdmFyaWFudCBv ZiBZNDE2IHdoZXJlIGFscGhhIGNoYW5uZWwgaXMgbGVmdCB1bmRlZmluZWQKKysgICAgQVZfUElY X0ZNVF9YVjQ4TEUsICAgICAgLy8vPCBwYWNrZWQgWFZZVSA0OjQ6NCwgNjRicHAsIGxpdHRsZS1l bmRpYW4sIHZhcmlhbnQgb2YgWTQxNiB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGxlZnQgdW5kZWZp bmVkCisrCisrICAgIEFWX1BJWF9GTVRfR0JSUEYxNkJFLCAgLy8vPCBJRUVFLTc1NCBoYWxmIHBy ZWNpc2lvbiBwbGFuZXIgR0JSIDQ6NDo0LCA0OGJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0dCUlBGMTZMRSwgIC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24gcGxhbmVyIEdCUiA0 OjQ6NCwgNDhicHAsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUEYxNkJFLCAv Ly88IElFRUUtNzU0IGhhbGYgcHJlY2lzaW9uIHBsYW5hciBHQlJBIDQ6NDo0OjQsIDY0YnBwLCBi aWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSQVBGMTZMRSwgLy8vPCBJRUVFLTc1NCBoYWxm IHByZWNpc2lvbiBwbGFuYXIgR0JSQSA0OjQ6NDo0LCA2NGJwcCwgbGl0dGxlLWVuZGlhbgorKwor KyAgICBBVl9QSVhfRk1UX0dSQVlGMTZCRSwgIC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24g WSwgMTZicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HUkFZRjE2TEUsICAvLy88IElF RUUtNzU0IGhhbGYgcHJlY2lzaW9uIFksIDE2YnBwLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIC8q KgorKyAgICAgKiBIVyBhY2NlbGVyYXRpb24gdGhyb3VnaCBBTUYuIGRhdGFbMF0gY29udGFpbiBB TUZTdXJmYWNlIHBvaW50ZXIKKysgICAgICovCisrICAgIEFWX1BJWF9GTVRfQU1GX1NVUkZBQ0Us CisrCisrICAgIEFWX1BJWF9GTVRfR1JBWTMyQkUsICAgIC8vLzwgICAgICAgICBZICAgICAgICAs IDMyYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR1JBWTMyTEUsICAgIC8vLzwgICAg ICAgICBZICAgICAgICAsIDMyYnBwLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRf WUFGMzJCRSwgIC8vLzwgSUVFRS03NTQgc2luZ2xlIHByZWNpc2lvbiBwYWNrZWQgWUEsIDMyIGJp dHMgZ3JheSwgMzIgYml0cyBhbHBoYSwgNjRicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9ZQUYzMkxFLCAgLy8vPCBJRUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBhY2tlZCBZQSwgMzIg Yml0cyBncmF5LCAzMiBiaXRzIGFscGhhLCA2NGJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICBB Vl9QSVhfRk1UX1lBRjE2QkUsICAvLy88IElFRUUtNzU0IGhhbGYgcHJlY2lzaW9uIHBhY2tlZCBZ QSwgMTYgYml0cyBncmF5LCAxNiBiaXRzIGFscGhhLCAzMmJwcCwgYmlnLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX1lBRjE2TEUsICAvLy88IElFRUUtNzU0IGhhbGYgcHJlY2lzaW9uIHBhY2tlZCBZ QSwgMTYgYml0cyBncmF5LCAxNiBiaXRzIGFscGhhLCAzMmJwcCwgbGl0dGxlLWVuZGlhbgorKwor KyAgICBBVl9QSVhfRk1UX0dCUkFQMzJCRSwgICAvLy88IHBsYW5hciBHQlJBIDQ6NDo0OjQgMTI4 YnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSQVAzMkxFLCAgIC8vLzwgcGxhbmFy IEdCUkEgNDo0OjQ6NCAxMjhicHAsIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9Z VVY0NDRQMTBNU0JCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAzMGJwcCwgKDEgQ3IgJiBDYiBz YW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBsb3dlc3QgYml0cyB6ZXJvLCBiaWctZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfWVVWNDQ0UDEwTVNCTEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCwgMzBi cHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgbG93ZXN0IGJpdHMgemVy bywgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAxMk1TQkJFLCAvLy88IHBs YW5hciBZVVYgNDo0OjQsIDMwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxl cyksIGxvd2VzdCBiaXRzIHplcm8sIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDRQ MTJNU0JMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCAzMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDF4MSBZIHNhbXBsZXMpLCBsb3dlc3QgYml0cyB6ZXJvLCBsaXR0bGUtZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfR0JSUDEwTVNCQkUsICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAzMGJwcCwg bG93ZXN0IGJpdHMgemVybywgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUlAxME1TQkxF LCAgICAvLy88IHBsYW5hciBHQlIgNDo0OjQgMzBicHAsIGxvd2VzdCBiaXRzIHplcm8sIGxpdHRs ZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJQMTJNU0JCRSwgICAgLy8vPCBwbGFuYXIgR0JS IDQ6NDo0IDM2YnBwLCBsb3dlc3QgYml0cyB6ZXJvLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9G TVRfR0JSUDEyTVNCTEUsICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAzNmJwcCwgbG93ZXN0IGJp dHMgemVybywgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX09IQ09ERUMsIC8vLyBo YXJkd2FyZSBkZWNvZGluZyB0aHJvdWdoIG9wZW5oYXJtb255CisrCisrICAgIEFWX1BJWF9GTVRf TkIgICAgICAgICAvLy88IG51bWJlciBvZiBwaXhlbCBmb3JtYXRzLCBETyBOT1QgVVNFIFRISVMg aWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHNoYXJlZCBsaWJhdiogYmVjYXVzZSB0aGUgbnVtYmVy IG9mIGZvcm1hdHMgbWlnaHQgZGlmZmVyIGJldHdlZW4gdmVyc2lvbnMKKyt9OworKworKyNpZiBB Vl9IQVZFX0JJR0VORElBTgorKyMgICBkZWZpbmUgQVZfUElYX0ZNVF9ORShiZSwgbGUpIEFWX1BJ WF9GTVRfIyNiZQorKyNlbHNlCisrIyAgIGRlZmluZSBBVl9QSVhfRk1UX05FKGJlLCBsZSkgQVZf UElYX0ZNVF8jI2xlCisrI2VuZGlmCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX1JHQjMyICAgQVZf UElYX0ZNVF9ORShBUkdCLCBCR1JBKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0IzMl8xIEFWX1BJ WF9GTVRfTkUoUkdCQSwgQUJHUikKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkdSMzIgICBBVl9QSVhf Rk1UX05FKEFCR1IsIFJHQkEpCisrI2RlZmluZSBBVl9QSVhfRk1UX0JHUjMyXzEgQVZfUElYX0ZN VF9ORShCR1JBLCBBUkdCKQorKyNkZWZpbmUgQVZfUElYX0ZNVF8wUkdCMzIgIEFWX1BJWF9GTVRf TkUoMFJHQiwgQkdSMCkKKysjZGVmaW5lIEFWX1BJWF9GTVRfMEJHUjMyICBBVl9QSVhfRk1UX05F KDBCR1IsIFJHQjApCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX0dSQVk5ICBBVl9QSVhfRk1UX05F KEdSQVk5QkUsICBHUkFZOUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HUkFZMTAgQVZfUElYX0ZN VF9ORShHUkFZMTBCRSwgR1JBWTEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dSQVkxMiBBVl9Q SVhfRk1UX05FKEdSQVkxMkJFLCBHUkFZMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR1JBWTE0 IEFWX1BJWF9GTVRfTkUoR1JBWTE0QkUsIEdSQVkxNExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9H UkFZMTYgQVZfUElYX0ZNVF9ORShHUkFZMTZCRSwgR1JBWTE2TEUpCisrI2RlZmluZSBBVl9QSVhf Rk1UX0dSQVkzMiBBVl9QSVhfRk1UX05FKEdSQVkzMkJFLCBHUkFZMzJMRSkKKysjZGVmaW5lIEFW X1BJWF9GTVRfWUExNiAgIEFWX1BJWF9GTVRfTkUoWUExNkJFLCAgIFlBMTZMRSkKKysjZGVmaW5l IEFWX1BJWF9GTVRfUkdCNDggIEFWX1BJWF9GTVRfTkUoUkdCNDhCRSwgIFJHQjQ4TEUpCisrI2Rl ZmluZSBBVl9QSVhfRk1UX1JHQjU2NSBBVl9QSVhfRk1UX05FKFJHQjU2NUJFLCBSR0I1NjVMRSkK KysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCNTU1IEFWX1BJWF9GTVRfTkUoUkdCNTU1QkUsIFJHQjU1 NUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0I0NDQgQVZfUElYX0ZNVF9ORShSR0I0NDRCRSwg UkdCNDQ0TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1JHQkE2NCBBVl9QSVhfRk1UX05FKFJHQkE2 NEJFLCBSR0JBNjRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkdSNDggIEFWX1BJWF9GTVRfTkUo QkdSNDhCRSwgIEJHUjQ4TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0JHUjU2NSBBVl9QSVhfRk1U X05FKEJHUjU2NUJFLCBCR1I1NjVMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkdSNTU1IEFWX1BJ WF9GTVRfTkUoQkdSNTU1QkUsIEJHUjU1NUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9CR1I0NDQg QVZfUElYX0ZNVF9ORShCR1I0NDRCRSwgQkdSNDQ0TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0JH UkE2NCBBVl9QSVhfRk1UX05FKEJHUkE2NEJFLCBCR1JBNjRMRSkKKysKKysjZGVmaW5lIEFWX1BJ WF9GTVRfWVVWNDIwUDkgIEFWX1BJWF9GTVRfTkUoWVVWNDIwUDlCRSAsIFlVVjQyMFA5TEUpCisr I2RlZmluZSBBVl9QSVhfRk1UX1lVVjQyMlA5ICBBVl9QSVhfRk1UX05FKFlVVjQyMlA5QkUgLCBZ VVY0MjJQOUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0NDRQOSAgQVZfUElYX0ZNVF9ORShZ VVY0NDRQOUJFICwgWVVWNDQ0UDlMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDIwUDEwIEFW X1BJWF9GTVRfTkUoWVVWNDIwUDEwQkUsIFlVVjQyMFAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZN VF9ZVVY0MjJQMTAgQVZfUElYX0ZNVF9ORShZVVY0MjJQMTBCRSwgWVVWNDIyUDEwTEUpCisrI2Rl ZmluZSBBVl9QSVhfRk1UX1lVVjQ0MFAxMCBBVl9QSVhfRk1UX05FKFlVVjQ0MFAxMEJFLCBZVVY0 NDBQMTBMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDQ0UDEwIEFWX1BJWF9GTVRfTkUoWVVW NDQ0UDEwQkUsIFlVVjQ0NFAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0MjBQMTIgQVZf UElYX0ZNVF9ORShZVVY0MjBQMTJCRSwgWVVWNDIwUDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1U X1lVVjQyMlAxMiBBVl9QSVhfRk1UX05FKFlVVjQyMlAxMkJFLCBZVVY0MjJQMTJMRSkKKysjZGVm aW5lIEFWX1BJWF9GTVRfWVVWNDQwUDEyIEFWX1BJWF9GTVRfTkUoWVVWNDQwUDEyQkUsIFlVVjQ0 MFAxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0NDRQMTIgQVZfUElYX0ZNVF9ORShZVVY0 NDRQMTJCRSwgWVVWNDQ0UDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQyMFAxNCBBVl9Q SVhfRk1UX05FKFlVVjQyMFAxNEJFLCBZVVY0MjBQMTRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRf WVVWNDIyUDE0IEFWX1BJWF9GTVRfTkUoWVVWNDIyUDE0QkUsIFlVVjQyMlAxNExFKQorKyNkZWZp bmUgQVZfUElYX0ZNVF9ZVVY0NDRQMTQgQVZfUElYX0ZNVF9ORShZVVY0NDRQMTRCRSwgWVVWNDQ0 UDE0TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQyMFAxNiBBVl9QSVhfRk1UX05FKFlVVjQy MFAxNkJFLCBZVVY0MjBQMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDIyUDE2IEFWX1BJ WF9GTVRfTkUoWVVWNDIyUDE2QkUsIFlVVjQyMlAxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9Z VVY0NDRQMTYgQVZfUElYX0ZNVF9ORShZVVY0NDRQMTZCRSwgWVVWNDQ0UDE2TEUpCisrCisrI2Rl ZmluZSBBVl9QSVhfRk1UX1lVVjQ0NFAxME1TQiBBVl9QSVhfRk1UX05FKFlVVjQ0NFAxME1TQkJF LCBZVVY0NDRQMTBNU0JMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDQ0UDEyTVNCIEFWX1BJ WF9GTVRfTkUoWVVWNDQ0UDEyTVNCQkUsIFlVVjQ0NFAxMk1TQkxFKQorKworKyNkZWZpbmUgQVZf UElYX0ZNVF9HQlJQOSAgICAgQVZfUElYX0ZNVF9ORShHQlJQOUJFICwgICAgR0JSUDlMRSkKKysj ZGVmaW5lIEFWX1BJWF9GTVRfR0JSUDEwICAgIEFWX1BJWF9GTVRfTkUoR0JSUDEwQkUsICAgIEdC UlAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJQMTIgICAgQVZfUElYX0ZNVF9ORShHQlJQ MTJCRSwgICAgR0JSUDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUlAxNCAgICBBVl9QSVhf Rk1UX05FKEdCUlAxNEJFLCAgICBHQlJQMTRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR0JSUDE2 ICAgIEFWX1BJWF9GTVRfTkUoR0JSUDE2QkUsICAgIEdCUlAxNkxFKQorKyNkZWZpbmUgQVZfUElY X0ZNVF9HQlJBUDEwICAgQVZfUElYX0ZNVF9ORShHQlJBUDEwQkUsICAgR0JSQVAxMExFKQorKyNk ZWZpbmUgQVZfUElYX0ZNVF9HQlJBUDEyICAgQVZfUElYX0ZNVF9ORShHQlJBUDEyQkUsICAgR0JS QVAxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJBUDE0ICAgQVZfUElYX0ZNVF9ORShHQlJB UDE0QkUsICAgR0JSQVAxNExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJBUDE2ICAgQVZfUElY X0ZNVF9ORShHQlJBUDE2QkUsICAgR0JSQVAxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJB UDMyICAgQVZfUElYX0ZNVF9ORShHQlJBUDMyQkUsICAgR0JSQVAzMkxFKQorKworKyNkZWZpbmUg QVZfUElYX0ZNVF9HQlJQMTBNU0IgQVZfUElYX0ZNVF9ORShHQlJQMTBNU0JCRSwgR0JSUDEwTVNC TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUlAxMk1TQiBBVl9QSVhfRk1UX05FKEdCUlAxMk1T QkJFLCBHQlJQMTJNU0JMRSkKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkFZRVJfQkdHUjE2IEFW X1BJWF9GTVRfTkUoQkFZRVJfQkdHUjE2QkUsICAgIEJBWUVSX0JHR1IxNkxFKQorKyNkZWZpbmUg QVZfUElYX0ZNVF9CQVlFUl9SR0dCMTYgQVZfUElYX0ZNVF9ORShCQVlFUl9SR0dCMTZCRSwgICAg QkFZRVJfUkdHQjE2TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0JBWUVSX0dCUkcxNiBBVl9QSVhf Rk1UX05FKEJBWUVSX0dCUkcxNkJFLCAgICBCQVlFUl9HQlJHMTZMRSkKKysjZGVmaW5lIEFWX1BJ WF9GTVRfQkFZRVJfR1JCRzE2IEFWX1BJWF9GTVRfTkUoQkFZRVJfR1JCRzE2QkUsICAgIEJBWUVS X0dSQkcxNkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJQRjE2ICAgIEFWX1BJWF9GTVRf TkUoR0JSUEYxNkJFLCAgR0JSUEYxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJBUEYxNiAg IEFWX1BJWF9GTVRfTkUoR0JSQVBGMTZCRSwgR0JSQVBGMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9G TVRfR0JSUEYzMiAgICBBVl9QSVhfRk1UX05FKEdCUlBGMzJCRSwgIEdCUlBGMzJMRSkKKysjZGVm aW5lIEFWX1BJWF9GTVRfR0JSQVBGMzIgICBBVl9QSVhfRk1UX05FKEdCUkFQRjMyQkUsIEdCUkFQ RjMyTEUpCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX0dSQVlGMTYgICAgQVZfUElYX0ZNVF9ORShH UkFZRjE2QkUsIEdSQVlGMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR1JBWUYzMiAgICBBVl9Q SVhfRk1UX05FKEdSQVlGMzJCRSwgR1JBWUYzMkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9Z QUYxNiAgICAgIEFWX1BJWF9GTVRfTkUoWUFGMTZCRSwgWUFGMTZMRSkKKysjZGVmaW5lIEFWX1BJ WF9GTVRfWUFGMzIgICAgICBBVl9QSVhfRk1UX05FKFlBRjMyQkUsIFlBRjMyTEUpCisrCisrI2Rl ZmluZSBBVl9QSVhfRk1UX1lVVkE0MjBQOSAgQVZfUElYX0ZNVF9ORShZVVZBNDIwUDlCRSAsIFlV VkE0MjBQOUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDIyUDkgIEFWX1BJWF9GTVRfTkUo WVVWQTQyMlA5QkUgLCBZVVZBNDIyUDlMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWQTQ0NFA5 ICBBVl9QSVhfRk1UX05FKFlVVkE0NDRQOUJFICwgWVVWQTQ0NFA5TEUpCisrI2RlZmluZSBBVl9Q SVhfRk1UX1lVVkE0MjBQMTAgQVZfUElYX0ZNVF9ORShZVVZBNDIwUDEwQkUsIFlVVkE0MjBQMTBM RSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWQTQyMlAxMCBBVl9QSVhfRk1UX05FKFlVVkE0MjJQ MTBCRSwgWVVWQTQyMlAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwIEFWX1BJ WF9GTVRfTkUoWVVWQTQ0NFAxMEJFLCBZVVZBNDQ0UDEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1U X1lVVkE0MjJQMTIgQVZfUElYX0ZNVF9ORShZVVZBNDIyUDEyQkUsIFlVVkE0MjJQMTJMRSkKKysj ZGVmaW5lIEFWX1BJWF9GTVRfWVVWQTQ0NFAxMiBBVl9QSVhfRk1UX05FKFlVVkE0NDRQMTJCRSwg WVVWQTQ0NFAxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDIwUDE2IEFWX1BJWF9GTVRf TkUoWVVWQTQyMFAxNkJFLCBZVVZBNDIwUDE2TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVkE0 MjJQMTYgQVZfUElYX0ZNVF9ORShZVVZBNDIyUDE2QkUsIFlVVkE0MjJQMTZMRSkKKysjZGVmaW5l IEFWX1BJWF9GTVRfWVVWQTQ0NFAxNiBBVl9QSVhfRk1UX05FKFlVVkE0NDRQMTZCRSwgWVVWQTQ0 NFAxNkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9YWVoxMiAgICAgIEFWX1BJWF9GTVRfTkUo WFlaMTJCRSwgWFlaMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfTlYyMCAgICAgICBBVl9QSVhf Rk1UX05FKE5WMjBCRSwgIE5WMjBMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQVlVVjY0ICAgICBB Vl9QSVhfRk1UX05FKEFZVVY2NEJFLCBBWVVWNjRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUDAx MCAgICAgICBBVl9QSVhfRk1UX05FKFAwMTBCRSwgIFAwMTBMRSkKKysjZGVmaW5lIEFWX1BJWF9G TVRfUDAxMiAgICAgICBBVl9QSVhfRk1UX05FKFAwMTJCRSwgIFAwMTJMRSkKKysjZGVmaW5lIEFW X1BJWF9GTVRfUDAxNiAgICAgICBBVl9QSVhfRk1UX05FKFAwMTZCRSwgIFAwMTZMRSkKKysKKysj ZGVmaW5lIEFWX1BJWF9GTVRfWTIxMCAgICAgICBBVl9QSVhfRk1UX05FKFkyMTBCRSwgIFkyMTBM RSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWTIxMiAgICAgICBBVl9QSVhfRk1UX05FKFkyMTJCRSwg IFkyMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWTIxNiAgICAgICBBVl9QSVhfRk1UX05FKFky MTZCRSwgIFkyMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWFYzMCAgICAgICBBVl9QSVhfRk1U X05FKFhWMzBCRSwgIFhWMzBMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWFYzNiAgICAgICBBVl9Q SVhfRk1UX05FKFhWMzZCRSwgIFhWMzZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWFY0OCAgICAg ICBBVl9QSVhfRk1UX05FKFhWNDhCRSwgIFhWNDhMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfVjMw WCAgICAgICBBVl9QSVhfRk1UX05FKFYzMFhCRSwgIFYzMFhMRSkKKysjZGVmaW5lIEFWX1BJWF9G TVRfWDJSR0IxMCAgICBBVl9QSVhfRk1UX05FKFgyUkdCMTBCRSwgWDJSR0IxMExFKQorKyNkZWZp bmUgQVZfUElYX0ZNVF9YMkJHUjEwICAgIEFWX1BJWF9GTVRfTkUoWDJCR1IxMEJFLCBYMkJHUjEw TEUpCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX1AyMTAgICAgICAgQVZfUElYX0ZNVF9ORShQMjEw QkUsIFAyMTBMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUDQxMCAgICAgICBBVl9QSVhfRk1UX05F KFA0MTBCRSwgUDQxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9QMjEyICAgICAgIEFWX1BJWF9G TVRfTkUoUDIxMkJFLCBQMjEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1A0MTIgICAgICAgQVZf UElYX0ZNVF9ORShQNDEyQkUsIFA0MTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUDIxNiAgICAg ICBBVl9QSVhfRk1UX05FKFAyMTZCRSwgUDIxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9QNDE2 ICAgICAgIEFWX1BJWF9GTVRfTkUoUDQxNkJFLCBQNDE2TEUpCisrCisrI2RlZmluZSBBVl9QSVhf Rk1UX1JHQkYxNiAgICAgQVZfUElYX0ZNVF9ORShSR0JGMTZCRSwgUkdCRjE2TEUpCisrI2RlZmlu ZSBBVl9QSVhfRk1UX1JHQkFGMTYgICAgQVZfUElYX0ZNVF9ORShSR0JBRjE2QkUsIFJHQkFGMTZM RSkKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCRjMyICAgICBBVl9QSVhfRk1UX05FKFJHQkYz MkJFLCBSR0JGMzJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCQUYzMiAgICBBVl9QSVhfRk1U X05FKFJHQkFGMzJCRSwgUkdCQUYzMkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0I5NiAg ICAgIEFWX1BJWF9GTVRfTkUoUkdCOTZCRSwgUkdCOTZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRf UkdCQTEyOCAgICBBVl9QSVhfRk1UX05FKFJHQkExMjhCRSwgUkdCQTEyOExFKQorKworKy8qKgor KyAgKiBDaHJvbWF0aWNpdHkgY29vcmRpbmF0ZXMgb2YgdGhlIHNvdXJjZSBwcmltYXJpZXMuCisr ICAqIFRoZXNlIHZhbHVlcyBtYXRjaCB0aGUgb25lcyBkZWZpbmVkIGJ5IElTTy9JRUMgMjMwOTEt Ml8yMDE5IHN1YmNsYXVzZSA4LjEgYW5kIElUVS1UIEguMjczLgorKyAgKi8KKytlbnVtIEFWQ29s b3JQcmltYXJpZXMgeworKyAgICBBVkNPTF9QUklfUkVTRVJWRUQwICAgPSAwLAorKyAgICBBVkNP TF9QUklfQlQ3MDkgICAgICAgPSAxLCAgLy8vPCBhbHNvIElUVS1SIEJUMTM2MSAvIElFQyA2MTk2 Ni0yLTQgLyBTTVBURSBSUCAxNzcgQW5uZXggQgorKyAgICBBVkNPTF9QUklfVU5TUEVDSUZJRUQg PSAyLAorKyAgICBBVkNPTF9QUklfUkVTRVJWRUQgICAgPSAzLAorKyAgICBBVkNPTF9QUklfQlQ0 NzBNICAgICAgPSA0LCAgLy8vPCBhbHNvIEZDQyBUaXRsZSA0NyBDb2RlIG9mIEZlZGVyYWwgUmVn dWxhdGlvbnMgNzMuNjgyIChhKSgyMCkKKysKKysgICAgQVZDT0xfUFJJX0JUNDcwQkcgICAgID0g NSwgIC8vLzwgYWxzbyBJVFUtUiBCVDYwMS02IDYyNSAvIElUVS1SIEJUMTM1OCA2MjUgLyBJVFUt UiBCVDE3MDAgNjI1IFBBTCAmIFNFQ0FNCisrICAgIEFWQ09MX1BSSV9TTVBURTE3ME0gICA9IDYs ICAvLy88IGFsc28gSVRVLVIgQlQ2MDEtNiA1MjUgLyBJVFUtUiBCVDEzNTggNTI1IC8gSVRVLVIg QlQxNzAwIE5UU0MKKysgICAgQVZDT0xfUFJJX1NNUFRFMjQwTSAgID0gNywgIC8vLzwgaWRlbnRp Y2FsIHRvIGFib3ZlLCBhbHNvIGNhbGxlZCAiU01QVEUgQyIgZXZlbiB0aG91Z2ggaXQgdXNlcyBE NjUKKysgICAgQVZDT0xfUFJJX0ZJTE0gICAgICAgID0gOCwgIC8vLzwgY29sb3VyIGZpbHRlcnMg dXNpbmcgSWxsdW1pbmFudCBDCisrICAgIEFWQ09MX1BSSV9CVDIwMjAgICAgICA9IDksICAvLy88 IElUVS1SIEJUMjAyMAorKyAgICBBVkNPTF9QUklfU01QVEU0MjggICAgPSAxMCwgLy8vPCBTTVBU RSBTVCA0MjgtMSAoQ0lFIDE5MzEgWFlaKQorKyAgICBBVkNPTF9QUklfU01QVEVTVDQyOF8xID0g QVZDT0xfUFJJX1NNUFRFNDI4LAorKyAgICBBVkNPTF9QUklfU01QVEU0MzEgICAgPSAxMSwgLy8v PCBTTVBURSBTVCA0MzEtMiAoMjAxMSkgLyBEQ0kgUDMKKysgICAgQVZDT0xfUFJJX1NNUFRFNDMy ICAgID0gMTIsIC8vLzwgU01QVEUgU1QgNDMyLTEgKDIwMTApIC8gUDMgRDY1IC8gRGlzcGxheSBQ MworKyAgICBBVkNPTF9QUklfRUJVMzIxMyAgICAgPSAyMiwgLy8vPCBFQlUgVGVjaC4gMzIxMy1F IChub3RoaW5nIHRoZXJlKSAvIG9uZSBvZiBKRURFQyBQMjIgZ3JvdXAgcGhvc3Bob3JzCisrICAg IEFWQ09MX1BSSV9KRURFQ19QMjIgICA9IEFWQ09MX1BSSV9FQlUzMjEzLAorKyAgICBBVkNPTF9Q UklfTkIsICAgICAgICAgICAgICAgLy8vPCBOb3QgcGFydCBvZiBBQkkKKysKKysgICAgLyogVGhl IGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgcGFydCBvZiBILjI3MywgYnV0IGN1c3RvbSBleHRl bnNpb25zICovCisrICAgIEFWQ09MX1BSSV9FWFRfQkFTRSAgICAgPSAyNTYsCisrICAgIEFWQ09M X1BSSV9WX0dBTVVUICAgICAgPSBBVkNPTF9QUklfRVhUX0JBU0UsCisrICAgIEFWQ09MX1BSSV9F WFRfTkIgICAgICAgICAgICAvLy88IE5vdCBwYXJ0IG9mIEFCSQorK307CisrCisrLyoqCisrICog Q29sb3IgVHJhbnNmZXIgQ2hhcmFjdGVyaXN0aWMuCisrICogVGhlc2UgdmFsdWVzIG1hdGNoIHRo ZSBvbmVzIGRlZmluZWQgYnkgSVNPL0lFQyAyMzA5MS0yXzIwMTkgc3ViY2xhdXNlIDguMi4KKysg Ki8KKytlbnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHsKKysgICAgQVZDT0xfVFJD X1JFU0VSVkVEMCAgICA9IDAsCisrICAgIEFWQ09MX1RSQ19CVDcwOSAgICAgICAgPSAxLCAgLy8v PCBhbHNvIElUVS1SIEJUMTM2MQorKyAgICBBVkNPTF9UUkNfVU5TUEVDSUZJRUQgID0gMiwKKysg ICAgQVZDT0xfVFJDX1JFU0VSVkVEICAgICA9IDMsCisrICAgIEFWQ09MX1RSQ19HQU1NQTIyICAg ICAgPSA0LCAgLy8vPCBhbHNvIElUVS1SIEJUNDcwTSAvIElUVS1SIEJUMTcwMCA2MjUgUEFMICYg U0VDQU0KKysgICAgQVZDT0xfVFJDX0dBTU1BMjggICAgICA9IDUsICAvLy88IGFsc28gSVRVLVIg QlQ0NzBCRworKyAgICBBVkNPTF9UUkNfU01QVEUxNzBNICAgID0gNiwgIC8vLzwgYWxzbyBJVFUt UiBCVDYwMS02IDUyNSBvciA2MjUgLyBJVFUtUiBCVDEzNTggNTI1IG9yIDYyNSAvIElUVS1SIEJU MTcwMCBOVFNDCisrICAgIEFWQ09MX1RSQ19TTVBURTI0ME0gICAgPSA3LAorKyAgICBBVkNPTF9U UkNfTElORUFSICAgICAgID0gOCwgIC8vLzwgIkxpbmVhciB0cmFuc2ZlciBjaGFyYWN0ZXJpc3Rp Y3MiCisrICAgIEFWQ09MX1RSQ19MT0cgICAgICAgICAgPSA5LCAgLy8vPCAiTG9nYXJpdGhtaWMg dHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgKDEwMDoxIHJhbmdlKSIKKysgICAgQVZDT0xfVFJDX0xP R19TUVJUICAgICA9IDEwLCAvLy88ICJMb2dhcml0aG1pYyB0cmFuc2ZlciBjaGFyYWN0ZXJpc3Rp YyAoMTAwICogU3FydCgxMCkgOiAxIHJhbmdlKSIKKysgICAgQVZDT0xfVFJDX0lFQzYxOTY2XzJf NCA9IDExLCAvLy88IElFQyA2MTk2Ni0yLTQKKysgICAgQVZDT0xfVFJDX0JUMTM2MV9FQ0cgICA9 IDEyLCAvLy88IElUVS1SIEJUMTM2MSBFeHRlbmRlZCBDb2xvdXIgR2FtdXQKKysgICAgQVZDT0xf VFJDX0lFQzYxOTY2XzJfMSA9IDEzLCAvLy88IElFQyA2MTk2Ni0yLTEgKHNSR0Igb3Igc1lDQykK KysgICAgQVZDT0xfVFJDX0JUMjAyMF8xMCAgICA9IDE0LCAvLy88IElUVS1SIEJUMjAyMCBmb3Ig MTAtYml0IHN5c3RlbQorKyAgICBBVkNPTF9UUkNfQlQyMDIwXzEyICAgID0gMTUsIC8vLzwgSVRV LVIgQlQyMDIwIGZvciAxMi1iaXQgc3lzdGVtCisrICAgIEFWQ09MX1RSQ19TTVBURTIwODQgICAg PSAxNiwgLy8vPCBTTVBURSBTVCAyMDg0IGZvciAxMC0sIDEyLSwgMTQtIGFuZCAxNi1iaXQgc3lz dGVtcworKyAgICBBVkNPTF9UUkNfU01QVEVTVDIwODQgID0gQVZDT0xfVFJDX1NNUFRFMjA4NCwK KysgICAgQVZDT0xfVFJDX1NNUFRFNDI4ICAgICA9IDE3LCAvLy88IFNNUFRFIFNUIDQyOC0xCisr ICAgIEFWQ09MX1RSQ19TTVBURVNUNDI4XzEgPSBBVkNPTF9UUkNfU01QVEU0MjgsCisrICAgIEFW Q09MX1RSQ19BUklCX1NURF9CNjcgPSAxOCwgLy8vPCBBUklCIFNURC1CNjcsIGtub3duIGFzICJI eWJyaWQgbG9nLWdhbW1hIgorKyAgICBBVkNPTF9UUkNfTkIsICAgICAgICAgICAgICAgIC8vLzwg Tm90IHBhcnQgb2YgQUJJCisrCisrICAgIC8qIFRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90 IHBhcnQgb2YgSC4yNzMsIGJ1dCBjdXN0b20gZXh0ZW5zaW9ucyAqLworKyAgICBBVkNPTF9UUkNf RVhUX0JBU0UgICAgID0gMjU2LAorKyAgICBBVkNPTF9UUkNfVl9MT0cgICAgICAgID0gQVZDT0xf VFJDX0VYVF9CQVNFLAorKyAgICBBVkNPTF9UUkNfRVhUX05CICAgICAgICAgICAgIC8vLzwgTm90 IHBhcnQgb2YgQUJJCisrfTsKKysKKysvKioKKysgKiBZVVYgY29sb3JzcGFjZSB0eXBlLgorKyAq IFRoZXNlIHZhbHVlcyBtYXRjaCB0aGUgb25lcyBkZWZpbmVkIGJ5IElTTy9JRUMgMjMwOTEtMl8y MDE5IHN1YmNsYXVzZSA4LjMuCisrICovCisrZW51bSBBVkNvbG9yU3BhY2UgeworKyAgICBBVkNP TF9TUENfUkdCICAgICAgICAgPSAwLCAgLy8vPCBvcmRlciBvZiBjb2VmZmljaWVudHMgaXMgYWN0 dWFsbHkgR0JSLCBhbHNvIElFQyA2MTk2Ni0yLTEgKHNSR0IpLCBZWlggYW5kIFNUIDQyOC0xCisr ICAgIEFWQ09MX1NQQ19CVDcwOSAgICAgICA9IDEsICAvLy88IGFsc28gSVRVLVIgQlQxMzYxIC8g SUVDIDYxOTY2LTItNCB4dllDQzcwOSAvIGRlcml2ZWQgaW4gU01QVEUgUlAgMTc3IEFubmV4IEIK KysgICAgQVZDT0xfU1BDX1VOU1BFQ0lGSUVEID0gMiwKKysgICAgQVZDT0xfU1BDX1JFU0VSVkVE ICAgID0gMywgIC8vLzwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYnkgSVRVLVQgYW5kIElTTy9J RUMganVzdCBsaWtlIDE1LTI1NSBhcmUKKysgICAgQVZDT0xfU1BDX0ZDQyAgICAgICAgID0gNCwg IC8vLzwgRkNDIFRpdGxlIDQ3IENvZGUgb2YgRmVkZXJhbCBSZWd1bGF0aW9ucyA3My42ODIgKGEp KDIwKQorKyAgICBBVkNPTF9TUENfQlQ0NzBCRyAgICAgPSA1LCAgLy8vPCBhbHNvIElUVS1SIEJU NjAxLTYgNjI1IC8gSVRVLVIgQlQxMzU4IDYyNSAvIElUVS1SIEJUMTcwMCA2MjUgUEFMICYgU0VD QU0gLyBJRUMgNjE5NjYtMi00IHh2WUNDNjAxCisrICAgIEFWQ09MX1NQQ19TTVBURTE3ME0gICA9 IDYsICAvLy88IGFsc28gSVRVLVIgQlQ2MDEtNiA1MjUgLyBJVFUtUiBCVDEzNTggNTI1IC8gSVRV LVIgQlQxNzAwIE5UU0MgLyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIGFib3ZlCisrICAgIEFW Q09MX1NQQ19TTVBURTI0ME0gICA9IDcsICAvLy88IGRlcml2ZWQgZnJvbSAxNzBNIHByaW1hcmll cyBhbmQgRDY1IHdoaXRlIHBvaW50LCAxNzBNIGlzIGRlcml2ZWQgZnJvbSBCVDQ3MCBTeXN0ZW0g TSdzIHByaW1hcmllcworKyAgICBBVkNPTF9TUENfWUNHQ08gICAgICAgPSA4LCAgLy8vPCB1c2Vk IGJ5IERpcmFjIC8gVkMtMiBhbmQgSC4yNjQgRlJleHQsIHNlZSBJVFUtVCBTRzE2CisrICAgIEFW Q09MX1NQQ19ZQ09DRyAgICAgICA9IEFWQ09MX1NQQ19ZQ0dDTywKKysgICAgQVZDT0xfU1BDX0JU MjAyMF9OQ0wgID0gOSwgIC8vLzwgSVRVLVIgQlQyMDIwIG5vbi1jb25zdGFudCBsdW1pbmFuY2Ug c3lzdGVtCisrICAgIEFWQ09MX1NQQ19CVDIwMjBfQ0wgICA9IDEwLCAvLy88IElUVS1SIEJUMjAy MCBjb25zdGFudCBsdW1pbmFuY2Ugc3lzdGVtCisrICAgIEFWQ09MX1NQQ19TTVBURTIwODUgICA9 IDExLCAvLy88IFNNUFRFIDIwODUsIFknRCd6RCd4CisrICAgIEFWQ09MX1NQQ19DSFJPTUFfREVS SVZFRF9OQ0wgPSAxMiwgLy8vPCBDaHJvbWF0aWNpdHktZGVyaXZlZCBub24tY29uc3RhbnQgbHVt aW5hbmNlIHN5c3RlbQorKyAgICBBVkNPTF9TUENfQ0hST01BX0RFUklWRURfQ0wgPSAxMywgLy8v PCBDaHJvbWF0aWNpdHktZGVyaXZlZCBjb25zdGFudCBsdW1pbmFuY2Ugc3lzdGVtCisrICAgIEFW Q09MX1NQQ19JQ1RDUCAgICAgICA9IDE0LCAvLy88IElUVS1SIEJULjIxMDAtMCwgSUN0Q3AKKysg ICAgQVZDT0xfU1BDX0lQVF9DMiAgICAgID0gMTUsIC8vLzwgU01QVEUgU1QgMjEyOCwgSVBULUMy CisrICAgIEFWQ09MX1NQQ19ZQ0dDT19SRSAgICA9IDE2LCAvLy88IFlDZ0NvLVIsIGV2ZW4gYWRk aXRpb24gb2YgYml0cworKyAgICBBVkNPTF9TUENfWUNHQ09fUk8gICAgPSAxNywgLy8vPCBZQ2dD by1SLCBvZGQgYWRkaXRpb24gb2YgYml0cworKyAgICBBVkNPTF9TUENfTkIgICAgICAgICAgICAg ICAgLy8vPCBOb3QgcGFydCBvZiBBQkkKKyt9OworKworKy8qKgorKyAqIFZpc3VhbCBjb250ZW50 IHZhbHVlIHJhbmdlLgorKyAqCisrICogVGhlc2UgdmFsdWVzIGFyZSBiYXNlZCBvbiBkZWZpbml0 aW9ucyB0aGF0IGNhbiBiZSBmb3VuZCBpbiBtdWx0aXBsZQorKyAqIHNwZWNpZmljYXRpb25zLCBz dWNoIGFzIElUVS1UIEJULjcwOSAoMy40IC0gUXVhbnRpemF0aW9uIG9mIFJHQiwgbHVtaW5hbmNl CisrICogYW5kIGNvbG91ci1kaWZmZXJlbmNlIHNpZ25hbHMpLCBJVFUtVCBCVC4yMDIwIChUYWJs ZSA1IC0gRGlnaXRhbAorKyAqIFJlcHJlc2VudGF0aW9uKSBhcyB3ZWxsIGFzIElUVS1UIEJULjIx MDAgKFRhYmxlIDkgLSBEaWdpdGFsIDEwLSBhbmQgMTItYml0CisrICogaW50ZWdlciByZXByZXNl bnRhdGlvbikuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZSBCVC4yMTAwIG9uZSBpcworKyAq IHJlY29tbWVuZGVkLCBhcyBpdCBhbHNvIGRlZmluZXMgdGhlIGZ1bGwgcmFuZ2UgcmVwcmVzZW50 YXRpb24uCisrICoKKysgKiBDb21tb24gZGVmaW5pdGlvbnM6CisrICogICAtIEZvciBSR0IgYW5k IGx1bWEgcGxhbmVzIHN1Y2ggYXMgWSBpbiBZQ2JDciBhbmQgSSBpbiBJQ3RDcCwKKysgKiAgICAg J0UnIGlzIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiByYW5nZSBvZiAwLjAgdG8gMS4wLgorKyAqICAg LSBGb3IgY2hyb21hIHBsYW5lcyBzdWNoIGFzIENiLENyIGFuZCBDdCxDcCwgJ0UnIGlzIHRoZSBv cmlnaW5hbAorKyAqICAgICB2YWx1ZSBpbiByYW5nZSBvZiAtMC41IHRvIDAuNS4KKysgKiAgIC0g J24nIGlzIHRoZSBvdXRwdXQgYml0IGRlcHRoLgorKyAqICAgLSBGb3IgYWRkaXRpb25hbCBkZWZp bml0aW9ucyBzdWNoIGFzIHJvdW5kaW5nIGFuZCBjbGlwcGluZyB0byB2YWxpZCBuCisrICogICAg IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlLCBwbGVhc2UgcmVmZXIgdG8gQlQuMjEwMCAoVGFi bGUgOSkuCisrICovCisrZW51bSBBVkNvbG9yUmFuZ2UgeworKyAgICBBVkNPTF9SQU5HRV9VTlNQ RUNJRklFRCA9IDAsCisrCisrICAgIC8qKgorKyAgICAgKiBOYXJyb3cgb3IgbGltaXRlZCByYW5n ZSBjb250ZW50LgorKyAgICAgKgorKyAgICAgKiAtIEZvciBsdW1hIHBsYW5lczoKKysgICAgICoK KysgICAgICogICAgICAgKDIxOSAqIEUgKyAxNikgKiAyXihuLTgpCisrICAgICAqCisrICAgICAq ICAgRi5leC4gdGhlIHJhbmdlIG9mIDE2LTIzNSBmb3IgOCBiaXRzCisrICAgICAqCisrICAgICAq IC0gRm9yIGNocm9tYSBwbGFuZXM6CisrICAgICAqCisrICAgICAqICAgICAgICgyMjQgKiBFICsg MTI4KSAqIDJeKG4tOCkKKysgICAgICoKKysgICAgICogICBGLmV4LiB0aGUgcmFuZ2Ugb2YgMTYt MjQwIGZvciA4IGJpdHMKKysgICAgICovCisrICAgIEFWQ09MX1JBTkdFX01QRUcgICAgICAgID0g MSwKKysKKysgICAgLyoqCisrICAgICAqIEZ1bGwgcmFuZ2UgY29udGVudC4KKysgICAgICoKKysg ICAgICogLSBGb3IgUkdCIGFuZCBsdW1hIHBsYW5lczoKKysgICAgICoKKysgICAgICogICAgICAg KDJebiAtIDEpICogRQorKyAgICAgKgorKyAgICAgKiAgIEYuZXguIHRoZSByYW5nZSBvZiAwLTI1 NSBmb3IgOCBiaXRzCisrICAgICAqCisrICAgICAqIC0gRm9yIGNocm9tYSBwbGFuZXM6CisrICAg ICAqCisrICAgICAqICAgICAgICgyXm4gLSAxKSAqIEUgKyAyXihuIC0gMSkKKysgICAgICoKKysg ICAgICogICBGLmV4LiB0aGUgcmFuZ2Ugb2YgMS0yNTUgZm9yIDggYml0cworKyAgICAgKi8KKysg ICAgQVZDT0xfUkFOR0VfSlBFRyAgICAgICAgPSAyLAorKyAgICBBVkNPTF9SQU5HRV9OQiAgICAg ICAgICAgICAgIC8vLzwgTm90IHBhcnQgb2YgQUJJCisrfTsKKysKKysvKioKKysgKiBMb2NhdGlv biBvZiBjaHJvbWEgc2FtcGxlcy4KKysgKgorKyAqIElsbHVzdHJhdGlvbiBzaG93aW5nIHRoZSBs b2NhdGlvbiBvZiB0aGUgZmlyc3QgKHRvcCBsZWZ0KSBjaHJvbWEgc2FtcGxlIG9mIHRoZQorKyAq IGltYWdlLCB0aGUgbGVmdCBzaG93cyBvbmx5IGx1bWEsIHRoZSByaWdodAorKyAqIHNob3dzIHRo ZSBsb2NhdGlvbiBvZiB0aGUgY2hyb21hIHNhbXBsZSwgdGhlIDIgY291bGQgYmUgaW1hZ2luZWQg dG8gb3ZlcmxheQorKyAqIGVhY2ggb3RoZXIgYnV0IGFyZSBkcmF3biBzZXBhcmF0ZWx5IGR1ZSB0 byBsaW1pdGF0aW9ucyBvZiBBU0NJSQorKyAqCisrICogICAgICAgICAgICAgICAgMXN0IDJuZCAg ICAgICAxc3QgMm5kIGhvcml6b250YWwgbHVtYSBzYW1wbGUgcG9zaXRpb25zCisrICogICAgICAg ICAgICAgICAgIHYgICB2ICAgICAgICAgdiAgIHYKKysgKiAgICAgICAgICAgICAgICAgX19fX19f ICAgICAgICBfX19fX18KKysgKjFzdCBsdW1hIGxpbmUgPiB8WCAgIFggLi4uICAgIHwzIDQgWCAu Li4gICAgIFggYXJlIGx1bWEgc2FtcGxlcywKKysgKiAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgIHwxIDIgICAgICAgICAgIDEtNiBhcmUgcG9zc2libGUgY2hyb21hIHBvc2l0aW9ucworKyAq Mm5kIGx1bWEgbGluZSA+IHxYICAgWCAuLi4gICAgfDUgNiBYIC4uLiAgICAgMCBpcyB1bmRlZmlu ZWQvdW5rbm93biBwb3NpdGlvbgorKyAqLworK2VudW0gQVZDaHJvbWFMb2NhdGlvbiB7CisrICAg IEFWQ0hST01BX0xPQ19VTlNQRUNJRklFRCA9IDAsCisrICAgIEFWQ0hST01BX0xPQ19MRUZUICAg ICAgICA9IDEsIC8vLzwgTVBFRy0yLzQgNDoyOjAsIEguMjY0IGRlZmF1bHQgZm9yIDQ6MjowCisr ICAgIEFWQ0hST01BX0xPQ19DRU5URVIgICAgICA9IDIsIC8vLzwgTVBFRy0xIDQ6MjowLCBKUEVH IDQ6MjowLCBILjI2MyA0OjI6MAorKyAgICBBVkNIUk9NQV9MT0NfVE9QTEVGVCAgICAgPSAzLCAv Ly88IElUVS1SIDYwMSwgU01QVEUgMjc0TSAyOTZNIFMzMTRNKERWIDQ6MToxKSwgbXBlZzIgNDoy OjIKKysgICAgQVZDSFJPTUFfTE9DX1RPUCAgICAgICAgID0gNCwKKysgICAgQVZDSFJPTUFfTE9D X0JPVFRPTUxFRlQgID0gNSwKKysgICAgQVZDSFJPTUFfTE9DX0JPVFRPTSAgICAgID0gNiwKKysg ICAgQVZDSFJPTUFfTE9DX05CICAgICAgICAgICAgICAgLy8vPCBOb3QgcGFydCBvZiBBQkkKKyt9 OworKworKy8qKgorKyAqIENvcnJlbGF0aW9uIGJldHdlZW4gdGhlIGFscGhhIGNoYW5uZWwgYW5k IGNvbG9yIHZhbHVlcy4KKysgKi8KKytlbnVtIEFWQWxwaGFNb2RlIHsKKysgICAgQVZBTFBIQV9N T0RFX1VOU1BFQ0lGSUVEICAgPSAwLCAvLy88IFVua25vd24gYWxwaGEgaGFuZGxpbmcsIG9yIG5v IGFscGhhIGNoYW5uZWwKKysgICAgQVZBTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQgPSAxLCAvLy88 IEFscGhhIGNoYW5uZWwgaXMgbXVsdGlwbGllZCBpbnRvIGNvbG9yIHZhbHVlcworKyAgICBBVkFM UEhBX01PREVfU1RSQUlHSFQgICAgICA9IDIsIC8vLzwgQWxwaGEgY2hhbm5lbCBpcyBpbmRlcGVu ZGVudCBvZiBjb2xvciB2YWx1ZXMKKysgICAgQVZBTFBIQV9NT0RFX05CICAgICAgICAgICAgICAg ICAvLy88IE5vdCBwYXJ0IG9mIEFCSQorK307CisrCisrI2VuZGlmIC8qIEFWVVRJTF9QSVhGTVRf SCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRw YXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3JhdGlvbmFsLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvcmF0 aW9uYWwuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9yYXRpb25hbC5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoy Mzo0Ny42Nzg5NzAyMjMgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvcmF0aW9uYWwuaAkyMDI2LTA5LTA3 IDEyOjIzOjQ3LjY3ODkyMDg5OSArMDIwMAorQEAgLTAsMCArMSwyMjUgQEAKKysvKgorKyAqIHJh dGlvbmFsIG51bWJlcnMKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWljaGFlbCBOaWVkZXJtYXll ciA8bWljaGFlbG5pQGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGF2 dV9tYXRoX3JhdGlvbmFsCisrICogVXRpbGl0aWVzIGZvciByYXRpb25hbCBudW1iZXIgY2FsY3Vs YXRpb24uCisrICogQGF1dGhvciBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0 PgorKyAqLworKworKyNpZm5kZWYgQVZVVElMX1JBVElPTkFMX0gKKysjZGVmaW5lIEFWVVRJTF9S QVRJT05BTF9ICisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4K KysjaW5jbHVkZSAiYXR0cmlidXRlcy5oIgorKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZ1X21h dGhfcmF0aW9uYWwgQVZSYXRpb25hbAorKyAqIEBpbmdyb3VwIGxhdnVfbWF0aAorKyAqIFJhdGlv bmFsIG51bWJlciBjYWxjdWxhdGlvbi4KKysgKgorKyAqIFdoaWxlIHJhdGlvbmFsIG51bWJlcnMg Y2FuIGJlIGV4cHJlc3NlZCBhcyBmbG9hdGluZy1wb2ludCBudW1iZXJzLCB0aGUKKysgKiBjb252 ZXJzaW9uIHByb2Nlc3MgaXMgYSBsb3NzeSBvbmUsIHNvIGFyZSBmbG9hdGluZy1wb2ludCBvcGVy YXRpb25zLiBPbiB0aGUKKysgKiBvdGhlciBoYW5kLCB0aGUgbmF0dXJlIG9mIEZGbXBlZyBkZW1h bmRzIGhpZ2hseSBhY2N1cmF0ZSBjYWxjdWxhdGlvbiBvZgorKyAqIHRpbWVzdGFtcHMuIFRoaXMg c2V0IG9mIHJhdGlvbmFsIG51bWJlciB1dGlsaXRpZXMgc2VydmVzIGFzIGEgZ2VuZXJpYworKyAq IGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIHJhdGlvbmFsIG51bWJlcnMgYXMgcGFpcnMgb2Yg bnVtZXJhdG9ycyBhbmQKKysgKiBkZW5vbWluYXRvcnMuCisrICoKKysgKiBNYW55IG9mIHRoZSBm dW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIEFWUmF0aW9uYWwncyBoYXZlIHRoZSBzdWZmaXggYF9x YCwgaW4KKysgKiByZWZlcmVuY2UgdG8gdGhlIG1hdGhlbWF0aWNhbCBzeW1ib2wgIuKEmiIgKFEp IHdoaWNoIGRlbm90ZXMgdGhlIHNldCBvZiBhbGwKKysgKiByYXRpb25hbCBudW1iZXJzLgorKyAq CisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBSYXRpb25hbCBudW1iZXIgKHBhaXIgb2YgbnVt ZXJhdG9yIGFuZCBkZW5vbWluYXRvcikuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZSYXRpb25h bHsKKysgICAgaW50IG51bTsgLy8vPCBOdW1lcmF0b3IKKysgICAgaW50IGRlbjsgLy8vPCBEZW5v bWluYXRvcgorK30gQVZSYXRpb25hbDsKKysKKysvKioKKysgKiBDcmVhdGUgYW4gQVZSYXRpb25h bC4KKysgKgorKyAqIFVzZWZ1bCBmb3IgY29tcGlsZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgY29t cG91bmQgbGl0ZXJhbHMuCisrICoKKysgKiBAbm90ZSBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBy ZWR1Y2VkLgorKyAqIEBzZWUgYXZfcmVkdWNlKCkKKysgKi8KKytzdGF0aWMgaW5saW5lIEFWUmF0 aW9uYWwgYXZfbWFrZV9xKGludCBudW0sIGludCBkZW4pCisreworKyAgICBBVlJhdGlvbmFsIHIg PSB7IG51bSwgZGVuIH07CisrICAgIHJldHVybiByOworK30KKysKKysvKioKKysgKiBDb21wYXJl IHR3byByYXRpb25hbHMuCisrICoKKysgKiBAcGFyYW0gYSBGaXJzdCByYXRpb25hbAorKyAqIEBw YXJhbSBiIFNlY29uZCByYXRpb25hbAorKyAqCisrICogQHJldHVybiBPbmUgb2YgdGhlIGZvbGxv d2luZyB2YWx1ZXM6CisrICogICAgICAgICAtIDAgaWYgYGEgPT0gYmAKKysgKiAgICAgICAgIC0g MSBpZiBgYSA+IGJgCisrICogICAgICAgICAtIC0xIGlmIGBhIDwgYmAKKysgKiAgICAgICAgIC0g YElOVF9NSU5gIGlmIG9uZSBvZiB0aGUgdmFsdWVzIGlzIG9mIHRoZSBmb3JtIGAwIC8gMGAKKysg Ki8KKytzdGF0aWMgaW5saW5lIGludCBhdl9jbXBfcShBVlJhdGlvbmFsIGEsIEFWUmF0aW9uYWwg Yil7CisrICAgIGNvbnN0IGludDY0X3QgdG1wPSBhLm51bSAqIChpbnQ2NF90KWIuZGVuIC0gYi5u dW0gKiAoaW50NjRfdClhLmRlbjsKKysKKysgICAgaWYodG1wKSByZXR1cm4gKGludCkoKHRtcCBe IGEuZGVuIF4gYi5kZW4pPj42Myl8MTsKKysgICAgZWxzZSBpZihiLmRlbiAmJiBhLmRlbikgcmV0 dXJuIDA7CisrICAgIGVsc2UgaWYoYS5udW0gJiYgYi5udW0pIHJldHVybiAoYS5udW0+PjMxKSAt IChiLm51bT4+MzEpOworKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5UX01J TjsKKyt9CisrCisrLyoqCisrICogQ29udmVydCBhbiBBVlJhdGlvbmFsIHRvIGEgYGRvdWJsZWAu CisrICogQHBhcmFtIGEgQVZSYXRpb25hbCB0byBjb252ZXJ0CisrICogQHJldHVybiBgYWAgaW4g ZmxvYXRpbmctcG9pbnQgZm9ybQorKyAqIEBzZWUgYXZfZDJxKCkKKysgKi8KKytzdGF0aWMgaW5s aW5lIGRvdWJsZSBhdl9xMmQoQVZSYXRpb25hbCBhKXsKKysgICAgcmV0dXJuIGEubnVtIC8gKGRv dWJsZSkgYS5kZW47CisrfQorKworKy8qKgorKyAqIFJlZHVjZSBhIGZyYWN0aW9uLgorKyAqCisr ICogVGhpcyBpcyB1c2VmdWwgZm9yIGZyYW1lcmF0ZSBjYWxjdWxhdGlvbnMuCisrICoKKysgKiBA cGFyYW1bb3V0XSBkc3RfbnVtIERlc3RpbmF0aW9uIG51bWVyYXRvcgorKyAqIEBwYXJhbVtvdXRd IGRzdF9kZW4gRGVzdGluYXRpb24gZGVub21pbmF0b3IKKysgKiBAcGFyYW1baW5dICAgICAgbnVt IFNvdXJjZSBudW1lcmF0b3IKKysgKiBAcGFyYW1baW5dICAgICAgZGVuIFNvdXJjZSBkZW5vbWlu YXRvcgorKyAqIEBwYXJhbVtpbl0gICAgICBtYXggTWF4aW11bSBhbGxvd2VkIHZhbHVlcyBmb3Ig YGRzdF9udW1gICYgYGRzdF9kZW5gCisrICogQHJldHVybiAxIGlmIHRoZSBvcGVyYXRpb24gaXMg ZXhhY3QsIDAgb3RoZXJ3aXNlCisrICovCisraW50IGF2X3JlZHVjZShpbnQgKmRzdF9udW0sIGlu dCAqZHN0X2RlbiwgaW50NjRfdCBudW0sIGludDY0X3QgZGVuLCBpbnQ2NF90IG1heCk7CisrCisr LyoqCisrICogTXVsdGlwbHkgdHdvIHJhdGlvbmFscy4KKysgKiBAcGFyYW0gYiBGaXJzdCByYXRp b25hbAorKyAqIEBwYXJhbSBjIFNlY29uZCByYXRpb25hbAorKyAqIEByZXR1cm4gYipjCisrICov CisrQVZSYXRpb25hbCBhdl9tdWxfcShBVlJhdGlvbmFsIGIsIEFWUmF0aW9uYWwgYykgYXZfY29u c3Q7CisrCisrLyoqCisrICogRGl2aWRlIG9uZSByYXRpb25hbCBieSBhbm90aGVyLgorKyAqIEBw YXJhbSBiIEZpcnN0IHJhdGlvbmFsCisrICogQHBhcmFtIGMgU2Vjb25kIHJhdGlvbmFsCisrICog QHJldHVybiBiL2MKKysgKi8KKytBVlJhdGlvbmFsIGF2X2Rpdl9xKEFWUmF0aW9uYWwgYiwgQVZS YXRpb25hbCBjKSBhdl9jb25zdDsKKysKKysvKioKKysgKiBBZGQgdHdvIHJhdGlvbmFscy4KKysg KiBAcGFyYW0gYiBGaXJzdCByYXRpb25hbAorKyAqIEBwYXJhbSBjIFNlY29uZCByYXRpb25hbAor KyAqIEByZXR1cm4gYitjCisrICovCisrQVZSYXRpb25hbCBhdl9hZGRfcShBVlJhdGlvbmFsIGIs IEFWUmF0aW9uYWwgYykgYXZfY29uc3Q7CisrCisrLyoqCisrICogU3VidHJhY3Qgb25lIHJhdGlv bmFsIGZyb20gYW5vdGhlci4KKysgKiBAcGFyYW0gYiBGaXJzdCByYXRpb25hbAorKyAqIEBwYXJh bSBjIFNlY29uZCByYXRpb25hbAorKyAqIEByZXR1cm4gYi1jCisrICovCisrQVZSYXRpb25hbCBh dl9zdWJfcShBVlJhdGlvbmFsIGIsIEFWUmF0aW9uYWwgYykgYXZfY29uc3Q7CisrCisrLyoqCisr ICogSW52ZXJ0IGEgcmF0aW9uYWwuCisrICogQHBhcmFtIHEgdmFsdWUKKysgKiBAcmV0dXJuIDEg LyBxCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgQVZSYXRpb25hbCBhdl9pbnZfcShB VlJhdGlvbmFsIHEpCisreworKyAgICBBVlJhdGlvbmFsIHIgPSB7IHEuZGVuLCBxLm51bSB9Owor KyAgICByZXR1cm4gcjsKKyt9CisrCisrLyoqCisrICogQ29udmVydCBhIGRvdWJsZSBwcmVjaXNp b24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGEgcmF0aW9uYWwuCisrICoKKysgKiBJbiBjYXNl IG9mIGluZmluaXR5LCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXhwcmVzc2VkIGFzIGB7MSwgMH1g IG9yCisrICogYHstMSwgMH1gIGRlcGVuZGluZyBvbiB0aGUgc2lnbi4KKysgKgorKyAqIEluIGdl bmVyYWwgcmF0aW9uYWwgbnVtYmVycyB3aXRoIHxudW18IDw9IDE8PDI2ICYmIHxkZW58IDw9IDE8 PDI2CisrICogY2FuIGJlIHJlY292ZXJlZCBleGFjdGx5IGZyb20gdGhlaXIgZG91YmxlIHJlcHJl c2VudGF0aW9uLgorKyAqIChubyBleGNlcHRpb25zIHdlcmUgZm91bmQgd2l0aGluIDFCIHJhbmRv bSBvbmVzKQorKyAqCisrICogQHBhcmFtIGQgICBgZG91YmxlYCB0byBjb252ZXJ0CisrICogQHBh cmFtIG1heCBNYXhpbXVtIGFsbG93ZWQgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvcgorKyAqIEBy ZXR1cm4gYGRgIGluIEFWUmF0aW9uYWwgZm9ybQorKyAqIEBzZWUgYXZfcTJkKCkKKysgKi8KKytB VlJhdGlvbmFsIGF2X2QycShkb3VibGUgZCwgaW50IG1heCkgYXZfY29uc3Q7CisrCisrLyoqCisr ICogRmluZCB3aGljaCBvZiB0aGUgdHdvIHJhdGlvbmFscyBpcyBjbG9zZXIgdG8gYW5vdGhlciBy YXRpb25hbC4KKysgKgorKyAqIEBwYXJhbSBxICAgICBSYXRpb25hbCB0byBiZSBjb21wYXJlZCBh Z2FpbnN0CisrICogQHBhcmFtIHExICAgIFJhdGlvbmFsIHRvIGJlIHRlc3RlZAorKyAqIEBwYXJh bSBxMiAgICBSYXRpb25hbCB0byBiZSB0ZXN0ZWQKKysgKiBAcmV0dXJuIE9uZSBvZiB0aGUgZm9s bG93aW5nIHZhbHVlczoKKysgKiAgICAgICAgIC0gMSBpZiBgcTFgIGlzIG5lYXJlciB0byBgcWAg dGhhbiBgcTJgCisrICogICAgICAgICAtIC0xIGlmIGBxMmAgaXMgbmVhcmVyIHRvIGBxYCB0aGFu IGBxMWAKKysgKiAgICAgICAgIC0gMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UKKysg Ki8KKytpbnQgYXZfbmVhcmVyX3EoQVZSYXRpb25hbCBxLCBBVlJhdGlvbmFsIHExLCBBVlJhdGlv bmFsIHEyKTsKKysKKysvKioKKysgKiBGaW5kIHRoZSB2YWx1ZSBpbiBhIGxpc3Qgb2YgcmF0aW9u YWxzIG5lYXJlc3QgYSBnaXZlbiByZWZlcmVuY2UgcmF0aW9uYWwuCisrICoKKysgKiBAcGFyYW0g cSAgICAgIFJlZmVyZW5jZSByYXRpb25hbAorKyAqIEBwYXJhbSBxX2xpc3QgQXJyYXkgb2YgcmF0 aW9uYWxzIHRlcm1pbmF0ZWQgYnkgYHswLCAwfWAKKysgKiBAcmV0dXJuIEluZGV4IG9mIHRoZSBu ZWFyZXN0IHZhbHVlIGZvdW5kIGluIHRoZSBhcnJheQorKyAqLworK2ludCBhdl9maW5kX25lYXJl c3RfcV9pZHgoQVZSYXRpb25hbCBxLCBjb25zdCBBVlJhdGlvbmFsKiBxX2xpc3QpOworKworKy8q KgorKyAqIENvbnZlcnQgYW4gQVZSYXRpb25hbCB0byBhIElFRUUgMzItYml0IGBmbG9hdGAgZXhw cmVzc2VkIGluIGZpeGVkLXBvaW50CisrICogZm9ybWF0LgorKyAqCisrICogQHBhcmFtIHEgUmF0 aW9uYWwgdG8gYmUgY29udmVydGVkCisrICogQHJldHVybiBFcXVpdmFsZW50IGZsb2F0aW5nLXBv aW50IHZhbHVlLCBleHByZXNzZWQgYXMgYW4gdW5zaWduZWQgMzItYml0CisrICogICAgICAgICBp bnRlZ2VyLgorKyAqIEBub3RlIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBwbGF0Zm9ybS1pbmRlcGVk YW50LgorKyAqLworK3VpbnQzMl90IGF2X3EyaW50ZmxvYXQoQVZSYXRpb25hbCBxKTsKKysKKysv KioKKysgKiBSZXR1cm4gdGhlIGJlc3QgcmF0aW9uYWwgc28gdGhhdCBhIGFuZCBiIGFyZSBtdWx0 aXBsZSBvZiBpdC4KKysgKiBJZiB0aGUgcmVzdWx0aW5nIGRlbm9taW5hdG9yIGlzIGxhcmdlciB0 aGFuIG1heF9kZW4sIHJldHVybiBkZWYuCisrICovCisrQVZSYXRpb25hbCBhdl9nY2RfcShBVlJh dGlvbmFsIGEsIEFWUmF0aW9uYWwgYiwgaW50IG1heF9kZW4sIEFWUmF0aW9uYWwgZGVmKTsKKysK KysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVlVUSUxfUkFUSU9OQUxfSCAqLwor ZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZ1dGlsL3NhbXBsZWZtdC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3NhbXBsZWZt dC5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZ1dGlsL3NhbXBsZWZtdC5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0 Ny42NzkwNzk1MzIgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvc2FtcGxlZm10LmgJMjAyNi0wOS0wNyAx MjoyMzo0Ny42NzkwMTg2NDQgKzAyMDAKK0BAIC0wLDAgKzEsMjY4IEBACisrLyoKKysgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFW VVRJTF9TQU1QTEVGTVRfSAorKyNkZWZpbmUgQVZVVElMX1NBTVBMRUZNVF9ICisrCisrI2luY2x1 ZGUgPHN0ZGludC5oPgorKworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdnVfYXVkaW8KKysgKiBA eworKyAqCisrICogQGRlZmdyb3VwIGxhdnVfc2FtcGZtdHMgQXVkaW8gc2FtcGxlIGZvcm1hdHMK KysgKgorKyAqIEF1ZGlvIHNhbXBsZSBmb3JtYXQgZW51bWVyYXRpb24gYW5kIHJlbGF0ZWQgY29u dmVuaWVuY2UgZnVuY3Rpb25zLgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogQXVkaW8gc2Ft cGxlIGZvcm1hdHMKKysgKgorKyAqIC0gVGhlIGRhdGEgZGVzY3JpYmVkIGJ5IHRoZSBzYW1wbGUg Zm9ybWF0IGlzIGFsd2F5cyBpbiBuYXRpdmUtZW5kaWFuIG9yZGVyLgorKyAqICAgU2FtcGxlIHZh bHVlcyBjYW4gYmUgZXhwcmVzc2VkIGJ5IG5hdGl2ZSBDIHR5cGVzLCBoZW5jZSB0aGUgbGFjayBv ZiBhIHNpZ25lZAorKyAqICAgMjQtYml0IHNhbXBsZSBmb3JtYXQgZXZlbiB0aG91Z2ggaXQgaXMg YSBjb21tb24gcmF3IGF1ZGlvIGRhdGEgZm9ybWF0LgorKyAqCisrICogLSBUaGUgZmxvYXRpbmct cG9pbnQgZm9ybWF0cyBhcmUgYmFzZWQgb24gZnVsbCB2b2x1bWUgYmVpbmcgaW4gdGhlIHJhbmdl CisrICogICBbLTEuMCwgMS4wXS4gQW55IHZhbHVlcyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGJl eW9uZCBmdWxsIHZvbHVtZSBsZXZlbC4KKysgKgorKyAqIC0gVGhlIGRhdGEgbGF5b3V0IGFzIHVz ZWQgaW4gYXZfc2FtcGxlc19maWxsX2FycmF5cygpIGFuZCBlbHNld2hlcmUgaW4gRkZtcGVnCisr ICogICAoc3VjaCBhcyBBVkZyYW1lIGluIGxpYmF2Y29kZWMpIGlzIGFzIGZvbGxvd3M6CisrICoK KysgKiBAcGFyCisrICogRm9yIHBsYW5hciBzYW1wbGUgZm9ybWF0cywgZWFjaCBhdWRpbyBjaGFu bmVsIGlzIGluIGEgc2VwYXJhdGUgZGF0YSBwbGFuZSwKKysgKiBhbmQgbGluZXNpemUgaXMgdGhl IGJ1ZmZlciBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIHBsYW5lLiBBbGwgZGF0YQorKyAq IHBsYW5lcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIEZvciBwYWNrZWQgc2FtcGxlIGZvcm1hdHMs IG9ubHkgdGhlIGZpcnN0IGRhdGEKKysgKiBwbGFuZSBpcyB1c2VkLCBhbmQgc2FtcGxlcyBmb3Ig ZWFjaCBjaGFubmVsIGFyZSBpbnRlcmxlYXZlZC4gSW4gdGhpcyBjYXNlLAorKyAqIGxpbmVzaXpl IGlzIHRoZSBidWZmZXIgc2l6ZSwgaW4gYnl0ZXMsIGZvciB0aGUgMSBwbGFuZS4KKysgKgorKyAq LworK2VudW0gQVZTYW1wbGVGb3JtYXQgeworKyAgICBBVl9TQU1QTEVfRk1UX05PTkUgPSAtMSwK KysgICAgQVZfU0FNUExFX0ZNVF9VOCwgICAgICAgICAgLy8vPCB1bnNpZ25lZCA4IGJpdHMKKysg ICAgQVZfU0FNUExFX0ZNVF9TMTYsICAgICAgICAgLy8vPCBzaWduZWQgMTYgYml0cworKyAgICBB Vl9TQU1QTEVfRk1UX1MzMiwgICAgICAgICAvLy88IHNpZ25lZCAzMiBiaXRzCisrICAgIEFWX1NB TVBMRV9GTVRfRkxULCAgICAgICAgIC8vLzwgZmxvYXQKKysgICAgQVZfU0FNUExFX0ZNVF9EQkws ICAgICAgICAgLy8vPCBkb3VibGUKKysKKysgICAgQVZfU0FNUExFX0ZNVF9VOFAsICAgICAgICAg Ly8vPCB1bnNpZ25lZCA4IGJpdHMsIHBsYW5hcgorKyAgICBBVl9TQU1QTEVfRk1UX1MxNlAsICAg ICAgICAvLy88IHNpZ25lZCAxNiBiaXRzLCBwbGFuYXIKKysgICAgQVZfU0FNUExFX0ZNVF9TMzJQ LCAgICAgICAgLy8vPCBzaWduZWQgMzIgYml0cywgcGxhbmFyCisrICAgIEFWX1NBTVBMRV9GTVRf RkxUUCwgICAgICAgIC8vLzwgZmxvYXQsIHBsYW5hcgorKyAgICBBVl9TQU1QTEVfRk1UX0RCTFAs ICAgICAgICAvLy88IGRvdWJsZSwgcGxhbmFyCisrICAgIEFWX1NBTVBMRV9GTVRfUzY0LCAgICAg ICAgIC8vLzwgc2lnbmVkIDY0IGJpdHMKKysgICAgQVZfU0FNUExFX0ZNVF9TNjRQLCAgICAgICAg Ly8vPCBzaWduZWQgNjQgYml0cywgcGxhbmFyCisrCisrICAgIEFWX1NBTVBMRV9GTVRfTkIgICAg ICAgICAgIC8vLzwgTnVtYmVyIG9mIHNhbXBsZSBmb3JtYXRzLiBETyBOT1QgVVNFIGlmIGxpbmtp bmcgZHluYW1pY2FsbHkKKyt9OworKworKy8qKgorKyAqIFJldHVybiB0aGUgbmFtZSBvZiBzYW1w bGVfZm10LCBvciBOVUxMIGlmIHNhbXBsZV9mbXQgaXMgbm90CisrICogcmVjb2duaXplZC4KKysg Ki8KKytjb25zdCBjaGFyICphdl9nZXRfc2FtcGxlX2ZtdF9uYW1lKGVudW0gQVZTYW1wbGVGb3Jt YXQgc2FtcGxlX2ZtdCk7CisrCisrLyoqCisrICogUmV0dXJuIGEgc2FtcGxlIGZvcm1hdCBjb3Jy ZXNwb25kaW5nIHRvIG5hbWUsIG9yIEFWX1NBTVBMRV9GTVRfTk9ORQorKyAqIG9uIGVycm9yLgor KyAqLworK2VudW0gQVZTYW1wbGVGb3JtYXQgYXZfZ2V0X3NhbXBsZV9mbXQoY29uc3QgY2hhciAq bmFtZSk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBwbGFuYXI8LT5wYWNrZWQgYWx0ZXJuYXRp dmUgZm9ybSBvZiB0aGUgZ2l2ZW4gc2FtcGxlIGZvcm1hdCwgb3IKKysgKiBBVl9TQU1QTEVfRk1U X05PTkUgb24gZXJyb3IuIElmIHRoZSBwYXNzZWQgc2FtcGxlX2ZtdCBpcyBhbHJlYWR5IGluIHRo ZQorKyAqIHJlcXVlc3RlZCBwbGFuYXIvcGFja2VkIGZvcm1hdCwgdGhlIGZvcm1hdCByZXR1cm5l ZCBpcyB0aGUgc2FtZSBhcyB0aGUKKysgKiBpbnB1dC4KKysgKi8KKytlbnVtIEFWU2FtcGxlRm9y bWF0IGF2X2dldF9hbHRfc2FtcGxlX2ZtdChlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQs IGludCBwbGFuYXIpOworKworKy8qKgorKyAqIEdldCB0aGUgcGFja2VkIGFsdGVybmF0aXZlIGZv cm0gb2YgdGhlIGdpdmVuIHNhbXBsZSBmb3JtYXQuCisrICoKKysgKiBJZiB0aGUgcGFzc2VkIHNh bXBsZV9mbXQgaXMgYWxyZWFkeSBpbiBwYWNrZWQgZm9ybWF0LCB0aGUgZm9ybWF0IHJldHVybmVk IGlzCisrICogdGhlIHNhbWUgYXMgdGhlIGlucHV0LgorKyAqCisrICogQHJldHVybiAgdGhlIHBh Y2tlZCBhbHRlcm5hdGl2ZSBmb3JtIG9mIHRoZSBnaXZlbiBzYW1wbGUgZm9ybWF0IG9yCisrICAg ICAgICAgICAgQVZfU0FNUExFX0ZNVF9OT05FIG9uIGVycm9yLgorKyAqLworK2VudW0gQVZTYW1w bGVGb3JtYXQgYXZfZ2V0X3BhY2tlZF9zYW1wbGVfZm10KGVudW0gQVZTYW1wbGVGb3JtYXQgc2Ft cGxlX2ZtdCk7CisrCisrLyoqCisrICogR2V0IHRoZSBwbGFuYXIgYWx0ZXJuYXRpdmUgZm9ybSBv ZiB0aGUgZ2l2ZW4gc2FtcGxlIGZvcm1hdC4KKysgKgorKyAqIElmIHRoZSBwYXNzZWQgc2FtcGxl X2ZtdCBpcyBhbHJlYWR5IGluIHBsYW5hciBmb3JtYXQsIHRoZSBmb3JtYXQgcmV0dXJuZWQgaXMK KysgKiB0aGUgc2FtZSBhcyB0aGUgaW5wdXQuCisrICoKKysgKiBAcmV0dXJuICB0aGUgcGxhbmFy IGFsdGVybmF0aXZlIGZvcm0gb2YgdGhlIGdpdmVuIHNhbXBsZSBmb3JtYXQgb3IKKysgICAgICAg ICAgICBBVl9TQU1QTEVfRk1UX05PTkUgb24gZXJyb3IuCisrICovCisrZW51bSBBVlNhbXBsZUZv cm1hdCBhdl9nZXRfcGxhbmFyX3NhbXBsZV9mbXQoZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVf Zm10KTsKKysKKysvKioKKysgKiBHZW5lcmF0ZSBhIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRo ZSBzYW1wbGUgZm9ybWF0IHdpdGgKKysgKiBzYW1wbGVfZm10LCBvciBhIGhlYWRlciBpZiBzYW1w bGVfZm10IGlzIG5lZ2F0aXZlLgorKyAqCisrICogQHBhcmFtIGJ1ZiB0aGUgYnVmZmVyIHdoZXJl IHRvIHdyaXRlIHRoZSBzdHJpbmcKKysgKiBAcGFyYW0gYnVmX3NpemUgdGhlIHNpemUgb2YgYnVm CisrICogQHBhcmFtIHNhbXBsZV9mbXQgdGhlIG51bWJlciBvZiB0aGUgc2FtcGxlIGZvcm1hdCB0 byBwcmludCB0aGUKKysgKiBjb3JyZXNwb25kaW5nIGluZm8gc3RyaW5nLCBvciBhIG5lZ2F0aXZl IHZhbHVlIHRvIHByaW50IHRoZQorKyAqIGNvcnJlc3BvbmRpbmcgaGVhZGVyLgorKyAqIEByZXR1 cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGZpbGxlZCBidWZmZXIgb3IgTlVMTCBpbiBjYXNlIG9mIG90 aGVyIGVycm9ycworKyAqLworK2NoYXIgKmF2X2dldF9zYW1wbGVfZm10X3N0cmluZyhjaGFyICpi dWYsIGludCBidWZfc2l6ZSwgZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10KTsKKysKKysv KioKKysgKiBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHBlciBzYW1wbGUuCisrICoKKysgKiBAcGFy YW0gc2FtcGxlX2ZtdCB0aGUgc2FtcGxlIGZvcm1hdAorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5 dGVzIHBlciBzYW1wbGUgb3IgemVybyBpZiB1bmtub3duIGZvciB0aGUgZ2l2ZW4KKysgKiBzYW1w bGUgZm9ybWF0CisrICovCisraW50IGF2X2dldF9ieXRlc19wZXJfc2FtcGxlKGVudW0gQVZTYW1w bGVGb3JtYXQgc2FtcGxlX2ZtdCk7CisrCisrLyoqCisrICogQ2hlY2sgaWYgdGhlIHNhbXBsZSBm b3JtYXQgaXMgcGxhbmFyLgorKyAqCisrICogQHBhcmFtIHNhbXBsZV9mbXQgdGhlIHNhbXBsZSBm b3JtYXQgdG8gaW5zcGVjdAorKyAqIEByZXR1cm4gMSBpZiB0aGUgc2FtcGxlIGZvcm1hdCBpcyBw bGFuYXIsIDAgaWYgaXQgaXMgaW50ZXJsZWF2ZWQKKysgKi8KKytpbnQgYXZfc2FtcGxlX2ZtdF9p c19wbGFuYXIoZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10KTsKKysKKysvKioKKysgKiBH ZXQgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIGZvciB0aGUgZ2l2ZW4gYXVkaW8gcGFyYW1ldGVy cy4KKysgKgorKyAqIEBwYXJhbVtvdXRdIGxpbmVzaXplIGNhbGN1bGF0ZWQgbGluZXNpemUsIG1h eSBiZSBOVUxMCisrICogQHBhcmFtIG5iX2NoYW5uZWxzICAgdGhlIG51bWJlciBvZiBjaGFubmVs cworKyAqIEBwYXJhbSBuYl9zYW1wbGVzICAgIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiBhIHNp bmdsZSBjaGFubmVsCisrICogQHBhcmFtIHNhbXBsZV9mbXQgICAgdGhlIHNhbXBsZSBmb3JtYXQK KysgKiBAcGFyYW0gYWxpZ24gICAgICAgICBidWZmZXIgc2l6ZSBhbGlnbm1lbnQgKDAgPSBkZWZh dWx0LCAxID0gbm8gYWxpZ25tZW50KQorKyAqIEByZXR1cm4gICAgICAgICAgICAgIHJlcXVpcmVk IGJ1ZmZlciBzaXplLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKysgKi8KKytp bnQgYXZfc2FtcGxlc19nZXRfYnVmZmVyX3NpemUoaW50ICpsaW5lc2l6ZSwgaW50IG5iX2NoYW5u ZWxzLCBpbnQgbmJfc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIEB9 CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9zYW1wbWFuaXAgU2FtcGxlcyBtYW5pcHVsYXRpb24K KysgKgorKyAqIEZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgYXVkaW8gc2FtcGxlcworKyAqIEB7 CisrICovCisrCisrLyoqCisrICogRmlsbCBwbGFuZSBkYXRhIHBvaW50ZXJzIGFuZCBsaW5lc2l6 ZSBmb3Igc2FtcGxlcyB3aXRoIHNhbXBsZQorKyAqIGZvcm1hdCBzYW1wbGVfZm10LgorKyAqCisr ICogVGhlIGF1ZGlvX2RhdGEgYXJyYXkgaXMgZmlsbGVkIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRo ZSBzYW1wbGVzIGRhdGEgcGxhbmVzOgorKyAqIGZvciBwbGFuYXIsIHNldCB0aGUgc3RhcnQgcG9p bnQgb2YgZWFjaCBjaGFubmVsJ3MgZGF0YSB3aXRoaW4gdGhlIGJ1ZmZlciwKKysgKiBmb3IgcGFj a2VkLCBzZXQgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBlbnRpcmUgYnVmZmVyIG9ubHkuCisrICoK KysgKiBUaGUgdmFsdWUgcG9pbnRlZCB0byBieSBsaW5lc2l6ZSBpcyBzZXQgdG8gdGhlIGFsaWdu ZWQgc2l6ZSBvZiBlYWNoCisrICogY2hhbm5lbCdzIGRhdGEgYnVmZmVyIGZvciBwbGFuYXIgbGF5 b3V0LCBvciB0byB0aGUgYWxpZ25lZCBzaXplIG9mIHRoZQorKyAqIGJ1ZmZlciBmb3IgYWxsIGNo YW5uZWxzIGZvciBwYWNrZWQgbGF5b3V0LgorKyAqCisrICogVGhlIGJ1ZmZlciBpbiBidWYgbXVz dCBiZSBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIHRoZSBzYW1wbGVzCisrICogKHVzZSBhdl9z YW1wbGVzX2dldF9idWZmZXJfc2l6ZSgpIHRvIGNvbXB1dGUgaXRzIG1pbmltdW0gc2l6ZSksCisr ICogb3RoZXJ3aXNlIHRoZSBhdWRpb19kYXRhIHBvaW50ZXJzIHdpbGwgcG9pbnQgdG8gaW52YWxp ZCBkYXRhLgorKyAqCisrICogQHNlZSBlbnVtIEFWU2FtcGxlRm9ybWF0CisrICogVGhlIGRvY3Vt ZW50YXRpb24gZm9yIEFWU2FtcGxlRm9ybWF0IGRlc2NyaWJlcyB0aGUgZGF0YSBsYXlvdXQuCisr ICoKKysgKiBAcGFyYW1bb3V0XSBhdWRpb19kYXRhICBhcnJheSB0byBiZSBmaWxsZWQgd2l0aCB0 aGUgcG9pbnRlciBmb3IgZWFjaCBjaGFubmVsCisrICogQHBhcmFtW291dF0gbGluZXNpemUgICAg Y2FsY3VsYXRlZCBsaW5lc2l6ZSwgbWF5IGJlIE5VTEwKKysgKiBAcGFyYW0gYnVmICAgICAgICAg ICAgICB0aGUgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBzYW1wbGVzCisrICog QHBhcmFtIG5iX2NoYW5uZWxzICAgICAgdGhlIG51bWJlciBvZiBjaGFubmVscworKyAqIEBwYXJh bSBuYl9zYW1wbGVzICAgICAgIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiBhIHNpbmdsZSBjaGFu bmVsCisrICogQHBhcmFtIHNhbXBsZV9mbXQgICAgICAgdGhlIHNhbXBsZSBmb3JtYXQKKysgKiBA cGFyYW0gYWxpZ24gICAgICAgICAgICBidWZmZXIgc2l6ZSBhbGlnbm1lbnQgKDAgPSBkZWZhdWx0 LCAxID0gbm8gYWxpZ25tZW50KQorKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgIG1pbmltdW0g c2l6ZSBpbiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIGJ1ZmZlciBvbiBzdWNjZXNzLAorKyAqICAg ICAgICAgICAgICAgICAgICAgICAgIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl CisrICovCisraW50IGF2X3NhbXBsZXNfZmlsbF9hcnJheXModWludDhfdCAqKmF1ZGlvX2RhdGEs IGludCAqbGluZXNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9jaGFubmVscywgaW50 IG5iX3NhbXBsZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlNhbXBsZUZv cm1hdCBzYW1wbGVfZm10LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIEFsbG9jYXRlIGEgc2Ft cGxlcyBidWZmZXIgZm9yIG5iX3NhbXBsZXMgc2FtcGxlcywgYW5kIGZpbGwgZGF0YSBwb2ludGVy cyBhbmQKKysgKiBsaW5lc2l6ZSBhY2NvcmRpbmdseS4KKysgKiBUaGUgYWxsb2NhdGVkIHNhbXBs ZXMgYnVmZmVyIGNhbiBiZSBmcmVlZCBieSB1c2luZyBhdl9mcmVlcCgmYXVkaW9fZGF0YVswXSkK KysgKiBBbGxvY2F0ZWQgZGF0YSB3aWxsIGJlIGluaXRpYWxpemVkIHRvIHNpbGVuY2UuCisrICoK KysgKiBAc2VlIGVudW0gQVZTYW1wbGVGb3JtYXQKKysgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3Ig QVZTYW1wbGVGb3JtYXQgZGVzY3JpYmVzIHRoZSBkYXRhIGxheW91dC4KKysgKgorKyAqIEBwYXJh bVtvdXRdIGF1ZGlvX2RhdGEgIGFycmF5IHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBwb2ludGVyIGZv ciBlYWNoIGNoYW5uZWwKKysgKiBAcGFyYW1bb3V0XSBsaW5lc2l6ZSAgICBhbGlnbmVkIHNpemUg Zm9yIGF1ZGlvIGJ1ZmZlcihzKSwgbWF5IGJlIE5VTEwKKysgKiBAcGFyYW0gbmJfY2hhbm5lbHMg ICAgICBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMKKysgKiBAcGFyYW0gbmJfc2FtcGxlcyAgICAg ICBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbAorKyAqIEBwYXJhbSBzYW1wbGVfZm10ICAg ICAgIHRoZSBzYW1wbGUgZm9ybWF0CisrICogQHBhcmFtIGFsaWduICAgICAgICAgICAgYnVmZmVy IHNpemUgYWxpZ25tZW50ICgwID0gZGVmYXVsdCwgMSA9IG5vIGFsaWdubWVudCkKKysgKiBAcmV0 dXJuICAgICAgICAgICAgICAgICA+PTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUgb24gZmFpbHVyZQorKyAqIEB0b2RvIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVk IGJ1ZmZlciBpbiBjYXNlIG9mIHN1Y2Nlc3MgYXQgdGhlIG5leHQgYnVtcAorKyAqIEBzZWUgYXZf c2FtcGxlc19maWxsX2FycmF5cygpCisrICogQHNlZSBhdl9zYW1wbGVzX2FsbG9jX2FycmF5X2Fu ZF9zYW1wbGVzKCkKKysgKi8KKytpbnQgYXZfc2FtcGxlc19hbGxvYyh1aW50OF90ICoqYXVkaW9f ZGF0YSwgaW50ICpsaW5lc2l6ZSwgaW50IG5iX2NoYW5uZWxzLAorKyAgICAgICAgICAgICAgICAg ICAgIGludCBuYl9zYW1wbGVzLCBlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQsIGludCBh bGlnbik7CisrCisrLyoqCisrICogQWxsb2NhdGUgYSBkYXRhIHBvaW50ZXJzIGFycmF5LCBzYW1w bGVzIGJ1ZmZlciBmb3IgbmJfc2FtcGxlcworKyAqIHNhbXBsZXMsIGFuZCBmaWxsIGRhdGEgcG9p bnRlcnMgYW5kIGxpbmVzaXplIGFjY29yZGluZ2x5LgorKyAqCisrICogVGhpcyBpcyB0aGUgc2Ft ZSBhcyBhdl9zYW1wbGVzX2FsbG9jKCksIGJ1dCBhbHNvIGFsbG9jYXRlcyB0aGUgZGF0YQorKyAq IHBvaW50ZXJzIGFycmF5LgorKyAqCisrICogQHNlZSBhdl9zYW1wbGVzX2FsbG9jKCkKKysgKi8K KytpbnQgYXZfc2FtcGxlc19hbGxvY19hcnJheV9hbmRfc2FtcGxlcyh1aW50OF90ICoqKmF1ZGlv X2RhdGEsIGludCAqbGluZXNpemUsIGludCBuYl9jaGFubmVscywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcywgZW51bSBBVlNhbXBsZUZvcm1h dCBzYW1wbGVfZm10LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIENvcHkgc2FtcGxlcyBmcm9t IHNyYyB0byBkc3QuCisrICoKKysgKiBAcGFyYW0gZHN0IGRlc3RpbmF0aW9uIGFycmF5IG9mIHBv aW50ZXJzIHRvIGRhdGEgcGxhbmVzCisrICogQHBhcmFtIHNyYyBzb3VyY2UgYXJyYXkgb2YgcG9p bnRlcnMgdG8gZGF0YSBwbGFuZXMKKysgKiBAcGFyYW0gZHN0X29mZnNldCBvZmZzZXQgaW4gc2Ft cGxlcyBhdCB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8gZHN0CisrICogQHBhcmFt IHNyY19vZmZzZXQgb2Zmc2V0IGluIHNhbXBsZXMgYXQgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBy ZWFkIGZyb20gc3JjCisrICogQHBhcmFtIG5iX3NhbXBsZXMgbnVtYmVyIG9mIHNhbXBsZXMgdG8g YmUgY29waWVkCisrICogQHBhcmFtIG5iX2NoYW5uZWxzIG51bWJlciBvZiBhdWRpbyBjaGFubmVs cworKyAqIEBwYXJhbSBzYW1wbGVfZm10IGF1ZGlvIHNhbXBsZSBmb3JtYXQKKysgKi8KKytpbnQg YXZfc2FtcGxlc19jb3B5KHVpbnQ4X3QgKiBjb25zdCAqZHN0LCB1aW50OF90ICogY29uc3QgKnNy YywgaW50IGRzdF9vZmZzZXQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX29mZnNldCwg aW50IG5iX3NhbXBsZXMsIGludCBuYl9jaGFubmVscywKKysgICAgICAgICAgICAgICAgICAgIGVu dW0gQVZTYW1wbGVGb3JtYXQgc2FtcGxlX2ZtdCk7CisrCisrLyoqCisrICogRmlsbCBhbiBhdWRp byBidWZmZXIgd2l0aCBzaWxlbmNlLgorKyAqCisrICogQHBhcmFtIGF1ZGlvX2RhdGEgIGFycmF5 IG9mIHBvaW50ZXJzIHRvIGRhdGEgcGxhbmVzCisrICogQHBhcmFtIG9mZnNldCAgICAgIG9mZnNl dCBpbiBzYW1wbGVzIGF0IHdoaWNoIHRvIHN0YXJ0IGZpbGxpbmcKKysgKiBAcGFyYW0gbmJfc2Ft cGxlcyAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gZmlsbAorKyAqIEBwYXJhbSBuYl9jaGFubmVscyBu dW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMKKysgKiBAcGFyYW0gc2FtcGxlX2ZtdCAgYXVkaW8gc2Ft cGxlIGZvcm1hdAorKyAqLworK2ludCBhdl9zYW1wbGVzX3NldF9zaWxlbmNlKHVpbnQ4X3QgKiBj b25zdCAqYXVkaW9fZGF0YSwgaW50IG9mZnNldCwgaW50IG5iX3NhbXBsZXMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG5iX2NoYW5uZWxzLCBlbnVtIEFWU2FtcGxlRm9ybWF0IHNh bXBsZV9mbXQpOworKworKy8qKgorKyAqIEB9CisrICogQH0KKysgKi8KKysjZW5kaWYgLyogQVZV VElMX1NBTVBMRUZNVF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvdmVyc2lvbi5oLmZmbXBlZzkg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZ1dGlsL3ZlcnNpb24uaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC92ZXJzaW9uLmguZmZtcGVnOQkyMDI2 LTA5LTA3IDEyOjIzOjQ3LjY3OTE3MDU2OSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC92ZXJzaW9uLmgJ MjAyNi0wOS0wNyAxMjoyMzo0Ny42NzkxMjY3NDIgKzAyMDAKK0BAIC0wLDAgKzEsMTE4IEBACisr LyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDMgRmFicmljZSBCZWxsYXJkCisrICoKKysgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysvKioKKysgKiBA ZmlsZQorKyAqIEBpbmdyb3VwIGxhdnUKKysgKiBMaWJhdnV0aWwgdmVyc2lvbiBtYWNyb3MKKysg Ki8KKysKKysjaWZuZGVmIEFWVVRJTF9WRVJTSU9OX0gKKysjZGVmaW5lIEFWVVRJTF9WRVJTSU9O X0gKKysKKysjaW5jbHVkZSAibWFjcm9zLmgiCisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgdmVy c2lvbl91dGlscworKyAqCisrICogVXNlZnVsIHRvIGNoZWNrIGFuZCBtYXRjaCBsaWJyYXJ5IHZl cnNpb24gaW4gb3JkZXIgdG8gbWFpbnRhaW4KKysgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lgor KyAqCisrICogVGhlIEZGbXBlZyBsaWJyYXJpZXMgZm9sbG93IGEgdmVyc2lvbmluZyBzY2hlbWUg dmVyeSBzaW1pbGFyIHRvCisrICogU2VtYW50aWMgVmVyc2lvbmluZyAoaHR0cDovL3NlbXZlci5v cmcvKQorKyAqIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGNvbXBvbmVudCBjYWxsZWQgUEFU Q0ggaXMgY2FsbGVkIE1JQ1JPIGluIEZGbXBlZworKyAqIGFuZCBpdHMgdmFsdWUgaXMgcmVzZXQg dG8gMTAwIGluc3RlYWQgb2YgMCB0byBrZWVwIGl0IGFib3ZlIG9yIGVxdWFsIHRvIDEwMC4KKysg KiBBbHNvIHdlIGRvIG5vdCBpbmNyZWFzZSBNSUNSTyBmb3IgZXZlcnkgYnVnZml4IG9yIGNoYW5n ZSBpbiBnaXQgbWFzdGVyLgorKyAqCisrICogUHJpb3IgdG8gRkZtcGVnIDMuMiBwb2ludCByZWxl YXNlcyBkaWQgbm90IGNoYW5nZSBhbnkgbGliIHZlcnNpb24gbnVtYmVyIHRvCisrICogYXZvaWQg YWxpYXNzaW5nIGRpZmZlcmVudCBnaXQgbWFzdGVyIGNoZWNrb3V0cy4KKysgKiBTdGFydGluZyB3 aXRoIEZGbXBlZyAzLjIsIHRoZSByZWxlYXNlZCBsaWJyYXJ5IHZlcnNpb25zIHdpbGwgb2NjdXB5 CisrICogYSBzZXBhcmF0ZSBNQUpPUi5NSU5PUiB0aGF0IGlzIG5vdCB1c2VkIG9uIHRoZSBtYXN0 ZXIgZGV2ZWxvcG1lbnQgYnJhbmNoLgorKyAqIFRoYXQgaXMgaWYgd2UgYnJhbmNoIGEgcmVsZWFz ZSBvZiBtYXN0ZXIgNTUuMTAuMTIzIHdlIHdpbGwgYnVtcCB0byA1NS4xMS4xMDAKKysgKiBmb3Ig dGhlIHJlbGVhc2UgYW5kIG1hc3RlciB3aWxsIGNvbnRpbnVlIGF0IDU1LjEyLjEwMCBhZnRlciBp dC4gRWFjaCBuZXcKKysgKiBwb2ludCByZWxlYXNlIHdpbGwgdGhlbiBidW1wIHRoZSBNSUNSTyBp bXByb3ZpbmcgdGhlIHVzZWZ1bG5lc3Mgb2YgdGhlIGxpYgorKyAqIHZlcnNpb25zLgorKyAqCisr ICogQHsKKysgKi8KKysKKysjZGVmaW5lIEFWX1ZFUlNJT05fSU5UKGEsIGIsIGMpICgoYSk8PDE2 IHwgKGIpPDw4IHwgKGMpKQorKyNkZWZpbmUgQVZfVkVSU0lPTl9ET1QoYSwgYiwgYykgYSAjIy4j IyBiICMjLiMjIGMKKysjZGVmaW5lIEFWX1ZFUlNJT04oYSwgYiwgYykgQVZfVkVSU0lPTl9ET1Qo YSwgYiwgYykKKysKKysvKioKKysgKiBFeHRyYWN0IHZlcnNpb24gY29tcG9uZW50cyBmcm9tIHRo ZSBmdWxsIDo6QVZfVkVSU0lPTl9JTlQgaW50IGFzIHJldHVybmVkCisrICogYnkgZnVuY3Rpb25z IGxpa2UgOjphdmZvcm1hdF92ZXJzaW9uKCkgYW5kIDo6YXZjb2RlY192ZXJzaW9uKCkKKysgKi8K KysjZGVmaW5lIEFWX1ZFUlNJT05fTUFKT1IoYSkgKChhKSA+PiAxNikKKysjZGVmaW5lIEFWX1ZF UlNJT05fTUlOT1IoYSkgKCgoYSkgJiAweDAwRkYwMCkgPj4gOCkKKysjZGVmaW5lIEFWX1ZFUlNJ T05fTUlDUk8oYSkgKChhKSAmIDB4RkYpCisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysvKioK KysgKiBAZGVmZ3JvdXAgbGF2dV92ZXIgVmVyc2lvbiBhbmQgQnVpbGQgZGlhZ25vc3RpY3MKKysg KgorKyAqIE1hY3JvcyBhbmQgZnVuY3Rpb24gdXNlZnVsIHRvIGNoZWNrIGF0IGNvbXBpbGUgdGlt ZSBhbmQgYXQgcnVudGltZQorKyAqIHdoaWNoIHZlcnNpb24gb2YgbGliYXZ1dGlsIGlzIGluIHVz ZS4KKysgKgorKyAqIEB7CisrICovCisrCisrI2RlZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9NQUpP UiAgNjEKKysjZGVmaW5lIExJQkFWVVRJTF9WRVJTSU9OX01JTk9SICAgMQorKyNkZWZpbmUgTElC QVZVVElMX1ZFUlNJT05fTUlDUk8gMTAwCisrCisrI2RlZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9J TlQgICBBVl9WRVJTSU9OX0lOVChMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwgXAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCQVZVVElMX1ZFUlNJT05f TUlOT1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExJQkFWVVRJTF9WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCQVZVVElMX1ZFUlNJT04gICAg ICAgQVZfVkVSU0lPTihMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwgICAgIFwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCQVZVVElMX1ZFUlNJT05fTUlOT1Is ICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQkFW VVRJTF9WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCQVZVVElMX0JVSUxEICAgICAgICAgTElC QVZVVElMX1ZFUlNJT05fSU5UCisrCisrI2RlZmluZSBMSUJBVlVUSUxfSURFTlQgICAgICAgICAi TGF2dSIgQVZfU1RSSU5HSUZZKExJQkFWVVRJTF9WRVJTSU9OKQorKworKy8qKgorKyAqIEBkZWZn cm91cCBsYXZ1X2RlcHJfZ3VhcmRzIERlcHJlY2F0aW9uIEd1YXJkcworKyAqIEZGX0FQSV8qIGRl ZmluZXMgbWF5IGJlIHBsYWNlZCBiZWxvdyB0byBpbmRpY2F0ZSBwdWJsaWMgQVBJIHRoYXQgd2ls bCBiZQorKyAqIGRyb3BwZWQgYXQgYSBmdXR1cmUgdmVyc2lvbiBidW1wLiBUaGUgZGVmaW5lcyB0 aGVtc2VsdmVzIGFyZSBub3QgcGFydCBvZgorKyAqIHRoZSBwdWJsaWMgQVBJIGFuZCBtYXkgY2hh bmdlLCBicmVhayBvciBkaXNhcHBlYXIgYXQgYW55IHRpbWUuCisrICoKKysgKiBAbm90ZSwgd2hl biBidW1waW5nIHRoZSBtYWpvciB2ZXJzaW9uIGl0IGlzIHJlY29tbWVuZGVkIHRvIG1hbnVhbGx5 CisrICogZGlzYWJsZSBlYWNoIEZGX0FQSV8qIGluIGl0cyBvd24gY29tbWl0IGluc3RlYWQgb2Yg ZGlzYWJsaW5nIHRoZW0gYWxsCisrICogYXQgb25jZSB0aHJvdWdoIHRoZSBidW1wLiBUaGlzIGlt cHJvdmVzIHRoZSBnaXQgYmlzZWN0LWFiaWxpdHkgb2YgdGhlIGNoYW5nZS4KKysgKgorKyAqIEB7 CisrICovCisrCisrI2RlZmluZSBGRl9BUElfQ1BVX0ZMQUdfRk9SQ0UgICAgICAgICAgIChMSUJB VlVUSUxfVkVSU0lPTl9NQUpPUiA8IDYyKQorKyNkZWZpbmUgRkZfQVBJX0RPVklfTDExX0lOVkFM SURfUFJPUFMgICAoTElCQVZVVElMX1ZFUlNJT05fTUFKT1IgPCA2MikKKysjZGVmaW5lIEZGX0FQ SV9BU1NFUlRfRlBVICAgICAgICAgICAgICAgKExJQkFWVVRJTF9WRVJTSU9OX01BSk9SIDwgNjIp CisrI2RlZmluZSBGRl9BUElfVlVMS0FOX1NZTkNfUVVFVUVTICAgICAgIChMSUJBVlVUSUxfVkVS U0lPTl9NQUpPUiA8IDYyKQorKworKy8qKgorKyAqIEB9CisrICogQH0KKysgKi8KKysKKysjZW5k aWYgLyogQVZVVElMX1ZFUlNJT05fSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dyZXNhbXBsZS9zd3Jlc2Ft cGxlLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxlL3N3cmVzYW1wbGUuaAorLS0tIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVzYW1w bGUvc3dyZXNhbXBsZS5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzkzOTc3MTYgKzAy MDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJzd3Jlc2FtcGxlL3N3cmVzYW1wbGUuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3 OTM2NzAwOCArMDIwMAorQEAgLTAsMCArMSw1ODcgQEAKKysvKgorKyAqIENvcHlyaWdodCAoQykg MjAxMS0yMDEzIE1pY2hhZWwgTmllZGVybWF5ZXIgKG1pY2hhZWxuaUBnbXguYXQpCisrICoKKysg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJzd3Jlc2FtcGxlCisrICoKKysgKiBsaWJzd3Jlc2Ft cGxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIGxpYnN3cmVzYW1wbGUgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggbGlic3dy ZXNhbXBsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIFNXUkVTQU1QTEVfU1dSRVNBTVBMRV9ICisr I2RlZmluZSBTV1JFU0FNUExFX1NXUkVTQU1QTEVfSAorKworKy8qKgorKyAqIEBmaWxlCisrICog QGluZ3JvdXAgbHN3cgorKyAqIGxpYnN3cmVzYW1wbGUgcHVibGljIGhlYWRlcgorKyAqLworKwor Ky8qKgorKyAqIEBkZWZncm91cCBsc3dyIGxpYnN3cmVzYW1wbGUKKysgKiBAeworKyAqCisrICog QXVkaW8gcmVzYW1wbGluZywgc2FtcGxlIGZvcm1hdCBjb252ZXJzaW9uIGFuZCBtaXhpbmcgbGli cmFyeS4KKysgKgorKyAqIEludGVyYWN0aW9uIHdpdGggbHN3ciBpcyBkb25lIHRocm91Z2ggU3dy Q29udGV4dCwgd2hpY2ggaXMKKysgKiBhbGxvY2F0ZWQgd2l0aCBzd3JfYWxsb2MoKSBvciBzd3Jf YWxsb2Nfc2V0X29wdHMyKCkuIEl0IGlzIG9wYXF1ZSwgc28gYWxsIHBhcmFtZXRlcnMKKysgKiBt dXN0IGJlIHNldCB3aXRoIHRoZSBAcmVmIGF2b3B0aW9ucyBBUEkuCisrICoKKysgKiBUaGUgZmly c3QgdGhpbmcgeW91IHdpbGwgbmVlZCB0byBkbyBpbiBvcmRlciB0byB1c2UgbHN3ciBpcyB0byBh bGxvY2F0ZQorKyAqIFN3ckNvbnRleHQuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBzd3JfYWxsb2Mo KSBvciBzd3JfYWxsb2Nfc2V0X29wdHMyKCkuIElmIHlvdQorKyAqIGFyZSB1c2luZyB0aGUgZm9y bWVyLCB5b3UgbXVzdCBzZXQgb3B0aW9ucyB0aHJvdWdoIHRoZSBAcmVmIGF2b3B0aW9ucyBBUEku CisrICogVGhlIGxhdHRlciBmdW5jdGlvbiBwcm92aWRlcyB0aGUgc2FtZSBmZWF0dXJlLCBidXQg aXQgYWxsb3dzIHlvdSB0byBzZXQgc29tZQorKyAqIGNvbW1vbiBvcHRpb25zIGluIHRoZSBzYW1l IHN0YXRlbWVudC4KKysgKgorKyAqIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZSB3aWxs IHNldHVwIGNvbnZlcnNpb24gZnJvbSBwbGFuYXIgZmxvYXQgc2FtcGxlCisrICogZm9ybWF0IHRv IGludGVybGVhdmVkIHNpZ25lZCAxNi1iaXQgaW50ZWdlciwgZG93bnNhbXBsaW5nIGZyb20gNDhr SHogdG8KKysgKiA0NC4xa0h6IGFuZCBkb3dubWl4aW5nIGZyb20gNS4xIGNoYW5uZWxzIHRvIHN0 ZXJlbyAodXNpbmcgdGhlIGRlZmF1bHQgbWl4aW5nCisrICogbWF0cml4KS4gVGhpcyBpcyB1c2lu ZyB0aGUgc3dyX2FsbG9jKCkgZnVuY3Rpb24uCisrICogQGNvZGUKKysgKiBTd3JDb250ZXh0ICpz d3IgPSBzd3JfYWxsb2MoKTsKKysgKiBhdl9vcHRfc2V0X2NobGF5b3V0KHN3ciwgImluX2NobGF5 b3V0IiwgJihBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMSwgMCk7Cisr ICogYXZfb3B0X3NldF9jaGxheW91dChzd3IsICJvdXRfY2hsYXlvdXQiLCAmKEFWQ2hhbm5lbExh eW91dClBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDApOworKyAqIGF2X29wdF9zZXRfaW50KHN3 ciwgImluX3NhbXBsZV9yYXRlIiwgICAgIDQ4MDAwLCAgICAgICAgICAgICAgICAwKTsKKysgKiBh dl9vcHRfc2V0X2ludChzd3IsICJvdXRfc2FtcGxlX3JhdGUiLCAgICA0NDEwMCwgICAgICAgICAg ICAgICAgMCk7CisrICogYXZfb3B0X3NldF9zYW1wbGVfZm10KHN3ciwgImluX3NhbXBsZV9mbXQi LCAgQVZfU0FNUExFX0ZNVF9GTFRQLCAwKTsKKysgKiBhdl9vcHRfc2V0X3NhbXBsZV9mbXQoc3dy LCAib3V0X3NhbXBsZV9mbXQiLCBBVl9TQU1QTEVfRk1UX1MxNiwgIDApOworKyAqIEBlbmRjb2Rl CisrICoKKysgKiBUaGUgc2FtZSBqb2IgY2FuIGJlIGRvbmUgdXNpbmcgc3dyX2FsbG9jX3NldF9v cHRzMigpIGFzIHdlbGw6CisrICogQGNvZGUKKysgKiBTd3JDb250ZXh0ICpzd3IgPSBOVUxMOwor KyAqIGludCByZXQgPSBzd3JfYWxsb2Nfc2V0X29wdHMyKCZzd3IsICAgICAgICAgLy8gd2UncmUg YWxsb2NhdGluZyBhIG5ldyBjb250ZXh0CisrICogICAgICAgICAgICAgICAgICAgICAgICYoQVZD aGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTywgLy8gb3V0X2NoX2xheW91dAor KyAqICAgICAgICAgICAgICAgICAgICAgICBBVl9TQU1QTEVfRk1UX1MxNiwgICAgLy8gb3V0X3Nh bXBsZV9mbXQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgNDQxMDAsICAgICAgICAgICAgICAg IC8vIG91dF9zYW1wbGVfcmF0ZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAmKEFWQ2hhbm5l bExheW91dClBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQxLCAvLyBpbl9jaF9sYXlvdXQKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9GTFRQLCAgIC8vIGluX3NhbXBsZV9m bXQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgNDgwMDAsICAgICAgICAgICAgICAgIC8vIGlu X3NhbXBsZV9yYXRlCisrICogICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICAvLyBsb2dfb2Zmc2V0CisrICogICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOyAgICAg ICAgICAgICAgICAvLyBsb2dfY3R4CisrICogQGVuZGNvZGUKKysgKgorKyAqIE9uY2UgYWxsIHZh bHVlcyBoYXZlIGJlZW4gc2V0LCBpdCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggc3dyX2luaXQo KS4gSWYKKysgKiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIGNvbnZlcnNpb24gcGFyYW1ldGVycywg eW91IGNhbiBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMKKysgKiB1c2luZyBAcmVmIGF2b3B0aW9ucywg YXMgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBmaXJzdCBleGFtcGxlOyBvciBieSB1c2luZworKyAq IHN3cl9hbGxvY19zZXRfb3B0czIoKSwgYnV0IHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IHRoZSBh bGxvY2F0ZWQgY29udGV4dC4KKysgKiBZb3UgbXVzdCB0aGVuIGNhbGwgc3dyX2luaXQoKSBhZ2Fp bi4KKysgKgorKyAqIFRoZSBjb252ZXJzaW9uIGl0c2VsZiBpcyBkb25lIGJ5IHJlcGVhdGVkbHkg Y2FsbGluZyBzd3JfY29udmVydCgpLgorKyAqIE5vdGUgdGhhdCB0aGUgc2FtcGxlcyBtYXkgZ2V0 IGJ1ZmZlcmVkIGluIHN3ciBpZiB5b3UgcHJvdmlkZSBpbnN1ZmZpY2llbnQKKysgKiBvdXRwdXQg c3BhY2Ugb3IgaWYgc2FtcGxlIHJhdGUgY29udmVyc2lvbiBpcyBkb25lLCB3aGljaCByZXF1aXJl cyAiZnV0dXJlIgorKyAqIHNhbXBsZXMuIFNhbXBsZXMgdGhhdCBkbyBub3QgcmVxdWlyZSBmdXR1 cmUgaW5wdXQgY2FuIGJlIHJldHJpZXZlZCBhdCBhbnkKKysgKiB0aW1lIGJ5IHVzaW5nIHN3cl9j b252ZXJ0KCkgKGluX2NvdW50IGNhbiBiZSBzZXQgdG8gMCkuCisrICogQXQgdGhlIGVuZCBvZiBj b252ZXJzaW9uIHRoZSByZXNhbXBsaW5nIGJ1ZmZlciBjYW4gYmUgZmx1c2hlZCBieSBjYWxsaW5n CisrICogc3dyX2NvbnZlcnQoKSB3aXRoIE5VTEwgaW4gYW5kIDAgaW5fY291bnQuCisrICoKKysg KiBUaGUgc2FtcGxlcyB1c2VkIGluIHRoZSBjb252ZXJzaW9uIHByb2Nlc3MgY2FuIGJlIG1hbmFn ZWQgd2l0aCB0aGUgbGliYXZ1dGlsCisrICogQHJlZiBsYXZ1X3NhbXBtYW5pcCAic2FtcGxlcyBt YW5pcHVsYXRpb24iIEFQSSwgaW5jbHVkaW5nIGF2X3NhbXBsZXNfYWxsb2MoKQorKyAqIGZ1bmN0 aW9uIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLgorKyAqCisrICogVGhlIGRlbGF5IGJl dHdlZW4gaW5wdXQgYW5kIG91dHB1dCwgY2FuIGF0IGFueSB0aW1lIGJlIGZvdW5kIGJ5IHVzaW5n CisrICogc3dyX2dldF9kZWxheSgpLgorKyAqCisrICogVGhlIGZvbGxvd2luZyBjb2RlIGRlbW9u c3RyYXRlcyB0aGUgY29udmVyc2lvbiBsb29wIGFzc3VtaW5nIHRoZSBwYXJhbWV0ZXJzCisrICog ZnJvbSBhYm92ZSBhbmQgY2FsbGVyLWRlZmluZWQgZnVuY3Rpb25zIGdldF9pbnB1dCgpIGFuZCBo YW5kbGVfb3V0cHV0KCk6CisrICogQGNvZGUKKysgKiB1aW50OF90ICoqaW5wdXQ7CisrICogaW50 IGluX3NhbXBsZXM7CisrICoKKysgKiB3aGlsZSAoZ2V0X2lucHV0KCZpbnB1dCwgJmluX3NhbXBs ZXMpKSB7CisrICogICAgIHVpbnQ4X3QgKm91dHB1dDsKKysgKiAgICAgaW50IG91dF9zYW1wbGVz ID0gYXZfcmVzY2FsZV9ybmQoc3dyX2dldF9kZWxheShzd3IsIDQ4MDAwKSArCisrICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3NhbXBsZXMsIDQ0MTAwLCA0ODAwMCwg QVZfUk9VTkRfVVApOworKyAqICAgICBhdl9zYW1wbGVzX2FsbG9jKCZvdXRwdXQsIE5VTEwsIDIs IG91dF9zYW1wbGVzLAorKyAqICAgICAgICAgICAgICAgICAgICAgIEFWX1NBTVBMRV9GTVRfUzE2 LCAwKTsKKysgKiAgICAgb3V0X3NhbXBsZXMgPSBzd3JfY29udmVydChzd3IsICZvdXRwdXQsIG91 dF9zYW1wbGVzLAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dCwgaW5fc2FtcGxlcyk7CisrICogICAgIGhhbmRsZV9vdXRwdXQob3V0cHV0LCBvdXRfc2FtcGxl cyk7CisrICogICAgIGF2X2ZyZWVwKCZvdXRwdXQpOworKyAqIH0KKysgKiBAZW5kY29kZQorKyAq CisrICogV2hlbiB0aGUgY29udmVyc2lvbiBpcyBmaW5pc2hlZCwgdGhlIGNvbnZlcnNpb24KKysg KiBjb250ZXh0IGFuZCBldmVyeXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBpdCBtdXN0IGJlIGZyZWVk IHdpdGggc3dyX2ZyZWUoKS4KKysgKiBBIHN3cl9jbG9zZSgpIGZ1bmN0aW9uIGlzIGFsc28gYXZh aWxhYmxlLCBidXQgaXQgZXhpc3RzIG1haW5seSBmb3IKKysgKiBjb21wYXRpYmlsaXR5IHdpdGgg bGliYXZyZXNhbXBsZSwgYW5kIGlzIG5vdCByZXF1aXJlZCB0byBiZSBjYWxsZWQuCisrICoKKysg KiBUaGVyZSB3aWxsIGJlIG5vIG1lbW9yeSBsZWFrIGlmIHRoZSBkYXRhIGlzIG5vdCBjb21wbGV0 ZWx5IGZsdXNoZWQgYmVmb3JlCisrICogc3dyX2ZyZWUoKS4KKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW50Lmg+CisrI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oIgorKyNpbmNs dWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL3NhbXBsZWZtdC5o IgorKworKyNpbmNsdWRlICJsaWJzd3Jlc2FtcGxlL3ZlcnNpb25fbWFqb3IuaCIKKysjaWZuZGVm IEhBVkVfQVZfQ09ORklHX0gKKysvKiBXaGVuIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGZmbXBl ZyBidWlsZCwgb25seSBpbmNsdWRlIHRoZSBtYWpvciB2ZXJzaW9uCisrICogdG8gYXZvaWQgdW5u ZWNlc3NhcnkgcmVidWlsZHMuIFdoZW4gaW5jbHVkZWQgZXh0ZXJuYWxseSwga2VlcCBpbmNsdWRp bmcKKysgKiB0aGUgZnVsbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworKyNpbmNsdWRlICJsaWJz d3Jlc2FtcGxlL3ZlcnNpb24uaCIKKysjZW5kaWYKKysKKysvKioKKysgKiBAbmFtZSBPcHRpb24g Y29uc3RhbnRzCisrICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciB0aGUgQHJlZiBhdm9w dGlvbnMgaW50ZXJmYWNlIGZvciBsc3dyLgorKyAqIEB7CisrICoKKysgKi8KKysKKysjZGVmaW5l IFNXUl9GTEFHX1JFU0FNUExFIDEgLy8vPCBGb3JjZSByZXNhbXBsaW5nIGV2ZW4gaWYgZXF1YWwg c2FtcGxlIHJhdGUKKysvL1RPRE8gdXNlIGludCByZXNhbXBsZSA/CisrLy9sb25nIHRlcm0gVE9E TyBjYW4gd2UgZW5hYmxlIHRoaXMgZHluYW1pY2FsbHk/CisrCisrLyoqIERpdGhlcmluZyBhbGdv cml0aG1zICovCisrZW51bSBTd3JEaXRoZXJUeXBlIHsKKysgICAgU1dSX0RJVEhFUl9OT05FID0g MCwKKysgICAgU1dSX0RJVEhFUl9SRUNUQU5HVUxBUiwKKysgICAgU1dSX0RJVEhFUl9UUklBTkdV TEFSLAorKyAgICBTV1JfRElUSEVSX1RSSUFOR1VMQVJfSElHSFBBU1MsCisrCisrICAgIFNXUl9E SVRIRVJfTlMgPSA2NCwgICAgICAgICAvLy88IG5vdCBwYXJ0IG9mIEFQSS9BQkkKKysgICAgU1dS X0RJVEhFUl9OU19MSVBTSElUWiwKKysgICAgU1dSX0RJVEhFUl9OU19GX1dFSUdIVEVELAorKyAg ICBTV1JfRElUSEVSX05TX01PRElGSUVEX0VfV0VJR0hURUQsCisrICAgIFNXUl9ESVRIRVJfTlNf SU1QUk9WRURfRV9XRUlHSFRFRCwKKysgICAgU1dSX0RJVEhFUl9OU19TSElCQVRBLAorKyAgICBT V1JfRElUSEVSX05TX0xPV19TSElCQVRBLAorKyAgICBTV1JfRElUSEVSX05TX0hJR0hfU0hJQkFU QSwKKysgICAgU1dSX0RJVEhFUl9OQiwgICAgICAgICAgICAgIC8vLzwgbm90IHBhcnQgb2YgQVBJ L0FCSQorK307CisrCisrLyoqIFJlc2FtcGxpbmcgRW5naW5lcyAqLworK2VudW0gU3dyRW5naW5l IHsKKysgICAgU1dSX0VOR0lORV9TV1IsICAgICAgICAgICAgIC8qKjwgU1cgUmVzYW1wbGVyICov CisrICAgIFNXUl9FTkdJTkVfU09YUiwgICAgICAgICAgICAvKio8IFNvWCBSZXNhbXBsZXIgKi8K KysgICAgU1dSX0VOR0lORV9OQiwgICAgICAgICAgICAgIC8vLzwgbm90IHBhcnQgb2YgQVBJL0FC SQorK307CisrCisrLyoqIFJlc2FtcGxpbmcgRmlsdGVyIFR5cGVzICovCisrZW51bSBTd3JGaWx0 ZXJUeXBlIHsKKysgICAgU1dSX0ZJTFRFUl9UWVBFX0NVQklDLCAgICAgICAgICAgICAgLyoqPCBD dWJpYyAqLworKyAgICBTV1JfRklMVEVSX1RZUEVfQkxBQ0tNQU5fTlVUVEFMTCwgICAvKio8IEJs YWNrbWFuIE51dHRhbGwgd2luZG93ZWQgc2luYyAqLworKyAgICBTV1JfRklMVEVSX1RZUEVfS0FJ U0VSLCAgICAgICAgICAgICAvKio8IEthaXNlciB3aW5kb3dlZCBzaW5jICovCisrfTsKKysKKysv KioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIFRoZSBsaWJzd3Jlc2FtcGxlIGNvbnRleHQu IFVubGlrZSBsaWJhdmNvZGVjIGFuZCBsaWJhdmZvcm1hdCwgdGhpcyBzdHJ1Y3R1cmUKKysgKiBp cyBvcGFxdWUuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3Ugd291bGQgbGlrZSB0byBzZXQgb3B0aW9u cywgeW91IG11c3QgdXNlCisrICogdGhlIEByZWYgYXZvcHRpb25zIEFQSSBhbmQgY2Fubm90IGRp cmVjdGx5IHNldCB2YWx1ZXMgdG8gbWVtYmVycyBvZiB0aGUKKysgKiBzdHJ1Y3R1cmUuCisrICov CisrdHlwZWRlZiBzdHJ1Y3QgU3dyQ29udGV4dCBTd3JDb250ZXh0OworKworKy8qKgorKyAqIEdl dCB0aGUgQVZDbGFzcyBmb3IgU3dyQ29udGV4dC4gSXQgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRp b24gd2l0aAorKyAqIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogZm9yIGV4YW1pbmluZyBvcHRpb25z LgorKyAqCisrICogQHNlZSBhdl9vcHRfZmluZCgpLgorKyAqIEByZXR1cm4gdGhlIEFWQ2xhc3Mg b2YgU3dyQ29udGV4dAorKyAqLworK2NvbnN0IEFWQ2xhc3MgKnN3cl9nZXRfY2xhc3Modm9pZCk7 CisrCisrLyoqCisrICogQG5hbWUgU3dyQ29udGV4dCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKysg KiBAeworKyAqLworKworKy8qKgorKyAqIEFsbG9jYXRlIFN3ckNvbnRleHQuCisrICoKKysgKiBJ ZiB5b3UgdXNlIHRoaXMgZnVuY3Rpb24geW91IHdpbGwgbmVlZCB0byBzZXQgdGhlIHBhcmFtZXRl cnMgKG1hbnVhbGx5IG9yCisrICogd2l0aCBzd3JfYWxsb2Nfc2V0X29wdHMyKCkpIGJlZm9yZSBj YWxsaW5nIHN3cl9pbml0KCkuCisrICoKKysgKiBAc2VlIHN3cl9hbGxvY19zZXRfb3B0czIoKSwg c3dyX2luaXQoKSwgc3dyX2ZyZWUoKQorKyAqIEByZXR1cm4gTlVMTCBvbiBlcnJvciwgYWxsb2Nh dGVkIGNvbnRleHQgb3RoZXJ3aXNlCisrICovCisrc3RydWN0IFN3ckNvbnRleHQgKnN3cl9hbGxv Yyh2b2lkKTsKKysKKysvKioKKysgKiBJbml0aWFsaXplIGNvbnRleHQgYWZ0ZXIgdXNlciBwYXJh bWV0ZXJzIGhhdmUgYmVlbiBzZXQuCisrICogQG5vdGUgVGhlIGNvbnRleHQgbXVzdCBiZSBjb25m aWd1cmVkIHVzaW5nIHRoZSBBVk9wdGlvbiBBUEkuCisrICoKKysgKiBAc2VlIGF2X29wdF9zZXRf aW50KCkKKysgKiBAc2VlIGF2X29wdF9zZXRfZGljdCgpCisrICoKKysgKiBAcGFyYW1baW4sb3V0 XSAgIHMgU3dyIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorKyAqIEByZXR1cm4gQVZFUlJPUiBlcnJv ciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKysgKi8KKytpbnQgc3dyX2luaXQoc3RydWN0IFN3 ckNvbnRleHQgKnMpOworKworKy8qKgorKyAqIENoZWNrIHdoZXRoZXIgYW4gc3dyIGNvbnRleHQg aGFzIGJlZW4gaW5pdGlhbGl6ZWQgb3Igbm90LgorKyAqCisrICogQHBhcmFtW2luXSAgICAgICBz IFN3ciBjb250ZXh0IHRvIGNoZWNrCisrICogQHNlZSBzd3JfaW5pdCgpCisrICogQHJldHVybiBw b3NpdGl2ZSBpZiBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCwgMCBpZiBub3QgaW5pdGlhbGl6ZWQK KysgKi8KKytpbnQgc3dyX2lzX2luaXRpYWxpemVkKHN0cnVjdCBTd3JDb250ZXh0ICpzKTsKKysK KysvKioKKysgKiBBbGxvY2F0ZSBTd3JDb250ZXh0IGlmIG5lZWRlZCBhbmQgc2V0L3Jlc2V0IGNv bW1vbiBwYXJhbWV0ZXJzLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXF1aXJl ICpwcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBzd3JfYWxsb2MoKS4gT24gdGhlCisrICogb3RoZXIg aGFuZCwgc3dyX2FsbG9jKCkgY2FuIHVzZSBzd3JfYWxsb2Nfc2V0X29wdHMyKCkgdG8gc2V0IHRo ZSBwYXJhbWV0ZXJzCisrICogb24gdGhlIGFsbG9jYXRlZCBjb250ZXh0LgorKyAqCisrICogQHBh cmFtIHBzICAgICAgICAgICAgICBQb2ludGVyIHRvIGFuIGV4aXN0aW5nIFN3ciBjb250ZXh0IGlm IGF2YWlsYWJsZSwgb3IgdG8gTlVMTCBpZiBub3QuCisrICogICAgICAgICAgICAgICAgICAgICAg ICBPbiBzdWNjZXNzLCAqcHMgd2lsbCBiZSBzZXQgdG8gdGhlIGFsbG9jYXRlZCBjb250ZXh0Lgor KyAqIEBwYXJhbSBvdXRfY2hfbGF5b3V0ICAgb3V0cHV0IGNoYW5uZWwgbGF5b3V0IChlLmcuIEFW X0NIQU5ORUxfTEFZT1VUXyopCisrICogQHBhcmFtIG91dF9zYW1wbGVfZm10ICBvdXRwdXQgc2Ft cGxlIGZvcm1hdCAoQVZfU0FNUExFX0ZNVF8qKS4KKysgKiBAcGFyYW0gb3V0X3NhbXBsZV9yYXRl IG91dHB1dCBzYW1wbGUgcmF0ZSAoZnJlcXVlbmN5IGluIEh6KQorKyAqIEBwYXJhbSBpbl9jaF9s YXlvdXQgICAgaW5wdXQgY2hhbm5lbCBsYXlvdXQgKGUuZy4gQVZfQ0hBTk5FTF9MQVlPVVRfKikK KysgKiBAcGFyYW0gaW5fc2FtcGxlX2ZtdCAgIGlucHV0IHNhbXBsZSBmb3JtYXQgKEFWX1NBTVBM RV9GTVRfKikuCisrICogQHBhcmFtIGluX3NhbXBsZV9yYXRlICBpbnB1dCBzYW1wbGUgcmF0ZSAo ZnJlcXVlbmN5IGluIEh6KQorKyAqIEBwYXJhbSBsb2dfb2Zmc2V0ICAgICAgbG9nZ2luZyBsZXZl bCBvZmZzZXQKKysgKiBAcGFyYW0gbG9nX2N0eCAgICAgICAgIHBhcmVudCBsb2dnaW5nIGNvbnRl eHQsIGNhbiBiZSBOVUxMCisrICoKKysgKiBAc2VlIHN3cl9pbml0KCksIHN3cl9mcmVlKCkKKysg KiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZXJyb3Iu CisrICogICAgICAgICBPbiBlcnJvciwgdGhlIFN3ciBjb250ZXh0IGlzIGZyZWVkIGFuZCAqcHMg c2V0IHRvIE5VTEwuCisrICovCisraW50IHN3cl9hbGxvY19zZXRfb3B0czIoc3RydWN0IFN3ckNv bnRleHQgKipwcywKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkNoYW5uZWxMYXlv dXQgKm91dF9jaF9sYXlvdXQsIGVudW0gQVZTYW1wbGVGb3JtYXQgb3V0X3NhbXBsZV9mbXQsIGlu dCBvdXRfc2FtcGxlX3JhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZDaGFu bmVsTGF5b3V0ICppbl9jaF9sYXlvdXQsIGVudW0gQVZTYW1wbGVGb3JtYXQgIGluX3NhbXBsZV9m bXQsIGludCAgaW5fc2FtcGxlX3JhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxv Z19vZmZzZXQsIHZvaWQgKmxvZ19jdHgpOworKy8qKgorKyAqIEB9CisrICoKKysgKiBAbmFtZSBT d3JDb250ZXh0IGRlc3RydWN0b3IgZnVuY3Rpb25zCisrICogQHsKKysgKi8KKysKKysvKioKKysg KiBGcmVlIHRoZSBnaXZlbiBTd3JDb250ZXh0IGFuZCBzZXQgdGhlIHBvaW50ZXIgdG8gTlVMTC4K KysgKgorKyAqIEBwYXJhbVtpbl0gcyBhIHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIFN3ciBjb250 ZXh0CisrICovCisrdm9pZCBzd3JfZnJlZShzdHJ1Y3QgU3dyQ29udGV4dCAqKnMpOworKworKy8q KgorKyAqIENsb3NlcyB0aGUgY29udGV4dCBzbyB0aGF0IHN3cl9pc19pbml0aWFsaXplZCgpIHJl dHVybnMgMC4KKysgKgorKyAqIFRoZSBjb250ZXh0IGNhbiBiZSBicm91Z2h0IGJhY2sgdG8gbGlm ZSBieSBydW5uaW5nIHN3cl9pbml0KCksCisrICogc3dyX2luaXQoKSBjYW4gYWxzbyBiZSB1c2Vk IHdpdGhvdXQgc3dyX2Nsb3NlKCkuCisrICogVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgcHJvdmlk ZWQgZm9yIHNpbXBsaWZ5aW5nIHRoZSB1c2VjYXNlCisrICogd2hlcmUgb25lIHRyaWVzIHRvIHN1 cHBvcnQgbGliYXZyZXNhbXBsZSBhbmQgbGlic3dyZXNhbXBsZS4KKysgKgorKyAqIEBwYXJhbVtp bixvdXRdIHMgU3dyIGNvbnRleHQgdG8gYmUgY2xvc2VkCisrICovCisrdm9pZCBzd3JfY2xvc2Uo c3RydWN0IFN3ckNvbnRleHQgKnMpOworKworKy8qKgorKyAqIEB9CisrICoKKysgKiBAbmFtZSBD b3JlIGNvbnZlcnNpb24gZnVuY3Rpb25zCisrICogQHsKKysgKi8KKysKKysvKiogQ29udmVydCBh dWRpby4KKysgKgorKyAqIGluIGFuZCBpbl9jb3VudCBjYW4gYmUgc2V0IHRvIDAgdG8gZmx1c2gg dGhlIGxhc3QgZmV3IHNhbXBsZXMgb3V0IGF0IHRoZQorKyAqIGVuZC4KKysgKgorKyAqIElmIG1v cmUgaW5wdXQgaXMgcHJvdmlkZWQgdGhhbiBvdXRwdXQgc3BhY2UsIHRoZW4gdGhlIGlucHV0IHdp bGwgYmUgYnVmZmVyZWQuCisrICogWW91IGNhbiBhdm9pZCB0aGlzIGJ1ZmZlcmluZyBieSB1c2lu ZyBzd3JfZ2V0X291dF9zYW1wbGVzKCkgdG8gcmV0cmlldmUgYW4KKysgKiB1cHBlciBib3VuZCBv biB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIG91dHB1dCBzYW1wbGVzIGZvciB0aGUgZ2l2ZW4gbnVt YmVyIG9mCisrICogaW5wdXQgc2FtcGxlcy4gQ29udmVyc2lvbiB3aWxsIHJ1biBkaXJlY3RseSB3 aXRob3V0IGNvcHlpbmcgd2hlbmV2ZXIgcG9zc2libGUuCisrICoKKysgKiBAcGFyYW0gcyAgICAg ICAgIGFsbG9jYXRlZCBTd3IgY29udGV4dCwgd2l0aCBwYXJhbWV0ZXJzIHNldAorKyAqIEBwYXJh bSBvdXQgICAgICAgb3V0cHV0IGJ1ZmZlcnMsIG9ubHkgdGhlIGZpcnN0IG9uZSBuZWVkIGJlIHNl dCBpbiBjYXNlIG9mIHBhY2tlZCBhdWRpbworKyAqIEBwYXJhbSBvdXRfY291bnQgYW1vdW50IG9m IHNwYWNlIGF2YWlsYWJsZSBmb3Igb3V0cHV0IGluIHNhbXBsZXMgcGVyIGNoYW5uZWwKKysgKiBA cGFyYW0gaW4gICAgICAgIGlucHV0IGJ1ZmZlcnMsIG9ubHkgdGhlIGZpcnN0IG9uZSBuZWVkIHRv IGJlIHNldCBpbiBjYXNlIG9mIHBhY2tlZCBhdWRpbworKyAqIEBwYXJhbSBpbl9jb3VudCAgbnVt YmVyIG9mIGlucHV0IHNhbXBsZXMgYXZhaWxhYmxlIGluIG9uZSBjaGFubmVsCisrICoKKysgKiBA cmV0dXJuIG51bWJlciBvZiBzYW1wbGVzIG91dHB1dCBwZXIgY2hhbm5lbCwgbmVnYXRpdmUgdmFs dWUgb24gZXJyb3IKKysgKi8KKytpbnQgc3dyX2NvbnZlcnQoc3RydWN0IFN3ckNvbnRleHQgKnMs IHVpbnQ4X3QgKiBjb25zdCAqb3V0LCBpbnQgb3V0X2NvdW50LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIGNvbnN0ICppbiAsIGludCBpbl9jb3VudCk7 CisrCisrLyoqCisrICogQ29udmVydCB0aGUgbmV4dCB0aW1lc3RhbXAgZnJvbSBpbnB1dCB0byBv dXRwdXQKKysgKiB0aW1lc3RhbXBzIGFyZSBpbiAxLyhpbl9zYW1wbGVfcmF0ZSAqIG91dF9zYW1w bGVfcmF0ZSkgdW5pdHMuCisrICoKKysgKiBAbm90ZSBUaGVyZSBhcmUgMiBzbGlnaHRseSBkaWZm ZXJlbnRseSBiZWhhdmluZyBtb2Rlcy4KKysgKiAgICAgICBAbGkgV2hlbiBhdXRvbWF0aWMgdGlt ZXN0YW1wIGNvbXBlbnNhdGlvbiBpcyBub3QgdXNlZCwgKG1pbl9jb21wZW5zYXRpb24gPj0gRkxU X01BWCkKKysgKiAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlIHRpbWVzdGFtcHMgd2lsbCBiZSBw YXNzZWQgdGhyb3VnaCB3aXRoIGRlbGF5cyBjb21wZW5zYXRlZAorKyAqICAgICAgIEBsaSBXaGVu IGF1dG9tYXRpYyB0aW1lc3RhbXAgY29tcGVuc2F0aW9uIGlzIHVzZWQsIChtaW5fY29tcGVuc2F0 aW9uIDwgRkxUX01BWCkKKysgKiAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlIHRoZSBvdXRwdXQg dGltZXN0YW1wcyB3aWxsIG1hdGNoIG91dHB1dCBzYW1wbGUgbnVtYmVycy4KKysgKiAgICAgICAg ICAgICAgU2VlIGZmbXBlZy1yZXNhbXBsZXIoMSkgZm9yIHRoZSB0d28gbW9kZXMgb2YgY29tcGVu c2F0aW9uLgorKyAqCisrICogQHBhcmFtW2luXSBzICAgICBpbml0aWFsaXplZCBTd3IgY29udGV4 dAorKyAqIEBwYXJhbVtpbl0gcHRzICAgdGltZXN0YW1wIGZvciB0aGUgbmV4dCBpbnB1dCBzYW1w bGUsIElOVDY0X01JTiBpZiB1bmtub3duCisrICogQHNlZSBzd3Jfc2V0X2NvbXBlbnNhdGlvbigp LCBzd3JfZHJvcF9vdXRwdXQoKSwgYW5kIHN3cl9pbmplY3Rfc2lsZW5jZSgpIGFyZQorKyAqICAg ICAgZnVuY3Rpb24gdXNlZCBpbnRlcm5hbGx5IGZvciB0aW1lc3RhbXAgY29tcGVuc2F0aW9uLgor KyAqIEByZXR1cm4gdGhlIG91dHB1dCB0aW1lc3RhbXAgZm9yIHRoZSBuZXh0IG91dHB1dCBzYW1w bGUKKysgKi8KKytpbnQ2NF90IHN3cl9uZXh0X3B0cyhzdHJ1Y3QgU3dyQ29udGV4dCAqcywgaW50 NjRfdCBwdHMpOworKworKy8qKgorKyAqIEB9CisrICoKKysgKiBAbmFtZSBMb3ctbGV2ZWwgb3B0 aW9uIHNldHRpbmcgZnVuY3Rpb25zCisrICogVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgYSBtZWFu cyB0byBzZXQgbG93LWxldmVsIG9wdGlvbnMgdGhhdCBpcyBub3QgcG9zc2libGUKKysgKiB3aXRo IHRoZSBBVk9wdGlvbiBBUEkuCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBBY3RpdmF0ZSBy ZXNhbXBsaW5nIGNvbXBlbnNhdGlvbiAoInNvZnQiIGNvbXBlbnNhdGlvbikuIFRoaXMgZnVuY3Rp b24gaXMKKysgKiBpbnRlcm5hbGx5IGNhbGxlZCB3aGVuIG5lZWRlZCBpbiBzd3JfbmV4dF9wdHMo KS4KKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHMgICAgICAgICAgICAgYWxsb2NhdGVkIFN3ciBj b250ZXh0LiBJZiBpdCBpcyBub3QgaW5pdGlhbGl6ZWQsCisrICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvciBTV1JfRkxBR19SRVNBTVBMRSBpcyBub3Qgc2V0LCBzd3JfaW5pdCgpIGlz CisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgZmxhZyBz ZXQuCisrICogQHBhcmFtW2luXSAgICAgc2FtcGxlX2RlbHRhICBkZWx0YSBpbiBQVFMgcGVyIHNh bXBsZQorKyAqIEBwYXJhbVtpbl0gICAgIGNvbXBlbnNhdGlvbl9kaXN0YW5jZSBudW1iZXIgb2Yg c2FtcGxlcyB0byBjb21wZW5zYXRlIGZvcgorKyAqIEByZXR1cm4gICAgPj0gMCBvbiBzdWNjZXNz LCBBVkVSUk9SIGVycm9yIGNvZGVzIGlmOgorKyAqICAgICAgICAgICAgQGxpIEBjIHMgaXMgTlVM TCwKKysgKiAgICAgICAgICAgIEBsaSBAYyBjb21wZW5zYXRpb25fZGlzdGFuY2UgaXMgbGVzcyB0 aGFuIDAsCisrICogICAgICAgICAgICBAbGkgQGMgY29tcGVuc2F0aW9uX2Rpc3RhbmNlIGlzIDAg YnV0IHNhbXBsZV9kZWx0YSBpcyBub3QsCisrICogICAgICAgICAgICBAbGkgY29tcGVuc2F0aW9u IHVuc3VwcG9ydGVkIGJ5IHJlc2FtcGxlciwgb3IKKysgKiAgICAgICAgICAgIEBsaSBzd3JfaW5p dCgpIGZhaWxzIHdoZW4gY2FsbGVkLgorKyAqLworK2ludCBzd3Jfc2V0X2NvbXBlbnNhdGlvbihz dHJ1Y3QgU3dyQ29udGV4dCAqcywgaW50IHNhbXBsZV9kZWx0YSwgaW50IGNvbXBlbnNhdGlvbl9k aXN0YW5jZSk7CisrCisrLyoqCisrICogU2V0IGEgY3VzdG9taXplZCBpbnB1dCBjaGFubmVsIG1h cHBpbmcuCisrICoKKysgKiBAcGFyYW1baW4sb3V0XSBzICAgICAgICAgICBhbGxvY2F0ZWQgU3dy IGNvbnRleHQsIG5vdCB5ZXQgaW5pdGlhbGl6ZWQKKysgKiBAcGFyYW1baW5dICAgICBjaGFubmVs X21hcCBjdXN0b21pemVkIGlucHV0IGNoYW5uZWwgbWFwcGluZyAoYXJyYXkgb2YgY2hhbm5lbAor KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZXMsIC0xIGZvciBhIG11dGVkIGNo YW5uZWwpCisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MsIG9yIEFWRVJST1IgZXJyb3IgY29k ZSBpbiBjYXNlIG9mIGZhaWx1cmUuCisrICovCisraW50IHN3cl9zZXRfY2hhbm5lbF9tYXBwaW5n KHN0cnVjdCBTd3JDb250ZXh0ICpzLCBjb25zdCBpbnQgKmNoYW5uZWxfbWFwKTsKKysKKysvKioK KysgKiBHZW5lcmF0ZSBhIGNoYW5uZWwgbWl4aW5nIG1hdHJpeC4KKysgKgorKyAqIFRoaXMgZnVu Y3Rpb24gaXMgdGhlIG9uZSB1c2VkIGludGVybmFsbHkgYnkgbGlic3dyZXNhbXBsZSBmb3IgYnVp bGRpbmcgdGhlCisrICogZGVmYXVsdCBtaXhpbmcgbWF0cml4LiBJdCBpcyBtYWRlIHB1YmxpYyBq dXN0IGFzIGEgdXRpbGl0eSBmdW5jdGlvbiBmb3IKKysgKiBidWlsZGluZyBjdXN0b20gbWF0cmlj ZXMuCisrICoKKysgKiBAcGFyYW0gaW5fbGF5b3V0ICAgICAgICAgICBpbnB1dCBjaGFubmVsIGxh eW91dAorKyAqIEBwYXJhbSBvdXRfbGF5b3V0ICAgICAgICAgIG91dHB1dCBjaGFubmVsIGxheW91 dAorKyAqIEBwYXJhbSBjZW50ZXJfbWl4X2xldmVsICAgIG1peCBsZXZlbCBmb3IgdGhlIGNlbnRl ciBjaGFubmVsCisrICogQHBhcmFtIHN1cnJvdW5kX21peF9sZXZlbCAgbWl4IGxldmVsIGZvciB0 aGUgc3Vycm91bmQgY2hhbm5lbChzKQorKyAqIEBwYXJhbSBsZmVfbWl4X2xldmVsICAgICAgIG1p eCBsZXZlbCBmb3IgdGhlIGxvdy1mcmVxdWVuY3kgZWZmZWN0cyBjaGFubmVsCisrICogQHBhcmFt IHJlbWF0cml4X21heHZhbCAgICAgaWYgMS4wLCBjb2VmZmljaWVudHMgd2lsbCBiZSBub3JtYWxp emVkIHRvIHByZXZlbnQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy4g aWYgSU5UX01BWCwgY29lZmZpY2llbnRzIHdpbGwgbm90IGJlCisrICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm9ybWFsaXplZC4KKysgKiBAcGFyYW1bb3V0XSBtYXRyaXggICAgICAgICBt aXhpbmcgY29lZmZpY2llbnRzOyBtYXRyaXhbaSArIHN0cmlkZSAqIG9dIGlzCisrICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIHdlaWdodCBvZiBpbnB1dCBjaGFubmVsIGkgaW4gb3V0 cHV0IGNoYW5uZWwgby4KKysgKiBAcGFyYW0gc3RyaWRlICAgICAgICAgICAgICBkaXN0YW5jZSBi ZXR3ZWVuIGFkamFjZW50IGlucHV0IGNoYW5uZWxzIGluIHRoZQorKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1hdHJpeCBhcnJheQorKyAqIEBwYXJhbSBtYXRyaXhfZW5jb2RpbmcgICAg IG1hdHJpeGVkIHN0ZXJlbyBkb3dubWl4IG1vZGUgKGUuZy4gZHBsaWkpCisrICogQHBhcmFtIGxv Z19jdHggICAgICAgICAgICAgcGFyZW50IGxvZ2dpbmcgY29udGV4dCwgY2FuIGJlIE5VTEwKKysg KiBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIEFWRVJS T1IgY29kZSBvbiBmYWlsdXJlCisrICovCisraW50IHN3cl9idWlsZF9tYXRyaXgyKGNvbnN0IEFW Q2hhbm5lbExheW91dCAqaW5fbGF5b3V0LCBjb25zdCBBVkNoYW5uZWxMYXlvdXQgKm91dF9sYXlv dXQsCisrICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjZW50ZXJfbWl4X2xldmVsLCBkb3Vi bGUgc3Vycm91bmRfbWl4X2xldmVsLAorKyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGZl X21peF9sZXZlbCwgZG91YmxlIG1heHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl IHJlbWF0cml4X3ZvbHVtZSwgZG91YmxlICptYXRyaXgsCisrICAgICAgICAgICAgICAgICAgICAg IHB0cmRpZmZfdCBzdHJpZGUsIGVudW0gQVZNYXRyaXhFbmNvZGluZyBtYXRyaXhfZW5jb2Rpbmcs CisrICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmxvZ19jb250ZXh0KTsKKysKKysvKioKKysg KiBTZXQgYSBjdXN0b21pemVkIHJlbWl4IG1hdHJpeC4KKysgKgorKyAqIEBwYXJhbSBzICAgICAg IGFsbG9jYXRlZCBTd3IgY29udGV4dCwgbm90IHlldCBpbml0aWFsaXplZAorKyAqIEBwYXJhbSBt YXRyaXggIHJlbWl4IGNvZWZmaWNpZW50czsgbWF0cml4W2kgKyBzdHJpZGUgKiBvXSBpcworKyAq ICAgICAgICAgICAgICAgIHRoZSB3ZWlnaHQgb2YgaW5wdXQgY2hhbm5lbCBpIGluIG91dHB1dCBj aGFubmVsIG8KKysgKiBAcGFyYW0gc3RyaWRlICBvZmZzZXQgYmV0d2VlbiBsaW5lcyBvZiB0aGUg bWF0cml4CisrICogQHJldHVybiAgPj0gMCBvbiBzdWNjZXNzLCBvciBBVkVSUk9SIGVycm9yIGNv ZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorKyAqLworK2ludCBzd3Jfc2V0X21hdHJpeChzdHJ1Y3Qg U3dyQ29udGV4dCAqcywgY29uc3QgZG91YmxlICptYXRyaXgsIGludCBzdHJpZGUpOworKworKy8q KgorKyAqIEB9CisrICoKKysgKiBAbmFtZSBTYW1wbGUgaGFuZGxpbmcgZnVuY3Rpb25zCisrICog QHsKKysgKi8KKysKKysvKioKKysgKiBEcm9wcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBvdXRw dXQgc2FtcGxlcy4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24sIGFsb25nIHdpdGggc3dyX2luamVj dF9zaWxlbmNlKCksIGlzIGNhbGxlZCBieSBzd3JfbmV4dF9wdHMoKQorKyAqIGlmIG5lZWRlZCBm b3IgImhhcmQiIGNvbXBlbnNhdGlvbi4KKysgKgorKyAqIEBwYXJhbSBzICAgICBhbGxvY2F0ZWQg U3dyIGNvbnRleHQKKysgKiBAcGFyYW0gY291bnQgbnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgZHJv cHBlZAorKyAqCisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgQVZF UlJPUiBjb2RlIG9uIGZhaWx1cmUKKysgKi8KKytpbnQgc3dyX2Ryb3Bfb3V0cHV0KHN0cnVjdCBT d3JDb250ZXh0ICpzLCBpbnQgY291bnQpOworKworKy8qKgorKyAqIEluamVjdHMgdGhlIHNwZWNp ZmllZCBudW1iZXIgb2Ygc2lsZW5jZSBzYW1wbGVzLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiwg YWxvbmcgd2l0aCBzd3JfZHJvcF9vdXRwdXQoKSwgaXMgY2FsbGVkIGJ5IHN3cl9uZXh0X3B0cygp CisrICogaWYgbmVlZGVkIGZvciAiaGFyZCIgY29tcGVuc2F0aW9uLgorKyAqCisrICogQHBhcmFt IHMgICAgIGFsbG9jYXRlZCBTd3IgY29udGV4dAorKyAqIEBwYXJhbSBjb3VudCBudW1iZXIgb2Yg c2FtcGxlcyB0byBiZSBkcm9wcGVkCisrICoKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2Vzcywg b3IgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAqLworK2ludCBzd3JfaW5q ZWN0X3NpbGVuY2Uoc3RydWN0IFN3ckNvbnRleHQgKnMsIGludCBjb3VudCk7CisrCisrLyoqCisr ICogR2V0cyB0aGUgZGVsYXkgdGhlIG5leHQgaW5wdXQgc2FtcGxlIHdpbGwgZXhwZXJpZW5jZSBy ZWxhdGl2ZSB0byB0aGUgbmV4dCBvdXRwdXQgc2FtcGxlLgorKyAqCisrICogU3dyZXNhbXBsZSBj YW4gYnVmZmVyIGRhdGEgaWYgbW9yZSBpbnB1dCBoYXMgYmVlbiBwcm92aWRlZCB0aGFuIGF2YWls YWJsZQorKyAqIG91dHB1dCBzcGFjZSwgYWxzbyBjb252ZXJ0aW5nIGJldHdlZW4gc2FtcGxlIHJh dGVzIG5lZWRzIGEgZGVsYXkuCisrICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdW0gb2Yg YWxsIHN1Y2ggZGVsYXlzLgorKyAqIFRoZSBleGFjdCBkZWxheSBpcyBub3QgbmVjZXNzYXJpbHkg YW4gaW50ZWdlciB2YWx1ZSBpbiBlaXRoZXIgaW5wdXQgb3IKKysgKiBvdXRwdXQgc2FtcGxlIHJh dGUuIEVzcGVjaWFsbHkgd2hlbiBkb3duc2FtcGxpbmcgYnkgYSBsYXJnZSB2YWx1ZSwgdGhlCisr ICogb3V0cHV0IHNhbXBsZSByYXRlIG1heSBiZSBhIHBvb3IgY2hvaWNlIHRvIHJlcHJlc2VudCB0 aGUgZGVsYXksIHNpbWlsYXJseQorKyAqIGZvciB1cHNhbXBsaW5nIGFuZCB0aGUgaW5wdXQgc2Ft cGxlIHJhdGUuCisrICoKKysgKiBAcGFyYW0gcyAgICAgc3dyIGNvbnRleHQKKysgKiBAcGFyYW0g YmFzZSAgdGltZWJhc2UgaW4gd2hpY2ggdGhlIHJldHVybmVkIGRlbGF5IHdpbGwgYmU6CisrICog ICAgICAgICAgICAgIEBsaSBpZiBpdCdzIHNldCB0byAxIHRoZSByZXR1cm5lZCBkZWxheSBpcyBp biBzZWNvbmRzCisrICogICAgICAgICAgICAgIEBsaSBpZiBpdCdzIHNldCB0byAxMDAwIHRoZSBy ZXR1cm5lZCBkZWxheSBpcyBpbiBtaWxsaXNlY29uZHMKKysgKiAgICAgICAgICAgICAgQGxpIGlm IGl0J3Mgc2V0IHRvIHRoZSBpbnB1dCBzYW1wbGUgcmF0ZSB0aGVuIHRoZSByZXR1cm5lZAorKyAq ICAgICAgICAgICAgICAgICAgZGVsYXkgaXMgaW4gaW5wdXQgc2FtcGxlcworKyAqICAgICAgICAg ICAgICBAbGkgaWYgaXQncyBzZXQgdG8gdGhlIG91dHB1dCBzYW1wbGUgcmF0ZSB0aGVuIHRoZSBy ZXR1cm5lZAorKyAqICAgICAgICAgICAgICAgICAgZGVsYXkgaXMgaW4gb3V0cHV0IHNhbXBsZXMK KysgKiAgICAgICAgICAgICAgQGxpIGlmIGl0J3MgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBv ZiBpbl9zYW1wbGVfcmF0ZSBhbmQKKysgKiAgICAgICAgICAgICAgICAgIG91dF9zYW1wbGVfcmF0 ZSB0aGVuIGFuIGV4YWN0IHJvdW5kaW5nLWZyZWUgZGVsYXkgd2lsbCBiZQorKyAqICAgICAgICAg ICAgICAgICAgcmV0dXJuZWQKKysgKiBAcmV0dXJucyAgICAgdGhlIGRlbGF5IGluIDEgLyBAYyBi YXNlIHVuaXRzLgorKyAqLworK2ludDY0X3Qgc3dyX2dldF9kZWxheShzdHJ1Y3QgU3dyQ29udGV4 dCAqcywgaW50NjRfdCBiYXNlKTsKKysKKysvKioKKysgKiBGaW5kIGFuIHVwcGVyIGJvdW5kIG9u IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHRoZSBuZXh0IHN3cl9jb252ZXJ0CisrICogY2Fs bCB3aWxsIG91dHB1dCwgaWYgY2FsbGVkIHdpdGggaW5fc2FtcGxlcyBvZiBpbnB1dCBzYW1wbGVz LiBUaGlzCisrICogZGVwZW5kcyBvbiB0aGUgaW50ZXJuYWwgc3RhdGUsIGFuZCBhbnl0aGluZyBj aGFuZ2luZyB0aGUgaW50ZXJuYWwgc3RhdGUKKysgKiAobGlrZSBmdXJ0aGVyIHN3cl9jb252ZXJ0 KCkgY2FsbHMpIHdpbGwgbWF5IGNoYW5nZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKKysgKiBzd3Jf Z2V0X291dF9zYW1wbGVzKCkgcmV0dXJucyBmb3IgdGhlIHNhbWUgbnVtYmVyIG9mIGlucHV0IHNh bXBsZXMuCisrICoKKysgKiBAcGFyYW0gaW5fc2FtcGxlcyAgICBudW1iZXIgb2YgaW5wdXQgc2Ft cGxlcy4KKysgKiBAbm90ZSBhbnkgY2FsbCB0byBzd3JfaW5qZWN0X3NpbGVuY2UoKSwgc3dyX2Nv bnZlcnQoKSwgc3dyX25leHRfcHRzKCkKKysgKiAgICAgICBvciBzd3Jfc2V0X2NvbXBlbnNhdGlv bigpIGludmFsaWRhdGVzIHRoaXMgbGltaXQKKysgKiBAbm90ZSBpdCBpcyByZWNvbW1lbmRlZCB0 byBwYXNzIHRoZSBjb3JyZWN0IGF2YWlsYWJsZSBidWZmZXIgc2l6ZQorKyAqICAgICAgIHRvIGFs bCBmdW5jdGlvbnMgbGlrZSBzd3JfY29udmVydCgpIGV2ZW4gaWYgc3dyX2dldF9vdXRfc2FtcGxl cygpCisrICogICAgICAgaW5kaWNhdGVzIHRoYXQgbGVzcyB3b3VsZCBiZSB1c2VkLgorKyAqIEBy ZXR1cm5zIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHRoZSBu ZXh0IHN3cl9jb252ZXJ0CisrICogICAgICAgICAgd2lsbCBvdXRwdXQgb3IgYSBuZWdhdGl2ZSB2 YWx1ZSB0byBpbmRpY2F0ZSBhbiBlcnJvcgorKyAqLworK2ludCBzd3JfZ2V0X291dF9zYW1wbGVz KHN0cnVjdCBTd3JDb250ZXh0ICpzLCBpbnQgaW5fc2FtcGxlcyk7CisrCisrLyoqCisrICogQH0K KysgKgorKyAqIEBuYW1lIENvbmZpZ3VyYXRpb24gYWNjZXNzb3JzCisrICogQHsKKysgKi8KKysK KysvKioKKysgKiBSZXR1cm4gdGhlIEByZWYgTElCU1dSRVNBTVBMRV9WRVJTSU9OX0lOVCBjb25z dGFudC4KKysgKgorKyAqIFRoaXMgaXMgdXNlZnVsIHRvIGNoZWNrIGlmIHRoZSBidWlsZC10aW1l IGxpYnN3cmVzYW1wbGUgaGFzIHRoZSBzYW1lIHZlcnNpb24KKysgKiBhcyB0aGUgcnVuLXRpbWUg b25lLgorKyAqCisrICogQHJldHVybnMgICAgIHRoZSB1bnNpZ25lZCBpbnQtdHlwZWQgdmVyc2lv bgorKyAqLworK3Vuc2lnbmVkIHN3cmVzYW1wbGVfdmVyc2lvbih2b2lkKTsKKysKKysvKioKKysg KiBSZXR1cm4gdGhlIHN3ciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24uCisrICoKKysgKiBAcmV0 dXJucyAgICAgdGhlIGJ1aWxkLXRpbWUgQGMgLi9jb25maWd1cmUgZmxhZ3MKKysgKi8KKytjb25z dCBjaGFyICpzd3Jlc2FtcGxlX2NvbmZpZ3VyYXRpb24odm9pZCk7CisrCisrLyoqCisrICogUmV0 dXJuIHRoZSBzd3IgbGljZW5zZS4KKysgKgorKyAqIEByZXR1cm5zICAgICB0aGUgbGljZW5zZSBv ZiBsaWJzd3Jlc2FtcGxlLCBkZXRlcm1pbmVkIGF0IGJ1aWxkLXRpbWUKKysgKi8KKytjb25zdCBj aGFyICpzd3Jlc2FtcGxlX2xpY2Vuc2Uodm9pZCk7CisrCisrLyoqCisrICogQH0KKysgKgorKyAq IEBuYW1lIEFWRnJhbWUgYmFzZWQgQVBJCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBDb252 ZXJ0IHRoZSBzYW1wbGVzIGluIHRoZSBpbnB1dCBBVkZyYW1lIGFuZCB3cml0ZSB0aGVtIHRvIHRo ZSBvdXRwdXQgQVZGcmFtZS4KKysgKgorKyAqIElucHV0IGFuZCBvdXRwdXQgQVZGcmFtZXMgbXVz dCBoYXZlIGNoYW5uZWxfbGF5b3V0LCBzYW1wbGVfcmF0ZSBhbmQgZm9ybWF0IHNldC4KKysgKgor KyAqIElmIHRoZSBvdXRwdXQgQVZGcmFtZSBkb2VzIG5vdCBoYXZlIHRoZSBkYXRhIHBvaW50ZXJz IGFsbG9jYXRlZCB0aGUgbmJfc2FtcGxlcworKyAqIGZpZWxkIHdpbGwgYmUgc2V0IHVzaW5nIGF2 X2ZyYW1lX2dldF9idWZmZXIoKQorKyAqIGlzIGNhbGxlZCB0byBhbGxvY2F0ZSB0aGUgZnJhbWUu CisrICoKKysgKiBUaGUgb3V0cHV0IEFWRnJhbWUgY2FuIGJlIE5VTEwgb3IgaGF2ZSBmZXdlciBh bGxvY2F0ZWQgc2FtcGxlcyB0aGFuIHJlcXVpcmVkLgorKyAqIEluIHRoaXMgY2FzZSwgYW55IHJl bWFpbmluZyBzYW1wbGVzIG5vdCB3cml0dGVuIHRvIHRoZSBvdXRwdXQgd2lsbCBiZSBhZGRlZAor KyAqIHRvIGFuIGludGVybmFsIEZJRk8gYnVmZmVyLCB0byBiZSByZXR1cm5lZCBhdCB0aGUgbmV4 dCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24KKysgKiBvciB0byBzd3JfY29udmVydCgpLgorKyAqCisr ICogSWYgY29udmVydGluZyBzYW1wbGUgcmF0ZSwgdGhlcmUgbWF5IGJlIGRhdGEgcmVtYWluaW5n IGluIHRoZSBpbnRlcm5hbAorKyAqIHJlc2FtcGxpbmcgZGVsYXkgYnVmZmVyLiBzd3JfZ2V0X2Rl bGF5KCkgdGVsbHMgdGhlIG51bWJlciBvZgorKyAqIHJlbWFpbmluZyBzYW1wbGVzLiBUbyBnZXQg dGhpcyBkYXRhIGFzIG91dHB1dCwgY2FsbCB0aGlzIGZ1bmN0aW9uIG9yCisrICogc3dyX2NvbnZl cnQoKSB3aXRoIE5VTEwgaW5wdXQuCisrICoKKysgKiBJZiB0aGUgU3dyQ29udGV4dCBjb25maWd1 cmF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBvdXRwdXQgYW5kCisrICogaW5wdXQgQVZGcmFtZSBz ZXR0aW5ncyB0aGUgY29udmVyc2lvbiBkb2VzIG5vdCB0YWtlIHBsYWNlIGFuZCBkZXBlbmRpbmcg b24KKysgKiB3aGljaCBBVkZyYW1lIGlzIG5vdCBtYXRjaGluZyBBVkVSUk9SX09VVFBVVF9DSEFO R0VELCBBVkVSUk9SX0lOUFVUX0NIQU5HRUQKKysgKiBvciB0aGUgcmVzdWx0IG9mIGEgYml0d2lz ZS1PUiBvZiB0aGVtIGlzIHJldHVybmVkLgorKyAqCisrICogQHNlZSBzd3JfZGVsYXkoKQorKyAq IEBzZWUgc3dyX2NvbnZlcnQoKQorKyAqIEBzZWUgc3dyX2dldF9kZWxheSgpCisrICoKKysgKiBA cGFyYW0gc3dyICAgICAgICAgICAgIGF1ZGlvIHJlc2FtcGxlIGNvbnRleHQKKysgKiBAcGFyYW0g b3V0cHV0ICAgICAgICAgIG91dHB1dCBBVkZyYW1lCisrICogQHBhcmFtIGlucHV0ICAgICAgICAg ICBpbnB1dCBBVkZyYW1lCisrICogQHJldHVybiAgICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3Ms IEFWRVJST1Igb24gZmFpbHVyZSBvciBub25tYXRjaGluZworKyAqICAgICAgICAgICAgICAgICAg ICAgICAgY29uZmlndXJhdGlvbi4KKysgKi8KKytpbnQgc3dyX2NvbnZlcnRfZnJhbWUoU3dyQ29u dGV4dCAqc3dyLAorKyAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpvdXRwdXQsIGNvbnN0 IEFWRnJhbWUgKmlucHV0KTsKKysKKysvKioKKysgKiBDb25maWd1cmUgb3IgcmVjb25maWd1cmUg dGhlIFN3ckNvbnRleHQgdXNpbmcgdGhlIGluZm9ybWF0aW9uCisrICogcHJvdmlkZWQgYnkgdGhl IEFWRnJhbWVzLgorKyAqCisrICogVGhlIG9yaWdpbmFsIHJlc2FtcGxpbmcgY29udGV4dCBpcyBy ZXNldCBldmVuIG9uIGZhaWx1cmUuCisrICogVGhlIGZ1bmN0aW9uIGNhbGxzIHN3cl9jbG9zZSgp IGludGVybmFsbHkgaWYgdGhlIGNvbnRleHQgaXMgb3Blbi4KKysgKgorKyAqIEBzZWUgc3dyX2Ns b3NlKCk7CisrICoKKysgKiBAcGFyYW0gc3dyICAgICAgICAgICAgIGF1ZGlvIHJlc2FtcGxlIGNv bnRleHQKKysgKiBAcGFyYW0gb3V0ICAgICAgICAgICAgIG91dHB1dCBBVkZyYW1lCisrICogQHBh cmFtIGluICAgICAgICAgICAgICBpbnB1dCBBVkZyYW1lCisrICogQHJldHVybiAgICAgICAgICAg ICAgICAwIG9uIHN1Y2Nlc3MsIEFWRVJST1Igb24gZmFpbHVyZS4KKysgKi8KKytpbnQgc3dyX2Nv bmZpZ19mcmFtZShTd3JDb250ZXh0ICpzd3IsIGNvbnN0IEFWRnJhbWUgKm91dCwgY29uc3QgQVZG cmFtZSAqaW4pOworKworKy8qKgorKyAqIEB9CisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyog U1dSRVNBTVBMRV9TV1JFU0FNUExFX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVzYW1wbGUvdmVyc2lv bi5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0 eS9mZm1wZWcvdjkvbGlic3dyZXNhbXBsZS92ZXJzaW9uLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxlL3Zl cnNpb24uaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5NDc5NDEwICswMjAwCisrKysg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGlic3dyZXNhbXBsZS92ZXJzaW9uLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzk0NTY3NDkgKzAy MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKgorKyAqIFZlcnNpb24gbWFjcm9zLgorKyAqCisrICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlic3dyZXNhbXBsZQorKyAqCisrICogbGlic3dyZXNhbXBs ZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBsaWJzd3Jlc2FtcGxlIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIGxpYnN3cmVz YW1wbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBTV1JFU0FNUExFX1ZFUlNJT05fSAorKyNkZWZp bmUgU1dSRVNBTVBMRV9WRVJTSU9OX0gKKysKKysvKioKKysgKiBAZmlsZQorKyAqIExpYnN3cmVz YW1wbGUgdmVyc2lvbiBtYWNyb3MKKysgKi8KKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNp b24uaCIKKysKKysjaW5jbHVkZSAidmVyc2lvbl9tYWpvci5oIgorKworKyNkZWZpbmUgTElCU1dS RVNBTVBMRV9WRVJTSU9OX01JTk9SICAgMQorKyNkZWZpbmUgTElCU1dSRVNBTVBMRV9WRVJTSU9O X01JQ1JPIDEwMAorKworKyNkZWZpbmUgTElCU1dSRVNBTVBMRV9WRVJTSU9OX0lOVCAgQVZfVkVS U0lPTl9JTlQoTElCU1dSRVNBTVBMRV9WRVJTSU9OX01BSk9SLCBcCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTV1JFU0FNUExFX1ZFUlNJT05f TUlOT1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExJQlNXUkVTQU1QTEVfVkVSU0lPTl9NSUNSTykKKysjZGVmaW5lIExJQlNXUkVTQU1QTEVf VkVSU0lPTiAgICAgIEFWX1ZFUlNJT04oTElCU1dSRVNBTVBMRV9WRVJTSU9OX01BSk9SLCBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNXUkVTQU1Q TEVfVkVSU0lPTl9NSU5PUiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMSUJTV1JFU0FNUExFX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBMSUJTV1JF U0FNUExFX0JVSUxEICAgICAgICBMSUJTV1JFU0FNUExFX1ZFUlNJT05fSU5UCisrCisrI2RlZmlu ZSBMSUJTV1JFU0FNUExFX0lERU5UICAgICAgICAiU3dSIiBBVl9TVFJJTkdJRlkoTElCU1dSRVNB TVBMRV9WRVJTSU9OKQorKworKyNlbmRpZiAvKiBTV1JFU0FNUExFX1ZFUlNJT05fSCAqLworZGlm ZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGlic3dyZXNhbXBsZS92ZXJzaW9uX21ham9yLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxl L3ZlcnNpb25fbWFqb3IuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVzYW1wbGUvdmVyc2lvbl9tYWpvci5oLmZmbXBl ZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzk1NDk4MTAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxl L3ZlcnNpb25fbWFqb3IuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTUyOTY1MiArMDIwMAorQEAg LTAsMCArMSwzMSBAQAorKy8qCisrICogVmVyc2lvbiBtYWNyb3MuCisrICoKKysgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBsaWJzd3Jlc2FtcGxlCisrICoKKysgKiBsaWJzd3Jlc2FtcGxlIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIGxpYnN3cmVzYW1wbGUgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggbGlic3dyZXNhbXBsZTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKKysgKi8KKysKKysjaWZuZGVmIFNXUkVTQU1QTEVfVkVSU0lPTl9NQUpPUl9ICisrI2RlZmlu ZSBTV1JFU0FNUExFX1ZFUlNJT05fTUFKT1JfSAorKworKy8qKgorKyAqIEBmaWxlCisrICogTGli c3dyZXNhbXBsZSB2ZXJzaW9uIG1hY3JvcworKyAqLworKworKyNkZWZpbmUgTElCU1dSRVNBTVBM RV9WRVJTSU9OX01BSk9SICAgNworKworKyNlbmRpZiAvKiBTV1JFU0FNUExFX1ZFUlNJT05fTUFK T1JfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhp cmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS9zd3NjYWxlLmguZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxl L3N3c2NhbGUuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvc3dzY2FsZS5oLmZmbXBlZzkJMjAyNi0wOS0wNyAx MjoyMzo0Ny42Nzk4MzYwODMgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxlL3N3c2NhbGUuaAkyMDI2LTA5 LTA3IDEyOjIzOjQ3LjY3OTc4OTkwMSArMDIwMAorQEAgLTAsMCArMSw3NzEgQEAKKysvKgorKyAq IENvcHlyaWdodCAoQykgMjAyNCBOaWtsYXMgSGFhcworKyAqIENvcHlyaWdodCAoQykgMjAwMS0y MDExIE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+CisrICoKKysgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIFNX U0NBTEVfU1dTQ0FMRV9ICisrI2RlZmluZSBTV1NDQUxFX1NXU0NBTEVfSAorKworKy8qKgorKyAq IEBmaWxlCisrICogQGluZ3JvdXAgbGlic3dzCisrICogZXh0ZXJuYWwgQVBJIGhlYWRlcgorKyAq LworKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRp bC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKysjaW5jbHVkZSAibGliYXZ1dGls L2xvZy5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisrI2luY2x1ZGUgInZlcnNp b25fbWFqb3IuaCIKKysjaWZuZGVmIEhBVkVfQVZfQ09ORklHX0gKKysvKiBXaGVuIGluY2x1ZGVk IGFzIHBhcnQgb2YgdGhlIGZmbXBlZyBidWlsZCwgb25seSBpbmNsdWRlIHRoZSBtYWpvciB2ZXJz aW9uCisrICogdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVidWlsZHMuIFdoZW4gaW5jbHVkZWQgZXh0 ZXJuYWxseSwga2VlcCBpbmNsdWRpbmcKKysgKiB0aGUgZnVsbCB2ZXJzaW9uIGluZm9ybWF0aW9u LiAqLworKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisrI2VuZGlmCisrCisrLyoqCisrICogQGRlZmdy b3VwIGxpYnN3cyBsaWJzd3NjYWxlCisrICogQ29sb3IgY29udmVyc2lvbiBhbmQgc2NhbGluZyBs aWJyYXJ5LgorKyAqCisrICogQHsKKysgKgorKyAqIFJldHVybiB0aGUgTElCU1dTQ0FMRV9WRVJT SU9OX0lOVCBjb25zdGFudC4KKysgKi8KKyt1bnNpZ25lZCBzd3NjYWxlX3ZlcnNpb24odm9pZCk7 CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBsaWJzd3NjYWxlIGJ1aWxkLXRpbWUgY29uZmlndXJh dGlvbi4KKysgKi8KKytjb25zdCBjaGFyICpzd3NjYWxlX2NvbmZpZ3VyYXRpb24odm9pZCk7Cisr CisrLyoqCisrICogUmV0dXJuIHRoZSBsaWJzd3NjYWxlIGxpY2Vuc2UuCisrICovCisrY29uc3Qg Y2hhciAqc3dzY2FsZV9saWNlbnNlKHZvaWQpOworKworKy8qKgorKyAqIEdldCB0aGUgQVZDbGFz cyBmb3IgU3dzQ29udGV4dC4gSXQgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aAorKyAq IEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogZm9yIGV4YW1pbmluZyBvcHRpb25zLgorKyAqCisrICog QHNlZSBhdl9vcHRfZmluZCgpLgorKyAqLworK2NvbnN0IEFWQ2xhc3MgKnN3c19nZXRfY2xhc3Mo dm9pZCk7CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIEZsYWdzIGFu ZCBxdWFsaXR5IHNldHRpbmdzICoKKysgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK3R5cGVkZWYgZW51bSBTd3NEaXRoZXIgeworKyAgICBTV1NfRElUSEVSX05PTkUgPSAwLCAv KiBkaXNhYmxlIGRpdGhlcmluZyAqLworKyAgICBTV1NfRElUSEVSX0FVVE8sICAgICAvKiBhdXRv LXNlbGVjdCBmcm9tIHByZXNldCAqLworKyAgICBTV1NfRElUSEVSX0JBWUVSLCAgICAvKiBvcmRl cmVkIGRpdGhlciBtYXRyaXggKi8KKysgICAgU1dTX0RJVEhFUl9FRCwgICAgICAgLyogZXJyb3Ig ZGlmZnVzaW9uICovCisrICAgIFNXU19ESVRIRVJfQV9ESVRIRVIsIC8qIGFyaXRobWV0aWMgYWRk aXRpb24gKi8KKysgICAgU1dTX0RJVEhFUl9YX0RJVEhFUiwgLyogYXJpdGhtZXRpYyB4b3IgKi8K KysgICAgU1dTX0RJVEhFUl9OQiwgICAgICAgLyogbm90IHBhcnQgb2YgdGhlIEFCSSAqLworKyAg ICBTV1NfRElUSEVSX01BWF9FTlVNID0gMHg3RkZGRkZGRiwgLyogZm9yY2Ugc2l6ZSB0byAzMiBi aXRzLCBub3QgYSB2YWxpZCBkaXRoZXIgdHlwZSAqLworK30gU3dzRGl0aGVyOworKworK3R5cGVk ZWYgZW51bSBTd3NBbHBoYUJsZW5kIHsKKysgICAgU1dTX0FMUEhBX0JMRU5EX05PTkUgPSAwLAor KyAgICBTV1NfQUxQSEFfQkxFTkRfVU5JRk9STSwKKysgICAgU1dTX0FMUEhBX0JMRU5EX0NIRUNL RVJCT0FSRCwKKysgICAgU1dTX0FMUEhBX0JMRU5EX05CLCAgLyogbm90IHBhcnQgb2YgdGhlIEFC SSAqLworKyAgICBTV1NfQUxQSEFfQkxFTkRfTUFYX0VOVU0gPSAweDdGRkZGRkZGLCAvKiBmb3Jj ZSBzaXplIHRvIDMyIGJpdHMsIG5vdCBhIHZhbGlkIGJsZW5kIG1vZGUgKi8KKyt9IFN3c0FscGhh QmxlbmQ7CisrCisrdHlwZWRlZiBlbnVtIFN3c1NjYWxlciB7CisrICAgIFNXU19TQ0FMRV9BVVRP ID0gMCwKKysgICAgU1dTX1NDQUxFX0JJTElORUFSLCAvLy88IGJpbGluZWFyIGZpbHRlcmluZwor KyAgICBTV1NfU0NBTEVfQklDVUJJQywgIC8vLzwgMi10YXAgY3ViaWMgQkMtc3BsaW5lCisrICAg IFNXU19TQ0FMRV9QT0lOVCwgICAgLy8vPCBuZWFyZXN0IG5laWdoYm9yIChwb2ludCBzYW1wbGlu ZykKKysgICAgU1dTX1NDQUxFX0FSRUEsICAgICAvLy88IGFyZWEgYXZlcmFnaW5nCisrICAgIFNX U19TQ0FMRV9HQVVTU0lBTiwgLy8vPCAyLXRhcCBnYXVzc2lhbiBhcHByb3hpbWF0aW9uCisrICAg IFNXU19TQ0FMRV9TSU5DLCAgICAgLy8vPCB1bndpbmRvd2VkIHNpbmMKKysgICAgU1dTX1NDQUxF X0xBTkNaT1MsICAvLy88IDMtdGFwIHNpbmMvc2luYworKyAgICBTV1NfU0NBTEVfU1BMSU5FLCAg IC8vLzwgdW53aW5kb3duZWQgbmF0dXJhbCBjdWJpYyBzcGxpbmUKKysgICAgU1dTX1NDQUxFX05C LCAgICAgICAvLy88IG5vdCBwYXJ0IG9mIHRoZSBBQkkKKysgICAgU1dTX1NDQUxFX01BWF9FTlVN ID0gMHg3RkZGRkZGRiwgLy8vPCBmb3JjZSBzaXplIHRvIDMyIGJpdHMsIG5vdCBhIHZhbGlkIGZp bHRlciB0eXBlCisrfSBTd3NTY2FsZXI7CisrCisrdHlwZWRlZiBlbnVtIFN3c0JhY2tlbmQgewor KyAgICAvKiBTdGFibGUgYmFja2VuZHMgKi8KKysgICAgU1dTX0JBQ0tFTkRfTEVHQUNZICAgICAg PSAoMSA8PCAwKSwgLy8vPCBMZWdhY3kgYmVzcG9rZSBmb3JtYXQtc3BlY2lmaWMgY29kZQorKyAg ICBTV1NfQkFDS0VORF9TVEFCTEUgICAgICA9IFNXU19CQUNLRU5EX0xFR0FDWSwKKysKKysgICAg LyogVW5zdGFibGUgYmFja2VuZHMgKGF1dG8tc2VsZWN0ZWQgb25seSBpZiBTV1NfVU5TVEFCTEUg aXMgZW5hYmxlZCkgKi8KKysgICAgU1dTX0JBQ0tFTkRfQyAgICAgICAgICAgPSAoMSA8PCAxKSwg Ly8vPCBUZW1wbGF0ZS1iYXNlZCBDIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorKyAgICBTV1Nf QkFDS0VORF9NRU1DUFkgICAgICA9ICgxIDw8IDIpLCAvLy88IEZhc3QgcGF0aCB1c2luZyBsaWJj IG1lbWNweSgpIC8gbWVtc2V0KCkKKysgICAgU1dTX0JBQ0tFTkRfWDg2ICAgICAgICAgPSAoMSA8 PCAzKSwgLy8vPCBDaGFpbmVkIHg4NiBTSU1EIGtlcm5lbHMKKysgICAgU1dTX0JBQ0tFTkRfQUFS Q0g2NCAgICAgPSAoMSA8PCA0KSwgLy8vPCBDaGFpbmVkIEFBcmNoNjQgTkVPTiBrZXJuZWxzCisr ICAgIFNXU19CQUNLRU5EX1NQSVJWICAgICAgID0gKDEgPDwgNSksIC8vLzwgVnVsa2FuIFNQSVIt ViBiYWNrZW5kCisrICAgIFNXU19CQUNLRU5EX1VOU1RBQkxFICAgID0gU1dTX0JBQ0tFTkRfQyB8 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dTX0JBQ0tFTkRfTUVNQ1BZIHwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1NfQkFDS0VORF9YODYgfAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNXU19CQUNLRU5EX0FBUkNINjQgfAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNXU19CQUNLRU5EX1NQSVJWLAorKworKyAgICBTV1NfQkFDS0VO RF9BTEwgPSBTV1NfQkFDS0VORF9TVEFCTEUgfCBTV1NfQkFDS0VORF9VTlNUQUJMRSwKKysgICAg U1dTX0JBQ0tFTkRfTUFYX0VOVU0gPSAweDdGRkZGRkZGLCAvLy88IGZvcmNlIHNpemUgdG8gMzIg Yml0cywgbm90IGEgdmFsaWQgYmFja2VuZAorK30gU3dzQmFja2VuZDsKKysKKyt0eXBlZGVmIGVu dW0gU3dzRmxhZ3MgeworKyAgICAvKioKKysgICAgICogUmV0dXJuIGFuIGVycm9yIG9uIHVuZGVy c3BlY2lmaWVkIGNvbnZlcnNpb25zLiBXaXRob3V0IHRoaXMgZmxhZywKKysgICAgICogdW5zcGVj aWZpZWQgZmllbGRzIGFyZSBkZWZhdWx0ZWQgdG8gc2Vuc2libGUgdmFsdWVzLgorKyAgICAgKi8K KysgICAgU1dTX1NUUklDVCAgICAgICAgPSAxIDw8IDExLAorKworKyAgICAvKioKKysgICAgICog RW1pdCB2ZXJib3NlIGxvZyBvZiBzY2FsaW5nIHBhcmFtZXRlcnMuCisrICAgICAqLworKyAgICBT V1NfUFJJTlRfSU5GTyAgICA9IDEgPDwgMTIsCisrCisrICAgIC8qKgorKyAgICAgKiBQZXJmb3Jt IGZ1bGwgY2hyb21hIHVwc2FtcGxpbmcgd2hlbiB1cHNjYWxpbmcgdG8gUkdCLgorKyAgICAgKgor KyAgICAgKiBGb3IgZXhhbXBsZSwgd2hlbiBjb252ZXJ0aW5nIDUweDUwIHl1djQyMHAgdG8gMTAw eDEwMCByZ2JhLCBzZXR0aW5nIHRoaXMgZmxhZworKyAgICAgKiB3aWxsIHNjYWxlIHRoZSBjaHJv bWEgcGxhbmUgZnJvbSAyNXgyNSB0byAxMDB4MTAwICg0OjQ6NCksIGFuZCB0aGVuIGNvbnZlcnQK KysgICAgICogdGhlIDEwMHgxMDAgeXV2NDQ0cCBpbWFnZSB0byByZ2JhIGluIHRoZSBmaW5hbCBv dXRwdXQgc3RlcC4KKysgICAgICoKKysgICAgICogV2l0aG91dCB0aGlzIGZsYWcsIHRoZSBjaHJv bWEgcGxhbmUgaXMgaW5zdGVhZCBzY2FsZWQgdG8gNTB4MTAwICg0OjI6MiksCisrICAgICAqIHdp dGggYSBzaW5nbGUgY2hyb21hIHNhbXBsZSBiZWluZyByZXVzZWQgZm9yIGJvdGggb2YgdGhlIGhv cml6b250YWxseQorKyAgICAgKiBhZGphY2VudCBSR0JBIG91dHB1dCBwaXhlbHMuCisrICAgICAq LworKyAgICBTV1NfRlVMTF9DSFJfSF9JTlQgPSAxIDw8IDEzLAorKworKyAgICAvKioKKysgICAg ICogUGVyZm9ybSBmdWxsIGNocm9tYSBpbnRlcnBvbGF0aW9uIHdoZW4gZG93bnNjYWxpbmcgUkdC IHNvdXJjZXMuCisrICAgICAqCisrICAgICAqIEZvciBleGFtcGxlLCB3aGVuIGNvbnZlcnRpbmcg YSAxMDB4MTAwIHJnYmEgc291cmNlIHRvIDUweDUwIHl1djQ0NHAsIHNldHRpbmcKKysgICAgICog dGhpcyBmbGFnIHdpbGwgZ2VuZXJhdGUgYSAxMDB4MTAwICg0OjQ6NCkgY2hyb21hIHBsYW5lLCB3 aGljaCBpcyB0aGVuCisrICAgICAqIGRvd25zY2FsZWQgdG8gdGhlIHJlcXVpcmVkIDUweDUwLgor KyAgICAgKgorKyAgICAgKiBXaXRob3V0IHRoaXMgZmxhZywgdGhlIGNocm9tYSBwbGFuZSBpcyBp bnN0ZWFkIGdlbmVyYXRlZCBhdCA1MHgxMDAgKGRyb3BwaW5nCisrICAgICAqIGV2ZXJ5IG90aGVy IHBpeGVsKSwgYmVmb3JlIHRoZW4gYmVpbmcgZG93bnNjYWxlZCB0byB0aGUgcmVxdWlyZWQgNTB4 NTAKKysgICAgICogcmVzb2x1dGlvbi4KKysgICAgICovCisrICAgIFNXU19GVUxMX0NIUl9IX0lO UCA9IDEgPDwgMTQsCisrCisrICAgIC8qKgorKyAgICAgKiBGb3JjZSBiaXQtZXhhY3Qgb3V0cHV0 LiBUaGlzIHdpbGwgcHJldmVudCB0aGUgdXNlIG9mIHBsYXRmb3JtLXNwZWNpZmljCisrICAgICAq IG9wdGltaXphdGlvbnMgdGhhdCBtYXkgbGVhZCB0byBzbGlnaHQgZGlmZmVyZW5jZSBpbiByb3Vu ZGluZywgaW4gZmF2b3IKKysgICAgICogb2YgYWx3YXlzIG1haW50YWluaW5nIGV4YWN0IGJpdCBv dXRwdXQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZWZlcmVuY2UKKysgICAgICogQyBjb2RlLgor KyAgICAgKgorKyAgICAgKiBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBzZXQgYm90aCBvZiB0 aGVzZSBmbGFncyBzaW11bHRhbmVvdXNseS4KKysgICAgICovCisrICAgIFNXU19BQ0NVUkFURV9S TkQgICA9IDEgPDwgMTgsCisrICAgIFNXU19CSVRFWEFDVCAgICAgICA9IDEgPDwgMTksCisrCisr ICAgIC8qKgorKyAgICAgKiBBbGxvdy9wcmVmZXIgdXNpbmcgZXhwZXJpbWVudGFsIG5ldyBjb2Rl IHBhdGhzLiBUaGlzIG1heSBiZSBmYXN0ZXIsCisrICAgICAqIHNsb3dlciwgb3IgcHJvZHVjZSBk aWZmZXJlbnQgb3V0cHV0LCB3aXRoIHNlbWFudGljcyBzdWJqZWN0IHRvIGNoYW5nZQorKyAgICAg KiBhdCBhbnkgcG9pbnQgaW4gdGltZS4gRm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3Nl cyBvbmx5LgorKyAgICAgKi8KKysgICAgU1dTX1VOU1RBQkxFID0gMSA8PCAyMCwKKysKKysgICAg LyoqCisrICAgICAqIERlcHJlY2F0ZWQgZmxhZ3MuCisrICAgICAqLworKyAgICBTV1NfRElSRUNU X0JHUiAgICAgID0gMSA8PCAxNSwgLy8vPCBUaGlzIGZsYWcgaGFzIG5vIGVmZmVjdAorKyAgICBT V1NfRVJST1JfRElGRlVTSU9OID0gMSA8PCAyMywgLy8vPCBTZXQgYFN3c0NvbnRleHQuZGl0aGVy YCBpbnN0ZWFkCisrCisrICAgIC8qKgorKyAgICAgKiBTY2FsZXIgc2VsZWN0aW9uIG9wdGlvbnMu IE9ubHkgb25lIG1heSBiZSBhY3RpdmUgYXQgYSB0aW1lLgorKyAgICAgKiBEZXByZWNhdGVkIGlu IGZhdm9yIG9mIGBTd3NDb250ZXh0LnNjYWxlcmAuCisrICAgICAqLworKyAgICBTV1NfRkFTVF9C SUxJTkVBUiA9IDEgPDwgIDAsIC8vLzwgZmFzdCBiaWxpbmVhciBmaWx0ZXJpbmcKKysgICAgU1dT X0JJTElORUFSICAgICAgPSAxIDw8ICAxLCAvLy88IGJpbGluZWFyIGZpbHRlcmluZworKyAgICBT V1NfQklDVUJJQyAgICAgICA9IDEgPDwgIDIsIC8vLzwgMi10YXAgY3ViaWMgQi1zcGxpbmUKKysg ICAgU1dTX1ggICAgICAgICAgICAgPSAxIDw8ICAzLCAvLy88IGV4cGVyaW1lbnRhbAorKyAgICBT V1NfUE9JTlQgICAgICAgICA9IDEgPDwgIDQsIC8vLzwgbmVhcmVzdCBuZWlnaGJvcgorKyAgICBT V1NfQVJFQSAgICAgICAgICA9IDEgPDwgIDUsIC8vLzwgYXJlYSBhdmVyYWdpbmcKKysgICAgU1dT X0JJQ1VCTElOICAgICAgPSAxIDw8ICA2LCAvLy88IGJpY3ViaWMgbHVtYSwgYmlsaW5lYXIgY2hy b21hCisrICAgIFNXU19HQVVTUyAgICAgICAgID0gMSA8PCAgNywgLy8vPCBnYXVzc2lhbiBhcHBy b3hpbWF0aW9uCisrICAgIFNXU19TSU5DICAgICAgICAgID0gMSA8PCAgOCwgLy8vPCB1bndpbmRv d2VkIHNpbmMKKysgICAgU1dTX0xBTkNaT1MgICAgICAgPSAxIDw8ICA5LCAvLy88IDMtdGFwIHNp bmMvc2luYworKyAgICBTV1NfU1BMSU5FICAgICAgICA9IDEgPDwgMTAsIC8vLzwgdW53aW5kb3dl ZCBuYXR1cmFsIGN1YmljIHNwbGluZQorK30gU3dzRmxhZ3M7CisrCisrdHlwZWRlZiBlbnVtIFN3 c0ludGVudCB7CisrICAgIFNXU19JTlRFTlRfUEVSQ0VQVFVBTCA9IDAsICAgICAgICAgICAgLy8v PCBQZXJjZXB0dWFsIHRvbmUgbWFwcGluZworKyAgICBTV1NfSU5URU5UX1JFTEFUSVZFX0NPTE9S SU1FVFJJQyA9IDEsIC8vLzwgUmVsYXRpdmUgY29sb3JpbWV0cmljIGNsaXBwaW5nCisrICAgIFNX U19JTlRFTlRfU0FUVVJBVElPTiA9IDIsICAgICAgICAgICAgLy8vPCBTYXR1cmF0aW9uIG1hcHBp bmcKKysgICAgU1dTX0lOVEVOVF9BQlNPTFVURV9DT0xPUklNRVRSSUMgPSAzLCAvLy88IEFic29s dXRlIGNvbG9yaW1ldHJpYyBjbGlwcGluZworKyAgICBTV1NfSU5URU5UX05CLCAvLy88IG5vdCBw YXJ0IG9mIHRoZSBBQkkKKyt9IFN3c0ludGVudDsKKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKysgKiBDb250ZXh0IGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50ICoKKysg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLyoqCisrICogTWFpbiBl eHRlcm5hbCBBUEkgc3RydWN0dXJlLiBOZXcgZmllbGRzIGNhbiBiZSBhZGRlZCB0byB0aGUgZW5k IHdpdGgKKysgKiBtaW5vciB2ZXJzaW9uIGJ1bXBzLiBSZW1vdmFsLCByZW9yZGVyaW5nIGFuZCBj aGFuZ2VzIHRvIGV4aXN0aW5nIGZpZWxkcworKyAqIHJlcXVpcmUgYSBtYWpvciB2ZXJzaW9uIGJ1 bXAuIHNpemVvZihTd3NDb250ZXh0KSBpcyBub3QgcGFydCBvZiB0aGUgQUJJLgorKyAqLworK3R5 cGVkZWYgc3RydWN0IFN3c0NvbnRleHQgeworKyAgICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsK KysKKysgICAgLyoqCisrICAgICAqIFByaXZhdGUgZGF0YSBvZiB0aGUgdXNlciwgY2FuIGJlIHVz ZWQgdG8gY2FycnkgYXBwIHNwZWNpZmljIHN0dWZmLgorKyAgICAgKi8KKysgICAgdm9pZCAqb3Bh cXVlOworKworKyAgICAvKioKKysgICAgICogQml0bWFzayBvZiBTV1NfKi4gU2VlIGBTd3NGbGFn c2AgZm9yIGRldGFpbHMuCisrICAgICAqLworKyAgICB1bnNpZ25lZCBmbGFnczsKKysKKysgICAg LyoqCisrICAgICAqIEV4dHJhIHBhcmFtZXRlcnMgZm9yIGZpbmUtdHVuaW5nIGNlcnRhaW4gc2Nh bGVycy4KKysgICAgICovCisrI2RlZmluZSBTV1NfTlVNX1NDQUxFUl9QQVJBTVMgMgorKyAgICBk b3VibGUgc2NhbGVyX3BhcmFtc1tTV1NfTlVNX1NDQUxFUl9QQVJBTVNdOworKworKyAgICAvKioK KysgICAgICogSG93IG1hbnkgdGhyZWFkcyB0byB1c2UgZm9yIHByb2Nlc3NpbmcsIG9yIDAgZm9y IGF1dG9tYXRpYyBzZWxlY3Rpb24uCisrICAgICAqLworKyAgICBpbnQgdGhyZWFkczsKKysKKysg ICAgLyoqCisrICAgICAqIERpdGhlciBtb2RlLgorKyAgICAgKi8KKysgICAgU3dzRGl0aGVyIGRp dGhlcjsKKysKKysgICAgLyoqCisrICAgICAqIEFscGhhIGJsZW5kaW5nIG1vZGUuIFNlZSBgU3dz QWxwaGFCbGVuZGAgZm9yIGRldGFpbHMuCisrICAgICAqLworKyAgICBTd3NBbHBoYUJsZW5kIGFs cGhhX2JsZW5kOworKworKyAgICAvKioKKysgICAgICogVXNlIGdhbW1hIGNvcnJlY3Qgc2NhbGlu Zy4KKysgICAgICovCisrICAgIGludCBnYW1tYV9mbGFnOworKworKyAgICAvKioKKysgICAgICog RGVwcmVjYXRlZCBmcmFtZSBwcm9wZXJ0eSBvdmVycmlkZXMsIGZvciB0aGUgbGVnYWN5IEFQSSBv bmx5LgorKyAgICAgKgorKyAgICAgKiBJZ25vcmVkIGJ5IHN3c19zY2FsZV9mcmFtZSgpIHdoZW4g dXNlZCBpbiBkeW5hbWljIG1vZGUsIGluIHdoaWNoCisrICAgICAqIGNhc2UgYWxsIHByb3BlcnRp ZXMgYXJlIGluc3RlYWQgdGFrZW4gZnJvbSB0aGUgZnJhbWUgZGlyZWN0bHkuCisrICAgICAqLwor KyAgICBpbnQgc3JjX3csIHNyY19oOyAgLy8vPCBXaWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzb3Vy Y2UgZnJhbWUKKysgICAgaW50IGRzdF93LCBkc3RfaDsgIC8vLzwgV2lkdGggYW5kIGhlaWdodCBv ZiB0aGUgZGVzdGluYXRpb24gZnJhbWUKKysgICAgaW50IHNyY19mb3JtYXQ7ICAgIC8vLzwgU291 cmNlIHBpeGVsIGZvcm1hdAorKyAgICBpbnQgZHN0X2Zvcm1hdDsgICAgLy8vPCBEZXN0aW5hdGlv biBwaXhlbCBmb3JtYXQKKysgICAgaW50IHNyY19yYW5nZTsgICAgIC8vLzwgU291cmNlIGlzIGZ1 bGwgcmFuZ2UKKysgICAgaW50IGRzdF9yYW5nZTsgICAgIC8vLzwgRGVzdGluYXRpb24gaXMgZnVs bCByYW5nZQorKyAgICBpbnQgc3JjX3ZfY2hyX3BvczsgLy8vPCBTb3VyY2UgdmVydGljYWwgY2hy b21hIHBvc2l0aW9uIGluIGx1bWEgZ3JpZCAvIDI1NgorKyAgICBpbnQgc3JjX2hfY2hyX3Bvczsg Ly8vPCBTb3VyY2UgaG9yaXpvbnRhbCBjaHJvbWEgcG9zaXRpb24KKysgICAgaW50IGRzdF92X2No cl9wb3M7IC8vLzwgRGVzdGluYXRpb24gdmVydGljYWwgY2hyb21hIHBvc2l0aW9uCisrICAgIGlu dCBkc3RfaF9jaHJfcG9zOyAvLy88IERlc3RpbmF0aW9uIGhvcml6b250YWwgY2hyb21hIHBvc2l0 aW9uCisrCisrICAgIC8qKgorKyAgICAgKiBEZXNpcmVkIElDQyBpbnRlbnQgZm9yIGNvbG9yIHNw YWNlIGNvbnZlcnNpb25zLgorKyAgICAgKi8KKysgICAgaW50IGludGVudDsKKysKKysgICAgLyoq CisrICAgICAqIFNjYWxpbmcgZmlsdGVyLiBJZiBzZXQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4g U1dTX1NDQUxFX0FVVE8sIHRoaXMgd2lsbAorKyAgICAgKiBvdmVycmlkZSB0aGUgZmlsdGVyIGlt cGxpZWQgYnkgYFN3c0NvbnRleHQuZmxhZ3NgLgorKyAgICAgKgorKyAgICAgKiBOb3RlOiBEb2Vz IG5vdCBhZmZlY3QgdGhlIGxlZ2FjeSAoc3RhdGVmdWwpIEFQSS4KKysgICAgICovCisrICAgIFN3 c1NjYWxlciBzY2FsZXI7CisrCisrICAgIC8qKgorKyAgICAgKiBTY2FsZXIgdXNlZCBzcGVjaWZp Y2FsbHkgZm9yIHVwL2Rvd25zYW1wbGluZyBzdWJzYW1wbGVkIChjaHJvbWEpIHBsYW5lcy4KKysg ICAgICogSWYgc2V0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFNXU19TQ0FMRV9BVVRPLCB0aGlz IHdpbGwgb3ZlcnJpZGUgdGhlCisrICAgICAqIGZpbHRlciBpbXBsaWVkIGJ5IGBTd3NDb250ZXh0 LnNjYWxlcmAuIE90aGVyd2lzZSwgdGhlIHNhbWUgZmlsdGVyCisrICAgICAqIHdpbGwgYmUgdXNl ZCBmb3IgYm90aCBtYWluIHNjYWxpbmcgYW5kIGNocm9tYSBzdWJzYW1wbGluZy4KKysgICAgICov CisrICAgIFN3c1NjYWxlciBzY2FsZXJfc3ViOworKworKyAgICAvKioKKysgICAgICogQml0bWFz ayBvZiBTV1NfQkFDS0VORF8qLiBJZiBub24temVybywgdGhpcyB3aWxsIHJlc3RyaWN0IHRoZSBh dmFpbGFibGUKKysgICAgICogYmFja2VuZHMgdG8gdGhlIHNwZWNpZmllZCBzZXQuIElmIGxlZnQg YXMgemVybywgYSBkZWZhdWx0IHNldCBvZgorKyAgICAgKiBiYWNrZW5kcyB3aWxsIGJlIHNlbGVj dGVkIGF1dG9tYXRpY2FsbHkgKGJhc2VkIG9uIFNXU19VTlNUQUJMRSkuCisrICAgICAqCisrICAg ICAqIE5vdGU6IFRoaXMgaXMgb25seSByZWxldmFudCBmb3IgdGhlIG5ldyBBUEkgKHN3c19zY2Fs ZV9mcmFtZSgpKS4gVGhlCisrICAgICAqIHN0YXRlZnVsIGxlZ2FjeSBBUEkgYWx3YXlzIGltcGxp ZXMgU1dTX0JBQ0tFTkRfTEVHQUNZLgorKyAgICAgKi8KKysgICAgU3dzQmFja2VuZCBiYWNrZW5k czsKKysKKysgICAgLyogUmVtZW1iZXIgdG8gYWRkIG5ldyBmaWVsZHMgdG8gZ3JhcGguYzpvcHRz X2VxdWFsKCkgKi8KKyt9IFN3c0NvbnRleHQ7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gZW1w dHkgU3dzQ29udGV4dCBhbmQgc2V0IGl0cyBmaWVsZHMgdG8gZGVmYXVsdCB2YWx1ZXMuCisrICov CisrU3dzQ29udGV4dCAqc3dzX2FsbG9jX2NvbnRleHQodm9pZCk7CisrCisrLyoqCisrICogRnJl ZSB0aGUgY29udGV4dCBhbmQgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCB3cml0 ZSBOVUxMCisrICogdG8gdGhlIHByb3ZpZGVkIHBvaW50ZXIuCisrICovCisrdm9pZCBzd3NfZnJl ZV9jb250ZXh0KFN3c0NvbnRleHQgKipjdHgpOworKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioKKysgKiBTdXBwb3J0ZWQgZnJhbWUgZm9ybWF0cyAqCisrICoqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKysvKioKKysgKiBUZXN0IGlmIGEgZ2l2ZW4gKHNvZnR3YXJlKSBwaXhl bCBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5IGFueSBiYWNrZW5kLAorKyAqIGV4Y2x1ZGluZyB1bnN0 YWJsZSBiYWNrZW5kcy4KKysgKgorKyAqIEBwYXJhbSBvdXRwdXQgIElmIDAsIHRlc3QgaWYgY29t cGF0aWJsZSB3aXRoIHRoZSBzb3VyY2UvaW5wdXQgZnJhbWU7CisrICogICAgICAgICAgICAgICAg b3RoZXJ3aXNlLCB3aXRoIHRoZSBkZXN0aW5hdGlvbi9vdXRwdXQgZnJhbWUuCisrICogQHBhcmFt IGZvcm1hdCAgVGhlIGZvcm1hdCB0byBjaGVjay4KKysgKgorKyAqIEByZXR1cm4gQSBwb3NpdGl2 ZSBpbnRlZ2VyIGlmIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UuCisrICovCisraW50IHN3c190ZXN0 X2Zvcm1hdChlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0LCBpbnQgb3V0cHV0KTsKKysKKysvKioK KysgKiBUZXN0IGlmIGEgZ2l2ZW4gaGFyZHdhcmUgcGl4ZWwgZm9ybWF0IGlzIHN1cHBvcnRlZCBi eSBhbnkgYmFja2VuZCwKKysgKiBleGNsdWRpbmcgdW5zdGFibGUgYmFja2VuZHMuCisrICoKKysg KiBAcGFyYW0gZm9ybWF0ICBUaGUgaGFyZHdhcmUgZm9ybWF0IHRvIGNoZWNrLCBvciBBVl9QSVhf Rk1UX05PTkUuCisrICoKKysgKiBAcmV0dXJuIEEgcG9zaXRpdmUgaW50ZWdlciBpZiBzdXBwb3J0 ZWQgb3IgQVZfUElYX0ZNVF9OT05FLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQgc3dzX3Rlc3Rf aHdfZm9ybWF0KGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQpOworKworKy8qKgorKyAqIFRlc3Qg aWYgYSBnaXZlbiBjb2xvciBzcGFjZSBpcyBzdXBwb3J0ZWQuCisrICoKKysgKiBAcGFyYW0gb3V0 cHV0ICBJZiAwLCB0ZXN0IGlmIGNvbXBhdGlibGUgd2l0aCB0aGUgc291cmNlL2lucHV0IGZyYW1l OworKyAqICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgd2l0aCB0aGUgZGVzdGluYXRpb24vb3V0 cHV0IGZyYW1lLgorKyAqIEBwYXJhbSBjb2xvcnNwYWNlIFRoZSBjb2xvcnNwYWNlIHRvIGNoZWNr LgorKyAqCisrICogQHJldHVybiBBIHBvc2l0aXZlIGludGVnZXIgaWYgc3VwcG9ydGVkLCAwIG90 aGVyd2lzZS4KKysgKi8KKytpbnQgc3dzX3Rlc3RfY29sb3JzcGFjZShlbnVtIEFWQ29sb3JTcGFj ZSBjb2xvcnNwYWNlLCBpbnQgb3V0cHV0KTsKKysKKysvKioKKysgKiBUZXN0IGlmIGEgZ2l2ZW4g c2V0IG9mIGNvbG9yIHByaW1hcmllcyBpcyBzdXBwb3J0ZWQuCisrICoKKysgKiBAcGFyYW0gb3V0 cHV0ICBJZiAwLCB0ZXN0IGlmIGNvbXBhdGlibGUgd2l0aCB0aGUgc291cmNlL2lucHV0IGZyYW1l OworKyAqICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgd2l0aCB0aGUgZGVzdGluYXRpb24vb3V0 cHV0IGZyYW1lLgorKyAqIEBwYXJhbSBwcmltYXJpZXMgVGhlIGNvbG9yIHByaW1hcmllcyB0byBj aGVjay4KKysgKgorKyAqIEByZXR1cm4gQSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHN1cHBvcnRlZCwg MCBvdGhlcndpc2UuCisrICovCisraW50IHN3c190ZXN0X3ByaW1hcmllcyhlbnVtIEFWQ29sb3JQ cmltYXJpZXMgcHJpbWFyaWVzLCBpbnQgb3V0cHV0KTsKKysKKysvKioKKysgKiBUZXN0IGlmIGEg Z2l2ZW4gY29sb3IgdHJhbnNmZXIgZnVuY3Rpb24gaXMgc3VwcG9ydGVkLgorKyAqCisrICogQHBh cmFtIG91dHB1dCAgSWYgMCwgdGVzdCBpZiBjb21wYXRpYmxlIHdpdGggdGhlIHNvdXJjZS9pbnB1 dCBmcmFtZTsKKysgKiAgICAgICAgICAgICAgICBvdGhlcndpc2UsIHdpdGggdGhlIGRlc3RpbmF0 aW9uL291dHB1dCBmcmFtZS4KKysgKiBAcGFyYW0gdHJjICAgICBUaGUgY29sb3IgdHJhbnNmZXIg ZnVuY3Rpb24gdG8gY2hlY2suCisrICoKKysgKiBAcmV0dXJuIEEgcG9zaXRpdmUgaW50ZWdlciBp ZiBzdXBwb3J0ZWQsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBzd3NfdGVzdF90cmFuc2Zlcihl bnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYywgaW50IG91dHB1dCk7CisrCisr LyoqCisrICogSGVscGVyIGZ1bmN0aW9uIHRvIHJ1biBhbGwgc3dzX3Rlc3RfKiBhZ2FpbnN0IGEg ZnJhbWUsIGFzIHdlbGwgYXMgdGVzdGluZworKyAqIHRoZSBiYXNpYyBmcmFtZSBwcm9wZXJ0aWVz IGZvciBzYW5pdHkuIElnbm9yZXMgaXJyZWxldmFudCBwcm9wZXJ0aWVzIC0gZm9yCisrICogZXhh bXBsZSwgQVZDb2xvclNwYWNlIGlzIG5vdCBjaGVja2VkIGZvciBSR0IgZnJhbWVzLgorKyAqLwor K2ludCBzd3NfdGVzdF9mcmFtZShjb25zdCBBVkZyYW1lICpmcmFtZSwgaW50IG91dHB1dCk7Cisr CisrLyoqCisrICogTGlrZSBgc3dzX3NjYWxlX2ZyYW1lYCwgYnV0IHdpdGhvdXQgYWN0dWFsbHkg c2NhbGluZy4gSXQgd2lsbCBpbnN0ZWFkCisrICogbWVyZWx5IGluaXRpYWxpemUgaW50ZXJuYWwg c3RhdGUgdGhhdCAqd291bGQqIGJlIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlCisrICogb3BlcmF0 aW9uLCBhcyB3ZWxsIGFzIHJldHVybmluZyB0aGUgY29ycmVjdCBlcnJvciBjb2RlIGZvciB1bnN1 cHBvcnRlZAorKyAqIGZyYW1lIGNvbWJpbmF0aW9ucy4KKysgKgorKyAqIEBwYXJhbSBjdHggICBU aGUgc2NhbGluZyBjb250ZXh0LgorKyAqIEBwYXJhbSBkc3QgICBUaGUgZGVzdGluYXRpb24gZnJh bWUgdG8gY29uc2lkZXIuCisrICogQHBhcmFtIHNyYyAgIFRoZSBzb3VyY2UgZnJhbWUgdG8gY29u c2lkZXIuCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2Rl IG9uIGZhaWx1cmUuCisrICovCisraW50IHN3c19mcmFtZV9zZXR1cChTd3NDb250ZXh0ICpjdHgs IGNvbnN0IEFWRnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioqKioqKioq KioqKioqKioqKioKKysgKiBNYWluIHNjYWxpbmcgQVBJICoKKysgKioqKioqKioqKioqKioqKioq KiovCisrCisrLyoqCisrICogQ2hlY2sgaWYgYSBnaXZlbiBjb252ZXJzaW9uIGlzIGEgbm9vcC4g UmV0dXJucyBhIHBvc2l0aXZlIGludGVnZXIgaWYKKysgKiBubyBvcGVyYXRpb24gbmVlZHMgdG8g YmUgcGVyZm9ybWVkLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQgc3dzX2lzX25vb3AoY29uc3Qg QVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lICpzcmMpOworKworKy8qKgorKyAqIFNjYWxlIHNv dXJjZSBkYXRhIGZyb20gYHNyY2AgYW5kIHdyaXRlIHRoZSBvdXRwdXQgdG8gYGRzdGAuCisrICoK KysgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGRpcmVjdGx5IG9uIGFuIGFsbG9jYXRlZCBj b250ZXh0LCB3aXRob3V0IHNldHRpbmcKKysgKiB1cCBhbnkgZnJhbWUgcHJvcGVydGllcyBvciBj YWxsaW5nIGBzd3NfaW5pdF9jb250ZXh0KClgLiBTdWNoIHVzYWdlIGlzIGZ1bGx5CisrICogZHlu YW1pYyBhbmQgZG9lcyBub3QgcmVxdWlyZSByZWFsbG9jYXRpb24gaWYgdGhlIGZyYW1lIHByb3Bl cnRpZXMgY2hhbmdlLgorKyAqCisrICogQWx0ZXJuYXRpdmVseSwgdGhpcyBmdW5jdGlvbiBjYW4g YmUgY2FsbGVkIG9uIGEgY29udGV4dCB0aGF0IGhhcyBiZWVuCisrICogZXhwbGljaXRseSBpbml0 aWFsaXplZC4gSG93ZXZlciwgdGhpcyBpcyBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMKKysg KiBjb21wYXRpYmlsaXR5LiBJbiB0aGlzIHVzYWdlIG1vZGUsIGFsbCBmcmFtZSBwcm9wZXJ0aWVz IG11c3QgYmUgY29ycmVjdGx5CisrICogc2V0IGF0IGluaXQgdGltZSwgYW5kIG1heSBubyBsb25n ZXIgY2hhbmdlIGFmdGVyIGluaXRpYWxpemF0aW9uLgorKyAqCisrICogQHBhcmFtIGN0eCAgIFRo ZSBzY2FsaW5nIGNvbnRleHQuCisrICogQHBhcmFtIGRzdCAgIFRoZSBkZXN0aW5hdGlvbiBmcmFt ZS4gVGhlIGRhdGEgYnVmZmVycyBtYXkgZWl0aGVyIGJlIGFscmVhZHkKKysgKiAgICAgICAgICAg ICAgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgb3IgbGVmdCBjbGVhciwgaW4gd2hpY2ggY2FzZSB0 aGV5IHdpbGwKKysgKiAgICAgICAgICAgICAgYmUgYWxsb2NhdGVkIGJ5IHRoZSBzY2FsZXIuIFRo ZSBsYXR0ZXIgbWF5IGhhdmUgcGVyZm9ybWFuY2UKKysgKiAgICAgICAgICAgICAgYWR2YW50YWdl cyAtIGUuZy4gaW4gY2VydGFpbiBjYXNlcyBzb21lIChvciBhbGwpIG91dHB1dCBwbGFuZXMKKysg KiAgICAgICAgICAgICAgbWF5IGJlIHJlZmVyZW5jZXMgdG8gaW5wdXQgcGxhbmVzLCByYXRoZXIg dGhhbiBjb3BpZXMuCisrICogQHBhcmFtIHNyYyAgIFRoZSBzb3VyY2UgZnJhbWUuIElmIHRoZSBk YXRhIGJ1ZmZlcnMgYXJlIHNldCB0byBOVUxMLCB0aGVuCisrICogICAgICAgICAgICAgIHRoaXMg ZnVuY3Rpb24gYmVoYXZlcyBpZGVudGljYWxseSB0byBgc3dzX2ZyYW1lX3NldHVwYC4KKysgKiBA cmV0dXJuID49IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVy ZS4KKysgKi8KKytpbnQgc3dzX3NjYWxlX2ZyYW1lKFN3c0NvbnRleHQgKmMsIEFWRnJhbWUgKmRz dCwgY29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioKKysgKiBGaWx0ZXIga2VybmVsIGN1dC1v ZmYgdmFsdWUuIFZhbHVlcyBiZWxvdyB0aGlzIChhYnNvbHV0ZSkgbWFnbml0dWRlCisrICogYXJl IGN1dCBvZmYgZnJvbSB0aGUgbWFpbiBmaWx0ZXIga2VybmVsLiBOb3RlIHRoYXQgdGhlIHdpbmRv dyBpcworKyAqIGFsd2F5cyBhZGp1c3RlZCB0byB0aGUgbmV3IGZpbHRlciByYWRpdXMsIHNvIHRo ZXJlIHdpbGwgbmV2ZXIgYmUKKysgKiBhbnkgc3BlY3RyYWwgbGVha2FnZSAoZm9yIHN1aXRhYmx5 IHdpbmRvd2VkIGZpbHRlcnMpLgorKyAqLworKyNkZWZpbmUgU1dTX01BWF9SRURVQ0VfQ1VUT0ZG IDAuMDAyCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioKKysgKiBMZWdhY3kgKHN0YXRl ZnVsKSBBUEkgKgorKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNkZWZpbmUgU1dT X1NSQ19WX0NIUl9EUk9QX01BU0sgICAgIDB4MzAwMDAKKysjZGVmaW5lIFNXU19TUkNfVl9DSFJf RFJPUF9TSElGVCAgICAxNgorKworKyNkZWZpbmUgU1dTX1BBUkFNX0RFRkFVTFQgICAgICAgICAg IDEyMzQ1NgorKworKyNkZWZpbmUgU1dTX0NTX0lUVTcwOSAgICAgICAgIDEKKysjZGVmaW5lIFNX U19DU19GQ0MgICAgICAgICAgICA0CisrI2RlZmluZSBTV1NfQ1NfSVRVNjAxICAgICAgICAgNQor KyNkZWZpbmUgU1dTX0NTX0lUVTYyNCAgICAgICAgIDUKKysjZGVmaW5lIFNXU19DU19TTVBURTE3 ME0gICAgICA1CisrI2RlZmluZSBTV1NfQ1NfU01QVEUyNDBNICAgICAgNworKyNkZWZpbmUgU1dT X0NTX0RFRkFVTFQgICAgICAgIDUKKysjZGVmaW5lIFNXU19DU19CVDIwMjAgICAgICAgICA5Cisr CisrLyoqCisrICogUmV0dXJuIGEgcG9pbnRlciB0byB5dXY8LT5yZ2IgY29lZmZpY2llbnRzIGZv ciB0aGUgZ2l2ZW4gY29sb3JzcGFjZQorKyAqIHN1aXRhYmxlIGZvciBzd3Nfc2V0Q29sb3JzcGFj ZURldGFpbHMoKS4KKysgKgorKyAqIEBwYXJhbSBjb2xvcnNwYWNlIE9uZSBvZiB0aGUgU1dTX0NT XyogbWFjcm9zLiBJZiBpbnZhbGlkLAorKyAqIFNXU19DU19ERUZBVUxUIGlzIHVzZWQuCisrICov CisrY29uc3QgaW50ICpzd3NfZ2V0Q29lZmZpY2llbnRzKGludCBjb2xvcnNwYWNlKTsKKysKKysv LyB3aGVuIHVzZWQgZm9yIGZpbHRlcnMgdGhleSBtdXN0IGhhdmUgYW4gb2RkIG51bWJlciBvZiBl bGVtZW50cworKy8vIGNvZWZmcyBjYW5ub3QgYmUgc2hhcmVkIGJldHdlZW4gdmVjdG9ycworK3R5 cGVkZWYgc3RydWN0IFN3c1ZlY3RvciB7CisrICAgIGRvdWJsZSAqY29lZmY7ICAgICAgICAgICAg ICAvLy88IHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgY29lZmZpY2llbnRzCisrICAgIGludCBsZW5n dGg7ICAgICAgICAgICAgICAgICAvLy88IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIHZl Y3RvcgorK30gU3dzVmVjdG9yOworKworKy8vIHZlY3RvcnMgY2FuIGJlIHNoYXJlZAorK3R5cGVk ZWYgc3RydWN0IFN3c0ZpbHRlciB7CisrICAgIFN3c1ZlY3RvciAqbHVtSDsKKysgICAgU3dzVmVj dG9yICpsdW1WOworKyAgICBTd3NWZWN0b3IgKmNockg7CisrICAgIFN3c1ZlY3RvciAqY2hyVjsK Kyt9IFN3c0ZpbHRlcjsKKysKKysvKioKKysgKiBSZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBw aXhfZm10IGlzIGEgc3VwcG9ydGVkIGlucHV0IGZvcm1hdCwgMAorKyAqIG90aGVyd2lzZS4KKysg Ki8KKytpbnQgc3dzX2lzU3VwcG9ydGVkSW5wdXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQp OworKworKy8qKgorKyAqIFJldHVybiBhIHBvc2l0aXZlIHZhbHVlIGlmIHBpeF9mbXQgaXMgYSBz dXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCwgMAorKyAqIG90aGVyd2lzZS4KKysgKi8KKytpbnQgc3dz X2lzU3VwcG9ydGVkT3V0cHV0KGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10KTsKKysKKysvKioK KysgKiBAcGFyYW1baW5dICBwaXhfZm10IHRoZSBwaXhlbCBmb3JtYXQKKysgKiBAcmV0dXJuIGEg cG9zaXRpdmUgdmFsdWUgaWYgYW4gZW5kaWFubmVzcyBjb252ZXJzaW9uIGZvciBwaXhfZm10IGlz CisrICogc3VwcG9ydGVkLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQgc3dzX2lzU3VwcG9ydGVk RW5kaWFubmVzc0NvbnZlcnNpb24oZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKy8q KgorKyAqIEluaXRpYWxpemUgdGhlIHN3c2NhbGVyIGNvbnRleHQgc3dzX2NvbnRleHQuCisrICoK KysgKiBUaGlzIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCwgYW5kIHByb3ZpZGVk IG9ubHkgZm9yIGJhY2t3YXJkcworKyAqIGNvbXBhdGliaWxpdHkgd2l0aCBzd3Nfc2NhbGUoKSBh bmQgc3dzX2ZyYW1lX3N0YXJ0KCkuIFRoZSBwcmVmZXJyZWQgd2F5IHRvCisrICogdXNlIGxpYnN3 c2NhbGUgaXMgdG8gc2V0IGFsbCBmcmFtZSBwcm9wZXJ0aWVzIGNvcnJlY3RseSBhbmQgY2FsbAor KyAqIHN3c19zY2FsZV9mcmFtZSgpIGRpcmVjdGx5LCB3aXRob3V0IGV4cGxpY2l0bHkgaW5pdGlh bGl6aW5nIHRoZSBjb250ZXh0LgorKyAqCisrICogQHJldHVybiB6ZXJvIG9yIHBvc2l0aXZlIHZh bHVlIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24KKysgKiBlcnJvcgorKyAqLworK2F2 X3dhcm5fdW51c2VkX3Jlc3VsdAorK2ludCBzd3NfaW5pdF9jb250ZXh0KFN3c0NvbnRleHQgKnN3 c19jb250ZXh0LCBTd3NGaWx0ZXIgKnNyY0ZpbHRlciwgU3dzRmlsdGVyICpkc3RGaWx0ZXIpOwor KworKy8qKgorKyAqIEZyZWUgdGhlIHN3c2NhbGVyIGNvbnRleHQgc3dzQ29udGV4dC4KKysgKiBJ ZiBzd3NDb250ZXh0IGlzIE5VTEwsIHRoZW4gZG9lcyBub3RoaW5nLgorKyAqLworK3ZvaWQgc3dz X2ZyZWVDb250ZXh0KFN3c0NvbnRleHQgKnN3c0NvbnRleHQpOworKworKy8qKgorKyAqIEFsbG9j YXRlIGFuZCByZXR1cm4gYW4gU3dzQ29udGV4dC4gWW91IG5lZWQgaXQgdG8gcGVyZm9ybQorKyAq IHNjYWxpbmcvY29udmVyc2lvbiBvcGVyYXRpb25zIHVzaW5nIHN3c19zY2FsZSgpLgorKyAqCisr ICogQHBhcmFtIHNyY1cgdGhlIHdpZHRoIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKysgKiBAcGFyYW0g c3JjSCB0aGUgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgaW1hZ2UKKysgKiBAcGFyYW0gc3JjRm9ybWF0 IHRoZSBzb3VyY2UgaW1hZ2UgZm9ybWF0CisrICogQHBhcmFtIGRzdFcgdGhlIHdpZHRoIG9mIHRo ZSBkZXN0aW5hdGlvbiBpbWFnZQorKyAqIEBwYXJhbSBkc3RIIHRoZSBoZWlnaHQgb2YgdGhlIGRl c3RpbmF0aW9uIGltYWdlCisrICogQHBhcmFtIGRzdEZvcm1hdCB0aGUgZGVzdGluYXRpb24gaW1h Z2UgZm9ybWF0CisrICogQHBhcmFtIGZsYWdzIHNwZWNpZnkgd2hpY2ggYWxnb3JpdGhtIGFuZCBv cHRpb25zIHRvIHVzZSBmb3IgcmVzY2FsaW5nCisrICogQHBhcmFtIHBhcmFtIGV4dHJhIHBhcmFt ZXRlcnMgdG8gdHVuZSB0aGUgdXNlZCBzY2FsZXIKKysgKiAgICAgICAgICAgICAgRm9yIFNXU19C SUNVQklDIHBhcmFtWzBdIGFuZCBbMV0gdHVuZSB0aGUgc2hhcGUgb2YgdGhlIGJhc2lzCisrICog ICAgICAgICAgICAgIGZ1bmN0aW9uLCBwYXJhbVswXSB0dW5lcyBmKDEpIGFuZCBwYXJhbVsxXSBm wrQoMSkKKysgKiAgICAgICAgICAgICAgRm9yIFNXU19HQVVTUyBwYXJhbVswXSB0dW5lcyB0aGUg ZXhwb25lbnQgYW5kIHRodXMgY3V0b2ZmCisrICogICAgICAgICAgICAgIGZyZXF1ZW5jeQorKyAq ICAgICAgICAgICAgICBGb3IgU1dTX0xBTkNaT1MgcGFyYW1bMF0gdHVuZXMgdGhlIHdpZHRoIG9m IHRoZSB3aW5kb3cgZnVuY3Rpb24KKysgKiBAcmV0dXJuIGEgcG9pbnRlciB0byBhbiBhbGxvY2F0 ZWQgY29udGV4dCwgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yCisrICogQG5vdGUgdGhpcyBmdW5j dGlvbiBpcyB0byBiZSByZW1vdmVkIGFmdGVyIGEgc2FuZXIgYWx0ZXJuYXRpdmUgaXMKKysgKiAg ICAgICB3cml0dGVuCisrICovCisrU3dzQ29udGV4dCAqc3dzX2dldENvbnRleHQoaW50IHNyY1cs IGludCBzcmNILCBlbnVtIEFWUGl4ZWxGb3JtYXQgc3JjRm9ybWF0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBkc3RXLCBpbnQgZHN0SCwgZW51bSBBVlBpeGVsRm9ybWF0IGRzdEZv cm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIFN3c0ZpbHRlciAq c3JjRmlsdGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3c0ZpbHRlciAqZHN0Rmls dGVyLCBjb25zdCBkb3VibGUgKnBhcmFtKTsKKysKKysvKioKKysgKiBTY2FsZSB0aGUgaW1hZ2Ug c2xpY2UgaW4gc3JjU2xpY2UgYW5kIHB1dCB0aGUgcmVzdWx0aW5nIHNjYWxlZAorKyAqIHNsaWNl IGluIHRoZSBpbWFnZSBpbiBkc3QuIEEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiBjb25zZWN1dGl2 ZQorKyAqIHJvd3MgaW4gYW4gaW1hZ2UuIFJlcXVpcmVzIGEgY29udGV4dCB0aGF0IGhhcyBwcmV2 aW91c2x5IGJlZW4KKysgKiBpbml0aWFsaXplZCB3aXRoIHN3c19pbml0X2NvbnRleHQoKS4KKysg KgorKyAqIFNsaWNlcyBoYXZlIHRvIGJlIHByb3ZpZGVkIGluIHNlcXVlbnRpYWwgb3JkZXIsIGVp dGhlciBpbgorKyAqIHRvcC1ib3R0b20gb3IgYm90dG9tLXRvcCBvcmRlci4gSWYgc2xpY2VzIGFy ZSBwcm92aWRlZCBpbgorKyAqIG5vbi1zZXF1ZW50aWFsIG9yZGVyIHRoZSBiZWhhdmlvciBvZiB0 aGUgZnVuY3Rpb24gaXMgdW5kZWZpbmVkLgorKyAqCisrICogQHBhcmFtIGMgICAgICAgICB0aGUg c2NhbGluZyBjb250ZXh0IHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoCisrICogICAgICAgICAgICAg ICAgICBzd3NfZ2V0Q29udGV4dCgpCisrICogQHBhcmFtIHNyY1NsaWNlICB0aGUgYXJyYXkgY29u dGFpbmluZyB0aGUgcG9pbnRlcnMgdG8gdGhlIHBsYW5lcyBvZgorKyAqICAgICAgICAgICAgICAg ICAgdGhlIHNvdXJjZSBzbGljZQorKyAqIEBwYXJhbSBzcmNTdHJpZGUgdGhlIGFycmF5IGNvbnRh aW5pbmcgdGhlIHN0cmlkZXMgZm9yIGVhY2ggcGxhbmUgb2YKKysgKiAgICAgICAgICAgICAgICAg IHRoZSBzb3VyY2UgaW1hZ2UKKysgKiBAcGFyYW0gc3JjU2xpY2VZIHRoZSBwb3NpdGlvbiBpbiB0 aGUgc291cmNlIGltYWdlIG9mIHRoZSBzbGljZSB0bworKyAqICAgICAgICAgICAgICAgICAgcHJv Y2VzcywgdGhhdCBpcyB0aGUgbnVtYmVyIChjb3VudGVkIHN0YXJ0aW5nIGZyb20KKysgKiAgICAg ICAgICAgICAgICAgIHplcm8pIGluIHRoZSBpbWFnZSBvZiB0aGUgZmlyc3Qgcm93IG9mIHRoZSBz bGljZQorKyAqIEBwYXJhbSBzcmNTbGljZUggdGhlIGhlaWdodCBvZiB0aGUgc291cmNlIHNsaWNl LCB0aGF0IGlzIHRoZSBudW1iZXIKKysgKiAgICAgICAgICAgICAgICAgIG9mIHJvd3MgaW4gdGhl IHNsaWNlCisrICogQHBhcmFtIGRzdCAgICAgICB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgcG9p bnRlcnMgdG8gdGhlIHBsYW5lcyBvZgorKyAqICAgICAgICAgICAgICAgICAgdGhlIGRlc3RpbmF0 aW9uIGltYWdlCisrICogQHBhcmFtIGRzdFN0cmlkZSB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUg c3RyaWRlcyBmb3IgZWFjaCBwbGFuZSBvZgorKyAqICAgICAgICAgICAgICAgICAgdGhlIGRlc3Rp bmF0aW9uIGltYWdlCisrICogQHJldHVybiAgICAgICAgICB0aGUgaGVpZ2h0IG9mIHRoZSBvdXRw dXQgc2xpY2UKKysgKi8KKytpbnQgc3dzX3NjYWxlKFN3c0NvbnRleHQgKmMsIGNvbnN0IHVpbnQ4 X3QgKmNvbnN0IHNyY1NsaWNlW10sCisrICAgICAgICAgICAgICBjb25zdCBpbnQgc3JjU3RyaWRl W10sIGludCBzcmNTbGljZVksIGludCBzcmNTbGljZUgsCisrICAgICAgICAgICAgICB1aW50OF90 ICpjb25zdCBkc3RbXSwgY29uc3QgaW50IGRzdFN0cmlkZVtdKTsKKysKKysvKioKKysgKiBJbml0 aWFsaXplIHRoZSBzY2FsaW5nIHByb2Nlc3MgZm9yIGEgZ2l2ZW4gcGFpciBvZiBzb3VyY2UvZGVz dGluYXRpb24gZnJhbWVzLgorKyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8g c3dzX3NlbmRfc2xpY2UoKSBhbmQgc3dzX3JlY2VpdmVfc2xpY2UoKS4KKysgKiBSZXF1aXJlcyBh IGNvbnRleHQgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIGluaXRpYWxpemVkIHdpdGggc3dzX2lu aXRfY29udGV4dCgpLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldGFpbiByZWZlcmVu Y2VzIHRvIHNyYyBhbmQgZHN0LCBzbyB0aGV5IG11c3QgYm90aCB1c2UKKysgKiByZWZjb3VudGVk IGJ1ZmZlcnMgKGlmIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyLCBpbiBjYXNlIG9mIGRzdCkuCisr ICoKKysgKiBAcGFyYW0gYyAgIFRoZSBzY2FsaW5nIGNvbnRleHQKKysgKiBAcGFyYW0gZHN0IFRo ZSBkZXN0aW5hdGlvbiBmcmFtZS4KKysgKgorKyAqICAgICAgICAgICAgVGhlIGRhdGEgYnVmZmVy cyBtYXkgZWl0aGVyIGJlIGFscmVhZHkgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgb3IKKysgKiAg ICAgICAgICAgIGxlZnQgY2xlYXIsIGluIHdoaWNoIGNhc2UgdGhleSB3aWxsIGJlIGFsbG9jYXRl ZCBieSB0aGUgc2NhbGVyLgorKyAqICAgICAgICAgICAgVGhlIGxhdHRlciBtYXkgaGF2ZSBwZXJm b3JtYW5jZSBhZHZhbnRhZ2VzIC0gZS5nLiBpbiBjZXJ0YWluIGNhc2VzCisrICogICAgICAgICAg ICBzb21lIG91dHB1dCBwbGFuZXMgbWF5IGJlIHJlZmVyZW5jZXMgdG8gaW5wdXQgcGxhbmVzLCBy YXRoZXIgdGhhbgorKyAqICAgICAgICAgICAgY29waWVzLgorKyAqCisrICogICAgICAgICAgICBP dXRwdXQgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGlzIGZyYW1lIGluIHN1Y2Nlc3NmdWwK KysgKiAgICAgICAgICAgIHN3c19yZWNlaXZlX3NsaWNlKCkgY2FsbHMuCisrICogQHBhcmFtIHNy YyBUaGUgc291cmNlIGZyYW1lLiBUaGUgZGF0YSBidWZmZXJzIG11c3QgYmUgYWxsb2NhdGVkLCBi dXQgdGhlCisrICogICAgICAgICAgICBmcmFtZSBkYXRhIGRvZXMgbm90IGhhdmUgdG8gYmUgcmVh ZHkgYXQgdGhpcyBwb2ludC4gRGF0YQorKyAqICAgICAgICAgICAgYXZhaWxhYmlsaXR5IGlzIHRo ZW4gc2lnbmFsbGVkIGJ5IHN3c19zZW5kX3NsaWNlKCkuCisrICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG9uIGZhaWx1cmUKKysgKgorKyAqIEBzZWUgc3dz X2ZyYW1lX2VuZCgpCisrICovCisraW50IHN3c19mcmFtZV9zdGFydChTd3NDb250ZXh0ICpjLCBB VkZyYW1lICpkc3QsIGNvbnN0IEFWRnJhbWUgKnNyYyk7CisrCisrLyoqCisrICogRmluaXNoIHRo ZSBzY2FsaW5nIHByb2Nlc3MgZm9yIGEgcGFpciBvZiBzb3VyY2UvZGVzdGluYXRpb24gZnJhbWVz IHByZXZpb3VzbHkKKysgKiBzdWJtaXR0ZWQgd2l0aCBzd3NfZnJhbWVfc3RhcnQoKS4gTXVzdCBi ZSBjYWxsZWQgYWZ0ZXIgYWxsIHN3c19zZW5kX3NsaWNlKCkKKysgKiBhbmQgc3dzX3JlY2VpdmVf c2xpY2UoKSBjYWxscyBhcmUgZG9uZSwgYmVmb3JlIGFueSBuZXcgc3dzX2ZyYW1lX3N0YXJ0KCkK KysgKiBjYWxscy4KKysgKgorKyAqIEBwYXJhbSBjICAgVGhlIHNjYWxpbmcgY29udGV4dAorKyAq LworK3ZvaWQgc3dzX2ZyYW1lX2VuZChTd3NDb250ZXh0ICpjKTsKKysKKysvKioKKysgKiBJbmRp Y2F0ZSB0aGF0IGEgaG9yaXpvbnRhbCBzbGljZSBvZiBpbnB1dCBkYXRhIGlzIGF2YWlsYWJsZSBp biB0aGUgc291cmNlCisrICogZnJhbWUgcHJldmlvdXNseSBwcm92aWRlZCB0byBzd3NfZnJhbWVf c3RhcnQoKS4gVGhlIHNsaWNlcyBtYXkgYmUgcHJvdmlkZWQgaW4KKysgKiBhbnkgb3JkZXIsIGJ1 dCBtYXkgbm90IG92ZXJsYXAuIEZvciB2ZXJ0aWNhbGx5IHN1YnNhbXBsZWQgcGl4ZWwgZm9ybWF0 cywgdGhlCisrICogc2xpY2VzIG11c3QgYmUgYWxpZ25lZCBhY2NvcmRpbmcgdG8gc3Vic2FtcGxp bmcuCisrICoKKysgKiBAcGFyYW0gYyAgIFRoZSBzY2FsaW5nIGNvbnRleHQKKysgKiBAcGFyYW0g c2xpY2Vfc3RhcnQgZmlyc3Qgcm93IG9mIHRoZSBzbGljZQorKyAqIEBwYXJhbSBzbGljZV9oZWln aHQgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNsaWNlCisrICoKKysgKiBAcmV0dXJuIGEgbm9uLW5l Z2F0aXZlIG51bWJlciBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWls dXJlLgorKyAqLworK2ludCBzd3Nfc2VuZF9zbGljZShTd3NDb250ZXh0ICpjLCB1bnNpZ25lZCBp bnQgc2xpY2Vfc3RhcnQsCisrICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbGljZV9o ZWlnaHQpOworKworKy8qKgorKyAqIFJlcXVlc3QgYSBob3Jpem9udGFsIHNsaWNlIG9mIHRoZSBv dXRwdXQgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIGZyYW1lCisrICogcHJldmlvdXNseSBw cm92aWRlZCB0byBzd3NfZnJhbWVfc3RhcnQoKS4KKysgKgorKyAqIEBwYXJhbSBjICAgVGhlIHNj YWxpbmcgY29udGV4dAorKyAqIEBwYXJhbSBzbGljZV9zdGFydCBmaXJzdCByb3cgb2YgdGhlIHNs aWNlOyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YKKysgKiAgICAgICAgICAgICAgICAgICAgc3dzX3Jl Y2VpdmVfc2xpY2VfYWxpZ25tZW50KCkKKysgKiBAcGFyYW0gc2xpY2VfaGVpZ2h0IG51bWJlciBv ZiByb3dzIGluIHRoZSBzbGljZTsgbXVzdCBiZSBhIG11bHRpcGxlIG9mCisrICogICAgICAgICAg ICAgICAgICAgICBzd3NfcmVjZWl2ZV9zbGljZV9hbGlnbm1lbnQoKSwgZXhjZXB0IGZvciB0aGUg bGFzdCBzbGljZQorKyAqICAgICAgICAgICAgICAgICAgICAgKGkuZS4gd2hlbiBzbGljZV9zdGFy dCtzbGljZV9oZWlnaHQgaXMgZXF1YWwgdG8gb3V0cHV0CisrICogICAgICAgICAgICAgICAgICAg ICBmcmFtZSBoZWlnaHQpCisrICoKKysgKiBAcmV0dXJuIGEgbm9uLW5lZ2F0aXZlIG51bWJlciBp ZiB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gaW50byB0aGUgb3V0cHV0CisrICog ICAgICAgICBBVkVSUk9SKEVBR0FJTikgaWYgbW9yZSBpbnB1dCBkYXRhIG5lZWRzIHRvIGJlIHBy b3ZpZGVkIGJlZm9yZSB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgY2Fu IGJlIHByb2R1Y2VkCisrICogICAgICAgICBhbm90aGVyIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBv biBvdGhlciBraW5kcyBvZiBzY2FsaW5nIGZhaWx1cmUKKysgKi8KKytpbnQgc3dzX3JlY2VpdmVf c2xpY2UoU3dzQ29udGV4dCAqYywgdW5zaWduZWQgaW50IHNsaWNlX3N0YXJ0LAorKyAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2xpY2VfaGVpZ2h0KTsKKysKKysvKioKKysgKiBH ZXQgdGhlIGFsaWdubWVudCByZXF1aXJlZCBmb3Igc2xpY2VzLiBSZXF1aXJlcyBhIGNvbnRleHQg dGhhdCBoYXMKKysgKiBwcmV2aW91c2x5IGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBzd3NfaW5pdF9j b250ZXh0KCkuCisrICoKKysgKiBAcGFyYW0gYyAgIFRoZSBzY2FsaW5nIGNvbnRleHQKKysgKiBA cmV0dXJuIGFsaWdubWVudCByZXF1aXJlZCBmb3Igb3V0cHV0IHNsaWNlcyByZXF1ZXN0ZWQgd2l0 aCBzd3NfcmVjZWl2ZV9zbGljZSgpLgorKyAqICAgICAgICAgU2xpY2Ugb2Zmc2V0cyBhbmQgc2l6 ZXMgcGFzc2VkIHRvIHN3c19yZWNlaXZlX3NsaWNlKCkgbXVzdCBiZQorKyAqICAgICAgICAgbXVs dGlwbGVzIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisrICovCisr dW5zaWduZWQgaW50IHN3c19yZWNlaXZlX3NsaWNlX2FsaWdubWVudChjb25zdCBTd3NDb250ZXh0 ICpjKTsKKysKKysvKioKKysgKiBAcGFyYW0gYyB0aGUgc2NhbGluZyBjb250ZXh0CisrICogQHBh cmFtIGRzdFJhbmdlIGZsYWcgaW5kaWNhdGluZyB0aGUgd2hpdGUtYmxhY2sgcmFuZ2Ugb2YgdGhl IG91dHB1dCAoMT1qcGVnIC8gMD1tcGVnKQorKyAqIEBwYXJhbSBzcmNSYW5nZSBmbGFnIGluZGlj YXRpbmcgdGhlIHdoaXRlLWJsYWNrIHJhbmdlIG9mIHRoZSBpbnB1dCAoMT1qcGVnIC8gMD1tcGVn KQorKyAqIEBwYXJhbSB0YWJsZSB0aGUgeXV2MnJnYiBjb2VmZmljaWVudHMgZGVzY3JpYmluZyB0 aGUgb3V0cHV0IHl1diBzcGFjZSwgbm9ybWFsbHkgZmZfeXV2MnJnYl9jb2VmZnNbeF0KKysgKiBA cGFyYW0gaW52X3RhYmxlIHRoZSB5dXYycmdiIGNvZWZmaWNpZW50cyBkZXNjcmliaW5nIHRoZSBp bnB1dCB5dXYgc3BhY2UsIG5vcm1hbGx5IGZmX3l1djJyZ2JfY29lZmZzW3hdCisrICogQHBhcmFt IGJyaWdodG5lc3MgMTYuMTYgZml4ZWQgcG9pbnQgYnJpZ2h0bmVzcyBjb3JyZWN0aW9uCisrICog QHBhcmFtIGNvbnRyYXN0IDE2LjE2IGZpeGVkIHBvaW50IGNvbnRyYXN0IGNvcnJlY3Rpb24KKysg KiBAcGFyYW0gc2F0dXJhdGlvbiAxNi4xNiBmaXhlZCBwb2ludCBzYXR1cmF0aW9uIGNvcnJlY3Rp b24KKysgKgorKyAqIEByZXR1cm4gQSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLCBub24g bmVnYXRpdmUgb3RoZXJ3aXNlLgorKyAqICAgICAgICAgSWYgYExJQlNXU0NBTEVfVkVSU0lPTl9N QUpPUiA8IDdgLCByZXR1cm5zIC0xIGlmIG5vdCBzdXBwb3J0ZWQuCisrICovCisraW50IHN3c19z ZXRDb2xvcnNwYWNlRGV0YWlscyhTd3NDb250ZXh0ICpjLCBjb25zdCBpbnQgaW52X3RhYmxlWzRd LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1JhbmdlLCBjb25zdCBpbnQg dGFibGVbNF0sIGludCBkc3RSYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGludCBzYXR1cmF0aW9uKTsKKysKKysvKioKKysg KiBAcmV0dXJuIEEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvciwgbm9uIG5lZ2F0aXZlIG90 aGVyd2lzZS4KKysgKiAgICAgICAgIElmIGBMSUJTV1NDQUxFX1ZFUlNJT05fTUFKT1IgPCA3YCwg cmV0dXJucyAtMSBpZiBub3Qgc3VwcG9ydGVkLgorKyAqLworK2ludCBzd3NfZ2V0Q29sb3JzcGFj ZURldGFpbHMoU3dzQ29udGV4dCAqYywgaW50ICoqaW52X3RhYmxlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpzcmNSYW5nZSwgaW50ICoqdGFibGUsIGludCAqZHN0UmFuZ2Us CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJyaWdodG5lc3MsIGludCAqY29u dHJhc3QsIGludCAqc2F0dXJhdGlvbik7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW5kIHJldHVy biBhbiB1bmluaXRpYWxpemVkIHZlY3RvciB3aXRoIGxlbmd0aCBjb2VmZmljaWVudHMuCisrICov CisrU3dzVmVjdG9yICpzd3NfYWxsb2NWZWMoaW50IGxlbmd0aCk7CisrCisrLyoqCisrICogUmV0 dXJuIGEgbm9ybWFsaXplZCBHYXVzc2lhbiBjdXJ2ZSB1c2VkIHRvIGZpbHRlciBzdHVmZgorKyAq IHF1YWxpdHkgPSAzIGlzIGhpZ2ggcXVhbGl0eSwgbG93ZXIgaXMgbG93ZXIgcXVhbGl0eS4KKysg Ki8KKytTd3NWZWN0b3IgKnN3c19nZXRHYXVzc2lhblZlYyhkb3VibGUgdmFyaWFuY2UsIGRvdWJs ZSBxdWFsaXR5KTsKKysKKysvKioKKysgKiBTY2FsZSBhbGwgdGhlIGNvZWZmaWNpZW50cyBvZiBh IGJ5IHRoZSBzY2FsYXIgdmFsdWUuCisrICovCisrdm9pZCBzd3Nfc2NhbGVWZWMoU3dzVmVjdG9y ICphLCBkb3VibGUgc2NhbGFyKTsKKysKKysvKioKKysgKiBTY2FsZSBhbGwgdGhlIGNvZWZmaWNp ZW50cyBvZiBhIHNvIHRoYXQgdGhlaXIgc3VtIGVxdWFscyBoZWlnaHQuCisrICovCisrdm9pZCBz d3Nfbm9ybWFsaXplVmVjKFN3c1ZlY3RvciAqYSwgZG91YmxlIGhlaWdodCk7CisrCisrdm9pZCBz d3NfZnJlZVZlYyhTd3NWZWN0b3IgKmEpOworKworK1N3c0ZpbHRlciAqc3dzX2dldERlZmF1bHRG aWx0ZXIoZmxvYXQgbHVtYUdCbHVyLCBmbG9hdCBjaHJvbWFHQmx1ciwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsb2F0IGx1bWFTaGFycGVuLCBmbG9hdCBjaHJvbWFTaGFycGVu LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2hyb21hSFNoaWZ0LCBm bG9hdCBjaHJvbWFWU2hpZnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg dmVyYm9zZSk7Cisrdm9pZCBzd3NfZnJlZUZpbHRlcihTd3NGaWx0ZXIgKmZpbHRlcik7CisrCisr LyoqCisrICogQ2hlY2sgaWYgY29udGV4dCBjYW4gYmUgcmV1c2VkLCBvdGhlcndpc2UgcmVhbGxv Y2F0ZSBhIG5ldyBvbmUuCisrICoKKysgKiBJZiBjb250ZXh0IGlzIE5VTEwsIGp1c3QgY2FsbHMg c3dzX2dldENvbnRleHQoKSB0byBnZXQgYSBuZXcKKysgKiBjb250ZXh0LiBPdGhlcndpc2UsIGNo ZWNrcyBpZiB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIG9uZXMgYWxyZWFkeQorKyAqIHNhdmVkIGlu IGNvbnRleHQuIElmIHRoYXQgaXMgdGhlIGNhc2UsIHJldHVybnMgdGhlIGN1cnJlbnQKKysgKiBj b250ZXh0LiBPdGhlcndpc2UsIGZyZWVzIGNvbnRleHQgYW5kIGdldHMgYSBuZXcgY29udGV4dCB3 aXRoCisrICogdGhlIG5ldyBwYXJhbWV0ZXJzLgorKyAqCisrICogQmUgd2FybmVkIHRoYXQgc3Jj RmlsdGVyIGFuZCBkc3RGaWx0ZXIgYXJlIG5vdCBjaGVja2VkLCB0aGV5CisrICogYXJlIGFzc3Vt ZWQgdG8gcmVtYWluIHRoZSBzYW1lLgorKyAqLworK1N3c0NvbnRleHQgKnN3c19nZXRDYWNoZWRD b250ZXh0KFN3c0NvbnRleHQgKmNvbnRleHQsIGludCBzcmNXLCBpbnQgc3JjSCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgc3JjRm9ybWF0LCBp bnQgZHN0VywgaW50IGRzdEgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVlBpeGVsRm9ybWF0IGRzdEZvcm1hdCwgaW50IGZsYWdzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN3c0ZpbHRlciAqc3JjRmlsdGVyLCBTd3NGaWx0ZXIgKmRzdEZpbHRl ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgKnBhcmFt KTsKKysKKysvKioKKysgKiBDb252ZXJ0IGFuIDgtYml0IHBhbGV0dGVkIGZyYW1lIGludG8gYSBm cmFtZSB3aXRoIGEgY29sb3IgZGVwdGggb2YgMzIgYml0cy4KKysgKgorKyAqIFRoZSBvdXRwdXQg ZnJhbWUgd2lsbCBoYXZlIHRoZSBzYW1lIHBhY2tlZCBmb3JtYXQgYXMgdGhlIHBhbGV0dGUuCisr ICoKKysgKiBAcGFyYW0gc3JjICAgICAgICBzb3VyY2UgZnJhbWUgYnVmZmVyCisrICogQHBhcmFt IGRzdCAgICAgICAgZGVzdGluYXRpb24gZnJhbWUgYnVmZmVyCisrICogQHBhcmFtIG51bV9waXhl bHMgbnVtYmVyIG9mIHBpeGVscyB0byBjb252ZXJ0CisrICogQHBhcmFtIHBhbGV0dGUgICAgYXJy YXkgd2l0aCBbMjU2XSBlbnRyaWVzLCB3aGljaCBtdXN0IG1hdGNoIGNvbG9yIGFycmFuZ2VtZW50 IChSR0Igb3IgQkdSKSBvZiBzcmMKKysgKi8KKyt2b2lkIHN3c19jb252ZXJ0UGFsZXR0ZThUb1Bh Y2tlZDMyKGNvbnN0IHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZHN0LCBpbnQgbnVtX3BpeGVscywg Y29uc3QgdWludDhfdCAqcGFsZXR0ZSk7CisrCisrLyoqCisrICogQ29udmVydCBhbiA4LWJpdCBw YWxldHRlZCBmcmFtZSBpbnRvIGEgZnJhbWUgd2l0aCBhIGNvbG9yIGRlcHRoIG9mIDI0IGJpdHMu CisrICoKKysgKiBXaXRoIHRoZSBwYWxldHRlIGZvcm1hdCAiQUJDRCIsIHRoZSBkZXN0aW5hdGlv biBmcmFtZSBlbmRzIHVwIHdpdGggdGhlIGZvcm1hdCAiQUJDIi4KKysgKgorKyAqIEBwYXJhbSBz cmMgICAgICAgIHNvdXJjZSBmcmFtZSBidWZmZXIKKysgKiBAcGFyYW0gZHN0ICAgICAgICBkZXN0 aW5hdGlvbiBmcmFtZSBidWZmZXIKKysgKiBAcGFyYW0gbnVtX3BpeGVscyBudW1iZXIgb2YgcGl4 ZWxzIHRvIGNvbnZlcnQKKysgKiBAcGFyYW0gcGFsZXR0ZSAgICBhcnJheSB3aXRoIFsyNTZdIGVu dHJpZXMsIHdoaWNoIG11c3QgbWF0Y2ggY29sb3IgYXJyYW5nZW1lbnQgKFJHQiBvciBCR1IpIG9m IHNyYworKyAqLworK3ZvaWQgc3dzX2NvbnZlcnRQYWxldHRlOFRvUGFja2VkMjQoY29uc3QgdWlu dDhfdCAqc3JjLCB1aW50OF90ICpkc3QsIGludCBudW1fcGl4ZWxzLCBjb25zdCB1aW50OF90ICpw YWxldHRlKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBTV1NDQUxFX1NX U0NBTEVfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS92ZXJzaW9uLmguZmZtcGVnOSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Nj YWxlL3ZlcnNpb24uaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvdmVyc2lvbi5oLmZmbXBlZzkJMjAyNi0wOS0w NyAxMjoyMzo0Ny42Nzk5MjQ4MzMgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxlL3ZlcnNpb24uaAkyMDI2 LTA5LTA3IDEyOjIzOjQ3LjY3OTkwNDQzNiArMDIwMAorQEAgLTAsMCArMSw0NCBAQAorKy8qCisr ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK KysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lm bmRlZiBTV1NDQUxFX1ZFUlNJT05fSAorKyNkZWZpbmUgU1dTQ0FMRV9WRVJTSU9OX0gKKysKKysv KioKKysgKiBAZmlsZQorKyAqIHN3c2NhbGUgdmVyc2lvbiBtYWNyb3MKKysgKi8KKysKKysjaW5j bHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIKKysKKysjaW5jbHVkZSAidmVyc2lvbl9tYWpvci5o IgorKworKyNkZWZpbmUgTElCU1dTQ0FMRV9WRVJTSU9OX01JTk9SICAgMQorKyNkZWZpbmUgTElC U1dTQ0FMRV9WRVJTSU9OX01JQ1JPIDEwMAorKworKyNkZWZpbmUgTElCU1dTQ0FMRV9WRVJTSU9O X0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCU1dTQ0FMRV9WRVJTSU9OX01BSk9SLCBcCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTV1NDQUxFX1ZFUlNJ T05fTUlOT1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExJQlNXU0NBTEVfVkVSU0lPTl9NSUNSTykKKysjZGVmaW5lIExJQlNXU0NBTEVfVkVSU0lP TiAgICAgIEFWX1ZFUlNJT04oTElCU1dTQ0FMRV9WRVJTSU9OX01BSk9SLCBcCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNXU0NBTEVfVkVSU0lPTl9NSU5P UiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTV1ND QUxFX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBMSUJTV1NDQUxFX0JVSUxEICAgICAgICBMSUJT V1NDQUxFX1ZFUlNJT05fSU5UCisrCisrI2RlZmluZSBMSUJTV1NDQUxFX0lERU5UICAgICAgICAi U3dTIiBBVl9TVFJJTkdJRlkoTElCU1dTQ0FMRV9WRVJTSU9OKQorKworKyNlbmRpZiAvKiBTV1ND QUxFX1ZFUlNJT05fSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS92ZXJzaW9uX21ham9yLmguZmZt cGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBl Zy92OS9saWJzd3NjYWxlL3ZlcnNpb25fbWFqb3IuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvdmVyc2lvbl9t YWpvci5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzk5OTEzMDcgKzAyMDAKKysrKyBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJzd3NjYWxlL3ZlcnNpb25fbWFqb3IuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTk3NjQzMiAr MDIwMAorQEAgLTAsMCArMSwzNSBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBTV1NDQUxFX1ZFUlNJT05fTUFKT1Jf SAorKyNkZWZpbmUgU1dTQ0FMRV9WRVJTSU9OX01BSk9SX0gKKysKKysvKioKKysgKiBAZmlsZQor KyAqIHN3c2NhbGUgdmVyc2lvbiBtYWNyb3MKKysgKi8KKysKKysjZGVmaW5lIExJQlNXU0NBTEVf VkVSU0lPTl9NQUpPUiAgIDEwCisrCisrLyoqCisrICogRkZfQVBJXyogZGVmaW5lcyBtYXkgYmUg cGxhY2VkIGJlbG93IHRvIGluZGljYXRlIHB1YmxpYyBBUEkgdGhhdCB3aWxsIGJlCisrICogZHJv cHBlZCBhdCBhIGZ1dHVyZSB2ZXJzaW9uIGJ1bXAuIFRoZSBkZWZpbmVzIHRoZW1zZWx2ZXMgYXJl IG5vdCBwYXJ0IG9mCisrICogdGhlIHB1YmxpYyBBUEkgYW5kIG1heSBjaGFuZ2UsIGJyZWFrIG9y IGRpc2FwcGVhciBhdCBhbnkgdGltZS4KKysgKi8KKysKKysjZW5kaWYgLyogU1dTQ0FMRV9WRVJT SU9OX01BSk9SX0ggKi8KCmRpZmYgLS1naXQgYS9tdXNlc2NvcmUuc3BlYyBiL211c2VzY29yZS5z cGVjCmluZGV4IDQ4MmRiYmMuLjMyMDJlNTMgMTAwNjQ0Ci0tLSBhL211c2VzY29yZS5zcGVjCisr KyBiL211c2VzY29yZS5zcGVjCkBAIC0xMSwyOSArMTEsMjkgQEAKICMgLSBSZXNldCB0byAxIGlm IHRoZSB2ZXJzaW9uIGNoYW5nZWQKICMgLSBJbmNyZWFzZSBieSAxIG90aGVyd2lzZQogJWdsb2Jh bCBtc2NvcmVfZm9udF92ZXIgICAgICAgICAgIDIuMDAzCi0lZ2xvYmFsIG1zY29yZV9mb250X3Jl bCAgICAgICAgICAgNDMlez9kaXN0fQorJWdsb2JhbCBtc2NvcmVfZm9udF9yZWwgICAgICAgICAg IDQ0JXs/ZGlzdH0KICVnbG9iYWwgbXNjb3JldGV4dF9mb250X3ZlciAgICAgICAxLjAKLSVnbG9i YWwgbXNjb3JldGV4dF9mb250X3JlbCAgICAgICA0MyV7P2Rpc3R9CislZ2xvYmFsIG1zY29yZXRl eHRfZm9udF9yZWwgICAgICAgNDQlez9kaXN0fQogJWdsb2JhbCBtdXNlc2NvcmVpY29uX2ZvbnRf dmVyICAgIDEuMAotJWdsb2JhbCBtdXNlc2NvcmVpY29uX2ZvbnRfcmVsICAgIDQzJXs/ZGlzdH0K KyVnbG9iYWwgbXVzZXNjb3JlaWNvbl9mb250X3JlbCAgICA0NCV7P2Rpc3R9CiAlZ2xvYmFsIG1z Y29yZWJjX2ZvbnRfdmVyICAgICAgICAgMS4wCi0lZ2xvYmFsIG1zY29yZWJjX2ZvbnRfcmVsICAg ICAgICAgNDMlez9kaXN0fQorJWdsb2JhbCBtc2NvcmViY19mb250X3JlbCAgICAgICAgIDQ0JXs/ ZGlzdH0KICVnbG9iYWwgbXNjb3JldGFidWxhdHVyZV9mb250X3ZlciAwMDEuMDAwCi0lZ2xvYmFs IG1zY29yZXRhYnVsYXR1cmVfZm9udF9yZWwgNDMlez9kaXN0fQorJWdsb2JhbCBtc2NvcmV0YWJ1 bGF0dXJlX2ZvbnRfcmVsIDQ0JXs/ZGlzdH0KICVnbG9iYWwgbXVzZWphenpfZm9udF92ZXIgICAg ICAgICAxLjAKLSVnbG9iYWwgbXVzZWphenpfZm9udF9yZWwgICAgICAgICA0MyV7P2Rpc3R9Cisl Z2xvYmFsIG11c2VqYXp6X2ZvbnRfcmVsICAgICAgICAgNDQlez9kaXN0fQogJWdsb2JhbCBnb290 dmlsbGVfZm9udF92ZXIgICAgICAgIDEuMwotJWdsb2JhbCBnb290dmlsbGVfZm9udF9yZWwgICAg ICAgIDQzJXs/ZGlzdH0KKyVnbG9iYWwgZ29vdHZpbGxlX2ZvbnRfcmVsICAgICAgICA0NCV7P2Rp c3R9CiAlZ2xvYmFsIGdvb3R2aWxsZV90ZXh0X2ZvbnRfdmVyICAgMS4yCi0lZ2xvYmFsIGdvb3R2 aWxsZV90ZXh0X2ZvbnRfcmVsICAgNDMlez9kaXN0fQorJWdsb2JhbCBnb290dmlsbGVfdGV4dF9m b250X3JlbCAgIDQ0JXs/ZGlzdH0KICVnbG9iYWwgc291bmRmb250X3ZlciAgICAgICAgICAgICAw LjIuMAotJWdsb2JhbCBzb3VuZGZvbnRfcmVsICAgICAgICAgICAgIDQzJXs/ZGlzdH0KKyVnbG9i YWwgc291bmRmb250X3JlbCAgICAgICAgICAgICA0NCV7P2Rpc3R9CiAKIE5hbWU6ICAgICAgICAg ICBtdXNlc2NvcmUKIFN1bW1hcnk6ICAgICAgICBNdXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0aW9u IFNvZnR3YXJlCiBWZXJzaW9uOiAgICAgICAgJXttdXNlc2NvcmVfdmVyfQogIyBJTVBPUlRBTlQ6 IENoYW5nZSBhbGwgdGhlIHJlbGVhc2UgbnVtYmVycyBhYm92ZSwgdG9vIQotUmVsZWFzZTogICAg ICAgIDIlez9kaXN0fQorUmVsZWFzZTogICAgICAgIDMlez9kaXN0fQogCiAjIFRoZSBNdXNlU2Nv cmUgcHJvamVjdCBpdHNlbGYgaXMgR1BMLTMuMC1vbmx5IFdJVEggRm9udC1leGNlcHRpb24tMi4w LiAgT3RoZXIKICMgbGljZW5zZXMgaW4gcGxheToKQEAgLTI0NSw2ICsyNDUsMTAgQEAgUGF0Y2g6 ICAgICAgICAgICV7bmFtZX0tdnN0LnBhdGNoCiAjIGh0dHBzOi8vZ2l0aHViLmNvbS9tdXNlc2Nv cmUvTXVzZVNjb3JlL3B1bGwvMzQyMDQKIFBhdGNoOiAgICAgICAgICAle25hbWV9LXN0eWxlZGRy b3Bkb3dubmF2aWdhdGlvbi5wYXRjaAogCisjIEFkZCBGRm1wZWcgOSBzdXBwb3J0CisjIGh0dHBz Oi8vZ2l0aHViLmNvbS9tdXNlc2NvcmUvbXVzZV9mcmFtZXdvcmsvcHVsbC8yMDEKK1BhdGNoOiAg ICAgICAgICAle25hbWV9LWZmbXBlZzkucGF0Y2gKKwogIyBTZWUgaHR0cHM6Ly9mZWRvcmFwcm9q ZWN0Lm9yZy93aWtpL0NoYW5nZXMvRW5jb3VyYWdlSTY4NkxlYWZSZW1vdmFsCiBFeGNsdWRlQXJj aDogICAgJXtpeDg2fQogQnVpbGRTeXN0ZW06ICAgIGNtYWtlCkBAIC0yODksNyArMjkzLDYgQEAg QnVpbGRSZXF1aXJlczogIGNtYWtlKFF0NldlYlNvY2tldHMpCiBCdWlsZFJlcXVpcmVzOiAgY21h a2UoUXQ2V2lkZ2V0cykKIEJ1aWxkUmVxdWlyZXM6ICBjbWFrZShRdDZYbWwpCiBCdWlsZFJlcXVp cmVzOiAgZGVza3RvcC1maWxlLXV0aWxzCi1CdWlsZFJlcXVpcmVzOiAgZmZtcGVnLWZyZWUtZGV2 ZWwKIEJ1aWxkUmVxdWlyZXM6ICBmb250KGJyYXZ1cmEpCiBCdWlsZFJlcXVpcmVzOiAgZm9udChi cmF2dXJhdGV4dCkKIEJ1aWxkUmVxdWlyZXM6ICBmb250KGNhbXBhbmlhKQpAQCAtMzE1LDcgKzMx OCw2IEBAIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcoZnJlZXR5cGUyKQogQnVpbGRSZXF1aXJl czogIHBrZ2NvbmZpZyhoYXJmYnV6eikKIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcobGlibG91 aXMpCiBCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKGxpYm9wdXNlbmMpCi1CdWlsZFJlcXVpcmVz OiAgKHBrZ2NvbmZpZyhsaWJwb3N0cHJvYykgaWYgbGliYXZjb2RlYy1mcmVlIDwgOC4wKQogQnVp bGRSZXF1aXJlczogIHBrZ2NvbmZpZyhsaWJwaXBld2lyZS0wLjMpCiBCdWlsZFJlcXVpcmVzOiAg cGtnY29uZmlnKGxpYnB1bHNlKQogQnVpbGRSZXF1aXJlczogIHBrZ2NvbmZpZyhtbnhkb20pCkBA IC03NjksNiArNzcxLDEwIEBAIEVPRgogJWZvbnRmaWxlcyAteiA5CiAKICVjaGFuZ2Vsb2cKKyog TW9uIFNlcCAwNyAyMDI2IERvbWluaWsgTWllcnplamV3c2tpIDxkb21pbmlrQGdyZXlzZWN0b3Iu bmV0PiAtIDQuNy40LTMKKy0gQmFja3BvcnQgdXBzdHJlYW0gUFIgdG8gc3VwcG9ydCBGRm1wZWcg OQorLSBEcm9wIHVubmVjZXNzYXJ5IEJ1aWxkUmVxdWlyZXMgb24gRkZtcGVnICh1c2VzIGJ1bmRs ZWQgaGVhZGVycykKKwogKiBNb24gSnVsIDIwIDIwMjYgSmVycnkgSmFtZXMgPGxvZ2FuamVycnlA Z21haWwuY29tPiAtIDQuNy40LTIKIC0gQWRkIHBhdGNoIHRvIGZpeCBTdHlsZWREcm9wZG93biBu dWxsIHJlZmVyZW5jZXMKIAo=