From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from web38807.mail.mud.yahoo.com ([209.191.125.98]) by www.linuxtv.org with smtp (Exim 4.63) (envelope-from ) id 1L2iyK-0002xk-8O for linux-dvb@linuxtv.org; Wed, 19 Nov 2008 10:03:44 +0100 Date: Wed, 19 Nov 2008 01:03:04 -0800 (PST) From: Uri Shkolnik To: Linux-dvb MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-809951509-1227085384=:42507" Message-ID: <270647.42507.qm@web38807.mail.mud.yahoo.com> Subject: [linux-dvb] [PATCH 2/5] SPI interface driver for Siano's SMS chip-set based devices. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-dvb-bounces@linuxtv.org Errors-To: linux-dvb-bounces+mchehab=infradead.org@linuxtv.org List-ID: --0-809951509-1227085384=:42507 Content-Type: text/plain; charset=us-ascii This patch provides SPI interface driver for SMS chip-set based devices. The patch includes common SMS SPI code, and adapter driver for PXA310 Signed-off-by: Uri Shkolnik --0-809951509-1227085384=:42507 Content-Type: text/x-diff; name="smsspi_patch.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smsspi_patch.diff" VGhpcyBwYXRjaCBwcm92aWRlcyBTUEkgaW50ZXJmYWNlIGRyaXZlciBmb3Ig U01TIGNoaXAtc2V0IGJhc2VkIGRldmljZXMuClRoZSBwYXRjaCBpbmNsdWRl cyBjb21tb24gU01TIFNQSSBjb2RlLCBhbmQgYWRhcHRlciBkcml2ZXIgZm9y IFBYQTMxMAoKClNpZ25lZC1vZmYtYnk6IFVyaSBTaGtvbG5payA8dXJpc0Bz aWFuby1tcy5jb20+CgpkaWZmIC11TnIgdjRsLWR2Yi1jNWY5NzZjYWIwMTEv bGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZGJnX3Bybi5oIHY0 bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJpdmVycy9tZWRpYS9k dmIvc2lhbm8vc21zZGJnX3Bybi5oCi0tLSB2NGwtZHZiLWM1Zjk3NmNhYjAx MS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkYmdfcHJuLmgJ MTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIHY0bC1k dmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJpdmVycy9tZWRpYS9kdmIv c2lhbm8vc21zZGJnX3Bybi5oCTIwMDgtMTEtMTggMTg6MTQ6MzQuMDAwMDAw MDAwICswMjAwCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisKK1NpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCitNRFRWIHJlY2Vp dmVyIGtlcm5lbCBtb2R1bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgs IFVyaSBTaGtvbG5paworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiso YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVm IF9TTVNfREJHX0hfCisjZGVmaW5lIF9TTVNfREJHX0hfCisKKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYnVnIFpv bmVzIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworI3VuZGVmIFBFUlJPUgorIyAgZGVmaW5lIFBFUlJPUihmbXQsIGFy Z3MuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgInNwaWJ1cyBlcnJvcjogbGlu ZSAlZC0gJXMoKTogIiBmbXQsIF9fTElORV9fLFwKKwkgIF9fZnVuY19fLCAj IyBhcmdzKQorI3VuZGVmIFBXQVJOSU5HCisjICBkZWZpbmUgUFdBUk5JTkco Zm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAic3BpYnVz IHdhcm5pbmc6IGxpbmUgJWQtICVzKCk6ICIgZm10LCBfX0xJTkVfXywgIFwK KwlfX2Z1bmNfXywgIyMgYXJncykKKworLyogdGhlIGRlYnVnIG1hY3JvIC0g Y29uZGl0aW9uYWwgY29tcGlsYXRpb24gZnJvbSB0aGUgbWFrZWZpbGUgKi8K KyN1bmRlZiBQREVCVUcJCQkvKiB1bmRlZiBpdCwganVzdCBpbiBjYXNlICov CisjaWZkZWYgU1BJQlVTX0RFQlVHCisjICBkZWZpbmUgUERFQlVHKGZtdCwg YXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICJzcGlidXM6IGxpbmUg JWQtICVzKCk6ICIgZm10LCBfX0xJTkVfXywgXAorCSBfX2Z1bmNfXywgIyMg YXJncykKKyNlbHNlCisjICBkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikJ Lyogbm90IGRlYnVnZ2luZzogbm90aGluZyAqLworI2VuZGlmCisKKy8qIFRo ZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgdXNlZCBmb3IgcHJpbnRpbmcgYW5k CithcmUgbWFuZGF0b3J5IGZvciBjb21waWxhdGlvbi4gKi8KKyNkZWZpbmUg VFhUKHN0cikgc3RyCisjZGVmaW5lIFBSTl9EQkcoc3RyKSBQREVCVUcgc3Ry CisjZGVmaW5lIFBSTl9FUlIoc3RyKSBQRVJST1Igc3RyCisKKyNlbmRpZiAv Kl9TTVNfREJHX0hfKi8KZGlmZiAtdU5yIHY0bC1kdmItYzVmOTc2Y2FiMDEx L2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWNvbW1vbi5j IHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJpdmVycy9tZWRp YS9kdmIvc2lhbm8vc21zc3BpY29tbW9uLmMKLS0tIHY0bC1kdmItYzVmOTc2 Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWNv bW1vbi5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisr KyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVk aWEvZHZiL3NpYW5vL3Ntc3NwaWNvbW1vbi5jCTIwMDgtMTEtMTggMTg6MTM6 MzcuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMzI2IEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorCitTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgor TURUViByZWNlaXZlciBrZXJuZWwgbW9kdWxlcy4KK0NvcHlyaWdodCAoQykg MjAwNi0yMDA4LCBVcmkgU2hrb2xuaWsKKworVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKworKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KyNpbmNsdWRlICJzbXNzcGljb21tb24uaCIKKyNpbmNsdWRlICJzbXNkYmdf cHJuLmgiCisKK3N0YXRpYyBpbnQgc21zc3BpX2NvbW1vbl9maW5kX21zZyhz dHJ1Y3Qgc3BpX2RldiAqZGV2LCByeF9idWZmZXJfc3QgKiBidWYsCisJCQkJ ICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgKnVudXNlZF9ieXRlcykKK3sK KwlpbnQgaSwgbWlzc2luZ19ieXRlczsKKwlpbnQgcmVjaWV2ZWRfYnl0ZXMs IHBhZGRlZF9tc2dfbGVuOworCWludCBhbGlnbl9maXg7CisJY2hhciAqcHRy ID0gKGNoYXIgKilidWYtPnB0ciArIG9mZnNldDsKKworCVBSTl9EQkcoKFRY VCgiZW50ZXJpbmcgd2l0aCAlZCBieXRlcy5cbiIpLCBsZW4pKTsKKwltaXNz aW5nX2J5dGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHB0 cisrKSB7CisJCXN3aXRjaCAoZGV2LT5yeFN0YXRlKSB7CisJCWNhc2UgUnhz V2FpdF9hNToKKwkJCWRldi0+cnhTdGF0ZSA9CisJCQkgICAgKCgqcHRyICYg MHhmZikgPT0gMHhhNSkgPyBSeHNXYWl0XzVhIDogUnhzV2FpdF9hNTsKKwkJ CWRldi0+cnhQYWNrZXQubXNnX29mZnNldCA9CisJCQkgICAgKHVuc2lnbmVk IGxvbmcpcHRyIC0gKHVuc2lnbmVkIGxvbmcpYnVmLT5wdHIgKyA0OworCQkJ YnJlYWs7CisJCWNhc2UgUnhzV2FpdF81YToKKwkJCWRldi0+cnhTdGF0ZSA9 CisJCQkgICAgKCgqcHRyICYgMHhmZikgPT0gMHg1YSkgPyBSeHNXYWl0X2U3 IDogUnhzV2FpdF9hNTsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4i KSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNXYWl0 X2U3OgorCQkJZGV2LT5yeFN0YXRlID0KKwkJCSAgICAoKCpwdHIgJiAweGZm KSA9PSAweGU3KSA/IFJ4c1dhaXRfN2UgOiBSeHNXYWl0X2E1OworCQkJUFJO X0RCRygoVFhUKCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJ CWJyZWFrOworCQljYXNlIFJ4c1dhaXRfN2U6CisJCQlkZXYtPnJ4U3RhdGUg PQorCQkJICAgICgoKnB0ciAmIDB4ZmYpID09IDB4N2UpID8gUnhzVHlwZUgg OiBSeHNXYWl0X2E1OworCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5cbiIp LCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJ4c1R5cGVI OgorCQkJZGV2LT5yeFBhY2tldC5tc2dfYnVmID0gYnVmOworCQkJZGV2LT5y eFBhY2tldC5tc2dfb2Zmc2V0ID0KKwkJCSAgICAodW5zaWduZWQgbG9uZylw dHIgLSAodW5zaWduZWQgbG9uZylidWYtPnB0cjsKKwkJCWRldi0+cnhTdGF0 ZSA9IFJ4c1R5cGVMOworCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5cbiIp LCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJ4c1R5cGVM OgorCQkJZGV2LT5yeFN0YXRlID0gUnhzR2V0U3JjSWQ7CisJCQlQUk5fREJH KChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkpOworCQkJYnJl YWs7CisJCWNhc2UgUnhzR2V0U3JjSWQ6CisJCQlkZXYtPnJ4U3RhdGUgPSBS eHNHZXREc3RJZDsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwg ZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNHZXREc3RJ ZDoKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4c0dldExlbkw7CisJCQlQUk5fREJH KChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkpOworCQkJYnJl YWs7CisJCWNhc2UgUnhzR2V0TGVuTDoKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4 c0dldExlbkg7CisJCQlkZXYtPnJ4UGFja2V0Lm1zZ19sZW4gPSAoKnB0ciAm IDB4ZmYpOworCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5cbiIpLCBkZXYt PnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJ4c0dldExlbkg6CisJ CQlkZXYtPnJ4U3RhdGUgPSBSeHNGbGFnc0w7CisJCQlkZXYtPnJ4UGFja2V0 Lm1zZ19sZW4gKz0gKCpwdHIgJiAweGZmKSA8PCA4OworCQkJUFJOX0RCRygo VFhUKCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFr OworCQljYXNlIFJ4c0ZsYWdzTDoKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4c0Zs YWdzSDsKKwkJCWRldi0+cnhQYWNrZXQubXNnX2ZsYWdzID0gKCpwdHIgJiAw eGZmKTsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5y eFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNGbGFnc0g6CisJCQlk ZXYtPnJ4U3RhdGUgPSBSeHNEYXRhOworCQkJZGV2LT5yeFBhY2tldC5tc2df ZmxhZ3MgKz0gKCpwdHIgJiAweGZmKSA8PCA4OworCQkJUFJOX0RCRygoVFhU KCJzdGF0ZSAlZC5cbiIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOwor CQljYXNlIFJ4c0RhdGE6CisJCQlyZWNpZXZlZF9ieXRlcyA9CisJCQkgICAg bGVuICsgb2Zmc2V0IC0gZGV2LT5yeFBhY2tldC5tc2dfb2Zmc2V0OworCQkJ cGFkZGVkX21zZ19sZW4gPQorCQkJICAgICgoZGV2LT5yeFBhY2tldC5tc2df bGVuICsgNCArIFNQSV9QQUNLRVRfU0laRSAtCisJCQkgICAgICAxKSA+PiBT UElfUEFDS0VUX1NJWkVfQklUUykgPDwKKwkJCSAgICBTUElfUEFDS0VUX1NJ WkVfQklUUzsKKwkJCWlmIChyZWNpZXZlZF9ieXRlcyA8IHBhZGRlZF9tc2df bGVuKSB7CisJCQkJKnVudXNlZF9ieXRlcyA9IDA7CisJCQkJcmV0dXJuIHBh ZGRlZF9tc2dfbGVuIC0gcmVjaWV2ZWRfYnl0ZXM7CisJCQl9CisJCQlkZXYt PnJ4U3RhdGUgPSBSeHNXYWl0X2E1OworCQkJaWYgKGRldi0+Y2IubXNnX2Zv dW5kX2NiKSB7CisJCQkJYWxpZ25fZml4ID0gMDsKKwkJCQlpZiAoZGV2LT5y eFBhY2tldC4KKwkJCQkgICAgbXNnX2ZsYWdzICYgTVNHX0hEUl9GTEFHX1NQ TElUX01TR19IRFIpIHsKKwkJCQkJYWxpZ25fZml4ID0KKwkJCQkJICAgIChk ZXYtPnJ4UGFja2V0LgorCQkJCQkgICAgIG1zZ19mbGFncyA+PiA4KSAmIDB4 MzsKKwkJCQkJaWYgKGFsaWduX2ZpeCkgeworCQkJCQkvKiBUaGUgRlcgYWxs aWduZWQgdGhlIG1lc3NhZ2UgZGF0YQorCQkJCQl0aGVyZWZvcmUgLSBhbGxp Z21lbnQgYnl0ZXMgc2hvdWxkIGJlCisJCQkJCXRocm93biBhd2F5LiBUaHJv dyB0aGUgYWxpZ21lbnQgYnl0ZXMKKwkJCQkJYnkgbW92aW5nIHRoZSBoZWFk ZXIgYWhlYWQgb3ZlciB0aGUKKwkJCQkJYWxsaWdtZW50IGJ5dGVzLiAqLwor CQkJCQkJcHRyID0KKwkJCQkJCSAgICAoY2hhciAqKWRldi0+cnhQYWNrZXQu CisJCQkJCQkgICAgbXNnX2J1Zi0+cHRyICsKKwkJCQkJCSAgICBkZXYtPnJ4 UGFja2V0Lm1zZ19vZmZzZXQ7CisKKwkJCQkJCS8qIFJlc3RvcmUgaGVhZGVy IHRvIG9yaWdpbmFsCisJCQkJCQlzdGF0ZSBiZWZvcmUgYWxpZ25tZW50IGNo YW5nZXMKKwkJCQkJCSovCisJCQkJCQl1MTYgbGVuZ3RoID0KKwkJCQkJCSAg ICAocHRyWzVdIDw8IDgpIHwgcHRyWzRdOworCQkJCQkJbGVuZ3RoIC09IGFs aWduX2ZpeDsKKwkJCQkJCXB0cls1XSA9IGxlbmd0aCA+PiA4OworCQkJCQkJ cHRyWzRdID0gbGVuZ3RoICYgMHhmZjsKKwkJCQkJCS8qIFplcm8gYWxpZ25t ZW50IGZsYWdzICovCisJCQkJCQlwdHJbN10gJj0gMHhmYzsKKworCQkJCQkJ Zm9yIChpID0gTVNHX0hEUl9MRU4gLSAxOworCQkJCQkJICAgICBpID49IDA7 IGktLSkgeworCQkJCQkJCXB0cltpICsgYWxpZ25fZml4XSA9CisJCQkJCQkJ ICAgIHB0cltpXTsKKwkJCQkJCX0KKwkJCQkJCWRldi0+cnhQYWNrZXQubXNn X29mZnNldCArPQorCQkJCQkJICAgIGFsaWduX2ZpeDsKKwkJCQkJfQorCQkJ CX0KKworCQkJCVBSTl9EQkcoKFRYVAorCQkJCSgiTXNnIGZvdW5kIGFuZCBz ZW50IHRvIGNhbGxiYWNrIGZ1bmMuXG4iKSkpOworCQkJCWRldi0+Y2IubXNn X2ZvdW5kX2NiKGRldi0+Y29udGV4dCwKKwkJCQkJCSAgICAgZGV2LT5yeFBh Y2tldC5tc2dfYnVmLAorCQkJCQkJICAgICBkZXYtPnJ4UGFja2V0Lm1zZ19v ZmZzZXQsCisJCQkJCQkgICAgIGRldi0+cnhQYWNrZXQubXNnX2xlbiAtCisJ CQkJCQkgICAgIGFsaWduX2ZpeCk7CisJCQkJKnVudXNlZF9ieXRlcyA9CisJ CQkJICAgIGxlbiArIG9mZnNldCAtIGRldi0+cnhQYWNrZXQubXNnX29mZnNl dCAtCisJCQkJICAgIGRldi0+cnhQYWNrZXQubXNnX2xlbjsKKwkJCQlpZiAo KnVudXNlZF9ieXRlcyA9PSAwKQorCQkJCQkqdW51c2VkX2J5dGVzID0gLTE7 CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCVBSTl9EQkcoKFRY VAorCQkgKCJNc2cgZm91bmQgYnV0IG5vIGNhbGxiYWNrLiB0aGVyZWZvcmUg LSB0aHJvd24gYXdheS5cbiIpKSk7CisJCQl9CisJCQlQUk5fREJHKChUWFQo InN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkpOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlpZiAoZGV2LT5yeFN0YXRlID09IFJ4c1dhaXRfYTUpIHsK KwkJKnVudXNlZF9ieXRlcyA9IDA7CisJCXJldHVybiAwOworCX0gZWxzZSB7 CisJCS8qIFdvcmthcm91bmQgdG8gY29ybmVyIGNhc2U6IGlmIHRoZSBsYXN0 IGJ5dGUgb2YgdGhlIGJ1ZmZlcgorCQlpcyAiYTUiIChmaXJzdCBieXRlIG9m IHRoZSBwcmVhbWJsZSksIHRoZSBob3N0IHRoaW5rcyBpdCBzaG91bGQKKwkJ c2VuZCBhbm90aGVyIDI1NiBieXRlcy4gIEluIGNhc2UgdGhlIGE1IGlzIHRo ZSBmaXJtd2FyZQorCQl1bmRlcmZsb3cgYnl0ZSwgdGhpcyB3aWxsIGNhdXNl IGFuIGluZmluaXRlIGxvb3AsIHNvIHdlIGNoZWNrCisJCWZvciB0aGlzIGNh c2UgZXhwbGljaXR5LiAqLworCQlpZiAoKGRldi0+cnhTdGF0ZSA9PSBSeHNX YWl0XzVhKSAmJiAoKihwdHIgLSAyKSA9PSAweGE1KSkgeworCQkJZGV2LT5y eFN0YXRlID0gUnhzV2FpdF9hNTsKKwkJCSp1bnVzZWRfYnl0ZXMgPSAwOwor CQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZGV2LT5yeFBhY2tldC5tc2df b2Zmc2V0ID49IChTUElfUEFDS0VUX1NJWkUgKyA0KSkKKwkJCS8qIGFkZGlu ZyA0IGZvciB0aGUgcHJlYW1ibGUuICovCisJCXsJCS8qVGhlIHBhY2tldCB3 aWxsIGJlIGNvcGllZCB0byBhIG5ldyBidWZmZXIKKwkJCQkgICBhbmQgcmVz Y2FuZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKwkJCSp1bnVzZWRfYnl0 ZXMgPSBkZXYtPnJ4U3RhdGUgLSBSeHNXYWl0X2E1OworCQkJZGV2LT5yeFN0 YXRlID0gUnhzV2FpdF9hNTsKKwkJCWRldi0+Y2IuZnJlZV9yeF9idWYoZGV2 LT5jb250ZXh0LCBidWYpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJ CQkvKiByZXBvcnQgbWlzc2luZyBieXRlcyBhbmQgY29udGludWUKKwkJCSAg IHdpdGggbWVzc2FnZSBzY2FuLiAqLworCQkJKnVudXNlZF9ieXRlcyA9IDA7 CisJCQlyZXR1cm4gU1BJX1BBQ0tFVF9TSVpFOworCQl9CisJfQorfQorCit2 b2lkIHNtc3NwaV9jb21tb25fdHJhbnNmZXJfbXNnKHN0cnVjdCBzcGlfZGV2 ICpkZXYsIHN0cnVjdCBzcGlfbXNnICp0eG1zZywKKwkJCQlpbnQgcGFkZGlu Z19hbGxvd2VkKQoreworCWludCBsZW4sIGJ5dGVzX3RvX3RyYW5zZmVyOwor CXVuc2lnbmVkIGxvbmcgdHhfcGh5X2FkZHI7CisJaW50IG1pc3NpbmdfYnl0 ZXMsIHR4X2J5dGVzOworCWludCBvZmZzZXQsIHVudXNlZF9ieXRlczsKKwlp bnQgYWxpZ25fYmxvY2s7CisJY2hhciAqdHhidWY7CisJcnhfYnVmZmVyX3N0 ICogYnVmLCAqdG1wX2J1ZjsKKworCWxlbiA9IDA7CisJaWYgKCFkZXYtPmNi LnRyYW5zZmVyX2RhdGFfY2IpIHsKKwkJUFJOX0VSUigoVFhUCisJCSgiZnVu Y3Rpb24gY2FsbGVkIHdoaWxlIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQu XG4iKSkpOworCQlyZXR1cm47CisJfQorCWlmICh0eG1zZyA9PSAwKSB7CisJ CWJ5dGVzX3RvX3RyYW5zZmVyID0gU1BJX1BBQ0tFVF9TSVpFOworCQl0eGJ1 ZiA9IDA7CisJCXR4X3BoeV9hZGRyID0gMDsKKwkJdHhfYnl0ZXMgPSAwOwor CX0gZWxzZSB7CisJCXR4X2J5dGVzID0gdHhtc2ctPmxlbjsKKwkJaWYgKHBh ZGRpbmdfYWxsb3dlZCkKKwkJCWJ5dGVzX3RvX3RyYW5zZmVyID0KKwkJCSAg ICAoKCh0eF9ieXRlcyArIFNQSV9QQUNLRVRfU0laRSAtCisJCQkgICAgICAg MSkgPj4gU1BJX1BBQ0tFVF9TSVpFX0JJVFMpIDw8CisJCQkgICAgIFNQSV9Q QUNLRVRfU0laRV9CSVRTKTsKKwkJZWxzZQorCQkJYnl0ZXNfdG9fdHJhbnNm ZXIgPSAoKCh0eF9ieXRlcyArIDMpID4+IDIpIDw8IDIpOworCQl0eGJ1ZiA9 IHR4bXNnLT5idWY7CisJCXR4X3BoeV9hZGRyID0gdHhtc2ctPmJ1Zl9waHlf YWRkcjsKKwl9CisJb2Zmc2V0ID0gMDsKKwl1bnVzZWRfYnl0ZXMgPSAwOwor CWJ1ZiA9CisJICAgIGRldi0+Y2IuYWxsb2NhdGVfcnhfYnVmKGRldi0+Y29u dGV4dCwKKwkJCQkgICAgUlhfUEFDS0VUX1NJWkUgKyBTUElfUEFDS0VUX1NJ WkUpOworCWlmICghYnVmKSB7CisJCVBSTl9FUlIoKFRYVCgiRmFpbGVkIHRv IGFsbG9jYXRlIFJYIGJ1ZmZlci5cbiIpKSk7CisJCXJldHVybjsKKwl9CisJ d2hpbGUgKGJ5dGVzX3RvX3RyYW5zZmVyIHx8IHVudXNlZF9ieXRlcykgewor CQlpZiAoKHVudXNlZF9ieXRlcyA8PSAwKSAmJiAoYnl0ZXNfdG9fdHJhbnNm ZXIgPiAwKSkgeworCQkJbGVuID0gbWluKGJ5dGVzX3RvX3RyYW5zZmVyLCBS WF9QQUNLRVRfU0laRSk7CisJCQlQUk5fREJHKChUWFQoInRyYW5zZmVyaW5n IGJsb2NrIG9mICVkIGJ5dGVzXG4iKSwgbGVuKSk7CisJCQlkZXYtPmNiLnRy YW5zZmVyX2RhdGFfY2IoZGV2LT5waHlfY29udGV4dCwgdHhidWYsCisJCQkJ CQkgdHhfcGh5X2FkZHIsCisJCQkJCQkgKGNoYXIgKilidWYtPnB0ciArIG9m ZnNldCwKKwkJCQkJCSBidWYtPnBoeV9hZGRyICsgb2Zmc2V0LCBsZW4pOwor CQl9CisJCW1pc3NpbmdfYnl0ZXMgPQorCQkgICAgc21zc3BpX2NvbW1vbl9m aW5kX21zZyhkZXYsIGJ1Ziwgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICZ1bnVz ZWRfYnl0ZXMpOworCQlpZiAoYnl0ZXNfdG9fdHJhbnNmZXIpCisJCQlieXRl c190b190cmFuc2ZlciAtPSBsZW47CisKKwkJaWYgKHR4X2J5dGVzKQorCQkJ dHhfYnl0ZXMgLT0gbGVuOworCisJCWlmIChtaXNzaW5nX2J5dGVzKQorCQkJ b2Zmc2V0ICs9IGxlbjsKKworCQlpZiAodW51c2VkX2J5dGVzKSB7CisJCQl0 bXBfYnVmID0KKwkJCSAgICBkZXYtPmNiLmFsbG9jYXRlX3J4X2J1ZihkZXYt PmNvbnRleHQsCisJCQkJCQkgICAgUlhfUEFDS0VUX1NJWkUpOworCQkJaWYg KCF0bXBfYnVmKSB7CisJCQkJUFJOX0VSUigoVFhUCisJCQkJCSAoIkZhaWxl ZCB0byBhbGxvY2F0ZSBSWCBidWZmZXIuXG4iKSkpOworCQkJCXJldHVybjsK KwkJCX0KKwkJCWlmICh1bnVzZWRfYnl0ZXMgPiAwKSB7CisJCQkJLyogQ29w eSB0aGUgcmVtYWluaW5nIGJ5dGVzIHRvIHRoZSBlbmQgb2YKKwkJCQkgICBh bGluZ21lbnQgYmxvY2sgKDI1NiBieXRlcykgc28gbmV4dCByZWFkCisJCQkJ ICAgd2lsbCBiZSBhbGxpZ25lZC4gKi8KKwkJCQlhbGlnbl9ibG9jayA9CisJ CQkJICAgICgoKHVudXNlZF9ieXRlcyArIFNQSV9QQUNLRVRfU0laRSAtCisJ CQkJICAgICAgIDEpID4+IFNQSV9QQUNLRVRfU0laRV9CSVRTKSA8PAorCQkJ CSAgICAgU1BJX1BBQ0tFVF9TSVpFX0JJVFMpOworCQkJCW1lbXNldCh0bXBf YnVmLT5wdHIsIDAsCisJCQkJICAgICAgIGFsaWduX2Jsb2NrIC0gdW51c2Vk X2J5dGVzKTsKKwkJCQltZW1jcHkoKGNoYXIgKil0bXBfYnVmLT5wdHIgKwor CQkJCSAgICAgICAoYWxpZ25fYmxvY2sgLSB1bnVzZWRfYnl0ZXMpLAorCQkJ CSAgICAgICAoY2hhciAqKWJ1Zi0+cHRyICsgb2Zmc2V0ICsgbGVuIC0KKwkJ CQkgICAgICAgdW51c2VkX2J5dGVzLCB1bnVzZWRfYnl0ZXMpOworCQkJCWxl biA9IGFsaWduX2Jsb2NrOworCQkJfQorCQkJb2Zmc2V0ID0gMDsKKwkJCWJ1 ZiA9IHRtcF9idWY7CisJCX0KKwkJaWYgKHR4X2J5dGVzIDw9IDApIHsKKwkJ CXR4YnVmID0gMDsKKwkJCXR4X2J5dGVzID0gMDsKKwkJfQorCQlpZiAoYnl0 ZXNfdG9fdHJhbnNmZXIgPCBtaXNzaW5nX2J5dGVzKSB7CisJCQlieXRlc190 b190cmFuc2ZlciA9CisJCQkgICAgKCgobWlzc2luZ19ieXRlcyArIFNQSV9Q QUNLRVRfU0laRSAtCisJCQkgICAgICAgMSkgPj4gU1BJX1BBQ0tFVF9TSVpF X0JJVFMpIDw8CisJCQkgICAgIFNQSV9QQUNLRVRfU0laRV9CSVRTKTsKKwkJ CVBSTl9EQkcoKFRYVAorCSgiYSBtZXNzYWdlIHdhcyBmb3VuZCwgYWRkaW5n IGJ5dGVzIHRvIHRyYW5zZmVyLCB0eG1zZyAlZCwgdG90YWwgJWRcbiIpCisJ CQksIHR4X2J5dGVzLCBieXRlc190b190cmFuc2ZlcikpOworCQl9CisJfQor CWRldi0+Y2IuZnJlZV9yeF9idWYoZGV2LT5jb250ZXh0LCBidWYpOworfQor CitpbnQgc21zc3BpY29tbW9uX2luaXQoc3RydWN0IHNwaV9kZXYgKmRldiwg dm9pZCAqY29udGV4dCwgdm9pZCAqcGh5X2NvbnRleHQsCisJCSAgICAgIHNw aV9kZXZfY2Jfc3QgKmNiKQoreworCVBSTl9EQkcoKFRYVCgiZW50ZXJpbmcu XG4iKSkpOworCWlmIChjYi0+dHJhbnNmZXJfZGF0YV9jYiA9PSAwIHx8CisJ ICAgIGNiLT5tc2dfZm91bmRfY2IgPT0gMCB8fAorCSAgICBjYi0+YWxsb2Nh dGVfcnhfYnVmID09IDAgfHwgY2ItPmZyZWVfcnhfYnVmID09IDApIHsKKwkJ UFJOX0VSUigoVFhUKCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgb2YgaW5p dCByb3V0aW5lLlxuIikpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlkZXYtPmNv bnRleHQgPSBjb250ZXh0OworCWRldi0+cGh5X2NvbnRleHQgPSBwaHlfY29u dGV4dDsKKwltZW1jcHkoJmRldi0+Y2IsIGNiLCBzaXplb2Yoc3BpX2Rldl9j Yl9zdCkpOworCWRldi0+cnhTdGF0ZSA9IFJ4c1dhaXRfYTU7CisJUFJOX0RC RygoVFhUKCJleGl0aW5nLlxuIikpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAt dU5yIHY0bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEv ZHZiL3NpYW5vL3Ntc3NwaWNvbW1vbi5jfiB2NGwtZHZiLWM1Zjk3NmNhYjAx MV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWNv bW1vbi5jfgotLS0gdjRsLWR2Yi1jNWY5NzZjYWIwMTEvbGludXgvZHJpdmVy cy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpY29tbW9uLmN+CTE5NzAtMDEtMDEg MDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyB2NGwtZHZiLWM1Zjk3NmNh YjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3Nw aWNvbW1vbi5jfgkyMDA4LTExLTE4IDE4OjEzOjM3LjAwMDAwMDAwMCArMDIw MApAQCAtMCwwICsxLDMyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwor U2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4KK01EVFYgcmVjZWl2ZXIga2Vy bmVsIG1vZHVsZXMuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgVXJpIFNo a29sbmlrCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic21zc3Bp Y29tbW9uLmgiCisjaW5jbHVkZSAic21zZGJnX3Bybi5oIgorCitzdGF0aWMg aW50IHNtc3NwaV9jb21tb25fZmluZF9tc2coc3RydWN0IHNwaV9kZXYgKmRl diwgcnhfYnVmZmVyX3N0ICogYnVmLAorCQkJCSAgaW50IG9mZnNldCwgaW50 IGxlbiwgaW50ICp1bnVzZWRfYnl0ZXMpCit7CisJaW50IGksIG1pc3Npbmdf Ynl0ZXM7CisJaW50IHJlY2lldmVkX2J5dGVzLCBwYWRkZWRfbXNnX2xlbjsK KwlpbnQgYWxpZ25fZml4OworCWNoYXIgKnB0ciA9IChjaGFyICopYnVmLT5w dHIgKyBvZmZzZXQ7CisKKwlQUk5fREJHKChUWFQoImVudGVyaW5nIHdpdGgg JWQgYnl0ZXMuXG4iKSwgbGVuKSk7CisJbWlzc2luZ19ieXRlcyA9IDA7CisJ Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBwdHIrKykgeworCQlzd2l0Y2gg KGRldi0+cnhTdGF0ZSkgeworCQljYXNlIFJ4c1dhaXRfYTU6CisJCQlkZXYt PnJ4U3RhdGUgPQorCQkJICAgICgoKnB0ciAmIDB4ZmYpID09IDB4YTUpID8g UnhzV2FpdF81YSA6IFJ4c1dhaXRfYTU7CisJCQlkZXYtPnJ4UGFja2V0Lm1z Z19vZmZzZXQgPQorCQkJICAgICh1bnNpZ25lZCBsb25nKXB0ciAtICh1bnNp Z25lZCBsb25nKWJ1Zi0+cHRyICsgNDsKKwkJCWJyZWFrOworCQljYXNlIFJ4 c1dhaXRfNWE6CisJCQlkZXYtPnJ4U3RhdGUgPQorCQkJICAgICgoKnB0ciAm IDB4ZmYpID09IDB4NWEpID8gUnhzV2FpdF9lNyA6IFJ4c1dhaXRfYTU7CisJ CQlQUk5fREJHKChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkp OworCQkJYnJlYWs7CisJCWNhc2UgUnhzV2FpdF9lNzoKKwkJCWRldi0+cnhT dGF0ZSA9CisJCQkgICAgKCgqcHRyICYgMHhmZikgPT0gMHhlNykgPyBSeHNX YWl0XzdlIDogUnhzV2FpdF9hNTsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUg JWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBS eHNXYWl0XzdlOgorCQkJZGV2LT5yeFN0YXRlID0KKwkJCSAgICAoKCpwdHIg JiAweGZmKSA9PSAweDdlKSA/IFJ4c1R5cGVIIDogUnhzV2FpdF9hNTsKKwkJ CVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7 CisJCQlicmVhazsKKwkJY2FzZSBSeHNUeXBlSDoKKwkJCWRldi0+cnhQYWNr ZXQubXNnX2J1ZiA9IGJ1ZjsKKwkJCWRldi0+cnhQYWNrZXQubXNnX29mZnNl dCA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpcHRyIC0gKHVuc2lnbmVkIGxv bmcpYnVmLT5wdHI7CisJCQlkZXYtPnJ4U3RhdGUgPSBSeHNUeXBlTDsKKwkJ CVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7 CisJCQlicmVhazsKKwkJY2FzZSBSeHNUeXBlTDoKKwkJCWRldi0+cnhTdGF0 ZSA9IFJ4c0dldFNyY0lkOworCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5c biIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJ4c0dl dFNyY0lkOgorCQkJZGV2LT5yeFN0YXRlID0gUnhzR2V0RHN0SWQ7CisJCQlQ Uk5fREJHKChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkpOwor CQkJYnJlYWs7CisJCWNhc2UgUnhzR2V0RHN0SWQ6CisJCQlkZXYtPnJ4U3Rh dGUgPSBSeHNHZXRMZW5MOworCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5c biIpLCBkZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJ4c0dl dExlbkw6CisJCQlkZXYtPnJ4U3RhdGUgPSBSeHNHZXRMZW5IOworCQkJZGV2 LT5yeFBhY2tldC5tc2dfbGVuID0gKCpwdHIgJiAweGZmKTsKKwkJCVBSTl9E QkcoKFRYVCgic3RhdGUgJWQuXG4iKSwgZGV2LT5yeFN0YXRlKSk7CisJCQli cmVhazsKKwkJY2FzZSBSeHNHZXRMZW5IOgorCQkJZGV2LT5yeFN0YXRlID0g UnhzRmxhZ3NMOworCQkJZGV2LT5yeFBhY2tldC5tc2dfbGVuICs9ICgqcHRy ICYgMHhmZikgPDwgODsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4i KSwgZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNGbGFn c0w6CisJCQlkZXYtPnJ4U3RhdGUgPSBSeHNGbGFnc0g7CisJCQlkZXYtPnJ4 UGFja2V0Lm1zZ19mbGFncyA9ICgqcHRyICYgMHhmZik7CisJCQlQUk5fREJH KChUWFQoInN0YXRlICVkLlxuIiksIGRldi0+cnhTdGF0ZSkpOworCQkJYnJl YWs7CisJCWNhc2UgUnhzRmxhZ3NIOgorCQkJZGV2LT5yeFN0YXRlID0gUnhz RGF0YTsKKwkJCWRldi0+cnhQYWNrZXQubXNnX2ZsYWdzICs9ICgqcHRyICYg MHhmZikgPDwgODsKKwkJCVBSTl9EQkcoKFRYVCgic3RhdGUgJWQuXG4iKSwg ZGV2LT5yeFN0YXRlKSk7CisJCQlicmVhazsKKwkJY2FzZSBSeHNEYXRhOgor CQkJcmVjaWV2ZWRfYnl0ZXMgPQorCQkJICAgIGxlbiArIG9mZnNldCAtIGRl di0+cnhQYWNrZXQubXNnX29mZnNldDsKKwkJCXBhZGRlZF9tc2dfbGVuID0K KwkJCSAgICAoKGRldi0+cnhQYWNrZXQubXNnX2xlbiArIDQgKyBTUElfUEFD S0VUX1NJWkUgLQorCQkJICAgICAgMSkgPj4gU1BJX1BBQ0tFVF9TSVpFX0JJ VFMpIDw8CisJCQkgICAgU1BJX1BBQ0tFVF9TSVpFX0JJVFM7CisJCQlpZiAo cmVjaWV2ZWRfYnl0ZXMgPCBwYWRkZWRfbXNnX2xlbikgeworCQkJCSp1bnVz ZWRfYnl0ZXMgPSAwOworCQkJCXJldHVybiBwYWRkZWRfbXNnX2xlbiAtIHJl Y2lldmVkX2J5dGVzOworCQkJfQorCQkJZGV2LT5yeFN0YXRlID0gUnhzV2Fp dF9hNTsKKwkJCWlmIChkZXYtPmNiLm1zZ19mb3VuZF9jYikgeworCQkJCWFs aWduX2ZpeCA9IDA7CisJCQkJaWYgKGRldi0+cnhQYWNrZXQuCisJCQkJICAg IG1zZ19mbGFncyAmIE1TR19IRFJfRkxBR19TUExJVF9NU0dfSERSKSB7CisJ CQkJCWFsaWduX2ZpeCA9CisJCQkJCSAgICAoZGV2LT5yeFBhY2tldC4KKwkJ CQkJICAgICBtc2dfZmxhZ3MgPj4gOCkgJiAweDM7CisJCQkJCWlmIChhbGln bl9maXgpIHsKKwkJCQkJLyogVGhlIEZXIGFsbGlnbmVkIHRoZSBtZXNzYWdl IGRhdGEKKwkJCQkJdGhlcmVmb3JlIC0gYWxsaWdtZW50IGJ5dGVzIHNob3Vs ZCBiZQorCQkJCQl0aHJvd24gYXdheS4gVGhyb3cgdGhlIGFsaWdtZW50IGJ5 dGVzCisJCQkJCWJ5IG1vdmluZyB0aGUgaGVhZGVyIGFoZWFkIG92ZXIgdGhl CisJCQkJCWFsbGlnbWVudCBieXRlcy4gKi8KKwkJCQkJCXB0ciA9CisJCQkJ CQkgICAgKGNoYXIgKilkZXYtPnJ4UGFja2V0LgorCQkJCQkJICAgIG1zZ19i dWYtPnB0ciArCisJCQkJCQkgICAgZGV2LT5yeFBhY2tldC5tc2dfb2Zmc2V0 OworCisJCQkJCQkvKiBSZXN0b3JlIGhlYWRlciB0byBvcmlnaW5hbAorCQkJ CQkJc3RhdGUgYmVmb3JlIGFsaWdubWVudCBjaGFuZ2VzCisJCQkJCQkqLwor CQkJCQkJdTE2IGxlbmd0aCA9CisJCQkJCQkgICAgKHB0cls1XSA8PCA4KSB8 IHB0cls0XTsKKwkJCQkJCWxlbmd0aCAtPSBhbGlnbl9maXg7CisJCQkJCQlw dHJbNV0gPSBsZW5ndGggPj4gODsKKwkJCQkJCXB0cls0XSA9IGxlbmd0aCAm IDB4ZmY7CisJCQkJCQkvKiBaZXJvIGFsaWdubWVudCBmbGFncyAqLworCQkJ CQkJcHRyWzddICY9IDB4ZmM7CisKKwkJCQkJCWZvciAoaSA9IE1TR19IRFJf TEVOIC0gMTsKKwkJCQkJCSAgICAgaSA+PSAwOyBpLS0pIHsKKwkJCQkJCQlw dHJbaSArIGFsaWduX2ZpeF0gPQorCQkJCQkJCSAgICBwdHJbaV07CisJCQkJ CQl9CisJCQkJCQlkZXYtPnJ4UGFja2V0Lm1zZ19vZmZzZXQgKz0KKwkJCQkJ CSAgICBhbGlnbl9maXg7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlQUk5fREJH KChUWFQKKwkJCQkoIk1zZyBmb3VuZCBhbmQgc2VudCB0byBjYWxsYmFjayBm dW5jLlxuIikpKTsKKwkJCQlkZXYtPmNiLm1zZ19mb3VuZF9jYihkZXYtPmNv bnRleHQsCisJCQkJCQkgICAgIGRldi0+cnhQYWNrZXQubXNnX2J1ZiwKKwkJ CQkJCSAgICAgZGV2LT5yeFBhY2tldC5tc2dfb2Zmc2V0LAorCQkJCQkJICAg ICBkZXYtPnJ4UGFja2V0Lm1zZ19sZW4gLQorCQkJCQkJICAgICBhbGlnbl9m aXgpOworCQkJCSp1bnVzZWRfYnl0ZXMgPQorCQkJCSAgICBsZW4gKyBvZmZz ZXQgLSBkZXYtPnJ4UGFja2V0Lm1zZ19vZmZzZXQgLQorCQkJCSAgICBkZXYt PnJ4UGFja2V0Lm1zZ19sZW47CisJCQkJaWYgKCp1bnVzZWRfYnl0ZXMgPT0g MCkKKwkJCQkJKnVudXNlZF9ieXRlcyA9IC0xOworCQkJCXJldHVybiAwOwor CQkJfSBlbHNlIHsKKwkJCQlQUk5fREJHKChUWFQKKwkJICgiTXNnIGZvdW5k IGJ1dCBubyBjYWxsYmFjay4gdGhlcmVmb3JlIC0gdGhyb3duIGF3YXkuXG4i KSkpOworCQkJfQorCQkJUFJOX0RCRygoVFhUKCJzdGF0ZSAlZC5cbiIpLCBk ZXYtPnJ4U3RhdGUpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGRl di0+cnhTdGF0ZSA9PSBSeHNXYWl0X2E1KSB7CisJCSp1bnVzZWRfYnl0ZXMg PSAwOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBXb3JrYXJvdW5k IHRvIGNvcm5lciBjYXNlOiBpZiB0aGUgbGFzdCBieXRlIG9mIHRoZSBidWZm ZXIKKwkJaXMgImE1IiAoZmlyc3QgYnl0ZSBvZiB0aGUgcHJlYW1ibGUpLCB0 aGUgaG9zdCB0aGlua3MgaXQgc2hvdWxkCisJCXNlbmQgYW5vdGhlciAyNTYg Ynl0ZXMuICBJbiBjYXNlIHRoZSBhNSBpcyB0aGUgZmlybXdhcmUKKwkJdW5k ZXJmbG93IGJ5dGUsIHRoaXMgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29w LCBzbyB3ZSBjaGVjaworCQlmb3IgdGhpcyBjYXNlIGV4cGxpY2l0eS4gKi8K KwkJaWYgKChkZXYtPnJ4U3RhdGUgPT0gUnhzV2FpdF81YSkgJiYgKCoocHRy IC0gMikgPT0gMHhhNSkpIHsKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4c1dhaXRf YTU7CisJCQkqdW51c2VkX2J5dGVzID0gMDsKKwkJCXJldHVybiAwOworCQl9 CisKKwkJaWYgKGRldi0+cnhQYWNrZXQubXNnX29mZnNldCA+PSAoU1BJX1BB Q0tFVF9TSVpFICsgNCkpCisJCQkvKiBhZGRpbmcgNCBmb3IgdGhlIHByZWFt YmxlLiAqLworCQl7CQkvKlRoZSBwYWNrZXQgd2lsbCBiZSBjb3BpZWQgdG8g YSBuZXcgYnVmZmVyCisJCQkJICAgYW5kIHJlc2NhbmVkIGJ5IHRoZSBzdGF0 ZSBtYWNoaW5lICovCisJCQkqdW51c2VkX2J5dGVzID0gZGV2LT5yeFN0YXRl IC0gUnhzV2FpdF9hNTsKKwkJCWRldi0+cnhTdGF0ZSA9IFJ4c1dhaXRfYTU7 CisJCQlkZXYtPmNiLmZyZWVfcnhfYnVmKGRldi0+Y29udGV4dCwgYnVmKTsK KwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJLyogcmVwb3J0IG1pc3Np bmcgYnl0ZXMgYW5kIGNvbnRpbnVlCisJCQkgICB3aXRoIG1lc3NhZ2Ugc2Nh bi4gKi8KKwkJCSp1bnVzZWRfYnl0ZXMgPSAwOworCQkJcmV0dXJuIFNQSV9Q QUNLRVRfU0laRTsKKwkJfQorCX0KK30KKwordm9pZCBzbXNzcGlfY29tbW9u X3RyYW5zZmVyX21zZyhzdHJ1Y3Qgc3BpX2RldiAqZGV2LCBzdHJ1Y3Qgc3Bp X21zZyAqdHhtc2csCisJCQkJaW50IHBhZGRpbmdfYWxsb3dlZCkKK3sKKwlp bnQgbGVuLCBieXRlc190b190cmFuc2ZlcjsKKwl1bnNpZ25lZCBsb25nIHR4 X3BoeV9hZGRyOworCWludCBtaXNzaW5nX2J5dGVzLCB0eF9ieXRlczsKKwlp bnQgb2Zmc2V0LCB1bnVzZWRfYnl0ZXM7CisJaW50IGFsaWduX2Jsb2NrOwor CWNoYXIgKnR4YnVmOworCXJ4X2J1ZmZlcl9zdCAqIGJ1ZiwgKnRtcF9idWY7 CisKKwlsZW4gPSAwOworCWlmICghZGV2LT5jYi50cmFuc2Zlcl9kYXRhX2Ni KSB7CisJCVBSTl9FUlIoKFRYVAorCQkoImZ1bmN0aW9uIGNhbGxlZCB3aGls ZSBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLlxuIikpKTsKKwkJcmV0dXJu OworCX0KKwlpZiAodHhtc2cgPT0gMCkgeworCQlieXRlc190b190cmFuc2Zl ciA9IFNQSV9QQUNLRVRfU0laRTsKKwkJdHhidWYgPSAwOworCQl0eF9waHlf YWRkciA9IDA7CisJCXR4X2J5dGVzID0gMDsKKwl9IGVsc2UgeworCQl0eF9i eXRlcyA9IHR4bXNnLT5sZW47CisJCWlmIChwYWRkaW5nX2FsbG93ZWQpCisJ CQlieXRlc190b190cmFuc2ZlciA9CisJCQkgICAgKCgodHhfYnl0ZXMgKyBT UElfUEFDS0VUX1NJWkUgLQorCQkJICAgICAgIDEpID4+IFNQSV9QQUNLRVRf U0laRV9CSVRTKSA8PAorCQkJICAgICBTUElfUEFDS0VUX1NJWkVfQklUUyk7 CisJCWVsc2UKKwkJCWJ5dGVzX3RvX3RyYW5zZmVyID0gKCgodHhfYnl0ZXMg KyAzKSA+PiAyKSA8PCAyKTsKKwkJdHhidWYgPSB0eG1zZy0+YnVmOworCQl0 eF9waHlfYWRkciA9IHR4bXNnLT5idWZfcGh5X2FkZHI7CisJfQorCW9mZnNl dCA9IDA7CisJdW51c2VkX2J5dGVzID0gMDsKKwlidWYgPQorCSAgICBkZXYt PmNiLmFsbG9jYXRlX3J4X2J1ZihkZXYtPmNvbnRleHQsCisJCQkJICAgIFJY X1BBQ0tFVF9TSVpFICsgU1BJX1BBQ0tFVF9TSVpFKTsKKwlpZiAoIWJ1Zikg eworCQlQUk5fRVJSKChUWFQoIkZhaWxlZCB0byBhbGxvY2F0ZSBSWCBidWZm ZXIuXG4iKSkpOworCQlyZXR1cm47CisJfQorCXdoaWxlIChieXRlc190b190 cmFuc2ZlciB8fCB1bnVzZWRfYnl0ZXMpIHsKKwkJaWYgKCh1bnVzZWRfYnl0 ZXMgPD0gMCkgJiYgKGJ5dGVzX3RvX3RyYW5zZmVyID4gMCkpIHsKKwkJCWxl biA9IG1pbihieXRlc190b190cmFuc2ZlciwgUlhfUEFDS0VUX1NJWkUpOwor CQkJUFJOX0RCRygoVFhUKCJ0cmFuc2ZlcmluZyBibG9jayBvZiAlZCBieXRl c1xuIiksIGxlbikpOworCQkJZGV2LT5jYi50cmFuc2Zlcl9kYXRhX2NiKGRl di0+cGh5X2NvbnRleHQsIHR4YnVmLAorCQkJCQkJIHR4X3BoeV9hZGRyLAor CQkJCQkJIChjaGFyICopYnVmLT5wdHIgKyBvZmZzZXQsCisJCQkJCQkgYnVm LT5waHlfYWRkciArIG9mZnNldCwgbGVuKTsKKwkJfQorCQltaXNzaW5nX2J5 dGVzID0KKwkJICAgIHNtc3NwaV9jb21tb25fZmluZF9tc2coZGV2LCBidWYs IG9mZnNldCwgbGVuLAorCQkJCQkgICAmdW51c2VkX2J5dGVzKTsKKwkJaWYg KGJ5dGVzX3RvX3RyYW5zZmVyKQorCQkJYnl0ZXNfdG9fdHJhbnNmZXIgLT0g bGVuOworCisJCWlmICh0eF9ieXRlcykKKwkJCXR4X2J5dGVzIC09IGxlbjsK KworCQlpZiAobWlzc2luZ19ieXRlcykKKwkJCW9mZnNldCArPSBsZW47CisK KwkJaWYgKHVudXNlZF9ieXRlcykgeworCQkJdG1wX2J1ZiA9CisJCQkgICAg ZGV2LT5jYi5hbGxvY2F0ZV9yeF9idWYoZGV2LT5jb250ZXh0LAorCQkJCQkJ ICAgIFJYX1BBQ0tFVF9TSVpFKTsKKwkJCWlmICghdG1wX2J1ZikgeworCQkJ CVBSTl9FUlIoKFRYVAorCQkJCQkgKCJGYWlsZWQgdG8gYWxsb2NhdGUgUlgg YnVmZmVyLlxuIikpKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAodW51 c2VkX2J5dGVzID4gMCkgeworCQkJCS8qIENvcHkgdGhlIHJlbWFpbmluZyBi eXRlcyB0byB0aGUgZW5kIG9mCisJCQkJICAgYWxpbmdtZW50IGJsb2NrICgy NTYgYnl0ZXMpIHNvIG5leHQgcmVhZAorCQkJCSAgIHdpbGwgYmUgYWxsaWdu ZWQuICovCisJCQkJYWxpZ25fYmxvY2sgPQorCQkJCSAgICAoKCh1bnVzZWRf Ynl0ZXMgKyBTUElfUEFDS0VUX1NJWkUgLQorCQkJCSAgICAgICAxKSA+PiBT UElfUEFDS0VUX1NJWkVfQklUUykgPDwKKwkJCQkgICAgIFNQSV9QQUNLRVRf U0laRV9CSVRTKTsKKwkJCQltZW1zZXQodG1wX2J1Zi0+cHRyLCAwLAorCQkJ CSAgICAgICBhbGlnbl9ibG9jayAtIHVudXNlZF9ieXRlcyk7CisJCQkJbWVt Y3B5KChjaGFyICopdG1wX2J1Zi0+cHRyICsKKwkJCQkgICAgICAgKGFsaWdu X2Jsb2NrIC0gdW51c2VkX2J5dGVzKSwKKwkJCQkgICAgICAgKGNoYXIgKili dWYtPnB0ciArIG9mZnNldCArIGxlbiAtCisJCQkJICAgICAgIHVudXNlZF9i eXRlcywgdW51c2VkX2J5dGVzKTsKKwkJCQlsZW4gPSBhbGlnbl9ibG9jazsK KwkJCX0KKwkJCW9mZnNldCA9IDA7CisJCQlidWYgPSB0bXBfYnVmOworCQl9 CisJCWlmICh0eF9ieXRlcyA8PSAwKSB7CisJCQl0eGJ1ZiA9IDA7CisJCQl0 eF9ieXRlcyA9IDA7CisJCX0KKwkJaWYgKGJ5dGVzX3RvX3RyYW5zZmVyIDwg bWlzc2luZ19ieXRlcykgeworCQkJYnl0ZXNfdG9fdHJhbnNmZXIgPQorCQkJ ICAgICgoKG1pc3NpbmdfYnl0ZXMgKyBTUElfUEFDS0VUX1NJWkUgLQorCQkJ ICAgICAgIDEpID4+IFNQSV9QQUNLRVRfU0laRV9CSVRTKSA8PAorCQkJICAg ICBTUElfUEFDS0VUX1NJWkVfQklUUyk7CisJCQlQUk5fREJHKChUWFQKKwkJ CQkgKCJhIG1lc3NhZ2Ugd2FzIGZvdW5kLCBhZGRpbmcgYnl0ZXMgdG8gdHJh bnNmZXIsIHR4bXNnICVkLCB0b3RhbCAlZFxuIiksCisJCQkJIHR4X2J5dGVz LCBieXRlc190b190cmFuc2ZlcikpOworCQl9CisJfQorCWRldi0+Y2IuZnJl ZV9yeF9idWYoZGV2LT5jb250ZXh0LCBidWYpOworfQorCitpbnQgc21zc3Bp Y29tbW9uX2luaXQoc3RydWN0IHNwaV9kZXYgKmRldiwgdm9pZCAqY29udGV4 dCwgdm9pZCAqcGh5X2NvbnRleHQsCisJCSAgICAgIHNwaV9kZXZfY2Jfc3Qg KmNiKQoreworCVBSTl9EQkcoKFRYVCgiZW50ZXJpbmcuXG4iKSkpOworCWlm IChjYi0+dHJhbnNmZXJfZGF0YV9jYiA9PSAwIHx8CisJICAgIGNiLT5tc2df Zm91bmRfY2IgPT0gMCB8fAorCSAgICBjYi0+YWxsb2NhdGVfcnhfYnVmID09 IDAgfHwgY2ItPmZyZWVfcnhfYnVmID09IDApIHsKKwkJUFJOX0VSUigoVFhU KCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgb2YgaW5pdCByb3V0aW5lLlxu IikpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlkZXYtPmNvbnRleHQgPSBjb250 ZXh0OworCWRldi0+cGh5X2NvbnRleHQgPSBwaHlfY29udGV4dDsKKwltZW1j cHkoJmRldi0+Y2IsIGNiLCBzaXplb2Yoc3BpX2Rldl9jYl9zdCkpOworCWRl di0+cnhTdGF0ZSA9IFJ4c1dhaXRfYTU7CisJUFJOX0RCRygoVFhUKCJleGl0 aW5nLlxuIikpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtdU5yIHY0bC1kdmIt YzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Nt c3NwaWNvbW1vbi5oIHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgv ZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpY29tbW9uLmgKLS0tIHY0 bC1kdmItYzVmOTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3Np YW5vL3Ntc3NwaWNvbW1vbi5oCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAw MDAwICswMjAwCisrKyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4 L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaWNvbW1vbi5oCTIwMDgt MTEtMTggMTg6MTM6MzcuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsOTYg QEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisKK1NpYW5vIE1vYmlsZSBTaWxp Y29uLCBJbmMuCitNRFRWIHJlY2VpdmVyIGtlcm5lbCBtb2R1bGVzLgorQ29w eXJpZ2h0IChDKSAyMDA2LTIwMDgsIFVyaSBTaGtvbG5paworCitUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3Ro ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworI2lmbmRlZiBfU01TX1NQSV9DT01NT05fSF8KKyNkZWZp bmUgX1NNU19TUElfQ09NTU9OX0hfCisKKyNkZWZpbmUgUlhfUEFDS0VUX1NJ WkUgIAkJMHgxMDAwCisjZGVmaW5lIFNQSV9QQUNLRVRfU0laRV9CSVRTCQk4 CisjZGVmaW5lIFNQSV9QQUNLRVRfU0laRSAJCSgxPDxTUElfUEFDS0VUX1NJ WkVfQklUUykKKyNkZWZpbmUgU1BJX01BWF9DVFJMX01TR19TSVpFCQkweDEw MAorCisjZGVmaW5lIE1TR19IRFJfRkxBR19TUExJVF9NU0dfSERSCTB4MDAw NAorI2RlZmluZSBNU0dfSERSX0xFTgkJCTgKKworZW51bSBfc3BpX3J4X3N0 YXRlIHsKKwlSeHNXYWl0X2E1ID0gMCwKKwlSeHNXYWl0XzVhLAorCVJ4c1dh aXRfZTcsCisJUnhzV2FpdF83ZSwKKwlSeHNUeXBlSCwKKwlSeHNUeXBlTCwK KwlSeHNHZXRTcmNJZCwKKwlSeHNHZXREc3RJZCwKKwlSeHNHZXRMZW5MLAor CVJ4c0dldExlbkgsCisJUnhzRmxhZ3NMLAorCVJ4c0ZsYWdzSCwKKwlSeHNE YXRhCit9IHNwaV9yeF9zdGF0ZTsKKworc3RydWN0IHsKKwl2b2lkICpwdHI7 CisJdW5zaWduZWQgbG9uZyBwaHlfYWRkcjsKK30gcnhfYnVmZmVyX3N0Owor CitzdHJ1Y3QgX3J4X3BhY2tldF9yZXF1ZXN0IHsKKwlyeF9idWZmZXJfc3Qg Km1zZ19idWY7CisJaW50IG1zZ19vZmZzZXQ7CisJaW50IG1zZ19sZW47CisJ aW50IG1zZ19mbGFnczsKK30gcnhfcGFja2V0X3JlcXVlc3Q7CisKK3N0cnVj dCB7CisJdm9pZCAoKnRyYW5zZmVyX2RhdGFfY2IpICh2b2lkICpjb250ZXh0 LCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcsCisJCQkJICB1bnNp Z25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIGludCk7CisJdm9pZCAoKm1z Z19mb3VuZF9jYikgKHZvaWQgKiwgdm9pZCAqLCBpbnQsIGludCk7CisJcnhf YnVmZmVyX3N0ICooKmFsbG9jYXRlX3J4X2J1ZikgKHZvaWQgKiwgaW50KTsK Kwl2b2lkICgqZnJlZV9yeF9idWYpICh2b2lkICosIHJ4X2J1ZmZlcl9zdCAq KTsKK30gc3BpX2Rldl9jYl9zdDsKKworc3RydWN0IHNwaV9kZXYgeworCXZv aWQgKmNvbnRleHQ7CisJdm9pZCAqcGh5X2NvbnRleHQ7CisJc3BpX2Rldl9j Yl9zdCBjYjsKKwljaGFyICpyeGJ1ZjsKKwlzcGlfcnhfc3RhdGUgcnhTdGF0 ZTsKKwlyeF9wYWNrZXRfcmVxdWVzdCByeFBhY2tldDsKKwljaGFyICppbnRl cm5hbF90eF9idWY7Cit9IHNwaV9kZXZfc3Q7CisKK3N0cnVjdCBzcGlfbXNn IHsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBidWZfcGh5X2FkZHI7 CisJaW50IGxlbjsKK30gc3BpX21zZ19zdDsKKwordm9pZCBzbXNzcGlfY29t bW9uX3RyYW5zZmVyX21zZyhzdHJ1Y3Qgc3BpX2RldiAqZGV2LCBzdHJ1Y3Qg c3BpX21zZyAqdHhtc2csCisJCQkJaW50IHBhZGRpbmdfYWxsb3dlZCk7Citp bnQgc21zc3BpY29tbW9uX2luaXQoc3RydWN0IHNwaV9kZXYgKmRldiwgdm9p ZCAqY29udGV4LCB2b2lkICpwaHlfY29udGV4dCwKKwkJICAgICAgc3BpX2Rl dl9jYl9zdCAqY2IpOworCisjaWYgZGVmaW5lZCBIRVhEVU1QX0RFQlVHICYm IGRlZmluZWQgU1BJQlVTX0RFQlVHCisvKiEgZHVtcCBhIGh1bWFuIHJlYWRh YmxlIHByaW50IG9mIGEgYmluYXJ5IGJ1ZmZlciAqLwordm9pZCBzbXNzcGlf a2hleGR1bXAoY2hhciAqYnVmLCBpbnQgbGVuKTsKKyNlbHNlCisjZGVmaW5l IHNtc3NwaV9raGV4ZHVtcChidWYsIGxlbikKKyNlbmRpZgorCisjZW5kaWYg LypfU01TX1NQSV9DT01NT05fSF8qLwpkaWZmIC11TnIgdjRsLWR2Yi1jNWY5 NzZjYWIwMTEvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3Bp bG9nLmMgdjRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJz L21lZGlhL2R2Yi9zaWFuby9zbXNzcGlsb2cuYwotLS0gdjRsLWR2Yi1jNWY5 NzZjYWIwMTEvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3Bp bG9nLmMJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysr IHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJpdmVycy9tZWRp YS9kdmIvc2lhbm8vc21zc3BpbG9nLmMJMjAwOC0xMS0xOCAxODoxMzozNy4w MDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw0NDYgQEAKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisKK1NpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCitNRFRW IHJlY2VpdmVyIGtlcm5lbCBtb2R1bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2 LTIwMDgsIFVyaSBTaGtvbG5paworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh CisJXGZpbGUJc3BpYnVzZHJ2LmMKKworCVxicmllZglzcGkgYnVzIGRyaXZl ciBtb2R1bGUKKworCVRoaXMgZmlsZSBjb250YWlucyBpbXBsZW1lbnRhdGlv biBvZiB0aGUgc3BpIGJ1cyBkcml2ZXIuCisqLworCisjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBh cmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInNtc2NvcmVhcGkuaCIKKyNpbmNs dWRlICJzbXNkYmdfcHJuLmgiCisjaW5jbHVkZSAic21zc3BpY29tbW9uLmgi CisjaW5jbHVkZSAic21zc3BpcGh5LmgiCisKKyNkZWZpbmUgU01TX0lOVFJf UElOCQkJMTYgIC8qIDAgZm9yIG5vdmEgc2lwLCAyNiBmb3IgdmVnYSAqLwor I2RlZmluZSBUWF9CVUZGRVJfU0laRQkJCTB4MjAwCisjZGVmaW5lIFJYX0JV RkZFUl9TSVpFCQkJKDB4MTAwMCArIFNQSV9QQUNLRVRfU0laRSArIDB4MTAw KQorI2RlZmluZSBOVU1fUlhfQlVGRkVSUwkJCTcyCisKK3N0cnVjdCB7CisJ c3RydWN0IHNwaV9kZXYgZGV2OworCXZvaWQgKnBoeV9kZXY7CisKKwlzdHJ1 Y3QgY29tcGxldGlvbiB3cml0ZV9vcGVyYXRpb247CisJc3RydWN0IGxpc3Rf aGVhZCB0eF9xdWV1ZTsKKwlpbnQgYWxsb2NhdGVkUGFja2V0czsKKwlpbnQg cGFkZGluZ19hbGxvd2VkOworCWNoYXIgKnJ4YnVmOworCWRtYV9hZGRyX3Qg cnhidWZfcGh5X2FkZHI7CisKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAq Y29yZWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4cXVldWU7CisJY2hhciAq dHhidWY7CisJZG1hX2FkZHJfdCB0eGJ1Zl9waHlfYWRkcjsKK30gc3BpX2Rl dmljZV9zdDsKKworc3RydWN0IF9zbXNzcGlfdHhtc2cgeworCXN0cnVjdCBs aXN0X2hlYWQgbm9kZTsJLyohIGludGVybmFsIG1hbmFnZW1lbnQgKi8KKwl2 b2lkICpidWZmZXI7CisJc2l6ZV90IHNpemU7CisJaW50IGFsaWdubWVudDsK KwlpbnQgYWRkX3ByZWFtYmxlOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBs ZXRpb247CisJdm9pZCAoKnByZXdyaXRlKSAodm9pZCAqKTsKKwl2b2lkICgq cG9zdHdyaXRlKSAodm9pZCAqKTsKK30gc21zc3BpX3R4bXNnX3Q7CisKK3Nw aV9kZXZpY2Vfc3QgKnNwaV9kZXY7CisKK3N0YXRpYyB2b2lkIHNwaV93b3Jr ZXJfdGhyZWFkKHZvaWQgKmFyZyk7CitzdGF0aWMgREVDTEFSRV9XT1JLKHNw aV93b3JrX3F1ZXVlLCAodm9pZCAqKXNwaV93b3JrZXJfdGhyZWFkKTsKK3N0 YXRpYyB1OCBzbXNzcGlfcHJlYW1ibGVbXSA9IHsgMHhhNSwgMHg1YSwgMHhl NywgMHg3ZSB9Oworc3RhdGljIHU4IHNtc3NwaV9zdGFydHVwW10gPSB7IDAs IDAsIDB4ZGUsIDB4YzEsIDB4YTUsIDB4NTEsIDB4ZjEsIDB4ZWQgfTsKK3N0 YXRpYyB1MzIgZGVmYXVsdF90eXBlID0gU01TX05PVkFfQTA7CitzdGF0aWMg dTMyIGludHJfcGluID0gU01TX0lOVFJfUElOOworCittb2R1bGVfcGFyYW0o ZGVmYXVsdF90eXBlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhk ZWZhdWx0X3R5cGUsICJkZWZhdWx0IGJvYXJkIHR5cGUuIik7CisKK21vZHVs ZV9wYXJhbShpbnRyX3BpbiwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RF U0MoaW50cl9waW4sICJpbnRlcnJ1cHQgcGluIG51bWJlci4iKTsKKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0 YXRpYyB2b2lkIHNwaV93b3JrZXJfdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlz cGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gc3BpX2RldjsKKwlzbXNzcGlf dHhtc2dfdCAqbXNnID0gTlVMTDsKKwlzcGlfbXNnX3N0IHR4bXNnOworCisJ UERFQlVHKCJ3b3JrZXIgc3RhcnRcbiIpOworCWRvIHsKKwkJLyogZG8gd2Ug aGF2ZSBhIG1zZyB0byB3cml0ZSA/ICovCisJCWlmICghbXNnICYmICFsaXN0 X2VtcHR5KCZzcGlfZGV2aWNlLT50eHF1ZXVlKSkKKwkJCW1zZyA9CisJCQkg ICAgKHNtc3NwaV90eG1zZ190ICopIGxpc3RfZW50cnkoc3BpX2RldmljZS0+ dHhxdWV1ZS4KKwkJCQkJCQkgIG5leHQsIHNtc3NwaV90eG1zZ190LAorCQkJ CQkJCSAgbm9kZSk7CisKKwkJaWYgKG1zZykgeworCQkJaWYgKG1zZy0+YWRk X3ByZWFtYmxlKSB7CisJCQkJdHhtc2cubGVuID0KKwkJCQkgICAgbWluKG1z Zy0+c2l6ZSArIHNpemVvZihzbXNzcGlfcHJlYW1ibGUpLAorCQkJCQkoc2l6 ZV90KSBUWF9CVUZGRVJfU0laRSk7CisJCQkJdHhtc2cuYnVmID0gc3BpX2Rl dmljZS0+dHhidWY7CisJCQkJdHhtc2cuYnVmX3BoeV9hZGRyID0gc3BpX2Rl dmljZS0+dHhidWZfcGh5X2FkZHI7CisJCQkJbWVtY3B5KHR4bXNnLmJ1Ziwg c21zc3BpX3ByZWFtYmxlLAorCQkJCSAgICAgICBzaXplb2Yoc21zc3BpX3By ZWFtYmxlKSk7CisJCQkJbWVtY3B5KCZ0eG1zZy5idWZbc2l6ZW9mKHNtc3Nw aV9wcmVhbWJsZSldLAorCQkJCSAgICAgICBtc2ctPmJ1ZmZlciwKKwkJCQkg ICAgICAgdHhtc2cubGVuIC0gc2l6ZW9mKHNtc3NwaV9wcmVhbWJsZSkpOwor CQkJCW1zZy0+YWRkX3ByZWFtYmxlID0gMDsKKwkJCQltc2ctPmJ1ZmZlciAr PQorCQkJCSAgICB0eG1zZy5sZW4gLSBzaXplb2Yoc21zc3BpX3ByZWFtYmxl KTsKKwkJCQltc2ctPnNpemUgLT0KKwkJCQkgICAgdHhtc2cubGVuIC0gc2l6 ZW9mKHNtc3NwaV9wcmVhbWJsZSk7CisJCQkJLyogemVybyBvdXQgdGhlIHJl c3Qgb2YgYWxpZ25lZCBidWZmZXIgKi8KKwkJCQltZW1zZXQoJnR4bXNnLmJ1 Zlt0eG1zZy5sZW5dLCAwLAorCQkJCSAgICAgICBUWF9CVUZGRVJfU0laRSAt IHR4bXNnLmxlbik7CisJCQkJc21zc3BpX2NvbW1vbl90cmFuc2Zlcl9tc2co JnNwaV9kZXZpY2UtPmRldiwKKwkJCQkJCQkgICAmdHhtc2csIDEpOworCQkJ fSBlbHNlIHsKKwkJCQl0eG1zZy5sZW4gPQorCQkJCSAgICBtaW4obXNnLT5z aXplLCAoc2l6ZV90KSBUWF9CVUZGRVJfU0laRSk7CisJCQkJdHhtc2cuYnVm ID0gc3BpX2RldmljZS0+dHhidWY7CisJCQkJdHhtc2cuYnVmX3BoeV9hZGRy ID0gc3BpX2RldmljZS0+dHhidWZfcGh5X2FkZHI7CisJCQkJbWVtY3B5KHR4 bXNnLmJ1ZiwgbXNnLT5idWZmZXIsIHR4bXNnLmxlbik7CisKKwkJCQltc2ct PmJ1ZmZlciArPSB0eG1zZy5sZW47CisJCQkJbXNnLT5zaXplIC09IHR4bXNn LmxlbjsKKwkJCQkvKiB6ZXJvIG91dCB0aGUgcmVzdCBvZiBhbGlnbmVkIGJ1 ZmZlciAqLworCQkJCW1lbXNldCgmdHhtc2cuYnVmW3R4bXNnLmxlbl0sIDAs CisJCQkJICAgICAgIFRYX0JVRkZFUl9TSVpFIC0gdHhtc2cubGVuKTsKKwkJ CQlzbXNzcGlfY29tbW9uX3RyYW5zZmVyX21zZygmc3BpX2RldmljZS0+ZGV2 LAorCQkJCQkJCSAgICZ0eG1zZywgMCk7CisJCQl9CisKKwkJfSBlbHNlIHsK KwkJCXNtc3NwaV9jb21tb25fdHJhbnNmZXJfbXNnKCZzcGlfZGV2aWNlLT5k ZXYsIE5VTEwsIDEpOworCQl9CisKKwkJLyogaWYgdGhlcmUgd2FzIHdyaXRl LCBoYXZlIHdlIGZpbmlzaGVkID8gKi8KKwkJaWYgKG1zZyAmJiAhbXNnLT5z aXplKSB7CisJCQkvKiBjYWxsIHBvc3R3cml0ZSBjYWxsIGJhY2sgKi8KKwkJ CWlmIChtc2ctPnBvc3R3cml0ZSkKKwkJCQltc2ctPnBvc3R3cml0ZShzcGlf ZGV2aWNlKTsKKworCQkJbGlzdF9kZWwoJm1zZy0+bm9kZSk7CisJCQljb21w bGV0ZSgmbXNnLT5jb21wbGV0aW9uKTsKKwkJCW1zZyA9IE5VTEw7CisJCX0K KwkJLyogaWYgdGhlcmUgd2FzIHJlYWQsIGRpZCB3ZSByZWFkIGFueXRoaW5n ID8gKi8KKworCX0gd2hpbGUgKCFsaXN0X2VtcHR5KCZzcGlfZGV2aWNlLT50 eHF1ZXVlKSB8fCBtc2cpOworCisJUERFQlVHKCJ3b3JrZXIgZW5kXG4iKTsK KworfQorCitzdGF0aWMgdm9pZCBtc2dfZm91bmQodm9pZCAqY29udGV4dCwg dm9pZCAqYnVmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCXNwaV9kZXZp Y2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAqKSBjb250ZXh0 OworCXN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJICAgIChzdHJ1 Y3Qgc21zY29yZV9idWZmZXJfdAorCSAgICAgKikoY29udGFpbmVyX29mKGJ1 Ziwgc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QsIHApKTsKKworCVBERUJVRygi ZW50ZXJpbmdcbiIpOworCWNiLT5vZmZzZXQgPSBvZmZzZXQ7CisJY2ItPnNp emUgPSBsZW47CisJLyogUEVSUk9SICgiYnVmZmVyICVwIGlzIHNlbnQgYmFj ayB0byBjb3JlIGRhdGFidWY9JXAsCisJCW9mZnNldD0lZC5cbiIsIGNiLCBj Yi0+cCwgY2ItPm9mZnNldCk7ICovCisJc21zY29yZV9vbnJlc3BvbnNlKHNw aV9kZXZpY2UtPmNvcmVkZXYsIGNiKTsKKworCVBERUJVRygiZXhpdGluZ1xu Iik7CisKK30KKworc3RhdGljIHZvaWQgc21zc3BpX2ludF9oYW5kbGVyKHZv aWQgKmNvbnRleHQpCit7CisJc3BpX2RldmljZV9zdCAqc3BpX2RldmljZSA9 IChzcGlfZGV2aWNlX3N0ICopIGNvbnRleHQ7CisJUERFQlVHKCJpbnRlcnJ1 cHRcbiIpOworCVBSRVBBUkVfV09SSygmc3BpX3dvcmtfcXVldWUsICh2b2lk ICopc3BpX3dvcmtlcl90aHJlYWQpOworCXNwaV9kZXZpY2UtPnBhZGRpbmdf YWxsb3dlZCA9IDE7CisJc2NoZWR1bGVfd29yaygmc3BpX3dvcmtfcXVldWUp OworfQorCitzdGF0aWMgaW50IHNtc3NwaV9xdWV1ZV9tZXNzYWdlX2FuZF93 YWl0KHNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UsCisJCQkJCSBzbXNzcGlf dHhtc2dfdCAqbXNnKQoreworCWluaXRfY29tcGxldGlvbigmbXNnLT5jb21w bGV0aW9uKTsKKwlsaXN0X2FkZF90YWlsKCZtc2ctPm5vZGUsICZzcGlfZGV2 aWNlLT50eHF1ZXVlKTsKKwlzY2hlZHVsZV93b3JrKCZzcGlfd29ya19xdWV1 ZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbXNnLT5jb21wbGV0aW9uKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtc3NwaV9wcmVsb2Fk KHZvaWQgKmNvbnRleHQpCit7CisJc21zc3BpX3R4bXNnX3QgbXNnOworCXNw aV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAqKSBj b250ZXh0OworCisJcHJlcGFyZUZvckZXRG5sKHNwaV9kZXZpY2UtPnBoeV9k ZXYpOworCVBERUJVRygiU2VuZGluZyBTUEkgaW5pdCBzZXF1ZW5jZVxuIik7 CisJbXNnLmJ1ZmZlciA9IHNtc3NwaV9zdGFydHVwOworCW1zZy5zaXplID0g c2l6ZW9mKHNtc3NwaV9zdGFydHVwKTsKKwltc2cuYWxpZ25tZW50ID0gNDsK Kwltc2cuYWRkX3ByZWFtYmxlID0gMDsKKwltc2cucHJld3JpdGUgPSBOVUxM OwkvKiBzbXNzcGlwaHlfcmVkdWNlX2Nsb2NrOyAqLworCW1zZy5wb3N0d3Jp dGUgPSBOVUxMOworCisJcmV0dXJuIHNtc3NwaV9xdWV1ZV9tZXNzYWdlX2Fu ZF93YWl0KGNvbnRleHQsICZtc2cpOworfQorCitzdGF0aWMgaW50IHNtc3Nw aV9wb3N0bG9hZCh2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBfTXNnIHsK KwkJc3RydWN0IFNtc01zZ0hkcl9TVCBoZHI7CisJCXUzMiBkYXRhWzNdOwor CX0gTXNnID0geworCQl7CisJCU1TR19TTVNfU1BJX0lOVF9MSU5FX1NFVF9S RVEsIDAsIEhJRl9UQVNLLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgX01zZyks IDB9LCB7CisJCTAsIGludHJfcGluLCAwfQorCX07CisJc3BpX2RldmljZV9z dCAqc3BpX2RldmljZSA9IChzcGlfZGV2aWNlX3N0ICopIGNvbnRleHQ7CisJ c21zc3BpX3R4bXNnX3QgbXNnOworCisJUERFQlVHKCJTZW5kaW5nIFNQSSBT ZXQgSW50ZXJydXB0IGNvbW1hbmQgc2VxdWVuY2VcbiIpOworCWZ3RG5sQ29t cGxldGUoc3BpX2RldmljZS0+cGh5X2RldiwgMCk7CisJbXNnLmJ1ZmZlciA9 ICZNc2c7CisJbXNnLnNpemUgPSBzaXplb2YoTXNnKTsKKwltc2cuYWxpZ25t ZW50ID0gU1BJX1BBQ0tFVF9TSVpFOworCW1zZy5hZGRfcHJlYW1ibGUgPSAx OworCW1zZy5wcmV3cml0ZSA9IE5VTEw7CisJbXNnLnBvc3R3cml0ZSA9IE5V TEw7CS8qIHNtc3NwaXBoeV9yZXN0b3JlX2Nsb2NrOyAqLworCisJcmV0dXJu IHNtc3NwaV9xdWV1ZV9tZXNzYWdlX2FuZF93YWl0KGNvbnRleHQsICZtc2cp OworfQorCitzdGF0aWMgaW50IHNtc3NwaV93cml0ZSh2b2lkICpjb250ZXh0 LCB2b2lkICp0eGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzbXNzcGlfdHhtc2df dCBtc2c7CisKKwltc2cuYnVmZmVyID0gdHhidWY7CisJbXNnLnNpemUgPSBs ZW47CisJbXNnLnByZXdyaXRlID0gTlVMTDsKKwltc2cucG9zdHdyaXRlID0g TlVMTDsKKworCWlmIChsZW4gPiAweDEwMDApIHsKKwkJLyogVGhlIEZXIGlz IHRoZSBvbmx5IGxvbmcgbWVzc2FnZS4gRG8gbm90IGFkZCBwcmVhbWJsZSwK KwkJYW5kIGRvIG5vdCBwYWRkIGl0ICovCisJCW1zZy5hbGlnbm1lbnQgPSA0 OworCQltc2cuYWRkX3ByZWFtYmxlID0gMDsKKwkJbXNnLnByZXdyaXRlID0g c21zY2hpcHJlc2V0OworCX0gZWxzZSB7CisJCW1zZy5hbGlnbm1lbnQgPSBT UElfUEFDS0VUX1NJWkU7CisJCW1zZy5hZGRfcHJlYW1ibGUgPSAxOworCX0K KwlQREVCVUcoIldyaXRpbmcgbWVzc2FnZSB0byAgU1BJLlxuIik7CisJUERF QlVHKCJtc2cgaGRyOiAweCV4LCAweCV4LCAweCV4LCAweCV4LCAweCV4LCAw eCV4LCAweCV4LCAweCV4LlxuIiwKKwkgICAgICAgKCh1OCAqKSB0eGJ1Zilb MF0sICgodTggKikgdHhidWYpWzFdLCAoKHU4ICopIHR4YnVmKVsyXSwKKwkg ICAgICAgKCh1OCAqKSB0eGJ1ZilbM10sICgodTggKikgdHhidWYpWzRdLCAo KHU4ICopIHR4YnVmKVs1XSwKKwkgICAgICAgKCh1OCAqKSB0eGJ1ZilbNl0s ICgodTggKikgdHhidWYpWzddKTsKKwlyZXR1cm4gc21zc3BpX3F1ZXVlX21l c3NhZ2VfYW5kX3dhaXQoY29udGV4dCwgJm1zZyk7Cit9CisKK3J4X2J1ZmZl cl9zdCAqYWxsb2NhdGVfcnhfYnVmKHZvaWQgKmNvbnRleHQsIGludCBzaXpl KQoreworCXN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpidWY7CisJc3BpX2Rl dmljZV9zdCAqc3BpX2RldmljZSA9IChzcGlfZGV2aWNlX3N0ICopIGNvbnRl eHQ7CisJaWYgKHNpemUgPiBSWF9CVUZGRVJfU0laRSkgeworCQlQRVJST1Io IlJlcXVlc3RlZCBzaXplIGlzIGJpZ2dlciB0aGFuIG1heCBidWZmZXIgc2l6 ZS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYnVmID0gc21zY29yZV9n ZXRidWZmZXIoc3BpX2RldmljZS0+Y29yZWRldik7CisJUERFQlVHKCJSZWNp ZXZlZCBSeCBidWYgJXAgcGh5c2ljYWwgMHgleCAoY29udGFpbmVkIGluICVw KVxuIiwgYnVmLT5wLAorCSAgICAgICBidWYtPnBoeXMsIGJ1Zik7CisKKwkv KiBub3RlOiB0aGlzIGlzIG5vdCBtaXN0YWtlISB0aGUgcnhfYnVmZmVyX3N0 IGlzIGlkZW50aWNhbCB0byBwYXJ0IG9mCisJICAgc21zY29yZV9idWZmZXJf dCBhbmQgd2UgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0 aGUKKwkgICBpZGVudGljYWwgcGFydCAqLworCXJldHVybiAocnhfYnVmZmVy X3N0ICopICZidWYtPnA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcnhfYnVm KHZvaWQgKmNvbnRleHQsIHJ4X2J1ZmZlcl9zdCAqYnVmKQoreworCXNwaV9k ZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAqKSBjb250 ZXh0OworCXN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJICAgIChz dHJ1Y3Qgc21zY29yZV9idWZmZXJfdAorCSAgICAgKikoY29udGFpbmVyX29m KCgodm9pZCAqKWJ1ZiksIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90LCBwKSk7 CisJUERFQlVHKCJidWZmZXIgJXAgaXMgcmVsZWFzZWQuXG4iLCBjYik7CisJ c21zY29yZV9wdXRidWZmZXIoc3BpX2RldmljZS0+Y29yZWRldiwgY2IpOwor fQorCisvKiEgUmVsZWFzZSBkZXZpY2UgU1RVQgorCitccGFyYW1baW5dCWRl djoJCWRldmljZSBjb250cm9sIGJsb2NrCitccmV0dXJuCQl2b2lkCisqLwor c3RhdGljIHZvaWQgc21zc3BpX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2 KQoreworCVBERUJVRygibm90aGluZyB0byBkb1xuIik7CisJLyogTm90aGlu ZyB0byByZWxlYXNlICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlIHNtc3NwaV9kZXZpY2UgPSB7CisJLm5hbWUgPSAic21zc3BpIiwK KwkuaWQgPSAxLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlID0gc21zc3BpX3Jl bGVhc2UsCisJCX0sCit9OworCitpbnQgc21zc3BpX3JlZ2lzdGVyKHZvaWQp Cit7CisJc3RydWN0IHNtc2RldmljZV9wYXJhbXNfdCBwYXJhbXM7CisJaW50 IHJldDsKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlOworCXNwaV9kZXZf Y2Jfc3QgY29tbW9uX2NiOworCisJUERFQlVHKCJlbnRlcmluZyBcbiIpOwor CisJc3BpX2RldmljZSA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHNwaV9kZXZp Y2Vfc3QpLCBHRlBfS0VSTkVMKTsKKwlzcGlfZGV2ID0gc3BpX2RldmljZTsK KworCUlOSVRfTElTVF9IRUFEKCZzcGlfZGV2aWNlLT50eHF1ZXVlKTsKKwor CXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21zc3BpX2Rldmlj ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJUEVSUk9SKCJwbGF0Zm9ybV9kZXZp Y2VfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlzcGlfZGV2aWNlLT50eGJ1ZiA9CisJICAgIGRtYV9hbGxvY19jb2hlcmVu dChOVUxMLCBUWF9CVUZGRVJfU0laRSwKKwkJCSAgICAgICAmc3BpX2Rldmlj ZS0+dHhidWZfcGh5X2FkZHIsCisJCQkgICAgICAgR0ZQX0tFUk5FTCB8IEdG UF9ETUEpOworCWlmICghc3BpX2RldmljZS0+dHhidWYpIHsKKwkJcHJpbnRr KEtFUk5fSU5GTyAiJXMgZG1hX2FsbG9jX2NvaGVyZW50KC4uLikgZmFpbGVk XG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIHR4YnVmX2Vycm9yOworCX0KKworCXNwaV9kZXZpY2UtPnBoeV9k ZXYgPQorCSAgICBzbXNzcGlwaHlfaW5pdChOVUxMLCBzbXNzcGlfaW50X2hh bmRsZXIsICZzcGlfZGV2aWNlKTsKKwlpZiAoc3BpX2RldmljZS0+cGh5X2Rl diA9PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHNtc3NwaXBoeV9p bml0KC4uLikgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gcGh5X2Vy cm9yOworCX0KKworCWNvbW1vbl9jYi5hbGxvY2F0ZV9yeF9idWYgPSBhbGxv Y2F0ZV9yeF9idWY7CisJY29tbW9uX2NiLmZyZWVfcnhfYnVmID0gZnJlZV9y eF9idWY7CisJY29tbW9uX2NiLm1zZ19mb3VuZF9jYiA9IG1zZ19mb3VuZDsK Kwljb21tb25fY2IudHJhbnNmZXJfZGF0YV9jYiA9IHNtc3NwaWJ1c194ZmVy OworCisJcmV0ID0KKwkgICAgc21zc3BpY29tbW9uX2luaXQoJnNwaV9kZXZp Y2UtPmRldiwgc3BpX2RldmljZSwgc3BpX2RldmljZS0+cGh5X2RldiwKKwkJ CSAgICAgICZjb21tb25fY2IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtF Uk5fSU5GTyAiJXMgc21zc3BpcGh5X2luaXQoLi4uKSBmYWlsZWRcbiIsIF9f ZnVuY19fKTsKKwkJZ290byBjb21tb25fZXJyb3I7CisJfQorCisJLyogcmVn aXN0ZXIgaW4gc21zY29yZSAqLworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXpl b2YocGFyYW1zKSk7CisJcGFyYW1zLmNvbnRleHQgPSBzcGlfZGV2aWNlOwor CXBhcmFtcy5kZXZpY2UgPSAmc21zc3BpX2RldmljZS5kZXY7CisJcGFyYW1z LmJ1ZmZlcl9zaXplID0gUlhfQlVGRkVSX1NJWkU7CisJcGFyYW1zLm51bV9i dWZmZXJzID0gTlVNX1JYX0JVRkZFUlM7CisJcGFyYW1zLmZsYWdzID0gU01T X0RFVklDRV9OT1RfUkVBRFk7CisJcGFyYW1zLnNlbmRyZXF1ZXN0X2hhbmRs ZXIgPSBzbXNzcGlfd3JpdGU7CisJc3RyY3B5KHBhcmFtcy5kZXZwYXRoLCAi c3BpIik7CisJcGFyYW1zLmRldmljZV90eXBlID0gZGVmYXVsdF90eXBlOwor CisJaWYgKDApIHsKKwkJLyogZGV2aWNlIGZhbWlseSAqLworCQkvKiBwYXJh bXMuc2V0bW9kZV9oYW5kbGVyID0gc21zc3BpX3NldG1vZGU7ICovCisJfSBl bHNlIHsKKwkJcGFyYW1zLmZsYWdzID0KKwkJICAgIFNNU19ERVZJQ0VfRkFN SUxZMiB8IFNNU19ERVZJQ0VfTk9UX1JFQURZIHwKKwkJICAgIFNNU19ST01f Tk9fUkVTUE9OU0U7CisJCXBhcmFtcy5wcmVsb2FkX2hhbmRsZXIgPSBzbXNz cGlfcHJlbG9hZDsKKwkJcGFyYW1zLnBvc3Rsb2FkX2hhbmRsZXIgPSBzbXNz cGlfcG9zdGxvYWQ7CisJfQorCisJcmV0ID0gc21zY29yZV9yZWdpc3Rlcl9k ZXZpY2UoJnBhcmFtcywgJnNwaV9kZXZpY2UtPmNvcmVkZXYpOworCWlmIChy ZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHNtc2NvcmVfcmVn aXN0ZXJfZGV2aWNlKC4uLikgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5j X18pOworCQlnb3RvIHJlZ19kZXZpY2VfZXJyb3I7CisJfQorCisJcmV0ID0g c21zY29yZV9zdGFydF9kZXZpY2Uoc3BpX2RldmljZS0+Y29yZWRldik7CisJ aWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgc21zY29y ZV9zdGFydF9kZXZpY2UoLi4uKSBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1 bmNfXyk7CisJCWdvdG8gc3RhcnRfZGV2aWNlX2Vycm9yOworCX0KKworCVBE RUJVRygiZXhpdGluZ1xuIik7CisJcmV0dXJuIDA7CisKK3N0YXJ0X2Rldmlj ZV9lcnJvcjoKKwlzbXNjb3JlX3VucmVnaXN0ZXJfZGV2aWNlKHNwaV9kZXZp Y2UtPmNvcmVkZXYpOworCityZWdfZGV2aWNlX2Vycm9yOgorCitjb21tb25f ZXJyb3I6CisJc21zc3BpcGh5X2RlaW5pdChzcGlfZGV2aWNlLT5waHlfZGV2 KTsKKworcGh5X2Vycm9yOgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRY X0JVRkZFUl9TSVpFLCBzcGlfZGV2aWNlLT50eGJ1ZiwKKwkJCSAgc3BpX2Rl dmljZS0+dHhidWZfcGh5X2FkZHIpOworCit0eGJ1Zl9lcnJvcjoKKwlwbGF0 Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmc21zc3BpX2RldmljZSk7CisKKwlQ REVCVUcoImV4aXRpbmcgZXJyb3IgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4g cmV0OworfQorCit2b2lkIHNtc3NwaV91bnJlZ2lzdGVyKHZvaWQpCit7CisJ c3BpX2RldmljZV9zdCAqc3BpX2RldmljZSA9IHNwaV9kZXY7CisJUERFQlVH KCJlbnRlcmluZ1xuIik7CisKKwkvKiBzdG9wIGludGVycnVwdHMgKi8KKwlz bXNzcGlwaHlfZGVpbml0KHNwaV9kZXZpY2UtPnBoeV9kZXYpOworCXNtc2Nv cmVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3BpX2RldmljZS0+Y29yZWRldik7CisK KwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUWF9CVUZGRVJfU0laRSwgc3Bp X2RldmljZS0+dHhidWYsCisJCQkgIHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9h ZGRyKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZzbXNzcGlf ZGV2aWNlKTsKKwlQREVCVUcoImV4aXRpbmdcbiIpOworfQpkaWZmIC11TnIg djRsLWR2Yi1jNWY5NzZjYWIwMTEvbGludXgvZHJpdmVycy9tZWRpYS9kdmIv c2lhbm8vc21zc3BpbG9nLmN+IHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMv bGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpbG9nLmN+Ci0t LSB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2 Yi9zaWFuby9zbXNzcGlsb2cuY34JMTk3MC0wMS0wMSAwMjowMDowMC4wMDAw MDAwMDAgKzAyMDAKKysrIHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGlu dXgvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpbG9nLmN+CTIwMDgt MTEtMTggMTg6MTM6MzcuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNDQ2 IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorCitTaWFubyBNb2JpbGUgU2ls aWNvbiwgSW5jLgorTURUViByZWNlaXZlciBrZXJuZWwgbW9kdWxlcy4KK0Nv cHlyaWdodCAoQykgMjAwNi0yMDA4LCBVcmkgU2hrb2xuaWsKKworVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKy8qIQorCVxmaWxlCXNwaWJ1c2Rydi5jCisKKwlcYnJp ZWYJc3BpIGJ1cyBkcml2ZXIgbW9kdWxlCisKKwlUaGlzIGZpbGUgY29udGFp bnMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNwaSBidXMgZHJpdmVyLgorKi8K KworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJzbXNj b3JlYXBpLmgiCisjaW5jbHVkZSAic21zZGJnX3Bybi5oIgorI2luY2x1ZGUg InNtc3NwaWNvbW1vbi5oIgorI2luY2x1ZGUgInNtc3NwaXBoeS5oIgorCisj ZGVmaW5lIFNNU19JTlRSX1BJTgkJCTE2ICAvKiAwIGZvciBub3ZhIHNpcCwg MjYgZm9yIHZlZ2EgKi8KKyNkZWZpbmUgVFhfQlVGRkVSX1NJWkUJCQkweDIw MAorI2RlZmluZSBSWF9CVUZGRVJfU0laRQkJCSgweDEwMDAgKyBTUElfUEFD S0VUX1NJWkUgKyAweDEwMCkKKyNkZWZpbmUgTlVNX1JYX0JVRkZFUlMJCQk3 MgorCitzdHJ1Y3QgeworCXN0cnVjdCBzcGlfZGV2IGRldjsKKwl2b2lkICpw aHlfZGV2OworCisJc3RydWN0IGNvbXBsZXRpb24gd3JpdGVfb3BlcmF0aW9u OworCXN0cnVjdCBsaXN0X2hlYWQgdHhfcXVldWU7CisJaW50IGFsbG9jYXRl ZFBhY2tldHM7CisJaW50IHBhZGRpbmdfYWxsb3dlZDsKKwljaGFyICpyeGJ1 ZjsKKwlkbWFfYWRkcl90IHJ4YnVmX3BoeV9hZGRyOworCisJc3RydWN0IHNt c2NvcmVfZGV2aWNlX3QgKmNvcmVkZXY7CisJc3RydWN0IGxpc3RfaGVhZCB0 eHF1ZXVlOworCWNoYXIgKnR4YnVmOworCWRtYV9hZGRyX3QgdHhidWZfcGh5 X2FkZHI7Cit9IHNwaV9kZXZpY2Vfc3Q7CisKK3N0cnVjdCBfc21zc3BpX3R4 bXNnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CS8qISBpbnRlcm5hbCBt YW5hZ2VtZW50ICovCisJdm9pZCAqYnVmZmVyOworCXNpemVfdCBzaXplOwor CWludCBhbGlnbm1lbnQ7CisJaW50IGFkZF9wcmVhbWJsZTsKKwlzdHJ1Y3Qg Y29tcGxldGlvbiBjb21wbGV0aW9uOworCXZvaWQgKCpwcmV3cml0ZSkgKHZv aWQgKik7CisJdm9pZCAoKnBvc3R3cml0ZSkgKHZvaWQgKik7Cit9IHNtc3Nw aV90eG1zZ190OworCitzcGlfZGV2aWNlX3N0ICpzcGlfZGV2OworCitzdGF0 aWMgdm9pZCBzcGlfd29ya2VyX3RocmVhZCh2b2lkICphcmcpOworc3RhdGlj IERFQ0xBUkVfV09SSyhzcGlfd29ya19xdWV1ZSwgKHZvaWQgKilzcGlfd29y a2VyX3RocmVhZCk7CitzdGF0aWMgdTggc21zc3BpX3ByZWFtYmxlW10gPSB7 IDB4YTUsIDB4NWEsIDB4ZTcsIDB4N2UgfTsKK3N0YXRpYyB1OCBzbXNzcGlf c3RhcnR1cFtdID0geyAwLCAwLCAweGRlLCAweGMxLCAweGE1LCAweDUxLCAw eGYxLCAweGVkIH07CitzdGF0aWMgdTMyIGRlZmF1bHRfdHlwZSA9IFNNU19O T1ZBX0EwOworc3RhdGljIHUzMiBpbnRyX3BpbiA9IFNNU19JTlRSX1BJTjsK KworbW9kdWxlX3BhcmFtKGRlZmF1bHRfdHlwZSwgaW50LCAwNjQ0KTsKK01P RFVMRV9QQVJNX0RFU0MoZGVmYXVsdF90eXBlLCAiZGVmYXVsdCBib2FyZCB0 eXBlLiIpOworCittb2R1bGVfcGFyYW0oaW50cl9waW4sIGludCwgMDY0NCk7 CitNT0RVTEVfUEFSTV9ERVNDKGludHJfcGluLCAiaW50ZXJydXB0IHBpbiBu dW1iZXIuIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCitzdGF0aWMgdm9pZCBzcGlfd29ya2VyX3RocmVhZCh2 b2lkICphcmcpCit7CisJc3BpX2RldmljZV9zdCAqc3BpX2RldmljZSA9IHNw aV9kZXY7CisJc21zc3BpX3R4bXNnX3QgKm1zZyA9IE5VTEw7CisJc3BpX21z Z19zdCB0eG1zZzsKKworCVBERUJVRygid29ya2VyIHN0YXJ0XG4iKTsKKwlk byB7CisJCS8qIGRvIHdlIGhhdmUgYSBtc2cgdG8gd3JpdGUgPyAqLworCQlp ZiAoIW1zZyAmJiAhbGlzdF9lbXB0eSgmc3BpX2RldmljZS0+dHhxdWV1ZSkp CisJCQltc2cgPQorCQkJICAgIChzbXNzcGlfdHhtc2dfdCAqKSBsaXN0X2Vu dHJ5KHNwaV9kZXZpY2UtPnR4cXVldWUuCisJCQkJCQkJICBuZXh0LCBzbXNz cGlfdHhtc2dfdCwKKwkJCQkJCQkgIG5vZGUpOworCisJCWlmIChtc2cpIHsK KwkJCWlmIChtc2ctPmFkZF9wcmVhbWJsZSkgeworCQkJCXR4bXNnLmxlbiA9 CisJCQkJICAgIG1pbihtc2ctPnNpemUgKyBzaXplb2Yoc21zc3BpX3ByZWFt YmxlKSwKKwkJCQkJKHNpemVfdCkgVFhfQlVGRkVSX1NJWkUpOworCQkJCXR4 bXNnLmJ1ZiA9IHNwaV9kZXZpY2UtPnR4YnVmOworCQkJCXR4bXNnLmJ1Zl9w aHlfYWRkciA9IHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRyOworCQkJCW1l bWNweSh0eG1zZy5idWYsIHNtc3NwaV9wcmVhbWJsZSwKKwkJCQkgICAgICAg c2l6ZW9mKHNtc3NwaV9wcmVhbWJsZSkpOworCQkJCW1lbWNweSgmdHhtc2cu YnVmW3NpemVvZihzbXNzcGlfcHJlYW1ibGUpXSwKKwkJCQkgICAgICAgbXNn LT5idWZmZXIsCisJCQkJICAgICAgIHR4bXNnLmxlbiAtIHNpemVvZihzbXNz cGlfcHJlYW1ibGUpKTsKKwkJCQltc2ctPmFkZF9wcmVhbWJsZSA9IDA7CisJ CQkJbXNnLT5idWZmZXIgKz0KKwkJCQkgICAgdHhtc2cubGVuIC0gc2l6ZW9m KHNtc3NwaV9wcmVhbWJsZSk7CisJCQkJbXNnLT5zaXplIC09CisJCQkJICAg IHR4bXNnLmxlbiAtIHNpemVvZihzbXNzcGlfcHJlYW1ibGUpOworCQkJCS8q IHplcm8gb3V0IHRoZSByZXN0IG9mIGFsaWduZWQgYnVmZmVyICovCisJCQkJ bWVtc2V0KCZ0eG1zZy5idWZbdHhtc2cubGVuXSwgMCwKKwkJCQkgICAgICAg VFhfQlVGRkVSX1NJWkUgLSB0eG1zZy5sZW4pOworCQkJCXNtc3NwaV9jb21t b25fdHJhbnNmZXJfbXNnKCZzcGlfZGV2aWNlLT5kZXYsCisJCQkJCQkJICAg JnR4bXNnLCAxKTsKKwkJCX0gZWxzZSB7CisJCQkJdHhtc2cubGVuID0KKwkJ CQkgICAgbWluKG1zZy0+c2l6ZSwgKHNpemVfdCkgVFhfQlVGRkVSX1NJWkUp OworCQkJCXR4bXNnLmJ1ZiA9IHNwaV9kZXZpY2UtPnR4YnVmOworCQkJCXR4 bXNnLmJ1Zl9waHlfYWRkciA9IHNwaV9kZXZpY2UtPnR4YnVmX3BoeV9hZGRy OworCQkJCW1lbWNweSh0eG1zZy5idWYsIG1zZy0+YnVmZmVyLCB0eG1zZy5s ZW4pOworCisJCQkJbXNnLT5idWZmZXIgKz0gdHhtc2cubGVuOworCQkJCW1z Zy0+c2l6ZSAtPSB0eG1zZy5sZW47CisJCQkJLyogemVybyBvdXQgdGhlIHJl c3Qgb2YgYWxpZ25lZCBidWZmZXIgKi8KKwkJCQltZW1zZXQoJnR4bXNnLmJ1 Zlt0eG1zZy5sZW5dLCAwLAorCQkJCSAgICAgICBUWF9CVUZGRVJfU0laRSAt IHR4bXNnLmxlbik7CisJCQkJc21zc3BpX2NvbW1vbl90cmFuc2Zlcl9tc2co JnNwaV9kZXZpY2UtPmRldiwKKwkJCQkJCQkgICAmdHhtc2csIDApOworCQkJ fQorCisJCX0gZWxzZSB7CisJCQlzbXNzcGlfY29tbW9uX3RyYW5zZmVyX21z Zygmc3BpX2RldmljZS0+ZGV2LCBOVUxMLCAxKTsKKwkJfQorCisJCS8qIGlm IHRoZXJlIHdhcyB3cml0ZSwgaGF2ZSB3ZSBmaW5pc2hlZCA/ICovCisJCWlm IChtc2cgJiYgIW1zZy0+c2l6ZSkgeworCQkJLyogY2FsbCBwb3N0d3JpdGUg Y2FsbCBiYWNrICovCisJCQlpZiAobXNnLT5wb3N0d3JpdGUpCisJCQkJbXNn LT5wb3N0d3JpdGUoc3BpX2RldmljZSk7CisKKwkJCWxpc3RfZGVsKCZtc2ct Pm5vZGUpOworCQkJY29tcGxldGUoJm1zZy0+Y29tcGxldGlvbik7CisJCQlt c2cgPSBOVUxMOworCQl9CisJCS8qIGlmIHRoZXJlIHdhcyByZWFkLCBkaWQg d2UgcmVhZCBhbnl0aGluZyA/ICovCisKKwl9IHdoaWxlICghbGlzdF9lbXB0 eSgmc3BpX2RldmljZS0+dHhxdWV1ZSkgfHwgbXNnKTsKKworCVBERUJVRygi d29ya2VyIGVuZFxuIik7CisKK30KKworc3RhdGljIHZvaWQgbXNnX2ZvdW5k KHZvaWQgKmNvbnRleHQsIHZvaWQgKmJ1ZiwgaW50IG9mZnNldCwgaW50IGxl bikKK3sKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNwaV9kZXZp Y2Vfc3QgKikgY29udGV4dDsKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAq Y2IgPQorCSAgICAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QKKwkgICAgICop KGNvbnRhaW5lcl9vZihidWYsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90LCBw KSk7CisKKwlQREVCVUcoImVudGVyaW5nXG4iKTsKKwljYi0+b2Zmc2V0ID0g b2Zmc2V0OworCWNiLT5zaXplID0gbGVuOworCS8qIFBFUlJPUiAoImJ1ZmZl ciAlcCBpcyBzZW50IGJhY2sgdG8gY29yZSBkYXRhYnVmPSVwLAorCQlvZmZz ZXQ9JWQuXG4iLCBjYiwgY2ItPnAsIGNiLT5vZmZzZXQpOyAqLworCXNtc2Nv cmVfb25yZXNwb25zZShzcGlfZGV2aWNlLT5jb3JlZGV2LCBjYik7CisKKwlQ REVCVUcoImV4aXRpbmdcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHNtc3Nw aV9pbnRfaGFuZGxlcih2b2lkICpjb250ZXh0KQoreworCXNwaV9kZXZpY2Vf c3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9zdCAqKSBjb250ZXh0Owor CVBERUJVRygiaW50ZXJydXB0XG4iKTsKKwlQUkVQQVJFX1dPUksoJnNwaV93 b3JrX3F1ZXVlLCAodm9pZCAqKXNwaV93b3JrZXJfdGhyZWFkKTsKKwlzcGlf ZGV2aWNlLT5wYWRkaW5nX2FsbG93ZWQgPSAxOworCXNjaGVkdWxlX3dvcmso JnNwaV93b3JrX3F1ZXVlKTsKK30KKworc3RhdGljIGludCBzbXNzcGlfcXVl dWVfbWVzc2FnZV9hbmRfd2FpdChzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNl LAorCQkJCQkgc21zc3BpX3R4bXNnX3QgKm1zZykKK3sKKwlpbml0X2NvbXBs ZXRpb24oJm1zZy0+Y29tcGxldGlvbik7CisJbGlzdF9hZGRfdGFpbCgmbXNn LT5ub2RlLCAmc3BpX2RldmljZS0+dHhxdWV1ZSk7CisJc2NoZWR1bGVfd29y aygmc3BpX3dvcmtfcXVldWUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1z Zy0+Y29tcGxldGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzbXNzcGlfcHJlbG9hZCh2b2lkICpjb250ZXh0KQoreworCXNtc3NwaV90 eG1zZ190IG1zZzsKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNw aV9kZXZpY2Vfc3QgKikgY29udGV4dDsKKworCXByZXBhcmVGb3JGV0RubChz cGlfZGV2aWNlLT5waHlfZGV2KTsKKwlQREVCVUcoIlNlbmRpbmcgU1BJIGlu aXQgc2VxdWVuY2VcbiIpOworCW1zZy5idWZmZXIgPSBzbXNzcGlfc3RhcnR1 cDsKKwltc2cuc2l6ZSA9IHNpemVvZihzbXNzcGlfc3RhcnR1cCk7CisJbXNn LmFsaWdubWVudCA9IDQ7CisJbXNnLmFkZF9wcmVhbWJsZSA9IDA7CisJbXNn LnByZXdyaXRlID0gTlVMTDsJLyogc21zc3BpcGh5X3JlZHVjZV9jbG9jazsg Ki8KKwltc2cucG9zdHdyaXRlID0gTlVMTDsKKworCXJldHVybiBzbXNzcGlf cXVldWVfbWVzc2FnZV9hbmRfd2FpdChjb250ZXh0LCAmbXNnKTsKK30KKwor c3RhdGljIGludCBzbXNzcGlfcG9zdGxvYWQodm9pZCAqY29udGV4dCkKK3sK KwlzdHJ1Y3QgX01zZyB7CisJCXN0cnVjdCBTbXNNc2dIZHJfU1QgaGRyOwor CQl1MzIgZGF0YVszXTsKKwl9IE1zZyA9IHsKKwkJeworCQlNU0dfU01TX1NQ SV9JTlRfTElORV9TRVRfUkVRLCAwLCBISUZfVEFTSywKKwkJCSAgICBzaXpl b2Yoc3RydWN0IF9Nc2cpLCAwfSwgeworCQkwLCBpbnRyX3BpbiwgMH0KKwl9 OworCXNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2RldmljZV9z dCAqKSBjb250ZXh0OworCXNtc3NwaV90eG1zZ190IG1zZzsKKworCVBERUJV RygiU2VuZGluZyBTUEkgU2V0IEludGVycnVwdCBjb21tYW5kIHNlcXVlbmNl XG4iKTsKKwlmd0RubENvbXBsZXRlKHNwaV9kZXZpY2UtPnBoeV9kZXYsIDAp OworCW1zZy5idWZmZXIgPSAmTXNnOworCW1zZy5zaXplID0gc2l6ZW9mKE1z Zyk7CisJbXNnLmFsaWdubWVudCA9IFNQSV9QQUNLRVRfU0laRTsKKwltc2cu YWRkX3ByZWFtYmxlID0gMTsKKwltc2cucHJld3JpdGUgPSBOVUxMOworCW1z Zy5wb3N0d3JpdGUgPSBOVUxMOwkvKiBzbXNzcGlwaHlfcmVzdG9yZV9jbG9j azsgKi8KKworCXJldHVybiBzbXNzcGlfcXVldWVfbWVzc2FnZV9hbmRfd2Fp dChjb250ZXh0LCAmbXNnKTsKK30KKworc3RhdGljIGludCBzbXNzcGlfd3Jp dGUodm9pZCAqY29udGV4dCwgdm9pZCAqdHhidWYsIHNpemVfdCBsZW4pCit7 CisJc21zc3BpX3R4bXNnX3QgbXNnOworCisJbXNnLmJ1ZmZlciA9IHR4YnVm OworCW1zZy5zaXplID0gbGVuOworCW1zZy5wcmV3cml0ZSA9IE5VTEw7CisJ bXNnLnBvc3R3cml0ZSA9IE5VTEw7CisKKwlpZiAobGVuID4gMHgxMDAwKSB7 CisJCS8qIFRoZSBGVyBpcyB0aGUgb25seSBsb25nIG1lc3NhZ2UuIERvIG5v dCBhZGQgcHJlYW1ibGUsCisJCWFuZCBkbyBub3QgcGFkZCBpdCAqLworCQlt c2cuYWxpZ25tZW50ID0gNDsKKwkJbXNnLmFkZF9wcmVhbWJsZSA9IDA7CisJ CW1zZy5wcmV3cml0ZSA9IHNtc2NoaXByZXNldDsKKwl9IGVsc2UgeworCQlt c2cuYWxpZ25tZW50ID0gU1BJX1BBQ0tFVF9TSVpFOworCQltc2cuYWRkX3By ZWFtYmxlID0gMTsKKwl9CisJUERFQlVHKCJXcml0aW5nIG1lc3NhZ2UgdG8g IFNQSS5cbiIpOworCVBERUJVRygibXNnIGhkcjogMHgleCwgMHgleCwgMHgl eCwgMHgleCwgMHgleCwgMHgleCwgMHgleCwgMHgleC5cbiIsCisJICAgICAg ICgodTggKikgdHhidWYpWzBdLCAoKHU4ICopIHR4YnVmKVsxXSwgKCh1OCAq KSB0eGJ1ZilbMl0sCisJICAgICAgICgodTggKikgdHhidWYpWzNdLCAoKHU4 ICopIHR4YnVmKVs0XSwgKCh1OCAqKSB0eGJ1ZilbNV0sCisJICAgICAgICgo dTggKikgdHhidWYpWzZdLCAoKHU4ICopIHR4YnVmKVs3XSk7CisJcmV0dXJu IHNtc3NwaV9xdWV1ZV9tZXNzYWdlX2FuZF93YWl0KGNvbnRleHQsICZtc2cp OworfQorCityeF9idWZmZXJfc3QgKmFsbG9jYXRlX3J4X2J1Zih2b2lkICpj b250ZXh0LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJf dCAqYnVmOworCXNwaV9kZXZpY2Vfc3QgKnNwaV9kZXZpY2UgPSAoc3BpX2Rl dmljZV9zdCAqKSBjb250ZXh0OworCWlmIChzaXplID4gUlhfQlVGRkVSX1NJ WkUpIHsKKwkJUEVSUk9SKCJSZXF1ZXN0ZWQgc2l6ZSBpcyBiaWdnZXIgdGhh biBtYXggYnVmZmVyIHNpemUuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CWJ1ZiA9IHNtc2NvcmVfZ2V0YnVmZmVyKHNwaV9kZXZpY2UtPmNvcmVkZXYp OworCVBERUJVRygiUmVjaWV2ZWQgUnggYnVmICVwIHBoeXNpY2FsIDB4JXgg KGNvbnRhaW5lZCBpbiAlcClcbiIsIGJ1Zi0+cCwKKwkgICAgICAgYnVmLT5w aHlzLCBidWYpOworCisJLyogbm90ZTogdGhpcyBpcyBub3QgbWlzdGFrZSEg dGhlIHJ4X2J1ZmZlcl9zdCBpcyBpZGVudGljYWwgdG8gcGFydCBvZgorCSAg IHNtc2NvcmVfYnVmZmVyX3QgYW5kIHdlIHJldHVybiB0aGUgYWRkcmVzcyBv ZiB0aGUgc3RhcnQgb2YgdGhlCisJICAgaWRlbnRpY2FsIHBhcnQgKi8KKwly ZXR1cm4gKHJ4X2J1ZmZlcl9zdCAqKSAmYnVmLT5wOworfQorCitzdGF0aWMg dm9pZCBmcmVlX3J4X2J1Zih2b2lkICpjb250ZXh0LCByeF9idWZmZXJfc3Qg KmJ1ZikKK3sKKwlzcGlfZGV2aWNlX3N0ICpzcGlfZGV2aWNlID0gKHNwaV9k ZXZpY2Vfc3QgKikgY29udGV4dDsKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJf dCAqY2IgPQorCSAgICAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QKKwkgICAg ICopKGNvbnRhaW5lcl9vZigoKHZvaWQgKilidWYpLCBzdHJ1Y3Qgc21zY29y ZV9idWZmZXJfdCwgcCkpOworCVBERUJVRygiYnVmZmVyICVwIGlzIHJlbGVh c2VkLlxuIiwgY2IpOworCXNtc2NvcmVfcHV0YnVmZmVyKHNwaV9kZXZpY2Ut PmNvcmVkZXYsIGNiKTsKK30KKworLyohIFJlbGVhc2UgZGV2aWNlIFNUVUIK KworXHBhcmFtW2luXQlkZXY6CQlkZXZpY2UgY29udHJvbCBibG9jaworXHJl dHVybgkJdm9pZAorKi8KK3N0YXRpYyB2b2lkIHNtc3NwaV9yZWxlYXNlKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlQREVCVUcoIm5vdGhpbmcgdG8gZG9c biIpOworCS8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqLworfQorCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNzcGlfZGV2aWNlID0geworCS5u YW1lID0gInNtc3NwaSIsCisJLmlkID0gMSwKKwkuZGV2ID0geworCQkucmVs ZWFzZSA9IHNtc3NwaV9yZWxlYXNlLAorCQl9LAorfTsKKworaW50IHNtc3Nw aV9yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBzbXNkZXZpY2VfcGFyYW1z X3QgcGFyYW1zOworCWludCByZXQ7CisJc3BpX2RldmljZV9zdCAqc3BpX2Rl dmljZTsKKwlzcGlfZGV2X2NiX3N0IGNvbW1vbl9jYjsKKworCVBERUJVRygi ZW50ZXJpbmcgXG4iKTsKKworCXNwaV9kZXZpY2UgPQorCSAgICAoc3BpX2Rl dmljZV9zdCAqKSBrbWFsbG9jKHNpemVvZihzcGlfZGV2aWNlX3N0KSwgR0ZQ X0tFUk5FTCk7CisJc3BpX2RldiA9IHNwaV9kZXZpY2U7CisKKwlJTklUX0xJ U1RfSEVBRCgmc3BpX2RldmljZS0+dHhxdWV1ZSk7CisKKwlyZXQgPSBwbGF0 Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtc3NwaV9kZXZpY2UpOworCWlmIChy ZXQgPCAwKSB7CisJCVBFUlJPUigicGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVy IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3BpX2Rldmlj ZS0+dHhidWYgPQorCSAgICBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgVFhf QlVGRkVSX1NJWkUsCisJCQkgICAgICAgJnNwaV9kZXZpY2UtPnR4YnVmX3Bo eV9hZGRyLAorCQkJICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlp ZiAoIXNwaV9kZXZpY2UtPnR4YnVmKSB7CisJCXByaW50ayhLRVJOX0lORk8g IiVzIGRtYV9hbGxvY19jb2hlcmVudCguLi4pIGZhaWxlZFxuIiwKKwkJICAg ICAgIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB0eGJ1 Zl9lcnJvcjsKKwl9CisKKwlzcGlfZGV2aWNlLT5waHlfZGV2ID0KKwkgICAg c21zc3BpcGh5X2luaXQoTlVMTCwgc21zc3BpX2ludF9oYW5kbGVyLCAmc3Bp X2RldmljZSk7CisJaWYgKHNwaV9kZXZpY2UtPnBoeV9kZXYgPT0gMCkgewor CQlwcmludGsoS0VSTl9JTkZPICIlcyBzbXNzcGlwaHlfaW5pdCguLi4pIGZh aWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIHBoeV9lcnJvcjsKKwl9CisK Kwljb21tb25fY2IuYWxsb2NhdGVfcnhfYnVmID0gYWxsb2NhdGVfcnhfYnVm OworCWNvbW1vbl9jYi5mcmVlX3J4X2J1ZiA9IGZyZWVfcnhfYnVmOworCWNv bW1vbl9jYi5tc2dfZm91bmRfY2IgPSBtc2dfZm91bmQ7CisJY29tbW9uX2Ni LnRyYW5zZmVyX2RhdGFfY2IgPSBzbXNzcGlidXNfeGZlcjsKKworCXJldCA9 CisJICAgIHNtc3NwaWNvbW1vbl9pbml0KCZzcGlfZGV2aWNlLT5kZXYsIHNw aV9kZXZpY2UsIHNwaV9kZXZpY2UtPnBoeV9kZXYsCisJCQkgICAgICAmY29t bW9uX2NiKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVz IHNtc3NwaXBoeV9pbml0KC4uLikgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJ CWdvdG8gY29tbW9uX2Vycm9yOworCX0KKworCS8qIHJlZ2lzdGVyIGluIHNt c2NvcmUgKi8KKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykp OworCXBhcmFtcy5jb250ZXh0ID0gc3BpX2RldmljZTsKKwlwYXJhbXMuZGV2 aWNlID0gJnNtc3NwaV9kZXZpY2UuZGV2OworCXBhcmFtcy5idWZmZXJfc2l6 ZSA9IFJYX0JVRkZFUl9TSVpFOworCXBhcmFtcy5udW1fYnVmZmVycyA9IE5V TV9SWF9CVUZGRVJTOworCXBhcmFtcy5mbGFncyA9IFNNU19ERVZJQ0VfTk9U X1JFQURZOworCXBhcmFtcy5zZW5kcmVxdWVzdF9oYW5kbGVyID0gc21zc3Bp X3dyaXRlOworCXN0cmNweShwYXJhbXMuZGV2cGF0aCwgInNwaSIpOworCXBh cmFtcy5kZXZpY2VfdHlwZSA9IGRlZmF1bHRfdHlwZTsKKworCWlmICgwKSB7 CisJCS8qIGRldmljZSBmYW1pbHkgKi8KKwkJLyogcGFyYW1zLnNldG1vZGVf aGFuZGxlciA9IHNtc3NwaV9zZXRtb2RlOyAqLworCX0gZWxzZSB7CisJCXBh cmFtcy5mbGFncyA9CisJCSAgICBTTVNfREVWSUNFX0ZBTUlMWTIgfCBTTVNf REVWSUNFX05PVF9SRUFEWSB8CisJCSAgICBTTVNfUk9NX05PX1JFU1BPTlNF OworCQlwYXJhbXMucHJlbG9hZF9oYW5kbGVyID0gc21zc3BpX3ByZWxvYWQ7 CisJCXBhcmFtcy5wb3N0bG9hZF9oYW5kbGVyID0gc21zc3BpX3Bvc3Rsb2Fk OworCX0KKworCXJldCA9IHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlKCZwYXJh bXMsICZzcGlfZGV2aWNlLT5jb3JlZGV2KTsKKwlpZiAocmV0IDwgMCkgewor CQlwcmludGsoS0VSTl9JTkZPICIlcyBzbXNjb3JlX3JlZ2lzdGVyX2Rldmlj ZSguLi4pIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJZ290 byByZWdfZGV2aWNlX2Vycm9yOworCX0KKworCXJldCA9IHNtc2NvcmVfc3Rh cnRfZGV2aWNlKHNwaV9kZXZpY2UtPmNvcmVkZXYpOworCWlmIChyZXQgPCAw KSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHNtc2NvcmVfc3RhcnRfZGV2 aWNlKC4uLikgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQln b3RvIHN0YXJ0X2RldmljZV9lcnJvcjsKKwl9CisKKwlQREVCVUcoImV4aXRp bmdcbiIpOworCXJldHVybiAwOworCitzdGFydF9kZXZpY2VfZXJyb3I6CisJ c21zY29yZV91bnJlZ2lzdGVyX2RldmljZShzcGlfZGV2aWNlLT5jb3JlZGV2 KTsKKworcmVnX2RldmljZV9lcnJvcjoKKworY29tbW9uX2Vycm9yOgorCXNt c3NwaXBoeV9kZWluaXQoc3BpX2RldmljZS0+cGh5X2Rldik7CisKK3BoeV9l cnJvcjoKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUWF9CVUZGRVJfU0la RSwgc3BpX2RldmljZS0+dHhidWYsCisJCQkgIHNwaV9kZXZpY2UtPnR4YnVm X3BoeV9hZGRyKTsKKwordHhidWZfZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNl X3VucmVnaXN0ZXIoJnNtc3NwaV9kZXZpY2UpOworCisJUERFQlVHKCJleGl0 aW5nIGVycm9yICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor dm9pZCBzbXNzcGlfdW5yZWdpc3Rlcih2b2lkKQoreworCXNwaV9kZXZpY2Vf c3QgKnNwaV9kZXZpY2UgPSBzcGlfZGV2OworCVBERUJVRygiZW50ZXJpbmdc biIpOworCisJLyogc3RvcCBpbnRlcnJ1cHRzICovCisJc21zc3BpcGh5X2Rl aW5pdChzcGlfZGV2aWNlLT5waHlfZGV2KTsKKwlzbXNjb3JlX3VucmVnaXN0 ZXJfZGV2aWNlKHNwaV9kZXZpY2UtPmNvcmVkZXYpOworCisJZG1hX2ZyZWVf Y29oZXJlbnQoTlVMTCwgVFhfQlVGRkVSX1NJWkUsIHNwaV9kZXZpY2UtPnR4 YnVmLAorCQkJICBzcGlfZGV2aWNlLT50eGJ1Zl9waHlfYWRkcik7CisKKwlw bGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmc21zc3BpX2RldmljZSk7CisJ UERFQlVHKCJleGl0aW5nXG4iKTsKK30KZGlmZiAtdU5yIHY0bC1kdmItYzVm OTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3Nw aXBoeS5oIHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJpdmVy cy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpcGh5LmgKLS0tIHY0bC1kdmItYzVm OTc2Y2FiMDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3Nw aXBoeS5oCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisr KyB2NGwtZHZiLWM1Zjk3NmNhYjAxMV8wMDAzL2xpbnV4L2RyaXZlcnMvbWVk aWEvZHZiL3NpYW5vL3Ntc3NwaXBoeS5oCTIwMDgtMTEtMTggMTg6MTM6Mzcu MDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisKK1NpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCitNRFRW IHJlY2VpdmVyIGtlcm5lbCBtb2R1bGVzLgorQ29weXJpZ2h0IChDKSAyMDA2 LTIwMDgsIFVyaSBTaGtvbG5paworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisj aWZuZGVmIF9fU01TX1NQSV9QSFlfSF9fCisjZGVmaW5lIF9fU01TX1NQSV9Q SFlfSF9fCisKK3ZvaWQgc21zc3BpYnVzX3hmZXIodm9pZCAqY29udGV4dCwg dW5zaWduZWQgY2hhciAqdHhidWYsCisJCSAgICB1bnNpZ25lZCBsb25nIHR4 YnVmX3BoeV9hZGRyLCB1bnNpZ25lZCBjaGFyICpyeGJ1ZiwKKwkJICAgIHVu c2lnbmVkIGxvbmcgcnhidWZfcGh5X2FkZHIsIGludCBsZW4pOwordm9pZCAq c21zc3BpcGh5X2luaXQodm9pZCAqY29udGV4dCwgdm9pZCAoKnNtc3NwaV9p bnRlcnJ1cHRIYW5kbGVyKSAodm9pZCAqKSwKKwkJICAgICB2b2lkICppbnRy X2NvbnRleHQpOwordm9pZCBzbXNzcGlwaHlfZGVpbml0KHZvaWQgKmNvbnRl eHQpOwordm9pZCBzbXNjaGlwcmVzZXQodm9pZCAqY29udGV4dCk7Cit2b2lk IFdyaXRlRld0b1N0ZWxsYXIodm9pZCAqcFNwaVBoeSwgdW5zaWduZWQgY2hh ciAqcEZXLCB1bnNpZ25lZCBsb25nIExlbik7Cit2b2lkIHByZXBhcmVGb3JG V0RubCh2b2lkICpwU3BpUGh5KTsKK3ZvaWQgZndEbmxDb21wbGV0ZSh2b2lk ICpjb250ZXh0LCBpbnQgQXBwKTsKKworI2VuZGlmIC8qIF9fU01TX1NQSV9Q SFlfSF9fICovCmRpZmYgLXVOciB2NGwtZHZiLWM1Zjk3NmNhYjAxMS9saW51 eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlwaHlfcHhhLmMgdjRs LWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlhL2R2 Yi9zaWFuby9zbXNzcGlwaHlfcHhhLmMKLS0tIHY0bC1kdmItYzVmOTc2Y2Fi MDExL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NwaXBoeV9w eGEuYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysg djRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51eC9kcml2ZXJzL21lZGlh L2R2Yi9zaWFuby9zbXNzcGlwaHlfcHhhLmMJMjAwOC0xMS0xOCAxODoxMzoz Ny4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw0MzUgQEAKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisKK1NpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCitN RFRWIHJlY2VpdmVyIGtlcm5lbCBtb2R1bGVzLgorQ29weXJpZ2h0IChDKSAy MDA2LTIwMDgsIFVyaSBTaGtvbG5paworCitUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorCisqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor I2RlZmluZSBQWEFfMzEwX0xWCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3 YXJlLmg+CisjaWZkZWYgUFhBXzMxMF9MVgorI2luY2x1ZGUgPGFzbS9hcmNo L3NzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC5oPgorI2luY2x1ZGUg PGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEzeHhf Z3Bpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJzbXNkYmdfcHJu LmgiCisKKyNpZmRlZiBQWEFfMzEwX0xWCisKKyNkZWZpbmUgU1NQX1BPUlQg NAorI2RlZmluZSBTU1BfQ0tFTiBDS0VOX1NTUDQKKyNkZWZpbmUgU01TX0lS UV9HUElPIE1GUF9QSU5fR1BJTzkzCisKKyNpZiAoU1NQX1BPUlQgPT0gMSkK KyNkZWZpbmUgU0RDTVJfUlggRFJDTVJSWFNTRFIKKyNkZWZpbmUgU0RDTVJf VFggRFJDTVJUWFNTRFIKKyNlbHNlCisjaWYgKFNTUF9QT1JUID09IDIpCisj ZGVmaW5lIFNEQ01SX1JYIERSQ01SMTUKKyNkZWZpbmUgU0RDTVJfVFggRFJD TVIxNgorI2Vsc2UKKyNpZiAoU1NQX1BPUlQgPT0gMykKKyNkZWZpbmUgU0RD TVJfUlggRFJDTVI2NgorI2RlZmluZSBTRENNUl9UWCBEUkNNUjY3CisjZWxz ZQorI2lmIChTU1BfUE9SVCA9PSA0KQorI2RlZmluZSBTRENNUl9SWCBEUkNN UlJYU0FEUgorI2RlZmluZSBTRENNUl9UWCBEUkNNUlRYU0FEUgorI2VuZGlm CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZWxzZSAvKlBYQV8zMTBfTFYg Ki8KKyNkZWZpbmUgU1NQX1BPUlQgMQorI2RlZmluZSBTRENNUl9SWCBEUkNN UlJYU1NEUgorI2RlZmluZSBTRENNUl9UWCBEUkNNUlRYU1NEUgorCisjZW5k aWYgLypQWEFfMzEwX0xWICovCisKKy8qIE1hY3JvcyBkZWZpbmluZyBwaHlz aWNhbCBsYXllciBiZWhhdmlvdXIqLworI2lmZGVmIFBYQV8zMTBfTFYKKyNk ZWZpbmUgQ0xPQ0tfRkFDVE9SIDEKKyNlbHNlIC8qUFhBXzMxMF9MViAqLwor I2RlZmluZSBDTE9DS19GQUNUT1IgMgorI2VuZGlmIC8qUFhBXzMxMF9MViAq LworCisvKiBNYWNyb3MgZm9yIGNvZGluZyByZXVzZSAqLworCisvKiEgbWFj cm8gdG8gYWxpZ24gdGhlIGRpdmlkZXIgdG8gdGhlIHByb3BlciBvZmZzZXQg aW4gdGhlIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgQ0xPQ0tfRElWSURF UihpKSgoaS0xKTw8OCkJLyogMS00MDk2ICovCisKKy8qISBETUEgcmVsYXRl ZCBtYWNyb3MgKi8KKyNkZWZpbmUgRE1BX0lOVF9NQVNLIChEQ1NSX0VORElO VFIgfCBEQ1NSX1NUQVJUSU5UUiB8IERDU1JfQlVTRVJSKQorI2RlZmluZSBS RVNFVF9ETUFfQ0hBTk5FTCAoRENTUl9OT0RFU0MgfCBETUFfSU5UX01BU0sp CisKKyNkZWZpbmUgU1NQX1RJTUVPVVRfU0NBTEUgKDc2OSkKKyNkZWZpbmUg U1NQX1RJTUVPVVQoeCkgKCh4KjEwMDAwKS9TU1BfVElNRU9VVF9TQ0FMRSkK KworI2RlZmluZSBTUElfUEFDS0VUX1NJWkUgMjU2CisKKy8qIHBoeXNpY2Fs IGxheWVyIHZhcmlhYmxlcyAqLworLyohIGdsb2JhbCBidXMgZGF0YSAqLwor c3RydWN0IHsKKwlzdHJ1Y3Qgc3NwX2RldiBzc3BkZXY7CS8qITwgc3NwIHBv cnQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjb21wbGV0aW9uIHRyYW5z ZmVyX2luX3Byb2Nlc3M7CisJdm9pZCAoKmludGVycnVwdEhhbmRsZXIpICh2 b2lkICopOworCXZvaWQgKmludHJfY29udGV4dDsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7CS8qITwgZGV2aWNlIG1vZGVsIHN0dWZmICovCisJaW50IHJ4X2Rt YV9jaGFubmVsOworCWludCB0eF9kbWFfY2hhbm5lbDsKKwlpbnQgcnhfYnVm X2xlbjsKKwlpbnQgdHhfYnVmX2xlbjsKK30gc3BpcGh5X2Rldl9zdDsKKwor LyohCitpbnZlcnQgdGhlIGVuZGlhbm5lc3Mgb2YgYSBzaW5nbGUgMzJpdCBp bnRlZ2VyCisKK1xwYXJhbVtpbl0JCXU6IHdvcmQgdG8gaW52ZXJ0CisKK1xy ZXR1cm4JCXRoZSBpbnZlcnRlZCB3b3JkCisqLworc3RhdGljIGlubGluZSB1 MzIgaW52ZXJ0X2JvKHUzMiB1KQoreworCXJldHVybiAoKHUgJiAweGZmKSA8 PCAyNCkgfCAoKHUgJiAweGZmMDApIDw8IDgpIHwgKCh1ICYgMHhmZjAwMDAp ID4+IDgpCisJCXwgKCh1ICYgMHhmZjAwMDAwMCkgPj4gMjQpOworfQorCisv KiEKK2ludmVydCB0aGUgZW5kaWFubmVzcyBvZiBhIGRhdGEgYnVmZmVyCisK K1xwYXJhbVtpbl0JCWJ1ZjogYnVmZmVyIHRvIGludmVydAorXHBhcmFtW2lu XQkJbGVuOiBidWZmZXIgbGVuZ3RoCisKK1xyZXR1cm4JCXRoZSBpbnZlcnRl ZCB3b3JkCisqLworCitzdGF0aWMgaW50IGludmVydF9lbmRpYW5uZXNzKGNo YXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwl1MzIgKnB0ciA9ICh1 MzIgKikgYnVmOworCisJbGVuID0gKGxlbiArIDMpIC8gNDsKKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyssIHB0cisrKQorCQkqcHRyID0gaW52ZXJ0X2Jv KCpwdHIpOworCisJcmV0dXJuIDQgKiAoKGxlbiArIDMpICYgKH4zKSk7Cit9 CisKKy8qISBNYXAgRE1BIGJ1ZmZlcnMgd2hlbiByZXF1ZXN0IHN0YXJ0cwor CitccmV0dXJuCWVycm9yIHN0YXR1cworKi8KK3N0YXRpYyB1bnNpZ25lZCBs b25nIGRtYV9tYXBfYnVmKHNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXYsIGNo YXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkgaW50IGRpcmVjdGlvbikKK3sKKwl1 bnNpZ25lZCBsb25nIHBoeWFkZHI7CisJLyogbWFwIGRtYSBidWZmZXJzICov CisJaWYgKCFidWYpIHsKKwkJUEVSUk9SKCIgTlVMTCBidWZmZXJzIHRvIG1h cFxuIik7CisJCXJldHVybiAwOworCX0KKwkvKiBtYXAgYnVmZmVyICovCisJ cGh5YWRkciA9IGRtYV9tYXBfc2luZ2xlKHNwaXBoeV9kZXYtPmRldiwgYnVm LCBsZW4sIGRpcmVjdGlvbik7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBo eWFkZHIpKSB7CisJCVBFUlJPUigiZXhpdGluZyAgd2l0aCBlcnJvclxuIik7 CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcGh5YWRkcjsKK30KKworc3Rh dGljIGlycXJldHVybl90IHNwaWJ1c19pbnRlcnJ1cHQoaW50IGlycSwgdm9p ZCAqY29udGV4dCkKK3sKKwlzcGlwaHlfZGV2X3N0ICpzcGlwaHlfZGV2ID0g KHNwaXBoeV9kZXZfc3QgKikgY29udGV4dDsKKwlQREVCVUcoInJlY2lldmVk IGludGVycnVwdCBmcm9tIGRldmljZSBkZXY9JXAuXG4iLCBjb250ZXh0KTsK KwlpZiAoc3BpcGh5X2Rldi0+aW50ZXJydXB0SGFuZGxlcikKKwkJc3BpcGh5 X2Rldi0+aW50ZXJydXB0SGFuZGxlcihzcGlwaHlfZGV2LT5pbnRyX2NvbnRl eHQpOworCXJldHVybiBJUlFfSEFORExFRDsKKworfQorCisvKiEJRE1BIGNv bnRyb2xsZXIgY2FsbGJhY2sgLSBjYWxsZWQgb25seSBvbiBCVVMgZXJyb3Ig Y29uZGl0aW9uCisKK1xwYXJhbVtpbl0JY2hhbm5lbDogRE1BIGNoYW5uZWwg d2l0aCBlcnJvcgorXHBhcmFtW2luXQlkYXRhOiBVbnVzZWQKK1xwYXJhbVtp bl0JcmVnczogVW51c2VkCitccmV0dXJuCQl2b2lkCisqLworc3RhdGljIHZv aWQgc3BpYnVzX2RtYV9oYW5kbGVyKGludCBjaGFubmVsLCB2b2lkICpjb250 ZXh0KQoreworCXNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXYgPSAoc3BpcGh5 X2Rldl9zdCAqKSBjb250ZXh0OworCXUzMiBpcnFfc3RhdHVzID0gRENTUihj aGFubmVsKSAmIERNQV9JTlRfTUFTSzsKKworCVBERUJVRygicmVjaWV2ZWQg aW50ZXJydXB0IGZyb20gZG1hIGNoYW5uZWwgJWQgaXJxIHN0YXR1cyAleC5c biIsCisJICAgICAgIGNoYW5uZWwsIGlycV9zdGF0dXMpOworCWlmIChpcnFf c3RhdHVzICYgRENTUl9CVVNFUlIpIHsKKwkJUEVSUk9SKCJidXMgZXJyb3Ih ISEgcmVzZXR0aW5nIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOworCisJCURD U1Ioc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpID0gUkVTRVRfRE1BX0NI QU5ORUw7CisJCURDU1Ioc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwpID0g UkVTRVRfRE1BX0NIQU5ORUw7CisJfQorCURDU1Ioc3BpcGh5X2Rldi0+cnhf ZG1hX2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJY29tcGxldGUo JnNwaXBoeV9kZXYtPnRyYW5zZmVyX2luX3Byb2Nlc3MpOworfQorCit2b2lk IHNtc3NwaWJ1c194ZmVyKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIg KnR4YnVmLAorCQkgICAgdW5zaWduZWQgbG9uZyB0eGJ1Zl9waHlfYWRkciwg dW5zaWduZWQgY2hhciAqcnhidWYsCisJCSAgICB1bnNpZ25lZCBsb25nIHJ4 YnVmX3BoeV9hZGRyLCBpbnQgbGVuKQoreworCS8qIERNQSBidXJzdCBpcyA4 IGJ5dGVzLCB0aGVyZWZvcmUgd2UgbmVlZCB0bXAgYnVmZmVyIHRoYXQgc2l6 ZS4gKi8KKwl1bnNpZ25lZCBsb25nIHRtcFsyXTsKKwl1bnNpZ25lZCBsb25n IHR4ZG1hOworCXNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXYgPSAoc3BpcGh5 X2Rldl9zdCAqKSBjb250ZXh0OworCisJLyogcHJvZ3JhbSB0aGUgY29udHJv bGxlciAqLworCWlmICh0eGJ1ZikKKwkJaW52ZXJ0X2VuZGlhbm5lc3ModHhi dWYsIGxlbik7CisKKwl0bXBbMF0gPSAtMTsKKwl0bXBbMV0gPSAtMTsKKwor CS8qIG1hcCBSWCBidWZmZXIgKi8KKworCWlmICghdHhidWYpCisJCXR4ZG1h ID0KKwkJICAgIGRtYV9tYXBfYnVmKHNwaXBoeV9kZXYsIChjaGFyICopdG1w LCBzaXplb2YodG1wKSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwllbHNlCisJ CXR4ZG1hID0gdHhidWZfcGh5X2FkZHI7CisKKwlpbml0X2NvbXBsZXRpb24o JnNwaXBoeV9kZXYtPnRyYW5zZmVyX2luX3Byb2Nlc3MpOworCS8qIGNvbmZp Z3VyZSBETUEgQ29udHJvbGxlciAqLworCURDU1Ioc3BpcGh5X2Rldi0+cnhf ZG1hX2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJRFNBRFIoc3Bp cGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpID0gX19QUkVHKFNTRFJfUChTU1Bf UE9SVCkpOworCURUQURSKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9 IHJ4YnVmX3BoeV9hZGRyOworCURDTUQoc3BpcGh5X2Rldi0+cnhfZG1hX2No YW5uZWwpID0gRENNRF9JTkNUUkdBRERSIHwgRENNRF9GTE9XU1JDCisJICAg IHwgRENNRF9XSURUSDQgfCBEQ01EX0VORElSUUVOIHwgRENNRF9CVVJTVDgg fCBsZW47CisJUERFQlVHKCJyeCBjaGFubmVsPSVkLCBzcmM9MHgleCwgZHN0 PTB4JXgsIGNtZD0weCV4XG4iLAorCSAgICAgICBzcGlwaHlfZGV2LT5yeF9k bWFfY2hhbm5lbCwgX19QUkVHKFNTRFJfUChTU1BfUE9SVCkpLAorCSAgICAg ICAodW5zaWduZWQgaW50KXJ4YnVmX3BoeV9hZGRyLCBEQ01EKHNwaXBoeV9k ZXYtPnJ4X2RtYV9jaGFubmVsKSk7CisJc3BpcGh5X2Rldi0+cnhfYnVmX2xl biA9IGxlbjsKKworCURDU1Ioc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwp ID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJRFRBRFIoc3BpcGh5X2Rldi0+dHhf ZG1hX2NoYW5uZWwpID0gX19QUkVHKFNTRFJfUChTU1BfUE9SVCkpOworCURT QURSKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKSA9IHR4ZG1hOworCWlm ICh0eGJ1ZikgeworCQlEQ01EKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVs KSA9CisJCSAgICBEQ01EX0lOQ1NSQ0FERFIgfCBEQ01EX0ZMT1dUUkcgfCBE Q01EX1dJRFRINAorCQkgICAgLyogfCBEQ01EX0VORElSUUVOICovICB8IERD TURfQlVSU1Q4IHwgbGVuOworCQlzcGlwaHlfZGV2LT50eF9idWZfbGVuID0g bGVuOworCX0gZWxzZSB7CisJCURDTUQoc3BpcGh5X2Rldi0+dHhfZG1hX2No YW5uZWwpID0gRENNRF9GTE9XVFJHCisJCSAgICB8IERDTURfV0lEVEg0IC8q IHwgRENNRF9FTkRJUlFFTiAqLyAgfCBEQ01EX0JVUlNUOCB8IGxlbjsKKwkJ c3BpcGh5X2Rldi0+dHhfYnVmX2xlbiA9IDQ7CisJfQorCisJUERFQlVHKCJ0 eCBjaGFubmVsPSVkLCBzcmM9MHgleCwgZHN0PTB4JXgsIGNtZD0weCV4XG4i LAorCSAgICAgICBzcGlwaHlfZGV2LT50eF9kbWFfY2hhbm5lbCwgKHVuc2ln bmVkIGludCl0eGRtYSwKKwkgICAgICAgX19QUkVHKFNTRFJfUChTU1BfUE9S VCkpLCBEQ01EKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKSk7CisJLyog REFMR04gLSBETUEgQUxJR05NRU5UIFJFRy4gKi8KKwlpZiAocnhidWZfcGh5 X2FkZHIgJiAweDcpCisJCURBTEdOIHw9ICgxIDw8IHNwaXBoeV9kZXYtPnJ4 X2RtYV9jaGFubmVsKTsKKwllbHNlCisJCURBTEdOICY9IH4oMSA8PCBzcGlw aHlfZGV2LT5yeF9kbWFfY2hhbm5lbCk7CisJaWYgKHR4ZG1hICYgMHg3KQor CQlEQUxHTiB8PSAoMSA8PCBzcGlwaHlfZGV2LT50eF9kbWFfY2hhbm5lbCk7 CisJZWxzZQorCQlEQUxHTiAmPSB+KDEgPDwgc3BpcGh5X2Rldi0+dHhfZG1h X2NoYW5uZWwpOworCisJLyogU3RhcnQgRE1BIGNvbnRyb2xsZXIgKi8KKwlE Q1NSKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSB8PSBEQ1NSX1JVTjsK KwlEQ1NSKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKSB8PSBEQ1NSX1JV TjsKKwlQREVCVUcoIkRNQSBydW5uaW5nLiB3YWl0IGZvciBjb21wbGV0aW9u LlxuIik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmc3BpcGh5X2Rldi0+dHJh bnNmZXJfaW5fcHJvY2Vzcyk7CisJUERFQlVHKCJETUEgY29tcGxldGUuXG4i KTsKKwlpbnZlcnRfZW5kaWFubmVzcyhyeGJ1ZiwgbGVuKTsKK30KKwordm9p ZCBzbXNjaGlwcmVzZXQodm9pZCAqY29udGV4dCkKK3sKKworfQorCit2b2lk ICpzbXNzcGlwaHlfaW5pdCh2b2lkICpjb250ZXh0LCB2b2lkICgqc21zc3Bp X2ludGVycnVwdEhhbmRsZXIpICh2b2lkICopLAorCQkgICAgIHZvaWQgKmlu dHJfY29udGV4dCkKK3sKKwlpbnQgcmV0OworCXNwaXBoeV9kZXZfc3QgKnNw aXBoeV9kZXY7CisJdTMyIG1vZGUgPSAwLCBmbGFncyA9IDAsIHBzcF9mbGFn cyA9IDAsIHNwZWVkID0gMDsKKwlQREVCVUcoImVudGVyaW5nXG4iKTsKKwor CXNwaXBoeV9kZXYgPSBrbWFsbG9jKHNpemVvZihzcGlwaHlfZGV2X3N0KSwg R0ZQX0tFUk5FTCk7CisKKwlyZXQgPSBzc3BfaW5pdCgmc3BpcGh5X2Rldi0+ c3NwZGV2LCBTU1BfUE9SVCwgMCk7CisJaWYgKHJldCkgeworCQlQRVJST1Io InNzcF9pbml0IGZhaWxlZC4gZXJyb3IgJWQiLCByZXQpOworCQlnb3RvIGVy cm9yX3NzcGluaXQ7CisJfQorI2lmZGVmIFBYQV8zMTBfTFYKKwlweGEzeHhf bWZwX3NldF9hZmRzKFNNU19JUlFfR1BJTywgTUZQX0FGMCwgTUZQX0RTMDNY KTsKKwlweGEzeHhfZ3Bpb19zZXRfcmlzaW5nX2VkZ2VfZGV0ZWN0KFNNU19J UlFfR1BJTywgMSk7CisJcHhhM3h4X2dwaW9fc2V0X2RpcmVjdGlvbihTTVNf SVJRX0dQSU8sIEdQSU9fRElSX0lOKTsKKyNlbHNlIC8qUFhBXzMxMF9MViAq LworCS8qIHJlY2VpdmUgaW5wdXQgaW50ZXJydXB0cyBmcm9tIHRoZSBTTVMg MTAwMCBvbiBKMzIgcGluIDExICovCisJcHhhX2dwaW9fbW9kZSgyMiB8IEdQ SU9fSU4pOworI2VuZGlmIC8qUFhBXzMxMF9MViAqLworCXNwZWVkID0gQ0xP Q0tfRElWSURFUihDTE9DS19GQUNUT1IpOyAvKiBjbG9jayBkaXZpc29yIGZv ciB0aGlzIG1vZGUgKi8KKwkvKiAzMmJpdCB3b3JkcyBpbiB0aGUgZmlmbyAq LworCW1vZGUgPSBTU0NSMF9Nb3Rvcm9sYSB8IFNTQ1IwX0RhdGFTaXplKDE2 KSB8IFNTQ1IwX0VEU1M7CisJLyogU1NDUjEgPSBmbGFncyAqLworCWZsYWdz ID0gU1NDUjFfUnhUcmVzaCgxKSB8IFNTQ1IxX1R4VHJlc2goMSkgfCBTU0NS MV9UU1JFIHwKKwkgU1NDUjFfUlNSRSB8IFNTQ1IxX1JJRSB8IFNTQ1IxX1RS QUlMOwkvKiB8IFNTQ1IxX1RJRSAqLworCisJc3NwX2NvbmZpZygmc3BpcGh5 X2Rldi0+c3NwZGV2LCBtb2RlLCBmbGFncywgcHNwX2ZsYWdzLCBzcGVlZCk7 CisJc3NwX2Rpc2FibGUoJihzcGlwaHlfZGV2LT5zc3BkZXYpKTsKKyNpZmRl ZiBQWEFfMzEwX0xWCisKKwlweGEzeHhfbWZwX3NldF9hZmRzKE1GUF9QSU5f R1BJTzk1LCBNRlBfQUYxLCBNRlBfRFMwM1gpOworCXB4YTN4eF9tZnBfc2V0 X2FmZHMoTUZQX1BJTl9HUElPOTYsIE1GUF9BRjEsIE1GUF9EUzAzWCk7CisJ cHhhM3h4X21mcF9zZXRfYWZkcyhNRlBfUElOX0dQSU85NywgTUZQX0FGMSwg TUZQX0RTMDNYKTsKKwlweGEzeHhfbWZwX3NldF9hZmRzKE1GUF9QSU5fR1BJ Tzk4LCBNRlBfQUYxLCBNRlBfRFMwM1gpOworI2Vsc2UgLypQWEFfMzEwX0xW ICovCisJcHhhX2dwaW9fbW9kZShHUElPMjNfU0NMS19NRCk7CisJcHhhX2dw aW9fbW9kZShHUElPMjRfU0ZSTV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElP MjVfU1RYRF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMjZfU1JYRF9NRCk7 CisjZW5kaWYgLypQWEFfMzEwX0xWICovCisJLyogc2V0dXAgdGhlIGRtYSAq LworCXNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsID0KKwkgICAgcHhhX3Jl cXVlc3RfZG1hKCJzcGlidXNkcnZfcngiLCBETUFfUFJJT19ISUdILCBzcGli dXNfZG1hX2hhbmRsZXIsCisJCQkgICAgc3BpcGh5X2Rldik7CisJaWYgKHNw aXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsIDwgMCkgeworCQlyZXQgPSAtRUJV U1k7CisJCVBFUlJPUigiQ291bGQgbm90IGdldCBSWCBETUEgY2hhbm5lbC5c biIpOworCQlnb3RvIGVycm9yX3J4ZG1hOworCX0KKwlzcGlwaHlfZGV2LT50 eF9kbWFfY2hhbm5lbCA9CisJICAgIHB4YV9yZXF1ZXN0X2RtYSgic3BpYnVz ZHJ2X3R4IiwgRE1BX1BSSU9fSElHSCwgc3BpYnVzX2RtYV9oYW5kbGVyLAor CQkJICAgIHNwaXBoeV9kZXYpOworCWlmIChzcGlwaHlfZGV2LT50eF9kbWFf Y2hhbm5lbCA8IDApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlQRVJST1IoIkNv dWxkIG5vdCBnZXQgVFggRE1BIGNoYW5uZWwuXG4iKTsKKwkJZ290byBlcnJv cl90eGRtYTsKKwl9CisKKwlTRENNUl9SWCA9IERSQ01SX01BUFZMRCB8IHNw aXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsOworCVNEQ01SX1RYID0gRFJDTVJf TUFQVkxEIHwgc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWw7CisKKwlQREVC VUcoImRtYSByeCBjaGFubmVsOiAlZCwgZG1hIHR4IGNoYW5uZWw6ICVkXG4i LAorCSAgICAgICBzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCwgc3BpcGh5 X2Rldi0+dHhfZG1hX2NoYW5uZWwpOworCS8qIGVuYWJsZSB0aGUgY2xvY2sg Ki8KKworCXNwaXBoeV9kZXYtPmludGVycnVwdEhhbmRsZXIgPSBzbXNzcGlf aW50ZXJydXB0SGFuZGxlcjsKKwlzcGlwaHlfZGV2LT5pbnRyX2NvbnRleHQg PSBpbnRyX2NvbnRleHQ7CisjaWZkZWYgUFhBXzMxMF9MVgorCXNldF9pcnFf dHlwZShJUlFfR1BJTyhNRlAyR1BJTyhTTVNfSVJRX0dQSU8pKSwgSVJRVF9G QUxMSU5HKTsKKwlyZXQgPQorCSAgICByZXF1ZXN0X2lycShJUlFfR1BJTyhN RlAyR1BJTyhTTVNfSVJRX0dQSU8pKSwgc3BpYnVzX2ludGVycnVwdCwKKwkJ CVNBX0lOVEVSUlVQVCwgIlNNU1NQSSIsIHNwaXBoeV9kZXYpOworI2Vsc2Ug LypQWEFfMzEwX0xWICovCisJc2V0X2lycV90eXBlKElSUV9HUElPKDIyKSwg SVJRVF9GQUxMSU5HKTsKKwlyZXQgPQorCSAgICByZXF1ZXN0X2lycShJUlFf R1BJTygyMiksIHNwaWJ1c19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIlNN U1NQSSIsCisJCQkmKGdfc3BpZGF0YS5zc3BkZXYpKTsKKyNlbmRpZiAvKlBY QV8zMTBfTFYgKi8KKwlpZiAocmV0KSB7CisJCVBFUlJPUigiQ291bGQgbm90 IGdldCBpbnRlcnJ1cHQgZm9yIFNNUyBkZXZpY2UuIHN0YXR1cyA9JWRcbiIs CisJCSAgICAgICByZXQpOworCQlnb3RvIGVycm9yX2lycTsKKwl9CisKKwlz c3BfZW5hYmxlKCYoc3BpcGh5X2Rldi0+c3NwZGV2KSk7CisJUERFQlVHKCJl eGl0aW5nXG4iKTsKKwlyZXR1cm4gc3BpcGh5X2RldjsKK2Vycm9yX2lycToK KwlpZiAoc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwgPj0gMCkKKwkJcHhh X2ZyZWVfZG1hKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKTsKKworZXJy b3JfdHhkbWE6CisJaWYgKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsID49 IDApCisJCXB4YV9mcmVlX2RtYShzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5l bCk7CisKK2Vycm9yX3J4ZG1hOgorCXNzcF9leGl0KCZzcGlwaHlfZGV2LT5z c3BkZXYpOworZXJyb3Jfc3NwaW5pdDoKKwlQREVCVUcoImV4aXRpbmcgb24g ZXJyb3JcbiIpOworCXJldHVybiAwOworfQorCitpbnQgc21zc3BpcGh5X2Rl aW5pdCh2b2lkICpjb250ZXh0KQoreworCXNwaXBoeV9kZXZfc3QgKnNwaXBo eV9kZXYgPSAoc3BpcGh5X2Rldl9zdCAqKSBjb250ZXh0OworCVBERUJVRygi ZW50ZXJpbmdcbiIpOworCisJLyogZGlzYWJsZSB0aGUgc3BpIHBvcnQgKi8K Kwlzc3BfZmx1c2goJnNwaXBoeV9kZXYtPnNzcGRldik7CisJc3NwX2Rpc2Fi bGUoJnNwaXBoeV9kZXYtPnNzcGRldik7CisKKwkvKiAgcmVsZWFzZSBETUEg cmVzb3VyY2VzICovCisJaWYgKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVs ID49IDApCisJCXB4YV9mcmVlX2RtYShzcGlwaHlfZGV2LT5yeF9kbWFfY2hh bm5lbCk7CisKKwlpZiAoc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwgPj0g MCkKKwkJcHhhX2ZyZWVfZG1hKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVs KTsKKworCS8qIHJlbGVhc2UgTWVtb3J5IHJlc291cmNlcyAqLworI2lmZGVm IFBYQV8zMTBfTFYKKwlmcmVlX2lycShJUlFfR1BJTyhNRlAyR1BJTyhTTVNf SVJRX0dQSU8pKSwgc3BpcGh5X2Rldik7CisjZWxzZSAvKlBYQV8zMTBfTFYg Ki8KKwlmcmVlX2lycShJUlFfR1BJTygyMiksICZzcGlwaHlfZGV2LT5zc3Bk ZXYpOworI2VuZGlmIC8qUFhBXzMxMF9MViAqLworCXNzcF9leGl0KCZzcGlw aHlfZGV2LT5zc3BkZXYpOworCVBERUJVRygiZXhpdGluZ1xuIik7CisJcmV0 dXJuIDA7Cit9CisKK3ZvaWQgc21zc3BpcGh5X3NldF9jb25maWcoc3BpcGh5 X2Rldl9zdCAqc3BpcGh5X2RldiwgaW50IGNsb2NrX2RpdmlkZXIpCit7CisJ dTMyIG1vZGUsIGZsYWdzLCBzcGVlZCwgcHNwX2ZsYWdzID0gMDsKKwlzc3Bf ZGlzYWJsZSgmc3BpcGh5X2Rldi0+c3NwZGV2KTsKKwkvKiBjbG9jayBkaXZp c29yIGZvciB0aGlzIG1vZGUuICovCisJc3BlZWQgPSBDTE9DS19ESVZJREVS KGNsb2NrX2RpdmlkZXIpOworCS8qIDMyYml0IHdvcmRzIGluIHRoZSBmaWZv ICovCisJbW9kZSA9IFNTQ1IwX01vdG9yb2xhIHwgU1NDUjBfRGF0YVNpemUo MTYpIHwgU1NDUjBfRURTUzsKKwlmbGFncyA9IFNTQ1IxX1J4VHJlc2goMSkg fCBTU0NSMV9UeFRyZXNoKDEpIHwgU1NDUjFfVFNSRSB8CisJCSBTU0NSMV9S U1JFIHwgU1NDUjFfUklFIHwgU1NDUjFfVFJBSUw7CS8qIHwgU1NDUjFfVElF ICovCisJc3NwX2NvbmZpZygmc3BpcGh5X2Rldi0+c3NwZGV2LCBtb2RlLCBm bGFncywgcHNwX2ZsYWdzLCBzcGVlZCk7CisJc3NwX2VuYWJsZSgmc3BpcGh5 X2Rldi0+c3NwZGV2KTsKK30KKwordm9pZCBwcmVwYXJlRm9yRldEbmwodm9p ZCAqY29udGV4dCkKK3sKKwlzcGlwaHlfZGV2X3N0ICpzcGlwaHlfZGV2ID0g KHNwaXBoeV9kZXZfc3QgKikgY29udGV4dDsKKwlzbXNzcGlwaHlfc2V0X2Nv bmZpZyhzcGlwaHlfZGV2LCAyKTsKKwltc2xlZXAoMTAwKTsKK30KKwordm9p ZCBmd0RubENvbXBsZXRlKHZvaWQgKmNvbnRleHQsIGludCBBcHApCit7CisJ c3BpcGh5X2Rldl9zdCAqc3BpcGh5X2RldiA9IChzcGlwaHlfZGV2X3N0ICop IGNvbnRleHQ7CisJc21zc3BpcGh5X3NldF9jb25maWcoc3BpcGh5X2Rldiwg MSk7CisJbXNsZWVwKDEwMCk7Cit9CmRpZmYgLXVOciB2NGwtZHZiLWM1Zjk3 NmNhYjAxMS9saW51eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlw aHlfcHhhLmN+IHY0bC1kdmItYzVmOTc2Y2FiMDExXzAwMDMvbGludXgvZHJp dmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc3BpcGh5X3B4YS5jfgotLS0gdjRs LWR2Yi1jNWY5NzZjYWIwMTEvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvc2lh bm8vc21zc3BpcGh5X3B4YS5jfgkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAw MDAwMCArMDIwMAorKysgdjRsLWR2Yi1jNWY5NzZjYWIwMTFfMDAwMy9saW51 eC9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzcGlwaHlfcHhhLmN+CTIw MDgtMTEtMTggMTg6MTM6MzcuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEs NDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTaWFubyBNb2JpbGUg U2lsaWNvbiwgSW5jLgorTURUViByZWNlaXZlciBrZXJuZWwgbW9kdWxlcy4K K0NvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBVcmkgU2hrb2xuaWsKKworVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKyNkZWZpbmUgUFhBXzMxMF9MVgorCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2lu Y2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2lmZGVmIFBYQV8zMTBfTFYKKyNp bmNsdWRlIDxhc20vYXJjaC9zc3AuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9t ZnAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8 YXNtL2FyY2gvcHhhM3h4X2dwaW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2Rt YS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSAic21zZGJnX3Bybi5oIgorCisjaWZkZWYgUFhBXzMxMF9MVgorCisj ZGVmaW5lIFNTUF9QT1JUIDQKKyNkZWZpbmUgU1NQX0NLRU4gQ0tFTl9TU1A0 CisjZGVmaW5lIFNNU19JUlFfR1BJTyBNRlBfUElOX0dQSU85MworCisjaWYg KFNTUF9QT1JUID09IDEpCisjZGVmaW5lIFNEQ01SX1JYIERSQ01SUlhTU0RS CisjZGVmaW5lIFNEQ01SX1RYIERSQ01SVFhTU0RSCisjZWxzZQorI2lmIChT U1BfUE9SVCA9PSAyKQorI2RlZmluZSBTRENNUl9SWCBEUkNNUjE1CisjZGVm aW5lIFNEQ01SX1RYIERSQ01SMTYKKyNlbHNlCisjaWYgKFNTUF9QT1JUID09 IDMpCisjZGVmaW5lIFNEQ01SX1JYIERSQ01SNjYKKyNkZWZpbmUgU0RDTVJf VFggRFJDTVI2NworI2Vsc2UKKyNpZiAoU1NQX1BPUlQgPT0gNCkKKyNkZWZp bmUgU0RDTVJfUlggRFJDTVJSWFNBRFIKKyNkZWZpbmUgU0RDTVJfVFggRFJD TVJUWFNBRFIKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2Vs c2UgLypQWEFfMzEwX0xWICovCisjZGVmaW5lIFNTUF9QT1JUIDEKKyNkZWZp bmUgU0RDTVJfUlggRFJDTVJSWFNTRFIKKyNkZWZpbmUgU0RDTVJfVFggRFJD TVJUWFNTRFIKKworI2VuZGlmIC8qUFhBXzMxMF9MViAqLworCisvKiBNYWNy b3MgZGVmaW5pbmcgcGh5c2ljYWwgbGF5ZXIgYmVoYXZpb3VyKi8KKyNpZmRl ZiBQWEFfMzEwX0xWCisjZGVmaW5lIENMT0NLX0ZBQ1RPUiAxCisjZWxzZSAv KlBYQV8zMTBfTFYgKi8KKyNkZWZpbmUgQ0xPQ0tfRkFDVE9SIDIKKyNlbmRp ZiAvKlBYQV8zMTBfTFYgKi8KKworLyogTWFjcm9zIGZvciBjb2RpbmcgcmV1 c2UgKi8KKworLyohIG1hY3JvIHRvIGFsaWduIHRoZSBkaXZpZGVyIHRvIHRo ZSBwcm9wZXIgb2Zmc2V0IGluIHRoZSByZWdpc3RlciBiaXRzICovCisjZGVm aW5lIENMT0NLX0RJVklERVIoaSkoKGktMSk8PDgpCS8qIDEtNDA5NiAqLwor CisvKiEgRE1BIHJlbGF0ZWQgbWFjcm9zICovCisjZGVmaW5lIERNQV9JTlRf TUFTSyAoRENTUl9FTkRJTlRSIHwgRENTUl9TVEFSVElOVFIgfCBEQ1NSX0JV U0VSUikKKyNkZWZpbmUgUkVTRVRfRE1BX0NIQU5ORUwgKERDU1JfTk9ERVND IHwgRE1BX0lOVF9NQVNLKQorCisjZGVmaW5lIFNTUF9USU1FT1VUX1NDQUxF ICg3NjkpCisjZGVmaW5lIFNTUF9USU1FT1VUKHgpICgoeCoxMDAwMCkvU1NQ X1RJTUVPVVRfU0NBTEUpCisKKyNkZWZpbmUgU1BJX1BBQ0tFVF9TSVpFIDI1 NgorCisvKiBwaHlzaWNhbCBsYXllciB2YXJpYWJsZXMgKi8KKy8qISBnbG9i YWwgYnVzIGRhdGEgKi8KK3N0cnVjdCB7CisJc3RydWN0IHNzcF9kZXYgc3Nw ZGV2OwkvKiE8IHNzcCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3Qg Y29tcGxldGlvbiB0cmFuc2Zlcl9pbl9wcm9jZXNzOworCXZvaWQgKCppbnRl cnJ1cHRIYW5kbGVyKSAodm9pZCAqKTsKKwl2b2lkICppbnRyX2NvbnRleHQ7 CisJc3RydWN0IGRldmljZSAqZGV2OwkvKiE8IGRldmljZSBtb2RlbCBzdHVm ZiAqLworCWludCByeF9kbWFfY2hhbm5lbDsKKwlpbnQgdHhfZG1hX2NoYW5u ZWw7CisJaW50IHJ4X2J1Zl9sZW47CisJaW50IHR4X2J1Zl9sZW47Cit9IHNw aXBoeV9kZXZfc3Q7CisKKy8qIQoraW52ZXJ0IHRoZSBlbmRpYW5uZXNzIG9m IGEgc2luZ2xlIDMyaXQgaW50ZWdlcgorCitccGFyYW1baW5dCQl1OiB3b3Jk IHRvIGludmVydAorCitccmV0dXJuCQl0aGUgaW52ZXJ0ZWQgd29yZAorKi8K K3N0YXRpYyBpbmxpbmUgdTMyIGludmVydF9ibyh1MzIgdSkKK3sKKwlyZXR1 cm4gKCh1ICYgMHhmZikgPDwgMjQpIHwgKCh1ICYgMHhmZjAwKSA8PCA4KSB8 ICgodSAmIDB4ZmYwMDAwKSA+PiA4KQorCQl8ICgodSAmIDB4ZmYwMDAwMDAp ID4+IDI0KTsKK30KKworLyohCitpbnZlcnQgdGhlIGVuZGlhbm5lc3Mgb2Yg YSBkYXRhIGJ1ZmZlcgorCitccGFyYW1baW5dCQlidWY6IGJ1ZmZlciB0byBp bnZlcnQKK1xwYXJhbVtpbl0JCWxlbjogYnVmZmVyIGxlbmd0aAorCitccmV0 dXJuCQl0aGUgaW52ZXJ0ZWQgd29yZAorKi8KKworc3RhdGljIGludCBpbnZl cnRfZW5kaWFubmVzcyhjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IGk7 CisJdTMyICpwdHIgPSAodTMyICopIGJ1ZjsKKworCWxlbiA9IChsZW4gKyAz KSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBwdHIrKykKKwkJ KnB0ciA9IGludmVydF9ibygqcHRyKTsKKworCXJldHVybiA0ICogKChsZW4g KyAzKSAmICh+MykpOworfQorCisvKiEgTWFwIERNQSBidWZmZXJzIHdoZW4g cmVxdWVzdCBzdGFydHMKKworXHJldHVybgllcnJvciBzdGF0dXMKKyovCitz dGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfbWFwX2J1ZihzcGlwaHlfZGV2X3N0 ICpzcGlwaHlfZGV2LCBjaGFyICpidWYsIGludCBsZW4sCisJCQkJIGludCBk aXJlY3Rpb24pCit7CisJdW5zaWduZWQgbG9uZyBwaHlhZGRyOworCS8qIG1h cCBkbWEgYnVmZmVycyAqLworCWlmICghYnVmKSB7CisJCVBFUlJPUigiIE5V TEwgYnVmZmVycyB0byBtYXBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyog bWFwIGJ1ZmZlciAqLworCXBoeWFkZHIgPSBkbWFfbWFwX3NpbmdsZShzcGlw aHlfZGV2LT5kZXYsIGJ1ZiwgbGVuLCBkaXJlY3Rpb24pOworCWlmIChkbWFf bWFwcGluZ19lcnJvcihwaHlhZGRyKSkgeworCQlQRVJST1IoImV4aXRpbmcg IHdpdGggZXJyb3JcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHBo eWFkZHI7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzcGlidXNfaW50ZXJy dXB0KGludCBpcnEsIHZvaWQgKmNvbnRleHQpCit7CisJc3BpcGh5X2Rldl9z dCAqc3BpcGh5X2RldiA9IChzcGlwaHlfZGV2X3N0ICopIGNvbnRleHQ7CisJ UERFQlVHKCJyZWNpZXZlZCBpbnRlcnJ1cHQgZnJvbSBkZXZpY2UgZGV2PSVw LlxuIiwgY29udGV4dCk7CisJaWYgKHNwaXBoeV9kZXYtPmludGVycnVwdEhh bmRsZXIpCisJCXNwaXBoeV9kZXYtPmludGVycnVwdEhhbmRsZXIoc3BpcGh5 X2Rldi0+aW50cl9jb250ZXh0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisK K30KKworLyohCURNQSBjb250cm9sbGVyIGNhbGxiYWNrIC0gY2FsbGVkIG9u bHkgb24gQlVTIGVycm9yIGNvbmRpdGlvbgorCitccGFyYW1baW5dCWNoYW5u ZWw6IERNQSBjaGFubmVsIHdpdGggZXJyb3IKK1xwYXJhbVtpbl0JZGF0YTog VW51c2VkCitccGFyYW1baW5dCXJlZ3M6IFVudXNlZAorXHJldHVybgkJdm9p ZAorKi8KK3N0YXRpYyB2b2lkIHNwaWJ1c19kbWFfaGFuZGxlcihpbnQgY2hh bm5lbCwgdm9pZCAqY29udGV4dCkKK3sKKwlzcGlwaHlfZGV2X3N0ICpzcGlw aHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29udGV4dDsKKwl1MzIgaXJx X3N0YXR1cyA9IERDU1IoY2hhbm5lbCkgJiBETUFfSU5UX01BU0s7CisKKwlQ REVCVUcoInJlY2lldmVkIGludGVycnVwdCBmcm9tIGRtYSBjaGFubmVsICVk IGlycSBzdGF0dXMgJXguXG4iLAorCSAgICAgICBjaGFubmVsLCBpcnFfc3Rh dHVzKTsKKwlpZiAoaXJxX3N0YXR1cyAmIERDU1JfQlVTRVJSKSB7CisJCVBF UlJPUigiYnVzIGVycm9yISEhIHJlc2V0dGluZyBjaGFubmVsICVkXG4iLCBj aGFubmVsKTsKKworCQlEQ1NSKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVs KSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCQlEQ1NSKHNwaXBoeV9kZXYtPnR4 X2RtYV9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCX0KKwlEQ1NS KHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFO TkVMOworCWNvbXBsZXRlKCZzcGlwaHlfZGV2LT50cmFuc2Zlcl9pbl9wcm9j ZXNzKTsKK30KKwordm9pZCBzbXNzcGlidXNfeGZlcih2b2lkICpjb250ZXh0 LCB1bnNpZ25lZCBjaGFyICp0eGJ1ZiwKKwkJICAgIHVuc2lnbmVkIGxvbmcg dHhidWZfcGh5X2FkZHIsIHVuc2lnbmVkIGNoYXIgKnJ4YnVmLAorCQkgICAg dW5zaWduZWQgbG9uZyByeGJ1Zl9waHlfYWRkciwgaW50IGxlbikKK3sKKwkv KiBETUEgYnVyc3QgaXMgOCBieXRlcywgdGhlcmVmb3JlIHdlIG5lZWQgdG1w IGJ1ZmZlciB0aGF0IHNpemUuICovCisJdW5zaWduZWQgbG9uZyB0bXBbMl07 CisJdW5zaWduZWQgbG9uZyB0eGRtYTsKKwlzcGlwaHlfZGV2X3N0ICpzcGlw aHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29udGV4dDsKKworCS8qIHBy b2dyYW0gdGhlIGNvbnRyb2xsZXIgKi8KKwlpZiAodHhidWYpCisJCWludmVy dF9lbmRpYW5uZXNzKHR4YnVmLCBsZW4pOworCisJdG1wWzBdID0gLTE7CisJ dG1wWzFdID0gLTE7CisKKwkvKiBtYXAgUlggYnVmZmVyICovCisKKwlpZiAo IXR4YnVmKQorCQl0eGRtYSA9CisJCSAgICBkbWFfbWFwX2J1ZihzcGlwaHlf ZGV2LCAoY2hhciAqKXRtcCwgc2l6ZW9mKHRtcCksCisJCQkJRE1BX1RPX0RF VklDRSk7CisJZWxzZQorCQl0eGRtYSA9IHR4YnVmX3BoeV9hZGRyOworCisJ aW5pdF9jb21wbGV0aW9uKCZzcGlwaHlfZGV2LT50cmFuc2Zlcl9pbl9wcm9j ZXNzKTsKKwkvKiBjb25maWd1cmUgRE1BIENvbnRyb2xsZXIgKi8KKwlEQ1NS KHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFO TkVMOworCURTQURSKHNwaXBoeV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9IF9f UFJFRyhTU0RSX1AoU1NQX1BPUlQpKTsKKwlEVEFEUihzcGlwaHlfZGV2LT5y eF9kbWFfY2hhbm5lbCkgPSByeGJ1Zl9waHlfYWRkcjsKKwlEQ01EKHNwaXBo eV9kZXYtPnJ4X2RtYV9jaGFubmVsKSA9IERDTURfSU5DVFJHQUREUiB8IERD TURfRkxPV1NSQworCSAgICB8IERDTURfV0lEVEg0IHwgRENNRF9FTkRJUlFF TiB8IERDTURfQlVSU1Q4IHwgbGVuOworCVBERUJVRygicnggY2hhbm5lbD0l ZCwgc3JjPTB4JXgsIGRzdD0weCV4LCBjbWQ9MHgleFxuIiwKKwkgICAgICAg c3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwsIF9fUFJFRyhTU0RSX1AoU1NQ X1BPUlQpKSwKKwkgICAgICAgKHVuc2lnbmVkIGludClyeGJ1Zl9waHlfYWRk ciwgRENNRChzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCkpOworCXNwaXBo eV9kZXYtPnJ4X2J1Zl9sZW4gPSBsZW47CisKKwlEQ1NSKHNwaXBoeV9kZXYt PnR4X2RtYV9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCURUQURS KHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKSA9IF9fUFJFRyhTU0RSX1Ao U1NQX1BPUlQpKTsKKwlEU0FEUihzcGlwaHlfZGV2LT50eF9kbWFfY2hhbm5l bCkgPSB0eGRtYTsKKwlpZiAodHhidWYpIHsKKwkJRENNRChzcGlwaHlfZGV2 LT50eF9kbWFfY2hhbm5lbCkgPQorCQkgICAgRENNRF9JTkNTUkNBRERSIHwg RENNRF9GTE9XVFJHIHwgRENNRF9XSURUSDQKKwkJICAgIC8qIHwgRENNRF9F TkRJUlFFTiAqLyAgfCBEQ01EX0JVUlNUOCB8IGxlbjsKKwkJc3BpcGh5X2Rl di0+dHhfYnVmX2xlbiA9IGxlbjsKKwl9IGVsc2UgeworCQlEQ01EKHNwaXBo eV9kZXYtPnR4X2RtYV9jaGFubmVsKSA9IERDTURfRkxPV1RSRworCQkgICAg fCBEQ01EX1dJRFRINCAvKiB8IERDTURfRU5ESVJRRU4gKi8gIHwgRENNRF9C VVJTVDggfCBsZW47CisJCXNwaXBoeV9kZXYtPnR4X2J1Zl9sZW4gPSA0Owor CX0KKworCVBERUJVRygidHggY2hhbm5lbD0lZCwgc3JjPTB4JXgsIGRzdD0w eCV4LCBjbWQ9MHgleFxuIiwKKwkgICAgICAgc3BpcGh5X2Rldi0+dHhfZG1h X2NoYW5uZWwsICh1bnNpZ25lZCBpbnQpdHhkbWEsCisJICAgICAgIF9fUFJF RyhTU0RSX1AoU1NQX1BPUlQpKSwgRENNRChzcGlwaHlfZGV2LT50eF9kbWFf Y2hhbm5lbCkpOworCS8qIERBTEdOIC0gRE1BIEFMSUdOTUVOVCBSRUcuICov CisJaWYgKHJ4YnVmX3BoeV9hZGRyICYgMHg3KQorCQlEQUxHTiB8PSAoMSA8 PCBzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCk7CisJZWxzZQorCQlEQUxH TiAmPSB+KDEgPDwgc3BpcGh5X2Rldi0+cnhfZG1hX2NoYW5uZWwpOworCWlm ICh0eGRtYSAmIDB4NykKKwkJREFMR04gfD0gKDEgPDwgc3BpcGh5X2Rldi0+ dHhfZG1hX2NoYW5uZWwpOworCWVsc2UKKwkJREFMR04gJj0gfigxIDw8IHNw aXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKTsKKworCS8qIFN0YXJ0IERNQSBj b250cm9sbGVyICovCisJRENTUihzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5l bCkgfD0gRENTUl9SVU47CisJRENTUihzcGlwaHlfZGV2LT50eF9kbWFfY2hh bm5lbCkgfD0gRENTUl9SVU47CisJUERFQlVHKCJETUEgcnVubmluZy4gd2Fp dCBmb3IgY29tcGxldGlvbi5cbiIpOworCXdhaXRfZm9yX2NvbXBsZXRpb24o JnNwaXBoeV9kZXYtPnRyYW5zZmVyX2luX3Byb2Nlc3MpOworCVBERUJVRygi RE1BIGNvbXBsZXRlLlxuIik7CisJaW52ZXJ0X2VuZGlhbm5lc3MocnhidWYs IGxlbik7Cit9CisKK3ZvaWQgc21zY2hpcHJlc2V0KHZvaWQgKmNvbnRleHQp Cit7CisKK30KKwordm9pZCAqc21zc3BpcGh5X2luaXQodm9pZCAqY29udGV4 dCwgdm9pZCAoKnNtc3NwaV9pbnRlcnJ1cHRIYW5kbGVyKSAodm9pZCAqKSwK KwkJICAgICB2b2lkICppbnRyX2NvbnRleHQpCit7CisJaW50IHJldDsKKwlz cGlwaHlfZGV2X3N0ICpzcGlwaHlfZGV2OworCXUzMiBtb2RlID0gMCwgZmxh Z3MgPSAwLCBwc3BfZmxhZ3MgPSAwLCBzcGVlZCA9IDA7CisJUERFQlVHKCJl bnRlcmluZ1xuIik7CisKKwlzcGlwaHlfZGV2ID0ga21hbGxvYyhzaXplb2Yo c3BpcGh5X2Rldl9zdCksIEdGUF9LRVJORUwpOworCisJcmV0ID0gc3NwX2lu aXQoJnNwaXBoeV9kZXYtPnNzcGRldiwgU1NQX1BPUlQsIDApOworCWlmIChy ZXQpIHsKKwkJUEVSUk9SKCJzc3BfaW5pdCBmYWlsZWQuIGVycm9yICVkIiwg cmV0KTsKKwkJZ290byBlcnJvcl9zc3Bpbml0OworCX0KKyNpZmRlZiBQWEFf MzEwX0xWCisJcHhhM3h4X21mcF9zZXRfYWZkcyhTTVNfSVJRX0dQSU8sIE1G UF9BRjAsIE1GUF9EUzAzWCk7CisJcHhhM3h4X2dwaW9fc2V0X3Jpc2luZ19l ZGdlX2RldGVjdChTTVNfSVJRX0dQSU8sIDEpOworCXB4YTN4eF9ncGlvX3Nl dF9kaXJlY3Rpb24oU01TX0lSUV9HUElPLCBHUElPX0RJUl9JTik7CisjZWxz ZSAvKlBYQV8zMTBfTFYgKi8KKwkvKiByZWNlaXZlIGlucHV0IGludGVycnVw dHMgZnJvbSB0aGUgU01TIDEwMDAgb24gSjMyIHBpbiAxMSAqLworCXB4YV9n cGlvX21vZGUoMjIgfCBHUElPX0lOKTsKKyNlbmRpZiAvKlBYQV8zMTBfTFYg Ki8KKwlzcGVlZCA9IENMT0NLX0RJVklERVIoQ0xPQ0tfRkFDVE9SKTsgLyog Y2xvY2sgZGl2aXNvciBmb3IgdGhpcyBtb2RlICovCisJLyogMzJiaXQgd29y ZHMgaW4gdGhlIGZpZm8gKi8KKwltb2RlID0gU1NDUjBfTW90b3JvbGEgfCBT U0NSMF9EYXRhU2l6ZSgxNikgfCBTU0NSMF9FRFNTOworCS8qIFNTQ1IxID0g ZmxhZ3MgKi8KKwlmbGFncyA9IFNTQ1IxX1J4VHJlc2goMSkgfCBTU0NSMV9U eFRyZXNoKDEpIHwgU1NDUjFfVFNSRSB8CisJIFNTQ1IxX1JTUkUgfCBTU0NS MV9SSUUgfCBTU0NSMV9UUkFJTDsJLyogfCBTU0NSMV9USUUgKi8KKworCXNz cF9jb25maWcoJnNwaXBoeV9kZXYtPnNzcGRldiwgbW9kZSwgZmxhZ3MsIHBz cF9mbGFncywgc3BlZWQpOworCXNzcF9kaXNhYmxlKCYoc3BpcGh5X2Rldi0+ c3NwZGV2KSk7CisjaWZkZWYgUFhBXzMxMF9MVgorCisJcHhhM3h4X21mcF9z ZXRfYWZkcyhNRlBfUElOX0dQSU85NSwgTUZQX0FGMSwgTUZQX0RTMDNYKTsK KwlweGEzeHhfbWZwX3NldF9hZmRzKE1GUF9QSU5fR1BJTzk2LCBNRlBfQUYx LCBNRlBfRFMwM1gpOworCXB4YTN4eF9tZnBfc2V0X2FmZHMoTUZQX1BJTl9H UElPOTcsIE1GUF9BRjEsIE1GUF9EUzAzWCk7CisJcHhhM3h4X21mcF9zZXRf YWZkcyhNRlBfUElOX0dQSU85OCwgTUZQX0FGMSwgTUZQX0RTMDNYKTsKKyNl bHNlIC8qUFhBXzMxMF9MViAqLworCXB4YV9ncGlvX21vZGUoR1BJTzIzX1ND TEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzI0X1NGUk1fTUQpOworCXB4 YV9ncGlvX21vZGUoR1BJTzI1X1NUWERfTUQpOworCXB4YV9ncGlvX21vZGUo R1BJTzI2X1NSWERfTUQpOworI2VuZGlmIC8qUFhBXzMxMF9MViAqLworCS8q IHNldHVwIHRoZSBkbWEgKi8KKwlzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5l bCA9CisJICAgIHB4YV9yZXF1ZXN0X2RtYSgic3BpYnVzZHJ2X3J4IiwgRE1B X1BSSU9fSElHSCwgc3BpYnVzX2RtYV9oYW5kbGVyLAorCQkJICAgIHNwaXBo eV9kZXYpOworCWlmIChzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbCA8IDAp IHsKKwkJcmV0ID0gLUVCVVNZOworCQlQRVJST1IoIkNvdWxkIG5vdCBnZXQg UlggRE1BIGNoYW5uZWwuXG4iKTsKKwkJZ290byBlcnJvcl9yeGRtYTsKKwl9 CisJc3BpcGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwgPQorCSAgICBweGFfcmVx dWVzdF9kbWEoInNwaWJ1c2Rydl90eCIsIERNQV9QUklPX0hJR0gsIHNwaWJ1 c19kbWFfaGFuZGxlciwKKwkJCSAgICBzcGlwaHlfZGV2KTsKKwlpZiAoc3Bp cGh5X2Rldi0+dHhfZG1hX2NoYW5uZWwgPCAwKSB7CisJCXJldCA9IC1FQlVT WTsKKwkJUEVSUk9SKCJDb3VsZCBub3QgZ2V0IFRYIERNQSBjaGFubmVsLlxu Iik7CisJCWdvdG8gZXJyb3JfdHhkbWE7CisJfQorCisJU0RDTVJfUlggPSBE UkNNUl9NQVBWTEQgfCBzcGlwaHlfZGV2LT5yeF9kbWFfY2hhbm5lbDsKKwlT RENNUl9UWCA9IERSQ01SX01BUFZMRCB8IHNwaXBoeV9kZXYtPnR4X2RtYV9j aGFubmVsOworCisJUERFQlVHKCJkbWEgcnggY2hhbm5lbDogJWQsIGRtYSB0 eCBjaGFubmVsOiAlZFxuIiwKKwkgICAgICAgc3BpcGh5X2Rldi0+cnhfZG1h X2NoYW5uZWwsIHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFubmVsKTsKKwkvKiBl bmFibGUgdGhlIGNsb2NrICovCisKKwlzcGlwaHlfZGV2LT5pbnRlcnJ1cHRI YW5kbGVyID0gc21zc3BpX2ludGVycnVwdEhhbmRsZXI7CisJc3BpcGh5X2Rl di0+aW50cl9jb250ZXh0ID0gaW50cl9jb250ZXh0OworI2lmZGVmIFBYQV8z MTBfTFYKKwlzZXRfaXJxX3R5cGUoSVJRX0dQSU8oTUZQMkdQSU8oU01TX0lS UV9HUElPKSksIElSUVRfRkFMTElORyk7CisJcmV0ID0KKwkgICAgcmVxdWVz dF9pcnEoSVJRX0dQSU8oTUZQMkdQSU8oU01TX0lSUV9HUElPKSksIHNwaWJ1 c19pbnRlcnJ1cHQsCisJCQlTQV9JTlRFUlJVUFQsICJTTVNTUEkiLCBzcGlw aHlfZGV2KTsKKyNlbHNlIC8qUFhBXzMxMF9MViAqLworCXNldF9pcnFfdHlw ZShJUlFfR1BJTygyMiksIElSUVRfRkFMTElORyk7CisJcmV0ID0KKwkgICAg cmVxdWVzdF9pcnEoSVJRX0dQSU8oMjIpLCBzcGlidXNfaW50ZXJydXB0LCBT QV9JTlRFUlJVUFQsICJTTVNTUEkiLAorCQkJJihnX3NwaWRhdGEuc3NwZGV2 KSk7CisjZW5kaWYgLypQWEFfMzEwX0xWICovCisJaWYgKHJldCkgeworCQlQ RVJST1IoIkNvdWxkIG5vdCBnZXQgaW50ZXJydXB0IGZvciBTTVMgZGV2aWNl LiBzdGF0dXMgPSVkXG4iLAorCQkgICAgICAgcmV0KTsKKwkJZ290byBlcnJv cl9pcnE7CisJfQorCisJc3NwX2VuYWJsZSgmKHNwaXBoeV9kZXYtPnNzcGRl dikpOworCVBERUJVRygiZXhpdGluZ1xuIik7CisJcmV0dXJuIHNwaXBoeV9k ZXY7CitlcnJvcl9pcnE6CisJaWYgKHNwaXBoeV9kZXYtPnR4X2RtYV9jaGFu bmVsID49IDApCisJCXB4YV9mcmVlX2RtYShzcGlwaHlfZGV2LT50eF9kbWFf Y2hhbm5lbCk7CisKK2Vycm9yX3R4ZG1hOgorCWlmIChzcGlwaHlfZGV2LT5y eF9kbWFfY2hhbm5lbCA+PSAwKQorCQlweGFfZnJlZV9kbWEoc3BpcGh5X2Rl di0+cnhfZG1hX2NoYW5uZWwpOworCitlcnJvcl9yeGRtYToKKwlzc3BfZXhp dCgmc3BpcGh5X2Rldi0+c3NwZGV2KTsKK2Vycm9yX3NzcGluaXQ6CisJUERF QlVHKCJleGl0aW5nIG9uIGVycm9yXG4iKTsKKwlyZXR1cm4gMDsKK30KKwor aW50IHNtc3NwaXBoeV9kZWluaXQodm9pZCAqY29udGV4dCkKK3sKKwlzcGlw aHlfZGV2X3N0ICpzcGlwaHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29u dGV4dDsKKwlQREVCVUcoImVudGVyaW5nXG4iKTsKKworCS8qIGRpc2FibGUg dGhlIHNwaSBwb3J0ICovCisJc3NwX2ZsdXNoKCZzcGlwaHlfZGV2LT5zc3Bk ZXYpOworCXNzcF9kaXNhYmxlKCZzcGlwaHlfZGV2LT5zc3BkZXYpOworCisJ LyogIHJlbGVhc2UgRE1BIHJlc291cmNlcyAqLworCWlmIChzcGlwaHlfZGV2 LT5yeF9kbWFfY2hhbm5lbCA+PSAwKQorCQlweGFfZnJlZV9kbWEoc3BpcGh5 X2Rldi0+cnhfZG1hX2NoYW5uZWwpOworCisJaWYgKHNwaXBoeV9kZXYtPnR4 X2RtYV9jaGFubmVsID49IDApCisJCXB4YV9mcmVlX2RtYShzcGlwaHlfZGV2 LT50eF9kbWFfY2hhbm5lbCk7CisKKwkvKiByZWxlYXNlIE1lbW9yeSByZXNv dXJjZXMgKi8KKyNpZmRlZiBQWEFfMzEwX0xWCisJZnJlZV9pcnEoSVJRX0dQ SU8oTUZQMkdQSU8oU01TX0lSUV9HUElPKSksIHNwaXBoeV9kZXYpOworI2Vs c2UgLypQWEFfMzEwX0xWICovCisJZnJlZV9pcnEoSVJRX0dQSU8oMjIpLCAm c3BpcGh5X2Rldi0+c3NwZGV2KTsKKyNlbmRpZiAvKlBYQV8zMTBfTFYgKi8K Kwlzc3BfZXhpdCgmc3BpcGh5X2Rldi0+c3NwZGV2KTsKKwlQREVCVUcoImV4 aXRpbmdcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIHNtc3NwaXBoeV9z ZXRfY29uZmlnKHNwaXBoeV9kZXZfc3QgKnNwaXBoeV9kZXYsIGludCBjbG9j a19kaXZpZGVyKQoreworCXUzMiBtb2RlLCBmbGFncywgc3BlZWQsIHBzcF9m bGFncyA9IDA7CisJc3NwX2Rpc2FibGUoJnNwaXBoeV9kZXYtPnNzcGRldik7 CisJLyogY2xvY2sgZGl2aXNvciBmb3IgdGhpcyBtb2RlLiAqLworCXNwZWVk ID0gQ0xPQ0tfRElWSURFUihjbG9ja19kaXZpZGVyKTsKKwkvKiAzMmJpdCB3 b3JkcyBpbiB0aGUgZmlmbyAqLworCW1vZGUgPSBTU0NSMF9Nb3Rvcm9sYSB8 IFNTQ1IwX0RhdGFTaXplKDE2KSB8IFNTQ1IwX0VEU1M7CisJZmxhZ3MgPSBT U0NSMV9SeFRyZXNoKDEpIHwgU1NDUjFfVHhUcmVzaCgxKSB8IFNTQ1IxX1RT UkUgfCBTU0NSMV9SU1JFIHwgU1NDUjFfUklFIHwgU1NDUjFfVFJBSUw7CS8q IHwgU1NDUjFfVElFICovCisJc3NwX2NvbmZpZygmc3BpcGh5X2Rldi0+c3Nw ZGV2LCBtb2RlLCBmbGFncywgcHNwX2ZsYWdzLCBzcGVlZCk7CisJc3NwX2Vu YWJsZSgmc3BpcGh5X2Rldi0+c3NwZGV2KTsKK30KKwordm9pZCBwcmVwYXJl Rm9yRldEbmwodm9pZCAqY29udGV4dCkKK3sKKwlzcGlwaHlfZGV2X3N0ICpz cGlwaHlfZGV2ID0gKHNwaXBoeV9kZXZfc3QgKikgY29udGV4dDsKKwlzbXNz cGlwaHlfc2V0X2NvbmZpZyhzcGlwaHlfZGV2LCAyKTsKKwltc2xlZXAoMTAw KTsKK30KKwordm9pZCBmd0RubENvbXBsZXRlKHZvaWQgKmNvbnRleHQsIGlu dCBBcHApCit7CisJc3BpcGh5X2Rldl9zdCAqc3BpcGh5X2RldiA9IChzcGlw aHlfZGV2X3N0ICopIGNvbnRleHQ7CisJc21zc3BpcGh5X3NldF9jb25maWco c3BpcGh5X2RldiwgMSk7CisJbXNsZWVwKDEwMCk7Cit9Cg== --0-809951509-1227085384=:42507 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ linux-dvb mailing list linux-dvb@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb --0-809951509-1227085384=:42507--