Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3wEG-006gOp-3n for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Nov 2023 10:37:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r3wEE-00DYVS-PF for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Nov 2023 10:37:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3wED-00DYVK-UV for pgsql-hackers@lists.postgresql.org; Fri, 17 Nov 2023 10:37:38 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3wE7-00609E-Q0 for pgsql-hackers@postgresql.org; Fri, 17 Nov 2023 10:37:36 +0000 Received: from [172.21.97.0] (unknown [90.160.41.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4SWtdL2QvFz49Q47 for ; Fri, 17 Nov 2023 12:37:23 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1700217446; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=qZ0OlWHTPabYiQuBe/pbqyHtnCIJ9ntv0mbVhY9N3N8=; b=NPPgekK4Jrk/DvlqNd74xwZbsRSEeI8YG4QrAhJznMRO6E7PjK4INl1uQ0L9OEfuNTI0QS +VdWxsqrvmVPFGT4gHUeoaSUTyt7ao6X7MC9s9rccj0SjpqLiXbJ5FcOE2Vh3NJ5xTrlBV 15sEGxZ6+7kbtKZW8U03mrCx911laOjidITEw9brKCvcgE7LU6jmspRwg2qIitUEtx356O UrD/Ak0RYqVqzN7z36GVI+eXF0Vaq3PYKh+/R1i9TYqHgO07kmQJVY9DUKv6zSxPGO71dt LkvmFHcmv7gT47EcjbvBiQgXkG8da74N7gvhU6J8Q2AkK6Q7I/z5AzlpdnYaFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1700217446; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=qZ0OlWHTPabYiQuBe/pbqyHtnCIJ9ntv0mbVhY9N3N8=; b=jowca8n32VUyAISXwxqwQA2adsPQbrCW4nk1EkAcZpoDuNkWxDJiS0u5Lh2kQprjblS1vg hxBeplSE+Lh+GjTFPt+kXw2imrgTHMSwwlfDdTv1z41NTq5rj59aLKYHhhVZ05erqb/ScH DczjcZevF2FPLiCCCP/9xpC7RJy/GugSFdvEixWt7XxxVI2l6a1pyr7UrOz68PfMNwMUpv 7yQskmINBJU/UEaprHUgvb7p5d7HkEI/AOXQT1gaBB7F5bGKSB5JlsPp2+ApeHkteR0ZSH BVM+G4hihhiYcDWklhYcoLv0kxoAHIx8gwkMfihne8RU1+3lwULpoJg+hXNXng== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1700217446; a=rsa-sha256; cv=none; b=JT028U3E1nrYh5g3jHgZxyyYTeN0cUDjrFK9Zw7YrDPyZrmnO2mSE5QCiWP2LFhekiFPZU yzSo1HXjuO5WfT5ALWJEuRrcqeq7AXfGMI83GpPuiNh7cCrXZLDnTptzpQag/HFB6Aeq7w 4iax7eD48k0zr0eZKbO6pjCvKesVwRjw9dVM6FVXicce4asAgtmmpOwgiZavBSZYk7wjN+ P1DUsNfj4BHBkCweIRTLQ+1TMdTjzk8FiF9ZkjOYqete+RJgKta+UYDU1ZNAd9H+DffjlX 5z+lhA/xsbJRR73FUBV8GqPVIbhSwgtVy0V5oHD2Bas0x1pEp+XjVtTXbeM/ag== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------YJd0LHj2CVSXf1wXFVHS5cr5" Message-ID: Date: Fri, 17 Nov 2023 11:37:21 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Relation bulk write facility From: Heikki Linnakangas To: pgsql-hackers References: <30e8f366-58b3-b239-c521-422122dd5150@iki.fi> Content-Language: en-US In-Reply-To: <30e8f366-58b3-b239-c521-422122dd5150@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------YJd0LHj2CVSXf1wXFVHS5cr5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 19/09/2023 17:13, Heikki Linnakangas wrote: > The attached patch centralizes that pattern to a new bulk writing > facility, and changes all those AMs to use it. Here's a new rebased version of the patch. This includes fixes to the pageinspect regression test. They were explained in the commit message, but I forgot to include the actual test changes. That should fix the cfbot failures. -- Heikki Linnakangas Neon (https://neon.tech) --------------YJd0LHj2CVSXf1wXFVHS5cr5 Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Introduce-a-new-bulk-loading-facility.patch" Content-Disposition: attachment; filename="v2-0001-Introduce-a-new-bulk-loading-facility.patch" Content-Transfer-Encoding: base64 RnJvbSAxZWU1ZTJiNWQ0Zjg3YzFjNzA2MzA4MTRiODFiYWZlMmFjMTdhNjBkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTkgU2VwIDIwMjMgMTg6MDk6MzQgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDEvMV0gSW50cm9kdWNlIGEgbmV3IGJ1bGsgbG9hZGluZyBm YWNpbGl0eS4KClRoZSBuZXcgZmFjaWxpdHkgbWFrZXMgaXQgZWFzaWVyIHRvIG9wdGltaXpl IGJ1bGsgbG9hZGluZywgYXMgdGhlCmxvZ2ljIGZvciBidWZmZXJpbmcsIFdBTC1sb2dnaW5n LCBhbmQgc3luY2luZyB0aGUgcmVsYXRpb24gb25seSBuZWVkcwp0byBiZSBpbXBsZW1lbnRl ZCBvbmNlLiBJdCdzIGFsc28gbGVzcyBlcnJvci1wcm9uZTogV2UgaGF2ZSBoYWQgYQpudW1i ZXIgb2YgYnVncyBpbiBob3cgYSByZWxhdGlvbiBpcyBmc3luYydkIC0gb3Igbm90IC0gYXQg dGhlIGVuZCBvZiBhCmJ1bGsgbG9hZGluZyBvcGVyYXRpb24uIEJ5IGNlbnRyYWxpemluZyB0 aGF0IGxvZ2ljIHRvIG9uZSBwbGFjZSwgd2UKb25seSBuZWVkIHRvIHdyaXRlIGl0IGNvcnJl Y3RseSBvbmNlLgoKVGhlIG5ldyBmYWNpbGl0eSBpcyBmYXN0ZXIgZm9yIHNtYWxsIHJlbGF0 aW9uczogSW5zdGVhZCBvZiBvZiBjYWxsaW5nCnNtZ3JpbW1lZHN5bmMoKSwgd2UgcmVnaXN0 ZXIgdGhlIGZzeW5jIHRvIGhhcHBlbiBhdCBuZXh0IGNoZWNrcG9pbnQsCndoaWNoIGF2b2lk cyB0aGUgZnN5bmMgbGF0ZW5jeS4gVGhhdCBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGlm IHlvdQphcmUgZS5nLiByZXN0b3JpbmcgYSBzY2hlbWEtb25seSBkdW1wIHdpdGggbG90cyBv ZiByZWxhdGlvbnMuCgpJdCBpcyBhbHNvIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IHdpdGgg bGFyZ2UgcmVsYXRpb25zLCBhcyB0aGUgV0FMCmxvZ2dpbmcgaXMgcGVyZm9ybWVkIG11bHRp cGxlIHBhZ2VzIGF0IGEgdGltZS4gVGhhdCBhdm9pZHMgc29tZSBXQUwKaGVhZGVyIG92ZXJo ZWFkLiBUaGUgc29ydGVkIEdpU1QgaW5kZXggYnVpbGQgZGlkIHRoYXQgYWxyZWFkeSwgdGhp cwptb3ZlcyB0aGUgYnVmZmVyaW5nIHRvIHRoZSBuZXcgZmFjaWxpdHkuCgpUaGUgY2hhbmdl cyB0byBwYWdlaW5zcGVjdCBHaVNUIHRlc3QgbmVlZHMgYW4gZXhwbGFuYXRpb246IEJlZm9y ZSB0aGlzCnBhdGNoLCB0aGUgc29ydGVkIEdpU1QgaW5kZXggYnVpbGQgc2V0IHRoZSBMU04g b24gZXZlcnkgcGFnZSB0byB0aGUKc3BlY2lhbCBHaXN0QnVpbGRMU04gdmFsdWUsIG5vdCB0 aGUgTFNOIG9mIHRoZSBXQUwgcmVjb3JkLCBldmVuIHRob3VnaAp0aGV5IHdlcmUgV0FMLWxv Z2dlZC4gVGhlcmUgd2FzIG5vIHBhcnRpY3VsYXIgbmVlZCBmb3IgaXQsIGl0IGp1c3QKaGFw cGVuZWQgbmF0dXJhbGx5IHdoZW4gd2Ugd3JvdGUgb3V0IHRoZSBwYWdlcyBiZWZvcmUgV0FM LWxvZ2dpbmcKdGhlbS4gTm93IHdlIFdBTC1sb2cgdGhlIHBhZ2VzIGZpcnN0LCBsaWtlIGlu IEItdHJlZSBidWlsZCwgc28gdGhlCnBhZ2VzIGFyZSBzdGFtcGVkIHdpdGggdGhlIHJlY29y ZCdzIHJlYWwgTFNOLiBXaGVuIHRoZSBidWlsZCBpcyBub3QKV0FMLWxvZ2dlZCwgd2Ugc3Rp bGwgdXNlIEdpc3RCdWlsZExTTi4gVG8gbWFrZSB0aGUgdGVzdCBvdXRwdXQKcHJlZGljdGFi bGUsIHVzZSBhbiB1bmxvZ2dlZCBpbmRleC4KLS0tCiBjb250cmliL3BhZ2VpbnNwZWN0L2V4 cGVjdGVkL2dpc3Qub3V0IHwgIDE0ICstCiBjb250cmliL3BhZ2VpbnNwZWN0L3NxbC9naXN0 LnNxbCAgICAgIHwgIDE2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQu YyAgIHwgMTExICsrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhl YXAuYyB8ICA3MSArKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMg ICAgfCAgMjkgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyAgIHwg MTAyICsrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jIHwg IDQ5ICsrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jICAgICAgICAgfCAgMzgg Ky0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvTWFrZWZpbGUgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9idWxrX3dyaXRlLmMgfCAzMzQgKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAg fCAgNDMgKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21lc29uLmJ1aWxkICB8ICAg MSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgIHwgIDMxICsrKwog c3JjL2luY2x1ZGUvc3RvcmFnZS9idWxrX3dyaXRlLmggICAgICB8ICAyOCArKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2UvbWQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9zbWdyLmggICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgIHwgICAyICsKIDE3IGZpbGVzIGNoYW5nZWQsIDU0MyBpbnNl cnRpb25zKCspLCAzMjkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvc3RvcmFnZS9zbWdyL2J1bGtfd3JpdGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9pbmNsdWRlL3N0b3JhZ2UvYnVsa193cml0ZS5oCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w YWdlaW5zcGVjdC9leHBlY3RlZC9naXN0Lm91dCBiL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhw ZWN0ZWQvZ2lzdC5vdXQKaW5kZXggZDFhZGJhYjhhZTIuLjJiMWQ1NGE2Mjc5IDEwMDY0NAot LS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2dpc3Qub3V0CisrKyBiL2NvbnRy aWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvZ2lzdC5vdXQKQEAgLTEsMTMgKzEsNiBAQAotLS0g VGhlIGdpc3RfcGFnZV9vcGFxdWVfaW5mbygpIGZ1bmN0aW9uIHByaW50cyB0aGUgcGFnZSdz IExTTi4gTm9ybWFsbHksCi0tLSB0aGF0J3MgY29uc3RhbnQgMSAoR2lzdEJ1aWxkTFNOKSBv biBldmVyeSBwYWdlIG9mIGEgZnJlc2hseSBidWlsdCBHaVNUCi0tLSBpbmRleC4gQnV0IHdp dGggd2FsX2xldmVsPW1pbmltYWwsIHRoZSB3aG9sZSByZWxhdGlvbiBpcyBkdW1wZWQgdG8g V0FMIGF0Ci0tLSB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiBpdCdzIHNtYWxsZXIg dGhhbiB3YWxfc2tpcF90aHJlc2hvbGQsIHdoaWNoCi0tLSB1cGRhdGVzIHRoZSBMU05zLiBX cmFwIHRoZSB0ZXN0cyBvbiBnaXN0X3BhZ2Vfb3BhcXVlX2luZm8oKSBpbiB0aGUKLS0tIHNh bWUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgQ1JFQVRFIElOREVYIHNvIHRoYXQgd2Ugc2VlIHRo ZSBMU05zIGJlZm9yZQotLS0gdGhleSBhcmUgcG9zc2libHkgb3ZlcndyaXR0ZW4gYXQgZW5k IG9mIHRyYW5zYWN0aW9uLgotQkVHSU47Ci0tLSBDcmVhdGUgYSB0ZXN0IHRhYmxlIGFuZCBH aVNUIGluZGV4LgotQ1JFQVRFIFRBQkxFIHRlc3RfZ2lzdCBBUyBTRUxFQ1QgcG9pbnQoaSxp KSBwLCBpOjp0ZXh0IHQgRlJPTQorLS0gVGhlIGdpc3RfcGFnZV9vcGFxdWVfaW5mbygpIGZ1 bmN0aW9uIHByaW50cyB0aGUgcGFnZSdzIExTTi4KKy0tIFVzZSBhbiB1bmxvZ2dlZCBpbmRl eCwgc28gdGhhdCB0aGUgTFNOIGlzIHByZWRpY3RhYmxlLgorQ1JFQVRFIFVOTE9HR0VEIFRB QkxFIHRlc3RfZ2lzdCBBUyBTRUxFQ1QgcG9pbnQoaSxpKSBwLCBpOjp0ZXh0IHQgRlJPTQog ICAgIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGk7CiBDUkVBVEUgSU5ERVggdGVzdF9naXN0 X2lkeCBPTiB0ZXN0X2dpc3QgVVNJTkcgZ2lzdCAocCk7CiAtLSBQYWdlIDAgaXMgdGhlIHJv b3QsIHRoZSByZXN0IGFyZSBsZWFmIHBhZ2VzCkBAIC0yOSw3ICsyMiw2IEBAIFNFTEVDVCAq IEZST00gZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKGdldF9yYXdfcGFnZSgndGVzdF9naXN0X2lk eCcsIDIpKTsKICAwLzEgfCAwLzAgfCAgICAgICAgIDEgfCB7bGVhZn0KICgxIHJvdykKIAot Q09NTUlUOwogU0VMRUNUICogRlJPTSBnaXN0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0 ZXN0X2dpc3RfaWR4JywgMCksICd0ZXN0X2dpc3RfaWR4Jyk7CiAgaXRlbW9mZnNldCB8ICAg Y3RpZCAgICB8IGl0ZW1sZW4gfCBkZWFkIHwgICAgICAgICAgICAga2V5cyAgICAgICAgICAg ICAgCiAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNw ZWN0L3NxbC9naXN0LnNxbCBiL2NvbnRyaWIvcGFnZWluc3BlY3Qvc3FsL2dpc3Quc3FsCmlu ZGV4IGQyNjM1NDJiYTE1Li44NWJjNDRiODAwMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdl aW5zcGVjdC9zcWwvZ2lzdC5zcWwKKysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvZ2lz dC5zcWwKQEAgLTEsMTQgKzEsNiBAQAotLS0gVGhlIGdpc3RfcGFnZV9vcGFxdWVfaW5mbygp IGZ1bmN0aW9uIHByaW50cyB0aGUgcGFnZSdzIExTTi4gTm9ybWFsbHksCi0tLSB0aGF0J3Mg Y29uc3RhbnQgMSAoR2lzdEJ1aWxkTFNOKSBvbiBldmVyeSBwYWdlIG9mIGEgZnJlc2hseSBi dWlsdCBHaVNUCi0tLSBpbmRleC4gQnV0IHdpdGggd2FsX2xldmVsPW1pbmltYWwsIHRoZSB3 aG9sZSByZWxhdGlvbiBpcyBkdW1wZWQgdG8gV0FMIGF0Ci0tLSB0aGUgZW5kIG9mIHRoZSB0 cmFuc2FjdGlvbiBpZiBpdCdzIHNtYWxsZXIgdGhhbiB3YWxfc2tpcF90aHJlc2hvbGQsIHdo aWNoCi0tLSB1cGRhdGVzIHRoZSBMU05zLiBXcmFwIHRoZSB0ZXN0cyBvbiBnaXN0X3BhZ2Vf b3BhcXVlX2luZm8oKSBpbiB0aGUKLS0tIHNhbWUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgQ1JF QVRFIElOREVYIHNvIHRoYXQgd2Ugc2VlIHRoZSBMU05zIGJlZm9yZQotLS0gdGhleSBhcmUg cG9zc2libHkgb3ZlcndyaXR0ZW4gYXQgZW5kIG9mIHRyYW5zYWN0aW9uLgotQkVHSU47Ci0K LS0tIENyZWF0ZSBhIHRlc3QgdGFibGUgYW5kIEdpU1QgaW5kZXguCi1DUkVBVEUgVEFCTEUg dGVzdF9naXN0IEFTIFNFTEVDVCBwb2ludChpLGkpIHAsIGk6OnRleHQgdCBGUk9NCistLSBU aGUgZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKCkgZnVuY3Rpb24gcHJpbnRzIHRoZSBwYWdlJ3Mg TFNOLgorLS0gVXNlIGFuIHVubG9nZ2VkIGluZGV4LCBzbyB0aGF0IHRoZSBMU04gaXMgcHJl ZGljdGFibGUuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdGVzdF9naXN0IEFTIFNFTEVDVCBw b2ludChpLGkpIHAsIGk6OnRleHQgdCBGUk9NCiAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MCkgaTsKIENSRUFURSBJTkRFWCB0ZXN0X2dpc3RfaWR4IE9OIHRlc3RfZ2lzdCBVU0lORyBn aXN0IChwKTsKIApAQCAtMTcsOCArOSw2IEBAIFNFTEVDVCAqIEZST00gZ2lzdF9wYWdlX29w YXF1ZV9pbmZvKGdldF9yYXdfcGFnZSgndGVzdF9naXN0X2lkeCcsIDApKTsKIFNFTEVDVCAq IEZST00gZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKGdldF9yYXdfcGFnZSgndGVzdF9naXN0X2lk eCcsIDEpKTsKIFNFTEVDVCAqIEZST00gZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKGdldF9yYXdf cGFnZSgndGVzdF9naXN0X2lkeCcsIDIpKTsKIAotQ09NTUlUOwotCiBTRUxFQ1QgKiBGUk9N IGdpc3RfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3RfZ2lzdF9pZHgnLCAwKSwgJ3Rl c3RfZ2lzdF9pZHgnKTsKIFNFTEVDVCAqIEZST00gZ2lzdF9wYWdlX2l0ZW1zKGdldF9yYXdf cGFnZSgndGVzdF9naXN0X2lkeCcsIDEpLCAndGVzdF9naXN0X2lkeCcpIExJTUlUIDU7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKaW5kZXggYTQ1ZTJmZTM3NTUuLjI3 OGM5ZTQ4Njc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVp bGQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwpAQCAtNDMs NyArNDMsOCBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVsa193cml0ZS5oIgorCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNp bmNsdWRlICJ1dGlscy90dXBsZXNvcnQuaCIKQEAgLTEwNiwxMSArMTA3LDggQEAgdHlwZWRl ZiBzdHJ1Y3QKIAlUdXBsZXNvcnRzdGF0ZSAqc29ydHN0YXRlOwkvKiBzdGF0ZSBkYXRhIGZv ciB0dXBsZXNvcnQuYyAqLwogCiAJQmxvY2tOdW1iZXIgcGFnZXNfYWxsb2NhdGVkOwotCUJs b2NrTnVtYmVyIHBhZ2VzX3dyaXR0ZW47CiAKLQlpbnQJCQlyZWFkeV9udW1fcGFnZXM7Ci0J QmxvY2tOdW1iZXIgcmVhZHlfYmxrbm9zW1hMUl9NQVhfQkxPQ0tfSURdOwotCVBhZ2UJCXJl YWR5X3BhZ2VzW1hMUl9NQVhfQkxPQ0tfSURdOworCUJ1bGtXcml0ZVN0YXRlICpidWxrdzsK IH0gR0lTVEJ1aWxkU3RhdGU7CiAKICNkZWZpbmUgR0lTVF9TT1JURURfQlVJTERfUEFHRV9O VU0gNApAQCAtMTQyLDcgKzE0MCw2IEBAIHN0YXRpYyB2b2lkIGdpc3RfaW5kZXhzb3J0YnVp bGRfbGV2ZWxzdGF0ZV9hZGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJCQkg ICBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgZ2lzdF9pbmRleHNvcnRidWlsZF9s ZXZlbHN0YXRlX2ZsdXNoKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSwKIAkJCQkJCQkJCQkJCSBH aXN0U29ydGVkQnVpbGRMZXZlbFN0YXRlICpsZXZlbHN0YXRlKTsKLXN0YXRpYyB2b2lkIGdp c3RfaW5kZXhzb3J0YnVpbGRfZmx1c2hfcmVhZHlfcGFnZXMoR0lTVEJ1aWxkU3RhdGUgKnN0 YXRlKTsKIAogc3RhdGljIHZvaWQgZ2lzdEluaXRCdWZmZXJpbmcoR0lTVEJ1aWxkU3RhdGUg KmJ1aWxkc3RhdGUpOwogc3RhdGljIGludAljYWxjdWxhdGVQYWdlc1BlckJ1ZmZlcihHSVNU QnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgaW50IGxldmVsU3RlcCk7CkBAIC00MDcsMjEgKzQw NCwxMyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAlH aXN0U29ydGVkQnVpbGRMZXZlbFN0YXRlICpsZXZlbHN0YXRlOwogCVBhZ2UJCXBhZ2U7CiAK LQlzdGF0ZS0+cGFnZXNfYWxsb2NhdGVkID0gMDsKLQlzdGF0ZS0+cGFnZXNfd3JpdHRlbiA9 IDA7Ci0Jc3RhdGUtPnJlYWR5X251bV9wYWdlcyA9IDA7CisJLyogUmVzZXJ2ZSBibG9jayAw IGZvciB0aGUgcm9vdCBwYWdlICovCisJc3RhdGUtPnBhZ2VzX2FsbG9jYXRlZCA9IDE7CiAK LQkvKgotCSAqIFdyaXRlIGFuIGVtcHR5IHBhZ2UgYXMgYSBwbGFjZWhvbGRlciBmb3IgdGhl IHJvb3QgcGFnZS4gSXQgd2lsbCBiZQotCSAqIHJlcGxhY2VkIHdpdGggdGhlIHJlYWwgcm9v dCBwYWdlIGF0IHRoZSBlbmQuCi0JICovCi0JcGFnZSA9IHBhbGxvY19hbGlnbmVkKEJMQ0tT WiwgUEdfSU9fQUxJR05fU0laRSwgTUNYVF9BTExPQ19aRVJPKTsKLQlzbWdyZXh0ZW5kKFJl bGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9P VF9CTEtOTywKLQkJCSAgIHBhZ2UsIHRydWUpOwotCXN0YXRlLT5wYWdlc19hbGxvY2F0ZWQr KzsKLQlzdGF0ZS0+cGFnZXNfd3JpdHRlbisrOworCXN0YXRlLT5idWxrdyA9IGJ1bGt3X3N0 YXJ0X3JlbChzdGF0ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSk7CiAKIAkvKiBBbGxvY2F0 ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIHRoZSBmaXJzdCBsZWFmIHBhZ2UgYmF0Y2guICov CisJcGFnZSA9IGJ1bGt3X2FsbG9jX2J1ZihzdGF0ZS0+YnVsa3cpOwogCWxldmVsc3RhdGUg PSBwYWxsb2MwKHNpemVvZihHaXN0U29ydGVkQnVpbGRMZXZlbFN0YXRlKSk7CiAJbGV2ZWxz dGF0ZS0+cGFnZXNbMF0gPSBwYWdlOwogCWxldmVsc3RhdGUtPnBhcmVudCA9IE5VTEw7CkBA IC00NTUsMzEgKzQ0NCwxMyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRl ICpzdGF0ZSkKIAkJbGV2ZWxzdGF0ZSA9IHBhcmVudDsKIAl9CiAKLQlnaXN0X2luZGV4c29y dGJ1aWxkX2ZsdXNoX3JlYWR5X3BhZ2VzKHN0YXRlKTsKLQogCS8qIFdyaXRlIG91dCB0aGUg cm9vdCAqLwogCVBhZ2VTZXRMU04obGV2ZWxzdGF0ZS0+cGFnZXNbMF0sIEdpc3RCdWlsZExT Tik7Ci0JUGFnZVNldENoZWNrc3VtSW5wbGFjZShsZXZlbHN0YXRlLT5wYWdlc1swXSwgR0lT VF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRl eHJlbCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLAotCQkJICBsZXZlbHN0YXRl LT5wYWdlc1swXSwgdHJ1ZSk7Ci0JaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4 cmVsKSkKLQkJbG9nX25ld3BhZ2UoJnN0YXRlLT5pbmRleHJlbC0+cmRfbG9jYXRvciwgTUFJ Tl9GT1JLTlVNLCBHSVNUX1JPT1RfQkxLTk8sCi0JCQkJCWxldmVsc3RhdGUtPnBhZ2VzWzBd LCB0cnVlKTsKLQotCXBmcmVlKGxldmVsc3RhdGUtPnBhZ2VzWzBdKTsKKwlidWxrd193cml0 ZShzdGF0ZS0+YnVsa3csIEdJU1RfUk9PVF9CTEtOTywgbGV2ZWxzdGF0ZS0+cGFnZXNbMF0s IHRydWUpOworCiAJcGZyZWUobGV2ZWxzdGF0ZSk7CiAKLQkvKgotCSAqIFdoZW4gd2UgV0FM LWxvZ2dlZCBpbmRleCBwYWdlcywgd2UgbXVzdCBub25ldGhlbGVzcyBmc3luYyBpbmRleCBm aWxlcy4KLQkgKiBTaW5jZSB3ZSdyZSBidWlsZGluZyBvdXRzaWRlIHNoYXJlZCBidWZmZXJz LCBhIENIRUNLUE9JTlQgb2NjdXJyaW5nCi0JICogZHVyaW5nIHRoZSBidWlsZCBoYXMgbm8g d2F5IHRvIGZsdXNoIHRoZSBwcmV2aW91c2x5IHdyaXR0ZW4gZGF0YSB0bwotCSAqIGRpc2sg KGluZGVlZCBpdCB3b24ndCBrbm93IHRoZSBpbmRleCBldmVuIGV4aXN0cykuICBBIGNyYXNo IGxhdGVyIG9uCi0JICogd291bGQgcmVwbGF5IFdBTCBmcm9tIHRoZSBjaGVja3BvaW50LCB0 aGVyZWZvcmUgaXQgd291bGRuJ3QgcmVwbGF5IG91cgotCSAqIGVhcmxpZXIgV0FMIGVudHJp ZXMuIElmIHdlIGRvIG5vdCBmc3luYyB0aG9zZSBwYWdlcyBoZXJlLCB0aGV5IG1pZ2h0Ci0J ICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0aGUgY3Jhc2ggb2NjdXJzLgotCSAqLwot CWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRlLT5pbmRleHJlbCkpCi0JCXNtZ3JpbW1lZHN5 bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSk7CisJ YnVsa3dfZmluaXNoKHN0YXRlLT5idWxrdyk7CiB9CiAKIC8qCkBAIC01MTAsNyArNDgxLDcg QEAgZ2lzdF9pbmRleHNvcnRidWlsZF9sZXZlbHN0YXRlX2FkZChHSVNUQnVpbGRTdGF0ZSAq c3RhdGUsCiAKIAkJaWYgKGxldmVsc3RhdGUtPnBhZ2VzW2xldmVsc3RhdGUtPmN1cnJlbnRf cGFnZV0gPT0gTlVMTCkKIAkJCWxldmVsc3RhdGUtPnBhZ2VzW2xldmVsc3RhdGUtPmN1cnJl bnRfcGFnZV0gPQotCQkJCXBhbGxvY19hbGlnbmVkKEJMQ0tTWiwgUEdfSU9fQUxJR05fU0la RSwgMCk7CisJCQkJYnVsa3dfYWxsb2NfYnVmKHN0YXRlLT5idWxrdyk7CiAKIAkJbmV3UGFn ZSA9IGxldmVsc3RhdGUtPnBhZ2VzW2xldmVsc3RhdGUtPmN1cnJlbnRfcGFnZV07CiAJCWdp c3Rpbml0cGFnZShuZXdQYWdlLCBvbGRfcGFnZV9mbGFncyk7CkBAIC01ODAsNyArNTUxLDcg QEAgZ2lzdF9pbmRleHNvcnRidWlsZF9sZXZlbHN0YXRlX2ZsdXNoKEdJU1RCdWlsZFN0YXRl ICpzdGF0ZSwKIAogCQkvKiBDcmVhdGUgcGFnZSBhbmQgY29weSBkYXRhICovCiAJCWRhdGEg PSAoY2hhciAqKSAoZGlzdC0+bGlzdCk7Ci0JCXRhcmdldCA9IHBhbGxvY19hbGlnbmVkKEJM Q0tTWiwgUEdfSU9fQUxJR05fU0laRSwgTUNYVF9BTExPQ19aRVJPKTsKKwkJdGFyZ2V0ID0g YnVsa3dfYWxsb2NfYnVmKHN0YXRlLT5idWxrdyk7CiAJCWdpc3Rpbml0cGFnZSh0YXJnZXQs IGlzbGVhZiA/IEZfTEVBRiA6IDApOwogCQlmb3IgKGludCBpID0gMDsgaSA8IGRpc3QtPmJs b2NrLm51bTsgaSsrKQogCQl7CkBAIC01OTMsMjAgKzU2NCw2IEBAIGdpc3RfaW5kZXhzb3J0 YnVpbGRfbGV2ZWxzdGF0ZV9mbHVzaChHSVNUQnVpbGRTdGF0ZSAqc3RhdGUsCiAJCX0KIAkJ dW5pb25fdHVwbGUgPSBkaXN0LT5pdHVwOwogCi0JCWlmIChzdGF0ZS0+cmVhZHlfbnVtX3Bh Z2VzID09IFhMUl9NQVhfQkxPQ0tfSUQpCi0JCQlnaXN0X2luZGV4c29ydGJ1aWxkX2ZsdXNo X3JlYWR5X3BhZ2VzKHN0YXRlKTsKLQotCQkvKgotCQkgKiBUaGUgcGFnZSBpcyBub3cgY29t cGxldGUuIEFzc2lnbiBhIGJsb2NrIG51bWJlciB0byBpdCwgYW5kIGFkZCBpdAotCQkgKiB0 byB0aGUgbGlzdCBvZiBmaW5pc2hlZCBwYWdlcy4gKFdlIGRvbid0IHdyaXRlIGl0IG91dCBp bW1lZGlhdGVseSwKLQkJICogYmVjYXVzZSB3ZSB3YW50IHRvIFdBTC1sb2cgdGhlIHBhZ2Vz IGluIGJhdGNoZXMuKQotCQkgKi8KLQkJYmxrbm8gPSBzdGF0ZS0+cGFnZXNfYWxsb2NhdGVk Kys7Ci0JCXN0YXRlLT5yZWFkeV9ibGtub3Nbc3RhdGUtPnJlYWR5X251bV9wYWdlc10gPSBi bGtubzsKLQkJc3RhdGUtPnJlYWR5X3BhZ2VzW3N0YXRlLT5yZWFkeV9udW1fcGFnZXNdID0g dGFyZ2V0OwotCQlzdGF0ZS0+cmVhZHlfbnVtX3BhZ2VzKys7Ci0JCUl0ZW1Qb2ludGVyU2V0 QmxvY2tOdW1iZXIoJih1bmlvbl90dXBsZS0+dF90aWQpLCBibGtubyk7Ci0KIAkJLyoKIAkJ ICogU2V0IHRoZSByaWdodCBsaW5rIHRvIHBvaW50IHRvIHRoZSBwcmV2aW91cyBwYWdlLiBU aGlzIGlzIGp1c3QgZm9yCiAJCSAqIGRlYnVnZ2luZyBwdXJwb3NlczogR2lTVCBvbmx5IGZv bGxvd3MgdGhlIHJpZ2h0IGxpbmsgaWYgYSBwYWdlIGlzCkBAIC02MjEsNiArNTc4LDE1IEBA IGdpc3RfaW5kZXhzb3J0YnVpbGRfbGV2ZWxzdGF0ZV9mbHVzaChHSVNUQnVpbGRTdGF0ZSAq c3RhdGUsCiAJCSAqLwogCQlpZiAobGV2ZWxzdGF0ZS0+bGFzdF9ibGtubykKIAkJCUdpc3RQ YWdlR2V0T3BhcXVlKHRhcmdldCktPnJpZ2h0bGluayA9IGxldmVsc3RhdGUtPmxhc3RfYmxr bm87CisKKwkJLyoKKwkJICogVGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlLiBBc3NpZ24gYSBi bG9jayBudW1iZXIgdG8gaXQsIGFuZCBwYXNzIGl0CisJCSAqIHRvIHRoZSBidWxrIHdyaXRl ci4KKwkJICovCisJCWJsa25vID0gc3RhdGUtPnBhZ2VzX2FsbG9jYXRlZCsrOworCQlQYWdl U2V0TFNOKHRhcmdldCwgR2lzdEJ1aWxkTFNOKTsKKwkJYnVsa3dfd3JpdGUoc3RhdGUtPmJ1 bGt3LCBibGtubywgdGFyZ2V0LCB0cnVlKTsKKwkJSXRlbVBvaW50ZXJTZXRCbG9ja051bWJl cigmKHVuaW9uX3R1cGxlLT50X3RpZCksIGJsa25vKTsKIAkJbGV2ZWxzdGF0ZS0+bGFzdF9i bGtubyA9IGJsa25vOwogCiAJCS8qCkBAIC02MzEsNyArNTk3LDcgQEAgZ2lzdF9pbmRleHNv cnRidWlsZF9sZXZlbHN0YXRlX2ZsdXNoKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSwKIAkJaWYg KHBhcmVudCA9PSBOVUxMKQogCQl7CiAJCQlwYXJlbnQgPSBwYWxsb2MwKHNpemVvZihHaXN0 U29ydGVkQnVpbGRMZXZlbFN0YXRlKSk7Ci0JCQlwYXJlbnQtPnBhZ2VzWzBdID0gKFBhZ2Up IHBhbGxvY19hbGlnbmVkKEJMQ0tTWiwgUEdfSU9fQUxJR05fU0laRSwgMCk7CisJCQlwYXJl bnQtPnBhZ2VzWzBdID0gYnVsa3dfYWxsb2NfYnVmKHN0YXRlLT5idWxrdyk7CiAJCQlwYXJl bnQtPnBhcmVudCA9IE5VTEw7CiAJCQlnaXN0aW5pdHBhZ2UocGFyZW50LT5wYWdlc1swXSwg MCk7CiAKQEAgLTY0MSwzOSArNjA3LDYgQEAgZ2lzdF9pbmRleHNvcnRidWlsZF9sZXZlbHN0 YXRlX2ZsdXNoKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSwKIAl9CiB9CiAKLXN0YXRpYyB2b2lk Ci1naXN0X2luZGV4c29ydGJ1aWxkX2ZsdXNoX3JlYWR5X3BhZ2VzKEdJU1RCdWlsZFN0YXRl ICpzdGF0ZSkKLXsKLQlpZiAoc3RhdGUtPnJlYWR5X251bV9wYWdlcyA9PSAwKQotCQlyZXR1 cm47Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5yZWFkeV9udW1fcGFnZXM7IGkr KykKLQl7Ci0JCVBhZ2UJCXBhZ2UgPSBzdGF0ZS0+cmVhZHlfcGFnZXNbaV07Ci0JCUJsb2Nr TnVtYmVyIGJsa25vID0gc3RhdGUtPnJlYWR5X2Jsa25vc1tpXTsKLQotCQkvKiBDdXJyZW50 bHksIHRoZSBibG9ja3MgbXVzdCBiZSBidWZmZXJlZCBpbiBvcmRlci4gKi8KLQkJaWYgKGJs a25vICE9IHN0YXRlLT5wYWdlc193cml0dGVuKQotCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgYmxvY2sgbnVtYmVyIHRvIGZsdXNoIEdpU1Qgc29ydGluZyBidWlsZCIpOwotCi0JCVBh Z2VTZXRMU04ocGFnZSwgR2lzdEJ1aWxkTFNOKTsKLQkJUGFnZVNldENoZWNrc3VtSW5wbGFj ZShwYWdlLCBibGtubyk7Ci0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5p bmRleHJlbCksIE1BSU5fRk9SS05VTSwgYmxrbm8sIHBhZ2UsCi0JCQkJICAgdHJ1ZSk7Ci0K LQkJc3RhdGUtPnBhZ2VzX3dyaXR0ZW4rKzsKLQl9Ci0KLQlpZiAoUmVsYXRpb25OZWVkc1dB TChzdGF0ZS0+aW5kZXhyZWwpKQotCQlsb2dfbmV3cGFnZXMoJnN0YXRlLT5pbmRleHJlbC0+ cmRfbG9jYXRvciwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+cmVhZHlfbnVtX3BhZ2VzLAotCQkJ CQkgc3RhdGUtPnJlYWR5X2Jsa25vcywgc3RhdGUtPnJlYWR5X3BhZ2VzLCB0cnVlKTsKLQot CWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPnJlYWR5X251bV9wYWdlczsgaSsrKQotCQlw ZnJlZShzdGF0ZS0+cmVhZHlfcGFnZXNbaV0pOwotCi0Jc3RhdGUtPnJlYWR5X251bV9wYWdl cyA9IDA7Ci19Ci0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSb3V0aW5lcyBmb3Ig bm9uLXNvcnRlZCBidWlsZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv cmV3cml0ZWhlYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMK aW5kZXggNDI0OTU4OTEyYzcuLjlkN2M3MDQyZTY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3Jld3JpdGVoZWFwLmMKQEAgLTg3LDggKzg3LDggQEAKICAqIGlzIG9wdGltaXplZCBm b3IgYnVsayBpbnNlcnRpbmcgYSBsb3Qgb2YgdHVwbGVzLCBrbm93aW5nIHRoYXQgd2UgaGF2 ZQogICogZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgaGVhcC4gIHJhd19oZWFwX2luc2VydCBi dWlsZHMgbmV3IHBhZ2VzIGluCiAgKiBsb2NhbCBzdG9yYWdlLiAgV2hlbiBhIHBhZ2UgaXMg ZnVsbCwgb3IgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywKLSAqIHdlIGluc2VydCBpdCB0 byBXQUwgYXMgYSBzaW5nbGUgcmVjb3JkIGFuZCB0aGVuIHdyaXRlIGl0IHRvIGRpc2sKLSAq IGRpcmVjdGx5IHRocm91Z2ggc21nci4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYW55IGRhdGEg c2VudCB0byB0aGUgbmV3CisgKiB3ZSBpbnNlcnQgaXQgdG8gV0FMIGFzIGEgc2luZ2xlIHJl Y29yZCBhbmQgdGhlbiB3cml0ZSBpdCB0byBkaXNrIHdpdGgKKyAqIHRoZSBidWxrIHNtZ3Ig d3JpdGVyLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBhbnkgZGF0YSBzZW50IHRvIHRoZSBuZXcK ICAqIGhlYXAncyBUT0FTVCB0YWJsZSB3aWxsIGdvIHRocm91Z2ggdGhlIG5vcm1hbCBidWZt Z3IuCiAgKgogICoKQEAgLTExOSw5ICsxMTksOSBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1bGtfd3JpdGUuaCIKICNp bmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK LSNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC0xMzMsOSArMTMzLDExIEBAIHR5cGVk ZWYgc3RydWN0IFJld3JpdGVTdGF0ZURhdGEKIHsKIAlSZWxhdGlvbglyc19vbGRfcmVsOwkJ Lyogc291cmNlIGhlYXAgKi8KIAlSZWxhdGlvbglyc19uZXdfcmVsOwkJLyogZGVzdGluYXRp b24gaGVhcCAqLworCisJQnVsa1dyaXRlU3RhdGUgKnJzX2J1bGt3OworCiAJUGFnZQkJcnNf YnVmZmVyOwkJLyogcGFnZSBjdXJyZW50bHkgYmVpbmcgYnVpbHQgKi8KIAlCbG9ja051bWJl ciByc19ibG9ja25vOwkJLyogYmxvY2sgd2hlcmUgcGFnZSB3aWxsIGdvICovCi0JYm9vbAkJ cnNfYnVmZmVyX3ZhbGlkOwkvKiBUIGlmIGFueSB0dXBsZXMgaW4gYnVmZmVyICovCiAJYm9v bAkJcnNfbG9naWNhbF9yZXdyaXRlOyAvKiBkbyB3ZSBuZWVkIHRvIGRvIGxvZ2ljYWwgcmV3 cml0aW5nICovCiAJVHJhbnNhY3Rpb25JZCByc19vbGRlc3RfeG1pbjsJLyogb2xkZXN0IHht aW4gdXNlZCBieSBjYWxsZXIgdG8gZGV0ZXJtaW5lCiAJCQkJCQkJCQkgKiB0dXBsZSB2aXNp YmlsaXR5ICovCkBAIC0yNTUsMTUgKzI1NywxNiBAQCBiZWdpbl9oZWFwX3Jld3JpdGUoUmVs YXRpb24gb2xkX2hlYXAsIFJlbGF0aW9uIG5ld19oZWFwLCBUcmFuc2FjdGlvbklkIG9sZGVz dF94bQogCiAJc3RhdGUtPnJzX29sZF9yZWwgPSBvbGRfaGVhcDsKIAlzdGF0ZS0+cnNfbmV3 X3JlbCA9IG5ld19oZWFwOwotCXN0YXRlLT5yc19idWZmZXIgPSAoUGFnZSkgcGFsbG9jX2Fs aWduZWQoQkxDS1NaLCBQR19JT19BTElHTl9TSVpFLCAwKTsKKwlzdGF0ZS0+cnNfYnVmZmVy ID0gTlVMTDsKIAkvKiBuZXdfaGVhcCBuZWVkbid0IGJlIGVtcHR5LCBqdXN0IGxvY2tlZCAq LwogCXN0YXRlLT5yc19ibG9ja25vID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhuZXdf aGVhcCk7Ci0Jc3RhdGUtPnJzX2J1ZmZlcl92YWxpZCA9IGZhbHNlOwogCXN0YXRlLT5yc19v bGRlc3RfeG1pbiA9IG9sZGVzdF94bWluOwogCXN0YXRlLT5yc19mcmVlemVfeGlkID0gZnJl ZXplX3hpZDsKIAlzdGF0ZS0+cnNfY3V0b2ZmX211bHRpID0gY3V0b2ZmX211bHRpOwogCXN0 YXRlLT5yc19jeHQgPSByd19jeHQ7CiAKKwlzdGF0ZS0+cnNfYnVsa3cgPSBidWxrd19zdGFy dF9yZWwobmV3X2hlYXAsIE1BSU5fRk9SS05VTSk7CisKIAkvKiBJbml0aWFsaXplIGhhc2gg dGFibGVzIHVzZWQgdG8gdHJhY2sgdXBkYXRlIGNoYWlucyAqLwogCWhhc2hfY3RsLmtleXNp emUgPSBzaXplb2YoVGlkSGFzaEtleSk7CiAJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9m KFVucmVzb2x2ZWRUdXBEYXRhKTsKQEAgLTMxNCwzMCArMzE3LDEzIEBAIGVuZF9oZWFwX3Jl d3JpdGUoUmV3cml0ZVN0YXRlIHN0YXRlKQogCX0KIAogCS8qIFdyaXRlIHRoZSBsYXN0IHBh Z2UsIGlmIGFueSAqLwotCWlmIChzdGF0ZS0+cnNfYnVmZmVyX3ZhbGlkKQorCWlmIChzdGF0 ZS0+cnNfYnVmZmVyKQogCXsKLQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPnJzX25l d19yZWwpKQotCQkJbG9nX25ld3BhZ2UoJnN0YXRlLT5yc19uZXdfcmVsLT5yZF9sb2NhdG9y LAotCQkJCQkJTUFJTl9GT1JLTlVNLAotCQkJCQkJc3RhdGUtPnJzX2Jsb2Nrbm8sCi0JCQkJ CQlzdGF0ZS0+cnNfYnVmZmVyLAotCQkJCQkJdHJ1ZSk7Ci0KLQkJUGFnZVNldENoZWNrc3Vt SW5wbGFjZShzdGF0ZS0+cnNfYnVmZmVyLCBzdGF0ZS0+cnNfYmxvY2tubyk7Ci0KLQkJc21n cmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwpLCBNQUlOX0ZPUktO VU0sCi0JCQkJICAgc3RhdGUtPnJzX2Jsb2Nrbm8sIHN0YXRlLT5yc19idWZmZXIsIHRydWUp OworCQlidWxrd193cml0ZShzdGF0ZS0+cnNfYnVsa3csIHN0YXRlLT5yc19ibG9ja25vLCBz dGF0ZS0+cnNfYnVmZmVyLCB0cnVlKTsKKwkJc3RhdGUtPnJzX2J1ZmZlciA9IE5VTEw7CiAJ fQogCi0JLyoKLQkgKiBXaGVuIHdlIFdBTC1sb2dnZWQgcmVsIHBhZ2VzLCB3ZSBtdXN0IG5v bmV0aGVsZXNzIGZzeW5jIHRoZW0uICBUaGUKLQkgKiByZWFzb24gaXMgdGhlIHNhbWUgYXMg aW4gc3RvcmFnZS5jJ3MgUmVsYXRpb25Db3B5U3RvcmFnZSgpOiB3ZSdyZQotCSAqIHdyaXRp bmcgZGF0YSB0aGF0J3Mgbm90IGluIHNoYXJlZCBidWZmZXJzLCBhbmQgc28gYSBDSEVDS1BP SU5UCi0JICogb2NjdXJyaW5nIGR1cmluZyB0aGUgcmV3cml0ZWhlYXAgb3BlcmF0aW9uIHdv bid0IGhhdmUgZnN5bmMnZCBkYXRhIHdlCi0JICogd3JvdGUgYmVmb3JlIHRoZSBjaGVja3Bv aW50LgotCSAqLwotCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRlLT5yc19uZXdfcmVsKSkK LQkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwpLCBN QUlOX0ZPUktOVU0pOworCWJ1bGt3X2ZpbmlzaChzdGF0ZS0+cnNfYnVsa3cpOwogCiAJbG9n aWNhbF9lbmRfaGVhcF9yZXdyaXRlKHN0YXRlKTsKIApAQCAtNjExLDcgKzU5Nyw3IEBAIHJl d3JpdGVfaGVhcF9kZWFkX3R1cGxlKFJld3JpdGVTdGF0ZSBzdGF0ZSwgSGVhcFR1cGxlIG9s ZF90dXBsZSkKIHN0YXRpYyB2b2lkCiByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0 YXRlLCBIZWFwVHVwbGUgdHVwKQogewotCVBhZ2UJCXBhZ2UgPSBzdGF0ZS0+cnNfYnVmZmVy OworCVBhZ2UJCXBhZ2U7CiAJU2l6ZQkJcGFnZUZyZWVTcGFjZSwKIAkJCQlzYXZlRnJlZVNw YWNlOwogCVNpemUJCWxlbjsKQEAgLTY2NCw3ICs2NTAsOCBAQCByYXdfaGVhcF9pbnNlcnQo UmV3cml0ZVN0YXRlIHN0YXRlLCBIZWFwVHVwbGUgdHVwKQogCQkJCQkJCQkJCQkJICAgSEVB UF9ERUZBVUxUX0ZJTExGQUNUT1IpOwogCiAJLyogTm93IHdlIGNhbiBjaGVjayB0byBzZWUg aWYgdGhlcmUncyBlbm91Z2ggZnJlZSBzcGFjZSBhbHJlYWR5LiAqLwotCWlmIChzdGF0ZS0+ cnNfYnVmZmVyX3ZhbGlkKQorCXBhZ2UgPSBzdGF0ZS0+cnNfYnVmZmVyOworCWlmIChwYWdl KQogCXsKIAkJcGFnZUZyZWVTcGFjZSA9IFBhZ2VHZXRIZWFwRnJlZVNwYWNlKHBhZ2UpOwog CkBAIC02NzUsMzUgKzY2MiwxNyBAQCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0 YXRlLCBIZWFwVHVwbGUgdHVwKQogCQkJICogY29udGFpbnMgYSB0dXBsZS4gIEhlbmNlLCB1 bmxpa2UgUmVsYXRpb25HZXRCdWZmZXJGb3JUdXBsZSgpLAogCQkJICogZW5mb3JjZSBzYXZl RnJlZVNwYWNlIHVuY29uZGl0aW9uYWxseS4KIAkJCSAqLwotCi0JCQkvKiBYTE9HIHN0dWZm ICovCi0JCQlpZiAoUmVsYXRpb25OZWVkc1dBTChzdGF0ZS0+cnNfbmV3X3JlbCkpCi0JCQkJ bG9nX25ld3BhZ2UoJnN0YXRlLT5yc19uZXdfcmVsLT5yZF9sb2NhdG9yLAotCQkJCQkJCU1B SU5fRk9SS05VTSwKLQkJCQkJCQlzdGF0ZS0+cnNfYmxvY2tubywKLQkJCQkJCQlwYWdlLAot CQkJCQkJCXRydWUpOwotCi0JCQkvKgotCQkJICogTm93IHdyaXRlIHRoZSBwYWdlLiBXZSBz YXkgc2tpcEZzeW5jID0gdHJ1ZSBiZWNhdXNlIHRoZXJlJ3Mgbm8KLQkJCSAqIG5lZWQgZm9y IHNtZ3IgdG8gc2NoZWR1bGUgYW4gZnN5bmMgZm9yIHRoaXMgd3JpdGU7IHdlJ2xsIGRvIGl0 Ci0JCQkgKiBvdXJzZWx2ZXMgaW4gZW5kX2hlYXBfcmV3cml0ZS4KLQkJCSAqLwotCQkJUGFn ZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBzdGF0ZS0+cnNfYmxvY2tubyk7Ci0KLQkJCXNt Z3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsKSwgTUFJTl9GT1JL TlVNLAotCQkJCQkgICBzdGF0ZS0+cnNfYmxvY2tubywgcGFnZSwgdHJ1ZSk7Ci0KKwkJCWJ1 bGt3X3dyaXRlKHN0YXRlLT5yc19idWxrdywgc3RhdGUtPnJzX2Jsb2Nrbm8sIHN0YXRlLT5y c19idWZmZXIsIHRydWUpOworCQkJcGFnZSA9IHN0YXRlLT5yc19idWZmZXIgPSBOVUxMOwog CQkJc3RhdGUtPnJzX2Jsb2Nrbm8rKzsKLQkJCXN0YXRlLT5yc19idWZmZXJfdmFsaWQgPSBm YWxzZTsKIAkJfQogCX0KIAotCWlmICghc3RhdGUtPnJzX2J1ZmZlcl92YWxpZCkKKwlpZiAo IXBhZ2UpCiAJewogCQkvKiBJbml0aWFsaXplIGEgbmV3IGVtcHR5IHBhZ2UgKi8KKwkJcGFn ZSA9IHN0YXRlLT5yc19idWZmZXIgPSBidWxrd19hbGxvY19idWYoc3RhdGUtPnJzX2J1bGt3 KTsKIAkJUGFnZUluaXQocGFnZSwgQkxDS1NaLCAwKTsKLQkJc3RhdGUtPnJzX2J1ZmZlcl92 YWxpZCA9IHRydWU7CiAJfQogCiAJLyogQW5kIG5vdyB3ZSBjYW4gaW5zZXJ0IHRoZSB0dXBs ZSBpbnRvIHRoZSBwYWdlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRl eCBhODhiMzZhNTg5YS4uMWVhYjg1ZjYxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtMjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVz LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFj dXVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWxrX3dyaXRlLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2luZGV4ZnNt LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKLSNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKQEAgLTE1MiwzMiArMTUyLDE3IEBAIHZvaWQKIGJ0YnVpbGRlbXB0 eShSZWxhdGlvbiBpbmRleCkKIHsKIAlib29sCQlhbGxlcXVhbGltYWdlID0gX2J0X2FsbGVx dWFsaW1hZ2UoaW5kZXgsIGZhbHNlKTsKLQlCdWZmZXIJCW1ldGFidWY7CiAJUGFnZQkJbWV0 YXBhZ2U7CisJQnVsa1dyaXRlU3RhdGUgKmJ1bGt3OwogCi0JLyoKLQkgKiBJbml0YWxpemUg dGhlIG1ldGFwYWdlLgotCSAqCi0JICogUmVndWxhciBpbmRleCBidWlsZCBieXBhc3NlcyB0 aGUgYnVmZmVyIG1hbmFnZXIgYW5kIHVzZXMgc21nciBmdW5jdGlvbnMKLQkgKiBkaXJlY3Rs eSwgd2l0aCBhbiBzbWdyaW1tZWRzeW5jKCkgY2FsbCBhdCB0aGUgZW5kLiAgVGhhdCBtYWtl cyBzZW5zZQotCSAqIHdoZW4gdGhlIGluZGV4IGlzIGxhcmdlLCBidXQgZm9yIGFuIGVtcHR5 IGluZGV4LCBpdCdzIGJldHRlciB0byB1c2UgdGhlCi0JICogYnVmZmVyIGNhY2hlIHRvIGF2 b2lkIHRoZSBzbWdyaW1tZWRzeW5jKCkuCi0JICovCi0JbWV0YWJ1ZiA9IFJlYWRCdWZmZXJF eHRlbmRlZChpbmRleCwgSU5JVF9GT1JLTlVNLCBQX05FVywgUkJNX05PUk1BTCwgTlVMTCk7 Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKG1ldGFidWYpID09IEJUUkVFX01FVEFQ QUdFKTsKLQlfYnRfbG9ja2J1ZihpbmRleCwgbWV0YWJ1ZiwgQlRfV1JJVEUpOworCWJ1bGt3 ID0gYnVsa3dfc3RhcnRfcmVsKGluZGV4LCBJTklUX0ZPUktOVU0pOwogCi0JU1RBUlRfQ1JJ VF9TRUNUSU9OKCk7Ci0KLQltZXRhcGFnZSA9IEJ1ZmZlckdldFBhZ2UobWV0YWJ1Zik7CisJ LyogQ29uc3RydWN0IG1ldGFwYWdlLiAqLworCW1ldGFwYWdlID0gYnVsa3dfYWxsb2NfYnVm KGJ1bGt3KTsKIAlfYnRfaW5pdG1ldGFwYWdlKG1ldGFwYWdlLCBQX05PTkUsIDAsIGFsbGVx dWFsaW1hZ2UpOwotCU1hcmtCdWZmZXJEaXJ0eShtZXRhYnVmKTsKLQlsb2dfbmV3cGFnZV9i dWZmZXIobWV0YWJ1ZiwgdHJ1ZSk7Ci0KLQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJYnVsa3df d3JpdGUoYnVsa3csIEJUUkVFX01FVEFQQUdFLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKLQlfYnRf dW5sb2NrYnVmKGluZGV4LCBtZXRhYnVmKTsKLQlSZWxlYXNlQnVmZmVyKG1ldGFidWYpOwor CWJ1bGt3X2ZpbmlzaChidWxrdyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c29ydC5jCmluZGV4IGMyNjY1ZmNlNDExLi4xYjA1OTFmNTUxYyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzb3J0LmMKQEAgLTIzLDEzICsyMyw4IEBACiAgKiBtYW55IHVw cGVyIHBhZ2VzIGlmIHRoZSBrZXlzIGFyZSByZWFzb25hYmxlLXNpemUpIHdpdGhvdXQgcmlz a2luZyBhIGxvdCBvZgogICogY2FzY2FkaW5nIHNwbGl0cyBkdXJpbmcgZWFybHkgaW5zZXJ0 aW9ucy4KICAqCi0gKiBGb3JtZXJseSB0aGUgaW5kZXggcGFnZXMgYmVpbmcgYnVpbHQgd2Vy ZSBrZXB0IGluIHNoYXJlZCBidWZmZXJzLCBidXQKLSAqIHRoYXQgaXMgb2Ygbm8gdmFsdWUg KHNpbmNlIG90aGVyIGJhY2tlbmRzIGhhdmUgbm8gaW50ZXJlc3QgaW4gdGhlbSB5ZXQpCi0g KiBhbmQgaXQgY3JlYXRlZCBsb2NraW5nIHByb2JsZW1zIGZvciBDSEVDS1BPSU5ULCBiZWNh dXNlIHRoZSB1cHBlci1sZXZlbAotICogcGFnZXMgd2VyZSBoZWxkIGV4Y2x1c2l2ZS1sb2Nr ZWQgZm9yIGxvbmcgcGVyaW9kcy4gIE5vdyB3ZSBqdXN0IGJ1aWxkCi0gKiB0aGUgcGFnZXMg aW4gbG9jYWwgbWVtb3J5IGFuZCBzbWdyd3JpdGUgb3Igc21ncmV4dGVuZCB0aGVtIGFzIHdl IGZpbmlzaAotICogdGhlbS4gIFRoZXkgd2lsbCBuZWVkIHRvIGJlIHJlLXJlYWQgaW50byBz aGFyZWQgYnVmZmVycyBvbiBmaXJzdCB1c2UgYWZ0ZXIKLSAqIHRoZSBidWlsZCBmaW5pc2hl cy4KKyAqIFdlIHVzZSB0aGUgYnVsayBzbWdyIGxvYWRpbmcgZmFjaWxpdHkgdG8gYnlwYXNz IHRoZSBidWZmZXIgY2FjaGUgYW5kCisgKiBXQUwgbG9nIHRoZSBwYWdlcyBlZmZpY2llbnRs eS4KICAqCiAgKiBUaGlzIGNvZGUgaXNuJ3QgY29uY2VybmVkIGFib3V0IHRoZSBGU00gYXQg YWxsLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlCiAgKiBmb3IgaW5pdGlhbGl6aW5nIHRo YXQuCkBAIC01Nyw3ICs1Miw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1 ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVsa193cml0ZS5oIgog I2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIJCS8qIHBncm1pbmNsdWRlIGlnbm9yZSAqLwog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0Lmgi CkBAIC0yNTEsMTEgKzI0Niw5IEBAIHR5cGVkZWYgc3RydWN0IEJUV3JpdGVTdGF0ZQogewog CVJlbGF0aW9uCWhlYXA7CiAJUmVsYXRpb24JaW5kZXg7CisJQnVsa1dyaXRlU3RhdGUgKmJ1 bGt3OwogCUJUU2Nhbkluc2VydCBpbnNrZXk7CQkvKiBnZW5lcmljIGluc2VydGlvbiBzY2Fu a2V5ICovCi0JYm9vbAkJYnR3c191c2Vfd2FsOwkvKiBkdW1wIHBhZ2VzIHRvIFdBTD8gKi8K IAlCbG9ja051bWJlciBidHdzX3BhZ2VzX2FsbG9jZWQ7IC8qICMgcGFnZXMgYWxsb2NhdGVk ICovCi0JQmxvY2tOdW1iZXIgYnR3c19wYWdlc193cml0dGVuOyAvKiAjIHBhZ2VzIHdyaXR0 ZW4gb3V0ICovCi0JUGFnZQkJYnR3c196ZXJvcGFnZTsJLyogd29ya3NwYWNlIGZvciBmaWxs aW5nIHplcm9lcyAqLwogfSBCVFdyaXRlU3RhdGU7CiAKIApAQCAtMjY3LDcgKzI2MCw3IEBA IHN0YXRpYyB2b2lkIF9idF9zcG9vbChCVFNwb29sICpidHNwb29sLCBJdGVtUG9pbnRlciBz ZWxmLAogc3RhdGljIHZvaWQgX2J0X2xlYWZidWlsZChCVFNwb29sICpidHNwb29sLCBCVFNw b29sICpidHNwb29sMik7CiBzdGF0aWMgdm9pZCBfYnRfYnVpbGRfY2FsbGJhY2soUmVsYXRp b24gaW5kZXgsIEl0ZW1Qb2ludGVyIHRpZCwgRGF0dW0gKnZhbHVlcywKIAkJCQkJCQkgICBi b29sICppc251bGwsIGJvb2wgdHVwbGVJc0FsaXZlLCB2b2lkICpzdGF0ZSk7Ci1zdGF0aWMg UGFnZSBfYnRfYmxuZXdwYWdlKHVpbnQzMiBsZXZlbCk7CitzdGF0aWMgUGFnZSBfYnRfYmxu ZXdwYWdlKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCB1aW50MzIgbGV2ZWwpOwogc3RhdGljIEJU UGFnZVN0YXRlICpfYnRfcGFnZXN0YXRlKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCB1aW50MzIg bGV2ZWwpOwogc3RhdGljIHZvaWQgX2J0X3NsaWRlbGVmdChQYWdlIHJpZ2h0bW9zdHBhZ2Up Owogc3RhdGljIHZvaWQgX2J0X3NvcnRhZGR0dXAoUGFnZSBwYWdlLCBTaXplIGl0ZW1zaXpl LApAQCAtNTY5LDE2ICs1NjIsMTcgQEAgX2J0X2xlYWZidWlsZChCVFNwb29sICpidHNwb29s LCBCVFNwb29sICpidHNwb29sMikKIAl3c3RhdGUuaW5za2V5ID0gX2J0X21rc2NhbmtleSh3 c3RhdGUuaW5kZXgsIE5VTEwpOwogCS8qIF9idF9ta3NjYW5rZXkoKSB3b24ndCBzZXQgYWxs ZXF1YWxpbWFnZSB3aXRob3V0IG1ldGFwYWdlICovCiAJd3N0YXRlLmluc2tleS0+YWxsZXF1 YWxpbWFnZSA9IF9idF9hbGxlcXVhbGltYWdlKHdzdGF0ZS5pbmRleCwgdHJ1ZSk7Ci0Jd3N0 YXRlLmJ0d3NfdXNlX3dhbCA9IFJlbGF0aW9uTmVlZHNXQUwod3N0YXRlLmluZGV4KTsKIAog CS8qIHJlc2VydmUgdGhlIG1ldGFwYWdlICovCiAJd3N0YXRlLmJ0d3NfcGFnZXNfYWxsb2Nl ZCA9IEJUUkVFX01FVEFQQUdFICsgMTsKLQl3c3RhdGUuYnR3c19wYWdlc193cml0dGVuID0g MDsKLQl3c3RhdGUuYnR3c196ZXJvcGFnZSA9IE5VTEw7CS8qIHVudGlsIG5lZWRlZCAqLwor CisJd3N0YXRlLmJ1bGt3ID0gYnVsa3dfc3RhcnRfcmVsKHdzdGF0ZS5pbmRleCwgTUFJTl9G T1JLTlVNKTsKIAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JF QVRFSURYX1NVQlBIQVNFLAogCQkJCQkJCQkgUFJPR1JFU1NfQlRSRUVfUEhBU0VfTEVBRl9M T0FEKTsKIAlfYnRfbG9hZCgmd3N0YXRlLCBidHNwb29sLCBidHNwb29sMik7CisKKwlidWxr d19maW5pc2god3N0YXRlLmJ1bGt3KTsKIH0KIAogLyoKQEAgLTYxNCwxMiArNjA4LDEyIEBA IF9idF9idWlsZF9jYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKICAqIGFsbG9jYXRlIHdvcmtz cGFjZSBmb3IgYSBuZXcsIGNsZWFuIGJ0cmVlIHBhZ2UsIG5vdCBsaW5rZWQgdG8gYW55IHNp YmxpbmdzLgogICovCiBzdGF0aWMgUGFnZQotX2J0X2JsbmV3cGFnZSh1aW50MzIgbGV2ZWwp CitfYnRfYmxuZXdwYWdlKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCB1aW50MzIgbGV2ZWwpCiB7 CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JcGFnZSA9IChQYWdl KSBwYWxsb2NfYWxpZ25lZChCTENLU1osIFBHX0lPX0FMSUdOX1NJWkUsIDApOworCXBhZ2Ug PSBidWxrd19hbGxvY19idWYod3N0YXRlLT5idWxrdyk7CiAKIAkvKiBaZXJvIHRoZSBwYWdl IGFuZCBzZXQgdXAgc3RhbmRhcmQgcGFnZSBoZWFkZXIgaW5mbyAqLwogCV9idF9wYWdlaW5p dChwYWdlLCBCTENLU1opOwpAQCAtNjQzLDU0ICs2MzcsOCBAQCBfYnRfYmxuZXdwYWdlKHVp bnQzMiBsZXZlbCkKIHN0YXRpYyB2b2lkCiBfYnRfYmx3cml0ZXBhZ2UoQlRXcml0ZVN0YXRl ICp3c3RhdGUsIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiB7Ci0JLyogWExPRyBz dHVmZiAqLwotCWlmICh3c3RhdGUtPmJ0d3NfdXNlX3dhbCkKLQl7Ci0JCS8qIFdlIHVzZSB0 aGUgWExPR19GUEkgcmVjb3JkIHR5cGUgZm9yIHRoaXMgKi8KLQkJbG9nX25ld3BhZ2UoJndz dGF0ZS0+aW5kZXgtPnJkX2xvY2F0b3IsIE1BSU5fRk9SS05VTSwgYmxrbm8sIHBhZ2UsIHRy dWUpOwotCX0KLQotCS8qCi0JICogSWYgd2UgaGF2ZSB0byB3cml0ZSBwYWdlcyBub25zZXF1 ZW50aWFsbHksIGZpbGwgaW4gdGhlIHNwYWNlIHdpdGgKLQkgKiB6ZXJvZXMgdW50aWwgd2Ug Y29tZSBiYWNrIGFuZCBvdmVyd3JpdGUuICBUaGlzIGlzIG5vdCBsb2dpY2FsbHkKLQkgKiBu ZWNlc3Nhcnkgb24gc3RhbmRhcmQgVW5peCBmaWxlc3lzdGVtcyAodW53cml0dGVuIHNwYWNl IHdpbGwgcmVhZCBhcwotCSAqIHplcm9lcyBhbnl3YXkpLCBidXQgaXQgc2hvdWxkIGhlbHAg dG8gYXZvaWQgZnJhZ21lbnRhdGlvbi4gVGhlIGR1bW15Ci0JICogcGFnZXMgYXJlbid0IFdB TC1sb2dnZWQgdGhvdWdoLgotCSAqLwotCXdoaWxlIChibGtubyA+IHdzdGF0ZS0+YnR3c19w YWdlc193cml0dGVuKQotCXsKLQkJaWYgKCF3c3RhdGUtPmJ0d3NfemVyb3BhZ2UpCi0JCQl3 c3RhdGUtPmJ0d3NfemVyb3BhZ2UgPSAoUGFnZSkgcGFsbG9jX2FsaWduZWQoQkxDS1NaLAot CQkJCQkJCQkJCQkJCQkgIFBHX0lPX0FMSUdOX1NJWkUsCi0JCQkJCQkJCQkJCQkJCSAgTUNY VF9BTExPQ19aRVJPKTsKLQkJLyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBw YWdlICovCi0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBN QUlOX0ZPUktOVU0sCi0JCQkJICAgd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4rKywKLQkJ CQkgICB3c3RhdGUtPmJ0d3NfemVyb3BhZ2UsCi0JCQkJICAgdHJ1ZSk7Ci0JfQotCi0JUGFn ZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBibGtubyk7Ci0KLQkvKgotCSAqIE5vdyB3cml0 ZSB0aGUgcGFnZS4gIFRoZXJlJ3Mgbm8gbmVlZCBmb3Igc21nciB0byBzY2hlZHVsZSBhbiBm c3luYyBmb3IKLQkgKiB0aGlzIHdyaXRlOyB3ZSdsbCBkbyBpdCBvdXJzZWx2ZXMgYmVmb3Jl IGVuZGluZyB0aGUgYnVpbGQuCi0JICovCi0JaWYgKGJsa25vID09IHdzdGF0ZS0+YnR3c19w YWdlc193cml0dGVuKQotCXsKLQkJLyogZXh0ZW5kaW5nIHRoZSBmaWxlLi4uICovCi0JCXNt Z3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0s IGJsa25vLAotCQkJCSAgIHBhZ2UsIHRydWUpOwotCQl3c3RhdGUtPmJ0d3NfcGFnZXNfd3Jp dHRlbisrOwotCX0KLQllbHNlCi0JewotCQkvKiBvdmVyd3JpdGluZyBhIGJsb2NrIHdlIHpl cm8tZmlsbGVkIGJlZm9yZSAqLwotCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0 ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sIGJsa25vLAotCQkJCSAgcGFnZSwgdHJ1ZSk7Ci0J fQotCi0JcGZyZWUocGFnZSk7CisJYnVsa3dfd3JpdGUod3N0YXRlLT5idWxrdywgYmxrbm8s IHBhZ2UsIHRydWUpOworCS8qIGJ1bGt3X3dyaXRlIHRvb2sgb3duZXJzaGlwIG9mICdwYWdl JyAqLwogfQogCiAvKgpAQCAtNzAzLDcgKzY1MSw3IEBAIF9idF9wYWdlc3RhdGUoQlRXcml0 ZVN0YXRlICp3c3RhdGUsIHVpbnQzMiBsZXZlbCkKIAlCVFBhZ2VTdGF0ZSAqc3RhdGUgPSAo QlRQYWdlU3RhdGUgKikgcGFsbG9jMChzaXplb2YoQlRQYWdlU3RhdGUpKTsKIAogCS8qIGNy ZWF0ZSBpbml0aWFsIHBhZ2UgZm9yIGxldmVsICovCi0Jc3RhdGUtPmJ0cHNfcGFnZSA9IF9i dF9ibG5ld3BhZ2UobGV2ZWwpOworCXN0YXRlLT5idHBzX3BhZ2UgPSBfYnRfYmxuZXdwYWdl KHdzdGF0ZSwgbGV2ZWwpOwogCiAJLyogYW5kIGFzc2lnbiBpdCBhIHBhZ2UgcG9zaXRpb24g Ki8KIAlzdGF0ZS0+YnRwc19ibGtubyA9IHdzdGF0ZS0+YnR3c19wYWdlc19hbGxvY2VkKys7 CkBAIC05MTYsNyArODY0LDcgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRl LCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwKIAkJSW5kZXhUdXBsZQlv aXR1cDsKIAogCQkvKiBDcmVhdGUgbmV3IHBhZ2Ugb2Ygc2FtZSBsZXZlbCAqLwotCQlucGFn ZSA9IF9idF9ibG5ld3BhZ2Uoc3RhdGUtPmJ0cHNfbGV2ZWwpOworCQlucGFnZSA9IF9idF9i bG5ld3BhZ2Uod3N0YXRlLCBzdGF0ZS0+YnRwc19sZXZlbCk7CiAKIAkJLyogYW5kIGFzc2ln biBpdCBhIHBhZ2UgcG9zaXRpb24gKi8KIAkJbmJsa25vID0gd3N0YXRlLT5idHdzX3BhZ2Vz X2FsbG9jZWQrKzsKQEAgLTEwMjgsOCArOTc2LDggQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVT dGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwKIAkJ fQogCiAJCS8qCi0JCSAqIFdyaXRlIG91dCB0aGUgb2xkIHBhZ2UuICBXZSBuZXZlciBuZWVk IHRvIHRvdWNoIGl0IGFnYWluLCBzbyB3ZSBjYW4KLQkJICogZnJlZSB0aGUgb3BhZ2Ugd29y a3NwYWNlIHRvby4KKwkJICogV3JpdGUgb3V0IHRoZSBvbGQgcGFnZS4gX2J0X2Jsd3JpdGVw YWdlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUKKwkJICogJ29wYWdlJyBidWZmZXIuCiAJCSAq LwogCQlfYnRfYmx3cml0ZXBhZ2Uod3N0YXRlLCBvcGFnZSwgb2Jsa25vKTsKIApAQCAtMTE2 Myw3ICsxMTExLDcgQEAgX2J0X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUs IEJUUGFnZVN0YXRlICpzdGF0ZSkKIAkJICovCiAJCV9idF9zbGlkZWxlZnQocy0+YnRwc19w YWdlKTsKIAkJX2J0X2Jsd3JpdGVwYWdlKHdzdGF0ZSwgcy0+YnRwc19wYWdlLCBzLT5idHBz X2Jsa25vKTsKLQkJcy0+YnRwc19wYWdlID0gTlVMTDsJLyogd3JpdGVwYWdlIGZyZWVkIHRo ZSB3b3Jrc3BhY2UgKi8KKwkJcy0+YnRwc19wYWdlID0gTlVMTDsJLyogd3JpdGVwYWdlIHRv b2sgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KIAl9CiAKIAkvKgpAQCAtMTE3Miw3ICsx MTIwLDcgQEAgX2J0X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFn ZVN0YXRlICpzdGF0ZSkKIAkgKiBzZXQgdG8gcG9pbnQgdG8gIlBfTk9ORSIpLiAgVGhpcyBj aGFuZ2VzIHRoZSBpbmRleCB0byB0aGUgInZhbGlkIiBzdGF0ZQogCSAqIGJ5IGZpbGxpbmcg aW4gYSB2YWxpZCBtYWdpYyBudW1iZXIgaW4gdGhlIG1ldGFwYWdlLgogCSAqLwotCW1ldGFw YWdlID0gKFBhZ2UpIHBhbGxvY19hbGlnbmVkKEJMQ0tTWiwgUEdfSU9fQUxJR05fU0laRSwg MCk7CisJbWV0YXBhZ2UgPSBidWxrd19hbGxvY19idWYod3N0YXRlLT5idWxrdyk7CiAJX2J0 X2luaXRtZXRhcGFnZShtZXRhcGFnZSwgcm9vdGJsa25vLCByb290bGV2ZWwsCiAJCQkJCSB3 c3RhdGUtPmluc2tleS0+YWxsZXF1YWxpbWFnZSk7CiAJX2J0X2Jsd3JpdGVwYWdlKHdzdGF0 ZSwgbWV0YXBhZ2UsIEJUUkVFX01FVEFQQUdFKTsKQEAgLTE0MjIsMTggKzEzNzAsNiBAQCBf YnRfbG9hZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRTcG9vbCAqYnRzcG9vbCwgQlRTcG9v bCAqYnRzcG9vbDIpCiAKIAkvKiBDbG9zZSBkb3duIGZpbmFsIHBhZ2VzIGFuZCB3cml0ZSB0 aGUgbWV0YXBhZ2UgKi8KIAlfYnRfdXBwZXJzaHV0ZG93bih3c3RhdGUsIHN0YXRlKTsKLQot CS8qCi0JICogV2hlbiB3ZSBXQUwtbG9nZ2VkIGluZGV4IHBhZ2VzLCB3ZSBtdXN0IG5vbmV0 aGVsZXNzIGZzeW5jIGluZGV4IGZpbGVzLgotCSAqIFNpbmNlIHdlJ3JlIGJ1aWxkaW5nIG91 dHNpZGUgc2hhcmVkIGJ1ZmZlcnMsIGEgQ0hFQ0tQT0lOVCBvY2N1cnJpbmcKLQkgKiBkdXJp bmcgdGhlIGJ1aWxkIGhhcyBubyB3YXkgdG8gZmx1c2ggdGhlIHByZXZpb3VzbHkgd3JpdHRl biBkYXRhIHRvCi0JICogZGlzayAoaW5kZWVkIGl0IHdvbid0IGtub3cgdGhlIGluZGV4IGV2 ZW4gZXhpc3RzKS4gIEEgY3Jhc2ggbGF0ZXIgb24KLQkgKiB3b3VsZCByZXBsYXkgV0FMIGZy b20gdGhlIGNoZWNrcG9pbnQsIHRoZXJlZm9yZSBpdCB3b3VsZG4ndCByZXBsYXkgb3VyCi0J ICogZWFybGllciBXQUwgZW50cmllcy4gSWYgd2UgZG8gbm90IGZzeW5jIHRob3NlIHBhZ2Vz IGhlcmUsIHRoZXkgbWlnaHQKLQkgKiBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBj cmFzaCBvY2N1cnMuCi0JICovCi0JaWYgKHdzdGF0ZS0+YnR3c191c2Vfd2FsKQotCQlzbWdy aW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4KSwgTUFJTl9GT1JLTlVN KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn aW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCmluZGV4 IDQ0NDNmMTkxOGRmLi4xMWZlOTMyYzI2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ2luc2VydC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWxr X3dyaXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKIApAQCAtMTU1LDQyICsxNTUsMjcgQEAgc3BnYnVpbGQoUmVsYXRpb24gaGVh cCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogdm9pZAogc3BnYnVp bGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIHsKLQlCdWZmZXIJCW1ldGFidWZmZXIsCi0JCQkJ cm9vdGJ1ZmZlciwKLQkJCQludWxsYnVmZmVyOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRo ZSBtZXRhIHBhZ2UgYW5kIHJvb3QgcGFnZXMKLQkgKi8KLQltZXRhYnVmZmVyID0gUmVhZEJ1 ZmZlckV4dGVuZGVkKGluZGV4LCBJTklUX0ZPUktOVU0sIFBfTkVXLCBSQk1fTk9STUFMLCBO VUxMKTsKLQlMb2NrQnVmZmVyKG1ldGFidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 Ci0Jcm9vdGJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRlZChpbmRleCwgSU5JVF9GT1JLTlVN LCBQX05FVywgUkJNX05PUk1BTCwgTlVMTCk7Ci0JTG9ja0J1ZmZlcihyb290YnVmZmVyLCBC VUZGRVJfTE9DS19FWENMVVNJVkUpOwotCW51bGxidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5k ZWQoaW5kZXgsIElOSVRfRk9SS05VTSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOwotCUxv Y2tCdWZmZXIobnVsbGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQotCUFzc2Vy dChCdWZmZXJHZXRCbG9ja051bWJlcihtZXRhYnVmZmVyKSA9PSBTUEdJU1RfTUVUQVBBR0Vf QkxLTk8pOwotCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihyb290YnVmZmVyKSA9PSBT UEdJU1RfUk9PVF9CTEtOTyk7Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKG51bGxi dWZmZXIpID09IFNQR0lTVF9OVUxMX0JMS05PKTsKKwlQYWdlCQlwYWdlOworCUJ1bGtXcml0 ZVN0YXRlICpidWxrdzsKIAotCVNUQVJUX0NSSVRfU0VDVElPTigpOworCWJ1bGt3ID0gYnVs a3dfc3RhcnRfcmVsKGluZGV4LCBJTklUX0ZPUktOVU0pOwogCi0JU3BHaXN0SW5pdE1ldGFw YWdlKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZmZlcikpOwotCU1hcmtCdWZmZXJEaXJ0eShtZXRh YnVmZmVyKTsKLQlTcEdpc3RJbml0QnVmZmVyKHJvb3RidWZmZXIsIFNQR0lTVF9MRUFGKTsK LQlNYXJrQnVmZmVyRGlydHkocm9vdGJ1ZmZlcik7Ci0JU3BHaXN0SW5pdEJ1ZmZlcihudWxs YnVmZmVyLCBTUEdJU1RfTEVBRiB8IFNQR0lTVF9OVUxMUyk7Ci0JTWFya0J1ZmZlckRpcnR5 KG51bGxidWZmZXIpOworCS8qIENvbnN0cnVjdCBtZXRhcGFnZS4gKi8KKwlwYWdlID0gKFBh Z2UpIGJ1bGt3X2FsbG9jX2J1ZihidWxrdyk7CisJU3BHaXN0SW5pdE1ldGFwYWdlKHBhZ2Up OworCWJ1bGt3X3dyaXRlKGJ1bGt3LCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sIHBhZ2UsIHRy dWUpOwogCi0JbG9nX25ld3BhZ2VfYnVmZmVyKG1ldGFidWZmZXIsIHRydWUpOwotCWxvZ19u ZXdwYWdlX2J1ZmZlcihyb290YnVmZmVyLCB0cnVlKTsKLQlsb2dfbmV3cGFnZV9idWZmZXIo bnVsbGJ1ZmZlciwgdHJ1ZSk7CisJLyogTGlrZXdpc2UgZm9yIHRoZSByb290IHBhZ2UuICov CisJcGFnZSA9IChQYWdlKSBidWxrd19hbGxvY19idWYoYnVsa3cpOworCVNwR2lzdEluaXRQ YWdlKHBhZ2UsIFNQR0lTVF9MRUFGKTsKKwlidWxrd193cml0ZShidWxrdywgU1BHSVNUX1JP T1RfQkxLTk8sIHBhZ2UsIHRydWUpOwogCi0JRU5EX0NSSVRfU0VDVElPTigpOworCS8qIExp a2V3aXNlIGZvciB0aGUgbnVsbC10dXBsZXMgcm9vdCBwYWdlLiAqLworCXBhZ2UgPSAoUGFn ZSkgYnVsa3dfYWxsb2NfYnVmKGJ1bGt3KTsKKwlTcEdpc3RJbml0UGFnZShwYWdlLCBTUEdJ U1RfTEVBRiB8IFNQR0lTVF9OVUxMUyk7CisJYnVsa3dfd3JpdGUoYnVsa3csIFNQR0lTVF9O VUxMX0JMS05PLCBwYWdlLCB0cnVlKTsKIAotCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1 ZmZlcik7Ci0JVW5sb2NrUmVsZWFzZUJ1ZmZlcihyb290YnVmZmVyKTsKLQlVbmxvY2tSZWxl YXNlQnVmZmVyKG51bGxidWZmZXIpOworCWJ1bGt3X2ZpbmlzaChidWxrdyk7CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3RvcmFnZS5jCmluZGV4IDkzZjA3ZTQ5YjcyLi5lYjk4MmIxYTg4ZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL3N0b3JhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3N0b3JhZ2VfeGxvZy5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVsa193cml0ZS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvZnJlZXNwYWNlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgpAQCAtNDUxLDE0ICs0NTIsMTEg QEAgdm9pZAogUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVs YXRpb24gZHN0LAogCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIGNoYXIgcmVscGVyc2lzdGVu Y2UpCiB7Ci0JUEdJT0FsaWduZWRCbG9jayBidWY7Ci0JUGFnZQkJcGFnZTsKIAlib29sCQl1 c2Vfd2FsOwogCWJvb2wJCWNvcHlpbmdfaW5pdGZvcms7CiAJQmxvY2tOdW1iZXIgbmJsb2Nr czsKIAlCbG9ja051bWJlciBibGtubzsKLQotCXBhZ2UgPSAoUGFnZSkgYnVmLmRhdGE7CisJ QnVsa1dyaXRlU3RhdGUgKmJ1bGt3OwogCiAJLyoKIAkgKiBUaGUgaW5pdCBmb3JrIGZvciBh biB1bmxvZ2dlZCByZWxhdGlvbiBpbiBtYW55IHJlc3BlY3RzIGhhcyB0byBiZQpAQCAtNDc3 LDE0ICs0NzUsMTkgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBT TWdyUmVsYXRpb24gZHN0LAogCXVzZV93YWwgPSBYTG9nSXNOZWVkZWQoKSAmJgogCQkocmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGNvcHlpbmdfaW5p dGZvcmspOwogCisJYnVsa3cgPSBidWxrd19zdGFydF9zbWdyKGRzdCwgZm9ya051bSwgdXNl X3dhbCk7CisKIAluYmxvY2tzID0gc21ncm5ibG9ja3Moc3JjLCBmb3JrTnVtKTsKIAogCWZv ciAoYmxrbm8gPSAwOyBibGtubyA8IG5ibG9ja3M7IGJsa25vKyspCiAJeworCQlQYWdlCQlw YWdlOworCiAJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgZHVyaW5nIHRoZSBjb3B5 IG9mIHRoZSBkYXRhLCBxdWl0ICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJ c21ncnJlYWQoc3JjLCBmb3JrTnVtLCBibGtubywgYnVmLmRhdGEpOworCQlwYWdlID0gYnVs a3dfYWxsb2NfYnVmKGJ1bGt3KTsKKwkJc21ncnJlYWQoc3JjLCBmb3JrTnVtLCBibGtubywg cGFnZSk7CiAKIAkJaWYgKCFQYWdlSXNWZXJpZmllZEV4dGVuZGVkKHBhZ2UsIGJsa25vLAog CQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFUKSkKQEAgLTUxMSwz MCArNTE0LDkgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdy UmVsYXRpb24gZHN0LAogCQkgKiBwYWdlIHRoaXMgaXMsIHNvIHdlIGhhdmUgdG8gbG9nIHRo ZSBmdWxsIHBhZ2UgaW5jbHVkaW5nIGFueSB1bnVzZWQKIAkJICogc3BhY2UuCiAJCSAqLwot CQlpZiAodXNlX3dhbCkKLQkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfcmxvY2F0b3IubG9j YXRvciwgZm9ya051bSwgYmxrbm8sIHBhZ2UsIGZhbHNlKTsKLQotCQlQYWdlU2V0Q2hlY2tz dW1JbnBsYWNlKHBhZ2UsIGJsa25vKTsKLQotCQkvKgotCQkgKiBOb3cgd3JpdGUgdGhlIHBh Z2UuICBXZSBzYXkgc2tpcEZzeW5jID0gdHJ1ZSBiZWNhdXNlIHRoZXJlJ3Mgbm8KLQkJICog bmVlZCBmb3Igc21nciB0byBzY2hlZHVsZSBhbiBmc3luYyBmb3IgdGhpcyB3cml0ZTsgd2Un bGwgZG8gaXQKLQkJICogb3Vyc2VsdmVzIGJlbG93LgotCQkgKi8KLQkJc21ncmV4dGVuZChk c3QsIGZvcmtOdW0sIGJsa25vLCBidWYuZGF0YSwgdHJ1ZSk7CisJCWJ1bGt3X3dyaXRlKGJ1 bGt3LCBibGtubywgcGFnZSwgZmFsc2UpOwogCX0KLQotCS8qCi0JICogV2hlbiB3ZSBXQUwt bG9nZ2VkIHJlbCBwYWdlcywgd2UgbXVzdCBub25ldGhlbGVzcyBmc3luYyB0aGVtLiAgVGhl Ci0JICogcmVhc29uIGlzIHRoYXQgc2luY2Ugd2UncmUgY29weWluZyBvdXRzaWRlIHNoYXJl ZCBidWZmZXJzLCBhIENIRUNLUE9JTlQKLQkgKiBvY2N1cnJpbmcgZHVyaW5nIHRoZSBjb3B5 IGhhcyBubyB3YXkgdG8gZmx1c2ggdGhlIHByZXZpb3VzbHkgd3JpdHRlbgotCSAqIGRhdGEg dG8gZGlzayAoaW5kZWVkIGl0IHdvbid0IGtub3cgdGhlIG5ldyByZWwgZXZlbiBleGlzdHMp LiAgQSBjcmFzaAotCSAqIGxhdGVyIG9uIHdvdWxkIHJlcGxheSBXQUwgZnJvbSB0aGUgY2hl Y2twb2ludCwgdGhlcmVmb3JlIGl0IHdvdWxkbid0Ci0JICogcmVwbGF5IG91ciBlYXJsaWVy IFdBTCBlbnRyaWVzLiBJZiB3ZSBkbyBub3QgZnN5bmMgdGhvc2UgcGFnZXMgaGVyZSwKLQkg KiB0aGV5IG1pZ2h0IHN0aWxsIG5vdCBiZSBvbiBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vy cy4KLQkgKi8KLQlpZiAodXNlX3dhbCB8fCBjb3B5aW5nX2luaXRmb3JrKQotCQlzbWdyaW1t ZWRzeW5jKGRzdCwgZm9ya051bSk7CisJYnVsa3dfZmluaXNoKGJ1bGt3KTsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9NYWtlZmlsZQppbmRleCA1OTZiNTY0NjU2Zi4uMWQwYjk4 NzY0ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcg QEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKIAogT0JKUyA9IFwKKwlidWxrX3dyaXRlLm8gXAogCW1k Lm8gXAogCXNtZ3IubwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Iv YnVsa193cml0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL2J1bGtfd3JpdGUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDkwOTA5NzlkNjUKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvYnVsa193cml0ZS5j CkBAIC0wLDAgKzEsMzM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBidWxr X3dyaXRlLmMKKyAqCSAgRWZmaWNpZW50bHkgYW5kIHJlbGlhYmx5IHBvcHVsYXRlIGEgbmV3 IHJlbGF0aW9uCisgKgorICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBubyBvdGhlciBiYWNr ZW5kcyBhY2Nlc3MgdGhlIHJlbGF0aW9uIHdoaWxlIHdlIGFyZQorICogbG9hZGluZyBpdCwg c28gd2UgY2FuIHRha2Ugc29tZSBzaG9ydGN1dHMuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2Fu IHVzZSB0aGUKKyAqIGJ1ZmZlciBtYW5hZ2VyIGFzIHVzdWFsLCBpZiBwZXJmb3JtYW5jZSBp cyBub3QgY3JpdGljYWwsIGJ1dCB5b3UgbXVzdCBub3QKKyAqIG1peCBvcGVyYXRpb25zIHRo cm91Z2ggdGhlIGJ1ZmZlciBtYW5hZ2VyIGFuZCB0aGUgYnVsayBsb2FkaW5nIGludGVyZmFj ZSBhdAorICogdGhlIHNhbWUgdGltZS4KKyAqCisgKiBXZSBieXBhc3MgdGhlIGJ1ZmZlciBt YW5hZ2VyIHRvIGF2b2lkIHRoZSBsb2NraW5nIG92ZXJoZWFkLCBhbmQgY2FsbAorICogc21n cmV4dGVuZCgpIGRpcmVjdGx5LiAgQSBkb3duc2lkZSBpcyB0aGF0IHRoZSBwYWdlcyB3aWxs IG5lZWQgdG8gYmUKKyAqIHJlLXJlYWQgaW50byBzaGFyZWQgYnVmZmVycyBvbiBmaXJzdCB1 c2UgYWZ0ZXIgdGhlIGJ1aWxkIGZpbmlzaGVzLiAgVGhhdCdzCisgKiB1c3VhbGx5IGEgZ29v ZCB0cmFkZW9mZiBmb3IgbGFyZ2UgcmVsYXRpb25zLCBhbmQgZm9yIHNtYWxsIHJlbGF0aW9u cywgdGhlCisgKiBvdmVyaGVhZCBpc24ndCB2ZXJ5IHNpZ25pZmljYW50IGNvbXBhcmVkIHRv IGNyZWF0aW5nIHRoZSByZWxhdGlvbiBpbiB0aGUKKyAqIGZpcnN0IHBsYWNlLgorICoKKyAq IFRoZSBwYWdlcyBhcmUgV0FMLWxvZ2dlZCBpZiBuZWVkZWQuICBUbyBzYXZlIG9uIFdBTCBo ZWFkZXIgb3ZlcmhlYWQsIHdlCisgKiBXQUwtbG9nIHNldmVyYWwgcGFnZXMgaW4gb25lIHJl Y29yZC4KKyAqCisgKiBPbmUgdHJpY2t5IHBvaW50IGlzIHRoYXQgYmVjYXVzZSB3ZSBieXBh c3MgdGhlIGJ1ZmZlciBtYW5hZ2VyLCB3ZSBuZWVkIHRvCisgKiByZWdpc3RlciB0aGUgcmVs YXRpb24gZm9yIGZzeW5jaW5nIGF0IHRoZSBuZXh0IGNoZWNrcG9pbnQgb3Vyc2VsdmVzLCBh bmQKKyAqIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxhdGlvbiBpcyBjb3JyZWN0bHkgZnN5bmMg YnkgdXMgb3IgdGhlIGNoZWNrcG9pbnRlcgorICogZXZlbiBpZiBhIGNoZWNrcG9pbnQgaGFw cGVucyBjb25jdXJyZW50bHkuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvc3RvcmFnZS9zbWdyL2J1bGtfd3JpdGUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94bG9n aW5zZXJ0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvcmQuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvYnVsa193cml0ZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCisj ZGVmaW5lIE1BWF9CVUZGRVJFRF9QQUdFUyBYTFJfTUFYX0JMT0NLX0lECisKK3R5cGVkZWYg c3RydWN0IEJ1bGtXcml0ZUJ1ZmZlcgoreworCVBhZ2UJCXBhZ2U7CisJQmxvY2tOdW1iZXIg Ymxrbm87CisJYm9vbAkJcGFnZV9zdGQ7CisJaW50MTYJCW9yZGVyOworfSBCdWxrV3JpdGVC dWZmZXI7CisKKy8qCisgKiBCdWxrIHdyaXRlciBzdGF0ZSBmb3Igb25lIHJlbGF0aW9uIGZv cmsuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJ1bGtXcml0ZVN0YXRlCit7CisJLyogSW5mb3Jt YXRpb24gYWJvdXQgdGhlIHRhcmdldCByZWxhdGlvbiB3ZSdyZSB3cml0aW5nICovCisJU01n clJlbGF0aW9uIHNtZ3I7CisJRm9ya051bWJlcglmb3JrbnVtOworCWJvb2wJCXVzZV93YWw7 CisKKwkvKiBXZSBrZWVwIHNldmVyYWwgcGFnZXMgYnVmZmVyZWQsIGFuZCBXQUwtbG9nIHRo ZW0gaW4gYmF0Y2hlcyAqLworCWludAkJCW5idWZmZXJlZDsKKwlCdWxrV3JpdGVCdWZmZXIg YnVmZmVyc1tNQVhfQlVGRkVSRURfUEFHRVNdOworCisJLyogQ3VycmVudCBzaXplIG9mIHRo ZSByZWxhdGlvbiAqLworCUJsb2NrTnVtYmVyIHBhZ2VzX3dyaXR0ZW47CisKKwkvKiBUaGUg UmVkb1JlY1B0ciBhdCB0aGUgdGltZSB0aGF0IHRoZSBidWxrIG9wZXJhdGlvbiBzdGFydGVk ICovCisJWExvZ1JlY1B0cglzdGFydF9SZWRvUmVjUHRyOworCisJUGFnZQkJemVyb3BhZ2U7 CQkvKiB3b3Jrc3BhY2UgZm9yIGZpbGxpbmcgemVyb2VzICovCisKKwlNZW1vcnlDb250ZXh0 IG1lbWN4dDsKK30gQnVsa1dyaXRlU3RhdGU7CisKK3N0YXRpYyB2b2lkIGJ1bGt3X2ZsdXNo KEJ1bGtXcml0ZVN0YXRlICpidWxrdyk7CisKKy8qCisgKiBTdGFydCBhIGJ1bGsgd3JpdGUg b3BlcmF0aW9uIG9uIGEgcmVsYXRpb24gZm9yay4KKyAqLworQnVsa1dyaXRlU3RhdGUgKgor YnVsa3dfc3RhcnRfcmVsKFJlbGF0aW9uIHJlbCwgRm9ya051bWJlciBmb3JrbnVtKQorewor CXJldHVybiBidWxrd19zdGFydF9zbWdyKFJlbGF0aW9uR2V0U21ncihyZWwpLAorCQkJCQkJ CWZvcmtudW0sCisJCQkJCQkJUmVsYXRpb25OZWVkc1dBTChyZWwpIHx8IGZvcmtudW0gPT0g SU5JVF9GT1JLTlVNKTsKK30KKworLyoKKyAqIFN0YXJ0IGEgYnVsayB3cml0ZSBvcGVyYXRp b24gb24gYSByZWxhdGlvbiBmb3JrLgorICoKKyAqIFRoaXMgaXMgbGlrZSBidWxrd19zdGFy dF9yZWwsIGJ1dCBjYW4gYmUgdXNlZCB3aXRob3V0IGEgcmVsY2FjaGUgZW50cnkuCisgKi8K K0J1bGtXcml0ZVN0YXRlICoKK2J1bGt3X3N0YXJ0X3NtZ3IoU01nclJlbGF0aW9uIHNtZ3Is IEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCB1c2Vfd2FsKQoreworCUJ1bGtXcml0ZVN0YXRl ICpidWxrdzsKKworCWJ1bGt3ID0gcGFsbG9jKHNpemVvZihCdWxrV3JpdGVTdGF0ZSkpOwor CWJ1bGt3LT5zbWdyID0gc21ncjsKKwlidWxrdy0+Zm9ya251bSA9IGZvcmtudW07CisJYnVs a3ctPnVzZV93YWwgPSB1c2Vfd2FsOworCisJYnVsa3ctPm5idWZmZXJlZCA9IDA7CisJYnVs a3ctPnBhZ2VzX3dyaXR0ZW4gPSAwOworCisJYnVsa3ctPnN0YXJ0X1JlZG9SZWNQdHIgPSBH ZXRSZWRvUmVjUHRyKCk7CisKKwlidWxrdy0+emVyb3BhZ2UgPSBOVUxMOwkJLyogdW50aWwg bmVlZGVkICovCisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSBtZW1vcnkgY29udGV4dC4gIFdl IHdpbGwgdXNlIGl0IHRvIGFsbG9jYXRlIGFsbCB0aGUKKwkgKiBidWZmZXJzIGxhdGVyLgor CSAqLworCWJ1bGt3LT5tZW1jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCXJldHVy biBidWxrdzsKK30KKworLyoKKyAqIEZpbmlzaCBidWxrIHdyaXRlIG9wZXJhdGlvbi4KKyAq CisgKiBUaGlzIFdBTC1sb2dzIGFuZCBmbHVzaGVzIGFueSByZW1haW5pbmcgYnVmZmVycyB0 byBkaXNrLCBhbmQKKyAqIGZzeW5jcyB0aGUgcmVsYXRpb24gaWYgbmVlZGVkLgorICovCit2 b2lkCitidWxrd19maW5pc2goQnVsa1dyaXRlU3RhdGUgKmJ1bGt3KQoreworCS8qIFdBTC1s b2cgYW5kIGZsdXNoIGFueSByZW1haW5pbmcgcGFnZXMgKi8KKwlidWxrd19mbHVzaChidWxr dyk7CisKKwkvKgorCSAqIFdoZW4gd2Ugd3JvdGUgb3V0IHRoZSBwYWdlcywgd2UgcGFzc2Vk IHNraXBGc3luYz10cnVlIHRvIGF2b2lkIHRoZQorCSAqIG92ZXJoZWFkIG9mIHJlZ2lzdGVy aW5nIGFsbCB0aGUgd3JpdGVzIHdpdGggdGhlIGNoZWNrcG9pbnRlci4gIFJlZ2lzdGVyCisJ ICogdGhlIHdob2xlIHJlbGF0aW9uIG5vdy4KKwkgKgorCSAqIFRoZXJlIGlzIG9uZSBob2xl IGluIHRoYXQgaWRlYTogSWYgYSBjaGVja3BvaW50IG9jY3VycmVkIHdoaWxlIHdlIHdlcmUK KwkgKiB3cml0aW5nIHRoZSBwYWdlcywgaXQgYWxyZWFkeSBtaXNzZWQgZnN5bmNpbmcgdGhl IHBhZ2VzIHdlIGhhZCB3cml0dGVuCisJICogYmVmb3JlIHRoZSBjaGVja3BvaW50IHN0YXJ0 ZWQuICBBIGNyYXNoIGxhdGVyIG9uIHdvdWxkIHJlcGxheSB0aGUgV0FMCisJICogc3RhcnRp bmcgZnJvbSB0aGUgY2hlY2twb2ludCwgdGhlcmVmb3JlIGl0IHdvdWxkbid0IHJlcGxheSBv dXIgZWFybGllcgorCSAqIFdBTCByZWNvcmRzLiAgU28gaWYgYSBjaGVja3BvaW50IHN0YXJ0 ZWQgYWZ0ZXIgdGhlIGJ1bGsgd3JpdGUsIGZzeW5jCisJICogdGhlIGZpbGVzIG5vdy4KKwkg Ki8KKwlpZiAoIVNtZ3JJc1RlbXAoYnVsa3ctPnNtZ3IpKQorCXsKKwkJLyoKKwkJICogUHJl dmVudCBhIGNoZWNrcG9pbnQgZnJvbSBzdGFydGluZyBiZXR3ZWVuIHRoZSBHZXRSZWRvUmVj UHRyKCkgYW5kCisJCSAqIHNtZ3JyZWdpc3RlcnN5bmMoKSBjYWxscy4KKwkJICovCisJCUFz c2VydCgoTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiBERUxBWV9DSEtQVF9TVEFSVCkgPT0g MCk7CisJCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwor CisJCWlmIChidWxrdy0+c3RhcnRfUmVkb1JlY1B0ciAhPSBHZXRSZWRvUmVjUHRyKCkpCisJ CXsKKwkJCS8qCisJCQkgKiBBIGNoZWNrcG9pbnQgb2NjdXJyZWQgYW5kIGl0IGRpZG4ndCBr bm93IGFib3V0IG91ciB3cml0ZXMsIHNvCisJCQkgKiBmc3luYygpIHRoZSByZWxhdGlvbiBv dXJzZWx2ZXMuCisJCQkgKi8KKwkJCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxB WV9DSEtQVF9TVEFSVDsKKwkJCXNtZ3JpbW1lZHN5bmMoYnVsa3ctPnNtZ3IsIGJ1bGt3LT5m b3JrbnVtKTsKKwkJCWVsb2coREVCVUcxLCAiZmx1c2hlZCByZWxhdGlvbiBiZWNhdXNlIGEg Y2hlY2twb2ludCBvY2N1cnJlZCBjb25jdXJyZW50bHkiKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCXNtZ3JyZWdpc3RlcnN5bmMoYnVsa3ctPnNtZ3IsIGJ1bGt3LT5mb3JrbnVtKTsKKwkJ CU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKKwkJfQor CX0KK30KKworc3RhdGljIGludAorYnVmZmVyX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiKQoreworCWNvbnN0IEJ1bGtXcml0ZUJ1ZmZlciAqYnVmYSA9IChjb25zdCBCdWxr V3JpdGVCdWZmZXIgKikgYTsKKwljb25zdCBCdWxrV3JpdGVCdWZmZXIgKmJ1ZmIgPSAoY29u c3QgQnVsa1dyaXRlQnVmZmVyICopIGI7CisKKwlpZiAoYnVmYS0+Ymxrbm8gPT0gYnVmYi0+ Ymxrbm8pCisJeworCQlpZiAoYnVmYS0+b3JkZXIgPiBidWZiLT5vcmRlcikKKwkJCXJldHVy biAxOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCWVsc2UgaWYgKGJ1ZmEtPmJsa25v ID4gYnVmYi0+Ymxrbm8pCisJeworCQlyZXR1cm4gMTsKKwl9CisJZWxzZQorCQlyZXR1cm4g LTE7Cit9CisKKy8qCisgKiBXcml0ZSBhbGwgYnVmZmVyZWQgcGFnZXMgdG8gZGlzay4KKyAq Lworc3RhdGljIHZvaWQKK2J1bGt3X2ZsdXNoKEJ1bGtXcml0ZVN0YXRlICpidWxrdykKK3sK KwlpbnQJCQluYnVmZmVyZWQgPSBidWxrdy0+bmJ1ZmZlcmVkOworCUJ1bGtXcml0ZUJ1ZmZl ciAqYnVmZmVycyA9IGJ1bGt3LT5idWZmZXJzOworCisJaWYgKG5idWZmZXJlZCA9PSAwKQor CQlyZXR1cm47CisKKwlpZiAobmJ1ZmZlcmVkID4gMSkKKwl7CisJCWludAkJCW87CisKKwkJ cXNvcnQoYnVmZmVycywgbmJ1ZmZlcmVkLCBzaXplb2YoQnVsa1dyaXRlQnVmZmVyKSwgYnVm ZmVyX2NtcCk7CisKKwkJLyoKKwkJICogRWxpbWluYXRlIGR1cGxpY2F0ZXMsIGtlZXBpbmcg dGhlIGxhc3Qgd3JpdGUgb2YgZWFjaCBibG9jay4KKwkJICogKGJ1ZmZlcl9jbXAgdXNlcyAn b3JkZXInIGFzIHRoZSBsYXN0IHNvcnQga2V5KQorCQkgKi8KKwkJbyA9IDA7CisJCWZvciAo aW50IGkgPSAwOyBpIDwgbmJ1ZmZlcmVkOyBpKyspCisJCXsKKwkJCWlmIChpIDwgbmJ1ZmZl cmVkIC0gMSAmJiBidWZmZXJzW2kgKyAxXS5ibGtubyA9PSBidWZmZXJzW2ldLmJsa25vKQor CQkJeworCQkJCS8qIHRoZXJlIGlzIGEgbGF0ZXIgd3JpdGUgb2YgdGhlIHNhbWUgcGFnZSwg c2tpcCB0aGlzIG9uZSAqLworCQkJCXBmcmVlKGJ1ZmZlcnNbaV0ucGFnZSk7CisJCQkJY29u dGludWU7CisJCQl9CisKKwkJCWlmIChpICE9IG8pCisJCQkJYnVmZmVyc1tvXSA9IGJ1ZmZl cnNbaV07CisJCQlvKys7CisJCX0KKwkJbmJ1ZmZlcmVkID0gbzsKKwl9CisKKwlpZiAoYnVs a3ctPnVzZV93YWwpCisJeworCQlCbG9ja051bWJlciBibGtub3NbTUFYX0JVRkZFUkVEX1BB R0VTXTsKKwkJUGFnZQkJcGFnZXNbTUFYX0JVRkZFUkVEX1BBR0VTXTsKKwkJYm9vbAkJcGFn ZV9zdGQgPSB0cnVlOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmJ1ZmZlcmVkOyBpKysp CisJCXsKKwkJCWJsa25vc1tpXSA9IGJ1ZmZlcnNbaV0uYmxrbm87CisJCQlwYWdlc1tpXSA9 IGJ1ZmZlcnNbaV0ucGFnZTsKKworCQkJLyoKKwkJCSAqIElmIGFueSBvZiB0aGUgcGFnZXMg dXNlICFwYWdlX3N0ZCwgd2UgbG9nIHRoZW0gYWxsIGFzIHN1Y2guCisJCQkgKiBUaGF0J3Mg YSBiaXQgd2FzdGVmdWwsIGJ1dCBpbiBwcmFjdGljZSwgYSBtaXggb2Ygc3RhbmRhcmQgYW5k CisJCQkgKiBub24tc3RhbmRhcmQgcGFnZSBsYXlvdXQgaXMgcmFyZS4gIE5vbmUgb2YgdGhl IGJ1aWx0LWluIEFNcyBkbworCQkJICogdGhhdC4KKwkJCSAqLworCQkJaWYgKCFidWZmZXJz W2ldLnBhZ2Vfc3RkKQorCQkJCXBhZ2Vfc3RkID0gZmFsc2U7CisJCX0KKwkJbG9nX25ld3Bh Z2VzKCZidWxrdy0+c21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBidWxrdy0+Zm9ya251 bSwgbmJ1ZmZlcmVkLCBibGtub3MsIHBhZ2VzLAorCQkJCQkgcGFnZV9zdGQpOworCX0KKwor CWZvciAoaW50IGkgPSAwOyBpIDwgbmJ1ZmZlcmVkOyBpKyspCisJeworCQlCbG9ja051bWJl ciBibGtubyA9IGJ1ZmZlcnNbaV0uYmxrbm87CisJCVBhZ2UJCXBhZ2UgPSBidWZmZXJzW2ld LnBhZ2U7CisKKwkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBibGtubyk7CisKKwkJ aWYgKGJsa25vID49IGJ1bGt3LT5wYWdlc193cml0dGVuKQorCQl7CisJCQkvKgorCQkJICog SWYgd2UgaGF2ZSB0byB3cml0ZSBwYWdlcyBub25zZXF1ZW50aWFsbHksIGZpbGwgaW4gdGhl IHNwYWNlCisJCQkgKiB3aXRoIHplcm9lcyB1bnRpbCB3ZSBjb21lIGJhY2sgYW5kIG92ZXJ3 cml0ZS4gIFRoaXMgaXMgbm90CisJCQkgKiBsb2dpY2FsbHkgbmVjZXNzYXJ5IG9uIHN0YW5k YXJkIFVuaXggZmlsZXN5c3RlbXMgKHVud3JpdHRlbgorCQkJICogc3BhY2Ugd2lsbCByZWFk IGFzIHplcm9lcyBhbnl3YXkpLCBidXQgaXQgc2hvdWxkIGhlbHAgdG8gYXZvaWQKKwkJCSAq IGZyYWdtZW50YXRpb24uICBUaGUgZHVtbXkgcGFnZXMgYXJlbid0IFdBTC1sb2dnZWQgdGhv dWdoLgorCQkJICovCisJCQl3aGlsZSAoYmxrbm8gPiBidWxrdy0+cGFnZXNfd3JpdHRlbikK KwkJCXsKKwkJCQlpZiAoIWJ1bGt3LT56ZXJvcGFnZSkKKwkJCQkJYnVsa3ctPnplcm9wYWdl ID0gKFBhZ2UpIHBhbGxvY19hbGlnbmVkKEJMQ0tTWiwKKwkJCQkJCQkJCQkJCQkJCVBHX0lP X0FMSUdOX1NJWkUsCisJCQkJCQkJCQkJCQkJCQlNQ1hUX0FMTE9DX1pFUk8pOworCisJCQkJ LyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBwYWdlICovCisJCQkJc21ncmV4 dGVuZChidWxrdy0+c21nciwgYnVsa3ctPmZvcmtudW0sCisJCQkJCQkgICBidWxrdy0+cGFn ZXNfd3JpdHRlbisrLAorCQkJCQkJICAgYnVsa3ctPnplcm9wYWdlLAorCQkJCQkJICAgdHJ1 ZSk7CisJCQl9CisKKwkJCXNtZ3JleHRlbmQoYnVsa3ctPnNtZ3IsIGJ1bGt3LT5mb3JrbnVt LCBibGtubywgcGFnZSwgdHJ1ZSk7CisJCQlidWxrdy0+cGFnZXNfd3JpdHRlbiA9IGJ1ZmZl cnNbaV0uYmxrbm8gKyAxOworCQl9CisJCWVsc2UKKwkJCXNtZ3J3cml0ZShidWxrdy0+c21n ciwgYnVsa3ctPmZvcmtudW0sIGJsa25vLCBwYWdlLCB0cnVlKTsKKwkJcGZyZWUocGFnZSk7 CisJfQorCisJYnVsa3ctPm5idWZmZXJlZCA9IDA7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQg b3IgYnVmZmVyIHdyaXRlIG9mICdwYWdlJy4KKyAqCisgKiBOQjogdGhpcyB0YWtlcyBvd25l cnNoaXAgb2YgJ3BhZ2UnCisgKi8KK3ZvaWQKK2J1bGt3X3dyaXRlKEJ1bGtXcml0ZVN0YXRl ICpidWxrdywgQmxvY2tOdW1iZXIgYmxvY2tudW0sIFBhZ2UgcGFnZSwgYm9vbCBwYWdlX3N0 ZCkKK3sKKwlidWxrdy0+YnVmZmVyc1tidWxrdy0+bmJ1ZmZlcmVkXS5wYWdlID0gcGFnZTsK KwlidWxrdy0+YnVmZmVyc1tidWxrdy0+bmJ1ZmZlcmVkXS5ibGtubyA9IGJsb2NrbnVtOwor CWJ1bGt3LT5idWZmZXJzW2J1bGt3LT5uYnVmZmVyZWRdLnBhZ2Vfc3RkID0gcGFnZV9zdGQ7 CisKKwkvKgorCSAqIElmIHRoZSBzYW1lIHBhZ2UgaXMgd3JpdHRlbiBtdWx0aXBsZSB0aW1l cywgJ29yZGVyJyBpcyB1c2VkIHRvIHJlbWVtYmVyCisJICogdGhlIG9yZGVyIG9mIHRoZSB3 cml0ZXMsIHNvIHRoYXQgdGhlIGxhc3Qgd3JpdGUgd2lucy4KKwkgKi8KKwlidWxrdy0+YnVm ZmVyc1tidWxrdy0+bmJ1ZmZlcmVkXS5vcmRlciA9IChpbnQxNikgYnVsa3ctPm5idWZmZXJl ZDsKKworCWJ1bGt3LT5uYnVmZmVyZWQrKzsKKworCWlmIChidWxrdy0+bmJ1ZmZlcmVkID09 IE1BWF9CVUZGRVJFRF9QQUdFUykKKwkJYnVsa3dfZmx1c2goYnVsa3cpOworfQorCisvKgor ICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIHdoaWNoIGNhbiBsYXRlciBiZSB3cml0dGVuIHdp dGggYnVsa3dfd3JpdGUoKQorICovCitQYWdlCitidWxrd19hbGxvY19idWYoQnVsa1dyaXRl U3RhdGUgKmJ1bGt3KQoreworCXJldHVybiBNZW1vcnlDb250ZXh0QWxsb2NBbGlnbmVkKGJ1 bGt3LT5tZW1jeHQsIEJMQ0tTWiwgUEdfSU9fQUxJR05fU0laRSwgMCk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc21nci9tZC5jCmluZGV4IGZkZWNiYWQxNzA5Li4zNDNlZTUxMDQ4ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9zbWdyL21kLmMKQEAgLTEwODIsNiArMTA4Miw0OSBAQCBtZHRydW5jYXRlKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3Mp CiAJfQogfQogCisvKgorICogbWRyZWdpc3RlcnN5bmMoKSAtLSBNYXJrIHdob2xlIHJlbGF0 aW9uIGFzIG5lZWRpbmcgZnN5bmMKKyAqLwordm9pZAorbWRyZWdpc3RlcnN5bmMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3sKKwlpbnQJCQlzZWdubzsKKwlp bnQJCQltaW5faW5hY3RpdmVfc2VnOworCisJLyoKKwkgKiBOT1RFOiBtZG5ibG9ja3MgbWFr ZXMgc3VyZSB3ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0CisJ ICogdGhlIGxvb3AgYmVsb3cgd2lsbCBnZXQgdGhlbSBhbGwhCisJICovCisJbWRuYmxvY2tz KHJlbG4sIGZvcmtudW0pOworCisJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0gcmVsbi0+ bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3Bl biBpbmFjdGl2ZSBzZWdtZW50cywgdGhlbiBjbG9zZSB0aGVtIGFmdGVyIHN5bmMuICBUaGVy ZQorCSAqIG1heSBiZSBzb21lIGluYWN0aXZlIHNlZ21lbnRzIGxlZnQgb3BlbmVkIGFmdGVy IGVycm9yLCBidXQgdGhhdCBpcworCSAqIGhhcm1sZXNzLiAgV2UgZG9uJ3QgYm90aGVyIHRv IGNsZWFuIHRoZW0gdXAgYW5kIHRha2UgYSByaXNrIG9mIGZ1cnRoZXIKKwkgKiB0cm91Ymxl LiAgVGhlIG5leHQgbWRjbG9zZSgpIHdpbGwgc29vbiBjbG9zZSB0aGVtLgorCSAqLworCXdo aWxlIChfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIHNlZ25vLCAwKSAhPSBOVUxMKQor CQlzZWdubysrOworCisJd2hpbGUgKHNlZ25vID4gMCkKKwl7CisJCU1kZmRWZWMgICAgKnYg PSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdubyAtIDFdOworCisJCXJlZ2lzdGVy X2RpcnR5X3NlZ21lbnQocmVsbiwgZm9ya251bSwgdik7CisKKwkJLyogQ2xvc2UgaW5hY3Rp dmUgc2VnbWVudHMgaW1tZWRpYXRlbHkgKi8KKwkJaWYgKHNlZ25vID4gbWluX2luYWN0aXZl X3NlZykKKwkJeworCQkJRmlsZUNsb3NlKHYtPm1kZmRfdmZkKTsKKwkJCV9mZHZlY19yZXNp emUocmVsbiwgZm9ya251bSwgc2Vnbm8gLSAxKTsKKwkJfQorCisJCXNlZ25vLS07CisJfQor fQorCiAvKgogICogbWRpbW1lZHN5bmMoKSAtLSBJbW1lZGlhdGVseSBzeW5jIGEgcmVsYXRp b24gdG8gc3RhYmxlIHN0b3JhZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9zbWdyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21lc29u LmJ1aWxkCmluZGV4IGUxYmE2ZWQ3NGI4Li4xMzM2MjJhNjUyOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zbWdyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc21nci9tZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChj KSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAgJ2J1bGtfd3JpdGUuYycsCiAgICdtZC5jJywK ICAgJ3NtZ3IuYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Iv c21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCA1ZDBmM2Q1 MTVjMy4uOWY3NDA1ZTNjODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21n ci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpAQCAtNjUs NiArNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBmX3NtZ3IKIAl2b2lkCQkoKnNtZ3JfdHJ1bmNh dGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCQkg IEJsb2NrTnVtYmVyIG5ibG9ja3MpOwogCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKKwl2b2lkCQkoKnNtZ3JfcmVn aXN0ZXJzeW5jKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CiB9 IGZfc21ncjsKIAogc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3dbXSA9IHsKQEAgLTg2LDYg Kzg3LDcgQEAgc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3dbXSA9IHsKIAkJLnNtZ3JfbmJs b2NrcyA9IG1kbmJsb2NrcywKIAkJLnNtZ3JfdHJ1bmNhdGUgPSBtZHRydW5jYXRlLAogCQku c21ncl9pbW1lZHN5bmMgPSBtZGltbWVkc3luYywKKwkJLnNtZ3JfcmVnaXN0ZXJzeW5jID0g bWRyZWdpc3RlcnN5bmMsCiAJfQogfTsKIApAQCAtNTc2LDYgKzU3OCwxNCBAQCBzbWdycmVh ZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKICAqIG9uIGRpc2sgYXQgcmV0dXJuLCBvbmx5IGR1bXBlZCBvdXQgdG8gdGhl IGtlcm5lbC4gIEhvd2V2ZXIsCiAgKiBwcm92aXNpb25zIHdpbGwgYmUgbWFkZSB0byBmc3lu YyB0aGUgd3JpdGUgYmVmb3JlIHRoZSBuZXh0IGNoZWNrcG9pbnQuCiAgKgorICogTkI6IFRo ZSBtZWNoYW5pc20gdG8gZW5zdXJlIGZzeW5jIGF0IG5leHQgY2hlY2twb2ludCBhc3N1bWVz IHRoYXQgdGhlcmUgaXMKKyAqIHNvbWV0aGluZyB0aGF0IHByZXZlbnRzIGEgY29uY3VycmVu dCBjaGVja3BvaW50IGZyb20gInJhY2luZyBhaGVhZCIgb2YgdGhlCisgKiB3cml0ZS4gIE9u ZSB3YXkgdG8gcHJldmVudCB0aGF0IGlzIGJ5IGhvbGRpbmcgYSBsb2NrIG9uIHRoZSBidWZm ZXI7IHRoZQorICogYnVmZmVyIG1hbmFnZXIncyB3cml0ZXMgYXJlIHByb3RlY3RlZCBieSB0 aGF0LiAgVGhlIGJ1bGsgd3JpdGVyIGZhY2lsaXR5IGluCisgKiBidWxrX3dyaXRlLmMgY2hl Y2tzIHRoZSByZWRvIHBvaW50ZXIgYW5kIGFuZCBjYWxscyBzbWdyaW1tZWRzeW5jKCkgaWYg YQorICogY2hlY2twb2ludCBoYXBwZW5lZDsgdGhhdCByZWxpZXMgb24gdGhlIGZhY3QgdGhh dCBubyBvdGhlciBiYWNrZW5kIGNhbiBiZQorICogY29uY3VycmVudGx5IG1vZGlmeSB0aGUg cGFnZS4KKyAqCiAgKiBza2lwRnN5bmMgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciB3aWxs IG1ha2Ugb3RoZXIgcHJvdmlzaW9ucyB0bwogICogZnN5bmMgdGhlIHJlbGF0aW9uLCBzbyB3 ZSBuZWVkbid0IGJvdGhlci4gIFRlbXBvcmFyeSByZWxhdGlvbnMgYWxzbwogICogZG8gbm90 IHJlcXVpcmUgZnN5bmMuCkBAIC02OTQsNiArNzA0LDI0IEBAIHNtZ3J0cnVuY2F0ZShTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tO dW1iZXIgKm5iCiAJfQogfQogCisvKgorICogc21ncnJlZ2lzdGVyc3luYygpIC0tIFJlcXVl c3QgYSByZWxhdGlvbiB0byBiZSBzeW5jJ2QgYXQgbmV4dCBjaGVja3BvaW50CisgKgorICog VGhpcyBjYW4gYmUgdXNlZCBhZnRlciBjYWxsaW5nIHNtZ3J3cml0ZSgpIG9yIHNtZ3JleHRl bmQoKSB3aXRoIHNraXBGc3luYyA9CisgKiB0cnVlLCB0byByZWdpc3RlciB0aGUgZnN5bmNz IHRoYXQgd2VyZSBza2lwcGVkIGVhcmxpZXIuCisgKgorICogTm90ZTogYmUgbWluZGZ1bCB0 aGF0IGEgY2hlY2twb2ludCBjb3VsZCBhbHJlYWR5IGhhdmUgaGFwcGVuZWQgYmV0d2VlbiB0 aGUKKyAqIHNtZ3J3cml0ZSBvciBzbWdyZXh0ZW5kIGNhbGxzIGFuZCB0aGlzISAgSW4gdGhh dCBjYXNlLCB0aGUgY2hlY2twb2ludAorICogYWxyZWFkeSBtaXNzZWQgZnN5bmNpbmcgdGhp cyByZWxhdGlvbiwgYW5kIHlvdSBzaG91bGQgdXNlIHNtZ3JpbW1lZHN5bmMKKyAqIGluc3Rl YWQuICBNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSB0aGUgYnVsayBsb2FkaW5nIGZhY2lsaXR5 IGluIGJ1bGtfd3JpdGUuYworICogaW5zdGVhZCwgd2hpY2ggaGFuZGxlcyBhbGwgdGhhdC4K KyAqLwordm9pZAorc21ncnJlZ2lzdGVyc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKQoreworCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX3JlZ2lz dGVyc3luYyhyZWxuLCBmb3JrbnVtKTsKK30KKwogLyoKICAqIHNtZ3JpbW1lZHN5bmMoKSAt LSBGb3JjZSB0aGUgc3BlY2lmaWVkIHJlbGF0aW9uIHRvIHN0YWJsZSBzdG9yYWdlLgogICoK QEAgLTcxNiw2ICs3NDQsOSBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgKmZvcmtudW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogICogTm90 ZSB0aGF0IHlvdSBuZWVkIHRvIGRvIEZsdXNoUmVsYXRpb25CdWZmZXJzKCkgZmlyc3QgaWYg dGhlcmUgaXMKICAqIGFueSBwb3NzaWJpbGl0eSB0aGF0IHRoZXJlIGFyZSBkaXJ0eSBidWZm ZXJzIGZvciB0aGUgcmVsYXRpb247CiAgKiBvdGhlcndpc2UgdGhlIHN5bmMgaXMgbm90IHZl cnkgbWVhbmluZ2Z1bC4KKyAqCisgKiBNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSB0aGUgYnVs ayBsb2FkaW5nIGZhY2lsaXR5IGluIGJ1bGtfd3JpdGUuYworICogaW5zdGVhZCBvZiBjYWxs aW5nIHRoaXMgZGlyZWN0bHkuCiAgKi8KIHZvaWQKIHNtZ3JpbW1lZHN5bmMoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVsa193cml0ZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWxrX3dyaXRl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4ZWI3MzA3MTc4 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWxrX3dyaXRlLmgK QEAgLTAsMCArMSwyOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYnVsa193 cml0ZS5oCisgKgkgIEVmZmljaWVudGx5IGFuZCByZWxpYWJseSBwb3B1bGF0ZSBhIG5ldyBy ZWxhdGlvbgorICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWxrX3dyaXRlLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBCVUxLX1dSSVRFX0gKKyNkZWZpbmUgQlVM S19XUklURV9ICisKK3R5cGVkZWYgc3RydWN0IEJ1bGtXcml0ZVN0YXRlIEJ1bGtXcml0ZVN0 YXRlOworCisvKiBmb3J3YXJkIGRlY2xhcmVkIGZyb20gc21nci5oICovCitzdHJ1Y3QgU01n clJlbGF0aW9uRGF0YTsKKworZXh0ZXJuIEJ1bGtXcml0ZVN0YXRlICpidWxrd19zdGFydF9y ZWwoUmVsYXRpb24gcmVsLCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIEJ1bGtXcml0 ZVN0YXRlICpidWxrd19zdGFydF9zbWdyKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICpzbWdy LCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgdXNlX3dhbCk7CitleHRlcm4gUGFnZSBidWxr d19hbGxvY19idWYoQnVsa1dyaXRlU3RhdGUgKmJ1bGt3KTsKK2V4dGVybiB2b2lkIGJ1bGt3 X3dyaXRlKEJ1bGtXcml0ZVN0YXRlICpidWxrdywgQmxvY2tOdW1iZXIgYmxvY2tudW0sIFBh Z2UgcGFnZSwgYm9vbCBwYWdlX3N0ZCk7CitleHRlcm4gdm9pZCBidWxrd19maW5pc2goQnVs a1dyaXRlU3RhdGUgKmJ1bGt3KTsKKworI2VuZGlmCQkJCQkJCS8qIEJVTEtfV1JJVEVfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9tZC5oCmluZGV4IDk0MTg3OWVlNmE4Li4yMjU3MDEyNzFkMiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv bWQuaApAQCAtNDIsNiArNDIsNyBAQCBleHRlcm4gQmxvY2tOdW1iZXIgbWRuYmxvY2tzKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwogZXh0ZXJuIHZvaWQgbWR0 cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkg ICBCbG9ja051bWJlciBuYmxvY2tzKTsKIGV4dGVybiB2b2lkIG1kaW1tZWRzeW5jKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIHZvaWQgbWRyZWdp c3RlcnN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CiAKIGV4 dGVybiB2b2lkIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKTsKIGV4dGVy biB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQg bmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2Uvc21nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKaW5kZXggYTlhMTc5YWFi YWMuLmNjNWE5MWRjNjI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaApAQCAtMTA3LDYgKzEwNyw3IEBA IGV4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2Nrc19jYWNoZWQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CiBleHRlcm4gdm9pZCBzbWdydHJ1bmNhdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sCiAJCQkJCQkgaW50IG5mb3Jr cywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpOwogZXh0ZXJuIHZvaWQgc21ncmltbWVkc3luYyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKK2V4dGVybiB2b2lkIHNt Z3JyZWdpc3RlcnN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7 CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9TTWdyKHZvaWQpOwogZXh0ZXJuIGJvb2wgUHJvY2Vz c0JhcnJpZXJTbWdyUmVsZWFzZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCBkYmEzNDk4YTEzZS4uMjM1MDgwNTlkMWIgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0zMjcsNiArMzI3LDggQEAgQnVpbGRBY2N1bXVsYXRvcgogQnVpbHRp blNjcmlwdAogQnVsa0luc2VydFN0YXRlCiBCdWxrSW5zZXJ0U3RhdGVEYXRhCitCdWxrV3Jp dGVCdWZmZXIKK0J1bGtXcml0ZVN0YXRlCiBDQUNIRVNJR04KIENBQ19zdGF0ZQogQ0NGYXN0 RXF1YWxGTgotLSAKMi4zOS4yCgo= --------------YJd0LHj2CVSXf1wXFVHS5cr5--