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 1nXHCV-00023X-Km for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Mar 2022 06:44:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nXHCT-00083t-Fe for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Mar 2022 06:44:01 +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 1nXHCS-00083k-Ml for pgsql-hackers@lists.postgresql.org; Thu, 24 Mar 2022 06:44:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nXHCO-0001vZ-7l for pgsql-hackers@postgresql.org; Thu, 24 Mar 2022 06:43:59 +0000 Received: from [192.168.129.212] (unknown [91.205.25.104]) (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 CC71521C3897; Thu, 24 Mar 2022 09:43:52 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1648104233; bh=MmMIA6Yc9QX11LFVO/DUEfWnUbH4/a7d85soVyG2phI=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=dpl0B2tPP7nfiCtwrqMXhHXPpMhMcCE+KwIcDeJm4rKK/X3k41GGBQohrTO179Kk/ CMIVZeKZQTy6wfEpvOSuMtaSWjQsByhonX1zD5hnNH/oSDhfYkwBw6TfqnavuQv1qv dqnwphc4EFrn+qPf5Jxhd4IEjyudCS72JKL6dgYI= Content-Type: multipart/mixed; boundary="------------pKWQ2uQXFEw9tmIO0oTw7moS" Message-ID: <45ad1b94-339b-a841-8885-67ebe6fc5bc1@postgrespro.ru> Date: Thu, 24 Mar 2022 11:43:37 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Fast COPY FROM based on batch insert Content-Language: en-US To: Etsuro Fujita Cc: Justin Pryzby , Zhihong Yu , Amit Langote , tanghy.fnst@fujitsu.com, Ashutosh Bapat , Pg Hackers , Tomas Vondra , houzj.fnst@fujitsu.com References: <20210304203949.GQ29832@telsasoft.com> <20210323032322.GW4203@telsasoft.com> <20210409004956.GN6592@telsasoft.com> From: "Andrey V. Lepikhov" Organization: Postgres Professional In-Reply-To: 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. --------------pKWQ2uQXFEw9tmIO0oTw7moS Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 3/22/22 06:54, Etsuro Fujita wrote: > On Fri, Jun 4, 2021 at 5:26 PM Andrey Lepikhov > wrote: >> We still have slow 'COPY FROM' operation for foreign tables in current >> master. >> Now we have a foreign batch insert operation And I tried to rewrite the >> patch [1] with this machinery. > > The patch has been rewritten to something essentially different, but > no one reviewed it. (Tsunakawa-san gave some comments without looking > at it, though.) So the right status of the patch is “Needs review”, > rather than “Ready for Committer”? Anyway, here are a few review > comments from me: > > * I don’t think this assumption is correct: > > @@ -359,6 +386,12 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo, > (resultRelInfo->ri_TrigDesc->trig_insert_after_row || > resultRelInfo->ri_TrigDesc->trig_insert_new_table)) > { > + /* > + * AFTER ROW triggers aren't allowed with the foreign bulk insert > + * method. > + */ > + Assert(resultRelInfo->ri_RelationDesc->rd_rel->relkind != > RELKIND_FOREIGN_TABLE); > + > > In postgres_fdw we disable foreign batch insert when the target table > has AFTER ROW triggers, but the core allows it even in that case. No? Agree > * To allow foreign multi insert, the patch made an invasive change to > the existing logic to determine whether to use multi insert for the > target relation, adding a new member ri_usesMultiInsert to the > ResultRelInfo struct, as well as introducing a new function > ExecMultiInsertAllowed(). But I’m not sure we really need such a > change. Isn’t it reasonable to *adjust* the existing logic to allow > foreign multi insert when possible? Of course, such approach would look much better, if we implemented it. I'll ponder how to do it. > I didn’t finish my review, but I’ll mark this as “Waiting on Author”. I rebased the patch onto current master. Now it works correctly. I'll mark it as "Waiting for review". -- regards, Andrey Lepikhov Postgres Professional --------------pKWQ2uQXFEw9tmIO0oTw7moS Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Implementation-of-a-Bulk-COPY-FROM.patch" Content-Disposition: attachment; filename="v3-0001-Implementation-of-a-Bulk-COPY-FROM.patch" Content-Transfer-Encoding: base64 RnJvbSAyZDUxZDBmNWQ5NGEzZTRiMzQwMDcxNGI1ODQxMjI4ZDE4OTZmYjU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCA0IEp1biAyMDIxIDEzOjIxOjQzICswNTAw ClN1YmplY3Q6IFtQQVRDSF0gSW1wbGVtZW50YXRpb24gb2YgYSBCdWxrIENPUFkgRlJPTSBv cGVyYXRpb24gaW50byBmb3JlaWduCiB0YWJsZS4KCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgIDQ1ICsrKy0KIGNvbnRyaWIvcG9zdGdy ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA0NyArKysrCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgICAgICAgfCAyMTAgKysrKysrKystLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAgICAgICAg fCAgNDUgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgICAg ICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgg ICAgICB8ICAxMCAtCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg ICAgICAgIHwgICA1ICstCiA4IGZpbGVzIGNoYW5nZWQsIDIzNyBpbnNlcnRpb25zKCspLCAx MzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVk L3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggZjIxMGY5MTE4OC4uYTgwMzAyOWYyZiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBA IC04NDE1LDYgKzg0MTUsNyBAQCBkcm9wIHRhYmxlIGxvY3QyOwogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogLS0gdGVzdCBDT1BZIEZST00KIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRlIHRhYmxlIGxv YzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSByZW0yIChmMSBp bnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25hbWUgJ2xvYzIn KTsKQEAgLTg0MzcsNyArODQzOCw3IEBAIGNvcHkgcmVtMiBmcm9tIHN0ZGluOyAtLSBFUlJP UgogRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAibG9jMiIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAibG9jMl9mMXBvc2l0aXZlIgogREVUQUlMOiAgRmFpbGluZyByb3cgY29u dGFpbnMgKC0xLCB4eXp6eSkuCiBDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNF UlQgSU5UTyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKQotQ09QWSByZW0y LCBsaW5lIDE6ICItMQl4eXp6eSIKK0NPUFkgcmVtMiwgbGluZSAyCiBzZWxlY3QgKiBmcm9t IHJlbTI7CiAgZjEgfCBmMiAgCiAtLS0tKy0tLS0tCkBAIC04NDQ4LDYgKzg0NDksMTkgQEAg c2VsZWN0ICogZnJvbSByZW0yOwogYWx0ZXIgZm9yZWlnbiB0YWJsZSByZW0yIGRyb3AgY29u c3RyYWludCByZW0yX2YxcG9zaXRpdmU7CiBhbHRlciB0YWJsZSBsb2MyIGRyb3AgY29uc3Ry YWludCBsb2MyX2YxcG9zaXRpdmU7CiBkZWxldGUgZnJvbSByZW0yOworY3JlYXRlIHRhYmxl IGZvbyAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBmb28x IChsaWtlIGZvbyk7CitjcmVhdGUgZm9yZWlnbiB0YWJsZSBmZm9vMSBwYXJ0aXRpb24gb2Yg Zm9vIGZvciB2YWx1ZXMgaW4gKDEpCisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxl X25hbWUgJ2ZvbzEnKTsKK2NyZWF0ZSB0YWJsZSBmb28yIChsaWtlIGZvbyk7CitjcmVhdGUg Zm9yZWlnbiB0YWJsZSBmZm9vMiBwYXJ0aXRpb24gb2YgZm9vIGZvciB2YWx1ZXMgaW4gKDIp CisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxlX25hbWUgJ2ZvbzInKTsKK2NyZWF0 ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93KCkgcmV0dXJucyB0cmlnZ2VyIGxhbmd1YWdlIHBs cGdzcWwgYXMgJCQKKwliZWdpbiByYWlzZSBub3RpY2UgJyUnLCBuZXc7IHJldHVybiBuZXc7 IGVuZDsgJCQ7CitjcmVhdGUgdHJpZ2dlciBmZm9vMV9icl90cmlnIGJlZm9yZSBpbnNlcnQg b24gZmZvbzEKKwlmb3IgZWFjaCByb3cgZXhlY3V0ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93 KCk7Citjb3B5IGZvbyBmcm9tIHN0ZGluOworTk9USUNFOiAgKDEpCiAtLSBUZXN0IGxvY2Fs IHRyaWdnZXJzCiBjcmVhdGUgdHJpZ2dlciB0cmlnX3N0bXRfYmVmb3JlIGJlZm9yZSBpbnNl cnQgb24gcmVtMgogCWZvciBlYWNoIHN0YXRlbWVudCBleGVjdXRlIHByb2NlZHVyZSB0cmln Z2VyX2Z1bmMoKTsKQEAgLTg1NTYsNiArODU3MCwzNCBAQCBkcm9wIHRyaWdnZXIgcmVtMl90 cmlnX3Jvd19iZWZvcmUgb24gcmVtMjsKIGRyb3AgdHJpZ2dlciByZW0yX3RyaWdfcm93X2Fm dGVyIG9uIHJlbTI7CiBkcm9wIHRyaWdnZXIgbG9jMl90cmlnX3Jvd19iZWZvcmVfaW5zZXJ0 IG9uIGxvYzI7CiBkZWxldGUgZnJvbSByZW0yOworYWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNv bHVtbiBmMTsKK2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIg ZnJvbSBzdGRpbjsKK0VSUk9SOiAgY29sdW1uICJmMSIgb2YgcmVsYXRpb24gImxvYzIiIGRv ZXMgbm90IGV4aXN0CitDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNFUlQgSU5U TyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKSwgKCQzLCAkNCkKK0NPUFkg cmVtMiwgbGluZSAzCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50OworYWx0 ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVtMjsK KyBmMSB8IGYyIAorLS0tLSstLS0tCisoMCByb3dzKQorCistLSBkcm9wcGVkIGNvbHVtbnMg bG9jYWxseSBhbmQgb24gdGhlIGZvcmVpZ24gc2VydmVyCithbHRlciB0YWJsZSByZW0yIGRy b3AgY29sdW1uIGYxOworYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkg cmVtMiBmcm9tIHN0ZGluOworc2VsZWN0ICogZnJvbSByZW0yOworLS0KKygyIHJvd3MpCisK K2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjE7CithbHRlciB0YWJsZSBsb2MyIGRy b3AgY29sdW1uIGYyOworY29weSByZW0yIGZyb20gc3RkaW47CitzZWxlY3QgKiBmcm9tIHJl bTI7CistLQorKDQgcm93cykKKwogLS0gdGVzdCBDT1BZIEZST00gd2l0aCBmb3JlaWduIHRh YmxlIGNyZWF0ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24KIGNyZWF0ZSB0YWJsZSBsb2Mz IChmMSBpbnQsIGYyIHRleHQpOwogYmVnaW47CkBAIC04NTcyLDYgKzg2MTQsNyBAQCBzZWxl Y3QgKiBmcm9tIHJlbTM7CiAKIGRyb3AgZm9yZWlnbiB0YWJsZSByZW0zOwogZHJvcCB0YWJs ZSBsb2MzOworYWx0ZXIgc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKGRyb3AgYmF0Y2hfc2l6 ZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0IGZvciBUUlVOQ0FURQogLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApp bmRleCA5NWI2YjcxOTJlLi44NDdiODY5NjI5IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMjMyMiw2ICsyMzIyLDcgQEAgZHJvcCB0YWJs ZSBsb2N0MjsKIC0tIHRlc3QgQ09QWSBGUk9NCiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK2FsdGVy IHNlcnZlciBsb29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRl IHRhYmxlIGxvYzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSBy ZW0yIChmMSBpbnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25h bWUgJ2xvYzInKTsKQEAgLTIzNTQsNiArMjM1NSwyMyBAQCBhbHRlciB0YWJsZSBsb2MyIGRy b3AgY29uc3RyYWludCBsb2MyX2YxcG9zaXRpdmU7CiAKIGRlbGV0ZSBmcm9tIHJlbTI7CiAK K2NyZWF0ZSB0YWJsZSBmb28gKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVh dGUgdGFibGUgZm9vMSAobGlrZSBmb28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzEg cGFydGl0aW9uIG9mIGZvbyBmb3IgdmFsdWVzIGluICgxKQorCXNlcnZlciBsb29wYmFjayBv cHRpb25zICh0YWJsZV9uYW1lICdmb28xJyk7CitjcmVhdGUgdGFibGUgZm9vMiAobGlrZSBm b28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzIgcGFydGl0aW9uIG9mIGZvbyBmb3Ig dmFsdWVzIGluICgyKQorCXNlcnZlciBsb29wYmFjayBvcHRpb25zICh0YWJsZV9uYW1lICdm b28yJyk7CitjcmVhdGUgZnVuY3Rpb24gcHJpbnRfbmV3X3JvdygpIHJldHVybnMgdHJpZ2dl ciBsYW5ndWFnZSBwbHBnc3FsIGFzICQkCisJYmVnaW4gcmFpc2Ugbm90aWNlICclJywgbmV3 OyByZXR1cm4gbmV3OyBlbmQ7ICQkOworY3JlYXRlIHRyaWdnZXIgZmZvbzFfYnJfdHJpZyBi ZWZvcmUgaW5zZXJ0IG9uIGZmb28xCisJZm9yIGVhY2ggcm93IGV4ZWN1dGUgZnVuY3Rpb24g cHJpbnRfbmV3X3JvdygpOworCitjb3B5IGZvbyBmcm9tIHN0ZGluOworMQorMgorXC4KKwog LS0gVGVzdCBsb2NhbCB0cmlnZ2VycwogY3JlYXRlIHRyaWdnZXIgdHJpZ19zdG10X2JlZm9y ZSBiZWZvcmUgaW5zZXJ0IG9uIHJlbTIKIAlmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZSBw cm9jZWR1cmUgdHJpZ2dlcl9mdW5jKCk7CkBAIC0yNDU0LDYgKzI0NzIsMzQgQEAgZHJvcCB0 cmlnZ2VyIGxvYzJfdHJpZ19yb3dfYmVmb3JlX2luc2VydCBvbiBsb2MyOwogCiBkZWxldGUg ZnJvbSByZW0yOwogCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOworYWx0ZXIg dGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworMQlm b28KKzIJYmFyCitcLgorCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50Owor YWx0ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVt MjsKKworLS0gZHJvcHBlZCBjb2x1bW5zIGxvY2FsbHkgYW5kIG9uIHRoZSBmb3JlaWduIHNl cnZlcgorYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMTsKK2FsdGVyIHRhYmxlIHJl bTIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIgZnJvbSBzdGRpbjsKKworCitcLgorc2Vs ZWN0ICogZnJvbSByZW0yOworCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOwor YWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGlu OworCisKK1wuCitzZWxlY3QgKiBmcm9tIHJlbTI7CisKIC0tIHRlc3QgQ09QWSBGUk9NIHdp dGggZm9yZWlnbiB0YWJsZSBjcmVhdGVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uCiBjcmVh dGUgdGFibGUgbG9jMyAoZjEgaW50LCBmMiB0ZXh0KTsKIGJlZ2luOwpAQCAtMjQ2Nyw2ICsy NTEzLDcgQEAgY29tbWl0Owogc2VsZWN0ICogZnJvbSByZW0zOwogZHJvcCBmb3JlaWduIHRh YmxlIHJlbTM7CiBkcm9wIHRhYmxlIGxvYzM7CithbHRlciBzZXJ2ZXIgbG9vcGJhY2sgb3B0 aW9ucyAoZHJvcCBiYXRjaF9zaXplKTsKIAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVzdCBm b3IgVFJVTkNBVEUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IGRiNmViNmZhZTcu LmJhNWNjZjg5MDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMzIwLDE4ICsz MjAsNDMgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxzZTsKIAlzYXZlX2N1 cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87CiAKLQkvKgotCSAqIHRhYmxlX211bHRp X2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1v cnkKLQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgotCSAqLwotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0 ZSkpOwotCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCi0JCQkJCSAgIHNsb3RzLAotCQkJCQkgICBudXNlZCwKLQkJCQkJICAgbXljaWQsCi0J CQkJCSAgIHRpX29wdGlvbnMsCi0JCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUp CisJeworCQlpbnQgc2VudCA9IDA7CisKKwkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0Jh dGNoU2l6ZSA+IDEgJiYKKwkJCSAgIHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkV4 ZWNGb3JlaWduQmF0Y2hJbnNlcnQgIT0gTlVMTCAmJgorCQkJICAgcmVzdWx0UmVsSW5mby0+ cmlfRmR3Um91dGluZS0+R2V0Rm9yZWlnbk1vZGlmeUJhdGNoU2l6ZSAhPSBOVUxMKTsKKwor CQkvKiBGbHVzaCBpbnRvIGZvcmVpZ24gdGFibGUgb3IgcGFydGl0aW9uICovCisJCWRvIHsK KwkJCWludCBzaXplID0gKHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSA8IG51c2VkIC0g c2VudCkgPworCQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXplIDogKG51c2VkIC0g c2VudCk7CisJCQlpbnQgaW5zZXJ0ZWQgPSBzaXplOworCisJCQlyZXN1bHRSZWxJbmZvLT5y aV9GZHdSb3V0aW5lLT5FeGVjRm9yZWlnbkJhdGNoSW5zZXJ0KGVzdGF0ZSwKKwkJCQkJCQkJ CQkJCQkJCQkgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJCQkgJnNsb3RzW3NlbnRd LAorCQkJCQkJCQkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJCQkJCQkJCSAmaW5zZXJ0ZWQp OworCQkJc2VudCArPSBzaXplOworCQl9IHdoaWxlIChzZW50IDwgbnVzZWQpOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiB0YWJsZV9tdWx0aV9pbnNlcnQgbWF5IGxlYWsgbWVtb3J5 LCBzbyBzd2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5CisJCSAqIGNvbnRleHQgYmVmb3Jl IGNhbGxpbmcgaXQuCisJCSAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKKwkJdGFibGVfbXVsdGlf aW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCSAgIHNsb3Rz LAorCQkJCQkJICAgbnVzZWQsCisJCQkJCQkgICBteWNpZCwKKwkJCQkJCSAgIHRpX29wdGlv bnMsCisJCQkJCQkgICBidWZmZXItPmJpc3RhdGUpOworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG51c2VkOyBpKyspCiAJ ewpAQCAtMzQzLDYgKzM2OCw4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlN dWx0aUluc2VydEluZm8gKm1paW5mbywKIAkJewogCQkJTGlzdAkgICAqcmVjaGVja0luZGV4 ZXM7CiAKKwkJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3Jl bC0+cmVsa2luZCAhPSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpOworCiAJCQljc3RhdGUtPmN1 cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07CiAJCQlyZWNoZWNrSW5kZXhlcyA9CiAJ CQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCkBAIC01NDEsMTMgKzU2 OCwxMSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAlDb21tYW5kSWQJbXlj aWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwogCWludAkJCXRpX29wdGlvbnMgPSAw OyAvKiBzdGFydCB3aXRoIGRlZmF1bHQgb3B0aW9ucyBmb3IgaW5zZXJ0ICovCiAJQnVsa0lu c2VydFN0YXRlIGJpc3RhdGUgPSBOVUxMOwotCUNvcHlJbnNlcnRNZXRob2QgaW5zZXJ0TWV0 aG9kOwogCUNvcHlNdWx0aUluc2VydEluZm8gbXVsdGlJbnNlcnRJbmZvID0gezB9OwkvKiBw YWNpZnkgY29tcGlsZXIgKi8KIAlpbnQ2NAkJcHJvY2Vzc2VkID0gMDsKIAlpbnQ2NAkJZXhj bHVkZWQgPSAwOwogCWJvb2wJCWhhc19iZWZvcmVfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJ CWhhc19pbnN0ZWFkX2luc2VydF9yb3dfdHJpZzsKLQlib29sCQlsZWFmcGFydF91c2VfbXVs dGlfaW5zZXJ0ID0gZmFsc2U7CiAKIAlBc3NlcnQoY3N0YXRlLT5yZWwpOwogCUFzc2VydChs aXN0X2xlbmd0aChjc3RhdGUtPnJhbmdlX3RhYmxlKSA9PSAxKTsKQEAgLTY3NCwxMCArNjk5 LDQzIEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCW10c3RhdGUtPnJlc3Vs dFJlbEluZm8gPSByZXN1bHRSZWxJbmZvOwogCW10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZv ID0gcmVzdWx0UmVsSW5mbzsKIAotCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5l ICE9IE5VTEwgJiYKLQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+QmVnaW5Gb3Jl aWduSW5zZXJ0ICE9IE5VTEwpCi0JCXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkJl Z2luRm9yZWlnbkluc2VydChtdHN0YXRlLAotCQkJCQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5m byk7CisJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgIT0gTlVMTCkKKwl7CisJ CWlmIChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5HZXRGb3JlaWduTW9kaWZ5QmF0 Y2hTaXplICE9IE5VTEwpCisJCQlyZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemUgPQorCQkJ CXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkdldEZvcmVpZ25Nb2RpZnlCYXRjaFNp emUocmVzdWx0UmVsSW5mbyk7CisKKwkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRp bmUtPkJlZ2luRm9yZWlnbkluc2VydCAhPSBOVUxMKQorCQkJcmVzdWx0UmVsSW5mby0+cmlf RmR3Um91dGluZS0+QmVnaW5Gb3JlaWduSW5zZXJ0KG10c3RhdGUsCisJCQkJCQkJCQkJCQkJ CQkgcmVzdWx0UmVsSW5mbyk7CisJfQorCisJQXNzZXJ0KCF0YXJnZXRfcmVzdWx0UmVsSW5m by0+cmlfdXNlc011bHRpSW5zZXJ0KTsKKworCS8qCisJICogSXQncyBnZW5lcmFsbHkgbW9y ZSBlZmZpY2llbnQgdG8gcHJlcGFyZSBhIGJ1bmNoIG9mIHR1cGxlcyBmb3IKKwkgKiBpbnNl cnRpb24sIGFuZCBpbnNlcnQgdGhlbSBpbiBidWxrLCBmb3IgZXhhbXBsZSwgd2l0aCBvbmUK KwkgKiB0YWJsZV9tdWx0aV9pbnNlcnQoKSBjYWxsIHRoYW4gY2FsbCB0YWJsZV90dXBsZV9p bnNlcnQoKSBzZXBhcmF0ZWx5IGZvcgorCSAqIGV2ZXJ5IHR1cGxlLiBIb3dldmVyLCB0aGVy ZSBhcmUgYSBudW1iZXIgb2YgcmVhc29ucyB3aHkgd2UgbWlnaHQgbm90IGJlCisJICogYWJs ZSB0byBkbyB0aGlzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFueSB2b2xhdGlsZSBleHBy ZXNzaW9ucyBpbiB0aGUKKwkgKiB0YWJsZSdzIGRlZmF1bHQgdmFsdWVzIG9yIGluIHRoZSBz dGF0ZW1lbnQncyBXSEVSRSBjbGF1c2UsIHdoaWNoIG1heQorCSAqIHF1ZXJ5IHRoZSB0YWJs ZSB3ZSBhcmUgaW5zZXJ0aW5nIGludG8sIGJ1ZmZlcmluZyB0dXBsZXMgbWlnaHQgcHJvZHVj ZQorCSAqIHdyb25nIHJlc3VsdHMuICBBbHNvLCB0aGUgcmVsYXRpb24gd2UgYXJlIHRyeWlu ZyB0byBpbnNlcnQgaW50byBpdHNlbGYKKwkgKiBtYXkgbm90IGJlIGFtZW5hYmxlIHRvIGJ1 ZmZlcmVkIGluc2VydHMuCisJICoKKwkgKiBOb3RlOiBGb3IgcGFydGl0aW9ucywgdGhpcyBm bGFnIGlzIHNldCBjb25zaWRlcmluZyB0aGUgdGFyZ2V0IHRhYmxlJ3MKKwkgKiBmbGFnIHRo YXQgaXMgYmVpbmcgc2V0IGhlcmUgYW5kIHBhcnRpdGlvbidzIG93biBwcm9wZXJ0aWVzIHdo aWNoIGFyZQorCSAqIGNoZWNrZWQgYnkgY2FsbGluZyBFeGVjTXVsdGlJbnNlcnRBbGxvd2Vk KCkuICBJdCBkb2VzIG5vdCBtYXR0ZXIKKwkgKiB3aGV0aGVyIHBhcnRpdGlvbnMgaGF2ZSBh bnkgdm9sYXRpbGUgZGVmYXVsdCBleHByZXNzaW9ucyBhcyB3ZSB1c2UgdGhlCisJICogZGVm YXVsdHMgZnJvbSB0aGUgdGFyZ2V0IG9mIHRoZSBDT1BZIGNvbW1hbmQuCisJICogQWxzbywg dGhlIENPUFkgY29tbWFuZCByZXF1aXJlcyBhIG5vbi16ZXJvIGlucHV0IGxpc3Qgb2YgYXR0 cmlidXRlcy4KKwkgKiBUaGVyZWZvcmUsIHRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBs aXN0IGlzIGNoZWNrZWQgaGVyZS4KKwkgKi8KKwlpZiAoIWNzdGF0ZS0+dm9sYXRpbGVfZGVm ZXhwcnMgJiYKKwkJbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KSA+IDAgJiYKKwkJ IWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKGNzdGF0ZS0+d2hlcmVDbGF1c2UpKQorCQl0 YXJnZXRfcmVzdWx0UmVsSW5mby0+cmlfdXNlc011bHRpSW5zZXJ0ID0KKwkJCQkJRXhlY011 bHRpSW5zZXJ0QWxsb3dlZCh0YXJnZXRfcmVzdWx0UmVsSW5mbyk7CiAKIAkvKiBQcmVwYXJl IHRvIGNhdGNoIEFGVEVSIHRyaWdnZXJzLiAqLwogCUFmdGVyVHJpZ2dlckJlZ2luUXVlcnko KTsKQEAgLTcwNiw4MyArNzY0LDkgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUp CiAJCWNzdGF0ZS0+cXVhbGV4cHIgPSBFeGVjSW5pdFF1YWwoY2FzdE5vZGUoTGlzdCwgY3N0 YXRlLT53aGVyZUNsYXVzZSksCiAJCQkJCQkJCQkJJm10c3RhdGUtPnBzKTsKIAotCS8qCi0J ICogSXQncyBnZW5lcmFsbHkgbW9yZSBlZmZpY2llbnQgdG8gcHJlcGFyZSBhIGJ1bmNoIG9m IHR1cGxlcyBmb3IKLQkgKiBpbnNlcnRpb24sIGFuZCBpbnNlcnQgdGhlbSBpbiBvbmUgdGFi bGVfbXVsdGlfaW5zZXJ0KCkgY2FsbCwgdGhhbiBjYWxsCi0JICogdGFibGVfdHVwbGVfaW5z ZXJ0KCkgc2VwYXJhdGVseSBmb3IgZXZlcnkgdHVwbGUuIEhvd2V2ZXIsIHRoZXJlIGFyZSBh Ci0JICogbnVtYmVyIG9mIHJlYXNvbnMgd2h5IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRv IHRoaXMuICBUaGVzZSBhcmUKLQkgKiBleHBsYWluZWQgYmVsb3cuCi0JICovCi0JaWYgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJKHJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9iZWZvcmVfcm93IHx8Ci0JCSByZXN1bHRSZWxJ bmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfaW5zdGVhZF9yb3cpKQotCXsKLQkJLyoK LQkJICogQ2FuJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzIHdoZW4gdGhlcmUgYXJlIGFueSBC RUZPUkUvSU5TVEVBRCBPRgotCQkgKiB0cmlnZ2VycyBvbiB0aGUgdGFibGUuIFN1Y2ggdHJp Z2dlcnMgbWlnaHQgcXVlcnkgdGhlIHRhYmxlIHdlJ3JlCi0JCSAqIGluc2VydGluZyBpbnRv IGFuZCBhY3QgZGlmZmVyZW50bHkgaWYgdGhlIHR1cGxlcyB0aGF0IGhhdmUgYWxyZWFkeQot CQkgKiBiZWVuIHByb2Nlc3NlZCBhbmQgcHJlcGFyZWQgZm9yIGluc2VydGlvbiBhcmUgbm90 IHRoZXJlLgotCQkgKi8KLQkJaW5zZXJ0TWV0aG9kID0gQ0lNX1NJTkdMRTsKLQl9Ci0JZWxz ZSBpZiAocHJvdXRlICE9IE5VTEwgJiYgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgIT0g TlVMTCAmJgotCQkJIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9u ZXdfdGFibGUpCi0JewotCQkvKgotCQkgKiBGb3IgcGFydGl0aW9uZWQgdGFibGVzIHdlIGNh bid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cyB3aGVuIHRoZXJlCi0JCSAqIGFyZSBhbnkgc3Rh dGVtZW50IGxldmVsIGluc2VydCB0cmlnZ2Vycy4gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8K LQkJICogYWxsb3cgcGFydGl0aW9uZWQgdGFibGVzIHdpdGggc3VjaCB0cmlnZ2VycyBpbiB0 aGUgZnV0dXJlLCBidXQgZm9yCi0JCSAqIG5vdywgQ29weU11bHRpSW5zZXJ0SW5mb0ZsdXNo IGV4cGVjdHMgdGhhdCBhbnkgYmVmb3JlIHJvdyBpbnNlcnQKLQkJICogYW5kIHN0YXRlbWVu dCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMgYXJlIG9uIHRoZSBzYW1lIHJlbGF0aW9uLgotCQkg Ki8KLQkJaW5zZXJ0TWV0aG9kID0gQ0lNX1NJTkdMRTsKLQl9Ci0JZWxzZSBpZiAocmVzdWx0 UmVsSW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMIHx8Ci0JCQkgY3N0YXRlLT52b2xhdGls ZV9kZWZleHBycykKLQl7Ci0JCS8qCi0JCSAqIENhbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0 cyB0byBmb3JlaWduIHRhYmxlcyBvciBpZiB0aGVyZSBhcmUgYW55Ci0JCSAqIHZvbGF0aWxl IGRlZmF1bHQgZXhwcmVzc2lvbnMgaW4gdGhlIHRhYmxlLiAgU2ltaWxhcmx5IHRvIHRoZQot CQkgKiB0cmlnZ2VyIGNhc2UgYWJvdmUsIHN1Y2ggZXhwcmVzc2lvbnMgbWF5IHF1ZXJ5IHRo ZSB0YWJsZSB3ZSdyZQotCQkgKiBpbnNlcnRpbmcgaW50by4KLQkJICoKLQkJICogTm90ZTog SXQgZG9lcyBub3QgbWF0dGVyIGlmIGFueSBwYXJ0aXRpb25zIGhhdmUgYW55IHZvbGF0aWxl Ci0JCSAqIGRlZmF1bHQgZXhwcmVzc2lvbnMgYXMgd2UgdXNlIHRoZSBkZWZhdWx0cyBmcm9t IHRoZSB0YXJnZXQgb2YgdGhlCi0JCSAqIENPUFkgY29tbWFuZC4KLQkJICovCi0JCWluc2Vy dE1ldGhvZCA9IENJTV9TSU5HTEU7Ci0JfQotCWVsc2UgaWYgKGNvbnRhaW5fdm9sYXRpbGVf ZnVuY3Rpb25zKGNzdGF0ZS0+d2hlcmVDbGF1c2UpKQotCXsKLQkJLyoKLQkJICogQ2FuJ3Qg c3VwcG9ydCBtdWx0aS1pbnNlcnRzIGlmIHRoZXJlIGFyZSBhbnkgdm9sYXRpbGUgZnVuY3Rp b24KLQkJICogZXhwcmVzc2lvbnMgaW4gV0hFUkUgY2xhdXNlLiAgU2ltaWxhcmx5IHRvIHRo ZSB0cmlnZ2VyIGNhc2UgYWJvdmUsCi0JCSAqIHN1Y2ggZXhwcmVzc2lvbnMgbWF5IHF1ZXJ5 IHRoZSB0YWJsZSB3ZSdyZSBpbnNlcnRpbmcgaW50by4KLQkJICovCi0JCWluc2VydE1ldGhv ZCA9IENJTV9TSU5HTEU7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEZvciBwYXJ0aXRp b25lZCB0YWJsZXMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHBlcmZvcm0gYnVsawotCQkg KiBpbnNlcnRzLiAgSG93ZXZlciwgdGhlIHBvc3NpYmlsaXR5IG9mIHRoaXMgZGVwZW5kcyBv biB3aGljaCB0eXBlcwotCQkgKiBvZiB0cmlnZ2VycyBleGlzdCBvbiB0aGUgcGFydGl0aW9u LiAgV2UgbXVzdCBkaXNhYmxlIGJ1bGsgaW5zZXJ0cwotCQkgKiBpZiB0aGUgcGFydGl0aW9u IGlzIGEgZm9yZWlnbiB0YWJsZSBvciBpdCBoYXMgYW55IGJlZm9yZSByb3cgaW5zZXJ0Ci0J CSAqIG9yIGluc2VydCBpbnN0ZWFkIHRyaWdnZXJzIChzYW1lIGFzIHdlIGNoZWNrZWQgYWJv dmUgZm9yIHRoZSBwYXJlbnQKLQkJICogdGFibGUpLiAgU2luY2UgdGhlIHBhcnRpdGlvbidz IHJlc3VsdFJlbEluZm9zIGFyZSBpbml0aWFsaXplZCBvbmx5Ci0JCSAqIHdoZW4gd2UgYWN0 dWFsbHkgbmVlZCB0byBpbnNlcnQgdGhlIGZpcnN0IHR1cGxlIGludG8gdGhlbSwgd2UgbXVz dAotCQkgKiBoYXZlIHRoZSBpbnRlcm1lZGlhdGUgaW5zZXJ0IG1ldGhvZCBvZiBDSU1fTVVM VElfQ09ORElUSU9OQUwgdG8KLQkJICogZmxhZyB0aGF0IHdlIG11c3QgbGF0ZXIgZGV0ZXJt aW5lIGlmIHdlIGNhbiB1c2UgYnVsay1pbnNlcnRzIGZvcgotCQkgKiB0aGUgcGFydGl0aW9u IGJlaW5nIGluc2VydGVkIGludG8uCi0JCSAqLwotCQlpZiAocHJvdXRlKQotCQkJaW5zZXJ0 TWV0aG9kID0gQ0lNX01VTFRJX0NPTkRJVElPTkFMOwotCQllbHNlCi0JCQlpbnNlcnRNZXRo b2QgPSBDSU1fTVVMVEk7Ci0KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfdXNlc011bHRpSW5z ZXJ0KQogCQlDb3B5TXVsdGlJbnNlcnRJbmZvSW5pdCgmbXVsdGlJbnNlcnRJbmZvLCByZXN1 bHRSZWxJbmZvLCBjc3RhdGUsCiAJCQkJCQkJCWVzdGF0ZSwgbXljaWQsIHRpX29wdGlvbnMp OwotCX0KIAogCS8qCiAJICogSWYgbm90IHVzaW5nIGJhdGNoIG1vZGUgKHdoaWNoIGFsbG9j YXRlcyBzbG90cyBhcyBuZWVkZWQpIHNldCB1cCBhCkBAIC03OTAsNyArNzc0LDcgQEAgQ29w eUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJICogb25lLCBldmVuIGlmIHdlIG1pZ2h0 IGJhdGNoIGluc2VydCwgdG8gcmVhZCB0aGUgdHVwbGUgaW4gdGhlIHJvb3QKIAkgKiBwYXJ0 aXRpb24ncyBmb3JtLgogCSAqLwotCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8 fCBpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKQorCWlmICghcmVzdWx0 UmVsSW5mby0+cmlfdXNlc011bHRpSW5zZXJ0IHx8IHByb3V0ZSkKIAl7CiAJCXNpbmdsZXNs b3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Ms CiAJCQkJCQkJCQkgICAmZXN0YXRlLT5lc190dXBsZVRhYmxlKTsKQEAgLTgzMyw3ICs4MTcs NyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJUmVzZXRQZXJUdXBsZUV4 cHJDb250ZXh0KGVzdGF0ZSk7CiAKIAkJLyogc2VsZWN0IHNsb3QgdG8gKGluaXRpYWxseSkg bG9hZCByb3cgaW50byAqLwotCQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9TSU5HTEUgfHwg cHJvdXRlKQorCQlpZiAoIXRhcmdldF9yZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNl cnQgfHwgcHJvdXRlKQogCQl7CiAJCQlteXNsb3QgPSBzaW5nbGVzbG90OwogCQkJQXNzZXJ0 KG15c2xvdCAhPSBOVUxMKTsKQEAgLTg0MSw3ICs4MjUsNiBAQCBDb3B5RnJvbShDb3B5RnJv bVN0YXRlIGNzdGF0ZSkKIAkJZWxzZQogCQl7CiAJCQlBc3NlcnQocmVzdWx0UmVsSW5mbyA9 PSB0YXJnZXRfcmVzdWx0UmVsSW5mbyk7Ci0JCQlBc3NlcnQoaW5zZXJ0TWV0aG9kID09IENJ TV9NVUxUSSk7CiAKIAkJCW15c2xvdCA9IENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNs b3QoJm11bHRpSW5zZXJ0SW5mbywKIAkJCQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbyk7CkBA IC05MDgsMjQgKzg5MSwxNCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJ CQloYXNfaW5zdGVhZF9pbnNlcnRfcm93X3RyaWcgPSAocmVzdWx0UmVsSW5mby0+cmlfVHJp Z0Rlc2MgJiYKIAkJCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRy aWdfaW5zZXJ0X2luc3RlYWRfcm93KTsKIAotCQkJCS8qCi0JCQkJICogRGlzYWJsZSBtdWx0 aS1pbnNlcnRzIHdoZW4gdGhlIHBhcnRpdGlvbiBoYXMgQkVGT1JFL0lOU1RFQUQKLQkJCQkg KiBPRiB0cmlnZ2Vycywgb3IgaWYgdGhlIHBhcnRpdGlvbiBpcyBhIGZvcmVpZ24gcGFydGl0 aW9uLgotCQkJCSAqLwotCQkJCWxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQgPSBpbnNlcnRN ZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMICYmCi0JCQkJCSFoYXNfYmVmb3JlX2lu c2VydF9yb3dfdHJpZyAmJgotCQkJCQkhaGFzX2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnICYm Ci0JCQkJCXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTDsKLQogCQkJCS8q IFNldCB0aGUgbXVsdGktaW5zZXJ0IGJ1ZmZlciB0byB1c2UgZm9yIHRoaXMgcGFydGl0aW9u LiAqLwotCQkJCWlmIChsZWFmcGFydF91c2VfbXVsdGlfaW5zZXJ0KQorCQkJCWlmIChyZXN1 bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQpCiAJCQkJewogCQkJCQlpZiAocmVzdWx0 UmVsSW5mby0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyID09IE5VTEwpCiAJCQkJCQlDb3B5 TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoJm11bHRpSW5zZXJ0SW5mbywKIAkJCQkJCQkJ CQkJCQkgICByZXN1bHRSZWxJbmZvKTsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAoaW5zZXJ0TWV0 aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCAmJgotCQkJCQkJICFDb3B5TXVsdGlJbnNl cnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKKwkJCQllbHNlIGlmICghQ29weU11 bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCiAJCQkJewogCQkJCQkv KgogCQkJCQkgKiBGbHVzaCBwZW5kaW5nIGluc2VydHMgaWYgdGhpcyBwYXJ0aXRpb24gY2Fu J3QgdXNlCkBAIC05NTUsNyArOTI4LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3Rh dGUpCiAJCQkgKiByb3d0eXBlLgogCQkJICovCiAJCQltYXAgPSByZXN1bHRSZWxJbmZvLT5y aV9Sb290VG9QYXJ0aXRpb25NYXA7Ci0JCQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9TSU5H TEUgfHwgIWxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQpCisJCQlpZiAoIXJlc3VsdFJlbElu Zm8tPnJpX3VzZXNNdWx0aUluc2VydCkKIAkJCXsKIAkJCQkvKiBub24gYmF0Y2ggaW5zZXJ0 ICovCiAJCQkJaWYgKG1hcCAhPSBOVUxMKQpAQCAtOTc0LDkgKzk0Nyw2IEBAIENvcHlGcm9t KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCSAqLwogCQkJCVR1cGxlVGFibGVTbG90ICpi YXRjaHNsb3Q7CiAKLQkJCQkvKiBubyBvdGhlciBwYXRoIGF2YWlsYWJsZSBmb3IgcGFydGl0 aW9uZWQgdGFibGUgKi8KLQkJCQlBc3NlcnQoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9D T05ESVRJT05BTCk7Ci0KIAkJCQliYXRjaHNsb3QgPSBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4 dEZyZWVTbG90KCZtdWx0aUluc2VydEluZm8sCiAJCQkJCQkJCQkJCQkJCQlyZXN1bHRSZWxJ bmZvKTsKIApAQCAtMTA0OCw3ICsxMDE4LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBj c3RhdGUpCiAJCQkJCUV4ZWNQYXJ0aXRpb25DaGVjayhyZXN1bHRSZWxJbmZvLCBteXNsb3Qs IGVzdGF0ZSwgdHJ1ZSk7CiAKIAkJCQkvKiBTdG9yZSB0aGUgc2xvdCBpbiB0aGUgbXVsdGkt aW5zZXJ0IGJ1ZmZlciwgd2hlbiBlbmFibGVkLiAqLwotCQkJCWlmIChpbnNlcnRNZXRob2Qg PT0gQ0lNX01VTFRJIHx8IGxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQpCisJCQkJaWYgKHJl c3VsdFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJ CSAqIFRoZSBzbG90IHByZXZpb3VzbHkgbWlnaHQgcG9pbnQgaW50byB0aGUgcGVyLXR1cGxl CkBAIC0xMTI3LDExICsxMDk3LDggQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUp CiAJfQogCiAJLyogRmx1c2ggYW55IHJlbWFpbmluZyBidWZmZXJlZCB0dXBsZXMgKi8KLQlp ZiAoaW5zZXJ0TWV0aG9kICE9IENJTV9TSU5HTEUpCi0JewotCQlpZiAoIUNvcHlNdWx0aUlu c2VydEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQotCQkJQ29weU11bHRpSW5zZXJ0 SW5mb0ZsdXNoKCZtdWx0aUluc2VydEluZm8sIE5VTEwpOwotCX0KKwlpZiAoIUNvcHlNdWx0 aUluc2VydEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQorCQlDb3B5TXVsdGlJbnNl cnRJbmZvRmx1c2goJm11bHRpSW5zZXJ0SW5mbywgTlVMTCk7CiAKIAkvKiBEb25lLCBjbGVh biB1cCAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK QEAgLTExNTIsMTIgKzExMTksMTEgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUp CiAJLyogQWxsb3cgdGhlIEZEVyB0byBzaHV0IGRvd24gKi8KIAlpZiAodGFyZ2V0X3Jlc3Vs dFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgIT0gTlVMTCAmJgogCQl0YXJnZXRfcmVzdWx0UmVs SW5mby0+cmlfRmR3Um91dGluZS0+RW5kRm9yZWlnbkluc2VydCAhPSBOVUxMKQotCQl0YXJn ZXRfcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RW5kRm9yZWlnbkluc2VydChlc3Rh dGUsCi0JCQkJCQkJCQkJCQkJCQkgIHRhcmdldF9yZXN1bHRSZWxJbmZvKTsKKwkJCXRhcmdl dF9yZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0KGVzdGF0 ZSwKKwkJCQkJCQkJCQkJCQkJdGFyZ2V0X3Jlc3VsdFJlbEluZm8pOwogCiAJLyogVGVhciBk b3duIHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVyIGRhdGEgKi8KLQlpZiAoaW5zZXJ0TWV0aG9k ICE9IENJTV9TSU5HTEUpCi0JCUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKCZtdWx0aUlu c2VydEluZm8pOworCUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKCZtdWx0aUluc2VydElu Zm8pOwogCiAJLyogQ2xvc2UgYWxsIHRoZSBwYXJ0aXRpb25lZCB0YWJsZXMsIGxlYWYgcGFy dGl0aW9ucywgYW5kIHRoZWlyIGluZGljZXMgKi8KIAlpZiAocHJvdXRlKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMKaW5kZXggNDczZDJlMDBhMi4uODcyN2M1Y2E4OSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjTWFpbi5jCkBAIC0xMjU3LDkgKzEyNTcsNTQgQEAgSW5pdFJlc3VsdFJl bEluZm8oUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlyZXN1bHRSZWxJbmZvLT5y aV9QYXJ0aXRpb25UdXBsZVNsb3QgPSBOVUxMOwkvKiBkaXR0byAqLwogCXJlc3VsdFJlbElu Zm8tPnJpX0NoaWxkVG9Sb290TWFwID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9DaGls ZFRvUm9vdE1hcFZhbGlkID0gZmFsc2U7CisJcmVzdWx0UmVsSW5mby0+cmlfdXNlc011bHRp SW5zZXJ0ID0gZmFsc2U7CiAJcmVzdWx0UmVsSW5mby0+cmlfQ29weU11bHRpSW5zZXJ0QnVm ZmVyID0gTlVMTDsKIH0KIAorLyoKKyAqIEV4ZWNNdWx0aUluc2VydEFsbG93ZWQKKyAqCQlE b2VzIHRoaXMgcmVsYXRpb24gYWxsb3cgY2FsbGVyIHRvIHVzZSBtdWx0aS1pbnNlcnQgbW9k ZSB3aGVuCisgKgkJaW5zZXJ0aW5nIHJvd3MgaW50byBpdD8KKyAqLworYm9vbAorRXhlY011 bHRpSW5zZXJ0QWxsb3dlZChjb25zdCBSZXN1bHRSZWxJbmZvICpycmkpCit7CisJLyoKKwkg KiBDYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMgd2hlbiB0aGVyZSBhcmUgYW55IEJFRk9S RS9JTlNURUFEIE9GCisJICogdHJpZ2dlcnMgb24gdGhlIHRhYmxlLiBTdWNoIHRyaWdnZXJz IG1pZ2h0IHF1ZXJ5IHRoZSB0YWJsZSB3ZSdyZQorCSAqIGluc2VydGluZyBpbnRvIGFuZCBh Y3QgZGlmZmVyZW50bHkgaWYgdGhlIHR1cGxlcyB0aGF0IGhhdmUgYWxyZWFkeQorCSAqIGJl ZW4gcHJvY2Vzc2VkIGFuZCBwcmVwYXJlZCBmb3IgaW5zZXJ0aW9uIGFyZSBub3QgdGhlcmUu CisJICovCisJaWYgKHJyaS0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQkocnJpLT5yaV9U cmlnRGVzYy0+dHJpZ19pbnNlcnRfYmVmb3JlX3JvdyB8fAorCQkgcnJpLT5yaV9UcmlnRGVz Yy0+dHJpZ19pbnNlcnRfaW5zdGVhZF9yb3cpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgor CSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMgd2UgY2FuJ3Qgc3VwcG9ydCBtdWx0aS1pbnNl cnRzIHdoZW4gdGhlcmUgYXJlCisJICogYW55IHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJp Z2dlcnMuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGFsbG93CisJICogcGFydGl0aW9uZWQg dGFibGVzIHdpdGggc3VjaCB0cmlnZ2VycyBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIG5vdywK KwkgKiBDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2ggZXhwZWN0cyB0aGF0IGFueSBiZWZvcmUg cm93IGluc2VydCBhbmQKKwkgKiBzdGF0ZW1lbnQgbGV2ZWwgaW5zZXJ0IHRyaWdnZXJzIGFy ZSBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKi8KKwlpZiAocnJpLT5yaV9SZWxhdGlvbkRl c2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYmCisJ CXJyaS0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQlycmktPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9uZXdfdGFibGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChycmktPnJpX0Zk d1JvdXRpbmUgIT0gTlVMTCAmJgorCQkocnJpLT5yaV9GZHdSb3V0aW5lLT5FeGVjRm9yZWln bkJhdGNoSW5zZXJ0ID09IE5VTEwgfHwKKwkJcnJpLT5yaV9CYXRjaFNpemUgPD0gMSkpCisJ CS8qCisJCSAqIEZvcmVpZ24gdGFibGVzIGRvbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cywg dW5sZXNzIHRoZWlyIEZEVworCQkgKiBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGJ1bGsgaW5z ZXJ0IGludGVyZmFjZS4KKwkJICovCisJCXJldHVybiBmYWxzZTsKKworCS8qIE9LLCBjYWxs ZXIgY2FuIHVzZSBtdWx0aS1pbnNlcnQgb24gdGhpcyByZWxhdGlvbi4gKi8KKwlyZXR1cm4g dHJ1ZTsKK30KKwogLyoKICAqIEV4ZWNHZXRUcmlnZ2VyUmVzdWx0UmVsCiAgKgkJR2V0IGEg UmVzdWx0UmVsSW5mbyBmb3IgYSB0cmlnZ2VyIHRhcmdldCByZWxhdGlvbi4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCA5MGVkMTQ4NWQxLi45NDJiZDUwNmY4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC02NjEsNiArNjYx LDE0IEBAIEV4ZWNJbml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRl LCBFU3RhdGUgKmVzdGF0ZSwKIAlFeGVjSW5pdFJvdXRpbmdJbmZvKG10c3RhdGUsIGVzdGF0 ZSwgcHJvdXRlLCBkaXNwYXRjaCwKIAkJCQkJCWxlYWZfcGFydF9ycmksIHBhcnRpZHgsIGZh bHNlKTsKIAorCS8qCisJICogSWYgYSBwYXJ0aXRpb24ncyByb290IHBhcmVudCBpc24ndCBh bGxvd2VkIHRvIHVzZSBpdCwgbmVpdGhlciBpcyB0aGUKKwkgKiBwYXJ0aXRpb24uCisJICov CisJaWYgKHJvb3RSZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQpCisJCWxlYWZf cGFydF9ycmktPnJpX3VzZXNNdWx0aUluc2VydCA9CisJCQlFeGVjTXVsdGlJbnNlcnRBbGxv d2VkKGxlYWZfcGFydF9ycmkpOworCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBhbiBPTiBDT05G TElDVCBjbGF1c2UsIGluaXRpYWxpemUgc3RhdGUgZm9yIGl0LgogCSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXggM2RmMWM1YTk3Yy4uMWM3 MzNiYjlhNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50 ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5o CkBAIC0zOSwxNiArMzksNiBAQCB0eXBlZGVmIGVudW0gRW9sVHlwZQogCUVPTF9DUk5MCiB9 IEVvbFR5cGU7CiAKLS8qCi0gKiBSZXByZXNlbnRzIHRoZSBoZWFwIGluc2VydCBtZXRob2Qg dG8gYmUgdXNlZCBkdXJpbmcgQ09QWSBGUk9NLgotICovCi10eXBlZGVmIGVudW0gQ29weUlu c2VydE1ldGhvZAotewotCUNJTV9TSU5HTEUsCQkJCQkvKiB1c2UgdGFibGVfdHVwbGVfaW5z ZXJ0IG9yIGZkdyByb3V0aW5lICovCi0JQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlzIHVzZSB0 YWJsZV9tdWx0aV9pbnNlcnQgKi8KLQlDSU1fTVVMVElfQ09ORElUSU9OQUwJCS8qIHVzZSB0 YWJsZV9tdWx0aV9pbnNlcnQgb25seSBpZiB2YWxpZCAqLwotfSBDb3B5SW5zZXJ0TWV0aG9k OwotCiAvKgogICogVGhpcyBzdHJ1Y3QgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSB2YXJpYWJs ZXMgdXNlZCB0aHJvdWdob3V0IGEgQ09QWSBGUk9NCiAgKiBvcGVyYXRpb24uCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY3V0b3IuaAppbmRleCA4MjkyNWI0YjYzLi42N2QzMzg5MjBmIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTIwMyw2ICsyMDMsNyBAQCBleHRlcm4gdm9pZCBJ bml0UmVzdWx0UmVsSW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJ CSAgSW5kZXggcmVzdWx0UmVsYXRpb25JbmRleCwKIAkJCQkJCQkgIFJlc3VsdFJlbEluZm8g KnBhcnRpdGlvbl9yb290X3JyaSwKIAkJCQkJCQkgIGludCBpbnN0cnVtZW50X29wdGlvbnMp OworZXh0ZXJuIGJvb2wgRXhlY011bHRpSW5zZXJ0QWxsb3dlZChjb25zdCBSZXN1bHRSZWxJ bmZvICpycmkpOwogZXh0ZXJuIFJlc3VsdFJlbEluZm8gKkV4ZWNHZXRUcmlnZ2VyUmVzdWx0 UmVsKEVTdGF0ZSAqZXN0YXRlLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCSAgUmVzdWx0UmVs SW5mbyAqcm9vdFJlbEluZm8pOwogZXh0ZXJuIExpc3QgKkV4ZWNHZXRBbmNlc3RvclJlc3Vs dFJlbHMoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA0NGRkNzNmYzgwLi41NjE3ODEwMjc5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNTI4LDcgKzUyOCwxMCBAQCB0eXBlZGVmIHN0cnVj dCBSZXN1bHRSZWxJbmZvCiAJVHVwbGVDb252ZXJzaW9uTWFwICpyaV9DaGlsZFRvUm9vdE1h cDsKIAlib29sCQlyaV9DaGlsZFRvUm9vdE1hcFZhbGlkOwogCi0JLyogZm9yIHVzZSBieSBj b3B5ZnJvbS5jIHdoZW4gcGVyZm9ybWluZyBtdWx0aS1pbnNlcnRzICovCisJLyogVHJ1ZSBp ZiBva2F5IHRvIHVzZSBtdWx0aS1pbnNlcnQgb24gdGhpcyByZWxhdGlvbiAqLworCWJvb2wg cmlfdXNlc011bHRpSW5zZXJ0OworCisJLyogQnVmZmVyIGFsbG9jYXRlZCB0byB0aGlzIHJl bGF0aW9uIHdoZW4gdXNpbmcgbXVsdGktaW5zZXJ0IG1vZGUgKi8KIAlzdHJ1Y3QgQ29weU11 bHRpSW5zZXJ0QnVmZmVyICpyaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAKIAkvKgotLSAK Mi4yNS4xCgo= --------------pKWQ2uQXFEw9tmIO0oTw7moS--