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 1pZSnd-0004X0-Bz for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Mar 2023 08:35:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pZSnc-0004YE-5h for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Mar 2023 08:35:56 +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 1pZSnY-0004Y4-Kl for pgsql-hackers@lists.postgresql.org; Tue, 07 Mar 2023 08:35:55 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pZSnR-0002HY-Sw for pgsql-hackers@postgresql.org; Tue, 07 Mar 2023 08:35:48 +0000 Received: by mail-lf1-x129.google.com with SMTP id r27so16050956lfe.10 for ; Tue, 07 Mar 2023 00:35:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678178144; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9/4r+gmVS+IBf7BryDdTbkOcZVanC5B5q1qfbvT4Qnk=; b=dv49wLMM/qblrdT0mAzq2IFzRhOc20DPsfIFxMxKYWleNMqY2KW6k+gjdvd1KpFykU U8BRHxi6fOw69+gL8uZ59pU6s6fDSNJZZvx2IuyzcJnB1dYyeql9PAdHC5u5weeVJ55T ZO1FEmZxcEy3etUBPQSNY5f5/no5IPHRcKtyubDFUUdjZ7exVNWD11ZtVIhoZdmm6yt5 +LIPB5ckU2fVoTtelT5AkhBp+LmR1YSQ9gfl5B7aoF0mUzNar1sPAD/uC0GbRxpUBL4C Lu+Amur15KMe8x2/NPlbXP7ppubpEbZID9OjzjHmvYJrlbu7/ytYQh4+6GFhGMmYn4VU OU5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678178144; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9/4r+gmVS+IBf7BryDdTbkOcZVanC5B5q1qfbvT4Qnk=; b=CEpoUDHJ1/OjgY17rv/EwguKltDzUIooDiftVPNTYM1BkX/2zh3Bq3IikmXy5JUuoU dv15e/s5+9U9VN72Qg74qnLpa1P/ZV991sGSUOomdx6PczMxWcBdl+L+aZYvC6vu6CLR pYnXT9uX6biR8va7jj9pBjRP1+j91P6jqHsyGi5kwsmFMPVTC7VOf7LuRO353QXUItui jNr5TlI2a4jriJ1Ky1F9yxxq+R6XGRxcO09R7TJOeWJrpFfjgyefy7r+V9zxbxsVuE+W /L1T4lFjFL1Gbw2/gZJ5OtcsngQxOCgkjWHUpHhO9z0q/ZUE4piW9g9fSdwFKHUhEnQm jQpg== X-Gm-Message-State: AO0yUKWA5Dtz6rihdjPt5izGTUFqHLGvFs60edmCPhjePS4w8vAbUOG8 UflPxlSrWVZpob2aEldIv0ts4IxZUb1fvkvJk1Q= X-Google-Smtp-Source: AK7set96BE6seqtoWqNi0WlkFh1TdEbnRlBKPhp2Qy6K+rulpDKpFft464UZnxX5VD4MW6P3mUKROMB2cEC4avnWubw= X-Received: by 2002:a05:6512:281f:b0:4db:1e7d:5d42 with SMTP id cf31-20020a056512281f00b004db1e7d5d42mr8382266lfb.0.1678178144233; Tue, 07 Mar 2023 00:35:44 -0800 (PST) MIME-Version: 1.0 References: <686e46d6718f9535bc39fac7cad7408b@oss.nttdata.com> <769423519e16d18a1e7611c6931da58b@oss.nttdata.com> <20230205233723.xw5z5zmeyc57ezq3@alap3.anarazel.de> <2587470.1675660337@sss.pgh.pa.us> <483E1B59-4A80-450B-8685-7CC12762FD5A@anarazel.de> <2592557.1675663234@sss.pgh.pa.us> <39143e83571d59dfc04c75707fa0ea5a@oss.nttdata.com> <0DE0602F-CC12-40ED-B259-3AB91FB02C3B@yesql.se> <8ad8492ff9fae3481d87c7aab4e0aed0@oss.nttdata.com> In-Reply-To: <8ad8492ff9fae3481d87c7aab4e0aed0@oss.nttdata.com> From: Damir Belyalov Date: Tue, 7 Mar 2023 11:35:32 +0300 Message-ID: Subject: Re: POC PATCH: copy from ... exceptions to: (was Re: VLDB Features) To: torikoshia Cc: Daniel Gustafsson , PostgreSQL Hackers , Andres Freund , Danil Anisimow , HukuToc@gmail.com, a.lepikhov@postgrespro.ru, tgl@sss.pgh.pa.us Content-Type: multipart/mixed; boundary="0000000000002848dc05f64b4c52" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002848dc05f64b4c52 Content-Type: multipart/alternative; boundary="0000000000002848db05f64b4c50" --0000000000002848db05f64b4c50 Content-Type: text/plain; charset="UTF-8" > > FWIW, Greenplum has a similar construct (but which also logs the errors > in the > db) where data type errors are skipped as long as the number of errors > don't > exceed a reject limit. If the reject limit is reached then the COPY > fails: > > > > LOG ERRORS [ SEGMENT REJECT LIMIT [ ROWS | PERCENT ]] > > > IIRC the gist of this was to catch then the user copies the wrong input > data or > plain has a broken file. Rather than finding out after copying n rows > which > are likely to be garbage the process can be restarted. > I think this is a matter for discussion. The same question is: "Where to log errors to separate files or to the system logfile?". IMO it's better for users to log short-detailed error message to system logfile and not output errors to the terminal. This version of the patch has a compiler error in the error message: > Yes, corrected it. Changed "ignored_errors" to int64 because "processed" (used for counting copy rows) is int64. I felt just logging "Error: %ld" would make people wonder the meaning of > the %ld. Logging something like ""Error: %ld data type errors were > found" might be clearer. > Thanks. For more clearance change the message to: "Errors were found: %". Regards, Damir Belyalov Postgres Professional --0000000000002848db05f64b4c50 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
FWIW, Greenplum has a similar construct (but which also = logs the errors
in the
db) where data type errors are skipped as lon= g as the number of errors
don't
exceed a reject limit.=C2=A0 If = the reject limit is reached then the COPY
fails:
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0LOG ERRORS [ SEGMENT REJECT LIMIT <count&= gt; [ ROWS | PERCENT ]]
>
IIRC the gist of this was to catch then the user copies the wrong = input
data or
plain has a broken file.=C2=A0 Rather than finding out= after copying n rows
which
are likely to be garbage the process can= be restarted.
=C2=A0
I think this is a matt= er for discussion. The same question is: "Where to log errors to separ= ate files or to the system logfile?".
IMO it's better fo= r users to log short-detailed error message to system logfile and not outpu= t errors to the terminal.=C2=A0
=C2=A0

This version of the patch has a= compiler error in the error message:
Yes, corrected i= t. Changed "ignored_errors" to int64 because "processed"= ; (used for counting copy rows) is int64.


I felt just logging "Error: %ld" would make people wonder the mea= ning of
the %ld. Logging something like ""Error: %ld data type errors wer= e
found" might be clearer.
=C2=A0
Thanks.= For more clearance change=C2=A0the=C2=A0message to: "Errors were foun= d: %".=C2=A0

Regards, Damir Belyalov
Postgres P= rofessional
--0000000000002848db05f64b4c50-- --0000000000002848dc05f64b4c52 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Add-COPY-option-IGNORE_DATATYPE_ERRORS.patch" Content-Disposition: attachment; filename="v3-0001-Add-COPY-option-IGNORE_DATATYPE_ERRORS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lexzslpy0 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9jb3B5LnNnbWwKaW5kZXggYzI1YjUyZDBjYi4uNzA2YjkyOTk0NyAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwK QEAgLTM0LDYgKzM0LDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50 YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogCiAgICAgRk9STUFUIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXRfbmFtZTwvcmVwbGFjZWFibGU+CiAg ICAgRlJFRVpFIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxh Y2VhYmxlPiBdCisgICAgSUdOT1JFX0RBVEFUWVBFX0VSUk9SUyBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgIERFTElNSVRFUiAnPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRlbGltaXRlcl9jaGFyYWN0ZXI8L3JlcGxhY2Vh YmxlPicKICAgICBOVUxMICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVsbF9zdHJp bmc8L3JlcGxhY2VhYmxlPicKICAgICBIRUFERVIgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IHwgTUFUQ0ggXQpAQCAtMjMzLDYgKzIzNCwxNyBA QCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxh Y2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPklHTk9SRV9EQVRB VFlQRV9FUlJPUlM8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICBEcm9wcyByb3dzIHRoYXQgY29udGFpbiBtYWxmb3JtZWQgZGF0YSB3aGlsZSBjb3B5 aW5nLiBUaGVzZSBhcmUgcm93cworICAgICAgd2l0aCBjb2x1bW5zIHdoZXJlIHRoZSBkYXRhIHR5 cGUncyBpbnB1dC1mdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IuCisgICAgICBPdXRwdXRzIHdhcm5p bmdzIGFib3V0IHJvd3Mgd2l0aCBpbmNvcnJlY3QgZGF0YSB0byBzeXN0ZW0gbG9nZmlsZS4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZh cmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5ERUxJTUlURVI8L2xpdGVyYWw+PC90ZXJt PgogICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHku YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBlMzRmNTgzZWE3Li4wMzM0ODk0 MDE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC00MTAsNiArNDEwLDcgQEAgUHJvY2Vzc0NvcHlPcHRp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlib29sCQlmb3JtYXRfc3BlY2lmaWVkID0gZmFsc2U7 CiAJYm9vbAkJZnJlZXplX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCWhlYWRlcl9zcGVjaWZp ZWQgPSBmYWxzZTsKKwlib29sCQlpZ25vcmVfZGF0YXR5cGVfZXJyb3JzX3NwZWNpZmllZD0gZmFs c2U7CiAJTGlzdENlbGwgICAqb3B0aW9uOwogCiAJLyogU3VwcG9ydCBleHRlcm5hbCB1c2UgZm9y IG9wdGlvbiBzYW5pdHkgY2hlY2tpbmcgKi8KQEAgLTQ0OSw2ICs0NTAsMTMgQEAgUHJvY2Vzc0Nv cHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCWZyZWV6ZV9zcGVjaWZpZWQgPSB0cnVl OwogCQkJb3B0c19vdXQtPmZyZWV6ZSA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVs c2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImlnbm9yZV9kYXRhdHlwZV9lcnJvcnMiKSA9 PSAwKQorCQl7CisJCQlpZiAoaWdub3JlX2RhdGF0eXBlX2Vycm9yc19zcGVjaWZpZWQpCisJCQkJ ZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CisJCQlpZ25vcmVfZGF0YXR5 cGVfZXJyb3JzX3NwZWNpZmllZCA9IHRydWU7CisJCQlvcHRzX291dC0+aWdub3JlX2RhdGF0eXBl X2Vycm9ycyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgImRlbGltaXRlciIpID09IDApCiAJCXsKIAkJCWlmIChvcHRzX291dC0+ ZGVsaW0pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCAyOWNkMWNmNGE2Li5mYWNmYzQ0ZGVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTk0OSwxMCArOTQ5LDE0IEBAIENvcHlGcm9t KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29u dGV4dF9zdGFjazsKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOwogCisJaWYg KGNzdGF0ZS0+b3B0cy5pZ25vcmVfZGF0YXR5cGVfZXJyb3JzKQorCQljc3RhdGUtPmlnbm9yZWRf ZXJyb3JzID0gMDsKKwogCWZvciAoOzspCiAJewogCQlUdXBsZVRhYmxlU2xvdCAqbXlzbG90Owog CQlib29sCQlza2lwX3R1cGxlOworCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vy cm9yU2F2ZUNvbnRleHR9OwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTk4NSw5 ICs5ODksMjYgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAKIAkJRXhlY0NsZWFy VHVwbGUobXlzbG90KTsKIAorCQlpZiAoY3N0YXRlLT5vcHRzLmlnbm9yZV9kYXRhdHlwZV9lcnJv cnMpCisJCXsKKwkJCWVzY29udGV4dC5kZXRhaWxzX3dhbnRlZCA9IHRydWU7CisJCQljc3RhdGUt PmVzY29udGV4dCA9IGVzY29udGV4dDsKKwkJfQorCiAJCS8qIERpcmVjdGx5IHN0b3JlIHRoZSB2 YWx1ZXMvbnVsbHMgYXJyYXkgaW4gdGhlIHNsb3QgKi8KIAkJaWYgKCFOZXh0Q29weUZyb20oY3N0 YXRlLCBlY29udGV4dCwgbXlzbG90LT50dHNfdmFsdWVzLCBteXNsb3QtPnR0c19pc251bGwpKQor CQl7CisJCQlpZiAoY3N0YXRlLT5vcHRzLmlnbm9yZV9kYXRhdHlwZV9lcnJvcnMgJiYgY3N0YXRl LT5pZ25vcmVkX2Vycm9ycyA+IDApCisJCQkJZXJlcG9ydChXQVJOSU5HLCBlcnJtc2coIkVycm9y cyB3ZXJlIGZvdW5kOiAlbGxkIiwgKGxvbmcgbG9uZykgY3N0YXRlLT5pZ25vcmVkX2Vycm9ycykp OwogCQkJYnJlYWs7CisJCX0KKworCQkvKiBTb2Z0IGVycm9yIG9jY3VyZWQsIHNraXAgdGhpcyB0 dXBsZSAqLworCQlpZiAoY3N0YXRlLT5lc2NvbnRleHQuZXJyb3Jfb2NjdXJyZWQpCisJCXsKKwkJ CUV4ZWNDbGVhclR1cGxlKG15c2xvdCk7CisJCQljb250aW51ZTsKKwkJfQogCiAJCUV4ZWNTdG9y ZVZpcnR1YWxUdXBsZShteXNsb3QpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMK aW5kZXggOTFiNTY0YzJiYy4uOWMzNmIwZGM4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weWZyb21wYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t cGFyc2UuYwpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRl ICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0 L3BnX2Jzd2FwLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKQEAgLTkzOCwxMCArOTM5 LDIzIEBAIE5leHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LAogCiAJCQljc3RhdGUtPmN1cl9hdHRuYW1lID0gTmFtZVN0cihhdHQtPmF0dG5hbWUp OwogCQkJY3N0YXRlLT5jdXJfYXR0dmFsID0gc3RyaW5nOwotCQkJdmFsdWVzW21dID0gSW5wdXRG dW5jdGlvbkNhbGwoJmluX2Z1bmN0aW9uc1ttXSwKLQkJCQkJCQkJCQkgIHN0cmluZywKLQkJCQkJ CQkJCQkgIHR5cGlvcGFyYW1zW21dLAotCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpOworCisJ CQkvKiBJZiBJR05PUkVfREFUQVRZUEVfRVJST1JTIGlzIGVuYWJsZWQgc2tpcCByb3dzIHdpdGgg ZGF0YXR5cGUgZXJyb3JzICovCisJCQlpZiAoIUlucHV0RnVuY3Rpb25DYWxsU2FmZSgmaW5fZnVu Y3Rpb25zW21dLAorCQkJCQkJCQkJICAgc3RyaW5nLAorCQkJCQkJCQkJICAgdHlwaW9wYXJhbXNb bV0sCisJCQkJCQkJCQkgICBhdHQtPmF0dHR5cG1vZCwKKwkJCQkJCQkJCSAgIChOb2RlICopICZj c3RhdGUtPmVzY29udGV4dCwKKwkJCQkJCQkJCSAgICZ2YWx1ZXNbbV0pKQorCQkJeworCQkJCWNz dGF0ZS0+aWdub3JlZF9lcnJvcnMrKzsKKworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJZXJybXNn KCIlcyIsIGNzdGF0ZS0+ZXNjb250ZXh0LmVycm9yX2RhdGEtPm1lc3NhZ2UpKTsKKworCQkJCXJl dHVybiB0cnVlOworCQkJfQorCiAJCQlpZiAoc3RyaW5nICE9IE5VTEwpCiAJCQkJbnVsbHNbbV0g PSBmYWxzZTsKIAkJCWNzdGF0ZS0+Y3VyX2F0dG5hbWUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXgg YTAxMzgzODJhMS4uZDc5ZDI5M2MwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC03MDEsNyArNzAxLDcgQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUhBTkRMRVIgSEFWSU5HIEhFQURFUl9QIEhPTEQg SE9VUl9QCiAKLQlJREVOVElUWV9QIElGX1AgSUxJS0UgSU1NRURJQVRFIElNTVVUQUJMRSBJTVBM SUNJVF9QIElNUE9SVF9QIElOX1AgSU5DTFVERQorCUlERU5USVRZX1AgSUZfUCBJR05PUkVfREFU QVRZUEVfRVJST1JTIElMSUtFIElNTUVESUFURSBJTU1VVEFCTEUgSU1QTElDSVRfUCBJTVBPUlRf UCBJTl9QIElOQ0xVREUKIAlJTkNMVURJTkcgSU5DUkVNRU5UIElOREVYIElOREVYRVMgSU5IRVJJ VCBJTkhFUklUUyBJTklUSUFMTFkgSU5MSU5FX1AKIAlJTk5FUl9QIElOT1VUIElOUFVUX1AgSU5T RU5TSVRJVkUgSU5TRVJUIElOU1RFQUQgSU5UX1AgSU5URUdFUgogCUlOVEVSU0VDVCBJTlRFUlZB TCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgpAQCAtMzM3OCw2ICszMzc4LDEwIEBA IGNvcHlfb3B0X2l0ZW06CiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJmcmVlemUiLCAo Tm9kZSAqKSBtYWtlQm9vbGVhbih0cnVlKSwgQDEpOwogCQkJCX0KKwkJCXwgSUdOT1JFX0RBVEFU WVBFX0VSUk9SUworCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiaWdub3JlX2RhdGF0eXBl X2Vycm9ycyIsIChOb2RlICopbWFrZUJvb2xlYW4odHJ1ZSksIEAxKTsKKwkJCQl9CiAJCQl8IERF TElNSVRFUiBvcHRfYXMgU2NvbnN0CiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJkZWxp bWl0ZXIiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCQzKSwgQDEpOwpAQCAtMTY4MjEsNiArMTY4MjUs NyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IEhPVVJfUAogCQkJfCBJREVOVElUWV9QCiAJ CQl8IElGX1AKKwkJCXwgSUdOT1JFX0RBVEFUWVBFX0VSUk9SUwogCQkJfCBJTU1FRElBVEUKIAkJ CXwgSU1NVVRBQkxFCiAJCQl8IElNUExJQ0lUX1AKQEAgLTE3Mzc1LDYgKzE3MzgwLDcgQEAgYmFy ZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBIT0xECiAJCQl8IElERU5USVRZX1AKIAkJCXwgSUZfUAor CQkJfCBJR05PUkVfREFUQVRZUEVfRVJST1JTCiAJCQl8IElMSUtFCiAJCQl8IElNTUVESUFURQog CQkJfCBJTU1VVEFCTEUKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBi L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwppbmRleCA4ZjEyYWY3OTliLi4wZjI5MGNkNmZm IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5jCkBAIC0yODU3LDcgKzI4NTcsOCBAQCBwc3FsX2NvbXBsZXRpb24o Y29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCWVsc2UgaWYgKE1hdGNoZXMo IkNPUFl8XFxjb3B5IiwgTWF0Y2hBbnksICJGUk9NfFRPIiwgTWF0Y2hBbnksICJXSVRIIiwgIigi KSkKIAkJQ09NUExFVEVfV0lUSCgiRk9STUFUIiwgIkZSRUVaRSIsICJERUxJTUlURVIiLCAiTlVM TCIsCiAJCQkJCSAgIkhFQURFUiIsICJRVU9URSIsICJFU0NBUEUiLCAiRk9SQ0VfUVVPVEUiLAot CQkJCQkgICJGT1JDRV9OT1RfTlVMTCIsICJGT1JDRV9OVUxMIiwgIkVOQ09ESU5HIik7CisJCQkJ CSAgIkZPUkNFX05PVF9OVUxMIiwgIkZPUkNFX05VTEwiLCAiRU5DT0RJTkciLAorCQkJCQkgICJJ R05PUkVfREFUQVRZUEVfRVJST1JTIik7CiAKIAkvKiBDb21wbGV0ZSBDT1BZIDxzdGg+IEZST018 VE8gZmlsZW5hbWUgV0lUSCAoRk9STUFUICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiQ09QWXxcXGNv cHkiLCBNYXRjaEFueSwgIkZST018VE8iLCBNYXRjaEFueSwgIldJVEgiLCAiKCIsICJGT1JNQVQi KSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHkuaAppbmRleCA4ZTVmNmZmMTQ4Li5hN2ViMGY4ODgzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weS5oCkBAIC00Miw2ICs0Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25z CiAJCQkJCQkJCSAqIC0xIGlmIG5vdCBzcGVjaWZpZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyog YmluYXJ5IGZvcm1hdD8gKi8KIAlib29sCQlmcmVlemU7CQkJLyogZnJlZXplIHJvd3Mgb24gbG9h ZGluZz8gKi8KKwlib29sCQlpZ25vcmVfZGF0YXR5cGVfZXJyb3JzOyAgLyogaWdub3JlIHJvd3Mg d2l0aCBkYXRhdHlwZSBlcnJvcnMgKi8KIAlib29sCQljc3ZfbW9kZTsJCS8qIENvbW1hIFNlcGFy YXRlZCBWYWx1ZSBmb3JtYXQ/ICovCiAJQ29weUhlYWRlckNob2ljZSBoZWFkZXJfbGluZTsJLyog aGVhZGVyIGxpbmU/ICovCiAJY2hhcgkgICAqbnVsbF9wcmludDsJCS8qIE5VTEwgbWFya2VyIHN0 cmluZyAoc2VydmVyIGVuY29kaW5nISkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHlmcm9tX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9p bnRlcm5hbC5oCmluZGV4IDdiMWM0MzI3YmQuLmI5Y2U2MzZmN2IgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvY29weWZyb21faW50ZXJuYWwuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAi Y29tbWFuZHMvY29weS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKKyNpbmNsdWRl ICJub2Rlcy9taXNjbm9kZXMuaCIKIAogLyoKICAqIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVudCBz b3VyY2UgY2FzZXMgd2UgbmVlZCB0byB3b3JyeSBhYm91dCBhdApAQCAtOTQsNiArOTUsOCBAQCB0 eXBlZGVmIHN0cnVjdCBDb3B5RnJvbVN0YXRlRGF0YQogCUF0dHJOdW1iZXIJbnVtX2RlZmF1bHRz OwogCUZtZ3JJbmZvICAgKmluX2Z1bmN0aW9uczsJLyogYXJyYXkgb2YgaW5wdXQgZnVuY3Rpb25z IGZvciBlYWNoIGF0dHJzICovCiAJT2lkCQkgICAqdHlwaW9wYXJhbXM7CS8qIGFycmF5IG9mIGVs ZW1lbnQgdHlwZXMgZm9yIGluX2Z1bmN0aW9ucyAqLworCUVycm9yU2F2ZUNvbnRleHQgZXNjb250 ZXh0OyAvKiBzb2Z0IGVycm9yIHRyYXBwZXIgZHVyaW5nIGluX2Z1bmN0aW9ucyBleGVjdXRpb24g Ki8KKwlpbnQ2NAkJaWdub3JlZF9lcnJvcnM7CS8qIHRvdGFsIG51bWJlciBvZiBpZ25vcmVkIGVy cm9ycyAqLwogCWludAkJICAgKmRlZm1hcDsJCQkvKiBhcnJheSBvZiBkZWZhdWx0IGF0dCBudW1i ZXJzICovCiAJRXhwclN0YXRlICoqZGVmZXhwcnM7CQkvKiBhcnJheSBvZiBkZWZhdWx0IGF0dCBl eHByZXNzaW9ucyAqLwogCWJvb2wJCXZvbGF0aWxlX2RlZmV4cHJzOwkvKiBpcyBhbnkgb2YgZGVm ZXhwcnMgdm9sYXRpbGU/ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0 LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggYmIzNjIxM2U2Zi4uMWQ3Zjll ZmJjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9p bmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMTk2LDYgKzE5Niw3IEBAIFBHX0tFWVdPUkQoImhv bGQiLCBIT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJo b3VyIiwgSE9VUl9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgi aWRlbnRpdHkiLCBJREVOVElUWV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJpZiIsIElGX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BH X0tFWVdPUkQoImlnbm9yZV9kYXRhdHlwZV9lcnJvcnMiLCBJR05PUkVfREFUQVRZUEVfRVJST1JT LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpbGlrZSIsIElM SUtFLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiaW1t ZWRpYXRlIiwgSU1NRURJQVRFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJpbW11dGFibGUiLCBJTU1VVEFCTEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKaW5kZXggMDkwZWY2YzdhOC4uNTI1 ZTNiYzQ1NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKQEAgLTY2Niw2ICs2NjYs MTcgQEAgU0VMRUNUICogRlJPTSBpbnN0ZWFkX29mX2luc2VydF90Ymw7CiAoMiByb3dzKQogCiBD T01NSVQ7CistLSB0ZXN0cyBmb3IgSUdOT1JFX0RBVEFUWVBFX0VSUk9SUyBvcHRpb24KK0NSRUFU RSBUQUJMRSBjaGVja19pZ25fZXJyIChuIGludCwgbSBpbnRbXSwgayBpbnQpOworQ09QWSBjaGVj a19pZ25fZXJyIEZST00gU1RESU4gV0lUSCBJR05PUkVfREFUQVRZUEVfRVJST1JTOworV0FSTklO RzogIEVycm9ycyB3ZXJlIGZvdW5kOiA0CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2lnbl9lcnI7Cisg biB8ICBtICB8IGsgCistLS0rLS0tLS0rLS0tCisgMSB8IHsxfSB8IDEKKyA1IHwgezV9IHwgNQor KDIgcm93cykKKwogLS0gY2xlYW4gdXAKIERST1AgVEFCTEUgZm9yY2V0ZXN0OwogRFJPUCBUQUJM RSB2aXN0ZXN0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsCmluZGV4IGIwZGU4MmMzYWEuLjM4MGFkZmNl OTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKQEAgLTQ2NCw2ICs0NjQsMTggQEAgdGVzdDEKIFNF TEVDVCAqIEZST00gaW5zdGVhZF9vZl9pbnNlcnRfdGJsOwogQ09NTUlUOwogCistLSB0ZXN0cyBm b3IgSUdOT1JFX0RBVEFUWVBFX0VSUk9SUyBvcHRpb24KK0NSRUFURSBUQUJMRSBjaGVja19pZ25f ZXJyIChuIGludCwgbSBpbnRbXSwgayBpbnQpOworQ09QWSBjaGVja19pZ25fZXJyIEZST00gU1RE SU4gV0lUSCBJR05PUkVfREFUQVRZUEVfRVJST1JTOworMQl7MX0JMQorYQl7Mn0JMgorMwl7M30J MzMzMzMzMzMzMworNAl7YSwgNH0JNAorCis1CXs1fQk1CitcLgorU0VMRUNUICogRlJPTSBjaGVj a19pZ25fZXJyOworCiAtLSBjbGVhbiB1cAogRFJPUCBUQUJMRSBmb3JjZXRlc3Q7CiBEUk9QIFRB QkxFIHZpc3Rlc3Q7Cg== --0000000000002848dc05f64b4c52--