From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4591889BA9 for ; Tue, 16 Apr 2019 11:27:39 +0000 (UTC) From: Simon Ser Date: Tue, 16 Apr 2019 14:27:46 +0300 Message-Id: <20190416112746.9415-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4] lib/igt_edid: new library for generating EDIDs List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: Rm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRpZmZlcmVudCBFRElEIGZlYXR1cmVzLCB3ZSBu ZWVkIHRvIGdlbmVyYXRlIG1vcmUKYW5kIG1vcmUgY29tcGxleCBFRElEIGJsb2JzIChlLmcuIHdp dGggYXVkaW8gc3VwcG9ydCkuIEhvd2V2ZXIgY3VycmVudGx5IElHVAp1c2VzIGEgbWFjcm8tYmFz ZWQgc3lzdGVtIHRvIGdlbmVyYXRlIEVESURzLiBUaGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCBhbmQg aXMKcHJldHR5IGluZmxleGlibGUuCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxpdHRs ZSBsaWJyYXJ5IHRvIGdlbmVyYXRlIEVESURzLiBGb3Igbm93IGl0IGNhbid0CmRvIG1vcmUgdGhh biB0aGUgb2xkIG1hY3JvLiBGdXR1cmUgY29tbWl0cyB3aWxsIGV4dGVuZCB0aGUgQVBJLgoKVGhl IHN0cnVjdHVyZXMgYXJlIG1vc3RseSBiYXNlZCBvbiB0aGUgTGludXgga2VybmVsIGNvZGUgKGRy bV9lZGlkLmgpLiBTZXR0ZXJzCmhhdmUgYmVlbiBhZGRlZCBmb3IgY29udmVuaWVuY2UuCgpTaWdu ZWQtb2ZmLWJ5OiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Ci0tLQoKQ2hhbmdlcyBp biB2NDogZml4IEdDQyB3YXJuaW5ncyAodGhlc2UgZG9uJ3Qgc2hvdyB1cCB3aXRoIENsYW5nKQot IFJlbW92ZSBkZWNsYXJhdGlvbiBub3QgYXQgdGhlIHRvcCBvZiBhIGNvZGUgYmxvY2sKLSBGaXgg bWlzc2luZyBjb25zdCBxdWFsaWZpZXIKCiBsaWIvaWd0X2VkaWQuYyAgICAgICAgICB8IDI3MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0X2VkaWQuaCAg ICAgICAgICB8IDE5NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2lndF9lZGlk X3RlbXBsYXRlLmggfCAgNzQgLS0tLS0tLS0tLS0KIGxpYi9pZ3Rfa21zLmMgICAgICAgICAgIHwg MTEzICsrKysrKysrLS0tLS0tLS0tCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMyArLQog NSBmaWxlcyBjaGFuZ2VkLCA1MjMgaW5zZXJ0aW9ucygrKSwgMTMzIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZWRpZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2ln dF9lZGlkLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2VkaWRfdGVtcGxhdGUuaAoKZGlm ZiAtLWdpdCBhL2xpYi9pZ3RfZWRpZC5jIGIvbGliL2lndF9lZGlkLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAuLjUyZTY2YWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ln dF9lZGlkLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+CisgKi8K KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgPHhmODZkcm1Nb2RlLmg+CisKKyNpbmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgImln dF9lZGlkLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGVkaWRfaGVhZGVyW10gPSB7CisJMHgwMCwg MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorfTsKKworc3RhdGljIGNv bnN0IGNoYXIgbW9uaXRvcl9yYW5nZV9wYWRkaW5nW10gPSB7CisJMHgwYSwgMHgyMCwgMHgyMCwg MHgyMCwgMHgyMCwgMHgyMCwgMHgyMAorfTsKKworLyogdmZyZXEgaXMgaW4gSHogKi8KK3N0YXRp YyB2b2lkIHN0ZF90aW1pbmdfc2V0KHN0cnVjdCBzdGRfdGltaW5nICpzdCwgaW50IGhzaXplLCBp bnQgdmZyZXEsCisJCQkgICBlbnVtIHN0ZF90aW1pbmdfYXNwZWN0IGFzcGVjdCkKK3sKKwlhc3Nl cnQoaHNpemUgPj0gMjU2ICYmIGhzaXplIDw9IDIyODgpOworCXN0LT5oc2l6ZSA9IGhzaXplIC8g OCAtIDMxOworCXN0LT52ZnJlcV9hc3BlY3QgPSBhc3BlY3QgPDwgNiB8ICh2ZnJlcSAtIDYwKTsK K30KKworc3RhdGljIHZvaWQgc3RkX3RpbWluZ191bnNldChzdHJ1Y3Qgc3RkX3RpbWluZyAqc3Qp Cit7CisJbWVtc2V0KHN0LCAweDAxLCBzaXplb2Yoc3RydWN0IHN0ZF90aW1pbmcpKTsKK30KKwor LyoqCisgKiBkZXRhaWxlZF90aW1pbmdfc2V0X21vZGU6IGZpbGwgYSBkZXRhaWxlZCB0aW1pbmcg YmFzZWQgb24gYSBtb2RlCisgKi8KK3ZvaWQgZGV0YWlsZWRfdGltaW5nX3NldF9tb2RlKHN0cnVj dCBkZXRhaWxlZF90aW1pbmcgKmR0LCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJCQkgICAgICBp bnQgd2lkdGhfbW0sIGludCBoZWlnaHRfbW0pCit7CisJaW50IGhhY3RpdmUsIGhibGFuaywgdmFj dGl2ZSwgdmJsYW5rLCBoc3luY19vZmZzZXQsIGhzeW5jX3B1bHNlX3dpZHRoLAorCSAgICB2c3lu Y19vZmZzZXQsIHZzeW5jX3B1bHNlX3dpZHRoOworCXN0cnVjdCBkZXRhaWxlZF9waXhlbF90aW1p bmcgKnB0ID0gJmR0LT5kYXRhLnBpeGVsX2RhdGE7CisKKwloYWN0aXZlID0gbW9kZS0+aGRpc3Bs YXk7CisJaHN5bmNfb2Zmc2V0ID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsK Kwloc3luY19wdWxzZV93aWR0aCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0 OworCWhibGFuayA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhkaXNwbGF5OworCisJdmFjdGl2ZSA9 IG1vZGUtPnZkaXNwbGF5OworCXZzeW5jX29mZnNldCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXk7CisJdnN5bmNfcHVsc2Vfd2lkdGggPSBtb2RlLT52c3luY19lbmQgLSBtb2Rl LT52c3luY19zdGFydDsKKwl2YmxhbmsgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52ZGlzcGxheTsK KworCWR0LT5waXhlbF9jbG9ja1swXSA9IChtb2RlLT5jbG9jayAvIDEwKSAmIDB4MDBGRjsKKwlk dC0+cGl4ZWxfY2xvY2tbMV0gPSAoKG1vZGUtPmNsb2NrIC8gMTApICYgMHhGRjAwKSA+PiA4Owor CisJYXNzZXJ0KGhhY3RpdmUgPD0gMHhGRkYpOworCWFzc2VydChoYmxhbmsgPD0gMHhGRkYpOwor CXB0LT5oYWN0aXZlX2xvID0gaGFjdGl2ZSAmIDB4MEZGOworCXB0LT5oYmxhbmtfbG8gPSBoYmxh bmsgJiAweDBGRjsKKwlwdC0+aGFjdGl2ZV9oYmxhbmtfaGkgPSAoaGFjdGl2ZSAmIDB4RjAwKSA+ PiA0IHwgKGhibGFuayAmIDB4RjAwKSA+PiA4OworCisJYXNzZXJ0KHZhY3RpdmUgPD0gMHhGRkYp OworCWFzc2VydCh2YmxhbmsgPD0gMHhGRkYpOworCXB0LT52YWN0aXZlX2xvID0gdmFjdGl2ZSAm IDB4MEZGOworCXB0LT52YmxhbmtfbG8gPSB2YmxhbmsgJiAweDBGRjsKKwlwdC0+dmFjdGl2ZV92 YmxhbmtfaGkgPSAodmFjdGl2ZSAmIDB4RjAwKSA+PiA0IHwgKHZibGFuayAmIDB4RjAwKSA+PiA4 OworCisJYXNzZXJ0KGhzeW5jX29mZnNldCA8PSAweDNGRik7CisJYXNzZXJ0KGhzeW5jX3B1bHNl X3dpZHRoIDw9IDB4M0ZGKTsKKwlhc3NlcnQodnN5bmNfb2Zmc2V0IDw9IDB4M0YpOworCWFzc2Vy dCh2c3luY19wdWxzZV93aWR0aCA8PSAweDNGKTsKKwlwdC0+aHN5bmNfb2Zmc2V0X2xvID0gaHN5 bmNfb2Zmc2V0ICYgMHgwRkY7CisJcHQtPmhzeW5jX3B1bHNlX3dpZHRoX2xvID0gaHN5bmNfcHVs c2Vfd2lkdGggJiAweDBGRjsKKwlwdC0+dnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2xvID0gKHZz eW5jX29mZnNldCAmIDB4RikgPDwgNAorCQkJCQkgIHwgKHZzeW5jX3B1bHNlX3dpZHRoICYgMHhG KTsKKwlwdC0+aHN5bmNfdnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2hpID0KKwkJKChoc3luY19v ZmZzZXQgJiAweDMwMCkgPj4gMikgfCAoKGhzeW5jX3B1bHNlX3dpZHRoICYgMHgzMDApID4+IDQp CisJCXwgKCh2c3luY19vZmZzZXQgJiAweDMwKSA+PiAyKSB8ICgodnN5bmNfcHVsc2Vfd2lkdGgg JiAweDMwKSA+PiA0KTsKKworCWFzc2VydCh3aWR0aF9tbSA8PSAweEZGRik7CisJYXNzZXJ0KGhl aWdodF9tbSA8PSAweEZGRik7CisJcHQtPndpZHRoX21tX2xvID0gd2lkdGhfbW0gJiAweDBGRjsK KwlwdC0+aGVpZ2h0X21tX2xvID0gaGVpZ2h0X21tICYgMHgwRkY7CisJcHQtPndpZHRoX2hlaWdo dF9tbV9oaSA9ICh3aWR0aF9tbSAmIDB4RjAwKSA+PiA0CisJCQkJIHwgKGhlaWdodF9tbSAmIDB4 RjAwKSA+PiA4OworCisJcHQtPm1pc2MgPSAwOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfUEhTWU5DKQorCQlwdC0+bWlzYyB8PSBFRElEX1BUX0hTWU5DX1BPU0lUSVZFOworCWlm IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQlwdC0+bWlzYyB8PSBFRElE X1BUX1ZTWU5DX1BPU0lUSVZFOworfQorCisvKioKKyAqIGRldGFpbGVkX3RpbWluZ19zZXRfbW9u aXRvcl9yYW5nZV9tb2RlOiBzZXQgYSBkZXRhaWxlZCB0aW1pbmcgdG8gYmUgYQorICogbW9uaXRv ciByYW5nZSBiYXNlZCBvbiBhIG1vZGUKKyAqLwordm9pZCBkZXRhaWxlZF90aW1pbmdfc2V0X21v bml0b3JfcmFuZ2VfbW9kZShzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwKKwkJCQkJICAgIGRy bU1vZGVNb2RlSW5mbyAqbW9kZSkKK3sKKwlzdHJ1Y3QgZGV0YWlsZWRfbm9uX3BpeGVsICpucCA9 ICZkdC0+ZGF0YS5vdGhlcl9kYXRhOworCXN0cnVjdCBkZXRhaWxlZF9kYXRhX21vbml0b3JfcmFu Z2UgKm1yID0gJm5wLT5kYXRhLnJhbmdlOworCisJZHQtPnBpeGVsX2Nsb2NrWzBdID0gZHQtPnBp eGVsX2Nsb2NrWzFdID0gMDsKKworCW5wLT50eXBlID0gRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5H RTsKKworCW1yLT5taW5fdmZyZXEgPSBtb2RlLT52cmVmcmVzaCAtIDE7CisJbXItPm1heF92ZnJl cSA9IG1vZGUtPnZyZWZyZXNoICsgMTsKKwltci0+bWluX2hmcmVxX2toeiA9IChtb2RlLT5jbG9j ayAvIG1vZGUtPmh0b3RhbCkgLSAxOworCW1yLT5tYXhfaGZyZXFfa2h6ID0gKG1vZGUtPmNsb2Nr IC8gbW9kZS0+aHRvdGFsKSArIDE7CisJbXItPnBpeGVsX2Nsb2NrX21oeiA9IChtb2RlLT5jbG9j ayAvIDEwMDAwKSArIDE7CisJbXItPmZsYWdzID0gMDsKKworCW1lbWNweShtci0+Zm9ybXVsYS5w YWQsIG1vbml0b3JfcmFuZ2VfcGFkZGluZywKKwkgICAgICAgc2l6ZW9mKG1vbml0b3JfcmFuZ2Vf cGFkZGluZykpOworfQorCisvKioKKyAqIGRldGFpbGVkX3RpbWluZ19zZXRfc3RyaW5nOiBzZXQg YSBkZXRhaWxlZCB0aW1pbmcgdG8gYmUgYSBzdHJpbmcKKyAqLwordm9pZCBkZXRhaWxlZF90aW1p bmdfc2V0X3N0cmluZyhzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwKKwkJCQllbnVtIGRldGFp bGVkX25vbl9waXhlbF90eXBlIHR5cGUsCisJCQkJY29uc3QgY2hhciAqc3RyKQoreworCXN0cnVj dCBkZXRhaWxlZF9ub25fcGl4ZWwgKm5wID0gJmR0LT5kYXRhLm90aGVyX2RhdGE7CisJc3RydWN0 IGRldGFpbGVkX2RhdGFfc3RyaW5nICpkcyA9ICZucC0+ZGF0YS5zdHJpbmc7CisJc2l6ZV90IGxl bjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9OQU1FOgor CWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9TVFJJTkc6CisJY2FzZSBFRElEX0RFVEFJTF9NT05J VE9SX1NFUklBTDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXNzZXJ0KDApOyAvKiBub3QgYSBz dHJpbmcgdHlwZSAqLworCX0KKworCWR0LT5waXhlbF9jbG9ja1swXSA9IGR0LT5waXhlbF9jbG9j a1sxXSA9IDA7CisKKwlucC0+dHlwZSA9IHR5cGU7CisKKwlzdHJuY3B5KGRzLT5zdHIsIHN0ciwg c2l6ZW9mKGRzLT5zdHIpKTsKKwlsZW4gPSBzdHJsZW4oc3RyKTsKKwlpZiAobGVuIDwgc2l6ZW9m KGRzLT5zdHIpKQorCQlkcy0+c3RyW2xlbl0gPSAnXG4nOworfQorCitzdGF0aWMgdm9pZCBlZGlk X3NldF9tZmcoc3RydWN0IGVkaWQgKmVkaWQsIGNvbnN0IGNoYXIgbWZnW3N0YXRpYyAzXSkKK3sK KwllZGlkLT5tZmdfaWRbMF0gPSAobWZnWzBdIC0gJ0AnKSA8PCAyIHwgKG1mZ1sxXSAtICdAJykg Pj4gMzsKKwllZGlkLT5tZmdfaWRbMV0gPSAobWZnWzFdIC0gJ0AnKSA8PCA1IHwgKG1mZ1syXSAt ICdAJyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkaWRfc2V0X2dhbW1hKHN0cnVjdCBlZGlkICplZGlk LCBmbG9hdCBnYW1tYSkKK3sKKwllZGlkLT5nYW1tYSA9IChnYW1tYSAqIDEwMCkgLSAxMDA7Cit9 CisKKy8qKgorICogZWRpZF9pbml0OiBpbml0aWFsaXplIGFuIEVESUQKKyAqCisgKiBUaGUgRURJ RCB3aWxsIGJlIHByZS1maWxsZWQgd2l0aCBlc3RhYmxpc2hlZCBhbmQgc3RhbmRhcmQgdGltaW5n czoKKyAqCisgKiAgLSAxOTIweDEwODAgNjBIegorICogIC0gMTI4MHg3MjAgNjBIegorICogIC0g MTAyNHg3NjggNjBIegorICogIC0gODAweDYwMCA2MEh6CisgKiAgLSA2NDB4NDgwIDYwSHoKKyAq Lwordm9pZCBlZGlkX2luaXQoc3RydWN0IGVkaWQgKmVkaWQpCit7CisJc2l6ZV90IGk7CisJdGlt ZV90IHQ7CisJc3RydWN0IHRtICp0bTsKKworCW1lbXNldChlZGlkLCAwLCBzaXplb2Yoc3RydWN0 IGVkaWQpKTsKKworCW1lbWNweShlZGlkLT5oZWFkZXIsIGVkaWRfaGVhZGVyLCBzaXplb2YoZWRp ZF9oZWFkZXIpKTsKKwllZGlkX3NldF9tZmcoZWRpZCwgIklHVCIpOworCWVkaWQtPnZlcnNpb24g PSAxOworCWVkaWQtPnJldmlzaW9uID0gMzsKKwllZGlkLT5pbnB1dCA9IDB4ODA7CisJZWRpZC0+ d2lkdGhfY20gPSA1MjsKKwllZGlkLT5oZWlnaHRfY20gPSAzMDsKKwllZGlkX3NldF9nYW1tYShl ZGlkLCAyLjIwKTsKKwllZGlkLT5mZWF0dXJlcyA9IDB4MDI7CisKKwkvKiBZZWFyIG9mIG1hbnVm YWN0dXJlICovCisJdCA9IHRpbWUoTlVMTCk7CisJdG0gPSBsb2NhbHRpbWUoJnQpOworCWVkaWQt Pm1mZ195ZWFyID0gdG0tPnRtX3llYXIgLSA5MDsKKworCS8qIEVzdGFibGlzaGVkIHRpbWluZ3M6 IDY0MHg0ODAgNjBIeiwgODAweDYwMCA2MEh6LCAxMDI0eDc2OCA2MEh6ICovCisJZWRpZC0+ZXN0 YWJsaXNoZWRfdGltaW5ncy50MSA9IDB4MjE7CisJZWRpZC0+ZXN0YWJsaXNoZWRfdGltaW5ncy50 MiA9IDB4MDg7CisKKwkvKiBTdGFuZGFyZCB0aW1pbmdzICovCisJLyogMTkyMHgxMDgwIDYwSHog Ki8KKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1swXSwgMTkyMCwgNjAs IFNURF9USU1JTkdfMTZfOSk7CisJLyogMTI4MHg3MjAgNjBIeiAqLworCXN0ZF90aW1pbmdfc2V0 KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzFdLCAxMjgwLCA2MCwgU1REX1RJTUlOR18xNl85KTsK KwkvKiAxMDI0eDc2OCA2MEh6ICovCisJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0YW5kYXJkX3Rp bWluZ3NbMl0sIDEwMjQsIDYwLCBTVERfVElNSU5HXzRfMyk7CisJLyogODAweDYwMCA2MEh6ICov CisJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbM10sIDgwMCwgNjAsIFNU RF9USU1JTkdfNF8zKTsKKwkvKiA2NDB4NDgwIDYwSHogKi8KKwlzdGRfdGltaW5nX3NldCgmZWRp ZC0+c3RhbmRhcmRfdGltaW5nc1s0XSwgNjQwLCA2MCwgU1REX1RJTUlOR180XzMpOworCWZvciAo aSA9IDU7IGkgPCBTVERfVElNSU5HU19MRU47IGkrKykKKwkJc3RkX3RpbWluZ191bnNldCgmZWRp ZC0+c3RhbmRhcmRfdGltaW5nc1tpXSk7Cit9CisKKy8qKgorICogZWRpZF9pbml0X3dpdGhfbW9k ZTogaW5pdGlhbGl6ZSBhbiBFRElEIGFuZCBzZXRzIGl0cyBwcmVmZXJyZWQgbW9kZQorICovCit2 b2lkIGVkaWRfaW5pdF93aXRoX21vZGUoc3RydWN0IGVkaWQgKmVkaWQsIGRybU1vZGVNb2RlSW5m byAqbW9kZSkKK3sKKwllZGlkX2luaXQoZWRpZCk7CisKKwkvKiBQcmVmZXJyZWQgdGltaW5nICov CisJZGV0YWlsZWRfdGltaW5nX3NldF9tb2RlKCZlZGlkLT5kZXRhaWxlZF90aW1pbmdzWzBdLCBt b2RlLAorCQkJCSBlZGlkLT53aWR0aF9jbSAqIDEwLCBlZGlkLT5oZWlnaHRfY20gKiAxMCk7CisJ ZGV0YWlsZWRfdGltaW5nX3NldF9tb25pdG9yX3JhbmdlX21vZGUoJmVkaWQtPmRldGFpbGVkX3Rp bWluZ3NbMV0sCisJCQkJCSAgICAgICBtb2RlKTsKKwlkZXRhaWxlZF90aW1pbmdfc2V0X3N0cmlu ZygmZWRpZC0+ZGV0YWlsZWRfdGltaW5nc1syXSwKKwkJCQkgICBFRElEX0RFVEFJTF9NT05JVE9S X05BTUUsICJJR1QiKTsKK30KKworLyoqCisgKiBlZGlkX3VwZGF0ZV9jaGVja3N1bTogY29tcHV0 ZSBhbmQgdXBkYXRlIHRoZSBFRElEIGNoZWNrc3VtCisgKi8KK3ZvaWQgZWRpZF91cGRhdGVfY2hl Y2tzdW0oc3RydWN0IGVkaWQgKmVkaWQpCit7CisJc2l6ZV90IGk7CisJY29uc3QgdWludDhfdCAq YnVmID0gKGNvbnN0IHVpbnQ4X3QgKikgZWRpZDsKKwl1aW50OF90IHN1bSA9IDA7CisKKwkvKiBj YWxjdWxhdGUgY2hlY2tzdW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBlZGlk KSAtIDE7IGkrKykgeworCQlzdW0gPSBzdW0gKyBidWZbaV07CisJfQorCisJZWRpZC0+Y2hlY2tz dW0gPSAyNTYgLSBzdW07Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2VkaWQuaCBiL2xpYi9pZ3Rf ZWRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iYmNiOTM5YQotLS0g L2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZWRpZC5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogU2ltb24gU2VyIDxzaW1v bi5zZXJAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYgSUdUX0VESURfSAorI2RlZmluZSBJR1Rf RURJRF9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitz dHJ1Y3QgZXN0X3RpbWluZ3MgeworCXVpbnQ4X3QgdDE7CisJdWludDhfdCB0MjsKKwl1aW50OF90 IG1mZ19yc3ZkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTVERfVElN SU5HU19MRU4gOAorCitlbnVtIHN0ZF90aW1pbmdfYXNwZWN0IHsKKwlTVERfVElNSU5HXzE2XzEw ID0gMGIwMCwKKwlTVERfVElNSU5HXzRfMyA9IDBiMDEsCisJU1REX1RJTUlOR181XzQgPSAwYjEw LAorCVNURF9USU1JTkdfMTZfOSA9IDBiMTEsCit9OworCitzdHJ1Y3Qgc3RkX3RpbWluZyB7CisJ dWludDhfdCBoc2l6ZTsKKwl1aW50OF90IHZmcmVxX2FzcGVjdDsKK30gX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CisKKyNkZWZpbmUgREVUQUlMRURfVElNSU5HU19MRU4gNAorCisjZGVmaW5lIEVE SURfUFRfSFNZTkNfUE9TSVRJVkUgKDEgPDwgMSkKKyNkZWZpbmUgRURJRF9QVF9WU1lOQ19QT1NJ VElWRSAoMSA8PCAyKQorI2RlZmluZSBFRElEX1BUX1NFUEFSQVRFX1NZTkMgICgzIDw8IDMpCisj ZGVmaW5lIEVESURfUFRfU1RFUkVPICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgRURJRF9QVF9J TlRFUkxBQ0VEICAgICAoMSA8PCA3KQorCitzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxfdGltaW5nIHsK Kwl1aW50OF90IGhhY3RpdmVfbG87CisJdWludDhfdCBoYmxhbmtfbG87CisJdWludDhfdCBoYWN0 aXZlX2hibGFua19oaTsKKwl1aW50OF90IHZhY3RpdmVfbG87CisJdWludDhfdCB2YmxhbmtfbG87 CisJdWludDhfdCB2YWN0aXZlX3ZibGFua19oaTsKKwl1aW50OF90IGhzeW5jX29mZnNldF9sbzsK Kwl1aW50OF90IGhzeW5jX3B1bHNlX3dpZHRoX2xvOworCXVpbnQ4X3QgdnN5bmNfb2Zmc2V0X3B1 bHNlX3dpZHRoX2xvOworCXVpbnQ4X3QgaHN5bmNfdnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2hp OworCXVpbnQ4X3Qgd2lkdGhfbW1fbG87CisJdWludDhfdCBoZWlnaHRfbW1fbG87CisJdWludDhf dCB3aWR0aF9oZWlnaHRfbW1faGk7CisJdWludDhfdCBoYm9yZGVyOworCXVpbnQ4X3QgdmJvcmRl cjsKKwl1aW50OF90IG1pc2M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qg ZGV0YWlsZWRfZGF0YV9zdHJpbmcgeworCWNoYXIgc3RyWzEzXTsKK30gX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CisKK3N0cnVjdCBkZXRhaWxlZF9kYXRhX21vbml0b3JfcmFuZ2UgeworCXVpbnQ4 X3QgbWluX3ZmcmVxOworCXVpbnQ4X3QgbWF4X3ZmcmVxOworCXVpbnQ4X3QgbWluX2hmcmVxX2to ejsKKwl1aW50OF90IG1heF9oZnJlcV9raHo7CisJdWludDhfdCBwaXhlbF9jbG9ja19taHo7IC8q IG5lZWQgdG8gbXVsdGlwbHkgYnkgMTAgKi8KKwl1aW50OF90IGZsYWdzOworCXVuaW9uIHsKKwkJ Y2hhciBwYWRbN107CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHJlc2VydmVkOworCQkJdWludDhf dCBoZnJlcV9zdGFydF9raHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMiAqLworCQkJdWludDhf dCBjOyAvKiBuZWVkIHRvIGRpdmlkZSBieSAyICovCisJCQl1aW50OF90IG1bMl07CisJCQl1aW50 OF90IGs7CisJCQl1aW50OF90IGo7IC8qIG5lZWQgdG8gZGl2aWRlIGJ5IDIgKi8KKwkJfSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKSBndGYyOworCQlzdHJ1Y3QgeworCQkJdWludDhfdCB2ZXJzaW9u OworCQkJdWludDhfdCBkYXRhMTsgLyogaGlnaCA2IGJpdHM6IGV4dHJhIGNsb2NrIHJlc29sdXRp b24gKi8KKwkJCXVpbnQ4X3QgZGF0YTI7IC8qIHBsdXMgbG93IDIgb2YgYWJvdmU6IG1heCBoYWN0 aXZlICovCisJCQl1aW50OF90IHN1cHBvcnRlZF9hc3BlY3RzOworCQkJdWludDhfdCBmbGFnczsg LyogcHJlZmVycmVkIGFzcGVjdCBhbmQgYmxhbmtpbmcgc3VwcG9ydCAqLworCQkJdWludDhfdCBz dXBwb3J0ZWRfc2NhbGluZ3M7CisJCQl1aW50OF90IHByZWZlcnJlZF9yZWZyZXNoOworCQl9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpIGN2dDsKKwl9IGZvcm11bGE7Cit9IF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOworCitlbnVtIGRldGFpbGVkX25vbl9waXhlbF90eXBlIHsKKwlFRElEX0RFVEFJ TF9FU1RfVElNSU5HUyA9IDB4ZjcsCisJRURJRF9ERVRBSUxfQ1ZUXzNCWVRFID0gMHhmOCwKKwlF RElEX0RFVEFJTF9DT0xPUl9NR01UX0RBVEEgPSAweGY5LAorCUVESURfREVUQUlMX1NURF9NT0RF UyA9IDB4ZmEsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9DUERBVEEgPSAweGZiLAorCUVESURfREVU QUlMX01PTklUT1JfTkFNRSA9IDB4ZmMsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5HRSA9IDB4 ZmQsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9TVFJJTkcgPSAweGZlLAorCUVESURfREVUQUlMX01P TklUT1JfU0VSSUFMID0gMHhmZiwKK307CisKK3N0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgewor CXVpbnQ4X3QgcGFkMTsKKwl1aW50OF90IHR5cGU7IC8qIGVudW0gZGV0YWlsZWRfbm9uX3BpeGVs X3R5cGUgKi8KKwl1aW50OF90IHBhZDI7CisJdW5pb24geworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0 YV9zdHJpbmcgc3RyOworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9tb25pdG9yX3JhbmdlIHJhbmdl OworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgc3RyaW5nOworCQkvKiBUT0RPOiBvdGhl ciB0eXBlcyAqLworCX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVj dCBkZXRhaWxlZF90aW1pbmcgeworCXVpbnQ4X3QgcGl4ZWxfY2xvY2tbMl07IC8qIG5lZWQgdG8g bXVsdGlwbHkgYnkgMTAgS0h6LCB6ZXJvIGlmIG5vdCBhIHBpeGVsIHRpbWluZyAqLworCXVuaW9u IHsKKwkJc3RydWN0IGRldGFpbGVkX3BpeGVsX3RpbWluZyBwaXhlbF9kYXRhOworCQlzdHJ1Y3Qg ZGV0YWlsZWRfbm9uX3BpeGVsIG90aGVyX2RhdGE7CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKKworc3RydWN0IGVkaWQgeworCWNoYXIgaGVhZGVyWzhdOworCS8qIFZlbmRv ciAmIHByb2R1Y3QgaW5mbyAqLworCXVpbnQ4X3QgbWZnX2lkWzJdOworCXVpbnQ4X3QgcHJvZF9j b2RlWzJdOworCXVpbnQ4X3Qgc2VyaWFsWzRdOworCXVpbnQ4X3QgbWZnX3dlZWs7CisJdWludDhf dCBtZmdfeWVhcjsKKwkvKiBFRElEIHZlcnNpb24gKi8KKwl1aW50OF90IHZlcnNpb247CisJdWlu dDhfdCByZXZpc2lvbjsKKwkvKiBEaXNwbGF5IGluZm86ICovCisJdWludDhfdCBpbnB1dDsKKwl1 aW50OF90IHdpZHRoX2NtOworCXVpbnQ4X3QgaGVpZ2h0X2NtOworCXVpbnQ4X3QgZ2FtbWE7CisJ dWludDhfdCBmZWF0dXJlczsKKwkvKiBDb2xvciBjaGFyYWN0ZXJpc3RpY3MgKi8KKwl1aW50OF90 IHJlZF9ncmVlbl9sbzsKKwl1aW50OF90IGJsYWNrX3doaXRlX2xvOworCXVpbnQ4X3QgcmVkX3g7 CisJdWludDhfdCByZWRfeTsKKwl1aW50OF90IGdyZWVuX3g7CisJdWludDhfdCBncmVlbl95Owor CXVpbnQ4X3QgYmx1ZV94OworCXVpbnQ4X3QgYmx1ZV95OworCXVpbnQ4X3Qgd2hpdGVfeDsKKwl1 aW50OF90IHdoaXRlX3k7CisJLyogRXN0LiB0aW1pbmdzIGFuZCBtZmcgcnN2ZCB0aW1pbmdzKi8K KwlzdHJ1Y3QgZXN0X3RpbWluZ3MgZXN0YWJsaXNoZWRfdGltaW5nczsKKwkvKiBTdGFuZGFyZCB0 aW1pbmdzIDEtOCovCisJc3RydWN0IHN0ZF90aW1pbmcgc3RhbmRhcmRfdGltaW5nc1tTVERfVElN SU5HU19MRU5dOworCS8qIERldGFpbGluZyB0aW1pbmdzIDEtNCAqLworCXN0cnVjdCBkZXRhaWxl ZF90aW1pbmcgZGV0YWlsZWRfdGltaW5nc1tERVRBSUxFRF9USU1JTkdTX0xFTl07CisJLyogTnVt YmVyIG9mIDEyOCBieXRlIGV4dC4gYmxvY2tzICovCisJdWludDhfdCBleHRlbnNpb25zOworCS8q IENoZWNrc3VtICovCisJdWludDhfdCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CisKK3ZvaWQgZWRpZF9pbml0KHN0cnVjdCBlZGlkICplZGlkKTsKK3ZvaWQgZWRpZF9pbml0 X3dpdGhfbW9kZShzdHJ1Y3QgZWRpZCAqZWRpZCwgZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKK3Zv aWQgZWRpZF91cGRhdGVfY2hlY2tzdW0oc3RydWN0IGVkaWQgKmVkaWQpOwordm9pZCBkZXRhaWxl ZF90aW1pbmdfc2V0X21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsIGRybU1vZGVNb2Rl SW5mbyAqbW9kZSwKKwkJCSAgICAgIGludCB3aWR0aF9tbSwgaW50IGhlaWdodF9tbSk7Cit2b2lk IGRldGFpbGVkX3RpbWluZ19zZXRfbW9uaXRvcl9yYW5nZV9tb2RlKHN0cnVjdCBkZXRhaWxlZF90 aW1pbmcgKmR0LAorCQkJCQkgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKK3ZvaWQgZGV0YWls ZWRfdGltaW5nX3NldF9zdHJpbmcoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsCisJCQkJZW51 bSBkZXRhaWxlZF9ub25fcGl4ZWxfdHlwZSB0eXBlLAorCQkJCWNvbnN0IGNoYXIgKnN0cik7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2lndF9lZGlkX3RlbXBsYXRlLmggYi9saWIvaWd0X2Vk aWRfdGVtcGxhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiZDE5Y2EuLjAw MDAwMDAwCi0tLSBhL2xpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEs NzQgKzAsMCBAQAotI2RlZmluZSBHQU1NQSh4KSAoKCh4KSAqIDEwMCkgLSAxMDApCi0KLSNkZWZp bmUgTUFOVUZBQ1RVUkVSX0lEKGEsIGIsIGMpIChhIC0gJ0AnKSA8PCAyIHwgKGIgLSAnQCcpID4+ IDMsIFwKLQkJCQkgKGIgLSAnQCcpIDw8IDUgfCAoYyAtICdAJykKLQotCi0jZGVmaW5lIGFiKHgs IHkpICgoeCkgJiAweGZmKSwgKCh5KSAmIDB4ZmYpLCAoKCh4KSAmIDB4ZjAwKSA+PiA0KSB8ICgo KHkpICYgMHhmMDApID4+IDgpCi0jZGVmaW5lIG9wKGhvLCBocCwgdm8sIHZwKSAoKGhvKSAmIDB4 ZmYpLCAoKGhwKSAmIDB4ZmYpLCBcCi0JCSgoKHZvKSAmIDB4ZikgPDwgNCkgfCAoKHZwKSAmIDB4 ZiksIFwKLQkJKCgoaG8pICYgMHgzMDApID4+IDIpIHwgKCgoaHApICYgMHgzMDApID4+IDQpIFwK LQkJfCAoKCh2bykgJiAweDMwKSA+PiAyKSB8ICgoKHZwKSAmIDB4MzApID4+IDQpCi0KLXN0YXRp YyB1bnNpZ25lZCBjaGFyIEVESURfTkFNRVtFRElEX0xFTkdUSF0gPSB7Ci0JMHgwMCwgMHhmZiwg MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgLyogaGVhZGVyICovCi0JTUFOVUZB Q1RVUkVSX0lEKCdJJywgJ0cnLCAnVCcpLAotCS8qIHByb2R1Y3QgY29kZSwgc2VyaWFsIG51bWJl ciwgd2VlayBhbmQgeWVhciBvZiBtYW51ZmFjdHVyZSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMywgLyogZWRpZCB2ZXJzaW9u ICgxLjMpICovCi0JLyogYmFzaWMgZGlzcGxheSBwYXJhbWV0ZXJzICovCi0JLyogZGlnaXRhbCBk aXNwbGF5LCBtYXhpbXVtIGhvcml6b250YWwgaW1hZ2Ugc2l6ZSwgbWF4aW11bSB2ZXJ0aWNhbAot CSAqIGltYWdlIHNpemUsIGdhbW1hLCBmZWF0dXJlczogUkdCIDQ6NDo0LCBuYXRpdmUgcGl4ZWwg Zm9ybWF0IGFuZAotCSAqIHJlZnJlc2ggcmF0ZSBpbiBkZXNjcmlwdG9yIDEgKi8KLQkweDgwLCBI U0laRSwgVlNJWkUsIEdBTU1BKDIuMjApLCAweDAyLAotCS8qIGNocm9tYXRpY2l0eSBjb29yZGlu YXRlcyAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsCi0JLyogZXN0YWJsaXNoZWQgdGltaW5nczogNjQweDQ4MCA2MEh6LCA4MDB4 NjAwIDYwSHosIDEwMjR4NzY4IDYwSHogKi8KLQkweDIxLCAweDA4LCAweDAwLAotCS8qIHN0YW5k YXJkIHRpbWluZ3MgKi8KLQkweGQxLCAweGMwLCAvKiAxOTIweDEwODAgNjBIeiAqLwotCTB4ODEs IDB4YzAsIC8qIDEyODB4NzIwIDYwSHogKi8KLQkweDYxLCAweDQwLCAvKiAxMDI0eDc2OCA2MEh6 ICovCi0JMHg0NSwgMHg0MCwgLyogODAweDYwMCA2MEh6ICovCi0JMHgzMSwgMHg0MCwgLyogNjQw eDQ4MCA2MEh6ICovCi0JMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkvKiBk ZXNjcmlwdG9yIDEgKHByZWZlcnJlZCB0aW1pbmcpICovCi0JKENMT0NLIC8gMTApICYgMHgwMGZm LCAoKENMT0NLIC8gMTApICYgMHhmZjAwKSA+PiA4LAotCWFiKEhBQ1RJVkUsIEhCTEFOSyksIGFi KFZBQ1RJVkUsIFZCTEFOSyksCi0Jb3AoSE9GRlNFVCwgSFBVTFNFLCBWT0ZGU0VULCBWUFVMU0Up LAotCWFiKEhTSVpFICogMTAsIFZTSVpFICogMTApLAotCTB4MDAsIDB4MDAsIDB4MDAsCi0JLyog ZGVzY3JpcHRvciAyIChtb25pdG9yIHJhbmdlIGxpbWl0cykgKi8KLQkweDAwLCAweDAwLCAweDAw LCAweGZkLCAweDAwLAotCVZGUkVRIC0gMSwgVkZSRVEgKyAxLCAvKiBtaW5pbXVtLCBtYXhpbXVt IHZlcnRpY2FsIGZpZWxkIHJhdGUgKi8KLQkoQ0xPQ0sgLyAoSEFDVElWRSArIEhCTEFOSykpIC0g MSwgLyogbWluaW11bSBob3Jpem9udGFsIGxpbmUgcmF0ZSAqLwotCShDTE9DSyAvIChIQUNUSVZF ICsgSEJMQU5LKSkgKyAxLCAvKiBtYXhpbXVtIGhvcml6b250YWwgbGluZSByYXRlICovCi0JKENM T0NLIC8gMTAwMDApICsgMSwgLyogbWF4aW11bSBwaXhlbCBjbG9jayByYXRlICovCi0JMHgwMCwg MHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwKLQkvKiBkZXNjcmlwdG9y IDMgKG5hbWUgZGVzY3JpcHRvcikgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAg J0knLCAgJ0cnLCAgJ1QnLCAweDBhLAotCTB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4 MjAsIDB4MjAsIDB4MjAsIDB4MjAsCi0JLyogZGVzY3JpcHRvciA0ICovCi0JMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIGV4dGVuc2lvbnMs IGNoZWNrc3VtICovCi0JMHgwMCwgMHgwMAotfTsKLQotI3VuZGVmIEVESURfTkFNRQotI3VuZGVm IFZGUkVRCi0jdW5kZWYgQ0xPQ0sKLSN1bmRlZiBIQUNUSVZFCi0jdW5kZWYgSEJMQU5LCi0jdW5k ZWYgVkFDVElWRQotI3VuZGVmIFZCTEFOSwotI3VuZGVmIEhPRkZTRVQKLSN1bmRlZiBIUFVMU0UK LSN1bmRlZiBWT0ZGU0VUCi0jdW5kZWYgVlBVTFNFCi0jdW5kZWYgSFNJWkUKLSN1bmRlZiBWU0la RQotI3VuZGVmIEdBTU1BCi0jdW5kZWYgTUFOVUZBQ1RVUkVSX0lECi0jdW5kZWYgYWIKLSN1bmRl ZiBvcApkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMKaW5kZXggZjhi MGRhYjIuLmRmOWFhZmQyIDEwMDY0NAotLS0gYS9saWIvaWd0X2ttcy5jCisrKyBiL2xpYi9pZ3Rf a21zLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJkcm10ZXN0LmgiCiAjaW5jbHVkZSAi aWd0X2ttcy5oIgogI2luY2x1ZGUgImlndF9hdXguaCIKKyNpbmNsdWRlICJpZ3RfZWRpZC5oIgog I2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKICNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgogI2lu Y2x1ZGUgImlndF9kZXZpY2UuaCIKQEAgLTEwMiwyMyArMTAzLDYgQEAgc3RhdGljIHZvaWQgdXBk YXRlX2VkaWRfY3N1bSh1bnNpZ25lZCBjaGFyICplZGlkLCBpbnQgY2VhX3BvcykKIAllZGlkW2Nl YV9wb3MgKyAxMjddID0gMjU2IC0gc3VtOwogfQogCi0jZGVmaW5lIFZGUkVRIDYwCi0jZGVmaW5l IENMT0NLIDE0ODUwMAotI2RlZmluZSBIQUNUSVZFIDE5MjAKLSNkZWZpbmUgSEJMQU5LIDI4MAot I2RlZmluZSBWQUNUSVZFIDEwODAKLSNkZWZpbmUgVkJMQU5LIDQ1Ci0jZGVmaW5lIEhPRkZTRVQg ODgKLSNkZWZpbmUgSFBVTFNFIDQ0Ci0jZGVmaW5lIFZPRkZTRVQgNAotI2RlZmluZSBWUFVMU0Ug NQotCi0jZGVmaW5lIEhTSVpFIDUyCi0jZGVmaW5lIFZTSVpFIDMwCi0KLSNkZWZpbmUgRURJRF9O QU1FIGJhc2VfZWRpZAotI2luY2x1ZGUgImlndF9lZGlkX3RlbXBsYXRlLmgiCi0KIC8qKgogICog aWd0X2ttc19nZXRfYmFzZV9lZGlkOgogICoKQEAgLTEzNSwyOSArMTE5LDY2IEBAIHN0YXRpYyB2 b2lkIHVwZGF0ZV9lZGlkX2NzdW0odW5zaWduZWQgY2hhciAqZWRpZCwgaW50IGNlYV9wb3MpCiAg KgogICogUmV0dXJuczogYSBiYXNpYyBlZGlkIGJsb2NrCiAgKi8KLWNvbnN0IHVuc2lnbmVkIGNo YXIqIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCh2b2lkKQorY29uc3QgdW5zaWduZWQgY2hhciAqaWd0 X2ttc19nZXRfYmFzZV9lZGlkKHZvaWQpCiB7Ci0JdXBkYXRlX2VkaWRfY3N1bShiYXNlX2VkaWQs IDApOworCXN0YXRpYyBzdHJ1Y3QgZWRpZCBlZGlkOworCWRybU1vZGVNb2RlSW5mbyBtb2RlID0g e307CiAKLQlyZXR1cm4gYmFzZV9lZGlkOworCW1vZGUuY2xvY2sgPSAxNDg1MDA7CisJbW9kZS5o ZGlzcGxheSA9IDE5MjA7CisJbW9kZS5oc3luY19zdGFydCA9IDIwMDg7CisJbW9kZS5oc3luY19l bmQgPSAyMDUyOworCW1vZGUuaHRvdGFsID0gMjIwMDsKKwltb2RlLnZkaXNwbGF5ID0gMTA4MDsK Kwltb2RlLnZzeW5jX3N0YXJ0ID0gMTA4NDsKKwltb2RlLnZzeW5jX2VuZCA9IDEwODk7CisJbW9k ZS52dG90YWwgPSAxMTI1OworCW1vZGUudnJlZnJlc2ggPSA2MDsKKworCWVkaWRfaW5pdF93aXRo X21vZGUoJmVkaWQsICZtb2RlKTsKKwllZGlkX3VwZGF0ZV9jaGVja3N1bSgmZWRpZCk7CisKKwly ZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmVkaWQ7CiB9CiAKLSNkZWZpbmUgVkZSRVEgNjAKLSNk ZWZpbmUgQ0xPQ0sgMTAxMDAwCi0jZGVmaW5lIEhBQ1RJVkUgMTQwMAotI2RlZmluZSBIQkxBTksg MTYwCi0jZGVmaW5lIFZBQ1RJVkUgMTA1MAotI2RlZmluZSBWQkxBTksgMzAKLSNkZWZpbmUgSE9G RlNFVCA0OAotI2RlZmluZSBIUFVMU0UgMzIKLSNkZWZpbmUgVk9GRlNFVCAzCi0jZGVmaW5lIFZQ VUxTRSA0CisvKioKKyAqIGlndF9rbXNfZ2V0X2FsdF9lZGlkOgorICoKKyAqIEdldCBhbiBhbHRl cm5hdGUgZWRpZCBibG9jaywgd2hpY2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RlczoKKyAq CisgKiAgLSAxNDAweDEwNTAgNjBIegorICogIC0gMTkyMHgxMDgwIDYwSHoKKyAqICAtIDEyODB4 NzIwIDYwSHoKKyAqICAtIDEwMjR4NzY4IDYwSHoKKyAqICAtIDgwMHg2MDAgNjBIegorICogIC0g NjQweDQ4MCA2MEh6CisgKgorICogVGhpcyBjYW4gYmUgZXh0ZW5kZWQgd2l0aCBmdXJ0aGVyIGZl YXR1cmVzIHVzaW5nIGZ1bmN0aW9ucyBzdWNoIGFzCisgKiAja21zdGVzdF9lZGlkX2FkZF8zZC4K KyAqCisgKiBSZXR1cm5zOiBhbiBhbHRlcm5hdGUgZWRpZCBibG9jaworICovCitjb25zdCB1bnNp Z25lZCBjaGFyICppZ3Rfa21zX2dldF9hbHRfZWRpZCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qg ZWRpZCBlZGlkOworCWRybU1vZGVNb2RlSW5mbyBtb2RlID0ge307CisKKwltb2RlLmNsb2NrID0g MTAxMDAwOworCW1vZGUuaGRpc3BsYXkgPSAxNDAwOworCW1vZGUuaHN5bmNfc3RhcnQgPSAxNDQ4 OworCW1vZGUuaHN5bmNfZW5kID0gMTQ4MDsKKwltb2RlLmh0b3RhbCA9IDE1NjA7CisJbW9kZS52 ZGlzcGxheSA9IDEwNTA7CisJbW9kZS52c3luY19zdGFydCA9IDEwNTM7CisJbW9kZS52c3luY19l bmQgPSAxMDU3OworCW1vZGUudnRvdGFsID0gMTA4MDsKKwltb2RlLnZyZWZyZXNoID0gNjA7CiAK LSNkZWZpbmUgSFNJWkUgNTIKLSNkZWZpbmUgVlNJWkUgMzAKKwllZGlkX2luaXRfd2l0aF9tb2Rl KCZlZGlkLCAmbW9kZSk7CisJZWRpZF91cGRhdGVfY2hlY2tzdW0oJmVkaWQpOwogCi0jZGVmaW5l IEVESURfTkFNRSBhbHRfZWRpZAotI2luY2x1ZGUgImlndF9lZGlkX3RlbXBsYXRlLmgiCisJcmV0 dXJuICh1bnNpZ25lZCBjaGFyICopICZlZGlkOworfQogCiBjb25zdCBjaGFyICogY29uc3QgaWd0 X3BsYW5lX3Byb3BfbmFtZXNbSUdUX05VTV9QTEFORV9QUk9QU10gPSB7CiAJW0lHVF9QTEFORV9T UkNfWF0gPSAiU1JDX1giLApAQCAtMzAxLDMwICszMjIsNiBAQCBpZ3RfZmlsbF9waXBlX3Byb3Bz KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9waXBlX3QgKnBpcGUsCiAJZHJtTW9kZUZyZWVP YmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKIH0KIAotLyoqCi0gKiBpZ3Rfa21zX2dldF9hbHRfZWRp ZDoKLSAqCi0gKiBHZXQgYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2ssIHdoaWNoIGluY2x1ZGVzIHRo ZSBmb2xsb3dpbmcgbW9kZXM6Ci0gKgotICogIC0gMTQwMHgxMDUwIDYwSHoKLSAqICAtIDE5MjB4 MTA4MCA2MEh6Ci0gKiAgLSAxMjgweDcyMCA2MEh6Ci0gKiAgLSAxMDI0eDc2OCA2MEh6Ci0gKiAg LSA4MDB4NjAwIDYwSHoKLSAqICAtIDY0MHg0ODAgNjBIegotICoKLSAqIFRoaXMgY2FuIGJlIGV4 dGVuZGVkIHdpdGggZnVydGhlciBmZWF0dXJlcyB1c2luZyBmdW5jdGlvbnMgc3VjaCBhcwotICog I2ttc3Rlc3RfZWRpZF9hZGRfM2QuCi0gKgotICogUmV0dXJuczogYW4gYWx0ZXJuYXRlIGVkaWQg YmxvY2sKLSAqLwotY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0X2VkaWQodm9p ZCkKLXsKLQl1cGRhdGVfZWRpZF9jc3VtKGFsdF9lZGlkLCAwKTsKLQotCXJldHVybiBhbHRfZWRp ZDsKLX0KLQogLyoqCiAgKiBrbXN0ZXN0X3BpcGVfbmFtZToKICAqIEBwaXBlOiBkaXNwbGF5IHBp cGUKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCBh ODQ2MjkzMy4uMjBjMGUzZTYgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIv bWVzb24uYnVpbGQKQEAgLTU0LDcgKzU0LDggQEAgbGliX3NvdXJjZXMgPSBbCiAJJ2lndF92M2Qu YycsCiAJJ2lndF92YzQuYycsCiAJJ2lndF9wc3IuYycsCi0JJ2lndF9hbWQuYycKKwknaWd0X2Ft ZC5jJywKKwknaWd0X2VkaWQuYycsCiBdCiAKIGxpYl9kZXBzID0gWwotLSAKMi4yMS4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=