From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igal.Liberman Subject: [PATCH 09/12] fsl/fman: Add FMan MAC support Date: Wed, 10 Jun 2015 11:03:24 +0300 Message-ID: <1433923404-22548-1-git-send-email-igal.liberman@freescale.com> Reply-To: igal.liberman@freescale.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: scottwood@freescale.com, Igal Liberman , linuxppc-dev@lists.ozlabs.org, madalin.bucur@freescale.com To: Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKQWRkIEZy YW1lIE1hbmdlciBNQUMgRHJpdmVyIHN1cHBvcnQuClRoaXMgcGF0Y2ggYWRkcyBUaGUgRk1hbiBN QUMgY29uZmlndXJhdGlvbiwgaW5pdGlhbGl6YXRpb24gYW5kCnJ1bnRpbWUgY29udHJvbCByb3V0 aW5lcy4KVGhpcyBwYXRjaCBjb250YWlucyBzdXBwb3J0IGZvciB0aGVzZSB0eXBlcyBvZiBNQUNz OgoJdEdFQywgZFRTRUMgYW5kIG1FTUFDCgpTaWduZWQtb2ZmLWJ5OiBJZ2FsIExpYmVybWFuIDxJ Z2FsLkxpYmVybWFuQGZyZWVzY2FsZS5jb20+ClNpZ25lZC1vZmYtYnk6IE1hZGFsaW4gQnVjdXIg PG1hZGFsaW4uYnVjdXJAZnJlZXNjYWxlLmNvbT4KLS0tCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9mbS5jICAgICAgICAgICB8ICAgNzMgKysKIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmggICAgICAgICAgIHwgICAgMyArCiBkcml2ZXJzL25ldC9l dGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaCAgICB8ICAgNDEgKwogLi4uL2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9jcmNfbWFjX2FkZHJfZXh0LmggfCAgMzQzICsrKysrKwog ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL01ha2VmaWxlICAgfCAgICA0 ICstCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWMuYyB8 IDEwODkgKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2Fs ZS9mbWFuL21hYy9mbV9kdHNlYy5oIHwgIDIyNyArKysrCiAuLi4vZXRoZXJuZXQvZnJlZXNjYWxl L2ZtYW4vbWFjL2ZtX2R0c2VjX21paV9hY2MuYyB8ICAgODIgKysKIC4uLi9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9tYWMvZm1fZHRzZWNfbWlpX2FjYy5oIHwgICA0MyArCiBkcml2ZXJzL25ldC9l dGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWFjLmggICB8ICAyNTAgKysrKysKIGRyaXZl cnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9tZW1hYy5jIHwgIDc0MSArKysr KysrKysrKysrCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVt YWMuaCB8ICAxMjQgKysrCiAuLi4vZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFj X21paV9hY2MuYyB8ICAgNjYgKysKIC4uLi9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1f bWVtYWNfbWlpX2FjYy5oIHwgICA1MCArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUv Zm1hbi9tYWMvZm1fdGdlYy5jICB8ICA2NTIgKysrKysrKysrKysrCiBkcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fdGdlYy5oICB8ICAxMjYgKysrCiAxNiBmaWxlcyBj aGFuZ2VkLCAzOTEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvY3JjX21hY19hZGRy X2V4dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxl L2ZtYW4vbWFjL2ZtX2R0c2VjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9kdHNlY19taWlfYWNjLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9t YWMvZm1fZHRzZWNfbWlpX2FjYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21hYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFjLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVt YWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9m bWFuL21hYy9mbV9tZW1hY19taWlfYWNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25l dC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVtYWNfbWlpX2FjYy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX3Rn ZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9m bWFuL21hYy9mbV90Z2VjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9mbS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0u YwppbmRleCA1YmViMTE4Li5mZDZkZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9mbS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2Fs ZS9mbWFuL2ZtLmMKQEAgLTcwMyw2ICs3MDMsMzUgQEAgc3RhdGljIGludCBmd19ub3RfcmVzZXRf ZXJyYXR1bV9idWd6aWxsYTYxNzN3YShzdHJ1Y3QgZm1fdCAqcF9mbSkKICNlbmRpZiAvKiBGTV9V Q09ERV9OT1RfUkVTRVRfRVJSQVRBX0JVR1pJTExBNjE3MyAqLwogCiAvKiAgICAgICBJbnRlci1N b2R1bGUgZnVuY3Rpb25zICAgICAgICAgKi8KKyNpZmRlZiBGTV9UWF9FQ0NfRlJNU19FUlJBVEFf MTBHTUFDX0EwMDQKK2ludCBmbV8xMGdfdHhfZWNjX3dvcmthcm91bmQoc3RydWN0IGZtX3QgKnBf Zm0sIHVpbnQ4X3QgbWFjX2lkKQoreworCXVpbnQ4X3QgcnhfcG9ydF9pZCwgdHhfcG9ydF9pZDsK KwlzdHJ1Y3QgZm1hbl9mcG1fcmVncyBfX2lvbWVtICpmcG1fcmcgPSBwX2ZtLT5wX2ZtX2ZwbV9y ZWdzOworCisJaWYgKCEoaXNfZm1hbl9jdHJsX2NvZGVfbG9hZGVkKHBfZm0pKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlTV19QT1JUX0lEX1RPX0hXX1BPUlRfSUQocF9mbS0+cF9mbV9zdGF0ZV9z dHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiwKKwkJCQkgcnhfcG9ydF9pZCwKKwkJCQkgRk1fUE9S VF9UWVBFX1JYLAorCQkJCSBtYWNfaWQpOworCVNXX1BPUlRfSURfVE9fSFdfUE9SVF9JRChwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2LAorCQkJCSB0eF9wb3J0X2lk LAorCQkJCSBGTV9QT1JUX1RZUEVfVFgsCisJCQkJIG1hY19pZCk7CisKKwlpZiAoKHBfZm0tPnBf Zm1fc3RhdGVfc3RydWN0LT5wb3J0c190eXBlc1tyeF9wb3J0X2lkXSAhPQorCSAgICAgRk1fUE9S VF9UWVBFX0RVTU1ZKSB8fAorCSAgICAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnBvcnRzX3R5 cGVzW3R4X3BvcnRfaWRdICE9CisJCUZNX1BPUlRfVFlQRV9EVU1NWSkpIHsKKwkJcHJfZXJyKCJJ bml0aWFsaXplIE1BQyAgcHJpb3IgdG8gUnggJiBUeCBwb3J0cyFcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gZm1hbl9zZXRfZXJyYXR1bV8xMGdtYWNfYTAwNF93YShmcG1f cmcpOworfQorI2VuZGlmIC8qIEZNX1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAwNCAqLwog CiB2b2lkIGZtX3JlZ2lzdGVyX2ludHIoc3RydWN0IGZtX3QgKnBfZm0sIGVudW0gZm1fZXZlbnRf bW9kdWxlcyBtb2R1bGUsCiAJCSAgICAgIHVpbnQ4X3QgbW9kX2lkLCBlbnVtIGZtX2ludHJfdHlw ZSBpbnRyX3R5cGUsCkBAIC03MzUsNiArNzY0LDUwIEBAIHVpbnQ4X3QgZm1fZ2V0X2lkKHN0cnVj dCBmbV90ICpwX2ZtKQogCXJldHVybiBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+Zm1faWQ7CiB9 CiAKK2ludCBmbV9yZXNldF9tYWMoc3RydWN0IGZtX3QgKnBfZm0sIHVpbnQ4X3QgbWFjX2lkKQor eworCWludCBlcnI7CisJc3RydWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAqZnBtX3JnID0gcF9m bS0+cF9mbV9mcG1fcmVnczsKKworCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2lu Zm8ubWFqb3JfcmV2ID49IDYpIHsKKwkJcHJfd2FybigiRk1hbiBNQUMgcmVzZXQhXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghcF9mbS0+YmFzZV9hZGRyKSB7CisJCXByX3dhcm4o IidiYXNlX2FkZHJlc3MnIGlzIHJlcXVpcmVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KwllcnIgPQorCSAgICAoaW50KWZtYW5fcmVzZXRfbWFjKGZwbV9yZywgbWFjX2lkKTsKKworCWlm IChlcnIgPT0gLUVJTlZBTCkgeworCQlwcl93YXJuKCJJbGxlZ2FsIE1BQyBJZFxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoZXJyID09IEVJTlZBTCkgeworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBmbV9zZXRfbWFjX21heF9mcmFtZShzdHJ1 Y3QgZm1fdCAqcF9mbSwgZW51bSBmbV9tYWNfdHlwZSB0eXBlLAorCQkJIHVpbnQ4X3QgbWFjX2lk LAorCQkJICAgICB1aW50MTZfdCBtdHUpCit7CisJLyogaWYgcG9ydCBpcyBhbHJlYWR5IGluaXRp YWxpemVkLCBjaGVjayB0aGF0IE1heEZyYW1lTGVuZ3RoIGlzIHNtYWxsZXIKKwkgKiBvciBlcXVh bCB0byB0aGUgcG9ydCdzIG1heAorCSAqLworCWlmICgoIXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0 LT5wb3J0X21heF9mcmFtZV9sZW5ndGhzW21hY19pZF0pIHx8CisJICAgIChwX2ZtLT5wX2ZtX3N0 YXRlX3N0cnVjdC0+cG9ydF9tYXhfZnJhbWVfbGVuZ3Roc1ttYWNfaWRdICYmCisJICAgIChtdHUg PD0KKwkgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnBvcnRfbWF4X2ZyYW1lX2xlbmd0aHNb bWFjX2lkXSkpKSB7CisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5tYWNfbWF4X2ZyYW1lX2xl bmd0aHNbbWFjX2lkXSA9IG10dTsKKwl9IGVsc2UgeworCQlwcl93YXJuKCJNQUMgbWF4X2ZyYW1l X2xlbmd0aCBpcyBsYXJnZXIgdGhhbiBQb3J0IG1heF9mcmFtZV9sZW5ndGhcbiIpOworCQlyZXR1 cm4gLUVET007CisJfQorCXJldHVybiAwOworfQorCiB1aW50MTZfdCBmbV9nZXRfY2xvY2tfZnJl cShzdHJ1Y3QgZm1fdCAqcF9mbSkKIHsKIAkvKiBmb3IgbXVsdGljb3JlIGVudmlyb25tZW50OiB0 aGlzIGRlcGVuZHMgb24gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9mbS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0u aAppbmRleCBmN2Y1NmUzLi41YTJhOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9mbS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2Fs ZS9mbWFuL2ZtLmgKQEAgLTMxMyw2ICszMTMsNyBAQCBzdHJ1Y3QgZm1faXJhbV9yZWdzX3Qgewog CiBzdHJ1Y3QgZm1fc3RhdGVfc3RydWN0X3QgewogCXVpbnQ4X3QgZm1faWQ7CisJZW51bSBmbV9w b3J0X3R5cGUgcG9ydHNfdHlwZXNbRk1fTUFYX05VTV9PRl9IV19QT1JUX0lEU107CiAJdWludDE2 X3QgZm1fY2xrX2ZyZXE7CiAJc3RydWN0IGZtX3JldmlzaW9uX2luZm9fdCByZXZfaW5mbzsKIAli b29sIGVuYWJsZWRfdGltZV9zdGFtcDsKQEAgLTMzNCw2ICszMzUsOCBAQCBzdHJ1Y3QgZm1fc3Rh dGVfc3RydWN0X3QgewogCXVpbnQzMl90IGV4dHJhX2ZpZm9fcG9vbF9zaXplOwogCXVpbnQ4X3Qg ZXh0cmFfdGFza3NfcG9vbF9zaXplOwogCXVpbnQ4X3QgZXh0cmFfb3Blbl9kbWFzX3Bvb2xfc2l6 ZTsKKwl1aW50MTZfdCBwb3J0X21heF9mcmFtZV9sZW5ndGhzW0ZNX01BWF9OVU1fT0ZfTUFDU107 CisJdWludDE2X3QgbWFjX21heF9mcmFtZV9sZW5ndGhzW0ZNX01BWF9OVU1fT0ZfTUFDU107CiB9 OwogCiBzdHJ1Y3QgZm1faW50Z190IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2ZtX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNj YWxlL2ZtYW4vZm1fY29tbW9uLmgKaW5kZXggMTI1YzA1Ny4uNDVjNDUwYiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fY29tbW9uLmgKKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fY29tbW9uLmgKQEAgLTIxNSw2ICsy MTUsMzAgQEAgc3RhdGljIGlubGluZSBib29sIFRSWV9MT0NLKHNwaW5sb2NrX3QgKnNwaW5sb2Nr LCB2b2xhdGlsZSBib29sICpwX2ZsYWcpCiAKICNkZWZpbmUgRk1fQ1RMX1BBUkFNU19QQUdFX0VS Uk9SX1ZTUF9NQVNLICAgICAgIDB4MDAwMDAwM2YKIAorLyogRGVzY3JpcHRpb24gICAgICAgUG9y dCBJZCBkZWZpbmVzICovCisjZGVmaW5lIEJBU0VfT0hfUE9SVElEKG1ham9yKQkJKG1ham9yID49 IDYgPyAyIDogMSkKKyNkZWZpbmUgQkFTRV9SWF9QT1JUSUQJCQkweDA4CisjZGVmaW5lIEJBU0Vf VFhfUE9SVElECQkJMHgyOAorCisjZGVmaW5lIFNXX1BPUlRfSURfVE9fSFdfUE9SVF9JRChtYWpv ciwgX3BvcnQsCXR5cGUsIG1hY19pZCkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3dpdGNoICh0eXBl KSB7CQkJCQkJCVwKKwljYXNlIChGTV9QT1JUX1RZUEVfT1ApOgkJCQkJCVwKKwkJX3BvcnQgPSAo dWludDhfdCkoQkFTRV9PSF9QT1JUSUQobWFqb3IpICsgbWFjX2lkKTsJXAorCQlicmVhazsJCQkJ CQkJXAorCWNhc2UgKEZNX1BPUlRfVFlQRV9SWCk6CQkJCQlcCisJCV9wb3J0ID0gKHVpbnQ4X3Qp KEJBU0VfUlhfUE9SVElEICsgbWFjX2lkKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIChG TV9QT1JUX1RZUEVfVFgpOgkJCQkJXAorCQlfcG9ydCA9ICh1aW50OF90KShCQVNFX1RYX1BPUlRJ RCArIG1hY19pZCk7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlw cl9lcnIoIklsbGVnYWwgcG9ydCB0eXBlXG4iKTsJCQkJXAorCQlfcG9ydCA9IDA7CQkJCQkJXAor CQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgQk1J X01BWF9GSUZPX1NJWkUgICAgICAgICAgICAgICAgICAgKEZNX01VUkFNX1NJWkUpCiAjZGVmaW5l IEJNSV9GSUZPX1VOSVRTICAgICAgICAgICAgICAgICAgICAgIDB4MTAwCiAKQEAgLTMyOSw2ICsz NTMsMTYgQEAgc3RydWN0IG11cmFtX2luZm8gKmZtX2dldF9tdXJhbV9wb2ludGVyKHN0cnVjdCBm bV90ICpwX2ZtKTsKIHZvaWQgZm1fZ2V0X3BoeXNpY2FsX211cmFtX2Jhc2Uoc3RydWN0IGZtX3Qg KnBfZm0sCiAJCQkJc3RydWN0IGZtX3BoeXNfYWRkcl90ICpmbV9waHlzX2FkZHIpOwogCisvKiBG dW5jdGlvbiAgICAgIGZtX3Jlc2V0X21hYworICogRGVzY3JpcHRpb24gICBVc2VkIGJ5IE1BQyBk cml2ZXIgdG8gcmVzZXQgdGhlIE1BQyByZWdpc3RlcnMKKyAqIFBhcmFtW2luXSAgICAgaF9mbSAg ICAgICAgICAgIEEgaGFuZGxlIHRvIGFuIEZNIE1vZHVsZS4KKyAqIFBhcmFtW2luXSAgICAgdHlw ZSAgICAgICAgICAgIE1BQyB0eXBlLgorICogUGFyYW1baW5dICAgICBtYWNfaWQgICAgICAgICAg IE1BQyBpZCAtIGFjY29yZGluZyB0byB0eXBlLgorICogUmV0dXJuICAgICAgICAwIG9uIHN1Y2Nl c3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICogQ2F1dGlvbnMgICAgICBBbGxvd2VkIG9ubHkg Zm9sbG93aW5nIGZtX2luaXQoKS4KKyAqLworaW50IGZtX3Jlc2V0X21hYyhzdHJ1Y3QgZm1fdCAq cF9mbSwgdWludDhfdCBtYWNfaWQpOworCiAvKiBGdW5jdGlvbiAgICAgIGZtX2dldF9jbG9ja19m cmVxCiAgKiBEZXNjcmlwdGlvbiAgIFVzZWQgYnkgTUFDIGRyaXZlciB0byBnZXQgdGhlIEZNIGNs b2NrIGZyZXF1ZW5jeQogICogUGFyYW1baW5dICAgICBoX2ZtICAgICAgICAgICAgQSBoYW5kbGUg dG8gYW4gRk0gTW9kdWxlLgpAQCAtMzQ1LDYgKzM3OSwxMCBAQCB1aW50MTZfdCBmbV9nZXRfY2xv Y2tfZnJlcShzdHJ1Y3QgZm1fdCAqcF9mbSk7CiAgKi8KIHVpbnQ4X3QgZm1fZ2V0X2lkKHN0cnVj dCBmbV90ICpwX2ZtKTsKIAorI2lmZGVmIEZNX1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAw NAoraW50IGZtXzEwZ190eF9lY2Nfd29ya2Fyb3VuZChzdHJ1Y3QgZm1fdCAqcF9mbSwgdWludDhf dCBtYWNfaWQpOworI2VuZGlmIC8qIEZNX1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAwNCAq LworCiBpbnQgZm1fc2V0X251bV9vZl9vcGVuX2RtYXMoc3RydWN0IGZtX3QgKnBfZm0sCiAJCQkg ICAgdWludDhfdCBwb3J0X2lkLAogCQkJICAgIHVpbnQ4X3QgKnBfbnVtX29mX29wZW5fZG1hcywK QEAgLTM2NCw0ICs0MDIsNyBAQCBpbnQgZm1fc2V0X3NpemVfb2ZfZmlmbyhzdHJ1Y3QgZm1fdCAq cF9mbSwKIHVpbnQzMl90IGZtX2dldF9ibWlfbWF4X2ZpZm9fc2l6ZShzdHJ1Y3QgZm1fdCAqcF9m bSk7CiBzdHJ1Y3QgbnVtX29mX3BvcnRzX2luZm9fdCAqZm1fZ2V0X251bV9vZl9wb3J0cyhzdHJ1 Y3QgZm1fdCAqcF9mbSk7CiAKK2ludCBmbV9zZXRfbWFjX21heF9mcmFtZShzdHJ1Y3QgZm1fdCAq cF9mbSwgZW51bSBmbV9tYWNfdHlwZSB0eXBlLAorCQkJIHVpbnQ4X3QgbWFjX2lkLCB1aW50MTZf dCBtdHUpOworCiAjZW5kaWYgLyogX19GTV9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2NyY19tYWNfYWRkcl9leHQuaCBiL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9jcmNfbWFjX2FkZHJfZXh0LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0NjhjYgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9jcmNfbWFjX2Fk ZHJfZXh0LmgKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZy ZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICog TmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAg ICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVS TkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29u ZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBEZWZpbmUgYSBt YWNybyB0aGF0IGNhbGN1bGF0ZSB0aGUgY3JjIHZhbHVlIG9mIGFuIEV0aGVybmV0IE1BQyBhZGRy ZXNzCisgKiAoNDggYml0ZCBhZGRyZXNzKQorICovCisKKyNpZm5kZWYgX19jcmNfbWFjX2FkZHJf ZXh0X2gKKyNkZWZpbmUgX19jcmNfbWFjX2FkZHJfZXh0X2gKKworI2luY2x1ZGUgPGxpbnV4L2Jp dHJldi5oPgorCitzdGF0aWMgdWludDMyX3QgY3JjX3RhYmxlWzI1Nl0gPSB7CisJMHgwMDAwMDAw MCwKKwkweDc3MDczMDk2LAorCTB4ZWUwZTYxMmMsCisJMHg5OTA5NTFiYSwKKwkweDA3NmRjNDE5 LAorCTB4NzA2YWY0OGYsCisJMHhlOTYzYTUzNSwKKwkweDllNjQ5NWEzLAorCTB4MGVkYjg4MzIs CisJMHg3OWRjYjhhNCwKKwkweGUwZDVlOTFlLAorCTB4OTdkMmQ5ODgsCisJMHgwOWI2NGMyYiwK KwkweDdlYjE3Y2JkLAorCTB4ZTdiODJkMDcsCisJMHg5MGJmMWQ5MSwKKwkweDFkYjcxMDY0LAor CTB4NmFiMDIwZjIsCisJMHhmM2I5NzE0OCwKKwkweDg0YmU0MWRlLAorCTB4MWFkYWQ0N2QsCisJ MHg2ZGRkZTRlYiwKKwkweGY0ZDRiNTUxLAorCTB4ODNkMzg1YzcsCisJMHgxMzZjOTg1NiwKKwkw eDY0NmJhOGMwLAorCTB4ZmQ2MmY5N2EsCisJMHg4YTY1YzllYywKKwkweDE0MDE1YzRmLAorCTB4 NjMwNjZjZDksCisJMHhmYTBmM2Q2MywKKwkweDhkMDgwZGY1LAorCTB4M2I2ZTIwYzgsCisJMHg0 YzY5MTA1ZSwKKwkweGQ1NjA0MWU0LAorCTB4YTI2NzcxNzIsCisJMHgzYzAzZTRkMSwKKwkweDRi MDRkNDQ3LAorCTB4ZDIwZDg1ZmQsCisJMHhhNTBhYjU2YiwKKwkweDM1YjVhOGZhLAorCTB4NDJi Mjk4NmMsCisJMHhkYmJiYzlkNiwKKwkweGFjYmNmOTQwLAorCTB4MzJkODZjZTMsCisJMHg0NWRm NWM3NSwKKwkweGRjZDYwZGNmLAorCTB4YWJkMTNkNTksCisJMHgyNmQ5MzBhYywKKwkweDUxZGUw MDNhLAorCTB4YzhkNzUxODAsCisJMHhiZmQwNjExNiwKKwkweDIxYjRmNGI1LAorCTB4NTZiM2M0 MjMsCisJMHhjZmJhOTU5OSwKKwkweGI4YmRhNTBmLAorCTB4MjgwMmI4OWUsCisJMHg1ZjA1ODgw OCwKKwkweGM2MGNkOWIyLAorCTB4YjEwYmU5MjQsCisJMHgyZjZmN2M4NywKKwkweDU4Njg0YzEx LAorCTB4YzE2MTFkYWIsCisJMHhiNjY2MmQzZCwKKwkweDc2ZGM0MTkwLAorCTB4MDFkYjcxMDYs CisJMHg5OGQyMjBiYywKKwkweGVmZDUxMDJhLAorCTB4NzFiMTg1ODksCisJMHgwNmI2YjUxZiwK KwkweDlmYmZlNGE1LAorCTB4ZThiOGQ0MzMsCisJMHg3ODA3YzlhMiwKKwkweDBmMDBmOTM0LAor CTB4OTYwOWE4OGUsCisJMHhlMTBlOTgxOCwKKwkweDdmNmEwZGJiLAorCTB4MDg2ZDNkMmQsCisJ MHg5MTY0NmM5NywKKwkweGU2NjM1YzAxLAorCTB4NmI2YjUxZjQsCisJMHgxYzZjNjE2MiwKKwkw eDg1NjUzMGQ4LAorCTB4ZjI2MjAwNGUsCisJMHg2YzA2OTVlZCwKKwkweDFiMDFhNTdiLAorCTB4 ODIwOGY0YzEsCisJMHhmNTBmYzQ1NywKKwkweDY1YjBkOWM2LAorCTB4MTJiN2U5NTAsCisJMHg4 YmJlYjhlYSwKKwkweGZjYjk4ODdjLAorCTB4NjJkZDFkZGYsCisJMHgxNWRhMmQ0OSwKKwkweDhj ZDM3Y2YzLAorCTB4ZmJkNDRjNjUsCisJMHg0ZGIyNjE1OCwKKwkweDNhYjU1MWNlLAorCTB4YTNi YzAwNzQsCisJMHhkNGJiMzBlMiwKKwkweDRhZGZhNTQxLAorCTB4M2RkODk1ZDcsCisJMHhhNGQx YzQ2ZCwKKwkweGQzZDZmNGZiLAorCTB4NDM2OWU5NmEsCisJMHgzNDZlZDlmYywKKwkweGFkNjc4 ODQ2LAorCTB4ZGE2MGI4ZDAsCisJMHg0NDA0MmQ3MywKKwkweDMzMDMxZGU1LAorCTB4YWEwYTRj NWYsCisJMHhkZDBkN2NjOSwKKwkweDUwMDU3MTNjLAorCTB4MjcwMjQxYWEsCisJMHhiZTBiMTAx MCwKKwkweGM5MGMyMDg2LAorCTB4NTc2OGI1MjUsCisJMHgyMDZmODViMywKKwkweGI5NjZkNDA5 LAorCTB4Y2U2MWU0OWYsCisJMHg1ZWRlZjkwZSwKKwkweDI5ZDljOTk4LAorCTB4YjBkMDk4MjIs CisJMHhjN2Q3YThiNCwKKwkweDU5YjMzZDE3LAorCTB4MmViNDBkODEsCisJMHhiN2JkNWMzYiwK KwkweGMwYmE2Y2FkLAorCTB4ZWRiODgzMjAsCisJMHg5YWJmYjNiNiwKKwkweDAzYjZlMjBjLAor CTB4NzRiMWQyOWEsCisJMHhlYWQ1NDczOSwKKwkweDlkZDI3N2FmLAorCTB4MDRkYjI2MTUsCisJ MHg3M2RjMTY4MywKKwkweGUzNjMwYjEyLAorCTB4OTQ2NDNiODQsCisJMHgwZDZkNmEzZSwKKwkw eDdhNmE1YWE4LAorCTB4ZTQwZWNmMGIsCisJMHg5MzA5ZmY5ZCwKKwkweDBhMDBhZTI3LAorCTB4 N2QwNzllYjEsCisJMHhmMDBmOTM0NCwKKwkweDg3MDhhM2QyLAorCTB4MWUwMWYyNjgsCisJMHg2 OTA2YzJmZSwKKwkweGY3NjI1NzVkLAorCTB4ODA2NTY3Y2IsCisJMHgxOTZjMzY3MSwKKwkweDZl NmIwNmU3LAorCTB4ZmVkNDFiNzYsCisJMHg4OWQzMmJlMCwKKwkweDEwZGE3YTVhLAorCTB4Njdk ZDRhY2MsCisJMHhmOWI5ZGY2ZiwKKwkweDhlYmVlZmY5LAorCTB4MTdiN2JlNDMsCisJMHg2MGIw OGVkNSwKKwkweGQ2ZDZhM2U4LAorCTB4YTFkMTkzN2UsCisJMHgzOGQ4YzJjNCwKKwkweDRmZGZm MjUyLAorCTB4ZDFiYjY3ZjEsCisJMHhhNmJjNTc2NywKKwkweDNmYjUwNmRkLAorCTB4NDhiMjM2 NGIsCisJMHhkODBkMmJkYSwKKwkweGFmMGExYjRjLAorCTB4MzYwMzRhZjYsCisJMHg0MTA0N2E2 MCwKKwkweGRmNjBlZmMzLAorCTB4YTg2N2RmNTUsCisJMHgzMTZlOGVlZiwKKwkweDQ2NjliZTc5 LAorCTB4Y2I2MWIzOGMsCisJMHhiYzY2ODMxYSwKKwkweDI1NmZkMmEwLAorCTB4NTI2OGUyMzYs CisJMHhjYzBjNzc5NSwKKwkweGJiMGI0NzAzLAorCTB4MjIwMjE2YjksCisJMHg1NTA1MjYyZiwK KwkweGM1YmEzYmJlLAorCTB4YjJiZDBiMjgsCisJMHgyYmI0NWE5MiwKKwkweDVjYjM2YTA0LAor CTB4YzJkN2ZmYTcsCisJMHhiNWQwY2YzMSwKKwkweDJjZDk5ZThiLAorCTB4NWJkZWFlMWQsCisJ MHg5YjY0YzJiMCwKKwkweGVjNjNmMjI2LAorCTB4NzU2YWEzOWMsCisJMHgwMjZkOTMwYSwKKwkw eDljMDkwNmE5LAorCTB4ZWIwZTM2M2YsCisJMHg3MjA3Njc4NSwKKwkweDA1MDA1NzEzLAorCTB4 OTViZjRhODIsCisJMHhlMmI4N2ExNCwKKwkweDdiYjEyYmFlLAorCTB4MGNiNjFiMzgsCisJMHg5 MmQyOGU5YiwKKwkweGU1ZDViZTBkLAorCTB4N2NkY2VmYjcsCisJMHgwYmRiZGYyMSwKKwkweDg2 ZDNkMmQ0LAorCTB4ZjFkNGUyNDIsCisJMHg2OGRkYjNmOCwKKwkweDFmZGE4MzZlLAorCTB4ODFi ZTE2Y2QsCisJMHhmNmI5MjY1YiwKKwkweDZmYjA3N2UxLAorCTB4MThiNzQ3NzcsCisJMHg4ODA4 NWFlNiwKKwkweGZmMGY2YTcwLAorCTB4NjYwNjNiY2EsCisJMHgxMTAxMGI1YywKKwkweDhmNjU5 ZWZmLAorCTB4Zjg2MmFlNjksCisJMHg2MTZiZmZkMywKKwkweDE2NmNjZjQ1LAorCTB4YTAwYWUy NzgsCisJMHhkNzBkZDJlZSwKKwkweDRlMDQ4MzU0LAorCTB4MzkwM2IzYzIsCisJMHhhNzY3MjY2 MSwKKwkweGQwNjAxNmY3LAorCTB4NDk2OTQ3NGQsCisJMHgzZTZlNzdkYiwKKwkweGFlZDE2YTRh LAorCTB4ZDlkNjVhZGMsCisJMHg0MGRmMGI2NiwKKwkweDM3ZDgzYmYwLAorCTB4YTliY2FlNTMs CisJMHhkZWJiOWVjNSwKKwkweDQ3YjJjZjdmLAorCTB4MzBiNWZmZTksCisJMHhiZGJkZjIxYywK KwkweGNhYmFjMjhhLAorCTB4NTNiMzkzMzAsCisJMHgyNGI0YTNhNiwKKwkweGJhZDAzNjA1LAor CTB4Y2RkNzA2OTMsCisJMHg1NGRlNTcyOSwKKwkweDIzZDk2N2JmLAorCTB4YjM2NjdhMmUsCisJ MHhjNDYxNGFiOCwKKwkweDVkNjgxYjAyLAorCTB4MmE2ZjJiOTQsCisJMHhiNDBiYmUzNywKKwkw eGMzMGM4ZWExLAorCTB4NWEwNWRmMWIsCisJMHgyZDAyZWY4ZAorfTsKKworLyogQ1JDIGNhbGN1 bGF0aW9uICovCisjZGVmaW5lIEdFVF9NQUNfQUREUl9DUkMoYWRkciwgY3JjKQkJCQlcCit7CQkJ CQkJCQlcCisJdWludDMyX3QgaTsJCQkJCQlcCisJdWludDhfdCAgZGF0YTsJCQkJCQlcCisJY3Jj ID0gMHhmZmZmZmZmZjsJCQkJCVwKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CQkJCVwKKwkJ ZGF0YSA9ICh1aW50OF90KShhZGRyID4+ICgoNSAtIGkpICogOCkpOwlcCisJCWNyYyA9IGNyYyBe IGRhdGE7CQkJCVwKKwkJY3JjID0gY3JjX3RhYmxlW2NyYyAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsJ XAorCX0JCQkJCQkJXAorfQkJCQkJCQkJXAorCisvKiAgICBEZWZpbmUgYSBtYWNybyBmb3IgZ2V0 dGluZyB0aGUgbWlycm9yZWQgdmFsdWUgb2YgICAgICAqLworLyogICAgYSBieXRlIHNpemUgbnVt YmVyLiAoMHgxMTAxMDAxMSAtLT4gMHgxMTAwMTAxMSkgICAgICAgKi8KKy8qICAgIFNvbWV0aW1l cyB0aGUgbWlycm9yZWQgdmFsdWUgb2YgdGhlIENSQyBpcyByZXF1aXJlZCAgICovCitzdGF0aWMg aW5saW5lIHVpbnQ4X3Qgc3dhYih1aW50OF90IG4pCit7CisJdWludDhfdCBtaXJyb3JbMTZdID0g eworCQkweDAwLAorCQkweDA4LAorCQkweDA0LAorCQkweDBjLAorCQkweDAyLAorCQkweDBhLAor CQkweDA2LAorCQkweDBlLAorCQkweDAxLAorCQkweDA5LAorCQkweDA1LAorCQkweDBkLAorCQkw eDAzLAorCQkweDBiLAorCQkweDA3LAorCQkweDBmCisJfTsKKwlyZXR1cm4gKCh1aW50OF90KSgo KG1pcnJvcltuICYgMHgwZl0gPDwgNCkgfCAobWlycm9yW24gPj4gNF0pKSkpOworfQorCisjZGVm aW5lIE1JUlJPUiAgICAgIGJpdHJldgorI2RlZmluZSBNSVJST1JfMzIgICBiaXRyZXYzMgorCisj ZW5kaWYgLyogX19jcmNfbWFjX2FkZHJfZXh0X2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9NYWtlZmlsZQppbmRleCBjZTAzZTI1Li5iZmQwNGVhIDEw MDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL01ha2VmaWxl CkBAIC0xLDUgKzEsNyBAQAogb2JqLXkJKz0gZnNsX2ZtYW5fbWFjLm8KIAogZnNsX2ZtYW5fbWFj LW9ianMJCTo9IGZtYW5fZHRzZWMubyBmbWFuX2R0c2VjX21paV9hY2MubwlcCisJCQkJICAgZm1f ZHRzZWMubyBmbV9kdHNlY19taWlfYWNjLm8JCVwKIAkJCQkgICBmbWFuX21lbWFjLm8gZm1hbl9t ZW1hY19taWlfYWNjLm8JXAotCQkJCSAgIGZtYW5fdGdlYy5vCisJCQkJICAgZm1fbWVtYWMubyBm bV9tZW1hY19taWlfYWNjLm8JCVwKKwkJCQkgICBmbWFuX3RnZWMubyBmbV90Z2VjLm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9kdHNlYy5j IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX2R0c2VjLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5NWI4MwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9kdHNlYy5jCkBA IC0wLDAgKzEsMTA4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxlIFNl bWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6 CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo ZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVz IG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVMWSwg dGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBM aWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBB UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJF IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIEZNYW4gZFRTRUMgZHJpdmVyICov CisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1 ZGUgInNlcnZpY2UuaCIKKyNpbmNsdWRlICJjcmNfbWFjX2FkZHJfZXh0LmgiCisKKyNpbmNsdWRl ICJmbV9jb21tb24uaCIKKyNpbmNsdWRlICJmbV9kdHNlYy5oIgorI2luY2x1ZGUgImZzbF9mbWFu X2R0c2VjLmgiCisjaW5jbHVkZSAiZnNsX2ZtYW5fZHRzZWNfbWlpX2FjYy5oIgorCisjaW5jbHVk ZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp bnV4L2JpdHJldi5oPgorCisvKiBJbnRlcm5hbCByb3V0aW5lcyAqLworCitzdGF0aWMgaW50IGNo ZWNrX2luaXRfcGFyYW1ldGVycyhzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYykKK3sKKwlpZiAoRU5F VF9TUEVFRF9GUk9NX01PREUocF9kdHNlYy0+ZW5ldF9tb2RlKSA+PSBFTkVUX1NQRUVEXzEwMDAw KSB7CisJCXByX2VycigiMUcgTUFDIGRyaXZlciBzdXBwb3J0cyAxRyBvciBsb3dlciBzcGVlZHNc biIpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmIChwX2R0c2VjLT5hZGRyID09IDApIHsKKwkJ cHJfZXJyKCJFdGhlcm5ldCBNQUMgTXVzdCBoYXZlIGEgdmFsaWQgTUFDIEFkZHJlc3NcbiIpOwor CQlyZXR1cm4gLUVET007CisJfQorCWlmICgoRU5FVF9TUEVFRF9GUk9NX01PREUocF9kdHNlYy0+ ZW5ldF9tb2RlKSA+PSBFTkVUX1NQRUVEXzEwMDApICYmCisJICAgIHBfZHRzZWMtPnBfZHRzZWNf ZHJ2X3BhcmFtLT5oYWxmZHVwX29uKSB7CisJCXByX2VycigiRXRoZXJuZXQgTUFDIDFHIGNhbid0 IHdvcmsgaW4gaGFsZiBkdXBsZXhcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorI2lmZGVmIEZN X1JYX1BSRUFNXzRfRVJSQVRBX0RUU0VDX0EwMDEKKwkvKiBmaXhlZCBmb3IgcmV2MyAqLworCWlm IChwX2R0c2VjLT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPD0gNikKKwkJaWYgKHBfZHRzZWMtPnBf ZHRzZWNfZHJ2X3BhcmFtLT5yeF9wcmVhbWJsZSkgeworCQkJcHJfZXJyKCJwcmVhbWJsZVJ4RW5c biIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmIC8qIEZNX1JYX1BSRUFNXzRfRVJS QVRBX0RUU0VDX0EwMDEgKi8KKwlpZiAoKChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSktPnR4 X3ByZWFtYmxlIHx8CisJICAgICAocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pLT5yeF9wcmVh bWJsZSkgJiYKKwkgICAgKChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSktPnByZWFtYmxlX2xl biAhPSAweDcpKSB7CisJCXByX2VycigiUHJlYW1ibGUgbGVuZ3RoIHNob3VsZCBiZSAweDcgYnl0 ZXNcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmICgocF9kdHNlYy0+cF9kdHNlY19kcnZf cGFyYW0pLT5oYWxmZHVwX29uICYmCisJICAgIChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbS0+ dHhfdGltZV9zdGFtcF9lbiB8fAorCSAgICAgcF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0tPnJ4 X3RpbWVfc3RhbXBfZW4pKSB7CisJCXByX2VycigiMTU4OCB0aW1lU3RhbXAgZGlzYWJsZWQgaW4g aGFsZiBkdXBsZXggbW9kZVxuIik7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKChwX2R0c2Vj LT5wX2R0c2VjX2Rydl9wYXJhbSktPnJ4X2Zsb3cgJiYKKwkgICAgKHBfZHRzZWMtPnBfZHRzZWNf ZHJ2X3BhcmFtKS0+cnhfY3RybF9hY2MpIHsKKwkJcHJfZXJyKCJSZWNlaXZlIGNvbnRyb2wgZnJh bWUgY2FuIG5vdCBiZSBhY2NlcHRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAo KHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtKS0+cnhfcHJlcGVuZCA+CisJICAgIE1BWF9QQUNL RVRfQUxJR05NRU5UKSB7CisJCXByX2VycigicGFja2V0QWxpZ25tZW50UGFkZGluZyBjYW4ndCBi ZSA+IHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhfUEFDS0VUX0FMSUdOTUVOVCk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKwlpZiAoKChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSktPm5vbl9i YWNrX3RvX2JhY2tfaXBnMSA+CisJICAgICBNQVhfSU5URVJfUEFDS0VUX0dBUCkgfHwKKwkgICAg KChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSktPm5vbl9iYWNrX3RvX2JhY2tfaXBnMiA+CisJ ICAgICBNQVhfSU5URVJfUEFDS0VUX0dBUCkgfHwKKwkgICAgICgocF9kdHNlYy0+cF9kdHNlY19k cnZfcGFyYW0pLT5iYWNrX3RvX2JhY2tfaXBnID4KKwkgICAgICBNQVhfSU5URVJfUEFDS0VUX0dB UCkpIHsKKwkJcHJfZXJyKCJJbnRlciBwYWNrZXQgZ2FwIGNhbid0IGJlIGdyZWF0ZXIgdGhhbiAl ZFxuIiwKKwkJICAgICAgIE1BWF9JTlRFUl9QQUNLRVRfR0FQKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCWlmICgocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pLT5oYWxmZHVwX2FsdF9iYWNr b2ZmX3ZhbCA+CisJICAgIE1BWF9JTlRFUl9QQUxURVJOQVRFX0JFQikgeworCQlwcl9lcnIoImFs dGVybmF0ZUJhY2tvZmZWYWwgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuICVkXG4iLAorCQkgICAgICAg TUFYX0lOVEVSX1BBTFRFUk5BVEVfQkVCKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgo cF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pLT5oYWxmZHVwX3JldHJhbnNtaXQgPgorCSAgICBN QVhfUkVUUkFOU01JU1NJT04pIHsKKwkJcHJfZXJyKCJtYXhSZXRyYW5zbWlzc2lvbiBjYW4ndCBi ZSBncmVhdGVyIHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhfUkVUUkFOU01JU1NJT04pOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSktPmhh bGZkdXBfY29sbF93aW5kb3cgPgorCSAgICBNQVhfQ09MTElTSU9OX1dJTkRPVykgeworCQlwcl9l cnIoImNvbGxpc2lvbldpbmRvdyBjYW4ndCBiZSBncmVhdGVyIHRoYW4gJWRcbiIsCisJCSAgICAg ICBNQVhfQ09MTElTSU9OX1dJTkRPVyk7CisJCXJldHVybiAtRUlOVkFMOworCS8qICBJZiBBdXRv IG5lZ290aWF0aW9uIHByb2Nlc3MgaXMgZGlzYWJsZWQsIG5lZWQgdG8gKi8KKwkvKiAgU2V0IHVw IHRoZSBQSFkgdXNpbmcgdGhlIE1JSSBNYW5hZ2VtZW50IEludGVyZmFjZSAqLworCX0KKwlpZiAo cF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0tPnRiaXBhID4gTUFYX1BIWVMpIHsKKwkJcHJfZXJy KCJQSFkgYWRkcmVzcyAoc2hvdWxkIGJlIDAtJWQpXG4iLCBNQVhfUEhZUyk7CisJCXJldHVybiAt RVJBTkdFOworCX0KKwlpZiAoIXBfZHRzZWMtPmZfZXhjZXB0aW9uKSB7CisJCXByX2VycigidW5p bml0aWFsaXplZCBmX2V4Y2VwdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAo IXBfZHRzZWMtPmZfZXZlbnQpIHsKKwkJcHJfZXJyKCJ1bmluaXRpYWxpemVkIGZfZXZlbnRcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjaWZkZWYgRk1fTEVOX0NIRUNLX0VSUkFUQV9GTUFO X1NXMDAyCisJaWYgKHBfZHRzZWMtPmZtX3Jldl9pbmZvLm1ham9yX3JldiAhPSA0ICYmCisJICAg IHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtLT5yeF9sZW5fY2hlY2spIHsKKwkJcHJfd2Fybigi TGVuZ3RoQ2hlY2shXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmIC8qIEZNX0xF Tl9DSEVDS19FUlJBVEFfRk1BTl9TVzAwMiAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgZ2V0X2V4Y2VwdGlvbl9mbGFnKGVudW0gZm1fbWFjX2V4Y2VwdGlvbnMgZXhjZXB0aW9uKQor eworCXVpbnQzMl90IGJpdF9tYXNrOworCisJc3dpdGNoIChleGNlcHRpb24pIHsKKwljYXNlIEZN X01BQ19FWF8xR19CQUJfUlg6CisJCWJpdF9tYXNrID0gRFRTRUNfSU1BU0tfQlJFTjsKKwkJYnJl YWs7CisJY2FzZSBGTV9NQUNfRVhfMUdfUlhfQ1RMOgorCQliaXRfbWFzayA9IERUU0VDX0lNQVNL X1JYQ0VOOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xR19HUkFURUZVTF9UWF9TVFBfQ09N UExFVDoKKwkJYml0X21hc2sgPSBEVFNFQ19JTUFTS19HVFNDRU47CisJCWJyZWFrOworCWNhc2Ug Rk1fTUFDX0VYXzFHX0JBQl9UWDoKKwkJYml0X21hc2sgPSBEVFNFQ19JTUFTS19CVEVOOworCQli cmVhazsKKwljYXNlIEZNX01BQ19FWF8xR19UWF9DVEw6CisJCWJpdF9tYXNrID0gRFRTRUNfSU1B U0tfVFhDRU47CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzFHX1RYX0VSUjoKKwkJYml0X21h c2sgPSBEVFNFQ19JTUFTS19UWEVFTjsKKwkJYnJlYWs7CisJY2FzZSBGTV9NQUNfRVhfMUdfTEFU RV9DT0w6CisJCWJpdF9tYXNrID0gRFRTRUNfSU1BU0tfTENFTjsKKwkJYnJlYWs7CisJY2FzZSBG TV9NQUNfRVhfMUdfQ09MX1JFVF9MTVQ6CisJCWJpdF9tYXNrID0gRFRTRUNfSU1BU0tfQ1JMRU47 CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzFHX1RYX0ZJRk9fVU5EUk46CisJCWJpdF9tYXNr ID0gRFRTRUNfSU1BU0tfWEZVTkVOOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xR19NQUdf UENLVDoKKwkJYml0X21hc2sgPSBEVFNFQ19JTUFTS19NQUdFTjsKKwkJYnJlYWs7CisJY2FzZSBG TV9NQUNfRVhfMUdfTUlJX01OR19SRF9DT01QTEVUOgorCQliaXRfbWFzayA9IERUU0VDX0lNQVNL X01NUkRFTjsKKwkJYnJlYWs7CisJY2FzZSBGTV9NQUNfRVhfMUdfTUlJX01OR19XUl9DT01QTEVU OgorCQliaXRfbWFzayA9IERUU0VDX0lNQVNLX01NV1JFTjsKKwkJYnJlYWs7CisJY2FzZSBGTV9N QUNfRVhfMUdfR1JBVEVGVUxfUlhfU1RQX0NPTVBMRVQ6CisJCWJpdF9tYXNrID0gRFRTRUNfSU1B U0tfR1JTQ0VOOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xR19EQVRBX0VSUjoKKwkJYml0 X21hc2sgPSBEVFNFQ19JTUFTS19URFBFRU47CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzFH X1JYX01JQl9DTlRfT1ZGTDoKKwkJYml0X21hc2sgPSBEVFNFQ19JTUFTS19NU1JPRU47CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWJpdF9tYXNrID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJu IGJpdF9tYXNrOworfQorCisvKiBDaGVja3MgaWYgcF9kdHNlYyBkcml2ZXIgcGFyYW1ldGVycyB3 ZXJlIGluaXRpYWxpemVkCisgKiByZXR1cm5zIDAgaWYgc3VjY2VzcyBlbHNlIHJldHVybnMgZXJy b3IgY29kZQorICovCitzdGF0aWMgaW50IGlzX2luaXRfZG9uZShzdHJ1Y3QgZHRzZWNfY2ZnICpw X2R0c2VjX2Rydl9wYXJhbWV0ZXJzKQoreworCWlmICghcF9kdHNlY19kcnZfcGFyYW1ldGVycykK KwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBnZXRf bWFjX2FkZHJfaGFzaF9jb2RlKHVpbnQ2NF90IGV0aF9hZGRyKQoreworCXVpbnQzMl90IGNyYzsK KworCS8qIENSQyBjYWxjdWxhdGlvbiAqLworCUdFVF9NQUNfQUREUl9DUkMoZXRoX2FkZHIsIGNy Yyk7CisKKwljcmMgPSBiaXRyZXYzMihjcmMpOworCisJcmV0dXJuIGNyYzsKK30KKworc3RhdGlj IHVpbnQxNl90IGR0c2VjX2dldF9tYXhfZnJhbWVfbGVuZ3RoKHZvaWQgKmhfZHRzZWMpCit7CisJ c3RydWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKiloX2R0c2VjOworCWlu dCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0p OworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGZtYW5fZHRzZWNfZ2V0X21heF9m cmFtZV9sZW4ocF9kdHNlYy0+cF9tZW1fbWFwKTsKK30KKworc3RhdGljIHZvaWQgZHRzZWNfaXNy KHZvaWQgKmhfZHRzZWMpCit7CisJc3RydWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0 c2VjX3QgKiloX2R0c2VjOworCXVpbnQzMl90IGV2ZW50OworCXN0cnVjdCBkdHNlY19yZWdzIF9f aW9tZW0gKnBfZHRzZWNfbWVtX21hcCA9IHBfZHRzZWMtPnBfbWVtX21hcDsKKworCS8qIGRvIG5v dCBoYW5kbGUgTURJTyBldmVudHMgKi8KKwlldmVudCA9CisJICAgIGZtYW5fZHRzZWNfZ2V0X2V2 ZW50KHBfZHRzZWNfbWVtX21hcCwKKwkJCQkgKHVpbnQzMl90KSh+CisJCQkJCSAgICAgKERUU0VD X0lNQVNLX01NUkRFTiB8CisJCQkJCSAgICAgIERUU0VDX0lNQVNLX01NV1JFTikpKTsKKworCWV2 ZW50ICY9IGZtYW5fZHRzZWNfZ2V0X2ludGVycnVwdF9tYXNrKHBfZHRzZWNfbWVtX21hcCk7CisK KwlmbWFuX2R0c2VjX2Fja19ldmVudChwX2R0c2VjX21lbV9tYXAsIGV2ZW50KTsKKworCWlmIChl dmVudCAmIERUU0VDX0lNQVNLX0JSRU4pCisJCXBfZHRzZWMtPmZfZXhjZXB0aW9uKHBfZHRzZWMt PmRldl9pZCwgRk1fTUFDX0VYXzFHX0JBQl9SWCk7CisJaWYgKGV2ZW50ICYgRFRTRUNfSU1BU0tf UlhDRU4pCisJCXBfZHRzZWMtPmZfZXhjZXB0aW9uKHBfZHRzZWMtPmRldl9pZCwgRk1fTUFDX0VY XzFHX1JYX0NUTCk7CisJaWYgKGV2ZW50ICYgRFRTRUNfSU1BU0tfR1RTQ0VOKQorCQlwX2R0c2Vj LT5mX2V4Y2VwdGlvbihwX2R0c2VjLT5kZXZfaWQsCisJCQkJICAgICBGTV9NQUNfRVhfMUdfR1JB VEVGVUxfVFhfU1RQX0NPTVBMRVQpOworCWlmIChldmVudCAmIERUU0VDX0lNQVNLX0JURU4pCisJ CXBfZHRzZWMtPmZfZXhjZXB0aW9uKHBfZHRzZWMtPmRldl9pZCwgRk1fTUFDX0VYXzFHX0JBQl9U WCk7CisJaWYgKGV2ZW50ICYgRFRTRUNfSU1BU0tfVFhDRU4pCisJCXBfZHRzZWMtPmZfZXhjZXB0 aW9uKHBfZHRzZWMtPmRldl9pZCwgRk1fTUFDX0VYXzFHX1RYX0NUTCk7CisJaWYgKGV2ZW50ICYg RFRTRUNfSU1BU0tfVFhFRU4pCisJCXBfZHRzZWMtPmZfZXhjZXB0aW9uKHBfZHRzZWMtPmRldl9p ZCwgRk1fTUFDX0VYXzFHX1RYX0VSUik7CisJaWYgKGV2ZW50ICYgRFRTRUNfSU1BU0tfTENFTikK KwkJcF9kdHNlYy0+Zl9leGNlcHRpb24ocF9kdHNlYy0+ZGV2X2lkLCBGTV9NQUNfRVhfMUdfTEFU RV9DT0wpOworCWlmIChldmVudCAmIERUU0VDX0lNQVNLX0NSTEVOKQorCQlwX2R0c2VjLT5mX2V4 Y2VwdGlvbihwX2R0c2VjLT5kZXZfaWQsCisJCQkJICAgICBGTV9NQUNfRVhfMUdfQ09MX1JFVF9M TVQpOworCWlmIChldmVudCAmIERUU0VDX0lNQVNLX1hGVU5FTikgeworI2lmZGVmIEZNX1RYX0xP Q0tVUF9FUlJBVEFfRFRTRUM2CisJCWlmIChwX2R0c2VjLT5mbV9yZXZfaW5mby5tYWpvcl9yZXYg PT0gMikgeworCQkJdWludDMyX3QgdHBrdDEsIHRtcF9yZWcxLCB0cGt0MiwgdG1wX3JlZzIsIGk7 CisJCQkvKiBhLiBXcml0ZSAweDAwRTBfMEMwMCB0byBEVFNFQ19JRCAqLworCQkJLyogVGhpcyBp cyBhIHJlYWQgb25seSByZWdpZHRlcgorCQkJICovCisKKwkJCS8qIGIuIFJlYWQgYW5kIHNhdmUg dGhlIHZhbHVlIG9mIFRQS1QgKi8KKwkJCXRwa3QxID0gR0VUX1VJTlQzMihwX2R0c2VjX21lbV9t YXAtPnRwa3QpOworCisJCQkvKiBjLiBSZWFkIHRoZSByZWdpc3RlciBhdCBkVFNFQyBhZGRyZXNz IG9mZnNldCAweDMyQyAqLworCQkJdG1wX3JlZzEgPQorCQkJICAgIEdFVF9VSU5UMzIoKih1aW50 MzJfdCAqKQorCQkJCSAgICAgICAoKHVpbnQ4X3QgKilwX2R0c2VjX21lbV9tYXAgKyAweDMyYykp OworCisJCQkvKiBkLiBDb21wYXJlIGJpdHMgWzk6MTVdIHRvIGJpdHMgWzI1OjMxXSBvZiB0aGUK KwkJCSAqIHJlZ2lzdGVyIGF0IGFkZHJlc3Mgb2Zmc2V0IDB4MzJDLgorCQkJICovCisJCQlpZiAo KHRtcF9yZWcxICYgMHgwMDdGMDAwMCkgIT0KKwkJCQkodG1wX3JlZzEgJiAweDAwMDAwMDdGKSkg eworCQkJCS8qIElmIHRoZXkgYXJlIG5vdCBlcXVhbCwgc2F2ZSB0aGUgdmFsdWUgb2YKKwkJCQkg KiB0aGlzIHJlZ2lzdGVyIGFuZCB3YWl0IGZvciBhdCBsZWFzdAorCQkJCSAqIE1BWEZSTSoxNiBu cworCQkJCSAqLworCQkJCXVzbGVlcF9yYW5nZSgodWludDMyX3QpKG1pbgorCQkJCQkoZHRzZWNf Z2V0X21heF9mcmFtZV9sZW5ndGgocF9kdHNlYykgKgorCQkJCQkxNiAvIDEwMDAsIDEpKSwgKHVp bnQzMl90KQorCQkJCQkobWluKGR0c2VjX2dldF9tYXhfZnJhbWVfbGVuZ3RoCisJCQkJCShwX2R0 c2VjKSAqIDE2IC8gMTAwMCwgMSkgKyAxKSk7CisJCQl9CisKKwkJCS8qIGUuIFJlYWQgYW5kIHNh dmUgVFBLVCBhZ2FpbiBhbmQgcmVhZCB0aGUgcmVnaXN0ZXIKKwkJCSAqIGF0IGRUU0VDIGFkZHJl c3Mgb2Zmc2V0IDB4MzJDIGFnYWluCisJCQkgKi8KKwkJCXRwa3QyID0gR0VUX1VJTlQzMihwX2R0 c2VjX21lbV9tYXAtPnRwa3QpOworCQkJdG1wX3JlZzIgPQorCQkJICAgIEdFVF9VSU5UMzIoKih1 aW50MzJfdCBfX2lvbWVtICopCisJCQkJICAgICAgICgodWludDhfdCAqKXBfZHRzZWNfbWVtX21h cCArIDB4MzJjKSk7CisKKwkJCS8qIGYuIENvbXBhcmUgdGhlIHZhbHVlIG9mIFRQS1Qgc2F2ZWQg aW4gc3RlcCBiIHRvCisJCQkgKiB2YWx1ZSByZWFkIGluIHN0ZXAgZS4gQWxzbyBjb21wYXJlIGJp dHMgWzk6MTVdIG9mCisJCQkgKiB0aGUgcmVnaXN0ZXIgYXQgb2Zmc2V0IDB4MzJDIHNhdmVkIGlu IHN0ZXAgZCB0byB0aGUKKwkJCSAqIHZhbHVlIG9mIGJpdHMgWzk6MTVdIHNhdmVkIGluIHN0ZXAg ZS4gSWYgdGhlIHR3bworCQkJICogcmVnaXN0ZXJzIHZhbHVlcyBhcmUgdW5jaGFuZ2VkLCB0aGVu IHRoZSB0cmFuc21pdAorCQkJICogcG9ydGlvbiBvZiB0aGUgZFRTRUMgY29udHJvbGxlciBpcyBs b2NrZWQgdXAgYW5kCisJCQkgKiB0aGUgdXNlciBzaG91bGQgcHJvY2VlZCB0byB0aGUgcmVjb3Zl ciBzZXF1ZW5jZS4KKwkJCSAqLworCQkJaWYgKCh0cGt0MSA9PSB0cGt0MikgJiYgKCh0bXBfcmVn MSAmIDB4MDA3RjAwMDApID09CisJCQkJKHRtcF9yZWcyICYgMHgwMDdGMDAwMCkpKSB7CisJCQkJ LyogcmVjb3ZlciBzZXF1ZW5jZSAqLworCisJCQkJLyogYS5Xcml0ZSBhIDEgdG8gUkNUUkxbR1JT XSAqLworCisJCQkJV1JJVEVfVUlOVDMyKHBfZHRzZWNfbWVtX21hcC0+cmN0cmwsCisJCQkJCSAg ICAgR0VUX1VJTlQzMihwX2R0c2VjX21lbV9tYXAtPgorCQkJCQkJCXJjdHJsKSB8IFJDVFJMX0dS Uyk7CisKKwkJCQkvKiBiLldhaXQgdW50aWwgSUVWRU5UW0dSU0NdPTEsIG9yIGF0IGxlYXN0CisJ CQkJICogMTAwIHVzIGhhcyBlbGFwc2VkLgorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCAx MDA7IGkrKykgeworCQkJCQlpZiAoR0VUX1VJTlQzMihwX2R0c2VjX21lbV9tYXAtPgorCQkJCQkJ ICAgICAgIGlldmVudCkgJgorCQkJCQkgICAgRFRTRUNfSU1BU0tfR1JTQ0VOKQorCQkJCQkJYnJl YWs7CisJCQkJCXVkZWxheSgxKTsKKwkJCQl9CisJCQkJaWYgKEdFVF9VSU5UMzIocF9kdHNlY19t ZW1fbWFwLT5pZXZlbnQpICYKKwkJCQkgICAgRFRTRUNfSU1BU0tfR1JTQ0VOKQorCQkJCQlXUklU RV9VSU5UMzIocF9kdHNlY19tZW1fbWFwLT5pZXZlbnQsCisJCQkJCQkgICAgIERUU0VDX0lNQVNL X0dSU0NFTik7CisJCQkJZWxzZQorCQkJCQlwcl9kZWJ1ZygiUnggbG9ja3VwIGR1ZSB0byBUeCBs b2NrdXBcbiIpOworCisJCQkJLyogYy5Xcml0ZSBhIDEgdG8gYml0IG4gb2YgRk1fUlNUQworCQkJ CSAqIChvZmZzZXQgMHgwQ0Mgb2YgRlBNKQorCQkJCSAqLworCQkJCWZtX3Jlc2V0X21hYyhwX2R0 c2VjLT5oX2ZtLCBwX2R0c2VjLT5tYWNfaWQpOworCisJCQkJLyogZC5XYWl0IDQgVHggY2xvY2tz ICgzMiBucykgKi8KKwkJCQl1ZGVsYXkoMSk7CisKKwkJCQkvKiBlLldyaXRlIGEgMCB0byBiaXQg biBvZiBGTV9SU1RDLiAqLworCQkJCS8qIGNsZWFyZWQgYnkgRk1BTgorCQkJCSAqLworCQkJfQor CQl9CisjZW5kaWYgLyogRk1fVFhfTE9DS1VQX0VSUkFUQV9EVFNFQzYgKi8KKworCQlwX2R0c2Vj LT5mX2V4Y2VwdGlvbihwX2R0c2VjLT5kZXZfaWQsCisJCQkJICAgICBGTV9NQUNfRVhfMUdfVFhf RklGT19VTkRSTik7CisJfQorCWlmIChldmVudCAmIERUU0VDX0lNQVNLX01BR0VOKQorCQlwX2R0 c2VjLT5mX2V4Y2VwdGlvbihwX2R0c2VjLT5kZXZfaWQsIEZNX01BQ19FWF8xR19NQUdfUENLVCk7 CisJaWYgKGV2ZW50ICYgRFRTRUNfSU1BU0tfR1JTQ0VOKQorCQlwX2R0c2VjLT5mX2V4Y2VwdGlv bihwX2R0c2VjLT5kZXZfaWQsCisJCQkJICAgICBGTV9NQUNfRVhfMUdfR1JBVEVGVUxfUlhfU1RQ X0NPTVBMRVQpOworCWlmIChldmVudCAmIERUU0VDX0lNQVNLX1REUEVFTikKKwkJcF9kdHNlYy0+ Zl9leGNlcHRpb24ocF9kdHNlYy0+ZGV2X2lkLAorCQkJCSAgICAgRk1fTUFDX0VYXzFHX0RBVEFf RVJSKTsKKwlpZiAoZXZlbnQgJiBEVFNFQ19JTUFTS19SRFBFRU4pCisJCXBfZHRzZWMtPmZfZXhj ZXB0aW9uKHBfZHRzZWMtPmRldl9pZCwKKwkJCQkgICAgIEZNX01BQ18xR19SWF9EQVRBX0VSUik7 CisKKwkvKiAgLSBtYXNrZWQgaW50ZXJydXB0cyAqLworCUFTU0VSVCghKGV2ZW50ICYgRFRTRUNf SU1BU0tfQUJSVEVOKSk7CisJQVNTRVJUKCEoZXZlbnQgJiBEVFNFQ19JTUFTS19JRkVSUkVOKSk7 Cit9CisKK3N0YXRpYyB2b2lkIGR0c2VjXzE1ODhfaXNyKHZvaWQgKmhfZHRzZWMpCit7CisJc3Ry dWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKiloX2R0c2VjOworCXVpbnQz Ml90IGV2ZW50OworCXN0cnVjdCBkdHNlY19yZWdzIF9faW9tZW0gKnBfZHRzZWNfbWVtX21hcCA9 IHBfZHRzZWMtPnBfbWVtX21hcDsKKworCWlmIChwX2R0c2VjLT5wdHBfdHN1X2VuYWJsZWQpIHsK KwkJZXZlbnQgPSBmbWFuX2R0c2VjX2NoZWNrX2FuZF9jbGVhcl90bXJfZXZlbnQocF9kdHNlY19t ZW1fbWFwKTsKKworCQlpZiAoZXZlbnQpIHsKKwkJCUFTU0VSVChldmVudCAmIFRNUl9QRVZFTlRf VFNSRSk7CisJCQlwX2R0c2VjLT5mX2V4Y2VwdGlvbihwX2R0c2VjLT5kZXZfaWQsCisJCQkJCSAg ICAgRk1fTUFDX0VYXzFHXzE1ODhfVFNfUlhfRVJSKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZv aWQgZnJlZV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYykKK3sKKwlmbV91 bnJlZ2lzdGVyX2ludHIocF9kdHNlYy0+aF9mbSwgRk1fTU9EX01BQywgcF9kdHNlYy0+bWFjX2lk LAorCQkJICAgRk1fSU5UUl9UWVBFX0VSUik7CisJZm1fdW5yZWdpc3Rlcl9pbnRyKHBfZHRzZWMt PmhfZm0sIEZNX01PRF9NQUMsIHBfZHRzZWMtPm1hY19pZCwKKwkJCSAgIEZNX0lOVFJfVFlQRV9O T1JNQUwpOworCisJLyogcmVsZWFzZSB0aGUgZHJpdmVyJ3MgZ3JvdXAgaGFzaCB0YWJsZSAqLwor CWZyZWVfaGFzaF90YWJsZShwX2R0c2VjLT5wX211bHRpY2FzdF9hZGRyX2hhc2gpOworCXBfZHRz ZWMtPnBfbXVsdGljYXN0X2FkZHJfaGFzaCA9IE5VTEw7CisKKwkvKiByZWxlYXNlIHRoZSBkcml2 ZXIncyBpbmRpdmlkdWFsIGhhc2ggdGFibGUgKi8KKwlmcmVlX2hhc2hfdGFibGUocF9kdHNlYy0+ cF91bmljYXN0X2FkZHJfaGFzaCk7CisJcF9kdHNlYy0+cF91bmljYXN0X2FkZHJfaGFzaCA9IE5V TEw7Cit9CisKK3N0YXRpYyBpbnQgZ3JhY2VmdWxfc3RvcChzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNl YywgZW51bSBjb21tX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3QgZHRzZWNfcmVncyBfX2lvbWVtICpw X21lbV9tYXA7CisKKwlwX21lbV9tYXAgPSBwX2R0c2VjLT5wX21lbV9tYXA7CisKKwkvKiBBc3Nl cnQgdGhlIGdyYWNlZnVsIHRyYW5zbWl0IHN0b3AgYml0ICovCisJaWYgKG1vZGUgJiBDT01NX01P REVfUlgpIHsKKwkJZm1hbl9kdHNlY19zdG9wX3J4KHBfbWVtX21hcCk7CisKKyNpZmRlZiBGTV9H UlNfRVJSQVRBX0RUU0VDX0EwMDIKKwkJaWYgKHBfZHRzZWMtPmZtX3Jldl9pbmZvLm1ham9yX3Jl diA9PSAyKQorCQkJdXNsZWVwX3JhbmdlKDEwMCwgMTAxKTsKKyNlbHNlCQkJCS8qIEZNX0dSU19F UlJBVEFfRFRTRUNfQTAwMiAqLworI2lmZGVmIEZNX0dUU19BRlRFUl9EUk9QUEVEX0ZSQU1FX0VS UkFUQV9EVFNFQ19BMDA0ODM5CisJCXVzbGVlcF9yYW5nZSgxMCwgMTEpOworI2VuZGlmIC8qIEZN X0dUU19BRlRFUl9EUk9QUEVEX0ZSQU1FX0VSUkFUQV9EVFNFQ19BMDA0ODM5ICovCisjZW5kaWYg LyogRk1fR1JTX0VSUkFUQV9EVFNFQ19BMDAyICovCisJfQorCisJaWYgKG1vZGUgJiBDT01NX01P REVfVFgpIHsKKyNpZiBkZWZpbmVkKEZNX0dUU19FUlJBVEFfRFRTRUNfQTAwNCkgfHwgXAorZGVm aW5lZChGTV9HVFNfQUZURVJfTUFDX0FCT1JURURfRlJBTUVfRVJSQVRBX0RUU0VDX0EwMDEyKQor CQlpZiAocF9kdHNlYy0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID09IDIpCisJCQlwcl9kZWJ1Zygi R1RTIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIERUU0VDX0EwMDQgZXJyYXRhLlxuIik7CisjZWxzZQkJ CQkvKiBub3QgZGVmaW5lZChGTV9HVFNfRVJSQVRBX0RUU0VDX0EwMDQpIHx8Li4qLworI2lmZGVm IEZNX0dUU19VTkRFUlJVTl9FUlJBVEFfRFRTRUNfQTAwMTQKKwkJaWYgKHBfZHRzZWMtPmZtX3Jl dl9pbmZvLm1ham9yX3JldiAhPSA0KQorCQkJcHJfZGVidWcoIkdUUyBub3Qgc3VwcG9ydGVkIGR1 ZSB0byBEVFNFQ19BMDAxNCBlcnJhdGEuXG4iKTsKKyNlbHNlCQkJCS8qIEZNX0dUU19VTkRFUlJV Tl9FUlJBVEFfRFRTRUNfQTAwMTQgKi8KKwkJZm1hbl9kdHNlY19zdG9wX3R4KHBfbWVtX21hcCk7 CisjZW5kaWYgLyogRk1fR1RTX1VOREVSUlVOX0VSUkFUQV9EVFNFQ19BMDAxNCAqLworI2VuZGlm IC8qIGRlZmluZWQoRk1fR1RTX0VSUkFUQV9EVFNFQ19BMDA0KSB8fC4uLiAgKi8KKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JhY2VmdWxfcmVzdGFydChzdHJ1Y3QgZHRzZWNfdCAq cF9kdHNlYywgZW51bSBjb21tX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3QgZHRzZWNfcmVncyBfX2lv bWVtICpwX21lbV9tYXA7CisKKwlwX21lbV9tYXAgPSBwX2R0c2VjLT5wX21lbV9tYXA7CisJLyog Y2xlYXIgdGhlIGdyYWNlZnVsIHJlY2VpdmUgc3RvcCBiaXQgKi8KKwlpZiAobW9kZSAmIENPTU1f TU9ERV9UWCkKKwkJZm1hbl9kdHNlY19zdGFydF90eChwX21lbV9tYXApOworCisJaWYgKG1vZGUg JiBDT01NX01PREVfUlgpCisJCWZtYW5fZHRzZWNfc3RhcnRfcngocF9tZW1fbWFwKTsKKworCXJl dHVybiAwOworfQorCisvKiBkVFNFQyBDb25maWdzIG1vZGlmaWNhdGlvbiBmdW5jdGlvbnMgKi8K KworaW50IGR0c2VjX2NmZ19sYihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgYm9vbCBu ZXdfdmFsKQoreworCXN0cnVjdCBkdHNlY190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICop Zm1fbWFjX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZHRzZWMtPnBf ZHRzZWNfZHJ2X3BhcmFtKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwX2R0 c2VjLT5wX2R0c2VjX2Rydl9wYXJhbS0+bG9vcGJhY2sgPSBuZXdfdmFsOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBkdHNlY19jZmdfbWF4X2ZyYW1lX2xlbihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1f bWFjX2RldiwgdWludDE2X3QgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYyA9 IChzdHJ1Y3QgZHRzZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2lu aXRfZG9uZShwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVy biAtRUlOVkFMOworCisJcF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0tPm1heGltdW1fZnJhbWUg PSBuZXdfdmFsOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkdHNlY19jZmdfcGFkX2FuZF9jcmMo c3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGJvb2wgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3Qg ZHRzZWNfdCAqcF9kdHNlYyA9IChzdHJ1Y3QgZHRzZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJl dDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSk7CisJ aWYgKCFyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcF9kdHNlYy0+cF9kdHNlY19kcnZfcGFy YW0tPnR4X3BhZF9jcmMgPSBuZXdfdmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGRUU0VDIFJ1 biBUaW1lIEFQSSBmdW5jdGlvbnMgICovCisKK2ludCBkdHNlY19lbmFibGUoc3RydWN0IGZtX21h Y19kZXYgKmZtX21hY19kZXYsIGVudW0gY29tbV9tb2RlIG1vZGUpCit7CisJc3RydWN0IGR0c2Vj X3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKilmbV9tYWNfZGV2OworCWludCByZXQ7CisK KwlyZXQgPSBpc19pbml0X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFuX2R0c2VjX2VuYWJsZShwX2R0c2VjLT5wX21lbV9t YXAsCisJCQkgIChib29sKSEhKG1vZGUgJiBDT01NX01PREVfUlgpLAorCQkJICAoYm9vbCkhISht b2RlICYgQ09NTV9NT0RFX1RYKSk7CisKKwlncmFjZWZ1bF9yZXN0YXJ0KHBfZHRzZWMsIG1vZGUp OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkdHNlY19kaXNhYmxlKHN0cnVjdCBmbV9tYWNfZGV2 ICpmbV9tYWNfZGV2LCBlbnVtIGNvbW1fbW9kZSBtb2RlKQoreworCXN0cnVjdCBkdHNlY190ICpw X2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFjX2RldjsKKwlpbnQgcmV0OworCisJcmV0 ID0gaXNfaW5pdF9kb25lKHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJZ3JhY2VmdWxfc3RvcChwX2R0c2VjLCBtb2RlKTsKKworCWZtYW5f ZHRzZWNfZGlzYWJsZShwX2R0c2VjLT5wX21lbV9tYXAsCisJCQkgICAoYm9vbCkhIShtb2RlICYg Q09NTV9NT0RFX1JYKSwKKwkJCSAgIChib29sKSEhKG1vZGUgJiBDT01NX01PREVfVFgpKTsKKwor CXJldHVybiAwOworfQorCitpbnQgZHRzZWNfc2V0X3R4X3BhdXNlX2ZyYW1lcyhzdHJ1Y3QgZm1f bWFjX2RldiAqZm1fbWFjX2RldiwKKwkJCSAgICAgIHVpbnQ4X3QgX19tYXliZV91bnVzZWQgcHJp b3JpdHksCisJCQkgICAgICB1aW50MTZfdCBwYXVzZV90aW1lLAorCQkJICAgICAgdWludDE2X3Qg X19tYXliZV91bnVzZWQgdGhyZXNoX3RpbWUpCit7CisJc3RydWN0IGR0c2VjX3QgKnBfZHRzZWMg PSAoc3RydWN0IGR0c2VjX3QgKilmbV9tYWNfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBpc19p bml0X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKyNpZmRlZiBGTV9CQURfVFhfVFNfSU5fQl8yX0JfRVJSQVRBX0RUU0VDX0EwMDMK KwlpZiAocF9kdHNlYy0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID09IDIpCisJCWlmICgwIDwgcGF1 c2VfdGltZSAmJiBwYXVzZV90aW1lIDw9IDMyMCkgeworCQkJcHJfd2FybigicGF1c2UtdGltZTol ZCBpbGxlZ2FsLlNob3VsZCBiZSA+MzIwXG4iLAorCQkJCXBhdXNlX3RpbWUpOworCQkJcmV0dXJu IC1FRE9NOworCQl9CisjZW5kaWYgLyogRk1fQkFEX1RYX1RTX0lOX0JfMl9CX0VSUkFUQV9EVFNF Q19BMDAzICovCisKKwlmbWFuX2R0c2VjX3NldF90eF9wYXVzZV9mcmFtZXMocF9kdHNlYy0+cF9t ZW1fbWFwLCBwYXVzZV90aW1lKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGR0c2VjX2FjY2VwdF9y eF9wYXVzZV9mcmFtZXMoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGJvb2wgZW4pCit7 CisJc3RydWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKilmbV9tYWNfZGV2 OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZf cGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFuX2R0c2VjX2hhbmRsZV9y eF9wYXVzZShwX2R0c2VjLT5wX21lbV9tYXAsIGVuKTsKKworCXJldHVybiAwOworfQorCitpbnQg ZHRzZWNfbW9kaWZ5X21hY19hZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAor CQkJICAgICBlbmV0X2FkZHJfdCAqcF9lbmV0X2FkZHIpCit7CisJc3RydWN0IGR0c2VjX3QgKnBf ZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKilmbV9tYWNfZGV2OworCWludCByZXQ7CisKKwlyZXQg PSBpc19pbml0X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwkvKiBJbml0aWFsaXplIE1BQyBTdGF0aW9uIEFkZHJlc3MgcmVnaXN0 ZXJzICgxJjIpICAgICovCisJLyogU3RhdGlvbiBhZGRyZXNzIGhhdmUgdG8gYmUgc3dhcHBlZCAo YmlnIGVuZGlhbiB0byBsaXR0bGUgZW5kaWFuICovCisJcF9kdHNlYy0+YWRkciA9IEVORVRfQURE Ul9UT19VSU5UNjQoKnBfZW5ldF9hZGRyKTsKKwlmbWFuX2R0c2VjX3NldF9tYWNfYWRkcmVzcyhw X2R0c2VjLT5wX21lbV9tYXAsCisJCQkJICAgKHVpbnQ4X3QgKikoKnBfZW5ldF9hZGRyKSk7CisK KwlyZXR1cm4gMDsKK30KKworaW50IGR0c2VjX2FkZF9oYXNoX21hY19hZGRyZXNzKHN0cnVjdCBm bV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICAgIGVuZXRfYWRkcl90ICpwX2V0aF9hZGRy KQoreworCXN0cnVjdCBkdHNlY190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFj X2RldjsKKwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAqcF9oYXNoX2VudHJ5OworCXVpbnQ2NF90 IGV0aF9hZGRyOworCWludDMyX3QgYnVja2V0OworCXVpbnQzMl90IGNyYzsKKwlib29sIG1jYXN0 LCBnaHR4OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9kdHNlYy0+cF9kdHNl Y19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlldGhfYWRkciA9IEVO RVRfQUREUl9UT19VSU5UNjQoKnBfZXRoX2FkZHIpOworCisJZ2h0eCA9IChib29sKSgoZm1hbl9k dHNlY19nZXRfcmN0cmwocF9kdHNlYy0+cF9tZW1fbWFwKSAmCisJCQlSQ1RSTF9HSFRYKSA/IHRy dWUgOiBmYWxzZSk7CisJbWNhc3QgPSAoYm9vbCkoKGV0aF9hZGRyICYgTUFDX0dST1VQX0FERFJF U1MpID8gdHJ1ZSA6IGZhbHNlKTsKKworCS8qIENhbm5vdCBoYW5kbGUgdW5pY2FzdCBtYWMgYWRk ciB3aGVuIEdIVFggaXMgb24gKi8KKwlpZiAoZ2h0eCAmJiAhbWNhc3QpIHsKKwkJcHJfZXJyKCJD b3VsZCBub3QgY29tcHV0ZSBoYXNoIGJ1Y2tldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KwljcmMgPSBnZXRfbWFjX2FkZHJfaGFzaF9jb2RlKGV0aF9hZGRyKTsKKworCS8qIGNvbnNpZGVy aW5nIHRoZSA5IGhpZ2hlc3Qgb3JkZXIgYml0cyBpbiBjcmMgSFs4OjBdOgorCSAqaWYgZ2h0eCA9 IDAgSFs4OjZdIChoaWdoZXN0IG9yZGVyIDMgYml0cykgaWRlbnRpZnkgdGhlIGhhc2ggcmVnaXN0 ZXIKKwkgKmFuZCBIWzU6MV0gKG5leHQgNSBiaXRzKSBpZGVudGlmeSB0aGUgaGFzaCBiaXQKKwkg KmlmIGdodHMgPSAxIEhbODo1XSAoaGlnaGVzdCBvcmRlciA0IGJpdHMpIGlkZW50aWZ5IHRoZSBo YXNoIHJlZ2lzdGVyCisJICphbmQgSFs0OjBdIChuZXh0IDUgYml0cykgaWRlbnRpZnkgdGhlIGhh c2ggYml0LgorCSAqCisJICpJbiBidWNrZXQgaW5kZXggb3V0cHV0IHRoZSBsb3cgNSBiaXRzIGlk ZW50aWZ5IHRoZSBoYXNoIHJlZ2lzdGVyCisJICpiaXQsIHdoaWxlIHRoZSBoaWdoZXIgNCBiaXRz IGlkZW50aWZ5IHRoZSBoYXNoIHJlZ2lzdGVyCisJICovCisKKwlpZiAoZ2h0eCkgeworCQlidWNr ZXQgPSAoaW50MzJfdCkoKGNyYyA+PiAyMykgJiAweDFmZik7CisJfSBlbHNlIHsKKwkJYnVja2V0 ID0gKGludDMyX3QpKChjcmMgPj4gMjQpICYgMHhmZik7CisJCS8qIGlmICFnaHR4IGFuZCBtY2Fz dCB0aGUgYml0IG11c3QgYmUgc2V0IGluIGdhZGRyIGluc3RlYWQgb2YKKwkJICppZ2FkZHIuCisJ CSAqLworCQlpZiAobWNhc3QpCisJCQlidWNrZXQgKz0gMHgxMDA7CisJfQorCisJZm1hbl9kdHNl Y19zZXRfYnVja2V0KHBfZHRzZWMtPnBfbWVtX21hcCwgYnVja2V0LCB0cnVlKTsKKworCS8qIENy ZWF0ZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBkcml2ZXIgaGFzaCB0YWJsZSAqLworCXBf aGFzaF9lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCpwX2hhc2hfZW50cnkpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBfaGFzaF9lbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcF9oYXNoX2VudHJ5LT5h ZGRyID0gZXRoX2FkZHI7CisJSU5JVF9MSVNUX0hFQUQoJnBfaGFzaF9lbnRyeS0+bm9kZSk7CisK KwlpZiAoZXRoX2FkZHIgJiBNQUNfR1JPVVBfQUREUkVTUykKKwkJLyogR3JvdXAgQWRkcmVzcyAq LworCQlsaXN0X2FkZF90YWlsKCZwX2hhc2hfZW50cnktPm5vZGUsCisJCQkgICAgICAmKHBfZHRz ZWMtPnBfbXVsdGljYXN0X2FkZHJfaGFzaC0+cF9sc3RzW2J1Y2tldF0KKwkJCSAgICAgICApKTsK KwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJnBfaGFzaF9lbnRyeS0+bm9kZSwKKwkJCSAgICAgICZw X2R0c2VjLT5wX3VuaWNhc3RfYWRkcl9oYXNoLT5wX2xzdHNbYnVja2V0XSk7CisKKwlyZXR1cm4g MDsKK30KKworaW50IGR0c2VjX2RlbF9oYXNoX21hY19hZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2 ICpmbV9tYWNfZGV2LAorCQkJICAgICAgIGVuZXRfYWRkcl90ICpwX2V0aF9hZGRyKQoreworCXN0 cnVjdCBkdHNlY190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFjX2RldjsKKwlz dHJ1Y3QgbGlzdF9oZWFkICpwX3BvczsKKwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAqcF9oYXNo X2VudHJ5ID0gTlVMTDsKKwl1aW50NjRfdCBldGhfYWRkcjsKKwlpbnQzMl90IGJ1Y2tldDsKKwl1 aW50MzJfdCBjcmM7CisJYm9vbCBtY2FzdCwgZ2h0eDsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNf aW5pdF9kb25lKHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJZXRoX2FkZHIgPSBFTkVUX0FERFJfVE9fVUlOVDY0KCpwX2V0aF9hZGRyKTsK KworCWdodHggPQorCSAgICAoYm9vbCkoKGZtYW5fZHRzZWNfZ2V0X3JjdHJsKHBfZHRzZWMtPnBf bWVtX21hcCkgJiBSQ1RSTF9HSFRYKSA/CisJCSAgICB0cnVlIDogZmFsc2UpOworCW1jYXN0ID0g KGJvb2wpKChldGhfYWRkciAmIE1BQ19HUk9VUF9BRERSRVNTKSA/IHRydWUgOiBmYWxzZSk7CisK KwkvKiBDYW5ub3QgaGFuZGxlIHVuaWNhc3QgbWFjIGFkZHIgd2hlbiBHSFRYIGlzIG9uICovCisJ aWYgKGdodHggJiYgIW1jYXN0KSB7CisJCXByX2VycigiQ291bGQgbm90IGNvbXB1dGUgaGFzaCBi dWNrZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3JjID0gZ2V0X21hY19hZGRyX2hh c2hfY29kZShldGhfYWRkcik7CisKKwlpZiAoZ2h0eCkgeworCQlidWNrZXQgPSAoaW50MzJfdCko KGNyYyA+PiAyMykgJiAweDFmZik7CisJfSBlbHNlIHsKKwkJYnVja2V0ID0gKGludDMyX3QpKChj cmMgPj4gMjQpICYgMHhmZik7CisJCS8qIGlmICFnaHR4IGFuZCBtY2FzdCB0aGUgYml0IG11c3Qg YmUgc2V0CisJCSAqIGluIGdhZGRyIGluc3RlYWQgb2YgaWdhZGRyLgorCQkgKi8KKwkJaWYgKG1j YXN0KQorCQkJYnVja2V0ICs9IDB4MTAwOworCX0KKworCWlmIChldGhfYWRkciAmIE1BQ19HUk9V UF9BRERSRVNTKSB7CisJCS8qIEdyb3VwIEFkZHJlc3MgKi8KKwkJbGlzdF9mb3JfZWFjaChwX3Bv cywKKwkJCSAgICAgICYocF9kdHNlYy0+cF9tdWx0aWNhc3RfYWRkcl9oYXNoLT4KKwkJCQlwX2xz dHNbYnVja2V0XSkpIHsKKwkJCXBfaGFzaF9lbnRyeSA9IEVUSF9IQVNIX0VOVFJZX09CSihwX3Bv cyk7CisJCQlpZiAocF9oYXNoX2VudHJ5LT5hZGRyID09IGV0aF9hZGRyKSB7CisJCQkJbGlzdF9k ZWxfaW5pdCgmcF9oYXNoX2VudHJ5LT5ub2RlKTsKKwkJCQlrZnJlZShwX2hhc2hfZW50cnkpOwor CQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChsaXN0X2VtcHR5KCZwX2R0c2VjLT5wX211bHRp Y2FzdF9hZGRyX2hhc2gtPnBfbHN0c1tidWNrZXRdKSkKKwkJCWZtYW5fZHRzZWNfc2V0X2J1Y2tl dChwX2R0c2VjLT5wX21lbV9tYXAsIGJ1Y2tldCwKKwkJCQkJICAgICAgZmFsc2UpOworCX0gZWxz ZSB7CisJCS8qIEluZGl2aWR1YWwgQWRkcmVzcyAqLworCQlsaXN0X2Zvcl9lYWNoKHBfcG9zLAor CQkJICAgICAgJnBfZHRzZWMtPnBfdW5pY2FzdF9hZGRyX2hhc2gtPnBfbHN0c1tidWNrZXRdKSB7 CisJCQlwX2hhc2hfZW50cnkgPSBFVEhfSEFTSF9FTlRSWV9PQkoocF9wb3MpOworCQkJaWYgKHBf aGFzaF9lbnRyeS0+YWRkciA9PSBldGhfYWRkcikgeworCQkJCWxpc3RfZGVsX2luaXQoJnBfaGFz aF9lbnRyeS0+bm9kZSk7CisJCQkJa2ZyZWUocF9oYXNoX2VudHJ5KTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCQlpZiAobGlzdF9lbXB0eSgmcF9kdHNlYy0+cF91bmljYXN0X2FkZHJfaGFzaC0+ cF9sc3RzW2J1Y2tldF0pKQorCQkJZm1hbl9kdHNlY19zZXRfYnVja2V0KHBfZHRzZWMtPnBfbWVt X21hcCwgYnVja2V0LAorCQkJCQkgICAgICBmYWxzZSk7CisJfQorCisJLyogYWRkcmVzcyBkb2Vz IG5vdCBleGlzdCAqLworCUFTU0VSVChwX2hhc2hfZW50cnkpOworCisJcmV0dXJuIDA7Cit9CisK K2ludCBkdHNlY19zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYs IGJvb2wgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYyA9IChzdHJ1Y3QgZHRz ZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX2R0 c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZt YW5fZHRzZWNfc2V0X3VjX3Byb21pc2MocF9kdHNlYy0+cF9tZW1fbWFwLCBuZXdfdmFsKTsKKwlm bWFuX2R0c2VjX3NldF9tY19wcm9taXNjKHBfZHRzZWMtPnBfbWVtX21hcCwgbmV3X3ZhbCk7CisK KwlyZXR1cm4gMDsKK30KKworaW50IGR0c2VjX2FkanVzdF9saW5rKHN0cnVjdCBmbV9tYWNfZGV2 ICpmbV9tYWNfZGV2LCBlbnVtIGV0aGVybmV0X3NwZWVkIHNwZWVkKQoreworCXN0cnVjdCBkdHNl Y190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFjX2RldjsKKwlpbnQgZXJyOwor CWVudW0gZW5ldF9pbnRlcmZhY2UgZW5ldF9pbnRlcmZhY2U7CisJZW51bSBlbmV0X3NwZWVkIGVu ZXRfc3BlZWQ7CisJaW50IHJldCwgZnVsbF9kdXBsZXggPSB0cnVlOworCisJcmV0ID0gaXNfaW5p dF9kb25lKHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcF9kdHNlYy0+ZW5ldF9tb2RlID0KKwkgICAgTUFLRV9FTkVUX01PREUoRU5FVF9J TlRFUkZBQ0VfRlJPTV9NT0RFKHBfZHRzZWMtPmVuZXRfbW9kZSksIHNwZWVkKTsKKwllbmV0X2lu dGVyZmFjZSA9CisJICAgIChlbnVtIGVuZXRfaW50ZXJmYWNlKUVORVRfSU5URVJGQUNFX0ZST01f TU9ERShwX2R0c2VjLT5lbmV0X21vZGUpOworCWVuZXRfc3BlZWQgPSAoZW51bSBlbmV0X3NwZWVk KUVORVRfU1BFRURfRlJPTV9NT0RFKHBfZHRzZWMtPmVuZXRfbW9kZSk7CisKKwllcnIgPQorCSAg ICAoaW50KWZtYW5fZHRzZWNfYWRqdXN0X2xpbmsocF9kdHNlYy0+cF9tZW1fbWFwLCBlbmV0X2lu dGVyZmFjZSwKKwkJCQkJICAgIGVuZXRfc3BlZWQsIGZ1bGxfZHVwbGV4KTsKKworCWlmIChlcnIg PT0gLUVJTlZBTCkgeworCQlwcl9lcnIoIkV0aGVybmV0IGRvZXNuJ3Qgc3VwcG9ydCBIYWxmIER1 cGxleCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30K KworaW50IGR0c2VjX3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rl dikKK3sKKwlzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYyA9IChzdHJ1Y3QgZHRzZWNfdCAqKWZtX21h Y19kZXY7CisJdWludDE2X3QgdG1wX3JlZzE2OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0 X2RvbmUocF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlkdHNlY19taWlfcmVhZF9waHlfcmVnKHBfZHRzZWMsIHBfZHRzZWMtPnRiaV9waHlf YWRkciwgMCwgJnRtcF9yZWcxNik7CisKKwl0bXBfcmVnMTYgJj0gfihQSFlfQ1JfU1BFRUQwIHwg UEhZX0NSX1NQRUVEMSk7CisJdG1wX3JlZzE2IHw9CisJICAgIChQSFlfQ1JfQU5FIHwgUEhZX0NS X1JFU0VUX0FOIHwgUEhZX0NSX0ZVTExEVVBMRVggfCBQSFlfQ1JfU1BFRUQxKTsKKworCWR0c2Vj X21paV93cml0ZV9waHlfcmVnKHBfZHRzZWMsIHBfZHRzZWMtPnRiaV9waHlfYWRkciwgMCwgdG1w X3JlZzE2KTsKKworCXJldHVybiAwOworfQorCitpbnQgZHRzZWNfZ2V0X3ZlcnNpb24oc3RydWN0 IGZtX21hY19kZXYgKmZtX21hY19kZXYsIHVpbnQzMl90ICptYWNfdmVyc2lvbikKK3sKKwlzdHJ1 Y3QgZHRzZWNfdCAqcF9kdHNlYyA9IChzdHJ1Y3QgZHRzZWNfdCAqKWZtX21hY19kZXY7CisJaW50 IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSptYWNfdmVyc2lvbiA9IGZtYW5fZHRzZWNf Z2V0X3JldmlzaW9uKHBfZHRzZWMtPnBfbWVtX21hcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50 IGR0c2VjX3NldF9leGNlcHRpb24oc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsCisJCQll bnVtIGZtX21hY19leGNlcHRpb25zIGV4Y2VwdGlvbiwKKwkJCWJvb2wgZW5hYmxlKQoreworCXN0 cnVjdCBkdHNlY190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFjX2RldjsKKwl1 aW50MzJfdCBiaXRfbWFzayA9IDA7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShw X2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWlmIChleGNlcHRpb24gIT0gRk1fTUFDX0VYXzFHXzE1ODhfVFNfUlhfRVJSKSB7CisJCWJpdF9t YXNrID0gZ2V0X2V4Y2VwdGlvbl9mbGFnKGV4Y2VwdGlvbik7CisJCWlmIChiaXRfbWFzaykgewor CQkJaWYgKGVuYWJsZSkKKwkJCQlwX2R0c2VjLT5leGNlcHRpb25zIHw9IGJpdF9tYXNrOworCQkJ ZWxzZQorCQkJCXBfZHRzZWMtPmV4Y2VwdGlvbnMgJj0gfmJpdF9tYXNrOworCQl9IGVsc2Ugewor CQkJcHJfZXJyKCJVbmRlZmluZWQgZXhjZXB0aW9uXG4iKTsKKwkJCXJldHVybiAtRURPTTsKKwkJ fQorCQlpZiAoZW5hYmxlKQorCQkJZm1hbl9kdHNlY19lbmFibGVfaW50ZXJydXB0KHBfZHRzZWMt PnBfbWVtX21hcCwKKwkJCQkJCSAgICBiaXRfbWFzayk7CisJCWVsc2UKKwkJCWZtYW5fZHRzZWNf ZGlzYWJsZV9pbnRlcnJ1cHQocF9kdHNlYy0+cF9tZW1fbWFwLAorCQkJCQkJICAgICBiaXRfbWFz ayk7CisJfSBlbHNlIHsKKwkJaWYgKCFwX2R0c2VjLT5wdHBfdHN1X2VuYWJsZWQpIHsKKwkJCXBy X2VycigiRXhjZXB0aW9uIHZhbGlkIGZvciAxNTg4IG9ubHlcbiIpOworCQkJcmV0dXJuIC1FRE9N OworCQl9CisJCXN3aXRjaCAoZXhjZXB0aW9uKSB7CisJCWNhc2UgKEZNX01BQ19FWF8xR18xNTg4 X1RTX1JYX0VSUik6CisJCQlpZiAoZW5hYmxlKSB7CisJCQkJcF9kdHNlYy0+ZW5fdHN1X2Vycl9l eGVwdGlvbiA9IHRydWU7CisJCQkJZm1hbl9kdHNlY19lbmFibGVfdG1yX2ludGVycnVwdChwX2R0 c2VjLT4KKwkJCQkJCQkJcF9tZW1fbWFwKTsKKwkJCX0gZWxzZSB7CisJCQkJcF9kdHNlYy0+ZW5f dHN1X2Vycl9leGVwdGlvbiA9IGZhbHNlOworCQkJCWZtYW5fZHRzZWNfZGlzYWJsZV90bXJfaW50 ZXJydXB0KHBfZHRzZWMtPgorCQkJCQkJCQkgcF9tZW1fbWFwKTsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJcHJfZXJyKCJVbmRlZmluZWQgZXhjZXB0aW9uXG4iKTsKKwkJCXJldHVy biAtRURPTTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBkVFNFQyBJbml0JkZyZWUg QVBJICovCisKK2ludCBkdHNlY19pbml0KHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2KQor eworCXN0cnVjdCBkdHNlY190ICpwX2R0c2VjID0gKHN0cnVjdCBkdHNlY190ICopZm1fbWFjX2Rl djsKKwlzdHJ1Y3QgZHRzZWNfY2ZnICpwX2R0c2VjX2Rydl9wYXJhbTsKKwlpbnQgZXJyOworCXVp bnQxNl90IG1heF9mcm1fbG47CisJZW51bSBlbmV0X2ludGVyZmFjZSBlbmV0X2ludGVyZmFjZTsK KwllbnVtIGVuZXRfc3BlZWQgZW5ldF9zcGVlZDsKKwllbmV0X2FkZHJfdCBldGhfYWRkcjsKKwlp bnQgcmV0LCByZXRfZXJyOworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZHRzZWMtPnBfZHRzZWNf ZHJ2X3BhcmFtKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChERUZBVUxUX1JF U0VUX09OX0lOSVQgJiYKKwkgICAgKGZtX3Jlc2V0X21hYyhwX2R0c2VjLT5oX2ZtLCBwX2R0c2Vj LT5tYWNfaWQpICE9IDApKSB7CisJCXByX2VycigiQ2FuJ3QgcmVzZXQgTUFDIVxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldF9lcnIgPSBjaGVja19pbml0X3BhcmFtZXRlcnMocF9k dHNlYyk7CisJaWYgKHJldF9lcnIpCisJCXJldHVybiAtcmV0X2VycjsKKworCXBfZHRzZWNfZHJ2 X3BhcmFtID0gcF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW07CisKKwllbmV0X2ludGVyZmFjZSA9 CisJICAgIChlbnVtIGVuZXRfaW50ZXJmYWNlKUVORVRfSU5URVJGQUNFX0ZST01fTU9ERShwX2R0 c2VjLT5lbmV0X21vZGUpOworCWVuZXRfc3BlZWQgPSAoZW51bSBlbmV0X3NwZWVkKUVORVRfU1BF RURfRlJPTV9NT0RFKHBfZHRzZWMtPmVuZXRfbW9kZSk7CisJTUFLRV9FTkVUX0FERFJfRlJPTV9V SU5UNjQocF9kdHNlYy0+YWRkciwgZXRoX2FkZHIpOworCisJZXJyID0gKGludClmbWFuX2R0c2Vj X2luaXQocF9kdHNlYy0+cF9tZW1fbWFwLAorCQkJCSAgICAgICBwX2R0c2VjX2Rydl9wYXJhbSwK KwkJCQkgICAgICAgZW5ldF9pbnRlcmZhY2UsCisJCQkJICAgICAgIGVuZXRfc3BlZWQsCisJCQkJ ICAgICAgICh1aW50OF90ICopZXRoX2FkZHIsCisJCQkJICAgICAgIHBfZHRzZWMtPmZtX3Jldl9p bmZvLm1ham9yX3JldiwKKwkJCQkgICAgICAgcF9kdHNlYy0+Zm1fcmV2X2luZm8ubWlub3JfcmV2 LAorCQkJCSAgICAgICBwX2R0c2VjLT5leGNlcHRpb25zKTsKKwlpZiAoZXJyKSB7CisJCWZyZWVf aW5pdF9yZXNvdXJjZXMocF9kdHNlYyk7CisJCXByX2VycigiRFRTRUMgdmVyc2lvbiBkb2Vzbid0 IHN1cHBvcnQgdGhpcyBpL2YgbW9kZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKEVO RVRfSU5URVJGQUNFX0ZST01fTU9ERShwX2R0c2VjLT5lbmV0X21vZGUpID09IEVORVRfSUZfU0dN SUkpIHsKKwkJdWludDE2X3QgdG1wX3JlZzE2OworCisJCS8qIENvbmZpZ3VyZSB0aGUgVEJJIFBI WSBDb250cm9sIFJlZ2lzdGVyICovCisJCXRtcF9yZWcxNiA9IFBIWV9UQklDT05fQ0xLX1NFTCB8 IFBIWV9UQklDT05fU1JFU0VUOworCQlkdHNlY19taWlfd3JpdGVfcGh5X3JlZyhwX2R0c2VjLAor CQkJCQkodWludDhfdClwX2R0c2VjX2Rydl9wYXJhbS0+dGJpcGEsCisJCQkJCTE3LCB0bXBfcmVn MTYpOworCisJCXRtcF9yZWcxNiA9IFBIWV9UQklDT05fQ0xLX1NFTDsKKwkJZHRzZWNfbWlpX3dy aXRlX3BoeV9yZWcocF9kdHNlYywKKwkJCQkJKHVpbnQ4X3QpcF9kdHNlY19kcnZfcGFyYW0tPnRi aXBhLAorCQkJCQkxNywgdG1wX3JlZzE2KTsKKworCQl0bXBfcmVnMTYgPQorCQkgICAgKFBIWV9D Ul9QSFlfUkVTRVQgfCBQSFlfQ1JfQU5FIHwgUEhZX0NSX0ZVTExEVVBMRVggfAorCQkgICAgIFBI WV9DUl9TUEVFRDEpOworCQlkdHNlY19taWlfd3JpdGVfcGh5X3JlZyhwX2R0c2VjLAorCQkJCQko dWludDhfdClwX2R0c2VjX2Rydl9wYXJhbS0+dGJpcGEsCisJCQkJCTAsIHRtcF9yZWcxNik7CisK KwkJaWYgKHBfZHRzZWMtPmVuZXRfbW9kZSAmIEVORVRfSUZfU0dNSUlfQkFTRVgpCisJCQl0bXBf cmVnMTYgPSBQSFlfVEJJQU5BXzEwMDBYOworCQllbHNlCisJCQl0bXBfcmVnMTYgPSBQSFlfVEJJ QU5BX1NHTUlJOworCQlkdHNlY19taWlfd3JpdGVfcGh5X3JlZyhwX2R0c2VjLAorCQkJCQkodWlu dDhfdClwX2R0c2VjX2Rydl9wYXJhbS0+dGJpcGEsCisJCQkJCTQsIHRtcF9yZWcxNik7CisKKwkJ dG1wX3JlZzE2ID0KKwkJICAgIChQSFlfQ1JfQU5FIHwgUEhZX0NSX1JFU0VUX0FOIHwgUEhZX0NS X0ZVTExEVVBMRVggfAorCQkgICAgIFBIWV9DUl9TUEVFRDEpOworCisJCWR0c2VjX21paV93cml0 ZV9waHlfcmVnKHBfZHRzZWMsCisJCQkJCSh1aW50OF90KXBfZHRzZWNfZHJ2X3BhcmFtLT50Ymlw YSwKKwkJCQkJMCwgdG1wX3JlZzE2KTsKKwl9CisKKwkvKiBNYXggRnJhbWUgTGVuZ3RoICovCisJ bWF4X2ZybV9sbiA9IGZtYW5fZHRzZWNfZ2V0X21heF9mcmFtZV9sZW4ocF9kdHNlYy0+cF9tZW1f bWFwKTsKKwllcnIgPSBmbV9zZXRfbWFjX21heF9mcmFtZShwX2R0c2VjLT5oX2ZtLCBGTV9NQUNf MUcsIHBfZHRzZWMtPm1hY19pZCwKKwkJCQkgICBtYXhfZnJtX2xuKTsKKwlpZiAoZXJyKSB7CisJ CXByX2VycigiU2V0dGluZyBtYXggZnJhbWUgbGVuZ3RoIEZBSUxFRFxuIik7CisJCWZyZWVfaW5p dF9yZXNvdXJjZXMocF9kdHNlYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBfZHRzZWMt PnBfbXVsdGljYXN0X2FkZHJfaGFzaCA9CisJYWxsb2NfaGFzaF90YWJsZShFWFRFTkRFRF9IQVNI X1RBQkxFX1NJWkUpOworCWlmICghcF9kdHNlYy0+cF9tdWx0aWNhc3RfYWRkcl9oYXNoKSB7CisJ CWZyZWVfaW5pdF9yZXNvdXJjZXMocF9kdHNlYyk7CisJCXByX2VycigiTUMgaGFzaCB0YWJsZSBp cyBGQUlMRURcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwX2R0c2VjLT5wX3VuaWNh c3RfYWRkcl9oYXNoID0gYWxsb2NfaGFzaF90YWJsZShEVFNFQ19IQVNIX1RBQkxFX1NJWkUpOwor CWlmICghcF9kdHNlYy0+cF91bmljYXN0X2FkZHJfaGFzaCkgeworCQlmcmVlX2luaXRfcmVzb3Vy Y2VzKHBfZHRzZWMpOworCQlwcl9lcnIoIlVDIGhhc2ggdGFibGUgaXMgRkFJTEVEXG4iKTsKKwkJ cmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogcmVnaXN0ZXIgZXJyIGludHIgaGFuZGxlciBmb3Ig ZHRzZWMgdG8gRlBNIChlcnIpICovCisJZm1fcmVnaXN0ZXJfaW50cihwX2R0c2VjLT5oX2ZtLCBG TV9NT0RfTUFDLCBwX2R0c2VjLT5tYWNfaWQsCisJCQkgRk1fSU5UUl9UWVBFX0VSUiwgZHRzZWNf aXNyLCBwX2R0c2VjKTsKKwkvKiByZWdpc3RlciAxNTg4IGludHIgaGFuZGxlciBmb3IgVE1SIHRv IEZQTSAobm9ybWFsKSAqLworCWZtX3JlZ2lzdGVyX2ludHIocF9kdHNlYy0+aF9mbSwgRk1fTU9E X01BQywgcF9kdHNlYy0+bWFjX2lkLAorCQkJIEZNX0lOVFJfVFlQRV9OT1JNQUwsIGR0c2VjXzE1 ODhfaXNyLCBwX2R0c2VjKTsKKworCWtmcmVlKHBfZHRzZWNfZHJ2X3BhcmFtKTsKKwlwX2R0c2Vj LT5wX2R0c2VjX2Rydl9wYXJhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGR0c2Vj X2ZyZWUoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYpCit7CisJc3RydWN0IGR0c2VjX3Qg KnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKilmbV9tYWNfZGV2OworCisJZnJlZV9pbml0X3Jl c291cmNlcyhwX2R0c2VjKTsKKworCWtmcmVlKHBfZHRzZWMtPnBfZHRzZWNfZHJ2X3BhcmFtKTsK KwlwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbSA9IE5VTEw7CisJa2ZyZWUocF9kdHNlYyk7CisK KwlyZXR1cm4gMDsKK30KKworLyogZF90c2VjIGNvbmZpZyBtYWluIGVudHJ5ICovCisKK3ZvaWQg KmR0c2VjX2NvbmZpZyhzdHJ1Y3QgZm1fbWFjX3BhcmFtc190ICpwX2ZtX21hY19wYXJhbSkKK3sK KwlzdHJ1Y3QgZHRzZWNfdCAqcF9kdHNlYzsKKwlzdHJ1Y3QgZHRzZWNfY2ZnICpwX2R0c2VjX2Ry dl9wYXJhbTsKKwl1aW50cHRyX3QgYmFzZV9hZGRyOworCisJYmFzZV9hZGRyID0gcF9mbV9tYWNf cGFyYW0tPmJhc2VfYWRkcjsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFVDQyBHRVRI IGRhdGEgc3RydWN0dXJlLiAqLworCXBfZHRzZWMgPSBremFsbG9jKHNpemVvZigqcF9kdHNlYyks IEdGUF9LRVJORUwpOworCWlmICghcF9kdHNlYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkX3RzZWMgZHJpdmVyIHBhcmFtZXRlcnMg ZGF0YSBzdHJ1Y3R1cmUuICovCisJcF9kdHNlY19kcnZfcGFyYW0gPSBremFsbG9jKHNpemVvZigq cF9kdHNlY19kcnZfcGFyYW0pLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfZHRzZWNf ZHJ2X3BhcmFtKSB7CisJCWtmcmVlKHBfZHRzZWMpOworCQlwcl9lcnIoImRUU0VDIGRyaXZlciBw YXJhbWV0ZXJzIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCS8qIFBsYW50 IHBhcmFtZXRlciBzdHJ1Y3R1cmUgcG9pbnRlciAqLworCXBfZHRzZWMtPnBfZHRzZWNfZHJ2X3Bh cmFtID0gcF9kdHNlY19kcnZfcGFyYW07CisKKwlmbWFuX2R0c2VjX2RlZmNvbmZpZyhwX2R0c2Vj X2Rydl9wYXJhbSk7CisKKwlwX2R0c2VjLT5wX21lbV9tYXAgPSAoc3RydWN0IGR0c2VjX3JlZ3Mg X19pb21lbSAqKQorCQkJICAgIFVJTlRfVE9fUFRSKGJhc2VfYWRkcik7CisJcF9kdHNlYy0+cF9t aWlfbWVtX21hcCA9IChzdHJ1Y3QgZHRzZWNfbWlpX3JlZyBfX2lvbWVtICopCisJICAgIFVJTlRf VE9fUFRSKGJhc2VfYWRkciArIERUU0VDX1RPX01JSV9PRkZTRVQpOworCXBfZHRzZWMtPmFkZHIg PSBFTkVUX0FERFJfVE9fVUlOVDY0KHBfZm1fbWFjX3BhcmFtLT5hZGRyKTsKKwlwX2R0c2VjLT5l bmV0X21vZGUgPSBwX2ZtX21hY19wYXJhbS0+ZW5ldF9tb2RlOworCXBfZHRzZWMtPm1hY19pZCA9 IHBfZm1fbWFjX3BhcmFtLT5tYWNfaWQ7CisJcF9kdHNlYy0+ZXhjZXB0aW9ucyA9IERUU0VDX0RF RkFVTFRfRVhDRVBUSU9OUzsKKwlwX2R0c2VjLT5mX2V4Y2VwdGlvbiA9IHBfZm1fbWFjX3BhcmFt LT5mX2V4Y2VwdGlvbjsKKwlwX2R0c2VjLT5mX2V2ZW50ID0gcF9mbV9tYWNfcGFyYW0tPmZfZXZl bnQ7CisJcF9kdHNlYy0+ZGV2X2lkID0gcF9mbV9tYWNfcGFyYW0tPmRldl9pZDsKKwlwX2R0c2Vj LT5wdHBfdHN1X2VuYWJsZWQgPSBwX2R0c2VjLT5wX2R0c2VjX2Rydl9wYXJhbS0+cHRwX3RzdV9l bjsKKwlwX2R0c2VjLT5lbl90c3VfZXJyX2V4ZXB0aW9uID0KKwkgICAgcF9kdHNlYy0+cF9kdHNl Y19kcnZfcGFyYW0tPnB0cF9leGNlcHRpb25fZW47CisJcF9kdHNlYy0+dGJpX3BoeV9hZGRyID0g cF9kdHNlYy0+cF9kdHNlY19kcnZfcGFyYW0tPnRiaV9waHlfYWRkcjsKKworCXBfZHRzZWMtPmhf Zm0gPSBwX2ZtX21hY19wYXJhbS0+aF9mbTsKKwlwX2R0c2VjLT5jbGtfZnJlcSA9IGZtX2dldF9j bG9ja19mcmVxKHBfZHRzZWMtPmhfZm0pOworCWlmIChwX2R0c2VjLT5jbGtfZnJlcSAgPT0gMCkg eworCQlwcl9lcnIoIkNhbid0IGdldCBjbG9jayBmb3IgTUFDIVxuIik7CisJCWtmcmVlKHBfZHRz ZWMpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBTYXZlIEZNYW4gcmV2 aXNpb24gKi8KKwlmbV9nZXRfcmV2aXNpb24ocF9kdHNlYy0+aF9mbSwgJnBfZHRzZWMtPmZtX3Jl dl9pbmZvKTsKKworCXJldHVybiBwX2R0c2VjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX2R0c2VjLmggYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hOTU1YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX2R0c2VjLmgKQEAgLTAsMCArMSwyMjcgQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUg U2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJl IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBv cHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF VkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICog RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKyAqLworCisvKiBGTSBkVFNFQyAuLi4gKi8KKyNpZm5kZWYgX19EVFNFQ19ICisjZGVm aW5lIF9fRFRTRUNfCisKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiZW5ldF9leHQu aCIKKworI2luY2x1ZGUgImZtX2R0c2VjX21paV9hY2MuaCIKKyNpbmNsdWRlICJmbV9tYWMuaCIK KworI2RlZmluZSBEVFNFQ19ERUZBVUxUX0VYQ0VQVElPTlMJCSBcCisJKCh1aW50MzJfdCkoKERU U0VDX0lNQVNLX0JSRU4pCQl8XAorCQkJKERUU0VDX0lNQVNLX1JYQ0VOKQl8XAorCQkJKERUU0VD X0lNQVNLX0JURU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfVFhDRU4pCXxcCisJCQkoRFRTRUNfSU1B U0tfVFhFRU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfQUJSVEVOKQl8XAorCQkJKERUU0VDX0lNQVNL X0xDRU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfQ1JMRU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfWEZV TkVOKQl8XAorCQkJKERUU0VDX0lNQVNLX0lGRVJSRU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfTUFH RU4pCXxcCisJCQkoRFRTRUNfSU1BU0tfVERQRUVOKQl8XAorCQkJKERUU0VDX0lNQVNLX1JEUEVF TikpKQorCisjZGVmaW5lIE1BWF9QQUNLRVRfQUxJR05NRU5UICAgICAgICAzMQorI2RlZmluZSBN QVhfSU5URVJfUEFDS0VUX0dBUCAgICAgICAgMHg3ZgorI2RlZmluZSBNQVhfSU5URVJfUEFMVEVS TkFURV9CRUIgICAgMHgwZgorI2RlZmluZSBNQVhfUkVUUkFOU01JU1NJT04gICAgICAgICAgMHgw ZgorI2RlZmluZSBNQVhfQ09MTElTSU9OX1dJTkRPVyAgICAgICAgMHgwM2ZmCisKKy8qbnVtYmVy IG9mIHBhdHRlcm4gbWF0Y2ggcmVnaXN0ZXJzIChlbnRyaWVzKSAqLworI2RlZmluZSBEVFNFQ19O VU1fT0ZfUEFERFJTICAgICAgICAgICAgIDE1CisKKy8qIEdyb3VwIGFkZHJlc3MgYml0IGluZGlj YXRpb24gKi8KKyNkZWZpbmUgR1JPVVBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAw MTAwMDAwMDAwMDBMTAorCisvKiBIYXNoIHRhYmxlIHNpemUgKDMyIGJpdHMqOCByZWdzKSAqLwor I2RlZmluZSBEVFNFQ19IQVNIX1RBQkxFX1NJWkUgICAgICAgICAgICAgICAgIDI1NgorLyogRXh0 ZW5kZWQgSGFzaCB0YWJsZSBzaXplICgzMiBiaXRzKjE2IHJlZ3MpICovCisjZGVmaW5lIEVYVEVO REVEX0hBU0hfVEFCTEVfU0laRSAgICAgICAgNTEyCisKKy8qIG51bWJlciBvZiBwYXR0ZXJuIG1h dGNoIHJlZ2lzdGVycyAoZW50cmllcykgKi8KKyNkZWZpbmUgRFRTRUNfVE9fTUlJX09GRlNFVCAg ICAgICAgICAgICAweDEwMDAKKy8qIG1heGltdW0gbnVtYmVyIG9mIHBoeXMgKi8KKyNkZWZpbmUg TUFYX1BIWVMgICAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgICAgIFZBTDMyQklUICAg IDB4MTAwMDAwMDAwTEwKKyNkZWZpbmUgICAgIFZBTDIyQklUICAgIDB4MDA0MDAwMDAKKyNkZWZp bmUgICAgIFZBTDE2QklUICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgICAgIFZBTDEyQklUICAgIDB4 MDAwMDEwMDAKKworLyogQ0FSMS8yIGJpdHMgKi8KKyNkZWZpbmUgQ0FSMV9UUjY0ICAgMHg4MDAw MDAwMAorI2RlZmluZSBDQVIxX1RSMTI3ICAweDQwMDAwMDAwCisjZGVmaW5lIENBUjFfVFIyNTUg IDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0FSMV9UUjUxMSAgMHgxMDAwMDAwMAorI2RlZmluZSBDQVIx X1RSSzEgICAweDA4MDAwMDAwCisjZGVmaW5lIENBUjFfVFJNQVggIDB4MDQwMDAwMDAKKyNkZWZp bmUgQ0FSMV9UUk1HViAgMHgwMjAwMDAwMAorCisjZGVmaW5lIENBUjFfUkJZVCAgIDB4MDAwMTAw MDAKKyNkZWZpbmUgQ0FSMV9SUEtUICAgMHgwMDAwODAwMAorI2RlZmluZSBDQVIxX1JNQ0EgICAw eDAwMDAyMDAwCisjZGVmaW5lIENBUjFfUkJDQSAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0FSMV9S WFBGICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQVIxX1JBTE4gICAweDAwMDAwMTAwCisjZGVmaW5l IENBUjFfUkZMUiAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0FSMV9SQ0RFICAgMHgwMDAwMDA0MAor I2RlZmluZSBDQVIxX1JDU0UgICAweDAwMDAwMDIwCisjZGVmaW5lIENBUjFfUlVORCAgIDB4MDAw MDAwMTAKKyNkZWZpbmUgQ0FSMV9ST1ZSICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQVIxX1JGUkcg ICAweDAwMDAwMDA0CisjZGVmaW5lIENBUjFfUkpCUiAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FS MV9SRFJQICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIENBUjJfVEZDUyAgIDB4MDAwNDAwMDAKKyNk ZWZpbmUgQ0FSMl9UQllUICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQVIyX1RQS1QgICAweDAwMDAx MDAwCisjZGVmaW5lIENBUjJfVE1DQSAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0FSMl9UQkNBICAg MHgwMDAwMDQwMAorI2RlZmluZSBDQVIyX1RYUEYgICAweDAwMDAwMjAwCisjZGVmaW5lIENBUjJf VERSUCAgIDB4MDAwMDAwMDEKKworc3RydWN0IGludGVybmFsX3N0YXRpc3RpY3NfdCB7CisJdWlu dDY0X3QgdHI2NDsKKwl1aW50NjRfdCB0cjEyNzsKKwl1aW50NjRfdCB0cjI1NTsKKwl1aW50NjRf dCB0cjUxMTsKKwl1aW50NjRfdCB0cjFrOworCXVpbnQ2NF90IHRybWF4OworCXVpbnQ2NF90IHRy bWd2OworCXVpbnQ2NF90IHJmcmc7CisJdWludDY0X3QgcmpicjsKKwl1aW50NjRfdCByZHJwOwor CXVpbnQ2NF90IHJhbG47CisJdWludDY0X3QgcnVuZDsKKwl1aW50NjRfdCByb3ZyOworCXVpbnQ2 NF90IHJ4cGY7CisJdWludDY0X3QgdHhwZjsKKwl1aW50NjRfdCByYnl0OworCXVpbnQ2NF90IHJw a3Q7CisJdWludDY0X3Qgcm1jYTsKKwl1aW50NjRfdCByYmNhOworCXVpbnQ2NF90IHJmbHI7CisJ dWludDY0X3QgcmNkZTsKKwl1aW50NjRfdCByY3NlOworCXVpbnQ2NF90IHRieXQ7CisJdWludDY0 X3QgdHBrdDsKKwl1aW50NjRfdCB0bWNhOworCXVpbnQ2NF90IHRiY2E7CisJdWludDY0X3QgdGRy cDsKKwl1aW50NjRfdCB0ZmNzOworfTsKKworc3RydWN0IGR0c2VjX3QgeworCS8qIHBvaW50ZXIg dG8gZFRTRUMgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMuICAgICAgICAgICovCisJc3RydWN0IGR0 c2VjX3JlZ3MgX19pb21lbSAqcF9tZW1fbWFwOworCS8qIHBvaW50ZXIgdG8gZFRTRUMgTUlJIG1l bW9yeSBtYXBwZWQgcmVnaXN0ZXJzLiAgICAgICAgICAqLworCXN0cnVjdCBkdHNlY19taWlfcmVn IF9faW9tZW0gKnBfbWlpX21lbV9tYXA7CisJLyogTUFDIGFkZHJlc3Mgb2YgZGV2aWNlOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50NjRfdCBhZGRyOworCS8qIEV0aGVybmV0 IHBoeXNpY2FsIGludGVyZmFjZSAgKi8KKwllbnVtIGVfZW5ldF9tb2RlIGVuZXRfbW9kZTsKKwl2 b2lkICpkZXZfaWQ7IC8qIGRldmljZSBjb29raWUgdXNlZCBieSB0aGUgZXhjZXB0aW9uIGNicyAq LworCWZtX21hY19leGNlcHRpb25fY2IgKmZfZXhjZXB0aW9uOworCWZtX21hY19leGNlcHRpb25f Y2IgKmZfZXZlbnQ7CisJLyogV2hldGhlciBhIHBhcnRpY3VsYXIgaW5kaXZpZHVhbCBhZGRyZXNz IHJlY29nbml0aW9uCisJICogcmVnaXN0ZXIgaXMgYmVpbmcgdXNlZAorCSAqLworCWJvb2wgaW5k X2FkZHJfcmVnX3VzZWRbRFRTRUNfTlVNX09GX1BBRERSU107CisJLyogTUFDIGFkZHJlc3MgZm9y IHBhcnRpY3VsYXIgaW5kaXZpZHVhbAorCSAqIGFkZHJlc3MgcmVjb2duaXRpb24gcmVnaXN0ZXIK KwkgKi8KKwl1aW50NjRfdCBwYWRkcltEVFNFQ19OVU1fT0ZfUEFERFJTXTsKKwkvKiBOdW1iZXIg b2YgaW5kaXZpZHVhbCBhZGRyZXNzZXMgaW4gcmVnaXN0ZXJzIGZvciB0aGlzIHN0YXRpb24uICov CisJdWludDhfdCBudW1fb2ZfaW5kX2FkZHJfaW5fcmVnczsKKwlzdHJ1Y3QgaW50ZXJuYWxfc3Rh dGlzdGljc190IGludGVybmFsX3N0YXRpc3RpY3M7CisJLyogcG9pbnRlciB0byBkcml2ZXIncyBn bG9iYWwgYWRkcmVzcyBoYXNoIHRhYmxlICAqLworCXN0cnVjdCBldGhfaGFzaF90ICpwX211bHRp Y2FzdF9hZGRyX2hhc2g7CisJLyogcG9pbnRlciB0byBkcml2ZXIncyBpbmRpdmlkdWFsIGFkZHJl c3MgaGFzaCB0YWJsZSAgKi8KKwlzdHJ1Y3QgZXRoX2hhc2hfdCAqcF91bmljYXN0X2FkZHJfaGFz aDsKKwl1aW50OF90IG1hY19pZDsKKwl1aW50OF90IHRiaV9waHlfYWRkcjsKKwl1aW50MzJfdCBl eGNlcHRpb25zOworCWJvb2wgcHRwX3RzdV9lbmFibGVkOworCWJvb2wgZW5fdHN1X2Vycl9leGVw dGlvbjsKKwlzdHJ1Y3QgZHRzZWNfY2ZnICpwX2R0c2VjX2Rydl9wYXJhbTsKKwl1aW50MTZfdCBj bGtfZnJlcTsKKwl2b2lkICpoX2ZtOworCXN0cnVjdCBmbV9yZXZpc2lvbl9pbmZvX3QgZm1fcmV2 X2luZm87Cit9OworCit2b2lkICpkdHNlY19jb25maWcoc3RydWN0IGZtX21hY19wYXJhbXNfdCAq cF9mbV9tYWNfcGFyYW0pOworaW50IGR0c2VjX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgZm1fbWFj X2RldiAqZm1fbWFjX2RldiwgYm9vbCBuZXdfdmFsKTsKK2ludCBkdHNlY19tb2RpZnlfbWFjX2Fk ZHJlc3Moc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsCisJCQkgICAgIGVuZXRfYWRkcl90 ICpwX2VuZXRfYWRkcik7CitpbnQgZHRzZWNfYWRqdXN0X2xpbmsoc3RydWN0IGZtX21hY19kZXYg KmZtX21hY19kZXYsCisJCSAgICAgIGVudW0gZXRoZXJuZXRfc3BlZWQgc3BlZWQpOworaW50IGR0 c2VjX3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rldik7CitpbnQg ZHRzZWNfY2ZnX21heF9mcmFtZV9sZW4oc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIHVp bnQxNl90IG5ld192YWwpOworaW50IGR0c2VjX2NmZ19wYWRfYW5kX2NyYyhzdHJ1Y3QgZm1fbWFj X2RldiAqZm1fbWFjX2RldiwgYm9vbCBuZXdfdmFsKTsKK2ludCBkdHNlY19lbmFibGUoc3RydWN0 IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGVudW0gY29tbV9tb2RlIG1vZGUpOworaW50IGR0c2Vj X2Rpc2FibGUoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGVudW0gY29tbV9tb2RlIG1v ZGUpOworaW50IGR0c2VjX2luaXQoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYpOworaW50 IGR0c2VjX2ZyZWUoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYpOworaW50IGR0c2VjX2Fj Y2VwdF9yeF9wYXVzZV9mcmFtZXMoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGJvb2wg ZW4pOworLyogRnVuY3Rpb24gICAgICAgZHRzZWNfc2V0X3R4X3BhdXNlX2ZyYW1lcworICogRGVz Y3JpcHRpb24gICAgRW5hYmxlL0Rpc2FibGUgdHJhbnNtaXNzaW9uIG9mIFBhdXNlLUZyYW1lcy4K KyAqICAgICAgICAgICAgICAgIFRoZSByb3V0aW5lIGNoYW5nZXMgdGhlIGRlZmF1bHQgY29uZmln dXJhdGlvbjoKKyAqICAgICAgICAgICAgICAgIHBhdXNlLXRpbWUgLSBbREVGQVVMVF9UWF9QQVVT RV9USU1FXQorICogICAgICAgICAgICAgICAgdGhyZXNob2xkLXRpbWUgLSBbMF0KKyAqIFBhcmFt W2luXSAgICAgIGZtX21hY19kZXYgLSBQb2ludGVyIHRvIE1BQyBvYmplY3QKKyAqIFBhcmFtW2lu XSAgICAgIHByaW9yaXR5IC0gdGhlIFBGQyBjbGFzcyBvZiBzZXJ2aWNlOyB1c2UgJ0ZNX01BQ19O T19QRkMnCisgKiAgICAgICAgICAgICAgICB0byBpbmRpY2F0ZSBsZWdhY3kgcGF1c2Ugc3VwcG9y dCAoaS5lLiBubyBQRkMpLgorICogUGFyYW1baW5dICAgICAgcGF1c2VfdGltZSAtIFBhdXNlIHF1 YW50YSB2YWx1ZSB1c2VkIHdpdGggdHJhbnNtaXR0ZWQgcGF1c2UKKyAqICAgICAgICAgICAgICAg IGZyYW1lcy4gRWFjaCBxdWFudGEgcmVwcmVzZW50cyBhIDUxMiBiaXQtdGltZXM7CisgKiAgICAg ICAgICAgICAgICBOb3RlIHRoYXQgJzAnIGFzIGFuIGlucHV0IGhlcmUgd2lsbCBiZSB1c2VkIGFz IGRpc2FibGluZyB0aGUKKyAqICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBvZiB0aGUgcGF1 c2UtZnJhbWVzLgorICogUGFyYW1baW5dICAgICAgRm9yIGxlZ2FjeSBwYXVzZSBzdXBwb3J0IChp LmUuIG5vIFBGQyksIHRodXMKKyAqICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBiZSAnMCcu CisgKiBSZXR1cm4gICAgICAgICAwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgor ICogQ2F1dGlvbnMgICAgICAgQWxsb3dlZCBvbmx5IGZvbGxvd2luZyBkdHNlY19pbml0KCkuCisg Ki8KK2ludCBkdHNlY19zZXRfdHhfcGF1c2VfZnJhbWVzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9t YWNfZGV2LCB1aW50OF90IHByaW9yaXR5LAorCQkJICAgICAgdWludDE2X3QgcGF1c2VfdGltZSwg dWludDE2X3QgdGhyZXNoX3RpbWUpOworaW50IGR0c2VjX3NldF9leGNlcHRpb24oc3RydWN0IGZt X21hY19kZXYgKmZtX21hY19kZXYsCisJCQllbnVtIGZtX21hY19leGNlcHRpb25zIGV4Y2VwdGlv biwgYm9vbCBlbmFibGUpOworaW50IGR0c2VjX2FkZF9oYXNoX21hY19hZGRyZXNzKHN0cnVjdCBm bV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICAgIGVuZXRfYWRkcl90ICpwX2V0aF9hZGRy KTsKK2ludCBkdHNlY19kZWxfaGFzaF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1f bWFjX2RldiwKKwkJCSAgICAgICBlbmV0X2FkZHJfdCAqcF9ldGhfYWRkcik7CitpbnQgZHRzZWNf Z2V0X3ZlcnNpb24oc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIHVpbnQzMl90ICptYWNf dmVyc2lvbik7CisKKyNlbmRpZiAvKiBfX0RUU0VDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9kdHNlY19taWlfYWNjLmMgYi9kcml2 ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWNfbWlpX2FjYy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1M2M5MDAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWNfbWlp X2FjYy5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVz Y2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh cmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp dGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAg ICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFU SVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGTSBkdHNlYyBNSUkg cmVnaXN0ZXIgYWNjZXNzIE1BQyAuLi4gKi8KKworI2luY2x1ZGUgInNlcnZpY2UuaCIKKyNpbmNs dWRlICJmbV9tYWMuaCIKKyNpbmNsdWRlICJmbV9kdHNlYy5oIgorI2luY2x1ZGUgImZzbF9mbWFu X2R0c2VjX21paV9hY2MuaCIKKworaW50IGR0c2VjX21paV93cml0ZV9waHlfcmVnKHZvaWQgKmhf ZHRzZWMsIHVpbnQ4X3QgcGh5X2FkZHIsIHVpbnQ4X3QgcmVnLAorCQkJICAgIHVpbnQxNl90IGRh dGEpCit7CisJc3RydWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKiloX2R0 c2VjOworCXN0cnVjdCBkdHNlY19taWlfcmVnIF9faW9tZW0gKm1paXJlZ3M7CisJdWludDE2X3Qg ZHRzZWNfZnJlcTsKKwlpbnQgZXJyOworCisJZHRzZWNfZnJlcSA9ICh1aW50MTZfdCkocF9kdHNl Yy0+Y2xrX2ZyZXEgPj4gMSk7CisJbWlpcmVncyA9IHBfZHRzZWMtPnBfbWlpX21lbV9tYXA7CisK KwllcnIgPQorCSAgICAoaW50KWZtYW5fZHRzZWNfbWlpX3dyaXRlX3JlZyhtaWlyZWdzLCBwaHlf YWRkciwgcmVnLCBkYXRhLAorCQkJCQkgICAgICAgZHRzZWNfZnJlcSk7CisKKwlyZXR1cm4gZXJy OworfQorCitpbnQgZHRzZWNfbWlpX3JlYWRfcGh5X3JlZyh2b2lkICpoX2R0c2VjLCB1aW50OF90 IHBoeV9hZGRyLCB1aW50OF90IHJlZywKKwkJCSAgIHVpbnQxNl90ICpwX2RhdGEpCit7CisJc3Ry dWN0IGR0c2VjX3QgKnBfZHRzZWMgPSAoc3RydWN0IGR0c2VjX3QgKiloX2R0c2VjOworCXN0cnVj dCBkdHNlY19taWlfcmVnIF9faW9tZW0gKm1paXJlZ3M7CisJdWludDE2X3QgZHRzZWNfZnJlcTsK KwlpbnQgZXJyOworCisJZHRzZWNfZnJlcSA9ICh1aW50MTZfdCkocF9kdHNlYy0+Y2xrX2ZyZXEg Pj4gMSk7CisJbWlpcmVncyA9IHBfZHRzZWMtPnBfbWlpX21lbV9tYXA7CisKKwllcnIgPQorCSAg ICAoaW50KWZtYW5fZHRzZWNfbWlpX3JlYWRfcmVnKG1paXJlZ3MsIHBoeV9hZGRyLCByZWcsIHBf ZGF0YSwKKwkJCQkJICAgICAgZHRzZWNfZnJlcSk7CisKKwlpZiAoKnBfZGF0YSA9PSAweGZmZmYp IHsKKwkJcHJfd2FybigiUmVhZCB3cm9uZyBkYXRhKDB4ZmZmZik6cGh5X2FkZHIgMHgleCxyZWcg MHgleCIsCisJCQlwaHlfYWRkciwgcmVnKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fZHRzZWNfbWlpX2FjYy5oIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX2R0c2VjX21paV9hY2MuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTk5NjQyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX2R0c2VjX21p aV9hY2MuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxNSBGcmVl c2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l aXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICogICAg ICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRFUk5B VElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWljb25k dWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfX0RUU0VD X01JSV9BQ0NfSAorI2RlZmluZSBfX0RUU0VDX01JSV9BQ0NfSAorCisjaW5jbHVkZSAic2Vydmlj ZS5oIgorCitpbnQgZHRzZWNfbWlpX3dyaXRlX3BoeV9yZWcodm9pZCAqaF9kdHNlYywgdWludDhf dCBwaHlfYWRkciwgdWludDhfdCByZWcsCisJCQkgICAgdWludDE2X3QgZGF0YSk7CitpbnQgZHRz ZWNfbWlpX3JlYWRfcGh5X3JlZyh2b2lkICpoX2R0c2VjLCB1aW50OF90IHBoeV9hZGRyLCB1aW50 OF90IHJlZywKKwkJCSAgIHVpbnQxNl90ICpwX2RhdGEpOworCisjZW5kaWYgLyogX19EVFNFQ19N SUlfQUNDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9m bWFuL21hYy9mbV9tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21h Yy9mbV9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2MxNjBhCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFj L2ZtX21hYy5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxNSBG cmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq IE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICog ICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRF Uk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWlj b25kdWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogRk0gTUFDIC4u LiAqLworI2lmbmRlZiBfX0ZNX01BQ19ICisjZGVmaW5lIF9fRk1fTUFDX0gKKworI2luY2x1ZGUg ImVuZXRfZXh0LmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgImZtX2NvbW1vbi5o IgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgZm1fbWFjX2RldjsKKworLyog ZGVmYXVsdHMgKi8KKyNkZWZpbmUgREVGQVVMVF9SRVNFVF9PTl9JTklUICAgICAgICAgICAgICAg ICBmYWxzZQorCisvKiBQRkMgZGVmaW5lcyAqLworI2RlZmluZSBGU0xfRk1fUEFVU0VfVElNRV9F TkFCTEUJMHhmMDAwCisjZGVmaW5lIEZTTF9GTV9QQVVTRV9USU1FX0RJU0FCTEUJMAorI2RlZmlu ZSBGU0xfRk1fUEFVU0VfVEhSRVNIX0RFRkFVTFQJMAorCisjZGVmaW5lIEZNX01BQ19OT19QRkMg ICAweGZmCisKKy8qIEhBU0ggZGVmaW5lcyAqLworI2RlZmluZSBFVEhfSEFTSF9FTlRSWV9PQkoo cHRyKSBsaXN0X29iamVjdChwdHIsIHN0cnVjdCBldGhfaGFzaF9lbnRyeV90LCBub2RlKQorCisv KiBGTSBNQUMgRXhjZXB0aW9ucyAqLworZW51bSBmbV9tYWNfZXhjZXB0aW9ucyB7CisJRk1fTUFD X0VYXzEwR19NRElPX1NDQU5fRVZFTlQgPSAwCisJLyogMTBHRUMgTURJTyBzY2FuIGV2ZW50IGlu dGVycnVwdCAqLworCSwgRk1fTUFDX0VYXzEwR19NRElPX0NNRF9DTVBMCisJLyogMTBHRUMgTURJ TyBjb21tYW5kIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJLCBGTV9NQUNfRVhfMTBHX1JFTV9G QVVMVAorCS8qIDEwR0VDLCBtRU1BQyBSZW1vdGUgZmF1bHQgaW50ZXJydXB0ICovCisJLCBGTV9N QUNfRVhfMTBHX0xPQ19GQVVMVAorCS8qIDEwR0VDLCBtRU1BQyBMb2NhbCBmYXVsdCBpbnRlcnJ1 cHQgKi8KKwksIEZNX01BQ19FWF8xMEdfVFhfRUNDX0VSCisJLyogMTBHRUMsIG1FTUFDIFRyYW5z bWl0IGZyYW1lIEVDQyBlcnJvciBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19FWF8xMEdfVFhfRklG T19VTkZMCisJLyogMTBHRUMsIG1FTUFDIFRyYW5zbWl0IEZJRk8gdW5kZXJmbG93IGludGVycnVw dCAqLworCSwgRk1fTUFDX0VYXzEwR19UWF9GSUZPX09WRkwKKwkvKiAxMEdFQywgbUVNQUMgVHJh bnNtaXQgRklGTyBvdmVyZmxvdyBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19FWF8xMEdfVFhfRVIK KwkvKiAxMEdFQyBUcmFuc21pdCBmcmFtZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19F WF8xMEdfUlhfRklGT19PVkZMCisJLyogMTBHRUMsIG1FTUFDIFJlY2VpdmUgRklGTyBvdmVyZmxv dyBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19FWF8xMEdfUlhfRUNDX0VSCisJLyogMTBHRUMsIG1F TUFDIFJlY2VpdmUgZnJhbWUgRUNDIGVycm9yIGludGVycnVwdCAqLworCSwgRk1fTUFDX0VYXzEw R19SWF9KQUJfRlJNCisJLyogMTBHRUMgUmVjZWl2ZSBqYWJiZXIgZnJhbWUgaW50ZXJydXB0ICov CisJLCBGTV9NQUNfRVhfMTBHX1JYX09WUlNaX0ZSTQorCS8qIDEwR0VDIFJlY2VpdmUgb3ZlcnNp emVkIGZyYW1lIGludGVycnVwdCAqLworCSwgRk1fTUFDX0VYXzEwR19SWF9SVU5UX0ZSTQorCS8q IDEwR0VDIFJlY2VpdmUgcnVudCBmcmFtZSBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19FWF8xMEdf UlhfRlJBR19GUk0KKwkvKiAxMEdFQyBSZWNlaXZlIGZyYWdtZW50IGZyYW1lIGludGVycnVwdCAq LworCSwgRk1fTUFDX0VYXzEwR19SWF9MRU5fRVIKKwkvKiAxMEdFQyBSZWNlaXZlIHBheWxvYWQg bGVuZ3RoIGVycm9yIGludGVycnVwdCAqLworCSwgRk1fTUFDX0VYXzEwR19SWF9DUkNfRVIKKwkv KiAxMEdFQyBSZWNlaXZlIENSQyBlcnJvciBpbnRlcnJ1cHQgKi8KKwksIEZNX01BQ19FWF8xMEdf UlhfQUxJR05fRVIKKwkvKiAxMEdFQyBSZWNlaXZlIGFsaWdubWVudCBlcnJvciBpbnRlcnJ1cHQg Ki8KKwksIEZNX01BQ19FWF8xR19CQUJfUlgKKwkvKiBkVFNFQyBCYWJibGluZyByZWNlaXZlIGVy cm9yICovCisJLCBGTV9NQUNfRVhfMUdfUlhfQ1RMCisJLyogZFRTRUMgUmVjZWl2ZSBjb250cm9s IChwYXVzZSBmcmFtZSkgaW50ZXJydXB0ICovCisJLCBGTV9NQUNfRVhfMUdfR1JBVEVGVUxfVFhf U1RQX0NPTVBMRVQKKwkvKiBkVFNFQyBHcmFjZWZ1bCB0cmFuc21pdCBzdG9wIGNvbXBsZXRlICov CisJLCBGTV9NQUNfRVhfMUdfQkFCX1RYCisJLyogZFRTRUMgQmFiYmxpbmcgdHJhbnNtaXQgZXJy b3IgKi8KKwksIEZNX01BQ19FWF8xR19UWF9DVEwKKwkvKiBkVFNFQyBUcmFuc21pdCBjb250cm9s IChwYXVzZSBmcmFtZSkgaW50ZXJydXB0ICovCisJLCBGTV9NQUNfRVhfMUdfVFhfRVJSCisJLyog ZFRTRUMgVHJhbnNtaXQgZXJyb3IgKi8KKwksIEZNX01BQ19FWF8xR19MQVRFX0NPTAorCS8qIGRU U0VDIExhdGUgY29sbGlzaW9uICovCisJLCBGTV9NQUNfRVhfMUdfQ09MX1JFVF9MTVQKKwkvKiBk VFNFQyBDb2xsaXNpb24gcmV0cnkgbGltaXQgKi8KKwksIEZNX01BQ19FWF8xR19UWF9GSUZPX1VO RFJOCisJLyogZFRTRUMgVHJhbnNtaXQgRklGTyB1bmRlcnJ1biAqLworCSwgRk1fTUFDX0VYXzFH X01BR19QQ0tUCisJLyogZFRTRUMgTWFnaWMgUGFja2V0IGRldGVjdGlvbiAqLworCSwgRk1fTUFD X0VYXzFHX01JSV9NTkdfUkRfQ09NUExFVAorCS8qIGRUU0VDIE1JSSBtYW5hZ2VtZW50IHJlYWQg Y29tcGxldGlvbiAqLworCSwgRk1fTUFDX0VYXzFHX01JSV9NTkdfV1JfQ09NUExFVAorCS8qIGRU U0VDIE1JSSBtYW5hZ2VtZW50IHdyaXRlIGNvbXBsZXRpb24gKi8KKwksIEZNX01BQ19FWF8xR19H UkFURUZVTF9SWF9TVFBfQ09NUExFVAorCS8qIGRUU0VDIEdyYWNlZnVsIHJlY2VpdmUgc3RvcCBj b21wbGV0ZSAqLworCSwgRk1fTUFDX0VYXzFHX0RBVEFfRVJSCisJLyogZFRTRUMgSW50ZXJuYWwg ZGF0YSBlcnJvciBvbiB0cmFuc21pdCAqLworCSwgRk1fTUFDXzFHX1JYX0RBVEFfRVJSCisJLyog ZFRTRUMgSW50ZXJuYWwgZGF0YSBlcnJvciBvbiByZWNlaXZlICovCisJLCBGTV9NQUNfRVhfMUdf MTU4OF9UU19SWF9FUlIKKwkvKiBkVFNFQyBUaW1lLVN0YW1wIFJlY2VpdmUgRXJyb3IgKi8KKwks IEZNX01BQ19FWF8xR19SWF9NSUJfQ05UX09WRkwKKwkvKiBkVFNFQyBNSUIgY291bnRlciBvdmVy ZmxvdyAqLworCSwgRk1fTUFDX0VYX1RTX0ZJRk9fRUNDX0VSUgorCS8qIG1FTUFDIFRpbWUtc3Rh bXAgRklGTyBFQ0MgZXJyb3IgaW50ZXJydXB0OworCSAqIG5vdCBzdXBwb3J0ZWQgb24gVDQyNDAv QjQ4NjAgcmV2MSBjaGlwcworCSAqLworCSwgRk1fTUFDX0VYX01BR0lDX1BBQ0tFVF9JTkRJQ0FU SU9OID0gRk1fTUFDX0VYXzFHX01BR19QQ0tUCisJLyogbUVNQUMgTWFnaWMgUGFja2V0IEluZGlj YXRpb24gSW50ZXJydXB0ICovCit9OworCitzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCB7CisJdWlu dDY0X3QgYWRkcjsJCS8qIEV0aGVybmV0IEFkZHJlc3MgICovCisJc3RydWN0IGxpc3RfaGVhZCBu b2RlOworfTsKKwordHlwZWRlZiB2b2lkIChmbV9tYWNfZXhjZXB0aW9uX2NiKSAodm9pZCAqZGV2 X2lkLAorCQkJCSAgICBlbnVtIGZtX21hY19leGNlcHRpb25zIGV4Y2VwdGlvbnMpOworCisvKiBG TSBNQUMgY29uZmlnIGlucHV0ICovCitzdHJ1Y3QgZm1fbWFjX3BhcmFtc190IHsKKwkvKiBCYXNl IG9mIG1lbW9yeSBtYXBwZWQgRk0gTUFDIHJlZ2lzdGVycyAqLworCXVpbnRwdHJfdCBiYXNlX2Fk ZHI7CisJLyogTUFDIGFkZHJlc3Mgb2YgZGV2aWNlOyBGaXJzdCBvY3RldCBpcyBzZW50IGZpcnN0 ICovCisJZW5ldF9hZGRyX3QgYWRkcjsKKwkvKiBNQUMgSUQ7IG51bWJlcmluZyBvZiBkVFNFQyBh bmQgMUctbUVNQUM6CisJICogMCAtIEZNX01BWF9OVU1fT0ZfMUdfTUFDUzsKKwkgKiBudW1iZXJp bmcgb2YgMTBHLU1BQyAoVEdFQykgYW5kIDEwRy1tRU1BQzoKKwkgKiAwIC0gRk1fTUFYX05VTV9P Rl8xMEdfTUFDUworCSAqLworCXVpbnQ4X3QgbWFjX2lkOworCS8qIEV0aGVybmV0IG9wZXJhdGlv biBtb2RlIChNQUMtUEhZIGludGVyZmFjZSBhbmQgc3BlZWQpOworCSAqIE5vdGUgdGhhdCB0aGUg c3BlZWQgc2hvdWxkIGluZGljYXRlIHRoZSBtYXhpbXVtIHJhdGUgdGhhdAorCSAqIHRoaXMgTUFD IHNob3VsZCBzdXBwb3J0IHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc3BlZWQ7CisJICogaS5lLiB1 c2VyIHNob3VsZCB1c2UgdGhlIEZNX01BQ19BZGp1c3RMaW5rKCkgcm91dGluZSB0bworCSAqIHBy b3ZpZGUgYWNjdXJhdGUgc3BlZWQ7CisJICogSW4gY2FzZSBvZiBtRU1BQyBSR01JSSBtb2RlLCB0 aGUgTUFDIGlzIGNvbmZpZ3VyZWQgdG8gUkdNSUkKKwkgKiBhdXRvbWF0aWMgbW9kZSwgd2hlcmUg YWN0dWFsIHNwZWVkL2R1cGxleCBtb2RlIGluZm9ybWF0aW9uCisJICogaXMgcHJvdmlkZWQgYnkg UEhZIGF1dG9tYXRpY2FsbHkgaW4tYmFuZDsgRk1fTUFDX0FkanVzdExpbmsoKQorCSAqIGZ1bmN0 aW9uIHNob3VsZCBiZSB1c2VkIHRvIHN3aXRjaCB0byBtYW51YWwgUkdNSUkgc3BlZWQvZHVwbGV4 IG1vZGUKKwkgKiBjb25maWd1cmF0aW9uIGlmIFJHTUlJIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW4t YmFuZCBzdGF0dXMgc2lnbmFsaW5nOworCSAqIEluIGFkZGl0aW9uLCBpbiBtRU1BQywgaW4gY2Fz ZSB3aGVyZSB1c2VyIGlzIHVzaW5nIHRoZSBoaWdoZXIgTUFDcworCSAqIChpLmUuIHRoZSBNQUNz IHRoYXQgc2hvdWxkIHN1cHBvcnQgMTBHKSwgdXNlciBzaG91bGQgcGFzcyBoZXJlCisJICogc3Bl ZWQ9MTAwMDAgZXZlbiBpZiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBhbGxvd2luZyB0aGF0IChlLmcu IFNHTUlJKS4KKwkgKi8KKwllbnVtIGVfZW5ldF9tb2RlIGVuZXRfbW9kZTsKKwkvKiBBIGhhbmRs ZSB0byB0aGUgRk0gb2JqZWN0IHRoaXMgcG9ydCByZWxhdGVkIHRvICovCisJdm9pZCAqaF9mbTsK KwkvKiBNRElPIGV4Y2VwdGlvbnMgaW50ZXJydXB0IHNvdXJjZSAtIG5vdCB2YWxpZCBmb3IgYWxs CisJICogTUFDczsgTVVTVCBiZSBzZXQgdG8gJ05PX0lSUScgZm9yIE1BQ3MgdGhhdCBkb24ndCBo YXZlCisJICogbWRpby1pcnEsIG9yIGZvciBwb2xsaW5nCisJICovCisJdm9pZCAqZGV2X2lkOyAv KiBkZXZpY2UgY29va2llIHVzZWQgYnkgdGhlIGV4Y2VwdGlvbiBjYnMgKi8KKwlmbV9tYWNfZXhj ZXB0aW9uX2NiICpmX2V2ZW50OwkgICAgLyogTURJTyBFdmVudHMgQ2FsbGJhY2sgUm91dGluZSAq LworCWZtX21hY19leGNlcHRpb25fY2IgKmZfZXhjZXB0aW9uOyAgLyogRXhjZXB0aW9uIENhbGxi YWNrIFJvdXRpbmUgKi8KK307CisKK3N0cnVjdCBldGhfaGFzaF90IHsKKwl1aW50MTZfdCBzaXpl OworCXN0cnVjdCBsaXN0X2hlYWQgKnBfbHN0czsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGV0aF9oYXNoX2VudHJ5X3QKKypkZXF1ZXVlX2FkZHJfZnJvbV9oYXNoX2VudHJ5KHN0cnVjdCBs aXN0X2hlYWQgKnBfYWRkcl9sc3QpCit7CisJc3RydWN0IGV0aF9oYXNoX2VudHJ5X3QgKnBfaGFz aF9lbnRyeSA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkocF9hZGRyX2xzdCkpIHsKKwkJcF9o YXNoX2VudHJ5ID0gRVRIX0hBU0hfRU5UUllfT0JKKHBfYWRkcl9sc3QtPm5leHQpOworCQlsaXN0 X2RlbF9pbml0KCZwX2hhc2hfZW50cnktPm5vZGUpOworCX0KKwlyZXR1cm4gcF9oYXNoX2VudHJ5 OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9oYXNoX3RhYmxlKHN0cnVjdCBldGhfaGFz aF90ICpwX2hhc2gpCit7CisJc3RydWN0IGV0aF9oYXNoX2VudHJ5X3QgKnBfaGFzaF9lbnRyeTsK KwlpbnQgaSA9IDA7CisKKwlpZiAocF9oYXNoKSB7CisJCWlmIChwX2hhc2gtPnBfbHN0cykgewor CQkJZm9yIChpID0gMDsgaSA8IHBfaGFzaC0+c2l6ZTsgaSsrKSB7CisJCQkJcF9oYXNoX2VudHJ5 ID0KKwkJCQkgICAgZGVxdWV1ZV9hZGRyX2Zyb21faGFzaF9lbnRyeSgmcF9oYXNoLT4KKwkJCQkJ CQkgICAgIHBfbHN0c1tpXSk7CisJCQkJd2hpbGUgKHBfaGFzaF9lbnRyeSkgeworCQkJCQlrZnJl ZShwX2hhc2hfZW50cnkpOworCQkJCQlwX2hhc2hfZW50cnkgPQorCQkJCQkgICAgZGVxdWV1ZV9h ZGRyX2Zyb21faGFzaF9lbnRyeQorCQkJCQkgICAgKCZwX2hhc2gtPnBfbHN0c1tpXSk7CisJCQkJ fQorCQkJfQorCisJCQlrZnJlZShwX2hhc2gtPnBfbHN0cyk7CisJCX0KKworCQlrZnJlZShwX2hh c2gpOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoX2hhc2hfdCAqYWxsb2NfaGFz aF90YWJsZSh1aW50MTZfdCBzaXplKQoreworCXVpbnQzMl90IGk7CisJc3RydWN0IGV0aF9oYXNo X3QgKnBfaGFzaDsKKworCS8qIEFsbG9jYXRlIGFkZHJlc3MgaGFzaCB0YWJsZSAqLworCXBfaGFz aCA9IGttYWxsb2NfYXJyYXkoc2l6ZSwgc2l6ZW9mKHN0cnVjdCBldGhfaGFzaF90ICopLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXBfaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwX2hhc2gtPnNpemUg PSBzaXplOworCisJcF9oYXNoLT5wX2xzdHMgPSBrbWFsbG9jX2FycmF5KHBfaGFzaC0+c2l6ZSwg c2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAo IXBfaGFzaC0+cF9sc3RzKSB7CisJCWtmcmVlKHBfaGFzaCk7CisJCXJldHVybiBOVUxMOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBwX2hhc2gtPnNpemU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQo JnBfaGFzaC0+cF9sc3RzW2ldKTsKKworCXJldHVybiBwX2hhc2g7Cit9CisKKyNlbmRpZiAvKiBf X0ZNX01BQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUv Zm1hbi9tYWMvZm1fbWVtYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFu L21hYy9mbV9tZW1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzcw ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1h bi9tYWMvZm1fbWVtYWMuYwpAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4 LTIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0 aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgor ICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxl IFNlbWljb25kdWN0b3IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEZyZWVzY2Fs ZSBTZW1pY29uZHVjdG9yIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIEZN IG1FTUFDIGRyaXZlciAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAi IGZtdAorCisjaW5jbHVkZSAic2VydmljZS5oIgorCisjaW5jbHVkZSAiZm1fY29tbW9uLmgiCisj aW5jbHVkZSAiZm1fbWVtYWMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKworLyogSW50ZXJuYWwgcm91dGluZSAqLworc3RhdGljIHVpbnQz Ml90IGdldF9tYWNfYWRkcl9oYXNoX2NvZGUodWludDY0X3QgZXRoX2FkZHIpCit7CisJdWludDY0 X3QgbWFzazEsIG1hc2syOworCXVpbnQzMl90IHhvcl92YWwgPSAwOworCXVpbnQ4X3QgaSwgajsK KworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJbWFzazEgPSBldGhfYWRkciAmICh1aW50 NjRfdCkweDAxOworCQlldGhfYWRkciA+Pj0gMTsKKworCQlmb3IgKGogPSAwOyBqIDwgNzsgaisr KSB7CisJCQltYXNrMiA9IGV0aF9hZGRyICYgKHVpbnQ2NF90KTB4MDE7CisJCQltYXNrMSBePSBt YXNrMjsKKwkJCWV0aF9hZGRyID4+PSAxOworCQl9CisKKwkJeG9yX3ZhbCB8PSAobWFzazEgPDwg KDUgLSBpKSk7CisJfQorCisJcmV0dXJuIHhvcl92YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVw X3NnbWlpX2ludGVybmFsX3BoeShzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYywgdWludDhfdCBwaHlf YWRkcikKK3sKKwl1aW50MTZfdCB0bXBfcmVnMTY7CisJZW51bSBlX2VuZXRfbW9kZSBlbmV0X21v ZGU7CisKKwkvKiBJbiBjYXNlIHRoZSBoaWdoZXIgTUFDcyBhcmUgdXNlZCAoaS5lLiB0aGUgTUFD cyB0aGF0IHNob3VsZAorCSAqIHN1cHBvcnQgMTBHKSwgc3BlZWQ9MTAwMDAgaXMgcHJvdmlkZWQg Zm9yIFNHTUlJIHBvcnRzLgorCSAqIFRlbXBvcmFyeSBtb2RpZnkgZW5ldCBtb2RlIHRvIDFHIG9u ZSwgc28gTUlJIGZ1bmN0aW9ucyBjYW4KKwkgKiB3b3JrIGNvcnJlY3RseS4KKwkgKi8KKwllbmV0 X21vZGUgPSBwX21lbWFjLT5lbmV0X21vZGU7CisJcF9tZW1hYy0+ZW5ldF9tb2RlID0KKwkgICAg TUFLRV9FTkVUX01PREUoRU5FVF9JTlRFUkZBQ0VfRlJPTV9NT0RFKHBfbWVtYWMtPmVuZXRfbW9k ZSksCisJCQkgICBFTkVUX1NQRUVEXzEwMDApOworCisJLyogU0dNSUkgbW9kZSArIEFOIGVuYWJs ZSAqLworCXRtcF9yZWcxNiA9IFBIWV9TR01JSV9JRl9NT0RFX0FOIHwgUEhZX1NHTUlJX0lGX01P REVfU0dNSUk7CisJbWVtYWNfbWlpX3dyaXRlX3BoeV9yZWcocF9tZW1hYywgcGh5X2FkZHIsIDB4 MTQsIHRtcF9yZWcxNik7CisKKwkvKiBEZXZpY2UgYWJpbGl0eSBhY2NvcmRpbmcgdG8gU0dNSUkg c3BlY2lmaWNhdGlvbiAqLworCXRtcF9yZWcxNiA9IFBIWV9TR01JSV9ERVZfQUJJTElUWV9TR01J STsKKwltZW1hY19taWlfd3JpdGVfcGh5X3JlZyhwX21lbWFjLCBwaHlfYWRkciwgMHg0LCB0bXBf cmVnMTYpOworCisJLyogQWRqdXN0IGxpbmsgdGltZXIgZm9yIFNHTUlJICAtCisJICogQWNjb3Jk aW5nIHRvIENpc2NvIFNHTUlJIHNwZWNpZmljYXRpb24gdGhlIHRpbWVyIHNob3VsZCBiZSAxLjYg bXMuCisJICogVGhlIGxpbmtfdGltZXIgcmVnaXN0ZXIgaXMgY29uZmlndXJlZCBpbiB1bml0cyBv ZiB0aGUgY2xvY2suCisJICogLSBXaGVuIHJ1bm5pbmcgYXMgMUcgU0dNSUksIFNlcmRlcyBjbG9j ayBpcyAxMjUgTUh6LCBzbworCSAqIHVuaXQgPSAxIC8gKDEyNSoxMF42IEh6KSA9IDggbnMuCisJ ICogMS42IG1zIGluIHVuaXRzIG9mIDggbnMgPSAxLjZtcyAvIDhucyA9IDIqMTBeNSA9IDB4MzBk NDAKKwkgKiAtIFdoZW4gcnVubmluZyBhcyAyLjVHIFNHTUlJLCBTZXJkZXMgY2xvY2sgaXMgMzEy LjUgTUh6LCBzbworCSAqIHVuaXQgPSAxIC8gKDMxMi41KjEwXjYgSHopID0gMy4yIG5zLgorCSAq IDEuNiBtcyBpbiB1bml0cyBvZiAzLjIgbnMgPSAxLjZtcyAvIDMuMm5zID0gNSoxMF41ID0gMHg3 YTEyMC4KKwkgKiBTaW5jZSBsaW5rX3RpbWVyIHZhbHVlIG9mIDFHIFNHTUlJIHdpbGwgYmUgdG9v IHNob3J0IGZvciAyLjUgU0dNSUksCisJICogd2UgYWx3YXlzIHNldCB1cCBoZXJlIGEgdmFsdWUg b2YgMi41IFNHTUlJLgorCSAqLworCW1lbWFjX21paV93cml0ZV9waHlfcmVnKHBfbWVtYWMsIHBo eV9hZGRyLCAweDEzLCAweDAwMDcpOworCW1lbWFjX21paV93cml0ZV9waHlfcmVnKHBfbWVtYWMs IHBoeV9hZGRyLCAweDEyLCAweGExMjApOworCisJLyogUmVzdGFydCBBTiAqLworCXRtcF9yZWcx NiA9IFBIWV9TR01JSV9DUl9ERUZfVkFMIHwgUEhZX1NHTUlJX0NSX1JFU0VUX0FOOworCW1lbWFj X21paV93cml0ZV9waHlfcmVnKHBfbWVtYWMsIHBoeV9hZGRyLCAweDAsIHRtcF9yZWcxNik7CisK KwkvKiBSZXN0b3JlIG9yaWdpbmFsIGVuZXQgbW9kZSAqLworCXBfbWVtYWMtPmVuZXRfbW9kZSA9 IGVuZXRfbW9kZTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2dtaWlfaW50ZXJuYWxfcGh5X2Jh c2VfeChzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYywKKwkJCQkJICAgIHVpbnQ4X3QgcGh5X2FkZHIp Cit7CisJdWludDE2X3QgdG1wX3JlZzE2OworCWVudW0gZV9lbmV0X21vZGUgZW5ldF9tb2RlOwor CisJLyogSW4gY2FzZSB0aGUgaGlnaGVyIE1BQ3MgYXJlIHVzZWQgKGkuZS4gdGhlIE1BQ3MgdGhh dAorCSAqIHNob3VsZCBzdXBwb3J0IDEwRyksIHNwZWVkPTEwMDAwIGlzIHByb3ZpZGVkIGZvciBT R01JSSBwb3J0cy4KKwkgKiBUZW1wb3JhcnkgbW9kaWZ5IGVuZXQgbW9kZSB0byAxRyBvbmUsIHNv IE1JSSBmdW5jdGlvbnMgY2FuCisJICogd29yayBjb3JyZWN0bHkuCisJICovCisJZW5ldF9tb2Rl ID0gcF9tZW1hYy0+ZW5ldF9tb2RlOworCXBfbWVtYWMtPmVuZXRfbW9kZSA9CisJICAgIE1BS0Vf RU5FVF9NT0RFKEVORVRfSU5URVJGQUNFX0ZST01fTU9ERShwX21lbWFjLT5lbmV0X21vZGUpLAor CQkJICAgRU5FVF9TUEVFRF8xMDAwKTsKKworCS8qIDEwMDBCYXNlWCBtb2RlICovCisJdG1wX3Jl ZzE2ID0gUEhZX1NHTUlJX0lGX01PREVfMTAwMFg7CisJbWVtYWNfbWlpX3dyaXRlX3BoeV9yZWco cF9tZW1hYywgcGh5X2FkZHIsIDB4MTQsIHRtcF9yZWcxNik7CisKKwkvKiBBTiBEZXZpY2UgY2Fw YWJpbGl0eSAgKi8KKwl0bXBfcmVnMTYgPSBQSFlfU0dNSUlfREVWX0FCSUxJVFlfMTAwMFg7CisJ bWVtYWNfbWlpX3dyaXRlX3BoeV9yZWcocF9tZW1hYywgcGh5X2FkZHIsIDB4NCwgdG1wX3JlZzE2 KTsKKworCS8qIEFkanVzdCBsaW5rIHRpbWVyIGZvciBTR01JSSAgLQorCSAqIEZvciBTZXJkZXMg MTAwMEJhc2VYIGF1dG8tbmVnb3RpYXRpb24gdGhlIHRpbWVyIHNob3VsZCBiZSAxMCBtcy4KKwkg KiBUaGUgbGlua190aW1lciByZWdpc3RlciBpcyBjb25maWd1cmVkIGluIHVuaXRzIG9mIHRoZSBj bG9jay4KKwkgKiAtIFdoZW4gcnVubmluZyBhcyAxRyBTR01JSSwgU2VyZGVzIGNsb2NrIGlzIDEy NSBNSHosIHNvCisJICogdW5pdCA9IDEgLyAoMTI1KjEwXjYgSHopID0gOCBucy4KKwkgKiAxMCBt cyBpbiB1bml0cyBvZiA4IG5zID0gMTBtcyAvIDhucyA9IDEyNTAwMDAgPSAweDEzMTJkMAorCSAq IC0gV2hlbiBydW5uaW5nIGFzIDIuNUcgU0dNSUksIFNlcmRlcyBjbG9jayBpcyAzMTIuNSBNSHos IHNvCisJICogdW5pdCA9IDEgLyAoMzEyLjUqMTBeNiBIeikgPSAzLjIgbnMuCisJICogMTAgbXMg aW4gdW5pdHMgb2YgMy4yIG5zID0gMTBtcyAvIDMuMm5zID0gMzEyNTAwMCA9IDB4MmZhZjA4Lgor CSAqIFNpbmNlIGxpbmtfdGltZXIgdmFsdWUgb2YgMUcgU0dNSUkgd2lsbCBiZSB0b28gc2hvcnQg Zm9yIDIuNSBTR01JSSwKKwkgKiB3ZSBhbHdheXMgc2V0IHVwIGhlcmUgYSB2YWx1ZSBvZiAyLjUg U0dNSUkuCisJICovCisJbWVtYWNfbWlpX3dyaXRlX3BoeV9yZWcocF9tZW1hYywgcGh5X2FkZHIs IDB4MTMsIDB4MDAyZik7CisJbWVtYWNfbWlpX3dyaXRlX3BoeV9yZWcocF9tZW1hYywgcGh5X2Fk ZHIsIDB4MTIsIDB4YWYwOCk7CisKKwkvKiBSZXN0YXJ0IEFOICovCisJdG1wX3JlZzE2ID0gUEhZ X1NHTUlJX0NSX0RFRl9WQUwgfCBQSFlfU0dNSUlfQ1JfUkVTRVRfQU47CisJbWVtYWNfbWlpX3dy aXRlX3BoeV9yZWcocF9tZW1hYywgcGh5X2FkZHIsIDB4MCwgdG1wX3JlZzE2KTsKKworCS8qIFJl c3RvcmUgb3JpZ2luYWwgZW5ldCBtb2RlICovCisJcF9tZW1hYy0+ZW5ldF9tb2RlID0gZW5ldF9t b2RlOworfQorCitzdGF0aWMgaW50IGNoZWNrX2luaXRfcGFyYW1ldGVycyhzdHJ1Y3QgbWVtYWNf dCAqcF9tZW1hYykKK3sKKwlpZiAocF9tZW1hYy0+YWRkciA9PSAwKSB7CisJCXByX2VycigiRXRo ZXJuZXQgTUFDIG11c3QgaGF2ZSBhIHZhbGlkIE1BQyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1F RE9NOworCX0KKwlpZiAoIXBfbWVtYWMtPmZfZXhjZXB0aW9uKSB7CisJCXByX2VycigiVW5pbml0 aWFsaXplZCBmX2V4Y2VwdGlvblxuIik7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKCFwX21l bWFjLT5mX2V2ZW50KSB7CisJCXByX3dhcm4oIlVuaW5pdGlhbGl6ZSBmX2V2ZW50XG4iKTsKKwkJ cmV0dXJuIC1FRE9NOworCX0KKyNpZmRlZiBGTV9MRU5fQ0hFQ0tfRVJSQVRBX0ZNQU5fU1cwMDIK KwlpZiAoIXBfbWVtYWMtPnBfbWVtYWNfZHJ2X3BhcmFtLT5ub19sZW5ndGhfY2hlY2tfZW5hYmxl KSB7CisJCXByX2VycigiTGVuZ3RoQ2hlY2shXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor I2VuZGlmIC8qIEZNX0xFTl9DSEVDS19FUlJBVEFfRk1BTl9TVzAwMiAqLworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2V4Y2VwdGlvbl9mbGFnKGVudW0gZm1fbWFjX2V4Y2VwdGlv bnMgZXhjZXB0aW9uKQoreworCXVpbnQzMl90IGJpdF9tYXNrOworCisJc3dpdGNoIChleGNlcHRp b24pIHsKKwljYXNlIEZNX01BQ19FWF8xMEdfVFhfRUNDX0VSOgorCQliaXRfbWFzayA9IE1FTUFD X0lNQVNLX1RFQ0NfRVI7CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzEwR19SWF9FQ0NfRVI6 CisJCWJpdF9tYXNrID0gTUVNQUNfSU1BU0tfUkVDQ19FUjsKKwkJYnJlYWs7CisJY2FzZSBGTV9N QUNfRVhfVFNfRklGT19FQ0NfRVJSOgorCQliaXRfbWFzayA9IE1FTUFDX0lNQVNLX1RTRUNDX0VS OworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF9NQUdJQ19QQUNLRVRfSU5ESUNBVElPTjoKKwkJ Yml0X21hc2sgPSBNRU1BQ19JTUFTS19NR0k7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJpdF9t YXNrID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGJpdF9tYXNrOworfQorCitzdGF0aWMg dm9pZCBtZW1hY19lcnJfZXhjZXB0aW9uKHZvaWQgKmhfbWVtYWMpCit7CisJc3RydWN0IG1lbWFj X3QgKnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKiloX21lbWFjOworCXVpbnQzMl90IGV2ZW50 LCBpbWFzazsKKworCWV2ZW50ID0gZm1hbl9tZW1hY19nZXRfZXZlbnQocF9tZW1hYy0+cF9tZW1f bWFwLCAweGZmZmZmZmZmKTsKKwlpbWFzayA9IGZtYW5fbWVtYWNfZ2V0X2ludGVycnVwdF9tYXNr KHBfbWVtYWMtPnBfbWVtX21hcCk7CisKKwkvKiBJbWFzayBpbmNsdWRlIGJvdGggZXJyb3IgYW5k IG5vdGlmaWNhdGlvbi9ldmVudCBiaXRzLgorCSAqIExlYXZpbmcgb25seSBlcnJvciBiaXRzIGVu YWJsZWQgYnkgaW1hc2suCisJICogVGhlIGltYXNrIGVycm9yIGJpdHMgYXJlIHNoaWZ0ZWQgYnkg MTYgYml0cyBvZmZzZXQgZnJvbQorCSAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgbG9jYXRpb24gaW4g dGhlIGlldmVudCAtIGhlbmNlIHRoZSA+PiAxNgorCSAqLworCWV2ZW50ICY9ICgoaW1hc2sgJiBN RU1BQ19BTExfRVJSU19JTUFTSykgPj4gMTYpOworCisJZm1hbl9tZW1hY19hY2tfZXZlbnQocF9t ZW1hYy0+cF9tZW1fbWFwLCBldmVudCk7CisKKwlpZiAoZXZlbnQgJiBNRU1BQ19JRVZOVF9UU19F Q0NfRVIpCisJCXBfbWVtYWMtPmZfZXhjZXB0aW9uKHBfbWVtYWMtPmRldl9pZCwKKwkJCQkgICAg IEZNX01BQ19FWF9UU19GSUZPX0VDQ19FUlIpOworCWlmIChldmVudCAmIE1FTUFDX0lFVk5UX1RY X0VDQ19FUikKKwkJcF9tZW1hYy0+Zl9leGNlcHRpb24ocF9tZW1hYy0+ZGV2X2lkLAorCQkJCSAg ICAgRk1fTUFDX0VYXzEwR19UWF9FQ0NfRVIpOworCWlmIChldmVudCAmIE1FTUFDX0lFVk5UX1JY X0VDQ19FUikKKwkJcF9tZW1hYy0+Zl9leGNlcHRpb24ocF9tZW1hYy0+ZGV2X2lkLAorCQkJCSAg ICAgRk1fTUFDX0VYXzEwR19SWF9FQ0NfRVIpOworfQorCitzdGF0aWMgdm9pZCBtZW1hY19leGNl cHRpb24odm9pZCAqaF9tZW1hYykKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChzdHJ1 Y3QgbWVtYWNfdCAqKWhfbWVtYWM7CisJdWludDMyX3QgZXZlbnQsIGltYXNrOworCisJZXZlbnQg PSBmbWFuX21lbWFjX2dldF9ldmVudChwX21lbWFjLT5wX21lbV9tYXAsIDB4ZmZmZmZmZmYpOwor CWltYXNrID0gZm1hbl9tZW1hY19nZXRfaW50ZXJydXB0X21hc2socF9tZW1hYy0+cF9tZW1fbWFw KTsKKworCS8qIEltYXNrIGluY2x1ZGUgYm90aCBlcnJvciBhbmQgbm90aWZpY2F0aW9uL2V2ZW50 IGJpdHMuCisJICogTGVhdmluZyBvbmx5IGVycm9yIGJpdHMgZW5hYmxlZCBieSBpbWFzay4KKwkg KiBUaGUgaW1hc2sgZXJyb3IgYml0cyBhcmUgc2hpZnRlZCBieSAxNiBiaXRzIG9mZnNldCBmcm9t CisJICogdGhlaXIgY29ycmVzcG9uZGluZyBsb2NhdGlvbiBpbiB0aGUgaWV2ZW50IC0gaGVuY2Ug dGhlID4+IDE2CisJICovCisJZXZlbnQgJj0gKChpbWFzayAmIE1FTUFDX0FMTF9FUlJTX0lNQVNL KSA+PiAxNik7CisKKwlmbWFuX21lbWFjX2Fja19ldmVudChwX21lbWFjLT5wX21lbV9tYXAsIGV2 ZW50KTsKKworCWlmIChldmVudCAmIE1FTUFDX0lFVk5UX01HSSkKKwkJcF9tZW1hYy0+Zl9leGNl cHRpb24ocF9tZW1hYy0+ZGV2X2lkLAorCQkJCSAgICAgRk1fTUFDX0VYX01BR0lDX1BBQ0tFVF9J TkRJQ0FUSU9OKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9pbml0X3Jlc291cmNlcyhzdHJ1Y3Qg bWVtYWNfdCAqcF9tZW1hYykKK3sKKwlmbV91bnJlZ2lzdGVyX2ludHIocF9tZW1hYy0+aF9mbSwg Rk1fTU9EX01BQywgcF9tZW1hYy0+bWFjX2lkLAorCQkJICAgRk1fSU5UUl9UWVBFX0VSUik7CisK KwkvKiByZWxlYXNlIHRoZSBkcml2ZXIncyBncm91cCBoYXNoIHRhYmxlICovCisJZnJlZV9oYXNo X3RhYmxlKHBfbWVtYWMtPnBfbXVsdGljYXN0X2FkZHJfaGFzaCk7CisJcF9tZW1hYy0+cF9tdWx0 aWNhc3RfYWRkcl9oYXNoID0gTlVMTDsKKworCS8qIHJlbGVhc2UgdGhlIGRyaXZlcidzIGluZGl2 aWR1YWwgaGFzaCB0YWJsZSAqLworCWZyZWVfaGFzaF90YWJsZShwX21lbWFjLT5wX3VuaWNhc3Rf YWRkcl9oYXNoKTsKKwlwX21lbWFjLT5wX3VuaWNhc3RfYWRkcl9oYXNoID0gTlVMTDsKK30KKwor LyogQ2hlY2tzIGlmIHBfbWVtYWMgZHJpdmVyIHBhcmFtZXRlcnMgd2VyZSBpbml0aWFsaXplZAor ICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MgZWxzZSByZXR1cm5zIGVycm9yIGNvZGUKKyAqLworc3Rh dGljIGludCBpc19pbml0X2RvbmUoc3RydWN0IG1lbWFjX2NmZyAqcF9tZW1hY19kcnZfcGFyYW1l dGVycykKK3sKKwlpZiAoIXBfbWVtYWNfZHJ2X3BhcmFtZXRlcnMpCisJCXJldHVybiAwOworCXJl dHVybiAtRUlOVkFMOworfQorCisvKiBtRU1BQyBBUEkgcm91dGluZSAqLworCitpbnQgbWVtYWNf ZW5hYmxlKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBlbnVtIGNvbW1fbW9kZSBtb2Rl KQoreworCXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0gKHN0cnVjdCBtZW1hY190ICopZm1fbWFj X2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfbWVtYWMtPnBfbWVtYWNf ZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm1hbl9tZW1hY19lbmFi bGUocF9tZW1hYy0+cF9tZW1fbWFwLAorCQkJICAobW9kZSAmIENPTU1fTU9ERV9SWCksCisJCQkg IChtb2RlICYgQ09NTV9NT0RFX1RYKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1lbWFjX2Rp c2FibGUoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGVudW0gY29tbV9tb2RlIG1vZGUp Cit7CisJc3RydWN0IG1lbWFjX3QgKnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKilmbV9tYWNf ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9tZW1hYy0+cF9tZW1hY19k cnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFuX21lbWFjX2Rpc2Fi bGUocF9tZW1hYy0+cF9tZW1fbWFwLAorCQkJICAgKG1vZGUgJiBDT01NX01PREVfUlgpLAorCQkJ ICAgKG1vZGUgJiBDT01NX01PREVfVFgpKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWVtYWNf c2V0X3Byb21pc2N1b3VzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBib29sIG5ld192 YWwpCit7CisJc3RydWN0IG1lbWFjX3QgKnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKilmbV9t YWNfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9tZW1hYy0+cF9tZW1h Y19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFuX21lbWFjX3Nl dF9wcm9taXNjdW91cyhwX21lbWFjLT5wX21lbV9tYXAsIG5ld192YWwpOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBtZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rl diwgZW51bSBldGhlcm5ldF9zcGVlZCBzcGVlZCkKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1h YyA9IChzdHJ1Y3QgbWVtYWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldCwgZnVsbF9kdXBsZXgg PSB0cnVlOworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfbWVtYWMtPnBfbWVtYWNfZHJ2X3BhcmFt KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm1hbl9tZW1hY19hZGp1c3RfbGluayhw X21lbWFjLT5wX21lbV9tYXAsCisJCQkgICAgICAgKGVudW0gZW5ldF9pbnRlcmZhY2UpCisJCQkg ICAgICAgRU5FVF9JTlRFUkZBQ0VfRlJPTV9NT0RFKHBfbWVtYWMtPmVuZXRfbW9kZSksCisJCQkg ICAgICAgKGVudW0gZW5ldF9zcGVlZClzcGVlZCwgZnVsbF9kdXBsZXgpOworCXJldHVybiAwOwor fQorCisvKiBtZW1hYyBjb25maWdzIG1vZGlmaWNhdGlvbiBmdW5jdGlvbiAqLworCitpbnQgbWVt YWNfY2ZnX2xiKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBib29sIG5ld192YWwpCit7 CisJc3RydWN0IG1lbWFjX3QgKnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKilmbV9tYWNfZGV2 OworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9tZW1hYy0+cF9tZW1hY19kcnZf cGFyYW0pOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBfbWVtYWMtPnBfbWVt YWNfZHJ2X3BhcmFtLT5sb29wYmFja19lbmFibGUgPSBuZXdfdmFsOworCisJcmV0dXJuIDA7Cit9 CisKK2ludCBtZW1hY19jZmdfbWF4X2ZyYW1lX2xlbihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFj X2RldiwgdWludDE2X3QgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChz dHJ1Y3QgbWVtYWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRf ZG9uZShwX21lbWFjLT5wX21lbWFjX2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAt RUlOVkFMOworCisJcF9tZW1hYy0+cF9tZW1hY19kcnZfcGFyYW0tPm1heF9mcmFtZV9sZW5ndGgg PSBuZXdfdmFsOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtZW1hY19jZmdfcGFkKHN0cnVjdCBm bV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBib29sIG5ld192YWwpCit7CisJc3RydWN0IG1lbWFjX3Qg KnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKilmbV9tYWNfZGV2OworCWludCByZXQ7CisKKwly ZXQgPSBpc19pbml0X2RvbmUocF9tZW1hYy0+cF9tZW1hY19kcnZfcGFyYW0pOworCWlmICghcmV0 KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBfbWVtYWMtPnBfbWVtYWNfZHJ2X3BhcmFtLT5wYWRf ZW5hYmxlID0gbmV3X3ZhbDsKKworCXJldHVybiAwOworfQorCitpbnQgbWVtYWNfY2ZnX3Jlc2V0 X29uX2luaXQoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGJvb2wgZW5hYmxlKQorewor CXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0gKHN0cnVjdCBtZW1hY190ICopZm1fbWFjX2RldjsK KwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfbWVtYWMtPnBfbWVtYWNfZHJ2X3Bh cmFtKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwX21lbWFjLT5wX21lbWFj X2Rydl9wYXJhbS0+cmVzZXRfb25faW5pdCA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisv KiBtZW1hYyBydW4gdGltZSBhcGkgZnVuY3Rpb25zICovCisKK2ludCBtZW1hY19zZXRfdHhfcGF1 c2VfZnJhbWVzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICAgdWludDhf dCBfX21heWJlX3VudXNlZCBwcmlvcml0eSwKKwkJCSAgICAgIHVpbnQxNl90IHBhdXNlX3RpbWUs CisJCQkgICAgICB1aW50MTZfdCBfX21heWJlX3VudXNlZCB0aHJlc2hfdGltZSkKK3sKKwlzdHJ1 Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChzdHJ1Y3QgbWVtYWNfdCAqKWZtX21hY19kZXY7CisKKwlm bWFuX21lbWFjX3NldF90eF9wYXVzZV9mcmFtZXMocF9tZW1hYy0+cF9tZW1fbWFwLCBGTV9NQUNf Tk9fUEZDLAorCQkJCSAgICAgICBwYXVzZV90aW1lLCAwKTsKKworCXJldHVybiAwOworfQorCitp bnQgbWVtYWNfYWNjZXB0X3J4X3BhdXNlX2ZyYW1lcyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFj X2RldiwgYm9vbCBlbikKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChzdHJ1Y3QgbWVt YWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX21l bWFjLT5wX21lbWFjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZt YW5fbWVtYWNfc2V0X3J4X2lnbm9yZV9wYXVzZV9mcmFtZXMocF9tZW1hYy0+cF9tZW1fbWFwLCAh ZW4pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtZW1hY19tb2RpZnlfbWFjX2FkZHJlc3Moc3Ry dWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsCisJCQkgICAgIGVuZXRfYWRkcl90ICpwX2VuZXRf YWRkcikKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChzdHJ1Y3QgbWVtYWNfdCAqKWZt X21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX21lbWFjLT5wX21l bWFjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZtYW5fbWVtYWNf YWRkX2FkZHJfaW5fcGFkZHIocF9tZW1hYy0+cF9tZW1fbWFwLAorCQkJCSAgICAgKHVpbnQ4X3Qg KikoKnBfZW5ldF9hZGRyKSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1lbWFjX2FkZF9o YXNoX21hY19hZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICAg IGVuZXRfYWRkcl90ICpwX2V0aF9hZGRyKQoreworCXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0g KHN0cnVjdCBtZW1hY190ICopZm1fbWFjX2RldjsKKwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAq cF9oYXNoX2VudHJ5OworCXVpbnQzMl90IGhhc2g7CisJdWludDY0X3QgZXRoX2FkZHI7CisJaW50 IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX21lbWFjLT5wX21lbWFjX2Rydl9wYXJhbSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWV0aF9hZGRyID0gRU5FVF9BRERSX1RPX1VJ TlQ2NCgqcF9ldGhfYWRkcik7CisKKwlpZiAoIShldGhfYWRkciAmIEdST1VQX0FERFJFU1MpKSB7 CisJCS8qIFVuaWNhc3QgYWRkcmVzc2VzIG5vdCBzdXBwb3J0ZWQgaW4gaGFzaCAqLworCQlwcl9l cnIoIlVuaWNhc3QgQWRkcmVzc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwloYXNoID0g Z2V0X21hY19hZGRyX2hhc2hfY29kZShldGhfYWRkcikgJiBIQVNIX0NUUkxfQUREUl9NQVNLOwor CisJLyogQ3JlYXRlIGVsZW1lbnQgdG8gYmUgYWRkZWQgdG8gdGhlIGRyaXZlciBoYXNoIHRhYmxl ICovCisJcF9oYXNoX2VudHJ5ID0ga21hbGxvYyhzaXplb2YoKnBfaGFzaF9lbnRyeSksIEdGUF9L RVJORUwpOworCWlmICghcF9oYXNoX2VudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlwX2hhc2hf ZW50cnktPmFkZHIgPSBldGhfYWRkcjsKKwlJTklUX0xJU1RfSEVBRCgmcF9oYXNoX2VudHJ5LT5u b2RlKTsKKworCWxpc3RfYWRkX3RhaWwoJnBfaGFzaF9lbnRyeS0+bm9kZSwKKwkJICAgICAgJnBf bWVtYWMtPnBfbXVsdGljYXN0X2FkZHJfaGFzaC0+cF9sc3RzW2hhc2hdKTsKKwlmbWFuX21lbWFj X3NldF9oYXNoX3RhYmxlKHBfbWVtYWMtPnBfbWVtX21hcCwKKwkJCQkgIChoYXNoIHwgSEFTSF9D VFJMX01DQVNUX0VOKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1lbWFjX2RlbF9oYXNoX21h Y19hZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICAgIGVuZXRf YWRkcl90ICpwX2V0aF9hZGRyKQoreworCXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0gKHN0cnVj dCBtZW1hY190ICopZm1fbWFjX2RldjsKKwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAqcF9oYXNo X2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwX3BvczsKKwl1aW50MzJfdCBoYXNo OworCXVpbnQ2NF90IGV0aF9hZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUo cF9tZW1hYy0+cF9tZW1hY19kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlldGhfYWRkciA9IEVORVRfQUREUl9UT19VSU5UNjQoKnBfZXRoX2FkZHIpOworCisJaGFzaCA9 IGdldF9tYWNfYWRkcl9oYXNoX2NvZGUoZXRoX2FkZHIpICYgSEFTSF9DVFJMX0FERFJfTUFTSzsK KworCWxpc3RfZm9yX2VhY2gocF9wb3MsICZwX21lbWFjLT5wX211bHRpY2FzdF9hZGRyX2hhc2gt PnBfbHN0c1toYXNoXSkgeworCQlwX2hhc2hfZW50cnkgPSBFVEhfSEFTSF9FTlRSWV9PQkoocF9w b3MpOworCQlpZiAocF9oYXNoX2VudHJ5LT5hZGRyID09IGV0aF9hZGRyKSB7CisJCQlsaXN0X2Rl bF9pbml0KCZwX2hhc2hfZW50cnktPm5vZGUpOworCQkJa2ZyZWUocF9oYXNoX2VudHJ5KTsKKwkJ CWJyZWFrOworCQl9CisJfQorCWlmIChsaXN0X2VtcHR5KCZwX21lbWFjLT5wX211bHRpY2FzdF9h ZGRyX2hhc2gtPnBfbHN0c1toYXNoXSkpCisJCWZtYW5fbWVtYWNfc2V0X2hhc2hfdGFibGUocF9t ZW1hYy0+cF9tZW1fbWFwLAorCQkJCQkgIChoYXNoICYgfkhBU0hfQ1RSTF9NQ0FTVF9FTikpOwor CisJcmV0dXJuIDA7Cit9CisKK2ludCBtZW1hY19zZXRfZXhjZXB0aW9uKHN0cnVjdCBmbV9tYWNf ZGV2ICpmbV9tYWNfZGV2LAorCQkJZW51bSBmbV9tYWNfZXhjZXB0aW9ucyBleGNlcHRpb24sCisJ CQlib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChzdHJ1Y3QgbWVt YWNfdCAqKWZtX21hY19kZXY7CisJdWludDMyX3QgYml0X21hc2sgPSAwOworCWludCByZXQ7CisK KwlyZXQgPSBpc19pbml0X2RvbmUocF9tZW1hYy0+cF9tZW1hY19kcnZfcGFyYW0pOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwliaXRfbWFzayA9IGdldF9leGNlcHRpb25fZmxhZyhleGNl cHRpb24pOworCWlmIChiaXRfbWFzaykgeworCQlpZiAoZW5hYmxlKQorCQkJcF9tZW1hYy0+ZXhj ZXB0aW9ucyB8PSBiaXRfbWFzazsKKwkJZWxzZQorCQkJcF9tZW1hYy0+ZXhjZXB0aW9ucyAmPSB+ Yml0X21hc2s7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJVbmRlZmluZWQgZXhjZXB0aW9uXG4iKTsK KwkJcmV0dXJuIC1FRE9NOworCX0KKwlmbWFuX21lbWFjX3NldF9leGNlcHRpb24ocF9tZW1hYy0+ cF9tZW1fbWFwLCBiaXRfbWFzaywgZW5hYmxlKTsKKworCXJldHVybiAwOworfQorCisvKiBtRU1B QyBJbml0ICYgRnJlZSBBUEkgKi8KK2ludCBtZW1hY19pbml0KHN0cnVjdCBmbV9tYWNfZGV2ICpm bV9tYWNfZGV2KQoreworCXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0gKHN0cnVjdCBtZW1hY190 ICopZm1fbWFjX2RldjsKKwlzdHJ1Y3QgbWVtYWNfY2ZnICpwX21lbWFjX2Rydl9wYXJhbTsKKwll bnVtIGVuZXRfaW50ZXJmYWNlIGVuZXRfaW50ZXJmYWNlOworCWVudW0gZW5ldF9zcGVlZCBlbmV0 X3NwZWVkOworCXVpbnQ4X3QgaSwgcGh5X2FkZHI7CisJZW5ldF9hZGRyX3QgZXRoX2FkZHI7CisJ ZW51bSBmbV9tYWNfdHlwZSBwb3J0X3R5cGU7CisJYm9vbCBzbG93XzEwZ19pZiA9IGZhbHNlOwor CWludCBlcnIsIHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX21lbWFjLT5wX21lbWFjX2Ry dl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gY2hlY2tf aW5pdF9wYXJhbWV0ZXJzKHBfbWVtYWMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlw X21lbWFjX2Rydl9wYXJhbSA9IHBfbWVtYWMtPnBfbWVtYWNfZHJ2X3BhcmFtOworCisJaWYgKHBf bWVtYWMtPmZtX3Jldl9pbmZvLm1ham9yX3JldiA9PSA2ICYmCisJICAgIHBfbWVtYWMtPmZtX3Jl dl9pbmZvLm1pbm9yX3JldiA9PSA0KQorCQlzbG93XzEwZ19pZiA9IHRydWU7CisKKwlwb3J0X3R5 cGUgPQorCSAgICAoKEVORVRfU1BFRURfRlJPTV9NT0RFKHBfbWVtYWMtPmVuZXRfbW9kZSkgPAor CSAgICAgIEVORVRfU1BFRURfMTAwMDApID8gRk1fTUFDXzFHIDogRk1fTUFDXzEwRyk7CisKKwkv KiBGaXJzdCwgcmVzZXQgdGhlIE1BQyBpZiBkZXNpcmVkLiAqLworCWlmIChwX21lbWFjX2Rydl9w YXJhbS0+cmVzZXRfb25faW5pdCkKKwkJZm1hbl9tZW1hY19yZXNldChwX21lbWFjLT5wX21lbV9t YXApOworCisJLyogTUFDIEFkZHJlc3MgKi8KKwlNQUtFX0VORVRfQUREUl9GUk9NX1VJTlQ2NChw X21lbWFjLT5hZGRyLCBldGhfYWRkcik7CisJZm1hbl9tZW1hY19hZGRfYWRkcl9pbl9wYWRkcihw X21lbWFjLT5wX21lbV9tYXAsCisJCQkJICAgICAodWludDhfdCAqKWV0aF9hZGRyLCAwKTsKKwor CWVuZXRfaW50ZXJmYWNlID0KKwkgICAgKGVudW0gZW5ldF9pbnRlcmZhY2UpRU5FVF9JTlRFUkZB Q0VfRlJPTV9NT0RFKHBfbWVtYWMtPmVuZXRfbW9kZSk7CisJZW5ldF9zcGVlZCA9IChlbnVtIGVu ZXRfc3BlZWQpRU5FVF9TUEVFRF9GUk9NX01PREUocF9tZW1hYy0+ZW5ldF9tb2RlKTsKKworCWZt YW5fbWVtYWNfaW5pdChwX21lbWFjLT5wX21lbV9tYXAsCisJCQlwX21lbWFjLT5wX21lbWFjX2Ry dl9wYXJhbSwKKwkJCWVuZXRfaW50ZXJmYWNlLAorCQkJZW5ldF9zcGVlZCwKKwkJCXNsb3dfMTBn X2lmLAorCQkJcF9tZW1hYy0+ZXhjZXB0aW9ucyk7CisKKyNpZmRlZiBGTV9SWF9GSUZPX0NPUlJV UFRfRVJSQVRBXzEwR01BQ19BMDA2MzIwCisJeworCQl1aW50MzJfdCB0bXBfcmVnID0gMDsKKwor CQkvKiBjaGVjayB0aGUgRk1BTiB2ZXJzaW9uIC0gdGhlIGJ1ZyBleGlzdHMgb25seSBpbiByZXYx ICovCisJCWlmICgocF9tZW1hYy0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID09IDYpICYmCisJCSAg ICAoKHBfbWVtYWMtPmZtX3Jldl9pbmZvLm1pbm9yX3JldiA9PSAwKSB8fAorCQkgICAgIChwX21l bWFjLT5mbV9yZXZfaW5mby5taW5vcl9yZXYgPT0gMykpKSB7CisJCQkvKiBNQUMgc3RyaXBzIENS QyBmcm9tIHJlY2VpdmVkIGZyYW1lcyAtIHRoaXMKKwkJCSAqIHdvcmthcm91bmQgc2hvdWxkIGRl Y3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIGJ1ZworCQkJICogYXBwZWFyYW5jZQorCQkJICovCisJ CQl0bXBfcmVnID0gR0VUX1VJTlQzMihwX21lbWFjLT5wX21lbV9tYXAtPgorCQkJCQkgICAgIGNv bW1hbmRfY29uZmlnKTsKKwkJCXRtcF9yZWcgJj0gfkNNRF9DRkdfQ1JDX0ZXRDsKKwkJCVdSSVRF X1VJTlQzMihwX21lbWFjLT5wX21lbV9tYXAtPmNvbW1hbmRfY29uZmlnLAorCQkJCSAgICAgdG1w X3JlZyk7CisJCX0KKwl9CisjZW5kaWYgLyogRk1fUlhfRklGT19DT1JSVVBUX0VSUkFUQV8xMEdN QUNfQTAwNjMyMCAqLworCisJaWYgKEVORVRfSU5URVJGQUNFX0ZST01fTU9ERShwX21lbWFjLT5l bmV0X21vZGUpID09IEVORVRfSUZfU0dNSUkpIHsKKwkJLyogQ29uZmlndXJlIGludGVybmFsIFNH TUlJIFBIWSAqLworCQlpZiAocF9tZW1hYy0+ZW5ldF9tb2RlICYgRU5FVF9JRl9TR01JSV9CQVNF WCkKKwkJCXNldHVwX3NnbWlpX2ludGVybmFsX3BoeV9iYXNlX3gocF9tZW1hYywgUEhZX01ESU9f QUREUik7CisJCWVsc2UKKwkJCXNldHVwX3NnbWlpX2ludGVybmFsX3BoeShwX21lbWFjLCBQSFlf TURJT19BRERSKTsKKwl9IGVsc2UgaWYgKEVORVRfSU5URVJGQUNFX0ZST01fTU9ERShwX21lbWFj LT5lbmV0X21vZGUpID09CisJCSAgIEVORVRfSUZfUVNHTUlJKSB7CisJCS8qIENvbmZpZ3VyZSA0 IGludGVybmFsIFNHTUlJIFBIWXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJ LyogUVNHTUlJIFBIWSBhZGRyZXNzIG9jY3VwaWVzIDMgdXBwZXIgYml0cyBvZiA1LWJpdAorCQkJ ICogcGh5X2FkZHJlc3M7IHRoZSBsb3dlciAyIGJpdHMgYXJlIHVzZWQgdG8gZXh0ZW5kCisJCQkg KiByZWdpc3RlciBhZGRyZXNzIHNwYWNlIGFuZCBhY2Nlc3MgZWFjaCBvbmUgb2YgNAorCQkJICog cG9ydHMgaW5zaWRlIFFTR01JSS4KKwkJCSAqLworCQkJcGh5X2FkZHIgPSAodWludDhfdCkoKFBI WV9NRElPX0FERFIgPDwgMikgfCBpKTsKKwkJCWlmIChwX21lbWFjLT5lbmV0X21vZGUgJiBFTkVU X0lGX1NHTUlJX0JBU0VYKQorCQkJCXNldHVwX3NnbWlpX2ludGVybmFsX3BoeV9iYXNlX3gocF9t ZW1hYywKKwkJCQkJCQkJcGh5X2FkZHIpOworCQkJZWxzZQorCQkJCXNldHVwX3NnbWlpX2ludGVy bmFsX3BoeShwX21lbWFjLCBwaHlfYWRkcik7CisJCX0KKwl9CisKKwkvKiBNYXggRnJhbWUgTGVu Z3RoICovCisJZXJyID0gZm1fc2V0X21hY19tYXhfZnJhbWUocF9tZW1hYy0+aF9mbSwKKwkJCQkg ICBwb3J0X3R5cGUsCisJCQkJICAgcF9tZW1hYy0+bWFjX2lkLAorCQkJCSAgIHBfbWVtYWNfZHJ2 X3BhcmFtLT5tYXhfZnJhbWVfbGVuZ3RoKTsKKwlpZiAoZXJyKSB7CisJCXByX2Vycigic2V0dGlu Z3MgTWFjIG1heCBmcmFtZSBsZW5ndGggaXMgRkFJTEVEXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9 CisKKwlwX21lbWFjLT5wX211bHRpY2FzdF9hZGRyX2hhc2ggPSBhbGxvY19oYXNoX3RhYmxlKEhB U0hfVEFCTEVfU0laRSk7CisJaWYgKCFwX21lbWFjLT5wX211bHRpY2FzdF9hZGRyX2hhc2gpIHsK KwkJZnJlZV9pbml0X3Jlc291cmNlcyhwX21lbWFjKTsKKwkJcHJfZXJyKCJhbGxvY2F0aW9uIGhh c2ggdGFibGUgaXMgRkFJTEVEXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcF9tZW1h Yy0+cF91bmljYXN0X2FkZHJfaGFzaCA9IGFsbG9jX2hhc2hfdGFibGUoSEFTSF9UQUJMRV9TSVpF KTsKKwlpZiAoIXBfbWVtYWMtPnBfdW5pY2FzdF9hZGRyX2hhc2gpIHsKKwkJZnJlZV9pbml0X3Jl c291cmNlcyhwX21lbWFjKTsKKwkJcHJfZXJyKCJhbGxvY2F0aW9uIGhhc2ggdGFibGUgaXMgRkFJ TEVEXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm1fcmVnaXN0ZXJfaW50cihwX21l bWFjLT5oX2ZtLAorCQkJIEZNX01PRF9NQUMsCisJCQkgcF9tZW1hYy0+bWFjX2lkLAorCQkJIEZN X0lOVFJfVFlQRV9FUlIsCisJCQkgbWVtYWNfZXJyX2V4Y2VwdGlvbiwKKwkJCSBwX21lbWFjKTsK KworCWZtX3JlZ2lzdGVyX2ludHIocF9tZW1hYy0+aF9mbSwgRk1fTU9EX01BQywgcF9tZW1hYy0+ bWFjX2lkLAorCQkJIEZNX0lOVFJfVFlQRV9OT1JNQUwsIG1lbWFjX2V4Y2VwdGlvbiwgcF9tZW1h Yyk7CisKKwlrZnJlZShwX21lbWFjX2Rydl9wYXJhbSk7CisJcF9tZW1hYy0+cF9tZW1hY19kcnZf cGFyYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtZW1hY19mcmVlKHN0cnVjdCBm bV9tYWNfZGV2ICpmbV9tYWNfZGV2KQoreworCXN0cnVjdCBtZW1hY190ICpwX21lbWFjID0gKHN0 cnVjdCBtZW1hY190ICopZm1fbWFjX2RldjsKKworCWZyZWVfaW5pdF9yZXNvdXJjZXMocF9tZW1h Yyk7CisKKwlrZnJlZShwX21lbWFjLT5wX21lbWFjX2Rydl9wYXJhbSk7CisJa2ZyZWUocF9tZW1h Yyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogbV9lbWFjIGNvbmZpZyBtYWluIGVudHJ5ICovCisK K3ZvaWQgKm1lbWFjX2NvbmZpZyhzdHJ1Y3QgZm1fbWFjX3BhcmFtc190ICpwX2ZtX21hY19wYXJh bSkKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYzsKKwlzdHJ1Y3QgbWVtYWNfY2ZnICpwX21l bWFjX2Rydl9wYXJhbTsKKwl1aW50cHRyX3QgYmFzZV9hZGRyOworCisJYmFzZV9hZGRyID0gcF9m bV9tYWNfcGFyYW0tPmJhc2VfYWRkcjsKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBtX2Vt YWMgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlwX21lbWFjID0ga3phbGxvYyhzaXplb2YoKnBfbWVtYWMp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfbWVtYWMpCisJCXJldHVybiBOVUxMOworCisJLyogYWxs b2NhdGUgbWVtb3J5IGZvciB0aGUgbV9lbWFjIGRyaXZlciBwYXJhbWV0ZXJzIGRhdGEgc3RydWN0 dXJlICovCisJcF9tZW1hY19kcnZfcGFyYW0gPSBremFsbG9jKHNpemVvZigqcF9tZW1hY19kcnZf cGFyYW0pLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfbWVtYWNfZHJ2X3BhcmFtKSB7 CisJCW1lbWFjX2ZyZWUoKHN0cnVjdCBmbV9tYWNfZGV2ICopcF9tZW1hYyk7CisJCXJldHVybiBO VUxMOworCX0KKworCS8qIFBsYW50IHBhcmFtZXRlciBzdHJ1Y3R1cmUgcG9pbnRlciAqLworCXBf bWVtYWMtPnBfbWVtYWNfZHJ2X3BhcmFtID0gcF9tZW1hY19kcnZfcGFyYW07CisKKwlmbWFuX21l bWFjX2RlZmNvbmZpZyhwX21lbWFjX2Rydl9wYXJhbSk7CisKKwlwX21lbWFjLT5hZGRyID0gRU5F VF9BRERSX1RPX1VJTlQ2NChwX2ZtX21hY19wYXJhbS0+YWRkcik7CisKKwlwX21lbWFjLT5wX21l bV9tYXAgPQorCQkoc3RydWN0IG1lbWFjX3JlZ3MgX19pb21lbSAqKVVJTlRfVE9fUFRSKGJhc2Vf YWRkcik7CisJcF9tZW1hYy0+cF9taWlfbWVtX21hcCA9IChzdHJ1Y3QgbWVtYWNfbWlpX2FjY2Vz c19tZW1fbWFwIF9faW9tZW0gKikKKwkJVUlOVF9UT19QVFIoYmFzZV9hZGRyICsgTUVNQUNfVE9f TUlJX09GRlNFVCk7CisKKwlwX21lbWFjLT5lbmV0X21vZGUgPSBwX2ZtX21hY19wYXJhbS0+ZW5l dF9tb2RlOworCXBfbWVtYWMtPm1hY19pZCA9IHBfZm1fbWFjX3BhcmFtLT5tYWNfaWQ7CisJcF9t ZW1hYy0+ZXhjZXB0aW9ucyA9IE1FTUFDX0RFRkFVTFRfRVhDRVBUSU9OUzsKKwlwX21lbWFjLT5m X2V4Y2VwdGlvbiA9IHBfZm1fbWFjX3BhcmFtLT5mX2V4Y2VwdGlvbjsKKwlwX21lbWFjLT5mX2V2 ZW50ID0gcF9mbV9tYWNfcGFyYW0tPmZfZXZlbnQ7CisJcF9tZW1hYy0+ZGV2X2lkID0gcF9mbV9t YWNfcGFyYW0tPmRldl9pZDsKKwlwX21lbWFjLT5oX2ZtID0gcF9mbV9tYWNfcGFyYW0tPmhfZm07 CisKKwkvKiBTYXZlIEZNYW4gcmV2aXNpb24gKi8KKwlmbV9nZXRfcmV2aXNpb24ocF9tZW1hYy0+ aF9mbSwgJnBfbWVtYWMtPmZtX3Jldl9pbmZvKTsKKworCXJldHVybiBwX21lbWFjOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFj LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVtYWMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE5ODU1Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFjLmgK QEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0 OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0 aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1l cyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFks IHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQg TGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBg QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBC RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGTSBNdWx0aXJhdGUgRXRoZXJu ZXQgTUFDIChtRU1BQykgKi8KKyNpZm5kZWYgX19NRU1BQ19ICisjZGVmaW5lIF9fTUVNQUNfSAor CisjaW5jbHVkZSAic2VydmljZS5oIgorCisjaW5jbHVkZSAiZnNsX2ZtYW5fbWVtYWNfbWlpX2Fj Yy5oIgorI2luY2x1ZGUgImZtX21hYy5oIgorI2luY2x1ZGUgImZzbF9mbWFuX21lbWFjLmgiCisK KyNkZWZpbmUgTUVNQUNfREVGQVVMVF9FWENFUFRJT05TCQkJCQlcCisJKCh1aW50MzJfdCkoTUVN QUNfSU1BU0tfVFNFQ0NfRVIgfCBNRU1BQ19JTUFTS19URUNDX0VSIHwJXAorCQlNRU1BQ19JTUFT S19SRUNDX0VSIHwgTUVNQUNfSU1BU0tfTUdJKSkKKworc3RydWN0IG1lbWFjX3QgeworCS8qIFBv aW50ZXIgdG8gTUFDIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCisJc3RydWN0IG1lbWFjX3Jl Z3MgX19pb21lbSAqcF9tZW1fbWFwOworCS8qIFBvaW50ZXIgdG8gTUlJIG1lbW9yeSBtYXBwZWQg cmVnaXN0ZXJzICovCisJc3RydWN0IG1lbWFjX21paV9hY2Nlc3NfbWVtX21hcCBfX2lvbWVtICpw X21paV9tZW1fbWFwOworCS8qIE1BQyBhZGRyZXNzIG9mIGRldmljZSAqLworCXVpbnQ2NF90IGFk ZHI7CisJLyogRXRoZXJuZXQgcGh5c2ljYWwgaW50ZXJmYWNlICAqLworCWVudW0gZV9lbmV0X21v ZGUgZW5ldF9tb2RlOworCXZvaWQgKmRldl9pZDsgLyogZGV2aWNlIGNvb2tpZSB1c2VkIGJ5IHRo ZSBleGNlcHRpb24gY2JzICovCisJZm1fbWFjX2V4Y2VwdGlvbl9jYiAqZl9leGNlcHRpb247CisJ Zm1fbWFjX2V4Y2VwdGlvbl9jYiAqZl9ldmVudDsKKwkvKiBXaGV0aGVyIGEgcGFydGljdWxhciBp bmRpdmlkdWFsIGFkZHJlc3MKKwkgKiByZWNvZ25pdGlvbiByZWdpc3RlciBpcyBiZWluZyB1c2Vk CisJICovCisJYm9vbCBpbmRfYWRkcl9yZWdfdXNlZFtNRU1BQ19OVU1fT0ZfUEFERFJTXTsKKwkv KiBNQUMgYWRkcmVzcyBmb3IgcGFydGljdWxhciBpbmRpdmlkdWFsIGFkZHJlc3MKKwkgKiByZWNv Z25pdGlvbiByZWdpc3RlcgorCSAqLworCXVpbnQ2NF90IHBhZGRyW01FTUFDX05VTV9PRl9QQURE UlNdOworCS8qIE51bWJlciBvZiBpbmRpdmlkdWFsIGFkZHJlc3NlcyBpbiByZWdpc3RlcnMgZm9y IHRoaXMgc3RhdGlvbi4gKi8KKwl1aW50OF90IG51bV9vZl9pbmRfYWRkcl9pbl9yZWdzOworCS8q IFBvaW50ZXIgdG8gZHJpdmVyJ3MgZ2xvYmFsIGFkZHJlc3MgaGFzaCB0YWJsZSAgKi8KKwlzdHJ1 Y3QgZXRoX2hhc2hfdCAqcF9tdWx0aWNhc3RfYWRkcl9oYXNoOworCS8qIFBvaW50ZXIgdG8gZHJp dmVyJ3MgaW5kaXZpZHVhbCBhZGRyZXNzIGhhc2ggdGFibGUgICovCisJc3RydWN0IGV0aF9oYXNo X3QgKnBfdW5pY2FzdF9hZGRyX2hhc2g7CisJYm9vbCBkZWJ1Z19tb2RlOworCXVpbnQ4X3QgbWFj X2lkOworCXVpbnQzMl90IGV4Y2VwdGlvbnM7CisJc3RydWN0IG1lbWFjX2NmZyAqcF9tZW1hY19k cnZfcGFyYW07CisJdm9pZCAqaF9mbTsKKwlzdHJ1Y3QgZm1fcmV2aXNpb25faW5mb190IGZtX3Jl dl9pbmZvOworfTsKKworLyogSW50ZXJuYWwgUEhZIGFjY2VzcyAqLworI2RlZmluZSBQSFlfTURJ T19BRERSICAgICAgICAgICAgICAgMAorCisvKiBJbnRlcm5hbCBQSFkgUmVnaXN0ZXJzIC0gU0dN SUkgKi8KKyNkZWZpbmUgUEhZX1NHTUlJX0NSX1JFU0VUX0FOICAgICAgICAgICAweDAyMDAKKyNk ZWZpbmUgUEhZX1NHTUlJX0NSX0RFRl9WQUwgICAgICAgICAgICAweDExNDAKKyNkZWZpbmUgUEhZ X1NHTUlJX0RFVl9BQklMSVRZX1NHTUlJICAgICAweDQwMDEKKyNkZWZpbmUgUEhZX1NHTUlJX0RF Vl9BQklMSVRZXzEwMDBYICAgICAweDAxQTAKKyNkZWZpbmUgUEhZX1NHTUlJX0lGX01PREVfQU4g ICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgUEhZX1NHTUlJX0lGX01PREVfU0dNSUkgICAgICAg ICAweDAwMDEKKyNkZWZpbmUgUEhZX1NHTUlJX0lGX01PREVfMTAwMFggICAgICAgICAweDAwMDAK KworLyogT2Zmc2V0IGZyb20gdGhlIE1FTSBtYXAgdG8gdGhlIE1ESU8gbWVtIG1hcCAqLworI2Rl ZmluZSBNRU1BQ19UT19NSUlfT0ZGU0VUICAgICAgICAgMHgwMzAKKworaW50IG1lbWFjX21paV93 cml0ZV9waHlfcmVnKHZvaWQgKmhfbWVtYWMsIHVpbnQ4X3QgcGh5X2FkZHIsIHVpbnQ4X3QgcmVn LAorCQkJICAgIHVpbnQxNl90IGRhdGEpOworaW50IG1lbWFjX21paV9yZWFkX3BoeV9yZWcodm9p ZCAqaF9tZW1hYywgdWludDhfdCBwaHlfYWRkciwgdWludDhfdCByZWcsCisJCQkgICB1aW50MTZf dCAqcF9kYXRhKTsKKwordm9pZCAqbWVtYWNfY29uZmlnKHN0cnVjdCBmbV9tYWNfcGFyYW1zX3Qg KnBfZm1fbWFjX3BhcmFtKTsKK2ludCBtZW1hY19zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGZtX21h Y19kZXYgKmZtX21hY19kZXYsIGJvb2wgbmV3X3ZhbCk7CitpbnQgbWVtYWNfbW9kaWZ5X21hY19h ZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgICBlbmV0X2FkZHJf dCAqcF9lbmV0X2FkZHIpOworaW50IG1lbWFjX2FkanVzdF9saW5rKHN0cnVjdCBmbV9tYWNfZGV2 ICpmbV9tYWNfZGV2LAorCQkgICAgICBlbnVtIGV0aGVybmV0X3NwZWVkIHNwZWVkKTsKK2ludCBt ZW1hY19jZmdfbWF4X2ZyYW1lX2xlbihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgdWlu dDE2X3QgbmV3X3ZhbCk7CitpbnQgbWVtYWNfY2ZnX3BhZChzdHJ1Y3QgZm1fbWFjX2RldiAqZm1f bWFjX2RldiwgYm9vbCBuZXdfdmFsKTsKK2ludCBtZW1hY19jZmdfcmVzZXRfb25faW5pdChzdHJ1 Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgYm9vbCBlbmFibGUpOworaW50IG1lbWFjX2VuYWJs ZShzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgZW51bSBjb21tX21vZGUgbW9kZSk7Citp bnQgbWVtYWNfZGlzYWJsZShzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgZW51bSBjb21t X21vZGUgbW9kZSk7CitpbnQgbWVtYWNfaW5pdChzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rl dik7CitpbnQgbWVtYWNfZnJlZShzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rldik7CitpbnQg bWVtYWNfYWNjZXB0X3J4X3BhdXNlX2ZyYW1lcyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2Rl diwgYm9vbCBlbik7CitpbnQgbWVtYWNfc2V0X3R4X3BhdXNlX2ZyYW1lcyhzdHJ1Y3QgZm1fbWFj X2RldiAqZm1fbWFjX2RldiwgdWludDhfdCBwcmlvcml0eSwKKwkJCSAgICAgIHVpbnQxNl90IHBh dXNlX3RpbWUsIHVpbnQxNl90IHRocmVzaF90aW1lKTsKK2ludCBtZW1hY19zZXRfZXhjZXB0aW9u KHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAorCQkJZW51bSBmbV9tYWNfZXhjZXB0aW9u cyBleGNlcHRpb24sIGJvb2wgZW5hYmxlKTsKK2ludCBtZW1hY19hZGRfaGFzaF9tYWNfYWRkcmVz cyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwKKwkJCSAgICAgICBlbmV0X2FkZHJfdCAq cF9ldGhfYWRkcik7CitpbnQgbWVtYWNfZGVsX2hhc2hfbWFjX2FkZHJlc3Moc3RydWN0IGZtX21h Y19kZXYgKmZtX21hY19kZXYsCisJCQkgICAgICAgZW5ldF9hZGRyX3QgKnBfZXRoX2FkZHIpOwor CisjZW5kaWYgLyogX19NRU1BQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVtYWNfbWlpX2FjYy5jIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFjX21paV9hY2MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDEyMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX21lbWFjX21paV9hY2MuYwpAQCAt MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxNSBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h bWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICogICAgICAgbmFtZXMgb2Yg aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlz IHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vu c2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBgYEFTIElT JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQkUgTElB QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInNlcnZpY2UuaCIKKyNpbmNs dWRlICJmbV9tYWMuaCIKKyNpbmNsdWRlICJmbV9tZW1hYy5oIgorCisjaW5jbHVkZSAiZm1fY29t bW9uLmgiCisjaW5jbHVkZSAiZm1fbWVtYWNfbWlpX2FjYy5oIgorCitpbnQgbWVtYWNfbWlpX3dy aXRlX3BoeV9yZWcodm9pZCAqaF9tZW1hYywKKwkJCSAgICB1aW50OF90IHBoeV9hZGRyLCB1aW50 OF90IHJlZywgdWludDE2X3QgZGF0YSkKK3sKKwlzdHJ1Y3QgbWVtYWNfdCAqcF9tZW1hYyA9IChz dHJ1Y3QgbWVtYWNfdCAqKWhfbWVtYWM7CisKKwlyZXR1cm4gKGludClmbWFuX21lbWFjX21paV93 cml0ZV9waHlfcmVnKHBfbWVtYWMtPnBfbWlpX21lbV9tYXAsCisJCQkJCQkgcGh5X2FkZHIsCisJ CQkJCQkgICAgIHJlZywKKwkJCQkJCSAgICAgZGF0YSwKKwkJCQkJCSAgICAgKGVudW0gZW5ldF9z cGVlZCkKKwkJCQkJCSAgICAgRU5FVF9TUEVFRF9GUk9NX01PREUKKwkJCQkJCSAgICAgKHBfbWVt YWMtPmVuZXRfbW9kZSkpOworfQorCitpbnQgbWVtYWNfbWlpX3JlYWRfcGh5X3JlZyh2b2lkICpo X21lbWFjLAorCQkJICAgdWludDhfdCBwaHlfYWRkciwgdWludDhfdCByZWcsIHVpbnQxNl90ICpw X2RhdGEpCit7CisJc3RydWN0IG1lbWFjX3QgKnBfbWVtYWMgPSAoc3RydWN0IG1lbWFjX3QgKilo X21lbWFjOworCisJcmV0dXJuIGZtYW5fbWVtYWNfbWlpX3JlYWRfcGh5X3JlZyhwX21lbWFjLT5w X21paV9tZW1fbWFwLAorCQkJCQkgICBwaHlfYWRkciwKKwkJCQkJICAgcmVnLAorCQkJCQkgICBw X2RhdGEsCisJCQkJCSAgIChlbnVtIGVuZXRfc3BlZWQpCisJCQkJCSAgIEVORVRfU1BFRURfRlJP TV9NT0RFKHBfbWVtYWMtPgorCQkJCQkJCQllbmV0X21vZGUpKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV9tZW1hY19taWlfYWNjLmgg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVtYWNfbWlpX2Fj Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODU3MmMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1fbWVt YWNfbWlpX2FjYy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1 IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAg ICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisg KiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFM VEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1p Y29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2Vt aWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9f TUVNQUNfTUlJX0FDQ19ICisjZGVmaW5lIF9fTUVNQUNfTUlJX0FDQ19ICisKKyNpbmNsdWRlICJz ZXJ2aWNlLmgiCisKKy8qIE1JSSBNYW5hZ2VtZW50IFJlZ2lzdGVycyAqLworI2RlZmluZSBNRElP X0NGR19DTEtfRElWX01BU0sgICAgICAgMHgwMDgwZmY4MAorI2RlZmluZSBNRElPX0NGR19IT0xE X01BU0sgICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBNRElPX0NGR19FTkM0NSAgICAgICAg ICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNRElPX0NGR19SRUFEX0VSUiAgICAgICAgICAgMHgw MDAwMDAwMgorI2RlZmluZSBNRElPX0NGR19CU1kgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQor CisjZGVmaW5lIE1ESU9fQ1RMX1BIWV9BRERSX1NISUZUICAgICA1CisjZGVmaW5lIE1ESU9fQ1RM X1JFQUQgICAgICAgICAgICAgICAweDAwMDA4MDAwCisKKyNkZWZpbmUgTURJT19EQVRBX0JTWSAg ICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmIC8qIF9fTUVNQUNfTUlJX0FDQ19IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9tYWMvZm1f dGdlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX3RnZWMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmE5YmVjCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vbWFjL2ZtX3RnZWMu YwpAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxl IFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt ZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy IHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5h bWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVM WSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhh dCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Ig YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9y IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFRHRUMgTUFDIC4uLiAqLwor CisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRl ICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiY3JjX21hY19hZGRyX2V4dC5oIgorCisjaW5jbHVkZSAi Zm1fY29tbW9uLmgiCisjaW5jbHVkZSAiZnNsX2ZtYW5fdGdlYy5oIgorI2luY2x1ZGUgImZtX3Rn ZWMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKworLyogSW50ZXJuYWwgcm91dGluZXMgKi8K Kworc3RhdGljIGludCBjaGVja19pbml0X3BhcmFtZXRlcnMoc3RydWN0IHRnZWNfdCAqcF90Z2Vj KQoreworCWlmIChFTkVUX1NQRUVEX0ZST01fTU9ERShwX3RnZWMtPmVuZXRfbW9kZSkgPCBFTkVU X1NQRUVEXzEwMDAwKSB7CisJCXByX2VycigiMTBHIE1BQyBkcml2ZXIgb25seSBzdXBwb3J0IDEw RyBzcGVlZFxuIik7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKHBfdGdlYy0+YWRkciA9PSAw KSB7CisJCXByX2VycigiRXRoZXJuZXQgMTBHIE1BQyBNdXN0IGhhdmUgdmFsaWQgTUFDIEFkZHJl c3NcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmICghcF90Z2VjLT5mX2V4Y2VwdGlvbikg eworCQlwcl9lcnIoInVuaW5pdGlhbGl6ZWQgZl9leGNlcHRpb25cbiIpOworCQlyZXR1cm4gLUVE T007CisJfQorCWlmICghcF90Z2VjLT5mX2V2ZW50KSB7CisJCXByX2VycigidW5pbml0aWFsaXpl ZCBmX2V2ZW50XG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKyNpZmRlZiBGTV9MRU5fQ0hFQ0tf RVJSQVRBX0ZNQU5fU1cwMDIKKwlpZiAoIXBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbS0+bm9fbGVu Z3RoX2NoZWNrX2VuYWJsZSkgeworCQlwcl93YXJuKCJMZW5ndGhDaGVjayFcbiIpOworCQlyZXR1 cm4gLUVET007CisJfQorI2VuZGlmIC8qIEZNX0xFTl9DSEVDS19FUlJBVEFfRk1BTl9TVzAwMiAq LworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9leGNlcHRpb25fZmxhZyhlbnVtIGZt X21hY19leGNlcHRpb25zIGV4Y2VwdGlvbikKK3sKKwl1aW50MzJfdCBiaXRfbWFzazsKKworCXN3 aXRjaCAoZXhjZXB0aW9uKSB7CisJY2FzZSBGTV9NQUNfRVhfMTBHX01ESU9fU0NBTl9FVkVOVDoK KwkJYml0X21hc2sgPSBUR0VDX0lNQVNLX01ESU9fU0NBTl9FVkVOVDsKKwkJYnJlYWs7CisJY2Fz ZSBGTV9NQUNfRVhfMTBHX01ESU9fQ01EX0NNUEw6CisJCWJpdF9tYXNrID0gVEdFQ19JTUFTS19N RElPX0NNRF9DTVBMOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xMEdfUkVNX0ZBVUxUOgor CQliaXRfbWFzayA9IFRHRUNfSU1BU0tfUkVNX0ZBVUxUOworCQlicmVhazsKKwljYXNlIEZNX01B Q19FWF8xMEdfTE9DX0ZBVUxUOgorCQliaXRfbWFzayA9IFRHRUNfSU1BU0tfTE9DX0ZBVUxUOwor CQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xMEdfVFhfRUNDX0VSOgorCQliaXRfbWFzayA9IFRH RUNfSU1BU0tfVFhfRUNDX0VSOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xMEdfVFhfRklG T19VTkZMOgorCQliaXRfbWFzayA9IFRHRUNfSU1BU0tfVFhfRklGT19VTkZMOworCQlicmVhazsK KwljYXNlIEZNX01BQ19FWF8xMEdfVFhfRklGT19PVkZMOgorCQliaXRfbWFzayA9IFRHRUNfSU1B U0tfVFhfRklGT19PVkZMOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xMEdfVFhfRVI6CisJ CWJpdF9tYXNrID0gVEdFQ19JTUFTS19UWF9FUjsKKwkJYnJlYWs7CisJY2FzZSBGTV9NQUNfRVhf MTBHX1JYX0ZJRk9fT1ZGTDoKKwkJYml0X21hc2sgPSBUR0VDX0lNQVNLX1JYX0ZJRk9fT1ZGTDsK KwkJYnJlYWs7CisJY2FzZSBGTV9NQUNfRVhfMTBHX1JYX0VDQ19FUjoKKwkJYml0X21hc2sgPSBU R0VDX0lNQVNLX1JYX0VDQ19FUjsKKwkJYnJlYWs7CisJY2FzZSBGTV9NQUNfRVhfMTBHX1JYX0pB Ql9GUk06CisJCWJpdF9tYXNrID0gVEdFQ19JTUFTS19SWF9KQUJfRlJNOworCQlicmVhazsKKwlj YXNlIEZNX01BQ19FWF8xMEdfUlhfT1ZSU1pfRlJNOgorCQliaXRfbWFzayA9IFRHRUNfSU1BU0tf UlhfT1ZSU1pfRlJNOworCQlicmVhazsKKwljYXNlIEZNX01BQ19FWF8xMEdfUlhfUlVOVF9GUk06 CisJCWJpdF9tYXNrID0gVEdFQ19JTUFTS19SWF9SVU5UX0ZSTTsKKwkJYnJlYWs7CisJY2FzZSBG TV9NQUNfRVhfMTBHX1JYX0ZSQUdfRlJNOgorCQliaXRfbWFzayA9IFRHRUNfSU1BU0tfUlhfRlJB R19GUk07CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzEwR19SWF9MRU5fRVI6CisJCWJpdF9t YXNrID0gVEdFQ19JTUFTS19SWF9MRU5fRVI7CisJCWJyZWFrOworCWNhc2UgRk1fTUFDX0VYXzEw R19SWF9DUkNfRVI6CisJCWJpdF9tYXNrID0gVEdFQ19JTUFTS19SWF9DUkNfRVI7CisJCWJyZWFr OworCWNhc2UgRk1fTUFDX0VYXzEwR19SWF9BTElHTl9FUjoKKwkJYml0X21hc2sgPSBUR0VDX0lN QVNLX1JYX0FMSUdOX0VSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliaXRfbWFzayA9IDA7CisJ CWJyZWFrOworCX0KKworCXJldHVybiBiaXRfbWFzazsKK30KKworc3RhdGljIHVpbnQzMl90IGdl dF9tYWNfYWRkcl9oYXNoX2NvZGUodWludDY0X3QgZXRoX2FkZHIpCit7CisJdWludDMyX3QgY3Jj OworCisJLyogQ1JDIGNhbGN1bGF0aW9uICovCisJR0VUX01BQ19BRERSX0NSQyhldGhfYWRkciwg Y3JjKTsKKworCWNyYyA9IGJpdHJldjMyKGNyYyk7CisKKwlyZXR1cm4gY3JjOworfQorCitzdGF0 aWMgdm9pZCB0Z2VjX2Vycl9leGNlcHRpb24odm9pZCAqaF90Z2VjKQoreworCXN0cnVjdCB0Z2Vj X3QgKnBfdGdlYyA9IChzdHJ1Y3QgdGdlY190ICopaF90Z2VjOworCXVpbnQzMl90IGV2ZW50Owor CXN0cnVjdCB0Z2VjX3JlZ3MgX19pb21lbSAqcF90Z2VjX21lbV9tYXAgPSBwX3RnZWMtPnBfbWVt X21hcDsKKworCS8qIGRvIG5vdCBoYW5kbGUgTURJTyBldmVudHMgKi8KKwlldmVudCA9CisJICAg IGZtYW5fdGdlY19nZXRfZXZlbnQocF90Z2VjX21lbV9tYXAsCisJCQkJfihUR0VDX0lNQVNLX01E SU9fU0NBTl9FVkVOVCB8CisJCQkJICBUR0VDX0lNQVNLX01ESU9fQ01EX0NNUEwpKTsKKwlldmVu dCAmPSBmbWFuX3RnZWNfZ2V0X2ludGVycnVwdF9tYXNrKHBfdGdlY19tZW1fbWFwKTsKKworCWZt YW5fdGdlY19hY2tfZXZlbnQocF90Z2VjX21lbV9tYXAsIGV2ZW50KTsKKworCWlmIChldmVudCAm IFRHRUNfSU1BU0tfUkVNX0ZBVUxUKQorCQlwX3RnZWMtPmZfZXhjZXB0aW9uKHBfdGdlYy0+ZGV2 X2lkLCBGTV9NQUNfRVhfMTBHX1JFTV9GQVVMVCk7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFTS19M T0NfRkFVTFQpCisJCXBfdGdlYy0+Zl9leGNlcHRpb24ocF90Z2VjLT5kZXZfaWQsIEZNX01BQ19F WF8xMEdfTE9DX0ZBVUxUKTsKKwlpZiAoZXZlbnQgJiBUR0VDX0lNQVNLX1RYX0VDQ19FUikKKwkJ cF90Z2VjLT5mX2V4Y2VwdGlvbihwX3RnZWMtPmRldl9pZCwgRk1fTUFDX0VYXzEwR19UWF9FQ0Nf RVIpOworCWlmIChldmVudCAmIFRHRUNfSU1BU0tfVFhfRklGT19VTkZMKQorCQlwX3RnZWMtPmZf ZXhjZXB0aW9uKHBfdGdlYy0+ZGV2X2lkLAorCQkJCSAgICBGTV9NQUNfRVhfMTBHX1RYX0ZJRk9f VU5GTCk7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFTS19UWF9GSUZPX09WRkwpCisJCXBfdGdlYy0+ Zl9leGNlcHRpb24ocF90Z2VjLT5kZXZfaWQsCisJCQkJICAgIEZNX01BQ19FWF8xMEdfVFhfRklG T19PVkZMKTsKKwlpZiAoZXZlbnQgJiBUR0VDX0lNQVNLX1RYX0VSKQorCQlwX3RnZWMtPmZfZXhj ZXB0aW9uKHBfdGdlYy0+ZGV2X2lkLCBGTV9NQUNfRVhfMTBHX1RYX0VSKTsKKwlpZiAoZXZlbnQg JiBUR0VDX0lNQVNLX1JYX0ZJRk9fT1ZGTCkKKwkJcF90Z2VjLT5mX2V4Y2VwdGlvbihwX3RnZWMt PmRldl9pZCwKKwkJCQkgICAgRk1fTUFDX0VYXzEwR19SWF9GSUZPX09WRkwpOworCWlmIChldmVu dCAmIFRHRUNfSU1BU0tfUlhfRUNDX0VSKQorCQlwX3RnZWMtPmZfZXhjZXB0aW9uKHBfdGdlYy0+ ZGV2X2lkLCBGTV9NQUNfRVhfMTBHX1JYX0VDQ19FUik7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFT S19SWF9KQUJfRlJNKQorCQlwX3RnZWMtPmZfZXhjZXB0aW9uKHBfdGdlYy0+ZGV2X2lkLCBGTV9N QUNfRVhfMTBHX1JYX0pBQl9GUk0pOworCWlmIChldmVudCAmIFRHRUNfSU1BU0tfUlhfT1ZSU1pf RlJNKQorCQlwX3RnZWMtPmZfZXhjZXB0aW9uKHBfdGdlYy0+ZGV2X2lkLAorCQkJCSAgICBGTV9N QUNfRVhfMTBHX1JYX09WUlNaX0ZSTSk7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFTS19SWF9SVU5U X0ZSTSkKKwkJcF90Z2VjLT5mX2V4Y2VwdGlvbihwX3RnZWMtPmRldl9pZCwgRk1fTUFDX0VYXzEw R19SWF9SVU5UX0ZSTSk7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFTS19SWF9GUkFHX0ZSTSkKKwkJ cF90Z2VjLT5mX2V4Y2VwdGlvbihwX3RnZWMtPmRldl9pZCwgRk1fTUFDX0VYXzEwR19SWF9GUkFH X0ZSTSk7CisJaWYgKGV2ZW50ICYgVEdFQ19JTUFTS19SWF9MRU5fRVIpCisJCXBfdGdlYy0+Zl9l eGNlcHRpb24ocF90Z2VjLT5kZXZfaWQsIEZNX01BQ19FWF8xMEdfUlhfTEVOX0VSKTsKKwlpZiAo ZXZlbnQgJiBUR0VDX0lNQVNLX1JYX0NSQ19FUikKKwkJcF90Z2VjLT5mX2V4Y2VwdGlvbihwX3Rn ZWMtPmRldl9pZCwgRk1fTUFDX0VYXzEwR19SWF9DUkNfRVIpOworCWlmIChldmVudCAmIFRHRUNf SU1BU0tfUlhfQUxJR05fRVIpCisJCXBfdGdlYy0+Zl9leGNlcHRpb24ocF90Z2VjLT5kZXZfaWQs IEZNX01BQ19FWF8xMEdfUlhfQUxJR05fRVIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2luaXRf cmVzb3VyY2VzKHN0cnVjdCB0Z2VjX3QgKnBfdGdlYykKK3sKKwlmbV91bnJlZ2lzdGVyX2ludHIo cF90Z2VjLT5oX2ZtLCBGTV9NT0RfTUFDLCBwX3RnZWMtPm1hY19pZCwKKwkJCSAgIEZNX0lOVFJf VFlQRV9FUlIpOworCisJLyogcmVsZWFzZSB0aGUgZHJpdmVyJ3MgZ3JvdXAgaGFzaCB0YWJsZSAq LworCWZyZWVfaGFzaF90YWJsZShwX3RnZWMtPnBfbXVsdGljYXN0X2FkZHJfaGFzaCk7CisJcF90 Z2VjLT5wX211bHRpY2FzdF9hZGRyX2hhc2ggPSBOVUxMOworCisJLyogcmVsZWFzZSB0aGUgZHJp dmVyJ3MgaW5kaXZpZHVhbCBoYXNoIHRhYmxlICovCisJZnJlZV9oYXNoX3RhYmxlKHBfdGdlYy0+ cF91bmljYXN0X2FkZHJfaGFzaCk7CisJcF90Z2VjLT5wX3VuaWNhc3RfYWRkcl9oYXNoID0gTlVM TDsKK30KKworLyogQ2hlY2tzIGlmIHBfdGdlYyBkcml2ZXIgcGFyYW1ldGVycyB3ZXJlIGluaXRp YWxpemVkCisgKiByZXR1cm5zIDAgaWYgc3VjY2VzcyBlbHNlIHJldHVybnMgZXJyb3IKKyAqLwor c3RhdGljIGludCBpc19pbml0X2RvbmUoc3RydWN0IHRnZWNfY2ZnICpwX3RnZWNfZHJ2X3BhcmFt ZXRlcnMpCit7CisJaWYgKCFwX3RnZWNfZHJ2X3BhcmFtZXRlcnMpCisJCXJldHVybiAwOworCXJl dHVybiAtRUlOVkFMOworfQorCisvKiBUR0VDIE1BQyBBUEkgcm91dGluZXMgKi8KK2ludCB0Z2Vj X2VuYWJsZShzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgZW51bSBjb21tX21vZGUgbW9k ZSkKK3sKKwlzdHJ1Y3QgdGdlY190ICpwX3RnZWMgPSAoc3RydWN0IHRnZWNfdCAqKWZtX21hY19k ZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX3RnZWMtPnBfdGdlY19kcnZf cGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFuX3RnZWNfZW5hYmxlKHBf dGdlYy0+cF9tZW1fbWFwLAorCQkJIChtb2RlICYgQ09NTV9NT0RFX1JYKSwKKwkJCSAobW9kZSAm IENPTU1fTU9ERV9UWCkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0Z2VjX2Rpc2FibGUoc3Ry dWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGVudW0gY29tbV9tb2RlIG1vZGUpCit7CisJc3Ry dWN0IHRnZWNfdCAqcF90Z2VjID0gKHN0cnVjdCB0Z2VjX3QgKilmbV9tYWNfZGV2OworCWludCBy ZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF90Z2VjLT5wX3RnZWNfZHJ2X3BhcmFtKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm1hbl90Z2VjX2Rpc2FibGUocF90Z2VjLT5wX21l bV9tYXAsCisJCQkgIChtb2RlICYgQ09NTV9NT0RFX1JYKSwKKwkJCSAgKG1vZGUgJiBDT01NX01P REVfVFgpKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGdlY19zZXRfcHJvbWlzY3VvdXMoc3Ry dWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsIGJvb2wgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgdGdl Y190ICpwX3RnZWMgPSAoc3RydWN0IHRnZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKwor CXJldCA9IGlzX2luaXRfZG9uZShwX3RnZWMtPnBfdGdlY19kcnZfcGFyYW0pOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlmbWFuX3RnZWNfc2V0X3Byb21pc2N1b3VzKHBfdGdlYy0+cF9t ZW1fbWFwLCBuZXdfdmFsKTsKKworCXJldHVybiAwOworfQorCisvKiB0Z2VjIGNvbmZpZ3MgbW9k aWZpY2F0aW9uIGZ1bmN0aW9ucyAqLworCitpbnQgdGdlY19jZmdfbGIoc3RydWN0IGZtX21hY19k ZXYgKmZtX21hY19kZXYsIGJvb2wgbmV3X3ZhbCkKK3sKKwlzdHJ1Y3QgdGdlY190ICpwX3RnZWMg PSAoc3RydWN0IHRnZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJldDsKKworCXJldCA9IGlzX2lu aXRfZG9uZShwX3RnZWMtPnBfdGdlY19kcnZfcGFyYW0pOworCWlmICghcmV0KQorCQlyZXR1cm4g LUVJTlZBTDsKKworCXBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbS0+bG9vcGJhY2tfZW5hYmxlID0g bmV3X3ZhbDsKKworCXJldHVybiAwOworfQorCitpbnQgdGdlY19jZmdfbWF4X2ZyYW1lX2xlbihz dHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgdWludDE2X3QgbmV3X3ZhbCkKK3sKKwlzdHJ1 Y3QgdGdlY190ICpwX3RnZWMgPSAoc3RydWN0IHRnZWNfdCAqKWZtX21hY19kZXY7CisJaW50IHJl dDsKKworCXJldCA9IGlzX2luaXRfZG9uZShwX3RnZWMtPnBfdGdlY19kcnZfcGFyYW0pOworCWlm ICghcmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbS0+ bWF4X2ZyYW1lX2xlbmd0aCA9IG5ld192YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGdlYyBy dW4gdGltZSBhcGkgZnVuY3Rpb25zICovCisKK2ludCB0Z2VjX3NldF90eF9wYXVzZV9mcmFtZXMo c3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsCisJCQkgICAgIHVpbnQ4X3QgX19tYXliZV91 bnVzZWQgcHJpb3JpdHksCisJCQkgICAgIHVpbnQxNl90IHBhdXNlX3RpbWUsCisJCQkgICAgIHVp bnQxNl90IF9fbWF5YmVfdW51c2VkIHRocmVzaF90aW1lKQoreworCXN0cnVjdCB0Z2VjX3QgKnBf dGdlYyA9IChzdHJ1Y3QgdGdlY190ICopZm1fbWFjX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0g aXNfaW5pdF9kb25lKHBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWZtYW5fdGdlY19zZXRfdHhfcGF1c2VfZnJhbWVzKHBfdGdlYy0+cF9tZW1f bWFwLCBwYXVzZV90aW1lKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGdlY19hY2NlcHRfcnhf cGF1c2VfZnJhbWVzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBib29sIGVuKQorewor CXN0cnVjdCB0Z2VjX3QgKnBfdGdlYyA9IChzdHJ1Y3QgdGdlY190ICopZm1fbWFjX2RldjsKKwlp bnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZtYW5fdGdlY19zZXRfcnhfaWdub3JlX3Bh dXNlX2ZyYW1lcyhwX3RnZWMtPnBfbWVtX21hcCwgIWVuKTsKKworCXJldHVybiAwOworfQorCitp bnQgdGdlY19tb2RpZnlfbWFjX2FkZHJlc3Moc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYs CisJCQkgICAgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyKQoreworCXN0cnVjdCB0Z2VjX3QgKnBf dGdlYyA9IChzdHJ1Y3QgdGdlY190ICopZm1fbWFjX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0g aXNfaW5pdF9kb25lKHBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXBfdGdlYy0+YWRkciA9IEVORVRfQUREUl9UT19VSU5UNjQoKnBfZW5ldF9h ZGRyKTsKKwlmbWFuX3RnZWNfc2V0X21hY19hZGRyZXNzKHBfdGdlYy0+cF9tZW1fbWFwLCAodWlu dDhfdCAqKSgqcF9lbmV0X2FkZHIpKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGdlY19hZGRf aGFzaF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwKKwkJCSAgICAg IGVuZXRfYWRkcl90ICpwX2V0aF9hZGRyKQoreworCXN0cnVjdCB0Z2VjX3QgKnBfdGdlYyA9IChz dHJ1Y3QgdGdlY190ICopZm1fbWFjX2RldjsKKwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAqcF9o YXNoX2VudHJ5OworCXVpbnQzMl90IGNyYzsKKwl1aW50MzJfdCBoYXNoOworCXVpbnQ2NF90IGV0 aF9hZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF90Z2VjLT5wX3RnZWNf ZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZXRoX2FkZHIgPSBFTkVU X0FERFJfVE9fVUlOVDY0KCpwX2V0aF9hZGRyKTsKKworCWlmICghKGV0aF9hZGRyICYgR1JPVVBf QUREUkVTUykpIHsKKwkJLyogVW5pY2FzdCBhZGRyZXNzZXMgbm90IHN1cHBvcnRlZCBpbiBoYXNo ICovCisJCXByX2VycigiVW5pY2FzdCBBZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCS8qIENSQyBjYWxjdWxhdGlvbiAqLworCWNyYyA9IGdldF9tYWNfYWRkcl9oYXNoX2NvZGUo ZXRoX2FkZHIpOworCisJLyogVGFrZSA5IE1TQiBiaXRzICovCisJaGFzaCA9IChjcmMgPj4gVEdF Q19IQVNIX01DQVNUX1NISUZUKSAmIFRHRUNfSEFTSF9BRFJfTVNLOworCisJLyogQ3JlYXRlIGVs ZW1lbnQgdG8gYmUgYWRkZWQgdG8gdGhlIGRyaXZlciBoYXNoIHRhYmxlICovCisJcF9oYXNoX2Vu dHJ5ID0ga21hbGxvYyhzaXplb2YoKnBfaGFzaF9lbnRyeSksIEdGUF9LRVJORUwpOworCWlmICgh cF9oYXNoX2VudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlwX2hhc2hfZW50cnktPmFkZHIgPSBl dGhfYWRkcjsKKwlJTklUX0xJU1RfSEVBRCgmcF9oYXNoX2VudHJ5LT5ub2RlKTsKKworCWxpc3Rf YWRkX3RhaWwoJnBfaGFzaF9lbnRyeS0+bm9kZSwKKwkJICAgICAgJnBfdGdlYy0+cF9tdWx0aWNh c3RfYWRkcl9oYXNoLT5wX2xzdHNbaGFzaF0pOworCWZtYW5fdGdlY19zZXRfaGFzaF90YWJsZShw X3RnZWMtPnBfbWVtX21hcCwKKwkJCQkgKGhhc2ggfCBUR0VDX0hBU0hfTUNBU1RfRU4pKTsKKwor CXJldHVybiAwOworfQorCitpbnQgdGdlY19kZWxfaGFzaF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZm1f bWFjX2RldiAqZm1fbWFjX2RldiwKKwkJCSAgICAgIGVuZXRfYWRkcl90ICpwX2V0aF9hZGRyKQor eworCXN0cnVjdCB0Z2VjX3QgKnBfdGdlYyA9IChzdHJ1Y3QgdGdlY190ICopZm1fbWFjX2RldjsK KwlzdHJ1Y3QgZXRoX2hhc2hfZW50cnlfdCAqcF9oYXNoX2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3Qg bGlzdF9oZWFkICpwX3BvczsKKwl1aW50MzJfdCBjcmM7CisJdWludDMyX3QgaGFzaDsKKwl1aW50 NjRfdCBldGhfYWRkcjsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfdGdlYy0+ cF90Z2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWV0aF9hZGRy ID0gKCgqKHVpbnQ2NF90ICopcF9ldGhfYWRkcikgPj4gMTYpOworCisJLyogQ1JDIGNhbGN1bGF0 aW9uICovCisJY3JjID0gZ2V0X21hY19hZGRyX2hhc2hfY29kZShldGhfYWRkcik7CisJLyogVGFr ZSA5IE1TQiBiaXRzICovCisJaGFzaCA9IChjcmMgPj4gVEdFQ19IQVNIX01DQVNUX1NISUZUKSAm IFRHRUNfSEFTSF9BRFJfTVNLOworCisJbGlzdF9mb3JfZWFjaChwX3BvcywgJnBfdGdlYy0+cF9t dWx0aWNhc3RfYWRkcl9oYXNoLT5wX2xzdHNbaGFzaF0pIHsKKwkJcF9oYXNoX2VudHJ5ID0gRVRI X0hBU0hfRU5UUllfT0JKKHBfcG9zKTsKKwkJaWYgKHBfaGFzaF9lbnRyeS0+YWRkciA9PSBldGhf YWRkcikgeworCQkJbGlzdF9kZWxfaW5pdCgmcF9oYXNoX2VudHJ5LT5ub2RlKTsKKwkJCWtmcmVl KHBfaGFzaF9lbnRyeSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobGlzdF9lbXB0eSgmcF90 Z2VjLT5wX211bHRpY2FzdF9hZGRyX2hhc2gtPnBfbHN0c1toYXNoXSkpCisJCWZtYW5fdGdlY19z ZXRfaGFzaF90YWJsZShwX3RnZWMtPnBfbWVtX21hcCwKKwkJCQkJIChoYXNoICYgflRHRUNfSEFT SF9NQ0FTVF9FTikpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0Z2VjX2dldF92ZXJzaW9uKHN0 cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCB1aW50MzJfdCAqbWFjX3ZlcnNpb24pCit7CisJ c3RydWN0IHRnZWNfdCAqcF90Z2VjID0gKHN0cnVjdCB0Z2VjX3QgKilmbV9tYWNfZGV2OworCWlu dCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF90Z2VjLT5wX3RnZWNfZHJ2X3BhcmFtKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKm1hY192ZXJzaW9uID0gZm1hbl90Z2VjX2dl dF9yZXZpc2lvbihwX3RnZWMtPnBfbWVtX21hcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRn ZWNfc2V0X2V4Y2VwdGlvbihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwKKwkJICAgICAg IGVudW0gZm1fbWFjX2V4Y2VwdGlvbnMgZXhjZXB0aW9uLAorCQkgICAgICAgYm9vbCBlbmFibGUp Cit7CisJc3RydWN0IHRnZWNfdCAqcF90Z2VjID0gKHN0cnVjdCB0Z2VjX3QgKilmbV9tYWNfZGV2 OworCXVpbnQzMl90IGJpdF9tYXNrID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9k b25lKHBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWJpdF9tYXNrID0gZ2V0X2V4Y2VwdGlvbl9mbGFnKGV4Y2VwdGlvbik7CisJaWYgKGJpdF9t YXNrKSB7CisJCWlmIChlbmFibGUpCisJCQlwX3RnZWMtPmV4Y2VwdGlvbnMgfD0gYml0X21hc2s7 CisJCWVsc2UKKwkJCXBfdGdlYy0+ZXhjZXB0aW9ucyAmPSB+Yml0X21hc2s7CisJfSBlbHNlIHsK KwkJcHJfZXJyKCJVbmRlZmluZWQgZXhjZXB0aW9uXG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0K KwlpZiAoZW5hYmxlKQorCQlmbWFuX3RnZWNfZW5hYmxlX2ludGVycnVwdChwX3RnZWMtPnBfbWVt X21hcCwgYml0X21hc2spOworCWVsc2UKKwkJZm1hbl90Z2VjX2Rpc2FibGVfaW50ZXJydXB0KHBf dGdlYy0+cF9tZW1fbWFwLCBiaXRfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEZN X1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAwNAorc3RhdGljIGludCB0Z2VjX3R4X2VjY193 b3JrYXJvdW5kKHN0cnVjdCB0Z2VjX3QgKnBfdGdlYykKK3sKKwlpbnQgZXJyOworCisJcHJfaW5m bygiQXBwbHlpbmcgMTBHIFRYIEVDQyB3b3JrYXJvdW5kICgxMEdNQUMtQTAwNCkgLi4uICIpOwor CisJLyogZW5hYmxlIGFuZCBzZXQgcHJvbWlzY3VvdXMgKi8KKwlmbWFuX3RnZWNfZW5hYmxlKHBf dGdlYy0+cF9tZW1fbWFwLCB0cnVlLCB0cnVlKTsKKwlmbWFuX3RnZWNfc2V0X3Byb21pc2N1b3Vz KHBfdGdlYy0+cF9tZW1fbWFwLCB0cnVlKTsKKwllcnIgPSBmbV8xMGdfdHhfZWNjX3dvcmthcm91 bmQocF90Z2VjLT5oX2ZtLCBwX3RnZWMtPm1hY19pZCk7CisJLyogZGlzYWJsZSAqLworCWZtYW5f dGdlY19zZXRfcHJvbWlzY3VvdXMocF90Z2VjLT5wX21lbV9tYXAsIGZhbHNlKTsKKwlmbWFuX3Rn ZWNfZW5hYmxlKHBfdGdlYy0+cF9tZW1fbWFwLCBmYWxzZSwgZmFsc2UpOworCWZtYW5fdGdlY19h Y2tfZXZlbnQocF90Z2VjLT5wX21lbV9tYXAsIDB4ZmZmZmZmZmYpOworCisJaWYgKGVycikKKwkJ cHJfZXJyKCJGQUlMRUQhXG4iKTsKKwllbHNlCisJCXByX2luZm8oImRvbmUuXG4iKTsKKworCXJl dHVybiBlcnI7Cit9CisjZW5kaWYgLyogRk1fVFhfRUNDX0ZSTVNfRVJSQVRBXzEwR01BQ19BMDA0 ICovCisKKy8qIEZNIEluaXQmRnJlZSBBUEkgKi8KKworaW50IHRnZWNfaW5pdChzdHJ1Y3QgZm1f bWFjX2RldiAqZm1fbWFjX2RldikKK3sKKwlzdHJ1Y3QgdGdlY190ICpwX3RnZWMgPSAoc3RydWN0 IHRnZWNfdCAqKWZtX21hY19kZXY7CisJc3RydWN0IHRnZWNfY2ZnICpwX3RnZWNfZHJ2X3BhcmFt OworCWVuZXRfYWRkcl90IGV0aF9hZGRyOworCWludCBlcnIsIHJldCwgcmV0X2VycjsKKworCXJl dCA9IGlzX2luaXRfZG9uZShwX3RnZWMtPnBfdGdlY19kcnZfcGFyYW0pOworCWlmICghcmV0KQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChERUZBVUxUX1JFU0VUX09OX0lOSVQgJiYKKwkgICAg KGZtX3Jlc2V0X21hYyhwX3RnZWMtPmhfZm0sIHBfdGdlYy0+bWFjX2lkKSAhPSAwKSkgeworCQlw cl9lcnIoIkNhbid0IHJlc2V0IE1BQyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlm bV9nZXRfcmV2aXNpb24ocF90Z2VjLT5oX2ZtLCAmcF90Z2VjLT5mbV9yZXZfaW5mbyk7CisJcmV0 X2VyciA9IGNoZWNrX2luaXRfcGFyYW1ldGVycyhwX3RnZWMpOworCWlmIChyZXRfZXJyKQorCQly ZXR1cm4gcmV0X2VycjsKKworCXBfdGdlY19kcnZfcGFyYW0gPSBwX3RnZWMtPnBfdGdlY19kcnZf cGFyYW07CisKKwlNQUtFX0VORVRfQUREUl9GUk9NX1VJTlQ2NChwX3RnZWMtPmFkZHIsIGV0aF9h ZGRyKTsKKwlmbWFuX3RnZWNfc2V0X21hY19hZGRyZXNzKHBfdGdlYy0+cF9tZW1fbWFwLCAodWlu dDhfdCAqKWV0aF9hZGRyKTsKKworCS8qIGludGVycnVwdHMgKi8KKyNpZmRlZiBGTV8xMEdfUkVN X05fTENMX0ZMVF9FWF8xMEdNQUNfRVJSQVRBX1NXMDA1CisJeworCQlpZiAocF90Z2VjLT5mbV9y ZXZfaW5mby5tYWpvcl9yZXYgPD0gMikKKwkJCXBfdGdlYy0+ZXhjZXB0aW9ucyAmPQorCQkJICAg IH4oVEdFQ19JTUFTS19SRU1fRkFVTFQgfCBUR0VDX0lNQVNLX0xPQ19GQVVMVCk7CisJfQorI2Vu ZGlmIC8qIEZNXzEwR19SRU1fTl9MQ0xfRkxUX0VYXzEwR01BQ19FUlJBVEFfU1cwMDUgKi8KKwor I2lmZGVmIEZNX1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAwNAorCWlmICghcF90Z2VjLT5w X3RnZWNfZHJ2X3BhcmFtLT5za2lwX2ZtYW4xMV93b3JrYXJvdW5kKSB7CisJCWVyciA9IHRnZWNf dHhfZWNjX3dvcmthcm91bmQocF90Z2VjKTsKKwkJaWYgKGVyciAhPSAwKSB7CisJCQlmcmVlX2lu aXRfcmVzb3VyY2VzKHBfdGdlYyk7CisJCQlwcl93YXJuKCJ0Z2VjX3R4X2VjY193b3JrYXJvdW5k IGZhaWxlZFxuIik7CisJCX0KKwl9CisjZW5kaWYgLyogRk1fVFhfRUNDX0ZSTVNfRVJSQVRBXzEw R01BQ19BMDA0ICovCisKKwllcnIgPQorCSAgICBmbWFuX3RnZWNfaW5pdChwX3RnZWMtPnBfbWVt X21hcCwgcF90Z2VjX2Rydl9wYXJhbSwKKwkJCSAgIHBfdGdlYy0+ZXhjZXB0aW9ucyk7CisJaWYg KGVycikgeworCQlmcmVlX2luaXRfcmVzb3VyY2VzKHBfdGdlYyk7CisJCXByX2VycigiVEdFQyB2 ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGkvZiBtb2RlXG4iKTsKKwkJcmV0dXJuIGVycjsK Kwl9CisKKwkvKiBNYXggRnJhbWUgTGVuZ3RoICovCisJZXJyID0gZm1fc2V0X21hY19tYXhfZnJh bWUocF90Z2VjLT5oX2ZtLCBGTV9NQUNfMTBHLCBwX3RnZWMtPm1hY19pZCwKKwkJCQkgICBwX3Rn ZWNfZHJ2X3BhcmFtLT5tYXhfZnJhbWVfbGVuZ3RoKTsKKwlpZiAoZXJyKSB7CisJCXByX2Vycigi U2V0dGluZyBtYXggZnJhbWUgbGVuZ3RoIEZBSUxFRFxuIik7CisJCWZyZWVfaW5pdF9yZXNvdXJj ZXMocF90Z2VjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisjaWZkZWYgRk1fVFhfRklGT19D T1JSVVBUSU9OX0VSUkFUQV8xMEdNQUNfQTAwNworCWlmIChwX3RnZWMtPmZtX3Jldl9pbmZvLm1h am9yX3JldiA9PSAyKQorCQlmbWFuX3RnZWNfc2V0X2VycmF0dW1fdHhfZmlmb19jb3JydXB0aW9u XzEwZ21hY19hMDA3KHBfdGdlYy0+CisJCQkJCQkJCSAgICAgcF9tZW1fbWFwKTsKKyNlbmRpZiAv KiBGTV9UWF9GSUZPX0NPUlJVUFRJT05fRVJSQVRBXzEwR01BQ19BMDA3ICovCisKKwlwX3RnZWMt PnBfbXVsdGljYXN0X2FkZHJfaGFzaCA9IGFsbG9jX2hhc2hfdGFibGUoVEdFQ19IQVNIX1RBQkxF X1NJWkUpOworCWlmICghcF90Z2VjLT5wX211bHRpY2FzdF9hZGRyX2hhc2gpIHsKKwkJZnJlZV9p bml0X3Jlc291cmNlcyhwX3RnZWMpOworCQlwcl9lcnIoImFsbG9jYXRpb24gaGFzaCB0YWJsZSBp cyBGQUlMRURcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwX3RnZWMtPnBfdW5pY2Fz dF9hZGRyX2hhc2ggPSBhbGxvY19oYXNoX3RhYmxlKFRHRUNfSEFTSF9UQUJMRV9TSVpFKTsKKwlp ZiAoIXBfdGdlYy0+cF91bmljYXN0X2FkZHJfaGFzaCkgeworCQlmcmVlX2luaXRfcmVzb3VyY2Vz KHBfdGdlYyk7CisJCXByX2VycigiYWxsb2NhdGlvbiBoYXNoIHRhYmxlIGlzIEZBSUxFRFxuIik7 CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZtX3JlZ2lzdGVyX2ludHIocF90Z2VjLT5oX2Zt LCBGTV9NT0RfTUFDLCBwX3RnZWMtPm1hY19pZCwKKwkJCSBGTV9JTlRSX1RZUEVfRVJSLCB0Z2Vj X2Vycl9leGNlcHRpb24sIHBfdGdlYyk7CisKKwlrZnJlZShwX3RnZWNfZHJ2X3BhcmFtKTsKKwlw X3RnZWMtPnBfdGdlY19kcnZfcGFyYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0 Z2VjX2ZyZWUoc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYpCit7CisJc3RydWN0IHRnZWNf dCAqcF90Z2VjID0gKHN0cnVjdCB0Z2VjX3QgKilmbV9tYWNfZGV2OworCisJZnJlZV9pbml0X3Jl c291cmNlcyhwX3RnZWMpOworCisJaWYgKHBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSkKKwkJcF90 Z2VjLT5wX3RnZWNfZHJ2X3BhcmFtID0gTlVMTDsKKworCWtmcmVlKHBfdGdlYy0+cF90Z2VjX2Ry dl9wYXJhbSk7CisJa2ZyZWUocF90Z2VjKTsKKworCXJldHVybiAwOworfQorCisvKiAgdGdlYyBj b25maWcgIG1haW4gZW50cnkgKi8KKwordm9pZCAqdGdlY19jb25maWcoc3RydWN0IGZtX21hY19w YXJhbXNfdCAqcF9mbV9tYWNfcGFyYW0pCit7CisJc3RydWN0IHRnZWNfdCAqcF90Z2VjOworCXN0 cnVjdCB0Z2VjX2NmZyAqcF90Z2VjX2Rydl9wYXJhbTsKKwl1aW50cHRyX3QgYmFzZV9hZGRyOwor CisJYmFzZV9hZGRyID0gcF9mbV9tYWNfcGFyYW0tPmJhc2VfYWRkcjsKKwkvKiBhbGxvY2F0ZSBt ZW1vcnkgZm9yIHRoZSBVQ0MgR0VUSCBkYXRhIHN0cnVjdHVyZS4gKi8KKwlwX3RnZWMgPSBremFs bG9jKHNpemVvZigqcF90Z2VjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwX3RnZWMpCisJCXJldHVy biBOVUxMOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgMTBHIE1BQyBkcml2ZXIgcGFy YW1ldGVycyBkYXRhIHN0cnVjdHVyZS4gKi8KKwlwX3RnZWNfZHJ2X3BhcmFtID0ga3phbGxvYyhz aXplb2YoKnBfdGdlY19kcnZfcGFyYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfdGdlY19kcnZf cGFyYW0pIHsKKwkJdGdlY19mcmVlKChzdHJ1Y3QgZm1fbWFjX2RldiAqKXBfdGdlYyk7CisJCXJl dHVybiBOVUxMOworCX0KKworCS8qIFBsYW50IHBhcmFtZXRlciBzdHJ1Y3R1cmUgcG9pbnRlciAq LworCXBfdGdlYy0+cF90Z2VjX2Rydl9wYXJhbSA9IHBfdGdlY19kcnZfcGFyYW07CisKKwlmbWFu X3RnZWNfZGVmY29uZmlnKHBfdGdlY19kcnZfcGFyYW0pOworCisJcF90Z2VjLT5wX21lbV9tYXAg PSAoc3RydWN0IHRnZWNfcmVncyBfX2lvbWVtICopVUlOVF9UT19QVFIoYmFzZV9hZGRyKTsKKwlw X3RnZWMtPmFkZHIgPSBFTkVUX0FERFJfVE9fVUlOVDY0KHBfZm1fbWFjX3BhcmFtLT5hZGRyKTsK KwlwX3RnZWMtPmVuZXRfbW9kZSA9IHBfZm1fbWFjX3BhcmFtLT5lbmV0X21vZGU7CisJcF90Z2Vj LT5tYWNfaWQgPSBwX2ZtX21hY19wYXJhbS0+bWFjX2lkOworCXBfdGdlYy0+ZXhjZXB0aW9ucyA9 IFRHRUNfREVGQVVMVF9FWENFUFRJT05TOworCXBfdGdlYy0+Zl9leGNlcHRpb24gPSBwX2ZtX21h Y19wYXJhbS0+Zl9leGNlcHRpb247CisJcF90Z2VjLT5mX2V2ZW50ID0gcF9mbV9tYWNfcGFyYW0t PmZfZXZlbnQ7CisJcF90Z2VjLT5kZXZfaWQgPSBwX2ZtX21hY19wYXJhbS0+ZGV2X2lkOworCXBf dGdlYy0+aF9mbSA9IHBfZm1fbWFjX3BhcmFtLT5oX2ZtOworCisJLyogU2F2ZSBGTWFuIHJldmlz aW9uICovCisJZm1fZ2V0X3JldmlzaW9uKHBfdGdlYy0+aF9mbSwgJnBfdGdlYy0+Zm1fcmV2X2lu Zm8pOworCisJcmV0dXJuIHBfdGdlYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL21hYy9mbV90Z2VjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9tYWMvZm1fdGdlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjc5OTcxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9tYWMvZm1fdGdlYy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29w eXJpZ2h0IDIwMDgtMjAxNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25k dWN0b3Igbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgorICoKKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmli dXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg Ki8KKworLyogVEdFQyBNQUMgLi4uICovCisjaWZuZGVmIF9fVEdFQ19ICisjZGVmaW5lIF9fVEdF Q19ICisKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiZW5ldF9leHQuaCIKKworI2lu Y2x1ZGUgImZtX21hYy5oIgorCisjZGVmaW5lIFRHRUNfREVGQVVMVF9FWENFUFRJT05TCQkJIFwK KwkoKHVpbnQzMl90KSgoVEdFQ19JTUFTS19NRElPX1NDQU5fRVZFTlQpCXxcCisJCShUR0VDX0lN QVNLX1JFTV9GQVVMVCkJCQl8XAorCQkoVEdFQ19JTUFTS19MT0NfRkFVTFQpCQkJfFwKKwkJKFRH RUNfSU1BU0tfVFhfRUNDX0VSKQkJCXxcCisJCShUR0VDX0lNQVNLX1RYX0ZJRk9fVU5GTCkJCXxc CisJCShUR0VDX0lNQVNLX1RYX0ZJRk9fT1ZGTCkJCXxcCisJCShUR0VDX0lNQVNLX1RYX0VSKQkJ CXxcCisJCShUR0VDX0lNQVNLX1JYX0ZJRk9fT1ZGTCkJCXxcCisJCShUR0VDX0lNQVNLX1JYX0VD Q19FUikJCQl8XAorCQkoVEdFQ19JTUFTS19SWF9KQUJfRlJNKQkJCXxcCisJCShUR0VDX0lNQVNL X1JYX09WUlNaX0ZSTSkJCXxcCisJCShUR0VDX0lNQVNLX1JYX1JVTlRfRlJNKQkJfFwKKwkJKFRH RUNfSU1BU0tfUlhfRlJBR19GUk0pCQl8XAorCQkoVEdFQ19JTUFTS19SWF9DUkNfRVIpCQkJfFwK KwkJKFRHRUNfSU1BU0tfUlhfQUxJR05fRVIpKSkKKworI2RlZmluZSBNQVhfUEFDS0VUX0FMSUdO TUVOVCAgICAgICAgMzEKKyNkZWZpbmUgTUFYX0lOVEVSX1BBQ0tFVF9HQVAgICAgICAgIDB4N2YK KyNkZWZpbmUgTUFYX0lOVEVSX1BBTFRFUk5BVEVfQkVCICAgIDB4MGYKKyNkZWZpbmUgTUFYX1JF VFJBTlNNSVNTSU9OICAgICAgICAgIDB4MGYKKyNkZWZpbmUgTUFYX0NPTExJU0lPTl9XSU5ET1cg ICAgICAgIDB4MDNmZgorCisvKiBudW1iZXIgb2YgcGF0dGVybiBtYXRjaCByZWdpc3RlcnMgKGVu dHJpZXMpICovCisjZGVmaW5lIFRHRUNfTlVNX09GX1BBRERSUyAgICAgICAgICAxCisKKy8qIEdy b3VwIGFkZHJlc3MgYml0IGluZGljYXRpb24gKi8KKyNkZWZpbmUgR1JPVVBfQUREUkVTUyAgICAg ICAgICAgICAgIDB4MDAwMDAxMDAwMDAwMDAwMExMCisKKy8qIEhhc2ggdGFibGUgc2l6ZSAoPSAz MiBiaXRzKjggcmVncykqLworI2RlZmluZSBUR0VDX0hBU0hfVEFCTEVfU0laRSAgICAgICAgICAg ICA1MTIKKworc3RydWN0IHRnZWNfdCB7CisJLyogcG9pbnRlciB0byAxMEcgbWVtb3J5IG1hcHBl ZCByZWdpc3RlcnMuICovCisJc3RydWN0IHRnZWNfcmVncyBfX2lvbWVtICpwX21lbV9tYXA7CisJ LyogTUFDIGFkZHJlc3Mgb2YgZGV2aWNlOyAqLworCXVpbnQ2NF90IGFkZHI7CisJLyogRXRoZXJu ZXQgcGh5c2ljYWwgaW50ZXJmYWNlICAqLworCWVudW0gZV9lbmV0X21vZGUgZW5ldF9tb2RlOwor CXZvaWQgKmRldl9pZDsgLyogZGV2aWNlIGNvb2tpZSB1c2VkIGJ5IHRoZSBleGNlcHRpb24gY2Jz ICovCisJZm1fbWFjX2V4Y2VwdGlvbl9jYiAqZl9leGNlcHRpb247CisJZm1fbWFjX2V4Y2VwdGlv bl9jYiAqZl9ldmVudDsKKwkvKiBXaGV0aGVyIGEgcGFydGljdWxhciBpbmRpdmlkdWFsIGFkZHJl c3MgcmVjb2duaXRpb24KKwkgKiByZWdpc3RlciBpcyBiZWluZyB1c2VkCisJICovCisJYm9vbCBp bmRfYWRkcl9yZWdfdXNlZFtUR0VDX05VTV9PRl9QQUREUlNdOworCS8qIE1BQyBhZGRyZXNzIGZv ciBwYXJ0aWN1bGFyIGluZGl2aWR1YWwgYWRkcmVzcworCSAqIHJlY29nbml0aW9uIHJlZ2lzdGVy CisJICovCisJdWludDY0X3QgcGFkZHJbVEdFQ19OVU1fT0ZfUEFERFJTXTsKKwkvKiBOdW1iZXIg b2YgaW5kaXZpZHVhbCBhZGRyZXNzZXMgaW4gcmVnaXN0ZXJzIGZvciB0aGlzIHN0YXRpb24uICov CisJdWludDhfdCBudW1fb2ZfaW5kX2FkZHJfaW5fcmVnczsKKwkvKiBwb2ludGVyIHRvIGRyaXZl cidzIGdsb2JhbCBhZGRyZXNzIGhhc2ggdGFibGUgICovCisJc3RydWN0IGV0aF9oYXNoX3QgKnBf bXVsdGljYXN0X2FkZHJfaGFzaDsKKwkvKiBwb2ludGVyIHRvIGRyaXZlcidzIGluZGl2aWR1YWwg YWRkcmVzcyBoYXNoIHRhYmxlICAqLworCXN0cnVjdCBldGhfaGFzaF90ICpwX3VuaWNhc3RfYWRk cl9oYXNoOworCWJvb2wgZGVidWdfbW9kZTsKKwl1aW50OF90IG1hY19pZDsKKwl1aW50MzJfdCBl eGNlcHRpb25zOworCXN0cnVjdCB0Z2VjX2NmZyAqcF90Z2VjX2Rydl9wYXJhbTsKKwl2b2lkICpo X2ZtOworCXN0cnVjdCBmbV9yZXZpc2lvbl9pbmZvX3QgZm1fcmV2X2luZm87Cit9OworCit2b2lk ICp0Z2VjX2NvbmZpZyhzdHJ1Y3QgZm1fbWFjX3BhcmFtc190ICpwX2ZtX21hY19wYXJhbXMpOwor aW50IHRnZWNfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCBi b29sIG5ld192YWwpOworaW50IHRnZWNfbW9kaWZ5X21hY19hZGRyZXNzKHN0cnVjdCBmbV9tYWNf ZGV2ICpmbV9tYWNfZGV2LAorCQkJICAgIGVuZXRfYWRkcl90ICpwX2VuZXRfYWRkcik7CitpbnQg dGdlY19jZmdfbWF4X2ZyYW1lX2xlbihzdHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgdWlu dDE2X3QgbmV3X3ZhbCk7CitpbnQgdGdlY19lbmFibGUoc3RydWN0IGZtX21hY19kZXYgKmZtX21h Y19kZXYsIGVudW0gY29tbV9tb2RlIG1vZGUpOworaW50IHRnZWNfZGlzYWJsZShzdHJ1Y3QgZm1f bWFjX2RldiAqZm1fbWFjX2RldiwgZW51bSBjb21tX21vZGUgbW9kZSk7CitpbnQgdGdlY19pbml0 KHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2KTsKK2ludCB0Z2VjX2ZyZWUoc3RydWN0IGZt X21hY19kZXYgKmZtX21hY19kZXYpOworaW50IHRnZWNfYWNjZXB0X3J4X3BhdXNlX2ZyYW1lcyhz dHJ1Y3QgZm1fbWFjX2RldiAqZm1fbWFjX2RldiwgYm9vbCBlbik7CitpbnQgdGdlY19zZXRfdHhf cGF1c2VfZnJhbWVzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LCB1aW50OF90IHByaW9y aXR5LAorCQkJICAgICB1aW50MTZfdCBwYXVzZV90aW1lLCB1aW50MTZfdCB0aHJlc2hfdGltZSk7 CitpbnQgdGdlY19zZXRfZXhjZXB0aW9uKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNfZGV2LAor CQkgICAgICAgZW51bSBmbV9tYWNfZXhjZXB0aW9ucyBleGNlcHRpb24sIGJvb2wgZW5hYmxlKTsK K2ludCB0Z2VjX2FkZF9oYXNoX21hY19hZGRyZXNzKHN0cnVjdCBmbV9tYWNfZGV2ICpmbV9tYWNf ZGV2LAorCQkJICAgICAgZW5ldF9hZGRyX3QgKnBfZXRoX2FkZHIpOworaW50IHRnZWNfZGVsX2hh c2hfbWFjX2FkZHJlc3Moc3RydWN0IGZtX21hY19kZXYgKmZtX21hY19kZXYsCisJCQkgICAgICBl bmV0X2FkZHJfdCAqcF9ldGhfYWRkcik7CitpbnQgdGdlY19nZXRfdmVyc2lvbihzdHJ1Y3QgZm1f bWFjX2RldiAqZm1fbWFjX2RldiwgdWludDMyX3QgKm1hY192ZXJzaW9uKTsKKworI2VuZGlmIC8q IF9fVEdFQ19IICovCi0tIAoxLjcuOS41CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0CkxpbnV4cHBjLWRldkBs aXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0aW5mby9saW51eHBw Yy1kZXY=