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 1kuViX-0007oP-SV for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Dec 2020 07:16:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kuViV-0001Zx-RF for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Dec 2020 07:16:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kuViV-0001Zo-Ci for pgsql-hackers@lists.postgresql.org; Wed, 30 Dec 2020 07:16:19 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kuViL-00084B-N4 for pgsql-hackers@postgresql.org; Wed, 30 Dec 2020 07:16:16 +0000 Received: from ip-192-168-0-192.is74.loc (pool-77-222-110-18.is74.ru [77.222.110.18]) (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 AC19821C3FFC; Wed, 30 Dec 2020 10:16:07 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1609312568; bh=TVPB1TEI5KUXZEMl2djj74m+TPb1NAIQlXDLbW6TrPY=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=XNW761wLaw53AR6E+Pq5pVSkxZm/lODkmnDBKUE89fkEAqNL+5iE+RQIcfZPSau0q c0P2EvoZuQGNkwswvihuIX/LluH267KjLgowLhY4IesARMz5KKxHiIgssoV/tmHv3e q8mPINdLa3yRHG7KLeoaOVbypdAmm9T+wnmZVfhk= Subject: Re: [POC] Fast COPY FROM command for the table with foreign partitions To: "Hou, Zhijie" , Amit Langote , "Tsunakawa, Takayuki" Cc: Alexey Kondratov , Michael Paquier , Ashutosh Bapat , Ashutosh Bapat , Etsuro Fujita , PostgreSQL-Dev , "Tang, Haiying" References: <2a33a068-749c-4c18-ba74-bd6fbf37abce@postgrespro.ru> <8ddacbf0-d489-cd56-fecc-e09a7e02a7c1@postgrespro.ru> <9bff5ccc-8649-9699-1cdd-82b53164f9bb@postgrespro.ru> <7166ded145a947fbb11b67ebe68041f3@G08CNEXMBPEKD05.g08.fujitsu.local> <2b465f4cdeeb4a78b3096d31e8af7c77@G08CNEXMBPEKD05.g08.fujitsu.local> From: Andrey Lepikhov Organization: Postgres Professional Message-ID: Date: Wed, 30 Dec 2020 12:16:07 +0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <2b465f4cdeeb4a78b3096d31e8af7c77@G08CNEXMBPEKD05.g08.fujitsu.local> Content-Type: multipart/mixed; boundary="------------FAA0C5D80691001DE18B1651" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------FAA0C5D80691001DE18B1651 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 29.12.2020 16:20, Hou, Zhijie wrote: >> see new version in attachment. > > I took a look into the patch, and have some comments. > > 1. > + PG_FINALLY(); > + { > + copy_fmstate = NULL; /* Detect problems */ > I don't quite understand this comment, > does it means we want to detect something like Null reference ? > > > 2. > + PG_FINALLY(); > + { > ... > + if (!OK) > + PG_RE_THROW(); > + } > Is this PG_RE_THROW() necessary ? > IMO, PG_FINALLY will reproduce the PG_RE_THROW action if we get to the code block due to an error being thrown. This is a debugging stage atavisms. fixed. > > 3. > + ereport(ERROR, > + (errmsg("unexpected extra results during COPY of table: %s", > + PQerrorMessage(conn)))); > > I found some similar message like the following: > > pg_log_warning("unexpected extra results during COPY of table \"%s\"", > tocEntryTag); > How about using existing messages style ? This style is intended for use in frontend utilities, not for contrib extensions, i think. > > 4. > I noticed some not standard code comment[1]. > I think it's better to comment like: > /* > * line 1 > * line 2 > */ > > [1]----------- > + /* Finish COPY IN protocol. It is needed to do after successful copy or > + * after an error. > + */ > > > +/* > + * > + * postgresExecForeignCopy > > +/* > + * > + * postgresBeginForeignCopy Thanks, fixed. The patch in attachment rebased on 107a2d4204. -- regards, Andrey Lepikhov Postgres Professional --------------FAA0C5D80691001DE18B1651 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v13_2-0002-Fast-COPY-FROM-into-the-foreign-or-sharded-table.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v13_2-0002-Fast-COPY-FROM-into-the-foreign-or-sharded-table."; filename*1="patch" RnJvbSAxYzU0MzlkODAyYjc2NTRlZTUwZGM0MzI2YjliYzI0ZmM3ZjQ0Njc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IE1vbiwgMTQgRGVjIDIwMjAgMTM6Mzc6NDAgKzA1MDAKU3Vi amVjdDogW1BBVENIIDIvMl0gRmFzdCBDT1BZIEZST00gaW50byB0aGUgZm9yZWlnbiBvciBz aGFyZGVkIHRhYmxlLgoKVGhpcyBmZWF0dXJlIGVuYWJsZXMgYnVsayBDT1BZIGludG8gZm9y ZWlnbiB0YWJsZSBpbiB0aGUgY2FzZSBvZgptdWx0aSBpbnNlcnRzIGlzIHBvc3NpYmxlIGFu ZCBmb3JlaWduIHRhYmxlIGhhcyBub24temVybyBudW1iZXIgb2YgY29sdW1ucy4KCkZEV0FQ SSB3YXMgZXh0ZW5kZWQgYnkgbmV4dCByb3V0aW5lczoKKiBCZWdpbkZvcmVpZ25Db3B5Ciog RW5kRm9yZWlnbkNvcHkKKiBFeGVjRm9yZWlnbkNvcHkKCkJlZ2luRm9yZWlnbkNvcHkgYW5k IEVuZEZvcmVpZ25Db3B5IGluaXRpYWxpemUgYW5kIGZyZWUKdGhlIENvcHlTdGF0ZSBvZiBi dWxrIENPUFkuIFRoZSBFeGVjRm9yZWlnbkNvcHkgcm91dGluZSBzZW5kCidDT1BZIC4uLiBG Uk9NIFNURElOJyBjb21tYW5kIHRvIHRoZSBmb3JlaWduIHNlcnZlciwgaW4gaXRlcmF0aXZl Cm1hbm5lciBzZW5kIHR1cGxlcyBieSBDb3B5VG8oKSBtYWNoaW5lcnksIHNlbmQgRU9GIHRv IHRoaXMgY29ubmVjdGlvbi4KCkNvZGUgdGhhdCBjb25zdHJ1Y3RlZCBsaXN0IG9mIGNvbHVt bnMgZm9yIGEgZ2l2ZW4gZm9yZWlnbiByZWxhdGlvbgppbiB0aGUgZGVwYXJzZUFuYWx5emVT cWwoKSByb3V0aW5lIGlzIHNlcGFyYXRlZCB0byB0aGUgZGVwYXJzZVJlbENvbHVtbkxpc3Qo KS4KSXQgaXMgcmV1c2VkIGluIHRoZSBkZXBhcnNlQ29weUZyb21TcWwoKS4KCkFkZGVkIFRB UC10ZXN0cyBvbiB0aGUgc3BlY2lmaWMgY29ybmVyIGNhc2VzIG9mIENPUFkgRlJPTSBTVERJ TiBvcGVyYXRpb24uCgpCeSB0aGUgYW5hbG9neSBvZiBDb3B5RnJvbSgpIHRoZSBDb3B5U3Rh dGUgc3RydWN0dXJlIHdhcyBleHRlbmRlZAp3aXRoIGRhdGFfZGVzdF9jYiBjYWxsYmFjay4g SXQgaXMgdXNlZCBmb3Igc2VuZCB0ZXh0IHJlcHJlc2VudGF0aW9uCm9mIGEgdHVwbGUgdG8g YSBjdXN0b20gZGVzdGluYXRpb24uClRoZSBQZ0Zkd01vZGlmeVN0YXRlIHN0cnVjdHVyZSBp cyBleHRlbmRlZCB3aXRoIHRoZSBjc3RhdGUgZmllbGQuCkl0IGlzIG5lZWRlZCBmb3IgYXZv aWQgcmVwZWF0ZWQgaW5pdGlhbGl6YXRpb24gb2YgQ29weVN0YXRlLiBBTHNvIGZvciB0aGlz CnJlYXNvbiBDb3B5VG8oKSByb3V0aW5lIHdhcyBzcGxpdCBpbnRvIHRoZSBzZXQgb2Ygcm91 dGluZXMgQ29weVRvU3RhcnQoKS8KQ29weVRvKCkvQ29weVRvRmluaXNoKCkuCgpFbnVtIENv cHlJbnNlcnRNZXRob2QgcmVtb3ZlZC4gVGhpcyBsb2dpYyBpbXBsZW1lbnRzIGJ5IHJpX3Vz ZXNNdWx0aUluc2VydApmaWVsZCBvZiB0aGUgUmVzdWx0UmVsSW5mbyBzcnVjdHVyZS4KCkRp c2N1c3Npb246Cmh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC8z ZDA5MDlkYy0zNjkxLWE1NzYtMjA4YS05MDk4NmU1NTQ4OWYlNDBwb3N0Z3Jlc3Byby5ydQoK QXV0aG9yczogQW5kcmV5IExlcGlraG92LCBBc2h1dG9zaCBCYXBhdCwgQW1pdCBMYW5nb3Rl Ci0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jICAgICAgICAgICAgICAgIHwg IDYwICsrKysrKy0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgICAgfCAgNDYgKysrKysrLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMgICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmggICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcG9zdGdy ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA0NSArKysrKysKIGRvYy9zcmMv c2dtbC9mZHdoYW5kbGVyLnNnbWwgICAgICAgICAgICAgICAgICB8ICA3MyArKysrKysrKysr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAgICAgICAgICAgICAgICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICAgICAgICAgICB8IDEy NiArKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAg ICAgICAgICAgICAgIHwgIDg0ICsrKysrKysrLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9l eGVjTWFpbi5jICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uYyAgICAgICAgICB8ICAyNyArKystCiBzcmMvaW5jbHVkZS9jb21t YW5kcy9jb3B5LmggICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2Zv cmVpZ24vZmR3YXBpLmggICAgICAgICAgICAgICAgICB8ICAxNSArKwogMTMgZmlsZXMgY2hh bmdlZCwgNTMzIGluc2VydGlvbnMoKyksIDk0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L2RlcGFyc2UuYwppbmRleCBjYTJmOWYzMjE1Li5iMmE3MWZhYWJjIDEwMDY0NAotLS0gYS9j b250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZGVwYXJzZS5jCkBAIC0xODQsNiArMTg0LDggQEAgc3RhdGljIHZvaWQgYXBwZW5kQWdn T3JkZXJCeShMaXN0ICpvcmRlckxpc3QsIExpc3QgKnRhcmdldExpc3QsCiBzdGF0aWMgdm9p ZCBhcHBlbmRGdW5jdGlvbk5hbWUoT2lkIGZ1bmNpZCwgZGVwYXJzZV9leHByX2N4dCAqY29u dGV4dCk7CiBzdGF0aWMgTm9kZSAqZGVwYXJzZVNvcnRHcm91cENsYXVzZShJbmRleCByZWYs IExpc3QgKnRsaXN0LCBib29sIGZvcmNlX2NvbG5vLAogCQkJCQkJCQkJZGVwYXJzZV9leHBy X2N4dCAqY29udGV4dCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZVJlbENvbHVtbkxpc3QoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJICBib29sIGVuY2xvc2VfaW5f cGFyZW5zKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbnMKQEAgLTE3NjMsNiArMTc2NSwy MCBAQCBkZXBhcnNlSW5zZXJ0U3FsKFN0cmluZ0luZm8gYnVmLCBSYW5nZVRibEVudHJ5ICpy dGUsCiAJCQkJCQkgd2l0aENoZWNrT3B0aW9uTGlzdCwgcmV0dXJuaW5nTGlzdCwgcmV0cmll dmVkX2F0dHJzKTsKIH0KIAorLyoKKyAqIERlcGFyc2UgQ09QWSBGUk9NIGludG8gZ2l2ZW4g YnVmLgorICogV2UgbmVlZCB0byB1c2UgbGlzdCBvZiBwYXJhbWV0ZXJzIGF0IGVhY2ggcXVl cnkuCisgKi8KK3ZvaWQKK2RlcGFyc2VDb3B5RnJvbVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsKQoreworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiQ09QWSAiKTsK KwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOworCSh2b2lkKSBkZXBhcnNlUmVsQ29sdW1u TGlzdChidWYsIHJlbCwgdHJ1ZSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiBGUk9NIFNURElOICIpOworfQorCiAvKgogICogZGVwYXJzZSByZW1vdGUgVVBEQVRFIHN0 YXRlbWVudAogICoKQEAgLTIwNjYsNiArMjA4MiwzMCBAQCBkZXBhcnNlQW5hbHl6ZVNpemVT cWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCkKICAqLwogdm9pZAogZGVwYXJzZUFu YWx5emVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZl ZF9hdHRycykKK3sKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlNFTEVDVCAiKTsK KwkqcmV0cmlldmVkX2F0dHJzID0gZGVwYXJzZVJlbENvbHVtbkxpc3QoYnVmLCByZWwsIGZh bHNlKTsKKworCS8qIERvbid0IGdlbmVyYXRlIGJhZCBzeW50YXggZm9yIHplcm8tY29sdW1u IHJlbGF0aW9uLiAqLworCWlmIChsaXN0X2xlbmd0aCgqcmV0cmlldmVkX2F0dHJzKSA9PSAw KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIk5VTEwiKTsKKworCS8qCisJICog Q29uc3RydWN0IEZST00gY2xhdXNlCisJICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIgRlJPTSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOworfQorCisvKgor ICogQ29uc3RydWN0IHRoZSBsaXN0IG9mIGNvbHVtbnMgb2YgZ2l2ZW4gZm9yZWlnbiByZWxh dGlvbiBpbiB0aGUgb3JkZXIgdGhleQorICogYXBwZWFyIGluIHRoZSB0dXBsZSBkZXNjcmlw dG9yIG9mIHRoZSByZWxhdGlvbi4gSWdub3JlIGFueSBkcm9wcGVkIGNvbHVtbnMuCisgKiBV c2UgY29sdW1uIG5hbWVzIG9uIHRoZSBmb3JlaWduIHNlcnZlciBpbnN0ZWFkIG9mIGxvY2Fs IG5hbWVzLgorICoKKyAqIE9wdGlvbmFsbHkgZW5jbG9zZSB0aGUgbGlzdCBpbiBwYXJhbnRo ZXNlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZVJlbENvbHVtbkxpc3QoU3RyaW5n SW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBlbmNsb3NlX2luX3BhcmVucykKIHsKIAlP aWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAlUdXBsZURlc2MJdHVwZGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKQEAgLTIwNzQsMTAgKzIxMTQsOCBAQCBkZXBh cnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBMaXN0ICoqcmV0 cmlldmVkX2F0dHJzKQogCUxpc3QJICAgKm9wdGlvbnM7CiAJTGlzdENlbGwgICAqbGM7CiAJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCUxpc3QJICAgKnJldHJpZXZlZF9hdHRycyA9IE5JTDsK IAotCSpyZXRyaWV2ZWRfYXR0cnMgPSBOSUw7Ci0KLQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlNFTEVDVCAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkr KykKIAl7CiAJCS8qIElnbm9yZSBkcm9wcGVkIGNvbHVtbnMuICovCkBAIC0yMDg2LDYgKzIx MjQsOSBAQCBkZXBhcnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs LCBMaXN0ICoqcmV0cmlldmVkX2F0dHJzKQogCiAJCWlmICghZmlyc3QpCiAJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisJCWVsc2UgaWYgKGVuY2xvc2VfaW5fcGFy ZW5zKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCiAJCWZpcnN0ID0g ZmFsc2U7CiAKIAkJLyogVXNlIGF0dHJpYnV0ZSBuYW1lIG9yIGNvbHVtbl9uYW1lIG9wdGlv bi4gKi8KQEAgLTIxMDUsMTggKzIxNDYsMTMgQEAgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5n SW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycykKIAogCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSk7 CiAKLQkJKnJldHJpZXZlZF9hdHRycyA9IGxhcHBlbmRfaW50KCpyZXRyaWV2ZWRfYXR0cnMs IGkgKyAxKTsKKwkJcmV0cmlldmVkX2F0dHJzID0gbGFwcGVuZF9pbnQocmV0cmlldmVkX2F0 dHJzLCBpICsgMSk7CiAJfQogCi0JLyogRG9uJ3QgZ2VuZXJhdGUgYmFkIHN5bnRheCBmb3Ig emVyby1jb2x1bW4gcmVsYXRpb24uICovCi0JaWYgKGZpcnN0KQotCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgIk5VTEwiKTsKKwlpZiAoZW5jbG9zZV9pbl9wYXJlbnMgJiYgbGlz dF9sZW5ndGgocmV0cmlldmVkX2F0dHJzKSA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGJ1ZiwgJyknKTsKIAotCS8qCi0JICogQ29uc3RydWN0IEZST00gY2xhdXNlCi0JICovCi0J YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRlJPTSAiKTsKLQlkZXBhcnNlUmVsYXRp b24oYnVmLCByZWwpOworCXJldHVybiByZXRyaWV2ZWRfYXR0cnM7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRl eCBjMTEwOTJmOGNjLi5kYjdiMDljMWZlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTgwNzYsOCArODA3Niw5IEBAIGNv cHkgcmVtMiBmcm9tIHN0ZGluOwogY29weSByZW0yIGZyb20gc3RkaW47IC0tIEVSUk9SCiBF UlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJsb2MyIiB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJsb2MyX2YxcG9zaXRpdmUiCiBERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlu cyAoLTEsIHh5enp5KS4KLUNPTlRFWFQ6ICByZW1vdGUgU1FMIGNvbW1hbmQ6IElOU0VSVCBJ TlRPIHB1YmxpYy5sb2MyKGYxLCBmMikgVkFMVUVTICgkMSwgJDIpCi1DT1BZIHJlbTIsIGxp bmUgMTogIi0xCXh5enp5IgorQ09OVEVYVDogIENPUFkgbG9jMiwgbGluZSAxOiAiLTEJeHl6 enkiCityZW1vdGUgU1FMIGNvbW1hbmQ6IENPUFkgcHVibGljLmxvYzIoZjEsIGYyKSBGUk9N IFNURElOIAorQ09QWSByZW0yLCBsaW5lIDIKIHNlbGVjdCAqIGZyb20gcmVtMjsKICBmMSB8 IGYyICAKIC0tLS0rLS0tLS0KQEAgLTgwODgsNiArODA4OSwxOSBAQCBzZWxlY3QgKiBmcm9t IHJlbTI7CiBhbHRlciBmb3JlaWduIHRhYmxlIHJlbTIgZHJvcCBjb25zdHJhaW50IHJlbTJf ZjFwb3NpdGl2ZTsKIGFsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb25zdHJhaW50IGxvYzJfZjFw b3NpdGl2ZTsKIGRlbGV0ZSBmcm9tIHJlbTI7CitjcmVhdGUgdGFibGUgZm9vIChhIGludCkg cGFydGl0aW9uIGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIGZvbzEgKGxpa2UgZm9vKTsK K2NyZWF0ZSBmb3JlaWduIHRhYmxlIGZmb28xIHBhcnRpdGlvbiBvZiBmb28gZm9yIHZhbHVl cyBpbiAoMSkKKwlzZXJ2ZXIgbG9vcGJhY2sgb3B0aW9ucyAodGFibGVfbmFtZSAnZm9vMScp OworY3JlYXRlIHRhYmxlIGZvbzIgKGxpa2UgZm9vKTsKK2NyZWF0ZSBmb3JlaWduIHRhYmxl IGZmb28yIHBhcnRpdGlvbiBvZiBmb28gZm9yIHZhbHVlcyBpbiAoMikKKwlzZXJ2ZXIgbG9v cGJhY2sgb3B0aW9ucyAodGFibGVfbmFtZSAnZm9vMicpOworY3JlYXRlIGZ1bmN0aW9uIHBy aW50X25ld19yb3coKSByZXR1cm5zIHRyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcyAkJAor CWJlZ2luIHJhaXNlIG5vdGljZSAnJScsIG5ldzsgcmV0dXJuIG5ldzsgZW5kOyAkJDsKK2Ny ZWF0ZSB0cmlnZ2VyIGZmb28xX2JyX3RyaWcgYmVmb3JlIGluc2VydCBvbiBmZm9vMQorCWZv ciBlYWNoIHJvdyBleGVjdXRlIGZ1bmN0aW9uIHByaW50X25ld19yb3coKTsKK2NvcHkgZm9v IGZyb20gc3RkaW47CitOT1RJQ0U6ICAoMSkKIC0tIFRlc3QgbG9jYWwgdHJpZ2dlcnMKIGNy ZWF0ZSB0cmlnZ2VyIHRyaWdfc3RtdF9iZWZvcmUgYmVmb3JlIGluc2VydCBvbiByZW0yCiAJ Zm9yIGVhY2ggc3RhdGVtZW50IGV4ZWN1dGUgcHJvY2VkdXJlIHRyaWdnZXJfZnVuYygpOwpA QCAtODE5Niw2ICs4MjEwLDM0IEBAIGRyb3AgdHJpZ2dlciByZW0yX3RyaWdfcm93X2JlZm9y ZSBvbiByZW0yOwogZHJvcCB0cmlnZ2VyIHJlbTJfdHJpZ19yb3dfYWZ0ZXIgb24gcmVtMjsK IGRyb3AgdHJpZ2dlciBsb2MyX3RyaWdfcm93X2JlZm9yZV9pbnNlcnQgb24gbG9jMjsKIGRl bGV0ZSBmcm9tIHJlbTI7CithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOworYWx0 ZXIgdGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOwor RVJST1I6ICBjb2x1bW4gImYxIiBvZiByZWxhdGlvbiAibG9jMiIgZG9lcyBub3QgZXhpc3QK K0NPTlRFWFQ6ICByZW1vdGUgU1FMIGNvbW1hbmQ6IENPUFkgcHVibGljLmxvYzIoZjEsIGYy KSBGUk9NIFNURElOIAorQ09QWSByZW0yLCBsaW5lIDMKK2FsdGVyIHRhYmxlIGxvYzIgYWRk IGNvbHVtbiBmMSBpbnQ7CithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjIgaW50Owor c2VsZWN0ICogZnJvbSByZW0yOworIGYxIHwgZjIgCistLS0tKy0tLS0KKygwIHJvd3MpCisK Ky0tIGRyb3BwZWQgY29sdW1ucyBsb2NhbGx5IGFuZCBvbiB0aGUgZm9yZWlnbiBzZXJ2ZXIK K2FsdGVyIHRhYmxlIHJlbTIgZHJvcCBjb2x1bW4gZjE7CithbHRlciB0YWJsZSByZW0yIGRy b3AgY29sdW1uIGYyOworY29weSByZW0yIGZyb20gc3RkaW47CitzZWxlY3QgKiBmcm9tIHJl bTI7CistLQorKDIgcm93cykKKworYWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMTsK K2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIgZnJvbSBzdGRp bjsKK3NlbGVjdCAqIGZyb20gcmVtMjsKKy0tCisoNCByb3dzKQorCiAtLSB0ZXN0IENPUFkg RlJPTSB3aXRoIGZvcmVpZ24gdGFibGUgY3JlYXRlZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlv bgogY3JlYXRlIHRhYmxlIGxvYzMgKGYxIGludCwgZjIgdGV4dCk7CiBiZWdpbjsKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggYjZjNzJlMWQxZS4uYTRhMDc4YTc2 YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysr IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTE4LDYgKzE4LDcg QEAKICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJs ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjb21tYW5k cy9jb3B5LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvZXhwbGFpbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgpAQCAtMTkx LDYgKzE5Miw3IEBAIHR5cGVkZWYgc3RydWN0IFBnRmR3TW9kaWZ5U3RhdGUKIAkvKiBmb3Ig dXBkYXRlIHJvdyBtb3ZlbWVudCBpZiBzdWJwbGFuIHJlc3VsdCByZWwgKi8KIAlzdHJ1Y3Qg UGdGZHdNb2RpZnlTdGF0ZSAqYXV4X2Ztc3RhdGU7CS8qIGZvcmVpZ24taW5zZXJ0IHN0YXRl LCBpZgogCQkJCQkJCQkJCQkgKiBjcmVhdGVkICovCisJQ29weVRvU3RhdGUgY3N0YXRlOyAv KiBmb3JlaWduIENPUFkgc3RhdGUsIGlmIHVzZWQgKi8KIH0gUGdGZHdNb2RpZnlTdGF0ZTsK IAogLyoKQEAgLTM1Nyw2ICszNTksMTMgQEAgc3RhdGljIHZvaWQgcG9zdGdyZXNCZWdpbkZv cmVpZ25JbnNlcnQoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCQkJCSAgIFJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pOwogc3RhdGljIHZvaWQgcG9zdGdyZXNFbmRG b3JlaWduSW5zZXJ0KEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQkJIFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8pOworc3RhdGljIHZvaWQgcG9zdGdyZXNCZWdpbkZvcmVpZ25Db3B5 KE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCisJCQkJCQkJCQkgICBSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvKTsKK3N0YXRpYyB2b2lkIHBvc3RncmVzRW5kRm9yZWlnbkNvcHko RVN0YXRlICplc3RhdGUsCisJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m byk7CitzdGF0aWMgdm9pZCBwb3N0Z3Jlc0V4ZWNGb3JlaWduQ29weShSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAor CQkJCQkJCQkJICBpbnQgbnNsb3RzKTsKIHN0YXRpYyBpbnQJcG9zdGdyZXNJc0ZvcmVpZ25S ZWxVcGRhdGFibGUoUmVsYXRpb24gcmVsKTsKIHN0YXRpYyBib29sIHBvc3RncmVzUGxhbkRp cmVjdE1vZGlmeShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBNb2RpZnlUYWJsZSAq cGxhbiwKQEAgLTUzNSw2ICs1NDQsOSBAQCBwb3N0Z3Jlc19mZHdfaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCXJvdXRpbmUtPkVuZEZvcmVpZ25Nb2RpZnkgPSBwb3N0Z3Jlc0VuZEZv cmVpZ25Nb2RpZnk7CiAJcm91dGluZS0+QmVnaW5Gb3JlaWduSW5zZXJ0ID0gcG9zdGdyZXNC ZWdpbkZvcmVpZ25JbnNlcnQ7CiAJcm91dGluZS0+RW5kRm9yZWlnbkluc2VydCA9IHBvc3Rn cmVzRW5kRm9yZWlnbkluc2VydDsKKwlyb3V0aW5lLT5CZWdpbkZvcmVpZ25Db3B5ID0gcG9z dGdyZXNCZWdpbkZvcmVpZ25Db3B5OworCXJvdXRpbmUtPkVuZEZvcmVpZ25Db3B5ID0gcG9z dGdyZXNFbmRGb3JlaWduQ29weTsKKwlyb3V0aW5lLT5FeGVjRm9yZWlnbkNvcHkgPSBwb3N0 Z3Jlc0V4ZWNGb3JlaWduQ29weTsKIAlyb3V0aW5lLT5Jc0ZvcmVpZ25SZWxVcGRhdGFibGUg PSBwb3N0Z3Jlc0lzRm9yZWlnblJlbFVwZGF0YWJsZTsKIAlyb3V0aW5lLT5QbGFuRGlyZWN0 TW9kaWZ5ID0gcG9zdGdyZXNQbGFuRGlyZWN0TW9kaWZ5OwogCXJvdXRpbmUtPkJlZ2luRGly ZWN0TW9kaWZ5ID0gcG9zdGdyZXNCZWdpbkRpcmVjdE1vZGlmeTsKQEAgLTIwNTIsNiArMjA2 NCwxMjQgQEAgcG9zdGdyZXNFbmRGb3JlaWduSW5zZXJ0KEVTdGF0ZSAqZXN0YXRlLAogCWZp bmlzaF9mb3JlaWduX21vZGlmeShmbXN0YXRlKTsKIH0KIAorc3RhdGljIFBnRmR3TW9kaWZ5 U3RhdGUgKmNvcHlfZm1zdGF0ZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitwZ2Zkd19jb3B5 X2Rlc3RfY2Iodm9pZCAqYnVmLCBpbnQgbGVuKQoreworCVBHY29ubiAqY29ubiA9IGNvcHlf Zm1zdGF0ZS0+Y29ubjsKKworCWlmIChQUXB1dENvcHlEYXRhKGNvbm4sIChjaGFyICopIGJ1 ZiwgbGVuKSA8PSAwKQorCQlwZ2Zkd19yZXBvcnRfZXJyb3IoRVJST1IsIE5VTEwsIGNvbm4s IGZhbHNlLCBjb3B5X2Ztc3RhdGUtPnF1ZXJ5KTsKK30KKworLyoKKyAqIHBvc3RncmVzQmVn aW5Gb3JlaWduQ29weQorICoJCUJlZ2luIGFuIENPUFkgb3BlcmF0aW9uIG9uIGEgZm9yZWln biB0YWJsZQorICovCitzdGF0aWMgdm9pZAorcG9zdGdyZXNCZWdpbkZvcmVpZ25Db3B5KE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCisJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvKQoreworCVBnRmR3TW9kaWZ5U3RhdGUgKmZtc3RhdGU7CisJU3RyaW5nSW5m b0RhdGEgc3FsOworCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwlSZWxhdGlvbiByZWwgPSByZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisKKwlydGUgPSBleGVjX3J0X2ZldGNoKHJl c3VsdFJlbEluZm8tPnJpX1JhbmdlVGFibGVJbmRleCwgbXRzdGF0ZS0+cHMuc3RhdGUpOwor CWluaXRTdHJpbmdJbmZvKCZzcWwpOworCWRlcGFyc2VDb3B5RnJvbVNxbCgmc3FsLCByZWwp OworCisJZm1zdGF0ZSA9IGNyZWF0ZV9mb3JlaWduX21vZGlmeShtdHN0YXRlLT5wcy5zdGF0 ZSwKKwkJCQkJCQkJCXJ0ZSwKKwkJCQkJCQkJCXJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQlD TURfSU5TRVJULAorCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCXNxbC5kYXRhLAorCQkJCQkJ CQkJTklMLAorCQkJCQkJCQkJZmFsc2UsCisJCQkJCQkJCQlOSUwpOworCisJZm1zdGF0ZS0+ Y3N0YXRlID0gQmVnaW5Db3B5VG8oTlVMTCwgTlVMTCwgUmVsYXRpb25HZXREZXNjcihyZWwp LCBOVUxMLAorCQkJCQkJCQkgIEludmFsaWRPaWQsIE5VTEwsIGZhbHNlLCBwZ2Zkd19jb3B5 X2Rlc3RfY2IsCisJCQkJCQkJCSAgTklMLCBOSUwpOworCUNvcHlUb1N0YXJ0KGZtc3RhdGUt PmNzdGF0ZSk7CisJcmVzdWx0UmVsSW5mby0+cmlfRmR3U3RhdGUgPSBmbXN0YXRlOworfQor CisvKgorICogcG9zdGdyZXNFbmRGb3JlaWduQ29weQorICoJCUZpbmlzaCBhbiBDT1BZIG9w ZXJhdGlvbiBvbiBhIGZvcmVpZ24gdGFibGUKKyAqLworc3RhdGljIHZvaWQKK3Bvc3RncmVz RW5kRm9yZWlnbkNvcHkoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8pCit7CisJUGdGZHdNb2RpZnlTdGF0ZSAqZm1zdGF0ZSA9IChQZ0Zkd01vZGlmeVN0 YXRlICopIHJlc3VsdFJlbEluZm8tPnJpX0Zkd1N0YXRlOworCisJLyogQ2hlY2sgY29ycmVj dCB1c2Ugb2YgQ29weUluIEZEVyBBUEkuICovCisJQXNzZXJ0KGZtc3RhdGUtPmNzdGF0ZSAh PSBOVUxMKTsKKwlDb3B5VG9GaW5pc2goZm1zdGF0ZS0+Y3N0YXRlKTsKKwlwZnJlZShmbXN0 YXRlLT5jc3RhdGUpOworCWZtc3RhdGUtPmNzdGF0ZSA9IE5VTEw7CisJZmluaXNoX2ZvcmVp Z25fbW9kaWZ5KGZtc3RhdGUpOworfQorCisvKgorICogcG9zdGdyZXNFeGVjRm9yZWlnbkNv cHkKKyAqCQlTZW5kIGEgbnVtYmVyIG9mIHR1cGxlcyB0byB0aGUgZm9yZWlnbiByZWxhdGlv bi4KKyAqLworc3RhdGljIHZvaWQKK3Bvc3RncmVzRXhlY0ZvcmVpZ25Db3B5KFJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICoqc2xvdHMs IGludCBuc2xvdHMpCit7CisJUGdGZHdNb2RpZnlTdGF0ZSAqZm1zdGF0ZSA9IHJlc3VsdFJl bEluZm8tPnJpX0Zkd1N0YXRlOworCVBHcmVzdWx0ICpyZXM7CisJUEdjb25uICpjb25uID0g Zm1zdGF0ZS0+Y29ubjsKKwlib29sIE9LID0gZmFsc2U7CisJaW50IGk7CisKKwkvKiBDaGVj ayBjb3JyZWN0IHVzZSBvZiBDb3B5SW4gRkRXIEFQSS4gKi8KKwlBc3NlcnQoZm1zdGF0ZS0+ Y3N0YXRlICE9IE5VTEwpOworCisJcmVzID0gUFFleGVjKGNvbm4sIGZtc3RhdGUtPnF1ZXJ5 KTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT1BZX0lOKQorCQlwZ2Zk d19yZXBvcnRfZXJyb3IoRVJST1IsIHJlcywgY29ubiwgdHJ1ZSwgZm1zdGF0ZS0+cXVlcnkp OworCVBRY2xlYXIocmVzKTsKKworCVBHX1RSWSgpOworCXsKKwkJY29weV9mbXN0YXRlID0g Zm1zdGF0ZTsKKwkJZm9yIChpID0gMDsgaSA8IG5zbG90czsgaSsrKQorCQkJQ29weU9uZVJv d1RvKGZtc3RhdGUtPmNzdGF0ZSwgc2xvdHNbaV0pOworCisJCU9LID0gdHJ1ZTsKKwl9CisJ UEdfRklOQUxMWSgpOworCXsKKwkJLyoKKwkJICogRmluaXNoIENPUFkgSU4gcHJvdG9jb2wu IEl0IGlzIG5lZWRlZCB0byBkbyBhZnRlciBzdWNjZXNzZnVsIGNvcHkgb3IKKwkJICogYWZ0 ZXIgYW4gZXJyb3IuCisJCSAqLworCQlpZiAoUFFwdXRDb3B5RW5kKGNvbm4sIE9LID8gTlVM TCA6IF8oImNhbmNlbGVkIGJ5IHNlcnZlciIpKSA8PSAwIHx8CisJCQlQUWZsdXNoKGNvbm4p KQorCQkJcGdmZHdfcmVwb3J0X2Vycm9yKEVSUk9SLCBOVUxMLCBmbXN0YXRlLT5jb25uLCBm YWxzZSwgZm1zdGF0ZS0+cXVlcnkpOworCisJCS8qIEFmdGVyIHN1Y2Nlc3NmdWxseSAgc2Vu ZGluZyBhbiBFT0Ygc2lnbmFsLCBjaGVjayBjb21tYW5kIE9LLiAqLworCQlyZXMgPSBQUWdl dFJlc3VsdChjb25uKTsKKwkJaWYgKCghT0sgJiYgUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19GQVRBTF9FUlJPUikgfHwKKwkJCShPSyAmJiBQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX0NPTU1BTkRfT0spKQorCQkJcGdmZHdfcmVwb3J0X2Vycm9yKEVSUk9SLCByZXMs IGZtc3RhdGUtPmNvbm4sIHRydWUsIGZtc3RhdGUtPnF1ZXJ5KTsKKworCQlQUWNsZWFyKHJl cyk7CisJCS8qIERvIHRoaXMgdG8gZW5zdXJlIHdlJ3ZlIHB1bXBlZCBsaWJwcSBiYWNrIHRv IGlkbGUgc3RhdGUgKi8KKwkJaWYgKFBRZ2V0UmVzdWx0KGNvbm4pICE9IE5VTEwpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGV4dHJhIHJlc3VsdHMg ZHVyaW5nIENPUFkgb2YgdGFibGU6ICVzIiwKKwkJCQkJCQlQUWVycm9yTWVzc2FnZShjb25u KSkpKTsKKwl9CisJUEdfRU5EX1RSWSgpOworfQorCiAvKgogICogcG9zdGdyZXNJc0ZvcmVp Z25SZWxVcGRhdGFibGUKICAqCQlEZXRlcm1pbmUgd2hldGhlciBhIGZvcmVpZ24gdGFibGUg c3VwcG9ydHMgSU5TRVJULCBVUERBVEUgYW5kL29yCmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5oCmluZGV4IGVlZjQxMGRiMzkuLjhmYzVmZjAxOGYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oCisrKyBiL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L3Bvc3RncmVzX2Zkdy5oCkBAIC0xNjIsNiArMTYyLDcgQEAgZXh0ZXJuIHZvaWQg ZGVwYXJzZUluc2VydFNxbChTdHJpbmdJbmZvIGJ1ZiwgUmFuZ2VUYmxFbnRyeSAqcnRlLAog CQkJCQkJCSBMaXN0ICp0YXJnZXRBdHRycywgYm9vbCBkb05vdGhpbmcsCiAJCQkJCQkJIExp c3QgKndpdGhDaGVja09wdGlvbkxpc3QsIExpc3QgKnJldHVybmluZ0xpc3QsCiAJCQkJCQkJ IExpc3QgKipyZXRyaWV2ZWRfYXR0cnMpOworZXh0ZXJuIHZvaWQgZGVwYXJzZUNvcHlGcm9t U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgZGVwYXJz ZVVwZGF0ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCQkJCQkJ CSBJbmRleCBydGluZGV4LCBSZWxhdGlvbiByZWwsCiAJCQkJCQkJIExpc3QgKnRhcmdldEF0 dHJzLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRl eCAyNWRiYzA4Yjk4Li41M2I5ZDg2NWRhIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9z cWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMjIxMiw2ICsyMjEyLDIzIEBAIGFsdGVyIHRhYmxl IGxvYzIgZHJvcCBjb25zdHJhaW50IGxvYzJfZjFwb3NpdGl2ZTsKIAogZGVsZXRlIGZyb20g cmVtMjsKIAorY3JlYXRlIHRhYmxlIGZvbyAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChh KTsKK2NyZWF0ZSB0YWJsZSBmb28xIChsaWtlIGZvbyk7CitjcmVhdGUgZm9yZWlnbiB0YWJs ZSBmZm9vMSBwYXJ0aXRpb24gb2YgZm9vIGZvciB2YWx1ZXMgaW4gKDEpCisJc2VydmVyIGxv b3BiYWNrIG9wdGlvbnMgKHRhYmxlX25hbWUgJ2ZvbzEnKTsKK2NyZWF0ZSB0YWJsZSBmb28y IChsaWtlIGZvbyk7CitjcmVhdGUgZm9yZWlnbiB0YWJsZSBmZm9vMiBwYXJ0aXRpb24gb2Yg Zm9vIGZvciB2YWx1ZXMgaW4gKDIpCisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxl X25hbWUgJ2ZvbzInKTsKK2NyZWF0ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93KCkgcmV0dXJu cyB0cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMgJCQKKwliZWdpbiByYWlzZSBub3RpY2Ug JyUnLCBuZXc7IHJldHVybiBuZXc7IGVuZDsgJCQ7CitjcmVhdGUgdHJpZ2dlciBmZm9vMV9i cl90cmlnIGJlZm9yZSBpbnNlcnQgb24gZmZvbzEKKwlmb3IgZWFjaCByb3cgZXhlY3V0ZSBm dW5jdGlvbiBwcmludF9uZXdfcm93KCk7CisKK2NvcHkgZm9vIGZyb20gc3RkaW47CisxCisy CitcLgorCiAtLSBUZXN0IGxvY2FsIHRyaWdnZXJzCiBjcmVhdGUgdHJpZ2dlciB0cmlnX3N0 bXRfYmVmb3JlIGJlZm9yZSBpbnNlcnQgb24gcmVtMgogCWZvciBlYWNoIHN0YXRlbWVudCBl eGVjdXRlIHByb2NlZHVyZSB0cmlnZ2VyX2Z1bmMoKTsKQEAgLTIzMTIsNiArMjMyOSwzNCBA QCBkcm9wIHRyaWdnZXIgbG9jMl90cmlnX3Jvd19iZWZvcmVfaW5zZXJ0IG9uIGxvYzI7CiAK IGRlbGV0ZSBmcm9tIHJlbTI7CiAKK2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjE7 CithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYyOworY29weSByZW0yIGZyb20gc3Rk aW47CisxCWZvbworMgliYXIKK1wuCisKK2FsdGVyIHRhYmxlIGxvYzIgYWRkIGNvbHVtbiBm MSBpbnQ7CithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjIgaW50Oworc2VsZWN0ICog ZnJvbSByZW0yOworCistLSBkcm9wcGVkIGNvbHVtbnMgbG9jYWxseSBhbmQgb24gdGhlIGZv cmVpZ24gc2VydmVyCithbHRlciB0YWJsZSByZW0yIGRyb3AgY29sdW1uIGYxOworYWx0ZXIg dGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworCisK K1wuCitzZWxlY3QgKiBmcm9tIHJlbTI7CisKK2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1 bW4gZjE7CithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYyOworY29weSByZW0yIGZy b20gc3RkaW47CisKKworXC4KK3NlbGVjdCAqIGZyb20gcmVtMjsKKwogLS0gdGVzdCBDT1BZ IEZST00gd2l0aCBmb3JlaWduIHRhYmxlIGNyZWF0ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rp b24KIGNyZWF0ZSB0YWJsZSBsb2MzIChmMSBpbnQsIGYyIHRleHQpOwogYmVnaW47CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvZmR3aGFuZGxlci5zZ21sIGIvZG9jL3NyYy9zZ21sL2Zk d2hhbmRsZXIuc2dtbAppbmRleCA5YzkyOTM0MTRjLi5hOWE3NDAyNDQwIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvZmR3aGFuZGxlci5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mZHdo YW5kbGVyLnNnbWwKQEAgLTc5Niw2ICs3OTYsNzkgQEAgRW5kRm9yZWlnbkluc2VydChFU3Rh dGUgKmVzdGF0ZSwKIAogICAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgordm9pZAorQmVn aW5Gb3JlaWduQ29weShNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAorICAgICAgICAgICAg ICAgICAgIFJlc3VsdFJlbEluZm8gKnJpbmZvKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAg ICAgQmVnaW4gZXhlY3V0aW5nIGFuIGNvcHkgb3BlcmF0aW9uIG9uIGEgZm9yZWlnbiB0YWJs ZS4gVGhpcyByb3V0aW5lIGlzCisgICAgIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGZpcnN0 IGNhbGwgb2YgPGZ1bmN0aW9uPkV4ZWNGb3JlaWduQ29weTwvZnVuY3Rpb24+CisgICAgIHJv dXRpbmUgZm9yIHRoZSBmb3JlaWduIHRhYmxlLiBJdCBzaG91bGQgcGVyZm9ybSBhbnkgaW5p dGlhbGl6YXRpb24gbmVlZGVkCisgICAgIHByaW9yIHRvIHRoZSBhY3R1YWwgQ09QWSBGUk9N IG9wZXJhdGlvbi4KKyAgICAgU3Vic2VxdWVudGx5LCA8ZnVuY3Rpb24+RXhlY0ZvcmVpZ25D b3B5PC9mdW5jdGlvbj4gd2lsbCBiZSBjYWxsZWQgZm9yCisgICAgIGEgYnVsayBvZiB0dXBs ZXMgdG8gYmUgY29waWVkIGludG8gdGhlIGZvcmVpZ24gdGFibGUuCisgICAgPC9wYXJhPgor CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPm10c3RhdGU8L2xpdGVyYWw+IGlzIHRoZSBv dmVyYWxsIHN0YXRlIG9mIHRoZQorICAgICA8c3RydWN0bmFtZT5Nb2RpZnlUYWJsZTwvc3Ry dWN0bmFtZT4gcGxhbiBub2RlIGJlaW5nIGV4ZWN1dGVkOyBnbG9iYWwgZGF0YSBhYm91dAor ICAgICB0aGUgcGxhbiBhbmQgZXhlY3V0aW9uIHN0YXRlIGlzIGF2YWlsYWJsZSB2aWEgdGhp cyBzdHJ1Y3R1cmUuCisgICAgIDxsaXRlcmFsPnJpbmZvPC9saXRlcmFsPiBpcyB0aGUgPHN0 cnVjdG5hbWU+UmVzdWx0UmVsSW5mbzwvc3RydWN0bmFtZT4gc3RydWN0IGRlc2NyaWJpbmcK KyAgICAgdGhlIHRhcmdldCBmb3JlaWduIHRhYmxlLiAgKFRoZSA8c3RydWN0ZmllbGQ+cmlf RmR3U3RhdGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorICAgICA8c3RydWN0bmFtZT5SZXN1 bHRSZWxJbmZvPC9zdHJ1Y3RuYW1lPiBpcyBhdmFpbGFibGUgZm9yIHRoZSBGRFcgdG8gc3Rv cmUgYW55CisgICAgIHByaXZhdGUgc3RhdGUgaXQgbmVlZHMgZm9yIHRoaXMgb3BlcmF0aW9u LikKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgV2hlbiB0aGlzIGlzIGNhbGxl ZCBieSBhIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4gY29tbWFuZCwgdGhlCisgICAg IHBsYW4tcmVsYXRlZCBnbG9iYWwgZGF0YSBpbiA8bGl0ZXJhbD5tdHN0YXRlPC9saXRlcmFs PiBpcyBub3QgcHJvdmlkZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIElm IHRoZSA8ZnVuY3Rpb24+QmVnaW5Gb3JlaWduQ29weTwvZnVuY3Rpb24+IHBvaW50ZXIgaXMg c2V0IHRvCisgICAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCBubyBhY3Rpb24gaXMgdGFr ZW4gZm9yIHRoZSBpbml0aWFsaXphdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4K Kzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK0VuZEZvcmVpZ25Db3B5KEVTdGF0ZSAqZXN0YXRl LAorICAgICAgICAgICAgICAgICBSZXN1bHRSZWxJbmZvICpyaW5mbyk7Cis8L3Byb2dyYW1s aXN0aW5nPgorCisgICAgIEVuZCB0aGUgY29weSBvcGVyYXRpb24gYW5kIHJlbGVhc2UgcmVz b3VyY2VzLiAgSXQgaXMgbm9ybWFsbHkgbm90IGltcG9ydGFudAorICAgICB0byByZWxlYXNl IHBhbGxvYydkIG1lbW9yeSwgYnV0IGZvciBleGFtcGxlIG9wZW4gZmlsZXMgYW5kIGNvbm5l Y3Rpb25zCisgICAgIHRvIHJlbW90ZSBzZXJ2ZXJzIHNob3VsZCBiZSBjbGVhbmVkIHVwLgor ICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBJZiB0aGUgPGZ1bmN0aW9uPkVuZEZv cmVpZ25Db3B5PC9mdW5jdGlvbj4gcG9pbnRlciBpcyBzZXQgdG8KKyAgICAgPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4sIG5vIGFjdGlvbiBpcyB0YWtlbiBmb3IgdGhlIHRlcm1pbmF0aW9u LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAor RXhlY0ZvcmVpZ25Db3B5KFJlc3VsdFJlbEluZm8gKnJpbmZvLAorICAgICAgICAgICAgICAg ICAgVHVwbGVUYWJsZVNsb3QgKipzbG90cywKKyAgICAgICAgICAgICAgICAgIGludCBuc2xv dHMpOworPC9wcm9ncmFtbGlzdGluZz4KKworICAgICBDb3B5IGEgYnVsayBvZiB0dXBsZXMg aW50byB0aGUgZm9yZWlnbiB0YWJsZS4KKyAgICAgIDxsaXRlcmFsPnJpbmZvPC9saXRlcmFs PiBpcyB0aGUgPHN0cnVjdG5hbWU+UmVzdWx0UmVsSW5mbzwvc3RydWN0bmFtZT4gc3RydWN0 IGRlc2NyaWJpbmcKKyAgICAgdGhlIHRhcmdldCBmb3JlaWduIHRhYmxlLgorICAgICA8bGl0 ZXJhbD5zbG90czwvbGl0ZXJhbD4gY29udGFpbnMgdGhlIHR1cGxlcyB0byBiZSBpbnNlcnRl ZDsgaXQgd2lsbCBtYXRjaCB0aGUKKyAgICAgcm93LXR5cGUgZGVmaW5pdGlvbiBvZiB0aGUg Zm9yZWlnbiB0YWJsZS4KKyAgICAgPGxpdGVyYWw+bnNsb3RzPC9saXRlcmFsPiBpcyBhIG51 bWJlciBvZiB0dXBsZXMgaW4gdGhlIDxsaXRlcmFsPnNsb3RzPC9saXRlcmFsPgorICAgIDwv cGFyYT4KKworICAgIDxwYXJhPgorICAgICBJZiB0aGUgPGZ1bmN0aW9uPkV4ZWNGb3JlaWdu Q29weTwvZnVuY3Rpb24+IHBvaW50ZXIgaXMgc2V0IHRvCisgICAgIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+LCB0aGUgPGZ1bmN0aW9uPkV4ZWNGb3JlaWduSW5zZXJ0PC9mdW5jdGlvbj4g cm91dGluZSB3aWxsIGJlIHVzZWQgdG8gcnVuIENPUFkgb24gdGhlIGZvcmVpZ24gdGFibGUu CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CiBpbnQKIElz Rm9yZWlnblJlbFVwZGF0YWJsZShSZWxhdGlvbiByZWwpOwogPC9wcm9ncmFtbGlzdGluZz4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHkuYwppbmRleCBiNjE0M2I4YmYyLi4zMmNmZjAwNzYyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jCkBAIC0zMDMsOCArMzAzLDggQEAgRG9Db3B5KFBhcnNlU3RhdGUgKnBz dGF0ZSwgY29uc3QgQ29weVN0bXQgKnN0bXQsCiAJewogCQlDb3B5VG9TdGF0ZSBjc3RhdGU7 CiAKLQkJY3N0YXRlID0gQmVnaW5Db3B5VG8ocHN0YXRlLCByZWwsIHF1ZXJ5LCByZWxpZCwK LQkJCQkJCQkgc3RtdC0+ZmlsZW5hbWUsIHN0bXQtPmlzX3Byb2dyYW0sCisJCWNzdGF0ZSA9 IEJlZ2luQ29weVRvKHBzdGF0ZSwgcmVsLCBOVUxMLCBxdWVyeSwgcmVsaWQsCisJCQkJCQkJ IHN0bXQtPmZpbGVuYW1lLCBzdG10LT5pc19wcm9ncmFtLCBOVUxMLAogCQkJCQkJCSBzdG10 LT5hdHRsaXN0LCBzdG10LT5vcHRpb25zKTsKIAkJKnByb2Nlc3NlZCA9IERvQ29weVRvKGNz dGF0ZSk7CS8qIGNvcHkgZnJvbSBkYXRhYmFzZSB0byBmaWxlICovCiAJCUVuZENvcHlUbyhj c3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggNmQ0ZjZjYjgwZC4uMTdh YWMyNGJkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0zMTQsNTQgKzMxNCw2 MyBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICpt aWluZm8sCiAJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGZhbHNlOwogCXNhdmVfY3VyX2xp bmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKIAotCS8qCi0JICogdGFibGVfbXVsdGlfaW5z ZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQot CSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQuCi0JICovCi0Jb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7 Ci0JdGFibGVfbXVsdGlfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywK LQkJCQkJICAgc2xvdHMsCi0JCQkJCSAgIG51c2VkLAotCQkJCQkgICBteWNpZCwKLQkJCQkJ ICAgdGlfb3B0aW9ucywKLQkJCQkJICAgYnVmZmVyLT5iaXN0YXRlKTsKLQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVzZWQ7IGkr KykKKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQorCXsKKwkJLyogRmx1c2ggaW50byBmb3Jl aWduIHRhYmxlIG9yIHBhcnRpdGlvbiAqLworCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0 aW5lLT5FeGVjRm9yZWlnbkNvcHkocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJc2xv dHMsCisJCQkJCQkJCQkJCQkJCW51c2VkKTsKKwl9CisJZWxzZQogCXsKIAkJLyoKLQkJICog SWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxsIHRoZSBpbnNl cnRlZCB0dXBsZXMsCi0JCSAqIGFuZCBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4K KwkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRv IHNob3J0LWxpdmVkIG1lbW9yeQorCQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0Lgog CQkgKi8KLQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQotCQl7Ci0J CQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKLQotCQkJY3N0YXRlLT5jdXJfbGluZW5vID0g YnVmZmVyLT5saW5lbm9zW2ldOwotCQkJcmVjaGVja0luZGV4ZXMgPQotCQkJCUV4ZWNJbnNl cnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJICBidWZmZXItPnNsb3Rz W2ldLCBlc3RhdGUsIGZhbHNlLCBOVUxMLAotCQkJCQkJCQkJICBOSUwpOwotCQkJRXhlY0FS SW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkgc2xvdHNb aV0sIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1 cmUpOwotCQkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKLQkJfQorCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3Rh dGUpKTsKKwkJdGFibGVfbXVsdGlfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYywKKwkJCQkJCSAgIHNsb3RzLAorCQkJCQkJICAgbnVzZWQsCisJCQkJCQkgICBteWNp ZCwKKwkJCQkJCSAgIHRpX29wdGlvbnMsCisJCQkJCQkgICBidWZmZXItPmJpc3RhdGUpOwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKLQkJLyoKLQkJICogVGhl cmUncyBubyBpbmRleGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJ TlNFUlQKLQkJICogdHJpZ2dlcnMgYW55d2F5LgotCQkgKi8KLQkJZWxzZSBpZiAocmVzdWx0 UmVsSW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkJCSAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAotCQkJCSAgcmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCisJCWZvciAoaSA9 IDA7IGkgPCBudXNlZDsgaSsrKQogCQl7Ci0JCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZm ZXItPmxpbmVub3NbaV07Ci0JCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3Vs dFJlbEluZm8sCi0JCQkJCQkJCSBzbG90c1tpXSwgTklMLCBjc3RhdGUtPnRyYW5zaXRpb25f Y2FwdHVyZSk7Ci0JCX0KKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgYW55IGluZGV4ZXMs IHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGluc2VydGVkIHR1cGxlcywKKwkJCSAqIGFuZCBy dW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KKwkJCSAqLworCQkJaWYgKHJlc3VsdFJl bEluZm8tPnJpX051bUluZGljZXMgPiAwKQorCQkJeworCQkJCUxpc3QJICAgKnJlY2hlY2tJ bmRleGVzOworCisJCQkJY3N0YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ld OworCQkJCXJlY2hlY2tJbmRleGVzID0KKwkJCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJl c3VsdFJlbEluZm8sIGJ1ZmZlci0+c2xvdHNbaV0sCisJCQkJCQkJCQkJICBlc3RhdGUsIGZh bHNlLCBOVUxMLCBOSUwpOworCQkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVz dWx0UmVsSW5mbywKKwkJCQkJCQkJCSBzbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCisJCQkJ CQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOworCQkJCWxpc3RfZnJlZShyZWNo ZWNrSW5kZXhlcyk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGVyZSdzIG5vIGluZGV4ZXMs IGJ1dCBzZWUgaWYgd2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVAorCQkJICogdHJp Z2dlcnMgYW55d2F5LgorCQkJICovCisJCQllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYyAhPSBOVUxMICYmCisJCQkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpKQorCQkJeworCQkJCWNzdGF0ZS0+Y3Vy X2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKKwkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vy cyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQkgc2xvdHNbaV0sIE5JTCwgY3N0 YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOworCQkJfQogCi0JCUV4ZWNDbGVhclR1cGxlKHNs b3RzW2ldKTsKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3RzW2ldKTsKKwkJfQogCX0KIAogCS8q IE1hcmsgdGhhdCBhbGwgc2xvdHMgYXJlIGZyZWUgKi8KQEAgLTY2Niw4ICs2NzUsMTEgQEAg Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJICogY2hlY2tlZCBieSBjYWxsaW5n IEV4ZWNTZXRSZWxhdGlvblVzZXNNdWx0aUluc2VydCgpLiAgSXQgZG9lcyBub3QgbWF0dGVy CiAJICogd2hldGhlciBwYXJ0aXRpb25zIGhhdmUgYW55IHZvbGF0aWxlIGRlZmF1bHQgZXhw cmVzc2lvbnMgYXMgd2UgdXNlIHRoZQogCSAqIGRlZmF1bHRzIGZyb20gdGhlIHRhcmdldCBv ZiB0aGUgQ09QWSBjb21tYW5kLgorCSAqIEFsc28sIHRoZSBDT1BZIGNvbW1hbmQgcmVxdWly ZXMgYSBub24temVybyBpbnB1dCBsaXN0IG9mIGF0dHJpYnV0ZXMuCisJICogVGhlcmVmb3Jl LCB0aGUgbGVuZ3RoIG9mIHRoZSBhdHRyaWJ1dGUgbGlzdCBpcyBjaGVja2VkIGhlcmUuCiAJ ICovCiAJaWYgKCFjc3RhdGUtPnZvbGF0aWxlX2RlZmV4cHJzICYmCisJCWxpc3RfbGVuZ3Ro KGNzdGF0ZS0+YXR0bnVtbGlzdCkgPiAwICYmCiAJCSFjb250YWluX3ZvbGF0aWxlX2Z1bmN0 aW9ucyhjc3RhdGUtPndoZXJlQ2xhdXNlKSkKIAkJdGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJp X3VzZXNNdWx0aUluc2VydCA9CiAJCQkJCUV4ZWNTZXRSZWxhdGlvblVzZXNNdWx0aUluc2Vy dCh0YXJnZXRfcmVzdWx0UmVsSW5mbywgTlVMTCk7CkBAIC02OTEsMTAgKzcwMywxOCBAQCBD b3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkgKiBJbml0IGNvcHlpbmcgcHJvY2Vz cyBpbnRvIGZvcmVpZ24gdGFibGUuIEluaXRpYWxpemF0aW9uIG9mIGNvcHlpbmcgaW50bwog CSAqIGZvcmVpZ24gcGFydGl0aW9ucyB3aWxsIGJlIGRvbmUgbGF0ZXIuCiAJICovCi0JaWYg KHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgIT0gTlVMTCAmJgotCQlyZXN1bHRSZWxJ bmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQgIT0gTlVMTCkKLQkJcmVz dWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+QmVnaW5Gb3JlaWduSW5zZXJ0KG10c3RhdGUs Ci0JCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvKTsKKwlpZiAodGFyZ2V0X3Jlc3VsdFJl bEluZm8tPnJpX0Zkd1JvdXRpbmUgIT0gTlVMTCkKKwl7CisJCWlmICh0YXJnZXRfcmVzdWx0 UmVsSW5mby0+cmlfdXNlc011bHRpSW5zZXJ0KQorCQl7CisJCQlBc3NlcnQodGFyZ2V0X3Jl c3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkJlZ2luRm9yZWlnbkNvcHkgIT0gTlVMTCk7 CisJCQl0YXJnZXRfcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+QmVnaW5Gb3JlaWdu Q29weShtdHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCSAgcmVzdWx0UmVsSW5mbyk7CisJCX0K KwkJZWxzZSBpZiAodGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkJlZ2lu Rm9yZWlnbkluc2VydCAhPSBOVUxMKQorCQkJdGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJpX0Zk d1JvdXRpbmUtPkJlZ2luRm9yZWlnbkluc2VydChtdHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJ CQlyZXN1bHRSZWxJbmZvKTsKKwl9CiAKIAkvKiBQcmVwYXJlIHRvIGNhdGNoIEFGVEVSIHRy aWdnZXJzLiAqLwogCUFmdGVyVHJpZ2dlckJlZ2luUXVlcnkoKTsKQEAgLTEwNzIsMTAgKzEw OTIsMTYgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJRXhlY1Jlc2V0VHVw bGVUYWJsZShlc3RhdGUtPmVzX3R1cGxlVGFibGUsIGZhbHNlKTsKIAogCS8qIEFsbG93IHRo ZSBGRFcgdG8gc2h1dCBkb3duICovCi0JaWYgKHRhcmdldF9yZXN1bHRSZWxJbmZvLT5yaV9G ZHdSb3V0aW5lICE9IE5VTEwgJiYKLQkJdGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJpX0Zkd1Jv dXRpbmUtPkVuZEZvcmVpZ25JbnNlcnQgIT0gTlVMTCkKLQkJdGFyZ2V0X3Jlc3VsdFJlbElu Zm8tPnJpX0Zkd1JvdXRpbmUtPkVuZEZvcmVpZ25JbnNlcnQoZXN0YXRlLAotCQkJCQkJCQkJ CQkJCQkJICB0YXJnZXRfcmVzdWx0UmVsSW5mbyk7CisJaWYgKHRhcmdldF9yZXN1bHRSZWxJ bmZvLT5yaV9GZHdSb3V0aW5lICE9IE5VTEwpCisJeworCQlpZiAodGFyZ2V0X3Jlc3VsdFJl bEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCAmJgorCQkJdGFyZ2V0X3Jlc3VsdFJlbEluZm8t PnJpX0Zkd1JvdXRpbmUtPkVuZEZvcmVpZ25Db3B5ICE9IE5VTEwpCisJCQl0YXJnZXRfcmVz dWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RW5kRm9yZWlnbkNvcHkoZXN0YXRlLAorCQkJ CQkJCQkJCQkJCQl0YXJnZXRfcmVzdWx0UmVsSW5mbyk7CisJCWVsc2UgaWYgKHRhcmdldF9y ZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0ICE9IE5VTEwp CisJCQl0YXJnZXRfcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RW5kRm9yZWlnbklu c2VydChlc3RhdGUsCisJCQkJCQkJCQkJCQkJCXRhcmdldF9yZXN1bHRSZWxJbmZvKTsKKwl9 CiAKIAkvKiBUZWFyIGRvd24gdGhlIG11bHRpLWluc2VydCBidWZmZXIgZGF0YSAqLwogCUNv cHlNdWx0aUluc2VydEluZm9DbGVhbnVwKCZtdWx0aUluc2VydEluZm8pOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYwppbmRleCBjN2U1ZjA0NDQ2Li42MDhiYjM3NzFkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYwpAQCAtNTAsNiArNTAsNyBAQCB0eXBlZGVmIGVudW0gQ29weURlc3QKIAlD T1BZX0ZJTEUsCQkJCQkvKiB0byBmaWxlIChvciBhIHBpcGVkIHByb2dyYW0pICovCiAJQ09Q WV9PTERfRkUsCQkJCS8qIHRvIGZyb250ZW5kICgyLjAgcHJvdG9jb2wpICovCiAJQ09QWV9O RVdfRkUsCQkJCS8qIHRvIGZyb250ZW5kICgzLjAgcHJvdG9jb2wpICovCisJQ09QWV9DQUxM QkFDSwkJCQkvKiB0byBjYWxsYmFjayBmdW5jdGlvbiAqLwogfSBDb3B5RGVzdDsKIAogLyoK QEAgLTgwLDExICs4MSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5VG9TdGF0ZURhdGEKIAog CS8qIHBhcmFtZXRlcnMgZnJvbSB0aGUgQ09QWSBjb21tYW5kICovCiAJUmVsYXRpb24JcmVs OwkJCS8qIHJlbGF0aW9uIHRvIGNvcHkgdG8gKi8KKwlUdXBsZURlc2MJdHVwRGVzYzsJCS8q IENPUFkgVE8gd2lsbCBiZSB1c2VkIGZvciBtYW51YWwgdHVwbGUgY29weWluZworCQkJCQkJ CQkgICogaW50byB0aGUgZGVzdGluYXRpb24gKi8KIAlRdWVyeURlc2MgICpxdWVyeURlc2M7 CQkvKiBleGVjdXRhYmxlIHF1ZXJ5IHRvIGNvcHkgZnJvbSAqLwogCUxpc3QJICAgKmF0dG51 bWxpc3Q7CQkvKiBpbnRlZ2VyIGxpc3Qgb2YgYXR0bnVtcyB0byBjb3B5ICovCiAJY2hhcgkg ICAqZmlsZW5hbWU7CQkvKiBmaWxlbmFtZSwgb3IgTlVMTCBmb3IgU1RET1VUICovCiAJYm9v bAkJaXNfcHJvZ3JhbTsJCS8qIGlzICdmaWxlbmFtZScgYSBwcm9ncmFtIHRvIHBvcGVuPyAq LwogCisJY29weV9kYXRhX2Rlc3RfY2IgZGF0YV9kZXN0X2NiOwkvKiBmdW5jdGlvbiBmb3Ig d3JpdGluZyBkYXRhICovCiAJQ29weUZvcm1hdE9wdGlvbnMgb3B0czsKIAlOb2RlCSAgICp3 aGVyZUNsYXVzZTsJLyogV0hFUkUgY29uZGl0aW9uIChvciBOVUxMKSAqLwogCkBAIC0xMTQs NyArMTE4LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgQmluYXJ5U2lnbmF0dXJlWzExXSA9ICJQ R0NPUFlcblwzNzdcclxuXDAiOwogc3RhdGljIHZvaWQgRW5kQ29weShDb3B5VG9TdGF0ZSBj c3RhdGUpOwogc3RhdGljIHZvaWQgQ2xvc2VQaXBlVG9Qcm9ncmFtKENvcHlUb1N0YXRlIGNz dGF0ZSk7CiBzdGF0aWMgdWludDY0IENvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpOwotc3Rh dGljIHZvaWQgQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOwogc3RhdGljIHZvaWQgQ29weUF0dHJpYnV0ZU91dFRleHQoQ29weVRvU3Rh dGUgY3N0YXRlLCBjaGFyICpzdHJpbmcpOwogc3RhdGljIHZvaWQgQ29weUF0dHJpYnV0ZU91 dENTVihDb3B5VG9TdGF0ZSBjc3RhdGUsIGNoYXIgKnN0cmluZywKIAkJCQkJCQkJYm9vbCB1 c2VfcXVvdGUsIGJvb2wgc2luZ2xlX2F0dHIpOwpAQCAtMjg2LDYgKzI4OSwxNCBAQCBDb3B5 U2VuZEVuZE9mUm93KENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJCS8qIER1bXAgdGhlIGFjY3Vt dWxhdGVkIHJvdyBhcyBvbmUgQ29weURhdGEgbWVzc2FnZSAqLwogCQkJKHZvaWQpIHBxX3B1 dG1lc3NhZ2UoJ2QnLCBmZV9tc2didWYtPmRhdGEsIGZlX21zZ2J1Zi0+bGVuKTsKIAkJCWJy ZWFrOworCQljYXNlIENPUFlfQ0FMTEJBQ0s6CisJCQlBc3NlcnQoIWNzdGF0ZS0+b3B0cy5i aW5hcnkpOworI2lmbmRlZiBXSU4zMgorCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJ1xuJyk7 CisjZWxzZQorCQkJQ29weVNlbmRTdHJpbmcoY3N0YXRlLCAiXHJcbiIpOworI2VuZGlmCisJ CQljc3RhdGUtPmRhdGFfZGVzdF9jYihmZV9tc2didWYtPmRhdGEsIGZlX21zZ2J1Zi0+bGVu KTsKIAl9CiAKIAlyZXNldFN0cmluZ0luZm8oZmVfbXNnYnVmKTsKQEAgLTM3MywxOSArMzg0 LDI0IEBAIEVuZENvcHkoQ29weVRvU3RhdGUgY3N0YXRlKQogQ29weVRvU3RhdGUKIEJlZ2lu Q29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCVJlbGF0aW9uIHJlbCwKKwkJCVR1cGxl RGVzYyBzcmNUdXBEZXNjLAogCQkJUmF3U3RtdCAqcmF3X3F1ZXJ5LAogCQkJT2lkIHF1ZXJ5 UmVsSWQsCiAJCQljb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCWJvb2wgaXNfcHJvZ3JhbSwK KwkJCWNvcHlfZGF0YV9kZXN0X2NiIGRhdGFfZGVzdF9jYiwKIAkJCUxpc3QgKmF0dG5hbWVs aXN0LAogCQkJTGlzdCAqb3B0aW9ucykKIHsKIAlDb3B5VG9TdGF0ZQljc3RhdGU7Ci0JYm9v bAkJcGlwZSA9IChmaWxlbmFtZSA9PSBOVUxMKTsKKwlib29sCQlwaXBlID0gKGZpbGVuYW1l ID09IE5VTEwpICYmIChkYXRhX2Rlc3RfY2IgPT0gTlVMTCk7CiAJVHVwbGVEZXNjCXR1cERl c2M7CiAJaW50CQkJbnVtX3BoeXNfYXR0cnM7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OwogCisJLyogSW1wb3NzaWJsZSB0byBtaXggQ29weVRvIG1vZGVzICovCisJQXNzZXJ0KHJl bCA9PSBOVUxMIHx8IHNyY1R1cERlc2MgPT0gTlVMTCk7CisKIAlpZiAocmVsICE9IE5VTEwg JiYgcmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTikKIAl7CiAJCWlm IChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcpCkBAIC00NTAsNiArNDY2 LDExIEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCQl0dXBEZXNjID0g UmVsYXRpb25HZXREZXNjcihjc3RhdGUtPnJlbCk7CiAJfQorCWVsc2UgaWYgKHNyY1R1cERl c2MpCisJeworCQlBc3NlcnQoIXJhd19xdWVyeSk7CisJCXR1cERlc2MgPSBjc3RhdGUtPnR1 cERlc2MgPSBzcmNUdXBEZXNjOworCX0KIAllbHNlCiAJewogCQlMaXN0CSAgICpyZXdyaXR0 ZW47CkBAIC02OTUsNiArNzE2LDExIEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJaWYgKHdoZXJlVG9TZW5kT3V0cHV0ICE9IERlc3RSZW1vdGUpCiAJCQljc3RhdGUt PmNvcHlfZmlsZSA9IHN0ZG91dDsKIAl9CisJZWxzZSBpZiAoZGF0YV9kZXN0X2NiKQorCXsK KwkJY3N0YXRlLT5jb3B5X2Rlc3QgPSBDT1BZX0NBTExCQUNLOworCQljc3RhdGUtPmRhdGFf ZGVzdF9jYiA9IGRhdGFfZGVzdF9jYjsKKwl9CiAJZWxzZQogCXsKIAkJY3N0YXRlLT5maWxl bmFtZSA9IHBzdHJkdXAoZmlsZW5hbWUpOwpAQCAtNzcyLDcgKzc5OCw3IEBAIEJlZ2luQ29w eVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIHVpbnQ2NAogRG9Db3B5VG8oQ29weVRvU3RhdGUg Y3N0YXRlKQogewotCWJvb2wJCXBpcGUgPSAoY3N0YXRlLT5maWxlbmFtZSA9PSBOVUxMKTsK Kwlib29sCQlwaXBlID0gKGNzdGF0ZS0+ZmlsZW5hbWUgPT0gTlVMTCkgJiYgKGNzdGF0ZS0+ ZGF0YV9kZXN0X2NiID09IE5VTEwpOwogCWJvb2wJCWZlX2NvcHkgPSAocGlwZSAmJiB3aGVy ZVRvU2VuZE91dHB1dCA9PSBEZXN0UmVtb3RlKTsKIAl1aW50NjQJCXByb2Nlc3NlZDsKIApA QCAtNzgxLDcgKzgwNyw5IEBAIERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJaWYg KGZlX2NvcHkpCiAJCQlTZW5kQ29weUJlZ2luKGNzdGF0ZSk7CiAKKwkJQ29weVRvU3RhcnQo Y3N0YXRlKTsKIAkJcHJvY2Vzc2VkID0gQ29weVRvKGNzdGF0ZSk7CisJCUNvcHlUb0Zpbmlz aChjc3RhdGUpOwogCiAJCWlmIChmZV9jb3B5KQogCQkJU2VuZENvcHlFbmQoY3N0YXRlKTsK QEAgLTgyMSwxOCArODQ5LDIyIEBAIEVuZENvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiB9 CiAKIC8qCi0gKiBDb3B5IGZyb20gcmVsYXRpb24gb3IgcXVlcnkgVE8gZmlsZS4KKyAqIFN0 YXJ0IENPUFkgVE8gb3BlcmF0aW9uLgorICogU2VwYXJhdGVkIHRvIHRoZSByb3V0aW5lIHRv IHByZXZlbnQgZHVwbGljYXRlIG9wZXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YKKyAqIG1hbnVh bCBtb2RlLCB3aGVyZSB0dXBsZXMgYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24gb25l IGJ5IG9uZSwgYnkgY2FsbCBvZgorICogdGhlIENvcHlPbmVSb3dUbygpIHJvdXRpbmUuCiAg Ki8KLXN0YXRpYyB1aW50NjQKLUNvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCit2b2lkCitD b3B5VG9TdGFydChDb3B5VG9TdGF0ZSBjc3RhdGUpCiB7CiAJVHVwbGVEZXNjCXR1cERlc2M7 CiAJaW50CQkJbnVtX3BoeXNfYXR0cnM7CiAJTGlzdENlbGwgICAqY3VyOwotCXVpbnQ2NAkJ cHJvY2Vzc2VkOwogCiAJaWYgKGNzdGF0ZS0+cmVsKQogCQl0dXBEZXNjID0gUmVsYXRpb25H ZXREZXNjcihjc3RhdGUtPnJlbCk7CisJZWxzZSBpZiAoY3N0YXRlLT50dXBEZXNjKQorCQl0 dXBEZXNjID0gY3N0YXRlLT50dXBEZXNjOwogCWVsc2UKIAkJdHVwRGVzYyA9IGNzdGF0ZS0+ cXVlcnlEZXNjLT50dXBEZXNjOwogCW51bV9waHlzX2F0dHJzID0gdHVwRGVzYy0+bmF0dHM7 CkBAIC05MTksNiArOTUxLDMyIEBAIENvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiAJCQlD b3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CiAJCX0KIAl9Cit9CisKKy8qCisgKiBGaW5pc2gg Q09QWSBUTyBvcGVyYXRpb24uCisgKi8KK3ZvaWQKK0NvcHlUb0ZpbmlzaChDb3B5VG9TdGF0 ZSBjc3RhdGUpCit7CisJaWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJeworCQkvKiBHZW5l cmF0ZSB0cmFpbGVyIGZvciBhIGJpbmFyeSBjb3B5ICovCisJCUNvcHlTZW5kSW50MTYoY3N0 YXRlLCAtMSk7CisJCS8qIE5lZWQgdG8gZmx1c2ggb3V0IHRoZSB0cmFpbGVyICovCisJCUNv cHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0RGVsZXRlKGNz dGF0ZS0+cm93Y29udGV4dCk7Cit9CisKKy8qCisgKiBDb3B5IGZyb20gcmVsYXRpb24gb3Ig cXVlcnkgVE8gZmlsZS4KKyAqLworc3RhdGljIHVpbnQ2NAorQ29weVRvKENvcHlUb1N0YXRl IGNzdGF0ZSkKK3sKKwl1aW50NjQJCXByb2Nlc3NlZDsKIAogCWlmIChjc3RhdGUtPnJlbCkK IAl7CkBAIC05NTEsMjMgKzEwMDksMTMgQEAgQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkK IAkJcHJvY2Vzc2VkID0gKChEUl9jb3B5ICopIGNzdGF0ZS0+cXVlcnlEZXNjLT5kZXN0KS0+ cHJvY2Vzc2VkOwogCX0KIAotCWlmIChjc3RhdGUtPm9wdHMuYmluYXJ5KQotCXsKLQkJLyog R2VuZXJhdGUgdHJhaWxlciBmb3IgYSBiaW5hcnkgY29weSAqLwotCQlDb3B5U2VuZEludDE2 KGNzdGF0ZSwgLTEpOwotCQkvKiBOZWVkIHRvIGZsdXNoIG91dCB0aGUgdHJhaWxlciAqLwot CQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7Ci0JfQotCi0JTWVtb3J5Q29udGV4dERlbGV0 ZShjc3RhdGUtPnJvd2NvbnRleHQpOwotCiAJcmV0dXJuIHByb2Nlc3NlZDsKIH0KIAogLyoK ICAqIEVtaXQgb25lIHJvdyBkdXJpbmcgQ29weVRvKCkuCiAgKi8KLXN0YXRpYyB2b2lkCit2 b2lkCiBDb3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKIHsKIAlib29sCQluZWVkX2RlbGltID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYwppbmRleCA5ODA5YzAzYThlLi5hMjFkNGQyZmMxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNNYWluLmMKQEAgLTEyOTQsOCArMTI5NCwxMiBAQCBFeGVjU2V0UmVsYXRpb25Vc2Vz TXVsdGlJbnNlcnQoY29uc3QgUmVzdWx0UmVsSW5mbyAqcnJpLAogCQlycmktPnJpX1RyaWdE ZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIEZv cmVpZ24gdGFibGVzIGRvbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cy4gKi8KLQlpZiAocnJp LT5yaV9GZHdSb3V0aW5lICE9IE5VTEwpCisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSAhPSBO VUxMICYmCisJCXJyaS0+cmlfRmR3Um91dGluZS0+RXhlY0ZvcmVpZ25Db3B5ID09IE5VTEwp CisJCS8qCisJCSAqIEZvcmVpZ24gdGFibGVzIGRvbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0 cywgdW5sZXNzIHRoZWlyIEZEVworCQkgKiBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IENPUFkg aW50ZXJmYWNlLgorCQkgKi8KIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogT0ssIGNhbGxlciBj YW4gdXNlIG11bHRpLWluc2VydCBvbiB0aGlzIHJlbGF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYzN2U5MDBiMDkuLmYzYjkxOTdkYjEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTk5Niw5ICs5OTYsMTYg QEAgRXhlY0luaXRSb3V0aW5nSW5mbyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCSAq IElmIHRoZSBwYXJ0aXRpb24gaXMgYSBmb3JlaWduIHRhYmxlLCBsZXQgdGhlIEZEVyBpbml0 IGl0c2VsZiBmb3IKIAkgKiByb3V0aW5nIHR1cGxlcyB0byB0aGUgcGFydGl0aW9uLgogCSAq LwotCWlmIChwYXJ0UmVsSW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMICYmCi0JCXBhcnRS ZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQgIT0gTlVMTCkKLQkJ cGFydFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkJlZ2luRm9yZWlnbkluc2VydChtdHN0YXRl LCBwYXJ0UmVsSW5mbyk7CisJaWYgKHBhcnRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lICE9IE5V TEwpCisJeworCQlpZiAocGFydFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKKwkJewor CQkJQXNzZXJ0KHBhcnRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25Db3B5 ICE9IE5VTEwpOworCQkJcGFydFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkJlZ2luRm9yZWln bkNvcHkobXRzdGF0ZSwgcGFydFJlbEluZm8pOworCQl9CisJCWVsc2UgaWYgKHBhcnRSZWxJ bmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQgIT0gTlVMTCkKKwkJCXBh cnRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQobXRzdGF0ZSwg cGFydFJlbEluZm8pOworCX0KIAogCXBhcnRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRC dWZmZXIgPSBOVUxMOwogCkBAIC0xMTk5LDEwICsxMjA2LDE2IEBAIEV4ZWNDbGVhbnVwVHVw bGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCVJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8gPSBwcm91dGUtPnBhcnRpdGlvbnNbaV07CiAKIAkJLyogQWxsb3cg YW55IEZEV3MgdG8gc2h1dCBkb3duICovCi0JCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9GZHdS b3V0aW5lICE9IE5VTEwgJiYKLQkJCXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkVu ZEZvcmVpZ25JbnNlcnQgIT0gTlVMTCkKLQkJCXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRp bmUtPkVuZEZvcmVpZ25JbnNlcnQobXRzdGF0ZS0+cHMuc3RhdGUsCi0JCQkJCQkJCQkJCQkJ CSAgIHJlc3VsdFJlbEluZm8pOworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGlu ZSAhPSBOVUxMKQorCQl7CisJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfdXNlc011bHRpSW5z ZXJ0ICYmCisJCQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RW5kRm9yZWlnbkNv cHkgIT0gTlVMTCkKKwkJCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3Jl aWduQ29weShtdHN0YXRlLT5wcy5zdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCSAgIHJlc3VsdFJl bEluZm8pOworCQkJZWxzZSBpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RW5k Rm9yZWlnbkluc2VydCAhPSBOVUxMKQorCQkJCXJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRp bmUtPkVuZEZvcmVpZ25JbnNlcnQobXRzdGF0ZS0+cHMuc3RhdGUsCisJCQkJCQkJCQkJCQkJ CQkgICByZXN1bHRSZWxJbmZvKTsKKwkJfQogCiAJCS8qCiAJCSAqIENoZWNrIGlmIHRoaXMg cmVzdWx0IHJlbCBpcyBvbmUgYmVsb25naW5nIHRvIHRoZSBub2RlJ3Mgc3VicGxhbnMsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9jb3B5LmgKaW5kZXggMTI3YTNjNjFlMi4uMDFiYjNlOGFkNCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHkuaApAQCAtNTUsNiArNTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5RnJvbVN0 YXRlRGF0YSAqQ29weUZyb21TdGF0ZTsKIHR5cGVkZWYgc3RydWN0IENvcHlUb1N0YXRlRGF0 YSAqQ29weVRvU3RhdGU7CiAKIHR5cGVkZWYgaW50ICgqY29weV9kYXRhX3NvdXJjZV9jYikg KHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhyZWFkKTsKK3R5cGVkZWYgdm9p ZCAoKmNvcHlfZGF0YV9kZXN0X2NiKSAodm9pZCAqb3V0YnVmLCBpbnQgbGVuKTsKIAogZXh0 ZXJuIHZvaWQgRG9Db3B5KFBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBDb3B5U3RtdCAqc3Rt dCwKIAkJCQkgICBpbnQgc3RtdF9sb2NhdGlvbiwgaW50IHN0bXRfbGVuLApAQCAtNzgsMTIg Kzc5LDE3IEBAIGV4dGVybiBEZXN0UmVjZWl2ZXIgKkNyZWF0ZUNvcHlEZXN0UmVjZWl2ZXIo dm9pZCk7CiAvKgogICogaW50ZXJuYWwgcHJvdG90eXBlcwogICovCi1leHRlcm4gQ29weVRv U3RhdGUgQmVnaW5Db3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLCBSZWxhdGlvbiByZWwsIFJh d1N0bXQgKnF1ZXJ5LAorZXh0ZXJuIENvcHlUb1N0YXRlIEJlZ2luQ29weVRvKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgUmVsYXRpb24gcmVsLAorCQkJCQkJCSAgIFR1cGxlRGVzYyB0dXBEZXNj LCBSYXdTdG10ICpxdWVyeSwKIAkJCQkJCQkgICBPaWQgcXVlcnlSZWxJZCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsIGJvb2wgaXNfcHJvZ3JhbSwKKwkJCQkJCQkgICBjb3B5X2RhdGFfZGVz dF9jYiBkYXRhX2Rlc3RfY2IsCiAJCQkJCQkJICAgTGlzdCAqYXR0bmFtZWxpc3QsIExpc3Qg Km9wdGlvbnMpOwogZXh0ZXJuIHZvaWQgRW5kQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSk7 CiBleHRlcm4gdWludDY0IERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSk7CiBleHRlcm4g TGlzdCAqQ29weUdldEF0dG51bXMoVHVwbGVEZXNjIHR1cERlc2MsIFJlbGF0aW9uIHJlbCwK IAkJCQkJCQlMaXN0ICphdHRuYW1lbGlzdCk7CitleHRlcm4gdm9pZCBDb3B5VG9TdGFydChD b3B5VG9TdGF0ZSBjc3RhdGUpOworZXh0ZXJuIHZvaWQgQ29weVRvRmluaXNoKENvcHlUb1N0 YXRlIGNzdGF0ZSk7CitleHRlcm4gdm9pZCBDb3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0 YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiAKICNlbmRpZgkJCQkJCQkvKiBDT1BZX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggYi9zcmMvaW5j bHVkZS9mb3JlaWduL2Zkd2FwaS5oCmluZGV4IDk1NTU2ZGZiMTUuLjUyYjIxM2Y1YWEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKysrIGIvc3JjL2luY2x1 ZGUvZm9yZWlnbi9mZHdhcGkuaApAQCAtMTA0LDYgKzEwNCwxNiBAQCB0eXBlZGVmIHZvaWQg KCpCZWdpbkZvcmVpZ25JbnNlcnRfZnVuY3Rpb24pIChNb2RpZnlUYWJsZVN0YXRlICptdHN0 YXRlLAogdHlwZWRlZiB2b2lkICgqRW5kRm9yZWlnbkluc2VydF9mdW5jdGlvbikgKEVTdGF0 ZSAqZXN0YXRlLAogCQkJCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJpbmZvKTsKIAordHlw ZWRlZiB2b2lkICgqQmVnaW5Gb3JlaWduQ29weV9mdW5jdGlvbikgKE1vZGlmeVRhYmxlU3Rh dGUgKm10c3RhdGUsCisJCQkJCQkJCQkJICAgUmVzdWx0UmVsSW5mbyAqcmluZm8pOworCit0 eXBlZGVmIHZvaWQgKCpFeGVjRm9yZWlnbkNvcHlfZnVuY3Rpb24pIChSZXN1bHRSZWxJbmZv ICpyaW5mbywKKwkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCisJCQkJCQkJ CQkJICBpbnQgbnNsb3RzKTsKKwordHlwZWRlZiB2b2lkICgqRW5kRm9yZWlnbkNvcHlfZnVu Y3Rpb24pIChFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmlu Zm8pOworCiB0eXBlZGVmIGludCAoKklzRm9yZWlnblJlbFVwZGF0YWJsZV9mdW5jdGlvbikg KFJlbGF0aW9uIHJlbCk7CiAKIHR5cGVkZWYgYm9vbCAoKlBsYW5EaXJlY3RNb2RpZnlfZnVu Y3Rpb24pIChQbGFubmVySW5mbyAqcm9vdCwKQEAgLTIyMCw2ICsyMzAsMTEgQEAgdHlwZWRl ZiBzdHJ1Y3QgRmR3Um91dGluZQogCUl0ZXJhdGVEaXJlY3RNb2RpZnlfZnVuY3Rpb24gSXRl cmF0ZURpcmVjdE1vZGlmeTsKIAlFbmREaXJlY3RNb2RpZnlfZnVuY3Rpb24gRW5kRGlyZWN0 TW9kaWZ5OwogCisJLyogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIENPUFkgaW50byBmb3JlaWdu IHRhYmxlcyAqLworCUJlZ2luRm9yZWlnbkNvcHlfZnVuY3Rpb24gQmVnaW5Gb3JlaWduQ29w eTsKKwlFeGVjRm9yZWlnbkNvcHlfZnVuY3Rpb24gRXhlY0ZvcmVpZ25Db3B5OworCUVuZEZv cmVpZ25Db3B5X2Z1bmN0aW9uIEVuZEZvcmVpZ25Db3B5OworCiAJLyogRnVuY3Rpb25zIGZv ciBTRUxFQ1QgRk9SIFVQREFURS9TSEFSRSByb3cgbG9ja2luZyAqLwogCUdldEZvcmVpZ25S b3dNYXJrVHlwZV9mdW5jdGlvbiBHZXRGb3JlaWduUm93TWFya1R5cGU7CiAJUmVmZXRjaEZv cmVpZ25Sb3dfZnVuY3Rpb24gUmVmZXRjaEZvcmVpZ25Sb3c7Ci0tIAoyLjI5LjIKCg== --------------FAA0C5D80691001DE18B1651--