From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B8848970E for ; Mon, 15 Apr 2019 14:20:47 +0000 (UTC) From: Simon Ser Date: Mon, 15 Apr 2019 17:20:43 +0300 Message-Id: <20190415142043.29723-1-simon.ser@intel.com> In-Reply-To: <20190415123815.27258-1-simon.ser@intel.com> References: MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2] lib/igt_edid: new library for generating EDIDs List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: Rm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRpZmZlcmVudCBFRElEIGZlYXR1cmVzLCB3ZSBu ZWVkIHRvIGdlbmVyYXRlIG1vcmUKYW5kIG1vcmUgY29tcGxleCBFRElEIGJsb2JzIChlLmcuIHdp dGggYXVkaW8gc3VwcG9ydCkuIEhvd2V2ZXIgY3VycmVudGx5IElHVAp1c2VzIGEgbWFjcm8tYmFz ZWQgc3lzdGVtIHRvIGdlbmVyYXRlIEVESURzLiBUaGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCBhbmQg aXMKcHJldHR5IGluZmxleGlibGUuCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxpdHRs ZSBsaWJyYXJ5IHRvIGdlbmVyYXRlIEVESURzLiBGb3Igbm93IGl0IGNhbid0CmRvIG1vcmUgdGhh biB0aGUgb2xkIG1hY3JvLiBGdXR1cmUgY29tbWl0cyB3aWxsIGV4dGVuZCB0aGUgQVBJLgoKVGhl IHN0cnVjdHVyZXMgYXJlIG1vc3RseSBiYXNlZCBvbiB0aGUgTGludXgga2VybmVsIGNvZGUgKGRy bV9lZGlkLmgpLiBTZXR0ZXJzCmhhdmUgYmVlbiBhZGRlZCBmb3IgY29udmVuaWVuY2UuCgpTaWdu ZWQtb2ZmLWJ5OiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Ci0tLQoKQ2hhbmdlcyBp biB2MjogZml4IGluY2x1ZGUgZ3VhcmQgbmFtZQoKQWRkaW5nIFZpbGxlIGJlY2F1c2UgaGUgd3Jv dGUgdGhlIGN1cnJlbnQgRURJRCBjb2RlLCBhbmQgQXJlayBiZWNhdXNlIGhlJ3MKaW50ZXJlc3Rl ZCBpbiB0aGlzIHBhdGNoLgoKIGxpYi9pZ3RfZWRpZC5jICAgICAgICAgIHwgMjY4ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3RfZWRpZC5oICAgICAgICAg IHwgMTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0X2VkaWRfdGVtcGxh dGUuaCB8ICA3NCAtLS0tLS0tLS0tLQogbGliL2lndF9rbXMuYyAgICAgICAgICAgfCAxMTMgKysr KysrKysrLS0tLS0tLS0KIGxpYi9tZXNvbi5idWlsZCAgICAgICAgIHwgICAzICstCiA1IGZpbGVz IGNoYW5nZWQsIDUyMSBpbnNlcnRpb25zKCspLCAxMzMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2lndF9lZGlkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2VkaWQu aAogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oCgpkaWZmIC0tZ2l0 IGEvbGliL2lndF9lZGlkLmMgYi9saWIvaWd0X2VkaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMC4uMTU1ZWJlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2VkaWQu YwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNvbT4KKyAqLworCisjaW5j bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcu aD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8eGY4 NmRybU1vZGUuaD4KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5jbHVkZSAiaWd0X2VkaWQu aCIKKworc3RhdGljIGNvbnN0IGNoYXIgZWRpZF9oZWFkZXJbXSA9IHsKKwkweDAwLCAweGZmLCAw eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwCit9OworCisvKiB2ZnJlcSBpcyBpbiBI eiAqLworc3RhdGljIHZvaWQgc3RkX3RpbWluZ19zZXQoc3RydWN0IHN0ZF90aW1pbmcgKnN0LCBp bnQgaHNpemUsIGludCB2ZnJlcSwKKwkJCSAgIGVudW0gc3RkX3RpbWluZ19hc3BlY3QgYXNwZWN0 KQoreworCWFzc2VydChoc2l6ZSA+PSAyNTYgJiYgaHNpemUgPD0gMjI4OCk7CisJc3QtPmhzaXpl ID0gaHNpemUgLyA4IC0gMzE7CisJc3QtPnZmcmVxX2FzcGVjdCA9IGFzcGVjdCA8PCA2IHwgKHZm cmVxIC0gNjApOworfQorCitzdGF0aWMgdm9pZCBzdGRfdGltaW5nX3Vuc2V0KHN0cnVjdCBzdGRf dGltaW5nICpzdCkKK3sKKwltZW1zZXQoc3QsIDB4MDEsIHNpemVvZihzdHJ1Y3Qgc3RkX3RpbWlu ZykpOworfQorCisvKioKKyAqIGRldGFpbGVkX3RpbWluZ19zZXRfbW9kZTogZmlsbCBhIGRldGFp bGVkIHRpbWluZyBiYXNlZCBvbiBhIG1vZGUKKyAqLwordm9pZCBkZXRhaWxlZF90aW1pbmdfc2V0 X21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwK KwkJCSAgICAgIGludCB3aWR0aF9tbSwgaW50IGhlaWdodF9tbSkKK3sKKwlpbnQgaGFjdGl2ZSwg aGJsYW5rLCB2YWN0aXZlLCB2YmxhbmssIGhzeW5jX29mZnNldCwgaHN5bmNfcHVsc2Vfd2lkdGgs CisJICAgIHZzeW5jX29mZnNldCwgdnN5bmNfcHVsc2Vfd2lkdGg7CisJc3RydWN0IGRldGFpbGVk X3BpeGVsX3RpbWluZyAqcHQgPSAmZHQtPmRhdGEucGl4ZWxfZGF0YTsKKworCWhhY3RpdmUgPSBt b2RlLT5oZGlzcGxheTsKKwloc3luY19vZmZzZXQgPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUt PmhkaXNwbGF5OworCWhzeW5jX3B1bHNlX3dpZHRoID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+ aHN5bmNfc3RhcnQ7CisJaGJsYW5rID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aGRpc3BsYXk7CisK Kwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7CisJdnN5bmNfb2Zmc2V0ID0gbW9kZS0+dnN5bmNf c3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3luY19wdWxzZV93aWR0aCA9IG1vZGUtPnZzeW5j X2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZibGFuayA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUt PnZkaXNwbGF5OworCisJZHQtPnBpeGVsX2Nsb2NrWzBdID0gKG1vZGUtPmNsb2NrIC8gMTApICYg MHgwMEZGOworCWR0LT5waXhlbF9jbG9ja1sxXSA9ICgobW9kZS0+Y2xvY2sgLyAxMCkgJiAweEZG MDApID4+IDg7CisKKwlhc3NlcnQoaGFjdGl2ZSA8PSAweEZGRik7CisJYXNzZXJ0KGhibGFuayA8 PSAweEZGRik7CisJcHQtPmhhY3RpdmVfbG8gPSBoYWN0aXZlICYgMHgwRkY7CisJcHQtPmhibGFu a19sbyA9IGhibGFuayAmIDB4MEZGOworCXB0LT5oYWN0aXZlX2hibGFua19oaSA9IChoYWN0aXZl ICYgMHhGMDApID4+IDQgfCAoaGJsYW5rICYgMHhGMDApID4+IDg7CisKKwlhc3NlcnQodmFjdGl2 ZSA8PSAweEZGRik7CisJYXNzZXJ0KHZibGFuayA8PSAweEZGRik7CisJcHQtPnZhY3RpdmVfbG8g PSB2YWN0aXZlICYgMHgwRkY7CisJcHQtPnZibGFua19sbyA9IHZibGFuayAmIDB4MEZGOworCXB0 LT52YWN0aXZlX3ZibGFua19oaSA9ICh2YWN0aXZlICYgMHhGMDApID4+IDQgfCAodmJsYW5rICYg MHhGMDApID4+IDg7CisKKwlhc3NlcnQoaHN5bmNfb2Zmc2V0IDw9IDB4M0ZGKTsKKwlhc3NlcnQo aHN5bmNfcHVsc2Vfd2lkdGggPD0gMHgzRkYpOworCWFzc2VydCh2c3luY19vZmZzZXQgPD0gMHgz Rik7CisJYXNzZXJ0KHZzeW5jX3B1bHNlX3dpZHRoIDw9IDB4M0YpOworCXB0LT5oc3luY19vZmZz ZXRfbG8gPSBoc3luY19vZmZzZXQgJiAweDBGRjsKKwlwdC0+aHN5bmNfcHVsc2Vfd2lkdGhfbG8g PSBoc3luY19wdWxzZV93aWR0aCAmIDB4MEZGOworCXB0LT52c3luY19vZmZzZXRfcHVsc2Vfd2lk dGhfbG8gPSAodnN5bmNfb2Zmc2V0ICYgMHhGKSA8PCA0CisJCQkJCSAgfCAodnN5bmNfcHVsc2Vf d2lkdGggJiAweEYpOworCXB0LT5oc3luY192c3luY19vZmZzZXRfcHVsc2Vfd2lkdGhfaGkgPSAK KwkJKChoc3luY19vZmZzZXQgJiAweDMwMCkgPj4gMikgfCAoKGhzeW5jX3B1bHNlX3dpZHRoICYg MHgzMDApID4+IDQpCisJCXwgKCh2c3luY19vZmZzZXQgJiAweDMwKSA+PiAyKSB8ICgodnN5bmNf cHVsc2Vfd2lkdGggJiAweDMwKSA+PiA0KTsKKworCWFzc2VydCh3aWR0aF9tbSA8PSAweEZGRik7 CisJYXNzZXJ0KGhlaWdodF9tbSA8PSAweEZGRik7CisJcHQtPndpZHRoX21tX2xvID0gd2lkdGhf bW0gJiAweDBGRjsKKwlwdC0+aGVpZ2h0X21tX2xvID0gaGVpZ2h0X21tICYgMHgwRkY7CisJcHQt PndpZHRoX2hlaWdodF9tbV9oaSA9ICh3aWR0aF9tbSAmIDB4RjAwKSA+PiA0CisJCQkJIHwgKGhl aWdodF9tbSAmIDB4RjAwKSA+PiA4OworCQorCXB0LT5taXNjID0gMDsKKwlpZiAobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJcHQtPm1pc2MgfD0gRURJRF9QVF9IU1lOQ19Q T1NJVElWRTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJcHQt Pm1pc2MgfD0gRURJRF9QVF9WU1lOQ19QT1NJVElWRTsKK30KKworLyoqCisgKiBkZXRhaWxlZF90 aW1pbmdfc2V0X21vbml0b3JfcmFuZ2VfbW9kZTogc2V0IGEgZGV0YWlsZWQgdGltaW5nIHRvIGJl IGEKKyAqIG1vbml0b3IgcmFuZ2UgYmFzZWQgb24gYSBtb2RlCisgKi8KK3ZvaWQgZGV0YWlsZWRf dGltaW5nX3NldF9tb25pdG9yX3JhbmdlX21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQs CisJCQkJCSAgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCit7CisJc3RydWN0IGRldGFpbGVkX25v bl9waXhlbCAqbnAgPSAmZHQtPmRhdGEub3RoZXJfZGF0YTsKKwlzdHJ1Y3QgZGV0YWlsZWRfZGF0 YV9tb25pdG9yX3JhbmdlICptciA9ICZucC0+ZGF0YS5yYW5nZTsKKworCWR0LT5waXhlbF9jbG9j a1swXSA9IGR0LT5waXhlbF9jbG9ja1sxXSA9IDA7CisKKwlucC0+dHlwZSA9IEVESURfREVUQUlM X01PTklUT1JfUkFOR0U7CisKKwltci0+bWluX3ZmcmVxID0gbW9kZS0+dnJlZnJlc2ggLSAxOwor CW1yLT5tYXhfdmZyZXEgPSBtb2RlLT52cmVmcmVzaCArIDE7CisJbXItPm1pbl9oZnJlcV9raHog PSAobW9kZS0+Y2xvY2sgLyBtb2RlLT5odG90YWwpIC0gMTsKKwltci0+bWF4X2hmcmVxX2toeiA9 IChtb2RlLT5jbG9jayAvIG1vZGUtPmh0b3RhbCkgKyAxOworCW1yLT5waXhlbF9jbG9ja19taHog PSAobW9kZS0+Y2xvY2sgLyAxMDAwMCkgKyAxOworCW1yLT5mbGFncyA9IDA7CisKKwlzdGF0aWMg Y29uc3QgY2hhciBwYWRkaW5nW10gPSB7CisJCTB4MGEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAs IDB4MjAsIDB4MjAKKwl9OworCW1lbWNweShtci0+Zm9ybXVsYS5wYWQsIHBhZGRpbmcsIHNpemVv ZihwYWRkaW5nKSk7Cit9CisKKy8qKgorICogZGV0YWlsZWRfdGltaW5nX3NldF9zdHJpbmc6IHNl dCBhIGRldGFpbGVkIHRpbWluZyB0byBiZSBhIHN0cmluZworICovCit2b2lkIGRldGFpbGVkX3Rp bWluZ19zZXRfc3RyaW5nKHN0cnVjdCBkZXRhaWxlZF90aW1pbmcgKmR0LAorCQkJCWVudW0gZGV0 YWlsZWRfbm9uX3BpeGVsX3R5cGUgdHlwZSwKKwkJCQljb25zdCBjaGFyICpzdHIpCit7CisJc3Ry dWN0IGRldGFpbGVkX25vbl9waXhlbCAqbnAgPSAmZHQtPmRhdGEub3RoZXJfZGF0YTsKKwlzdHJ1 Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgKmRzID0gJm5wLT5kYXRhLnN0cmluZzsKKwlzaXplX3Qg bGVuOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX05BTUU6 CisJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX1NUUklORzoKKwljYXNlIEVESURfREVUQUlMX01P TklUT1JfU0VSSUFMOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7IC8qIG5vdCBh IHN0cmluZyB0eXBlICovCisJfQorCisJZHQtPnBpeGVsX2Nsb2NrWzBdID0gZHQtPnBpeGVsX2Ns b2NrWzFdID0gMDsKKworCW5wLT50eXBlID0gdHlwZTsKKworCXN0cm5jcHkoZHMtPnN0ciwgc3Ry LCBzaXplb2YoZHMtPnN0cikpOworCWxlbiA9IHN0cmxlbihzdHIpOworCWlmIChsZW4gPCBzaXpl b2YoZHMtPnN0cikpCisJCWRzLT5zdHJbbGVuXSA9ICdcbic7Cit9CisKK3N0YXRpYyB2b2lkIGVk aWRfc2V0X21mZyhzdHJ1Y3QgZWRpZCAqZWRpZCwgY2hhciBtZmdbc3RhdGljIDNdKQoreworCWVk aWQtPm1mZ19pZFswXSA9IChtZmdbMF0gLSAnQCcpIDw8IDIgfCAobWZnWzFdIC0gJ0AnKSA+PiAz OworCWVkaWQtPm1mZ19pZFsxXSA9IChtZmdbMV0gLSAnQCcpIDw8IDUgfCAobWZnWzJdIC0gJ0An KTsKK30KKworc3RhdGljIHZvaWQgZWRpZF9zZXRfZ2FtbWEoc3RydWN0IGVkaWQgKmVkaWQsIGZs b2F0IGdhbW1hKQoreworCWVkaWQtPmdhbW1hID0gKGdhbW1hICogMTAwKSAtIDEwMDsKK30KKwor LyoqCisgKiBlZGlkX2luaXQ6IGluaXRpYWxpemUgYW4gRURJRAorICoKKyAqIFRoZSBFRElEIHdp bGwgYmUgcHJlLWZpbGxlZCB3aXRoIGVzdGFibGlzaGVkIGFuZCBzdGFuZGFyZCB0aW1pbmdzOgor ICoKKyAqICAtIDE5MjB4MTA4MCA2MEh6CisgKiAgLSAxMjgweDcyMCA2MEh6CisgKiAgLSAxMDI0 eDc2OCA2MEh6CisgKiAgLSA4MDB4NjAwIDYwSHoKKyAqICAtIDY0MHg0ODAgNjBIegorICovCit2 b2lkIGVkaWRfaW5pdChzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlzaXplX3QgaTsKKwl0aW1lX3Qg dDsKKwlzdHJ1Y3QgdG0gKnRtOworCisJbWVtc2V0KGVkaWQsIDAsIHNpemVvZihzdHJ1Y3QgZWRp ZCkpOworCisJbWVtY3B5KGVkaWQtPmhlYWRlciwgZWRpZF9oZWFkZXIsIHNpemVvZihlZGlkX2hl YWRlcikpOworCWVkaWRfc2V0X21mZyhlZGlkLCAiSUdUIik7CisJZWRpZC0+dmVyc2lvbiA9IDE7 CisJZWRpZC0+cmV2aXNpb24gPSAzOworCWVkaWQtPmlucHV0ID0gMHg4MDsKKwllZGlkLT53aWR0 aF9jbSA9IDUyOworCWVkaWQtPmhlaWdodF9jbSA9IDMwOworCWVkaWRfc2V0X2dhbW1hKGVkaWQs IDIuMjApOworCWVkaWQtPmZlYXR1cmVzID0gMHgwMjsKKworCS8qIFllYXIgb2YgbWFudWZhY3R1 cmUgKi8KKwl0ID0gdGltZShOVUxMKTsKKwl0bSA9IGxvY2FsdGltZSgmdCk7CisJZWRpZC0+bWZn X3llYXIgPSB0bS0+dG1feWVhciAtIDkwOworCisJLyogRXN0YWJsaXNoZWQgdGltaW5nczogNjQw eDQ4MCA2MEh6LCA4MDB4NjAwIDYwSHosIDEwMjR4NzY4IDYwSHogKi8KKwllZGlkLT5lc3RhYmxp c2hlZF90aW1pbmdzLnQxID0gMHgyMTsKKwllZGlkLT5lc3RhYmxpc2hlZF90aW1pbmdzLnQyID0g MHgwODsKKworCS8qIFN0YW5kYXJkIHRpbWluZ3MgKi8KKwkvKiAxOTIweDEwODAgNjBIeiAqLwor CXN0ZF90aW1pbmdfc2V0KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzBdLCAxOTIwLCA2MCwgU1RE X1RJTUlOR18xNl85KTsKKwkvKiAxMjgweDcyMCA2MEh6ICovCisJc3RkX3RpbWluZ19zZXQoJmVk aWQtPnN0YW5kYXJkX3RpbWluZ3NbMV0sIDEyODAsIDYwLCBTVERfVElNSU5HXzE2XzkpOworCS8q IDEwMjR4NzY4IDYwSHogKi8KKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5n c1syXSwgMTAyNCwgNjAsIFNURF9USU1JTkdfNF8zKTsKKwkvKiA4MDB4NjAwIDYwSHogKi8KKwlz dGRfdGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1szXSwgODAwLCA2MCwgU1REX1RJ TUlOR180XzMpOworCS8qIDY0MHg0ODAgNjBIeiAqLworCXN0ZF90aW1pbmdfc2V0KCZlZGlkLT5z dGFuZGFyZF90aW1pbmdzWzRdLCA2NDAsIDYwLCBTVERfVElNSU5HXzRfMyk7CisJZm9yIChpID0g NTsgaSA8IFNURF9USU1JTkdTX0xFTjsgaSsrKQorCQlzdGRfdGltaW5nX3Vuc2V0KCZlZGlkLT5z dGFuZGFyZF90aW1pbmdzW2ldKTsKK30KKworLyoqCisgKiBlZGlkX2luaXRfd2l0aF9tb2RlOiBp bml0aWFsaXplIGFuIEVESUQgYW5kIHNldHMgaXRzIHByZWZlcnJlZCBtb2RlCisgKi8KK3ZvaWQg ZWRpZF9pbml0X3dpdGhfbW9kZShzdHJ1Y3QgZWRpZCAqZWRpZCwgZHJtTW9kZU1vZGVJbmZvICpt b2RlKQoreworCWVkaWRfaW5pdChlZGlkKTsKKworCS8qIFByZWZlcnJlZCB0aW1pbmcgKi8KKwlk ZXRhaWxlZF90aW1pbmdfc2V0X21vZGUoJmVkaWQtPmRldGFpbGVkX3RpbWluZ3NbMF0sIG1vZGUs CisJCQkJIGVkaWQtPndpZHRoX2NtICogMTAsIGVkaWQtPmhlaWdodF9jbSAqIDEwKTsKKwlkZXRh aWxlZF90aW1pbmdfc2V0X21vbml0b3JfcmFuZ2VfbW9kZSgmZWRpZC0+ZGV0YWlsZWRfdGltaW5n c1sxXSwKKwkJCQkJICAgICAgIG1vZGUpOworCWRldGFpbGVkX3RpbWluZ19zZXRfc3RyaW5nKCZl ZGlkLT5kZXRhaWxlZF90aW1pbmdzWzJdLAorCQkJCSAgIEVESURfREVUQUlMX01PTklUT1JfTkFN RSwgIklHVCIpOworfQorCisvKioKKyAqIGVkaWRfZmluYWxpemU6IGZpbmFsaXplIGFuIEVESUQg YnkgY29tcHV0aW5nIGl0cyBjaGVja3N1bQorICovCit2b2lkIGVkaWRfZmluYWxpemUoc3RydWN0 IGVkaWQgKmVkaWQpCit7CisJc2l6ZV90IGk7CisJY29uc3QgdWludDhfdCAqYnVmID0gKGNvbnN0 IHVpbnQ4X3QgKikgZWRpZDsKKwl1aW50OF90IHN1bSA9IDA7CisKKwkvKiBjYWxjdWxhdGUgY2hl Y2tzdW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBlZGlkKSAtIDE7IGkrKykg eworCQlzdW0gPSBzdW0gKyBidWZbaV07CisJfQorCisJZWRpZC0+Y2hlY2tzdW0gPSAyNTYgLSBz dW07Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2VkaWQuaCBiL2xpYi9pZ3RfZWRpZC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xNzU0YWYyMgotLS0gL2Rldi9udWxsCisr KyBiL2xpYi9pZ3RfZWRpZC5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IMKp IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwu Y29tPgorICovCisKKyNpZm5kZWYgSUdUX0VESURfSAorI2RlZmluZSBJR1RfRURJRF9ICisKKyNp bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdHJ1Y3QgZXN0X3Rp bWluZ3MgeworCXVpbnQ4X3QgdDE7CisJdWludDhfdCB0MjsKKwl1aW50OF90IG1mZ19yc3ZkOwor fSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTVERfVElNSU5HU19MRU4gOAor CitlbnVtIHN0ZF90aW1pbmdfYXNwZWN0IHsKKwlTVERfVElNSU5HXzE2XzEwID0gMGIwMCwKKwlT VERfVElNSU5HXzRfMyA9IDBiMDEsCisJU1REX1RJTUlOR181XzQgPSAwYjEwLAorCVNURF9USU1J TkdfMTZfOSA9IDBiMTEsCit9OworCitzdHJ1Y3Qgc3RkX3RpbWluZyB7CisJdWludDhfdCBoc2l6 ZTsKKwl1aW50OF90IHZmcmVxX2FzcGVjdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisK KyNkZWZpbmUgREVUQUlMRURfVElNSU5HU19MRU4gNAorCisjZGVmaW5lIEVESURfUFRfSFNZTkNf UE9TSVRJVkUgKDEgPDwgMSkKKyNkZWZpbmUgRURJRF9QVF9WU1lOQ19QT1NJVElWRSAoMSA8PCAy KQorI2RlZmluZSBFRElEX1BUX1NFUEFSQVRFX1NZTkMgICgzIDw8IDMpCisjZGVmaW5lIEVESURf UFRfU1RFUkVPICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgRURJRF9QVF9JTlRFUkxBQ0VEICAg ICAoMSA8PCA3KQorCitzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxfdGltaW5nIHsKKwl1aW50OF90IGhh Y3RpdmVfbG87CisJdWludDhfdCBoYmxhbmtfbG87CisJdWludDhfdCBoYWN0aXZlX2hibGFua19o aTsKKwl1aW50OF90IHZhY3RpdmVfbG87CisJdWludDhfdCB2YmxhbmtfbG87CisJdWludDhfdCB2 YWN0aXZlX3ZibGFua19oaTsKKwl1aW50OF90IGhzeW5jX29mZnNldF9sbzsKKwl1aW50OF90IGhz eW5jX3B1bHNlX3dpZHRoX2xvOworCXVpbnQ4X3QgdnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2xv OworCXVpbnQ4X3QgaHN5bmNfdnN5bmNfb2Zmc2V0X3B1bHNlX3dpZHRoX2hpOworCXVpbnQ4X3Qg d2lkdGhfbW1fbG87CisJdWludDhfdCBoZWlnaHRfbW1fbG87CisJdWludDhfdCB3aWR0aF9oZWln aHRfbW1faGk7CisJdWludDhfdCBoYm9yZGVyOworCXVpbnQ4X3QgdmJvcmRlcjsKKwl1aW50OF90 IG1pc2M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZGV0YWlsZWRfZGF0 YV9zdHJpbmcgeworCWNoYXIgc3RyWzEzXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisK K3N0cnVjdCBkZXRhaWxlZF9kYXRhX21vbml0b3JfcmFuZ2UgeworCXVpbnQ4X3QgbWluX3ZmcmVx OworCXVpbnQ4X3QgbWF4X3ZmcmVxOworCXVpbnQ4X3QgbWluX2hmcmVxX2toejsKKwl1aW50OF90 IG1heF9oZnJlcV9raHo7CisJdWludDhfdCBwaXhlbF9jbG9ja19taHo7IC8qIG5lZWQgdG8gbXVs dGlwbHkgYnkgMTAgKi8KKwl1aW50OF90IGZsYWdzOworCXVuaW9uIHsKKwkJY2hhciBwYWRbN107 CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHJlc2VydmVkOworCQkJdWludDhfdCBoZnJlcV9zdGFy dF9raHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMiAqLworCQkJdWludDhfdCBjOyAvKiBuZWVk IHRvIGRpdmlkZSBieSAyICovCisJCQl1aW50OF90IG1bMl07CisJCQl1aW50OF90IGs7CisJCQl1 aW50OF90IGo7IC8qIG5lZWQgdG8gZGl2aWRlIGJ5IDIgKi8KKwkJfSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKSBndGYyOworCQlzdHJ1Y3QgeworCQkJdWludDhfdCB2ZXJzaW9uOworCQkJdWludDhf dCBkYXRhMTsgLyogaGlnaCA2IGJpdHM6IGV4dHJhIGNsb2NrIHJlc29sdXRpb24gKi8KKwkJCXVp bnQ4X3QgZGF0YTI7IC8qIHBsdXMgbG93IDIgb2YgYWJvdmU6IG1heCBoYWN0aXZlICovCisJCQl1 aW50OF90IHN1cHBvcnRlZF9hc3BlY3RzOworCQkJdWludDhfdCBmbGFnczsgLyogcHJlZmVycmVk IGFzcGVjdCBhbmQgYmxhbmtpbmcgc3VwcG9ydCAqLworCQkJdWludDhfdCBzdXBwb3J0ZWRfc2Nh bGluZ3M7CisJCQl1aW50OF90IHByZWZlcnJlZF9yZWZyZXNoOworCQl9IF9fYXR0cmlidXRlX18o KHBhY2tlZCkpIGN2dDsKKwl9IGZvcm11bGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwor CitlbnVtIGRldGFpbGVkX25vbl9waXhlbF90eXBlIHsKKwlFRElEX0RFVEFJTF9FU1RfVElNSU5H UyA9IDB4ZjcsCisJRURJRF9ERVRBSUxfQ1ZUXzNCWVRFID0gMHhmOCwKKwlFRElEX0RFVEFJTF9D T0xPUl9NR01UX0RBVEEgPSAweGY5LAorCUVESURfREVUQUlMX1NURF9NT0RFUyA9IDB4ZmEsCisJ RURJRF9ERVRBSUxfTU9OSVRPUl9DUERBVEEgPSAweGZiLAorCUVESURfREVUQUlMX01PTklUT1Jf TkFNRSA9IDB4ZmMsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5HRSA9IDB4ZmQsCisJRURJRF9E RVRBSUxfTU9OSVRPUl9TVFJJTkcgPSAweGZlLAorCUVESURfREVUQUlMX01PTklUT1JfU0VSSUFM ID0gMHhmZiwKK307CisKK3N0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgeworCXVpbnQ4X3QgcGFk MTsKKwl1aW50OF90IHR5cGU7IC8qIGVudW0gZGV0YWlsZWRfbm9uX3BpeGVsX3R5cGUgKi8KKwl1 aW50OF90IHBhZDI7CisJdW5pb24geworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgc3Ry OworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9tb25pdG9yX3JhbmdlIHJhbmdlOworCQlzdHJ1Y3Qg ZGV0YWlsZWRfZGF0YV9zdHJpbmcgc3RyaW5nOworCQkvKiBUT0RPOiBvdGhlciB0eXBlcyAqLwor CX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkZXRhaWxlZF90 aW1pbmcgeworCXVpbnQ4X3QgcGl4ZWxfY2xvY2tbMl07IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkg MTAgS0h6LCB6ZXJvIGlmIG5vdCBhIHBpeGVsIHRpbWluZyAqLworCXVuaW9uIHsKKwkJc3RydWN0 IGRldGFpbGVkX3BpeGVsX3RpbWluZyBwaXhlbF9kYXRhOworCQlzdHJ1Y3QgZGV0YWlsZWRfbm9u X3BpeGVsIG90aGVyX2RhdGE7CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK Kworc3RydWN0IGVkaWQgeworCWNoYXIgaGVhZGVyWzhdOworCS8qIFZlbmRvciAmIHByb2R1Y3Qg aW5mbyAqLworCXVpbnQ4X3QgbWZnX2lkWzJdOworCXVpbnQ4X3QgcHJvZF9jb2RlWzJdOworCXVp bnQ4X3Qgc2VyaWFsWzRdOworCXVpbnQ4X3QgbWZnX3dlZWs7CisJdWludDhfdCBtZmdfeWVhcjsK KwkvKiBFRElEIHZlcnNpb24gKi8KKwl1aW50OF90IHZlcnNpb247CisJdWludDhfdCByZXZpc2lv bjsKKwkvKiBEaXNwbGF5IGluZm86ICovCisJdWludDhfdCBpbnB1dDsKKwl1aW50OF90IHdpZHRo X2NtOworCXVpbnQ4X3QgaGVpZ2h0X2NtOworCXVpbnQ4X3QgZ2FtbWE7CisJdWludDhfdCBmZWF0 dXJlczsKKwkvKiBDb2xvciBjaGFyYWN0ZXJpc3RpY3MgKi8KKwl1aW50OF90IHJlZF9ncmVlbl9s bzsKKwl1aW50OF90IGJsYWNrX3doaXRlX2xvOworCXVpbnQ4X3QgcmVkX3g7CisJdWludDhfdCBy ZWRfeTsKKwl1aW50OF90IGdyZWVuX3g7CisJdWludDhfdCBncmVlbl95OworCXVpbnQ4X3QgYmx1 ZV94OworCXVpbnQ4X3QgYmx1ZV95OworCXVpbnQ4X3Qgd2hpdGVfeDsKKwl1aW50OF90IHdoaXRl X3k7CisJLyogRXN0LiB0aW1pbmdzIGFuZCBtZmcgcnN2ZCB0aW1pbmdzKi8KKwlzdHJ1Y3QgZXN0 X3RpbWluZ3MgZXN0YWJsaXNoZWRfdGltaW5nczsKKwkvKiBTdGFuZGFyZCB0aW1pbmdzIDEtOCov CisJc3RydWN0IHN0ZF90aW1pbmcgc3RhbmRhcmRfdGltaW5nc1tTVERfVElNSU5HU19MRU5dOwor CS8qIERldGFpbGluZyB0aW1pbmdzIDEtNCAqLworCXN0cnVjdCBkZXRhaWxlZF90aW1pbmcgZGV0 YWlsZWRfdGltaW5nc1tERVRBSUxFRF9USU1JTkdTX0xFTl07CisJLyogTnVtYmVyIG9mIDEyOCBi eXRlIGV4dC4gYmxvY2tzICovCisJdWludDhfdCBleHRlbnNpb25zOworCS8qIENoZWNrc3VtICov CisJdWludDhfdCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3ZvaWQg ZWRpZF9pbml0KHN0cnVjdCBlZGlkICplZGlkKTsKK3ZvaWQgZWRpZF9pbml0X3dpdGhfbW9kZShz dHJ1Y3QgZWRpZCAqZWRpZCwgZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKK3ZvaWQgZWRpZF9maW5h bGl6ZShzdHJ1Y3QgZWRpZCAqZWRpZCk7Cit2b2lkIGRldGFpbGVkX3RpbWluZ19zZXRfbW9kZShz dHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJICAg ICAgaW50IHdpZHRoX21tLCBpbnQgaGVpZ2h0X21tKTsKK3ZvaWQgZGV0YWlsZWRfdGltaW5nX3Nl dF9tb25pdG9yX3JhbmdlX21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsCisJCQkJCSAg ICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpOwordm9pZCBkZXRhaWxlZF90aW1pbmdfc2V0X3N0cmlu ZyhzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwKKwkJCQllbnVtIGRldGFpbGVkX25vbl9waXhl bF90eXBlIHR5cGUsCisJCQkJY29uc3QgY2hhciAqc3RyKTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9saWIvaWd0X2VkaWRfdGVtcGxhdGUuaCBiL2xpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJkMTljYS4uMDAwMDAwMDAKLS0tIGEvbGliL2ln dF9lZGlkX3RlbXBsYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jZGVmaW5l IEdBTU1BKHgpICgoKHgpICogMTAwKSAtIDEwMCkKLQotI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQo YSwgYiwgYykgKGEgLSAnQCcpIDw8IDIgfCAoYiAtICdAJykgPj4gMywgXAotCQkJCSAoYiAtICdA JykgPDwgNSB8IChjIC0gJ0AnKQotCi0KLSNkZWZpbmUgYWIoeCwgeSkgKCh4KSAmIDB4ZmYpLCAo KHkpICYgMHhmZiksICgoKHgpICYgMHhmMDApID4+IDQpIHwgKCgoeSkgJiAweGYwMCkgPj4gOCkK LSNkZWZpbmUgb3AoaG8sIGhwLCB2bywgdnApICgoaG8pICYgMHhmZiksICgoaHApICYgMHhmZiks IFwKLQkJKCgodm8pICYgMHhmKSA8PCA0KSB8ICgodnApICYgMHhmKSwgXAotCQkoKChobykgJiAw eDMwMCkgPj4gMikgfCAoKChocCkgJiAweDMwMCkgPj4gNCkgXAotCQl8ICgoKHZvKSAmIDB4MzAp ID4+IDIpIHwgKCgodnApICYgMHgzMCkgPj4gNCkKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgRURJ RF9OQU1FW0VESURfTEVOR1RIXSA9IHsKLQkweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAw eGZmLCAweGZmLCAweDAwLCAvKiBoZWFkZXIgKi8KLQlNQU5VRkFDVFVSRVJfSUQoJ0knLCAnRycs ICdUJyksCi0JLyogcHJvZHVjdCBjb2RlLCBzZXJpYWwgbnVtYmVyLCB3ZWVrIGFuZCB5ZWFyIG9m IG1hbnVmYWN0dXJlICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKLQkweDAxLCAweDAzLCAvKiBlZGlkIHZlcnNpb24gKDEuMykgKi8KLQkvKiBiYXNp YyBkaXNwbGF5IHBhcmFtZXRlcnMgKi8KLQkvKiBkaWdpdGFsIGRpc3BsYXksIG1heGltdW0gaG9y aXpvbnRhbCBpbWFnZSBzaXplLCBtYXhpbXVtIHZlcnRpY2FsCi0JICogaW1hZ2Ugc2l6ZSwgZ2Ft bWEsIGZlYXR1cmVzOiBSR0IgNDo0OjQsIG5hdGl2ZSBwaXhlbCBmb3JtYXQgYW5kCi0JICogcmVm cmVzaCByYXRlIGluIGRlc2NyaXB0b3IgMSAqLwotCTB4ODAsIEhTSVpFLCBWU0laRSwgR0FNTUEo Mi4yMCksIDB4MDIsCi0JLyogY2hyb21hdGljaXR5IGNvb3JkaW5hdGVzICovCi0JMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBl c3RhYmxpc2hlZCB0aW1pbmdzOiA2NDB4NDgwIDYwSHosIDgwMHg2MDAgNjBIeiwgMTAyNHg3Njgg NjBIeiAqLwotCTB4MjEsIDB4MDgsIDB4MDAsCi0JLyogc3RhbmRhcmQgdGltaW5ncyAqLwotCTB4 ZDEsIDB4YzAsIC8qIDE5MjB4MTA4MCA2MEh6ICovCi0JMHg4MSwgMHhjMCwgLyogMTI4MHg3MjAg NjBIeiAqLwotCTB4NjEsIDB4NDAsIC8qIDEwMjR4NzY4IDYwSHogKi8KLQkweDQ1LCAweDQwLCAv KiA4MDB4NjAwIDYwSHogKi8KLQkweDMxLCAweDQwLCAvKiA2NDB4NDgwIDYwSHogKi8KLQkweDAx LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotCS8qIGRlc2NyaXB0b3IgMSAocHJlZmVy cmVkIHRpbWluZykgKi8KLQkoQ0xPQ0sgLyAxMCkgJiAweDAwZmYsICgoQ0xPQ0sgLyAxMCkgJiAw eGZmMDApID4+IDgsCi0JYWIoSEFDVElWRSwgSEJMQU5LKSwgYWIoVkFDVElWRSwgVkJMQU5LKSwK LQlvcChIT0ZGU0VULCBIUFVMU0UsIFZPRkZTRVQsIFZQVUxTRSksCi0JYWIoSFNJWkUgKiAxMCwg VlNJWkUgKiAxMCksCi0JMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBkZXNjcmlwdG9yIDIgKG1vbml0 b3IgcmFuZ2UgbGltaXRzKSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4MDAsCi0JVkZS RVEgLSAxLCBWRlJFUSArIDEsIC8qIG1pbmltdW0sIG1heGltdW0gdmVydGljYWwgZmllbGQgcmF0 ZSAqLwotCShDTE9DSyAvIChIQUNUSVZFICsgSEJMQU5LKSkgLSAxLCAvKiBtaW5pbXVtIGhvcml6 b250YWwgbGluZSByYXRlICovCi0JKENMT0NLIC8gKEhBQ1RJVkUgKyBIQkxBTkspKSArIDEsIC8q IG1heGltdW0gaG9yaXpvbnRhbCBsaW5lIHJhdGUgKi8KLQkoQ0xPQ0sgLyAxMDAwMCkgKyAxLCAv KiBtYXhpbXVtIHBpeGVsIGNsb2NrIHJhdGUgKi8KLQkweDAwLCAweDBhLCAweDIwLCAweDIwLCAw eDIwLCAweDIwLCAweDIwLCAweDIwLAotCS8qIGRlc2NyaXB0b3IgMyAobmFtZSBkZXNjcmlwdG9y KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsICAnSScsICAnRycsICAnVCcsIDB4 MGEsCi0JMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgy MCwKLQkvKiBkZXNjcmlwdG9yIDQgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogZXh0ZW5zaW9ucywgY2hlY2tzdW0gKi8KLQkweDAw LCAweDAwCi19OwotCi0jdW5kZWYgRURJRF9OQU1FCi0jdW5kZWYgVkZSRVEKLSN1bmRlZiBDTE9D SwotI3VuZGVmIEhBQ1RJVkUKLSN1bmRlZiBIQkxBTksKLSN1bmRlZiBWQUNUSVZFCi0jdW5kZWYg VkJMQU5LCi0jdW5kZWYgSE9GRlNFVAotI3VuZGVmIEhQVUxTRQotI3VuZGVmIFZPRkZTRVQKLSN1 bmRlZiBWUFVMU0UKLSN1bmRlZiBIU0laRQotI3VuZGVmIFZTSVpFCi0jdW5kZWYgR0FNTUEKLSN1 bmRlZiBNQU5VRkFDVFVSRVJfSUQKLSN1bmRlZiBhYgotI3VuZGVmIG9wCmRpZmYgLS1naXQgYS9s aWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwppbmRleCBmOGIwZGFiMi4uYTI4MzJmNzUgMTAw NjQ0Ci0tLSBhL2xpYi9pZ3Rfa21zLmMKKysrIGIvbGliL2lndF9rbXMuYwpAQCAtNTAsNiArNTAs NyBAQAogI2luY2x1ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpZ3Rfa21zLmgiCiAjaW5jbHVk ZSAiaWd0X2F1eC5oIgorI2luY2x1ZGUgImlndF9lZGlkLmgiCiAjaW5jbHVkZSAiaW50ZWxfY2hp cHNldC5oIgogI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAiaWd0X2RldmljZS5o IgpAQCAtMTAyLDIzICsxMDMsNiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfZWRpZF9jc3VtKHVuc2ln bmVkIGNoYXIgKmVkaWQsIGludCBjZWFfcG9zKQogCWVkaWRbY2VhX3BvcyArIDEyN10gPSAyNTYg LSBzdW07CiB9CiAKLSNkZWZpbmUgVkZSRVEgNjAKLSNkZWZpbmUgQ0xPQ0sgMTQ4NTAwCi0jZGVm aW5lIEhBQ1RJVkUgMTkyMAotI2RlZmluZSBIQkxBTksgMjgwCi0jZGVmaW5lIFZBQ1RJVkUgMTA4 MAotI2RlZmluZSBWQkxBTksgNDUKLSNkZWZpbmUgSE9GRlNFVCA4OAotI2RlZmluZSBIUFVMU0Ug NDQKLSNkZWZpbmUgVk9GRlNFVCA0Ci0jZGVmaW5lIFZQVUxTRSA1Ci0KLSNkZWZpbmUgSFNJWkUg NTIKLSNkZWZpbmUgVlNJWkUgMzAKLQotI2RlZmluZSBFRElEX05BTUUgYmFzZV9lZGlkCi0jaW5j bHVkZSAiaWd0X2VkaWRfdGVtcGxhdGUuaCIKLQogLyoqCiAgKiBpZ3Rfa21zX2dldF9iYXNlX2Vk aWQ6CiAgKgpAQCAtMTM1LDI5ICsxMTksNjYgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2VkaWRfY3N1 bSh1bnNpZ25lZCBjaGFyICplZGlkLCBpbnQgY2VhX3BvcykKICAqCiAgKiBSZXR1cm5zOiBhIGJh c2ljIGVkaWQgYmxvY2sKICAqLwotY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYmFz ZV9lZGlkKHZvaWQpCitjb25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dldF9iYXNlX2VkaWQo dm9pZCkKIHsKLQl1cGRhdGVfZWRpZF9jc3VtKGJhc2VfZWRpZCwgMCk7CisJc3RhdGljIHN0cnVj dCBlZGlkIGVkaWQ7CisJZHJtTW9kZU1vZGVJbmZvIG1vZGUgPSB7fTsKIAotCXJldHVybiBiYXNl X2VkaWQ7CisJbW9kZS5jbG9jayA9IDE0ODUwMDsKKwltb2RlLmhkaXNwbGF5ID0gMTkyMDsKKwlt b2RlLmhzeW5jX3N0YXJ0ID0gMjAwODsKKwltb2RlLmhzeW5jX2VuZCA9IDIwNTI7CisJbW9kZS5o dG90YWwgPSAyMjAwOworCW1vZGUudmRpc3BsYXkgPSAxMDgwOworCW1vZGUudnN5bmNfc3RhcnQg PSAxMDg0OworCW1vZGUudnN5bmNfZW5kID0gMTA4OTsKKwltb2RlLnZ0b3RhbCA9IDExMjU7CisJ bW9kZS52cmVmcmVzaCA9IDYwOworCisJZWRpZF9pbml0X3dpdGhfbW9kZSgmZWRpZCwgJm1vZGUp OworCWVkaWRfZmluYWxpemUoJmVkaWQpOworCisJcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZl ZGlkOwogfQogCi0jZGVmaW5lIFZGUkVRIDYwCi0jZGVmaW5lIENMT0NLIDEwMTAwMAotI2RlZmlu ZSBIQUNUSVZFIDE0MDAKLSNkZWZpbmUgSEJMQU5LIDE2MAotI2RlZmluZSBWQUNUSVZFIDEwNTAK LSNkZWZpbmUgVkJMQU5LIDMwCi0jZGVmaW5lIEhPRkZTRVQgNDgKLSNkZWZpbmUgSFBVTFNFIDMy Ci0jZGVmaW5lIFZPRkZTRVQgMwotI2RlZmluZSBWUFVMU0UgNAorLyoqCisgKiBpZ3Rfa21zX2dl dF9hbHRfZWRpZDoKKyAqCisgKiBHZXQgYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2ssIHdoaWNoIGlu Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kZXM6CisgKgorICogIC0gMTQwMHgxMDUwIDYwSHoKKyAq ICAtIDE5MjB4MTA4MCA2MEh6CisgKiAgLSAxMjgweDcyMCA2MEh6CisgKiAgLSAxMDI0eDc2OCA2 MEh6CisgKiAgLSA4MDB4NjAwIDYwSHoKKyAqICAtIDY0MHg0ODAgNjBIegorICoKKyAqIFRoaXMg Y2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBmZWF0dXJlcyB1c2luZyBmdW5jdGlvbnMgc3Vj aCBhcworICogI2ttc3Rlc3RfZWRpZF9hZGRfM2QuCisgKgorICogUmV0dXJuczogYW4gYWx0ZXJu YXRlIGVkaWQgYmxvY2sKKyAqLworY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0 X2VkaWQodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGVkaWQgZWRpZDsKKwlkcm1Nb2RlTW9kZUlu Zm8gbW9kZSA9IHt9OworCisJbW9kZS5jbG9jayA9IDEwMTAwMDsKKwltb2RlLmhkaXNwbGF5ID0g MTQwMDsKKwltb2RlLmhzeW5jX3N0YXJ0ID0gMTQ0ODsKKwltb2RlLmhzeW5jX2VuZCA9IDE0ODA7 CisJbW9kZS5odG90YWwgPSAxNTYwOworCW1vZGUudmRpc3BsYXkgPSAxMDUwOworCW1vZGUudnN5 bmNfc3RhcnQgPSAxMDUzOworCW1vZGUudnN5bmNfZW5kID0gMTA1NzsKKwltb2RlLnZ0b3RhbCA9 IDEwODA7CisJbW9kZS52cmVmcmVzaCA9IDYwOwogCi0jZGVmaW5lIEhTSVpFIDUyCi0jZGVmaW5l IFZTSVpFIDMwCisJZWRpZF9pbml0X3dpdGhfbW9kZSgmZWRpZCwgJm1vZGUpOworCWVkaWRfZmlu YWxpemUoJmVkaWQpOwogCi0jZGVmaW5lIEVESURfTkFNRSBhbHRfZWRpZAotI2luY2x1ZGUgImln dF9lZGlkX3RlbXBsYXRlLmgiCisJcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZlZGlkOworfQog CiBjb25zdCBjaGFyICogY29uc3QgaWd0X3BsYW5lX3Byb3BfbmFtZXNbSUdUX05VTV9QTEFORV9Q Uk9QU10gPSB7CiAJW0lHVF9QTEFORV9TUkNfWF0gPSAiU1JDX1giLApAQCAtMzAxLDMwICszMjIs NiBAQCBpZ3RfZmlsbF9waXBlX3Byb3BzKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9waXBl X3QgKnBpcGUsCiAJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKIH0KIAotLyoq Ci0gKiBpZ3Rfa21zX2dldF9hbHRfZWRpZDoKLSAqCi0gKiBHZXQgYW4gYWx0ZXJuYXRlIGVkaWQg YmxvY2ssIHdoaWNoIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kZXM6Ci0gKgotICogIC0gMTQw MHgxMDUwIDYwSHoKLSAqICAtIDE5MjB4MTA4MCA2MEh6Ci0gKiAgLSAxMjgweDcyMCA2MEh6Ci0g KiAgLSAxMDI0eDc2OCA2MEh6Ci0gKiAgLSA4MDB4NjAwIDYwSHoKLSAqICAtIDY0MHg0ODAgNjBI egotICoKLSAqIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBmZWF0dXJlcyB1c2lu ZyBmdW5jdGlvbnMgc3VjaCBhcwotICogI2ttc3Rlc3RfZWRpZF9hZGRfM2QuCi0gKgotICogUmV0 dXJuczogYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2sKLSAqLwotY29uc3QgdW5zaWduZWQgY2hhciog aWd0X2ttc19nZXRfYWx0X2VkaWQodm9pZCkKLXsKLQl1cGRhdGVfZWRpZF9jc3VtKGFsdF9lZGlk LCAwKTsKLQotCXJldHVybiBhbHRfZWRpZDsKLX0KLQogLyoqCiAgKiBrbXN0ZXN0X3BpcGVfbmFt ZToKICAqIEBwaXBlOiBkaXNwbGF5IHBpcGUKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBi L2xpYi9tZXNvbi5idWlsZAppbmRleCBhODQ2MjkzMy4uMjBjMGUzZTYgMTAwNjQ0Ci0tLSBhL2xp Yi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTU0LDcgKzU0LDggQEAgbGli X3NvdXJjZXMgPSBbCiAJJ2lndF92M2QuYycsCiAJJ2lndF92YzQuYycsCiAJJ2lndF9wc3IuYycs Ci0JJ2lndF9hbWQuYycKKwknaWd0X2FtZC5jJywKKwknaWd0X2VkaWQuYycsCiBdCiAKIGxpYl9k ZXBzID0gWwotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=