From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5087B89E9E for ; Mon, 13 Jan 2020 09:19:13 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 13 Jan 2020 10:19:04 +0100 Message-Id: <20200113091908.11983-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20200113091908.11983-1-zbigniew.kempczynski@intel.com> References: <20200113091908.11983-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7 1/5] lib/intel_bufops: Introduce buffer operations 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: RGlmZmVyZW50IEdFTnMgc3VwcG9ydHMgZGlmZmVyZW50IHRpbGUgc3VyZmFjZXMuIE9sZGVyIEdF TnMKaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFjZSB0aWxpbmcgLyBkZXRpbGlu Zy4KTmV3ZXIgR0VOcyBoYXZlIHRvIHRpbGUgLyBkZXRpbGUgc3VjaCBzdXJmYWNlIGluIHNvZnR3 YXJlLgoKVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZlIGVhc2llciB0aGlzIGNvZGUgYWRkcyBi dWZmZXIKb3BlcmF0aW9ucyAoc2hvcnQgYnVmX29wcykgdG8gdXNlIGFwcHJvcHJpYXRlIGZ1bmN0 aW9ucyBhbGxvd2luZwpjb3B5aW5nIGxpbmVhciBidWZmZXIgdG8gQk8gYW5kIGZyb20gQk8gdG8g bGluZWFyIGJ1ZmZlcgpyZWdhcmRsZXNzIEdQVSBnZW5lcmF0aW9uIGFuZCB0aWxpbmcvc3dpenps aW5nIHdpdGhpbiBCTy4gRm9yIEdFTnMKaGF2aW5nIGZlbmNlcyBzdXBwb3J0IHByZWZlcmVuY2Ug aXMgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgYXZhaWxhYmxlCihYIC8gWSB0aWxpbmcgaXMgcHJv YmVkIG9uIGJ1Zl9vcHMgaW5pdGlhbGl6YXRpb24pLgoKTm90ZTogb24gR2VuMiBjb2RlIHN1cHBv cnRzIG9ubHkgSFcgdGlsaW5nIGF0IHRoZSBtb21lbnQuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmll dyBLZW1wY3p5xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogS2F0YXJ6eW5hIERlYyA8a2F0 YXJ6eW5hLmRlY0BpbnRlbC5jb20+Ci0tLQogLi4uL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29s cy1kb2NzLnhtbCAgICAgIHwgICAgMSArCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAyICsKIGxpYi9pbnRlbF9idWZvcHMuYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDExNjggKysrKysrKysrKysrKysrKysKIGxpYi9pbnRlbF9idWZvcHMu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODQgKysKIGxpYi9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAx MjU2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmgKCmRpZmYgLS1naXQgYS9kb2Nz L3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3Jl ZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggNDU0ZDY0 ZTUuLmFhOWZlZjIwIDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2ln dC1ncHUtdG9vbHMtZG9jcy54bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9p Z3QtZ3B1LXRvb2xzLWRvY3MueG1sCkBAIC00Miw2ICs0Miw3IEBACiAgICAgPHhpOmluY2x1ZGUg aHJlZj0ieG1sL2lndF92Z2VtLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3Rf eDg2LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9iYXRjaGJ1ZmZlci54 bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW50ZWxfYnVmb3BzLnhtbCIvPgogICAg IDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9jaGlwc2V0LnhtbCIvPgogICAgIDx4aTppbmNs dWRlIGhyZWY9InhtbC9pbnRlbF9pby54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv aW9jdGxfd3JhcHBlcnMueG1sIi8+CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBi L2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDVkZDM5NjJlLi5kYTM0ZWFlNyAxMDA2NDQKLS0t IGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKQEAgLTY3 LDYgKzY3LDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJaW50ZWxfYXViLmgJCVwKIAlpbnRl bF9iYXRjaGJ1ZmZlci5jCVwKIAlpbnRlbF9iYXRjaGJ1ZmZlci5oCVwKKwlpbnRlbF9idWZvcHMu YwkJXAorCWludGVsX2J1Zm9wcy5oCQlcCiAJaW50ZWxfY2hpcHNldC5jCQlcCiAJaW50ZWxfY2hp cHNldC5oCQlcCiAJaW50ZWxfZGV2aWNlX2luZm8uYwlcCmRpZmYgLS1naXQgYS9saWIvaW50ZWxf YnVmb3BzLmMgYi9saWIvaW50ZWxfYnVmb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAuLmVjNGJhZWRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVsX2J1Zm9wcy5j CkBAIC0wLDAgKzEsMTE2OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqLworCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVk ZSAiaWd0X3g4Ni5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgorCisvKioKKyAqIFNFQ1RJ T046aW50ZWxfYnVmb3BzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJ1ZmZlciBvcGVyYXRpb24g b24gdGlsZWQgc3VyZmFjZXMKKyAqIEB0aXRsZTogQnVmZmVyIG9wZXJhdGlvbnMKKyAqIEBpbmNs dWRlOiBpZ3QuaAorICoKKyAqICMgQnVmZmVyIG9wZXJhdGlvbnMKKyAqCisgKiBJbnRlbCBHUFUg ZGV2aWNlcyBzdXBwb3J0cyBkaWZmZXJlbnQgc2V0IG9mIHRpbGVkIHN1cmZhY2VzLgorICogQ2hl Y2tpbmcgZWFjaCB0aW1lIHdoYXQgdGlsZSBmb3JtYXRzIGFyZSBzdXBwb3J0cyBpcyBjdW1iZXJz b21lIGFuZAorICogZXJyb3IgcHJvbmUuCisgKgorICogQnVmZmVyIG9wZXJhdGlvbiAoYnVmX29w cykgcHJvdmlkZSBhIHdyYXBwZXIgdG8gY29uZGl0aW9uYWwgY29kZSB3aGljaAorICogY2FuIGJl IHVzZWQgd2l0aG91dCB3b3JyeWluZyBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGdpdmluZzoK KyAqIC0gY29weSBsaW5lYXIgdG8gdGlsZWQgYnVmZmVyCisgKiAtIGNvcHkgdGlsZWQgYnVmZmVy IHRvIGxpbmVhcgorICoKKyAqIEZvbGxvd2luZyBjb2RlIG9yZGVyIHNob3VsZCBiZSB1c2VkIChs aW5lYXIgaXMgcGxhaW4gbWVtb3J5IHdpdGggc29tZQorICogaW1hZ2UgZGF0YSk6CisgKgorICog fFs8IS0tIGxhbmd1YWdlPSJjIiAtLT4KKyAqIHN0cnVjdCBidWZfb3BzICpib3BzOworICogc3Ry dWN0IGludGVsX2J1ZiBpYnVmOworICogLi4uCisgKiBib3BzID0gYnVmX29wc19jcmVhdGUoZmQp OworICogaW50ZWxfYnVmX2luaXQoYm9wcywgJmlidWYsIDUxMiwgNTEyLCAzMiwgSTkxNV9USUxJ TkdfWCwgZmFsc2UpOworICogLi4uCisgKiBsaW5lYXJfdG9faW50ZWxfYnVmKGJvcHMsICZpYnVm LCBsaW5lYXIpOworICogLi4uCisgKiBpbnRlbF9idWZfdG9fbGluZWFyKGJvcHMsICZpYnVmLCBs aW5lYXIpOworICogLi4uCisgKiBpbnRlbF9idWZfY2xvc2UoYm9wcywgJmlidWYpOworICogLi4u CisgKiBidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CisgKiBdfAorICoKKyAqIENhbGxpbmcgYnVmX29w c19jcmVhdGUoZmQpIHByb2JlcyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKHN1cHBvcnRlZCBmZW5j ZXMsCisgKiBzd2l6emxpbmcpIGFuZCByZXR1cm5zIG9wYXF1ZSBwb2ludGVyIHRvIGJ1Zl9vcHMu IEZyb20gbm93IG9uCisgKiBpbnRlbF9idWZfdG9fbGluZWFyKCkgYW5kIGxpbmVhcl90b19pbnRl bF9idWYoKSB3aWxsIGNob29zZSBhcHByb3ByaWF0ZQorICogZnVuY3Rpb24gdG8gZG8gdGhlIGpv Yi4KKyAqCisgKiBOb3RlOiBidWZvcHMgZG9lc24ndCBzdXBwb3J0IFNXIHRpbGluZyBjb2RlIHll dC4KKyAqLworCisvLyNkZWZpbmUgQlVGT1BTX0RFQlVHR0lORworI2lmZGVmIEJVRk9QU19ERUJV R0dJTkcKKyNkZWZpbmUgREVCVUcoLi4uKSBwcmludGYoX19WQV9BUkdTX18pCisjZGVmaW5lIERF QlVHRk4oKSBERUJVRygiXHQgLT4gJXMoKVxuIiwgX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZp bmUgREVCVUcoLi4uKQorI2RlZmluZSBERUJVR0ZOKCkKKyNlbmRpZgorCisjZGVmaW5lIFRJTEVf REVGKHgpICgxIDw8ICh4KSkKKyNkZWZpbmUgVElMRV9OT05FICAgVElMRV9ERUYoSTkxNV9USUxJ TkdfTk9ORSkKKyNkZWZpbmUgVElMRV9YICAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWCkKKyNk ZWZpbmUgVElMRV9ZICAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWSkKKyNkZWZpbmUgVElMRV9Z ZiAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWWYpCisjZGVmaW5lIFRJTEVfWXMgICAgIFRJTEVf REVGKEk5MTVfVElMSU5HX1lzKQorCisjZGVmaW5lIENDU19PRkZTRVQoYnVmKSAoYnVmLT5hdXgu b2Zmc2V0KQorI2RlZmluZSBDQ1NfU0laRShnZW4sIGJ1ZikgXAorCShpbnRlbF9idWZfYXV4X3dp ZHRoKGdlbiwgYnVmKSAqIGludGVsX2J1Zl9hdXhfaGVpZ2h0KGdlbiwgYnVmKSkKKwordHlwZWRl ZiB2b2lkICgqYm9fY29weSkoc3RydWN0IGJ1Zl9vcHMgKiwgc3RydWN0IGludGVsX2J1ZiAqLCB1 aW50MzJfdCAqKTsKKworc3RydWN0IGJ1Zl9vcHMgeworCWludCBmZDsKKwlpbnQgZ2VuX3N0YXJ0 OworCWludCBnZW5fZW5kOworCWludCBpbnRlbF9nZW47CisJdWludDMyX3Qgc3VwcG9ydGVkX3Rp bGVzOworCXVpbnQzMl90IHN1cHBvcnRlZF9od190aWxlczsKKwl1aW50MzJfdCBzd2l6emxlX3g7 CisJdWludDMyX3Qgc3dpenpsZV95OworCWJvX2NvcHkgbGluZWFyX3RvOworCWJvX2NvcHkgbGlu ZWFyX3RvX3g7CisJYm9fY29weSBsaW5lYXJfdG9feTsKKwlib19jb3B5IGxpbmVhcl90b195ZjsK Kwlib19jb3B5IGxpbmVhcl90b195czsKKwlib19jb3B5IHRvX2xpbmVhcjsKKwlib19jb3B5IHhf dG9fbGluZWFyOworCWJvX2NvcHkgeV90b19saW5lYXI7CisJYm9fY29weSB5Zl90b19saW5lYXI7 CisJYm9fY29weSB5c190b19saW5lYXI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqdGlsaW5n X3N0cih1aW50MzJfdCB0aWxpbmcpCit7CisJc3dpdGNoICh0aWxpbmcpIHsKKwljYXNlIEk5MTVf VElMSU5HX05PTkU6IHJldHVybiAiTk9ORSI7CisJY2FzZSBJOTE1X1RJTElOR19YOiAgICByZXR1 cm4gIlgiOworCWNhc2UgSTkxNV9USUxJTkdfWTogICAgcmV0dXJuICJZIjsKKwljYXNlIEk5MTVf VElMSU5HX1lmOiAgIHJldHVybiAiWWYiOworCWNhc2UgSTkxNV9USUxJTkdfWXM6ICAgcmV0dXJu ICJZcyI7CisJZGVmYXVsdDogICAgICAgICAgICAgICByZXR1cm4gIlVOS05PV04iOworCX0KK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKmJvb2xfc3RyKGJvb2wgdikKK3sKKwlyZXR1cm4gdiA/ICJ5 ZXMiIDogIm5vIjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2h3X3RpbGluZ19zdXBwb3J0 ZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKK3sKKwlyZXR1cm4gYm9w cy0+c3VwcG9ydGVkX2h3X3RpbGVzICYgVElMRV9ERUYodGlsaW5nKTsKK30KKworc3RhdGljIGlu bGluZSBib29sIGlzX3RpbGluZ19zdXBwb3J0ZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQz Ml90IHRpbGluZykKK3sKKwlyZXR1cm4gYm9wcy0+c3VwcG9ydGVkX3RpbGVzICYgVElMRV9ERUYo dGlsaW5nKTsKK30KKworc3RhdGljIGludCBfX2dlbV9nZXRfdGlsaW5nKGludCBmZCwgc3RydWN0 IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nICphcmcpCit7CisJaW50IGVycjsKKworCWVyciA9IDA7 CisJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcsIGFyZykp CisJCWVyciA9IC1lcnJubzsKKwllcnJubyA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgYm9vbCBfX2dldF90aWxpbmcoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICp0 aWxpbmcsCisJCQkgdWludDMyX3QgKnN3aXp6bGUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9n ZXRfdGlsaW5nIGdldF90aWxpbmc7CisKKwltZW1zZXQoJmdldF90aWxpbmcsIDAsIHNpemVvZihn ZXRfdGlsaW5nKSk7CisJZ2V0X3RpbGluZy5oYW5kbGUgPSBoYW5kbGU7CisKKwlpZiAoX19nZW1f Z2V0X3RpbGluZyhmZCwgJmdldF90aWxpbmcpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCSp0 aWxpbmcgPSBnZXRfdGlsaW5nLnRpbGluZ19tb2RlOworCSpzd2l6emxlID0gZ2V0X3RpbGluZy5z d2l6emxlX21vZGU7CisJaWd0X2RlYnVnKCJidWYgdGlsaW5nOiAlcywgc3dpenpsZTogJXgsIHBo eXNfc3dpenpsZTogJXhcbiIsCisJCSAgdGlsaW5nX3N0cihnZXRfdGlsaW5nLnRpbGluZ19tb2Rl KSwKKwkJICBnZXRfdGlsaW5nLnN3aXp6bGVfbW9kZSwKKwkJICBnZXRfdGlsaW5nLnBoeXNfc3dp enpsZV9tb2RlKTsKKworCXJldHVybiBnZXRfdGlsaW5nLnBoeXNfc3dpenpsZV9tb2RlID09IGdl dF90aWxpbmcuc3dpenpsZV9tb2RlOworfQorCitzdGF0aWMgaW50IF9fc2V0X3RpbGluZyhpbnQg ZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgdGlsaW5nLAorCQkJdWludDMyX3Qgc3RyaWRl KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyBzdDsKKworCXN0LmhhbmRsZSA9 IGhhbmRsZTsKKwlzdC50aWxpbmdfbW9kZSA9IHRpbGluZzsKKwlzdC5zdHJpZGUgPSB0aWxpbmcg PyBzdHJpZGUgOiAwOworCisJcmV0dXJuIGlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fU0VU X1RJTElORywgJnN0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2h3X3RpbGVkKHN0cnVjdCBidWZf b3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7CisJaW50IHJldDsKKworCWlmIChi dWYtPnRpbGluZyAhPSBJOTE1X1RJTElOR19YICYmIGJ1Zi0+dGlsaW5nICE9IEk5MTVfVElMSU5H X1kpCisJCXJldHVybjsKKworCWlmICghYnVmX29wc19oYXNfaHdfZmVuY2UoYm9wcywgYnVmLT50 aWxpbmcpKQorCQlyZXR1cm47CisKKwlyZXQgPSBfX3NldF90aWxpbmcoYm9wcy0+ZmQsIGJ1Zi0+ aGFuZGxlLCBidWYtPnRpbGluZywgYnVmLT5zdHJpZGUpOworCWlndF9hc3NlcnQocmV0ID09IDAp OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzd2l6emxlX2JpdCh1bnNpZ25lZCBpbnQgYml0 LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gKG9mZnNldCAmICgxdWwgPDwgYml0 KSkgPj4gKGJpdCAtIDYpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzd2l6emxlX2FkZHIo dm9pZCAqcHRyLCB1aW50MzJfdCBzd2l6emxlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IHRv X3VzZXJfcG9pbnRlcihwdHIpOworCisJc3dpdGNoIChzd2l6emxlKSB7CisJY2FzZSBJOTE1X0JJ VF82X1NXSVpaTEVfTk9ORToKKwkJcmV0dXJuIGFkZHI7CisJY2FzZSBJOTE1X0JJVF82X1NXSVpa TEVfOToKKwkJcmV0dXJuIGFkZHIgXiBzd2l6emxlX2JpdCg5LCBhZGRyKTsKKwljYXNlIEk5MTVf QklUXzZfU1dJWlpMRV85XzEwOgorCQlyZXR1cm4gYWRkciBeIHN3aXp6bGVfYml0KDksIGFkZHIp IF4gc3dpenpsZV9iaXQoMTAsIGFkZHIpOworCWNhc2UgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTE6 CisJCXJldHVybiBhZGRyIF4gc3dpenpsZV9iaXQoOSwgYWRkcikgXiBzd2l6emxlX2JpdCgxMSwg YWRkcik7CisJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xMToKKwkJcmV0dXJuIChhZGRy IF4KKwkJCXN3aXp6bGVfYml0KDksIGFkZHIpIF4KKwkJCXN3aXp6bGVfYml0KDEwLCBhZGRyKSBe CisJCQlzd2l6emxlX2JpdCgxMSwgYWRkcikpOworCisJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVf VU5LTk9XTjoKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85XzE3OgorCWNhc2UgSTkxNV9CSVRf Nl9TV0laWkxFXzlfMTBfMTc6CisJZGVmYXVsdDoKKwkJLyogSWYgd2UgaGl0IHRoaXMgY2FzZSwg d2UgbmVlZCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlCisJCSAqIGFwcHJvcHJpYXRlIHN3 aXp6bGluZyBtZXRob2QuICovCisJCWlndF9yZXF1aXJlKGZhbHNlKTsKKwkJcmV0dXJuIGFkZHI7 CisJfQorfQorCitzdGF0aWMgdm9pZCAqeF9wdHIodm9pZCAqcHRyLAorCQkgICB1bnNpZ25lZCBp bnQgeCwgdW5zaWduZWQgaW50IHksCisJCSAgIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVk IGludCBjcHApCit7CisJY29uc3QgaW50IHRpbGVfd2lkdGggPSA1MTI7CisJY29uc3QgaW50IHRp bGVfaGVpZ2h0ID0gODsKKwljb25zdCBpbnQgdGlsZV9zaXplID0gdGlsZV93aWR0aCAqIHRpbGVf aGVpZ2h0OworCWludCB0aWxlX3gsIHRpbGVfeTsKKwlpbnQgb2Zmc2V0X3gsIG9mZnNldF95LCBw b3M7CisKKwl4ICo9IGNwcDsKKwl0aWxlX3ggPSB4IC8gdGlsZV93aWR0aDsKKwl0aWxlX3kgPSB5 IC8gdGlsZV9oZWlnaHQ7CisJb2Zmc2V0X3ggPSAodGlsZV94ICogdGlsZV9zaXplKTsKKwlvZmZz ZXRfeSA9ICh0aWxlX3kgKiBzdHJpZGUgKiB0aWxlX2hlaWdodCk7CisKKwlwb3MgPSBvZmZzZXRf eSArIG9mZnNldF94ICsKKwkJCSh5ICUgdGlsZV9oZWlnaHQgKiB0aWxlX3dpZHRoKSArICh4ICUg dGlsZV93aWR0aCk7CisKKwlyZXR1cm4gcHRyICsgcG9zOworfQorCitzdGF0aWMgdm9pZCAqeV9w dHIodm9pZCAqcHRyLAorCQkgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksCisJCSAg IHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjcHApCit7CisJY29uc3QgaW50IHRp bGVfd2lkdGggPSAxMjg7CisJY29uc3QgaW50IHRpbGVfaGVpZ2h0ID0gMzI7CisJY29uc3QgaW50 IG93b3JkcyA9IDE2OworCWNvbnN0IGludCB0aWxlX3NpemUgPSB0aWxlX3dpZHRoICogdGlsZV9o ZWlnaHQ7CisJaW50IHRpbGVfeCwgdGlsZV95OworCWludCBvZmZzZXRfeCwgb2Zmc2V0X3ksIHBv czsKKwlpbnQgc2hpZnRfeCwgc2hpZnRfeTsKKworCXggKj0gY3BwOworCXRpbGVfeCA9IHggLyB0 aWxlX3dpZHRoOworCXRpbGVfeSA9IHkgLyB0aWxlX2hlaWdodDsKKwlvZmZzZXRfeCA9IHRpbGVf eCAqIHRpbGVfc2l6ZTsKKwlvZmZzZXRfeSA9IHRpbGVfeSAqIHN0cmlkZSAqIHRpbGVfaGVpZ2h0 OworCXNoaWZ0X3ggPSB4ICUgb3dvcmRzICsgKHggJSB0aWxlX3dpZHRoKSAvIG93b3JkcyAqIHRp bGVfd2lkdGggKiBjcHA7CisJc2hpZnRfeSA9IHkgJSB0aWxlX2hlaWdodCAqIG93b3JkczsKKwor CXBvcyA9IG9mZnNldF95ICsgb2Zmc2V0X3ggKyBzaGlmdF94ICsgc2hpZnRfeTsKKworCXJldHVy biBwdHIgKyBwb3M7Cit9CisKK3N0YXRpYyB2b2lkICp5Zl9wdHIodm9pZCAqcHRyLAorCQkgICAg dW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkgICAgdW5zaWduZWQgaW50IHN0cmlk ZSwgdW5zaWduZWQgaW50IGNwcCkKK3sKKwljb25zdCBpbnQgdGlsZV9zaXplID0gNCAqIDEwMjQ7 CisJY29uc3QgaW50IHRpbGVfd2lkdGggPSAxMjg7CisJaW50IHJvd19zaXplID0gKHN0cmlkZSAv IHRpbGVfd2lkdGgpICogdGlsZV9zaXplOworCisJeCAqPSBjcHA7IC8qIGNvbnZlcnQgdG8gQnl0 ZSBvZmZzZXQgKi8KKworCisJLyoKKwkgKiBXaXRoaW4gYSA0ayBZZiB0aWxlLCB0aGUgYnl0ZSBz d2l6emxpbmcgcGF0dGVybiBpcworCSAqIG1zYi4uLi4uLmxzYgorCSAqIHh5eHl4eXl5eHh4eAor CSAqIFRoZSB0aWxlcyB0aGVtc2VsdmVzIGFyZSBsYWlkIG91dCBpbiByb3cgbWFqb3Igb3JkZXIu CisJICovCisJcmV0dXJuIHB0ciArCisJCQkoKHggJiAweGYpICogMSkgKyAvKiA0eDEgcGl4ZWxz KDMyYnBwKSA9IDE2QiAqLworCQkJKCh5ICYgMHgzKSAqIDE2KSArIC8qIDR4NCBwaXhlbHMgPSA2 NEIgKi8KKwkJCSgoKHkgJiAweDQpID4+IDIpICogNjQpICsgLyogMXgyIDY0QiBibG9ja3MgKi8K KwkJCSgoKHggJiAweDEwKSA+PiA0KSAqIDEyOCkgKyAvKiAyeDIgNjRCIGJsb2NrcyA9IDI1NkIg YmxvY2sgKi8KKwkJCSgoKHkgJiAweDgpID4+IDMpICogMjU2KSArIC8qIDJ4MSAyNTZCIGJsb2Nr cyAqLworCQkJKCgoeCAmIDB4MjApID4+IDUpICogNTEyKSArIC8qIDJ4MiAyNTZCIGJsb2NrcyAq LworCQkJKCgoeSAmIDB4MTApID4+IDQpICogMTAyNCkgKyAvKiA0eDIgMjU2IGJsb2NrcyAqLwor CQkJKCgoeCAmIDB4NDApID4+IDYpICogMjA0OCkgKyAvKiA0eDQgMjU2QiBibG9ja3MgPSA0ayB0 aWxlICovCisJCQkoKCh4ICYgfjB4N2YpID4+IDcpICogdGlsZV9zaXplKSArIC8qIHJvdyBvZiB0 aWxlcyAqLworCQkJKCgoeSAmIH4weDFmKSA+PiA1KSAqIHJvd19zaXplKTsKK30KKwordHlwZWRl ZiB2b2lkICooKmZuX3B0cikodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJ CXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBmbl9wdHIgX19nZXRfdGlsZV9m bl9wdHIoaW50IHRpbGluZykKK3sKKwlmbl9wdHIgZm4gPSBOVUxMOworCisJc3dpdGNoICh0aWxp bmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWZuID0geF9wdHI7CisJCWJyZWFrOworCWNh c2UgSTkxNV9USUxJTkdfWToKKwkJZm4gPSB5X3B0cjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJ TElOR19ZZjoKKwkJZm4gPSB5Zl9wdHI7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWXM6 CisJCS8qIFRvIGJlIGltcGxlbWVudGVkICovCisJCWJyZWFrOworCX0KKworCWlndF9hc3NlcnRf ZihmbiwgIkNhbid0IGZpbmQgdGlsZSBmdW5jdGlvbiBmb3IgdGlsaW5nOiAlZFxuIiwgdGlsaW5n KTsKKworCXJldHVybiBmbjsKK30KKworZW51bSBjY3NfY29weV9kaXJlY3Rpb24geworCUNDU19M SU5FQVJfVE9fQlVGLAorCUNDU19CVUZfVE9fTElORUFSLAorfTsKKworc3RhdGljIHZvaWQgX19j b3B5X2NjcyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkg ICAgICAgdWludDMyX3QgKmxpbmVhciwgZW51bSBjY3NfY29weV9kaXJlY3Rpb24gZGlyKQorewor CXVpbnQ2NF90IHNpemUsIG9mZnNldCwgY2NzX3NpemU7CisJaW50IGdlbjsKKwl2b2lkICptYXA7 CisKKwlpZiAoIWJ1Zi0+Y29tcHJlc3Npb24pCisJCXJldHVybjsKKworCWdlbiA9IGJvcHMtPmlu dGVsX2dlbjsKKwlvZmZzZXQgPSBDQ1NfT0ZGU0VUKGJ1Zik7CisJY2NzX3NpemUgPSBDQ1NfU0la RShnZW4sIGJ1Zik7CisJc2l6ZSA9IG9mZnNldCArIGNjc19zaXplOworCWdlbV9zZXRfZG9tYWlu KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisKKwltYXAg PSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwgc2l6ZSwg UFJPVF9SRUFEKTsKKwlpZiAoIW1hcCkKKwkJbWFwID0gZ2VtX21tYXBfX2NwdShib3BzLT5mZCwg YnVmLT5oYW5kbGUsIDAsIHNpemUsIFBST1RfUkVBRCk7CisJaWd0X2Fzc2VydChtYXApOworCisJ c3dpdGNoIChkaXIpIHsKKwljYXNlIENDU19MSU5FQVJfVE9fQlVGOgorCQlpZ3RfbWVtY3B5X2Zy b21fd2MobWFwICsgb2Zmc2V0LCAodWludDhfdCAqKSBsaW5lYXIgKyBvZmZzZXQsCisJCQkJICAg Y2NzX3NpemUpOworCWNhc2UgQ0NTX0JVRl9UT19MSU5FQVI6CisJCWlndF9tZW1jcHlfZnJvbV93 YygodWludDhfdCAqKSBsaW5lYXIgKyBvZmZzZXQsIG1hcCArIG9mZnNldCwKKwkJCQkgICBjY3Nf c2l6ZSk7CisJfQorCisJbXVubWFwKG1hcCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY29w eV9saW5lYXJfdG8oaW50IGZkLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIGNvbnN0 IHVpbnQzMl90ICpsaW5lYXIsCisJCQkgICAgIGludCB0aWxpbmcsIHVpbnQzMl90IHN3aXp6bGUp Cit7CisJaW50IGhlaWdodCA9IGludGVsX2J1Zl9oZWlnaHQoYnVmKTsKKwlpbnQgd2lkdGggPSBp bnRlbF9idWZfd2lkdGgoYnVmKTsKKwlmbl9wdHIgZm4gPSBfX2dldF90aWxlX2ZuX3B0cih0aWxp bmcpOworCXZvaWQgKm1hcDsKKworCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmhhbmRsZSwKKwkJ ICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCisJbWFw ID0gX19nZW1fbW1hcF9vZmZzZXRfX2NwdShmZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgICBi dWYtPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCWlmICghbWFwKQorCQltYXAgPSBn ZW1fbW1hcF9fY3B1KGZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAgYnVmLT5zaXplLCBQUk9U X1JFQUQgfCBQUk9UX1dSSVRFKTsKKworCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKKwkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisJCQl1aW50MzJfdCAqcHRy ID0gZm4obWFwLCB4LCB5LCBidWYtPnN0cmlkZSwgYnVmLT5icHAvOCk7CisKKwkJCWlmIChzd2l6 emxlKQorCQkJCXB0ciA9IGZyb21fdXNlcl9wb2ludGVyKHN3aXp6bGVfYWRkcihwdHIsCisJCQkJ CQkJCSAgICAgc3dpenpsZSkpOworCQkJKnB0ciA9IGxpbmVhclt5ICogd2lkdGggKyB4XTsKKwkJ fQorCX0KKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlf bGluZWFyX3RvX3goc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwK KwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZOKCk7CisJX19jb3B5X2xpbmVh cl90byhib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1gsIGJvcHMtPnN3aXp6bGVf eCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3koc3RydWN0IGJ1Zl9vcHMgKmJv cHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKK3sK KwlERUJVR0ZOKCk7CisJX19jb3B5X2xpbmVhcl90byhib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5 MTVfVElMSU5HX1ksIGJvcHMtPnN3aXp6bGVfeSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGlu ZWFyX3RvX3lmKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJ CQkgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCURFQlVHRk4oKTsKKwlfX2NvcHlfbGluZWFy X3RvKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWWYsIDApOworfQorCitzdGF0 aWMgdm9pZCBjb3B5X2xpbmVhcl90b195cyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlu dGVsX2J1ZiAqYnVmLAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZOKCk7 CisJX19jb3B5X2xpbmVhcl90byhib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1lz LCAwKTsKK30KKworc3RhdGljIHZvaWQgX19jb3B5X3RvX2xpbmVhcihpbnQgZmQsIHN0cnVjdCBp bnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhciwgaW50IHRpbGluZywgdWlu dDMyX3Qgc3dpenpsZSkKK3sKKwlpbnQgaGVpZ2h0ID0gaW50ZWxfYnVmX2hlaWdodChidWYpOwor CWludCB3aWR0aCA9IGludGVsX2J1Zl93aWR0aChidWYpOworCWZuX3B0ciBmbiA9IF9fZ2V0X3Rp bGVfZm5fcHRyKHRpbGluZyk7CisJdm9pZCAqbWFwOworCisJZ2VtX3NldF9kb21haW4oZmQsIGJ1 Zi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKworCW1hcCA9IF9fZ2VtX21tYXBf b2Zmc2V0X19jcHUoZmQsIGJ1Zi0+aGFuZGxlLCAwLCBidWYtPnNpemUsIFBST1RfUkVBRCk7CisJ aWYgKCFtYXApCisJCW1hcCA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+aGFuZGxlLCAwLCBidWYt PnNpemUsIFBST1RfUkVBRCk7CisKKwlmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7 CisJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworCQkJdWludDMyX3QgKnB0ciA9 IGZuKG1hcCwgeCwgeSwgYnVmLT5zdHJpZGUsIGJ1Zi0+YnBwLzgpOworCisJCQlpZiAoc3dpenps ZSkKKwkJCQlwdHIgPSBmcm9tX3VzZXJfcG9pbnRlcihzd2l6emxlX2FkZHIocHRyLAorCQkJCQkJ CQkgICAgIHN3aXp6bGUpKTsKKwkJCWxpbmVhclt5ICogd2lkdGggKyB4XSA9ICpwdHI7CisJCX0K Kwl9CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3hf dG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJ CQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJREVCVUdGTigpOworCV9fY29weV90b19saW5l YXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19YLCBib3BzLT5zd2l6emxlX3gp OworfQorCitzdGF0aWMgdm9pZCBjb3B5X3lfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3Bz LCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJ REVCVUdGTigpOworCV9fY29weV90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1 X1RJTElOR19ZLCBib3BzLT5zd2l6emxlX3kpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3lmX3Rv X2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJ ICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZOKCk7CisJX19jb3B5X3RvX2xpbmVh cihib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1lmLCAwKTsKK30KKworc3RhdGlj IHZvaWQgY29weV95c190b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRl bF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJREVCVUdGTigpOwor CV9fY29weV90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19Zcywg MCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX2d0dChzdHJ1Y3QgYnVmX29wcyAq Ym9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIp Cit7CisJdm9pZCAqbWFwOworCisJREVCVUdGTigpOworCisJZ2VtX3NldF9kb21haW4oYm9wcy0+ ZmQsIGJ1Zi0+aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1f RE9NQUlOX0dUVCk7CisKKwltYXAgPSBnZW1fbW1hcF9fZ3R0KGJvcHMtPmZkLCBidWYtPmhhbmRs ZSwKKwkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJbWVtY3B5 KG1hcCwgbGluZWFyLCBidWYtPnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30K Kworc3RhdGljIHZvaWQgY29weV9ndHRfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBz dHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2 b2lkICptYXA7CisKKwlERUJVR0ZOKCk7CisKKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVm LT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKKworCW1hcCA9IGdl bV9tbWFwX19ndHQoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAorCQkJICAgIGJ1Zi0+c2l6ZSwgUFJP VF9SRUFEKTsKKworCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCwgYnVmLT5zaXplKTsK KworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFy X3RvX3djKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkg ICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCURFQlVHRk4oKTsKKwor CWdlbV9zZXRfZG9tYWluKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VN X0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCisJbWFwID0gX19nZW1fbW1hcF9v ZmZzZXRfX3djKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAgYnVmLT5zaXplLCBQ Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKwlpZiAoIW1hcCkKKwkJbWFwID0gZ2VtX21tYXBfX3dj KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICBidWYtPnNpemUsIFBST1RfUkVBRCB8 IFBST1RfV1JJVEUpOworCisJbWVtY3B5KG1hcCwgbGluZWFyLCBidWYtPnNpemUpOworCisJbXVu bWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weV93Y190b19saW5lYXIo c3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVp bnQzMl90ICpsaW5lYXIpCit7CisJdm9pZCAqbWFwOworCisJREVCVUdGTigpOworCisJZ2VtX3Nl dF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlO X0dUVCwgMCk7CisKKwltYXAgPSBfX2dlbV9tbWFwX29mZnNldF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+ aGFuZGxlLCAwLAorCQkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCk7CisJaWYgKCFtYXApCisJ CW1hcCA9IGdlbV9tbWFwX193Yyhib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgYnVm LT5zaXplLCBQUk9UX1JFQUQpOworCisJaWd0X21lbWNweV9mcm9tX3djKGxpbmVhciwgbWFwLCBi dWYtPnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQg Y29weV9saW5lYXJfdG9fY3B1KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVm ICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlE RUJVR0ZOKCk7CisKKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVmLT5oYW5kbGUsCisJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKworCW1hcCA9 IF9fZ2VtX21tYXBfb2Zmc2V0X19jcHUoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAorCQkJCSAg ICAgYnVmLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKwlpZiAoIW1hcCkKKwkJbWFw ID0gZ2VtX21tYXBfX2NwdShib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgIGJ1Zi0+ c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwltZW1jcHkobWFwLCBsaW5lYXIsIGJ1 Zi0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBj b3B5X2NwdV90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYg KmJ1ZiwKKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCURF QlVHRk4oKTsKKworCWdlbV9zZXRfZG9tYWluKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKKwkJICAg ICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOworCisJbWFwID0gX19nZW1fbW1hcF9vZmZzZXRf X2NwdShib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJCQkJICAgICBidWYtPnNpemUsIFBST1Rf UkVBRCk7CisJaWYgKCFtYXApCisJCW1hcCA9IGdlbV9tbWFwX19jcHUoYm9wcy0+ZmQsIGJ1Zi0+ aGFuZGxlLCAwLAorCQkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCk7CisKKwltZW1jcHkobGlu ZWFyLCBtYXAsIGJ1Zi0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCit2 b2lkIGludGVsX2J1Zl90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRl bF9idWYgKmJ1ZiwKKwkJCSB1aW50MzJfdCAqbGluZWFyKQoreworCWlndF9hc3NlcnQoYm9wcyk7 CisKKwlzd2l0Y2ggKGJ1Zi0+dGlsaW5nKSB7CisJY2FzZSBJOTE1X1RJTElOR19OT05FOgorCQlp Z3RfYXNzZXJ0KGJvcHMtPnRvX2xpbmVhcik7CisJCWJvcHMtPnRvX2xpbmVhcihib3BzLCBidWYs IGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWDoKKwkJaWd0X2Fzc2VydChi b3BzLT54X3RvX2xpbmVhcik7CisJCWJvcHMtPnhfdG9fbGluZWFyKGJvcHMsIGJ1ZiwgbGluZWFy KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlpZ3RfYXNzZXJ0KGJvcHMtPnlf dG9fbGluZWFyKTsKKwkJYm9wcy0+eV90b19saW5lYXIoYm9wcywgYnVmLCBsaW5lYXIpOworCQli cmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lmOgorCQlpZ3RfYXNzZXJ0KGJvcHMtPnlmX3RvX2xp bmVhcik7CisJCWJvcHMtPnlmX3RvX2xpbmVhcihib3BzLCBidWYsIGxpbmVhcik7CisJCWJyZWFr OworCWNhc2UgSTkxNV9USUxJTkdfWXM6CisJCWlndF9hc3NlcnQoYm9wcy0+eXNfdG9fbGluZWFy KTsKKwkJYm9wcy0+eXNfdG9fbGluZWFyKGJvcHMsIGJ1ZiwgbGluZWFyKTsKKwkJYnJlYWs7CisJ fQorCisJaWYgKGJ1Zi0+Y29tcHJlc3Npb24pCisJCV9fY29weV9jY3MoYm9wcywgYnVmLCBsaW5l YXIsIENDU19CVUZfVE9fTElORUFSKTsKK30KKwordm9pZCBsaW5lYXJfdG9faW50ZWxfYnVmKHN0 cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgdWludDMyX3Qg KmxpbmVhcikKK3sKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCisJc3dpdGNoIChidWYtPnRpbGluZykg eworCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG8p OworCQlib3BzLT5saW5lYXJfdG8oYm9wcywgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNl IEk5MTVfVElMSU5HX1g6CisJCWlndF9hc3NlcnQoYm9wcy0+bGluZWFyX3RvX3gpOworCQlib3Bz LT5saW5lYXJfdG9feChib3BzLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9U SUxJTkdfWToKKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feSk7CisJCWJvcHMtPmxpbmVh cl90b195KGJvcHMsIGJ1ZiwgbGluZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19Z ZjoKKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feWYpOworCQlib3BzLT5saW5lYXJfdG9f eWYoYm9wcywgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgor CQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90b195cyk7CisJCWJvcHMtPmxpbmVhcl90b195cyhi b3BzLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCX0KKworCWlmIChidWYtPmNvbXByZXNzaW9u KQorCQlfX2NvcHlfY2NzKGJvcHMsIGJ1ZiwgbGluZWFyLCBDQ1NfTElORUFSX1RPX0JVRik7Cit9 CisKK3N0YXRpYyB2b2lkIF9faW50ZWxfYnVmX2luaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCisJ CQkgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqYnVmLAor CQkJICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCQkgICAgIHVpbnQzMl90 IHJlcV90aWxpbmcsIHVpbnQzMl90IGNvbXByZXNzaW9uKQoreworCXVpbnQzMl90IHRpbGluZyA9 IHJlcV90aWxpbmc7CisJdWludDMyX3Qgc2l6ZTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisJaWd0 X2Fzc2VydChidWYpOworCWlndF9hc3NlcnQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOworCWln dF9hc3NlcnQoYnBwID09IDggfHwgYnBwID09IDE2IHx8IGJwcCA9PSAzMik7CisKKwltZW1zZXQo YnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJaWYgKGNvbXByZXNzaW9uKSB7CisJCWludCBhdXhf d2lkdGgsIGF1eF9oZWlnaHQ7CisKKwkJaWd0X3JlcXVpcmUoYm9wcy0+aW50ZWxfZ2VuID49IDkp OworCQlpZ3RfYXNzZXJ0KHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWSB8fAorCQkJICAgcmVx X3RpbGluZyA9PSBJOTE1X1RJTElOR19ZZik7CisKKwkJLyoKKwkJICogT24gR0VOMTIrIHdlIGFs aWduIHRoZSBtYWluIHN1cmZhY2UgdG8gNCAqIDQgbWFpbiBzdXJmYWNlCisJCSAqIHRpbGVzLCB3 aGljaCBpcyA2NGtCLiBUaGVzZSAxNiB0aWxlcyBhcmUgbWFwcGVkIGJ5IDQgQVVYCisJCSAqIEND UyB1bml0cywgdGhhdCBpcyA0ICogNjQgYnl0ZXMuIFRoZXNlIDQgQ0NTIHVuaXRzIGFyZSBpbgor CQkgKiB0dXJuIG1hcHBlZCBieSBvbmUgTDEgQVVYIHBhZ2UgdGFibGUgZW50cnkuCisJCSAqLwor CQlpZiAoYm9wcy0+aW50ZWxfZ2VuID49IDEyKQorCQkJYnVmLT5zdHJpZGUgPSBBTElHTih3aWR0 aCAqIChicHAgLyA4KSwgMTI4ICogNCk7CisJCWVsc2UKKwkJCWJ1Zi0+c3RyaWRlID0gQUxJR04o d2lkdGggKiAoYnBwIC8gOCksIDEyOCk7CisKKwkJaWYgKGJvcHMtPmludGVsX2dlbiA+PSAxMikK KwkJCWhlaWdodCA9IEFMSUdOKGhlaWdodCwgNCAqIDMyKTsKKworCQlidWYtPnNpemUgPSBidWYt PnN0cmlkZSAqIGhlaWdodDsKKwkJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJCWJ1Zi0+YnBwID0g YnBwOworCQlidWYtPmNvbXByZXNzaW9uID0gY29tcHJlc3Npb247CisKKwkJYXV4X3dpZHRoID0g aW50ZWxfYnVmX2F1eF93aWR0aChib3BzLT5pbnRlbF9nZW4sIGJ1Zik7CisJCWF1eF9oZWlnaHQg PSBpbnRlbF9idWZfYXV4X2hlaWdodChib3BzLT5pbnRlbF9nZW4sIGJ1Zik7CisKKwkJYnVmLT5h dXgub2Zmc2V0ID0gYnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKKwkJYnVmLT5hdXgu c3RyaWRlID0gYXV4X3dpZHRoOworCisJCXNpemUgPSBidWYtPmF1eC5vZmZzZXQgKyBhdXhfd2lk dGggKiBhdXhfaGVpZ2h0OworCisJfSBlbHNlIHsKKwkJYnVmLT5zdHJpZGUgPSBBTElHTih3aWR0 aCAqIChicHAgLyA4KSwgMTI4KTsKKwkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7 CisJCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCQlidWYtPmJwcCA9IGJwcDsKKworCQlzaXplID0g YnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKKwl9CisKKwlpZiAoaGFuZGxlKQorCQli dWYtPmhhbmRsZSA9IGhhbmRsZTsKKwllbHNlCisJCWJ1Zi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShi b3BzLT5mZCwgc2l6ZSk7CisKKwlzZXRfaHdfdGlsZWQoYm9wcywgYnVmKTsKK30KKworLyoqCisg KiBpbnRlbF9idWZfaW5pdAorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICogQGJ1Zjog cG9pbnRlciB0byBpbnRlbF9idWYgc3RydWN0dXJlIHRvIGJlIGZpbGxlZAorICogQHdpZHRoOiBz dXJmYWNlIHdpZHRoCisgKiBAaGVpZ2h0OiBzdXJmYWNlIGhlaWdodAorICogQGJwcDogYml0cy1w ZXItcGl4ZWwgKDggLyAxNiAvIDMyKQorICogQHRpbGluZzogc3VyZmFjZSB0aWxpbmcKKyAqIEBj b21wcmVzc2lvbjogc3VyZmFjZSBjb21wcmVzc2lvbiB0eXBlCisgKgorICogRnVuY3Rpb24gY3Jl YXRlcyBuZXcgQk8gd2l0aGluIGludGVsX2J1ZiBzdHJ1Y3R1cmUgYW5kIGZpbGxzIGFsbAorICog c3RydWN0dXJlIGZpZWxkcy4KKyAqCisgKiBOb3RlLiBGb3IgWCAvIFkgaWYgR1BVIHN1cHBvcnRz IGZlbmNlcyBIVyB0aWxpbmcgaXMgY29uZmlndXJlZC4KKyAqLwordm9pZCBpbnRlbF9idWZfaW5p dChzdHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJICAgIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJ ICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKKwkJICAgIHVpbnQzMl90IHRpbGlu ZywgdWludDMyX3QgY29tcHJlc3Npb24pCit7CisJX19pbnRlbF9idWZfaW5pdChib3BzLCAwLCBi dWYsIHdpZHRoLCBoZWlnaHQsIGJwcCwgdGlsaW5nLAorCQkJIGNvbXByZXNzaW9uKTsKK30KKwor LyoqCisgKiBpbnRlbF9idWZfY2xvc2UKKyAqIEBib3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAq IEBidWY6IHBvaW50ZXIgdG8gaW50ZWxfYnVmIHN0cnVjdHVyZQorICoKKyAqIEZ1bmN0aW9uIGNs b3NlcyBnZW0gQk8gaW5zaWRlIGludGVsX2J1Zi4KKyAqLwordm9pZCBpbnRlbF9idWZfY2xvc2Uo c3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZikKK3sKKwlpZ3RfYXNz ZXJ0KGJvcHMpOworCWlndF9hc3NlcnQoYnVmKTsKKworCWdlbV9jbG9zZShib3BzLT5mZCwgYnVm LT5oYW5kbGUpOworfQorCisvKioKKyAqIGludGVsX2J1Zl9pbml0X3VzaW5nX2hhbmRsZQorICog QGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICogQGhhbmRsZTogQk8gaGFuZGxlIGNyZWF0ZWQg YnkgdGhlIGNhbGxlcgorICogQGJ1ZjogcG9pbnRlciB0byBpbnRlbF9idWYgc3RydWN0dXJlIHRv IGJlIGZpbGxlZAorICogQHdpZHRoOiBzdXJmYWNlIHdpZHRoCisgKiBAaGVpZ2h0OiBzdXJmYWNl IGhlaWdodAorICogQGJwcDogYml0cy1wZXItcGl4ZWwgKDggLyAxNiAvIDMyKQorICogQHRpbGlu Zzogc3VyZmFjZSB0aWxpbmcKKyAqIEBjb21wcmVzc2lvbjogc3VyZmFjZSBjb21wcmVzc2lvbiB0 eXBlCisgKgorICogRnVuY3Rpb24gY29uZmlndXJlcyBCTyBoYW5kbGUgd2l0aGluIGludGVsX2J1 ZiBzdHJ1Y3R1cmUgcGFzc2VkIGJ5IHRoZSBjYWxsZXIKKyAqICh3aXRoIGFsbCBpdHMgbWV0YWRh dGEgLSB3aWR0aCwgaGVpZ2h0LCAuLi4pLiBVc2VmdWwgaWYgQk8gd2FzIGNyZWF0ZWQKKyAqIG91 dHNpZGUuCisgKgorICogTm90ZTogaW50ZWxfYnVmX2Nsb3NlKCkgY2FuIGJlIHVzZWQgdG8gY2xv c2UgdGhlIEJPIGhhbmRsZSwgYnV0IGNhbGxlcgorICogbXVzdCBiZSBhd2FyZSB0byBub3QgY2xv c2UgdGhlIEJPIHR3aWNlLgorICovCit2b2lkIGludGVsX2J1Zl9pbml0X3VzaW5nX2hhbmRsZShz dHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJCQkgdWludDMyX3QgaGFuZGxlLAorCQkJCSBzdHJ1Y3Qg aW50ZWxfYnVmICpidWYsCisJCQkJIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKKwkJ CQkgdWludDMyX3QgcmVxX3RpbGluZywgdWludDMyX3QgY29tcHJlc3Npb24pCit7CisJX19pbnRl bF9idWZfaW5pdChib3BzLCBoYW5kbGUsIGJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCByZXFfdGls aW5nLAorCQkJIGNvbXByZXNzaW9uKTsKK30KKworI2RlZmluZSBERUZBVUxUX0JVRk9QUyhfX2dl bl9zdGFydCwgX19nZW5fZW5kKSBcCisJLmdlbl9zdGFydCAgICAgICAgICA9IF9fZ2VuX3N0YXJ0 LCBcCisJLmdlbl9lbmQgICAgICAgICAgICA9IF9fZ2VuX2VuZCwgXAorCS5zdXBwb3J0ZWRfaHdf dGlsZXMgPSBUSUxFX1ggfCBUSUxFX1ksIFwKKwkubGluZWFyX3RvX3ggICAgICAgID0gY29weV9s aW5lYXJfdG9fZ3R0LCBcCisJLmxpbmVhcl90b195ICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2d0 dCwgXAorCS5saW5lYXJfdG9feWYgICAgICAgPSBjb3B5X2xpbmVhcl90b195ZiwgXAorCS5saW5l YXJfdG9feXMgICAgICAgPSBjb3B5X2xpbmVhcl90b195cywgXAorCS54X3RvX2xpbmVhciAgICAg ICAgPSBjb3B5X2d0dF90b19saW5lYXIsIFwKKwkueV90b19saW5lYXIgICAgICAgID0gY29weV9n dHRfdG9fbGluZWFyLCBcCisJLnlmX3RvX2xpbmVhciAgICAgICA9IGNvcHlfeWZfdG9fbGluZWFy LCBcCisJLnlzX3RvX2xpbmVhciAgICAgICA9IGNvcHlfeXNfdG9fbGluZWFyCisKK3N0cnVjdCBi dWZfb3BzIGJ1Zl9vcHNfYXJyW10gPSB7CisJLyogR2VuZXJhdGlvbnMgMiAtIDggKi8KK3sKKwlE RUZBVUxUX0JVRk9QUygyLCA4KSwKKwkuc3VwcG9ydGVkX3RpbGVzICAgID0gVElMRV9OT05FIHwg VElMRV9YIHwgVElMRV9ZLAorCS5saW5lYXJfdG8gICAgICAgICAgPSBjb3B5X2xpbmVhcl90b19j cHUsCisJLnRvX2xpbmVhciAgICAgICAgICA9IGNvcHlfY3B1X3RvX2xpbmVhciwKK30sCisvKiBH ZW5lcmF0aW9ucyA5IC0gMTEgKi8KK3sKKwlERUZBVUxUX0JVRk9QUyg5LCAxMSksCisJLnN1cHBv cnRlZF90aWxlcyAgICA9IFRJTEVfTk9ORSB8IFRJTEVfWCB8IFRJTEVfWSB8IFRJTEVfWWYsCisJ LmxpbmVhcl90byAgICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKKwkudG9fbGluZWFyICAg ICAgICAgID0gY29weV9jcHVfdG9fbGluZWFyLAorfSwKKy8qIEdlbmVyYXRpb24gMTIgKi8KK3sK KwlERUZBVUxUX0JVRk9QUygxMiwgMTIpLAorCS5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9O RSB8IFRJTEVfWCB8IFRJTEVfWSB8IFRJTEVfWWYgfCBUSUxFX1lzLAorCS5saW5lYXJfdG8gICAg ICAgICA9IGNvcHlfbGluZWFyX3RvX3djLAorCS50b19saW5lYXIgICAgICAgICA9IGNvcHlfd2Nf dG9fbGluZWFyLAorfSwKK307CisKK3N0YXRpYyBib29sIHByb2JlX2h3X3RpbGluZyhzdHJ1Y3Qg YnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQoreworCXVpbnQ2NF90IHNpemUgPSAyNTYg KiAyNTY7CisJdWludDMyX3QgaGFuZGxlLCBidWZfdGlsaW5nLCBidWZfc3dpenpsZTsKKwl1aW50 MzJfdCBzdHJpZGU7CisJaW50IHJldDsKKwlib29sIGlzX3NldCA9IGZhbHNlOworCisJaWYgKHRp bGluZyA9PSBJOTE1X1RJTElOR19YKQorCQlzdHJpZGUgPSA1MTI7CisJZWxzZSBpZiAodGlsaW5n ID09IEk5MTVfVElMSU5HX1kpCisJCXN0cmlkZSA9IDEyODsKKwllbHNlCisJCXJldHVybiBmYWxz ZTsKKworCWhhbmRsZSA9IGdlbV9jcmVhdGUoYm9wcy0+ZmQsIHNpemUpOworCisJLyogU2luZ2xl IHNob3QsIGlmIG5vIGZlbmNlcyBhcmUgYXZhaWxhYmxlIHdlIGZhaWwgaW1tZWRpYXRlbHkgKi8K KwlyZXQgPSBfX3NldF90aWxpbmcoYm9wcy0+ZmQsIGhhbmRsZSwgdGlsaW5nLCBzdHJpZGUpOwor CWlmIChyZXQpCisJCWdvdG8gZW5kOworCisJaXNfc2V0ID0gX19nZXRfdGlsaW5nKGJvcHMtPmZk LCBoYW5kbGUsICZidWZfdGlsaW5nLCAmYnVmX3N3aXp6bGUpOworCWlmIChpc19zZXQpIHsKKwkJ aWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19YKQorCQkJYm9wcy0+c3dpenpsZV94ID0gYnVmX3N3 aXp6bGU7CisJCWVsc2UgaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQorCQkJYm9wcy0+c3dp enpsZV95ID0gYnVmX3N3aXp6bGU7CisJfQorZW5kOgorCWdlbV9jbG9zZShib3BzLT5mZCwgaGFu ZGxlKTsKKworCXJldHVybiBpc19zZXQ7Cit9CisKK3N0YXRpYyB2b2lkICphbGxvY19hbGlnbmVk KHVpbnQ2NF90IHNpemUpCit7CisJdm9pZCAqcDsKKworCWlndF9hc3NlcnRfZXEocG9zaXhfbWVt YWxpZ24oJnAsIDE2LCBzaXplKSwgMCk7CisKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIFNpbXBs ZSBpZGVtcG90ZW5jeSB0ZXN0IGJldHdlZW4gSFcgLT4gU1cgYW5kIFNXIC0+IEhXIEJPLgorICov CitzdGF0aWMgdm9pZCBpZGVtcG90ZW5jeV9zZWxmdGVzdChzdHJ1Y3QgYnVmX29wcyAqYm9wcywg dWludDMyX3QgdGlsaW5nKQoreworCXN0cnVjdCBpbnRlbF9idWYgYnVmOworCXVpbnQ4X3QgKmxp bmVhcl9pbiwgKmxpbmVhcl9vdXQsICptYXA7CisJaW50IGk7CisJY29uc3QgaW50IHdpZHRoID0g NTEyOworCWNvbnN0IGludCBoZWlnaHQgPSA1MTI7CisJY29uc3QgaW50IGJwcCA9IDMyOworCWNv bnN0IGludCBzaXplID0gd2lkdGggKiBoZWlnaHQgKiBicHAgLyA4OworCWJvb2wgc29mdHdhcmVf dGlsaW5nID0gZmFsc2U7CisKKwlpZiAoIWlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgdGls aW5nKSkKKwkJcmV0dXJuOworCisJbGluZWFyX2luID0gYWxsb2NfYWxpZ25lZChzaXplKTsKKwls aW5lYXJfb3V0ID0gYWxsb2NfYWxpZ25lZChzaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXpl OyBpKyspCisJCWxpbmVhcl9pbltpXSA9IGkgJSAyNTM7IC8qIHByaW1lIGNob3NlbiBpbnRlbnRp b25hbGx5ICovCisKKwlkbyB7CisJCWlndF9kZWJ1ZygiQ2hlY2tpbmcgaWRlbXBvdGVuY3ksIFNX OiAlcywgSFc6ICVzLCB0aWxpbmc6ICVzXG4iLAorCQkJICBib29sX3N0cihzb2Z0d2FyZV90aWxp bmcpLAorCQkJICBib29sX3N0cighc29mdHdhcmVfdGlsaW5nKSwKKwkJCSAgdGlsaW5nX3N0cih0 aWxpbmcpKTsKKwkJaW50ZWxfYnVmX2luaXQoYm9wcywgJmJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBw LCB0aWxpbmcsIGZhbHNlKTsKKwkJYnVmX29wc19zZXRfc29mdHdhcmVfdGlsaW5nKGJvcHMsIHRp bGluZywgc29mdHdhcmVfdGlsaW5nKTsKKworCQlsaW5lYXJfdG9faW50ZWxfYnVmKGJvcHMsICZi dWYsICh1aW50MzJfdCAqKSBsaW5lYXJfaW4pOworCQltYXAgPSBfX2dlbV9tbWFwX29mZnNldF9f Y3B1KGJvcHMtPmZkLCBidWYuaGFuZGxlLCAwLAorCQkJCQkgICBidWYuc2l6ZSwgUFJPVF9SRUFE KTsKKwkJaWYgKCFtYXApCisJCQltYXAgPSBnZW1fbW1hcF9fY3B1KGJvcHMtPmZkLCBidWYuaGFu ZGxlLCAwLAorCQkJCQkgICAgYnVmLnNpemUsIFBST1RfUkVBRCk7CisJCWlndF9hc3NlcnQobWFw KTsKKwkJaWd0X2Fzc2VydChtZW1jbXAobGluZWFyX2luLCBtYXAsIHNpemUpKTsKKworCQlidWZf b3BzX3NldF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGlsaW5nLCAhc29mdHdhcmVfdGlsaW5nKTsK KwkJaW50ZWxfYnVmX3RvX2xpbmVhcihib3BzLCAmYnVmLCAodWludDMyX3QgKikgbGluZWFyX291 dCk7CisJCWlndF9hc3NlcnQoIW1lbWNtcChsaW5lYXJfaW4sIGxpbmVhcl9vdXQsIHNpemUpKTsK KworCQltdW5tYXAobWFwLCBzaXplKTsKKwkJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZidWYpOwor CisJCXNvZnR3YXJlX3RpbGluZyA9ICFzb2Z0d2FyZV90aWxpbmc7CisJfSB3aGlsZSAoc29mdHdh cmVfdGlsaW5nKTsKKworCWlndF9kZWJ1ZygiSWRlbXBvdGVuY3kgZm9yICVzIHRpbGluZyBPS1xu IiwgdGlsaW5nX3N0cih0aWxpbmcpKTsKKwlidWZfb3BzX3NldF9zb2Z0d2FyZV90aWxpbmcoYm9w cywgdGlsaW5nLCBmYWxzZSk7Cit9CisKKy8qKgorICogYnVmX29wc19jcmVhdGUKKyAqIEBmZDog ZGV2aWNlIGZpbGVkZXNjcmlwdG9yCisgKgorICogQ3JlYXRlIGJ1Zl9vcHMgc3RydWN0dXJlIGRl cGVuZGluZyBvbiBmZC1kZXZpY2UgY2FwYWJpbGl0aWVzLgorICoKKyAqIFJldHVybnM6IG9wYXF1 ZSBwb2ludGVyIHRvIGJ1Zl9vcHMuCisgKgorICovCitzdHJ1Y3QgYnVmX29wcyAqYnVmX29wc19j cmVhdGUoaW50IGZkKQoreworCXN0cnVjdCBidWZfb3BzICpib3BzID0gY2FsbG9jKDEsIHNpemVv ZigqYm9wcykpOworCXVpbnQzMl90IGRldmlkOworCWludCBnZW5lcmF0aW9uOworCisJaWd0X2Fz c2VydChib3BzKTsKKworCWRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7CisJZ2VuZXJh dGlvbiA9IGludGVsX2dlbihkZXZpZCk7CisKKwkvKiBQcmVkZWZpbmVkIHNldHRpbmdzICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1Zl9vcHNfYXJyKTsgaSsrKSB7CisJCWlm IChnZW5lcmF0aW9uID49IGJ1Zl9vcHNfYXJyW2ldLmdlbl9zdGFydCAmJgorCQkJCWdlbmVyYXRp b24gPD0gYnVmX29wc19hcnJbaV0uZ2VuX2VuZCkgeworCQkJbWVtY3B5KGJvcHMsICZidWZfb3Bz X2FycltpXSwgc2l6ZW9mKCpib3BzKSk7CisJCQlib3BzLT5mZCA9IGZkOworCQkJYm9wcy0+aW50 ZWxfZ2VuID0gZ2VuZXJhdGlvbjsKKwkJCWlndF9kZWJ1ZygiZ2VuZXJhdGlvbjogJWQsIHN1cHBv cnRlZCB0aWxlczogMHglMDJ4XG4iLAorCQkJCSAgZ2VuZXJhdGlvbiwgYm9wcy0+c3VwcG9ydGVk X3RpbGVzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWd0X2Fzc2VydChib3BzLT5pbnRlbF9n ZW4pOworCisJLyoKKwkgKiBXYXJuaW5nIQorCSAqCisJICogR2VuMiBzb2Z0d2FyZSB0aWxpbmcv ZGV0aWxpbmcgaXMgbm90IHN1cHBvcnRlZCEgKHlldCkuCisJICoKKwkgKiBJZiB5b3UgYXJlIGJy YXZlIGhlcm8gd2l0aCBhbiBhY2Nlc3MgdG8gR2VuMiB5b3UgY2FuIHNhdmUgdGhlIHdvcmxkLgor CSAqIFVudGlsIHRoZW4gd2UncmUgZG9vbWVkIHRvIHVzZSBvbmx5IGhhcmR3YXJlIChkZSl0aWxp bmcuCisJICoKKwkgKiBPaywgeW91IGhhdmUgYmVlbiB3YXJuZWQuCisJICovCisJaWYgKGJvcHMt PmludGVsX2dlbiA9PSAyKSB7CisJCWlndF93YXJuKCJHZW4yIGRldGVjdGVkLiBIVyAoZGUpdGls aW5nIHN1cHBvcnQgb25seS4iKTsKKwkJcmV0dXJuIGJvcHM7CisJfQorCisJLyogTGV0J3MgcHJv YmUgWCBhbmQgWSBodyB0aWxpbmcgc3VwcG9ydCAqLworCWlmIChpc19od190aWxpbmdfc3VwcG9y dGVkKGJvcHMsIEk5MTVfVElMSU5HX1gpKSB7CisJCWJvb2wgc3VwcG9ydGVkID0gcHJvYmVfaHdf dGlsaW5nKGJvcHMsIEk5MTVfVElMSU5HX1gpOworCisJCWlndF9kZWJ1ZygiWCBmZW5jZSBzdXBw b3J0OiAlc1xuIiwgYm9vbF9zdHIoc3VwcG9ydGVkKSk7CisJCWlmICghc3VwcG9ydGVkKSB7CisJ CQlib3BzLT5zdXBwb3J0ZWRfaHdfdGlsZXMgJj0gflRJTEVfWDsKKwkJCWJvcHMtPmxpbmVhcl90 b194ID0gY29weV9saW5lYXJfdG9feDsKKwkJCWJvcHMtPnhfdG9fbGluZWFyID0gY29weV94X3Rv X2xpbmVhcjsKKwkJfQorCX0KKworCWlmIChpc19od190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5 MTVfVElMSU5HX1kpKSB7CisJCWJvb2wgc3VwcG9ydGVkID0gcHJvYmVfaHdfdGlsaW5nKGJvcHMs IEk5MTVfVElMSU5HX1kpOworCisJCWlndF9kZWJ1ZygiWSBmZW5jZSBzdXBwb3J0OiAlc1xuIiwg Ym9vbF9zdHIoc3VwcG9ydGVkKSk7CisJCWlmICghc3VwcG9ydGVkKSB7CisJCQlib3BzLT5zdXBw b3J0ZWRfaHdfdGlsZXMgJj0gflRJTEVfWTsKKwkJCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9s aW5lYXJfdG9feTsKKwkJCWJvcHMtPnlfdG9fbGluZWFyID0gY29weV95X3RvX2xpbmVhcjsKKwkJ fQorCX0KKworCS8qIERpc2FibGUgb3RoZXIgdGlsaW5nIGZvcm1hdCBmdW5jdGlvbnMgaWYgbm90 IHN1cHBvcnRlZCAqLworCWlmICghaXNfdGlsaW5nX3N1cHBvcnRlZChib3BzLCBJOTE1X1RJTElO R19ZZikpIHsKKwkJaWd0X2RlYnVnKCJZZiBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7CisJCWJv cHMtPmxpbmVhcl90b195ZiA9IE5VTEw7CisJCWJvcHMtPnlmX3RvX2xpbmVhciA9IE5VTEw7CisJ fQorCisJaWYgKCFpc190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1lzKSkgewor CQlpZ3RfZGVidWcoIllzIGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJYm9wcy0+bGluZWFy X3RvX3lzID0gTlVMTDsKKwkJYm9wcy0+eXNfdG9fbGluZWFyID0gTlVMTDsKKwl9CisKKwlpZGVt cG90ZW5jeV9zZWxmdGVzdChib3BzLCBJOTE1X1RJTElOR19YKTsKKwlpZGVtcG90ZW5jeV9zZWxm dGVzdChib3BzLCBJOTE1X1RJTElOR19ZKTsKKworCXJldHVybiBib3BzOworfQorCisvKioKKyAq IGJ1Zl9vcHNfZGVzdHJveQorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICoKKyAqIEZ1 bmN0aW9uIGZyZWVzIGJ1Zl9vcHMgc3RydWN0dXJlLgorICovCit2b2lkIGJ1Zl9vcHNfZGVzdHJv eShzdHJ1Y3QgYnVmX29wcyAqYm9wcykKK3sKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCWZyZWUoYm9w cyk7Cit9CisKKy8qKgorICogYnVmX29wc19zZXRfc29mdHdhcmVfdGlsaW5nCisgKiBAYm9wczog cG9pbnRlciB0byBidWZfb3BzCisgKiBAdGlsaW5nOiBzdXJmYWNlIHRpbGluZworICogQHVzZV9z b2Z0d2FyZV90aWxpbmc6IGlmIHRydWUgdXNlIHNvZnR3YXJlIGNvcHlpbmcgbWV0aG9kcywgb3Ro ZXJ3aXNlCisgKiB1c2UgaGFyZHdhcmUgKHZpYSBndHQpCisgKgorICogRnVuY3Rpb24gYWxsb3dz IHN3aXRjaCBYIC8gWSBzdXJmYWNlcyB0byBzb2Z0d2FyZSAvIGhhcmR3YXJlIGNvcHlpbmcgbWV0 aG9kcworICogd2hpY2ggaG9ub3JzIHRpbGluZyBhbmQgc3dpenpsaW5nLgorICoKKyAqIFJldHVy bnM6CisgKiBmYWxzZSAtIHN3aXRjaCB3YXNuJ3QgcG9zc2libGUuCisgKiB0cnVlIC0gc3dpdGNo IHRvIHNvZnR3YXJlIC8gaGFyZHdhcmUgbWV0aG9kIHN1Y2NlZWQuCisgKi8KK2Jvb2wgYnVmX29w c19zZXRfc29mdHdhcmVfdGlsaW5nKHN0cnVjdCBidWZfb3BzICpib3BzLAorCQkJCSB1aW50MzJf dCB0aWxpbmcsCisJCQkJIGJvb2wgdXNlX3NvZnR3YXJlX3RpbGluZykKK3sKKwlib29sIHdhc19j aGFuZ2VkID0gdHJ1ZTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwkvKiBVbnRpbCBhcHByb3By aWF0ZSBjb2RlIGlzIGFkZGVkIHdlIGRvbid0IHN1cHBvcnQgU1cgdGlsaW5nIG9uIEdlbjIgKi8K KwlpZiAoYm9wcy0+aW50ZWxfZ2VuID09IDIpIHsKKwkJaWd0X3dhcm4oIkNoYW5nZSB0byBzb2Z0 d2FyZSB0aWxpbmcgb24gR2VuMiBpcyBub3Qgc3VwcG9ydGVkISIpOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJc3dpdGNoICh0aWxpbmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWlmICh1 c2Vfc29mdHdhcmVfdGlsaW5nKSB7CisJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBYIHRvIFNXXG4i KTsKKwkJCWJvcHMtPmxpbmVhcl90b194ID0gY29weV9saW5lYXJfdG9feDsKKwkJCWJvcHMtPnhf dG9fbGluZWFyID0gY29weV94X3RvX2xpbmVhcjsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19od190 aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1gpKSB7CisJCQkJaWd0X2RlYnVnKCIt PiBjaGFuZ2UgWCB0byBIV1xuIik7CisJCQkJYm9wcy0+bGluZWFyX3RvX3ggPSBjb3B5X2xpbmVh cl90b19ndHQ7CisJCQkJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X2d0dF90b19saW5lYXI7CisJ CQl9IGVsc2UgeworCQkJCWlndF9kZWJ1ZygiLT4gWCBjYW5ub3QgYmUgY2hhbmdlZCB0byBIV1xu Iik7CisJCQkJd2FzX2NoYW5nZWQgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNh c2UgSTkxNV9USUxJTkdfWToKKwkJaWYgKHVzZV9zb2Z0d2FyZV90aWxpbmcpIHsKKwkJCWlndF9k ZWJ1ZygiLT4gY2hhbmdlIFkgdG8gU1dcbiIpOworCQkJYm9wcy0+bGluZWFyX3RvX3kgPSBjb3B5 X2xpbmVhcl90b195OworCQkJYm9wcy0+eV90b19saW5lYXIgPSBjb3B5X3lfdG9fbGluZWFyOwor CQl9IGVsc2UgeworCQkJaWYgKGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJ TkdfWSkpIHsKKwkJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBZIHRvIEhXXG4iKTsKKwkJCQlib3Bz LT5saW5lYXJfdG9feSA9IGNvcHlfbGluZWFyX3RvX2d0dDsKKwkJCQlib3BzLT55X3RvX2xpbmVh ciA9IGNvcHlfZ3R0X3RvX2xpbmVhcjsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2RlYnVnKCItPiBZ IGNhbm5vdCBiZSBjaGFuZ2VkIHRvIEhXXG4iKTsKKwkJCQl3YXNfY2hhbmdlZCA9IGZhbHNlOwor CQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWd0X3dhcm4oIkludmFsaWQgdGls aW5nOiAlZFxuIiwgdGlsaW5nKTsKKwkJd2FzX2NoYW5nZWQgPSBmYWxzZTsKKwl9CisKKwlyZXR1 cm4gd2FzX2NoYW5nZWQ7Cit9CisKKy8qKgorICogYnVmX29wc19oYXNfaHdfZmVuY2UKKyAqIEBi b3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAqIEB0aWxpbmc6IHN1cmZhY2UgdGlsaW5nCisgKgor ICogRnVuY3Rpb24gY2hlY2tzIGlmIHN1cmZhY2Ugd2l0aCB0aWxpbmcgaGFzIEhXIGZlbmNlcyB3 aGljaCBjYW4gYmUgdXNlZAorICogdG8gY29weSBpdCB2aWEgZ3R0LgorICoKKyAqIFJldHVybnM6 CisgKiBmYWxzZSAtIGZlbmNlIGZvciB0aWxpbmcgaXMgbm90IHN1cHBvcnRlZC4KKyAqIHRydWUg LSBmZW5jZSBmb3IgdGlsaW5nIGlzIHN1cHBvcnRlZC4KKyAqLworYm9vbCBidWZfb3BzX2hhc19o d19mZW5jZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQoreworCXVpbnQz Ml90IHRpbGVfbWFzayA9IFRJTEVfREVGKHRpbGluZyk7CisKKwlpZ3RfYXNzZXJ0KGJvcHMpOwor CisJaWYgKHRpbGVfbWFzayAmIGJvcHMtPnN1cHBvcnRlZF9od190aWxlcykKKwkJcmV0dXJuIHRy dWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogYnVmX29wc19oYXNfdGlsaW5nX3N1 cHBvcnQKKyAqIEBib3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAqIEB0aWxpbmc6IHN1cmZhY2Ug dGlsaW5nCisgKgorICogRnVuY3Rpb24gY2hlY2tzIGNhcGFiaWxpdGllcyB0byBoYW5kbGUgc3Vy ZmFjZXMgd2l0aCB0aWxpbmcgaW4gR1BVLgorICoKKyAqIFJldHVybnM6CisgKiBmYWxzZSAtIEdQ VSBkb2VzIG5vdCBzdXBwb3J0IHRpbGluZy4KKyAqIHRydWUgLSBHUFUgc3VwcG9ydHMgdGlsaW5n LgorICovCitib29sIGJ1Zl9vcHNfaGFzX3RpbGluZ19zdXBwb3J0KHN0cnVjdCBidWZfb3BzICpi b3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJdWludDMyX3QgdGlsZV9tYXNrID0gVElMRV9ERUYo dGlsaW5nKTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlpZiAodGlsZV9tYXNrICYgYm9wcy0+ c3VwcG9ydGVkX3RpbGVzKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KZGlm ZiAtLWdpdCBhL2xpYi9pbnRlbF9idWZvcHMuaCBiL2xpYi9pbnRlbF9idWZvcHMuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZWEzMjA2Y2YKLS0tIC9kZXYvbnVsbAorKysg Yi9saWIvaW50ZWxfYnVmb3BzLmgKQEAgLTAsMCArMSw4NCBAQAorI2lmbmRlZiBfX0lOVEVMX0JV Rk9QU19IX18KKyNkZWZpbmUgX19JTlRFTF9CVUZPUFNfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQu aD4KKworc3RydWN0IGJ1Zl9vcHM7CisKK3N0cnVjdCBpbnRlbF9idWYgeworCXVpbnQzMl90IGhh bmRsZTsKKwl1aW50MzJfdCBzdHJpZGU7CisJdWludDMyX3QgdGlsaW5nOworCXVpbnQzMl90IGJw cDsKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IGNvbXByZXNzaW9uOworCXN0cnVjdCB7CisJ CXVpbnQzMl90IG9mZnNldDsKKwkJdWludDMyX3Qgc3RyaWRlOworCX0gYXV4OworfTsKKworaW5s aW5lIHVuc2lnbmVkIGludCBpbnRlbF9idWZfd2lkdGgoY29uc3Qgc3RydWN0IGludGVsX2J1ZiAq YnVmKQoreworCXJldHVybiBidWYtPnN0cmlkZS8oYnVmLT5icHAgLyA4KTsKK30KKworaW5saW5l IHVuc2lnbmVkIGludCBpbnRlbF9idWZfaGVpZ2h0KGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZikKK3sKKwlyZXR1cm4gYnVmLT5zaXplL2J1Zi0+c3RyaWRlOworfQorCitpbmxpbmUgdW5zaWdu ZWQgaW50IGludGVsX2J1Zl9hdXhfd2lkdGgoaW50IGdlbiwgY29uc3Qgc3RydWN0IGludGVsX2J1 ZiAqYnVmKQoreworCS8qCisJICogR0VOMTIrOiBUaGUgQVVYIENDUyB1bml0IHNpemUgaXMgNjQg Ynl0ZXMgbWFwcGluZyA0IG1haW4gc3VyZmFjZQorCSAqIHRpbGVzLiBUaHVzIHRoZSB3aWR0aCBv ZiB0aGUgQ0NTIHVuaXQgaXMgNCozMj0xMjggcGl4ZWxzIG9uIHRoZQorCSAqIG1haW4gc3VyZmFj ZS4KKwkgKi8KKwlpZiAoZ2VuID49IDEyKQorCQlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVsX2J1 Zl93aWR0aChidWYpLCAxMjgpICogNjQ7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVsX2J1 Zl93aWR0aChidWYpLCAxMDI0KSAqIDEyODsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBpbnRl bF9idWZfYXV4X2hlaWdodChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7 CisJLyoKKwkgKiBHRU4xMis6IFRoZSBBVVggQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBw aW5nIDQgbWFpbiBzdXJmYWNlCisJICogdGlsZXMuIFRodXMgdGhlIGhlaWdodCBvZiB0aGUgQ0NT IHVuaXQgaXMgMzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgorCSAqIHN1cmZhY2UuCisJICovCisJ aWYgKGdlbiA+PSAxMikKKwkJcmV0dXJuIERJVl9ST1VORF9VUChpbnRlbF9idWZfaGVpZ2h0KGJ1 ZiksIDMyKTsKKworCXJldHVybiBESVZfUk9VTkRfVVAoaW50ZWxfYnVmX2hlaWdodChidWYpLCA1 MTIpICogMzI7Cit9CisKK3N0cnVjdCBidWZfb3BzICpidWZfb3BzX2NyZWF0ZShpbnQgZmQpOwor dm9pZCBidWZfb3BzX2Rlc3Ryb3koc3RydWN0IGJ1Zl9vcHMgKmJvcHMpOworCitib29sIGJ1Zl9v cHNfc2V0X3NvZnR3YXJlX3RpbGluZyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJCQkgdWludDMy X3QgdGlsaW5nLAorCQkJCSBib29sIHVzZV9zb2Z0d2FyZV90aWxpbmcpOworCit2b2lkIGludGVs X2J1Zl90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZiwKKwkJCSB1aW50MzJfdCAqbGluZWFyKTsKKwordm9pZCBsaW5lYXJfdG9faW50ZWxfYnVmKHN0 cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgdWludDMyX3Qg KmxpbmVhcik7CisKK2Jvb2wgYnVmX29wc19oYXNfaHdfZmVuY2Uoc3RydWN0IGJ1Zl9vcHMgKmJv cHMsIHVpbnQzMl90IHRpbGluZyk7Citib29sIGJ1Zl9vcHNfaGFzX3RpbGluZ19zdXBwb3J0KHN0 cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpOworCit2b2lkIGludGVsX2J1Zl9p bml0KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCSAgICBp bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCSAgICB1aW50MzJfdCB0aWxpbmcsIHVp bnQzMl90IGNvbXByZXNzaW9uKTsKK3ZvaWQgaW50ZWxfYnVmX2Nsb3NlKHN0cnVjdCBidWZfb3Bz ICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpOworCit2b2lkIGludGVsX2J1Zl9pbml0X3Vz aW5nX2hhbmRsZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJCQkgdWludDMyX3QgaGFuZGxlLAor CQkJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkJIGludCB3aWR0aCwgaW50IGhlaWdodCwg aW50IGJwcCwKKwkJCQkgdWludDMyX3QgcmVxX3RpbGluZywgdWludDMyX3QgY29tcHJlc3Npb24p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZAppbmRleCA1N2ViN2Q5My4uY2YzZTM1ZGEgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAor KysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTI3LDYgKzI3LDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJ J2lndF94ODYuYycsCiAJJ2luc3Rkb25lLmMnLAogCSdpbnRlbF9iYXRjaGJ1ZmZlci5jJywKKwkn aW50ZWxfYnVmb3BzLmMnLAogCSdpbnRlbF9jaGlwc2V0LmMnLAogCSdpbnRlbF9kZXZpY2VfaW5m by5jJywKIAknaW50ZWxfb3MuYycsCi0tIAoyLjIzLjAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaWd0LWRldgo=