Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tYga2-00D4gi-5J for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Jan 2025 07:15:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tYgZz-00A0AT-7H for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Jan 2025 07:15:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tYgZy-00A01x-CJ for pgsql-hackers@lists.postgresql.org; Fri, 17 Jan 2025 07:15:43 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tYgZu-000qOZ-2M for pgsql-hackers@lists.postgresql.org; Fri, 17 Jan 2025 07:15:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1737098134; bh=AWTcpNSTvfkqWxuA/lRrh4NEaRehwFd0xfgd6Am31ow=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=FAh5+9vIYsacjogWb0quoecljs4eAp0VYkE/LEvNW/yIR2vQUXmW/frGwp/mrOUqg 3fJv6udRscC/wtlJITx1S54CQfvqE9QgKemAtH6Q3uVpkCSQQPRr257Da1voX60Q/Y 4ZIulqBB0gvFRthGtE10/bEj5b2yrDGEhJbOua/kqxAKeey7FgojbC2MgSr827Bffd NPbZQMWqGjk4UDRHa6zBOR2Cd4fREwBaqLKHmE1QVeq3DyRuOnOg68HfCd3Ad9E/x9 LjVxkoNadPj90vGXWHps1o5U2Qprqe3GI2z6IvEQwYzilQJ5ZjdtDsYLOwsuDP11Mt BdfAuM1dnsjlA== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 81D5A60BE8; Fri, 17 Jan 2025 10:15:34 +0300 (MSK) MIME-Version: 1.0 Date: Fri, 17 Jan 2025 10:15:34 +0300 From: Alexander Pyhalov To: Pavel Stehule Cc: Alexander Korotkov , pgsql-hackers@lists.postgresql.org, Ronan Dunklau , Tom Lane Subject: Re: SQLFunctionCache and generic plans In-Reply-To: References: <8216639.NyiUUSuA9g@aivenlaptop> <3084885.1675783797@sss.pgh.pa.us> <758251661a3e8760ff52dd5c672a7505@postgrespro.ru> Message-ID: <30f02ca545915627905fbe3f23d93ec1@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_afdc52a41a0fa0065777e37a1e848c84" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/01/17 05:00:00 #27047805 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_afdc52a41a0fa0065777e37a1e848c84 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Pavel Stehule писал(а) 2024-12-31 18:39: > Hi > > út 31. 12. 2024 v 16:36 odesílatel Alexander Pyhalov > napsal: > >> Hi. >> >>>> What should we do with "pre-parsed" SQL functions (when prosrc is >>>> empty)? How should we create cached plans when we don't have raw >>>> parsetrees? >>>> Currently we can create cached plans without raw parsetrees, but >> this >>>> means that plan revalidation doesn't work, choose_custom_plan() >>>> always returns false and we get generic plan. Perhaps, we need >> some >>>> form >>>> of GetCachedPlan(), which ignores raw_parse_tree? >>> >>> I don't think you need a new form of GetCachedPlan(). Instead, it >>> seems that StmtPlanRequiresRevalidation() should be revised. As I >> got >>> from comments and the d8b2fcc9d4 commit message, the primary goal >> was >>> to skip revalidation of utility statements. Skipping revalidation >> was >>> a positive side effect, as long as we didn't support custom plans >> for >>> them anyway. But as you're going to change this, >>> StmtPlanRequiresRevalidation() needs to be revised. >>> >> >> Thanks for feedback. >> >> I've modifed StmtPlanRequiresRevalidation() so that it looks on >> queries >> command type. >> Not sure if it's enough or I have to recreate something more similar >> to >> stmt_requires_parse_analysis() >> logic. I was wondering if this can lead to triggering plan >> revalidation >> in RevalidateCachedQuery(). >> I suppose not - as we plan in executor (so shouldn't catch userid >> change >> or see some changes in >> related objects. Revalidation would kill our plan, destroying >> resultDesc. >> >> Also while looking at this, fixed processing of instead of rules >> (which >> would lead to NULL execution_state). >> -- > > there are lot of fails found by tester > > Please, can you check it? Hi. Sorry for late response - we had holidays here and later there was some urgent work from 2024 :) Do you speak about failures on check-world? It seems commit a8ccf4e93a7eeaae66007bbf78cf9183ceb1b371 Author: Richard Guo Date: Tue Nov 26 09:25:18 2024 +0900 Reordering DISTINCT keys to match input path's pathkeys added new GUC enable_distinct_reordering and this caused test failures. I've rebased patch on master. Tests pass here. -- Best regards, Alexander Pyhalov, Postgres Professional --=_afdc52a41a0fa0065777e37a1e848c84 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-Use-custom-plan-machinery-for-SQL-functions.patch Content-Disposition: attachment; filename=v3-0001-Use-custom-plan-machinery-for-SQL-functions.patch; size=26081 RnJvbSA4MzY3NDQwNmZiZjMwNWYzZDQ4MjdjNmEyZWM3YWFjMGExZmNhZWRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDIzIEF1ZyAyMDI0IDE1OjQ4OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gVXNlIGN1c3RvbSBwbGFuIG1hY2hpbmVyeSBmb3IgU1FMIGZ1bmN0aW9ucwoKLS0tCiBj b250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRleHQub3V0ICAgICAgICAgICAgfCAgIDIgKy0KIGNv bnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dF8xLm91dCAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgICAgICAgICAgICAgIHwgMzM0ICsrKysrKysr KysrKysrLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgICAgICAgICAg IHwgIDQ0ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAg IHwgIDEyICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oICAgICAgICAgICAgICB8 ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL251bWVyaWMub3V0ICAgICAgICAgfCAg IDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxwZ3NxbC5vdXQgICAgICAgICB8ICAg MiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgICAgIHwgIDM1 ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQgfCAgIDQg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQgICAgICAgICB8ICAgMiAr LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9ydWxlcy5zcWwgICAgICAgICAgICAgICAgfCAgMjQgKysK IDEzIGZpbGVzIGNoYW5nZWQsIDM4NSBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL2NpdGV4dC9leHBlY3RlZC9jaXRleHQub3V0IGIvY29udHJpYi9j aXRleHQvZXhwZWN0ZWQvY2l0ZXh0Lm91dAppbmRleCA4YzBiZjU0ZjBmMy4uZjg3NjUwNTM2NTEg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dC5vdXQKKysrIGIvY29u dHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0Lm91dApAQCAtMTgxNiw3ICsxODE2LDcgQEAgU0VM RUNUIHJlZ2V4cF9tYXRjaCgnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoQkFSKShCRVFVRSkn OjpjaXRleHQsICdjJzo6Y2l0ZXgKIFNFTEVDVCByZWdleHBfbWF0Y2goJ2Zvb2JhcmJlcXVlYmF6 bW9yZWJhcmJlcXVldG9vJzo6Y2l0ZXh0LCAnKEJBUikoQkVRVUUpJzo6Y2l0ZXh0LCAnZycpIEFT ICJlcnJvciI7CiBFUlJPUjogIHJlZ2V4cF9tYXRjaCgpIGRvZXMgbm90IHN1cHBvcnQgdGhlICJn bG9iYWwiIG9wdGlvbgogSElOVDogIFVzZSB0aGUgcmVnZXhwX21hdGNoZXMgZnVuY3Rpb24gaW5z dGVhZC4KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgZHVyaW5nIHN0YXJ0dXAKIFNF TEVDVCByZWdleHBfbWF0Y2hlcygnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoYmFyKShiZXF1 ZSknKSA9IEFSUkFZWyAnYmFyJywgJ2JlcXVlJyBdIEFTIHQ7CiAgdCAKIC0tLQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0XzEub3V0IGIvY29udHJpYi9jaXRleHQv ZXhwZWN0ZWQvY2l0ZXh0XzEub3V0CmluZGV4IGM1ZTVmMTgwZjJiLi4zNTZkYzZiYmE0MyAxMDA2 NDQKLS0tIGEvY29udHJpYi9jaXRleHQvZXhwZWN0ZWQvY2l0ZXh0XzEub3V0CisrKyBiL2NvbnRy aWIvY2l0ZXh0L2V4cGVjdGVkL2NpdGV4dF8xLm91dApAQCAtMTgxNiw3ICsxODE2LDcgQEAgU0VM RUNUIHJlZ2V4cF9tYXRjaCgnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoQkFSKShCRVFVRSkn OjpjaXRleHQsICdjJzo6Y2l0ZXgKIFNFTEVDVCByZWdleHBfbWF0Y2goJ2Zvb2JhcmJlcXVlYmF6 bW9yZWJhcmJlcXVldG9vJzo6Y2l0ZXh0LCAnKEJBUikoQkVRVUUpJzo6Y2l0ZXh0LCAnZycpIEFT ICJlcnJvciI7CiBFUlJPUjogIHJlZ2V4cF9tYXRjaCgpIGRvZXMgbm90IHN1cHBvcnQgdGhlICJn bG9iYWwiIG9wdGlvbgogSElOVDogIFVzZSB0aGUgcmVnZXhwX21hdGNoZXMgZnVuY3Rpb24gaW5z dGVhZC4KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInJlZ2V4cF9tYXRjaCIgZHVyaW5nIHN0YXJ0dXAKIFNF TEVDVCByZWdleHBfbWF0Y2hlcygnZm9vYmFyYmVxdWViYXonOjpjaXRleHQsICcoYmFyKShiZXF1 ZSknKSA9IEFSUkFZWyAnYmFyJywgJ2JlcXVlJyBdIEFTIHQ7CiAgdCAKIC0tLQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYwppbmRleCA3NTdmODA2OGUyMS4uNDU5MWMzODk0Y2EgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jCkBAIC0zMyw5ICszMywxNCBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFw bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorLyoKKyAqIEdVQyB2YXJpYWJs ZXMKKyAqLworYm9vbAkJZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9wbGFucyA9IHRydWU7CiAKIC8q CiAgKiBTcGVjaWFsaXplZCBEZXN0UmVjZWl2ZXIgZm9yIGNvbGxlY3RpbmcgcXVlcnkgb3V0cHV0 IGluIGEgU1FMIGZ1bmN0aW9uCkBAIC0xMTIsNiArMTE3LDExIEBAIHR5cGVkZWYgc3RydWN0CiAK IAlKdW5rRmlsdGVyICpqdW5rRmlsdGVyOwkJLyogd2lsbCBiZSBOVUxMIGlmIGZ1bmN0aW9uIHJl dHVybnMgVk9JRCAqLwogCisJLyogQ2FjaGVkIHBsYW5zIHN1cHBvcnQgKi8KKwlMaXN0CSAgICpx dWVyeVRyZWVfbGlzdDsgLyogbGlzdCBvZiBxdWVyeSBsaXN0cyAqLworCUxpc3QJICAgKnBsYW5z b3VyY2VfbGlzdDsJLyogbGlzdCBvZiBwbGFuc291cmNlICovCisJTGlzdAkgICAqY3BsYW5fbGlz dDsJCS8qIGxpc3Qgb2YgY2FjaGVkIHBsYW5zICovCisKIAkvKgogCSAqIGZ1bmNfc3RhdGUgaXMg YSBMaXN0IG9mIGV4ZWN1dGlvbl9zdGF0ZSByZWNvcmRzLCBlYWNoIG9mIHdoaWNoIGlzIHRoZQog CSAqIGZpcnN0IGZvciBpdHMgb3JpZ2luYWwgcGFyc2V0cmVlLCB3aXRoIGFueSBhZGRpdGlvbmFs IHJlY29yZHMgY2hhaW5lZApAQCAtNDU0LDYgKzQ2NCw0MCBAQCBzcWxfZm5fcmVzb2x2ZV9wYXJh bV9uYW1lKFNRTEZ1bmN0aW9uUGFyc2VJbmZvUHRyIHBpbmZvLAogCXJldHVybiBOVUxMOwogfQog CisvKiBQcmVjaGVjayBjb21tYW5kIGZvciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uICovCitzdGF0 aWMgdm9pZAorY2hlY2tfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpzdG10LCBTUUxGdW5jdGlv bkNhY2hlUHRyIGZjYWNoZSkKK3sKKworCS8qCisJICogUHJlY2hlY2sgYWxsIGNvbW1hbmRzIGZv ciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQKKwkgKiBnZW5lcmFsbHkgbWF0 Y2ggdGhlIHJlc3RyaWN0aW9ucyBzcGkuYyBhcHBsaWVzLgorCSAqLworCWlmIChzdG10LT5jb21t YW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwl7CisJCWlmIChJc0Eoc3RtdC0+dXRpbGl0eVN0bXQs IENvcHlTdG10KSAmJgorCQkJKChDb3B5U3RtdCAqKSBzdG10LT51dGlsaXR5U3RtdCktPmZpbGVu YW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coImNhbm5vdCBDT1BZIHRvL2Zyb20g Y2xpZW50IGluIGFuIFNRTCBmdW5jdGlvbiIpKSk7CisKKwkJaWYgKElzQShzdG10LT51dGlsaXR5 U3RtdCwgVHJhbnNhY3Rpb25TdG10KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCS8qIHRyYW5zbGF0b3I6ICVzIGlz IGEgU1FMIHN0YXRlbWVudCBuYW1lICovCisJCQkJCSBlcnJtc2coIiVzIGlzIG5vdCBhbGxvd2Vk IGluIGFuIFNRTCBmdW5jdGlvbiIsCisJCQkJCQkJQ3JlYXRlQ29tbWFuZE5hbWUoc3RtdC0+dXRp bGl0eVN0bXQpKSkpOworCX0KKworCWlmIChmY2FjaGUtPnJlYWRvbmx5X2Z1bmMgJiYgIUNvbW1h bmRJc1JlYWRPbmx5KHN0bXQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJLyogdHJhbnNsYXRvcjogJXMgaXMgYSBTUUwg c3RhdGVtZW50IG5hbWUgKi8KKwkJCQkgZXJybXNnKCIlcyBpcyBub3QgYWxsb3dlZCBpbiBhIG5v bi12b2xhdGlsZSBmdW5jdGlvbiIsCisJCQkJCQlDcmVhdGVDb21tYW5kTmFtZSgoTm9kZSAqKSBz dG10KSkpKTsKKworfQorCiAvKgogICogU2V0IHVwIHRoZSBwZXItcXVlcnkgZXhlY3V0aW9uX3N0 YXRlIHJlY29yZHMgZm9yIGEgU1FMIGZ1bmN0aW9uLgogICoKQEAgLTQ2Niw4NSArNTEwLDExNyBA QCBpbml0X2V4ZWN1dGlvbl9zdGF0ZShMaXN0ICpxdWVyeVRyZWVfbGlzdCwKIAkJCQkJIGJvb2wg bGF6eUV2YWxPSykKIHsKIAlMaXN0CSAgICplc2xpc3QgPSBOSUw7CisJTGlzdAkgICAqY3BsYW5f bGlzdCA9IE5JTDsKIAlleGVjdXRpb25fc3RhdGUgKmxhc3R0YWdlcyA9IE5VTEw7CiAJTGlzdENl bGwgICAqbGMxOwogCiAJZm9yZWFjaChsYzEsIHF1ZXJ5VHJlZV9saXN0KQogCXsKLQkJTGlzdAkg ICAqcXRsaXN0ID0gbGZpcnN0X25vZGUoTGlzdCwgbGMxKTsKKwkJTGlzdAkgICAqcXRsaXN0Owog CQlleGVjdXRpb25fc3RhdGUgKmZpcnN0ZXMgPSBOVUxMOwogCQlleGVjdXRpb25fc3RhdGUgKnBy ZXZlcyA9IE5VTEw7CiAJCUxpc3RDZWxsICAgKmxjMjsKIAotCQlmb3JlYWNoKGxjMiwgcXRsaXN0 KQorCQlpZiAoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QpCiAJCXsKLQkJCVF1ZXJ5CSAgICpxdWVy eVRyZWUgPSBsZmlyc3Rfbm9kZShRdWVyeSwgbGMyKTsKLQkJCVBsYW5uZWRTdG10ICpzdG10Owot CQkJZXhlY3V0aW9uX3N0YXRlICpuZXdlczsKKwkJCUNhY2hlZFBsYW4gKmNwbGFuOworCQkJQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKKwkJCWludAkJCWN1cl9pZHg7CiAKLQkJCS8qIFBs YW4gdGhlIHF1ZXJ5IGlmIG5lZWRlZCAqLwotCQkJaWYgKHF1ZXJ5VHJlZS0+Y29tbWFuZFR5cGUg PT0gQ01EX1VUSUxJVFkpCi0JCQl7Ci0JCQkJLyogVXRpbGl0eSBjb21tYW5kcyByZXF1aXJlIG5v IHBsYW5uaW5nLiAqLwotCQkJCXN0bXQgPSBtYWtlTm9kZShQbGFubmVkU3RtdCk7Ci0JCQkJc3Rt dC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKLQkJCQlzdG10LT5jYW5TZXRUYWcgPSBxdWVy eVRyZWUtPmNhblNldFRhZzsKLQkJCQlzdG10LT51dGlsaXR5U3RtdCA9IHF1ZXJ5VHJlZS0+dXRp bGl0eVN0bXQ7Ci0JCQkJc3RtdC0+c3RtdF9sb2NhdGlvbiA9IHF1ZXJ5VHJlZS0+c3RtdF9sb2Nh dGlvbjsKLQkJCQlzdG10LT5zdG10X2xlbiA9IHF1ZXJ5VHJlZS0+c3RtdF9sZW47Ci0JCQkJc3Rt dC0+cXVlcnlJZCA9IHF1ZXJ5VHJlZS0+cXVlcnlJZDsKLQkJCX0KLQkJCWVsc2UKLQkJCQlzdG10 ID0gcGdfcGxhbl9xdWVyeShxdWVyeVRyZWUsCi0JCQkJCQkJCQkgZmNhY2hlLT5zcmMsCi0JCQkJ CQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywKLQkJCQkJCQkJCSBOVUxMKTsKKwkJCS8qIEZp bmQgcGxhbiBzb3VyY2UsIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBxdWVyeSBsaXN0ICovCisJCQlj dXJfaWR4ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4KGxjMSk7CisJCQlwbGFuc291cmNlID0gbGlz dF9udGgoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QsIGN1cl9pZHgpOwogCiAJCQkvKgotCQkJICog UHJlY2hlY2sgYWxsIGNvbW1hbmRzIGZvciB2YWxpZGl0eSBpbiBhIGZ1bmN0aW9uLiAgVGhpcyBz aG91bGQKLQkJCSAqIGdlbmVyYWxseSBtYXRjaCB0aGUgcmVzdHJpY3Rpb25zIHNwaS5jIGFwcGxp ZXMuCisJCQkgKiBHZXQgcGxhbiBmb3IgdGhlIHF1ZXJ5LiBJZiBwYXJhbUxJIGlzIHNldCwgd2Ug Y2FuIGdldCBjdXN0b20KKwkJCSAqIHBsYW4KIAkJCSAqLwotCQkJaWYgKHN0bXQtPmNvbW1hbmRU eXBlID09IENNRF9VVElMSVRZKQorCQkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IGZjYWNoZS0+cGFyYW1MSSwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFJlY29yZCBjcGxhbiBpbiBw bGFuIGxpc3QgdG8gYmUgcmVsZWFzZWQgb24gcmVwbGFubmluZyAqLworCQkJY3BsYW5fbGlzdCA9 IGxhcHBlbmQoY3BsYW5fbGlzdCwgY3BsYW4pOworCisJCQkvKiBGb3IgZWFjaCBwbGFubmVkIHN0 YXRlbWVudCBjcmVhdGUgZXhlY3V0aW9uIHN0YXRlICovCisJCQlmb3JlYWNoKGxjMiwgY3BsYW4t PnN0bXRfbGlzdCkKIAkJCXsKLQkJCQlpZiAoSXNBKHN0bXQtPnV0aWxpdHlTdG10LCBDb3B5U3Rt dCkgJiYKLQkJCQkJKChDb3B5U3RtdCAqKSBzdG10LT51dGlsaXR5U3RtdCktPmZpbGVuYW1lID09 IE5VTEwpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJCSBlcnJtc2coImNhbm5vdCBDT1BZIHRvL2Zyb20g Y2xpZW50IGluIGFuIFNRTCBmdW5jdGlvbiIpKSk7CisJCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBs Zmlyc3QobGMyKTsKKwkJCQlleGVjdXRpb25fc3RhdGUgKm5ld2VzOwogCi0JCQkJaWYgKElzQShz dG10LT51dGlsaXR5U3RtdCwgVHJhbnNhY3Rpb25TdG10KSkKLQkJCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCS8q IHRyYW5zbGF0b3I6ICVzIGlzIGEgU1FMIHN0YXRlbWVudCBuYW1lICovCi0JCQkJCQkJIGVycm1z ZygiJXMgaXMgbm90IGFsbG93ZWQgaW4gYW4gU1FMIGZ1bmN0aW9uIiwKLQkJCQkJCQkJCUNyZWF0 ZUNvbW1hbmROYW1lKHN0bXQtPnV0aWxpdHlTdG10KSkpKTsKKwkJCQkvKiBDaGVjayB0aGF0IHN0 bXQgaXMgdmFsaWQgZm9yIFNRTCBmdW5jdGlvbiAqLworCQkJCWNoZWNrX3BsYW5uZWRfc3RtdChz dG10LCBmY2FjaGUpOworCisJCQkJbmV3ZXMgPSAoZXhlY3V0aW9uX3N0YXRlICopIHBhbGxvYyhz aXplb2YoZXhlY3V0aW9uX3N0YXRlKSk7CisKKwkJCQlpZiAocHJldmVzKQorCQkJCQlwcmV2ZXMt Pm5leHQgPSBuZXdlczsKKwkJCQllbHNlCisJCQkJCWZpcnN0ZXMgPSBuZXdlczsKKworCQkJCW5l d2VzLT5uZXh0ID0gTlVMTDsKKwkJCQluZXdlcy0+c3RhdHVzID0gRl9FWEVDX1NUQVJUOworCQkJ CW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLworCQkJ CW5ld2VzLT5sYXp5RXZhbCA9IGZhbHNlOwkvKiBtaWdodCBjaGFuZ2UgYmVsb3cgKi8KKwkJCQlu ZXdlcy0+c3RtdCA9IHN0bXQ7CisJCQkJbmV3ZXMtPnFkID0gTlVMTDsKKworCQkJCWlmIChzdG10 LT5jYW5TZXRUYWcpCisJCQkJCWxhc3R0YWdlcyA9IG5ld2VzOworCisJCQkJcHJldmVzID0gbmV3 ZXM7CiAJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlxdGxpc3QgPSBsZmlyc3Rfbm9kZShMaXN0 LCBsYzEpOwogCi0JCQlpZiAoZmNhY2hlLT5yZWFkb25seV9mdW5jICYmICFDb21tYW5kSXNSZWFk T25seShzdG10KSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgU1FMIHN0 YXRlbWVudCBuYW1lICovCi0JCQkJCQkgZXJybXNnKCIlcyBpcyBub3QgYWxsb3dlZCBpbiBhIG5v bi12b2xhdGlsZSBmdW5jdGlvbiIsCi0JCQkJCQkJCUNyZWF0ZUNvbW1hbmROYW1lKChOb2RlICop IHN0bXQpKSkpOwotCi0JCQkvKiBPSywgYnVpbGQgdGhlIGV4ZWN1dGlvbl9zdGF0ZSBmb3IgdGhp cyBxdWVyeSAqLwotCQkJbmV3ZXMgPSAoZXhlY3V0aW9uX3N0YXRlICopIHBhbGxvYyhzaXplb2Yo ZXhlY3V0aW9uX3N0YXRlKSk7Ci0JCQlpZiAocHJldmVzKQotCQkJCXByZXZlcy0+bmV4dCA9IG5l d2VzOwotCQkJZWxzZQotCQkJCWZpcnN0ZXMgPSBuZXdlczsKKwkJCWZvcmVhY2gobGMyLCBxdGxp c3QpCisJCQl7CisJCQkJUXVlcnkJICAgKnF1ZXJ5VHJlZSA9IGxmaXJzdF9ub2RlKFF1ZXJ5LCBs YzIpOworCQkJCVBsYW5uZWRTdG10ICpzdG10OworCQkJCWV4ZWN1dGlvbl9zdGF0ZSAqbmV3ZXM7 CisKKwkJCQkvKiBQbGFuIHRoZSBxdWVyeSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAocXVlcnlUcmVl LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJCQl7CisJCQkJCS8qIFV0aWxpdHkgY29t bWFuZHMgcmVxdWlyZSBubyBwbGFubmluZy4gKi8KKwkJCQkJc3RtdCA9IG1ha2VOb2RlKFBsYW5u ZWRTdG10KTsKKwkJCQkJc3RtdC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKKwkJCQkJc3Rt dC0+Y2FuU2V0VGFnID0gcXVlcnlUcmVlLT5jYW5TZXRUYWc7CisJCQkJCXN0bXQtPnV0aWxpdHlT dG10ID0gcXVlcnlUcmVlLT51dGlsaXR5U3RtdDsKKwkJCQkJc3RtdC0+c3RtdF9sb2NhdGlvbiA9 IHF1ZXJ5VHJlZS0+c3RtdF9sb2NhdGlvbjsKKwkJCQkJc3RtdC0+c3RtdF9sZW4gPSBxdWVyeVRy ZWUtPnN0bXRfbGVuOworCQkJCQlzdG10LT5xdWVyeUlkID0gcXVlcnlUcmVlLT5xdWVyeUlkOwor CQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBHZXQgZ2VuZXJpYyBwbGFuIGZvciB0aGUg cXVlcnkgKi8KKwkJCQkJc3RtdCA9IHBnX3BsYW5fcXVlcnkocXVlcnlUcmVlLAorCQkJCQkJCQkJ CSBmY2FjaGUtPnNyYywKKwkJCQkJCQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywKKwkJCQkJ CQkJCQkgTlVMTCk7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgdGhhdCBzdG10IGlzIHZhbGlkIGZv ciBTUUwgZnVuY3Rpb24gKi8KKwkJCQljaGVja19wbGFubmVkX3N0bXQoc3RtdCwgZmNhY2hlKTsK IAotCQkJbmV3ZXMtPm5leHQgPSBOVUxMOwotCQkJbmV3ZXMtPnN0YXR1cyA9IEZfRVhFQ19TVEFS VDsKLQkJCW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAq LwotCQkJbmV3ZXMtPmxhenlFdmFsID0gZmFsc2U7CS8qIG1pZ2h0IGNoYW5nZSBiZWxvdyAqLwot CQkJbmV3ZXMtPnN0bXQgPSBzdG10OwotCQkJbmV3ZXMtPnFkID0gTlVMTDsKKwkJCQluZXdlcyA9 IChleGVjdXRpb25fc3RhdGUgKikgcGFsbG9jKHNpemVvZihleGVjdXRpb25fc3RhdGUpKTsKKwkJ CQlpZiAocHJldmVzKQorCQkJCQlwcmV2ZXMtPm5leHQgPSBuZXdlczsKKwkJCQllbHNlCisJCQkJ CWZpcnN0ZXMgPSBuZXdlczsKKworCQkJCW5ld2VzLT5uZXh0ID0gTlVMTDsKKwkJCQluZXdlcy0+ c3RhdHVzID0gRl9FWEVDX1NUQVJUOworCQkJCW5ld2VzLT5zZXRzUmVzdWx0ID0gZmFsc2U7CS8q IG1pZ2h0IGNoYW5nZSBiZWxvdyAqLworCQkJCW5ld2VzLT5sYXp5RXZhbCA9IGZhbHNlOwkvKiBt aWdodCBjaGFuZ2UgYmVsb3cgKi8KKwkJCQluZXdlcy0+c3RtdCA9IHN0bXQ7CisJCQkJbmV3ZXMt PnFkID0gTlVMTDsKIAotCQkJaWYgKHF1ZXJ5VHJlZS0+Y2FuU2V0VGFnKQotCQkJCWxhc3R0YWdl cyA9IG5ld2VzOworCQkJCWlmIChxdWVyeVRyZWUtPmNhblNldFRhZykKKwkJCQkJbGFzdHRhZ2Vz ID0gbmV3ZXM7CiAKLQkJCXByZXZlcyA9IG5ld2VzOworCQkJCXByZXZlcyA9IG5ld2VzOworCQkJ fQogCQl9CiAKIAkJZXNsaXN0ID0gbGFwcGVuZChlc2xpc3QsIGZpcnN0ZXMpOwpAQCAtNTczLDYg KzY0OSw3IEBAIGluaXRfZXhlY3V0aW9uX3N0YXRlKExpc3QgKnF1ZXJ5VHJlZV9saXN0LAogCQkJ ZmNhY2hlLT5sYXp5RXZhbCA9IGxhc3R0YWdlcy0+bGF6eUV2YWwgPSB0cnVlOwogCX0KIAorCWZj YWNoZS0+Y3BsYW5fbGlzdCA9IGNwbGFuX2xpc3Q7CiAJcmV0dXJuIGVzbGlzdDsKIH0KIApAQCAt NTk2LDYgKzY3Myw3IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg T2lkIGNvbGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCUxpc3RDZWxsICAgKmxjOwogCURhdHVt CQl0bXA7CiAJYm9vbAkJaXNOdWxsOworCUxpc3QJICAgKnBsYW5zb3VyY2VfbGlzdDsKIAogCS8q CiAJICogQ3JlYXRlIG1lbW9yeSBjb250ZXh0IHRoYXQgaG9sZHMgYWxsIHRoZSBTUUxGdW5jdGlv bkNhY2hlIGRhdGEuICBJdApAQCAtNjgwLDYgKzc1OCw3IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNvbGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCSAq IHBsYW5jYWNoZS5jLgogCSAqLwogCXF1ZXJ5VHJlZV9saXN0ID0gTklMOworCXBsYW5zb3VyY2Vf bGlzdCA9IE5JTDsKIAlpZiAoIWlzTnVsbCkKIAl7CiAJCU5vZGUJICAgKm47CkBAIC02OTUsOCAr Nzc0LDE2IEBAIGluaXRfc3FsX2ZjYWNoZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIGNv bGxhdGlvbiwgYm9vbCBsYXp5RXZhbE9LKQogCQl7CiAJCQlRdWVyeQkgICAqcGFyc2V0cmVlID0g bGZpcnN0X25vZGUoUXVlcnksIGxjKTsKIAkJCUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0Owor CQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsKIAogCQkJQWNxdWlyZVJld3JpdGVMb2Nr cyhwYXJzZXRyZWUsIHRydWUsIGZhbHNlKTsKKworCQkJaWYgKGVuYWJsZV9zcWxfZnVuY19jdXN0 b21fcGxhbnMpCisJCQl7CisJCQkJcGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW4oTlVMTCwg ZmNhY2hlLT5zcmMsIENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKilwYXJzZXRyZWUpKTsKKwkJCQlw bGFuc291cmNlX2xpc3QgPSBsYXBwZW5kKHBsYW5zb3VyY2VfbGlzdCwgcGxhbnNvdXJjZSk7CisJ CQl9CisKIAkJCXF1ZXJ5VHJlZV9zdWJsaXN0ID0gcGdfcmV3cml0ZV9xdWVyeShwYXJzZXRyZWUp OwogCQkJcXVlcnlUcmVlX2xpc3QgPSBsYXBwZW5kKHF1ZXJ5VHJlZV9saXN0LCBxdWVyeVRyZWVf c3VibGlzdCk7CiAJCX0KQEAgLTcxMSw2ICs3OTgsMTMgQEAgaW5pdF9zcWxfZmNhY2hlKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlFdmFsT0spCiAJCXsK IAkJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2RlKFJhd1N0bXQsIGxjKTsKIAkJ CUxpc3QJICAgKnF1ZXJ5VHJlZV9zdWJsaXN0OworCQkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZTsKKworCQkJaWYgKGVuYWJsZV9zcWxfZnVuY19jdXN0b21fcGxhbnMpCisJCQl7CisJCQkJ cGxhbnNvdXJjZSA9IENyZWF0ZUNhY2hlZFBsYW4ocGFyc2V0cmVlLCBmY2FjaGUtPnNyYywgQ3Jl YXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUtPnN0bXQpKTsKKwkJCQlwbGFuc291cmNlX2xpc3QgPSBs YXBwZW5kKHBsYW5zb3VyY2VfbGlzdCwgcGxhbnNvdXJjZSk7CisJCQl9CiAKIAkJCXF1ZXJ5VHJl ZV9zdWJsaXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV93aXRoY2IocGFyc2V0cmVlLAogCQkJ CQkJCQkJCQkJCQkJICBmY2FjaGUtPnNyYywKQEAgLTc1MSw2ICs4NDUsMzQgQEAgaW5pdF9zcWxf ZmNhY2hlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlF dmFsT0spCiAJCQkJCQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkJCQkgICAmcmVzdWx0dGxpc3Qp OwogCisJLyoKKwkgKiBRdWVyaWVzIGNvdWxkIGJlIHJld3JpdHRlbiBieSBjaGVja19zcWxfZm5f cmV0dmFsKCkuIE5vdyB3aGVuIHRoZXkgaGF2ZQorCSAqIHRoZWlyIGZpbmFsIGZvcm0sIHdlIGNh biBjb21wbGV0ZSBwbGFuIGNhY2hlIGVudHJ5IGNyZWF0aW9uLgorCSAqLworCWlmIChwbGFuc291 cmNlX2xpc3QgIT0gTklMKQorCXsKKwkJTGlzdENlbGwgICAqcWxjOworCQlMaXN0Q2VsbCAgICpw bGM7CisKKwkJZm9yYm90aChxbGMsIHF1ZXJ5VHJlZV9saXN0LCBwbGMsIHBsYW5zb3VyY2VfbGlz dCkKKwkJeworCQkJTGlzdAkgICAqcXVlcnlUcmVlX3N1Ymxpc3QgPSBsZmlyc3QocWxjKTsKKwkJ CUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSBsZmlyc3QocGxjKTsKKworCisJCQkvKiBG aW5pc2ggZmlsbGluZyBpbiB0aGUgQ2FjaGVkUGxhblNvdXJjZSAqLworCQkJQ29tcGxldGVDYWNo ZWRQbGFuKHBsYW5zb3VyY2UsCisJCQkJCQkJICAgcXVlcnlUcmVlX3N1Ymxpc3QsCisJCQkJCQkJ ICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgKFBhcnNl clNldHVwSG9vaykgc3FsX2ZuX3BhcnNlcl9zZXR1cCwKKwkJCQkJCQkgICBmY2FjaGUtPnBpbmZv LAorCQkJCQkJCSAgIENVUlNPUl9PUFRfUEFSQUxMRUxfT0sgfCBDVVJTT1JfT1BUX05PX1NDUk9M TCwKKwkJCQkJCQkgICBmYWxzZSk7CisJCX0KKwl9CisKIAkvKgogCSAqIENvbnN0cnVjdCBhIEp1 bmtGaWx0ZXIgd2UgY2FuIHVzZSB0byBjb2VyY2UgdGhlIHJldHVybmVkIHJvd3R5cGUgdG8gdGhl CiAJICogZGVzaXJlZCBmb3JtLCB1bmxlc3MgdGhlIHJlc3VsdCB0eXBlIGlzIFZPSUQsIGluIHdo aWNoIGNhc2UgdGhlcmUncwpAQCAtNzk1LDEwICs5MTcsMTggQEAgaW5pdF9zcWxfZmNhY2hlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgY29sbGF0aW9uLCBib29sIGxhenlFdmFsT0spCiAJ CWxhenlFdmFsT0sgPSB0cnVlOwogCX0KIAotCS8qIEZpbmFsbHksIHBsYW4gdGhlIHF1ZXJpZXMg Ki8KLQlmY2FjaGUtPmZ1bmNfc3RhdGUgPSBpbml0X2V4ZWN1dGlvbl9zdGF0ZShxdWVyeVRyZWVf bGlzdCwKLQkJCQkJCQkJCQkJICBmY2FjaGUsCi0JCQkJCQkJCQkJCSAgbGF6eUV2YWxPSyk7CisJ ZmNhY2hlLT5xdWVyeVRyZWVfbGlzdCA9IHF1ZXJ5VHJlZV9saXN0OworCWZjYWNoZS0+cGxhbnNv dXJjZV9saXN0ID0gcGxhbnNvdXJjZV9saXN0OworCisJLyoKKwkgKiBGaW5hbGx5LCBwbGFuIHRo ZSBxdWVyaWVzLiBTa2lwIHBsYW5uaW5nIGlmIHdlIHVzZSBjYWNoZWQgcGxhbnMKKwkgKiBtYWNo aW5lcnkgLSBhbnl3YXkgd2UnbGwgaGF2ZSB0byByZXBsYW4gb24gdGhlIGZpcnN0IHJ1biB3aGVu CisJICogcGFyYW1ldGVycyBhcmUgc3Vic3RpdHV0ZWQuCisJICovCisJaWYgKHBsYW5zb3VyY2Vf bGlzdCA9PSBOSUwpCisJCWZjYWNoZS0+ZnVuY19zdGF0ZSA9IGluaXRfZXhlY3V0aW9uX3N0YXRl KHF1ZXJ5VHJlZV9saXN0LAorCQkJCQkJCQkJCQkJICBmY2FjaGUsCisJCQkJCQkJCQkJCQkgIGxh enlFdmFsT0spOwogCiAJLyogTWFyayBmY2FjaGUgd2l0aCB0aW1lIG9mIGNyZWF0aW9uIHRvIHNo b3cgaXQncyB2YWxpZCAqLwogCWZjYWNoZS0+bHhpZCA9IE15UHJvYy0+dnhpZC5seGlkOwpAQCAt OTY5LDcgKzEwOTksMTMgQEAgcG9zdHF1ZWxfc3ViX3BhcmFtcyhTUUxGdW5jdGlvbkNhY2hlUHRy IGZjYWNoZSwKIAkJCXBybS0+dmFsdWUgPSBNYWtlRXhwYW5kZWRPYmplY3RSZWFkT25seShmY2lu Zm8tPmFyZ3NbaV0udmFsdWUsCiAJCQkJCQkJCQkJCQkJcHJtLT5pc251bGwsCiAJCQkJCQkJCQkJ CQkJZ2V0X3R5cGxlbihhcmd0eXBlc1tpXSkpOwotCQkJcHJtLT5wZmxhZ3MgPSAwOworCisJCQkv KgorCQkJICogUEFSQU1fRkxBR19DT05TVCBpcyBuZWNlc3NhcnkgdG8gYnVpbGQgZWZmaWNpZW50 IGN1c3RvbSBwbGFuLgorCQkJICovCisJCQlpZiAoZmNhY2hlLT5wbGFuc291cmNlX2xpc3QpCisJ CQkJcHJtLT5wZmxhZ3MgPSBQQVJBTV9GTEFHX0NPTlNUOworCiAJCQlwcm0tPnB0eXBlID0gYXJn dHlwZXNbaV07CiAJCX0KIAl9CkBAIC0xMDIyLDYgKzExNTgsMzMgQEAgcG9zdHF1ZWxfZ2V0X3Np bmdsZV9yZXN1bHQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJcmV0dXJuIHZhbHVlOwogfQogCisv KgorICogUmVsZWFzZSBwbGFucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcHJpb3IgdG8gcGxh bm5pbmcKKyAqIHN0YXRlbWVudHMgd2l0aCBuZXcgcGFyYW1ldGVycy4gV2hlbiBjdXN0b20gcGxh bnMgYXJlIGdlbmVyYXRlZAorICogZm9yIGVhY2ggZnVuY3Rpb24gY2FsbCBpbiBhIHN0YXRlbWVu dCwgdGhleSBjYW4gY29uc3VtZSB0b28gbXVjaCBtZW1vcnksIHNvCisgKiByZWxlYXNlIHRoZW0u IEdlbmVyaWMgcGxhbnMgd2lsbCBzdXJ2aXZlIGl0IGFzIHBsYW5zb3VyY2UgaG9sZHMKKyAqIHJl ZmVyZW5jZSB0byBhIGdlbmVyaWMgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3JlbGVhc2VfcGxh bnMoTGlzdCAqY3BsYW5zKQoreworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBXZSBzdXBw b3J0IHNlcGFyYXRlIHBsYW4gbGlzdCwgc28gdGhhdCB3ZSB2aXNpdCBlYWNoIHBsYW4gaGVyZSBv bmx5CisJICogb25jZQorCSAqLworCWZvcmVhY2gobGMsIGNwbGFucykKKwl7CisJCUNhY2hlZFBs YW4gKmNwbGFuID0gbGZpcnN0KGxjKTsKKworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwgTlVM TCk7CisJfQorCisJLyogQ2xlYW51cCB0aGUgbGlzdCBpdHNlbGYgKi8KKwlsaXN0X2ZyZWUoY3Bs YW5zKTsKK30KKwogLyoKICAqIGZtZ3Jfc3FsOiBmdW5jdGlvbiBjYWxsIG1hbmFnZXIgZm9yIFNR TCBmdW5jdGlvbnMKICAqLwpAQCAtMTA0MCw2ICsxMjAzLDcgQEAgZm1ncl9zcWwoUEdfRlVOQ1RJ T05fQVJHUykKIAlEYXR1bQkJcmVzdWx0OwogCUxpc3QJICAgKmVzbGlzdDsKIAlMaXN0Q2VsbCAg ICplc2xjOworCWJvb2wJCWJ1aWxkX2NhY2hlZF9wbGFucyA9IGZhbHNlOwogCiAJLyoKIAkgKiBT ZXR1cCBlcnJvciB0cmFjZWJhY2sgc3VwcG9ydCBmb3IgZXJlcG9ydCgpCkBAIC0xMTI5LDEyICsx MjkzLDU0IEBAIGZtZ3Jfc3FsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlicmVhazsKIAl9CiAKKwkv KgorCSAqIFdlIGNvdWxkIHNraXAgYWN0dWFsIHBsYW5uaW5nIGlmIGRlY2lkZWQgdG8gdXNlIGNh Y2hlZCBwbGFucy4gSW4gdGhpcworCSAqIGNhc2Ugd2UgaGF2ZSB0byBidWlsZCBjYWNoZWQgcGxh bnMgbm93LgorCSAqLworCWlmIChmY2FjaGUtPnBsYW5zb3VyY2VfbGlzdCAhPSBOSUwgJiYgZXNs aXN0ID09IE5JTCkKKwkJYnVpbGRfY2FjaGVkX3BsYW5zID0gdHJ1ZTsKKwogCS8qCiAJICogQ29u dmVydCBwYXJhbXMgdG8gYXBwcm9wcmlhdGUgZm9ybWF0IGlmIHN0YXJ0aW5nIGEgZnJlc2ggZXhl Y3V0aW9uLiAoSWYKIAkgKiBjb250aW51aW5nIGV4ZWN1dGlvbiwgd2UgY2FuIHJlLXVzZSBwcmlv ciBwYXJhbXMuKQogCSAqLwotCWlmIChpc19maXJzdCAmJiBlcyAmJiBlcy0+c3RhdHVzID09IEZf RVhFQ19TVEFSVCkKKwlpZiAoKGlzX2ZpcnN0ICYmIGVzICYmIGVzLT5zdGF0dXMgPT0gRl9FWEVD X1NUQVJUKSB8fCBidWlsZF9jYWNoZWRfcGxhbnMpCisJewogCQlwb3N0cXVlbF9zdWJfcGFyYW1z KGZjYWNoZSwgZmNpbmZvKTsKKwkJaWYgKGZjYWNoZS0+cGxhbnNvdXJjZV9saXN0KQorCQl7CisJ CQlMaXN0Q2VsbCAqbGM7CisKKwkJCS8qIHJlcGxhbiB0aGUgcXVlcmllcyAqLworCQkJcmVsZWFz ZV9wbGFucyhmY2FjaGUtPmNwbGFuX2xpc3QpOworCisJCQlmb3JlYWNoIChsYywgZmNhY2hlLT5m dW5jX3N0YXRlKQorCQkJeworCQkJCWV4ZWN1dGlvbl9zdGF0ZSAqY3VyX2VzID0gbGZpcnN0KGxj KTsKKwkJCQkvKgorCQkJCSAqIEV4ZWN1dGlvbiBzdGF0ZSBjYW4gYmUgTlVMTCBpZiBzdGF0ZW1l bnQgaXMKKwkJCQkgKiBjb21wbGV0ZWx5IHJlcGxhY2VkIGJ5IGRvIGluc3RlYWQgbm90aGluZyBy dWxlLgorCQkJCSAqLworCQkJCWlmIChjdXJfZXMpCisJCQkJCXBmcmVlKGN1cl9lcyk7CisJCQl9 CisJCQlsaXN0X2ZyZWUoZmNhY2hlLT5mdW5jX3N0YXRlKTsKKworCQkJZmNhY2hlLT5mdW5jX3N0 YXRlID0gaW5pdF9leGVjdXRpb25fc3RhdGUoZmNhY2hlLT5xdWVyeVRyZWVfbGlzdCwKKwkJCQkJ CQkJCQkJCQkgIGZjYWNoZSwKKwkJCQkJCQkJCQkJCQkgIGxhenlFdmFsT0spOworCQkJLyogcmVz dG9yZSBleGVjdXRpb24gc3RhdGUgYW5kIGVzbGlzdC1yZWxhdGVkIHZhcmlhYmxlcyAqLworCQkJ ZXNsaXN0ID0gZmNhY2hlLT5mdW5jX3N0YXRlOworCQkJLyogZmluZCB0aGUgZmlyc3Qgbm9uLU5V TEwgZXhlY3V0aW9uIHN0YXRlICovCisJCQlmb3JlYWNoKGVzbGMsIGVzbGlzdCkKKwkJCXsKKwkJ CQllcyA9IChleGVjdXRpb25fc3RhdGUgKikgbGZpcnN0KGVzbGMpOworCisJCQkJaWYgKGVzKQor CQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAogCS8qCiAJICogQnVpbGQgdHVwbGVzdG9yZSB0 byBob2xkIHJlc3VsdHMsIGlmIHdlIGRvbid0IGhhdmUgb25lIGFscmVhZHkuIE5vdGUKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXggNTVkYjhmNTM3MDUuLjQxNGRmMGY4ZjI2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpAQCAtNzQsMTggKzc0LDYgQEAKICNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAKLS8qCi0gKiBXZSBtdXN0IHNraXAgIm92ZXJoZWFk IiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBkYXRhYmFzZSBhY2Nlc3Mgd2hlbiB0aGUKLSAqIGNh Y2hlZCBwbGFuJ3Mgc3ViamVjdCBzdGF0ZW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBjb250cm9sIGNv bW1hbmQgb3Igb25lCi0gKiB0aGF0IHJlcXVpcmVzIGEgc25hcHNob3Qgbm90IHRvIGJlIHNldCB5 ZXQgKHN1Y2ggYXMgU0VUIG9yIExPQ0spLiAgTW9yZQotICogZ2VuZXJhbGx5LCBzdGF0ZW1lbnRz IHRoYXQgZG8gbm90IHJlcXVpcmUgcGFyc2UgYW5hbHlzaXMvcmV3cml0ZS9wbGFuCi0gKiBhY3Rp dml0eSBuZXZlciBuZWVkIHRvIGJlIHJldmFsaWRhdGVkLCBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBh bGwgbGlrZSB0aGF0LgotICogRm9yIHRoZSBjb252ZW5pZW5jZSBvZiBwb3N0Z3Jlcy5jLCB0cmVh dCBlbXB0eSBzdGF0ZW1lbnRzIHRoYXQgd2F5IHRvby4KLSAqLwotI2RlZmluZSBTdG10UGxhblJl cXVpcmVzUmV2YWxpZGF0aW9uKHBsYW5zb3VyY2UpICBcCi0JKChwbGFuc291cmNlKS0+cmF3X3Bh cnNlX3RyZWUgIT0gTlVMTCAmJiBcCi0JIHN0bXRfcmVxdWlyZXNfcGFyc2VfYW5hbHlzaXMoKHBs YW5zb3VyY2UpLT5yYXdfcGFyc2VfdHJlZSkpCi0KIC8qCiAgKiBUaGlzIGlzIHRoZSBoZWFkIG9m IHRoZSBiYWNrZW5kJ3MgbGlzdCBvZiAic2F2ZWQiIENhY2hlZFBsYW5Tb3VyY2VzIChpLmUuLAog ICogdGhvc2UgdGhhdCBhcmUgaW4gbG9uZy1saXZlZCBzdG9yYWdlIGFuZCBhcmUgZXhhbWluZWQg Zm9yIHNpbnZhbCBldmVudHMpLgpAQCAtMTMwLDYgKzExOCwzOCBAQCBzdGF0aWMgY29uc3QgUmVz b3VyY2VPd25lckRlc2MgcGxhbnJlZl9yZXNvd25lcl9kZXNjID0KIAkuRGVidWdQcmludCA9IE5V TEwJCQkvKiB0aGUgZGVmYXVsdCBtZXNzYWdlIGlzIGZpbmUgKi8KIH07CiAKKy8qCisgKiBXZSBt dXN0IHNraXAgIm92ZXJoZWFkIiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBkYXRhYmFzZSBhY2Nl c3Mgd2hlbiB0aGUKKyAqIGNhY2hlZCBwbGFuJ3Mgc3ViamVjdCBzdGF0ZW1lbnQgaXMgYSB0cmFu c2FjdGlvbiBjb250cm9sIGNvbW1hbmQgb3Igb25lCisgKiB0aGF0IHJlcXVpcmVzIGEgc25hcHNo b3Qgbm90IHRvIGJlIHNldCB5ZXQgKHN1Y2ggYXMgU0VUIG9yIExPQ0spLiAgTW9yZQorICogZ2Vu ZXJhbGx5LCBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFyc2UgYW5hbHlzaXMvcmV3 cml0ZS9wbGFuCisgKiBhY3Rpdml0eSBuZXZlciBuZWVkIHRvIGJlIHJldmFsaWRhdGVkLCBzbyB3 ZSBjYW4gdHJlYXQgdGhlbSBhbGwgbGlrZSB0aGF0LgorICogRm9yIHRoZSBjb252ZW5pZW5jZSBv ZiBwb3N0Z3Jlcy5jLCB0cmVhdCBlbXB0eSBzdGF0ZW1lbnRzIHRoYXQgd2F5IHRvby4KKyAqIElm IHBsYW5zb3VyY2UgZG9lc24ndCBoYXZlIHJhd19wYXJzZV90cmVlLCBsb29rIGF0IHF1ZXJ5X2xp c3QgdG8gZmluZCBvdXQKKyAqIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXV0aWxpdHkgc3RhdGVtZW50 cy4KKyAqLworc3RhdGljIGlubGluZSBib29sCitTdG10UGxhblJlcXVpcmVzUmV2YWxpZGF0aW9u KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCit7CisJaWYgKHBsYW5zb3VyY2UtPnJhd19w YXJzZV90cmVlICE9IE5VTEwpCisJeworCQlyZXR1cm4gc3RtdF9yZXF1aXJlc19wYXJzZV9hbmFs eXNpcyhwbGFuc291cmNlLT5yYXdfcGFyc2VfdHJlZSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3RD ZWxsICpsYzsKKworCQlmb3JlYWNoIChsYywgcGxhbnNvdXJjZS0+cXVlcnlfbGlzdCkKKwkJewor CQkJUXVlcnkgKnF1ZXJ5ID0gY2FzdE5vZGUoUXVlcnksIGxmaXJzdChsYykpOworCisJCQlpZiAo cXVlcnktPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQorCQkJCXJldHVybiB0cnVlOworCQl9 CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogLyogQ29udmVuaWVuY2Ugd3JhcHBlcnMgb3ZlciBS ZXNvdXJjZU93bmVyUmVtZW1iZXIvRm9yZ2V0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIFJlc291 cmNlT3duZXJSZW1lbWJlclBsYW5DYWNoZVJlZihSZXNvdXJjZU93bmVyIG93bmVyLCBDYWNoZWRQ bGFuICpwbGFuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCAzOGNiOWU5NzBk NS4uODYzN2JmNmI2MmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC00Niw2 ICs0Niw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiY29tbW9u L2ZpbGVfdXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vc2NyYW0tY29tbW9uLmgiCisjaW5jbHVk ZSAiZXhlY3V0b3IvZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUg ImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgpAQCAtOTc3LDYgKzk3OCwx NyBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQl0cnVlLAog CQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9w bGFucyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29w KCJFbmFibGUgcGxhbiBjYWNoZSBtYWNoaW5lcnkgYW5kIGN1c3RvbSBwbGFucyBmb3IgIgorCQkJ CQkJICJTUUwgbGFuZ3VhZ2UgZnVuY3Rpb25zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19OT1RfSU5f U0FNUExFIHwgR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9zcWxfZnVuY19jdXN0b21fcGxh bnMsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFibGVfYXN5 bmNfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0 X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgYXN5bmMgYXBwZW5kIHBsYW5zLiIp LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZnVuY3Rpb25zLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9mdW5jdGlvbnMuaAppbmRleCBhNmFlMmU3MmQ3OS4uMzRlZjg0N2I1NTQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oCisrKyBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2Z1bmN0aW9ucy5oCkBAIC01Myw0ICs1Myw2IEBAIGV4dGVybiBib29s IGNoZWNrX3NxbF9mbl9yZXR2YWwoTGlzdCAqcXVlcnlUcmVlTGlzdHMsCiAKIGV4dGVybiBEZXN0 UmVjZWl2ZXIgKkNyZWF0ZVNRTEZ1bmN0aW9uRGVzdFJlY2VpdmVyKHZvaWQpOwogCitleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfc3FsX2Z1bmNfY3VzdG9tX3BsYW5zOworCiAjZW5kaWYJ CQkJCQkJLyogRlVOQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbnVtZXJpYy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL251bWVyaWMub3V0 CmluZGV4IDA4OTgxMDdlYzMwLi5mNWFmNGRjYzE3MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9udW1lcmljLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L251bWVyaWMub3V0CkBAIC0zMzQ2LDEwICszMzQ2LDEwIEBAIHNlbGVjdCBsbig5LjM0MjUzNjM1 NWUzNCk7CiAtLSBpbnZhbGlkIGlucHV0cwogc2VsZWN0IGxvZygtMTIuMzQpOwogRVJST1I6ICBj YW5ub3QgdGFrZSBsb2dhcml0aG0gb2YgYSBuZWdhdGl2ZSBudW1iZXIKLUNPTlRFWFQ6ICBTUUwg ZnVuY3Rpb24gImxvZyIgc3RhdGVtZW50IDEKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIg ZHVyaW5nIHN0YXJ0dXAKIHNlbGVjdCBsb2coMC4wKTsKIEVSUk9SOiAgY2Fubm90IHRha2UgbG9n YXJpdGhtIG9mIHplcm8KLUNPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIgc3RhdGVtZW50IDEK K0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvZyIgZHVyaW5nIHN0YXJ0dXAKIC0tIHNvbWUgcmFu ZG9tIHRlc3RzCiBzZWxlY3QgbG9nKDEuMjM0NTY3ZS04OSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wbHBnc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxwZ3NxbC5v dXQKaW5kZXggMGE2OTQ1NTgxYmQuLjYxYTM1ODA0MTFiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BscGdzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGxwZ3NxbC5vdXQKQEAgLTQ0NzQsNyArNDQ3NCw3IEBAIGNyZWF0ZSB0YWJsZSBwdWJsaWMu c3R1ZmZzIChzdHVmZiB0ZXh0KTsKIFNBVkVQT0lOVCBhOwogc2VsZWN0IGVycm9yMignbm9uZXhp c3RlbnQuc3R1ZmZzJyk7CiBFUlJPUjogIHNjaGVtYSAibm9uZXhpc3RlbnQiIGRvZXMgbm90IGV4 aXN0Ci1DT05URVhUOiAgU1FMIGZ1bmN0aW9uICJlcnJvcjEiIHN0YXRlbWVudCAxCitDT05URVhU OiAgU1FMIGZ1bmN0aW9uICJlcnJvcjEiIGR1cmluZyBzdGFydHVwCiBQTC9wZ1NRTCBmdW5jdGlv biBlcnJvcjIodGV4dCkgbGluZSAzIGF0IFJFVFVSTgogUk9MTEJBQ0sgVE8gYTsKIHNlbGVjdCBl cnJvcjIoJ3B1YmxpYy5zdHVmZnMnKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5k ZXggODU2YTgzNDljNTAuLjNlMjhlNGY1MjFiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVz Lm91dApAQCAtMzg2OCwzICszODY4LDM4IEBAIERST1AgVEFCTEUgcnVsZXRlc3RfdDM7CiBEUk9Q IFRBQkxFIHJ1bGV0ZXN0X3QyOwogRFJPUCBUQUJMRSBydWxldGVzdF90MTsKIERST1AgVVNFUiBy ZWdyZXNzX3J1bGVfdXNlcjE7CistLSBUZXN0IHRoYXQgU1FMIGZ1bmN0aW9ucyBjb3JyZWN0bHkg aGFuZGxlIERPIE5PVEhJTkcgcnVsZQorQ1JFQVRFIFRBQkxFIHNvbWVfZGF0YSAoaSBpbnQsIGRh dGEgdGV4dCk7CitDUkVBVEUgVEFCTEUgc29tZV9kYXRhX3ZhbHVlcyAoaSBpbnQsIGRhdGEgdGV4 dCk7CitDUkVBVEUgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaSBpbnQsIGRhdGEgdGV4dCkKK1JFVFVS TlMgSU5UCitBUyAkJAorSU5TRVJUIElOVE8gc29tZV9kYXRhIFZBTFVFUyAoJDEsICQyKTsKK1NF TEVDVCAxOworJCQgTEFOR1VBR0UgU1FMOworSU5TRVJUIElOVE8gc29tZV9kYXRhX3ZhbHVlcyBT RUxFQ1QgaSAsICdkYXRhJ3x8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CitDUkVB VEUgUlVMRSBzb21lX2RhdGFfbm9pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHNvbWVfZGF0YSBETyBJ TlNURUFEIE5PVEhJTkc7CitTRUxFQ1QgaW5zZXJ0X2RhdGEoaSwgZGF0YSkgRlJPTSBzb21lX2Rh dGFfdmFsdWVzOworIGluc2VydF9kYXRhIAorLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAxCisg ICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAgICAgICAgICAxCisgICAgICAgICAgIDEKKyAg ICAgICAgICAgMQorICAgICAgICAgICAxCisgICAgICAgICAgIDEKKyAgICAgICAgICAgMQorICAg ICAgICAgICAxCisoMTAgcm93cykKKworU0VMRUNUICogRlJPTSBzb21lX2RhdGEgT1JERVIgQlkg aTsKKyBpIHwgZGF0YSAKKy0tLSstLS0tLS0KKygwIHJvd3MpCisKK0RST1AgUlVMRSBzb21lX2Rh dGFfbm9pbnNlcnQgT04gc29tZV9kYXRhOworRFJPUCBUQUJMRSBzb21lX2RhdGFfdmFsdWVzOwor RFJPUCBUQUJMRSBzb21lX2RhdGE7CitEUk9QIEZVTkNUSU9OIGluc2VydF9kYXRhKGludCwgdGV4 dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxl bC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQKaW5k ZXggYTgwOTAzNjQ1MzIuLmY3ZDExYWZjM2RkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3NlbGVjdF9wYXJhbGxlbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zZWxlY3RfcGFyYWxsZWwub3V0CkBAIC0xMzc4LDcgKzEzNzgsNyBAQCBzZWxlY3Qgc2V0 X2FuZF9yZXBvcnRfcm9sZSgpOwogCiBzZWxlY3Qgc2V0X3JvbGVfYW5kX2Vycm9yKDApOwogRVJS T1I6ICBkaXZpc2lvbiBieSB6ZXJvCi1DT05URVhUOiAgU1FMIGZ1bmN0aW9uICJzZXRfcm9sZV9h bmRfZXJyb3IiIHN0YXRlbWVudCAxCitDT05URVhUOiAgU1FMIGZ1bmN0aW9uICJzZXRfcm9sZV9h bmRfZXJyb3IiIGR1cmluZyBzdGFydHVwCiBzZXQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSAxOwog c2VsZWN0IHNldF9hbmRfcmVwb3J0X3JvbGUoKTsKICAgIHNldF9hbmRfcmVwb3J0X3JvbGUgICAK QEAgLTEzODgsNyArMTM4OCw3IEBAIHNlbGVjdCBzZXRfYW5kX3JlcG9ydF9yb2xlKCk7CiAKIHNl bGVjdCBzZXRfcm9sZV9hbmRfZXJyb3IoMCk7CiBFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8KLUNP TlRFWFQ6ICBTUUwgZnVuY3Rpb24gInNldF9yb2xlX2FuZF9lcnJvciIgc3RhdGVtZW50IDEKK0NP TlRFWFQ6ICBTUUwgZnVuY3Rpb24gInNldF9yb2xlX2FuZF9lcnJvciIgZHVyaW5nIHN0YXJ0dXAK IHBhcmFsbGVsIHdvcmtlcgogcmVzZXQgZGVidWdfcGFyYWxsZWxfcXVlcnk7CiBkcm9wIGZ1bmN0 aW9uIHNldF9hbmRfcmVwb3J0X3JvbGUoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3RyaW5ncy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0cmluZ3Mu b3V0CmluZGV4IGI2NWJiMmQ1MzY4Li43YWI1YWFmY2QyOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0cmluZ3Mub3V0CkBAIC01MTEsNyArNTExLDcgQEAgU0VMRUNUIFNVQlNUUklORygnYWJj ZGVmZycgU0lNSUxBUiAnYSMiJXxhYiMiZycgRVNDQVBFICcjJykgQVMgImJjZGVmIjsKIC0tIENh bid0IGhhdmUgbW9yZSB0aGFuIHR3byBwYXJ0IHNlcGFyYXRvcnMKIFNFTEVDVCBTVUJTVFJJTkco J2FiY2RlZmcnIFNJTUlMQVIgJ2EqIyIlIyJnKiMieCcgRVNDQVBFICcjJykgQVMgImVycm9yIjsK IEVSUk9SOiAgU1FMIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXkgbm90IGNvbnRhaW4gbW9yZSB0aGFu IHR3byBlc2NhcGUtZG91YmxlLXF1b3RlIHNlcGFyYXRvcnMKLUNPTlRFWFQ6ICBTUUwgZnVuY3Rp b24gInN1YnN0cmluZyIgc3RhdGVtZW50IDEKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gInN1YnN0 cmluZyIgZHVyaW5nIHN0YXJ0dXAKIC0tIFBvc3RncmVzIGV4dGVuc2lvbjogd2l0aCAwIG9yIDEg c2VwYXJhdG9yLCBhc3N1bWUgcGFydHMgMSBhbmQgMyBhcmUgZW1wdHkKIFNFTEVDVCBTVUJTVFJJ TkcoJ2FiY2RlZmcnIFNJTUlMQVIgJ2EjIiVnJyBFU0NBUEUgJyMnKSBBUyAiYmNkZWZnIjsKICBi Y2RlZmcgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDM1MmFiYzBi ZDQyLi43YjBhNGEwZDZjMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQK QEAgLTE3MCw4ICsxNzAsOSBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUg ICAgIHwgb24KICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9z b3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX3NxbF9mdW5jX2N1c3RvbV9wbGFu cyAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDIzIHJvd3Mp CisoMjQgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9u cyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBv ciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFy dC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbAppbmRleCBmZGQzZmYxZDE2MS4uNTA1NDQ5NDUyZWUgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3J1bGVzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9ydWxlcy5zcWwKQEAgLTE0MzIsMyArMTQzMiwyNyBAQCBEUk9QIFRBQkxFIHJ1 bGV0ZXN0X3QyOwogRFJPUCBUQUJMRSBydWxldGVzdF90MTsKIAogRFJPUCBVU0VSIHJlZ3Jlc3Nf cnVsZV91c2VyMTsKKworLS0gVGVzdCB0aGF0IFNRTCBmdW5jdGlvbnMgY29ycmVjdGx5IGhhbmRs ZSBETyBOT1RISU5HIHJ1bGUKK0NSRUFURSBUQUJMRSBzb21lX2RhdGEgKGkgaW50LCBkYXRhIHRl eHQpOworQ1JFQVRFIFRBQkxFIHNvbWVfZGF0YV92YWx1ZXMgKGkgaW50LCBkYXRhIHRleHQpOwor CitDUkVBVEUgRlVOQ1RJT04gaW5zZXJ0X2RhdGEoaSBpbnQsIGRhdGEgdGV4dCkKK1JFVFVSTlMg SU5UCitBUyAkJAorSU5TRVJUIElOVE8gc29tZV9kYXRhIFZBTFVFUyAoJDEsICQyKTsKK1NFTEVD VCAxOworJCQgTEFOR1VBR0UgU1FMOworCitJTlNFUlQgSU5UTyBzb21lX2RhdGFfdmFsdWVzIFNF TEVDVCBpICwgJ2RhdGEnfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKKworQ1JF QVRFIFJVTEUgc29tZV9kYXRhX25vaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBzb21lX2RhdGEgRE8g SU5TVEVBRCBOT1RISU5HOworCitTRUxFQ1QgaW5zZXJ0X2RhdGEoaSwgZGF0YSkgRlJPTSBzb21l X2RhdGFfdmFsdWVzOworCitTRUxFQ1QgKiBGUk9NIHNvbWVfZGF0YSBPUkRFUiBCWSBpOworCitE Uk9QIFJVTEUgc29tZV9kYXRhX25vaW5zZXJ0IE9OIHNvbWVfZGF0YTsKK0RST1AgVEFCTEUgc29t ZV9kYXRhX3ZhbHVlczsKK0RST1AgVEFCTEUgc29tZV9kYXRhOworRFJPUCBGVU5DVElPTiBpbnNl cnRfZGF0YShpbnQsIHRleHQpOwotLSAKMi40My4wCgo= --=_afdc52a41a0fa0065777e37a1e848c84--