Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oTUV5-0002PU-91 for pgsql-hackers@arkaria.postgresql.org; Wed, 31 Aug 2022 20:39:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oTUV3-0001x9-36 for pgsql-hackers@arkaria.postgresql.org; Wed, 31 Aug 2022 20:39:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oTUV2-0001wl-Ar for pgsql-hackers@lists.postgresql.org; Wed, 31 Aug 2022 20:39:48 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oTUUv-0000OF-5p for pgsql-hackers@lists.postgresql.org; Wed, 31 Aug 2022 20:39:47 +0000 Received: from [192.168.0.105] (unknown [37.113.4.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id D84C921C3BF3; Wed, 31 Aug 2022 23:39:37 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661978378; bh=fIV2eHnwEk+IRXuqw6cRooaLxU68sseC1ceQRjie3JA=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=Hw9idEAWfTbQ7j06GTahRyWooJijhrkuU771ylUerF8YMPBUlKmTVzVNd5uOBzv13 D8Wn6jNIksYp7MKLucC1W7HT1wiZSQrd1VcBTw6c1gi3X0xu9tV4FrgCwe3Lx70MBM XHqKaDqiwj/ZsX6Y/DEtHWOT7QepmzG9Eibm3po4= Content-Type: multipart/mixed; boundary="------------bddYLuM0KIo59nyz0PEkfi85" Message-ID: <379e5365-9670-e0de-ee08-57ba61cbc976@postgrespro.ru> Date: Wed, 31 Aug 2022 23:39:31 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SQL/JSON features for v15 Content-Language: en-US To: Tom Lane , Robert Haas Cc: Andres Freund , "Jonathan S. Katz" , Andrew Dunstan , Amit Langote , Alvaro Herrera , PostgreSQL Hackers , Michael Paquier , John Naylor References: <20220830092008.6dbublx6la226zis@alvherre.pgsql> <2276d20d-43ff-f9f6-5c9c-c2875739e66c@postgresql.org> <20220831154916.pgspuz3bp4427int@awork3.anarazel.de> <4151123.1661961884@sss.pgh.pa.us> <13351.1661965592@sss.pgh.pa.us> <14814.1661966096@sss.pgh.pa.us> From: Nikita Glukhov In-Reply-To: <14814.1661966096@sss.pgh.pa.us> 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. --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: multipart/alternative; boundary="------------HpVhH6CdzgKOhaE34Riu9HUP" --------------HpVhH6CdzgKOhaE34Riu9HUP Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 31.08.2022 20:14, Tom Lane wrote: > Robert Haas writes: >> On Wed, Aug 31, 2022 at 1:06 PM Tom Lane wrote: >>> The currently proposed patchset hacks up a relatively small number >>> of core datatypes to be able to do that. But it's just a hack >>> and there's no prospect of extension types being able to join >>> in the fun. I think where we need to start, for v16, is making >>> an API design that will let any datatype have this functionality. >>> >>> (I don't say that we'd convert every datatype to do so right away; >>> in the long run we should, but I'm content to start with just the >>> same core types touched here.) Beside the JSON stuff, there is >>> another even more pressing application for such behavior, namely >>> the often-requested COPY functionality to be able to shunt bad data >>> off somewhere without losing the entire transfer. In the COPY case >>> I think we'd want to be able to capture the error message that >>> would have been issued, which means the current patches are not >>> at all appropriate as a basis for that API design: they're just >>> returning a bool without any details. >>> >> I would be in favor of making more of an effort than just a few token >> data types. The initial patch could just touch a few, but once the >> infrastructure is in place we should really make a sweep through the >> tree and tidy up. > Sure, but my point is that we can do that in a time-extended fashion > rather than having a flag day where everything must be updated. > The initial patch just needs to update a few types as proof of concept. > And here is a quick POC patch with an example for COPY and float4: =# CREATE TABLE test (i int, f float4); CREATE TABLE =# COPY test (f) FROM stdin WITH (null_on_error (f)); 1 err 2 \. COPY 3 =# SELECT f FROM test; f --- 1 2 (3 rows) =# COPY test (i) FROM stdin WITH (null_on_error (i)); ERROR: input function for datatype "integer" does not support error handling PG_RETURN_ERROR() is a reincarnation of ereport_safe() macro for returning ErrorData, which was present in older versions (~v18) of SQL/JSON patches. Later it was replaced with `bool *have_error` and less magical `if (have_error) ... else ereport(...)`. Obviously, this needs a separate thread. -- Nikita Glukhov Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------HpVhH6CdzgKOhaE34Riu9HUP Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit


On 31.08.2022 20:14, Tom Lane wrote:
Robert Haas <robertmhaas@gmail.com> writes:
On Wed, Aug 31, 2022 at 1:06 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
The currently proposed patchset hacks up a relatively small number
of core datatypes to be able to do that.  But it's just a hack
and there's no prospect of extension types being able to join
in the fun.  I think where we need to start, for v16, is making
an API design that will let any datatype have this functionality.

(I don't say that we'd convert every datatype to do so right away;
in the long run we should, but I'm content to start with just the
same core types touched here.)  Beside the JSON stuff, there is
another even more pressing application for such behavior, namely
the often-requested COPY functionality to be able to shunt bad data
off somewhere without losing the entire transfer.  In the COPY case
I think we'd want to be able to capture the error message that
would have been issued, which means the current patches are not
at all appropriate as a basis for that API design: they're just
returning a bool without any details.

I would be in favor of making more of an effort than just a few token
data types. The initial patch could just touch a few, but once the
infrastructure is in place we should really make a sweep through the
tree and tidy up.
Sure, but my point is that we can do that in a time-extended fashion
rather than having a flag day where everything must be updated.
The initial patch just needs to update a few types as proof of concept.

And here is a quick POC patch with an example for COPY and float4:
=# CREATE TABLE test (i int, f float4);
CREATE TABLE

=# COPY test (f) FROM stdin WITH (null_on_error (f));
1
err
2
\.

COPY 3

=# SELECT f FROM test;
 f 
---
 1
  
 2
(3 rows)

=# COPY test (i) FROM stdin WITH (null_on_error (i));
ERROR:  input function for datatype "integer" does not support error handling



PG_RETURN_ERROR() is a reincarnation of ereport_safe() macro for returning 
ErrorData, which was present in older versions (~v18) of SQL/JSON patches.  
Later it was replaced with `bool *have_error` and less magical 
`if (have_error) ... else ereport(...)`.


Obviously, this needs a separate thread.
-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
--------------HpVhH6CdzgKOhaE34Riu9HUP-- --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: text/x-patch; charset=UTF-8; name="0001-Introduce-PG_RETURN_ERROR-and-FuncCallError-node.patch" Content-Disposition: attachment; filename*0="0001-Introduce-PG_RETURN_ERROR-and-FuncCallError-node.patch" Content-Transfer-Encoding: base64 RnJvbSA1MzdlNjVlMWViY2NjZGY0YTc2MGQzYWVlZWVhNzQzYzg4NjExZTdjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgMzEgQXVnIDIwMjIgMjI6MjQ6MzMgKzAzMDAKU3ViamVj dDogW1BBVENIIDEvNV0gSW50cm9kdWNlIFBHX1JFVFVSTl9FUlJPUiBhbmQgRnVuY0NhbGxF cnJvciBub2RlCgotLS0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIHwgIDcgKysr KysrKwogc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oICAgICAgfCAyNSArKysrKysrKysrKysr KysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDAxYjE3MjdmYzA5Li5iNDAxZDM1NDY1NiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTI3MjksNCArMjcyOSwxMSBAQCB0eXBlZGVmIHN0cnVj dCBMaW1pdFN0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKmxhc3Rfc2xvdDsJLyogc2xvdCBmb3Ig ZXZhbHVhdGlvbiBvZiB0aWVzICovCiB9IExpbWl0U3RhdGU7CiAKK3R5cGVkZWYgc3RydWN0 IEZ1bmNDYWxsRXJyb3IKK3sKKwlOb2RlVGFnCQl0eXBlOworCUVycm9yRGF0YSAgKmVycm9y OwkJCS8qIHBsYWNlIHdoZXJlIGZ1bmN0aW9uIHNob3VsZCBwdXQKKwkJCQkJCQkJICogZXJy b3IgZGF0YSBpbnN0ZWFkIG9mIHRocm93aW5nIGl0ICovCit9IEZ1bmNDYWxsRXJyb3I7CisK ICNlbmRpZgkJCQkJCQkvKiBFWEVDTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvZWxvZy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oCmluZGV4IDU2Mzk4 MTc2OTAxLi41ZmQzZGVlZDYxZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZWxv Zy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2Vsb2cuaApAQCAtMTU5LDYgKzE1OSwzMSBA QAogI2RlZmluZSBlcmVwb3J0KGVsZXZlbCwgLi4uKQlcCiAJZXJlcG9ydF9kb21haW4oZWxl dmVsLCBURVhURE9NQUlOLCBfX1ZBX0FSR1NfXykKIAorLyoKKyAqIFBHX1JFVFVSTl9FUlJP UigpIC0tIHNwZWNpYWwgbWFjcm8gZm9yIGNvcHlpbmcgZXJyb3IgaW5mbyBpbnRvIHRoZQor ICogRnVuY0NhbGxFcnJvciBub2RlLCBpZiBpdCB3YXMgYXMgRnVuY3Rpb25DYWxsSW5mby5j b250ZXh0LAorICogaW5zdGVhZCBvZiB0aHJvd2luZyBpdCB3aXRoIG9yZGluYXJ5IGVyZXBv cnQoKS4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciBoYW5kbGluZyBvZiBlcnJvcnMg b2YgY2F0ZWdvcmllcyBsaWtlCisgKiBFUlJDT0RFX0RBVEFfRVhDRVBUSU9OIHdpdGhvdXQg UEdfVFJZL1BHX0NBVENIIGFuZCBzdWJzdHJhbnNhY3Rpb25zLAorICogYnV0IG5vdCBmb3Ig ZXJyb3JzIGxpa2UgRVJSQ09ERV9PVVRfT0ZfTUVNT1JZLgorICovCisjZGVmaW5lIFBHX1JF VFVSTl9FUlJPUiguLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGZjaW5mby0+Y29udGV4dCAmJiBJ c0EoZmNpbmZvLT5jb250ZXh0LCBGdW5jQ2FsbEVycm9yKSkgeyBcCisJCQlwZ19wcmV2ZW50 X2Vycm5vX2luX3Njb3BlKCk7IFwKKwkJCVwKKwkJCWVycnN0YXJ0KEVSUk9SLCBURVhURE9N QUlOKTsgXAorCQkJKF9fVkFfQVJHU19fKTsgXAorCQkJY2FzdE5vZGUoRnVuY0NhbGxFcnJv ciwgZmNpbmZvLT5jb250ZXh0KS0+ZXJyb3IgPSBDb3B5RXJyb3JEYXRhKCk7IFwKKwkJCUZs dXNoRXJyb3JTdGF0ZSgpOyBcCisJCQlcCisJCQlQR19SRVRVUk5fTlVMTCgpOyBcCisJCX0g ZWxzZSB7IFwKKwkJCWVyZXBvcnQoRVJST1IsIChfX1ZBX0FSR1NfXykpOyBcCisJCX0gXAor CX0gd2hpbGUgKDApCisKICNkZWZpbmUgVEVYVERPTUFJTiBOVUxMCiAKIGV4dGVybiBib29s IG1lc3NhZ2VfbGV2ZWxfaXNfaW50ZXJlc3RpbmcoaW50IGVsZXZlbCk7Ci0tIAoyLjI1LjEK Cg== --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: text/x-patch; charset=UTF-8; name="0002-Introduce-pg_proc.proissafe-and-func_is_safe.patch" Content-Disposition: attachment; filename="0002-Introduce-pg_proc.proissafe-and-func_is_safe.patch" Content-Transfer-Encoding: base64 RnJvbSA3ODMxYjJjNTcxNzg0YTYxNGRkNGVlNGI0ODczMDE4N2IwYzBhOGQxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgMzEgQXVnIDIwMjIgMjM6MDI6MDYgKzAzMDAKU3ViamVj dDogW1BBVENIIDIvNV0gSW50cm9kdWNlIHBnX3Byb2MucHJvaXNzYWZlIGFuZCBmdW5jX2lz X3NhZmUoKQoKLS0tCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyB8IDE5 ICsrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oICAg ICAgIHwgIDMgKysrCiBzcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCAgICAgICB8ICAx ICsKIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMKaW5kZXggYTE2YTYzZjQ5NTcuLmZmMzAwNTA3N2IyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwpAQCAtMTgzMCw2ICsxODMwLDI1IEBA IGdldF9mdW5jX2xlYWtwcm9vZihPaWQgZnVuY2lkKQogCXJldHVybiByZXN1bHQ7CiB9CiAK Ky8qCisgKiBmdW5jX2lzX3NhZmUKKyAqCQlHaXZlbiBwcm9jZWR1cmUgaWQsIHJldHVybiB0 aGUgZnVuY3Rpb24ncyBwcm9pc3NhZmUgZmxhZy4KKyAqLworYm9vbAorZnVuY19pc19zYWZl KE9pZCBmdW5jaWQpCit7CisJSGVhcFR1cGxlCXRwOworCWJvb2wJCXJlc3VsdDsKKworCXRw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0oZnVuY2lkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uICV1IiwgZnVuY2lkKTsKKworCXJlc3VsdCA9ICgo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QodHApKS0+cHJvaXNzYWZlOworCVJlbGVhc2VTeXND YWNoZSh0cCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIGdldF9mdW5jX3N1cHBv cnQKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmluZGV4IDc2MzEwZDRjYzlhLi4yYWU4OTQy YjAxNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKQEAgLTcwLDYgKzcwLDkgQEAgQ0FUQUxP RyhwZ19wcm9jLDEyNTUsUHJvY2VkdXJlUmVsYXRpb25JZCkgQktJX0JPT1RTVFJBUCBCS0lf Uk9XVFlQRV9PSUQoODEsUHJvY2UKIAkvKiByZXR1cm5zIGEgc2V0PyAqLwogCWJvb2wJCXBy b3JldHNldCBCS0lfREVGQVVMVChmKTsKIAorCS8qIGNhbiByZXR1cm4gZXJyb3IgaW5mbyB0 aHJvdWdoIEZ1bmNDYWxsRXJyb3IgaW5zdGVhZCBvZiB0aHJvd2luZyBpdD8gKi8KKwlib29s CQlwcm9pc3NhZmUgQktJX0RFRkFVTFQoZik7CisKIAkvKiBzZWUgUFJPVk9MQVRJTEVfIGNh dGVnb3JpZXMgYmVsb3cgKi8KIAljaGFyCQlwcm92b2xhdGlsZSBCS0lfREVGQVVMVChpKTsK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmggYi9zcmMvaW5j bHVkZS91dGlscy9sc3lzY2FjaGUuaAppbmRleCA1MGYwMjg4MzA1Mi4uYzY2MzY1ZmRmMmMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCkBAIC0xMzAsNiArMTMwLDcgQEAgZXh0ZXJuIGNo YXIgZnVuY192b2xhdGlsZShPaWQgZnVuY2lkKTsKIGV4dGVybiBjaGFyIGZ1bmNfcGFyYWxs ZWwoT2lkIGZ1bmNpZCk7CiBleHRlcm4gY2hhciBnZXRfZnVuY19wcm9raW5kKE9pZCBmdW5j aWQpOwogZXh0ZXJuIGJvb2wgZ2V0X2Z1bmNfbGVha3Byb29mKE9pZCBmdW5jaWQpOworZXh0 ZXJuIGJvb2wgZnVuY19pc19zYWZlKE9pZCBmdW5jaWQpOwogZXh0ZXJuIFJlZ1Byb2NlZHVy ZSBnZXRfZnVuY19zdXBwb3J0KE9pZCBmdW5jaWQpOwogZXh0ZXJuIE9pZAlnZXRfcmVsbmFt ZV9yZWxpZChjb25zdCBjaGFyICpyZWxuYW1lLCBPaWQgcmVsbmFtZXNwYWNlKTsKIGV4dGVy biBjaGFyICpnZXRfcmVsX25hbWUoT2lkIHJlbGlkKTsKLS0gCjIuMjUuMQoK --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: text/x-patch; charset=UTF-8; name="0003-Use-PG_RETURN_ERROR-in-float4in.patch" Content-Disposition: attachment; filename="0003-Use-PG_RETURN_ERROR-in-float4in.patch" Content-Transfer-Encoding: base64 RnJvbSA0ZWJhMGJkNzcxYjg1YWJlZjk0MTI1ZjM3NDI2MWQ3NzM0MTc4NjU3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgMzEgQXVnIDIwMjIgMjI6Mjg6MDkgKzAzMDAKU3ViamVj dDogW1BBVENIIDMvNV0gVXNlIFBHX1JFVFVSTl9FUlJPUiBpbiBmbG9hdDRpbigpCgotLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mbG9hdC5jICAgfCA5ICsrKysrLS0tLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCB8IDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgNiBp bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9mbG9hdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zsb2F0LmMKaW5k ZXggZmM4ZjM5YTdhOTguLmUzYmRlNzJiMzI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvZmxvYXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZmxvYXQuYwpA QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbW1vbi9zaG9ydGVzdF9kZWMuaCIKICNp bmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAj aW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgi CkBAIC0xODMsNyArMTg0LDcgQEAgZmxvYXQ0aW4oUEdfRlVOQ1RJT05fQVJHUykKIAkgKiBz dHJ0b2QoKSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLgogCSAqLwogCWlmICgqbnVtID09ICdc MCcpCi0JCWVyZXBvcnQoRVJST1IsCisJCVBHX1JFVFVSTl9FUlJPUigKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJIGVycm1zZygi aW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCiAJCQkJCQkicmVh bCIsIG9yaWdfbnVtKSkpOwpAQCAtMjU3LDEzICsyNTgsMTMgQEAgZmxvYXQ0aW4oUEdfRlVO Q1RJT05fQVJHUykKIAkJCQkodmFsID49IEhVR0VfVkFMRiB8fCB2YWwgPD0gLUhVR0VfVkFM RikKICNlbmRpZgogCQkJCSkKLQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCVBHX1JFVFVSTl9F UlJPUigKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFO R0UpLAogCQkJCQkJIGVycm1zZygiXCIlc1wiIGlzIG91dCBvZiByYW5nZSBmb3IgdHlwZSBy ZWFsIiwKIAkJCQkJCQkJb3JpZ19udW0pKSk7CiAJCX0KIAkJZWxzZQotCQkJZXJlcG9ydChF UlJPUiwKKwkJCVBHX1JFVFVSTl9FUlJPUigKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAogCQkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0 IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKIAkJCQkJCQkicmVhbCIsIG9yaWdfbnVt KSkpOwpAQCAtMjc1LDcgKzI3Niw3IEBAIGZsb2F0NGluKFBHX0ZVTkNUSU9OX0FSR1MpCiAK IAkvKiBpZiB0aGVyZSBpcyBhbnkganVuayBsZWZ0IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmlu ZywgYmFpbCBvdXQgKi8KIAlpZiAoKmVuZHB0ciAhPSAnXDAnKQotCQllcmVwb3J0KEVSUk9S LAorCQlQR19SRVRVUk5fRVJST1IoCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RF WFRfUkVQUkVTRU5UQVRJT04pLAogCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4 IGZvciB0eXBlICVzOiBcIiVzXCIiLAogCQkJCQkJInJlYWwiLCBvcmlnX251bSkpKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGJlNDc1ODMxMjJiLi5iMjViZmE1NWFiMyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC01ODUsNyArNTg1LDcgQEAKIAogeyBv aWQgPT4gJzIwMCcsIGRlc2NyID0+ICdJL08nLAogICBwcm9uYW1lID0+ICdmbG9hdDRpbics IHByb3JldHR5cGUgPT4gJ2Zsb2F0NCcsIHByb2FyZ3R5cGVzID0+ICdjc3RyaW5nJywKLSAg cHJvc3JjID0+ICdmbG9hdDRpbicgfSwKKyAgcHJvaXNzYWZlID0+ICd0JywgcHJvc3JjID0+ ICdmbG9hdDRpbicgfSwKIHsgb2lkID0+ICcyMDEnLCBkZXNjciA9PiAnSS9PJywKICAgcHJv bmFtZSA9PiAnZmxvYXQ0b3V0JywgcHJvcmV0dHlwZSA9PiAnY3N0cmluZycsIHByb2FyZ3R5 cGVzID0+ICdmbG9hdDQnLAogICBwcm9zcmMgPT4gJ2Zsb2F0NG91dCcgfSwKLS0gCjIuMjUu MQoK --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: text/x-patch; charset=UTF-8; name="0004-Introduce-InputFunctionCallOptError.patch" Content-Disposition: attachment; filename="0004-Introduce-InputFunctionCallOptError.patch" Content-Transfer-Encoding: base64 RnJvbSBiODAwMWY0NjllODNkZjA0OGU5NzJkY2QxNzEyMDkyOTk5NmJhNWZhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgMzEgQXVnIDIwMjIgMjI6Mjg6NDQgKzAzMDAKU3ViamVj dDogW1BBVENIIDQvNV0gSW50cm9kdWNlIElucHV0RnVuY3Rpb25DYWxsT3B0RXJyb3IoKQoK LS0tCiBzcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYyB8IDM4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tCiBzcmMvaW5jbHVkZS9mbWdyLmggICAgICAgICAgICB8 ICAzICsrKwogMiBmaWxlcyBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZm1nci5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMKaW5kZXggYTlkZDA2ODA5NWIuLmZiZWEwZGY2 MWRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYwpAQCAtMTUxMSwxMSArMTUxMSwxNCBAQCBP aWRGdW5jdGlvbkNhbGw5Q29sbChPaWQgZnVuY3Rpb25JZCwgT2lkIGNvbGxhdGlvbiwgRGF0 dW0gYXJnMSwgRGF0dW0gYXJnMiwKICAqIGZ1bmN0aW9uIGFueXdheSBpZiBpdCdzIG5vdCBz dHJpY3QuICBTbyB0aGlzIGlzIGFsbW9zdCBidXQgbm90IHF1aXRlCiAgKiB0aGUgc2FtZSBh cyBGdW5jdGlvbkNhbGwzLgogICovCi1EYXR1bQotSW5wdXRGdW5jdGlvbkNhbGwoRm1ncklu Zm8gKmZsaW5mbywgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kKQor c3RhdGljIGlubGluZSBEYXR1bQorSW5wdXRGdW5jdGlvbkNhbGxJbnRlcm5hbChGbWdySW5m byAqZmxpbmZvLCBjaGFyICpzdHIsCisJCQkJCQkgIE9pZCB0eXBpb3BhcmFtLCBpbnQzMiB0 eXBtb2QsCisJCQkJCQkgIEVycm9yRGF0YSAqKmVkYXRhKQogewogCUxPQ0FMX0ZDSU5GTyhm Y2luZm8sIDMpOwogCURhdHVtCQlyZXN1bHQ7CisJRnVuY0NhbGxFcnJvciAqZmNlcnJvcjsK IAogCWlmIChzdHIgPT0gTlVMTCAmJiBmbGluZm8tPmZuX3N0cmljdCkKIAkJcmV0dXJuIChE YXR1bSkgMDsJCS8qIGp1c3QgcmV0dXJuIG51bGwgcmVzdWx0ICovCkBAIC0xNTI5LDggKzE1 MzIsMjIgQEAgSW5wdXRGdW5jdGlvbkNhbGwoRm1nckluZm8gKmZsaW5mbywgY2hhciAqc3Ry LCBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kKQogCWZjaW5mby0+YXJnc1syXS52YWx1 ZSA9IEludDMyR2V0RGF0dW0odHlwbW9kKTsKIAlmY2luZm8tPmFyZ3NbMl0uaXNudWxsID0g ZmFsc2U7CiAKKwlpZiAoZWRhdGEpCisJeworCQlmY2Vycm9yID0gbWFrZU5vZGUoRnVuY0Nh bGxFcnJvcik7CisJCWZjaW5mby0+Y29udGV4dCA9IChOb2RlICopIGZjZXJyb3I7CisJfQor CiAJcmVzdWx0ID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5mbyk7CiAKKwlpZiAoZWRhdGEp CisJeworCQkqZWRhdGEgPSBmY2Vycm9yLT5lcnJvcjsKKwkJcGZyZWUoZmNlcnJvcik7CisJ CWlmICgqZWRhdGEpCisJCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKwogCS8qIFNob3VsZCBn ZXQgbnVsbCByZXN1bHQgaWYgYW5kIG9ubHkgaWYgc3RyIGlzIE5VTEwgKi8KIAlpZiAoc3Ry ID09IE5VTEwpCiAJewpAQCAtMTU0OCw2ICsxNTY1LDIzIEBAIElucHV0RnVuY3Rpb25DYWxs KEZtZ3JJbmZvICpmbGluZm8sIGNoYXIgKnN0ciwgT2lkIHR5cGlvcGFyYW0sIGludDMyIHR5 cG1vZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCitEYXR1bQorSW5wdXRGdW5jdGlvbkNhbGwo Rm1nckluZm8gKmZsaW5mbywgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlw bW9kKQoreworCXJldHVybiBJbnB1dEZ1bmN0aW9uQ2FsbEludGVybmFsKGZsaW5mbywgc3Ry LCB0eXBpb3BhcmFtLCB0eXBtb2QsIE5VTEwpOworfQorCitEYXR1bQorSW5wdXRGdW5jdGlv bkNhbGxPcHRFcnJvcihGbWdySW5mbyAqZmxpbmZvLCBjaGFyICpzdHIsIE9pZCB0eXBpb3Bh cmFtLAorCQkJCQkJICBpbnQzMiB0eXBtb2QsIEVycm9yRGF0YSAqKmVkYXRhKQoreworCWlm IChlZGF0YSkKKwkJcmV0dXJuIElucHV0RnVuY3Rpb25DYWxsSW50ZXJuYWwoZmxpbmZvLCBz dHIsIHR5cGlvcGFyYW0sIHR5cG1vZCwgZWRhdGEpOworCWVsc2UKKwkJcmV0dXJuIElucHV0 RnVuY3Rpb25DYWxsKGZsaW5mbywgc3RyLCB0eXBpb3BhcmFtLCB0eXBtb2QpOworfQorCisK IC8qCiAgKiBDYWxsIGEgcHJldmlvdXNseS1sb29rZWQtdXAgZGF0YXR5cGUgb3V0cHV0IGZ1 bmN0aW9uLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZtZ3IuaCBiL3NyYy9pbmNs dWRlL2ZtZ3IuaAppbmRleCAzODBhODJiOWRlMy4uOGYxOGYyNDA4ZTEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2ZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9mbWdyLmgKQEAgLTcxMSw2 ICs3MTEsOSBAQCBleHRlcm4gRGF0dW0gT2lkUmVjZWl2ZUZ1bmN0aW9uQ2FsbChPaWQgZnVu Y3Rpb25JZCwgZm1TdHJpbmdJbmZvIGJ1ZiwKIGV4dGVybiBieXRlYSAqU2VuZEZ1bmN0aW9u Q2FsbChGbWdySW5mbyAqZmxpbmZvLCBEYXR1bSB2YWwpOwogZXh0ZXJuIGJ5dGVhICpPaWRT ZW5kRnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlvbklkLCBEYXR1bSB2YWwpOwogCitleHRlcm4g RGF0dW0gSW5wdXRGdW5jdGlvbkNhbGxPcHRFcnJvcihGbWdySW5mbyAqZmxpbmZvLCBjaGFy ICpzdHIsCisJCQkJCQkJCQkgICBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kLAorCQkJ CQkJCQkJICAgRXJyb3JEYXRhICoqZWRhdGEpOwogCiAvKgogICogUm91dGluZXMgaW4gZm1n ci5jCi0tIAoyLjI1LjEKCg== --------------bddYLuM0KIo59nyz0PEkfi85 Content-Type: text/x-patch; charset=UTF-8; name="0005-Introduce-NULL_ON_ERROR-option-for-COPY-FROM.patch" Content-Disposition: attachment; filename="0005-Introduce-NULL_ON_ERROR-option-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 RnJvbSAxZmMxYjQyMzFiMDc5MDc4YzMwM2JlNzU4NjRjNGVmNzFkMDc0MmExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgMzEgQXVnIDIwMjIgMjI6Mjk6NDcgKzAzMDAKU3ViamVj dDogW1BBVENIIDUvNV0gSW50cm9kdWNlIE5VTExfT05fRVJST1Igb3B0aW9uIGZvciBDT1BZ IEZST00KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jICAgICAgICAgIHwgMjAg KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAg ICB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHlmcm9tcGFyc2UuYyB8IDIxICsrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weS5oICAgICAgICAgIHwgIDIgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weS5vdXQgICB8IDE1ICsrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvcHkuc3FsICAgICAgICB8IDEzICsrKysrKysrKysrCiA2IGZpbGVzIGNoYW5n ZWQsIDk5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5j CmluZGV4IDQ5OTI0ZTQ3NmFmLi5jZTdlODc1ZjY1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpA QCAtNTUxLDYgKzU1MSwxOSBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkJCQlkZWZlbC0+ZGVmbmFtZSksCiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0 aW9uKHBzdGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgIm51bGxfb25fZXJyb3IiKSA9PSAwKQorCQl7CisJCQlpZiAo b3B0c19vdXQtPm51bGxfb25fZXJyb3IpCisJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0o ZGVmZWwsIHBzdGF0ZSk7CisJCQlpZiAoZGVmZWwtPmFyZyAmJiBJc0EoZGVmZWwtPmFyZywg TGlzdCkpCisJCQkJb3B0c19vdXQtPm51bGxfb25fZXJyb3IgPSBjYXN0Tm9kZShMaXN0LCBk ZWZlbC0+YXJnKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJh cmd1bWVudCB0byBvcHRpb24gXCIlc1wiIG11c3QgYmUgYSBsaXN0IG9mIGNvbHVtbiBuYW1l cyIsCisJCQkJCQkJCWRlZmVsLT5kZWZuYW1lKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBkZWZlbC0+bG9jYXRpb24pKSk7CisJCX0KIAkJZWxzZQogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzAx LDYgKzcxNCwxMyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKIAkJCQkgZXJybXNnKCJDU1YgcXVvdGUgY2hhcmFjdGVyIG11c3Qgbm90IGFw cGVhciBpbiB0aGUgTlVMTCBzcGVjaWZpY2F0aW9uIikpKTsKKworCS8qIENoZWNrIG51bGxf b25fZXJyb3IgKi8KKwlpZiAob3B0c19vdXQtPm51bGxfb25fZXJyb3IgIT0gTklMICYmICFp c19mcm9tKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJDT1BZIG51bGwgb24gZXJyb3Igb25s eSBhdmFpbGFibGUgdXNpbmcgQ09QWSBGUk9NIikpKTsKKwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHlmcm9tLmMKaW5kZXggZThiYjE2OGFlYTguLjk5YjM5ZDhkN2MyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJyZXdy aXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvcG9ydGFsLmgiCkBAIC0xMzE2LDYgKzEzMTcsMjkgQEAgQmVn aW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCX0KIAl9CiAKKwkvKiBDb252ZXJ0 IE5VTExfT05fRVJST1IgbmFtZSBsaXN0IHRvIHBlci1jb2x1bW4gZmxhZ3MsIGNoZWNrIHZh bGlkaXR5ICovCisJY3N0YXRlLT5vcHRzLm51bGxfb25fZXJyb3JfZmxhZ3MgPSAoYm9vbCAq KSBwYWxsb2MwKG51bV9waHlzX2F0dHJzICogc2l6ZW9mKGJvb2wpKTsKKwlpZiAoY3N0YXRl LT5vcHRzLm51bGxfb25fZXJyb3IpCisJeworCQlMaXN0CSAgICphdHRudW1zOworCQlMaXN0 Q2VsbCAgICpjdXI7CisKKwkJYXR0bnVtcyA9IENvcHlHZXRBdHRudW1zKHR1cERlc2MsIGNz dGF0ZS0+cmVsLCBjc3RhdGUtPm9wdHMubnVsbF9vbl9lcnJvcik7CisKKwkJZm9yZWFjaChj dXIsIGF0dG51bXMpCisJCXsKKwkJCWludAkJCWF0dG51bSA9IGxmaXJzdF9pbnQoY3VyKTsK KwkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cERlc2MsIGF0 dG51bSAtIDEpOworCisJCQlpZiAoIWxpc3RfbWVtYmVyX2ludChjc3RhdGUtPmF0dG51bWxp c3QsIGF0dG51bSkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJCSBlcnJtc2coIk5VTExfT05f RVJST1IgY29sdW1uIFwiJXNcIiBub3QgcmVmZXJlbmNlZCBieSBDT1BZIiwKKwkJCQkJCQkJ TmFtZVN0cihhdHRyLT5hdHRuYW1lKSkpKTsKKwkJCWNzdGF0ZS0+b3B0cy5udWxsX29uX2Vy cm9yX2ZsYWdzW2F0dG51bSAtIDFdID0gdHJ1ZTsKKwkJfQorCX0KKwogCS8qIFVzZSBjbGll bnQgZW5jb2Rpbmcgd2hlbiBFTkNPRElORyBvcHRpb24gaXMgbm90IHNwZWNpZmllZC4gKi8K IAlpZiAoY3N0YXRlLT5vcHRzLmZpbGVfZW5jb2RpbmcgPCAwKQogCQljc3RhdGUtPmZpbGVf ZW5jb2RpbmcgPSBwZ19nZXRfY2xpZW50X2VuY29kaW5nKCk7CkBAIC0xNDE3LDYgKzE0NDEs MTUgQEAgQmVnaW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICZpbl9m dW5jX29pZCwgJnR5cGlvcGFyYW1zW2F0dG51bSAtIDFdKTsKIAkJZm1ncl9pbmZvKGluX2Z1 bmNfb2lkLCAmaW5fZnVuY3Rpb25zW2F0dG51bSAtIDFdKTsKIAorCQkvKiBjaGVjayB3aGV0 aGVyIGlucHV0IGZ1bmN0aW9uIHN1cHBvcnRzIHJldHVybmluZyBlcnJvcnMgKi8KKwkJaWYg KGNzdGF0ZS0+b3B0cy5udWxsX29uX2Vycm9yX2ZsYWdzW2F0dG51bSAtIDFdICYmCisJCQkh ZnVuY19pc19zYWZlKGluX2Z1bmNfb2lkKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygi aW5wdXQgZnVuY3Rpb24gZm9yIGRhdGF0eXBlIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGVy cm9yIGhhbmRsaW5nIiwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZShhdHQtPmF0dHR5cGlkKSkp KTsKKworCiAJCS8qIEdldCBkZWZhdWx0IGluZm8gaWYgbmVlZGVkICovCiAJCWlmICghbGlz dF9tZW1iZXJfaW50KGNzdGF0ZS0+YXR0bnVtbGlzdCwgYXR0bnVtKSAmJiAhYXR0LT5hdHRn ZW5lcmF0ZWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlm cm9tcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwppbmRl eCAwOTc0MTRlZjEyZC4uMDRhMzZkZTQ0NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbXBhcnNlLmMKQEAgLTg5Nyw2ICs4OTcsOCBAQCBOZXh0Q29weUZyb20oQ29weUZyb21T dGF0ZSBjc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKIAkJCWludAkJCWF0dG51bSA9 IGxmaXJzdF9pbnQoY3VyKTsKIAkJCWludAkJCW0gPSBhdHRudW0gLSAxOwogCQkJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBtKTsKKwkJCUVycm9y RGF0YSAgKmVkYXRhID0gTlVMTDsKKwkJCUVycm9yRGF0YSAqKnBfZWRhdGE7CiAKIAkJCWlm IChmaWVsZG5vID49IGZsZGN0KQogCQkJCWVyZXBvcnQoRVJST1IsCkBAIC05MzgsMTEgKzk0 MCwyMCBAQCBOZXh0Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUsIEV4cHJDb250ZXh0 ICplY29udGV4dCwKIAogCQkJY3N0YXRlLT5jdXJfYXR0bmFtZSA9IE5hbWVTdHIoYXR0LT5h dHRuYW1lKTsKIAkJCWNzdGF0ZS0+Y3VyX2F0dHZhbCA9IHN0cmluZzsKLQkJCXZhbHVlc1tt XSA9IElucHV0RnVuY3Rpb25DYWxsKCZpbl9mdW5jdGlvbnNbbV0sCi0JCQkJCQkJCQkJICBz dHJpbmcsCi0JCQkJCQkJCQkJICB0eXBpb3BhcmFtc1ttXSwKLQkJCQkJCQkJCQkgIGF0dC0+ YXR0dHlwbW9kKTsKLQkJCWlmIChzdHJpbmcgIT0gTlVMTCkKKworCQkJcF9lZGF0YSA9IGNz dGF0ZS0+b3B0cy5udWxsX29uX2Vycm9yX2ZsYWdzW21dID8gJmVkYXRhIDogTlVMTDsKKwor CQkJdmFsdWVzW21dID0gSW5wdXRGdW5jdGlvbkNhbGxPcHRFcnJvcigmaW5fZnVuY3Rpb25z W21dLAorCQkJCQkJCQkJCQkJICBzdHJpbmcsCisJCQkJCQkJCQkJCQkgIHR5cGlvcGFyYW1z W21dLAorCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5cG1vZCwKKwkJCQkJCQkJCQkJCSAgcF9l ZGF0YSk7CisJCQlpZiAoZWRhdGEpCisJCQl7CisJCQkJRnJlZUVycm9yRGF0YShlZGF0YSk7 CisJCQkJbnVsbHNbbV0gPSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoc3RyaW5nICE9IE5V TEwpCiAJCQkJbnVsbHNbbV0gPSBmYWxzZTsKIAkJCWNzdGF0ZS0+Y3VyX2F0dG5hbWUgPSBO VUxMOwogCQkJY3N0YXRlLT5jdXJfYXR0dmFsID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaApp bmRleCBjYjAwOTZhZWI2Ny4uMzU5ZmI0Y2M5ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAg LTU5LDYgKzU5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAlib29s CSAgICpmb3JjZV9udWxsX2ZsYWdzOwkvKiBwZXItY29sdW1uIENTViBGTiBmbGFncyAqLwog CWJvb2wJCWNvbnZlcnRfc2VsZWN0aXZlbHk7CS8qIGRvIHNlbGVjdGl2ZSBiaW5hcnkgY29u dmVyc2lvbj8gKi8KIAlMaXN0CSAgICpjb252ZXJ0X3NlbGVjdDsgLyogbGlzdCBvZiBjb2x1 bW4gbmFtZXMgKGNhbiBiZSBOSUwpICovCisJTGlzdAkgICAqbnVsbF9vbl9lcnJvcjsJLyog bGlzdCBvZiBjb2x1bW4gbmFtZXMgKi8KKwlib29sCSAgICpudWxsX29uX2Vycm9yX2ZsYWdz OwkvKiBwZXItY29sdW1uIE5PRSBmbGFncyAqLwogfSBDb3B5Rm9ybWF0T3B0aW9uczsKIAog LyogVGhlc2UgYXJlIHByaXZhdGUgaW4gY29tbWFuZHMvY29weVtmcm9tfHRvXS5jICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dAppbmRleCAzZmFkMWM1MmQxZi4uODI4Mzlk MmY2N2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dApAQCAtMjQwLDMgKzI0 MCwxOCBAQCBTRUxFQ1QgKiBGUk9NIGhlYWRlcl9jb3B5dGVzdCBPUkRFUiBCWSBhOwogKDUg cm93cykKIAogZHJvcCB0YWJsZSBoZWFkZXJfY29weXRlc3Q7CitjcmVhdGUgdGFibGUgbnVs bF9vbl9lcnJvcl9jb3B5dGVzdChpIGludCwgZiBmbG9hdDQpOworY29weSBudWxsX29uX2Vy cm9yX2NvcHl0ZXN0IGZyb20gc3RkaW4gd2l0aCAobnVsbF9vbl9lcnJvciAoaSwgZikpOwor RVJST1I6ICBpbnB1dCBmdW5jdGlvbiBmb3IgZGF0YXR5cGUgImludGVnZXIiIGRvZXMgbm90 IHN1cHBvcnQgZXJyb3IgaGFuZGxpbmcKK2NvcHkgbnVsbF9vbl9lcnJvcl9jb3B5dGVzdCBm cm9tIHN0ZGluIHdpdGggKG51bGxfb25fZXJyb3IgKGYpKTsKK2NvcHkgbnVsbF9vbl9lcnJv cl9jb3B5dGVzdCBmcm9tIHN0ZGluIHdpdGggKG51bGxfb25fZXJyb3IgKGYpKTsKK0VSUk9S OiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIKK0NPTlRF WFQ6ICBDT1BZIG51bGxfb25fZXJyb3JfY29weXRlc3QsIGxpbmUgMiwgY29sdW1uIGk6ICJl cnIiCitzZWxlY3QgKiBmcm9tIG51bGxfb25fZXJyb3JfY29weXRlc3Q7CisgaSB8ICBmICAK Ky0tLSstLS0tLQorIDEgfCAyLjMKKyAyIHwgICAgCisoMiByb3dzKQorCitkcm9wIHRhYmxl IG51bGxfb25fZXJyb3JfY29weXRlc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb3B5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCmluZGV4IDI4 NTAyMmUwN2M2Li45MTRlMjlkNWJhMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvY29weS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKQEAgLTI2 OCwzICsyNjgsMTYgQEAgYQljCWIKIAogU0VMRUNUICogRlJPTSBoZWFkZXJfY29weXRlc3Qg T1JERVIgQlkgYTsKIGRyb3AgdGFibGUgaGVhZGVyX2NvcHl0ZXN0OworCitjcmVhdGUgdGFi bGUgbnVsbF9vbl9lcnJvcl9jb3B5dGVzdChpIGludCwgZiBmbG9hdDQpOworY29weSBudWxs X29uX2Vycm9yX2NvcHl0ZXN0IGZyb20gc3RkaW4gd2l0aCAobnVsbF9vbl9lcnJvciAoaSwg ZikpOworY29weSBudWxsX29uX2Vycm9yX2NvcHl0ZXN0IGZyb20gc3RkaW4gd2l0aCAobnVs bF9vbl9lcnJvciAoZikpOworMQkyLjMKKzIJZXJyCitcLgorY29weSBudWxsX29uX2Vycm9y X2NvcHl0ZXN0IGZyb20gc3RkaW4gd2l0aCAobnVsbF9vbl9lcnJvciAoZikpOworMQkyLjMK K2Vycgk0LjUKK1wuCitzZWxlY3QgKiBmcm9tIG51bGxfb25fZXJyb3JfY29weXRlc3Q7Citk cm9wIHRhYmxlIG51bGxfb25fZXJyb3JfY29weXRlc3Q7Ci0tIAoyLjI1LjEKCg== --------------bddYLuM0KIo59nyz0PEkfi85--