From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1L6rhe-0007Zh-Bc for qemu-devel@nongnu.org; Sun, 30 Nov 2008 14:11:34 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1L6rhd-0007Y9-R8 for qemu-devel@nongnu.org; Sun, 30 Nov 2008 14:11:33 -0500 Received: from [199.232.76.173] (port=60909 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1L6rhd-0007Xu-KA for qemu-devel@nongnu.org; Sun, 30 Nov 2008 14:11:33 -0500 Received: from fg-out-1718.google.com ([72.14.220.157]:8913) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1L6rhc-0003lz-J2 for qemu-devel@nongnu.org; Sun, 30 Nov 2008 14:11:33 -0500 Received: by fg-out-1718.google.com with SMTP id l26so1561828fgb.8 for ; Sun, 30 Nov 2008 11:11:28 -0800 (PST) Message-ID: Date: Sun, 30 Nov 2008 21:11:28 +0200 From: "Blue Swirl" In-Reply-To: <20081130190408.GE32172@random.random> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_66588_14618552.1228072288488" References: <20081127123538.GC10348@random.random> <20081128015602.GA31011@random.random> <20081128185001.GD31011@random.random> <20081130174133.GC32172@random.random> <20081130190408.GE32172@random.random> Subject: [Qemu-devel] Re: [RFC 1/1] pci-dma-api-v2 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Andrea Arcangeli Cc: qemu-devel@nongnu.org ------=_Part_66588_14618552.1228072288488 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 11/30/08, Andrea Arcangeli wrote: > On Sun, Nov 30, 2008 at 08:36:56PM +0200, Blue Swirl wrote: > > The patch does not apply as is: > > > --- hw/ide.c (revision 5818) > > > +++ hw/ide.c (working copy) > > > diff --git a/qemu/hw/pci_dma.c b/qemu/hw/pci_dma.c > > > new file mode 100644 > > > index 0000000..48762a8 > > > --- /dev/null > > > +++ b/qemu/hw/pci_dma.c > > > diff --git a/qemu/hw/pci_dma.h b/qemu/hw/pci_dma.h > > > new file mode 100644 > > > index 0000000..5cc8413 > > > --- /dev/null > > > +++ b/qemu/hw/pci_dma.h > > > Yes sorry it's because I generate the patches with 'git diff master' > and I cut and pasted them in... hand editing the patch to remove > 'b/qemu/' will fix it (to apply later with patch -p0 of course, not > standard but the default with svn). > > > > Even as I fixed the patch, it still does not compile, for example: > > /src/qemu/block.c:1335: warning: 'struct iovec' declared inside parameter list > > /src/qemu/block.c:1336: error: conflicting types for 'bdrv_aio_writev' > > /src/qemu/block.h:106: error: previous declaration of 'bdrv_aio_writev' was here > > /src/qemu/block.c:1425: error: invalid use of undefined type 'struct iovec' > > > Weird... I don't get that error, is that an old compiler? Does it go > away if you move the #include from pci_dma.h to block.h? Yes, this version (attached) works. ------=_Part_66588_14618552.1228072288488 Content-Type: plain/text; name=pci-dma-api-v2.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fo62igdg Content-Disposition: attachment; filename=pci-dma-api-v2.diff SW5kZXg6IHFlbXUvYmxvY2tfaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2Jsb2NrX2lu dC5oCTIwMDgtMTEtMzAgMTg6MjU6NDcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2Jsb2NrX2lu dC5oCTIwMDgtMTEtMzAgMTg6MjU6NTguMDAwMDAwMDAwICswMDAwCkBAIC01NSw2ICs1NSw4IEBA CiAgICAgICAgIGludDY0X3Qgc2VjdG9yX251bSwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbmJf c2VjdG9ycywKICAgICAgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9w YXF1ZSk7CiAgICAgdm9pZCAoKmJkcnZfYWlvX2NhbmNlbCkoQmxvY2tEcml2ZXJBSU9DQiAqYWNi KTsKKyAgICBCbG9ja0RyaXZlckFJT0lPViAqYmRydl9haW9fcmVhZHY7CisgICAgQmxvY2tEcml2 ZXJBSU9JT1YgKmJkcnZfYWlvX3dyaXRldjsKICAgICBpbnQgYWlvY2Jfc2l6ZTsKIAogICAgIGNv bnN0IGNoYXIgKnByb3RvY29sX25hbWU7CkluZGV4OiBxZW11L01ha2VmaWxlLnRhcmdldAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBxZW11Lm9yaWcvTWFrZWZpbGUudGFyZ2V0CTIwMDgtMTEtMzAgMTg6MjU6NDcu MDAwMDAwMDAwICswMDAwCisrKyBxZW11L01ha2VmaWxlLnRhcmdldAkyMDA4LTExLTMwIDE4OjI1 OjU4LjAwMDAwMDAwMCArMDAwMApAQCAtNjU5LDcgKzY1OSw3IEBACiAKIGlmZXEgKCQoVEFSR0VU X0JBU0VfQVJDSCksIGkzODYpCiAjIEhhcmR3YXJlIHN1cHBvcnQKLU9CSlMrPSBpZGUubyBwY2ti ZC5vIHBzMi5vIHZnYS5vICQoU09VTkRfSFcpIGRtYS5vCitPQkpTKz0gaWRlLm8gcGNrYmQubyBw czIubyB2Z2EubyAkKFNPVU5EX0hXKSBkbWEubyBwY2lfZG1hLm8KIE9CSlMrPSBmZGMubyBtYzE0 NjgxOHJ0Yy5vIHNlcmlhbC5vIGk4MjU5Lm8gaTgyNTQubyBwY3Nway5vIHBjLm8KIE9CSlMrPSBj aXJydXNfdmdhLm8gYXBpYy5vIHBhcmFsbGVsLm8gYWNwaS5vIHBpaXhfcGNpLm8KIE9CSlMrPSB1 c2ItdWhjaS5vIHZtbW91c2UubyB2bXBvcnQubyB2bXdhcmVfdmdhLm8KQEAgLTY2OCw3ICs2Njgs NyBAQAogaWZlcSAoJChUQVJHRVRfQkFTRV9BUkNIKSwgcHBjKQogQ1BQRkxBR1MgKz0gLURIQVNf QVVESU8gLURIQVNfQVVESU9fQ0hPSUNFCiAjIHNoYXJlZCBvYmplY3RzCi1PQkpTKz0gcHBjLm8g aWRlLm8gdmdhLm8gJChTT1VORF9IVykgZG1hLm8gb3BlbnBpYy5vCitPQkpTKz0gcHBjLm8gaWRl Lm8gdmdhLm8gJChTT1VORF9IVykgZG1hLm8gb3BlbnBpYy5vIHBjaV9kbWEubwogIyBQUkVQIHRh cmdldAogT0JKUys9IHBja2JkLm8gcHMyLm8gc2VyaWFsLm8gaTgyNTkubyBpODI1NC5vIGZkYy5v IG00OHQ1OS5vIG1jMTQ2ODE4cnRjLm8KIE9CSlMrPSBwcmVwX3BjaS5vIHBwY19wcmVwLm8KQEAg LTY4Niw3ICs2ODYsNyBAQAogT0JKUys9IG1pcHNfdGltZXIubyBtaXBzX2ludC5vIGRtYS5vIHZn YS5vIHNlcmlhbC5vIGk4MjU0Lm8gaTgyNTkubyByYzQwMzAubwogT0JKUys9IGczNjRmYi5vIGph enpfbGVkLm8KIE9CSlMrPSBpZGUubyBndDY0eHh4Lm8gcGNrYmQubyBwczIubyBmZGMubyBtYzE0 NjgxOHJ0Yy5vIHVzYi11aGNpLm8gYWNwaS5vIGRzMTIyNXkubwotT0JKUys9IHBpaXhfcGNpLm8g cGFyYWxsZWwubyBjaXJydXNfdmdhLm8gcGNzcGsubyAkKFNPVU5EX0hXKQorT0JKUys9IHBpaXhf cGNpLm8gcGFyYWxsZWwubyBjaXJydXNfdmdhLm8gcGNzcGsubyBwY2lfZG1hLm8gJChTT1VORF9I VykKIE9CSlMrPSBtaXBzbmV0Lm8KIE9CSlMrPSBwZmxhc2hfY2ZpMDEubwogQ1BQRkxBR1MgKz0g LURIQVNfQVVESU8gLURIQVNfQVVESU9fQ0hPSUNFCkBAIC03MTAsNyArNzEwLDcgQEAKIGVsc2UK IE9CSlMrPSBzdW40bS5vIHRjeC5vIHBjbmV0Lm8gaW9tbXUubyBtNDh0NTkubyBzbGF2aW9faW50 Y3RsLm8KIE9CSlMrPSBzbGF2aW9fdGltZXIubyBzbGF2aW9fc2VyaWFsLm8gc2xhdmlvX21pc2Mu byBmZGMubyBzcGFyYzMyX2RtYS5vCi1PQkpTKz0gY3M0MjMxLm8gcHRpbWVyLm8gZWNjbWVtY3Rs Lm8gc2JpLm8gc3VuNGNfaW50Y3RsLm8KK09CSlMrPSBjczQyMzEubyBwdGltZXIubyBlY2NtZW1j dGwubyBzYmkubyBzdW40Y19pbnRjdGwubyBwY2lfZG1hLm8KIGVuZGlmCiBlbmRpZgogaWZlcSAo JChUQVJHRVRfQkFTRV9BUkNIKSwgYXJtKQpAQCAtNzMxLDcgKzczMSw3IEBACiBPQkpTKz0gbnNl cmllcy5vIGJsaXp6YXJkLm8gb25lbmFuZC5vIHZnYS5vIGNidXMubyB0dXNiNjAxMC5vIHVzYi1t dXNiLm8KIE9CSlMrPSB0c2MyMDA1Lm8gYnQtaGNpLWNzci5vCiBPQkpTKz0gbXN0X2ZwZ2EubyBt YWluc3RvbmUubwotT0JKUys9IG11c2ljcGFsLm8gcGZsYXNoX2NmaTAyLm8KK09CSlMrPSBtdXNp Y3BhbC5vIHBmbGFzaF9jZmkwMi5vIHBjaV9kbWEubwogQ1BQRkxBR1MgKz0gLURIQVNfQVVESU8K IGVuZGlmCiBpZmVxICgkKFRBUkdFVF9CQVNFX0FSQ0gpLCBzaDQpCkluZGV4OiBxZW11L2V4ZWMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvZXhlYy5jCTIwMDgtMTEtMzAgMTg6MjU6NDcuMDAw MDAwMDAwICswMDAwCisrKyBxZW11L2V4ZWMuYwkyMDA4LTExLTMwIDE4OjI1OjU4LjAwMDAwMDAw MCArMDAwMApAQCAtMjgwNyw3ICsyODA3LDcgQEAKIC8qIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3Mg KHNsb3cgdmVyc2lvbiwgbWFpbmx5IGZvciBkZWJ1ZykgKi8KICNpZiBkZWZpbmVkKENPTkZJR19V U0VSX09OTFkpCiB2b2lkIGNwdV9waHlzaWNhbF9tZW1vcnlfcncodGFyZ2V0X3BoeXNfYWRkcl90 IGFkZHIsIHVpbnQ4X3QgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu LCBpbnQgaXNfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwg aW50IGlzX3dyaXRlKQogewogICAgIGludCBsLCBmbGFnczsKICAgICB0YXJnZXRfdWxvbmcgcGFn ZTsKQEAgLTI4NDgsNyArMjg0OCw3IEBACiAKICNlbHNlCiB2b2lkIGNwdV9waHlzaWNhbF9tZW1v cnlfcncodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQ4X3QgKmJ1ZiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IGxlbiwgaW50IGlzX3dyaXRlKQogewogICAgIGludCBsLCBpb19p bmRleDsKICAgICB1aW50OF90ICpwdHI7CkBAIC0yOTM4LDYgKzI5MzgsMTExIEBACiAgICAgfQog fQogCit1aW50OF90ICpjcHVfcGh5c2ljYWxfbWVtb3J5X2Nhbl9kbWEodGFyZ2V0X3BoeXNfYWRk cl90IGFkZHIsCisJCQkJICAgICBzaXplX3QgbGVuLCBpbnQgaXNfd3JpdGUsCisJCQkJICAgICBp bnQgYWxpZ25tZW50KQoreworICAgIGludCBsLCBmaXJzdCA9IDE7CisgICAgdWludDhfdCAqcHRy ID0gTlVMTDsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgcGFnZTsKKyAgICB1bnNpZ25lZCBsb25n IHBkLCBwZF9maXJzdCA9IDA7CisgICAgUGh5c1BhZ2VEZXNjICpwOworCisgICAgaWYgKGxlbiAm IChhbGlnbm1lbnQtMSkpCisJZ290byBvdXQ7CisKKyAgICB3aGlsZSAobGVuID4gMCkgeworCXBh Z2UgPSBhZGRyICYgVEFSR0VUX1BBR0VfTUFTSzsKKwlwID0gcGh5c19wYWdlX2ZpbmQocGFnZSA+ PiBUQVJHRVRfUEFHRV9CSVRTKTsKKworCWwgPSAocGFnZSArIFRBUkdFVF9QQUdFX1NJWkUpIC0g YWRkcjsKKyAgICAgICAgaWYgKGwgPiBsZW4pCisgICAgICAgICAgICBsID0gbGVuOworCisgICAg ICAgIGlmICghcCkKKyAgICAgICAgICAgIHBkID0gSU9fTUVNX1VOQVNTSUdORUQ7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHBkID0gcC0+cGh5c19vZmZzZXQ7CisKKyAgICAgICAgaWYgKGlz X3dyaXRlKSB7CisgICAgICAgICAgICBpZiAoKHBkICYgflRBUkdFVF9QQUdFX01BU0spICE9IElP X01FTV9SQU0pCisJCXJldHVybiBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKChwZCAmIH5UQVJHRVRfUEFHRV9NQVNLKSA+IElPX01FTV9ST00gJiYKKyAgICAgICAgICAg ICAgICAhKHBkICYgSU9fTUVNX1JPTUQpKQorCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisJ aWYgKGZpcnN0KSB7CisJICAgIGZpcnN0ID0gMDsKKwkgICAgcHRyID0gcGh5c19yYW1fYmFzZSAr IChwZCAmIFRBUkdFVF9QQUdFX01BU0spICsKKwkJKGFkZHIgJiB+VEFSR0VUX1BBR0VfTUFTSyk7 CisJICAgIGlmICgodW5zaWduZWQgbG9uZylwdHIgJiAoYWxpZ25tZW50LTEpKQorCQlyZXR1cm4g TlVMTDsKKwkgICAgcGRfZmlyc3QgPSBwZDsKKwl9CisKKwkvKiBub25saW5lYXIgcmFuZ2UgKi8K KwlpZiAocGRfZmlyc3QgIT0gcGQpCisJICAgIHJldHVybiBOVUxMOworCXBkX2ZpcnN0ICs9IFRB UkdFVF9QQUdFX1NJWkU7CisKKyAgICAgICAgbGVuIC09IGw7CisgICAgICAgIGFkZHIgKz0gbDsK KyAgICB9CisKK291dDoKKyAgICByZXR1cm4gcHRyOworfQorCit2b2lkIGNwdV9waHlzaWNhbF9t ZW1vcnlfd3JpdGVfcG9zdF9kbWEodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisJCQkJCXNpemVf dCBsZW4pCit7CisgICAgaW50IGw7CisgICAgdWludDhfdCAqcHRyOworICAgIHRhcmdldF9waHlz X2FkZHJfdCBwYWdlOworICAgIHVuc2lnbmVkIGxvbmcgcGQ7CisgICAgUGh5c1BhZ2VEZXNjICpw OworCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgcGFnZSA9IGFkZHIgJiBUQVJHRVRf UEFHRV9NQVNLOworCisgICAgICAgIGwgPSAocGFnZSArIFRBUkdFVF9QQUdFX1NJWkUpIC0gYWRk cjsKKyAgICAgICAgaWYgKGwgPiBsZW4pCisgICAgICAgICAgICBsID0gbGVuOworCisgICAgICAg IHAgPSBwaHlzX3BhZ2VfZmluZChwYWdlID4+IFRBUkdFVF9QQUdFX0JJVFMpOworICAgICAgICBp ZiAoIXApCisgICAgICAgICAgICBwZCA9IElPX01FTV9VTkFTU0lHTkVEOworICAgICAgICBlbHNl CisgICAgICAgICAgICBwZCA9IHAtPnBoeXNfb2Zmc2V0OworCisJaWYgKChwZCAmIH5UQVJHRVRf UEFHRV9NQVNLKSAhPSBJT19NRU1fUkFNKSB7CisJICAgIHByaW50ZigiRVJST1IgY3B1X3BoeXNp Y2FsX21lbW9yeV9wb3N0X2RtYTogbWVtb3J5IGxheW91dCBjaGFuZ2VkXG4iKTsKKwkgICAgY29u dGludWU7CisJfSBlbHNlIHsKKwkgICAgdW5zaWduZWQgbG9uZyBhZGRyMTsKKwkgICAgYWRkcjEg PSAocGQgJiBUQVJHRVRfUEFHRV9NQVNLKSArIChhZGRyICYgflRBUkdFVF9QQUdFX01BU0spOwor CSAgICAvKiBSQU0gY2FzZSAqLworCSAgICBwdHIgPSBwaHlzX3JhbV9iYXNlICsgYWRkcjE7CisJ ICAgIGlmICghY3B1X3BoeXNpY2FsX21lbW9yeV9pc19kaXJ0eShhZGRyMSkpIHsKKwkJLyogaW52 YWxpZGF0ZSBjb2RlICovCisJCXRiX2ludmFsaWRhdGVfcGh5c19wYWdlX3JhbmdlKGFkZHIxLCBh ZGRyMSArIGwsIDApOworCQkvKiBzZXQgZGlydHkgYml0ICovCisJCXBoeXNfcmFtX2RpcnR5W2Fk ZHIxID4+IFRBUkdFVF9QQUdFX0JJVFNdIHw9CisJCSAgICAoMHhmZiAmIH5DT0RFX0RJUlRZX0ZM QUcpOworCSAgICB9CisJICAgIC8qIHFlbXUgZG9lc24ndCBleGVjdXRlIGd1ZXN0IGNvZGUgZGly ZWN0bHksIGJ1dCBrdm0gZG9lcworCSAgICAgICB0aGVyZWZvcmUgZmx1Y2ggaW5zdHJ1Y3Rpb24g Y2FjaGVzICovCisJICAgIGlmIChrdm1fZW5hYmxlZCgpKQorCQlmbHVzaF9pY2FjaGVfcmFuZ2Uo KHVuc2lnbmVkIGxvbmcpcHRyLAorCQkJCSAgICgodW5zaWduZWQgbG9uZylwdHIpK2wpOworICAg ICAgICB9CisgICAgICAgIGxlbiAtPSBsOworICAgICAgICBhZGRyICs9IGw7CisgICAgfQorfQor CiAvKiB1c2VkIGZvciBST00gbG9hZGluZyA6IGNhbiB3cml0ZSBpbiBSQU0gYW5kIFJPTSAqLwog dm9pZCBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRlX3JvbSh0YXJnZXRfcGh5c19hZGRyX3QgYWRk ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVm LCBpbnQgbGVuKQpJbmRleDogcWVtdS9ibG9jay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9i bG9jay5jCTIwMDgtMTEtMzAgMTg6MjU6NDcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2Jsb2Nr LmMJMjAwOC0xMS0zMCAxODoyNTo1OC4wMDAwMDAwMDAgKzAwMDAKQEAgLTUzLDYgKzUzLDIwIEBA CiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIGludCBuYl9zZWN0b3JzKTsK IHN0YXRpYyBpbnQgYmRydl93cml0ZV9lbShCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBz ZWN0b3JfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwg aW50IG5iX3NlY3RvcnMpOworc3RhdGljIEJsb2NrRHJpdmVyQUlPQ0IgKmJkcnZfYWlvX3JlYWR2 X2VtKEJsb2NrRHJpdmVyU3RhdGUgKmJzLAorCQkJCQkgICBpbnQ2NF90IHNlY3Rvcl9udW0sCisJ CQkJCSAgIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCQkgICBpbnQgaW92bmN0LAorCQkJCQkgICBz aXplX3QgbGVuLAorCQkJCQkgICBCbG9ja0RyaXZlckNvbXBsZXRpb25GdW5jICpjYiwKKwkJCQkJ ICAgdm9pZCAqb3BhcXVlKTsKK3N0YXRpYyBCbG9ja0RyaXZlckFJT0NCICpiZHJ2X2Fpb193cml0 ZXZfZW0oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJCQkJCSAgICBpbnQ2NF90IHNlY3Rvcl9udW0s CisJCQkJCSAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkJICAgIGludCBpb3ZuY3QsCisJCQkJ CSAgICBzaXplX3QgbGVuLAorCQkJCQkgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2Is CisJCQkJCSAgICB2b2lkICpvcGFxdWUpOwogCiBCbG9ja0RyaXZlclN0YXRlICpiZHJ2X2ZpcnN0 OwogCkBAIC0xMzUsNiArMTQ5LDkgQEAKICAgICAgICAgLyogYWRkIHN5bmNocm9ub3VzIElPIGVt dWxhdGlvbiBsYXllciAqLwogICAgICAgICBiZHJ2LT5iZHJ2X3JlYWQgPSBiZHJ2X3JlYWRfZW07 CiAgICAgICAgIGJkcnYtPmJkcnZfd3JpdGUgPSBiZHJ2X3dyaXRlX2VtOworICAgICAgICBiZHJ2 LT5iZHJ2X2Fpb19yZWFkdiA9IGJkcnZfYWlvX3JlYWR2X2VtOyAvKiBGSVhNRSAqLworICAgICAg ICBiZHJ2LT5iZHJ2X2Fpb193cml0ZXYgPSBiZHJ2X2Fpb193cml0ZXZfZW07IC8qIEZJWE1FICov CisgICAgICAgIGJkcnYtPmJkcnZfYWlvX2NhbmNlbCA9IGJkcnZfYWlvX2NhbmNlbF9lbTsgLyog RklYTUUgKi8KICAgICB9CiAgICAgYmRydi0+bmV4dCA9IGZpcnN0X2RydjsKICAgICBmaXJzdF9k cnYgPSBiZHJ2OwpAQCAtMTI5MSw2ICsxMzA4LDUwIEBACiAgICAgZHJ2LT5iZHJ2X2Fpb19jYW5j ZWwoYWNiKTsKIH0KIAorQmxvY2tEcml2ZXJBSU9DQiAqYmRydl9haW9fcmVhZHYoQmxvY2tEcml2 ZXJTdGF0ZSAqYnMsIGludDY0X3Qgc2VjdG9yX251bSwKKwkJCQkgc3RydWN0IGlvdmVjICppb3Ys IGludCBpb3ZjbnQsIHNpemVfdCBsZW4sCisJCQkJIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMg KmNiLCB2b2lkICpvcGFxdWUpCit7CisgICAgQmxvY2tEcml2ZXIgKmRydiA9IGJzLT5kcnY7Cisg ICAgQmxvY2tEcml2ZXJBSU9DQiAqcmV0OworICAgIAorCisgICAgaWYgKCFkcnYpCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgcmV0ID0gZHJ2LT5iZHJ2X2Fpb19yZWFkdihicywgc2VjdG9y X251bSwgaW92LCBpb3ZjbnQsIGxlbiwgY2IsIG9wYXF1ZSk7CisKKyAgICBpZiAocmV0KSB7CisJ LyogVXBkYXRlIHN0YXRzIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5IHRyYW5zZmVyIGhhcyBub3Qg aGFwcGVuZWQuICovCisJYnMtPnJkX2J5dGVzICs9ICh1bnNpZ25lZCkgbGVuOworCWJzLT5yZF9v cHMgKys7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworQmxvY2tEcml2ZXJBSU9DQiAq YmRydl9haW9fd3JpdGV2KEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90IHNlY3Rvcl9udW0s CisJCQkJICBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgc2l6ZV90IGxlbiwKKwkJCQkg IEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLCB2b2lkICpvcGFxdWUpCit7CisgICAgQmxv Y2tEcml2ZXIgKmRydiA9IGJzLT5kcnY7CisgICAgQmxvY2tEcml2ZXJBSU9DQiAqcmV0OworICAg IAorCisgICAgaWYgKCFkcnYpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0ID0gZHJ2 LT5iZHJ2X2Fpb193cml0ZXYoYnMsIHNlY3Rvcl9udW0sIGlvdiwgaW92Y250LCBsZW4sIGNiLCBv cGFxdWUpOworCisgICAgaWYgKHJldCkgeworCS8qIFVwZGF0ZSBzdGF0cyBldmVuIHRob3VnaCB0 ZWNobmljYWxseSB0cmFuc2ZlciBoYXMgbm90IGhhcHBlbmVkLiAqLworCWJzLT5yZF9ieXRlcyAr PSAodW5zaWduZWQpIGxlbjsKKwlicy0+cmRfb3BzICsrOworICAgIH0KKworICAgIHJldHVybiBy ZXQ7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwogLyogYXN5bmMgYmxvY2sgZGV2aWNlIGVtdWxhdGlvbiAqLwpA QCAtMTM0MSw2ICsxNDAyLDc0IEBACiAgICAgcWVtdV9haW9fcmVsZWFzZShhY2IpOwogfQogCitz dGF0aWMgdm9pZCBiZHJ2X2Fpb19pb3ZfYmhfY2Iodm9pZCAqb3BhcXVlKQoreworICAgIEJsb2Nr RHJpdmVyQUlPQ0JTeW5jICphY2IgPSBvcGFxdWU7CisgICAgYWNiLT5jb21tb24uY2IoYWNiLT5j b21tb24ub3BhcXVlLCBhY2ItPnJldCk7CisgICAgcWVtdV9iaF9kZWxldGUoYWNiLT5iaCk7Cisg ICAgcWVtdV9mcmVlKGFjYik7Cit9CisKK3N0YXRpYyBCbG9ja0RyaXZlckFJT0NCICpiZHJ2X2Fp b19yZWFkdl9lbShCbG9ja0RyaXZlclN0YXRlICpicywKKwkJCQkJICAgaW50NjRfdCBzZWN0b3Jf bnVtLAorCQkJCQkgICBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkJICAgaW50IGlvdmNudCwKKwkJ CQkJICAgc2l6ZV90IGxlbiwKKwkJCQkJICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2Is CisJCQkJCSAgIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBCbG9ja0RyaXZlckFJT0NCU3luYyAqYWNi OworICAgIGludCByZXQgPSAtMSwgaWR4OworCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBpb3Zj bnQ7IGlkeCsrKSB7CisJc2l6ZV90IHNlY3RvcnMgPSBpb3ZbaWR4XS5pb3ZfbGVuID4+IFNFQ1RP Ul9CSVRTOworCXJldCA9IGJkcnZfcmVhZChicywgc2VjdG9yX251bSwgaW92W2lkeF0uaW92X2Jh c2UsIHNlY3RvcnMpOworCWlmIChyZXQpCisJICAgIGJyZWFrOworCXNlY3Rvcl9udW0gKz0gc2Vj dG9yczsKKyAgICB9CisgICAgYWNiID0gcWVtdV9tYWxsb2N6KHNpemVvZihCbG9ja0RyaXZlckFJ T0NCU3luYykpOworICAgIGlmICghYWNiKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg YWNiLT5jb21tb24uYnMgPSBiczsKKyAgICBhY2ItPmNvbW1vbi5jYiA9IGNiOworICAgIGFjYi0+ Y29tbW9uLm9wYXF1ZSA9IG9wYXF1ZTsKKyAgICBhY2ItPmJoID0gcWVtdV9iaF9uZXcoYmRydl9h aW9faW92X2JoX2NiLCBhY2IpOworICAgIGFjYi0+cmV0ID0gcmV0OworICAgIHFlbXVfYmhfc2No ZWR1bGUoYWNiLT5iaCk7CisgICAgcmV0dXJuICZhY2ItPmNvbW1vbjsKK30KKworc3RhdGljIEJs b2NrRHJpdmVyQUlPQ0IgKmJkcnZfYWlvX3dyaXRldl9lbShCbG9ja0RyaXZlclN0YXRlICpicywK KwkJCQkJICAgIGludDY0X3Qgc2VjdG9yX251bSwKKwkJCQkJICAgIHN0cnVjdCBpb3ZlYyAqaW92 LAorCQkJCQkgICAgaW50IGlvdmNudCwKKwkJCQkJICAgIHNpemVfdCBsZW4sCisJCQkJCSAgICBC bG9ja0RyaXZlckNvbXBsZXRpb25GdW5jICpjYiwKKwkJCQkJICAgIHZvaWQgKm9wYXF1ZSkKK3sK KyAgICBCbG9ja0RyaXZlckFJT0NCU3luYyAqYWNiOworICAgIGludCByZXQgPSAtMSwgaWR4Owor CisgICAgZm9yIChpZHggPSAwOyBpZHggPCBpb3ZjbnQ7IGlkeCsrKSB7CisJc2l6ZV90IHNlY3Rv cnMgPSBpb3ZbaWR4XS5pb3ZfbGVuID4+IFNFQ1RPUl9CSVRTOworCXJldCA9IGJkcnZfd3JpdGUo YnMsIHNlY3Rvcl9udW0sIGlvdltpZHhdLmlvdl9iYXNlLCBzZWN0b3JzKTsKKwlpZiAocmV0KQor CSAgICBicmVhazsKKwlzZWN0b3JfbnVtICs9IHNlY3RvcnM7CisgICAgfQorICAgIGFjYiA9IHFl bXVfbWFsbG9jeihzaXplb2YoQmxvY2tEcml2ZXJBSU9DQlN5bmMpKTsKKyAgICBpZiAoIWFjYikK KyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFjYi0+Y29tbW9uLmJzID0gYnM7CisgICAg YWNiLT5jb21tb24uY2IgPSBjYjsKKyAgICBhY2ItPmNvbW1vbi5vcGFxdWUgPSBvcGFxdWU7Cisg ICAgYWNiLT5iaCA9IHFlbXVfYmhfbmV3KGJkcnZfYWlvX2lvdl9iaF9jYiwgYWNiKTsKKyAgICBh Y2ItPnJldCA9IHJldDsKKyAgICBxZW11X2JoX3NjaGVkdWxlKGFjYi0+YmgpOworICAgIHJldHVy biAmYWNiLT5jb21tb247Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIHN5bmMgYmxvY2sgZGV2aWNlIGVtdWxh dGlvbiAqLwogCkluZGV4OiBxZW11L2Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2Js b2NrLmgJMjAwOC0xMS0zMCAxODoyNTo0Ny4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvYmxvY2su aAkyMDA4LTExLTMwIDE5OjA3OjU0LjAwMDAwMDAwMCArMDAwMApAQCAtMiw2ICsyLDcgQEAKICNk ZWZpbmUgQkxPQ0tfSAogCiAjaW5jbHVkZSAicWVtdS1haW8uaCIKKyNpbmNsdWRlIDxzeXMvdWlv Lmg+IC8qIHN0cnVjdCBpb3ZlYyAqLwogCiAvKiBibG9jay5jICovCiB0eXBlZGVmIHN0cnVjdCBC bG9ja0RyaXZlciBCbG9ja0RyaXZlcjsKQEAgLTgzLDYgKzg0LDEzIEBACiAvKiBhc3luYyBibG9j ayBJL08gKi8KIHR5cGVkZWYgc3RydWN0IEJsb2NrRHJpdmVyQUlPQ0IgQmxvY2tEcml2ZXJBSU9D QjsKIHR5cGVkZWYgdm9pZCBCbG9ja0RyaXZlckNvbXBsZXRpb25GdW5jKHZvaWQgKm9wYXF1ZSwg aW50IHJldCk7Cit0eXBlZGVmIEJsb2NrRHJpdmVyQUlPQ0IgKkJsb2NrRHJpdmVyQUlPSU9WKEJs b2NrRHJpdmVyU3RhdGUgKmJzLAorCQkJCQkgICAgaW50NjRfdCBzZWN0b3JfbnVtLAorCQkJCQkg ICAgc3RydWN0IGlvdmVjICppb3YsCisJCQkJCSAgICBpbnQgaW92bmN0LAorCQkJCQkgICAgc2l6 ZV90IGxlbiwKKwkJCQkJICAgIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLAorCQkJCQkg ICAgdm9pZCAqb3BhcXVlKTsKIAogQmxvY2tEcml2ZXJBSU9DQiAqYmRydl9haW9fcmVhZChCbG9j a0RyaXZlclN0YXRlICpicywgaW50NjRfdCBzZWN0b3JfbnVtLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50OF90ICpidWYsIGludCBuYl9zZWN0b3JzLApAQCAtOTEsNiArOTks MTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgaW50IG5iX3NlY3RvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9j a0RyaXZlckNvbXBsZXRpb25GdW5jICpjYiwgdm9pZCAqb3BhcXVlKTsKIHZvaWQgYmRydl9haW9f Y2FuY2VsKEJsb2NrRHJpdmVyQUlPQ0IgKmFjYik7CitCbG9ja0RyaXZlckFJT0NCICpiZHJ2X2Fp b19yZWFkdihCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBzZWN0b3JfbnVtLAorCQkJCSBz dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdm5jdCwgc2l6ZV90IGxlbiwKKwkJCQkgQmxvY2tEcml2 ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSk7CitCbG9ja0RyaXZlckFJT0NCICpi ZHJ2X2Fpb193cml0ZXYoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgc2VjdG9yX251bSwK KwkJCQkgIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92bmN0LCBzaXplX3QgbGVuLAorCQkJCSAg QmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSk7CiAKIGludCBxZW11 X2tleV9jaGVjayhCbG9ja0RyaXZlclN0YXRlICpicywgY29uc3QgY2hhciAqbmFtZSk7CiAKSW5k ZXg6IHFlbXUvaHcvaWRlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2h3L2lkZS5jCTIwMDgt MTEtMzAgMTg6MjU6NDcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L2lkZS5jCTIwMDgtMTEt MzAgMTg6MjU6NTguMDAwMDAwMDAwICswMDAwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi cWVtdS10aW1lci5oIgogI2luY2x1ZGUgInN5c2VtdS5oIgogI2luY2x1ZGUgInBwY19tYWMuaCIK KyNpbmNsdWRlICJwY2lfZG1hLmgiCiAKIC8qIGRlYnVnIElERSBkZXZpY2VzICovCiAvLyNkZWZp bmUgREVCVUdfSURFCkBAIC00ODAsMTIgKzQ4MSwxNSBAQAogICAgIHN0cnVjdCBQQ0lJREVTdGF0 ZSAqcGNpX2RldjsKICAgICAvKiBjdXJyZW50IHRyYW5zZmVyIHN0YXRlICovCiAgICAgdWludDMy X3QgY3VyX2FkZHI7Ci0gICAgdWludDMyX3QgY3VyX3ByZF9sYXN0OwotICAgIHVpbnQzMl90IGN1 cl9wcmRfYWRkcjsKLSAgICB1aW50MzJfdCBjdXJfcHJkX2xlbjsKKyAgICB1aW50MzJfdCBjdXJf cHJkX2xhc3Q7IC8qIGZpeG1lIGRlbGV0ZSAqLworICAgIHVpbnQzMl90IGN1cl9wcmRfYWRkcjsg LyogZml4bWUgZGVsZXRlICovCisgICAgdWludDMyX3QgY3VyX3ByZF9sZW47IC8qIGZpeG1lIGRl bGV0ZSAqLwogICAgIElERVN0YXRlICppZGVfaWY7CiAgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9u RnVuYyAqZG1hX2NiOwogICAgIEJsb2NrRHJpdmVyQUlPQ0IgKmFpb2NiOworICAgIFFFTVVQY2lE bWFTZyBzZ1tJREVfRE1BX0JVRl9TRUNUT1JTXTsKKyAgICBCbG9ja0RyaXZlckFJT0lPViAqYmRy dl9haW9faW92OworICAgIGludCBkbWFfdG9fbWVtb3J5OwogfSBCTURNQVN0YXRlOwogCiB0eXBl ZGVmIHN0cnVjdCBQQ0lJREVTdGF0ZSB7CkBAIC04NzAsNyArODc0LDcgQEAKIH0KIAogLyogcmV0 dXJuIDAgaWYgYnVmZmVyIGNvbXBsZXRlZCAqLwotc3RhdGljIGludCBkbWFfYnVmX3J3KEJNRE1B U3RhdGUgKmJtLCBpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW50IGRtYV9idWZfcncoQk1ETUFTdGF0 ZSAqYm0sIGludCBpc193cml0ZSkgLyogZml4bWUgZGVsZXRlICovCiB7CiAgICAgSURFU3RhdGUg KnMgPSBibS0+aWRlX2lmOwogICAgIHN0cnVjdCB7CkBAIC05MTcsNjEgKzkyMSw4MCBAQAogICAg IHJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfcmVhZF9kbWFfY2Iodm9pZCAqb3BhcXVl LCBpbnQgcmV0KQorc3RhdGljIGludCBidWlsZF9kbWFfc2coQk1ETUFTdGF0ZSAqYm0pCiB7Ci0g ICAgQk1ETUFTdGF0ZSAqYm0gPSBvcGFxdWU7Ci0gICAgSURFU3RhdGUgKnMgPSBibS0+aWRlX2lm OwotICAgIGludCBuOwotICAgIGludDY0X3Qgc2VjdG9yX251bTsKKyAgICBzdHJ1Y3QgeworICAg ICAgICB1aW50MzJfdCBhZGRyOworICAgICAgICB1aW50MzJfdCBzaXplOworICAgIH0gcHJkOwor ICAgIGludCBsZW47CisgICAgaW50IGlkeDsKIAotICAgIGlmIChyZXQgPCAwKSB7Ci0JaWRlX2Rt YV9lcnJvcihzKTsKLQlyZXR1cm47Ci0gICAgfQorICAgIGZvciAoaWR4ID0gMTsgaWR4IDw9IElE RV9ETUFfQlVGX1NFQ1RPUlM7IGlkeCsrKSB7CisJY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKGJt LT5jdXJfYWRkciwgKHVpbnQ4X3QgKikmcHJkLCA4KTsKKwlibS0+Y3VyX2FkZHIgKz0gODsKKwli bS0+c2dbaWR4LTFdLmFkZHIgPSBsZTMyX3RvX2NwdShwcmQuYWRkcik7CisJcHJkLnNpemUgPSBs ZTMyX3RvX2NwdShwcmQuc2l6ZSk7CisJbGVuID0gcHJkLnNpemUgJiAweGZmZmU7CisJaWYgKGxl biA9PSAwKQorCSAgICBsZW4gPSAweDEwMDAwOworCWJtLT5zZ1tpZHgtMV0ubGVuID0gbGVuOwor CS8qIGVuZCBvZiB0YWJsZSAod2l0aCBhIGZhaWwgc2FmZSBvZiBvbmUgcGFnZSkgKi8KKwlpZiAo KHByZC5zaXplICYgMHg4MDAwMDAwMCkgfHwKKwkgICAgKGJtLT5jdXJfYWRkciAtIGJtLT5hZGRy KSA+PSA0MDk2KQorCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGlkeCA+IElERV9ETUFfQlVG X1NFQ1RPUlMpCisJcHJpbnRmKCJidWlsZF9kbWFfc2c6IHRvbyBtYW55IHNnIGVudHJpZXNcbiIp OworICAgIHJldHVybiBpZHg7Cit9CiAKLSAgICBuID0gcy0+aW9fYnVmZmVyX3NpemUgPj4gOTsK LSAgICBzZWN0b3JfbnVtID0gaWRlX2dldF9zZWN0b3Iocyk7Ci0gICAgaWYgKG4gPiAwKSB7Ci0g ICAgICAgIHNlY3Rvcl9udW0gKz0gbjsKLSAgICAgICAgaWRlX3NldF9zZWN0b3Iocywgc2VjdG9y X251bSk7Ci0gICAgICAgIHMtPm5zZWN0b3IgLT0gbjsKLSAgICAgICAgaWYgKGRtYV9idWZfcnco Ym0sIDEpID09IDApCi0gICAgICAgICAgICBnb3RvIGVvdDsKLSAgICB9CitzdGF0aWMgdm9pZCBp ZGVfZG1hX2NvbXBsZXRlKHZvaWQgKm9wYXF1ZSwgaW50IHJldCkKK3sKKyAgICBCTURNQVN0YXRl ICpibSA9IG9wYXF1ZTsKKyAgICBJREVTdGF0ZSAqcyA9IGJtLT5pZGVfaWY7CiAKKyAgICBibS0+ YmRydl9haW9faW92ID0gTlVMTDsKKyAgICBibS0+aWRlX2lmID0gTlVMTDsKKyAgICBibS0+YWlv Y2IgPSBOVUxMOwogICAgIC8qIGVuZCBvZiB0cmFuc2ZlciA/ICovCi0gICAgaWYgKHMtPm5zZWN0 b3IgPT0gMCkgeworICAgIGlmIChzLT5uc2VjdG9yID09IDAgJiYgIXJldCkgewogICAgICAgICBz LT5zdGF0dXMgPSBSRUFEWV9TVEFUIHwgU0VFS19TVEFUOwogICAgICAgICBpZGVfc2V0X2lycShz KTsKLSAgICBlb3Q6CiAgICAgICAgIGJtLT5zdGF0dXMgJj0gfkJNX1NUQVRVU19ETUFJTkc7CiAg ICAgICAgIGJtLT5zdGF0dXMgfD0gQk1fU1RBVFVTX0lOVDsKLSAgICAgICAgYm0tPmRtYV9jYiA9 IE5VTEw7Ci0gICAgICAgIGJtLT5pZGVfaWYgPSBOVUxMOwotICAgICAgICBibS0+YWlvY2IgPSBO VUxMOwotICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKwlpZGVfZG1hX2Vycm9yKHMpOwor CXByaW50ZigiaWRlX2RtYV9jb21wbGV0ZSBlcnJvcjogbnNlY3RvciAlZCBlcnIgJWRcbiIsIHMt Pm5zZWN0b3IsIHJldCk7CiAgICAgfQorfQorCitzdGF0aWMgaW50IGlkZV9kbWFfc3VibWl0KHZv aWQgKm9wYXF1ZSwgc3RydWN0IGlvdmVjICpkbWFfaW92LAorCQkJICBpbnQgaW92Y250LCBzaXpl X3QgbGVuLAorCQkJICBCbG9ja0RyaXZlckNvbXBsZXRpb25GdW5jIGRtYV9jYiwKKwkJCSAgdm9p ZCAqZG1hX2NiX3BhcmFtKQoreworICAgIEJNRE1BU3RhdGUgKmJtID0gb3BhcXVlOworICAgIElE RVN0YXRlICpzID0gYm0tPmlkZV9pZjsKKyAgICBzaXplX3Qgc2VjdG9yczsKKyAgICBpbnQ2NF90 IHNlY3Rvcl9udW07CisKKyAgICBzZWN0b3JzID0gbGVuID4+IDk7CisgICAgaWYgKHMtPm5zZWN0 b3IgPCBzZWN0b3JzKQorCXJldHVybiAtMzAwMDsKKyAgICBzZWN0b3JfbnVtID0gaWRlX2dldF9z ZWN0b3Iocyk7CisgICAgaWRlX3NldF9zZWN0b3Iocywgc2VjdG9yX251bSAgKyBzZWN0b3JzKTsK KyAgICBzLT5uc2VjdG9yIC09IHNlY3RvcnM7CiAKLSAgICAvKiBsYXVuY2ggbmV4dCB0cmFuc2Zl ciAqLwotICAgIG4gPSBzLT5uc2VjdG9yOwotICAgIGlmIChuID4gSURFX0RNQV9CVUZfU0VDVE9S UykKLSAgICAgICAgbiA9IElERV9ETUFfQlVGX1NFQ1RPUlM7Ci0gICAgcy0+aW9fYnVmZmVyX2lu ZGV4ID0gMDsKLSAgICBzLT5pb19idWZmZXJfc2l6ZSA9IG4gKiA1MTI7CiAjaWZkZWYgREVCVUdf QUlPCi0gICAgcHJpbnRmKCJhaW9fcmVhZDogc2VjdG9yX251bT0lbGxkIG49JWRcbiIsIHNlY3Rv cl9udW0sIG4pOworICAgIHByaW50ZigiaWRlX2RtYV9zdWJtaXRfd3JpdGU6IHNlY3Rvcl9udW09 JWxsZCBuPSVkXG4iLCBzZWN0b3JfbnVtLCBzZWN0b3JzKTsKICNlbmRpZgotICAgIGJtLT5haW9j YiA9IGJkcnZfYWlvX3JlYWQocy0+YnMsIHNlY3Rvcl9udW0sIHMtPmlvX2J1ZmZlciwgbiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZV9yZWFkX2RtYV9jYiwgYm0pOwotICAgIGlk ZV9kbWFfc3VibWl0X2NoZWNrKHMsIGlkZV9yZWFkX2RtYV9jYiwgYm0pOwotfQorICAgIGJtLT5h aW9jYiA9IGJtLT5iZHJ2X2Fpb19pb3Yocy0+YnMsIHNlY3Rvcl9udW0sIGRtYV9pb3YsIGlvdmNu dCwgbGVuLAorCQkJCSBkbWFfY2IsIGRtYV9jYl9wYXJhbSk7CisgICAgaWYgKCFibS0+YWlvY2Ip CisJcmV0dXJuIC0zMDAxOwogCi1zdGF0aWMgdm9pZCBpZGVfc2VjdG9yX3JlYWRfZG1hKElERVN0 YXRlICpzKQotewotICAgIHMtPnN0YXR1cyA9IFJFQURZX1NUQVQgfCBTRUVLX1NUQVQgfCBEUlFf U1RBVCB8IEJVU1lfU1RBVDsKLSAgICBzLT5pb19idWZmZXJfaW5kZXggPSAwOwotICAgIHMtPmlv X2J1ZmZlcl9zaXplID0gMDsKLSAgICBpZGVfZG1hX3N0YXJ0KHMsIGlkZV9yZWFkX2RtYV9jYik7 CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9zZWN0b3Jfd3JpdGVfdGltZXJf Y2Iodm9pZCAqb3BhcXVlKQpAQCAtMTAyOCw2MiArMTA1MSwzMSBAQAogICAgIH0KIH0KIAotc3Rh dGljIHZvaWQgaWRlX3dyaXRlX2RtYV9jYih2b2lkICpvcGFxdWUsIGludCByZXQpCitzdGF0aWMg dm9pZCBpZGVfc2VjdG9yX2RtYV9zdGFydChCTURNQVN0YXRlICpibSkKIHsKLSAgICBCTURNQVN0 YXRlICpibSA9IG9wYXF1ZTsKLSAgICBJREVTdGF0ZSAqcyA9IGJtLT5pZGVfaWY7Ci0gICAgaW50 IG47Ci0gICAgaW50NjRfdCBzZWN0b3JfbnVtOwotCi0gICAgaWYgKHJldCA8IDApIHsKLQlpZGVf ZG1hX2Vycm9yKHMpOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBuID0gcy0+aW9fYnVmZmVyX3Np emUgPj4gOTsKLSAgICBzZWN0b3JfbnVtID0gaWRlX2dldF9zZWN0b3Iocyk7Ci0gICAgaWYgKG4g PiAwKSB7Ci0gICAgICAgIHNlY3Rvcl9udW0gKz0gbjsKLSAgICAgICAgaWRlX3NldF9zZWN0b3Io cywgc2VjdG9yX251bSk7Ci0gICAgICAgIHMtPm5zZWN0b3IgLT0gbjsKLSAgICB9Ci0KLSAgICAv KiBlbmQgb2YgdHJhbnNmZXIgPyAqLwotICAgIGlmIChzLT5uc2VjdG9yID09IDApIHsKLSAgICAg ICAgcy0+c3RhdHVzID0gUkVBRFlfU1RBVCB8IFNFRUtfU1RBVDsKLSAgICAgICAgaWRlX3NldF9p cnEocyk7Ci0gICAgZW90OgotICAgICAgICBibS0+c3RhdHVzICY9IH5CTV9TVEFUVVNfRE1BSU5H OwotICAgICAgICBibS0+c3RhdHVzIHw9IEJNX1NUQVRVU19JTlQ7Ci0gICAgICAgIGJtLT5kbWFf Y2IgPSBOVUxMOwotICAgICAgICBibS0+aWRlX2lmID0gTlVMTDsKLSAgICAgICAgYm0tPmFpb2Ni ID0gTlVMTDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIGxhdW5jaCBuZXh0IHRy YW5zZmVyICovCi0gICAgbiA9IHMtPm5zZWN0b3I7Ci0gICAgaWYgKG4gPiBJREVfRE1BX0JVRl9T RUNUT1JTKQotICAgICAgICBuID0gSURFX0RNQV9CVUZfU0VDVE9SUzsKLSAgICBzLT5pb19idWZm ZXJfaW5kZXggPSAwOwotICAgIHMtPmlvX2J1ZmZlcl9zaXplID0gbiAqIDUxMjsKLQotICAgIGlm IChkbWFfYnVmX3J3KGJtLCAwKSA9PSAwKQotICAgICAgICBnb3RvIGVvdDsKLSNpZmRlZiBERUJV R19BSU8KLSAgICBwcmludGYoImFpb193cml0ZTogc2VjdG9yX251bT0lbGxkIG49JWRcbiIsIHNl Y3Rvcl9udW0sIG4pOwotI2VuZGlmCi0gICAgYm0tPmFpb2NiID0gYmRydl9haW9fd3JpdGUocy0+ YnMsIHNlY3Rvcl9udW0sIHMtPmlvX2J1ZmZlciwgbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZGVfd3JpdGVfZG1hX2NiLCBibSk7Ci0gICAgaWRlX2RtYV9zdWJtaXRfY2hlY2so cywgaWRlX3dyaXRlX2RtYV9jYiwgYm0pOworICAgIGludCBpb3ZjbnQgPSBidWlsZF9kbWFfc2co Ym0pOworICAgIHBjaV9kbWFfc2coKFBDSURldmljZSAqKWJtLT5wY2lfZGV2LCBibS0+c2csIGlv dmNudCwKKwkgICAgICAgaWRlX2RtYV9zdWJtaXQsIGlkZV9kbWFfY29tcGxldGUsIGJtLAorCSAg ICAgICBibS0+ZG1hX3RvX21lbW9yeSwgNTEyKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3NlY3Rv cl93cml0ZV9kbWEoSURFU3RhdGUgKnMpCitzdGF0aWMgdm9pZCBpZGVfc2VjdG9yX2RtYShJREVT dGF0ZSAqcywgQmxvY2tEcml2ZXJBSU9JT1YgKmJkcnZfYWlvX2lvdiwKKwkJCSAgIGludCBkbWFf dG9fbWVtb3J5KQogeworICAgIEJNRE1BU3RhdGUgKmJtID0gcy0+Ym1kbWE7CisgICAgaWYoIWJt KQorCWdvdG8gZXJyOworCiAgICAgcy0+c3RhdHVzID0gUkVBRFlfU1RBVCB8IFNFRUtfU1RBVCB8 IERSUV9TVEFUIHwgQlVTWV9TVEFUOwotICAgIHMtPmlvX2J1ZmZlcl9pbmRleCA9IDA7Ci0gICAg cy0+aW9fYnVmZmVyX3NpemUgPSAwOwotICAgIGlkZV9kbWFfc3RhcnQocywgaWRlX3dyaXRlX2Rt YV9jYik7CisgICAgYm0tPmlkZV9pZiA9IHM7CisgICAgYm0tPmJkcnZfYWlvX2lvdiA9IGJkcnZf YWlvX2lvdjsKKyAgICBibS0+ZG1hX3RvX21lbW9yeSA9IGRtYV90b19tZW1vcnk7CisgICAgaWYg KGJtLT5zdGF0dXMgJiBCTV9TVEFUVVNfRE1BSU5HKQorCWlkZV9zZWN0b3JfZG1hX3N0YXJ0KGJt KTsKKyAgICByZXR1cm47CisKK2VycjoKKyAgICBpZGVfZG1hX2Vycm9yKHMpOwogfQogCiBzdGF0 aWMgdm9pZCBpZGVfYXRhcGlfY21kX29rKElERVN0YXRlICpzKQpAQCAtMjIxOSw3ICsyMjExLDcg QEAKICAgICAgICAgICAgIGlmICghcy0+YnMpCiAgICAgICAgICAgICAgICAgZ290byBhYm9ydF9j bWQ7CiAJICAgIGlkZV9jbWRfbGJhNDhfdHJhbnNmb3JtKHMsIGxiYTQ4KTsKLSAgICAgICAgICAg IGlkZV9zZWN0b3JfcmVhZF9kbWEocyk7CisgICAgICAgICAgICBpZGVfc2VjdG9yX2RtYShzLCBi ZHJ2X2Fpb19yZWFkdiwgMSk7CiAgICAgICAgICAgICBicmVhazsKIAljYXNlIFdJTl9XUklURURN QV9FWFQ6CiAJICAgIGxiYTQ4ID0gMTsKQEAgLTIyMjgsNyArMjIyMCw3IEBACiAgICAgICAgICAg ICBpZiAoIXMtPmJzKQogICAgICAgICAgICAgICAgIGdvdG8gYWJvcnRfY21kOwogCSAgICBpZGVf Y21kX2xiYTQ4X3RyYW5zZm9ybShzLCBsYmE0OCk7Ci0gICAgICAgICAgICBpZGVfc2VjdG9yX3dy aXRlX2RtYShzKTsKKyAgICAgICAgICAgIGlkZV9zZWN0b3JfZG1hKHMsIGJkcnZfYWlvX3dyaXRl diwgMCk7CiAgICAgICAgICAgICBzLT5tZWRpYV9jaGFuZ2VkID0gMTsKICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICBjYXNlIFdJTl9SRUFEX05BVElWRV9NQVhfRVhUOgpAQCAtMjg1Miw2ICsy ODQ0LDcgQEAKICAgICAgICAgLyogY2FuY2VsIERNQSByZXF1ZXN0ICovCiAgICAgICAgIGJtLT5p ZGVfaWYgPSBOVUxMOwogICAgICAgICBibS0+ZG1hX2NiID0gTlVMTDsKKwlibS0+YmRydl9haW9f aW92ID0gTlVMTDsKICAgICAgICAgaWYgKGJtLT5haW9jYikgewogI2lmZGVmIERFQlVHX0FJTwog ICAgICAgICAgICAgcHJpbnRmKCJhaW9fY2FuY2VsXG4iKTsKQEAgLTI4NzYsNyArMjg2OSw5IEBA CiAgICAgICAgIGlmICghKGJtLT5zdGF0dXMgJiBCTV9TVEFUVVNfRE1BSU5HKSkgewogICAgICAg ICAgICAgYm0tPnN0YXR1cyB8PSBCTV9TVEFUVVNfRE1BSU5HOwogICAgICAgICAgICAgLyogc3Rh cnQgZG1hIHRyYW5zZmVyIGlmIHBvc3NpYmxlICovCi0gICAgICAgICAgICBpZiAoYm0tPmRtYV9j YikKKwkgICAgaWYgKGJtLT5iZHJ2X2Fpb19pb3YpCisJCWlkZV9zZWN0b3JfZG1hX3N0YXJ0KGJt KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJtLT5kbWFfY2IpCiAgICAgICAgICAgICAgICAgYm0t PmRtYV9jYihibSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYm0tPmNtZCA9IHZhbCAmIDB4MDk7 CkluZGV4OiBxZW11L2NwdS1hbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvY3B1LWFsbC5o CTIwMDgtMTEtMzAgMTg6MjU6NDcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2NwdS1hbGwuaAky MDA4LTExLTMwIDE4OjI1OjU4LjAwMDAwMDAwMCArMDAwMApAQCAtODkxLDE0ICs4OTEsMTkgQEAK IENQVVJlYWRNZW1vcnlGdW5jICoqY3B1X2dldF9pb19tZW1vcnlfcmVhZChpbnQgaW9faW5kZXgp OwogCiB2b2lkIGNwdV9waHlzaWNhbF9tZW1vcnlfcncodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIs IHVpbnQ4X3QgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQg aXNfd3JpdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGludCBp c193cml0ZSk7Cit2b2lkIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGVfcG9zdF9kbWEodGFyZ2V0 X3BoeXNfYWRkcl90IGFkZHIsCisJCQkJCXNpemVfdCBsZW4pOwordWludDhfdCAqY3B1X3BoeXNp Y2FsX21lbW9yeV9jYW5fZG1hKHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAorCQkJCSAgICAgc2l6 ZV90IGxlbiwgaW50IGlzX3dyaXRlLAorCQkJCSAgICAgaW50IGFsaWdubWVudCk7CiBzdGF0aWMg aW5saW5lIHZvaWQgY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKHRhcmdldF9waHlzX2FkZHJfdCBh ZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90 ICpidWYsIGludCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5 X3J3KGFkZHIsIGJ1ZiwgbGVuLCAwKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcGh5c2lj YWxfbWVtb3J5X3dyaXRlKHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVu KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqYnVmLCBzaXplX3QgbGVuKQogewogICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcncoYWRk ciwgKHVpbnQ4X3QgKilidWYsIGxlbiwgMSk7CiB9CkluZGV4OiBxZW11L2h3L3BjaV9kbWEuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAw MDAKKysrIHFlbXUvaHcvcGNpX2RtYS5jCTIwMDgtMTEtMzAgMTg6MjU6NTguMDAwMDAwMDAwICsw MDAwCkBAIC0wLDAgKzEsMzY2IEBACisvKgorICogUUVNVSBQQ0kgRE1BIG9wZXJhdGlvbnMKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz CisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisj aW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAicGNpX2RtYS5oIgorCisjZGVmaW5lIE1BWF9E TUFfQk9VTkNFX0JVRkZFUiAoMTAyNCoxMDI0KQorLy8jZGVmaW5lIERFQlVHX0JPVU5DRQorLy8j ZGVmaW5lIE1BWF9ETUFfQk9VTkNFX0JVRkZFUiAoNTEyKQorLy8jZGVmaW5lIERJU0FCTEVfSU9W RUNfQ0FDSEUKKwordHlwZWRlZiBzdHJ1Y3QgUUVNVVBjaURtYVNnUGFyYW0geworICAgIFFFTVVQ Y2lEbWFTZ1N1Ym1pdCAqcGNpX2RtYV9zZ19zdWJtaXQ7CisgICAgUUVNVVBjaURtYVNnQ29tcGxl dGUgKnBjaV9kbWFfc2dfY29tcGxldGU7CisgICAgdm9pZCAqcGNpX2RtYV9zZ19vcGFxdWU7Cisg ICAgaW50IGRtYV90b19tZW1vcnk7CisgICAgaW50IGFsaWdubWVudDsKKyAgICB1aW50OF90ICpi b3VuY2U7CisgICAgUUVNVVBjaURtYVNnICpzZzsKKyAgICBpbnQgaW92Y250OworICAgIGludCBy ZXN0YXJ0X2lvdmNudDsKKyAgICBzaXplX3QgcmVzdGFydF9vZmZzZXQ7CisgICAgaW50IGN1cnJf cmVzdGFydF9pb3ZjbnQ7CisgICAgc2l6ZV90IGN1cnJfcmVzdGFydF9vZmZzZXQ7CisgICAgc2l6 ZV90IGN1cnJfbGVuOworI2lmbmRlZiBESVNBQkxFX0lPVkVDX0NBQ0hFCisgICAgc3RydWN0IFFF TVVQY2lEbWFTZ1BhcmFtICpuZXh0OworI2VuZGlmCisgICAgc3RydWN0IGlvdmVjIGlvdjsKK30g UUVNVVBjaURtYVNnUGFyYW07CisKKyNpZm5kZWYgRElTQUJMRV9JT1ZFQ19DQUNIRQorLyoKKyAq IFRvbyBtYW55IGVudHJpZXMgd2lsbCBydW4gc2xvd2VyIGFuZCB3YXN0ZSBtZW1vcnksIHRoaXMg aXMgcmVhbGx5CisgKiBvbmx5IGFib3V0IHRoZSBmYXN0IHBhdGggc28gaXQgbXVzdCBiZSBzbWFs bCwgc2xvdyBwYXRoIGlzIGZpbmUgdG8KKyAqIGFsbG9jYXRlIGR5bmFtaWNhbGx5LiBNYXggbWVt b3J5IHVzZWQgaXMgc2xpZ2h0bHkgbW9yZSB0aGFuCisgKiBNQVhfSU9WRUNfRU5UUklFUyAqIE1B WF9JT1ZFQ19JT1ZDTlQgKiBzaXplb2Yoc3RydWN0IGlvdmVjKS4KKyAqLworI2RlZmluZSBNQVhf SU9WRUNfRU5UUklFUyAxMAorCisvKgorICogRG9uJ3QgY2FjaGUgZXhjZXB0aW9uYWxseSBsYXJn ZSBpb3ZjbnQgdXNlZCBmb3IgaHVnZSBETUEgdHJhbnNmZXJzCisgKiBhcyB0aGUgRE1BIHRyYW5z ZmVyIG1heSB0YWtlIG11Y2ggbG9uZ2VyIHRoYW4gbWFsbG9jIGFuZCBodWdlCisgKiBtZW1vcnkg Y291bGQgYmUgd2FzdGVkIGlmIGl0IGhhcHBlbnMgb25seSBvbmNlIGluIGEgd2hpbGUuCisgKi8K KyNkZWZpbmUgTUFYX0lPVkVDX0lPVkNOVCAyMDQ4CisKK3N0YXRpYyBRRU1VUGNpRG1hU2dQYXJh bSAqc2dfbGlzdDsKK3N0YXRpYyBsb25nIG1heF9zZ19pbl9mbGlnaHQsIHNnX2luX2ZsaWdodDsK Kworc3RhdGljIFFFTVVQY2lEbWFTZ1BhcmFtICpxZW11X2dldF9wY2lfZG1hX3NnKGludCBpb3Zj bnQpCit7CisgICAgUUVNVVBjaURtYVNnUGFyYW0gKmVudHJ5ID0gc2dfbGlzdCwgKmxhc3Q7CisK KyAgICB3aGlsZSAoZW50cnkpIHsKKwlpZiAoZW50cnktPmlvdmNudCA+PSBpb3ZjbnQpIHsKKwkg ICAgaWYgKGVudHJ5ID09IHNnX2xpc3QpCisJCXNnX2xpc3QgPSBzZ19saXN0LT5uZXh0OworCSAg ICBlbHNlCisJCWxhc3QtPm5leHQgPSBlbnRyeS0+bmV4dDsKKwkgICAgZ290byBmb3VuZDsKKwl9 CisJbGFzdCA9IGVudHJ5OworCWVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgZW50 cnkgPSBxZW11X21hbGxvYyhzaXplb2YoUUVNVVBjaURtYVNnUGFyYW0pICsKKwkJCXNpemVvZihz dHJ1Y3QgaW92ZWMpICogKGlvdmNudC0xKSk7CisgICAgaWYgKCFlbnRyeSkKKwlyZXR1cm4gTlVM TDsKKworICAgIGlmIChpb3ZjbnQgPD0gTUFYX0lPVkVDX0lPVkNOVCkgeworICAgIGZvdW5kOgor CXNnX2luX2ZsaWdodCArPSAxOworCWlmIChzZ19pbl9mbGlnaHQgPiBtYXhfc2dfaW5fZmxpZ2h0 KQorCSAgICBtYXhfc2dfaW5fZmxpZ2h0ID0gc2dfaW5fZmxpZ2h0OworICAgIH0KKyAgICByZXR1 cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIHFlbXVfcmVsZWFzZV9wY2lfZG1hX3NnKFFFTVVQ Y2lEbWFTZ1BhcmFtICp0aGlzKQoreworICAgIFFFTVVQY2lEbWFTZ1BhcmFtICptaW5fZW50cnkg PSBOVUxMLCAqZW50cnkgPSBzZ19saXN0OworICAgIFFFTVVQY2lEbWFTZ1BhcmFtICptaW5fbGFz dCA9IE5VTEwsICpsYXN0ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbWluX2lvdmNudCA9IC0x OworICAgIGludCBuciA9IDAsIHRvdDsKKworICAgIGlmICh0aGlzLT5pb3ZjbnQgPiBNQVhfSU9W RUNfSU9WQ05UKSB7CisJcWVtdV9mcmVlKHRoaXMpOworCXJldHVybjsKKyAgICB9CisKKyAgICB3 aGlsZSAoZW50cnkpIHsKKwluciArPSAxOworCWlmICgodW5zaWduZWQgaW50KWVudHJ5LT5pb3Zj bnQgPD0gbWluX2lvdmNudCkgeworCSAgICBtaW5fZW50cnkgPSBlbnRyeTsKKwkgICAgbWluX2xh c3QgPSBsYXN0OworCSAgICBtaW5faW92Y250ID0gZW50cnktPmlvdmNudDsKKwl9CisJbGFzdCA9 IGVudHJ5OworCWVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgYXNzZXJ0KG1heF9z Z19pbl9mbGlnaHQgPiAwKTsKKyAgICBhc3NlcnQoc2dfaW5fZmxpZ2h0ID4gMCk7CisgICAgdG90 ID0gbnIrc2dfaW5fZmxpZ2h0OyAKKyAgICBpZiAodG90ID4gbWF4X3NnX2luX2ZsaWdodCB8fCB0 b3QgPiBNQVhfSU9WRUNfRU5UUklFUykgeworCS8qIGRldGFpbDogcmVwbGFjZSBldmVuIGlmIGl0 J3MgZXF1YWwgYXMgaXQncyBjYWNoZSBob3QgKi8KKwlpZiAoKHVuc2lnbmVkIGludCl0aGlzLT5p b3ZjbnQgPCBtaW5faW92Y250KQorCSAgICBxZW11X2ZyZWUodGhpcyk7CisJZWxzZSB7CisJICAg IGFzc2VydChuciA+IDApOworCSAgICBpZiAobWluX2VudHJ5ID09IHNnX2xpc3QpIHsKKwkJdGhp cy0+bmV4dCA9IHNnX2xpc3QtPm5leHQ7CisJICAgIH0gZWxzZSB7CisJCW1pbl9sYXN0LT5uZXh0 ID0gbWluX2VudHJ5LT5uZXh0OworCQl0aGlzLT5uZXh0ID0gc2dfbGlzdDsKKwkgICAgfQorCSAg ICBzZ19saXN0ID0gdGhpczsKKwkgICAgcWVtdV9mcmVlKG1pbl9lbnRyeSk7CisJfQorICAgIH0g ZWxzZSB7CisJdGhpcy0+bmV4dCA9IHNnX2xpc3Q7CisJc2dfbGlzdCA9IHRoaXM7CisgICAgfQor ICAgIHNnX2luX2ZsaWdodCAtPSAxOworICAgIGFzc2VydChzZ19pbl9mbGlnaHQgPj0gMCk7Cit9 CisjZWxzZSAvKiBESVNBQkxFX0lPVkVDX0NBQ0hFICovCisjZGVmaW5lIHFlbXVfZ2V0X3BjaV9k bWFfc2coaW92Y250KSBxZW11X21hbGxvYyhzaXplb2YoUUVNVVBjaURtYVNnUGFyYW0pKyhzaXpl b2Yoc3RydWN0IGlvdmVjKSooKGlvdmNudCktMSkpKSAKKyNkZWZpbmUgcWVtdV9yZWxlYXNlX3Bj aV9kbWFfc2cocGFyYW0pIHFlbXVfZnJlZShwYXJhbSkKKyNlbmRpZiAvKiBESVNBQkxFX0lPVkVD X0NBQ0hFICovCisKK3N0YXRpYyBpbnQgcGNpX2RtYV9zZ19tYXBfZGlyZWN0KFFFTVVQY2lEbWFT ZyAqc2csCisJCQkJIGludCBpb3ZjbnQsCisJCQkJIGludCBkbWFfdG9fbWVtb3J5LAorCQkJCSBp bnQgYWxpZ25tZW50LAorCQkJCSBzaXplX3QgKmxlbiwKKwkJCQkgc3RydWN0IGlvdmVjICpkbWFf aW92KQoreworICAgIGludCBpZHggPSAwOworICAgIHNpemVfdCBfbGVuID0gMDsKKworI2lmZGVm IERFQlVHX0JPVU5DRQorICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgICBmb3IgKGlkeCA9IDA7 IGlkeCA8IGlvdmNudDsgaWR4KyspIHsKKwl2b2lkICogYWRkcjsKKworCWlmIChfbGVuICsgc2db aWR4XS5sZW4gPD0gX2xlbikKKwkgICAgcmV0dXJuIDA7CisJX2xlbiArPSBzZ1tpZHhdLmxlbjsK KworCWFkZHIgPSBjcHVfcGh5c2ljYWxfbWVtb3J5X2Nhbl9kbWEoc2dbaWR4XS5hZGRyLAorCQkJ CQkgICBzZ1tpZHhdLmxlbiwKKwkJCQkJICAgZG1hX3RvX21lbW9yeSwKKwkJCQkJICAgYWxpZ25t ZW50KTsKKwlpZiAoIWFkZHIpCisJICAgIHJldHVybiAwOworCisJZG1hX2lvdltpZHhdLmlvdl9i YXNlID0gYWRkcjsKKwlkbWFfaW92W2lkeF0uaW92X2xlbiA9IHNnW2lkeF0ubGVuOworICAgIH0K KworICAgICpsZW4gPSBfbGVuOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjaV9k bWFfc2dfbWFwX2JvdW5jZShRRU1VUGNpRG1hU2dQYXJhbSAqcGFyYW0pCit7CisgICAgaW50IGlk eDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIHBhcmFtLT5jdXJyX3Jlc3RhcnRfaW92Y250 ID0gcGFyYW0tPnJlc3RhcnRfaW92Y250OworICAgIHBhcmFtLT5jdXJyX3Jlc3RhcnRfb2Zmc2V0 ID0gcGFyYW0tPnJlc3RhcnRfb2Zmc2V0OworCisgICAgZm9yIChpZHggPSBwYXJhbS0+cmVzdGFy dF9pb3ZjbnQ7IGlkeCA8IHBhcmFtLT5pb3ZjbnQ7IGlkeCsrKSB7CisJaWYgKGxlbiArIHBhcmFt LT5zZ1tpZHhdLmxlbiA8PSBsZW4pCisJICAgIHJldHVybiAwOworCWxlbiArPSBwYXJhbS0+c2db aWR4XS5sZW4gLSBwYXJhbS0+cmVzdGFydF9vZmZzZXQ7CisJcGFyYW0tPnJlc3RhcnRfb2Zmc2V0 ID0gMDsKKwlpZiAobGVuID4gTUFYX0RNQV9CT1VOQ0VfQlVGRkVSKSB7CisJICAgIHNpemVfdCBs ZWZ0b3ZlciA9IGxlbiAtIE1BWF9ETUFfQk9VTkNFX0JVRkZFUjsKKwkgICAgcGFyYW0tPnJlc3Rh cnRfb2Zmc2V0ID0gcGFyYW0tPnNnW2lkeF0ubGVuIC0gbGVmdG92ZXI7CisJICAgIGxlbiA9IE1B WF9ETUFfQk9VTkNFX0JVRkZFUjsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBwYXJhbS0+ cmVzdGFydF9pb3ZjbnQgPSBpZHg7CisgICAgcGFyYW0tPmN1cnJfbGVuID0gbGVuOworCisgICAg aWYgKGxlbiAmIChwYXJhbS0+YWxpZ25tZW50LTEpKQorCXJldHVybiAwOworCisgICAgcGFyYW0t Pmlvdi5pb3ZfbGVuID0gbGVuOworICAgIGlmICghcGFyYW0tPmJvdW5jZSkgeworCXBhcmFtLT5i b3VuY2UgPSBxZW11X21lbWFsaWduKHBhcmFtLT5hbGlnbm1lbnQsIGxlbik7CisJaWYgKCFwYXJh bS0+Ym91bmNlKQorCSAgICByZXR1cm4gMDsKKwlwYXJhbS0+aW92Lmlvdl9iYXNlID0gcGFyYW0t PmJvdW5jZTsKKyAgICB9CisKKyAgICBpZiAoIXBhcmFtLT5kbWFfdG9fbWVtb3J5KSB7CisJaW50 IGlkeDsKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlmb3IgKGlkeCA9IHBhcmFtLT5jdXJyX3Jlc3Rh cnRfaW92Y250OworCSAgICAgaWR4IDwgcGFyYW0tPmlvdmNudCAmJiBvZmZzZXQgPCBsZW47IGlk eCsrKSB7CisJICAgIHNpemVfdCBjb3B5X2xlbiA9IHBhcmFtLT5zZ1tpZHhdLmxlbiAtIHBhcmFt LT5jdXJyX3Jlc3RhcnRfb2Zmc2V0OworCSAgICBpZiAob2Zmc2V0K2NvcHlfbGVuID4gbGVuKQor CQljb3B5X2xlbiA9IGxlbjsKKwkgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKHBhcmFtLT5z Z1tpZHhdLmFkZHIgKyAKKwkJCQkgICAgIHBhcmFtLT5jdXJyX3Jlc3RhcnRfb2Zmc2V0LAorCQkJ CSAgICAgcGFyYW0tPmJvdW5jZSArIG9mZnNldCwKKwkJCQkgICAgIGNvcHlfbGVuKTsKKwkgICAg cGFyYW0tPmN1cnJfcmVzdGFydF9vZmZzZXQgPSAwOworCSAgICBvZmZzZXQgKz0gY29weV9sZW47 CisJfQorICAgIH0KKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwY2lfZG1hX3Nn X3VubWFwX2RpcmVjdChRRU1VUGNpRG1hU2dQYXJhbSAqcGFyYW0sIGludCByZXQpCit7CisgICAg aWYgKCFyZXQgJiYgcGFyYW0tPmRtYV90b19tZW1vcnkpIHsKKwlpbnQgaWR4OworCVFFTVVQY2lE bWFTZyAqc2cgPSBwYXJhbS0+c2c7CisJZm9yIChpZHggPSAwOyBpZHggPCBwYXJhbS0+aW92Y250 OyBpZHgrKykKKwkgICAgY3B1X3BoeXNpY2FsX21lbW9yeV93cml0ZV9wb3N0X2RtYShzZ1tpZHhd LmFkZHIsCisJCQkJCSAgICAgICBzZ1tpZHhdLmxlbik7CisgICAgfQorfQorCitpbnQgcGNpX2Rt YV9zZ191bm1hcF9ib3VuY2UoUUVNVVBjaURtYVNnUGFyYW0gKnBhcmFtLCBpbnQgcmV0KQorewor ICAgIGlmICghcmV0ICYmIHBhcmFtLT5kbWFfdG9fbWVtb3J5KSB7CisJaW50IGlkeDsKKwlzaXpl X3Qgb2Zmc2V0ID0gMDsKKwlmb3IgKGlkeCA9IHBhcmFtLT5jdXJyX3Jlc3RhcnRfaW92Y250Owor CSAgICAgaWR4IDwgcGFyYW0tPmlvdmNudCAmJiBvZmZzZXQgPCBwYXJhbS0+Y3Vycl9sZW47IGlk eCsrKSB7CisJICAgIHNpemVfdCBjb3B5X2xlbiA9IHBhcmFtLT5zZ1tpZHhdLmxlbiAtIHBhcmFt LT5jdXJyX3Jlc3RhcnRfb2Zmc2V0OworCSAgICBpZiAob2Zmc2V0K2NvcHlfbGVuID4gcGFyYW0t PmN1cnJfbGVuKQorCQljb3B5X2xlbiA9IHBhcmFtLT5jdXJyX2xlbjsKKwkgICAgY3B1X3BoeXNp Y2FsX21lbW9yeV93cml0ZShwYXJhbS0+c2dbaWR4XS5hZGRyICsKKwkJCQkgICAgICBwYXJhbS0+ Y3Vycl9yZXN0YXJ0X29mZnNldCwKKwkJCQkgICAgICBwYXJhbS0+Ym91bmNlICsgb2Zmc2V0LAor CQkJCSAgICAgIGNvcHlfbGVuKTsKKwkgICAgcGFyYW0tPmN1cnJfcmVzdGFydF9vZmZzZXQgPSAw OworCSAgICBvZmZzZXQgKz0gY29weV9sZW47CisJfQorICAgIH0KKyAgICBpZiAocGFyYW0tPnJl c3RhcnRfaW92Y250ID09IHBhcmFtLT5pb3ZjbnQgfHwgcmV0KSB7CisJcWVtdV9mcmVlKHBhcmFt LT5ib3VuY2UpOworCXJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGlj IHZvaWQgcGNpX2RtYV9zZ19jYih2b2lkICpvcGFxdWUsIGludCByZXQpCit7CisgICAgUUVNVVBj aURtYVNnUGFyYW0gKnBhcmFtID0gb3BhcXVlOworICAgIGludCByZXN0YXJ0ID0gMDsKKworICAg IGlmICghcGFyYW0tPmJvdW5jZSkKKwlwY2lfZG1hX3NnX3VubWFwX2RpcmVjdChwYXJhbSwgcmV0 KTsKKyAgICBlbHNlCisJcmVzdGFydCA9IHBjaV9kbWFfc2dfdW5tYXBfYm91bmNlKHBhcmFtLCBy ZXQpOworCisgICAgaWYgKHJlc3RhcnQpIHsKKwlyZXQgPSAtMTAwMDsKKwlpZiAoIXBjaV9kbWFf c2dfbWFwX2JvdW5jZShwYXJhbSkpIHsKKwkgICAgcWVtdV9mcmVlKHBhcmFtLT5ib3VuY2UpOwor CSAgICBnb3RvIG91dF9mcmVlOworCX0KKwlyZXQgPSBwYXJhbS0+cGNpX2RtYV9zZ19zdWJtaXQo cGFyYW0tPnBjaV9kbWFfc2dfb3BhcXVlLAorCQkJCSAgICAgICAmcGFyYW0tPmlvdiwgMSwKKwkJ CQkgICAgICAgcGFyYW0tPmN1cnJfbGVuLAorCQkJCSAgICAgICBwY2lfZG1hX3NnX2NiLAorCQkJ CSAgICAgICBwYXJhbSk7CisgICAgfQorICAgIGlmIChyZXQgfHwgIXJlc3RhcnQpIHsKKyAgICBv dXRfZnJlZToKKwlwYXJhbS0+cGNpX2RtYV9zZ19jb21wbGV0ZShwYXJhbS0+cGNpX2RtYV9zZ19v cGFxdWUsIHJldCk7CisJcWVtdV9yZWxlYXNlX3BjaV9kbWFfc2cocGFyYW0pOworICAgIH0KK30K KworLyogUENJRGV2aWNlIGlzIHRoZXJlIGluIGNhc2Ugd2Ugd2FudCB0byBlbXVsYXRlIGFuIGlv bW11IGxhdGVyICovCit2b2lkIHBjaV9kbWFfc2coUENJRGV2aWNlICpwY2lfZGV2LAorCQlRRU1V UGNpRG1hU2cgKnNnLCBpbnQgaW92Y250LAorCQlRRU1VUGNpRG1hU2dTdWJtaXQgcGNpX2RtYV9z Z19zdWJtaXQsCisJCVFFTVVQY2lEbWFTZ0NvbXBsZXRlIHBjaV9kbWFfc2dfY29tcGxldGUsCisJ CXZvaWQgKnBjaV9kbWFfc2dfb3BhcXVlLAorCQlpbnQgZG1hX3RvX21lbW9yeSwgaW50IGFsaWdu bWVudCkKK3sKKyAgICBpbnQgcmV0OworICAgIFFFTVVQY2lEbWFTZ1BhcmFtICpwYXJhbTsKKwor ICAgIHJldCA9IC0yMDAwOworICAgIGlmICgodW5zaWduZWQgaW50KSBkbWFfdG9fbWVtb3J5ID4g MSkKKwlnb3RvIGVycjsKKyAgICBpZiAoKHVuc2lnbmVkIGludCkgYWxpZ25tZW50ID4gTUFYX0RN QV9CT1VOQ0VfQlVGRkVSKQorCWdvdG8gZXJyOworICAgIGlmIChpb3ZjbnQgPCAxKQorCWdvdG8g ZXJyOworCisgICAgcGFyYW0gPSBxZW11X2dldF9wY2lfZG1hX3NnKGlvdmNudCk7CisgICAgaWYg KCFwYXJhbSkKKwlnb3RvIGVycjsKKworICAgIHBhcmFtLT5wY2lfZG1hX3NnX3N1Ym1pdCA9IHBj aV9kbWFfc2dfc3VibWl0OworICAgIHBhcmFtLT5wY2lfZG1hX3NnX2NvbXBsZXRlID0gcGNpX2Rt YV9zZ19jb21wbGV0ZTsKKyAgICBwYXJhbS0+cGNpX2RtYV9zZ19vcGFxdWUgPSBwY2lfZG1hX3Nn X29wYXF1ZTsKKyAgICBwYXJhbS0+ZG1hX3RvX21lbW9yeSA9IGRtYV90b19tZW1vcnk7CisgICAg cGFyYW0tPmFsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBwYXJhbS0+Ym91bmNlID0gTlVMTDsK KyAgICBwYXJhbS0+c2cgPSBzZzsKKyAgICBwYXJhbS0+aW92Y250ID0gaW92Y250OworICAgIHBh cmFtLT5yZXN0YXJ0X29mZnNldCA9IHBhcmFtLT5yZXN0YXJ0X2lvdmNudCA9IDA7CisKKyAgICAv KiBtYXAgdGhlIHNnICovCisgICAgaWYgKCFwY2lfZG1hX3NnX21hcF9kaXJlY3Qoc2csIGlvdmNu dCwKKwkJCSAgICAgICBkbWFfdG9fbWVtb3J5LCBhbGlnbm1lbnQsCisJCQkgICAgICAgJnBhcmFt LT5jdXJyX2xlbiwgJnBhcmFtLT5pb3YpKSB7CisJcmV0ID0gLTIwMDQ7CisJaWYgKCFwY2lfZG1h X3NnX21hcF9ib3VuY2UocGFyYW0pKQorCSAgICBnb3RvIG91dF9mcmVlOworCWlvdmNudCA9IDE7 CisgICAgfQorCisgICAgLyogcnVuIHRoZSBJL08gKi8KKyAgICByZXQgPSBwY2lfZG1hX3NnX3N1 Ym1pdChwY2lfZG1hX3NnX29wYXF1ZSwKKwkJCSAgICAmcGFyYW0tPmlvdiwgaW92Y250LCBwYXJh bS0+Y3Vycl9sZW4sCisJCQkgICAgcGNpX2RtYV9zZ19jYiwKKwkJCSAgICBwYXJhbSk7CisgICAg aWYgKHJldCkKKyAgICBvdXRfZnJlZToKKwlwY2lfZG1hX3NnX2NiKHBhcmFtLCByZXQpOworICAg IHJldHVybjsKKworIGVycjoKKyAgICBwY2lfZG1hX3NnX2NvbXBsZXRlKHBjaV9kbWFfc2dfb3Bh cXVlLCByZXQpOworICAgIHJldHVybjsKK30KSW5kZXg6IHFlbXUvaHcvcGNpX2RtYS5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAor KysgcWVtdS9ody9wY2lfZG1hLmgJMjAwOC0xMS0zMCAxOTowNzo0Mi4wMDAwMDAwMDAgKzAwMDAK QEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBRRU1VX1BDSV9ETUFfSAorI2RlZmluZSBRRU1VX1BD SV9ETUFfSAorCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJibG9jay5oIgor Cit0eXBlZGVmIGludCBRRU1VUGNpRG1hU2dTdWJtaXQodm9pZCAqcGNpX2RtYV9zZ19vcGFxdWUs CisJCQkgICAgICAgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisJCQkgICAgICAgc2l6 ZV90IGxlbiwKKwkJCSAgICAgICBCbG9ja0RyaXZlckNvbXBsZXRpb25GdW5jIGRtYV9jYiwKKwkJ CSAgICAgICB2b2lkICpkbWFfY2JfcGFyYW0pOworCit0eXBlZGVmIHZvaWQgUUVNVVBjaURtYVNn Q29tcGxldGUodm9pZCAqcGNpX2RtYV9zZ19vcGFxdWUsIGludCByZXQpOworCit0eXBlZGVmIHN0 cnVjdCBRRU1VUGNpRG1hU2cgeworICAgIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyOworICAgIHNp emVfdCBsZW47Cit9IFFFTVVQY2lEbWFTZzsKKworLyogcGNpX2RtYS5jICovCit2b2lkIHBjaV9k bWFfc2coUENJRGV2aWNlICpwY2lfZGV2LAorCQlRRU1VUGNpRG1hU2cgKnNnLCBpbnQgaW92Y250 LAorCQlRRU1VUGNpRG1hU2dTdWJtaXQgKnBjaV9kbWFfc2dfc3VibWl0LAorCQlRRU1VUGNpRG1h U2dDb21wbGV0ZSAqcGNpX2RtYV9zZ19jb21wbGV0ZSwKKwkJdm9pZCAqcGNpX2RtYV9zZ19vcGFx dWUsCisJCWludCBkbWFfdG9fbWVtb3J5LCBpbnQgYWxpZ25tZW50KTsKKworI2VuZGlmCg== ------=_Part_66588_14618552.1228072288488--