From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Geoffrey D. Bennett" Subject: [PATCH RFC] ALSA: usb-audio: Scarlett mixer interface for 18i20 Gen 2 Date: Wed, 3 Apr 2019 21:45:53 +1030 Message-ID: <20190403111553.GA24084@b4.vu> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from b4.vu (b4.vu [203.16.231.147]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 4D208F8071D for ; Wed, 3 Apr 2019 13:16:00 +0200 (CEST) Received: from b4.vu (localhost.localdomain [127.0.0.1]) by b4.vu (8.13.8/8.13.8) with ESMTP id x33BFtiZ024163 for ; Wed, 3 Apr 2019 21:45:55 +1030 Received: (from g@localhost) by b4.vu (8.13.8/8.13.8/Submit) id x33BFrAc024162 for alsa-devel@alsa-project.org; Wed, 3 Apr 2019 21:45:53 +1030 Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" To: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org QWRkIG1peGVyIHF1aXJrIGZvciB0aGUgRm9jdXNyaXRlIFNjYXJsZXR0IDE4aTIwIEdlbiAyIGF1 ZGlvCmludGVyZmFjZS4gQWx0aG91Z2ggdGhlIGludGVyZmFjZSBpcyBVU0IgY29tcGxpYW50LCBh ZGRpdGlvbmFsCmhhcmR3YXJlIG1peGluZywgcm91dGluZywgYW5kIG1ldGVyaW5nIGZ1bmN0aW9u YWxpdHkgaXMgYXZhaWxhYmxlCnVzaW5nIHByb3ByaWV0YXJ5IFVTQiByZXF1ZXN0cy4KClNpZ25l ZC1vZmYtYnk6IEdlb2ZmcmV5IEQuIEJlbm5ldHQgPGdAYjQudnU+Ci0tLQpIaSBhbGwsCgpUaGlz IHBhdGNoIGFkZHMgdGhlIGZvbGxvd2luZyBjb250cm9scyBmb3IgdGhlIFNjYXJsZXR0IDE4aTIw IEdlbiAyOgotIE1hc3RlciB2b2x1bWUga25vYiBpbmRpY2F0b3IKLSBWb2x1bWUgY29udHJvbHMg Zm9yIHRoZSAxMCBhbmFsb2d1ZSBIVyBvdXRwdXRzCi0gSFcvU1cgdm9sdW1lIHN3aXRjaGVzIGZv ciB0aGUgMTAgYW5hbG9ndWUgSFcgb3V0cHV0cwotIE91dHB1dCBtdXggKHdoZXJlIHRoZSBzb3Vu ZCBmb3IgdGhlIEhXIG91dHB1dHMgY29tZXMgZnJvbTsgZGVmYXVsdHMKICB0byBQQ00gb3V0cHV0 cyAxLTIwKQotIENhcHR1cmUgbXV4ICh3aGVyZSB0aGUgc291bmQgZm9yIFBDTSByZWNvcmRpbmcg Y29tZXMgZnJvbTsgZGVmYXVsdHMKICB0byBIVyBpbnB1dHMgMS0xOCkKLSBNYXRyaXggbXV4ICh3 aGVyZSB0aGUgc291bmQgZ29pbmcgaW50byB0aGUgbWl4ZXIgY29tZXMgZnJvbTsgMTgKICBpbnB1 dHMgZGVmYXVsdCBvZmYpCi0gTWl4ZXIgbWF0cml4ICgxOCBpbnB1dHMgKiAxMCBvdXRwdXRzID0g MTgwIGNvbnRyb2xzKQotIE11dGUgYW5kIGRpbSBpbmRpY2F0b3JzCi0gTGV2ZWwgbWV0ZXJzCgpU aGlzIGlzIG15IGZpcnN0IGF0dGVtcHQgYXQgd3JpdGluZyBhbnkga2VybmVsIGRldmljZSBkcml2 ZXIgY29kZSwgc28KYXBvbG9naWVzIGluIGFkdmFuY2UgaWYgSSBtaXNzZWQgc29tZXRoaW5nLiBU aGVyZSdzIGEgY291cGxlIG9mCnRoaW5ncyBJJ20gcGFydGljdWxhcmx5IHVuc3VyZSBhYm91dDoK Ci0gSSBhZGRlZCBhIHByaXZhdGUgZmllbGQgdG8gc3RydWN0IHNuZF91c2JfYXVkaW8gZm9yIHN0 b3JpbmcgdGhlCiAgcHJpdmF0ZSBtaXhlciBkYXRhLiBUaGlzIHNlZW1zIHdyb25nLCBidXQgSSBk aWRuJ3Qga25vdyB3aGVyZSBlbHNlIEkKICBjb3VsZC9zaG91bGQgcHV0IHRoYXQgZGF0YS4KCi0g SSd2ZSAjZGVmaW5lJ2QgdGhlIHZlbmRvci1zcGVjaWZpYyBpbnRlcmZhY2UsIGVuZHBvaW50LCBt YXhfZGF0YSwKICBhbmQgaW50ZXJ2YWwgdmFsdWVzLiBJcyBpdCBva2F5IHRvIGxlYXZlIHRoZXNl IGhhcmQtY29kZWQgKHRoZXkKICBtYXRjaCB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IGxzdXNiIC12 OyBJIHByZXN1bWUgdGhleSBuZXZlcgogIGNoYW5nZT8pLCBvciBzaG91bGQgdGhleSBiZSBsb29r ZWQgdXAgYXQgcnVudGltZSBpbnN0ZWFkPyAoYW5kIGlmIGF0CiAgcnVudGltZSwgaG93PykKCi0g SSdtIG5vdCBzdXJlIGlmIHRob3NlIHNuZF9wcmludGsoKXMgZm9yIHVuZXhwZWN0ZWQgcmVzcG9u c2VzIGZyb20KICB0aGUgaGFyZHdhcmUgc2hvdWxkIGJlIGxlZnQgaW4gdGhlcmU/IFJlbW92ZWQ/ IFJld29yZGVkPwoKQ29tbWVudHMgYW5kIGZlZWRiYWNrIHdvdWxkIGJlIHZlcnkgd2VsY29tZS4K ClJlZ2FyZHMsCkdlb2ZmcmV5LgoKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9NYWtlZmlsZSBiL3Nv dW5kL3VzYi9NYWtlZmlsZQppbmRleCBkMzMwZjc0YzkwZTYuLjhjZjcwODFlMTdjYiAxMDA2NDQK LS0tIGEvc291bmQvdXNiL01ha2VmaWxlCisrKyBiL3NvdW5kL3VzYi9NYWtlZmlsZQpAQCAtMTEs NiArMTEsNyBAQCBzbmQtdXNiLWF1ZGlvLW9ianMgOj0gCWNhcmQubyBcCiAJCQltaXhlci5vIFwK IAkJCW1peGVyX3F1aXJrcy5vIFwKIAkJCW1peGVyX3NjYXJsZXR0Lm8gXAorCQkJbWl4ZXJfc2Nh cmxldHRfZ2VuMi5vIFwKIAkJCW1peGVyX3VzMTZ4MDgubyBcCiAJCQlwY20ubyBcCiAJCQlwb3dl ci5vIFwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYXJkLmMgYi9zb3VuZC91c2IvY2FyZC5jCmlu ZGV4IDc0NmE3MmUyM2NmOS4uMDZiZDgzOWU5YWIyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2Fy ZC5jCisrKyBiL3NvdW5kL3VzYi9jYXJkLmMKQEAgLTM1NCw2ICszNTQsOCBAQCBzdGF0aWMgdm9p ZCBzbmRfdXNiX2F1ZGlvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShlcCwgbiwgJmNoaXAtPmVwX2xpc3QsIGxpc3QpCiAJCXNuZF91c2JfZW5k cG9pbnRfZnJlZShlcCk7CiAKKwlrZnJlZShjaGlwLT5wcml2YXRlKTsKKwogCW11dGV4X2Rlc3Ry b3koJmNoaXAtPm11dGV4KTsKIAlpZiAoIWF0b21pY19yZWFkKCZjaGlwLT5zaHV0ZG93bikpCiAJ CWRldl9zZXRfZHJ2ZGF0YSgmY2hpcC0+ZGV2LT5kZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvc291 bmQvdXNiL21peGVyX3F1aXJrcy5jIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCmluZGV4IDg1 YWUwZmYyMzgyYS4uMzMxZjA1OTZlNDJkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXJfcXVp cmtzLmMKKysrIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCkBAIC00NSw2ICs0NSw3IEBACiAj aW5jbHVkZSAibWl4ZXIuaCIKICNpbmNsdWRlICJtaXhlcl9xdWlya3MuaCIKICNpbmNsdWRlICJt aXhlcl9zY2FybGV0dC5oIgorI2luY2x1ZGUgIm1peGVyX3NjYXJsZXR0X2dlbjIuaCIKICNpbmNs dWRlICJtaXhlcl91czE2eDA4LmgiCiAjaW5jbHVkZSAiaGVscGVyLmgiCiAKQEAgLTIyNzMsNiAr MjI3NCwxMCBAQCBpbnQgc25kX3VzYl9taXhlcl9hcHBseV9jcmVhdGVfcXVpcmsoc3RydWN0IHVz Yl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQogCQllcnIgPSBzbmRfc2NhcmxldHRfY29udHJvbHNf Y3JlYXRlKG1peGVyKTsKIAkJYnJlYWs7CiAKKwljYXNlIFVTQl9JRCgweDEyMzUsIDB4ODIwMSk6 IC8qIEZvY3Vzcml0ZSBTY2FybGV0dCAxOGkyMCAybmQgR2VuICovCisJCWVyciA9IHNuZF9zY2Fy bGV0dF9nZW4yX2NvbnRyb2xzX2NyZWF0ZShtaXhlcik7CisJCWJyZWFrOworCiAJY2FzZSBVU0Jf SUQoMHgwNDFlLCAweDMyM2IpOiAvKiBDcmVhdGl2ZSBTb3VuZCBCbGFzdGVyIEUxICovCiAJCWVy ciA9IHNuZF9zb3VuZGJsYXN0ZXJfZTFfc3dpdGNoX2NyZWF0ZShtaXhlcik7CiAJCWJyZWFrOwpk aWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyX3NjYXJsZXR0X2dlbjIuYyBiL3NvdW5kL3VzYi9t aXhlcl9zY2FybGV0dF9nZW4yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi45NDNiNjVmZjI3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvbWl4ZXJfc2Nh cmxldHRfZ2VuMi5jCkBAIC0wLDAgKzEsMTU5MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qCisgKiAgIEZvY3Vzcml0ZSBTY2FybGV0dCAxOGkyMCBHZW4gMiBEcml2 ZXIgZm9yIEFMU0EKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IGJ5IEdlb2ZmcmV5 IEQuIEJlbm5ldHQKKyAqCisgKiAgIEJhc2VkIG9uIHRoZSBTY2FybGV0dCAoR2VuIDEpIERyaXZl ciBmb3IgQUxTQToKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxMyBieSBUb2JpYXMgSG9mZm1h bm4KKyAqICAgQ29weXJpZ2h0IChjKSAyMDEzIGJ5IFJvYmluIEdhcmV1cyA8cm9iaW4gYXQgZ2Fy ZXVzLm9yZz4KKyAqICAgQ29weXJpZ2h0IChjKSAyMDAyIGJ5IFRha2FzaGkgSXdhaSA8dGl3YWkg YXQgc3VzZS5kZT4KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE0IGJ5IENocmlzIEogQXJnZXMgPGNo cmlzLmouYXJnZXMgYXQgY2Fub25pY2FsLmNvbT4KKyAqCisgKiAgIE1hbnkgY29kZXMgYm9ycm93 ZWQgZnJvbSBhdWRpby5jIGJ5CisgKiAgICAgQWxhbiBDb3ggKGFsYW4gYXQgbHhvcmd1ay51a3V1 Lm9yZy51aykKKyAqICAgICBUaG9tYXMgU2FpbGVyIChzYWlsZXIgYXQgaWZlLmVlLmV0aHouY2gp CisgKgorICogICBDb2RlIGNsZWFudXA6CisgKiAgIERhdmlkIEhlbm5pbmdzc29uIDxkYXZpZC5o ZW5uaW5nc3NvbiBhdCBjYW5vbmljYWwuY29tPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisK Ky8qIE1peGVyIEludGVyZmFjZSBmb3IgdGhlIEZvY3Vzcml0ZSBTY2FybGV0dCAxOGkyMCBHZW4g MiBhdWRpbworICogaW50ZXJmYWNlLiBCYXNlZCBvbiB0aGUgR2VuIDEgZHJpdmVyIGFuZCByZXdy aXR0ZW4uCisgKi8KKworLyogVGhlIHByb3RvY29sIHdhcyByZXZlcnNlIGVuZ2luZWVyZWQgYnkg bG9va2luZyBhdCB0aGUgY29tbXVuaWNhdGlvbgorICogYmV0d2VlbiBGb2N1c3JpdGUgQ29udHJv bCAyLjMuNCBhbmQgdGhlIEZvY3Vzcml0ZShSKSBTY2FybGV0dCAxOGkyMAorICogKGZpcm13YXJl IDEwODMpIHVzaW5nIHVzYm1vbiBpbiBKdWx5LUF1Z3VzdCAyMDE4LgorICoKKyAqIFRoaXMgQUxT QSBtaXhlciBnaXZlcyBhY2Nlc3MgdG86CisgKiAgLSBpbnB1dCwgb3V0cHV0LCBtaXhlci1tYXRy aXggbXV4ZXMKKyAqICAtIDE4eDEwIG1peGVyLW1hdHJpeCBnYWluIHN0YWdlcworICogIC0gZ2Fp bi92b2x1bWUgY29udHJvbHMKKyAqICAtIGxldmVsIG1ldGVycworICoKKyAqIDxkaXRhYT4KKyAq ICAgIC8tLS0tLS0tLS0tLS0tLVwgICAgMThjaG4gICAgICAgICAgICAyMGNobiAgICAgLy0tLS0t LS0tLS0tLS0tXAorICogICAgfCBIYXJkd2FyZSAgaW4gKy0tKy0tLS0tLVwgICAgLy0tLS0tLS0t LS0tLS0rLS0rIEFMU0EgUENNIG91dCB8CisgKiAgICBcLS0tLS0tLS0tLS0tLS0vICB8ICAgICAg fCAgICB8ICAgICAgICAgICAgIHwgIFwtLS0tLS0tLS0tLS0tLS8KKyAqICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICB8ICAgIHwgICAgLy0tLS0tXCAgfAorICogICAgICAgICAgICAgICAgICAg ICAgfCAgICAgIHwgICAgfCAgICB8ICAgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgdiAgICB2ICAgIHYgICAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAr LS0tLS0tLS0tLS0tLS0tKyAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICBcIE1h dHJpeCAgTXV4IC8gICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0r LS0tLS0rICAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfDE4Y2huICAg ICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg IHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgIDEwY2hufCAgfAor ICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgdiAgICAgICAgICB8ICB8CisgKiAg ICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tKyAgIHwgIHwKKyAqICAgICAg ICAgICAgICAgICAgICAgIHwgICAgIHwgTWl4ZXIgICAgICB8ICAgfCAgfAorICogICAgICAgICAg ICAgICAgICAgICAgfCAgICAgfCAgICAgTWF0cml4IHwgICB8ICB8CisgKiAgICAgICAgICAgICAg ICAgICAgICB8ICAgICB8ICAgICAgICAgICAgfCAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAg ICAgIHwgICAgIHwgMTh4MTAgR2FpbiB8ICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAg fCAgICAgfCAgIHN0YWdlcyAgIHwgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAg ICArLS0tLS0rLS0tLS0tKyAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfDE4Y2huICAgICAg fDEwY2huICAgICB8ICB8MjBjaG4KKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg IHwgICAgICAgICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgKy0t LS0tLS0tLS0vICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAg ICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgIHYgICAgICAgICAg ICAgdgorICogICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09 CisgKiAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICstLeKAlC0tLS0tLS0t LS0tLSsKKyAqICAgICAgICAgICAgICAgIFwgT3V0cHV0ICBNdXggLyAgICAgICAgIFwgQ2FwdHVy ZSBNdXggLworICogICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSsgICAgICAgICAgICstLS0t LSstLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgICAgICAgICAg ICB8CisgKiAgICAgICAgICAgICAgICAxMGNobnwgICB8ICAgICAgICAgICAgICAgICAgICAgfDE4 Y2huCisgKiAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgfAor ICogIC8tLS0tLS0tLS0tLS0tLVwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAvLS0t LS0tLS0tLS0tLS1cCisgKiAgfCBTL1BESUYsIEFEQVQgfDwtLS8gICB8MTBjaG4gICAgICAgICAg ICAgICAgXC0tPnwgQUxTQSBQQ00gaW4gIHwKKyAqICB8IEhhcmR3YXJlIG91dCB8ICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLworICogIFwtLS0tLS0tLS0t LS0tLS8gICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgdgorICogICAgICAgICAg ICAgICAgICArLS0tLS0tLS0tLS0tLSsgICAgc3dpdGNoIHBlciBjaGFubmVsIHRvIHNlbGVjdAor ICogICAgICAgICAgICAgICAgICB8IE1hc3RlciBHYWluIHw8LS0gZnJvbnQgcGFuZWwgdm9sdW1l IGtub2Igb3IKKyAqICAgICAgICAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rICAgIGluZGl2aWR1 YWwgc29mdHdhcmUgZ2FpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAg ICAgICAgICAgICAgICAgICAgfDEwY2huCisgKiAgLy0tLS0tLS0tLS0tLS0tXCAgICAgICB8Cisg KiAgfCBBbmFsb2d1ZSAgICAgfDwtLS0tLS0vCisgKiAgfCBIYXJkd2FyZSBvdXQgfAorICogIFwt LS0tLS0tLS0tLS0tLS8KKyAqIDwvZGl0YWE+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb250cm9s Lmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ1c2JhdWRpby5oIgorI2lu Y2x1ZGUgIm1peGVyLmgiCisjaW5jbHVkZSAiaGVscGVyLmgiCisKKyNpbmNsdWRlICJtaXhlcl9z Y2FybGV0dF9nZW4yLmgiCisKKy8qIHNvbWUgZ3VpIG1peGVycyBjYW4ndCBoYW5kbGUgbmVnYXRp dmUgY3RsIHZhbHVlcyAqLworI2RlZmluZSBTQ0FSTEVUVF9WT0xVTUVfQklBUyAxMjcKKworLyog bWl4ZXIgcmFuZ2UgZnJvbSAtODBkQiB0byArNmRCIGluIDAuNWRCIHN0ZXBzICovCisjZGVmaW5l IFNDQVJMRVRUX01JWEVSX01JTl9EQiAtODAKKyNkZWZpbmUgU0NBUkxFVFRfTUlYRVJfQklBUyAo LVNDQVJMRVRUX01JWEVSX01JTl9EQiAqIDIpCisjZGVmaW5lIFNDQVJMRVRUX01JWEVSX01BWF9E QiA2CisjZGVmaW5lIFNDQVJMRVRUX01JWEVSX01BWF9WQUxVRSBcCisJKChTQ0FSTEVUVF9NSVhF Ul9NQVhfREIgLSBTQ0FSTEVUVF9NSVhFUl9NSU5fREIpICogMikKKworLyogbWFwIGZyb20gKGRC ICsgODApICogMiB0byBtaXhlciB2YWx1ZQorICogZm9yIGRCIGluIDAgLi4gMTcyOiBpbnQoODE5 MiAqIHBvdygxMCwgKChkQiAtIDE2MCkgLyAyIC8gMjApKSkKKyAqLworc3RhdGljIGNvbnN0IF9f dTE2IHNjYXJsZXR0Ml9taXhlcl92YWx1ZXNbMTczXSA9IHsKKwkwLCAwLCAwLCAwLCAxLCAxLCAx LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLAorCTIsIDIsIDMsIDMs IDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDYsIDYsIDYsIDcsIDcsIDgsIDgsCisJOSwg OSwgMTAsIDEwLCAxMSwgMTIsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIx LAorCTIzLCAyNCwgMjUsIDI3LCAyOSwgMzAsIDMyLCAzNCwgMzYsIDM4LCA0MSwgNDMsIDQ2LCA0 OCwgNTEsCisJNTQsIDU3LCA2MSwgNjUsIDY4LCA3MywgNzcsIDgxLCA4NiwgOTEsIDk3LCAxMDMs IDEwOSwgMTE1LAorCTEyMiwgMTI5LCAxMzcsIDE0NSwgMTU0LCAxNjMsIDE3MywgMTgzLCAxOTQs IDIwNSwgMjE3LCAyMzAsCisJMjQ0LCAyNTksIDI3NCwgMjkwLCAzMDcsIDMyNiwgMzQ1LCAzNjUs IDM4NywgNDEwLCA0MzQsIDQ2MCwKKwk0ODcsIDUxNiwgNTQ3LCA1NzksIDYxNCwgNjUwLCA2ODks IDczMCwgNzczLCA4MTksIDg2NywgOTE5LAorCTk3MywgMTAzMSwgMTA5MiwgMTE1NywgMTIyNSwg MTI5OCwgMTM3NSwgMTQ1NiwgMTU0MywgMTYzNCwKKwkxNzMxLCAxODMzLCAxOTQyLCAyMDU3LCAy MTc5LCAyMzA4LCAyNDQ1LCAyNTkwLCAyNzQ0LCAyOTA2LAorCTMwNzgsIDMyNjEsIDM0NTQsIDM2 NTksIDM4NzYsIDQxMDUsIDQzNDksIDQ2MDYsIDQ4NzksIDUxNjgsCisJNTQ3NSwgNTc5OSwgNjE0 MywgNjUwNywgNjg5MiwgNzMwMSwgNzczMywgODE5MiwgODY3NywgOTE5MSwKKwk5NzM2LCAxMDMx MywgMTA5MjQsIDExNTcxLCAxMjI1NywgMTI5ODMsIDEzNzUyLCAxNDU2NywgMTU0MzAsCisJMTYz NDUKK307CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGFuYWxvZ3VlIG91dHB1dHMgKi8KKyNkZWZp bmUgU0NBUkxFVFQyX0NPTlRST0xTX01BWCAxMAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBpbnB1 dHMgdG8gdGhlIG1peGVyICovCisjZGVmaW5lIFNDQVJMRVRUMl9JTlBVVF9NSVhfTUFYIDE4CisK Ky8qIE1heGltdW0gbnVtYmVyIG9mIG91dHB1dHMgZnJvbSB0aGUgbWl4ZXIgKi8KKyNkZWZpbmUg U0NBUkxFVFQyX09VVFBVVF9NSVhfTUFYIDEwCisKKy8qIE1heGltdW0gc2l6ZSBvZiB0aGUgZGF0 YSBpbiB0aGUgVVNCIG11eCBhc3NpZ25tZW50IG1lc3NhZ2U6CisgKiAxOCBpbnB1dHMsIDIwIG91 dHB1dHMsIDE4IG1hdHJpeCBpbnB1dHMsIDggc3BhcmUKKyAqLworI2RlZmluZSBTQ0FSTEVUVDJf TVVYX01BWCA2NAorCisvKiBOdW1iZXIgb2YgbWV0ZXJzOgorICogMTggaW5wdXRzLCAyMCBvdXRw dXRzLCAxOCBtYXRyaXggaW5wdXRzCisgKi8KKyNkZWZpbmUgU0NBUkxFVFQyX05VTV9NRVRFUlMg NTYKKworLyogSGFyZHdhcmUgcG9ydCB0eXBlczoKKyAqIC0gTm9uZSAobm8gaW5wdXQgdG8gbXV4 KQorICogLSBBbmFsb2d1ZSBJL08KKyAqIC0gUy9QRElGIEkvTworICogLSBBREFUIEkvTworICog LSBNaXhlciBJL08KKyAqIC0gUENNIEkvTworICovCitlbnVtIHsKKwlTQ0FSTEVUVDJfUE9SVF9U WVBFX05PTkUgPSAwLAorCVNDQVJMRVRUMl9QT1JUX1RZUEVfQU5BTE9HVUUgPSAxLAorCVNDQVJM RVRUMl9QT1JUX1RZUEVfU1BESUYgPSAyLAorCVNDQVJMRVRUMl9QT1JUX1RZUEVfQURBVCA9IDMs CisJU0NBUkxFVFQyX1BPUlRfVFlQRV9NSVggPSA0LAorCVNDQVJMRVRUMl9QT1JUX1RZUEVfUENN ID0gNSwKKwlTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5UID0gNiwKK307CisKKy8qIENvdW50IG9m IHRvdGFsIEkvTyBhbmQgbnVtYmVyIGF2YWlsYWJsZSBhdCBlYWNoIHNhbXBsZSByYXRlICovCitl bnVtIHsKKwlTQ0FSTEVUVDJfUE9SVF9JTiA9IDAsCisJU0NBUkxFVFQyX1BPUlRfT1VUID0gMSwK KwlTQ0FSTEVUVDJfUE9SVF9PVVRfNDQgPSAyLAorCVNDQVJMRVRUMl9QT1JUX09VVF84OCA9IDMs CisJU0NBUkxFVFQyX1BPUlRfT1VUXzE3NiA9IDQsCisJU0NBUkxFVFQyX1BPUlRfRElSRUNUSU9O UyA9IDUsCit9OworCisjZGVmaW5lIFNDQVJMRVRUMl9CVVRUT05fQ09VTlQgMgorCitzdGF0aWMg Y29uc3QgY2hhciAqY29uc3Qgc2NhcmxldHQyX2J1dHRvbl9uYW1lc1tTQ0FSTEVUVDJfQlVUVE9O X0NPVU5UXSA9IHsKKwkiTXV0ZSIsICJEaW0iCit9OworCisvKiBEZXNjcmlwdGlvbiBvZiBlYWNo IGhhcmR3YXJlIHBvcnQgdHlwZToKKyAqIC0gaWQ6IGhhcmR3YXJlIElEIGZvciB0aGlzIHBvcnQg dHlwZQorICogLSBudW06IG51bWJlciBvZiBzb3VyY2VzL2Rlc3RpbmF0aW9ucyBvZiB0aGlzIHBv cnQgdHlwZQorICogLSBzcmNfZGVzY3I6IHByaW50ZiBmb3JtYXQgc3RyaW5nIGZvciBtdXggaW5w dXQgc2VsZWN0aW9ucworICogLSBzcmNfbnVtX29mZnNldDogYWRkZWQgdG8gY2hhbm5lbCBudW1i ZXIgZm9yIHRoZSBmcHJpbnRmCisgKiAtIGRzdF9kZXNjcjogcHJpbnRmIGZvcm1hdCBzdHJpbmcg Zm9yIG1peGVyIGNvbnRyb2xzCisgKi8KK3N0cnVjdCBzY2FybGV0dDJfcG9ydHMgeworCV9fdTE2 IGlkOworCWludCBudW1bU0NBUkxFVFQyX1BPUlRfRElSRUNUSU9OU107CisJY29uc3QgY2hhciAq IGNvbnN0IHNyY19kZXNjcjsKKwlpbnQgc3JjX251bV9vZmZzZXQ7CisJY29uc3QgY2hhciAqIGNv bnN0IGRzdF9kZXNjcjsKK307CisKK3N0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8geworCWNv bnN0IGNoYXIgKiBjb25zdCBsaW5lX291dF9kZXNjcnNbU0NBUkxFVFQyX0NPTlRST0xTX01BWF07 CisJc3RydWN0IHNjYXJsZXR0Ml9wb3J0cyBwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5U XTsKK307CisKK3N0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhIHsKKwlzdHJ1Y3QgbXV0ZXggdXNi X211dGV4OyAvKiBwcmV2ZW50IHNlbmRpbmcgY29uY3VycmVudCBVU0IgcmVxdWVzdHMgKi8KKwlz dHJ1Y3QgbXV0ZXggZGF0YV9tdXRleDsgLyogbG9jayBhY2Nlc3MgdG8gdGhpcyBkYXRhICovCisJ Y29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9kZXZpY2VfaW5mbyAqaW5mbzsKKwlpbnQgbnVtX211eF9z cmNzOworCV9fdTE2IHNjYXJsZXR0Ml9zZXE7CisJX191OCB2b2xfdXBkYXRlZDsKKwlfX3U4IG1h c3Rlcl92b2w7CisJX191OCB2b2xbU0NBUkxFVFQyX0NPTlRST0xTX01BWF07CisJX191OCB2b2xf c3dfaHdfc3dpdGNoW1NDQVJMRVRUMl9DT05UUk9MU19NQVhdOworCV9fdTggYnV0dG9uc1tTQ0FS TEVUVDJfQlVUVE9OX0NPVU5UXTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXJfdm9sX2N0 bDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICp2b2xfY3Rsc1tTQ0FSTEVUVDJfQ09OVFJPTFNfTUFY XTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpidXR0b25fY3Rsc1tTQ0FSTEVUVDJfQ09OVFJPTFNf TUFYXTsKKwlfX3U4IG11eFtTQ0FSTEVUVDJfTVVYX01BWF07CisJX191OCBtaXhbU0NBUkxFVFQy X0lOUFVUX01JWF9NQVggKiBTQ0FSTEVUVDJfT1VUUFVUX01JWF9NQVhdOworfTsKKworc3RydWN0 IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKSBzY2FybGV0dDJfdXNiX3ZvbHVtZV9zdGF0dXMg eworCV9fdTggYnV0dG9uc1tTQ0FSTEVUVDJfQlVUVE9OX0NPVU5UXTsgLyogbXV0ZSAmIGRpbSBi dXR0b25zICovCisJX191OCBwYWQxOworCV9fczE2IHN3X3ZvbFsxMF07IC8qIHNvZnR3YXJlIHZv bHVtZSBzZXR0aW5nICovCisJX19zMTYgaHdfdm9sWzEwXTsgLyogYWN0dWFsIHZvbHVtZSBvZiBv dXRwdXQgaW5jLiBkaW0gKC0xOGRCKSAqLworCV9fdTE2IHBhZDJbNV07CisJX191OCBzd19od19z d2l0Y2hbMTBdOyAvKiBzdyAoMCkgb3IgaHcgKDEpIGNvbnRyb2xsZWQgKi8KKwlfX3UxNiBwYWQz WzNdOworCV9fczE2IG1hc3Rlcl92b2w7IC8qIGZyb250IHBhbmVsIHZvbHVtZSBrbm9iICovCit9 OworCisvKioqIE1vZGVsLXNwZWNpZmljIGRhdGEgKioqLworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHNjYXJsZXR0Ml9kZXZpY2VfaW5mbyBzMThpMjBfZ2VuMl9pbmZvID0geworCS5saW5lX291dF9k ZXNjcnMgPSB7CisJCSJNb25pdG9yIEwiLAorCQkiTW9uaXRvciBSIiwKKwkJTlVMTCwKKwkJTlVM TCwKKwkJTlVMTCwKKwkJTlVMTCwKKwkJIkhlYWRwaG9uZXMgMSBMIiwKKwkJIkhlYWRwaG9uZXMg MSBSIiwKKwkJIkhlYWRwaG9uZXMgMiBMIiwKKwkJIkhlYWRwaG9uZXMgMiBSIiwKKwl9LAorCisJ LnBvcnRzID0geworCQl7CisJCQkuaWQgPSAweDAwMCwKKwkJCS5udW0gPSB7IDEsIDAsIDgsIDgs IDYgfSwKKwkJCS5zcmNfZGVzY3IgPSAiT2ZmIiwKKwkJCS5zcmNfbnVtX29mZnNldCA9IDAsCisJ CX0sCisJCXsKKwkJCS5pZCA9IDB4MDgwLAorCQkJLm51bSA9IHsgOCwgMTAsIDEwLCAxMCwgMTAg fSwKKwkJCS5zcmNfZGVzY3IgPSAiQW5hbG9ndWUgJWQiLAorCQkJLnNyY19udW1fb2Zmc2V0ID0g MSwKKwkJCS5kc3RfZGVzY3IgPSAiQW5hbG9ndWUgT3V0cHV0ICUwMmQgUGxheWJhY2siCisJCX0s CisJCXsKKwkJCS8qIFMvUERJRiBvdXRwdXRzIGFyZW4ndCBhdmFpbGFibGUgYXQgMTkyS0h6CisJ CQkgKiBidXQgYXJlIGluY2x1ZGVkIGluIHRoZSBVU0IgbXV4IEkvTworCQkJICogYXNzaWdubWVu dCBtZXNzYWdlIGFueXdheQorCQkJICovCisJCQkuaWQgPSAweDE4MCwKKwkJCS5udW0gPSB7IDIs IDIsIDIsIDIsIDIgfSwKKwkJCS5zcmNfZGVzY3IgPSAiUy9QRElGICVkIiwKKwkJCS5zcmNfbnVt X29mZnNldCA9IDEsCisJCQkuZHN0X2Rlc2NyID0gIlMvUERJRiBPdXRwdXQgJWQgUGxheWJhY2si CisJCX0sCisJCXsKKwkJCS5pZCA9IDB4MjAwLAorCQkJLm51bSA9IHsgOCwgOCwgOCwgNCwgMCB9 LAorCQkJLnNyY19kZXNjciA9ICJBREFUICVkIiwKKwkJCS5zcmNfbnVtX29mZnNldCA9IDEsCisJ CQkuZHN0X2Rlc2NyID0gIkFEQVQgT3V0cHV0ICVkIFBsYXliYWNrIgorCQl9LAorCQl7CisJCQku aWQgPSAweDMwMCwKKwkJCS5udW0gPSB7IDEwLCAxOCwgMTgsIDE4LCAxOCB9LAorCQkJLnNyY19k ZXNjciA9ICJNaXggJWMiLAorCQkJLnNyY19udW1fb2Zmc2V0ID0gNjUsCisJCQkuZHN0X2Rlc2Ny ID0gIk1peGVyIElucHV0ICUwMmQgQ2FwdHVyZSIKKwkJfSwKKwkJeworCQkJLmlkID0gMHg2MDAs CisJCQkubnVtID0geyAyMCwgMTgsIDE4LCAxNCwgMTAgfSwKKwkJCS5zcmNfZGVzY3IgPSAiUENN ICVkIiwKKwkJCS5zcmNfbnVtX29mZnNldCA9IDEsCisJCQkuZHN0X2Rlc2NyID0gIlBDTSAlMDJk IENhcHR1cmUiCisJCX0sCisJfSwKK307CisKKy8qIGdldCB0aGUgc3RhcnRpbmcgcG9ydCBpbmRl eCBudW1iZXIgZm9yIGEgZ2l2ZW4gcG9ydCB0eXBlL2RpcmVjdGlvbiAqLworc3RhdGljIGludCBz Y2FybGV0dDJfZ2V0X3BvcnRfc3RhcnRfbnVtKGNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMg KnBvcnRzLAorCQkJCQlpbnQgZGlyZWN0aW9uLCBpbnQgcG9ydF90eXBlKQoreworCWludCBpLCBu dW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRfdHlwZTsgaSsrKQorCQludW0gKz0gcG9y dHNbaV0ubnVtW2RpcmVjdGlvbl07CisKKwlyZXR1cm4gbnVtOworfQorCisvKioqIFVTQiBJbnRl cmFjdGlvbnMgKioqLworCisvKiBWZW5kb3ItU3BlY2lmaWMgSW50ZXJmYWNlLCBFbmRwb2ludCwg TWF4UGFja2V0U2l6ZSwgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9WRU5ET1Jf U1BFQ0lGSUNfSU5URVJGQUNFIDUKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9JTlRFUlJVUFRfRU5E UE9JTlQgNAorI2RlZmluZSBTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9NQVhfREFUQSA2NAorI2Rl ZmluZSBTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9JTlRFUlZBTCAzCisKKy8qIEludGVycnVwdCBm bGFncyBmb3Igdm9sdW1lIGFuZCBtdXRlL2RpbSBidXR0b24gY2hhbmdlcyAqLworI2RlZmluZSBT Q0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9WT0xfQ0hBTkdFIDB4NDAwMDAwCisjZGVmaW5lIFNDQVJM RVRUMl9VU0JfSU5URVJSVVBUX0JVVFRPTl9DSEFOR0UgMHgyMDAwMDAKKworLyogQ29tbWFuZHMg Zm9yIHNlbmRpbmcvcmVjZWl2aW5nIHJlcXVlc3RzL3Jlc3BvbnNlcyAqLworI2RlZmluZSBTQ0FS TEVUVDJfVVNCX1ZFTkRPUl9TUEVDSUZJQ19DTURfUkVRIDIKKyNkZWZpbmUgU0NBUkxFVFQyX1VT Ql9WRU5ET1JfU1BFQ0lGSUNfQ01EX1JFU1AgMworCisjZGVmaW5lIFNDQVJMRVRUMl9VU0JfSU5J VF9TRVEgMHgwMDAwMDAwMAorI2RlZmluZSBTQ0FSTEVUVDJfVVNCX0dFVF9NRVRFUl9MRVZFTFMg MHgwMDAwMTAwMQorI2RlZmluZSBTQ0FSTEVUVDJfVVNCX1NFVF9NSVggMHgwMDAwMjAwMgorI2Rl ZmluZSBTQ0FSTEVUVDJfVVNCX1NFVF9NVVggMHgwMDAwMzAwMgorI2RlZmluZSBTQ0FSTEVUVDJf VVNCX0dFVF9EQVRBIDB4MDA4MDAwMDAKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9TRVRfREFUQV8x IDB4MDA4MDAwMDEKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9TRVRfREFUQV8yIDB4MDA4MDAwMDIK KworI2RlZmluZSBTQ0FSTEVUVDJfVVNCX1ZPTFVNRV9TVEFUVVNfT0ZGU0VUIDB4MzEKKyNkZWZp bmUgU0NBUkxFVFQyX1VTQl9MSU5FX09VVF9WT0xVTUVfT0ZGU0VUIDB4MzQKKyNkZWZpbmUgU0NB UkxFVFQyX1VTQl9TV19IV19TV0lUQ0hfT0ZGU0VUIDB4NjYKKworI2RlZmluZSBTQ0FSTEVUVDJf VVNCX0xJTkVfT1VUX1ZPTFVNRV9TRVRfTUFHSUMgMQorI2RlZmluZSBTQ0FSTEVUVDJfVVNCX1NX X0hXX1NXSVRDSF9TRVRfTUFHSUMgMworI2RlZmluZSBTQ0FSTEVUVDJfVVNCX01FVEVSX0xFVkVM U19HRVRfTUFHSUMgMQorCisvKiBTZW5kIGEgcHJvcHJpZXRhcnkgZm9ybWF0IHJlcXVlc3QgdG8g dGhlIFNjYXJsZXR0IGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYigKKwlz dHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsIF9fdTMyIGNtZCwKKwl2b2lkICpyZXFf ZGF0YSwgX191MTYgcmVxX3NpemUsIHZvaWQgKnJlc3BfZGF0YSwgX191MTYgcmVzcF9zaXplKQor eworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gbWl4ZXItPmNoaXAtPnBy aXZhdGU7CisKKwkvKiBwcm9wcmlldGFyeSByZXF1ZXN0L3Jlc3BvbnNlIGZvcm1hdCAqLworCXN0 cnVjdCBzY2FybGV0dDJfdXNiX3BhY2tldCB7CisJCV9fdTMyIGNtZDsKKwkJX191MTYgc2l6ZTsK KwkJX191MTYgc2VxOworCQlfX3UzMiBlcnJvcjsKKwkJX191MzIgcGFkOworCQlfX3U4IGRhdGFb XTsKKwl9OworCisJX191MTYgcmVxX2J1Zl9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBzY2FybGV0 dDJfdXNiX3BhY2tldCkgKyByZXFfc2l6ZTsKKwlfX3UxNiByZXNwX2J1Zl9zaXplID0KKwkJc2l6 ZW9mKHN0cnVjdCBzY2FybGV0dDJfdXNiX3BhY2tldCkgKyByZXNwX3NpemU7CisKKwlzdHJ1Y3Qg c2NhcmxldHQyX3VzYl9wYWNrZXQgKnJlcSwgKnJlc3A7CisKKwlpbnQgc2VxLCBlcnI7CisJX191 MzIgcmVzcF9jbWQ7CisJX191MzIgcmVzcF9zZXE7CisJX191MTYgc2l6ZTsKKworCW11dGV4X2xv Y2soJnByaXZhdGUtPnVzYl9tdXRleCk7CisKKwkvKiBidWlsZCByZXF1ZXN0IG1lc3NhZ2UgYW5k IHNlbmQgaXQgKi8KKworCXJlcSA9IGttYWxsb2MocmVxX2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXJlcSkgeworCQltdXRleF91bmxvY2soJnByaXZhdGUtPnVzYl9tdXRleCk7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCS8qIHNlcXVlbmNlIG11c3QgZ28gdXAgYnkgMSBmb3IgZWFj aCByZXF1ZXN0ICovCisJc2VxID0gcHJpdmF0ZS0+c2NhcmxldHQyX3NlcSsrOworCisJcmVxLT5j bWQgPSBjcHVfdG9fbGUzMihjbWQpOworCXJlcS0+c2l6ZSA9IGNwdV90b19sZTE2KHJlcV9zaXpl KTsKKwlyZXEtPnNlcSA9IGNwdV90b19sZTE2KHNlcSk7CisJcmVxLT5lcnJvciA9IDA7CisJcmVx LT5wYWQgPSAwOworCWlmIChyZXFfc2l6ZSkKKwkJbWVtY3B5KHJlcS0+ZGF0YSwgcmVxX2RhdGEs IHJlcV9zaXplKTsKKworCWVyciA9IHNuZF91c2JfY3RsX21zZyhtaXhlci0+Y2hpcC0+ZGV2LAor CQkJdXNiX3NuZGN0cmxwaXBlKG1peGVyLT5jaGlwLT5kZXYsIDApLAorCQkJU0NBUkxFVFQyX1VT Ql9WRU5ET1JfU1BFQ0lGSUNfQ01EX1JFUSwKKwkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0Jf VFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJMCwKKwkJCVNDQVJMRVRUMl9VU0JfVkVORE9S X1NQRUNJRklDX0lOVEVSRkFDRSwKKwkJCXJlcSwKKwkJCXJlcV9idWZfc2l6ZSk7CisKKwlrZnJl ZShyZXEpOworCisJaWYgKGVyciAhPSByZXFfYnVmX3NpemUpIHsKKwkJc25kX3ByaW50ayhLRVJO X0VSUiAiU2NhcmxldHQgR2VuIDIgVVNCIHJlcXVlc3QgcmVzdWx0ICIKKwkJCSAgICJjb21tYW5k ICV4IHdhcyAlZFxuIiwgY21kLCBlcnIpOworCQltdXRleF91bmxvY2soJnByaXZhdGUtPnVzYl9t dXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNlbmQgYSBzZWNvbmQgbWVzc2Fn ZSB0byBnZXQgdGhlIHJlc3BvbnNlICovCisKKwlyZXNwID0ga21hbGxvYyhyZXNwX2J1Zl9zaXpl LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc3ApIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT51 c2JfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwllcnIgPSBzbmRfdXNiX2N0bF9t c2cobWl4ZXItPmNoaXAtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShtaXhlci0+Y2hpcC0+ZGV2 LCAwKSwKKwkJCVNDQVJMRVRUMl9VU0JfVkVORE9SX1NQRUNJRklDX0NNRF9SRVNQLAorCQkJVVNC X1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCTAsCisJ CQlTQ0FSTEVUVDJfVVNCX1ZFTkRPUl9TUEVDSUZJQ19JTlRFUkZBQ0UsCisJCQlyZXNwLAorCQkJ cmVzcF9idWZfc2l6ZSk7CisKKwkvKiB2YWxpZGF0ZSB0aGUgcmVzcG9uc2UgKi8KKworCWlmIChl cnIgIT0gcmVzcF9idWZfc2l6ZSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJTY2FybGV0dCBH ZW4gMiBVU0IgcmVzcG9uc2UgcmVzdWx0ICIKKwkJCSAgICJjb21tYW5kICV4IHdhcyAlZFxuIiwg Y21kLCBlcnIpOworCQlrZnJlZShyZXNwKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT51c2Jf bXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXNwX2NtZCA9IGxlMzJfdG9fY3B1 KHJlc3AtPmNtZCk7CisJcmVzcF9zZXEgPSBsZTE2X3RvX2NwdShyZXNwLT5zZXEpOworCXNpemUg PSBsZTE2X3RvX2NwdShyZXNwLT5zaXplKTsKKworCWlmIChyZXNwX2NtZCAhPSBjbWQgfHwKKwkg ICAgcmVzcF9zZXEgIT0gc2VxIHx8CisJICAgIHNpemUgIT0gcmVzcF9zaXplIHx8CisJICAgIHJl c3AtPmVycm9yIHx8CisJICAgIHJlc3AtPnBhZCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJT Y2FybGV0dCBHZW4gMiBVU0IgaW52YWxpZCByZXNwb25zZTsgIgorCQkJICAgImNtZCB0eC9yeCAl ZC8lZCBzZXEgJWQvJWQgc2l6ZSAlZC8lZCAiCisJCQkgICAiZXJyb3IgJWQgcGFkICVkXG4iLAor CQkJICAgY21kLCByZXNwX2NtZCwgc2VxLCByZXNwX3NlcSwgc2l6ZSwgcmVzcF9zaXplLAorCQkJ ICAgcmVzcC0+ZXJyb3IsIHJlc3AtPnBhZCk7CisJCWtmcmVlKHJlc3ApOworCQltdXRleF91bmxv Y2soJnByaXZhdGUtPnVzYl9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChy ZXNwX3NpemUgPiAwKQorCQltZW1jcHkocmVzcF9kYXRhLCByZXNwLT5kYXRhLCByZXNwX3NpemUp OworCisJa2ZyZWUocmVzcCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT51c2JfbXV0ZXgpOwor CXJldHVybiAwOworfQorCisvKiBTZW5kIGEgVVNCIG1lc3NhZ2UgdG8gc2V0IGRhdGEgKGN1cnJl bnRseSB2b2x1bWUgbGV2ZWwgb3Igc3dpdGNoKSAqLworc3RhdGljIGludCBzY2FybGV0dDJfdXNi X3NldCgKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCisJaW50IGluZGV4LCBp bnQgc2l6ZSwgaW50IG1hZ2ljX3ZhbHVlLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IF9fYXR0cmli dXRlX18oKF9fcGFja2VkX18pKSB7CisJCV9fdTMyIGluZGV4OworCQlfX3UzMiBieXRlczsKKwkJ X19zMzIgdmFsdWU7CisJfSByZXE7CisJX191MzIgcmVxMjsKKwlpbnQgZXJyOworCisJLyogc2Vu ZCBmaXJzdCBtZXNzYWdlIHdpdGggdGhlIGRhdGEgKi8KKwlyZXEuaW5kZXggPSBjcHVfdG9fbGUz MihpbmRleCk7CisJcmVxLmJ5dGVzID0gY3B1X3RvX2xlMzIoc2l6ZSk7CisJcmVxLnZhbHVlID0g Y3B1X3RvX2xlMzIodmFsdWUpOworCWVyciA9IHNjYXJsZXR0Ml91c2IobWl4ZXIsIFNDQVJMRVRU Ml9VU0JfU0VUX0RBVEFfMSwKKwkJCSAgICAmcmVxLCBzaXplb2YoX191MzIpICogMiArIHNpemUs IE5VTEwsIDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2VuZCBzZWNv bmQgbWVzc2FnZSB3aXRoIHRoZSBtYWdpYyB2YWx1ZSAqLworCXJlcTIgPSBjcHVfdG9fbGUzMiht YWdpY192YWx1ZSk7CisJZXJyID0gc2NhcmxldHQyX3VzYihtaXhlciwgU0NBUkxFVFQyX1VTQl9T RVRfREFUQV8yLAorCQkJICAgICZyZXEyLCBzaXplb2YocmVxMiksIE5VTEwsIDApOworCWlmIChl cnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNlbmQgYSBVU0Ig bWVzc2FnZSB0byBnZXQgZGF0YTsgcmVzdWx0IHBsYWNlZCBpbiAqYnVmICovCitzdGF0aWMgaW50 IHNjYXJsZXR0Ml91c2JfZ2V0KAorCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwK KwlfX3UzMiBjbWQsIGludCBvZmZzZXQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCit7CisJc3RydWN0 IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKSB7CisJCV9fdTMyIG9mZnNldDsKKwkJX191MzIg c2l6ZTsKKwl9IHJlcTsKKwlpbnQgZXJyOworCisJLyogc2VuZCBmaXJzdCBtZXNzYWdlIHdpdGgg dGhlIGRhdGEgKi8KKwlyZXEub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KTsKKwlyZXEuc2l6 ZSA9IGNwdV90b19sZTMyKHNpemUpOworCWVyciA9IHNjYXJsZXR0Ml91c2IobWl4ZXIsIGNtZCwg JnJlcSwgc2l6ZW9mKHJlcSksIGJ1Ziwgc2l6ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBl cnI7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2VuZCBhIFVTQiBtZXNzYWdlIHRvIGdldCB2b2x1 bWUgc3RhdHVzOyByZXN1bHQgcGxhY2VkIGluICpidWYgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQy X3VzYl9nZXRfdm9sdW1lX3N0YXR1cygKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4 ZXIsCisJc3RydWN0IHNjYXJsZXR0Ml91c2Jfdm9sdW1lX3N0YXR1cyAqYnVmKQoreworCXJldHVy biBzY2FybGV0dDJfdXNiX2dldCgKKwkJbWl4ZXIsCisJCVNDQVJMRVRUMl9VU0JfR0VUX0RBVEEs CisJCVNDQVJMRVRUMl9VU0JfVk9MVU1FX1NUQVRVU19PRkZTRVQsCisJCWJ1Ziwgc2l6ZW9mKCpi dWYpKTsKK30KKworLyogU2VuZCBhIFVTQiBtZXNzYWdlIHRvIHNldCB0aGUgc29mdHdhcmUgdm9s dW1lIGZvciBhbiBhbmFsb2d1ZSBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYl9z ZXRfbGluZV9vdXRwdXRfdm9sdW1lKAorCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhl ciwKKwlpbnQgbGluZV9udW0sIGludCB2b2x1bWUpCit7CisJaW50IG9mZnNldCA9IFNDQVJMRVRU Ml9VU0JfTElORV9PVVRfVk9MVU1FX09GRlNFVCArIGxpbmVfbnVtICogMjsKKworCXJldHVybiBz Y2FybGV0dDJfdXNiX3NldCgKKwkJbWl4ZXIsIG9mZnNldCwgMiwKKwkJU0NBUkxFVFQyX1VTQl9M SU5FX09VVF9WT0xVTUVfU0VUX01BR0lDLCB2b2x1bWUpOworfQorCisvKiBTZW5kIGEgVVNCIG1l c3NhZ2UgdG8gc2V0IHNvZnR3YXJlICgwKSBvciBoYXJkd2FyZSAoMSkgdm9sdW1lIGZvcgorICog YW4gYW5hbG9ndWUgb3V0cHV0CisgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYl9zZXRfbW9u aXRvcl92b2x1bWVfc3dpdGNoKAorCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwg aW50IGxpbmVfbnVtLCBpbnQgdmFsdWUpCit7CisJaW50IG9mZnNldCA9IFNDQVJMRVRUMl9VU0Jf U1dfSFdfU1dJVENIX09GRlNFVCArIGxpbmVfbnVtOworCisJcmV0dXJuIHNjYXJsZXR0Ml91c2Jf c2V0KAorCQltaXhlciwgb2Zmc2V0LCAxLAorCQlTQ0FSTEVUVDJfVVNCX1NXX0hXX1NXSVRDSF9T RVRfTUFHSUMsIHZhbHVlKTsKK30KKworLyogU2VuZCBhIFVTQiBtZXNzYWdlIHRvIHNldCB0aGUg dm9sdW1lcyBmb3IgYWxsIGlucHV0cyBvZiBvbmUgbWl4CisgKiAodmFsdWVzIG9idGFpbmVkIGZy b20gcHJpdmF0ZS0+bWl4W10pCisgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYl9zZXRfbWl4 KHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwKKwkJCQkgICAgIGludCBtaXhfbnVt KQoreworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gbWl4ZXItPmNoaXAt PnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9kZXZpY2VfaW5mbyAqaW5mbyA9IHBy aXZhdGUtPmluZm87CisKKwlzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpIHsKKwkJ X191MTYgbWl4X251bTsKKwkJX191MTYgZGF0YVtTQ0FSTEVUVDJfSU5QVVRfTUlYX01BWF07CisJ fSByZXE7CisKKwlpbnQgaSwgaiwgZXJyOworCWludCBudW1fbWl4ZXJfaW4gPQorCQlpbmZvLT5w b3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX01JWF0ubnVtW1NDQVJMRVRUMl9QT1JUX09VVF07CisK KwlyZXEubWl4X251bSA9IGNwdV90b19sZTE2KG1peF9udW0pOworCisJZm9yIChpID0gMCwgaiA9 IG1peF9udW0gKiBudW1fbWl4ZXJfaW47IGkgPCBudW1fbWl4ZXJfaW47IGkrKywgaisrKQorCQly ZXEuZGF0YVtpXSA9IGNwdV90b19sZTE2KAorCQkJc2NhcmxldHQyX21peGVyX3ZhbHVlc1twcml2 YXRlLT5taXhbal1dCisJCSk7CisKKwllcnIgPSBzY2FybGV0dDJfdXNiKG1peGVyLCBTQ0FSTEVU VDJfVVNCX1NFVF9NSVgsCisJCQkgICAgJnJlcSwgKG51bV9taXhlcl9pbiArIDEpICogc2l6ZW9m KF9fdTE2KSwKKwkJCSAgICBOVUxMLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsK KworCXJldHVybiAwOworfQorCisvKiBDb252ZXJ0IGEgcG9ydCBudW1iZXIgaW5kZXggKHBlciBp bmZvLT5wb3J0cykgdG8gYSBoYXJkd2FyZSBJRCAqLworc3RhdGljIF9fdTMyIHNjYXJsZXR0Ml9t dXhfc3JjX251bV90b19pZChjb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cywKKwkJ CQkJIGludCBudW0pCit7CisJaW50IHBvcnRfdHlwZTsKKworCWZvciAocG9ydF90eXBlID0gMDsK KwkgICAgIHBvcnRfdHlwZSA8IFNDQVJMRVRUMl9QT1JUX1RZUEVfQ09VTlQ7CisJICAgICBwb3J0 X3R5cGUrKykgeworCQlpZiAobnVtIDwgcG9ydHNbcG9ydF90eXBlXS5udW1bU0NBUkxFVFQyX1BP UlRfSU5dKQorCQkJcmV0dXJuIHBvcnRzW3BvcnRfdHlwZV0uaWQgfCBudW07CisJCW51bSAtPSBw b3J0c1twb3J0X3R5cGVdLm51bVtTQ0FSTEVUVDJfUE9SVF9JTl07CisJfQorCisJLyogT29wcyAq LworCXJldHVybiAwOworfQorCisvKiBTZW5kIFVTQiBtZXNzYWdlcyB0byBzZXQgbXV4IGlucHV0 cyAqLworc3RhdGljIGludCBzY2FybGV0dDJfdXNiX3NldF9tdXgoc3RydWN0IHVzYl9taXhlcl9p bnRlcmZhY2UgKm1peGVyKQoreworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRl ID0gbWl4ZXItPmNoaXAtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9kZXZpY2Vf aW5mbyAqaW5mbyA9IHByaXZhdGUtPmluZm87CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9wb3J0 cyAqcG9ydHMgPSBpbmZvLT5wb3J0czsKKwlpbnQgcmF0ZSwgcG9ydF9kaXJfcmF0ZTsKKworCXN0 YXRpYyBjb25zdCBpbnQgYXNzaWdubWVudF9vcmRlcltTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5U XSA9IHsKKwkJU0NBUkxFVFQyX1BPUlRfVFlQRV9QQ00sCisJCVNDQVJMRVRUMl9QT1JUX1RZUEVf QU5BTE9HVUUsCisJCVNDQVJMRVRUMl9QT1JUX1RZUEVfU1BESUYsCisJCVNDQVJMRVRUMl9QT1JU X1RZUEVfQURBVCwKKwkJU0NBUkxFVFQyX1BPUlRfVFlQRV9NSVgsCisJCVNDQVJMRVRUMl9QT1JU X1RZUEVfTk9ORSwKKwl9OworCisJc3RydWN0IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKSB7 CisJCV9fdTE2IHBhZDsKKwkJX191MTYgbnVtOworCQlfX3UzMiBkYXRhW1NDQVJMRVRUMl9NVVhf TUFYXTsKKwl9IHJlcTsKKworCXJlcS5wYWQgPSAwOworCisJLyogbXV4IHNldHRpbmdzIGZvciBl YWNoIHJhdGUgKi8KKwlmb3IgKHJhdGUgPSAwLCBwb3J0X2Rpcl9yYXRlID0gU0NBUkxFVFQyX1BP UlRfT1VUXzQ0OworCSAgICAgcG9ydF9kaXJfcmF0ZSA8PSBTQ0FSTEVUVDJfUE9SVF9PVVRfMTc2 OworCSAgICAgcmF0ZSsrLCBwb3J0X2Rpcl9yYXRlKyspIHsKKwkJaW50IG9yZGVyX251bSwgaSwg ZXJyOworCisJCXJlcS5udW0gPSBjcHVfdG9fbGUxNihyYXRlKTsKKworCQlmb3IgKG9yZGVyX251 bSA9IDAsIGkgPSAwOworCQkgICAgIG9yZGVyX251bSA8IFNDQVJMRVRUMl9QT1JUX1RZUEVfQ09V TlQ7CisJCSAgICAgb3JkZXJfbnVtKyspIHsKKwkJCWludCBwb3J0X3R5cGUgPSBhc3NpZ25tZW50 X29yZGVyW29yZGVyX251bV07CisJCQlpbnQgaiA9IHNjYXJsZXR0Ml9nZXRfcG9ydF9zdGFydF9u dW0ocG9ydHMsCisJCQkJCQkJICAgICBTQ0FSTEVUVDJfUE9SVF9PVVQsCisJCQkJCQkJICAgICBw b3J0X3R5cGUpOworCQkJaW50IHBvcnRfaWQgPSBwb3J0c1twb3J0X3R5cGVdLmlkOworCQkJaW50 IGNoYW5uZWw7CisKKwkJCWZvciAoY2hhbm5lbCA9IDA7CisJCQkgICAgIGNoYW5uZWwgPCBwb3J0 c1twb3J0X3R5cGVdLm51bVtwb3J0X2Rpcl9yYXRlXTsKKwkJCSAgICAgY2hhbm5lbCsrLCBpKyss IGorKykKKwkJCQkvKiBsb3dlciAxMiBiaXRzIGZvciB0aGUgZGVzdGluYXRpb24gYW5kCisJCQkJ ICogbmV4dCAxMiBiaXRzIGZvciB0aGUgc291cmNlCisJCQkJICovCisJCQkJcmVxLmRhdGFbaV0g PSAhcG9ydF9pZAorCQkJCQk/IDAKKwkJCQkJOiBjcHVfdG9fbGUzMigKKwkJCQkJCXBvcnRfaWQg fAorCQkJCQkJY2hhbm5lbCB8CisJCQkJCQlzY2FybGV0dDJfbXV4X3NyY19udW1fdG9faWQoCisJ CQkJCQkJcG9ydHMsIHByaXZhdGUtPm11eFtqXQorCQkJCQkJKSA8PCAxMgorCQkJCQkgICk7CisK KwkJCS8qIHNraXAgcHJpdmF0ZS0+bXV4W2pdIGVudHJpZXMgbm90IG91dHB1dCAqLworCQkJaiAr PSBwb3J0c1twb3J0X3R5cGVdLm51bVtTQ0FSTEVUVDJfUE9SVF9PVVRdIC0KKwkJCSAgICAgcG9y dHNbcG9ydF90eXBlXS5udW1bcG9ydF9kaXJfcmF0ZV07CisJCX0KKworCQllcnIgPSBzY2FybGV0 dDJfdXNiKG1peGVyLCBTQ0FSTEVUVDJfVVNCX1NFVF9NVVgsCisJCQkJICAgICZyZXEsIChpICsg MSkgKiBzaXplb2YoX191MzIpLAorCQkJCSAgICBOVUxMLCAwKTsKKwkJaWYgKGVyciA8IDApCisJ CQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTZW5kIFVTQiBtZXNzYWdl IHRvIGdldCBtZXRlciBsZXZlbHMgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYl9nZXRfbWV0 ZXJfbGV2ZWxzKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwKKwkJCQkJICBfX3Ux NiAqbGV2ZWxzKQoreworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgeworCQlf X3UxNiBwYWQ7CisJCV9fdTE2IG51bV9tZXRlcnM7CisJCV9fdTMyIG1hZ2ljOworCX0gcmVxOwor CV9fdTMyIHJlc3BbU0NBUkxFVFQyX05VTV9NRVRFUlNdOworCWludCBpLCBlcnI7CisKKwlyZXEu cGFkID0gMDsKKwlyZXEubnVtX21ldGVycyA9IGNwdV90b19sZTE2KFNDQVJMRVRUMl9OVU1fTUVU RVJTKTsKKwlyZXEubWFnaWMgPSBjcHVfdG9fbGUzMihTQ0FSTEVUVDJfVVNCX01FVEVSX0xFVkVM U19HRVRfTUFHSUMpOworCWVyciA9IHNjYXJsZXR0Ml91c2IobWl4ZXIsIFNDQVJMRVRUMl9VU0Jf R0VUX01FVEVSX0xFVkVMUywKKwkJCSAgICAmcmVxLCBzaXplb2YocmVxKSwgcmVzcCwgc2l6ZW9m KHJlc3ApKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIGNvcHksIGNvbnZl cnQgdG8gdTE2ICovCisJZm9yIChpID0gMDsgaSA8IFNDQVJMRVRUMl9OVU1fTUVURVJTOyBpKysp CisJCWxldmVsc1tpXSA9IHJlc3BbaV07CisKKwlyZXR1cm4gMDsKK30KKworLyoqKiBDb250cm9s IEZ1bmN0aW9ucyAqKiovCisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgY29u dHJvbCAqLworc3RhdGljIGludCBhZGRfbmV3X2N0bChzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFj ZSAqbWl4ZXIsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbmNvbnRy b2wsCisJCSAgICAgICBpbnQgaW5kZXgsIGludCBjaGFubmVscywgY29uc3QgY2hhciAqbmFtZSwK KwkJICAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY3RsX3JldHVybikKK3sKKwlzdHJ1Y3Qg c25kX2tjb250cm9sICprY3RsOworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtOwor CWludCBlcnI7CisKKwllbGVtID0ga3phbGxvYyhzaXplb2YoKmVsZW0pLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWVsZW0pCisJCXJldHVybiAtRU5PTUVNOworCisJZWxlbS0+aGVhZC5taXhlciA9IG1p eGVyOworCWVsZW0tPmNvbnRyb2wgPSBpbmRleDsKKwllbGVtLT5oZWFkLmlkID0gaW5kZXg7CisJ ZWxlbS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKKworCWtjdGwgPSBzbmRfY3RsX25ldzEobmNvbnRy b2wsIGVsZW0pOworCWlmICgha2N0bCkgeworCQlrZnJlZShlbGVtKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCWtjdGwtPnByaXZhdGVfZnJlZSA9IHNuZF91c2JfbWl4ZXJfZWxlbV9mcmVlOwor CisJc3RybGNweShrY3RsLT5pZC5uYW1lLCBuYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwor CisJZXJyID0gc25kX3VzYl9taXhlcl9hZGRfY29udHJvbCgmZWxlbS0+aGVhZCwga2N0bCk7CisJ aWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoa2N0bF9yZXR1cm4pCisJCSprY3Rs X3JldHVybiA9IGtjdGw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKiBBbmFsb2d1ZSBMaW5lIE91 dCBWb2x1bWUgQ29udHJvbHMgKioqLworCisvKiBmaXJzdC10aW1lIGluaXRpYWxpc2F0aW9uIG9m IHZvbHVtZXMgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX2luaXRfdm9sdW1lcyhzdHJ1Y3QgdXNi X21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEg KnByaXZhdGUgPSBtaXhlci0+Y2hpcC0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQy X3BvcnRzICpwb3J0cyA9IHByaXZhdGUtPmluZm8tPnBvcnRzOworCWludCBudW1fbGluZV9vdXQg PQorCQlwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX0FOQUxPR1VFXS5udW1bU0NBUkxFVFQyX1BP UlRfT1VUXTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX3VzYl92b2x1bWVfc3RhdHVzIHZvbHVtZV9zdGF0 dXM7CisJaW50IGVyciwgaTsKKworCWVyciA9IHNjYXJsZXR0Ml91c2JfZ2V0X3ZvbHVtZV9zdGF0 dXMobWl4ZXIsICZ2b2x1bWVfc3RhdHVzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsK KworCXByaXZhdGUtPm1hc3Rlcl92b2wgPSBjbGFtcCgKKwkJdm9sdW1lX3N0YXR1cy5tYXN0ZXJf dm9sICsgU0NBUkxFVFRfVk9MVU1FX0JJQVMsCisJCTAsIFNDQVJMRVRUX1ZPTFVNRV9CSUFTKTsK KworCWZvciAoaSA9IDA7IGkgPCBudW1fbGluZV9vdXQ7IGkrKykgeworCQlpbnQgdm9sdW1lOwor CisJCXByaXZhdGUtPnZvbF9zd19od19zd2l0Y2hbaV0gPSAhIXZvbHVtZV9zdGF0dXMuc3dfaHdf c3dpdGNoW2ldOworCisJCXZvbHVtZSA9IHByaXZhdGUtPnZvbF9zd19od19zd2l0Y2hbaV0KKwkJ CSAgID8gdm9sdW1lX3N0YXR1cy5tYXN0ZXJfdm9sCisJCQkgICA6IHZvbHVtZV9zdGF0dXMuc3df dm9sW2ldOworCQl2b2x1bWUgPSBjbGFtcCh2b2x1bWUgKyBTQ0FSTEVUVF9WT0xVTUVfQklBUywK KwkJCSAgICAgICAwLCBTQ0FSTEVUVF9WT0xVTUVfQklBUyk7CisJCXByaXZhdGUtPnZvbFtpXSA9 IHZvbHVtZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgU0NBUkxFVFQyX0JVVFRPTl9DT1VOVDsg aSsrKQorCQlwcml2YXRlLT5idXR0b25zW2ldID0gISF2b2x1bWVfc3RhdHVzLmJ1dHRvbnNbaV07 CisKKwlyZXR1cm4gMDsKK30KKworLyogdXBkYXRlIGhhcmR3YXJlIHZvbHVtZSBjb250cm9scyBh ZnRlciByZWNlaXZpbmcgbm90aWZpY2F0aW9uIHRoYXQKKyAqIHRoZXkgaGF2ZSBjaGFuZ2VkCisg Ki8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VwZGF0ZV92b2x1bWVzKHN0cnVjdCB1c2JfbWl4ZXJf aW50ZXJmYWNlICptaXhlcikKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0 ZSA9IG1peGVyLT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMg KnBvcnRzID0gcHJpdmF0ZS0+aW5mby0+cG9ydHM7CisJc3RydWN0IHNjYXJsZXR0Ml91c2Jfdm9s dW1lX3N0YXR1cyB2b2x1bWVfc3RhdHVzOworCWludCBudW1fbGluZV9vdXQgPQorCQlwb3J0c1tT Q0FSTEVUVDJfUE9SVF9UWVBFX0FOQUxPR1VFXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VUXTsKKwlp bnQgZXJyLCBpOworCisJcHJpdmF0ZS0+dm9sX3VwZGF0ZWQgPSAwOworCisJZXJyID0gc2Nhcmxl dHQyX3VzYl9nZXRfdm9sdW1lX3N0YXR1cyhtaXhlciwgJnZvbHVtZV9zdGF0dXMpOworCWlmIChl cnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcHJpdmF0ZS0+bWFzdGVyX3ZvbCA9IGNsYW1wKAor CQl2b2x1bWVfc3RhdHVzLm1hc3Rlcl92b2wgKyBTQ0FSTEVUVF9WT0xVTUVfQklBUywKKwkJMCwg U0NBUkxFVFRfVk9MVU1FX0JJQVMpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9saW5lX291dDsg aSsrKSB7CisJCWlmIChwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNoW2ldKQorCQkJcHJpdmF0ZS0+ dm9sW2ldID0gcHJpdmF0ZS0+bWFzdGVyX3ZvbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgU0NB UkxFVFQyX0JVVFRPTl9DT1VOVDsgaSsrKQorCQlwcml2YXRlLT5idXR0b25zW2ldID0gISF2b2x1 bWVfc3RhdHVzLmJ1dHRvbnNbaV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2Fy bGV0dDJfdm9sdW1lX2N0bF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAg ICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCB1c2JfbWl4ZXJf ZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRhOworCisJdWluZm8tPnR5cGUgPSBT TkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gZWxlbS0+Y2hhbm5l bHM7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdl ci5tYXggPSBTQ0FSTEVUVF9WT0xVTUVfQklBUzsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5zdGVw ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfbWFzdGVyX3ZvbHVt ZV9jdGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJCSAgIHN0cnVjdCBzbmRf Y3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZv ICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRh ICpwcml2YXRlID0gZWxlbS0+aGVhZC5taXhlci0+Y2hpcC0+cHJpdmF0ZTsKKworCWlmIChwcml2 YXRlLT52b2xfdXBkYXRlZCkgeworCQltdXRleF9sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsK KwkJc2NhcmxldHQyX3VwZGF0ZV92b2x1bWVzKGVsZW0tPmhlYWQubWl4ZXIpOworCQltdXRleF91 bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCX0KKworCXVjb250cm9sLT52YWx1ZS5pbnRl Z2VyLnZhbHVlWzBdID0gcHJpdmF0ZS0+bWFzdGVyX3ZvbDsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBzY2FybGV0dDJfdm9sdW1lX2N0bF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0 bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3Ry dWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3RsLT5wcml2YXRlX2RhdGE7CisJc3Ry dWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBlbGVtLT5oZWFkLm1peGVyLT5jaGlw LT5wcml2YXRlOworCWludCBpbmRleCA9IGVsZW0tPmNvbnRyb2w7CisKKwlpZiAocHJpdmF0ZS0+ dm9sX3VwZGF0ZWQpIHsKKwkJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJCXNj YXJsZXR0Ml91cGRhdGVfdm9sdW1lcyhlbGVtLT5oZWFkLm1peGVyKTsKKwkJbXV0ZXhfdW5sb2Nr KCZwcml2YXRlLT5kYXRhX211dGV4KTsKKwl9CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52 YWx1ZVswXSA9IHByaXZhdGUtPnZvbFtpbmRleF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgc2NhcmxldHQyX3ZvbHVtZV9jdGxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJ CQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1 c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBz Y2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gZWxlbS0+aGVhZC5taXhlci0+Y2hpcC0+cHJp dmF0ZTsKKwlpbnQgaW5kZXggPSBlbGVtLT5jb250cm9sOworCWludCBvdmFsLCB2YWwsIGVycjsK KworCW11dGV4X2xvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCisJb3ZhbCA9IHByaXZhdGUt PnZvbFtpbmRleF07CisJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisK KwlpZiAob3ZhbCA9PSB2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4 KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpdmF0ZS0+dm9sW2luZGV4XSA9IHZhbDsKKwllcnIg PSBzY2FybGV0dDJfdXNiX3NldF9saW5lX291dHB1dF92b2x1bWUoZWxlbS0+aGVhZC5taXhlciwK KwkJCQkJCSAgIGluZGV4LAorCQkJCQkJICAgdmFsIC0gU0NBUkxFVFRfVk9MVU1FX0JJQVMpOwor CW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJcmV0dXJuIGVyciA8IDAgPyBl cnIgOiAxOworfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTUlOTUFYKAorCWRiX3Nj YWxlX3NjYXJsZXR0X2dhaW4sIC1TQ0FSTEVUVF9WT0xVTUVfQklBUyAqIDEwMCwgMAorKTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNjYXJsZXR0Ml9tYXN0ZXJfdm9s dW1lX2N0bCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNj ZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FD Q0VTU19UTFZfUkVBRCwKKwkubmFtZSA9ICIiLAorCS5pbmZvID0gc2NhcmxldHQyX3ZvbHVtZV9j dGxfaW5mbywKKwkuZ2V0ICA9IHNjYXJsZXR0Ml9tYXN0ZXJfdm9sdW1lX2N0bF9nZXQsCisJLnBy aXZhdGVfdmFsdWUgPSAwLCAvKiBtYXggdmFsdWUgKi8KKwkudGx2ID0geyAucCA9IGRiX3NjYWxl X3NjYXJsZXR0X2dhaW4gfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xf bmV3IHNjYXJsZXR0Ml9saW5lX291dF92b2x1bWVfY3RsID0geworCS5pZmFjZSA9IFNORFJWX0NU TF9FTEVNX0lGQUNFX01JWEVSLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVB RFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLm5hbWUgPSAi IiwKKwkuaW5mbyA9IHNjYXJsZXR0Ml92b2x1bWVfY3RsX2luZm8sCisJLmdldCAgPSBzY2FybGV0 dDJfdm9sdW1lX2N0bF9nZXQsCisJLnB1dCAgPSBzY2FybGV0dDJfdm9sdW1lX2N0bF9wdXQsCisJ LnByaXZhdGVfdmFsdWUgPSAwLCAvKiBtYXggdmFsdWUgKi8KKwkudGx2ID0geyAucCA9IGRiX3Nj YWxlX3NjYXJsZXR0X2dhaW4gfQorfTsKKworLyoqKiBIVy9TVyBWb2x1bWUgU3dpdGNoIENvbnRy b2xzICoqKi8KKworc3RhdGljIGludCBzY2FybGV0dDJfc3dfaHdfZW51bV9jdGxfaW5mbyhzdHJ1 Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1 aW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmFsdWVzWzJdID0geworCQkiU1ci LCAiSFciCisJfTsKKworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyh1aW5mbywgMSwgMiwgdmFs dWVzKTsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfc3dfaHdfZW51bV9jdGxfZ2V0KHN0cnVj dCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVj b250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJp dmF0ZV9kYXRhOworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gZWxlbS0+ aGVhZC5taXhlci0+Y2hpcC0+cHJpdmF0ZTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVk Lml0ZW1bMF0gPQorCQlwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNoW2VsZW0tPmNvbnRyb2xdOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9zd19od19lbnVtX2N0bF9wdXQo c3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1 ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3Rs LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBl bGVtLT5oZWFkLm1peGVyLT5jaGlwLT5wcml2YXRlOworCisJaW50IGluZGV4ID0gZWxlbS0+Y29u dHJvbDsKKwlpbnQgb3ZhbCwgdmFsLCBlcnI7CisKKwltdXRleF9sb2NrKCZwcml2YXRlLT5kYXRh X211dGV4KTsKKworCW92YWwgPSBwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNoW2luZGV4XTsKKwl2 YWwgPSAhIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKG92YWwgPT0g dmFsKSB7CisJCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJCXJldHVybiAw OworCX0KKworCXByaXZhdGUtPnZvbF9zd19od19zd2l0Y2hbaW5kZXhdID0gdmFsOworCisJLyog Q2hhbmdlIGFjY2VzcyBtb2RlIHRvIFJPIChoYXJkd2FyZSBjb250cm9sbGVkIHZvbHVtZSkKKwkg KiBvciBSVyAoc29mdHdhcmUgY29udHJvbGxlZCB2b2x1bWUpCisJICovCisJaWYgKHZhbCkKKwkJ cHJpdmF0ZS0+dm9sX2N0bHNbaW5kZXhdLT52ZFswXS5hY2Nlc3MgJj0KKwkJCX5TTkRSVl9DVExf RUxFTV9BQ0NFU1NfV1JJVEU7CisJZWxzZQorCQlwcml2YXRlLT52b2xfY3Rsc1tpbmRleF0tPnZk WzBdLmFjY2VzcyB8PQorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFOworCisJLyogUmVz ZXQgdm9sdW1lIHRvIG1hc3RlciB2b2x1bWUgKi8KKwlwcml2YXRlLT52b2xbaW5kZXhdID0gcHJp dmF0ZS0+bWFzdGVyX3ZvbDsKKworCS8qIFNldCBTVyB2b2x1bWUgdG8gY3VycmVudCBIVyB2b2x1 bWUgKi8KKwllcnIgPSBzY2FybGV0dDJfdXNiX3NldF9saW5lX291dHB1dF92b2x1bWUoCisJCWVs ZW0tPmhlYWQubWl4ZXIsIGluZGV4LAorCQlwcml2YXRlLT5tYXN0ZXJfdm9sIC0gU0NBUkxFVFRf Vk9MVU1FX0JJQVMpOworCWlmIChlcnIgPCAwKSB7CisJCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ ZGF0YV9tdXRleCk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogTm90aWZ5IG9mIFJPL1JXIGNo YW5nZSAqLworCXNuZF9jdGxfbm90aWZ5KGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPmNhcmQsCisJ CSAgICAgICBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLAorCQkgICAgICAgJnByaXZhdGUtPnZv bF9jdGxzW2luZGV4XS0+aWQpOworCisJLyogU2VuZCBTVy9IVyBzd2l0Y2ggY2hhbmdlIHRvIHRo ZSBkZXZpY2UgKi8KKwllcnIgPSBzY2FybGV0dDJfdXNiX3NldF9tb25pdG9yX3ZvbHVtZV9zd2l0 Y2goZWxlbS0+aGVhZC5taXhlciwKKwkJCQkJCSAgICAgIGluZGV4LCB2YWwpOworCW11dGV4X3Vu bG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNjYXJsZXR0Ml9zd19od19lbnVtX2N0bCA9IHsK KwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICIiLAorCS5p bmZvID0gc2NhcmxldHQyX3N3X2h3X2VudW1fY3RsX2luZm8sCisJLmdldCAgPSBzY2FybGV0dDJf c3dfaHdfZW51bV9jdGxfZ2V0LAorCS5wdXQgID0gc2NhcmxldHQyX3N3X2h3X2VudW1fY3RsX3B1 dCwKK307CisKKy8qKiogTXV0ZS9EaW0gQ29udHJvbHMgKioqLworCitzdGF0aWMgaW50IHNjYXJs ZXR0Ml9idXR0b25fY3RsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgICBz dHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVy X2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQy X2NoaXBfZGF0YSAqcHJpdmF0ZSA9IGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisK KwlpZiAocHJpdmF0ZS0+dm9sX3VwZGF0ZWQpIHsKKwkJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+ZGF0 YV9tdXRleCk7CisJCXNjYXJsZXR0Ml91cGRhdGVfdm9sdW1lcyhlbGVtLT5oZWFkLm1peGVyKTsK KwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsKKwl9CisKKwl1Y29udHJvbC0+ dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gcHJpdmF0ZS0+YnV0dG9uc1tlbGVtLT5jb250cm9s XTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3 IHNjYXJsZXR0Ml9idXR0b25fY3RsID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNF X01JWEVSLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKKwkubmFtZSA9 ICIiLAorCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkuZ2V0ICA9IHNjYXJs ZXR0Ml9idXR0b25fY3RsX2dldAorfTsKKworLyoqKiBDcmVhdGUgdGhlIHZvbHVtZSBhbmQgdm9s dW1lIHN3aXRjaCBjb250cm9scyAqKiovCisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX2FkZF9saW5l X291dF9jdGxzKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKK3sKKwlzdHJ1Y3Qg c2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1peGVyLT5jaGlwLT5wcml2YXRlOworCWNv bnN0IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8gKmluZm8gPSBwcml2YXRlLT5pbmZvOwor CWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMgKnBvcnRzID0gaW5mby0+cG9ydHM7CisJaW50 IG51bV9saW5lX291dCA9CisJCXBvcnRzW1NDQVJMRVRUMl9QT1JUX1RZUEVfQU5BTE9HVUVdLm51 bVtTQ0FSTEVUVDJfUE9SVF9PVVRdOworCWludCBlcnIsIGk7CisJY2hhciBteFtTTkRSVl9DVExf RUxFTV9JRF9OQU1FX01BWExFTl07CisKKwkvKiBBZGQgUi9PIEhXIHZvbHVtZSBjb250cm9sICov CisJc25wcmludGYobXgsIHNpemVvZihteCksICJNYXN0ZXIgSFcgUGxheWJhY2sgVm9sdW1lIik7 CisJZXJyID0gYWRkX25ld19jdGwobWl4ZXIsICZzY2FybGV0dDJfbWFzdGVyX3ZvbHVtZV9jdGws CisJCQkgIDAsIDEsIG14LCAmcHJpdmF0ZS0+bWFzdGVyX3ZvbF9jdGwpOworCWlmIChlcnIgPCAw KQorCQlyZXR1cm4gZXJyOworCisJLyogQWRkIHZvbHVtZSBjb250cm9scyAqLworCWZvciAoaSA9 IDA7IGkgPCBudW1fbGluZV9vdXQ7IGkrKykgeworCisJCS8qIEZhZGVyICovCisJCWlmIChpbmZv LT5saW5lX291dF9kZXNjcnNbaV0pCisJCQlzbnByaW50ZihteCwgc2l6ZW9mKG14KSwKKwkJCQkg IkxpbmUgJTAyZCAoJXMpIFBsYXliYWNrIFZvbHVtZSIsCisJCQkJIGkgKyAxLCBpbmZvLT5saW5l X291dF9kZXNjcnNbaV0pOworCQllbHNlCisJCQlzbnByaW50ZihteCwgc2l6ZW9mKG14KSwKKwkJ CQkgIkxpbmUgJTAyZCBQbGF5YmFjayBWb2x1bWUiLAorCQkJCSBpICsgMSk7CisJCWVyciA9IGFk ZF9uZXdfY3RsKG1peGVyLCAmc2NhcmxldHQyX2xpbmVfb3V0X3ZvbHVtZV9jdGwsCisJCQkJICBp LCAxLCBteCwgJnByaXZhdGUtPnZvbF9jdGxzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1 cm4gZXJyOworCisJCS8qIE1ha2UgdGhlIGZhZGVyIHJlYWQtb25seSBpZiB0aGUgU1cvSFcgc3dp dGNoIGlzIHNldCB0byBIVyAqLworCQlpZiAocHJpdmF0ZS0+dm9sX3N3X2h3X3N3aXRjaFtpXSkK KwkJCXByaXZhdGUtPnZvbF9jdGxzW2ldLT52ZFswXS5hY2Nlc3MgJj0KKwkJCQl+U05EUlZfQ1RM X0VMRU1fQUNDRVNTX1dSSVRFOworCisJCS8qIFNXL0hXIFN3aXRjaCAqLworCQlzbnByaW50Ziht eCwgc2l6ZW9mKG14KSwKKwkJCSAiTGluZSBPdXQgJTAyZCBWb2x1bWUgQ29udHJvbCBQbGF5YmFj ayBFbnVtIiwKKwkJCSBpICsgMSk7CisJCWVyciA9IGFkZF9uZXdfY3RsKG1peGVyLCAmc2Nhcmxl dHQyX3N3X2h3X2VudW1fY3RsLAorCQkJCSAgaSwgMSwgbXgsIE5VTEwpOworCQlpZiAoZXJyIDwg MCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogQWRkIGJ1dHRvbiBjb250cm9scyAqLworCWZv ciAoaSA9IDA7IGkgPCBTQ0FSTEVUVDJfQlVUVE9OX0NPVU5UOyBpKyspIHsKKwkJZXJyID0gYWRk X25ld19jdGwobWl4ZXIsICZzY2FybGV0dDJfYnV0dG9uX2N0bCwKKwkJCQkgIGksIDEsIHNjYXJs ZXR0Ml9idXR0b25fbmFtZXNbaV0sCisJCQkJICAmcHJpdmF0ZS0+YnV0dG9uX2N0bHNbaV0pOwor CQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8q KiogTWl4ZXIgVm9sdW1lIENvbnRyb2xzICoqKi8KKworc3RhdGljIGludCBzY2FybGV0dDJfbWl4 ZXJfY3RsX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkgICAgc3RydWN0IHNu ZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAq ZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VM RU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IGVsZW0tPmNoYW5uZWxzOworCXVpbmZv LT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gU0NB UkxFVFRfTUlYRVJfTUFYX1ZBTFVFOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnN0ZXAgPSAxOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9taXhlcl9jdGxfZ2V0KHN0cnVj dCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAq dWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3RsLT5w cml2YXRlX2RhdGE7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBlbGVt LT5oZWFkLm1peGVyLT5jaGlwLT5wcml2YXRlOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIu dmFsdWVbMF0gPSBwcml2YXRlLT5taXhbZWxlbS0+Y29udHJvbF07CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc2NhcmxldHQyX21peGVyX2N0bF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAq a2N0bCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlz dHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKwlz dHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IGVsZW0tPmhlYWQubWl4ZXItPmNo aXAtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9kZXZpY2VfaW5mbyAqaW5mbyA9 IHByaXZhdGUtPmluZm87CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9wb3J0cyAqcG9ydHMgPSBp bmZvLT5wb3J0czsKKwlpbnQgb3ZhbCwgdmFsLCBudW1fbWl4ZXJfaW4sIG1peF9udW0sIGVycjsK KworCW11dGV4X2xvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCisJb3ZhbCA9IHByaXZhdGUt Pm1peFtlbGVtLT5jb250cm9sXTsKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1 ZVswXTsKKwludW1fbWl4ZXJfaW4gPSBwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX01JWF0ubnVt W1NDQVJMRVRUMl9QT1JUX09VVF07CisJbWl4X251bSA9IGVsZW0tPmNvbnRyb2wgLyBudW1fbWl4 ZXJfaW47CisKKwlpZiAob3ZhbCA9PSB2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5k YXRhX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpdmF0ZS0+bWl4W2VsZW0tPmNvbnRy b2xdID0gdmFsOworCWVyciA9IHNjYXJsZXR0Ml91c2Jfc2V0X21peChlbGVtLT5oZWFkLm1peGVy LCBtaXhfbnVtKTsKKwltdXRleF91bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCXJldHVy biBlcnIgPCAwID8gZXJyIDogMTsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX01J Tk1BWCgKKwlkYl9zY2FsZV9zY2FybGV0dF9taXhlciwKKwlTQ0FSTEVUVF9NSVhFUl9NSU5fREIg KiAxMDAsCisJU0NBUkxFVFRfTUlYRVJfTUFYX0RCICogMTAwCispOworCitzdGF0aWMgY29uc3Qg c3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2NhcmxldHQyX21peGVyX2N0bCA9IHsKKwkuaWZhY2Ug PSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1f QUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAor CS5uYW1lID0gIiIsCisJLmluZm8gPSBzY2FybGV0dDJfbWl4ZXJfY3RsX2luZm8sCisJLmdldCAg PSBzY2FybGV0dDJfbWl4ZXJfY3RsX2dldCwKKwkucHV0ICA9IHNjYXJsZXR0Ml9taXhlcl9jdGxf cHV0LAorCS5wcml2YXRlX3ZhbHVlID0gU0NBUkxFVFRfTUlYRVJfTUFYX0RCLCAvKiBtYXggdmFs dWUgKi8KKwkudGx2ID0geyAucCA9IGRiX3NjYWxlX3NjYXJsZXR0X21peGVyIH0KK307CisKK3N0 YXRpYyBpbnQgc2NhcmxldHQyX2FkZF9taXhlcl9jdGxzKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJm YWNlICptaXhlcikKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1p eGVyLT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMgKnBvcnRz ID0gcHJpdmF0ZS0+aW5mby0+cG9ydHM7CisJaW50IGVyciwgaSwgajsKKwlpbnQgaW5kZXg7CisJ Y2hhciBteFtTTkRSVl9DVExfRUxFTV9JRF9OQU1FX01BWExFTl07CisKKwlpbnQgbnVtX2lucHV0 cyA9IHBvcnRzW1NDQVJMRVRUMl9QT1JUX1RZUEVfTUlYXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VU XTsKKwlpbnQgbnVtX291dHB1dHMgPSBwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX01JWF0ubnVt W1NDQVJMRVRUMl9QT1JUX0lOXTsKKworCWZvciAoaSA9IDAsIGluZGV4ID0gMDsgaSA8IG51bV9v dXRwdXRzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IG51bV9pbnB1dHM7IGorKywgaW5kZXgr KykgeworCQkJc25wcmludGYobXgsIHNpemVvZihteCksCisJCQkJICJNaXggJWMgSW5wdXQgJTAy ZCBQbGF5YmFjayBWb2x1bWUiLAorCQkJCSAnQScgKyBpLCBqICsgMSk7CisJCQllcnIgPSBhZGRf bmV3X2N0bChtaXhlciwgJnNjYXJsZXR0Ml9taXhlcl9jdGwsCisJCQkJCSAgaW5kZXgsIDEsIG14 LCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoqKiBNdXggU291cmNlIFNlbGVjdGlvbiBDb250cm9scyAqKiovCisK K3N0YXRpYyBpbnQgc2NhcmxldHQyX211eF9zcmNfZW51bV9jdGxfaW5mbyhzdHJ1Y3Qgc25kX2tj b250cm9sICprY3RsLAorCQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQor eworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRh OworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gZWxlbS0+aGVhZC5taXhl ci0+Y2hpcC0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cyA9 IHByaXZhdGUtPmluZm8tPnBvcnRzOworCXVuc2lnbmVkIGludCBpdGVtID0gdWluZm8tPnZhbHVl LmVudW1lcmF0ZWQuaXRlbTsKKwlpbnQgaXRlbXMgPSBwcml2YXRlLT5udW1fbXV4X3NyY3M7CisJ aW50IHBvcnRfdHlwZTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVN RVJBVEVEOworCXVpbmZvLT5jb3VudCA9IGVsZW0tPmNoYW5uZWxzOworCXVpbmZvLT52YWx1ZS5l bnVtZXJhdGVkLml0ZW1zID0gaXRlbXM7CisKKwlpZiAoaXRlbSA+PSBpdGVtcykKKwkJaXRlbSA9 IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBpdGVtcyAtIDE7CisKKwlmb3IgKHBvcnRf dHlwZSA9IDA7CisJICAgICBwb3J0X3R5cGUgPCBTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5UOwor CSAgICAgcG9ydF90eXBlKyspIHsKKwkJaWYgKGl0ZW0gPCBwb3J0c1twb3J0X3R5cGVdLm51bVtT Q0FSTEVUVDJfUE9SVF9JTl0pIHsKKwkJCXNwcmludGYodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQu bmFtZSwKKwkJCQlwb3J0c1twb3J0X3R5cGVdLnNyY19kZXNjciwKKwkJCQlpdGVtICsgcG9ydHNb cG9ydF90eXBlXS5zcmNfbnVtX29mZnNldCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpdGVtIC09 IHBvcnRzW3BvcnRfdHlwZV0ubnVtW1NDQVJMRVRUMl9QT1JUX0lOXTsKKwl9CisKKwlyZXR1cm4g LUVJTlZBTDsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfbXV4X3NyY19lbnVtX2N0bF9nZXQo c3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3Zh bHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtj dGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9 IGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51 bWVyYXRlZC5pdGVtWzBdID0gcHJpdmF0ZS0+bXV4W2VsZW0tPmNvbnRyb2xdOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9tdXhfc3JjX2VudW1fY3RsX3B1dChzdHJ1Y3Qg c25kX2tjb250cm9sICprY3RsLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVj b250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJp dmF0ZV9kYXRhOworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gZWxlbS0+ aGVhZC5taXhlci0+Y2hpcC0+cHJpdmF0ZTsKKwlpbnQgaW5kZXggPSBlbGVtLT5jb250cm9sOwor CWludCBvdmFsLCB2YWwsIGVycjsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgp OworCisJb3ZhbCA9IHByaXZhdGUtPm11eFtpbmRleF07CisJdmFsID0gY2xhbXAodWNvbnRyb2wt PnZhbHVlLmludGVnZXIudmFsdWVbMF0sCisJCSAgICAwTCwgcHJpdmF0ZS0+bnVtX211eF9zcmNz IC0gMUwpOworCisJaWYgKG92YWwgPT0gdmFsKSB7CisJCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ ZGF0YV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCXByaXZhdGUtPm11eFtpbmRleF0gPSB2 YWw7CisJZXJyID0gc2NhcmxldHQyX3VzYl9zZXRfbXV4KGVsZW0tPmhlYWQubWl4ZXIpOworCW11 dGV4X3VubG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJcmV0dXJuIGVyciA8IDAgPyBlcnIg OiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2NhcmxldHQy X211eF9zcmNfZW51bV9jdGwgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlY RVIsCisJLm5hbWUgPSAiIiwKKwkuaW5mbyA9IHNjYXJsZXR0Ml9tdXhfc3JjX2VudW1fY3RsX2lu Zm8sCisJLmdldCAgPSBzY2FybGV0dDJfbXV4X3NyY19lbnVtX2N0bF9nZXQsCisJLnB1dCAgPSBz Y2FybGV0dDJfbXV4X3NyY19lbnVtX2N0bF9wdXQsCit9OworCitzdGF0aWMgaW50IHNjYXJsZXR0 Ml9hZGRfbXV4X2VudW1zKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKK3sKKwlz dHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1peGVyLT5jaGlwLT5wcml2YXRl OworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMgKnBvcnRzID0gcHJpdmF0ZS0+aW5mby0+ cG9ydHM7CisJaW50IHBvcnRfdHlwZSwgY2hhbm5lbCwgaTsKKworCWZvciAoaSA9IDAsIHBvcnRf dHlwZSA9IDA7CisJICAgICBwb3J0X3R5cGUgPCBTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5UOwor CSAgICAgcG9ydF90eXBlKyspIHsKKwkJZm9yIChjaGFubmVsID0gMDsKKwkJICAgICBjaGFubmVs IDwgcG9ydHNbcG9ydF90eXBlXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VUXTsKKwkJICAgICBjaGFu bmVsKyssIGkrKykgeworCQkJaW50IGVycjsKKwkJCWNoYXIgbXhbU05EUlZfQ1RMX0VMRU1fSURf TkFNRV9NQVhMRU5dOworCQkJY29uc3QgY2hhciAqY29uc3QgZGVzY3IgPSBwb3J0c1twb3J0X3R5 cGVdLmRzdF9kZXNjcjsKKworCQkJc25wcmludGYobXgsIHNpemVvZihteCkgLSA1LCBkZXNjciwg Y2hhbm5lbCArIDEpOworCQkJc3RyY2F0KG14LCAiIEVudW0iKTsKKworCQkJZXJyID0gYWRkX25l d19jdGwobWl4ZXIsCisJCQkJCSAgJnNjYXJsZXR0Ml9tdXhfc3JjX2VudW1fY3RsLAorCQkJCQkg IGksIDEsIG14LCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0K Kwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKiBNZXRlciBDb250cm9scyAqKiovCisKK3N0YXRp YyBpbnQgc2NhcmxldHQyX21ldGVyX2N0bF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGws CisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IHVz Yl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3RsLT5wcml2YXRlX2RhdGE7CisKKwl1aW5mby0+ dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSBlbGVt LT5jaGFubmVsczsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1 ZS5pbnRlZ2VyLm1heCA9IDQwOTU7CisJdWluZm8tPnZhbHVlLmludGVnZXIuc3RlcCA9IDE7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX21ldGVyX2N0bF9nZXQoc3RydWN0 IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1 Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnBy aXZhdGVfZGF0YTsKKwlfX3UxNiBtZXRlcl9sZXZlbHNbU0NBUkxFVFQyX05VTV9NRVRFUlNdOwor CWludCBpLCBlcnI7CisKKwllcnIgPSBzY2FybGV0dDJfdXNiX2dldF9tZXRlcl9sZXZlbHMoZWxl bS0+aGVhZC5taXhlciwgbWV0ZXJfbGV2ZWxzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVy cjsKKworCWZvciAoaSA9IDA7IGkgPCBlbGVtLT5jaGFubmVsczsgaSsrKQorCQl1Y29udHJvbC0+ dmFsdWUuaW50ZWdlci52YWx1ZVtpXSA9IG1ldGVyX2xldmVsc1tpXTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2NhcmxldHQyX21ldGVy X2N0bCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJLmFjY2VzcyA9 IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFU SUxFLAorCS5uYW1lID0gIiIsCisJLmluZm8gPSBzY2FybGV0dDJfbWV0ZXJfY3RsX2luZm8sCisJ LmdldCAgPSBzY2FybGV0dDJfbWV0ZXJfY3RsX2dldAorfTsKKworc3RhdGljIGludCBzY2FybGV0 dDJfYWRkX21ldGVyX2N0bChzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJ cmV0dXJuIGFkZF9uZXdfY3RsKG1peGVyLCAmc2NhcmxldHQyX21ldGVyX2N0bCwKKwkJCSAgIDAs IFNDQVJMRVRUMl9OVU1fTUVURVJTLCAiTGV2ZWwgTWV0ZXIiLCBOVUxMKTsKK30KKworLyoqKiBJ bml0aWFsaXNhdGlvbiAqKiovCisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX2NvdW50X211eF9zcmNz KGNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMgKnBvcnRzKQoreworCWludCBwb3J0X3R5cGUs IGNvdW50ID0gMDsKKworCWZvciAocG9ydF90eXBlID0gMDsKKwkgICAgIHBvcnRfdHlwZSA8IFND QVJMRVRUMl9QT1JUX1RZUEVfQ09VTlQ7CisJICAgICBwb3J0X3R5cGUrKykKKwkJY291bnQgKz0g cG9ydHNbcG9ydF90eXBlXS5udW1bU0NBUkxFVFQyX1BPUlRfSU5dOworCisJcmV0dXJuIGNvdW50 OworfQorCisvKiBEZWZhdWx0IHJvdXRpbmcgY29ubmVjdHMgUENNIG91dHB1dHMgYW5kIGlucHV0 cyB0byBBbmFsb2d1ZSwKKyAqIFMvUERJRiwgdGhlbiBBREFUCisgKi8KK3N0YXRpYyB2b2lkIHNj YXJsZXR0Ml9pbml0X3JvdXRpbmcoX191OCAqbXV4LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzY2Fy bGV0dDJfcG9ydHMgKnBvcnRzKQoreworCWludCBpLCBpbnB1dF9udW0sIGlucHV0X2NvdW50LCBw b3J0X3R5cGU7CisJaW50IG91dHB1dF9udW0sIG91dHB1dF9jb3VudCwgcG9ydF90eXBlX2Nvbm5l Y3RfbnVtOworCisJc3RhdGljIGNvbnN0IGludCBjb25uZWN0X29yZGVyW10gPSB7CisJCVNDQVJM RVRUMl9QT1JUX1RZUEVfQU5BTE9HVUUsCisJCVNDQVJMRVRUMl9QT1JUX1RZUEVfU1BESUYsCisJ CVNDQVJMRVRUMl9QT1JUX1RZUEVfQURBVCwKKwkJLTEKKwl9OworCisJLyogQXNzaWduIFBDTSBp bnB1dHMgKHJvdXRpbmcgb3V0cHV0cykgKi8KKwlvdXRwdXRfbnVtID0gc2NhcmxldHQyX2dldF9w b3J0X3N0YXJ0X251bShwb3J0cywKKwkJCQkJCSAgU0NBUkxFVFQyX1BPUlRfT1VULAorCQkJCQkJ ICBTQ0FSTEVUVDJfUE9SVF9UWVBFX1BDTSk7CisJb3V0cHV0X2NvdW50ID0gcG9ydHNbU0NBUkxF VFQyX1BPUlRfVFlQRV9QQ01dLm51bVtTQ0FSTEVUVDJfUE9SVF9PVVRdOworCisJZm9yIChwb3J0 X3R5cGUgPSBjb25uZWN0X29yZGVyW3BvcnRfdHlwZV9jb25uZWN0X251bSA9IDBdOworCSAgICAg cG9ydF90eXBlID49IDA7CisJICAgICBwb3J0X3R5cGUgPSBjb25uZWN0X29yZGVyWysrcG9ydF90 eXBlX2Nvbm5lY3RfbnVtXSkgeworCQlpbnB1dF9udW0gPSBzY2FybGV0dDJfZ2V0X3BvcnRfc3Rh cnRfbnVtKAorCQkJcG9ydHMsIFNDQVJMRVRUMl9QT1JUX0lOLCBwb3J0X3R5cGUpOworCQlpbnB1 dF9jb3VudCA9IHBvcnRzW3BvcnRfdHlwZV0ubnVtW1NDQVJMRVRUMl9QT1JUX0lOXTsKKwkJZm9y IChpID0gMDsKKwkJICAgICBpIDwgaW5wdXRfY291bnQgJiYgb3V0cHV0X2NvdW50OworCQkgICAg IGkrKywgb3V0cHV0X2NvdW50LS0pCisJCQltdXhbb3V0cHV0X251bSsrXSA9IGlucHV0X251bSsr OworCX0KKworCS8qIEFzc2lnbiBQQ00gb3V0cHV0cyAocm91dGluZyBpbnB1dHMpICovCisJaW5w dXRfbnVtID0gc2NhcmxldHQyX2dldF9wb3J0X3N0YXJ0X251bShwb3J0cywKKwkJCQkJCSBTQ0FS TEVUVDJfUE9SVF9JTiwKKwkJCQkJCSBTQ0FSTEVUVDJfUE9SVF9UWVBFX1BDTSk7CisJaW5wdXRf Y291bnQgPSBwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX1BDTV0ubnVtW1NDQVJMRVRUMl9QT1JU X0lOXTsKKworCWZvciAocG9ydF90eXBlID0gY29ubmVjdF9vcmRlcltwb3J0X3R5cGVfY29ubmVj dF9udW0gPSAwXTsKKwkgICAgIHBvcnRfdHlwZSA+PSAwOworCSAgICAgcG9ydF90eXBlID0gY29u bmVjdF9vcmRlclsrK3BvcnRfdHlwZV9jb25uZWN0X251bV0pIHsKKwkJb3V0cHV0X251bSA9IHNj YXJsZXR0Ml9nZXRfcG9ydF9zdGFydF9udW0oCisJCQlwb3J0cywgU0NBUkxFVFQyX1BPUlRfT1VU LCBwb3J0X3R5cGUpOworCQlvdXRwdXRfY291bnQgPSBwb3J0c1twb3J0X3R5cGVdLm51bVtTQ0FS TEVUVDJfUE9SVF9PVVRdOworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCBvdXRwdXRfY291bnQg JiYgaW5wdXRfY291bnQ7CisJCSAgICAgaSsrLCBpbnB1dF9jb3VudC0tKQorCQkJbXV4W291dHB1 dF9udW0rK10gPSBpbnB1dF9udW0rKzsKKwl9Cit9CisKKy8qIEluaXRpYWxpc2UgcHJpdmF0ZSBk YXRhLCByb3V0aW5nLCBzZXF1ZW5jZSBudW1iZXIgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX2lu aXRfcHJpdmF0ZShzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCisJCQkJICBjb25z dCBzdHJ1Y3Qgc2NhcmxldHQyX2RldmljZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBzY2FybGV0 dDJfY2hpcF9kYXRhICpwcml2YXRlID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHNjYXJsZXR0 Ml9jaGlwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT51c2JfbXV0ZXgpOworCW11dGV4X2luaXQo JnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCXByaXZhdGUtPmluZm8gPSBpbmZvOworCXByaXZhdGUt Pm51bV9tdXhfc3JjcyA9IHNjYXJsZXR0Ml9jb3VudF9tdXhfc3JjcyhpbmZvLT5wb3J0cyk7CisJ cHJpdmF0ZS0+c2NhcmxldHQyX3NlcSA9IDA7CisJbWl4ZXItPmNoaXAtPnByaXZhdGUgPSBwcml2 YXRlOworCisJLyogU2V0dXAgZGVmYXVsdCByb3V0aW5nICovCisJc2NhcmxldHQyX2luaXRfcm91 dGluZyhwcml2YXRlLT5tdXgsIGluZm8tPnBvcnRzKTsKKworCS8qIEluaXRpYWxpc2UgdGhlIHNl cXVlbmNlIG51bWJlciB1c2VkIGZvciB0aGUgcHJvcHJpZXRhcnkgY29tbWFuZHMgKi8KKwlyZXR1 cm4gc2NhcmxldHQyX3VzYihtaXhlciwgU0NBUkxFVFQyX1VTQl9JTklUX1NFUSwKKwkJCSAgICAg TlVMTCwgMCwgTlVMTCwgMCk7Cit9CisKKy8qIE5vdGlmeSBvbiB2b2x1bWUgY2hhbmdlICovCitz dGF0aWMgdm9pZCBzY2FybGV0dDJfbWl4ZXJfaW50ZXJydXB0X3ZvbF9jaGFuZ2UoCisJc3RydWN0 IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQoreworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9k YXRhICpwcml2YXRlID0gbWl4ZXItPmNoaXAtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNjYXJs ZXR0Ml9wb3J0cyAqcG9ydHMgPSBwcml2YXRlLT5pbmZvLT5wb3J0czsKKwlpbnQgbnVtX2xpbmVf b3V0ID0KKwkJcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9BTkFMT0dVRV0ubnVtW1NDQVJMRVRU Ml9QT1JUX09VVF07CisJaW50IGk7CisKKwlwcml2YXRlLT52b2xfdXBkYXRlZCA9IDE7CisKKwlz bmRfY3RsX25vdGlmeShtaXhlci0+Y2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFM VUUsCisJCSAgICAgICAmcHJpdmF0ZS0+bWFzdGVyX3ZvbF9jdGwtPmlkKTsKKworCWZvciAoaSA9 IDA7IGkgPCBudW1fbGluZV9vdXQ7IGkrKykgeworCQlpZiAoIXByaXZhdGUtPnZvbF9zd19od19z d2l0Y2hbaV0pCisJCQljb250aW51ZTsKKwkJc25kX2N0bF9ub3RpZnkobWl4ZXItPmNoaXAtPmNh cmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJICAgICAgICZwcml2YXRlLT52b2xf Y3Rsc1tpXS0+aWQpOworCX0KK30KKworLyogTm90aWZ5IG9uIGJ1dHRvbiBjaGFuZ2UgKi8KK3N0 YXRpYyB2b2lkIHNjYXJsZXR0Ml9taXhlcl9pbnRlcnJ1cHRfYnV0dG9uX2NoYW5nZSgKKwlzdHJ1 Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlw X2RhdGEgKnByaXZhdGUgPSBtaXhlci0+Y2hpcC0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCXByaXZh dGUtPnZvbF91cGRhdGVkID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBTQ0FSTEVUVDJfQlVUVE9O X0NPVU5UOyBpKyspCisJCXNuZF9jdGxfbm90aWZ5KG1peGVyLT5jaGlwLT5jYXJkLCBTTkRSVl9D VExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmcHJpdmF0ZS0+YnV0dG9uX2N0bHNbaV0t PmlkKTsKK30KKworLyogSW50ZXJydXB0IGNhbGxiYWNrICovCitzdGF0aWMgdm9pZCBzY2FybGV0 dDJfbWl4ZXJfaW50ZXJydXB0KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX21peGVy X2ludGVyZmFjZSAqbWl4ZXIgPSB1cmItPmNvbnRleHQ7CisJaW50IGxlbiA9IHVyYi0+YWN0dWFs X2xlbmd0aDsKKwlpbnQgdXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCV9fdTMyIGRhdGE7CisKKwlp ZiAodXN0YXR1cyAhPSAwKQorCQlnb3RvIHJlcXVldWU7CisKKwlpZiAobGVuID09IDgpIHsKKwkJ ZGF0YSA9IGxlMzJfdG9fY3B1KCooX191MzIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCWlm IChkYXRhICYgU0NBUkxFVFQyX1VTQl9JTlRFUlJVUFRfVk9MX0NIQU5HRSkKKwkJCXNjYXJsZXR0 Ml9taXhlcl9pbnRlcnJ1cHRfdm9sX2NoYW5nZShtaXhlcik7CisJCWlmIChkYXRhICYgU0NBUkxF VFQyX1VTQl9JTlRFUlJVUFRfQlVUVE9OX0NIQU5HRSkKKwkJCXNjYXJsZXR0Ml9taXhlcl9pbnRl cnJ1cHRfYnV0dG9uX2NoYW5nZShtaXhlcik7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ayhLRVJO X0VSUiAic2NhcmxldHQgbWl4ZXIgaW50ZXJydXB0IGxlbmd0aCAlZFxuIiwKKwkJCSAgIGxlbik7 CisJfQorCityZXF1ZXVlOgorCWlmICh1c3RhdHVzICE9IC1FTk9FTlQgJiYKKwkgICAgdXN0YXR1 cyAhPSAtRUNPTk5SRVNFVCAmJgorCSAgICB1c3RhdHVzICE9IC1FU0hVVERPV04pIHsKKwkJdXJi LT5kZXYgPSBtaXhlci0+Y2hpcC0+ZGV2OworCQl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9N SUMpOworCX0KK30KKworc3RhdGljIGludCBzY2FybGV0dDJfbWl4ZXJfc3RhdHVzX2NyZWF0ZShz dHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJdm9pZCAqdHJhbnNmZXJfYnVm ZmVyOworCisJaWYgKG1peGVyLT51cmIpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IG1p eGVyIHVyYiBhbHJlYWR5IGluIHVzZSFcbiIsCisJCQkgICBfX2Z1bmNfXyk7CisJCXJldHVybiAw OworCX0KKworCW1peGVyLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlm ICghbWl4ZXItPnVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cmFuc2Zlcl9idWZmZXIgPSBr bWFsbG9jKFNDQVJMRVRUMl9VU0JfSU5URVJSVVBUX01BWF9EQVRBLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXRyYW5zZmVyX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1c2JfZmlsbF9pbnRf dXJiKAorCQltaXhlci0+dXJiLAorCQltaXhlci0+Y2hpcC0+ZGV2LAorCQl1c2JfcmN2aW50cGlw ZShtaXhlci0+Y2hpcC0+ZGV2LAorCQkJICAgICAgIFNDQVJMRVRUMl9VU0JfSU5URVJSVVBUX0VO RFBPSU5UKSwKKwkJdHJhbnNmZXJfYnVmZmVyLAorCQlTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9N QVhfREFUQSwKKwkJc2NhcmxldHQyX21peGVyX2ludGVycnVwdCwKKwkJbWl4ZXIsCisJCVNDQVJM RVRUMl9VU0JfSU5URVJSVVBUX0lOVEVSVkFMKTsKKworCXJldHVybiB1c2Jfc3VibWl0X3VyYiht aXhlci0+dXJiLCBHRlBfS0VSTkVMKTsKK30KKworLyogRW50cnkgcG9pbnQgKi8KK2ludCBzbmRf c2NhcmxldHRfZ2VuMl9jb250cm9sc19jcmVhdGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2Ug Km1peGVyKQoreworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8gKmluZm87CisJ aW50IGVycjsKKworCS8qIG9ubHkgdXNlIFVBQ19WRVJTSU9OXzIgKi8KKwlpZiAoIW1peGVyLT5w cm90b2NvbCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKG1peGVyLT5jaGlwLT51c2JfaWQpIHsK KwljYXNlIFVTQl9JRCgweDEyMzUsIDB4ODIwMSk6CisJCWluZm8gPSAmczE4aTIwX2dlbjJfaW5m bzsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogZGV2aWNlIG5vdCAoeWV0KSBzdXBwb3J0ZWQgKi8K KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSW5pdGlhbGlzZSBwcml2YXRlIGRhdGEsIHJv dXRpbmcsIHNlcXVlbmNlIG51bWJlciAqLworCWlmICgoZXJyID0gc2NhcmxldHQyX2luaXRfcHJp dmF0ZShtaXhlciwgaW5mbykpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIFJlYWQgdm9sdW1l IGxldmVscyBhbmQgY29udHJvbHMgZnJvbSB0aGUgaW50ZXJmYWNlICovCisJaWYgKChlcnIgPSBz Y2FybGV0dDJfaW5pdF92b2x1bWVzKG1peGVyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyog Q3JlYXRlIHRoZSBhbmFsb2d1ZSBvdXRwdXQgdm9sdW1lIGNvbnRyb2xzICovCisJaWYgKChlcnIg PSBzY2FybGV0dDJfYWRkX2xpbmVfb3V0X2N0bHMobWl4ZXIpKSA8IDApCisJCXJldHVybiBlcnI7 CisKKwkvKiBDcmVhdGUgdGhlIGlucHV0LCBvdXRwdXQsIGFuZCBtaXhlciBtdXggaW5wdXQgc2Vs ZWN0aW9ucyAqLworCWlmICgoZXJyID0gc2NhcmxldHQyX2FkZF9tdXhfZW51bXMobWl4ZXIpKSA8 IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBDcmVhdGUgdGhlIG1hdHJpeCBtaXhlciBjb250cm9s cyAqLworCWlmICgoZXJyID0gc2NhcmxldHQyX2FkZF9taXhlcl9jdGxzKG1peGVyKSkgPCAwKQor CQlyZXR1cm4gZXJyOworCisJLyogQ3JlYXRlIHRoZSBsZXZlbCBtZXRlciBjb250cm9scyAqLwor CWlmICgoZXJyID0gc2NhcmxldHQyX2FkZF9tZXRlcl9jdGwobWl4ZXIpKSA8IDApCisJCXJldHVy biBlcnI7CisKKwkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBwb2xsaW5nICovCisJaWYgKChlcnIg PSBzY2FybGV0dDJfbWl4ZXJfc3RhdHVzX2NyZWF0ZShtaXhlcikpIDwgMCkKKwkJcmV0dXJuIGVy cjsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyX3NjYXJsZXR0 X2dlbjIuaCBiL3NvdW5kL3VzYi9taXhlcl9zY2FybGV0dF9nZW4yLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MmUxZGFkNzdhZmQKLS0tIC9kZXYvbnVsbAorKysg Yi9zb3VuZC91c2IvbWl4ZXJfc2NhcmxldHRfZ2VuMi5oCkBAIC0wLDAgKzEsNyBAQAorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5kZWYgX19VU0JfTUlYRVJfU0NB UkxFVFRfR0VOMl9ICisjZGVmaW5lIF9fVVNCX01JWEVSX1NDQVJMRVRUX0dFTjJfSAorCitpbnQg c25kX3NjYXJsZXR0X2dlbjJfY29udHJvbHNfY3JlYXRlKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJm YWNlICptaXhlcik7CisKKyNlbmRpZiAvKiBfX1VTQl9NSVhFUl9TQ0FSTEVUVF9HRU4yX0ggKi8K ZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgK aW5kZXggYjlmYWVjYTY0NWZkLi4xMzU3YTczYzNhMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91 c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC02Niw2ICs2Niw4IEBAIHN0 cnVjdCBzbmRfdXNiX2F1ZGlvIHsKIAkJCQkJICovCiAKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJm YWNlICpjdHJsX2ludGY7CS8qIHRoZSBhdWRpbyBjb250cm9sIGludGVyZmFjZSAqLworCisJdm9p ZCAqcHJpdmF0ZTsKIH07CiAKICNkZWZpbmUgdXNiX2F1ZGlvX2VycihjaGlwLCBmbXQsIGFyZ3Mu Li4pIFwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxz YS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHBzOi8v bWFpbG1hbi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo=