Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZHwnI-0008Nz-QL for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jul 2015 16:22:57 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZHwnI-0007q3-CI for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jul 2015 16:22:56 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZHwlx-0006NI-Me for pgsql-hackers@postgresql.org; Wed, 22 Jul 2015 16:21:34 +0000 Received: from mail-pd0-x22f.google.com ([2607:f8b0:400e:c02::22f]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ZHwlu-0002yv-3B for pgsql-hackers@postgresql.org; Wed, 22 Jul 2015 16:21:32 +0000 Received: by pdbnt7 with SMTP id nt7so70032079pdb.0 for ; Wed, 22 Jul 2015 09:21:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:reply-to:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type; bh=JRnVblmoFOZ+ZtDgX6LzF9E9qCmtWzM5137xZV8o1Wc=; b=KuqP14FQzaQr+LCzbbJt4XhYC4B6xGUoXhJSx0oyA3cgEW1CT29w8R9hwI4W/ZNHle lizJRP/fIFEPV3AzDigIe9KsUVMfT0iFgEawXLgIMvkWbAuMaRRpT39KDjj0DnWW1EHC msKsYOSAi1zGPf0EgzvmSnK89tTz0MX3TuHSP7wgYtG6oM9EZzKNqJDBlTrAqB9mNOH1 i32Qfe8WdGm/sVwNC5MR8RF4ZdHDCGqn7tqEMQHgdo9gv6gYc9N9Nu+5W9Fp8oBlelEV 5rNrd0SDlzOGjusF8BER/dsPGJUWIBWXs92odiY3stWtktimvVmtCDk2aaC/dIuh7zl/ fODQ== X-Received: by 10.70.109.199 with SMTP id hu7mr7531279pdb.71.1437582088781; Wed, 22 Jul 2015 09:21:28 -0700 (PDT) Received: from [192.168.1.105] (dsl-hkibrasgw1-58c38f-82.dhcp.inet.fi. [88.195.143.82]) by smtp.gmail.com with ESMTPSA id tm3sm4173909pac.44.2015.07.22.09.21.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Jul 2015 09:21:27 -0700 (PDT) Message-ID: <55AFC302.1060805@iki.fi> Date: Wed, 22 Jul 2015 19:21:22 +0300 From: Heikki Linnakangas Reply-To: hlinnaka@iki.fi User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-Version: 1.0 To: Simon Riggs , Tom Lane CC: Andres Freund , Fujii Masao , Martijn van Oosterhout , PostgreSQL-development Subject: Re: WAL logging problem in 9.4.3? References: <28320.1435935120@sss.pgh.pa.us> <20150703164931.GI3291@awork2.anarazel.de> <20150703170229.GJ3291@awork2.anarazel.de> <20150703172605.GM3291@awork2.anarazel.de> <27532.1436195680@sss.pgh.pa.us> <20150706152123.GK8902@alap3.anarazel.de> <28415.1436197794@sss.pgh.pa.us> <20150709182315.GG10242@alap3.anarazel.de> <29916.1436483171@sss.pgh.pa.us> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090102040005040907040005" X-Pg-Spam-Score: -2.4 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------090102040005040907040005 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 07/22/2015 11:18 AM, Simon Riggs wrote: > On 10 July 2015 at 00:06, Tom Lane wrote: > >> Andres Freund writes: >>> On 2015-07-06 11:49:54 -0400, Tom Lane wrote: >>>> Rather than reverting cab9a0656c36739f, which would re-introduce a >>>> different performance problem, perhaps we could have COPY create a new >>>> relfilenode when it does this. That should be safe if the table was >>>> previously empty. >> >>> I'm not convinced that cab9a0656c36739f needs to survive in that >>> form. To me only allowing one COPY to benefit from the wal_level = >>> minimal optimization has a significantly higher cost than >>> cab9a0656c36739f. >> >> What evidence have you got to base that value judgement on? >> >> cab9a0656c36739f was based on an actual user complaint, so we have good >> evidence that there are people out there who care about the cost of >> truncating a table many times in one transaction. On the other hand, >> I know of no evidence that anyone's depending on multiple sequential >> COPYs, nor intermixed COPY and INSERT, to be fast. The original argument >> for having this COPY optimization at all was to make restoring pg_dump >> scripts in a single transaction fast; and that use-case doesn't care >> about anything but a single COPY into a virgin table. >> > > We have to backpatch this fix, so it must be both simple and effective. > > Heikki's suggestions may be best, maybe not, but they don't seem > backpatchable. > > Tom's suggestion looks good. So does Andres' suggestion. I have coded both. Thanks. For comparison, I wrote a patch to implement what I had in mind. When a WAL-skipping COPY begins, we add an entry for that relation in a "pending-fsyncs" hash table. Whenever we perform any action on a heap that would normally be WAL-logged, we check if the relation is in the hash table, and skip WAL-logging if so. That was a simplified explanation. In reality, when WAL-skipping COPY begins, we also memorize the current size of the relation. Any actions on blocks greater than the old size are not WAL-logged, and any actions on smaller-numbered blocks are. This ensures that if you did any INSERTs on the table before the COPY, any new actions on the blocks that were already WAL-logged by the INSERT are also WAL-logged. And likewise if you perform any INSERTs after (or during, by trigger) the COPY, and they modify the new pages, those actions are not WAL-logged. So starting a WAL-skipping COPY splits the relation into two parts: the first part that is WAL-logged as usual, and the later part that is not WAL-logged. (there is one loose end marked with XXX in the patch on this, when one of the pages involved in a cold UPDATE is before the watermark and the other is after) The actual fsync() has been moved to the end of transaction, as we are now skipping WAL-logging of any actions after the COPY as well. And truncations complicate things further. If we emit a truncation WAL record in the transaction, we also make an entry in the hash table to record that. All operations on a relation that has been truncated must be WAL-logged as usual, because replaying the truncate record will destroy all data even if we fsync later. But we still optimize for "BEGIN; CREATE; COPY; TRUNCATE; COPY;" style patterns, because if we truncate a relation that has already been marked for fsync-at-COMMIT, we don't need to WAL-log the truncation either. This is more invasive than I'd like to backpatch, but I think it's the simplest approach that works, and doesn't disable any of the important optimizations we have. >> And what reason is there to think that this would fix all the problems? > > I don't think either suggested fix could be claimed to be a great solution, > since there is little principle here, only heuristic. Heikki's solution > would be the only safe way, but is not backpatchable. I can't get too excited about a half-fix that leaves you with data corruption in some scenarios. I wrote a little test script to test all these different scenarios (attached). Both of your patches fail with the script. - Heikki --------------090102040005040907040005 Content-Type: application/x-patch; name="fix-wal-level-minimal-heikki-1.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fix-wal-level-minimal-heikki-1.patch" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMmUz YjlkMi4uOWVmNjg4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKQEAgLTIwMjEsMTIgKzIwMjEsNiBAQCBGcmVlQnVsa0luc2Vy dFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKQogICogVGhlIG5ldyB0 dXBsZSBpcyBzdGFtcGVkIHdpdGggY3VycmVudCB0cmFuc2FjdGlvbiBJRCBh bmQgdGhlIHNwZWNpZmllZAogICogY29tbWFuZCBJRC4KICAqCi0gKiBJZiB0 aGUgSEVBUF9JTlNFUlRfU0tJUF9XQUwgb3B0aW9uIGlzIHNwZWNpZmllZCwg dGhlIG5ldyB0dXBsZSBpcyBub3QKLSAqIGxvZ2dlZCBpbiBXQUwsIGV2ZW4g Zm9yIGEgbm9uLXRlbXAgcmVsYXRpb24uICBTYWZlIHVzYWdlIG9mIHRoaXMg YmVoYXZpb3IKLSAqIHJlcXVpcmVzIHRoYXQgd2UgYXJyYW5nZSB0aGF0IGFs bCBuZXcgdHVwbGVzIGdvIGludG8gbmV3IHBhZ2VzIG5vdAotICogY29udGFp bmluZyBhbnkgdHVwbGVzIGZyb20gb3RoZXIgdHJhbnNhY3Rpb25zLCBhbmQg dGhhdCB0aGUgcmVsYXRpb24gZ2V0cwotICogZnN5bmMnZCBiZWZvcmUgY29t bWl0LiAgKFNlZSBhbHNvIGhlYXBfc3luYygpIGNvbW1lbnRzKQotICoKICAq IFRoZSBIRUFQX0lOU0VSVF9TS0lQX0ZTTSBvcHRpb24gaXMgcGFzc2VkIGRp cmVjdGx5IHRvCiAgKiBSZWxhdGlvbkdldEJ1ZmZlckZvclR1cGxlLCB3aGlj aCBzZWUgZm9yIG1vcmUgaW5mby4KICAqCkBAIC0yMTE1LDcgKzIxMDksNyBA QCBoZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1 cCwgQ29tbWFuZElkIGNpZCwKIAlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsK IAogCS8qIFhMT0cgc3R1ZmYgKi8KLQlpZiAoIShvcHRpb25zICYgSEVBUF9J TlNFUlRfU0tJUF9XQUwpICYmIFJlbGF0aW9uTmVlZHNXQUwocmVsYXRpb24p KQorCWlmIChIZWFwTmVlZHNXQUwocmVsYXRpb24sIGJ1ZmZlcikpCiAJewog CQl4bF9oZWFwX2luc2VydCB4bHJlYzsKIAkJeGxfaGVhcF9oZWFkZXIgeGxo ZHI7CkBAIC0yMzE1LDEyICsyMzA5LDEwIEBAIGhlYXBfbXVsdGlfaW5zZXJ0 KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgKnR1cGxlcywgaW50IG50 dXBsZXMsCiAJaW50CQkJbmRvbmU7CiAJY2hhcgkgICAqc2NyYXRjaCA9IE5V TEw7CiAJUGFnZQkJcGFnZTsKLQlib29sCQluZWVkd2FsOwogCVNpemUJCXNh dmVGcmVlU3BhY2U7CiAJYm9vbAkJbmVlZF90dXBsZV9kYXRhID0gUmVsYXRp b25Jc0xvZ2ljYWxseUxvZ2dlZChyZWxhdGlvbik7CiAJYm9vbAkJbmVlZF9j aWRzID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhy ZWxhdGlvbik7CiAKLQluZWVkd2FsID0gIShvcHRpb25zICYgSEVBUF9JTlNF UlRfU0tJUF9XQUwpICYmIFJlbGF0aW9uTmVlZHNXQUwocmVsYXRpb24pOwog CXNhdmVGcmVlU3BhY2UgPSBSZWxhdGlvbkdldFRhcmdldFBhZ2VGcmVlU3Bh Y2UocmVsYXRpb24sCiAJCQkJCQkJCQkJCQkgICBIRUFQX0RFRkFVTFRfRklM TEZBQ1RPUik7CiAKQEAgLTIzMzUsNyArMjMyNyw3IEBAIGhlYXBfbXVsdGlf aW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgKnR1cGxlcywg aW50IG50dXBsZXMsCiAJICogcGFsbG9jKCkgd2l0aGluIGEgY3JpdGljYWwg c2VjdGlvbiBpcyBub3Qgc2FmZSwgc28gd2UgYWxsb2NhdGUgdGhpcwogCSAq IGJlZm9yZWhhbmQuCiAJICovCi0JaWYgKG5lZWR3YWwpCisJaWYgKFJlbGF0 aW9uTmVlZHNXQUwocmVsYXRpb24pKQogCQlzY3JhdGNoID0gcGFsbG9jKEJM Q0tTWik7CiAKIAkvKgpAQCAtMjQwMSw3ICsyMzkzLDcgQEAgaGVhcF9tdWx0 aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSAqdHVwbGVz LCBpbnQgbnR1cGxlcywKIAkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAK IAkJLyogWExPRyBzdHVmZiAqLwotCQlpZiAobmVlZHdhbCkKKwkJaWYgKEhl YXBOZWVkc1dBTChyZWxhdGlvbiwgYnVmZmVyKSkKIAkJewogCQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCQl4bF9oZWFwX211bHRpX2luc2VydCAqeGxyZWM7 CkBAIC0yODg4LDcgKzI4ODAsNyBAQCBsMToKIAlNYXJrQnVmZmVyRGlydHko YnVmZmVyKTsKIAogCS8qIFhMT0cgc3R1ZmYgKi8KLQlpZiAoUmVsYXRpb25O ZWVkc1dBTChyZWxhdGlvbikpCisJaWYgKEhlYXBOZWVkc1dBTChyZWxhdGlv biwgYnVmZmVyKSkKIAl7CiAJCXhsX2hlYXBfZGVsZXRlIHhscmVjOwogCQlY TG9nUmVjUHRyCXJlY3B0cjsKQEAgLTM3NTUsNyArMzc0NywxMSBAQCBsMjoK IAlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCS8qIFhMT0cgc3R1ZmYg Ki8KLQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWxhdGlvbikpCisJLyogRklY TUU6IHdoYXQgaWYgdGhlIG9sZCBwYWdlIG11c3QgYmUgV0FMLWxvZ2dlZCwg YnV0IHRoZSBuZXcgb25lCisJICogbXVzdCBub3Q/CisJICovCisJaWYgKEhl YXBOZWVkc1dBTChyZWxhdGlvbiwgYnVmZmVyKSB8fAorCQlIZWFwTmVlZHNX QUwocmVsYXRpb24sIG5ld2J1ZikpCiAJewogCQlYTG9nUmVjUHRyCXJlY3B0 cjsKIApAQCAtNDYyNiw3ICs0NjIyLDcgQEAgZmFpbGVkOgogCSAqIChBbHNv LCBpbiBhIFBJVFIgbG9nLXNoaXBwaW5nIG9yIDJQQyBlbnZpcm9ubWVudCwg d2UgaGF2ZSB0byBoYXZlIFhMT0cKIAkgKiBlbnRyaWVzIGZvciBldmVyeXRo aW5nIGFueXdheS4pCiAJICovCi0JaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVs YXRpb24pKQorCWlmIChIZWFwTmVlZHNXQUwocmVsYXRpb24sICpidWZmZXIp KQogCXsKIAkJeGxfaGVhcF9sb2NrIHhscmVjOwogCQlYTG9nUmVjUHRyCXJl Y3B0cjsKQEAgLTUyNTgsMTIgKzUyNTQsMTIgQEAgbDQ6CiAJCU1hcmtCdWZm ZXJEaXJ0eShidWYpOwogCiAJCS8qIFhMT0cgc3R1ZmYgKi8KLQkJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKKwkJaWYgKEhlYXBOZWVkc1dBTChyZWws IGJ1ZikpCiAJCXsKIAkJCXhsX2hlYXBfbG9ja191cGRhdGVkIHhscmVjOwor CQkJUGFnZSBwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCQlYTG9nUmVjRGF0YSByZGF0YVsyXTsKLQkJCVBh Z2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAKIAkJCXhscmVjLnRh cmdldC5ub2RlID0gcmVsLT5yZF9ub2RlOwogCQkJeGxyZWMudGFyZ2V0LnRp ZCA9IG15dHVwLnRfc2VsZjsKQEAgLTU0MDUsNyArNTQwMSw3IEBAIGhlYXBf aW5wbGFjZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0 dXBsZSkKIAlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCS8qIFhMT0cg c3R1ZmYgKi8KLQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWxhdGlvbikpCisJ aWYgKEhlYXBOZWVkc1dBTChyZWxhdGlvbiwgYnVmZmVyKSkKIAl7CiAJCXhs X2hlYXBfaW5wbGFjZSB4bHJlYzsKIAkJWExvZ1JlY1B0cglyZWNwdHI7CkBA IC04NTU1LDMgKzg1NTEsNzEgQEAgaGVhcF9zeW5jKFJlbGF0aW9uIHJlbCkK IAkJaGVhcF9jbG9zZSh0b2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKIAl9 CiB9CisKKy8qCisgKgloZWFwX3JlZ2lzdGVyX3N5bmMJLSByZWdpc3RlciBh IGhlYXAgdG8gYmUgc3luY2VkIHRvIGRpc2sgYXQgY29tbWl0CisgKgorICog VGhpcyBjYW4gYmUgdXNlZCB0byBza2lwIFdBTC1sb2dnaW5nIGNoYW5nZXMg b24gYSByZWxhdGlvbiBmaWxlIHRoYXQgaGFzCisgKiBiZWVuIGNyZWF0ZWQg aW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIEFmdGVyIGNhbGxpbmcgdGhpcywg YW55IGNoYW5nZXMgdG8KKyAqIHRoZSBoZWFwIChpbmNsdWRpbmcgVE9BU1Qg aGVhcCBpZiBhbnkpIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHdpbGwgbm90 IGJlCisgKiBXQUwtbG9nZ2VkLiBJbnN0ZWFkLCB0aGUgaGVhcCBjb250ZW50 cyBhcmUgZmx1c2hlZCB0byBkaXNrIGF0IGNvbW1pdCwKKyAqIGxpa2UgaGVh cF9zeW5jKCkgZG9lcy4KKyAqCisgKiBMaWtlIHdpdGggaGVhcF9zeW5jKCks IGluZGV4ZXMgYXJlIG5vdCB0b3VjaGVkLgorICovCit2b2lkCitoZWFwX3Jl Z2lzdGVyX3N5bmMoUmVsYXRpb24gcmVsKQoreworCS8qIG5vbi1XQUwtbG9n Z2VkIHRhYmxlcyBuZXZlciBuZWVkIGZzeW5jICovCisJaWYgKCFSZWxhdGlv bk5lZWRzV0FMKHJlbCkpCisJCXJldHVybjsKKworCXNtZ3JSZWdpc3RlclBl bmRpbmdTeW5jKHJlbCk7CisJaWYgKE9pZElzVmFsaWQocmVsLT5yZF9yZWwt PnJlbHRvYXN0cmVsaWQpKQorCXsKKwkJUmVsYXRpb24JdG9hc3RyZWw7CisK KwkJdG9hc3RyZWwgPSBoZWFwX29wZW4ocmVsLT5yZF9yZWwtPnJlbHRvYXN0 cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXNtZ3JSZWdpc3RlclBlbmRp bmdTeW5jKHRvYXN0cmVsKTsKKwkJaGVhcF9jbG9zZSh0b2FzdHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwl9Cit9CisKKy8qCisgKiBEbyBjaGFuZ2VzIHRv IGdpdmVuIGhlYXAgcGFnZSBuZWVkIHRvIGJlIFdBTC1sb2dnZWQ/CisgKgor ICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgYW55IHByZXZpb3VzIGhlYXBf cmVnaXN0ZXJfc3luYygpIHJlcXVlc3RzLgorICoKKyAqIE5vdGUgdGhhdCBp dCBpcyByZXF1aXJlZCB0byB1c2UgdGhpcyBiZWZvcmUgY3JlYXRpbmcgYW55 IFdBTCByZWNvcmRzIGZvcgorICogaGVhcCBwYWdlcyAtIGl0IGlzIG5vdCBt ZXJlbHkgYW4gb3B0aW1pemF0aW9uLiBXQUwtbG9nZ2luZyBhIHJlY29yZCwK KyAqIHdoZW4gd2UgaGF2ZSBhbHJlYWR5IHNraXBwZWQgYSBwcmV2aW91cyBX QUwgcmVjb3JkIGZvciB0aGUgc2FtZSBwYWdlIGNvdWxkCisgKiBsZWFkIHRv IGZhaWx1cmUgYXQgV0FMIHJlcGxheSwgYXMgdGhlICJiZWZvcmUiIHN0YXRl IGV4cGVjdGVkIGJ5IHRoZQorICogcmVjb3JkIG1pZ2h0IG5vdCBtYXRjaCB3 aGF0J3Mgb24gZGlzayAodGhpcyBzaG91bGQgb25seSBhIGJlIHByb2JsZW0K KyAqIHdpdGggZnVsbF9wYWdlX3dyaXRlcz1vZmYsIHRob3VnaCkuCisgKi8K K2Jvb2wKK0hlYXBOZWVkc1dBTChSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYp Cit7CisJLyogVGVtcG9yYXJ5IHJlbGF0aW9ucyBuZXZlciBuZWVkIFdBTCAq LworCWlmICghUmVsYXRpb25OZWVkc1dBTChyZWwpKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKgorCSAqIElmIHdlIGFyZSBnb2luZyB0byBmc3luYygpIHRo ZSByZWxhdGlvbiBhdCBDT01NSVQsIGFuZCB3ZSBoYXZlIG5vdAorCSAqIHRy dW5jYXRlZCB0aGUgYmxvY2sgYXdheSBwcmV2aW91c2x5LCBhbmQgd2UgaGF2 ZSBub3QgZW1pdHRlZCBhbnkgV0FMCisJICogcmVjb3JkcyBmb3IgdGhpcyBi bG9jayB5ZXQsIHdlIGNhbiBza2lwIFdBTC1sb2dnaW5nIGl0LgorCSAqLwor CWlmIChzbWdySXNTeW5jUGVuZGluZyhyZWwtPnJkX25vZGUsIEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1ZikpKQorCXsKKwkJLyoKKwkJICogSWYgYSBwZW5k aW5nIGZzeW5jKCkgd2lsbCBoYW5kbGUgdGhpcyBwYWdlLCBpdHMgTFNOIHNo b3VsZCBiZQorCQkgKiBpbnZhbGlkLiBJZiBpdCdzIG5vdCwgd2UndmUgYWxy ZWFkeSBlbWl0dGVkIGEgV0FMIHJlY29yZCBmb3IgdGhpcworCQkgKiBibG9j aywgYW5kIGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIGJsb2NrIG11 c3QgYmUgV0FMLWxvZ2dlZAorCQkgKiB0b28uCisJCSAqLworCQlBc3NlcnQo UGFnZUdldExTTihCdWZmZXJHZXRQYWdlKGJ1ZikpID09IEludmFsaWRYTG9n UmVjUHRyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVl OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1 bmVoZWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAu YwppbmRleCAwNmI1NDg4Li5lMzQyY2JiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYwpAQCAtMjUwLDcgKzI1MCw3IEBA IGhlYXBfcGFnZV9wcnVuZShSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1 ZmZlciwgVHJhbnNhY3Rpb25JZCBPbGRlc3RYbWluLAogCQkvKgogCQkgKiBF bWl0IGEgV0FMIEhFQVBfQ0xFQU4gcmVjb3JkIHNob3dpbmcgd2hhdCB3ZSBk aWQKIAkJICovCi0JCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbGF0aW9uKSkK KwkJaWYgKEhlYXBOZWVkc1dBTChyZWxhdGlvbiwgYnVmZmVyKSkKIAkJewog CQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCBhMGMwYzdmLi43 ODMyZGVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 aXNpYmlsaXR5bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmlzaWJpbGl0eW1hcC5jCkBAIC0yNzgsNiArMjc4LDcgQEAgdmlzaWJpbGl0 eW1hcF9zZXQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBoZWFwQmxrLCBC dWZmZXIgaGVhcEJ1ZiwKIAkJbWFwW21hcEJ5dGVdIHw9ICgxIDw8IG1hcEJp dCk7CiAJCU1hcmtCdWZmZXJEaXJ0eSh2bUJ1Zik7CiAKKwkJLyogWFhYOiBT aG91bGQgd2UgdXNlIEhlYXBOZWVkc1dBTCBoZXJlPyAqLwogCQlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQogCQl7CiAJCQlpZiAoWExvZ1JlY1B0cklz SW52YWxpZChyZWNwdHIpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCmluZGV4IDlmOTg5ZjguLjMwNmM2YzEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTE5MjEsNiArMTky MSw5IEBAIENvbW1pdFRyYW5zYWN0aW9uKHZvaWQpCiAJLyogY2xvc2UgbGFy Z2Ugb2JqZWN0cyBiZWZvcmUgbG93ZXItbGV2ZWwgY2xlYW51cCAqLwogCUF0 RU9YYWN0X0xhcmdlT2JqZWN0KHRydWUpOwogCisJLyogRmx1c2ggdXBkYXRl cyB0byByZWxhdGlvbnMgdGhhdCB3ZSBkaWRuJ3QgV0FMLWxvZ2dlZCAqLwor CXNtZ3JEb1BlbmRpbmdTeW5jcyh0cnVlKTsKKwogCS8qCiAJICogTWFyayBz ZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gYXMgY29tcGxldGUgZm9yIHByZWRp Y2F0ZSBsb2NraW5nCiAJICogcHVycG9zZXMuICBUaGlzIHNob3VsZCBiZSBk b25lIGFzIGxhdGUgYXMgd2UgY2FuIHB1dCBpdCBhbmQgc3RpbGwgYWxsb3cK QEAgLTIxMjYsNiArMjEyOSw5IEBAIFByZXBhcmVUcmFuc2FjdGlvbih2b2lk KQogCS8qIGNsb3NlIGxhcmdlIG9iamVjdHMgYmVmb3JlIGxvd2VyLWxldmVs IGNsZWFudXAgKi8KIAlBdEVPWGFjdF9MYXJnZU9iamVjdCh0cnVlKTsKIAor CS8qIEZsdXNoIHVwZGF0ZXMgdG8gcmVsYXRpb25zIHRoYXQgd2UgZGlkbid0 IFdBTC1sb2dnZWQgKi8KKwlzbWdyRG9QZW5kaW5nU3luY3ModHJ1ZSk7CisK IAkvKgogCSAqIE1hcmsgc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIGFzIGNv bXBsZXRlIGZvciBwcmVkaWNhdGUgbG9ja2luZwogCSAqIHB1cnBvc2VzLiAg VGhpcyBzaG91bGQgYmUgZG9uZSBhcyBsYXRlIGFzIHdlIGNhbiBwdXQgaXQg YW5kIHN0aWxsIGFsbG93CkBAIC0yNDEyLDYgKzI0MTgsNyBAQCBBYm9ydFRy YW5zYWN0aW9uKHZvaWQpCiAJQXRBYm9ydF9Ob3RpZnkoKTsKIAlBdEVPWGFj dF9SZWxhdGlvbk1hcChmYWxzZSk7CiAJQXRBYm9ydF9Ud29waGFzZSgpOwor CXNtZ3JEb1BlbmRpbmdTeW5jcyhmYWxzZSk7CiAKIAkvKgogCSAqIEFkdmVy dGlzZSB0aGUgZmFjdCB0aGF0IHdlIGFib3J0ZWQgaW4gcGdfY2xvZyAoYXNz dW1pbmcgdGhhdCB3ZSBnb3QgYXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYwppbmRleCA4ZTk3NTRjLi4zOTMwNmRkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC05NTEsNiAr OTUxLDE1IEBAIGJlZ2luOjsKIAkJCQl9CiAJCQkJaWYgKGR0YnVmW2ldID09 IEludmFsaWRCdWZmZXIpCiAJCQkJeworCQkJCQl7CisJCQkJCQlSZWxGaWxl Tm9kZSBybm9kZTsKKwkJCQkJCUZvcmtOdW1iZXIgZm9ya251bTsKKwkJCQkJ CUJsb2NrTnVtYmVyIGJsa251bTsKKwkJCQkJCUJ1ZmZlckdldFRhZyhyZHQt PmJ1ZmZlciwgJnJub2RlLCAmZm9ya251bSwgJmJsa251bSk7CisJCQkJCQlp ZiAocm5vZGUucmVsTm9kZSA+PSBGaXJzdE5vcm1hbE9iamVjdElkICYmIHJt aWQgIT0gUk1fQlRSRUVfSUQpCisJCQkJCQkJZWxvZyhMT0csICJXQUwtbG9n Z2luZyB1cGRhdGUgdG8gcmVsICV1IGJsb2NrICV1IChybWlkICVkIGluZm8g JVgpIiwgcm5vZGUucmVsTm9kZSwgYmxrbnVtLCBybWlkLCBpbmZvKTsKKwkJ CQkJfQorCiAJCQkJCS8qIE9LLCBwdXQgaXQgaW4gdGhpcyBzbG90ICovCiAJ CQkJCWR0YnVmW2ldID0gcmR0LT5idWZmZXI7CiAJCQkJCWlmIChkb1BhZ2VX cml0ZXMgJiYgWExvZ0NoZWNrQnVmZmVyKHJkdCwgdHJ1ZSwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9zdG9yYWdlLmMKaW5kZXggYzNiMmYwNy4uNTE2MjkwNCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKQEAgLTIwLDYgKzIw LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNj ZXNzL3Zpc2liaWxpdHltYXAuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHJhbnNh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5o IgpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFn ZV94bG9nLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIKICNp bmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9oc2Vh cmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIApAQCAtNjIsNiArNjQsNDIgQEAgdHlwZWRlZiBz dHJ1Y3QgUGVuZGluZ1JlbERlbGV0ZQogc3RhdGljIFBlbmRpbmdSZWxEZWxl dGUgKnBlbmRpbmdEZWxldGVzID0gTlVMTDsgLyogaGVhZCBvZiBsaW5rZWQg bGlzdCAqLwogCiAvKgorICogV2UgYWxzbyB0cmFjayByZWxhdGlvbiBmaWxl cyAoUmVsRmlsZU5vZGUgdmFsdWVzKSB0aGF0IGhhdmUgYmVlbiBjcmVhdGVk CisgKiBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiwgYW5kIHRoYXQgaGF2ZSBi ZWVuIG1vZGlmaWVkIHdpdGhvdXQgV0FMLWxvZ2dpbmcKKyAqIHRoZSBhY3Rp b24uIFdoZW4gd2UgYXJlIGFib3V0IHRvIGJlZ2luIGEgbGFyZ2Ugb3BlcmF0 aW9uIG9uIHRoZSByZWxhdGlvbiwKKyAqIGEgUGVuZGluZ1JlbFN5bmMgZW50 cnkgaXMgY3JlYXRlZCwgYW5kICdzeW5jX2Fib3ZlJyBpcyBzZXQgdG8gdGhl IGN1cnJlbnQKKyAqIHNpemUgb2YgdGhlIHJlbGF0aW9uLiBBbnkgb3BlcmF0 aW9ucyBvbiBibG9ja3MgPCBzeW5jX2Fib3ZlIG5lZWQgdG8gYmUKKyAqIFdB TC1sb2dnZWQgYXMgdXN1YWwsIGJ1dCBmb3Igb3BlcmF0aW9ucyBvbiBoaWdo ZXIgYmxvY2tzLCBXQUwtbG9nZ2luZyBpcworICogc2tpcHBlZC4gSXQncyBp bXBvcnRhbnQgdGhhdCBhZnRlciBXQUwtbG9nZ2luZyBoYXMgYmVlbiBza2lw cGVkIGZvciBhCisgKiBibG9jaywgd2UgZG9uJ3QgV0FMIGxvZyBhbnkgc3Vi c2VxdWVudCBhY3Rpb25zIG9uIHRoZSBzYW1lIGJsb2NrIGVpdGhlci4KKyAq IFJlcGxheWluZyB0aGUgV0FsIHJlY29yZCBvZiB0aGUgc3Vic2VxdWVudCBh Y3Rpb24gbWlnaHQgZmFpbCBvdGhlcndpc2UsCisgKiBhcyB0aGUgImJlZm9y ZSIgc3RhdGUgb2YgdGhlIGJsb2NrIG1pZ2h0IG5vdCBtYXRjaCwgYXMgdGhl IGVhcmxpZXIgYWN0aW9ucworICogd2VyZSBub3QgV0FMLWxvZ2dlZC4KKyAq CisgKiBJZiBhIHJlbGF0aW9uIGlzIHRydW5jYXRlZCAod2l0aG91dCBjcmVh dGluZyBhIG5ldyByZWxmaWxlbm9kZSksIGFuZCB3ZQorICogZW1pdCBhIFdB TCByZWNvcmQgb2YgdGhlIHRydW5jYXRpb24sIHdlIGNhbm5vdCBza2lwIFdB TC1sb2dnaW5nIGZvciB0aGF0CisgKiByZWxhdGlvbiBhbnltb3JlLCBhcyBy ZXBsYXlpbmcgdGhlIHRydW5jYXRpb24gcmVjb3JkIHdpbGwgZGVzdHJveSBh bGwgdGhlCisgKiBkYXRhIGluc2VydGVkIGFmdGVyIHRoYXQuIEJ1dCBpZiB3 ZSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBza2lwIFdBTC1sb2dnaW5nCisg KiBjaGFuZ2VzIHRvIGEgcmVsYXRpb24sIGFuZCB0aGUgcmVsYXRpb24gaXMg dHJ1bmNhdGVkLCB3ZSBkb24ndCBuZWVkIHRvCisgKiBXQUwtbG9nIHRoZSB0 cnVuY2F0aW9uIGVpdGhlci4KKyAqCisgKiBUaGlzIG1lY2hhbmlzbSBpcyBj dXJyZW50bHkgb25seSB1c2VkIGJ5IGhlYXBzLiBJbmRleGVzIGFyZSBhbHdh eXMKKyAqIFdBTC1sb2dnZWQuIEFsc28sIHRoaXMgb25seSBhcHBsaWVzIGZv ciB3YWxfbGV2ZWw9bWluaW1hbDsgd2l0aCBoaWdoZXIKKyAqIFdBTCBsZXZl bHMgd2UgbmVlZCB0aGUgV0FMIGZvciBQSVRSL3JlcGxpY2F0aW9uIGFueXdh eS4KKyAqLworLyogUmVsYXRpb25zIHRoYXQgbmVlZCB0byBiZSBmc3luYydk IGF0IGNvbW1pdCAqLwordHlwZWRlZiBzdHJ1Y3QgUGVuZGluZ1JlbFN5bmMK K3sKKwlSZWxGaWxlTm9kZSByZWxub2RlOwkJLyogcmVsYXRpb24gY3JlYXRl ZCBpbiBzYW1lIHhhY3QgKi8KKwlCbG9ja051bWJlcglzeW5jX2Fib3ZlOwkJ LyogV0FMLWxvZ2dpbmcgc2tpcHBlZCBmb3IgYmxvY2tzID49IHN5bmNfYWJv dmUgKi8KKwlib29sCQl0cnVuY2F0ZWQ7CQkvKiB0cnVuY2F0aW9uIFdBTCBy ZWNvcmQgd2FzIHdyaXR0ZW4gKi8KK30gUGVuZGluZ1JlbFN5bmM7CisKK3N0 YXRpYyBIVEFCICpwZW5kaW5nU3luY3MgPSBOVUxMOworCitzdGF0aWMgdm9p ZCBjcmVhdGVQZW5kaW5nU3luY3NIYXNoKHZvaWQpOworCisvKgogICogUmVs YXRpb25DcmVhdGVTdG9yYWdlCiAgKgkJQ3JlYXRlIHBoeXNpY2FsIHN0b3Jh Z2UgZm9yIGEgcmVsYXRpb24uCiAgKgpAQCAtMjI4LDYgKzI2Niw4IEBAIFJl bGF0aW9uUHJlc2VydmVTdG9yYWdlKFJlbEZpbGVOb2RlIHJub2RlLCBib29s IGF0Q29tbWl0KQogdm9pZAogUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiB7CisJUGVuZGluZ1JlbFN5bmMg KnBlbmRpbmcgPSBOVUxMOworCWJvb2wJCWZvdW5kOwogCWJvb2wJCWZzbTsK IAlib29sCQl2bTsKIApAQCAtMjUxLDYgKzI5MSwxNyBAQCBSZWxhdGlvblRy dW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAlp ZiAodm0pCiAJCXZpc2liaWxpdHltYXBfdHJ1bmNhdGUocmVsLCBuYmxvY2tz KTsKIAorCWlmICghcGVuZGluZ1N5bmNzKQorCQljcmVhdGVQZW5kaW5nU3lu Y3NIYXNoKCk7CisJcGVuZGluZyA9IChQZW5kaW5nUmVsU3luYyAqKSBoYXNo X3NlYXJjaChwZW5kaW5nU3luY3MsCisJCQkJCQkJCQkJCSAodm9pZCAqKSAm cmVsLT5yZF9ub2RlLAorCQkJCQkJCQkJCQkgSEFTSF9FTlRFUiwgJmZvdW5k KTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJcGVuZGluZy0+c3luY19hYm92ZSA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJcGVuZGluZy0+dHJ1bmNhdGVkID0g ZmFsc2U7CisJfQorCiAJLyoKIAkgKiBXZSBXQUwtbG9nIHRoZSB0cnVuY2F0 aW9uIGJlZm9yZSBhY3R1YWxseSB0cnVuY2F0aW5nLCB3aGljaCBtZWFucwog CSAqIHRyb3VibGUgaWYgdGhlIHRydW5jYXRpb24gZmFpbHMuIElmIHdlIHRo ZW4gY3Jhc2gsIHRoZSBXQUwgcmVwbGF5CkBAIC0yNjAsNyArMzExLDggQEAg UmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5i bG9ja3MpCiAJICogZmFpbHVyZSB0byB0cnVuY2F0ZSwgdGhhdCBtaWdodCBz cGVsbCB0cm91YmxlIGF0IFdBTCByZXBsYXksIGludG8gYQogCSAqIGNlcnRh aW4gUEFOSUMuCiAJICovCi0JaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkK KwlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpICYmCisJCShwZW5kaW5nLT5z eW5jX2Fib3ZlID09IEludmFsaWRCbG9ja051bWJlciB8fCBwZW5kaW5nLT5z eW5jX2Fib3ZlIDwgbmJsb2NrcykpCiAJewogCQkvKgogCQkgKiBNYWtlIGFu IFhMT0cgZW50cnkgcmVwb3J0aW5nIHRoZSBmaWxlIHRydW5jYXRpb24uCkBA IC0yNzksNiArMzMxLDkgQEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAKIAkJbHNuID0gWExvZ0luc2Vy dChSTV9TTUdSX0lELCBYTE9HX1NNR1JfVFJVTkNBVEUsICZyZGF0YSk7CiAK KwkJaWYgKHJlbC0+cmRfbm9kZS5yZWxOb2RlID49IEZpcnN0Tm9ybWFsT2Jq ZWN0SWQpCisJCQllbG9nKExPRywgIldBTC1sb2dnZWQgdHJ1bmNhdGlvbiBv ZiByZWwgJXUgdG8gJXUgYmxvY2tzIiwgcmVsLT5yZF9ub2RlLnJlbE5vZGUs IG5ibG9ja3MpOworCiAJCS8qCiAJCSAqIEZsdXNoLCBiZWNhdXNlIG90aGVy d2lzZSB0aGUgdHJ1bmNhdGlvbiBvZiB0aGUgbWFpbiByZWxhdGlvbiBtaWdo dAogCQkgKiBoaXQgdGhlIGRpc2sgYmVmb3JlIHRoZSBXQUwgcmVjb3JkLCBh bmQgdGhlIHRydW5jYXRpb24gb2YgdGhlIEZTTQpAQCAtMjg4LDYgKzM0Myw4 IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJl ciBuYmxvY2tzKQogCQkgKi8KIAkJaWYgKGZzbSB8fCB2bSkKIAkJCVhMb2dG bHVzaChsc24pOworCisJCXBlbmRpbmctPnRydW5jYXRlZCA9IHRydWU7CiAJ fQogCiAJLyogRG8gdGhlIHJlYWwgd29yayAqLwpAQCAtNDIyLDYgKzQ3OSwx NDIgQEAgc21nckdldFBlbmRpbmdEZWxldGVzKGJvb2wgZm9yQ29tbWl0LCBS ZWxGaWxlTm9kZSAqKnB0cikKIAlyZXR1cm4gbnJlbHM7CiB9CiAKKy8qIGNy ZWF0ZSB0aGUgaGFzaCB0YWJsZSB0byB0cmFjayBwZW5kaW5nIGF0LWNvbW1p dCBmc3luY3MgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVQZW5kaW5nU3luY3NI YXNoKHZvaWQpCit7CisJLyogRmlyc3QgdGltZSB0aHJvdWdoOiBpbml0aWFs aXplIHRoZSBoYXNoIHRhYmxlICovCisJSEFTSENUTAkJY3RsOworCisJTWVt U2V0KCZjdGwsIDAsIHNpemVvZihjdGwpKTsKKwljdGwua2V5c2l6ZSA9IHNp emVvZihSZWxGaWxlTm9kZSk7CisJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihQ ZW5kaW5nUmVsU3luYyk7CisJY3RsLmhhc2ggPSB0YWdfaGFzaDsKKwlwZW5k aW5nU3luY3MgPSBoYXNoX2NyZWF0ZSgicGVuZGluZyByZWxhdGlvbiBzeW5j IHRhYmxlIiwgNSwKKwkJCQkJCQkgICAmY3RsLCBIQVNIX0VMRU0gfCBIQVNI X0ZVTkNUSU9OKTsKK30KKworLyoKKyAqIFJlbWVtYmVyIHRoYXQgdGhlIGdp dmVuIHJlbGF0aW9uIG5lZWRzIHRvIGJlIHN5bmMnZCBhdCBjb21taXQsIGJl Y2F1c2UKKyAqIHdlIGFyZSBnb2luZyB0byBza2lwIFdBTC1sb2dnaW5nIHN1 YnNlcXVlbnQgYWN0aW9ucyB0byBpdC4KKyAqLwordm9pZAorc21nclJlZ2lz dGVyUGVuZGluZ1N5bmMoUmVsYXRpb24gcmVsKQoreworCVBlbmRpbmdSZWxT eW5jICpwZW5kaW5nOworCWJvb2wJCWZvdW5kOworCUJsb2NrTnVtYmVyCW5i bG9ja3M7CisKKwluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nr cyhyZWwpOworCisJaWYgKCFwZW5kaW5nU3luY3MpCisJCWNyZWF0ZVBlbmRp bmdTeW5jc0hhc2goKTsKKworCS8qIExvb2sgdXAgb3IgY3JlYXRlIGFuIGVu dHJ5ICovCisJcGVuZGluZyA9IChQZW5kaW5nUmVsU3luYyAqKSBoYXNoX3Nl YXJjaChwZW5kaW5nU3luY3MsCisJCQkJCQkJCQkJCSAodm9pZCAqKSAmcmVs LT5yZF9ub2RlLAorCQkJCQkJCQkJCQkgSEFTSF9FTlRFUiwgJmZvdW5kKTsK KwlpZiAoIWZvdW5kKQorCXsKKwkJcGVuZGluZy0+dHJ1bmNhdGVkID0gZmFs c2U7CisJCXBlbmRpbmctPnN5bmNfYWJvdmUgPSBuYmxvY2tzOworCisJCWlm IChyZWwtPnJkX25vZGUucmVsTm9kZSA+PSBGaXJzdE5vcm1hbE9iamVjdElk KQorCQkJZWxvZyhMT0csICJSZWdpc3RlcmluZyBuZXcgcGVuZGluZyBzeW5j IGZvciByZWwgJXUgYXQgYmxvY2sgJXUiLCByZWwtPnJkX25vZGUucmVsTm9k ZSwgbmJsb2Nrcyk7CisKKwl9CisJZWxzZSBpZiAocGVuZGluZy0+c3luY19h Ym92ZSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJeworCQlpZiAocmVsLT5y ZF9ub2RlLnJlbE5vZGUgPj0gRmlyc3ROb3JtYWxPYmplY3RJZCkKKwkJCWVs b2coTE9HLCAiUmVnaXN0ZXJpbmcgcGVuZGluZyBzeW5jIGZvciByZWwgJXUg YXQgYmxvY2sgJXUiLCByZWwtPnJkX25vZGUucmVsTm9kZSwgbmJsb2Nrcyk7 CisJCXBlbmRpbmctPnN5bmNfYWJvdmUgPSBuYmxvY2tzOworCX0KKwllbHNl CisJCWlmIChyZWwtPnJkX25vZGUucmVsTm9kZSA+PSBGaXJzdE5vcm1hbE9i amVjdElkKQorCQkJZWxvZyhMT0csICJOb3QgdXBkYXRpbmcgcGVuZGluZyBz eW5jIGZvciByZWwgJXUgYXQgYmxvY2sgJXUgKHdhcyAldSkiLCByZWwtPnJk X25vZGUucmVsTm9kZSwgbmJsb2NrcywgcGVuZGluZy0+c3luY19hYm92ZSk7 Cit9CisKKy8qCisgKiBBcmUgd2UgZ29pbmcgdG8gZnN5bmMoKSB0aGlzIHJl bGF0aW9uIGF0IENPTU1JVCwgYW5kIGhlbmNlIGRvbid0IG5lZWQgdG8KKyAq IFdBTC1sb2cgY2hhbmdlcyB0byB0aGUgZ2l2ZW4gYmxvY2s/CisgKi8KK2Jv b2wKK3NtZ3JJc1N5bmNQZW5kaW5nKFJlbEZpbGVOb2RlIHJub2RlLCBCbG9j a051bWJlciBibGtubykKK3sKKwlQZW5kaW5nUmVsU3luYyAqcGVuZGluZzsK Kwlib29sCQlmb3VuZDsKKworCWlmICghcGVuZGluZ1N5bmNzKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlwZW5kaW5nID0gKFBlbmRpbmdSZWxTeW5jICopIGhh c2hfc2VhcmNoKHBlbmRpbmdTeW5jcywKKwkJCQkJCQkJCQkJICh2b2lkICop ICZybm9kZSwKKwkJCQkJCQkJCQkJIEhBU0hfRklORCwgJmZvdW5kKTsKKwlp ZiAoIWZvdW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFdlIGhh dmUgbm8gZnN5bmMoKSBwZW5kaW5nIGZvciB0aGlzIHJlbGF0aW9uLCBvciB3 ZSBoYXZlIChwb3NzaWJseSkKKwkgKiBhbHJlYWR5IGVtaXR0ZWQgV0FMIHJl Y29yZHMgZm9yIHRoaXMgYmxvY2suCisJICovCisJaWYgKHBlbmRpbmctPnN5 bmNfYWJvdmUgPT0gSW52YWxpZEJsb2NrTnVtYmVyIHx8CisJCXBlbmRpbmct PnN5bmNfYWJvdmUgPiBibGtubykKKwl7CisJCWlmIChybm9kZS5yZWxOb2Rl ID49IEZpcnN0Tm9ybWFsT2JqZWN0SWQpCisJCQllbG9nKExPRywgIk5vdCBz a2lwcGluZyBXQUwtbG9nZ2luZyBmb3IgcmVsICV1IGJsb2NrICV1LCBiZWNh dXNlIHN5bmNfYWJvdmUgaXMgJXUiLCBybm9kZS5yZWxOb2RlLCBibGtubywg cGVuZGluZy0+c3luY19hYm92ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwkvKgorCSAqIFdlIGhhdmUgZW1pdHRlZCBhIHRydW5jYXRpb24gcmVjb3Jk IGZvciB0aGlzIGJsb2NrLgorCSAqLworCWlmIChwZW5kaW5nLT50cnVuY2F0 ZWQpCisJeworCQlpZiAocm5vZGUucmVsTm9kZSA+PSBGaXJzdE5vcm1hbE9i amVjdElkKQorCQkJZWxvZyhMT0csICJOb3Qgc2tpcHBpbmcgV0FMLWxvZ2dp bmcgZm9yIHJlbCAldSBibG9jayAldSwgYmVjYXVzZSBpdCB3YXMgdHJ1bmNh dGVkIiwgcm5vZGUucmVsTm9kZSwgYmxrbm8pOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJaWYgKHJub2RlLnJlbE5vZGUgPj0gRmlyc3ROb3JtYWxPYmpl Y3RJZCkKKwkJZWxvZyhMT0csICJTa2lwcGluZyBXQUwtbG9nZ2luZyBmb3Ig cmVsICV1IGJsb2NrICV1Iiwgcm5vZGUucmVsTm9kZSwgYmxrbm8pOworCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTeW5jIHRvIGRpc2sgYW55IHJl bGF0aW9ucyB0aGF0IHdlIHNraXBwZWQgV0FMLWxvZ2dpbmcgZm9yIGVhcmxp ZXIuCisgKi8KK3ZvaWQKK3NtZ3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29t bWl0KQoreworCWlmICghcGVuZGluZ1N5bmNzKQorCQlyZXR1cm47CisKKwlp ZiAoaXNDb21taXQpCisJeworCQlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwor CQlQZW5kaW5nUmVsU3luYyAqcGVuZGluZzsKKworCQloYXNoX3NlcV9pbml0 KCZzdGF0dXMsIHBlbmRpbmdTeW5jcyk7CisKKwkJd2hpbGUgKChwZW5kaW5n ID0gaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCQl7CisJ CQlpZiAocGVuZGluZy0+c3luY19hYm92ZSAhPSBJbnZhbGlkQmxvY2tOdW1i ZXIpCisJCQl7CisJCQkJRmx1c2hSZWxGaWxlTm9kZUJ1ZmZlcnMocGVuZGlu Zy0+cmVsbm9kZSwgZmFsc2UpOworCQkJCS8qIEZsdXNoUmVsYXRpb25CdWZm ZXJzIHdpbGwgaGF2ZSBvcGVuZWQgcmRfc21nciAqLworCQkJCXNtZ3JpbW1l ZHN5bmMoc21ncm9wZW4ocGVuZGluZy0+cmVsbm9kZSwgSW52YWxpZEJhY2tl bmRJZCksIE1BSU5fRk9SS05VTSk7CisKKwkJCQlpZiAocGVuZGluZy0+cmVs bm9kZS5yZWxOb2RlID49IEZpcnN0Tm9ybWFsT2JqZWN0SWQpCisJCQkJCWVs b2coTE9HLCAiU3luY2luZyByZWwgJXUiLCBwZW5kaW5nLT5yZWxub2RlLnJl bE5vZGUpOworCQkJfQorCQl9CisJfQorCisJaGFzaF9kZXN0cm95KHBlbmRp bmdTeW5jcyk7CisJcGVuZGluZ1N5bmNzID0gTlVMTDsKK30KKwogLyoKICAq CVBvc3RQcmVwYXJlX3NtZ3IgLS0gQ2xlYW4gdXAgYWZ0ZXIgYSBzdWNjZXNz ZnVsIFBSRVBBUkUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5k ZXggM2ViYTllZi4uYzZhYTYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHkuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94YWN0 LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3N0b3Jh Z2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jb3B5LmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dl ci5oIgpAQCAtMjE1Miw3ICsyMTUzLDEwIEBAIENvcHlGcm9tKENvcHlTdGF0 ZSBjc3RhdGUpCiAJewogCQloaV9vcHRpb25zIHw9IEhFQVBfSU5TRVJUX1NL SVBfRlNNOwogCQlpZiAoIVhMb2dJc05lZWRlZCgpKQorCQl7CisJCQloZWFw X3JlZ2lzdGVyX3N5bmMoY3N0YXRlLT5yZWwpOwogCQkJaGlfb3B0aW9ucyB8 PSBIRUFQX0lOU0VSVF9TS0lQX1dBTDsKKwkJfQogCX0KIAogCS8qCkBAIC0y NDAwLDExICsyNDA0LDExIEBAIENvcHlGcm9tKENvcHlTdGF0ZSBjc3RhdGUp CiAJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKIAogCS8qCi0JICogSWYg d2Ugc2tpcHBlZCB3cml0aW5nIFdBTCwgdGhlbiB3ZSBuZWVkIHRvIHN5bmMg dGhlIGhlYXAgKGJ1dCBub3QKLQkgKiBpbmRleGVzIHNpbmNlIHRob3NlIHVz ZSBXQUwgYW55d2F5KQorCSAqIElmIHdlIHNraXBwZWQgd3JpdGluZyBXQUws IHRoZW4gd2Ugd2lsbCBzeW5jIHRoZSBoZWFwIGF0IHRoZSBlbmQgb2YKKwkg KiB0aGUgdHJhbnNhY3Rpb24gKHdlIHVzZWQgdG8gZG8gaXQgaGVyZSwgYnV0 IGl0IHdhcyBsYXRlciBmb3VuZCBvdXQKKwkgKiB0aGF0IHRvIGJlIHNhZmUs IHdlIG11c3QgYXZvaWQgV0FMLWxvZ2dpbmcgYW55IHN1YnNlcXVlbnQgYWN0 aW9ucyBvbgorCSAqIHRoZSBwYWdlcyB3ZSBza2lwcGVkIFdBTCBmb3IpLiBJ bmRleGVzIGFsd2F5cyB1c2UgV0FMLgogCSAqLwotCWlmIChoaV9vcHRpb25z ICYgSEVBUF9JTlNFUlRfU0tJUF9XQUwpCi0JCWhlYXBfc3luYyhjc3RhdGUt PnJlbCk7CiAKIAlyZXR1cm4gcHJvY2Vzc2VkOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdmFjdXVtbGF6eS5jCmluZGV4IDM3NzhkOWQuLjE4MGYy ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bWxh enkuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1sYXp5LmMK QEAgLTkzMiw4ICs5MzIsOCBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBv bmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJCWhlYXBfZXhl Y3V0ZV9mcmVlemVfdHVwbGUoaHR1cCwgJmZyb3plbltpXSk7CiAJCQl9CiAK LQkJCS8qIE5vdyBXQUwtbG9nIGZyZWV6aW5nIGlmIG5lY2Nlc3NhcnkgKi8K LQkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKG9uZXJlbCkpCisJCQkvKiBOb3cg V0FMLWxvZyBmcmVlemluZyBpZiBuZWNlc3NhcnkgKi8KKwkJCWlmIChIZWFw TmVlZHNXQUwob25lcmVsLCBidWYpKQogCQkJewogCQkJCVhMb2dSZWNQdHIJ cmVjcHRyOwogCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBsYXp5X3ZhY3V1bV9w YWdlKFJlbGF0aW9uIG9uZXJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEJ1ZmZl ciBidWZmZXIsCiAJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAkvKiBY TE9HIHN0dWZmICovCi0JaWYgKFJlbGF0aW9uTmVlZHNXQUwob25lcmVsKSkK KwlpZiAoSGVhcE5lZWRzV0FMKG9uZXJlbCwgYnVmZmVyKSkKIAl7CiAJCVhM b2dSZWNQdHIJcmVjcHRyOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IDE4MDEzZDUuLjAxMWJhYjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0x MDgsNiArMTA4LDcgQEAgc3RhdGljIHZvbGF0aWxlIEJ1ZmZlckRlc2MgKkJ1 ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQlib29sICpmb3VuZFB0cik7CiBzdGF0 aWMgdm9pZCBGbHVzaEJ1ZmZlcih2b2xhdGlsZSBCdWZmZXJEZXNjICpidWYs IFNNZ3JSZWxhdGlvbiByZWxuKTsKK3N0YXRpYyB2b2lkIEZsdXNoUmVsRmls ZU5vZGVCdWZmZXJzX2ludGVybmFsKFNNZ3JSZWxhdGlvbiBzbWdyLCBib29s IGlzbG9jYWwpOwogc3RhdGljIHZvaWQgQXRQcm9jRXhpdF9CdWZmZXJzKGlu dCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIGludAlybm9kZV9jb21wYXJh dG9yKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMik7CiAKQEAgLTI0 MjYsMTggKzI0MjcsMzEgQEAgUHJpbnRQaW5uZWRCdWZzKHZvaWQpCiB2b2lk CiBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiB7Ci0JaW50 CQkJaTsKLQl2b2xhdGlsZSBCdWZmZXJEZXNjICpidWZIZHI7Ci0KIAkvKiBP cGVuIHJlbCBhdCB0aGUgc21nciBsZXZlbCBpZiBub3QgYWxyZWFkeSBkb25l ICovCiAJUmVsYXRpb25PcGVuU21ncihyZWwpOwogCi0JaWYgKFJlbGF0aW9u VXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCUZsdXNoUmVsRmlsZU5vZGVCdWZm ZXJzX2ludGVybmFsKHJlbC0+cmRfc21nciwgUmVsYXRpb25Vc2VzTG9jYWxC dWZmZXJzKHJlbCkpOworfQorCit2b2lkCitGbHVzaFJlbEZpbGVOb2RlQnVm ZmVycyhSZWxGaWxlTm9kZSBybm9kZSwgYm9vbCBpc2xvY2FsKQoreworCUZs dXNoUmVsRmlsZU5vZGVCdWZmZXJzX2ludGVybmFsKHNtZ3JvcGVuKHJub2Rl LCBJbnZhbGlkQmFja2VuZElkKSwgaXNsb2NhbCk7Cit9CisKK3N0YXRpYyB2 b2lkCitGbHVzaFJlbEZpbGVOb2RlQnVmZmVyc19pbnRlcm5hbChTTWdyUmVs YXRpb24gc21nciwgYm9vbCBpc2xvY2FsKQoreworCVJlbEZpbGVOb2RlIHJu b2RlID0gc21nci0+c21ncl9ybm9kZS5ub2RlOworCWludAkJCWk7CisJdm9s YXRpbGUgQnVmZmVyRGVzYyAqYnVmSGRyOworCisJaWYgKGlzbG9jYWwpCiAJ ewogCQlmb3IgKGkgPSAwOyBpIDwgTkxvY0J1ZmZlcjsgaSsrKQogCQl7CiAJ CQlidWZIZHIgPSAmTG9jYWxCdWZmZXJEZXNjcmlwdG9yc1tpXTsKLQkJCWlm IChSZWxGaWxlTm9kZUVxdWFscyhidWZIZHItPnRhZy5ybm9kZSwgcmVsLT5y ZF9ub2RlKSAmJgorCQkJaWYgKFJlbEZpbGVOb2RlRXF1YWxzKGJ1Zkhkci0+ dGFnLnJub2RlLCBybm9kZSkgJiYKIAkJCQkoYnVmSGRyLT5mbGFncyAmIEJN X1ZBTElEKSAmJiAoYnVmSGRyLT5mbGFncyAmIEJNX0RJUlRZKSkKIAkJCXsK IAkJCQlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKQEAgLTI0 NTMsNyArMjQ2Nyw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9u IHJlbCkKIAogCQkJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobG9jYWxwYWdl LCBidWZIZHItPnRhZy5ibG9ja051bSk7CiAKLQkJCQlzbWdyd3JpdGUocmVs LT5yZF9zbWdyLAorCQkJCXNtZ3J3cml0ZShzbWdyLAogCQkJCQkJICBidWZI ZHItPnRhZy5mb3JrTnVtLAogCQkJCQkJICBidWZIZHItPnRhZy5ibG9ja051 bSwKIAkJCQkJCSAgbG9jYWxwYWdlLApAQCAtMjQ4MCwxNiArMjQ5NCwxNiBA QCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAJCSAqIEFz IGluIERyb3BSZWxGaWxlTm9kZUJ1ZmZlcnMsIGFuIHVubG9ja2VkIHByZWNo ZWNrIHNob3VsZCBiZSBzYWZlCiAJCSAqIGFuZCBzYXZlcyBzb21lIGN5Y2xl cy4KIAkJICovCi0JCWlmICghUmVsRmlsZU5vZGVFcXVhbHMoYnVmSGRyLT50 YWcucm5vZGUsIHJlbC0+cmRfbm9kZSkpCisJCWlmICghUmVsRmlsZU5vZGVF cXVhbHMoYnVmSGRyLT50YWcucm5vZGUsIHJub2RlKSkKIAkJCWNvbnRpbnVl OwogCiAJCUxvY2tCdWZIZHIoYnVmSGRyKTsKLQkJaWYgKFJlbEZpbGVOb2Rl RXF1YWxzKGJ1Zkhkci0+dGFnLnJub2RlLCByZWwtPnJkX25vZGUpICYmCisJ CWlmIChSZWxGaWxlTm9kZUVxdWFscyhidWZIZHItPnRhZy5ybm9kZSwgcm5v ZGUpICYmCiAJCQkoYnVmSGRyLT5mbGFncyAmIEJNX1ZBTElEKSAmJiAoYnVm SGRyLT5mbGFncyAmIEJNX0RJUlRZKSkKIAkJewogCQkJUGluQnVmZmVyX0xv Y2tlZChidWZIZHIpOwogCQkJTFdMb2NrQWNxdWlyZShidWZIZHItPmNvbnRl bnRfbG9jaywgTFdfU0hBUkVEKTsKLQkJCUZsdXNoQnVmZmVyKGJ1Zkhkciwg cmVsLT5yZF9zbWdyKTsKKwkJCUZsdXNoQnVmZmVyKGJ1Zkhkciwgc21ncik7 CiAJCQlMV0xvY2tSZWxlYXNlKGJ1Zkhkci0+Y29udGVudF9sb2NrKTsKIAkJ CVVucGluQnVmZmVyKGJ1ZkhkciwgdHJ1ZSk7CiAJCX0KQEAgLTI2NjIsNiAr MjY3Niw5IEBAIE1hcmtCdWZmZXJEaXJ0eUhpbnQoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBidWZmZXJfc3RkKQogCQlYTG9nUmVjUHRyCWxzbiA9IEludmFsaWRY TG9nUmVjUHRyOwogCQlib29sCQlkaXJ0aWVkID0gZmFsc2U7CiAJCWJvb2wJ CWRlbGF5Q2hrcHQgPSBmYWxzZTsKKwkJUmVsRmlsZU5vZGUgcm5vZGU7CisJ CUZvcmtOdW1iZXIJZm9ya251bTsKKwkJQmxvY2tOdW1iZXIgYmxrbnVtOwog CiAJCS8qCiAJCSAqIElmIHdlIG5lZWQgdG8gcHJvdGVjdCBoaW50IGJpdCB1 cGRhdGVzIGZyb20gdG9ybiB3cml0ZXMsIFdBTC1sb2cgYQpAQCAtMjY3Miw3 ICsyNjg5LDkgQEAgTWFya0J1ZmZlckRpcnR5SGludChCdWZmZXIgYnVmZmVy LCBib29sIGJ1ZmZlcl9zdGQpCiAJCSAqIFdlIGRvbid0IGNoZWNrIGZ1bGxf cGFnZV93cml0ZXMgaGVyZSBiZWNhdXNlIHRoYXQgbG9naWMgaXMgaW5jbHVk ZWQKIAkJICogd2hlbiB3ZSBjYWxsIFhMb2dJbnNlcnQoKSBzaW5jZSB0aGUg dmFsdWUgY2hhbmdlcyBkeW5hbWljYWxseS4KIAkJICovCi0JCWlmIChYTG9n SGludEJpdElzTmVlZGVkKCkgJiYgKGJ1Zkhkci0+ZmxhZ3MgJiBCTV9QRVJN QU5FTlQpKQorCQlCdWZmZXJHZXRUYWcoYnVmZmVyLCAmcm5vZGUsICZmb3Jr bnVtLCAmYmxrbnVtKTsKKwkJaWYgKFhMb2dIaW50Qml0SXNOZWVkZWQoKSAm JiAoYnVmSGRyLT5mbGFncyAmIEJNX1BFUk1BTkVOVCkgJiYKKwkJCSFzbWdy SXNTeW5jUGVuZGluZyhybm9kZSwgYmxrbnVtKSkKIAkJewogCQkJLyoKIAkJ CSAqIElmIHdlJ3JlIGluIHJlY292ZXJ5IHdlIGNhbm5vdCBkaXJ0eSBhIHBh Z2UgYmVjYXVzZSBvZiBhIGhpbnQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmgKaW5kZXggNDkzODM5Zi4uM2ZkZDVhMSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaApAQCAtMjQsNyArMjQsNyBAQAogCiAKIC8qICJvcHRpb25z IiBmbGFnIGJpdHMgZm9yIGhlYXBfaW5zZXJ0ICovCi0jZGVmaW5lIEhFQVBf SU5TRVJUX1NLSVBfV0FMCTB4MDAwMQorI2RlZmluZSBIRUFQX0lOU0VSVF9T S0lQX1dBTAkweDAwMDEgLyogb2Jzb2xldGUsIG5vdCB1c2VkIGFueW1vcmUg Ki8KICNkZWZpbmUgSEVBUF9JTlNFUlRfU0tJUF9GU00JMHgwMDAyCiAjZGVm aW5lIEhFQVBfSU5TRVJUX0ZST1pFTgkJMHgwMDA0CiAKQEAgLTE2MSw2ICsx NjEsNyBAQCBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsCiBleHRlcm4gdm9pZCBo ZWFwX21hcmtwb3MoSGVhcFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQg aGVhcF9yZXN0cnBvcyhIZWFwU2NhbkRlc2Mgc2Nhbik7CiAKK2V4dGVybiB2 b2lkIGhlYXBfcmVnaXN0ZXJfc3luYyhSZWxhdGlvbiByZWxhdGlvbik7CiBl eHRlcm4gdm9pZCBoZWFwX3N5bmMoUmVsYXRpb24gcmVsYXRpb24pOwogCiAv KiBpbiBoZWFwL3BydW5laGVhcC5jICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW1feGxvZy5oCmluZGV4IDk1NTc0ODYuLjcwYzVmNzUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCkBAIC0xNiw2ICsx Niw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9yZWxmaWxlbm9kZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hl LmgiCkBAIC0zNzUsNiArMzc2LDggQEAgZXh0ZXJuIHZvaWQgaGVhcDJfcmVk byhYTG9nUmVjUHRyIGxzbiwgWExvZ1JlY29yZCAqcnB0cik7CiBleHRlcm4g dm9pZCBoZWFwMl9kZXNjKFN0cmluZ0luZm8gYnVmLCB1aW50OCB4bF9pbmZv LCBjaGFyICpyZWMpOwogZXh0ZXJuIHZvaWQgaGVhcF94bG9nX2xvZ2ljYWxf cmV3cml0ZShYTG9nUmVjUHRyIGxzbiwgWExvZ1JlY29yZCAqcik7CiAKK2V4 dGVybiBib29sIEhlYXBOZWVkc1dBTChSZWxhdGlvbiByZWwsIEJ1ZmZlciBi dWYpOworCiBleHRlcm4gWExvZ1JlY1B0ciBsb2dfaGVhcF9jbGVhbnVwX2lu Zm8oUmVsRmlsZU5vZGUgcm5vZGUsCiAJCQkJCSAgVHJhbnNhY3Rpb25JZCBs YXRlc3RSZW1vdmVkWGlkKTsKIGV4dGVybiBYTG9nUmVjUHRyIGxvZ19oZWFw X2NsZWFuKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBidWZmZXIsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvc3RvcmFnZS5oCmluZGV4IDRiODdhMzYuLmU1NmQyNTIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCkBAIC0yOSw2ICsy OSw5IEBAIGV4dGVybiB2b2lkIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBuYmxvY2tzKTsKICAqLwogZXh0ZXJuIHZvaWQg c21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCk7CiBleHRlcm4g aW50CXNtZ3JHZXRQZW5kaW5nRGVsZXRlcyhib29sIGZvckNvbW1pdCwgUmVs RmlsZU5vZGUgKipwdHIpOworZXh0ZXJuIHZvaWQgc21nclJlZ2lzdGVyUGVu ZGluZ1N5bmMoUmVsYXRpb24gcmVsKTsKK2V4dGVybiBib29sIHNtZ3JJc1N5 bmNQZW5kaW5nKFJlbEZpbGVOb2RlIHJub2RlLCBCbG9ja051bWJlciBibGtu byk7CitleHRlcm4gdm9pZCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0Nv bW1pdCk7CiBleHRlcm4gdm9pZCBBdFN1YkNvbW1pdF9zbWdyKHZvaWQpOwog ZXh0ZXJuIHZvaWQgQXRTdWJBYm9ydF9zbWdyKHZvaWQpOwogZXh0ZXJuIHZv aWQgUG9zdFByZXBhcmVfc21ncih2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oCmluZGV4IDkyMWU0ZWQuLjU5MGFiMDggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTkyLDYgKzE5Miw3IEBAIGV4dGVy biBCbG9ja051bWJlciBCdWZmZXJHZXRCbG9ja051bWJlcihCdWZmZXIgYnVm ZmVyKTsKIGV4dGVybiBCbG9ja051bWJlciBSZWxhdGlvbkdldE51bWJlck9m QmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQlGb3Jr TnVtYmVyIGZvcmtOdW0pOwogZXh0ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbkJ1 ZmZlcnMoUmVsYXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEZsdXNoUmVsRmls ZU5vZGVCdWZmZXJzKFJlbEZpbGVOb2RlIHJlbCwgYm9vbCBpc2xvY2FsKTsK IGV4dGVybiB2b2lkIEZsdXNoRGF0YWJhc2VCdWZmZXJzKE9pZCBkYmlkKTsK IGV4dGVybiB2b2lkIERyb3BSZWxGaWxlTm9kZUJ1ZmZlcnMoUmVsRmlsZU5v ZGVCYWNrZW5kIHJub2RlLAogCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGZpcnN0RGVsQmxvY2spOwo= --------------090102040005040907040005 Content-Type: application/x-shellscript; name="test-wal-minimal.sh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test-wal-minimal.sh" IyEvYmluL2Jhc2gKCnNldCAtZQoKZXhwb3J0IFBHREFUQUJBU0U9cG9zdGdy ZXMKClBBVEg9Li9iaW46JFBBVEgKCmNhdCA+IC90bXAvdGVzdC1jb3B5ZGF0 YSA8PEVPRgpjb3BpZWQgcm93IDEKY29waWVkIHJvdyAyCmNvcGllZCByb3cg MwpFT0YKCmluaXRkYiAtRCBkYXRhLW1pbmltYWwKCiMgQ1JFQVRFLCBJTlNF UlQsIENPUFksIGNyYXNoLgojCiMgSWYgQ09QWSBpbnNlcnRzIHRvIHRoZSBl eGlzdGluZyBibG9jaywgYW5kIGlzIG5vdCBXQUwtbG9nZ2VkLCByZXBsYXlp bmcKIyB0aGUgaW1wbGljaXQgRlBXIG9mIHRoZSBJTlNFUlQgcmVjb3JkIHdp bGwgZGVzdHJveSB0aGUgQ09QWSBkYXRhLgpwZ19jdGwgLUQgZGF0YS1taW5p bWFsIC13IHN0YXJ0CnBzcWwgPDxFT0YKQkVHSU47CkNSRUFURSBUQUJMRSB0 ZXN0MSh0IHRleHQgcHJpbWFyeSBrZXkpOwpTRUxFQ1QgcmVsbmFtZSwgcmVs ZmlsZW5vZGUgZnJvbSBwZ19jbGFzcyB3aGVyZSByZWxmaWxlbm9kZSA+PSAx NjM4NDsKSU5TRVJUIElOVE8gdGVzdDEgVkFMVUVTICgnaW5zZXJ0ZWQgcm93 Jyk7Clxjb3B5IHRlc3QxIEZST00gJy90bXAvdGVzdC1jb3B5ZGF0YScKQ09N TUlUOwpFT0YKcGdfY3RsIC1EIGRhdGEtbWluaW1hbCBzdG9wIC1tIGltbWVk aWF0ZQpzbGVlcCAxCnBnX2N0bCAtRCBkYXRhLW1pbmltYWwgLXcgc3RhcnQK ZWNobyAiU2hvdWxkIGhhdmUgNCByb3dzOiIKcHNxbCAtYyAiU0VMRUNUICog RlJPTSB0ZXN0MSIKcHNxbCAtYyAiRFJPUCBUQUJMRSB0ZXN0MSIgPiAvZGV2 L251bGwgIyBjbGVhbnVwCgojIENSRUFURSwgQ09QWSwgY3Jhc2guIFRyaWdn ZXIgaW4gQ09QWSB0aGF0IGluc2VydHMgbW9yZSB0byBzYW1lIHRhYmxlLgoj CiMgSWYgdGhlIElOU0VSVFMgZnJvbSB0aGUgdHJpZ2dlciBnbyB0byB0aGUg c2FtZSBibG9jayB3ZSdyZSBjb3B5aW5nIHRvLAojIGFuZCB0aGUgSU5TRVJU cyBhcmUgV0FMLWxvZ2dlZCwgV0FMIHJlcGxheSB3aWxsIGZhaWwgd2hlbiBp dCB0cmllcyB0bwojIHJlcGxheSB0aGUgV0FMIHJlY29yZCBidXQgdGhlICJi ZWZvcmUiIGltYWdlIGRvZXNuJ3QgbWF0Y2gsIGJlY2F1c2Ugbm90CiMgYWxs IGNoYW5nZXMgd2VyZSBXQUwtbG9nZ2VkLgpwZ19jdGwgLUQgZGF0YS1taW5p bWFsIC13IHN0YXJ0CnBzcWwgPDxFT0YKQkVHSU47CkNSRUFURSBUQUJMRSB0 ZXN0MSh0IHRleHQgcHJpbWFyeSBrZXkpOwpDUkVBVEUgRlVOQ1RJT04gdGVz dDFfYmVmb3JldHJpZygpIHJldHVybnMgdHJpZ2dlciBsYW5ndWFnZSBwbHBn c3FsIGFzIFwkXCQgCkJFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICBJRiBuZXcudCBOT1QgTElLRSAndHJpZ2dlcmVkJScgVEhFTgog ICAgSU5TRVJUIElOVE8gdGVzdDEgVkFMVUVTICgndHJpZ2dlcmVkICcgfHwg TkVXLnQpOwogIEVORCBJRjsKICBSRVRVUk4gTkVXOwpFTkQ7ClwkXCQ7CkNS RUFURSBUUklHR0VSIHRlc3QxX2JlZm9yZWluc2VydCBCRUZPUkUgSU5TRVJU IE9OIHRlc3QxIEZPUiBFQUNIIFJPVyBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0 MV9iZWZvcmV0cmlnKCk7ClNFTEVDVCByZWxuYW1lLCByZWxmaWxlbm9kZSBm cm9tIHBnX2NsYXNzIHdoZXJlIHJlbGZpbGVub2RlID49IDE2Mzg0OwoKXGNv cHkgdGVzdDEgRlJPTSAnL3RtcC90ZXN0LWNvcHlkYXRhJwpDT01NSVQ7CkVP RgpwZ19jdGwgLUQgZGF0YS1taW5pbWFsIHN0b3AgLW0gaW1tZWRpYXRlCnNs ZWVwIDEKcGdfY3RsIC1EIGRhdGEtbWluaW1hbCAtdyBzdGFydAplY2hvICJT aG91bGQgaGF2ZSA2IHJvd3MgKDMgb3JpZ2luYWwgYW5kIDMgaW5zZXJ0ZWQg YnkgdHJpZ2dlcik6Igpwc3FsIC1jICJTRUxFQ1QgKiBGUk9NIHRlc3QxIgpw c3FsIC1jICJEUk9QIFRBQkxFIHRlc3QxIiA+IC9kZXYvbnVsbCAjIGNsZWFu dXAKcHNxbCAtYyAiRFJPUCBGVU5DVElPTiB0ZXN0MV9iZWZvcmV0cmlnKCki ID4gL2Rldi9udWxsICMgY2xlYW51cAoKCiMgQ1JFQVRFLCBUUlVOQ0FURSwg Q09QWSwgY3Jhc2guCiMKIyBJZiB3ZSBza2lwIFdBTC1sb2dnaW5nIG9mIHRo ZSBDT1BZLCByZXBsYXlpbmcgdGhlIFRSVU5DQVRFIHJlY29yZCBkZXN0cm95 CiMgdGhlIG5ld2x5IGluc2VydGVkIGRhdGEuCnBnX2N0bCAtRCBkYXRhLW1p bmltYWwgLXcgc3RhcnQKcHNxbCA8PEVPRgpCRUdJTjsKQ1JFQVRFIFRBQkxF IHRlc3QxKHQgdGV4dCBwcmltYXJ5IGtleSk7ClNFTEVDVCByZWxuYW1lLCBy ZWxmaWxlbm9kZSBmcm9tIHBnX2NsYXNzIHdoZXJlIHJlbGZpbGVub2RlID49 IDE2Mzg0OwpUUlVOQ0FURSB0ZXN0MTsKU0VMRUNUIHJlbG5hbWUsIHJlbGZp bGVub2RlIGZyb20gcGdfY2xhc3Mgd2hlcmUgcmVsZmlsZW5vZGUgPj0gMTYz ODQ7Clxjb3B5IHRlc3QxIEZST00gJy90bXAvdGVzdC1jb3B5ZGF0YScKQ09N TUlUOwpFT0YKcGdfY3RsIC1EIGRhdGEtbWluaW1hbCBzdG9wIC1tIGltbWVk aWF0ZQpzbGVlcCAxCnBnX2N0bCAtRCBkYXRhLW1pbmltYWwgLXcgc3RhcnQK ZWNobyAiU2hvdWxkIGhhdmUgMyByb3dzOiIKcHNxbCAtYyAiU0VMRUNUICog RlJPTSB0ZXN0MSIKCg== --------------090102040005040907040005 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------090102040005040907040005--