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 1nPNrI-0007ME-4B for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Mar 2022 12:13:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nPNrG-0000SE-Sn for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Mar 2022 12:13:30 +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 1nPNrG-0000S2-0f for pgsql-hackers@lists.postgresql.org; Wed, 02 Mar 2022 12:13:30 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nPNr8-0001wq-MN for pgsql-hackers@postgresql.org; Wed, 02 Mar 2022 12:13:29 +0000 Received: by mail-wr1-x431.google.com with SMTP id bk29so2466236wrb.4 for ; Wed, 02 Mar 2022 04:13:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=1MBjRneUzAjo2QS4OadxJQPrpcbx/FVPSQFt6TDbeqE=; b=ebUp+fqb0AV7SIA/A3ozRzvjUhwCorlgxWBS8b0fY2SPu08G8kP+E/nsVb28qGBmym RtsgEwgxWokZdKt8JOehWwfb2SKAnyy4qskAq6L1uvzY5wbNgvnM5Piw6nuep3hl8Cmc BlmI4L5LHFYuEj+D5MPcuiyp/y1Fhz2ZUmlrYXwEpOuMl0QpLL95iQOAuBvAFZOQUb3h Uk1y0B7e+BHxp8POIbmLLHGEf/6Ln8rBSv7HQ03l9KlKYzN4GH56LsOXV5QH72HN0+Sk xYGHX1RJkVcrltBPnjT/bL++Go2RtF65m9hPaftMTmtIgVDxPVvjaWAyHJsSpIlN9WGK N2bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=1MBjRneUzAjo2QS4OadxJQPrpcbx/FVPSQFt6TDbeqE=; b=Sv/XuwHbfToz47kImd3bH68YvLH08R6F3qqh3KH5NVc64zYHT1OTElMvjcXcGWH7hU vzEU6RjLQ+/HYB1vElSSxbJVx+HYNv9b/Qeb6Yps2PfrkCdTGTYbFhBNDDBnFnpdCTvw 6An/BycZDRBCT4aeULcfsIGox5RnXyhKOvUo3CKTfifyYyuhedm3bknS7wZJDUEmDhg4 oXtKiIRkJN1hNdeo5AFMFOEB6y42Fq2p0LIXKMVWLbnsWqeHg8g4RLKaT8ZEub+Mmak1 vxzfXMLff96kuVM8TBsFnG/6WK/Gah1xYKSzwVapBrXnoFRx2q28+P4XWySu2RrdWz2P ti0g== X-Gm-Message-State: AOAM533hSJuOVskyU6HXx1KadYS14ZxXNznuPHchBla3B5Vre+3qPH8C B/LHpcszL2pWjnsqQjbT2kFnodxrsQtBOHkY8LX/3bTG9usHJCynUfaNO4bx9BtyExn2NXpfdYB uq5o26zZWiJ2b+anJr0KtBFqr12p7Obof/YwkriIi/ltot+aiiSe+B9x/YwBePiHRhqln5iHo0a 9PH7/bOW38zled36PlYiJSD338LzAcGJSiL2cB X-Google-Smtp-Source: ABdhPJxMkd/j+aCR5oogIM0hiqyISgcLpFZA1IqzyBSl2NEHNQehCNRbEMfcwpX5N9/ktFRmrP7d3A== X-Received: by 2002:adf:f903:0:b0:1f0:2348:82c6 with SMTP id b3-20020adff903000000b001f0234882c6mr3820952wrr.509.1646223201225; Wed, 02 Mar 2022 04:13:21 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id x3-20020a5d6b43000000b001e317fb86ecsm16530787wrw.57.2022.03.02.04.13.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Mar 2022 04:13:20 -0800 (PST) Content-Type: multipart/mixed; boundary="------------89JTRge4tdnFc2l9tHTU5zx3" Message-ID: Date: Wed, 2 Mar 2022 13:13:15 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: Amit Kapila Cc: Peter Eisentraut , Alvaro Herrera , Justin Pryzby , "houzj.fnst@fujitsu.com" , Rahila Syed , Peter Smith , pgsql-hackers References: <202201120041.p24wvsfcsope@alvherre.pgsql> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------89JTRge4tdnFc2l9tHTU5zx3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Attached is an updated patch, addressing most of the issues reported so far. There are various minor tweaks, but the main changes are: 1) regular regression tests, verifying (hopefully) all the various cases of publication vs. column filters, replica identity check at various changes and so on 2) pg_dump tests, testing column filters (alone and with row filter) 3) checks of column filter vs. publish_via_partition_root and replica identity, following the same logic as the row-filter patch (hopefully, it touches the same places, using the same logic, ...) That means - with "publish_via_partition_root=false" it's not allowed to specify column filters on partitioned tables, only for leaf partitions. And we check column filter vs. replica identity when adding tables to publications, or whenever we change the replica identity. The patch is still a bit crude, I'm sure some of the places (especially the new ones) may need cleanup/recovery. But I think it's much closer to being committable, I think. The first two simple patches are adding tests for the row filtering. So this is not really part of this patch. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------89JTRge4tdnFc2l9tHTU5zx3 Content-Type: text/x-patch; charset=UTF-8; name="0001-Verify-changing-WHERE-condition-for-a-publi-20220302.patch" Content-Disposition: attachment; filename*0="0001-Verify-changing-WHERE-condition-for-a-publi-20220302.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNzgxZjg0MGUzODcwMWM2M2Q4YjU3ZmYzNmJkNTIwZjJjY2VkNmFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogU2F0LCAyNiBGZWIgMjAyMiAxNzozMzowOSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggMS8zXSBWZXJpZnkgY2hhbmdpbmcgV0hFUkUgY29uZGl0aW9uIGZvciBhIHB1Ymxp Y2F0aW9uCgpDb21taXQgNTJlNGYwY2Q0NyBhZGRlZCBzdXBwb3J0IGZvciByb3cgZmlsdGVy cyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uLAppbmNsdWRpbmcgcmVncmVzc2lvbiB0ZXN0cyB3 aXRoIG11bHRpcGxlIEFMVEVSIFBVQkxJQ0FUSU9OIGNvbW1hbmRzLAptb2RpZnlpbmcgdGhl IHJvdyBmaWx0ZXIuIEJ1dCB0aGUgdGVzdHMgbmV2ZXIgdmVyaWZpZWQgdGhhdCB0aGUgcm93 CmZpbHRlciB3YXMgYWN0dWFsbHkgdXBkYXRlZCBpbiB0aGUgY2F0YWxvZy4gVGhpcyBhZGRz IGEgY291cGxlIFxkIGFuZApcZFJwIGNvbW1hbmRzLCB0byB2ZXJpZnkgdGhlIGNhdGFsb2cg d2FzIHVwZGF0ZWQuCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHVibGljYXRpb24uc3FsICAgICAgfCAgOCArKysKIDIgZmlsZXMgY2hhbmdlZCwgNzQg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKaW5kZXggM2MzODJlNTIwZTQuLjIyN2NlNzU5NDg2IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzk1LDE1ICszOTUsODEgQEAg TElORSAxOiAuLi5JQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDEg V0hFUkUgKGIgPCAnMicgQ08uLi4KIERFVEFJTDogIFVzZXItZGVmaW5lZCBjb2xsYXRpb25z IGFyZSBub3QgYWxsb3dlZC4KIC0tIG9rIC0gTlVMTElGIGlzIGFsbG93ZWQKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKE5V TExJRigxLDIpID0gYSk7CitcZCsgdGVzdHB1Yl9yZl90YmwxCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyBDb2x1bW4g fCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAg fCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAg ICAgICAgICAgICAgfCAKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1YjUiIFdIRVJFIChO VUxMSUYoMSwgMikgPSBhKQorCitcZFJwKyB0ZXN0cHViNQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCitUYWJsZXM6Cisg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiIFdIRVJFIChOVUxMSUYoMSwgMikgPSBhKQor CiAtLSBvayAtIGJ1aWx0LWluIG9wZXJhdG9ycyBhcmUgYWxsb3dlZAogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYSBJUyBO VUxMKTsKK1xkKyB0ZXN0cHViX3JmX3RibDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRhYmxlICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlICB8IFN0YXRzIHRh cmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAg ICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IHRleHQgICAgfCAg ICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAg ICB8IAorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViNSIgV0hFUkUgKGEgSVMgTlVMTCkK KworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1 Yl9yZl90YmwxIiBXSEVSRSAoYSBJUyBOVUxMKQorCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFICgoYSA+IDUpIElTIEZBTFNF KTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEgV0hFUkUgKGEgSVMgRElTVElOQ1QgRlJPTSA1KTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKChhLCBhICsgMSkgPCAo MiwgMykpOwogLS0gb2sgLSBidWlsdC1pbiB0eXBlIGNvZXJjaW9ucyBiZXR3ZWVuIHR3byBi aW5hcnkgY29tcGF0aWJsZSBkYXRhdHlwZXMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGI6OnZhcmNo YXIgPCAnMicpOworXGQrIHRlc3RwdWJfcmZfdGJsMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCisgQ29sdW1uIHwgIFR5 cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3Rh dHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwg ICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAg ICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAg ICAgICAgIHwgCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWI1IiBXSEVSRSAoKChiKTo6 Y2hhcmFjdGVyIHZhcnlpbmcpOjp0ZXh0IDwgJzInOjp0ZXh0KQorCitcZFJwKyB0ZXN0cHVi NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiIFdIRVJF ICgoKGIpOjpjaGFyYWN0ZXIgdmFyeWluZyk6OnRleHQgPCAnMic6OnRleHQpCisKIC0tIG9r IC0gaW1tdXRhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZAogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsNCBXSEVSRSAobGVu Z3RoKGcpIDwgNik7CitcZCsgdGVzdHB1Yl9yZl90YmwxCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyBDb2x1bW4gfCAg VHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBT dGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAg fCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0ZXh0 ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAg ICAgICAgICAgfCAKKworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJw dWJsaWMudGVzdHB1Yl9yZl90Ymw0IiBXSEVSRSAobGVuZ3RoKGcpIDwgNikKKwogLS0gZmFp bCAtIHVzZXItZGVmaW5lZCB0eXBlcyBhcmUgbm90IGFsbG93ZWQKIENSRUFURSBUWVBFIHJm X2J1Z19zdGF0dXMgQVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOwogQ1JFQVRF IFRBQkxFIHJmX2J1ZyAoaWQgc2VyaWFsLCBkZXNjcmlwdGlvbiB0ZXh0LCBzdGF0dXMgcmZf YnVnX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNh dGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXgg M2YwNGQzNDI2NGEuLmNkN2UwMTgyNzE2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGlj YXRpb24uc3FsCkBAIC0yMDMsMTUgKzIwMywyMyBAQCBDUkVBVEUgQ09MTEFUSU9OIHVzZXJf Y29sbGF0aW9uIEZST00gIkMiOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYiA8ICcyJyBDT0xMQVRFIHVzZXJfY29sbGF0 aW9uKTsKIC0tIG9rIC0gTlVMTElGIGlzIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKE5VTExJRigxLDIpID0g YSk7CitcZCsgdGVzdHB1Yl9yZl90YmwxCitcZFJwKyB0ZXN0cHViNQogLS0gb2sgLSBidWls dC1pbiBvcGVyYXRvcnMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEgSVMgTlVMTCk7CitcZCsgdGVz dHB1Yl9yZl90YmwxCitcZFJwKyB0ZXN0cHViNQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoKGEgPiA1KSBJUyBGQUxTRSk7 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90Ymwx IFdIRVJFIChhIElTIERJU1RJTkNUIEZST00gNSk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFICgoYSwgYSArIDEpIDwgKDIs IDMpKTsKIC0tIG9rIC0gYnVpbHQtaW4gdHlwZSBjb2VyY2lvbnMgYmV0d2VlbiB0d28gYmlu YXJ5IGNvbXBhdGlibGUgZGF0YXR5cGVzIGFyZSBhbGxvd2VkCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChiOjp2YXJjaGFy IDwgJzInKTsKK1xkKyB0ZXN0cHViX3JmX3RibDEKK1xkUnArIHRlc3RwdWI1CiAtLSBvayAt IGltbXV0YWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDQgV0hFUkUgKGxlbmd0 aChnKSA8IDYpOworXGQrIHRlc3RwdWJfcmZfdGJsMQorXGRScCsgdGVzdHB1YjUKIC0tIGZh aWwgLSB1c2VyLWRlZmluZWQgdHlwZXMgYXJlIG5vdCBhbGxvd2VkCiBDUkVBVEUgVFlQRSBy Zl9idWdfc3RhdHVzIEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsKIENSRUFU RSBUQUJMRSByZl9idWcgKGlkIHNlcmlhbCwgZGVzY3JpcHRpb24gdGV4dCwgc3RhdHVzIHJm X2J1Z19zdGF0dXMpOwotLSAKMi4zNC4xCgo= --------------89JTRge4tdnFc2l9tHTU5zx3 Content-Type: text/x-patch; charset=UTF-8; name="0002-Test-publication-row-filters-in-pg_dump-tes-20220302.patch" Content-Disposition: attachment; filename*0="0002-Test-publication-row-filters-in-pg_dump-tes-20220302.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4ZWU2N2RkNTJhMWZjMDg4MzdhYTg1OTc5ZGZjMDg0MmNjOTY4MDEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAxIE1hciAyMDIyIDE1OjI1OjU2ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCAyLzNdIFRlc3QgcHVibGljYXRpb24gcm93IGZpbHRlcnMgaW4gcGdfZHVt cCB0ZXN0cwoKQ29tbWl0IDUyZTRmMGNkNDcgYWRkZWQgc3VwcG9ydCBmb3Igcm93IGZpbHRl cnMgd2hlbiByZXBsaWNhdGluZyB0YWJsZXMsCmJ1dCB0aGUgY29tbWl0IGFkZGVkIG5vIHBn X2R1bXAgdGVzdHMgZm9yIHRoaXMgZmVhdHVyZS4gU28gYWRkIGF0IGxlYXN0CmEgc2ltcGxl IHRlc3QuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgfCA2ICsrKy0t LQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGRkMDY1Yzc1OGZhLi5jM2JjZWY4YzBl YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI0MDcsMTIgKzI0MDcsMTIg QEAgbXkgJXRlc3RzID0gKAogCQl9LAogCX0sCiAKLQknQUxURVIgUFVCTElDQVRJT04gcHVi MSBBREQgVEFCTEUgdGVzdF9zZWNvbmRfdGFibGUnID0+IHsKKwknQUxURVIgUFVCTElDQVRJ T04gcHViMSBBREQgVEFCTEUgdGVzdF9zZWNvbmRfdGFibGUgV0hFUkUgKGNvbDEgPSAxKScg PT4gewogCQljcmVhdGVfb3JkZXIgPT4gNTIsCiAJCWNyZWF0ZV9zcWwgPT4KLQkJICAnQUxU RVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3Rh YmxlOycsCisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIGR1bXBfdGVz dC50ZXN0X3NlY29uZF90YWJsZSBXSEVSRSAoY29sMSA9IDEpOycsCiAJCXJlZ2V4cCA9PiBx ci9eCi0JCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIE9OTFkgZHVtcF90 ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlO1xFCisJCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEg QUREIFRBQkxFIE9OTFkgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlIFdIRVJFICgoY29s MSA9IDEpKTtcRQogCQkJL3htLAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9w b3N0X2RhdGEgPT4gMSwgfSwKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2No ZW1hID0+IDEsIH0sCi0tIAoyLjM0LjEKCg== --------------89JTRge4tdnFc2l9tHTU5zx3 Content-Type: text/x-patch; charset=UTF-8; name="0003-Allow-specifying-column-filters-for-logical-20220302.patch" Content-Disposition: attachment; filename*0="0003-Allow-specifying-column-filters-for-logical-20220302.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyMjNhM2MwY2JiYzI0ODE0YzJhMjA3MzE0ZTNkNWNkODI1N2I5ZmJhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogV2VkLCAyMyBGZWIgMjAyMiAyMToxNToxOCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggMy8zXSBBbGxvdyBzcGVjaWZ5aW5nIGNvbHVtbiBmaWx0ZXJzIGZvciBsb2dpY2Fs IHJlcGxpY2F0aW9uCgpUaGlzIGFsbG93cyBzcGVjaWZ5aW5nIGFuIG9wdGlvbmFsIGNvbHVt biBsaXN0IHdoZW4gYWRkaW5nIGEgdGFibGUgdG8KbG9naWNhbCByZXBsaWNhdGlvbi4gQ29s dW1ucyBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0IGFyZSBub3Qgc2VudCB0bwp0aGUgc3Vi c2NyaWJlci4gVGhlIGZpbHRlciBpcyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGNvbHVtbnMg YWZ0ZXIgdGhlCnRhYmxlIG5hbWUsIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgoKRm9yIFVQ REFURS9ERUxFVEUgcHVibGljYXRpb25zLCB0aGUgY29sdW1uIGZpbHRlciBuZWVkcyB0byBj b3ZlciBhbGwKUkVQTElDQSBJREVOVElUWSBjb2x1bW5zLiBGb3IgSU5TRVJUIHB1YmxpY2F0 aW9ucywgdGhlIGNvbHVtbiBsaXN0IGlzCmFyYml0cmFyeSBhbmQgbWF5IG9taXQgc29tZSBS RVBMSUNBIElERU5USVRZIGNvbHVtbnMuIEZ1cnRoZXJtb3JlLCBpZgp0aGUgdGFibGUgdXNl cyBSRVBMSUNBIElERU5USVRZIEZVTEwsIGNvbHVtbiBmaWx0ZXIgaXMgbm90IGFsbG93ZWQu CgpUaGUgY29sdW1uIGZpbHRlciBjYW4gY29udGFpbiBvbmx5IHNpbXBsZSBjb2x1bW4gcmVm ZXJlbmNlcy4gQ29tcGxleApleHByZXNzaW9ucywgZnVuY3Rpb24gY2FsbHMgZXRjLiBhcmUg bm90IGFsbG93ZWQuIFRoaXMgcmVzdHJpY3Rpb24gY291bGQKYmUgcmVsYXhlZCBpbiB0aGUg ZnV0dXJlLgoKRHVyaW5nIHRoZSBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiwgb25s eSBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUKY29sdW1uIGZpbHRlciBhcmUgY29waWVkIHRv IHRoZSBzdWJzY3JpYmVyLiBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcwpzZXZlcmFsIHB1Ymxp Y2F0aW9ucywgY29udGFpbmluZyB0aGUgc2FtZSB0YWJsZSB3aXRoIGRpZmZlcmVudCBjb2x1 bW4KZmlsdGVycywgY29sdW1ucyBzcGVjaWZpZWQgaW4gYW55IG9mIHRoZSBmaWx0ZXJzIHdp bGwgYmUgY29waWVkLiBUaGlzCm1lYW5zIGFsbCBjb2x1bW5zIGFyZSByZXBsaWNhdGVkIGlm IHRoZSB0YWJsZSBoYXMgbm8gY29sdW1uIGZpbHRlciBhdAphbGwgKHdoaWNoIGlzIHRyZWF0 ZWQgYXMgY29sdW1uIGZpbHRlciB3aXRoIGFsbCBjb2x1bW5zKSwgb2Ygd2hlbiBvZiB0aGUK cHVibGljYXRpb25zIGlzIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJMRVMgKHBvc3NpYmx5IElO IFNDSEVNQSBmb3IgdGhlCnNjaGVtYSBvZiB0aGUgdGFibGUpLgoKRm9yIHBhcnRpdGlvbmVk IHRhYmxlcywgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgZGV0ZXJtaW5lcyB3aGV0aGVy CnRoZSByb3cgZmlsdGVyIGZvciB0aGUgcm9vdCBvciBsZWFmIHJlbGF0aW9uIHdpbGwgYmUg dXNlZC4gSWYgdGhlCnBhcmFtZXRlciBpcyAnZmFsc2UnICh0aGUgZGVmYXVsdCksIHRoZSBm aWx0ZXIgZGVmaW5lZCBmb3IgdGhlIGxlYWYKcmVsYXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNl LCB0aGUgY29sdW1uIGZpbHRlciBmb3IgdGhlIHJvb3QgcGFydGl0aW9uCndpbGwgYmUgdXNl ZC4KClBzcWwgY29tbWFuZHMgXGRScCsgYW5kIFxkIDx0YWJsZS1uYW1lPiBub3cgZGlzcGxh eSBhbnkgY29sdW1uIGZpbHRlcnMuCgpBdXRob3I6IFJhaGlsYSBTeWVkIDxyYWhpbGFzeWVk OTBAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDJMMjh2 ZGRCX05GZFJWcHV5UkJKRUJXano0QlN5VEI9X2VrdE5SSDhOSjFqZjk1Z0BtYWlsLmdtYWls LmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg fCAgMTMgKwogZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgICAgICAgICAgICAgICAgICB8 ICAgNCArLQogZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sICAgICB8 ICAyMyArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCAgICB8 ICAxNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8 IDM5NyArKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YyAgICAgIHwgMTgxICsrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAg ICAgICAgICAgIHwgMjA5ICsrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAg ICAgICAgICAgICB8ICA2MCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9w cm90by5jICAgICB8ICA1NSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYyB8IDI3MSArKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIHwgMTIxICsrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAg ICAgICAgICAgICAgICAgICB8ICA0NyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbCAgICAgICAgICAgIHwgIDYwICsrCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAg ICAgICAgICAgICAgICAgIHwgIDQwICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmggICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb25fcmVsLmggICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o ICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHByb3RvLmggICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQgICB8IDIxMiArKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGlj YXRpb24uc3FsICAgICAgICB8IDE0MCArKysrCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MjlfY29sdW1uX2xpc3QucGwgIHwgODM2ICsrKysrKysrKysrKysrKysrKysrCiAyNCBmaWxl cyBjaGFuZ2VkLCAyNjI5IGluc2VydGlvbnMoKyksIDc3IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5w bAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9z Z21sL2NhdGFsb2dzLnNnbWwKaW5kZXggODM5ODdhOTkwNDUuLjJiNjFmNDJiNzFkIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y2F0YWxvZ3Muc2dtbApAQCAtNjI2Myw2ICs2MjYzLDE5IEBAIFNDUkFNLVNIQS0yNTYkPHJl cGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxh Y2VhYmxlPiZsCiAgICAgICAgUmVmZXJlbmNlIHRvIHNjaGVtYQogICAgICAgPC9wYXJhPjwv ZW50cnk+CiAgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0i Y2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgor ICAgICAgIDxzdHJ1Y3RmaWVsZD5wcmF0dHJzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50MnZl Y3RvcjwvdHlwZT4KKyAgICAgICAocmVmZXJlbmNlcyA8bGluayBsaW5rZW5kPSJjYXRhbG9n LXBnLWF0dHJpYnV0ZSI+PHN0cnVjdG5hbWU+cGdfYXR0cmlidXRlPC9zdHJ1Y3RuYW1lPjwv bGluaz4uPHN0cnVjdGZpZWxkPmF0dG51bTwvc3RydWN0ZmllbGQ+KQorICAgICAgPC9wYXJh PgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBpcyBhbiBhcnJheSBvZiB2YWx1ZXMgdGhh dCBpbmRpY2F0ZXMgd2hpY2ggdGFibGUgY29sdW1ucyBhcmUKKyAgICAgICBwYXJ0IG9mIHRo ZSBwdWJsaWNhdGlvbi4gIEZvciBleGFtcGxlIGEgdmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9s aXRlcmFsPgorICAgICAgIHdvdWxkIG1lYW4gdGhhdCB0aGUgZmlyc3QgYW5kIHRoZSB0aGly ZCB0YWJsZSBjb2x1bW5zIGFyZSBwdWJsaXNoZWQuCisgICAgICAgQSBudWxsIHZhbHVlIGlu ZGljYXRlcyB0aGF0IGFsbCBjb2x1bW5zIGFyZSBwdWJsaXNoZWQuCisgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8 L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCAxYzVhYjAwODc5MS4uOTE1NDFjZDhjZjcg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9wcm90b2NvbC5zZ21sCkBAIC03MDA1LDcgKzcwMDUsOSBAQCBSZWxhdGlvbgogPC9s aXN0aXRlbT4KIDwvdmFybGlzdGVudHJ5PgogPC92YXJpYWJsZWxpc3Q+Ci0gICAgICAgIE5l eHQsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBwYXJ0IGFwcGVhcnMgZm9yIGVhY2ggY29sdW1u IChleGNlcHQgZ2VuZXJhdGVkIGNvbHVtbnMpOgorICAgICAgICBOZXh0LCB0aGUgZm9sbG93 aW5nIG1lc3NhZ2UgcGFydCBhcHBlYXJzIGZvciBlYWNoIGNvbHVtbiAoZXhjZXB0CisgICAg ICAgIGdlbmVyYXRlZCBjb2x1bW5zIGFuZCBvdGhlciBjb2x1bW5zIHRoYXQgZG9uJ3QgYXBw ZWFyIGluIHRoZSBjb2x1bW4KKyAgICAgICAgZmlsdGVyIGxpc3QsIGZvciB0YWJsZXMgdGhh dCBoYXZlIG9uZSk6CiA8dmFyaWFibGVsaXN0PgogPHZhcmxpc3RlbnRyeT4KIDx0ZXJtPgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCmluZGV4IDMyYjc1ZjZj NzhlLi5hYTY4MjdjOTc3YiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9w dWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRp b24uc2dtbApAQCAtMjUsMTIgKzI1LDEzIEBAIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gQUREIDxyZXBsYWNl CiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFt ZTwvcmVwbGFjZWFibGU+IFNFVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVi bGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uXQogQUxURVIgUFVCTElDQVRJ T04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBE Uk9QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9vYmplY3Q8 L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCAoIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxl PiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxl Pl0gWywgLi4uIF0gKQorQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBTFRFUiBUQUJMRSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFNFVCBDT0xVTU5T IHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ IFssIC4uLl0gKSB8IEFMTCB9CiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IE9XTkVSIFRPIHsgPHJlcGxhY2Vh YmxlPm5ld19vd25lcjwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9ST0xFIHwgQ1VSUkVOVF9V U0VSIHwgU0VTU0lPTl9VU0VSIH0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1FIFRPIDxyZXBsYWNl YWJsZT5uZXdfbmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+ IGlzIG9uZSBvZjo8L3BocmFzZT4KIAotICAgIFRBQkxFIFsgT05MWSBdIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyBX SEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4gKSBdIFssIC4uLiBdCisgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICgg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJs ZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXSBbLCAuLi4gXQogICAgIEFMTCBUQUJM RVMgSU4gU0NIRU1BIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9u YW1lPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiA8L3N5bm9w c2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CkBAIC02NCw2ICs2NSwxMiBAQCBBTFRFUiBQVUJM SUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFi bGU+IFJFTkFNRSBUTyA8cgogICAgY29tbWFuZCByZXRhaW4gdGhlaXIgcHJldmlvdXMgc2V0 dGluZ3MuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZSA8bGl0ZXJhbD5BTFRFUiBU QUJMRSAuLi4gU0VUIENPTFVNTlM8L2xpdGVyYWw+IHZhcmlhbnQgYWxsb3dzIGNoYW5naW5n CisgICB0aGUgc2V0IG9mIGNvbHVtbnMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIHB1Ymxp Y2F0aW9uLiAgSWYgYSBjb2x1bW4gbGlzdAorICAgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGlu Y2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAgPC9wYXJhPgorCiAgIDxw YXJhPgogICAgVGhlIHJlbWFpbmluZyB2YXJpYW50cyBjaGFuZ2UgdGhlIG93bmVyIGFuZCB0 aGUgbmFtZSBvZiB0aGUgcHVibGljYXRpb24uCiAgIDwvcGFyYT4KQEAgLTExMiw2ICsxMTks MTAgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgICAgIHNwZWNpZmllZCwgdGhl IHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQgdGFibGVzIChpZiBhbnkpIGFyZQogICAg ICAgYWZmZWN0ZWQuICBPcHRpb25hbGx5LCA8bGl0ZXJhbD4qPC9saXRlcmFsPiBjYW4gYmUg c3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZQogICAgICAgbmFtZSB0byBleHBsaWNpdGx5IGlu ZGljYXRlIHRoYXQgZGVzY2VuZGFudCB0YWJsZXMgYXJlIGluY2x1ZGVkLgorCisgICAgICBP cHRpb25hbGx5LCBhIGNvbHVtbiBsaXN0IGNhbiBiZSBzcGVjaWZpZWQuICBTZWUgPHhyZWYK KyAgICAgIGxpbmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbiIvPiBmb3IgZGV0YWlscy4K KwogICAgICAgSWYgdGhlIG9wdGlvbmFsIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1 c2UgaXMgc3BlY2lmaWVkLCByb3dzIGZvcgogICAgICAgd2hpY2ggdGhlIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KICAgICAgIGV2 YWx1YXRlcyB0byBmYWxzZSBvciBudWxsIHdpbGwgbm90IGJlIHB1Ymxpc2hlZC4gTm90ZSB0 aGF0IHBhcmVudGhlc2VzCkBAIC0xNzIsOSArMTgzLDE1IEBAIEFMVEVSIFBVQkxJQ0FUSU9O IG5vaW5zZXJ0IFNFVCAocHVibGlzaCA9ICd1cGRhdGUsIGRlbGV0ZScpOwogICA8L3BhcmE+ CiAKICAgPHBhcmE+Ci0gICBBZGQgc29tZSB0YWJsZXMgdG8gdGhlIHB1YmxpY2F0aW9uOgor ICAgQWRkIHRhYmxlcyB0byB0aGUgcHVibGljYXRpb246Cis8cHJvZ3JhbWxpc3Rpbmc+CitB TFRFUiBQVUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIEFERCBUQUJMRSB1c2VycyAodXNlcl9p ZCwgZmlyc3RuYW1lKSwgZGVwYXJ0bWVudHM7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4K KworICA8cGFyYT4KKyAgIENoYW5nZSB0aGUgc2V0IG9mIGNvbHVtbnMgcHVibGlzaGVkIGZv ciBhIHRhYmxlOgogPHByb2dyYW1saXN0aW5nPgotQUxURVIgUFVCTElDQVRJT04gbXlwdWJs aWNhdGlvbiBBREQgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzOworQUxURVIgUFVCTElDQVRJ T04gbXlwdWJsaWNhdGlvbiBBTFRFUiBUQUJMRSB1c2VycyBTRVQgQ09MVU1OUyAodXNlcl9p ZCwgZmlyc3RuYW1lLCBsYXN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KIAog ICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0 aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCmlu ZGV4IDQ5NzliOWI2NDZkLi5mYjJkMDEzMzkzYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBAIC0yOCw3ICsyOCw3IEBAIENSRUFURSBQVUJMSUNB VElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1Ymxp Y2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIAotICAg IFRBQkxFIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9u YW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCisgICAg VEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25h bWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ ICkgXSBbLCAuLi4gXQogICAgIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHsgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9uYW1lPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5U X1NDSEVNQSB9IFssIC4uLiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CkBA IC04Niw2ICs4NiwxMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICAgPGxpdGVyYWw+VFJVTkNB VEU8L2xpdGVyYWw+IGNvbW1hbmRzLgogICAgICA8L3BhcmE+CiAKKyAgICAgPHBhcmE+Cisg ICAgICBXaGVuIGEgY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBuYW1lZCBj b2x1bW5zIGFyZSByZXBsaWNhdGVkLgorICAgICAgSWYgbm8gY29sdW1uIGxpc3QgaXMgc3Bl Y2lmaWVkLCBhbGwgY29sdW1ucyBvZiB0aGUgdGFibGUgYXJlIHJlcGxpY2F0ZWQKKyAgICAg IHRocm91Z2ggdGhpcyBwdWJsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBjb2x1bW5zIGFkZGVk IGxhdGVyLiAgSWYgYSBjb2x1bW4KKyAgICAgIGxpc3QgaXMgc3BlY2lmaWVkLCBpdCBtdXN0 IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAgICAgPC9wYXJhPgor CiAgICAgIDxwYXJhPgogICAgICAgT25seSBwZXJzaXN0ZW50IGJhc2UgdGFibGVzIGFuZCBw YXJ0aXRpb25lZCB0YWJsZXMgY2FuIGJlIHBhcnQgb2YgYQogICAgICAgcHVibGljYXRpb24u ICBUZW1wb3JhcnkgdGFibGVzLCB1bmxvZ2dlZCB0YWJsZXMsIGZvcmVpZ24gdGFibGVzLApA QCAtMzI3LDYgKzMzNCwxNCBAQCBDUkVBVEUgUFVCTElDQVRJT04gcHJvZHVjdGlvbl9wdWJs aWNhdGlvbiBGT1IgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzLCBBTEwgVEFCTAogICAgPHN0 cnVjdG5hbWU+c2FsZXM8L3N0cnVjdG5hbWU+OgogPHByb2dyYW1saXN0aW5nPgogQ1JFQVRF IFBVQkxJQ0FUSU9OIHNhbGVzX3B1YmxpY2F0aW9uIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVN QSBtYXJrZXRpbmcsIHNhbGVzOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgPHBh cmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwgY2hhbmdl cyBmb3IgdGFibGUgPHN0cnVjdG5hbWU+dXNlcnM8L3N0cnVjdG5hbWU+LAorICAgYnV0IHJl cGxpY2F0ZXMgb25seSBjb2x1bW5zIDxzdHJ1Y3RuYW1lPnVzZXJfaWQ8L3N0cnVjdG5hbWU+ IGFuZAorICAgPHN0cnVjdG5hbWU+Zmlyc3RuYW1lPC9zdHJ1Y3RuYW1lPjoKKzxwcm9ncmFt bGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiB1c2Vyc19maWx0ZXJlZCBGT1IgVEFCTEUg dXNlcnMgKHVzZXJfaWQsIGZpcnN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4K ICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5k ZXggMjU5OThmYmIzOWIuLjg0MGYwYTBlYjI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5jCkBAIC00NSwxMiArNDUsMjIgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCitzdGF0aWMgdm9pZCBjaGVja19w dWJsaWNhdGlvbl9jb2x1bW5zKFB1YmxpY2F0aW9uICpwdWIsIFJlbGF0aW9uIHRhcmdldHJl bCwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpjb2x1bW5zKTsKK3N0YXRpYyB2b2lkIHB1Ymxp Y2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29s dW1ucywKKwkJCQkJCQkJCQkgIGludCAqbmF0dHMsIEF0dHJOdW1iZXIgKiphdHRycywKKwkJ CQkJCQkJCQkgIEJpdG1hcHNldCAqKmF0dHNldCk7CisKIC8qCi0gKiBDaGVjayBpZiByZWxh dGlvbiBjYW4gYmUgaW4gZ2l2ZW4gcHVibGljYXRpb24gYW5kIHRocm93cyBhcHByb3ByaWF0 ZQotICogZXJyb3IgaWYgbm90LgorICogQ2hlY2sgaWYgcmVsYXRpb24gY2FuIGJlIGluIGdp dmVuIHB1YmxpY2F0aW9uIGFuZCB0aGF0IHRoZSBjb2x1bW4KKyAqIGZpbHRlciBpcyBzZW5z aWJsZSwgYW5kIHRocm93cyBhcHByb3ByaWF0ZSBlcnJvciBpZiBub3QuCisgKgorICogY29s dW1ucyBpcyB0aGUgYml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBudW1iZXJzIGluY2x1ZGVkIGlu IHRoZSBjb2x1bW4gbGlzdCwKKyAqIG9yIE5VTEwgaWYgbm8gY29sdW1uIGxpc3Qgd2FzIHNw ZWNpZmllZCAoaS5lLiBhbGwgY29sdW1ucyBhcmUgcmVwbGljYXRlZCkKICAqLwogc3RhdGlj IHZvaWQKLWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRy ZWwpCitjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUHVibGljYXRpb24gKnB1Yiwg UmVsYXRpb24gdGFyZ2V0cmVsLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucykKIHsK IAkvKiBNdXN0IGJlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCWlmIChS ZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9O ICYmCkBAIC04Miw2ICs5MiwxMDMgQEAgY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9u KFJlbGF0aW9uIHRhcmdldHJlbCkKIAkJCQkgZXJybXNnKCJjYW5ub3QgYWRkIHJlbGF0aW9u IFwiJXNcIiB0byBwdWJsaWNhdGlvbiIsCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZSh0YXJnZXRyZWwpKSwKIAkJCQkgZXJyZGV0YWlsKCJUaGlzIG9wZXJhdGlvbiBpcyBub3Qg c3VwcG9ydGVkIGZvciB1bmxvZ2dlZCB0YWJsZXMuIikpKTsKKworCS8qCisJICogRW5zdXJl IHRoZSBjb2x1bW4gZmlsdGVyIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcmVwbGljYSBpZGVu dGl0eSBhbmQgdGhlCisJICogYWN0aW9ucyB0aGUgcHVibGljYXRpb24gaXMgcmVwbGljYXRp bmcuCisJICovCisJY2hlY2tfcHVibGljYXRpb25fY29sdW1ucyhwdWIsIHRhcmdldHJlbCwg Y29sdW1ucyk7Cit9CisKKy8qCisgKiBFbmZvcmNlIHRoYXQgdGhlIGNvbHVtbiBsaXN0IGNh biBvbmx5IGxlYXZlIG91dCBjb2x1bW5zIHRoYXQgZG9uJ3QKKyAqIG5lZWQgdG8gYmUgc2Vu dCBhcyBwYXJ0IG9mIHJlcGxpY2EgaWRlbnRpdHkuCisgKgorICogSWYgdGhlIHJlbGF0aW9u IHVzZXMgUkVQTElDQSBJREVOVElUWSBGVUxMLCB3ZSBjYW4ndCBhbGxvdyBhbnkgY29sdW1u CisgKiBsaXN0IGV2ZW4gaWYgaXQgbGlzdHMgYWxsIGNvbHVtbnMgb2YgdGhlIHJlbGF0aW9u IC0gaXQnZCBjYXVzZSBpc3N1ZXMKKyAqIGlmIGEgY29sdW1uIGlzIGFkZGVkIGxhdGVyLiBU aGUgY29sdW1uIHdvdWxkIGJlY29tZSBwYXJ0IG9mIGEgcmVwbGljYQorICogaWRlbnRpdHks IHZpb2xhdGluZyB0aGUgcnVsZSB0aGF0IHRoZSBjb2x1bW4gbGlzdCBpbmNsdWRlcyB0aGUg d2hvbGUKKyAqIHJlcGxpY2EgaWRlbnRpdHkuIFdlIGNvdWxkIGFkZCB0aGUgY29sdW1uIHRv IHRoZSBjb2x1bW4gbGlzdCB0b28sIG9mCisgKiBjb3Vyc2UsIGJ1dCBpdCBzZWVtcyByYXRo ZXIgdXNlbGVzIC0gdGhlIGNvbHVtbiBsaXN0IHdvdWxkIGFsd2F5cworICogaW5jbHVkZSBh bGwgY29sdW1ucywgaS5lLiBhcyBpZiB0aGVyZSdzIG5vIGNvbHVtbiBmaWx0ZXIuCisgKgor ICogSW4gb3RoZXIgY2FzZXMsIHRoZSBjb2x1bW5zIGluIHRoZSBSRVBMSUNBIElERU5USVRZ IGNhbm5vdCBiZSBsZWZ0IG91dCwKKyAqIGV4Y2VwdCB3aGVuIHRoZSBwdWJsaWNhdGlvbiBy ZXBsaWNhdGVzIG9ubHkgaW5zZXJ0cy4gU28gd2UgY2hlY2sgdGhhdAorICogZm9yIFVQREFU RS9ERUxFVEUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgaXMgYSBzdWJzZXQgb2YgdGhlIGNvbHVt biBmaWx0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wdWJsaWNhdGlvbl9jb2x1bW5z KFB1YmxpY2F0aW9uICpwdWIsIFJlbGF0aW9uIHRhcmdldHJlbCwgQml0bWFwc2V0ICpjb2x1 bW5zKQoreworCUxpc3QJICAgKnJlbGlkczsKKwlPaWQJCQlyZWxpZDsKKwlMaXN0Q2VsbCAg ICpsYzsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gY29sdW1uIGxpc3QsIHdlIHRyZWF0 IGl0IGFzIGlmIHRoZSBsaXN0IGNvbnRhaW5zIGFsbCBjb2x1bW5zLiBJbgorCSAqIHdoaWNo IGNhc2UgdGhlcmUncyBub3RoaW5nIHRvIGNoZWNrIHNvIHdlJ3JlIGRvbmUuCisJICovCisJ aWYgKCFjb2x1bW5zKQorCQlyZXR1cm47CisKKwlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQo dGFyZ2V0cmVsKTsKKwlyZWxpZHMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJlbGlkLCBOb0xv Y2ssIE5VTEwpOworCisJLyogV2Ugb25seSBjYXJlIGFib3V0IHJlcGxpY2EgaWRlbnRpdHkg b24gbGVhZiBwYXJ0aXRpb25zLiAqLworCWZvcmVhY2gobGMsIHJlbGlkcykKKwl7CisJCU9p ZAkJCXBhcnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKworCQkvKiBYWFggRG8gd2UgbmVlZCB0 byBsb2NrIHRoaXM/ICovCisJCVJlbGF0aW9uCXBhcnRyZWwgPSByZWxhdGlvbl9vcGVuKHBh cnRPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJLyoKKwkJICogaWdub3JlIG5vbi1sZWFm IHJlbGF0aW9ucworCQkgKgorCQkgKiBYWFggU2hvdWxkIHdlIGNvbnNpZGVyIHdoYXQgcmVw bGljYSBpZGVudGl0eSBpcyBzZXQgZm9yIHRoZSByZWxhdGlvbj8KKwkJICovCisJCWlmIChw YXJ0cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK KwkJCWdvdG8gY2xlYW51cDsKKworCQkvKiBXaXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBu byBjb2x1bW4gZmlsdGVyIGlzIGFsbG93ZWQuICovCisJCWlmIChwYXJ0cmVsLT5yZF9yZWwt PnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJ CQkJZXJybXNnKCJpbnZhbGlkIGNvbHVtbiBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9u IFwiJXNcIiIsCisJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwp KSwJLyogWFhYIG1heWJlIHJlcG9ydCB0aGUgcGFydGl0aW9uPyAqLworCQkJCQllcnJkZXRh aWwoIkNhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9ucyB3aXRoIFJFUExJ Q0EgSURFTlRJVFkgRlVMTC4iKSk7CisKKwkJLyogV2hlbiByZXBsaWNhdGluZyBVUERBVEUv REVMRVRFLCB0aGUgd2hvbGUgcmVwbGljYSBpZGVudGl0eSBoYXMgdG8gYmUgc2VudC4gKi8K KwkJaWYgKHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfHwgcHViLT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZSkKKwkJeworCQkJQml0bWFwc2V0ICAqaWRhdHRyczsKKwkJCWludAkJCXg7CisK KwkJCWlkYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChwYXJ0cmVsLAorCQkJ CQkJCQkJCQkJIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisKKwkJCS8qCisJ CQkgKiBBdHRudW1zIGluIHRoZSBiaXRtYXAgcmV0dXJuZWQgYnkgUmVsYXRpb25HZXRJbmRl eEF0dHJCaXRtYXAgYXJlCisJCQkgKiBvZmZzZXQgKHRvIGhhbmRsZSBzeXN0ZW0gY29sdW1u cyB0aGUgdXN1YWwgd2F5KSwgd2hpbGUgY29sdW1uIGZpbHRlcgorCQkJICogZG9lcyBub3Qg dXNlIG9mZnNldCwgc28gd2UgY2FuJ3QgZG8gYm1zX2lzX3N1YnNldCgpLiBJbnN0ZWFkLCB3 ZSBoYXZlCisJCQkgKiB0byBsb29wIG92ZXIgdGhlIGlkYXR0cnMgYW5kIGNoZWNrIGFsbCBv ZiB0aGVtIGFyZSBpbiB0aGUgZmlsdGVyLgorCQkJICovCisJCQl4ID0gLTE7CisJCQl3aGls ZSAoKHggPSBibXNfbmV4dF9tZW1iZXIoaWRhdHRycywgeCkpID49IDApCisJCQl7CisJCQkJ aWYgKCFibXNfaXNfbWVtYmVyKHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVt YmVyLCBjb2x1bW5zKSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQllcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJCQllcnJtc2coImludmFs aWQgY29sdW1uIGxpc3QgZm9yIHB1Ymxpc2hpbmcgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJ CQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSksCS8qIFhYWCBtYXli ZSByZXBvcnQgdGhlIHBhcnRpdGlvbj8gKi8KKwkJCQkJCQllcnJkZXRhaWwoIkFsbCBjb2x1 bW5zIGluIFJFUExJQ0EgSURFTlRJVFkgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBjb2x1bW4g bGlzdC4iKSk7CisJCQl9CisKKwkJCWJtc19mcmVlKGlkYXR0cnMpOworCQl9CisKK2NsZWFu dXA6CisJCXJlbGF0aW9uX2Nsb3NlKHBhcnRyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQog fQogCiAvKgpAQCAtMzI4LDYgKzQzNSw5IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihP aWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCU9pZAkJCXJlbGlkID0gUmVs YXRpb25HZXRSZWxpZCh0YXJnZXRyZWwpOwogCU9pZAkJCXB1YnJlbG9pZDsKIAlQdWJsaWNh dGlvbiAqcHViID0gR2V0UHVibGljYXRpb24ocHViaWQpOworCUJpdG1hcHNldCAgKmF0dHNl dCA9IE5VTEw7CisJQXR0ck51bWJlciAqYXR0YXJyYXk7CisJaW50CQkJbmF0dHMgPSAwOwog CU9iamVjdEFkZHJlc3MgbXlzZWxmLAogCQkJCXJlZmVyZW5jZWQ7CiAJTGlzdAkgICAqcmVs aWRzID0gTklMOwpAQCAtMzUzLDcgKzQ2MywxOCBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRp b24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAkJCQkJCVJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbCksIHB1Yi0+bmFtZSkpKTsKIAl9CiAKLQljaGVj a19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24odGFyZ2V0cmVsKTsKKwkvKgorCSAqIFRyYW5z bGF0ZSBjb2x1bW4gbmFtZXMgdG8gYXR0bnVtcyBhbmQgY2hlY2sgdGhlIGNvbHVtbiBsaXN0 IGlzIHZhbGlkLgorCSAqIFdlIGJ1aWxkIGJvdGggYSBiaXRtYXAgYW5kIGFycmF5IG9mIGF0 dG51bXMgLSBhcnJheSBpcyBzdG9yZWQgaW4gdGhlCisJICogY2F0YWxvZywgd2hpbGUgdGhl IGJpdG1hcCBpcyBtb3JlIGNvbnZlbmllbnQgZm9yIGNoZWNraW5nLgorCSAqLworCXB1Ymxp Y2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKHByaS0+cmVsYXRpb24sIHByaS0+Y29sdW1ucywK KwkJCQkJCQkJICAmbmF0dHMsICZhdHRhcnJheSwgJmF0dHNldCk7CisKKwljaGVja19wdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24ocHViLCB0YXJnZXRyZWwsIGF0dHNldCk7CisKKwkvKiBX b24ndCBuZWVkIHRoZSBiaXRtYXBzZXQgYW55bW9yZS4gKi8KKwlibXNfZnJlZShhdHRzZXQp OwogCiAJLyogRm9ybSBhIHR1cGxlLiAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2 YWx1ZXMpKTsKQEAgLTM2Nyw2ICs0ODgsMTYgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9u KE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJdmFsdWVzW0FudW1fcGdf cHVibGljYXRpb25fcmVsX3BycmVsaWQgLSAxXSA9CiAJCU9iamVjdElkR2V0RGF0dW0ocmVs aWQpOwogCisJaWYgKHByaS0+Y29sdW1ucykKKwl7CisJCWludDJ2ZWN0b3IgKnByYXR0cnM7 CisKKwkJcHJhdHRycyA9IGJ1aWxkaW50MnZlY3RvcihhdHRhcnJheSwgbmF0dHMpOworCQl2 YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0gUG9pbnRlckdl dERhdHVtKHByYXR0cnMpOworCX0KKwllbHNlCisJCW51bGxzW0FudW1fcGdfcHVibGljYXRp b25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKIAkvKiBBZGQgcXVhbGlmaWNhdGlvbnMs IGlmIGF2YWlsYWJsZSAqLwogCWlmIChwcmktPndoZXJlQ2xhdXNlICE9IE5VTEwpCiAJCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnF1YWwgLSAxXSA9IENTdHJpbmdHZXRU ZXh0RGF0dW0obm9kZVRvU3RyaW5nKHByaS0+d2hlcmVDbGF1c2UpKTsKQEAgLTM4Miw2ICs1 MTMsMTQgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCiAJLyogUmVnaXN0ZXIgZGVwZW5kZW5jaWVzIGFzIG5lZWRlZCAq LwogCU9iamVjdEFkZHJlc3NTZXQobXlzZWxmLCBQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQs IHB1YnJlbG9pZCk7CiAKKwkvKiBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgY29sdW1ucywgaWYg YW55IGFyZSBsaXN0ZWQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJ eworCQlPYmplY3RBZGRyZXNzU3ViU2V0KHJlZmVyZW5jZWQsIFJlbGF0aW9uUmVsYXRpb25J ZCwgcmVsaWQsIGF0dGFycmF5W2ldKTsKKwkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYs ICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCX0KKwlwZnJlZShhdHRhcnJheSk7 CisKIAkvKiBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgcHVibGljYXRpb24gKi8KIAlPYmplY3RB ZGRyZXNzU2V0KHJlZmVyZW5jZWQsIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHViaWQpOwog CXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9B VVRPKTsKQEAgLTQxNSw2ICs1NTQsMTY2IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihP aWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCXJldHVybiBteXNlbGY7CiB9 CiAKKy8qCisgKiBVcGRhdGUgdGhlIGNvbHVtbiBsaXN0IGZvciBhIHJlbGF0aW9uIGluIGEg cHVibGljYXRpb24uCisgKi8KK3ZvaWQKK3B1YmxpY2F0aW9uX3NldF90YWJsZV9jb2x1bW5z KFJlbGF0aW9uIHB1YnJlbCwgSGVhcFR1cGxlIHB1YnJlbHR1cCwKKwkJCQkJCQkgIFJlbGF0 aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucykKK3sKKwlCaXRtYXBzZXQgICphdHRzZXQ7 CisJQXR0ck51bWJlciAqYXR0YXJyYXk7CisJSGVhcFR1cGxlCWNvcHl0dXA7CisJaW50CQkJ bmF0dHM7CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKKwlib29s CQlyZXBsYWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl9yZWxdOworCURhdHVtCQl2YWx1ZXNb TmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKKworCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVv Zih2YWx1ZXMpKTsKKwltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKKwlt ZW1zZXQocmVwbGFjZXMsIGZhbHNlLCBzaXplb2YocmVwbGFjZXMpKTsKKworCXJlcGxhY2Vz W0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKKwlkZWxl dGVEZXBlbmRlbmN5UmVjb3Jkc0ZvckNsYXNzKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCSgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChwdWJyZWx0dXAp KS0+b2lkLAorCQkJCQkJCQkJUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJREVQRU5E RU5DWV9BVVRPKTsKKworCWlmIChjb2x1bW5zID09IE5VTEwpCisJeworCQludWxsc1tBbnVt X3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCX0KKwllbHNlCisJ eworCQlPYmplY3RBZGRyZXNzIAlteXNlbGYsCisJCQkJCQlyZWZlcmVuY2VkOworCQlpbnQy dmVjdG9yCSAgICpwcmF0dHJzOworCQlQdWJsaWNhdGlvbgkgICAqcHViOworCisJCXB1YiA9 IEdldFB1YmxpY2F0aW9uKCgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChw dWJyZWx0dXApKS0+cHJwdWJpZCk7CisKKwkJcHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVt bnModGFyZ2V0cmVsLCBjb2x1bW5zLAorCQkJCQkJCQkJICAmbmF0dHMsICZhdHRhcnJheSwg JmF0dHNldCk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBjb2x1bW4gbGlzdCBjaGVj a3Mgb3V0LgorCQkgKgorCQkgKiBYWFggdGhpcyBzaG91bGQgb2NjdXIgYXQgY2FsbGVyIGlu IHB1YmxpY2F0aW9uY21kcy5jLCBub3QgaGVyZS4KKwkJICogWFhYIEhvdyBjb21lIHRoaXMg ZG9lcyBub3QgY2hlY2sgcmVwbGljYSBpZGVudGl0eT8gU2hvdWxkIHRoaXMgcHJldmVudAor CQkgKiByZXBsaWNhIGlkZW50aXR5IGZ1bGwsIGp1c3QgbGlrZSBjaGVja19wdWJsaWNhdGlv bl9hZGRfcmVsYXRpb24/CisJCSAqLworCQljaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zKHB1 YiwgdGFyZ2V0cmVsLCBhdHRzZXQpOworCQlibXNfZnJlZShhdHRzZXQpOworCisJCS8qIFhY WCAicHViIiBpcyBsZWFrZWQgaGVyZSAqLworCisJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0 b3IoYXR0YXJyYXksIG5hdHRzKTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVs X3ByYXR0cnMgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKworCQkvKiBBZGQg ZGVwZW5kZW5jaWVzIG9uIHRoZSBuZXcgbGlzdCBvZiBjb2x1bW5zICovCisJCU9iamVjdEFk ZHJlc3NTZXQobXlzZWxmLCBQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsCisJCQkJCQkgKChG b3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHB1YnJlbHR1cCkpLT5vaWQpOwor CQlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJCXsKKwkJCU9iamVjdEFkZHJl c3NTdWJTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQlSZWxh dGlvbkdldFJlbGlkKHRhcmdldHJlbCksIGF0dGFycmF5W2ldKTsKKwkJCXJlY29yZERlcGVu ZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9BVVRPKTsKKwkJfQor CX0KKworCWNvcHl0dXAgPSBoZWFwX21vZGlmeV90dXBsZShwdWJyZWx0dXAsIFJlbGF0aW9u R2V0RGVzY3IocHVicmVsKSwKKwkJCQkJCQkJdmFsdWVzLCBudWxscywgcmVwbGFjZXMpOwor CisJQ2F0YWxvZ1R1cGxlVXBkYXRlKHB1YnJlbCwgJnB1YnJlbHR1cC0+dF9zZWxmLCBjb3B5 dHVwKTsKKworCWhlYXBfZnJlZXR1cGxlKGNvcHl0dXApOworfQorCisvKgorICogcXNvcnQg Y29tcGFyYXRvciBmb3IgYXR0bnVtcworICoKKyAqIFhYWCBXZSBhbHJlYWR5IGhhdmUgY29t cGFyZV9pbnQxNiwgc28gbWF5YmUgbGV0J3Mgc2hhcmUgdGhhdCwgc29tZWhvdz8KKyAqLwor c3RhdGljIGludAorY29tcGFyZV9pbnQxNihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi KQoreworCWludAkJCWF2ID0gKihjb25zdCBpbnQxNiAqKSBhOworCWludAkJCWJ2ID0gKihj b25zdCBpbnQxNiAqKSBiOworCisJLyogdGhpcyBjYW4ndCBvdmVyZmxvdyBpZiBpbnQgaXMg d2lkZXIgdGhhbiBpbnQxNiAqLworCXJldHVybiAoYXYgLSBidik7Cit9CisKKy8qCisgKiBU cmFuc2xhdGUgYSBsaXN0IG9mIGNvbHVtbiBuYW1lcyB0byBhbiBhcnJheSBvZiBhdHRyaWJ1 dGUgbnVtYmVycworICogYW5kIGEgQml0bWFwc2V0IHdpdGggdGhlbTsgdmVyaWZ5IHRoYXQg ZWFjaCBhdHRyaWJ1dGUgaXMgYXBwcm9wcmlhdGUKKyAqIHRvIGhhdmUgaW4gYSBwdWJsaWNh dGlvbiBjb2x1bW4gbGlzdCAobm8gc3lzdGVtIG9yIGdlbmVyYXRlZCBhdHRyaWJ1dGVzLAor ICogbm8gZHVwbGljYXRlcykuICBBZGRpdGlvbmFsIGNoZWNrcyB3aXRoIHJlcGxpY2EgaWRl bnRpdHkgYXJlIGRvbmUgbGF0ZXI7CisgKiBzZWUgY2hlY2tfcHVibGljYXRpb25fY29sdW1u cy4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGF0dHJpYnV0ZSBudW1iZXJzIGFyZSAqbm90KiBv ZmZzZXQgYnkKKyAqIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7IHN5c3Rl bSBjb2x1bW5zIGFyZSBmb3JiaWRkZW4gc28gdGhpcworICogaXMgb2theS4KKyAqCisgKiBY WFggU2hvdWxkIHRoaXMgZGV0ZWN0IGR1cGxpY2F0ZSBjb2x1bW5zPworICovCitzdGF0aWMg dm9pZAorcHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnMoUmVsYXRpb24gdGFyZ2V0cmVs LCBMaXN0ICpjb2x1bW5zLCBpbnQgKm5hdHRzLAorCQkJCQkJCSAgQXR0ck51bWJlciAqKmF0 dHJzLCBCaXRtYXBzZXQgKiphdHRzZXQpCit7CisJQXR0ck51bWJlciAqYXR0YXJyYXk7CisJ Qml0bWFwc2V0ICAqc2V0ID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQluID0g MDsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IodGFyZ2V0cmVsKTsK KworCS8qCisJICogVHJhbnNsYXRlIGxpc3Qgb2YgY29sdW1ucyB0byBhdHRudW1zLiBXZSBw cm9oaWJpdCBzeXN0ZW0gYXR0cmlidXRlcyBhbmQKKwkgKiBtYWtlIHN1cmUgdGhlcmUgYXJl IG5vIGR1cGxpY2F0ZSBjb2x1bW5zLgorCSAqLworCWF0dGFycmF5ID0gcGFsbG9jKHNpemVv ZihBdHRyTnVtYmVyKSAqIGxpc3RfbGVuZ3RoKGNvbHVtbnMpKTsKKwlmb3JlYWNoKGxjLCBj b2x1bW5zKQorCXsKKwkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChsZmlyc3QobGMpKTsK KwkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQodGFy Z2V0cmVsKSwgY29sbmFtZSk7CisKKwkJaWYgKGF0dG51bSA9PSBJbnZhbGlkQXR0ck51bWJl cikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf Q09MVU1OKSwKKwkJCQkJZXJybXNnKCJjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNc IiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkgICBjb2xuYW1lLCBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZSh0YXJnZXRyZWwpKSk7CisKKwkJaWYgKCFBdHRyTnVtYmVySXNGb3JVc2VyRGVm aW5lZEF0dHIoYXR0bnVtKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCQllcnJtc2coImNhbm5vdCBy ZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiBcIiVzXCIgaW4gcHVibGljYXRpb24gY29sdW1uIGxp c3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCWlmIChUdXBsZURlc2NBdHRyKHR1cGRl c2MsIGF0dG51bSAtIDEpLT5hdHRnZW5lcmF0ZWQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJZXJy bXNnKCJjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBjb2x1bW4gXCIlc1wiIGluIHB1Ymxp Y2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAgIGNvbG5hbWUpKTsKKworCQlpZiAoYm1z X2lzX21lbWJlcihhdHRudW0sIHNldCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJj b2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJCQkJCWVycm1zZygiZHVwbGljYXRl IGNvbHVtbiBcIiVzXCIgaW4gcHVibGljYXRpb24gY29sdW1uIGxpc3QiLAorCQkJCQkJICAg Y29sbmFtZSkpOworCisJCXNldCA9IGJtc19hZGRfbWVtYmVyKHNldCwgYXR0bnVtKTsKKwkJ YXR0YXJyYXlbbisrXSA9IGF0dG51bTsKKwl9CisKKwkvKiBCZSB0aWR5LCBzbyB0aGF0IHRo ZSBjYXRhbG9nIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5cyBzb3J0ZWQgKi8KKwlxc29ydChh dHRhcnJheSwgbiwgc2l6ZW9mKEF0dHJOdW1iZXIpLCBjb21wYXJlX2ludDE2KTsKKworCSpu YXR0cyA9IG47CisJKmF0dHJzID0gYXR0YXJyYXk7CisJKmF0dHNldCA9IHNldDsKK30KKwog LyoKICAqIEluc2VydCBuZXcgcHVibGljYXRpb24gLyBzY2hlbWEgbWFwcGluZy4KICAqLwpA QCAtNTIyLDYgKzgyMSw5NiBAQCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQp CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIEdldHMgYSBsaXN0IG9mIE9JRHMgb2Yg YWxsIHBhcnRpYWwtY29sdW1uIHB1YmxpY2F0aW9ucyBvZiB0aGUgZ2l2ZW4KKyAqIHJlbGF0 aW9uLCB0aGF0IGlzLCB0aG9zZSB0aGF0IHNwZWNpZnkgYSBjb2x1bW4gbGlzdC4KKyAqLwor TGlzdCAqCitHZXRSZWxhdGlvbkNvbHVtblBhcnRpYWxQdWJsaWNhdGlvbnMoT2lkIHJlbGlk KQoreworCUNhdENMaXN0ICAgKnB1YnJlbGxpc3Q7CisJTGlzdAkgICAqcHVicyA9IE5JTDsK KworCXB1YnJlbGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKFBVQkxJQ0FUSU9OUkVMTUFQ LAorCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlmb3IgKGludCBpID0g MDsgaSA8IHB1YnJlbGxpc3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVhcFR1cGxlCXR1 cCA9ICZwdWJyZWxsaXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKKwkJYm9vbAkJaXNudWxsOwor CisJCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJT05SRUxNQVAsIHR1cCwKKwkJ CQkJCQkgICBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLAorCQkJCQkJCSAgICZp c251bGwpOworCQlpZiAoaXNudWxsKQorCQkJY29udGludWU7CisKKwkJcHVicyA9IGxhcHBl bmRfb2lkKHB1YnMsCisJCQkJCQkgICAoKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRT VFJVQ1QodHVwKSktPnBycHViaWQpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZUxpc3QocHVi cmVsbGlzdCk7CisKKwlyZXR1cm4gcHViczsKK30KKworLyogRklYTUUgbWF5YmUgdGhlc2Ug dHdvIHJvdXRpbmVzIHNob3VsZCBiZSBpbiBsc3lzY2FjaGUuYyAqLworLyogUmV0dXJuIHRo ZSBzZXQgb2YgYWN0aW9ucyB0aGF0IHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBpbmNsdWRlcyAq Lwordm9pZAorR2V0QWN0aW9uc0luUHVibGljYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlv bkFjdGlvbnMgKmFjdGlvbnMpCit7CisJSGVhcFR1cGxlCXB1YjsKKwlGb3JtX3BnX3B1Ymxp Y2F0aW9uCXB1YkZvcm07CisKKwlwdWIgPSBTZWFyY2hTeXNDYWNoZTEoUFVCTElDQVRJT05P SUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQocHViKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHB1YmxpY2F0aW9uICV1IiwgcHViaWQpOworCisJcHViRm9ybSA9IChGb3JtX3BnX3B1Ymxp Y2F0aW9uKSBHRVRTVFJVQ1QocHViKTsKKwlhY3Rpb25zLT5wdWJpbnNlcnQgPSBwdWJGb3Jt LT5wdWJpbnNlcnQ7CisJYWN0aW9ucy0+cHVidXBkYXRlID0gcHViRm9ybS0+cHVidXBkYXRl OworCWFjdGlvbnMtPnB1YmRlbGV0ZSA9IHB1YkZvcm0tPnB1YmRlbGV0ZTsKKwlhY3Rpb25z LT5wdWJ0cnVuY2F0ZSA9IHB1YkZvcm0tPnB1YnRydW5jYXRlOworCisJUmVsZWFzZVN5c0Nh Y2hlKHB1Yik7Cit9CisKKy8qCisgKiBGb3IgYSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9u IHRoYXQgaXMga25vd24gdG8gaGF2ZSBhIG5vbi1udWxsIGNvbHVtbgorICogbGlzdCwgcmV0 dXJuIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZSBudW1iZXJzIHRoYXQgYXJlIGluIGl0LgorICov CitMaXN0ICoKK0dldFJlbGF0aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJlbGlk LCBPaWQgcHViaWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwlEYXR1bQkJYWRhdHVtOworCWJv b2wJCWlzbnVsbDsKKwlBcnJheVR5cGUgICphcnI7CisJaW50CQkJbmVsZW1zOworCWludDE2 CSAgICplbGVtczsKKwlMaXN0CSAgICphdHRub3MgPSBOSUw7CisKKwl0dXAgPSBTZWFyY2hT eXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o cmVsaWQpLAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciByZWwgJXUgb2YgcHVibGljYXRpb24gJXUiLCByZWxpZCwgcHViaWQpOworCWFkYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgdHVwLAorCQkJCQkJCSBB bnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLCAmaXNudWxsKTsKKwlpZiAoaXNudWxs KQorCQllbG9nKEVSUk9SLCAiZm91bmQgdW5leHBlY3RlZCBudWxsIGluIHBnX3B1YmxpY2F0 aW9uX3JlbC5wcmF0dHJzIik7CisJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7 CisJbmVsZW1zID0gQVJSX0RJTVMoYXJyKVswXTsKKwllbGVtcyA9IChpbnQxNiAqKSBBUlJf REFUQV9QVFIoYXJyKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJ CWF0dG5vcyA9IGxhcHBlbmRfb2lkKGF0dG5vcywgZWxlbXNbaV0pOworCisJUmVsZWFzZVN5 c0NhY2hlKHR1cCk7CisKKwlyZXR1cm4gYXR0bm9zOworfQorCiAvKgogICogR2V0cyBsaXN0 IG9mIHJlbGF0aW9uIG9pZHMgZm9yIGEgcHVibGljYXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAxNmI4NjYxYTFiNy4uZDVmYWQ2YzBm NzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC02MDgs NiArNjA4LDQ1IEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNv bnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCX0KIH0KIAorCisvKgorICogVHJhbnNmb3JtIHRo ZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdHMgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxh dGlvbnMKKyAqIGluIHRoZSBsaXN0LgorICoKKyAqIFhYWCBUaGUgbmFtZSBpcyBhIGJpdCBt aXNsZWFkaW5nLCBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB0cmFuc2Zvcm0KKyAqIGFueXRo aW5nIGhlcmUgLSB3ZSBtZXJlbHkgY2hlY2sgdGhlIGNvbHVtbiBsaXN0IGlzIGNvbXBhdGli bGUgd2l0aCB0aGUKKyAqIGRlZmluaXRpb24gb2YgdGhlIHB1YmxpY2F0aW9uICh3aXRoIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PWZhbHNlKQorICogd2Ugb25seSBhbGxvdyBmaWx0 ZXJzIG9uIHRoZSBsZWFmIHJlbGF0aW9ucy4gU28gbWF5YmUgcmVuYW1lIGl0PworICovCitz dGF0aWMgdm9pZAorVHJhbnNmb3JtUHViQ29sdW1uTGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkgICBib29sIHB1YnZpYXJvb3QpCit7CisJTGlz dENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZXMpCisJeworCQlQdWJsaWNhdGlv blJlbEluZm8gKnByaSA9IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZpcnN0KGxjKTsKKwor CQlpZiAocHJpLT5jb2x1bW5zID09IE5JTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAq IElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0IHB1Ymxpc2ggY2hhbmdlcyB2aWEgdGhlIHJv b3QgcGFydGl0aW9uZWQKKwkJICogdGFibGUsIHRoZSBwYXJ0aXRpb24ncyBjb2x1bW4gZmls dGVyIHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKKwkJICogdGhlIGNvbHVtbiBs aXN0IG9uIHBhcnRpdGlvbmVkIHRhYmxlIGluIHRoaXMgY2FzZS4KKwkJICovCisJCWlmICgh cHVidmlhcm9vdCAmJgorCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi Y2Fubm90IHVzZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdCBmb3IgcmVsYXRpb24gXCIlc1wi IiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwcmktPnJlbGF0aW9uKSksCisJ CQkJCSBlcnJkZXRhaWwoImNvbHVtbiBsaXN0IGNhbm5vdCBiZSB1c2VkIGZvciBhIHBhcnRp dGlvbmVkIHRhYmxlIHdoZW4gJXMgaXMgZmFsc2UuIiwKKwkJCQkJCQkgICAicHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QiKSkpOworCX0KK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVi bGljYXRpb24uCiAgKi8KQEAgLTcyNCw2ICs3NjMsOSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJCVRy YW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJ CQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKKwkJCVRyYW5zZm9ybVB1 YkNvbHVtbkxpc3QocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSAgIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwogCQkJUHVibGljYXRpb25BZGRUYWJsZXMo cHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKIAkJCUNsb3NlVGFibGVMaXN0KHJlbHMpOwog CQl9CkBAIC03NTQsNiArNzk2LDQ2IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCXJldHVybiBteXNlbGY7 CiB9CiAKKy8qCisgKiBDaGFuZ2UgdGhlIGNvbHVtbiBsaXN0IG9mIGEgcmVsYXRpb24gaW4g YSBwdWJsaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorUHVibGljYXRpb25TZXRDb2x1bW5z KEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAorCQkJCQkgIEZvcm1fcGdfcHVibGljYXRp b24gcHViZm9ybSwgUHVibGljYXRpb25UYWJsZSAqdGFibGUpCit7CisJUmVsYXRpb24JcmVs LAorCQkJCXVyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlPYmplY3RBZGRyZXNzIG9iaiwKKwkJ CQlzZWNvbmRhcnk7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0aW9uUmVsUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdXJlbCA9IHRhYmxlX29wZW5ydih0YWJsZS0+ cmVsYXRpb24sIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwl0dXAgPSBTZWFyY2hT eXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25HZXRSZWxpZCh1cmVsKSksCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHVi Zm9ybS0+b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJZXJybXNnKCJyZWxhdGlvbiBcIiVzXCIgaXMgbm90IGFscmVhZHkgaW4g cHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJICAgdGFibGUtPnJlbGF0aW9uLT5yZWxuYW1l LAorCQkJCQkgICBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSk7CisKKwlwdWJsaWNhdGlv bl9zZXRfdGFibGVfY29sdW1ucyhyZWwsIHR1cCwgdXJlbCwgdGFibGUtPmNvbHVtbnMpOwor CisJT2JqZWN0QWRkcmVzc1NldChvYmosIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJCQkJ ICgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApKS0+b2lkKTsKKwlP YmplY3RBZGRyZXNzU2V0KHNlY29uZGFyeSwgUmVsYXRpb25SZWxhdGlvbklkLCBSZWxhdGlv bkdldFJlbGlkKHVyZWwpKTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChv YmosIHNlY29uZGFyeSwgKE5vZGUgKikgc3RtdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVw KTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xv c2UodXJlbCwgTm9Mb2NrKTsKKworCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2soUHVibGlj YXRpb25SZWxhdGlvbklkLCBwdWJmb3JtLT5vaWQsIDApOworfQorCiAvKgogICogQ2hhbmdl IG9wdGlvbnMgb2YgYSBwdWJsaWNhdGlvbi4KICAqLwpAQCAtODM4LDYgKzkyMCwxNiBAQCBB bHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGlj YXRpb25TdG10ICpzdG10LAogCQl9CiAJfQogCisJLyoKKwkgKiBGSVhNRSBjaGVjayBwdWJh Y3Rpb25zIHZzLiByZXBsaWNhIGlkZW50aXR5LCB0byBlbnN1cmUgdGhlIHJlcGxpY2EKKwkg KiBpZGVudGl0eSBpcyBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIGZpbHRlci4gT25seSBkbyB0 aGlzIGZvciB1cGRhdGUKKwkgKiBhbmQgZGVsZXRlIHB1YmxpY2F0aW9ucy4gU2VlIGNoZWNr X3B1YmxpY2F0aW9uX2NvbHVtbnMuCisJICoKKwkgKiBYWFggVGhpcyBpcyBuZWVkZWQgYmVj YXVzZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBtYXkgY2hhbmdlLAorCSAqIGluIHdo aWNoIGNhc2UgdGhlIHJvdyBmaWx0ZXJzIG1heSBiZSBpbnZhbGlkIChlLmcuIHdpdGggcHZw cj1mYWxzZQorCSAqIHRoZXJlIG11c3QgYmUgbm8gZmlsdGVyIG9uIHBhcnRpdGlvbmVkIHRh YmxlcykuCisJICovCisKIAkvKiBFdmVyeXRoaW5nIG9rLCBmb3JtIGEgbmV3IHR1cGxlLiAq LwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMs IGZhbHNlLCBzaXplb2YobnVsbHMpKTsKQEAgLTk3NSwxMCArMTA2NywyMCBAQCBBbHRlclB1 YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUg dHVwLAogCiAJCVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBxdWVyeVN0cmluZywg cHViZm9ybS0+cHVidmlhcm9vdCk7CiAKKwkJVHJhbnNmb3JtUHViQ29sdW1uTGlzdChyZWxz LCBxdWVyeVN0cmluZywgcHViZm9ybS0+cHVidmlhcm9vdCk7CisKIAkJUHVibGljYXRpb25B ZGRUYWJsZXMocHViaWQsIHJlbHMsIGZhbHNlLCBzdG10KTsKIAl9CiAJZWxzZSBpZiAoc3Rt dC0+YWN0aW9uID09IEFQX0Ryb3BPYmplY3RzKQogCQlQdWJsaWNhdGlvbkRyb3BUYWJsZXMo cHViaWQsIHJlbHMsIGZhbHNlKTsKKwllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gQVBfU2V0 Q29sdW1ucykKKwl7CisJCUFzc2VydChzY2hlbWFpZGxpc3QgPT0gTklMKTsKKwkJQXNzZXJ0 KGxpc3RfbGVuZ3RoKHRhYmxlcykgPT0gMSk7CisKKwkJUHVibGljYXRpb25TZXRDb2x1bW5z KHN0bXQsIHB1YmZvcm0sCisJCQkJCQkJICBsaW5pdGlhbF9ub2RlKFB1YmxpY2F0aW9uVGFi bGUsIHRhYmxlcykpOworCX0KIAllbHNlCQkJCQkJLyogQVBfU2V0T2JqZWN0cyAqLwogCXsK IAkJTGlzdAkgICAqb2xkcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViaWQs CkBAIC05OTEsNiArMTA5Myw4IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAKIAkJVHJhbnNmb3JtUHViV2hl cmVDbGF1c2VzKHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5wdWJ2aWFyb290KTsKIAor CQlUcmFuc2Zvcm1QdWJDb2x1bW5MaXN0KHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5w dWJ2aWFyb290KTsKKwogCQkvKgogCQkgKiBUbyByZWNyZWF0ZSB0aGUgcmVsYXRpb24gbGlz dCBmb3IgdGhlIHB1YmxpY2F0aW9uLCBsb29rIGZvcgogCQkgKiBleGlzdGluZyByZWxhdGlv bnMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSBkcm9wcGVkLgpAQCAtMTAwMiwzMiArMTEwNiw4 NSBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10 LCBIZWFwVHVwbGUgdHVwLAogCQkJUHVibGljYXRpb25SZWxJbmZvICpvbGRyZWw7CiAJCQli b29sCQlmb3VuZCA9IGZhbHNlOwogCQkJSGVhcFR1cGxlCXJmdHVwbGU7Ci0JCQlib29sCQly ZmlzbnVsbCA9IHRydWU7CiAJCQlOb2RlCSAgICpvbGRyZWx3aGVyZWNsYXVzZSA9IE5VTEw7 CisJCQlCaXRtYXBzZXQgICpvbGRjb2x1bW5zID0gTlVMTDsKIAogCQkJLyogbG9vayB1cCB0 aGUgY2FjaGUgZm9yIHRoZSBvbGQgcmVsbWFwICovCiAJCQlyZnR1cGxlID0gU2VhcmNoU3lz Q2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAogCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVt KG9sZHJlbGlkKSwKIAkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOwogCisJ CQkvKgorCQkJICogU2VlIGlmIHRoZSBleGlzdGluZyByZWxhdGlvbiBjdXJyZW50bHkgaGFz IGEgV0hFUkUgY2xhdXNlIG9yIGEKKwkJCSAqIGNvbHVtbiBmaWx0ZXIuIFdlIG5lZWQgdG8g Y29tcGFyZSB0aG9zZSB0b28uCisJCQkgKi8KIAkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHJm dHVwbGUpKQogCQkJeworCQkJCWJvb2wJCWlzbnVsbCA9IHRydWU7CiAJCQkJRGF0dW0JCXdo ZXJlQ2xhdXNlRGF0dW07CisJCQkJRGF0dW0JCWNvbHVtbkxpc3REYXR1bTsKIAorCQkJCS8q IExvYWQgdGhlIFdIRVJFIGNsYXVzZSBmb3IgdGhpcyB0YWJsZS4gKi8KIAkJCQl3aGVyZUNs YXVzZURhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCByZnR1cGxl LAogCQkJCQkJCQkJCQkJICAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLAotCQkJ CQkJCQkJCQkJICAgJnJmaXNudWxsKTsKLQkJCQlpZiAoIXJmaXNudWxsKQorCQkJCQkJCQkJ CQkJICAgJmlzbnVsbCk7CisJCQkJaWYgKCFpc251bGwpCiAJCQkJCW9sZHJlbHdoZXJlY2xh dXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcod2hlcmVDbGF1c2VEYXR1 bSkpOwogCisJCQkJLyogVHJhbnNmb3JtIHRoZSBpbnQydmVjdG9yIGNvbHVtbiBsaXN0IHRv IGEgYml0bWFwLiAqLworCQkJCWNvbHVtbkxpc3REYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQ VUJMSUNBVElPTlJFTE1BUCwgcmZ0dXBsZSwKKwkJCQkJCQkJCQkJCSAgIEFudW1fcGdfcHVi bGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJCQkJCQkgICAmaXNudWxsKTsKKworCQkJ CS8qCisJCQkJICogWFhYIE1heWJlIG1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uLiBX ZSBkbyB0aGlzIG9uCisJCQkJICogbXVsdGlwbGUgcGxhY2VzLgorCQkJCSAqLworCQkJCWlm ICghaXNudWxsKQorCQkJCXsKKwkJCQkJQXJyYXlUeXBlICAqYXJyOworCQkJCQlpbnQJCQlu ZWxlbXM7CisJCQkJCWludDE2CSAgICplbGVtczsKKworCQkJCQlhcnIgPSBEYXR1bUdldEFy cmF5VHlwZVAoY29sdW1uTGlzdERhdHVtKTsKKwkJCQkJbmVsZW1zID0gQVJSX0RJTVMoYXJy KVswXTsKKwkJCQkJZWxlbXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGFycik7CisKKwkJ CQkJLyogWFhYIGlzIHRoZXJlIGEgZGFuZ2VyIG9mIG1lbW9yeSBsZWFrIGhlcmU/IGJld2Fy ZSAqLworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCQkJCQkJb2xk Y29sdW1ucyA9IGJtc19hZGRfbWVtYmVyKG9sZGNvbHVtbnMsIGVsZW1zW2ldKTsKKwkJCQl9 CisKIAkJCQlSZWxlYXNlU3lzQ2FjaGUocmZ0dXBsZSk7CiAJCQl9CiAKIAkJCWZvcmVhY2go bmV3bGMsIHJlbHMpCiAJCQl7CiAJCQkJUHVibGljYXRpb25SZWxJbmZvICpuZXdwdWJyZWw7 CisJCQkJT2lkCQkJCQluZXdyZWxpZDsKKwkJCQlCaXRtYXBzZXQJCSAgICpuZXdjb2x1bW5z ID0gTlVMTDsKIAogCQkJCW5ld3B1YnJlbCA9IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZp cnN0KG5ld2xjKTsKKwkJCQluZXdyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQobmV3cHVicmVs LT5yZWxhdGlvbik7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBuZXcgcHVibGljYXRpb24g aGFzIGNvbHVtbiBmaWx0ZXIsIHRyYW5zZm9ybSBpdCB0bworCQkJCSAqIGEgYml0bWFwIHRv by4KKwkJCQkgKi8KKwkJCQlpZiAobmV3cHVicmVsLT5jb2x1bW5zKQorCQkJCXsKKwkJCQkJ TGlzdENlbGwgICAqbGM7CisKKwkJCQkJZm9yZWFjaChsYywgbmV3cHVicmVsLT5jb2x1bW5z KQorCQkJCQl7CisJCQkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChsYykp OworCQkJCQkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0bnVtKG5ld3JlbGlkLCBjb2xu YW1lKTsKKworCQkJCQkJLyogbm8gY2hlY2tzIG5lZWRlZCBoZXJlLCB0aGF0IGhhcHBlbnMg ZWxzZXdoZXJlICovCisKKwkJCQkJCW5ld2NvbHVtbnMgPSBibXNfYWRkX21lbWJlcihuZXdj b2x1bW5zLCBhdHRudW0pOworCQkJCQl9CisJCQkJfQogCiAJCQkJLyoKIAkJCQkgKiBDaGVj ayBpZiBhbnkgb2YgdGhlIG5ldyBzZXQgb2YgcmVsYXRpb25zIG1hdGNoZXMgd2l0aCB0aGUK QEAgLTEwMzcsNyArMTE5NCw4IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQkJICovCiAJCQkJaWYgKFJl bGF0aW9uR2V0UmVsaWQobmV3cHVicmVsLT5yZWxhdGlvbikgPT0gb2xkcmVsaWQpCiAJCQkJ ewotCQkJCQlpZiAoZXF1YWwob2xkcmVsd2hlcmVjbGF1c2UsIG5ld3B1YnJlbC0+d2hlcmVD bGF1c2UpKQorCQkJCQlpZiAoZXF1YWwob2xkcmVsd2hlcmVjbGF1c2UsIG5ld3B1YnJlbC0+ d2hlcmVDbGF1c2UpICYmCisJCQkJCQlibXNfZXF1YWwob2xkY29sdW1ucywgbmV3Y29sdW1u cykpCiAJCQkJCXsKIAkJCQkJCWZvdW5kID0gdHJ1ZTsKIAkJCQkJCWJyZWFrOwpAQCAtMTA1 Niw2ICsxMjE0LDcgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9u U3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJCXsKIAkJCQlvbGRyZWwgPSBwYWxsb2Mo c2l6ZW9mKFB1YmxpY2F0aW9uUmVsSW5mbykpOwogCQkJCW9sZHJlbC0+d2hlcmVDbGF1c2Ug PSBOVUxMOworCQkJCW9sZHJlbC0+Y29sdW1ucyA9IE5JTDsKIAkJCQlvbGRyZWwtPnJlbGF0 aW9uID0gdGFibGVfb3BlbihvbGRyZWxpZCwKIAkJCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2spOwogCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIG9sZHJlbCk7 CkBAIC0xMTE3LDcgKzEyNzYsNyBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAl9CiAJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQ X0Ryb3BPYmplY3RzKQogCQlQdWJsaWNhdGlvbkRyb3BTY2hlbWFzKHB1YmZvcm0tPm9pZCwg c2NoZW1haWRsaXN0LCBmYWxzZSk7Ci0JZWxzZQkJCQkJCS8qIEFQX1NldE9iamVjdHMgKi8K KwllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gQVBfU2V0T2JqZWN0cykKIAl7CiAJCUxpc3QJ ICAgKm9sZHNjaGVtYWlkcyA9IEdldFB1YmxpY2F0aW9uU2NoZW1hcyhwdWJmb3JtLT5vaWQp OwogCQlMaXN0CSAgICpkZWxzY2hlbWFzID0gTklMOwpAQCAtMTE0MCw2ICsxMjk5LDEwIEBA IEFsdGVyUHVibGljYXRpb25TY2hlbWFzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAog CQkgKi8KIAkJUHVibGljYXRpb25BZGRTY2hlbWFzKHB1YmZvcm0tPm9pZCwgc2NoZW1haWRs aXN0LCB0cnVlLCBzdG10KTsKIAl9CisJZWxzZQorCXsKKwkJLyogTm90aGluZyB0byBkbyBm b3IgQVBfU2V0Q29sdW1ucyAqLworCX0KIH0KIAogLyoKQEAgLTE0NDMsNiArMTYwNiw3IEBA IE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsID0gcGFsbG9jKHNpemVv ZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CiAJ CXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CisJCXB1Yl9yZWwtPmNv bHVtbnMgPSB0LT5jb2x1bW5zOwogCQlyZWxzID0gbGFwcGVuZChyZWxzLCBwdWJfcmVsKTsK IAkJcmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBteXJlbGlkKTsKIApAQCAtMTQ5Nyw2 ICsxNjYxLDggQEAgT3BlblRhYmxlTGlzdChMaXN0ICp0YWJsZXMpCiAJCQkJcHViX3JlbC0+ cmVsYXRpb24gPSByZWw7CiAJCQkJLyogY2hpbGQgaW5oZXJpdHMgV0hFUkUgY2xhdXNlIGZy b20gcGFyZW50ICovCiAJCQkJcHViX3JlbC0+d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVz ZTsKKwkJCQkvKiBjaGlsZCBpbmhlcml0cyBjb2x1bW4gbGlzdCBmcm9tIHBhcmVudCAqLwor CQkJCXB1Yl9yZWwtPmNvbHVtbnMgPSB0LT5jb2x1bW5zOwogCQkJCXJlbHMgPSBsYXBwZW5k KHJlbHMsIHB1Yl9yZWwpOwogCQkJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgY2hp bGRyZWxpZCk7CiAKQEAgLTE2MTAsNiArMTc3NiwxMSBAQCBQdWJsaWNhdGlvbkRyb3BUYWJs ZXMoT2lkIHB1YmlkLCBMaXN0ICpyZWxzLCBib29sIG1pc3Npbmdfb2spCiAJCVJlbGF0aW9u CXJlbCA9IHB1YnJlbC0+cmVsYXRpb247CiAJCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRS ZWxpZChyZWwpOwogCisJCWlmIChwdWJyZWwtPmNvbHVtbnMpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJZXJybXNnKCJj b2x1bW4gbGlzdCBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgaW4gQUxURVIgUFVCTElDQVRJT04g Li4uIERST1AiKSk7CisKIAkJcHJpZCA9IEdldFN5c0NhY2hlT2lkMihQVUJMSUNBVElPTlJF TE1BUCwgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfb2lkLAogCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ocmVsaWQpLAogCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggM2U4M2YzNzViNTUuLjU1NDZkM2Q0 Mzg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNjI1LDYgKzYyNSw4IEBA IHN0YXRpYyB2b2lkIHJlZnVzZUR1cGVJbmRleEF0dGFjaChSZWxhdGlvbiBwYXJlbnRJZHgs IFJlbGF0aW9uIHBhcnRJZHgsCiBzdGF0aWMgTGlzdCAqR2V0UGFyZW50ZWRGb3JlaWduS2V5 UmVmcyhSZWxhdGlvbiBwYXJ0aXRpb24pOwogc3RhdGljIHZvaWQgQVREZXRhY2hDaGVja05v Rm9yZWlnbktleVJlZnMoUmVsYXRpb24gcGFydGl0aW9uKTsKIHN0YXRpYyBjaGFyIEdldEF0 dHJpYnV0ZUNvbXByZXNzaW9uKE9pZCBhdHR0eXBpZCwgY2hhciAqY29tcHJlc3Npb24pOwor c3RhdGljIHZvaWQgY2hlY2tfcmVwbGljYV9pZGVudGl0eShMaXN0ICpyZWxhdGlvbnMsIGNo YXIgcmVscmVwbGlkZW50LAorCQkJCQkJCQkgICBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAq Y29scyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODM2NSw2ICs4MzY3LDcgQEAgQVRFeGVj RHJvcENvbHVtbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNv bE5hbWUsCiAJCQkJIGJvb2wgbWlzc2luZ19vaywgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJ IE9iamVjdEFkZHJlc3NlcyAqYWRkcnMpCiB7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdl dFJlbGlkKHJlbCk7CiAJSGVhcFR1cGxlCXR1cGxlOwogCUZvcm1fcGdfYXR0cmlidXRlIHRh cmdldGF0dDsKIAlBdHRyTnVtYmVyCWF0dG51bTsKQEAgLTgzODQsNyArODM4Nyw3IEBAIEFU RXhlY0Ryb3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFy ICpjb2xOYW1lLAogCS8qCiAJICogZ2V0IHRoZSBudW1iZXIgb2YgdGhlIGF0dHJpYnV0ZQog CSAqLwotCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSwgY29sTmFtZSk7CisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQs IGNvbE5hbWUpOwogCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCiAJewogCQlpZiAo IW1pc3Npbmdfb2spCkBAIC04NDM4LDEzICs4NDQxLDQyIEBAIEFURXhlY0Ryb3BDb2x1bW4o TGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAogCiAJ UmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKIAorCS8qCisJICogQWxzbywgaWYgdGhlIGNvbHVt biBpcyB1c2VkIGluIHRoZSBjb2x1bW4gbGlzdCBvZiBhIHB1YmxpY2F0aW9uLAorCSAqIGRp c2FsbG93IHRoZSBkcm9wIGlmIHRoZSBEUk9QIGlzIFJFU1RSSUNULiAgV2UgZG9uJ3QgZG8g YW55dGhpbmcgaWYgdGhlCisJICogRFJPUCBpcyBDQVNDQURFLCB3aGljaCBtZWFucyB0aGF0 IHRoZSBkZXBlbmRlbmN5IG1lY2hhbmlzbSB3aWxsIHJlbW92ZQorCSAqIHRoZSByZWxhdGlv biBmcm9tIHRoZSBwdWJsaWNhdGlvbi4KKwkgKi8KKwlpZiAoYmVoYXZpb3IgPT0gRFJPUF9S RVNUUklDVCkKKwl7CisJCUxpc3QJICAgKnB1YnM7CisJCUxpc3RDZWxsICAgKmxjOworCisJ CXB1YnMgPSBHZXRSZWxhdGlvbkNvbHVtblBhcnRpYWxQdWJsaWNhdGlvbnMocmVsaWQpOwor CQlmb3JlYWNoKGxjLCBwdWJzKQorCQl7CisJCQlPaWQJCQlwdWJpZCA9IGxmaXJzdF9vaWQo bGMpOworCQkJTGlzdAkgICAqcHVibGlzaGVkX2NvbHM7CisKKwkJCXB1Ymxpc2hlZF9jb2xz ID0KKwkJCQlHZXRSZWxhdGlvbkNvbHVtbkxpc3RJblB1YmxpY2F0aW9uKHJlbGlkLCBwdWJp ZCk7CisKKwkJCWlmIChsaXN0X21lbWJlcl9vaWQocHVibGlzaGVkX2NvbHMsIGF0dG51bSkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RB QkxFX0RFRklOSVRJT04pLAorCQkJCQkJZXJybXNnKCJjYW5ub3QgZHJvcCBjb2x1bW4gXCIl c1wiIGJlY2F1c2UgaXQgaXMgcGFydCBvZiBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJ CSAgIGNvbE5hbWUsIGdldF9wdWJsaWNhdGlvbl9uYW1lKHB1YmlkLCBmYWxzZSkpLAorCQkJ CQkJZXJyaGludCgiU3BlY2lmeSBDQVNDQURFIG9yIHVzZSBBTFRFUiBQVUJMSUNBVElPTiB0 byByZW1vdmUgdGhlIGNvbHVtbiBmcm9tIHRoZSBwdWJsaWNhdGlvbi4iKSk7CisJCX0KKwl9 CisKIAkvKgogCSAqIFByb3BhZ2F0ZSB0byBjaGlsZHJlbiBhcyBhcHByb3ByaWF0ZS4gIFVu bGlrZSBtb3N0IG90aGVyIEFMVEVSCiAJICogcm91dGluZXMsIHdlIGhhdmUgdG8gZG8gdGhp cyBvbmUgbGV2ZWwgb2YgcmVjdXJzaW9uIGF0IGEgdGltZTsgd2UgY2FuJ3QKIAkgKiB1c2Ug ZmluZF9hbGxfaW5oZXJpdG9ycyB0byBkbyBpdCBpbiBvbmUgcGFzcy4KIAkgKi8KIAljaGls ZHJlbiA9Ci0JCWZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oUmVsYXRpb25HZXRSZWxpZChy ZWwpLCBsb2NrbW9kZSk7CisJCWZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4ocmVsaWQsIGxv Y2ttb2RlKTsKIAogCWlmIChjaGlsZHJlbikKIAl7CkBAIC04NTMyLDcgKzg1NjQsNyBAQCBB VEV4ZWNEcm9wQ29sdW1uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hh ciAqY29sTmFtZSwKIAogCS8qIEFkZCBvYmplY3QgdG8gZGVsZXRlICovCiAJb2JqZWN0LmNs YXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7Ci0Jb2JqZWN0Lm9iamVjdElkID0gUmVsYXRp b25HZXRSZWxpZChyZWwpOworCW9iamVjdC5vYmplY3RJZCA9IHJlbGlkOwogCW9iamVjdC5v YmplY3RTdWJJZCA9IGF0dG51bTsKIAlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVj dCwgYWRkcnMpOwogCkBAIC0xNTg2NCw3ICsxNTg5NiwyOCBAQCBBVEV4ZWNSZXBsaWNhSWRl bnRpdHkoUmVsYXRpb24gcmVsLCBSZXBsaWNhSWRlbnRpdHlTdG10ICpzdG10LCBMT0NLTU9E RSBsb2NrbW9kZQogCU9pZAkJCWluZGV4T2lkOwogCVJlbGF0aW9uCWluZGV4UmVsOwogCWlu dAkJCWtleTsKKwlCaXRtYXBzZXQgICppbmRleGVkX2NvbHMgPSBOVUxMOworCUxpc3QJICAg KmFuY2VzdG9ycyA9IE5JTDsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgbmV3IHBhcnRp dGlvbiBpcyBjb21wYXRpYmxlIHdpdGggYWxsIHB1YmxpY2F0aW9ucyB0aGUKKwkgKiBwYXJl bnQgcmVsYXRpb24gKHRvIHdoaWNoIHdlJ3JlIGF0dGFjaGluZykgaXMgcGFydCBvZi4gRWFj aCBhbmNlc3RvcgorCSAqIG1heSBiZSBhZGRlZCB0byBtdWx0aXBsZSBwdWJsaWNhdGlvbnMg LSB3ZSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGVtLAorCSAqIG5vdCBqdXN0IHRoZSB0b3At bW9zdCwgYmVjYXVzZSB0aGUgdG9wLW1vc3Qgb25lIG1pZ2h0IGJlIHJlbW92ZWQgbGF0ZXIu CisJICovCisJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMoUmVsYXRpb25H ZXRSZWxpZChyZWwpKTsKKworCS8qCisJICogSW5jbHVkZSB0aGUgcmVsIGl0c2VsZiB0b28s IGJlY2F1c2UgaXQgbWF5IGFscmVhZHkgaGF2ZSBwdWJsaWNhdGlvbnMuCisJICovCisJYW5j ZXN0b3JzID0gbGFwcGVuZF9vaWQoYW5jZXN0b3JzLCBSZWxhdGlvbkdldFJlbGlkKHJlbCkp OwogCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSByZXBsaWNhIGlkZW50aXR5IGFuZCBjb2x1 bW4gZmlsdGVycyBhcmUgY29tcGF0aWJsZS4KKwkgKi8KKwljaGVja19yZXBsaWNhX2lkZW50 aXR5KGFuY2VzdG9ycywgc3RtdC0+aWRlbnRpdHlfdHlwZSwgcmVsLCBOVUxMKTsKKworCS8q IGNyb3NzLWNoZWNrIHRoZSBjb2x1bW4gbGlzdHMgYW5kIHJlcGxpY2EgaWRlbnRpdHkgKGlm IGRlZmluZWQpICovCiAJaWYgKHN0bXQtPmlkZW50aXR5X3R5cGUgPT0gUkVQTElDQV9JREVO VElUWV9ERUZBVUxUKQogCXsKIAkJcmVsYXRpb25fbWFya19yZXBsaWNhX2lkZW50aXR5KHJl bCwgc3RtdC0+aWRlbnRpdHlfdHlwZSwgSW52YWxpZE9pZCwgdHJ1ZSk7CkBAIC0xNTk2MSw4 ICsxNjAxNCwxNyBAQCBBVEV4ZWNSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsLCBSZXBs aWNhSWRlbnRpdHlTdG10ICpzdG10LCBMT0NLTU9ERSBsb2NrbW9kZQogCQkJCQkgZXJybXNn KCJpbmRleCBcIiVzXCIgY2Fubm90IGJlIHVzZWQgYXMgcmVwbGljYSBpZGVudGl0eSBiZWNh dXNlIGNvbHVtbiBcIiVzXCIgaXMgbnVsbGFibGUiLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKGluZGV4UmVsKSwKIAkJCQkJCQlOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSkp OworCisJCS8qCisJCSAqIENvbGxlY3QgY29sdW1ucyB1c2VkLCBpbiBjYXNlIHdlIGhhdmUg YW55IHB1YmxpY2F0aW9ucyB0aGF0IHdlIG5lZWQKKwkJICogdG8gdmV0LiBPZmZzZXQgYnkg Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwgYmVjYXVzZSB0aGF0J3MKKwkJ ICogd2hhdCBjaGVja19yZXBsaWNhX2lkZW50aXR5IGV4cGVjdHMuCisJCSAqLworCQlpbmRl eGVkX2NvbHMgPSBibXNfYWRkX21lbWJlcihpbmRleGVkX2NvbHMsIGF0dG5vIC0gRmlyc3RM b3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CiAJfQogCisJY2hlY2tfcmVwbGljYV9p ZGVudGl0eShhbmNlc3RvcnMsIFJFUExJQ0FfSURFTlRJVFlfSU5ERVgsIHJlbCwgaW5kZXhl ZF9jb2xzKTsKKwogCS8qIFRoaXMgaW5kZXggaXMgc3VpdGFibGUgZm9yIHVzZSBhcyBhIHJl cGxpY2EgaWRlbnRpdHkuIE1hcmsgaXQuICovCiAJcmVsYXRpb25fbWFya19yZXBsaWNhX2lk ZW50aXR5KHJlbCwgc3RtdC0+aWRlbnRpdHlfdHlwZSwgaW5kZXhPaWQsIHRydWUpOwogCkBA IC0xNzYyMyw2ICsxNzY4NSw3IEBAIEFURXhlY0F0dGFjaFBhcnRpdGlvbihMaXN0ICoqd3F1 ZXVlLCBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNtZCAqY21kLAogCU9pZAkJCWRlZmF1bHRQ YXJ0T2lkOwogCUxpc3QJICAgKnBhcnRCb3VuZENvbnN0cmFpbnQ7CiAJUGFyc2VTdGF0ZSAq cHN0YXRlID0gbWFrZV9wYXJzZXN0YXRlKE5VTEwpOworCUxpc3QJICAgKmFuY2VzdG9ycyA9 IE5JTDsKIAogCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gY29udGV4dC0+cXVlcnlTdHJpbmc7 CiAKQEAgLTE3Nzg0LDYgKzE3ODQ3LDI3IEBAIEFURXhlY0F0dGFjaFBhcnRpdGlvbihMaXN0 ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNtZCAqY21kLAogCQkJCQkJdHJp Z2dlcl9uYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShhdHRhY2hyZWwpKSwKIAkJCQkg ZXJyZGV0YWlsKCJST1cgdHJpZ2dlcnMgd2l0aCB0cmFuc2l0aW9uIHRhYmxlcyBhcmUgbm90 IHN1cHBvcnRlZCBvbiBwYXJ0aXRpb25zIikpKTsKIAorCS8qCisJICogQ2hlY2sgdGhhdCB0 aGUgbmV3IHBhcnRpdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggYWxsIHB1YmxpY2F0aW9ucyB0 aGUKKwkgKiBwYXJlbnQgcmVsYXRpb24gKHRvIHdoaWNoIHdlJ3JlIGF0dGFjaGluZykgaXMg cGFydCBvZi4gRWFjaCBhbmNlc3RvcgorCSAqIG1heSBiZSBhZGRlZCB0byBtdWx0aXBsZSBw dWJsaWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGVtLAorCSAqIG5vdCBq dXN0IHRoZSB0b3AtbW9zdCwgYmVjYXVzZSB0aGUgdG9wLW1vc3Qgb25lIG1pZ2h0IGJlIHJl bW92ZWQgbGF0ZXIuCisJICovCisJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3Rv cnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKworCS8qCisJICogSW5jbHVkZSB0aGUgcmVs IHRvIHdoaWNoIHdlIGF0dGFjaCB0aGUgbmV3IHBhcnRpdGlvbiwgc28gdGhhdCB3ZSBoYXZl CisJICogYWxsIGFuY2VzdG9ycyBvZiB0aGUgYXR0YWNocmVsLgorCSAqLworCWFuY2VzdG9y cyA9IGxhcHBlbmRfb2lkKGFuY2VzdG9ycywgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwor CS8qCisJICogQ2hlY2sgdGhlIHJlcGxpY2EgaWRlbnRpdHkgb2YgdGhlIG5ldyBwYXJ0aXRp b24gaXMgY29tcGF0aWJsZSB3aXRoCisJICogYWxsIHB1YmxpY2F0aW9ucy4KKwkgKi8KKwlj aGVja19yZXBsaWNhX2lkZW50aXR5KGFuY2VzdG9ycywgYXR0YWNocmVsLT5yZF9yZWwtPnJl bHJlcGxpZGVudCwKKwkJCQkJCSAgIGF0dGFjaHJlbCwgTlVMTCk7CisKIAkvKgogCSAqIENo ZWNrIHRoYXQgdGhlIG5ldyBwYXJ0aXRpb24ncyBib3VuZCBpcyB2YWxpZCBhbmQgZG9lcyBu b3Qgb3ZlcmxhcCBhbnkKIAkgKiBvZiBleGlzdGluZyBwYXJ0aXRpb25zIG9mIHRoZSBwYXJl bnQgLSBub3RlIHRoYXQgaXQgZG9lcyBub3QgcmV0dXJuIG9uCkBAIC0xOTIzOSwzICsxOTMy MywxMjIgQEAgR2V0QXR0cmlidXRlQ29tcHJlc3Npb24oT2lkIGF0dHR5cGlkLCBjaGFyICpj b21wcmVzc2lvbikKIAogCXJldHVybiBjbWV0aG9kOwogfQorCisvKgorICogLSByZWxhdGlv bnMgLSBsaXN0IG9mIE9JRHMgZm9yIHJlbGF0aW9ucyBmb3Igd2hpY2ggd2UgbmVlZCB0byBp bnNwZWN0IHRoZQorICogcHVibGljYXRpb25zICh0aGlzIGluY2x1ZGVzIGFuY2VzdG9ycyBh bmQgcG9zc2libHkgdGhlIHJlbGF0aW9uIGl0c2VsZikKKyAqCisgKiAtIHJlbCAtIHRoZSBy ZWxhdGlvbiBmb3Igd2hpY2ggd2UgdmVyaWZ5IHRoZSByZXBsaWNhIGlkZW50aXR5CisgKgor ICogWFhYIFRoaXMgaGFzIGEgYml0IG9mIGEgcHJvYmxlbSwgYmVjYXNlIGZvciBBTFRFUiBU QUJMRSAuLi4gUkVQTElDQQorICogSURFTlRJVFkgaXQncyBjYWxsZWQgYmVmb3JlIHRoZSBy ZWxhdGlvbiBoYXMgaXQgYXNzaWduZWQuIFNvIHdlIGdldCB0aGUKKyAqIHJlbHJlcGxpZGVu dCBhbmQgaW5kZXhlZCBjb2x1bW5zIHNlcGFyYXRlbHkuIE1heWJlIHdlIGNvdWxkIGp1c3Qg Y2FsbAorICogaXQgYSBiaXQgbGF0ZXI/CisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZXBs aWNhX2lkZW50aXR5KExpc3QgKnJlbGF0aW9ucywgY2hhciByZWxyZXBsaWRlbnQsIFJlbGF0 aW9uIHJlbCwKKwkJCQkJICAgQml0bWFwc2V0ICpjb2xzKQoreworCUxpc3RDZWxsICAgKmxj OworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBuZXcgcGFydGl0aW9uIGlzIGNvbXBhdGli bGUgd2l0aCBhbGwgcHVibGljYXRpb25zIHRoZQorCSAqIGFuY2VzdG9ycyBhcmUgbWVtYmVy cyBvZi4gRWFjaCBhbmNlc3RvciBtYXkgYmUgYWRkZWQgdG8gbXVsdGlwbGUKKwkgKiBwdWJs aWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGVtLCBub3QganVzdCB0aGUg dG9wLW1vc3QsCisJICogYmVjYXVzZSB0aGUgdG9wLW1vc3Qgb25lIG1pZ2h0IGJlIHJlbW92 ZWQgbGF0ZXIuCisJICovCisJZm9yZWFjaChsYywgcmVsYXRpb25zKQorCXsKKwkJTGlzdENl bGwgICAqbGMyOworCQlPaWQJCQlhbmNlc3RvciA9IGxmaXJzdF9vaWQobGMpOworCisJCS8q IG9ubHkgcHVibGljYXRpb25zIHdpdGggYSBjb2x1bW4gZmlsdGVyICovCisJCUxpc3QJICAg KnB1YmlkcyA9IEdldFJlbGF0aW9uQ29sdW1uUGFydGlhbFB1YmxpY2F0aW9ucyhhbmNlc3Rv cik7CisKKwkJLyogbm8gcHVibGljYXRpb25zIHdpdGggY29sdW1uIGZpbHRlciBmb3IgdGhp cyBwYXJlbnQgKi8KKwkJaWYgKCFwdWJpZHMpCisJCQljb250aW51ZTsKKworCQkvKiBXaXRo IFJFUExJQ0EgSURFTlRJVFkgRlVMTCBubyBjb2x1bW4gZmlsdGVyIGlzIGFsbG93ZWQuICov CisJCWlmIChyZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCisJCQkJCWVycm1zZygiaW52YWxpZCBjb2x1bW4gbGlzdCBmb3IgcHVibGlzaGluZyBy ZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSksCS8qIFhYWCBtYXliZSByZXBvcnQgdGhlIGFuY2VzdG9yPyAqLworCQkJCQllcnJkZXRh aWwoIkNhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9ucyB3aXRoIFJFUExJ Q0EgSURFTlRJVFkgRlVMTC4iKSk7CisKKwkJLyogY2hlY2sgdGhlIGNvbHVtbiBmaWx0ZXIg dnMuIHJlcGxpY2EgaWRlbnRpdHkgZm9yIGVhY2ggcGFydGl0aW9uICovCisJCWZvcmVhY2gg KGxjMiwgcHViaWRzKQorCQl7CisJCQlMaXN0Q2VsbCAgICpsYzM7CisJCQlPaWQJCQlwdWJp ZCA9IGxmaXJzdF9vaWQobGMyKTsKKwkJCUxpc3QJICAgKmNvbHVtbnMgPSBHZXRSZWxhdGlv bkNvbHVtbkxpc3RJblB1YmxpY2F0aW9uKGFuY2VzdG9yLCBwdWJpZCk7CisJCQlCaXRtYXBz ZXQgICpjb2xzZXQgPSBOVUxMOworCQkJQml0bWFwc2V0ICAqaWRhdHRyczsKKwkJCVB1Ymxp Y2F0aW9uICpwdWI7CisKKwkJCXB1YiA9IEdldFB1YmxpY2F0aW9uKHB1YmlkKTsKKworCQkJ LyoKKwkJCSAqIFdoZW4gbm90IHJlcGxpY2F0aW5nIFVQREFURS9ERUxFVEUsIHdlJ3JlIGRv bmUuIE90aGVyd2lzZSBjaGVjayB0aGUKKwkJCSAqIHdob2xlIHJlcGxpY2EgaWRlbnRpdHkg aXMgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIuCisJCQkgKi8KKwkJCWlmICghcHVi LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSAmJiAhcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSkK KwkJCQljb250aW51ZTsKKworCQkJLyogR2V0IHJlcGxpY2EgaWRlbnRpdHkgYXR0cmlidXRl cy4gKi8KKwkJCWlmICgocmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfSU5ERVgp ICYmIGNvbHMpCisJCQkJaWRhdHRycyA9IGNvbHM7CisJCQllbHNlCisJCQkJaWRhdHRycyA9 IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbCwgSU5ERVhfQVRUUl9CSVRNQVBfSURF TlRJVFlfS0VZKTsKKworCQkJLyoKKwkJCSAqIFRoaXMgY2FuIGhhcHBlbiwgaW4gd2hpY2gg Y2FzZSB0aGUgcmVwbGljYSBpZGVudGl0eSBpcyBpbmhlcml0ZWQKKwkJCSAqIGZyb20gdGhl IGFuY2VzdG9yLCB3aGljaCBtZWFucyBpdCdzIE9LIGZvciB0aGUgcHVibGljYXRpb24uCisJ CQkgKi8KKwkJCWlmICghaWRhdHRycykKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAq IEJ1aWxkIGJpdG1hcCBmcm9tIHRoZSBmaWx0ZXIgY29sdW1ucywgZm9yIGVhc3kgY29tcGFy aXNvbiB3aXRoIHRoZQorCQkJICogcmVwbGljYSBpZGVudGl0eSBiaXRtYXAuIE9mZnNldCBi eSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyCisJCQkgKiBmb3IgZWFjaCBj b21wYXJpc29uIHdpdGggaWRhdHRycy4KKwkJCSAqCisJCQkgKiBYWFggRG8gd2UgbmVlZCB0 byBtYXAgYXR0bnVtcyBiZXR3ZWVuIHRoZSBwYXJ0aXRpb25zPyBGb3Igbm93CisJCQkgKiBq dXN0IGxvb2t1cCBuYW1lIGluIHRoZSBhbmNlc3RvciAocGVyIHRoZSBjb2x1bW4gbGlzdCks IGFuZCB0aGVuCisJCQkgKiBsb29rdXAgdGhlIGF0dG51bSBpbiB0aGUgY2hpbGQuIEJ1dCBt YXliZSB0aGF0J3Mgbm90IG5lZWRlZD8KKwkJCSAqLworCQkJZm9yZWFjaCAobGMzLCBjb2x1 bW5zKQorCQkJeworCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCWNoYXIJICAgKmF0dG5h bWU7CisKKwkJCQlhdHRudW0gPSBsZmlyc3Rfb2lkKGxjMyk7CisJCQkJYXR0bmFtZSA9IGdl dF9hdHRuYW1lKGFuY2VzdG9yLCBhdHRudW0sIGZhbHNlKTsKKworCQkJCS8qIHJldmVyc2Ug bG9va3VwIGZvciB0aGUgY3VycmVudCByZWxhdGlvbiAqLworCQkJCWF0dG51bSA9IGdldF9h dHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRuYW1lKTsKKworCQkJCWNvbHNldCA9 IGJtc19hZGRfbWVtYmVyKGNvbHNldCwgYXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0 dHJpYnV0ZU51bWJlcik7CisJCQl9CisKKwkJCS8qCisJCQkgKiBBdHRudW1zIGluIHRoZSBi aXRtYXAgcmV0dXJuZWQgYnkgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAgYXJlCisJCQkg KiBvZmZzZXQgKHRvIGhhbmRsZSBzeXN0ZW0gY29sdW1ucyB0aGUgdXN1YWwgd2F5KSwgd2hp bGUgY29sdW1uIGZpbHRlcgorCQkJICogZG9lcyBub3QgdXNlIG9mZnNldCwgc28gd2UgY2Fu J3QgZG8gYm1zX2lzX3N1YnNldCgpLiBJbnN0ZWFkLCB3ZSBoYXZlCisJCQkgKiB0byBsb29w IG92ZXIgdGhlIGlkYXR0cnMgYW5kIGNoZWNrIGFsbCBvZiB0aGVtIGFyZSBpbiB0aGUgZmls dGVyLgorCQkJICovCisJCQlpZiAoIWJtc19pc19zdWJzZXQoaWRhdHRycywgY29sc2V0KSkK KwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFM SURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJCQllcnJtc2coImludmFsaWQgY29sdW1uIGxp c3QgZm9yIHB1Ymxpc2hpbmcgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKSwJLyogWFhYIG1heWJlIHJlcG9ydCB0aGUgYW5jZXN0 b3I/ICovCisJCQkJCQllcnJkZXRhaWwoIkFsbCBjb2x1bW5zIGluIFJFUExJQ0EgSURFTlRJ VFkgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBjb2x1bW4gbGlzdC4iKSk7CisJCQl9CisKKwkJ CWJtc19mcmVlKGNvbHNldCk7CisJCQlibXNfZnJlZShpZGF0dHJzKTsKKwkJfQorCX0KK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZDRmODQ1NWEyYmQuLmE1MDQ0Mzc4NzNmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDg1MCw2ICs0ODUwLDcgQEAgX2NvcHlQdWJs aWNhdGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmZyb20pCiAKIAlDT1BZX05P REVfRklFTEQocmVsYXRpb24pOwogCUNPUFlfTk9ERV9GSUVMRCh3aGVyZUNsYXVzZSk7CisJ Q09QWV9OT0RFX0ZJRUxEKGNvbHVtbnMpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggZjEwMDJhZmU3YTAuLjRmYzE2Y2UwNGUzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0yMzIyLDYgKzIzMjIsNyBAQCBfZXF1YWxQdWJs aWNhdGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmEsIGNvbnN0IFB1YmxpY2F0 aW9uVGFibGUgKmIpCiB7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHJlbGF0aW9uKTsKIAlDT01Q QVJFX05PREVfRklFTEQod2hlcmVDbGF1c2UpOworCUNPTVBBUkVfTk9ERV9GSUVMRChjb2x1 bW5zKTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggYTAzYjMzYjUz YmQuLjI1YzliMjlhZmRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTk3NTEsMTMgKzk3NTEsMTQg QEAgQ3JlYXRlUHVibGljYXRpb25TdG10OgogICogcmVsYXRpb25fZXhwciBoZXJlLgogICov CiBQdWJsaWNhdGlvbk9ialNwZWM6Ci0JCQlUQUJMRSByZWxhdGlvbl9leHByIE9wdFdoZXJl Q2xhdXNlCisJCQlUQUJMRSByZWxhdGlvbl9leHByIG9wdF9jb2x1bW5fbGlzdCBPcHRXaGVy ZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMp OwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOwogCQkJCQkk JC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1 YnRhYmxlLT5yZWxhdGlvbiA9ICQyOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNl ID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOworCQkJCQkkJC0+cHVi dGFibGUtPndoZXJlQ2xhdXNlID0gJDQ7CiAJCQkJfQogCQkJfCBBTEwgVEFCTEVTIElOX1Ag U0NIRU1BIENvbElkCiAJCQkJewpAQCAtOTc3MiwxMSArOTc3MywxMiBAQCBQdWJsaWNhdGlv bk9ialNwZWM6CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfVEFCTEVT X0lOX0NVUl9TQ0hFTUE7CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEA1OwogCQkJCX0KLQkJCXwg Q29sSWQgT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQgb3B0X2NvbHVtbl9saXN0IE9wdFdo ZXJlQ2xhdXNlCiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3Bl Yyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9O OwotCQkJCQlpZiAoJDIpCisJCQkJCS8qIEZJWE1FIHRoaXMgaXMgYSBiaXQgY3VtYmVyc29t ZSAqLworCQkJCQlpZiAoJDIgfHwgJDMpCiAJCQkJCXsKIAkJCQkJCS8qCiAJCQkJCQkgKiBU aGUgT3B0V2hlcmVDbGF1c2UgbXVzdCBiZSBzdG9yZWQgaGVyZSBidXQgaXQgaXMKQEAgLTk3 ODYsNyArOTc4OCw4IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJCSAqLwogCQkJCQkJ JCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJCQkJCQkkJC0+ cHVidGFibGUtPnJlbGF0aW9uID0gbWFrZVJhbmdlVmFyKE5VTEwsICQxLCBAMSk7Ci0JCQkJ CQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJCQkkJC0+cHVidGFibGUt PmNvbHVtbnMgPSAkMjsKKwkJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsK IAkJCQkJfQogCQkJCQllbHNlCiAJCQkJCXsKQEAgLTk3OTQsMjMgKzk3OTcsMjUgQEAgUHVi bGljYXRpb25PYmpTcGVjOgogCQkJCQl9CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOwogCQkJ CX0KLQkJCXwgQ29sSWQgaW5kaXJlY3Rpb24gT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQg aW5kaXJlY3Rpb24gb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJCQkJewogCQkJ CQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0 eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+cHVidGFibGUg PSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxh dGlvbiA9IG1ha2VSYW5nZVZhckZyb21RdWFsaWZpZWROYW1lKCQxLCAkMiwgQDEsIHl5c2Nh bm5lcik7Ci0JCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsKKwkJCQkJJCQt PnB1YnRhYmxlLT5jb2x1bW5zID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1 c2UgPSAkNDsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJLyogZ3JhbW1h ciBsaWtlIHRhYmxlbmFtZSAqICwgT05MWSB0YWJsZW5hbWUsIE9OTFkgKCB0YWJsZW5hbWUg KSAqLwotCQkJfCBleHRlbmRlZF9yZWxhdGlvbl9leHByIE9wdFdoZXJlQ2xhdXNlCisJCQl8 IGV4dGVuZGVkX3JlbGF0aW9uX2V4cHIgb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNl CiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJ CSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkk JC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1 YnRhYmxlLT5yZWxhdGlvbiA9ICQxOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNl ID0gJDI7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOworCQkJCQkkJC0+cHVi dGFibGUtPndoZXJlQ2xhdXNlID0gJDM7CiAJCQkJfQogCQkJfCBDVVJSRU5UX1NDSEVNQQog CQkJCXsKQEAgLTk4MzYsNiArOTg0MSwxMCBAQCBwdWJfb2JqX2xpc3Q6IAlQdWJsaWNhdGlv bk9ialNwZWMKICAqCiAgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBwdWJfb2JqIFss IC4uLl0KICAqCisgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBDT0xVTU5TIHRhYmxl X25hbWUgKGNvbHVtblssIC4uLl0pCisgKgorICogQUxURVIgUFVCTElDQVRJT04gbmFtZSBT RVQgQ09MVU1OUyB0YWJsZV9uYW1lIEFMTAorICoKICAqIHB1Yl9vYmogaXMgb25lIG9mOgog ICoKICAqCQlUQUJMRSB0YWJsZV9uYW1lIFssIC4uLl0KQEAgLTk4NjksNiArOTg3OCwzMiBA QCBBbHRlclB1YmxpY2F0aW9uU3RtdDoKIAkJCQkJbi0+YWN0aW9uID0gQVBfU2V0T2JqZWN0 czsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQkJfCBBTFRFUiBQVUJMSUNBVElP TiBuYW1lIEFMVEVSIFRBQkxFIHJlbGF0aW9uX2V4cHIgU0VUIENPTFVNTlMgJygnIGNvbHVt bkxpc3QgJyknCisJCQkJeworCQkJCQlBbHRlclB1YmxpY2F0aW9uU3RtdCAqbiA9IG1ha2VO b2RlKEFsdGVyUHVibGljYXRpb25TdG10KTsKKwkJCQkJUHVibGljYXRpb25PYmpTcGVjICpv YmogPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOworCQkJCQlvYmotPnB1Ym9ianR5 cGUgPSBQVUJMSUNBVElPTk9CSl9UQUJMRTsKKwkJCQkJb2JqLT5wdWJ0YWJsZSA9IG1ha2VO b2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQlvYmotPnB1YnRhYmxlLT5yZWxhdGlvbiA9 ICQ2OworCQkJCQlvYmotPnB1YnRhYmxlLT5jb2x1bW5zID0gJDEwOworCQkJCQluLT5wdWJu YW1lID0gJDM7CisJCQkJCW4tPnB1Ym9iamVjdHMgPSBsaXN0X21ha2UxKG9iaik7CisJCQkJ CW4tPmFjdGlvbiA9IEFQX1NldENvbHVtbnM7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJ CQl9CisJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUxURVIgVEFCTEUgcmVsYXRpb25f ZXhwciBTRVQgQ09MVU1OUyBBTEwKKwkJCQl7CisJCQkJCUFsdGVyUHVibGljYXRpb25TdG10 ICpuID0gbWFrZU5vZGUoQWx0ZXJQdWJsaWNhdGlvblN0bXQpOworCQkJCQlQdWJsaWNhdGlv bk9ialNwZWMgKm9iaiA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CisJCQkJCW9i ai0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOworCQkJCQlvYmotPnB1YnRh YmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CisJCQkJCW9iai0+cHVidGFibGUt PnJlbGF0aW9uID0gJDY7CisJCQkJCW9iai0+cHVidGFibGUtPmNvbHVtbnMgPSBOSUw7CisJ CQkJCW4tPnB1Ym5hbWUgPSAkMzsKKwkJCQkJbi0+cHVib2JqZWN0cyA9IGxpc3RfbWFrZTEo b2JqKTsKKwkJCQkJbi0+YWN0aW9uID0gQVBfU2V0Q29sdW1uczsKKwkJCQkJJCQgPSAoTm9k ZSAqKSBuOworCQkJCX0KIAkJCXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBEUk9QIHB1Yl9v YmpfbGlzdAogCQkJCXsKIAkJCQkJQWx0ZXJQdWJsaWNhdGlvblN0bXQgKm4gPSBtYWtlTm9k ZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CkBAIC0xNzQ4OCw2ICsxNzUyMywxMyBAQCBwcmVw cm9jZXNzX3B1Ym9ial9saXN0KExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgY29yZV95eXNjYW5f dCB5eXNjYW5uZXIpCiAJCQkJCQllcnJtc2coIldIRVJFIGNsYXVzZSBub3QgYWxsb3dlZCBm b3Igc2NoZW1hIiksCiAJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHVib2JqLT5sb2NhdGlv bikpOwogCisJCQkvKiBDb2x1bW4gZmlsdGVyIGlzIG5vdCBhbGxvd2VkIG9uIGEgc2NoZW1h IG9iamVjdCAqLworCQkJaWYgKHB1Ym9iai0+cHVidGFibGUgJiYgcHVib2JqLT5wdWJ0YWJs ZS0+Y29sdW1ucykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImNvbHVtbiBzcGVjaWZpY2F0aW9uIG5v dCBhbGxvd2VkIGZvciBzY2hlbWEiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwdWJv YmotPmxvY2F0aW9uKSk7CisKIAkJCS8qCiAJCQkgKiBXZSBjYW4gZGlzdGluZ3Vpc2ggYmV0 d2VlbiB0aGUgZGlmZmVyZW50IHR5cGUgb2Ygc2NoZW1hCiAJCQkgKiBvYmplY3RzIGJhc2Vk IG9uIHdoZXRoZXIgbmFtZSBhbmQgcHVidGFibGUgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGM5YjBlZWVmZDdlLi5jY2NhMzI2YWQ2 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMjks MTAgKzI5LDExIEBACiAjZGVmaW5lIFRSVU5DQVRFX0NBU0NBREUJCSgxPDwwKQogI2RlZmlu ZSBUUlVOQ0FURV9SRVNUQVJUX1NFUVMJKDE8PDEpCiAKLXN0YXRpYyB2b2lkIGxvZ2ljYWxy ZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCk7CitzdGF0aWMg dm9pZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiBy ZWwsCisJCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMgdm9pZCBsb2dp Y2FscmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWwsCiAJCQkJ CQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkgICBib29sIGJpbmFyeSk7 CisJCQkJCQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogc3RhdGlj IHZvaWQgbG9naWNhbHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBS ZWxhdGlvbiAqcmVsKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF90dXBsZShTdHJp bmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSk7CiAKQEAgLTM5OCw3ICsz OTksNyBAQCBsb2dpY2FscmVwX3JlYWRfb3JpZ2luKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQ dHIgKm9yaWdpbl9sc24pCiAgKi8KIHZvaWQKIGxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAotCQkJCQkJ VHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QsIGJvb2wgYmluYXJ5KQorCQkJCQkJVHVwbGVUYWJs ZVNsb3QgKm5ld3Nsb3QsIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJ cHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUKTsKIApAQCAtNDEwLDcg KzQxMSw3IEBAIGxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAogCXBxX3NlbmRpbnQzMihvdXQsIFJlbGF0 aW9uR2V0UmVsaWQocmVsKSk7CiAKIAlwcV9zZW5kYnl0ZShvdXQsICdOJyk7CQkvKiBuZXcg dHVwbGUgZm9sbG93cyAqLwotCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5l d3Nsb3QsIGJpbmFyeSk7CisJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3 c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAogLyoKQEAgLTQ0Myw3ICs0NDQsNyBAQCBs b2dpY2FscmVwX3JlYWRfaW5zZXJ0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURh dGEgKm5ld3R1cCkKIHZvaWQKIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAogCQkJCQkJVHVwbGVUYWJs ZVNsb3QgKm9sZHNsb3QsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90LAotCQkJCQkJYm9vbCBi aW5hcnkpCisJCQkJCQlib29sIGJpbmFyeSwgQml0bWFwc2V0ICpjb2x1bW5zKQogewogCXBx X3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX1VQREFURSk7CiAKQEAgLTQ2NCwxMSAr NDY1LDExIEBAIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAogCQkJcHFfc2VuZGJ5dGUob3V0LCAnTycp OwkvKiBvbGQgdHVwbGUgZm9sbG93cyAqLwogCQllbHNlCiAJCQlwcV9zZW5kYnl0ZShvdXQs ICdLJyk7CS8qIG9sZCBrZXkgZm9sbG93cyAqLwotCQlsb2dpY2FscmVwX3dyaXRlX3R1cGxl KG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnkpOworCQlsb2dpY2FscmVwX3dyaXRlX3R1cGxl KG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnksIGNvbHVtbnMpOwogCX0KIAogCXBxX3NlbmRi eXRlKG91dCwgJ04nKTsJCS8qIG5ldyB0dXBsZSBmb2xsb3dzICovCi0JbG9naWNhbHJlcF93 cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xvdCwgYmluYXJ5KTsKKwlsb2dpY2FscmVwX3dy aXRlX3R1cGxlKG91dCwgcmVsLCBuZXdzbG90LCBiaW5hcnksIGNvbHVtbnMpOwogfQogCiAv KgpAQCAtNTM3LDcgKzUzOCw3IEBAIGxvZ2ljYWxyZXBfd3JpdGVfZGVsZXRlKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAogCWVsc2UKIAkJcHFf c2VuZGJ5dGUob3V0LCAnSycpOwkvKiBvbGQga2V5IGZvbGxvd3MgKi8KIAotCWxvZ2ljYWxy ZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG9sZHNsb3QsIGJpbmFyeSk7CisJbG9naWNhbHJl cF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkc2xvdCwgYmluYXJ5LCBOVUxMKTsKIH0KIAog LyoKQEAgLTY1Miw3ICs2NTMsOCBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKICAqIFdyaXRl IHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lk Ci1sb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsIFJlbGF0aW9uIHJlbCkKK2xvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAorCQkJCQkgQml0bWFwc2V0ICpj b2x1bW5zKQogewogCWNoYXIJICAgKnJlbG5hbWU7CiAKQEAgLTY3NCw3ICs2NzYsNyBAQCBs b2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFJlbGF0aW9uIHJlbCkKIAlwcV9zZW5kYnl0ZShvdXQsIHJlbC0+cmRfcmVsLT5yZWxyZXBs aWRlbnQpOwogCiAJLyogc2VuZCB0aGUgYXR0cmlidXRlIGluZm8gKi8KLQlsb2dpY2FscmVw X3dyaXRlX2F0dHJzKG91dCwgcmVsKTsKKwlsb2dpY2FscmVwX3dyaXRlX2F0dHJzKG91dCwg cmVsLCBjb2x1bW5zKTsKIH0KIAogLyoKQEAgLTc1MSw3ICs3NTMsNyBAQCBsb2dpY2FscmVw X3JlYWRfdHlwKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBUeXAgKmx0eXApCiAgKi8KIHN0 YXRpYyB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0LCBSZWxh dGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkgICBib29sIGJpbmFyeSkK KwkJCQkJICAgYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlUdXBsZURl c2MJZGVzYzsKIAlEYXR1bQkgICAqdmFsdWVzOwpAQCAtNzYzLDcgKzc2NSwxMyBAQCBsb2dp Y2FscmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWwsIFR1cGxl VGFibGVTbG90ICpzbG90LAogCiAJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5hdHRzOyBpKysp CiAJewotCQlpZiAoVHVwbGVEZXNjQXR0cihkZXNjLCBpKS0+YXR0aXNkcm9wcGVkIHx8IFR1 cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGdlbmVyYXRlZCkKKwkJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihkZXNjLCBpKTsKKworCQlpZiAoYXR0LT5hdHRpc2Ry b3BwZWQgfHwgYXR0LT5hdHRnZW5lcmF0ZWQpCisJCQljb250aW51ZTsKKworCQkvKiBEb24n dCBjb3VudCBhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCB0byBiZSBzZW50LiAqLworCQlpZiAo Y29sdW1ucyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dC0+YXR0bnVtLCBjb2x1bW5z KSkKIAkJCWNvbnRpbnVlOwogCQlubGl2ZWF0dHMrKzsKIAl9CkBAIC03ODMsNiArNzkxLDE0 IEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJl bCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBh dHQtPmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIElnbm9yZSBhdHRyaWJ1 dGVzIHRoYXQgYXJlIG5vdCB0byBiZSBzZW50LgorCQkgKgorCQkgKiBYWFggRG8gd2UgbmVl ZCB0aGUgKGNvbHVtbnMgIT0gTlVMTCkgY2hlY2s/IEkgZG9uJ3QgdGhpbmsgc28sIGJlY2F1 c2UKKwkJICogc3VjaCBiaXRtYXAgaGFzIG5vIG1lbWJlcnMuCisJCSAqLworCQlpZiAoY29s dW1ucyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkK KwkJCWNvbnRpbnVlOworCiAJCWlmIChpc251bGxbaV0pCiAJCXsKIAkJCXBxX3NlbmRieXRl KG91dCwgTE9HSUNBTFJFUF9DT0xVTU5fTlVMTCk7CkBAIC05MDQsNyArOTIwLDcgQEAgbG9n aWNhbHJlcF9yZWFkX3R1cGxlKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURhdGEg KnR1cGxlKQogICogV3JpdGUgcmVsYXRpb24gYXR0cmlidXRlIG1ldGFkYXRhIHRvIHRoZSBz dHJlYW0uCiAgKi8KIHN0YXRpYyB2b2lkCi1sb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmlu Z0luZm8gb3V0LCBSZWxhdGlvbiByZWwpCitsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmlu Z0luZm8gb3V0LCBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlUdXBs ZURlc2MJZGVzYzsKIAlpbnQJCQlpOwpAQCAtOTE3LDggKzkzMywxNSBAQCBsb2dpY2FscmVw X3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWwpCiAJLyogc2VuZCBu dW1iZXIgb2YgbGl2ZSBhdHRyaWJ1dGVzICovCiAJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5h dHRzOyBpKyspCiAJewotCQlpZiAoVHVwbGVEZXNjQXR0cihkZXNjLCBpKS0+YXR0aXNkcm9w cGVkIHx8IFR1cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGdlbmVyYXRlZCkKKwkJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihkZXNjLCBpKTsKKworCQlpZiAoYXR0 LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRnZW5lcmF0ZWQpCisJCQljb250aW51ZTsKKwor CQkvKiBYWFggd2Ugc2hvdWxkIGhhdmUgYSBmdW5jdGlvbi9tYWNybyBmb3IgdGhpcyBjaGVj ayAqLworCQlpZiAoY29sdW1ucyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dC0+YXR0 bnVtLCBjb2x1bW5zKSkKIAkJCWNvbnRpbnVlOworCiAJCW5saXZlYXR0cysrOwogCX0KIAlw cV9zZW5kaW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtOTM3LDYgKzk2MCwxMCBAQCBsb2dp Y2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWwpCiAJCWlm IChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVl OwogCisJCS8qIFhYWCB3ZSBzaG91bGQgaGF2ZSBhIGZ1bmN0aW9uL21hY3JvIGZvciB0aGlz IGNoZWNrICovCisJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0 LT5hdHRudW0sIGNvbHVtbnMpKQorCQkJY29udGludWU7CisKIAkJLyogUkVQTElDQSBJREVO VElUWSBGVUxMIG1lYW5zIGFsbCBjb2x1bW5zIGFyZSBzZW50IGFzIHBhcnQgb2Yga2V5LiAq LwogCQlpZiAocmVwbGlkZW50ZnVsbCB8fAogCQkJYm1zX2lzX21lbWJlcihhdHQtPmF0dG51 bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCAxNjU5OTY0NTcxYy4u NDI3MDhkY2Y4MmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIK KyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKQEAgLTcwMCwyMCArNzAxLDIyIEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNo YXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwog CVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlPaWQJCQl0 YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9JRH07Ci0JT2lkCQkJYXR0clJv d1tdID0ge1RFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CisJT2lkCQkJdGFibGVSb3dbXSA9 IHtPSURPSUQsIENIQVJPSUQsIENIQVJPSUQsIEJPT0xPSUR9OworCU9pZAkJCWF0dHJSb3db XSA9IHtJTlQyT0lELCBURVhUT0lELCBPSURPSUQsIEJPT0xPSUR9OwogCU9pZAkJCXF1YWxS b3dbXSA9IHtURVhUT0lEfTsKIAlib29sCQlpc251bGw7CiAJaW50CQkJbmF0dDsKIAlMaXN0 Q2VsbCAgICpsYzsKIAlib29sCQlmaXJzdDsKKwlib29sCQlhbV9wYXJ0aXRpb247CisJQml0 bWFwc2V0ICAqaW5jbHVkZWRfY29scyA9IE5VTEw7CiAKIAlscmVsLT5uc3BuYW1lID0gbnNw bmFtZTsKIAlscmVsLT5yZWxuYW1lID0gcmVsbmFtZTsKIAogCS8qIEZpcnN0IGZldGNoIE9p ZCBhbmQgcmVwbGljYSBpZGVudGl0eS4gKi8KIAlpbml0U3RyaW5nSW5mbygmY21kKTsKLQlh cHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQsIGMucmVscmVwbGlkZW50LCBj LnJlbGtpbmQiCisJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIGMub2lkLCBjLnJl bHJlcGxpZGVudCwgYy5yZWxraW5kLCBjLnJlbGlzcGFydGl0aW9uIgogCQkJCQkgIiAgRlJP TSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMiCiAJCQkJCSAiICBJTk5FUiBKT0lOIHBnX2NhdGFs b2cucGdfbmFtZXNwYWNlIG4iCiAJCQkJCSAiICAgICAgICBPTiAoYy5yZWxuYW1lc3BhY2Ug PSBuLm9pZCkiCkBAIC03NDMsMTQgKzc0NiwyMjUgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2lu Zm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAlBc3NlcnQoIWlzbnVsbCk7CiAJ bHJlbC0+cmVsa2luZCA9IERhdHVtR2V0Q2hhcihzbG90X2dldGF0dHIoc2xvdCwgMywgJmlz bnVsbCkpOwogCUFzc2VydCghaXNudWxsKTsKKwlhbV9wYXJ0aXRpb24gPSBEYXR1bUdldEJv b2woc2xvdF9nZXRhdHRyKHNsb3QsIDQsICZpc251bGwpKTsKKwlBc3NlcnQoIWlzbnVsbCk7 CiAKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCXdhbHJjdl9jbGVh cl9yZXN1bHQocmVzKTsKIAotCS8qIE5vdyBmZXRjaCBjb2x1bW5zLiAqLworCisJLyoKKwkg KiBHZXQgcmVsYXRpb24ncyBjb2x1bW4gZmlsdGVyIGV4cHJlc3Npb25zLgorCSAqCisJICog Rm9yIGluaXRpYWwgc3luY2hyb25pemF0aW9uLCBjb2x1bW4gZmlsdGVyIGNhbiBiZSBpZ25v cmVkIGluIGZvbGxvd2luZworCSAqIGNhc2VzOgorCSAqCisJICogMSkgb25lIG9mIHRoZSBz dWJzY3JpYmVkIHB1YmxpY2F0aW9ucyBmb3IgdGhlIHRhYmxlIGhhc24ndCBzcGVjaWZpZWQK KwkgKiBhbnkgY29sdW1uIGZpbHRlcgorCSAqCisJICogMikgb25lIG9mIHRoZSBzdWJzY3Jp YmVkIHB1YmxpY2F0aW9ucyBoYXMgcHViYWxsdGFibGVzIHNldCB0byB0cnVlCisJICoKKwkg KiAzKSBvbmUgb2YgdGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25zIGlzIGRlY2xhcmVkIGFz IEFMTCBUQUJMRVMgSU4KKwkgKiBTQ0hFTUEgdGhhdCBpbmNsdWRlcyB0aGlzIHJlbGF0aW9u CisJICovCisJaWYgKHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihMb2dSZXBXb3JrZXJXYWxSY3ZD b25uKSA+PSAxNTAwMDApCisJeworCQlXYWxSY3ZFeGVjUmVzdWx0ICpwdWJyZXM7CisJCVR1 cGxlVGFibGVTbG90ICpzbG90OworCQlPaWQJCQlhdHRyc1Jvd1tdID0ge0lOVDJPSUR9Owor CQlPaWQJCQl0bXBSb3dbXSA9IHtJTlQ0T0lEfTsKKwkJU3RyaW5nSW5mb0RhdGEgcHVibGlj YXRpb25zOworCQlib29sCQlmaXJzdCA9IHRydWU7CisJCWJvb2wJCWFsbF9jb2x1bW5zID0g ZmFsc2U7CisKKwkJaW5pdFN0cmluZ0luZm8oJnB1YmxpY2F0aW9ucyk7CisJCWZvcmVhY2go bGMsIE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnMpCisJCXsKKwkJCWlmICghZmlyc3Qp CisJCQkJYXBwZW5kU3RyaW5nSW5mbygmcHVibGljYXRpb25zLCAiLCAiKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJnB1YmxpY2F0aW9ucywgcXVvdGVfbGl0ZXJhbF9jc3RyKHN0 clZhbChsZmlyc3QobGMpKSkpOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCisJCS8qCisJ CSAqIEZpcnN0LCBjaGVjayBpZiBhbnkgb2YgdGhlIHB1YmxpY2F0aW9ucyBGT1IgQUxMIFRB QkxFUz8gSWYgeWVzLCB3ZQorCQkgKiBzaG91bGQgbm90IHVzZSBhbnkgY29sdW1uIGZpbHRl ci4gSXQncyBlbm91Z2ggdG8gZmluZCBhIHNpbmdsZSBzdWNoCisJCSAqIHB1YmxpY2F0aW9u LgorCQkgKgorCQkgKiBYWFggTWF5YmUgd2UgY291bGQgY29tYmluZSBhbGwgdGhyZWUgc3Rl cHMgaW50byBhIHNpbmdsZSBxdWVyeSwgYnV0CisJCSAqIHRoaXMgc2VlbXMgY2xlYW5lciAv IGVhc2llciB0byB1bmRlcnN0YW5kLgorCQkgKgorCQkgKiBYWFggRG9lcyB0aGlzIG5lZWQg YW55IGhhbmRsaW5nIG9mIHBhcnRpdGlvbnMgLyBwdWJsaXNoX3ZpYV9wYXJ0X3Jvb3Q/CisJ CSAqLworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwKKwkJCQkJCSAiU0VMRUNUIDFcbiIKKwkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9u IHBcbiIKKwkJCQkJCSAiIFdIRVJFIHAucHVibmFtZSBJTiAoICVzICkgQU5EIHAucHViYWxs dGFibGVzIExJTUlUIDFcbiIsCisJCQkJCQkgcHVibGljYXRpb25zLmRhdGEpOworCisJCXB1 YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAor CQkJCQkJCSBsZW5ndGhvZih0bXBSb3cpLCB0bXBSb3cpOworCisJCWlmIChwdWJyZXMtPnN0 YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAorCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgZmV0Y2ggcHVibGljYXRpb24gaW5mbyBmb3IgdGFibGUgXCIlcy4lc1wiIGZyb20g cHVibGlzaGVyOiAlcyIsCisJCQkJCQkJbnNwbmFtZSwgcmVsbmFtZSwgcHVicmVzLT5lcnIp KSk7CisKKwkJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChwdWJyZXMtPnR1cGxl ZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisKKwkJaWYgKHR1cGxlc3RvcmVfZ2V0dHVw bGVzbG90KHB1YnJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCQkJYWxs X2NvbHVtbnMgPSB0cnVlOworCisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xv dCk7CisJCXdhbHJjdl9jbGVhcl9yZXN1bHQocHVicmVzKTsKKworCQkvKgorCQkgKiBJZiB0 aGVyZSdzIG5vIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCBsb29rIGZvciBhIEZPUiBB TEwgVEFCTEVTCisJCSAqIElOIFNDSEVNQSBwdWJsaWNhdGlvbiwgd2l0aCBzY2hlbWEgb2Yg dGhlIHJlbW90ZSByZWxhdGlvbi4gVGhlIGxvZ2ljCisJCSAqIGlzIHRoZSBzYW1lIC0gc3Vj aCBwdWJsaWNhdGlvbnMgaGF2ZSBubyBjb2x1bW4gZmlsdGVycy4KKwkJICoKKwkJICogWFhY IERvZXMgdGhpcyBuZWVkIGFueSBoYW5kbGluZyBvZiBwYXJ0aXRpb25zIC8gcHVibGlzaF92 aWFfcGFydF9yb290PworCQkgKi8KKwkJaWYgKCFhbGxfY29sdW1ucykKKwkJeworCQkJcmVz ZXRTdHJpbmdJbmZvKCZjbWQpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJ CSAiU0VMRUNUIDFcbiIKKwkJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwXG4iCisJ CQkJCQkJICIgICAgICAgSk9JTiBwZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgcG4gT04gKHBu LnBucHViaWQgPSBwLm9pZClcbiIKKwkJCQkJCQkgIiAgICAgICBKT0lOIHBnX2NsYXNzIGMg T04gKHBuLnBubnNwaWQgPSBjLnJlbG5hbWVzcGFjZSlcbiIKKwkJCQkJCQkgIiBXSEVSRSBj Lm9pZCA9ICV1IEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIExJTUlUIDEiLAorCQkJCQkJCSBs cmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHVibGljYXRpb25zLmRhdGEpOworCisJCQlwdWJy ZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwKKwkJ CQkJCQkJIGxlbmd0aG9mKHRtcFJvdyksIHRtcFJvdyk7CisKKwkJCWlmIChwdWJyZXMtPnN0 YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgZmV0Y2ggcHVibGljYXRpb24gaW5mbyBmb3IgdGFibGUgXCIlcy4lc1wiIGZy b20gcHVibGlzaGVyOiAlcyIsCisJCQkJCQkJCW5zcG5hbWUsIHJlbG5hbWUsIHB1YnJlcy0+ ZXJyKSkpOworCisJCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHB1YnJlcy0+ dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCQkJaWYgKHR1cGxlc3RvcmVf Z2V0dHVwbGVzbG90KHB1YnJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQor CQkJCWFsbF9jb2x1bW5zID0gdHJ1ZTsKKworCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxl U2xvdChzbG90KTsKKwkJCXdhbHJjdl9jbGVhcl9yZXN1bHQocHVicmVzKTsKKwkJfQorCisJ CS8qCisJCSAqIElmIHdlIGhhdmVuJ3QgZm91bmQgYW55IEZPUiBBTEwgVEFCTEVTIFtJTiBT Q0hFTUFdIHB1YmxpY2F0aW9ucyBmb3IKKwkJICogdGhlIHRhYmxlLCB3ZSBoYXZlIHRvIGxv b2sgZm9yIHRoZSBjb2x1bW4gZmlsdGVycyBzZXQgZm9yIHJlbGF0aW9ucy4KKwkJICogRmly c3QsIHdlIGNoZWNrIGlmIHRoZXJlJ3MgYSBwdWJsaWNhdGlvbiB3aXRoIG5vIGNvbHVtbiBm aWx0ZXIgZm9yCisJCSAqIHRoZSByZWxhdGlvbiAtIHdoaWNoIG1lYW5zIGFsbCBjb2x1bW5z IG5lZWQgdG8gYmUgcmVwbGljYXRlZC4KKwkJICovCisJCWlmICghYWxsX2NvbHVtbnMpCisJ CXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwKKwkJCQkJCQkgIlNFTEVDVCAxXG4iCisJCQkJCQkJICIgIEZST00gcGdfY2F0YWxvZy5w Z19wdWJsaWNhdGlvbiBwIEpPSU5cbiIKKwkJCQkJCQkgIiAgICAgICBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uX3JlbCBwciBPTiAocC5vaWQgPSBwci5wcnB1YmlkKVxuIgorCQkJCQkJ CSAiIFdIRVJFIHAucHVibmFtZSBJTiAoJXMpIEFORCBwci5wcmF0dHJzIElTIE5VTEwgQU5E ICIsCisJCQkJCQkJIHB1YmxpY2F0aW9ucy5kYXRhKTsKKworCQkJLyoKKwkJCSAqIEZvciBu b24tcGFydGl0aW9ucywgd2Ugc2ltcGx5IGpvaW4gZGlyZWN0bHkgdG8gdGhlIGNhdGFsb2cu IEZvcgorCQkJICogcGFydGl0aW9ucywgd2UgbmVlZCB0byBjaGVjayBhbGwgdGhlIGFuY2Vz dG9ycywgYmVjYXVzZSBtYXliZSB0aGUKKwkJCSAqIHJvb3Qgd2FzIG5vdCBhZGRlZCB0byBh IHB1YmxpY2F0aW9uIGJ1dCBvbmUgb2YgdGhlIGludGVybWVkaWF0ZQorCQkJICogcGFydGl0 aW9ucyB3YXMuCisJCQkgKi8KKwkJCWlmICghYW1fcGFydGl0aW9uKQorCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmNtZCwgInBycmVsaWQgPSAldSIsIGxyZWwtPnJlbW90ZWlkKTsKKwkJCWVs c2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJCSAicHJyZWxpZCBJTiAo U0VMRUNUIHJlbGlkXG4iCisJCQkJCQkJCSAiICAgIEZST00gcGdfY2F0YWxvZy5wZ19wYXJ0 aXRpb25fdHJlZShwZ19jYXRhbG9nLnBnX3BhcnRpdGlvbl9yb290KCV1KSkpIiwKKwkJCQkJ CQkJIGxyZWwtPnJlbW90ZWlkKTsKKworCQkJcHVicmVzID0gd2FscmN2X2V4ZWMoTG9nUmVw V29ya2VyV2FsUmN2Q29ubiwgY21kLmRhdGEsCisJCQkJCQkJCSBsZW5ndGhvZih0bXBSb3cp LCB0bXBSb3cpOworCisJCQlpZiAocHVicmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExF UykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNU SU9OX0ZBSUxVUkUpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IGZldGNoIGF0dHJpYnV0 ZSBpbmZvIGZvciB0YWJsZSBcIiVzLiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJ CQkJbnNwbmFtZSwgcmVsbmFtZSwgcHVicmVzLT5lcnIpKSk7CisKKwkJCXNsb3QgPSBNYWtl U2luZ2xlVHVwbGVUYWJsZVNsb3QocHVicmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFs VHVwbGUpOworCisJCQlpZiAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocHVicmVzLT50dXBs ZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJCQkJYWxsX2NvbHVtbnMgPSB0cnVlOwor CisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCQkJd2FscmN2X2Ns ZWFyX3Jlc3VsdChwdWJyZXMpOworCQl9CisKKwkJLyoKKwkJICogQWxsIHRoYXQgCisJCSAq LworCQlpZiAoIWFsbF9jb2x1bW5zKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1QgdW5uZXN0KHBy LnByYXR0cnMpXG4iCisJCQkJCQkJICIgIEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlv biBwIEpPSU5cbiIKKwkJCQkJCQkgIiAgICAgICBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u X3JlbCBwciBPTiAocC5vaWQgPSBwci5wcnB1YmlkKVxuIgorCQkJCQkJCSAiIFdIRVJFIHAu cHVibmFtZSBJTiAoJXMpIEFORCBwci5wcmF0dHJzIElTIE5PVCBOVUxMIEFORCAiLAorCQkJ CQkJCSBwdWJsaWNhdGlvbnMuZGF0YSk7CisKKwkJCS8qCisJCQkgKiBGb3Igbm9uLXBhcnRp dGlvbnMsIHdlIHNpbXBseSBqb2luIGRpcmVjdGx5IHRvIHRoZSBjYXRhbG9nLiBGb3IKKwkJ CSAqIHBhcnRpdGlvbnMsIHdlIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBhbmNlc3RvcnMsIGJl Y2F1c2UgbWF5YmUgdGhlCisJCQkgKiByb290IHdhcyBub3QgYWRkZWQgdG8gYSBwdWJsaWNh dGlvbiBidXQgb25lIG9mIHRoZSBpbnRlcm1lZGlhdGUKKwkJCSAqIHBhcnRpdGlvbnMgd2Fz LgorCQkJICovCisJCQlpZiAoIWFtX3BhcnRpdGlvbikKKwkJCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsICJwcnJlbGlkID0gJXUiLCBscmVsLT5yZW1vdGVpZCk7CisJCQllbHNlCisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCQkgInBycmVsaWQgSU4gKFNFTEVDVCBy ZWxpZFxuIgorCQkJCQkJCQkgIiAgICBGUk9NIHBnX2NhdGFsb2cucGdfcGFydGl0aW9uX3Ry ZWUocGdfY2F0YWxvZy5wZ19wYXJ0aXRpb25fcm9vdCgldSkpKSIsCisJCQkJCQkJCSBscmVs LT5yZW1vdGVpZCk7CisKKwkJCXB1YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldh bFJjdkNvbm4sIGNtZC5kYXRhLAorCQkJCQkJCQkgbGVuZ3Rob2YoYXR0cnNSb3cpLCBhdHRy c1Jvdyk7CisKKwkJCWlmIChwdWJyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05f RkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggYXR0cmlidXRlIGlu Zm8gZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJCQlu c3BuYW1lLCByZWxuYW1lLCBwdWJyZXMtPmVycikpKTsKKworCQkJc2xvdCA9IE1ha2VTaW5n bGVUdXBsZVRhYmxlU2xvdChwdWJyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBs ZSk7CisJCQl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocHVicmVzLT50dXBsZXN0 b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJCQl7CisJCQkJQXR0ck51bWJlcglhdHRudW07 CisKKwkJCQlhdHRudW0gPSBEYXR1bUdldEludDE2KHNsb3RfZ2V0YXR0cihzbG90LCAxLCAm aXNudWxsKSk7CisJCQkJQXNzZXJ0KCFpc251bGwpOworCisJCQkJaW5jbHVkZWRfY29scyA9 IGJtc19hZGRfbWVtYmVyKGluY2x1ZGVkX2NvbHMsIGF0dG51bSk7CisJCQl9CisJCQlFeGVj RHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCQkJd2FscmN2X2NsZWFyX3Jlc3Vs dChwdWJyZXMpOworCQl9CisKKwkJcGZyZWUocHVibGljYXRpb25zLmRhdGEpOworCX0KKwor CS8qCisJICogTm93IGZldGNoIGNvbHVtbiBuYW1lcyBhbmQgdHlwZXMuCisJICovCiAJcmVz ZXRTdHJpbmdJbmZvKCZjbWQpOwogCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKLQkJCQkJICJT RUxFQ1QgYS5hdHRuYW1lLCIKKwkJCQkJICJTRUxFQ1QgYS5hdHRudW0sIgorCQkJCQkgIiAg ICAgICBhLmF0dG5hbWUsIgogCQkJCQkgIiAgICAgICBhLmF0dHR5cGlkLCIKIAkJCQkJICIg ICAgICAgYS5hdHRudW0gPSBBTlkoaS5pbmRrZXkpIgogCQkJCQkgIiAgRlJPTSBwZ19jYXRh bG9nLnBnX2F0dHJpYnV0ZSBhIgpAQCAtNzc4LDE2ICs5OTIsMzQgQEAgZmV0Y2hfcmVtb3Rl X3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAlscmVsLT5hdHR0 eXBzID0gcGFsbG9jMChNYXhUdXBsZUF0dHJpYnV0ZU51bWJlciAqIHNpemVvZihPaWQpKTsK IAlscmVsLT5hdHRrZXlzID0gTlVMTDsKIAorCS8qCisJICogU3RvcmUgdGhlIGNvbHVtbnMg YXMgYSBsaXN0IG9mIG5hbWVzLiAgSWdub3JlIHRob3NlIHRoYXQgYXJlIG5vdAorCSAqIHBy ZXNlbnQgaW4gdGhlIGNvbHVtbiBsaXN0LCBpZiB0aGVyZSBpcyBvbmUuCisJICovCiAJbmF0 dCA9IDA7CiAJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVz YywgJlRUU09wc01pbmltYWxUdXBsZSk7CiAJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVz bG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQogCXsKLQkJbHJlbC0+ YXR0bmFtZXNbbmF0dF0gPQotCQkJVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIo c2xvdCwgMSwgJmlzbnVsbCkpOworCQljaGFyCSAgICpyZWxfY29sbmFtZTsKKwkJQXR0ck51 bWJlcglhdHRudW07CisKKwkJYXR0bnVtID0gRGF0dW1HZXRJbnQxNihzbG90X2dldGF0dHIo c2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJaWYgKGluY2x1 ZGVkX2NvbHMgIT0gTlVMTCAmJiAhYm1zX2lzX21lbWJlcihhdHRudW0sIGluY2x1ZGVkX2Nv bHMpKQorCQl7CisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJcmVsX2NvbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihz bG90LCAyLCAmaXNudWxsKSk7CiAJCUFzc2VydCghaXNudWxsKTsKLQkJbHJlbC0+YXR0dHlw c1tuYXR0XSA9IERhdHVtR2V0T2JqZWN0SWQoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251 bGwpKTsKKworCQlscmVsLT5hdHRuYW1lc1tuYXR0XSA9IHJlbF9jb2xuYW1lOworCQlscmVs LT5hdHR0eXBzW25hdHRdID0gRGF0dW1HZXRPYmplY3RJZChzbG90X2dldGF0dHIoc2xvdCwg MywgJmlzbnVsbCkpOwogCQlBc3NlcnQoIWlzbnVsbCk7Ci0JCWlmIChEYXR1bUdldEJvb2wo c2xvdF9nZXRhdHRyKHNsb3QsIDMsICZpc251bGwpKSkKKworCQlpZiAoRGF0dW1HZXRCb29s KHNsb3RfZ2V0YXR0cihzbG90LCA0LCAmaXNudWxsKSkpCiAJCQlscmVsLT5hdHRrZXlzID0g Ym1zX2FkZF9tZW1iZXIobHJlbC0+YXR0a2V5cywgbmF0dCk7CiAKIAkJLyogU2hvdWxkIG5l dmVyIGhhcHBlbi4gKi8KQEAgLTgyMSw2ICsxMDUzLDkgQEAgZmV0Y2hfcmVtb3RlX3RhYmxl X2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAkgKgogCSAqIDMpIG9uZSBv ZiB0aGUgc3Vic2NyaWJlZCBwdWJsaWNhdGlvbnMgaXMgZGVjbGFyZWQgYXMgQUxMIFRBQkxF UyBJTgogCSAqIFNDSEVNQSB0aGF0IGluY2x1ZGVzIHRoaXMgcmVsYXRpb24KKwkgKgorCSAq IFhYWCBEb2VzIHRoaXMgYWN0dWFsbHkgaGFuZGxlIHB1YmFsbHRhYmxlcyBhbmQgc2NoZW1h IHB1YmxpY2F0aW9ucworCSAqIGNvcnJlY3RseT8KIAkgKi8KIAlpZiAod2FscmN2X3NlcnZl cl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE1MDAwMCkKIAl7CkBAIC05 MzAsOCArMTE2NSwyNCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAogCS8qIFJlZ3Vs YXIgdGFibGUgd2l0aCBubyByb3cgZmlsdGVyICovCiAJaWYgKGxyZWwucmVsa2luZCA9PSBS RUxLSU5EX1JFTEFUSU9OICYmIHF1YWwgPT0gTklMKQotCQlhcHBlbmRTdHJpbmdJbmZvKCZj bWQsICJDT1BZICVzIFRPIFNURE9VVCIsCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQs ICJDT1BZICVzICgiLAogCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwu bnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7CisKKwkJLyoKKwkJICogWFhYIERvIHdlIG5lZWQg dG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJlIHdlJ3JlIHJlcGxpY2F0 aW5nCisJCSAqIGFsbCBjb2x1bW5zPworCQkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBs cmVsLm5hdHRzOyBpKyspCisJCXsKKwkJCWlmIChpID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZjbWQsICIsICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj bWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQl9CisKKwkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLCAiKSBUTyBTVERPVVQiKTsKKwl9CiAJZWxzZQogCXsKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmlu ZGV4IGVhNTdhMDQ3N2YwLi4xNjIzOWNjNjg2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk ZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1 ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCkBA IC04NSw3ICs4Niw4IEBAIHN0YXRpYyBMaXN0ICpMb2FkUHVibGljYXRpb25zKExpc3QgKnB1 Ym5hbWVzKTsKIHN0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYihEYXR1 bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCXVpbnQzMiBoYXNodmFsdWUpOwogc3Rh dGljIHZvaWQgc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIFRy YW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 KTsKKwkJCQkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCUJp dG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMgdm9pZCBzZW5kX3JlcGxfb3JpZ2luKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVwT3JpZ2luSWQgb3JpZ2luX2lk LCBYTG9nUmVjUHRyIG9yaWdpbl9sc24sCiAJCQkJCQkJIGJvb2wgc2VuZF9vcmlnaW4pOwpA QCAtMTY0LDYgKzE2NiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvblN5bmNFbnRyeQog CSAqIGhhdmluZyBpZGVudGljYWwgVHVwbGVEZXNjLgogCSAqLwogCUF0dHJNYXAgICAgKmF0 dHJtYXA7CisKKwkvKgorCSAqIENvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0aW9u LCBvciBOVUxMIGlmIGFsbCBjb2x1bW5zIGFyZQorCSAqIGluY2x1ZGVkIGltcGxpY2l0bHku ICBOb3RlIHRoYXQgdGhlIGF0dG51bXMgaW4gdGhpcyBiaXRtYXAgYXJlIG5vdAorCSAqIHNo aWZ0ZWQgYnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlci4KKwkgKi8KKwlC aXRtYXBzZXQgICpjb2x1bW5zOwogfSBSZWxhdGlvblN5bmNFbnRyeTsKIAogLyogTWFwIHVz ZWQgdG8gcmVtZW1iZXIgd2hpY2ggcmVsYXRpb24gc2NoZW1hcyB3ZSBzZW50LiAqLwpAQCAt NjAzLDExICs2MTIsMTEgQEAgbWF5YmVfc2VuZF9zY2hlbWEoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAogCXsKIAkJUmVsYXRpb24JYW5jZXN0b3IgPSBSZWxhdGlvbklkR2V0UmVs YXRpb24ocmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpOwogCi0JCXNlbmRfcmVsYXRpb25f YW5kX2F0dHJzKGFuY2VzdG9yLCB4aWQsIGN0eCk7CisJCXNlbmRfcmVsYXRpb25fYW5kX2F0 dHJzKGFuY2VzdG9yLCB4aWQsIGN0eCwgcmVsZW50cnktPmNvbHVtbnMpOwogCQlSZWxhdGlv bkNsb3NlKGFuY2VzdG9yKTsKIAl9CiAKLQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhyZWxh dGlvbiwgeGlkLCBjdHgpOworCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKHJlbGF0aW9uLCB4 aWQsIGN0eCwgcmVsZW50cnktPmNvbHVtbnMpOwogCiAJaWYgKGluX3N0cmVhbWluZykKIAkJ c2V0X3NjaGVtYV9zZW50X2luX3N0cmVhbWVkX3R4bihyZWxlbnRyeSwgdG9weGlkKTsKQEAg LTYyMCw3ICs2MjksOCBAQCBtYXliZV9zZW5kX3NjaGVtYShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAgKi8KIHN0YXRpYyB2b2lkCiBzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhS ZWxhdGlvbiByZWxhdGlvbiwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQlMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgpCisJCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CisJCQkJCQlCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAlpbnQJCQlpOwpAQCAtNjQzLDEzICs2NTMsMTcg QEAgc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQlpZiAoYXR0LT5hdHR0eXBpZCA8IEZpcnN0R2VuYmtpT2JqZWN0SWQp CiAJCQljb250aW51ZTsKIAorCQkvKiBTa2lwIHRoaXMgYXR0cmlidXRlIGlmIGl0J3Mgbm90 IHByZXNlbnQgaW4gdGhlIGNvbHVtbiBsaXN0ICovCisJCWlmIChjb2x1bW5zICE9IE5VTEwg JiYgIWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0sIGNvbHVtbnMpKQorCQkJY29udGludWU7 CisKIAkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgZmFsc2UpOwogCQlsb2dpY2Fs cmVwX3dyaXRlX3R5cChjdHgtPm91dCwgeGlkLCBhdHQtPmF0dHR5cGlkKTsKIAkJT3V0cHV0 UGx1Z2luV3JpdGUoY3R4LCBmYWxzZSk7CiAJfQogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdy aXRlKGN0eCwgZmFsc2UpOwotCWxvZ2ljYWxyZXBfd3JpdGVfcmVsKGN0eC0+b3V0LCB4aWQs IHJlbGF0aW9uKTsKKwlsb2dpY2FscmVwX3dyaXRlX3JlbChjdHgtPm91dCwgeGlkLCByZWxh dGlvbiwgY29sdW1ucyk7CiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCBmYWxzZSk7CiB9CiAK QEAgLTEyMjQsNyArMTIzOCw3IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJT3V0cHV0UGx1Z2lu UHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChj dHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+Ymlu YXJ5KTsKKwkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwogCQkJ T3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xMjc4LDExICsxMjkyLDEzIEBAIHBnb3V0 cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCXsKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQ6 CiAJCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJl bCwKLQkJCQkJCQkJCQkJbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSk7CisJCQkJCQkJCQkJCW5l d19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsK IAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgog CQkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWws Ci0JCQkJCQkJCQkJCW9sZF9zbG90LCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5KTsKKwkJCQkJ CQkJCQkJb2xkX3Nsb3QsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJCXJl bGVudHJ5LT5jb2x1bW5zKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfREVMRVRFOgogCQkJCQlsb2dpY2FscmVwX3dyaXRlX2RlbGV0ZShjdHgtPm91 dCwgeGlkLCB0YXJnZXRyZWwsCkBAIC0xNzMxLDYgKzE3NDcsNyBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJbWVtc2V0 KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CiAJCWVu dHJ5LT5jYWNoZV9leHByX2N4dCA9IE5VTEw7CiAJCWVudHJ5LT5wdWJsaXNoX2FzX3JlbGlk ID0gSW52YWxpZE9pZDsKKwkJZW50cnktPmNvbHVtbnMgPSBOVUxMOwogCQllbnRyeS0+YXR0 cm1hcCA9IE5VTEw7CiAJfQogCkBAIC0xNzc1LDYgKzE3OTIsOCBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnkt PnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWxpc3RfZnJlZShlbnRyeS0+c3RyZWFtZWRfdHhu cyk7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOworCQlibXNfZnJlZShlbnRyeS0+ Y29sdW1ucyk7CisJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViaW5zZXJ0ID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9 IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKQEAgLTE4 MDcsMTMgKzE4MjYsMTYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0 YSwgUmVsYXRpb24gcmVsYXRpb24pCiAKIAkJLyoKIAkJICogQnVpbGQgcHVibGljYXRpb24g Y2FjaGUuIFdlIGNhbid0IHVzZSBvbmUgcHJvdmlkZWQgYnkgcmVsY2FjaGUgYXMKLQkJICog cmVsY2FjaGUgY29uc2lkZXJzIGFsbCBwdWJsaWNhdGlvbnMgZ2l2ZW4gcmVsYXRpb24gaXMg aW4sIGJ1dCBoZXJlCi0JCSAqIHdlIG9ubHkgbmVlZCB0byBjb25zaWRlciBvbmVzIHRoYXQg dGhlIHN1YnNjcmliZXIgcmVxdWVzdGVkLgorCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxs IHB1YmxpY2F0aW9ucyB0aGF0IHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiwKKwkJICogYnV0 IGhlcmUgd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIG9uZXMgdGhhdCB0aGUgc3Vic2NyaWJl cgorCQkgKiByZXF1ZXN0ZWQuCiAJCSAqLwogCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNh dGlvbnMpCiAJCXsKIAkJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOwogCQkJYm9v bAkJcHVibGlzaCA9IGZhbHNlOworCQkJYm9vbAkJYW5jZXN0b3JfcHVibGlzaGVkID0gZmFs c2U7CisJCQlib29sCQlhbGxfY29sdW1ucyA9IGZhbHNlOwogCiAJCQlpZiAocHViLT5hbGx0 YWJsZXMpCiAJCQl7CkBAIC0xODI0LDggKzE4NDYsNiBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAogCQkJaWYgKCFwdWJs aXNoKQogCQkJewotCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOwotCiAJ CQkJLyoKIAkJCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNoZWNrIGlmIGFueSBvZiB0aGUgYW5j ZXN0b3JzIGFyZQogCQkJCSAqIHB1Ymxpc2hlZC4gIElmIHNvLCBub3RlIGRvd24gdGhlIHRv cG1vc3QgYW5jZXN0b3IgdGhhdCBpcwpAQCAtMTg1NSw2ICsxODc1LDkgQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQl9 CiAKIAkJCS8qCisJCQkgKiBJZiB0aGUgcmVsYXRpb24gaXMgdG8gYmUgcHVibGlzaGVkLCBk ZXRlcm1pbmUgYWN0aW9ucyB0bworCQkJICogcHVibGlzaCwgYW5kIGxpc3Qgb2YgY29sdW1u cywgaWYgYXBwcm9wcmlhdGUuCisJCQkgKgogCQkJICogRG9uJ3QgcHVibGlzaCBjaGFuZ2Vz IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIGJlY2F1c2UKIAkJCSAqIHB1Ymxpc2hpbmcgdGhv c2Ugb2YgaXRzIHBhcnRpdGlvbnMgc3VmZmljZXMsIHVubGVzcyBwYXJ0aXRpb24KIAkJCSAq IGNoYW5nZXMgd29uJ3QgYmUgcHVibGlzaGVkIGR1ZSB0byBwdWJ2aWFyb290IGJlaW5nIHNl dC4KQEAgLTE4NjcsNiArMTg5MCw4MCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5w dWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CiAK KwkJCQkvKgorCQkJCSAqIFRoaXMgbWlnaHQgYmUgRk9SIEFMTCBUQUJMRVMgb3IgRk9SIEFM TCBUQUJMRVMgSU4gU0NIRU1BCisJCQkJICogcHVibGljYXRpb24sIGluIHdoaWNoIGNhc2Ug dGhlcmUgYXJlIG5vIGNvbHVtbiBsaXN0cywgYW5kCisJCQkJICogd2UgdHJlYXQgdGhhdCBh cyBhbGxfY29sdW1ucz10cnVlLgorCQkJCSAqLworCQkJCWlmIChwdWItPmFsbHRhYmxlcyB8 fAorCQkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkpCisJCQkJ eworCQkJCQlhbGxfY29sdW1ucyA9IHRydWU7CisJCQkJCWJtc19mcmVlKGVudHJ5LT5jb2x1 bW5zKTsKKwkJCQkJZW50cnktPmNvbHVtbnMgPSBOVUxMOworCQkJCX0KKworCQkJCS8qCisJ CQkJICogT2J0YWluIGNvbHVtbnMgcHVibGlzaGVkIGJ5IHRoaXMgcHVibGljYXRpb24sIGFu ZCBhZGQgdGhlbQorCQkJCSAqIHRvIHRoZSBsaXN0IGZvciB0aGlzIHJlbC4gIE5vdGUgdGhh dCBpZiBhdCBsZWFzdCBvbmUKKwkJCQkgKiBwdWJsaWNhdGlvbiBoYXMgYW4gZW1wdHkgY29s dW1uIGxpc3QsIHRoYXQgbWVhbnMgdG8gcHVibGlzaAorCQkJCSAqIGV2ZXJ5dGhpbmc7IHNv IGlmIHdlIHNhdyBhIHB1YmxpY2F0aW9uIHRoYXQgaW5jbHVkZXMgYWxsCisJCQkJICogY29s dW1ucywgc2tpcCB0aGlzLgorCQkJCSAqCisJCQkJICogRklYTUUgVGhpcyBmYWlscyB0byBj b25zaWRlciBjb2x1bW4gZmlsdGVycyBkZWZpbmVkIGluCisJCQkJICogRk9SIEFMTCBUQUJM RVMgYW5kIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJsaWNhdGlvbnMuCisJCQkJICog V2UgbmVlZCB0byBjaGVjayB0aG9zZSB0b28uCisJCQkJICovCisJCQkJaWYgKCFhbGxfY29s dW1ucykKKwkJCQl7CisJCQkJCUhlYXBUdXBsZQlwdWJfcmVsX3R1cGxlOworCisJCQkJCXB1 Yl9yZWxfdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJ CQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShwdWJsaXNoX2FzX3JlbGlkKSwKKwkJCQkJCQkJ CQkJCQlPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSk7CisKKwkJCQkJaWYgKEhlYXBUdXBs ZUlzVmFsaWQocHViX3JlbF90dXBsZSkpCisJCQkJCXsKKwkJCQkJCURhdHVtCQlwdWJfcmVs X2NvbHM7CisJCQkJCQlib29sCQlpc251bGw7CisKKwkJCQkJCXB1Yl9yZWxfY29scyA9IFN5 c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCQkJCQkJCQkgICBwdWJf cmVsX3R1cGxlLAorCQkJCQkJCQkJCQkJCSAgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3By YXR0cnMsCisJCQkJCQkJCQkJCQkJICAgJmlzbnVsbCk7CisJCQkJCQlpZiAoaXNudWxsKQor CQkJCQkJeworCQkJCQkJCS8qCisJCQkJCQkJICogSWYgd2Ugc2VlIGEgcHVibGljYXRpb24g d2l0aCBubyBjb2x1bW4gZmlsdGVyLCBpdAorCQkJCQkJCSAqIG1lYW5zIHdlIG5lZWQgdG8g cHVibGlzaCBhbGwgY29sdW1ucywgc28gcmVzZXQgdGhlCisJCQkJCQkJICogbGlzdCBhbmQg aWdub3JlIGZ1cnRoZXIgb25lcy4KKwkJCQkJCQkgKi8KKwkJCQkJCQlhbGxfY29sdW1ucyA9 IHRydWU7CisJCQkJCQkJYm1zX2ZyZWUoZW50cnktPmNvbHVtbnMpOworCQkJCQkJCWVudHJ5 LT5jb2x1bW5zID0gTlVMTDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJ CQlBcnJheVR5cGUgICphcnI7CisJCQkJCQkJaW50CQkJbmVsZW1zOworCQkJCQkJCWludDE2 CSAgICplbGVtczsKKworCQkJCQkJCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChwdWJfcmVs X2NvbHMpOworCQkJCQkJCW5lbGVtcyA9IEFSUl9ESU1TKGFycilbMF07CisJCQkJCQkJZWxl bXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGFycik7CisKKwkJCQkJCQkvKiBYWFggaXMg dGhlcmUgYSBkYW5nZXIgb2YgbWVtb3J5IGxlYWsgaGVyZT8gYmV3YXJlICovCisJCQkJCQkJ b2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CisJ CQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykKKwkJCQkJCQkJZW50cnkt PmNvbHVtbnMgPSBibXNfYWRkX21lbWJlcihlbnRyeS0+Y29sdW1ucywKKwkJCQkJCQkJCQkJ CQkJCQllbGVtc1tpXSk7CisJCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7 CisJCQkJCQl9CisKKwkJCQkJCVJlbGVhc2VTeXNDYWNoZShwdWJfcmVsX3R1cGxlKTsKKwkJ CQkJfQorCQkJCX0KKwogCQkJCXJlbF9wdWJsaWNhdGlvbnMgPSBsYXBwZW5kKHJlbF9wdWJs aWNhdGlvbnMsIHB1Yik7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGU2OWRjZjhh NDg0Li5mMjA4YzdhNmM1OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC00MDc1LDYgKzQwNzUsNyBA QCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5m b1tdLCBpbnQgbnVtVGFibGVzKQogCWludAkJCWlfcHJwdWJpZDsKIAlpbnQJCQlpX3BycmVs aWQ7CiAJaW50CQkJaV9wcnJlbHF1YWw7CisJaW50CQkJaV9wcmF0dHJzOwogCWludAkJCWks CiAJCQkJaiwKIAkJCQludHVwczsKQEAgLTQwODgsMTIgKzQwODksMjAgQEAgZ2V0UHVibGlj YXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51 bVRhYmxlcykKIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBvaWQs IHBycHViaWQsIHBycmVsaWQsICIKLQkJCQkJCQkgInBnX2NhdGFsb2cucGdfZ2V0X2V4cHIo cHJxdWFsLCBwcnJlbGlkKSBBUyBwcnJlbHF1YWwgIgotCQkJCQkJCSAiRlJPTSBwZ19jYXRh bG9nLnBnX3B1YmxpY2F0aW9uX3JlbCIpOworCQkJCQkJCSAicGdfY2F0YWxvZy5wZ19nZXRf ZXhwcihwcnF1YWwsIHBycmVsaWQpIEFTIHBycmVscXVhbCwgIgorCQkJCQkJCSAiKENBU0Vc biIKKwkJCQkJCQkgIiAgV0hFTiBwci5wcmF0dHJzIElTIE5PVCBOVUxMIFRIRU5cbiIKKwkJ CQkJCQkgIiAgICAoU0VMRUNUIGFycmF5X2FnZyhhdHRuYW1lKVxuIgorCQkJCQkJCSAiICAg ICAgIEZST01cbiIKKwkJCQkJCQkgIiAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2Vy aWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHIucHJhdHRyczo6cGdfY2F0YWxvZy5p bnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCSAiICAgICAgICAgcGdfY2F0YWxvZy5wZ19hdHRy aWJ1dGVcbiIKKwkJCQkJCQkgIiAgICAgIFdIRVJFIGF0dHJlbGlkID0gcHIucHJyZWxpZCBB TkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIKKwkJCQkJCQkgIiAgRUxTRSBOVUxMIEVORCkg cHJhdHRycyAiCisJCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVs IHByIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkg IlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCi0JCQkJCQkJICJO VUxMIEFTIHBycmVscXVhbCAiCisJCQkJCQkJICJOVUxMIEFTIHBycmVscXVhbCwgTlVMTCBB UyBwcmF0dHJzICIKIAkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9y ZWwiKTsKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVT X1RVUExFU19PSyk7CiAKQEAgLTQxMDQsNiArNDExMyw3IEBAIGdldFB1YmxpY2F0aW9uVGFi bGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMp CiAJaV9wcnB1YmlkID0gUFFmbnVtYmVyKHJlcywgInBycHViaWQiKTsKIAlpX3BycmVsaWQg PSBQUWZudW1iZXIocmVzLCAicHJyZWxpZCIpOwogCWlfcHJyZWxxdWFsID0gUFFmbnVtYmVy KHJlcywgInBycmVscXVhbCIpOworCWlfcHJhdHRycyA9IFBRZm51bWJlcihyZXMsICJwcmF0 dHJzIik7CiAKIAkvKiB0aGlzIGFsbG9jYXRpb24gbWF5IGJlIG1vcmUgdGhhbiB3ZSBuZWVk ICovCiAJcHVicmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25S ZWxJbmZvKSk7CkBAIC00MTQ5LDYgKzQxNTksMjggQEAgZ2V0UHVibGljYXRpb25UYWJsZXMo QXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAkJ ZWxzZQogCQkJcHVicmluZm9bal0ucHVicmVscXVhbCA9IHBnX3N0cmR1cChQUWdldHZhbHVl KHJlcywgaSwgaV9wcnJlbHF1YWwpKTsKIAorCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwg aV9wcmF0dHJzKSkKKwkJeworCQkJY2hhcgkgICoqYXR0bmFtZXM7CisJCQlpbnQJCQluYXR0 bmFtZXM7CisJCQlQUUV4cEJ1ZmZlciBhdHRyaWJzOworCisJCQlpZiAoIXBhcnNlUEdBcnJh eShQUWdldHZhbHVlKHJlcywgaSwgaV9wcmF0dHJzKSwKKwkJCQkJCQkgICZhdHRuYW1lcywg Jm5hdHRuYW1lcykpCisJCQkJZmF0YWwoImNvdWxkIG5vdCBwYXJzZSAlcyBhcnJheSIsICJw cmF0dHJzIik7CisJCQlhdHRyaWJzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwkJCWZvciAo aW50IGsgPSAwOyBrIDwgbmF0dG5hbWVzOyBrKyspCisJCQl7CisJCQkJaWYgKGsgPiAwKQor CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihhdHRyaWJzLCAiLCAiKTsKKworCQkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKGF0dHJpYnMsIGZtdElkKGF0dG5hbWVzW2tdKSk7CisJCQl9CisJ CQlwdWJyaW5mb1tqXS5wdWJyYXR0cnMgPSBhdHRyaWJzLT5kYXRhOworCQl9CisJCWVsc2UK KwkJCXB1YnJpbmZvW2pdLnB1YnJhdHRycyA9IE5VTEw7CisKIAkJLyogRGVjaWRlIHdoZXRo ZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVjdER1bXBhYmxlUHVibGljYXRpb25P YmplY3QoJihwdWJyaW5mb1tqXS5kb2JqKSwgZm91dCk7CiAKQEAgLTQyMjMsMTAgKzQyNTUs MTMgQEAgZHVtcFB1YmxpY2F0aW9uVGFibGUoQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGlj YXRpb25SZWxJbmZvICpwdWJyaW5mbykKIAogCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKIAotCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiQUxURVIgUFVCTElDQVRJT04gJXMg QUREIFRBQkxFIE9OTFkiLAorCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiQUxURVIgUFVC TElDQVRJT04gJXMgQUREIFRBQkxFIE9OTFkgIiwKIAkJCQkJICBmbXRJZChwdWJpbmZvLT5k b2JqLm5hbWUpKTsKLQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiAlcyIsCi0JCQkJCSAg Zm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbykpOworCisJaWYgKHB1YnJpbmZv LT5wdWJyYXR0cnMpCisJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiICglcykiLCBwdWJy aW5mby0+cHVicmF0dHJzKTsKKwogCWlmIChwdWJyaW5mby0+cHVicmVscXVhbCkKIAl7CiAJ CS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaAppbmRleCA5OTdhM2I2MDcxOS4uNjgwYjA3ZGNkNTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuaApAQCAtNjMyLDYgKzYzMiw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNh dGlvblJlbEluZm8KIAlQdWJsaWNhdGlvbkluZm8gKnB1YmxpY2F0aW9uOwogCVRhYmxlSW5m byAgKnB1YnRhYmxlOwogCWNoYXIJICAgKnB1YnJlbHF1YWw7CisJY2hhcgkgICAqcHVicmF0 dHJzOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19k dW1wLnBsCmluZGV4IGMzYmNlZjhjMGVjLi4xZmVkY2RiNDQyZiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Qv MDAyX3BnX2R1bXAucGwKQEAgLTI0MTgsNiArMjQxOCwyOCBAQCBteSAldGVzdHMgPSAoCiAJ CXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAogCX0sCiAK KwknQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgdGVzdF9zaXh0aF90YWJsZSAo Y29sMywgY29sMiknID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDUyLAorCQljcmVhdGVfc3Fs ID0+CisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIGR1bXBfdGVzdC50 ZXN0X3NpeHRoX3RhYmxlIChjb2wzLCBjb2wyKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJ XFFBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJMRSBPTkxZIGR1bXBfdGVzdC50ZXN0 X3NpeHRoX3RhYmxlIChjb2wyLCBjb2wzKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1 bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwkJdW5saWtlID0+IHsgZXhj bHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJfSwKKworCSdBTFRFUiBQVUJMSUNB VElPTiBwdWIxIEFERCBUQUJMRSB0ZXN0X3NldmVudGhfdGFibGUgKGNvbDMsIGNvbDIpIFdI RVJFIChjb2wxID0gMSknID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDUyLAorCQljcmVhdGVf c3FsID0+CisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIGR1bXBfdGVz dC50ZXN0X3NldmVudGhfdGFibGUgKGNvbDMsIGNvbDIpIFdIRVJFIChjb2wxID0gMSk7JywK KwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFC TEUgT05MWSBkdW1wX3Rlc3QudGVzdF9zZXZlbnRoX3RhYmxlIChjb2wyLCBjb2wzKSBXSEVS RSAoKGNvbDEgPSAxKSk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNl Y3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCisJCXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90 ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKIAknQUxURVIgUFVCTElDQVRJT04gcHViMyBB REQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgZHVtcF90ZXN0JyA9PiB7CiAJCWNyZWF0ZV9vcmRl ciA9PiA1MSwKIAkJY3JlYXRlX3NxbCA9PgpAQCAtMjc0Myw2ICsyNzY1LDQ0IEBAIG15ICV0 ZXN0cyA9ICgKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEs IH0sCiAJfSwKIAorCSdDUkVBVEUgVEFCTEUgdGVzdF9zaXh0aF90YWJsZScgPT4geworCQlj cmVhdGVfb3JkZXIgPT4gNiwKKwkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgVEFCTEUgZHVt cF90ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKAorCQkJCQkJICAgY29sMSBpbnQsCisJCQkJCQkg ICBjb2wyIHRleHQsCisJCQkJCQkgICBjb2wzIGJ5dGVhCisJCQkJCSAgICk7JywKKwkJcmVn ZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NpeHRoX3Rh YmxlIChcRQorCQkJXG5ccytcUWNvbDEgaW50ZWdlcixcRQorCQkJXG5ccytcUWNvbDIgdGV4 dCxcRQorCQkJXG5ccytcUWNvbDMgYnl0ZWFcRQorCQkJXG5cKTsKKwkJCS94bSwKKwkJbGlr ZSA9PgorCQkgIHsgJWZ1bGxfcnVucywgJWR1bXBfdGVzdF9zY2hlbWFfcnVucywgc2VjdGlv bl9wcmVfZGF0YSA9PiAxLCB9LAorCQl1bmxpa2UgPT4geyBleGNsdWRlX2R1bXBfdGVzdF9z Y2hlbWEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBUQUJMRSB0ZXN0X3NldmVudGhfdGFi bGUnID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDYsCisJCWNyZWF0ZV9zcWwgICA9PiAnQ1JF QVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NldmVudGhfdGFibGUgKAorCQkJCQkJICAgY29s MSBpbnQsCisJCQkJCQkgICBjb2wyIHRleHQsCisJCQkJCQkgICBjb2wzIGJ5dGVhCisJCQkJ CSAgICk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFRBQkxFIGR1bXBfdGVz dC50ZXN0X3NldmVudGhfdGFibGUgKFxFCisJCQlcblxzK1xRY29sMSBpbnRlZ2VyLFxFCisJ CQlcblxzK1xRY29sMiB0ZXh0LFxFCisJCQlcblxzK1xRY29sMyBieXRlYVxFCisJCQlcblwp OworCQkJL3htLAorCQlsaWtlID0+CisJCSAgeyAlZnVsbF9ydW5zLCAlZHVtcF90ZXN0X3Nj aGVtYV9ydW5zLCBzZWN0aW9uX3ByZV9kYXRhID0+IDEsIH0sCisJCXVubGlrZSA9PiB7IGV4 Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKIAknQ1JFQVRFIFRBQkxF IHRlc3RfdGFibGVfaWRlbnRpdHknID0+IHsKIAkJY3JlYXRlX29yZGVyID0+IDMsCiAJCWNy ZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3RhYmxlX2lkZW50 aXR5ICgKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggZTMzODI5MzNkOTguLmZiMThjYjgyZDlmIDEwMDY0NAot LS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3Jp YmUuYwpAQCAtMjg4MCw2ICsyODgwLDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29u c3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJ CQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwgTlVMTFxuIgorCQkJ CQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVi bGljYXRpb24gcFxuIgogCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbl9uYW1lc3BhY2UgcG4gT04gcC5vaWQgPSBwbi5wbnB1YmlkXG4iCiAJCQkJCQkJCSAg IgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHBjIE9OIHBjLnJlbG5hbWVzcGFjZSA9IHBu LnBubnNwaWRcbiIKQEAgLTI4ODcsNiArMjg4OCwxMiBAQCBkZXNjcmliZU9uZVRhYmxlRGV0 YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJ CQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwgcGdfZ2V0X2V4cHIo cHIucHJxdWFsLCBjLm9pZClcbiIKKwkJCQkJCQkJICAiCQksIChDQVNFIFdIRU4gcHIucHJh dHRycyBJUyBOT1QgTlVMTCBUSEVOXG4iCisJCQkJCQkJCSAgIgkJCShTRUxFQ1Qgc3RyaW5n X2FnZyhhdHRuYW1lLCAnLCAnKVxuIgorCQkJCQkJCQkgICIJCQkgIEZST00gcGdfY2F0YWxv Zy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwci5wcmF0dHJz OjpwZ19jYXRhbG9nLmludDJbXSwgMSkpIHMsXG4iCisJCQkJCQkJCSAgIgkJCQkgICBwZ19j YXRhbG9nLnBnX2F0dHJpYnV0ZVxuIgorCQkJCQkJCQkgICIJCQkgV0hFUkUgYXR0cmVsaWQg PSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgorCQkJCQkJCQkgICIJ CSAgIEVMU0UgTlVMTCBFTkQpICIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgogCQkJCQkJCQkgICIJCUpP SU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgpAQCAt Mjg5NCw2ICsyOTAxLDcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkJCQkJCQkJICAiVU5JT05cbiIKIAkJCQkJCQkJICAiU0VMRUNUIHB1 Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQksIE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExc biIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJ CQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5EIHBnX2NhdGFsb2cucGdfcmVsYXRp b25faXNfcHVibGlzaGFibGUoJyVzJylcbiIKIAkJCQkJCQkJICAiT1JERVIgQlkgMTsiLApA QCAtMjkwNCwxMiArMjkxMiwxNCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBj aGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJ CSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJ CSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbiBwXG4iCiAJCQkJCQkJCSAgIkpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9y ZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCiAJCQkJCQkJCSAgIldIRVJFIHByLnBy cmVsaWQgPSAnJXMnXG4iCiAJCQkJCQkJCSAgIlVOSU9OIEFMTFxuIgogCQkJCQkJCQkgICJT RUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwgTlVMTFxuIgorCQkJCQkJCQkgICIJ CSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24g cFxuIgogCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5w Z19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxuIgogCQkJCQkJCQkgICJPUkRFUiBC WSAxOyIsCkBAIC0yOTMxLDYgKzI5NDEsMTEgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMo Y29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCAi ICAgIFwiJXNcIiIsCiAJCQkJCQkJCSAgUFFnZXR2YWx1ZShyZXN1bHQsIGksIDApKTsKIAor CQkJCS8qIGNvbHVtbiBmaWx0ZXIgKGlmIGFueSkgKi8KKwkJCQlpZiAoIVBRZ2V0aXNudWxs KHJlc3VsdCwgaSwgMikpCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIgKCVzKSIs CisJCQkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzdWx0LCBpLCAyKSk7CisKIAkJCQkvKiByb3cg ZmlsdGVyIChpZiBhbnkpICovCiAJCQkJaWYgKCFQUWdldGlzbnVsbChyZXN1bHQsIGksIDEp KQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiIFdIRVJFICVzIiwKQEAgLTU4Njcs NyArNTg4Miw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKICAq Lwogc3RhdGljIGJvb2wKIGFkZEZvb3RlclRvUHVibGljYXRpb25EZXNjKFBRRXhwQnVmZmVy IGJ1ZiwgY2hhciAqZm9vdGVybXNnLAotCQkJCQkJICAgYm9vbCBzaW5nbGVjb2wsIHByaW50 VGFibGVDb250ZW50ICpjb250KQorCQkJCQkJICAgYm9vbCBhc19zY2hlbWEsIHByaW50VGFi bGVDb250ZW50ICpjb250KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQljb3VudCA9 IDA7CkBAIC01ODg0LDE1ICs1ODk5LDE5IEBAIGFkZEZvb3RlclRvUHVibGljYXRpb25EZXNj KFBRRXhwQnVmZmVyIGJ1ZiwgY2hhciAqZm9vdGVybXNnLAogCiAJZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCiAJewotCQlpZiAoIXNpbmdsZWNvbCkKKwkJaWYgKGFzX3NjaGVtYSkK KwkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIiAgICBcIiVzXCIiLCBQUWdldHZhbHVlKHJl cywgaSwgMCkpOworCQllbHNlCiAJCXsKIAkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIiAg ICBcIiVzLiVzXCIiLCBQUWdldHZhbHVlKHJlcywgaSwgMCksCiAJCQkJCQkJICBQUWdldHZh bHVlKHJlcywgaSwgMSkpOworCisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMykpCisJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiICglcykiLCBQUWdldHZhbHVlKHJlcywgaSwg MykpOworCiAJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMikpCiAJCQkJYXBwZW5kUFFF eHBCdWZmZXIoYnVmLCAiIFdIRVJFICVzIiwgUFFnZXR2YWx1ZShyZXMsIGksIDIpKTsKIAkJ fQotCQllbHNlCi0JCQlwcmludGZQUUV4cEJ1ZmZlcihidWYsICIgICAgXCIlc1wiIiwgUFFn ZXR2YWx1ZShyZXMsIGksIDApKTsKIAogCQlwcmludFRhYmxlQWRkRm9vdGVyKGNvbnQsIGJ1 Zi0+ZGF0YSk7CiAJfQpAQCAtNjAyMSwxMSArNjA0MCwyMiBAQCBkZXNjcmliZVB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwK IAkJCQkJCQkgICJTRUxFQ1Qgbi5uc3BuYW1lLCBjLnJlbG5hbWUiKTsKIAkJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDE1MDAwMCkKKwkJCXsKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAogCQkJCQkJCQkJICIsIHBnX2dldF9leHByKHByLnBycXVhbCwgYy5vaWQpIik7CisJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkJCSAiLCAoQ0FTRSBXSEVO IHByLnByYXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxuIgorCQkJCQkJCQkJICIgICAgIHBnX2Nh dGFsb2cuYXJyYXlfdG9fc3RyaW5nKCIKKwkJCQkJCQkJCSAiICAgICAgQVJSQVkoU0VMRUNU IGF0dG5hbWVcbiIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICBGUk9NXG4iCisJCQkJCQkJ CQkgIiAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19j YXRhbG9nLmFycmF5X3VwcGVyKHByLnByYXR0cnM6OnBnX2NhdGFsb2cuaW50MltdLCAxKSkg cyxcbiIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cucGdfYXR0cmli dXRlXG4iCisJCQkJCQkJCQkgIiAgICAgICAgV0hFUkUgYXR0cmVsaWQgPSBjLm9pZCBBTkQg YXR0bnVtID0gcHJhdHRyc1tzXSksICcsICcpXG4iCisJCQkJCQkJCQkgIiAgICAgICBFTFNF IE5VTEwgRU5EKSIpOworCQkJfQogCQkJZWxzZQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZidWYsCi0JCQkJCQkJCQkgIiwgTlVMTCIpOworCQkJCQkJCQkJICIsIE5VTEwsIE5VTEwi KTsKIAkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiXG5GUk9NIHBnX2Nh dGFsb2cucGdfY2xhc3MgYyxcbiIKIAkJCQkJCQkgICIgICAgIHBnX2NhdGFsb2cucGdfbmFt ZXNwYWNlIG4sXG4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXgg YmE3MmU2MmU2MTQuLjAxOTBiOTFjMDkxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oCkBAIC0xMDAsNiArMTAwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRp b25SZWxJbmZvCiB7CiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hlcmVDbGF1 c2U7CisJTGlzdAkgICAqY29sdW1uczsKIH0gUHVibGljYXRpb25SZWxJbmZvOwogCiBleHRl cm4gUHVibGljYXRpb24gKkdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CkBAIC0xMjMsOCAr MTI0LDExIEBAIHR5cGVkZWYgZW51bSBQdWJsaWNhdGlvblBhcnRPcHQKIH0gUHVibGljYXRp b25QYXJ0T3B0OwogCiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25SZWxhdGlvbnMoT2lk IHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOworZXh0ZXJuIExpc3Qg KkdldFJlbGF0aW9uQ29sdW1uUGFydGlhbFB1YmxpY2F0aW9ucyhPaWQgcmVsaWQpOworZXh0 ZXJuIExpc3QgKkdldFJlbGF0aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJlbGlk LCBPaWQgcHViaWQpOwogZXh0ZXJuIExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucyh2 b2lkKTsKIGV4dGVybiBMaXN0ICpHZXRBbGxUYWJsZXNQdWJsaWNhdGlvblJlbGF0aW9ucyhi b29sIHB1YnZpYXJvb3QpOworZXh0ZXJuIHZvaWQgR2V0QWN0aW9uc0luUHVibGljYXRpb24o T2lkIHB1YmlkLCBQdWJsaWNhdGlvbkFjdGlvbnMgKmFjdGlvbnMpOwogZXh0ZXJuIExpc3Qg KkdldFB1YmxpY2F0aW9uU2NoZW1hcyhPaWQgcHViaWQpOwogZXh0ZXJuIExpc3QgKkdldFNj aGVtYVB1YmxpY2F0aW9ucyhPaWQgc2NoZW1haWQpOwogZXh0ZXJuIExpc3QgKkdldFNjaGVt YVB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBzY2hlbWFpZCwKQEAgLTE0Miw2ICsxNDYsOCBA QCBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1 YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaQogCQkJCQkJCQkJCQkgIGJvb2wgaWZfbm90 X2V4aXN0cyk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfc2NoZW1h KE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLAogCQkJCQkJCQkJCQlib29sIGlmX25vdF9leGlz dHMpOworZXh0ZXJuIHZvaWQgcHVibGljYXRpb25fc2V0X3RhYmxlX2NvbHVtbnMoUmVsYXRp b24gcHVicmVsLCBIZWFwVHVwbGUgcHVicmVsdHVwLAorCQkJCQkJCQkJCSAgUmVsYXRpb24g dGFyZ2V0cmVsLCBMaXN0ICpjb2x1bW5zKTsKIAogZXh0ZXJuIE9pZAlnZXRfcHVibGljYXRp b25fb2lkKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4g Y2hhciAqZ2V0X3B1YmxpY2F0aW9uX25hbWUoT2lkIHB1YmlkLCBib29sIG1pc3Npbmdfb2sp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwu aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXggMGRk MGY0MjVkYjkuLjRmZWI1ODE4OTllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uX3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb25fcmVsLmgKQEAgLTM0LDYgKzM0LDcgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlv bl9yZWwsNjEwNixQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQpCiAKICNpZmRlZglDQVRBTE9H X1ZBUkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCXBn X25vZGVfdHJlZSBwcnF1YWw7CQkvKiBxdWFsaWZpY2F0aW9ucyAqLworCWludDJ2ZWN0b3IJ cHJhdHRyczsJCS8qIGNvbHVtbnMgdG8gcmVwbGljYXRlICovCiAjZW5kaWYKIH0gRm9ybURh dGFfcGdfcHVibGljYXRpb25fcmVsOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXgg MTYxNzcwMmQ5ZDYuLjEzNzVhMTczZTNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBA IC0zNjUyLDYgKzM2NTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiAJ Tm9kZVRhZwkJdHlwZTsKIAlSYW5nZVZhciAgICpyZWxhdGlvbjsJCS8qIHJlbGF0aW9uIHRv IGJlIHB1Ymxpc2hlZCAqLwogCU5vZGUJICAgKndoZXJlQ2xhdXNlOwkvKiBxdWFsaWZpY2F0 aW9ucyAqLworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBMaXN0IG9mIGNvbHVtbnMgaW4gYSBw dWJsaWNhdGlvbiB0YWJsZSAqLwogfSBQdWJsaWNhdGlvblRhYmxlOwogCiAvKgpAQCAtMzY4 OCw3ICszNjg5LDggQEAgdHlwZWRlZiBlbnVtIEFsdGVyUHVibGljYXRpb25BY3Rpb24KIHsK IAlBUF9BZGRPYmplY3RzLAkJCQkvKiBhZGQgb2JqZWN0cyB0byBwdWJsaWNhdGlvbiAqLwog CUFQX0Ryb3BPYmplY3RzLAkJCQkvKiByZW1vdmUgb2JqZWN0cyBmcm9tIHB1YmxpY2F0aW9u ICovCi0JQVBfU2V0T2JqZWN0cwkJCQkvKiBzZXQgbGlzdCBvZiBvYmplY3RzICovCisJQVBf U2V0T2JqZWN0cywJCQkJLyogc2V0IGxpc3Qgb2Ygb2JqZWN0cyAqLworCUFQX1NldENvbHVt bnMJCQkJLyogY2hhbmdlIGxpc3Qgb2YgY29sdW1ucyBmb3IgYSB0YWJsZSAqLwogfSBBbHRl clB1YmxpY2F0aW9uQWN0aW9uOwogCiB0eXBlZGVmIHN0cnVjdCBBbHRlclB1YmxpY2F0aW9u U3RtdApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCA0ZDJj ODgxNjQ0YS4uYTc3MWFiOGZmMzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBleHRlcm4gY2hhciAqbG9naWNhbHJl cF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpvcmlnaW5fbHNuKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KFN0cmluZ0luZm8gb3V0LCBU cmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCVR1 cGxlVGFibGVTbG90ICpuZXdzbG90LAotCQkJCQkJCQkJYm9vbCBiaW5hcnkpOworCQkJCQkJ CQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJl cFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJl cFR1cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBk YXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0 aW9uIHJlbCwKIAkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRzbG90LAotCQkJCQkJCQkJ VHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QsIGJvb2wgYmluYXJ5KTsKKwkJCQkJCQkJCVR1cGxl VGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSwgQml0bWFwc2V0ICpjb2x1bW5zKTsK IGV4dGVybiBMb2dpY2FsUmVwUmVsSWQgbG9naWNhbHJlcF9yZWFkX3VwZGF0ZShTdHJpbmdJ bmZvIGluLAogCQkJCQkJCQkJCQkgIGJvb2wgKmhhc19vbGR0dXBsZSwgTG9naWNhbFJlcFR1 cGxlRGF0YSAqb2xkdHVwLAogCQkJCQkJCQkJCQkgIExvZ2ljYWxSZXBUdXBsZURhdGEgKm5l d3R1cCk7CkBAIC0yMzEsNyArMjMxLDcgQEAgZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVh ZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0 ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24sCiAJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJ CQkJCQkgUmVsYXRpb24gcmVsKTsKKwkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0 ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVh ZF9yZWwoU3RyaW5nSW5mbyBpbik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3R5 cChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCSBPaWQgdHlw b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5k ZXggMjI3Y2U3NTk0ODYuLjA5ZTg2ZTMwNDllIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtNjU3LDYgKzY1NywyMDkgQEAgRFJPUCBUQUJM RSByZl90YmxfYWJjZF9wazsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wazsKIERST1Ag VEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsKIC0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gdGVzdCBmb3IgY29sdW1uIGZp bHRlcnMKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CitDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQgV0lUSCAocHVibGlzaCA9 ICdpbnNlcnQnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgVEFCTEUg dGVzdHB1Yl90Ymw1IChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0LCBjIHRleHQsCisJZCBp bnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoYSArIGxlbmd0aChiKSkgc3RvcmVkKTsKKy0tIGVy cm9yOiBjb2x1bW4gIngiIGRvZXMgbm90IGV4aXN0CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIHgpOworRVJST1I6ICBj b2x1bW4gIngiIG9mIHJlbGF0aW9uICJ0ZXN0cHViX3RibDUiIGRvZXMgbm90IGV4aXN0Cist LSBlcnJvcjogcmVwbGljYSBpZGVudGl0eSAiYSIgbm90IGluY2x1ZGVkIGluIHRoZSBjb2x1 bW4gZmlsdGVyCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJM RSB0ZXN0cHViX3RibDUgKGIsIGMpOworRVJST1I6ICBpbnZhbGlkIGNvbHVtbiBsaXN0IGZv ciBwdWJsaXNoaW5nIHJlbGF0aW9uICJ0ZXN0cHViX3RibDUiCitERVRBSUw6ICBBbGwgY29s dW1ucyBpbiBSRVBMSUNBIElERU5USVRZIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgY29sdW1u IGxpc3QuCistLSBlcnJvcjogZ2VuZXJhdGVkIGNvbHVtbiAiZCIgY2FuJ3QgYmUgaW4gbGlz dAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1 Yl90Ymw1IChhLCBkKTsKK0VSUk9SOiAgY2Fubm90IHJlZmVyZW5jZSBnZW5lcmF0ZWQgY29s dW1uICJkIiBpbiBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdAorLS0gZXJyb3I6IHN5c3RlbSBh dHRyaWJ1dGVzICJjdGlkIiBub3QgYWxsb3dlZCBpbiBjb2x1bW4gZmlsdGVyCitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEs IGN0aWQpOworRVJST1I6ICBjYW5ub3QgcmVmZXJlbmNlIHN5c3RlbSBjb2x1bW4gImN0aWQi IGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0CistLSBvaworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsKK0FMVEVS IFRBQkxFIHRlc3RwdWJfdGJsNSBEUk9QIENPTFVNTiBjOwkJLS0gbm8gZGljZQorRVJST1I6 ICBjYW5ub3QgZHJvcCBjb2x1bW4gImMiIGJlY2F1c2UgaXQgaXMgcGFydCBvZiBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YWJsZSIKK0hJTlQ6ICBTcGVjaWZ5IENBU0NBREUgb3IgdXNl IEFMVEVSIFBVQkxJQ0FUSU9OIHRvIHJlbW92ZSB0aGUgY29sdW1uIGZyb20gdGhlIHB1Ymxp Y2F0aW9uLgorLS0gb2s6IGZvciBpbnNlcnQtb25seSBwdWJsaWNhdGlvbiwgdGhlIGZpbHRl ciBpcyBhcmJpdHJhcnkKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfaW5z ZXJ0IEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGIsIGMpOworLyogbm90IGFsbCByZXBsaWNh IGlkZW50aXRpZXMgYXJlIGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5JUVVFIElOREVYIHRl c3RwdWJfdGJsNV9iX2tleSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOworQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw1IEFMVEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBOT1QgTlVM TDsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElO REVYIHRlc3RwdWJfdGJsNV9iX2tleTsgLS0gbm9wZQorRVJST1I6ICBpbnZhbGlkIGNvbHVt biBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9uICJ0ZXN0cHViX3RibDUiCitERVRBSUw6 ICBBbGwgY29sdW1ucyBpbiBSRVBMSUNBIElERU5USVRZIG11c3QgYmUgcHJlc2VudCBpbiB0 aGUgY29sdW1uIGxpc3QuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERS T1AgVEFCTEUgdGVzdHB1Yl90Ymw1OworLS0gZXJyb3I6IGNoYW5nZSB0aGUgcmVwbGljYSBp ZGVudGl0eSB0byAiYiIsIGFuZCB0aGVuIGZpbHRlciAoYSwgYykgZmFpbHMKK0FMVEVSIFRB QkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJf dGJsNV9iX2tleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRB QkxFIHRlc3RwdWJfdGJsNSAoYSwgYyk7CitFUlJPUjogIGludmFsaWQgY29sdW1uIGxpc3Qg Zm9yIHB1Ymxpc2hpbmcgcmVsYXRpb24gInRlc3RwdWJfdGJsNSIKK0RFVEFJTDogIEFsbCBj b2x1bW5zIGluIFJFUExJQ0EgSURFTlRJVFkgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBjb2x1 bW4gbGlzdC4KKy8qIEJ1dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3Jr cyBPSyAqLworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0 cnVuY2F0ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0g b2sKK1xkUnArIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAg InB1YmxpYy50ZXN0cHViX3RibDUiIChhKQorCistLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkg RlVMTCwgY29sdW1uIGZpbHRlcnMgYXJlIG5vdCBhbGxvd2VkCitDUkVBVEUgVEFCTEUgdGVz dHB1Yl90Ymw2IChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw2IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7CitFUlJPUjog IGludmFsaWQgY29sdW1uIGxpc3QgZm9yIHB1Ymxpc2hpbmcgcmVsYXRpb24gInRlc3RwdWJf dGJsNiIKK0RFVEFJTDogIENhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9u cyB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTC4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNFVCBD T0xVTU5TIChhLCBiLCBjKTsKK0VSUk9SOiAgaW52YWxpZCBjb2x1bW4gbGlzdCBmb3IgcHVi bGlzaGluZyByZWxhdGlvbiAidGVzdHB1Yl90Ymw2IgorREVUQUlMOiAgQ2Fubm90IHNwZWNp ZnkgY29sdW1uIGxpc3Qgb24gcmVsYXRpb25zIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxM LgorLS0gbWFrZSBzdXJlIGNoYW5naW5nIHRoZSBjb2x1bW4gZmlsdGVyIGlzIHVwZGF0ZWQg aW4gU0VUIFRBQkxFCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw3IChhIGludCBwcmltYXJ5 IGtleSwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHViX3RibDcK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHVi X3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVm YXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAg ICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAg IHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAg ICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAg IHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFSWSBLRVksIGJ0 cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxlIiAoYSwgYikK KworLS0gb2s6IHdlJ2xsIHNraXAgdGhpcyB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0 cHViX3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1Ymxp Yy50ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxh YmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24g CistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50 ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAg ICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAg IHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4 dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAg ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFS WSBLRVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxl IiAoYSwgYikKKworLS0gb2s6IHVwZGF0ZSB0aGUgY29sdW1uIGZpbHRlcgorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBj KTsKK1xkKyB0ZXN0cHViX3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGFibGUgInB1YmxpYy50ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxh dGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwg RGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisg YSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBs YWluICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisg YyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4 dGVuZGVkIHwgICAgICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdf cGtleSIgUFJJTUFSWSBLRVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0 cHViX2ZvcnRhYmxlIiAoYSwgYykKKworLS0gY29sdW1uIGZpbHRlciBmb3IgcGFydGl0aW9u ZWQgdGFibGVzIGhhcyB0byBjb3ZlciByZXBsaWNhIGlkZW50aXRpZXMgZm9yCistLSBhbGwg Y2hpbGQgcmVsYXRpb25zCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4IChhIGludCwgYiB0 ZXh0LCBjIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChhKTsKKy0tIGZpcnN0IHBhcnRpdGlv biBoYXMgcmVwbGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhf MCBQQVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAy LCByZW1haW5kZXIgMCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFS WSBLRVkgKGEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlv biBoYXMgcmVwbGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhf MSBQQVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAy LCByZW1haW5kZXIgMSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFS WSBLRVkgKGIpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworLS0gb2s6IGNvbHVtbiBmaWx0 ZXIgY292ZXJzIGJvdGggImEiIGFuZCAiYiIKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgRk9SIFRB QkxFIHRlc3RwdWJfdGJsOCAoYSwgYikgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSAndHJ1ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tIG9rOiB0aGUg c2FtZSB0aGluZywgYnV0IHRyeSBwbGFpbiBBREQgVEFCTEUKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChh LCBiKTsKKy0tIGZhaWx1cmU6IGNvbHVtbiBmaWx0ZXIgZG9lcyBub3QgY292ZXIgcmVwbGlj YSBpZGVudGl0eSBmb3IgdGhlIHNlY29uZCBwYXJ0aXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChh LCBjKTsKK0VSUk9SOiAgaW52YWxpZCBjb2x1bW4gbGlzdCBmb3IgcHVibGlzaGluZyByZWxh dGlvbiAidGVzdHB1Yl90Ymw4IgorREVUQUlMOiAgQWxsIGNvbHVtbnMgaW4gUkVQTElDQSBJ REVOVElUWSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNvbHVtbiBsaXN0LgorLS0gZmFpbHVy ZTogb25lIG9mIHRoZSBwYXJ0aXRpb25zIGhhcyBSRVBMSUNBIElERU5USVRZIEZVTEwKK0FM VEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4 IChhLCBjKTsKK0VSUk9SOiAgaW52YWxpZCBjb2x1bW4gbGlzdCBmb3IgcHVibGlzaGluZyBy ZWxhdGlvbiAidGVzdHB1Yl90Ymw4IgorREVUQUlMOiAgQ2Fubm90IHNwZWNpZnkgY29sdW1u IGxpc3Qgb24gcmVsYXRpb25zIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMLgorLS0gYWRk IHRhYmxlIGFuZCB0aGVuIHRyeSBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5CitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3Rw dWJfdGJsOF8xX3BrZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIg QUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CistLSBmYWlsdXJlOiByZXBsaWNhIGlk ZW50aXR5IGZ1bGwgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgY29sdW1uIGZpbHRlcgorQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworRVJST1I6ICBp bnZhbGlkIGNvbHVtbiBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9uICJ0ZXN0cHViX3Ri bDhfMSIKK0RFVEFJTDogIENhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9u cyB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTC4KKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRl bnRpdHkgaGFzIHRvIGJlIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBmaWx0ZXIKK0FMVEVSIFRB QkxFIHRlc3RwdWJfdGJsOF8xIERST1AgQ09OU1RSQUlOVCB0ZXN0cHViX3RibDhfMV9wa2V5 OworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChjKTsKK0FM VEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVzdHB1Yl90Ymw4XzFfcGtleTsKK0VSUk9SOiAgaW52YWxpZCBjb2x1bW4gbGlzdCBmb3Ig cHVibGlzaGluZyByZWxhdGlvbiAidGVzdHB1Yl90Ymw4XzEiCitERVRBSUw6ICBBbGwgY29s dW1ucyBpbiBSRVBMSUNBIElERU5USVRZIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgY29sdW1u IGxpc3QuCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKKy0tIGNvbHVtbiBmaWx0ZXIgZm9y IHBhcnRpdGlvbmVkIHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGljYSBpZGVudGl0aWVzIGZv cgorLS0gYWxsIGNoaWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOCAo YSBpbnQsIGIgdGV4dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoYSk7CitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAo YSwgYik7CistLSBmaXJzdCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImEiCitD UkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgKGEgaW50LCBiIHRleHQsIGMgdGV4dCk7CitB TFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFSWSBLRVkgKGEpOworQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0 cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVwbGljYSBpZGVu dGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMSAoYSBpbnQsIGIgdGV4dCwg YyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAo Yyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CistLSBvazogYXR0YWNoaW5nIGZpcnN0IHBh cnRpdGlvbiB3b3JrcywgYmVjYXVzZSAoYSkgaXMgaW4gY29sdW1uIGZpbHRlcgorQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzAgRk9S IFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKKy0tIGZhaWx1cmU6IHNl Y29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgKGMpLCB3aGljaCBzaSBub3Qg aW4gY29sdW1uIGZpbHRlcgorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJU SVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFp bmRlciAxKTsKK0VSUk9SOiAgaW52YWxpZCBjb2x1bW4gbGlzdCBmb3IgcHVibGlzaGluZyBy ZWxhdGlvbiAidGVzdHB1Yl90Ymw4XzEiCitERVRBSUw6ICBBbGwgY29sdW1ucyBpbiBSRVBM SUNBIElERU5USVRZIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgY29sdW1uIGxpc3QuCistLSBm YWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5IHRvIEZVTEwgZm9yIHBhcnRpdGlv biBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhlIGNvbHVtbiBmaWx0ZXIgb24gdGhlIHBhcmVu dAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBGVUxMOwor RVJST1I6ICBpbnZhbGlkIGNvbHVtbiBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9uICJ0 ZXN0cHViX3RibDhfMCIKK0RFVEFJTDogIENhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9u IHJlbGF0aW9ucyB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTC4KK0RST1AgVEFCTEUgdGVz dHB1Yl90Ymw1LCB0ZXN0cHViX3RibDYsIHRlc3RwdWJfdGJsNywgdGVzdHB1Yl90Ymw4LCB0 ZXN0cHViX3RibDhfMTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMsIHRl c3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0LCB0ZXN0cHViX2NvbF9m aWx0ZXI7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tIFRlc3QgY29tYmluYXRpb24gb2YgY29sdW1uIGFuZCByb3cgZmls dGVyCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50 LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymxf Ym90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymxf Ym90aF9maWx0ZXJzX3BrZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmls dGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChj ICE9IDEpOworXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorVGFi bGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hF UkUgKGMgPD4gMSkKKworXGQrIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycworICAgICAgICAg ICAgICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJz IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQg fCBTdG9yYWdlIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAg IHwgbm90IG51bGwgfCAgICAgICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorIGIg ICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBwbGFp biAgIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8 IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgfCAgICAgICAgICAgICAgfCAKK0luZGV4 ZXM6CisgICAgInRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5IiBQUklNQVJZIEtFWSwg YnRyZWUgKGEsIGMpIFJFUExJQ0EgSURFTlRJVFkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVz dHB1Yl9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVSRSAoYyA8PiAxKQorCitEUk9QIFRBQkxF IHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyczsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9i b3RoX2ZpbHRlcnM7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KIC0tIFRlc3QgY2FjaGUgaW52YWxpZGF0aW9uIEZPUiBBTEwg VEFCTEVTIHB1YmxpY2F0aW9uCiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CiBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw0KGEgaW50KTsKQEAgLTExMDIsNiArMTMwNSwx NSBAQCBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3RlcwogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogCistLSBWZXJpZnkgdGhhdCBpdCBmYWlscyB0byBhZGQgYSBz Y2hlbWEgd2l0aCBhIGNvbHVtbiBzcGVjaWZpY2F0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbyAoYSwgYik7 CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgorTElORSAxOiAuLi5USU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgZm9vIChhLCBi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBeCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEg QUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKTsKK0VSUk9SOiAgY29s dW1uIHNwZWNpZmljYXRpb24gbm90IGFsbG93ZWQgZm9yIHNjaGVtYQorTElORSAxOiAuLi4g dGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28sIGJhciAo YSwgYikuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCiAtLSBjbGVhbnVwIHB1Yl90ZXN0MSBzY2hlbWEgZm9yIGlu dmFsaWRhdGlvbiB0ZXN0cwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1h IERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRFJPUCBQVUJMSUNBVElP TiB0ZXN0cHViM19mb3JzY2hlbWEsIHRlc3RwdWI0X2ZvcnNjaGVtYSwgdGVzdHB1YjVfZm9y c2NoZW1hLCB0ZXN0cHViNl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9ydGFibGU7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggY2Q3ZTAxODI3MTYuLjZjZDRkMWFl MWIzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0zNzgsNiAr Mzc4LDE0MiBAQCBEUk9QIFRBQkxFIHJmX3RibF9hYmNkX25vcGs7CiBEUk9QIFRBQkxFIHJm X3RibF9hYmNkX3BhcnRfcGs7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KIAorLS0gdGVzdCBmb3IgY29sdW1uIGZpbHRlcnMK K1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CitDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90Ymw1IChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0LCBjIHRleHQsCisJZCBpbnQgZ2Vu ZXJhdGVkIGFsd2F5cyBhcyAoYSArIGxlbmd0aChiKSkgc3RvcmVkKTsKKy0tIGVycm9yOiBj b2x1bW4gIngiIGRvZXMgbm90IGV4aXN0CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIHgpOworLS0gZXJyb3I6IHJlcGxp Y2EgaWRlbnRpdHkgImEiIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIGZpbHRlcgorQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1 IChiLCBjKTsKKy0tIGVycm9yOiBnZW5lcmF0ZWQgY29sdW1uICJkIiBjYW4ndCBiZSBpbiBs aXN0CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0 cHViX3RibDUgKGEsIGQpOworLS0gZXJyb3I6IHN5c3RlbSBhdHRyaWJ1dGVzICJjdGlkIiBu b3QgYWxsb3dlZCBpbiBjb2x1bW4gZmlsdGVyCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGN0aWQpOworLS0gb2sKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJs NSAoYSwgYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgRFJPUCBDT0xVTU4gYzsJCS0t IG5vIGRpY2UKKy0tIG9rOiBmb3IgaW5zZXJ0LW9ubHkgcHVibGljYXRpb24sIHRoZSBmaWx0 ZXIgaXMgYXJiaXRyYXJ5CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2lu c2VydCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChiLCBjKTsKKworLyogbm90IGFsbCByZXBs aWNhIGlkZW50aXRpZXMgYXJlIGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5JUVVFIElOREVY IHRlc3RwdWJfdGJsNV9iX2tleSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOworQUxURVIgVEFC TEUgdGVzdHB1Yl90Ymw1IEFMVEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBOT1Qg TlVMTDsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsgLS0gbm9wZQorQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsKKworLS0gZXJyb3I6 IGNoYW5nZSB0aGUgcmVwbGljYSBpZGVudGl0eSB0byAiYiIsIGFuZCB0aGVuIGZpbHRlciAo YSwgYykgZmFpbHMKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgYyk7CisKKy8qIEJ1 dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBPSyAqLworU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOworUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFi bGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKK1xkUnArIHRlc3Rw dWJfdGFibGVfaW5zCisKKy0tIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMLCBjb2x1bW4g ZmlsdGVycyBhcmUgbm90IGFsbG93ZWQKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDYgKGEg aW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDYgUkVQTElD QSBJREVOVElUWSBGVUxMOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBB REQgVEFCTEUgdGVzdHB1Yl90Ymw2IChhLCBiLCBjKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNF VCBDT0xVTU5TIChhLCBiLCBjKTsKKworLS0gbWFrZSBzdXJlIGNoYW5naW5nIHRoZSBjb2x1 bW4gZmlsdGVyIGlzIHVwZGF0ZWQgaW4gU0VUIFRBQkxFCitDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90Ymw3IChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBi KTsKK1xkKyB0ZXN0cHViX3RibDcKKy0tIG9rOiB3ZSdsbCBza2lwIHRoaXMgdGFibGUKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFIHRlc3RwdWJfdGJs NyAoYSwgYik7CitcZCsgdGVzdHB1Yl90Ymw3CistLSBvazogdXBkYXRlIHRoZSBjb2x1bW4g ZmlsdGVyCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRSB0 ZXN0cHViX3RibDcgKGEsIGMpOworXGQrIHRlc3RwdWJfdGJsNworCistLSBjb2x1bW4gZmls dGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgaGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRp dGllcyBmb3IKKy0tIGFsbCBjaGlsZCByZWxhdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHVi X3RibDggKGEgaW50LCBiIHRleHQsIGMgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOwor LS0gZmlyc3QgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJhIgorQ1JFQVRFIFRB QkxFIHRlc3RwdWJfdGJsOF8wIFBBUlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZBTFVF UyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8wIEFERCBQUklNQVJZIEtFWSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhf MCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7Cist LSBzZWNvbmQgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRFIFRB QkxFIHRlc3RwdWJfdGJsOF8xIFBBUlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZBTFVF UyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYik7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhf MSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CisK Ky0tIG9rOiBjb2x1bW4gZmlsdGVyIGNvdmVycyBib3RoICJhIiBhbmQgImIiCitTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9jb2xfZmlsdGVyIEZPUiBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGIpIFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CisKKy0tIG9rOiB0aGUgc2FtZSB0aGluZywgYnV0IHRyeSBwbGFpbiBBREQgVEFC TEUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRl c3RwdWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBBREQg VEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKworLS0gZmFpbHVyZTogY29sdW1uIGZpbHRl ciBkb2VzIG5vdCBjb3ZlciByZXBsaWNhIGlkZW50aXR5IGZvciB0aGUgc2Vjb25kIHBhcnRp dGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIERST1AgVEFCTEUg dGVzdHB1Yl90Ymw4OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIEFE RCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMpOworCistLSBmYWlsdXJlOiBvbmUgb2YgdGhl IHBhcnRpdGlvbnMgaGFzIFJFUExJQ0EgSURFTlRJVFkgRlVMTAorQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9jb2xfZmlsdGVyIEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMpOworCist LSBhZGQgdGFibGUgYW5kIHRoZW4gdHJ5IGNoYW5naW5nIHJlcGxpY2EgaWRlbnRpdHkKK0FM VEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVzdHB1Yl90Ymw4XzFfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2Zp bHRlciBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKy0tIGZhaWx1cmU6IHJlcGxp Y2EgaWRlbnRpdHkgZnVsbCBjYW4ndCBiZSB1c2VkIHdpdGggYSBjb2x1bW4gZmlsdGVyCitB TFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7CistLSBm YWlsdXJlOiByZXBsaWNhIGlkZW50aXR5IGhhcyB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBjb2x1 bW4gZmlsdGVyCitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBEUk9QIENPTlNUUkFJTlQg dGVzdHB1Yl90Ymw4XzFfcGtleTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIEFERCBQ UklNQVJZIEtFWSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElE RU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CisKK0RST1AgVEFCTEUg dGVzdHB1Yl90Ymw4OworCistLSBjb2x1bW4gZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJs ZXMgaGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRpdGllcyBmb3IKKy0tIGFsbCBjaGlsZCBy ZWxhdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDggKGEgaW50LCBiIHRleHQsIGMg dGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9jb2xfZmlsdGVyIEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGIpOworLS0gZmlyc3Qg cGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJhIgorQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsOF8wIChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw4XzAgQUREIFBSSU1BUlkgS0VZIChhKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJs OF8wIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzBfcGtleTsK Ky0tIHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImIiCitDUkVBVEUg VEFCTEUgdGVzdHB1Yl90Ymw4XzEgKGEgaW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBLRVkgKGMpOworQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3Ri bDhfMV9wa2V5OworCistLSBvazogYXR0YWNoaW5nIGZpcnN0IHBhcnRpdGlvbiB3b3Jrcywg YmVjYXVzZSAoYSkgaXMgaW4gY29sdW1uIGZpbHRlcgorQUxURVIgVEFCTEUgdGVzdHB1Yl90 Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzAgRk9SIFZBTFVFUyBXSVRIICht b2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKKy0tIGZhaWx1cmU6IHNlY29uZCBwYXJ0aXRpb24g aGFzIHJlcGxpY2EgaWRlbnRpdHkgKGMpLCB3aGljaCBzaSBub3QgaW4gY29sdW1uIGZpbHRl cgorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90 Ymw4XzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsKKy0tIGZh aWx1cmU6IGNoYW5naW5nIHJlcGxpY2EgaWRlbnRpdHkgdG8gRlVMTCBmb3IgcGFydGl0aW9u IGZhaWxzLCBiZWNhdXNlCistLSBvZiB0aGUgY29sdW1uIGZpbHRlciBvbiB0aGUgcGFyZW50 CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisK K0RST1AgVEFCTEUgdGVzdHB1Yl90Ymw1LCB0ZXN0cHViX3RibDYsIHRlc3RwdWJfdGJsNywg dGVzdHB1Yl90Ymw4LCB0ZXN0cHViX3RibDhfMTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1 Yl90YWJsZV9pbnMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0 LCB0ZXN0cHViX2NvbF9maWx0ZXI7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gVGVzdCBjb21iaW5hdGlvbiBvZiBj b2x1bW4gYW5kIHJvdyBmaWx0ZXIKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVyczsKK1JFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0 ZXJzIChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CitcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwor XGQrIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycworCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJs X2JvdGhfZmlsdGVyczsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7 CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKwogLS0gVGVzdCBjYWNoZSBpbnZhbGlkYXRpb24gRk9SIEFMTCBUQUJMRVMgcHVi bGljYXRpb24KIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBU QUJMRSB0ZXN0cHViX3RibDQoYSBpbnQpOwpAQCAtNjE5LDYgKzc1NSwxMCBAQCBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1B IG5vbl9leGlzdGVudF9zY2hlbQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQogCistLSBWZXJpZnkgdGhhdCBpdCBmYWlscyB0byBh ZGQgYSBzY2hlbWEgd2l0aCBhIGNvbHVtbiBzcGVjaWZpY2F0aW9uCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbyAo YSwgYik7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBU QUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKTsKKwogLS0gY2xlYW51cCBwdWJfdGVz dDEgc2NoZW1hIGZvciBpbnZhbGlkYXRpb24gdGVzdHMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIyX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsK IERST1AgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hLCB0ZXN0cHViNF9mb3JzY2hl bWEsIHRlc3RwdWI1X2ZvcnNjaGVtYSwgdGVzdHB1YjZfZm9yc2NoZW1hLCB0ZXN0cHViX2Zv cnRhYmxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI5X2NvbHVt bl9saXN0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI5X2NvbHVtbl9saXN0LnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYzJjOGE3ODlhZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5f bGlzdC5wbApAQCAtMCwwICsxLDgzNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBwYXJ0aWFsLWNvbHVt biBwdWJsaWNhdGlvbiBvZiB0YWJsZXMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI2OworCisjIHNldHVwCisKK215ICRu b2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlz aGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworbXkgJG5vZGVfc3Vic2NyaWJl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5v ZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwlxcSht YXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNikpOworJG5vZGVfc3Vic2NyaWJl ci0+c3RhcnQ7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+ Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKworc3ViIHdhaXRfZm9yX3N1YnNjcmlw dGlvbl9zeW5jCit7CisJbXkgKCRub2RlKSA9IEBfOworCisJIyBBbHNvIHdhaXQgZm9yIGlu aXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKwlteSAkc3luY2VkX3F1ZXJ5ID0gIlNFTEVD VCBjb3VudCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3Rh dGUgTk9UIElOICgncicsICdzJyk7IjsKKworCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdw b3N0Z3JlcycsICRzeW5jZWRfcXVlcnkpCisJCW9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7Cit9CisKKyMgc2V0 dXAgdGFibGVzIG9uIGJvdGggbm9kZXMKKworIyB0YWIxOiBzaW1wbGUgMToxIHJlcGxpY2F0 aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFSWSBLRVksICJCIiBpbnQsIGMgaW50KQorKSk7 CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFSWSBLRVksICJCIiBpbnQsIGMgaW50KQorKSk7 CisKKyMgdGFiMjogcmVwbGljYXRpb24gZnJvbSByZWd1bGFyIHRvIHRhYmxlIHdpdGggZmV3 ZXIgY29sdW1ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQ1JFQVRFIFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHZhcmNoYXIsIGMg aW50KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJQ1JFQVRFIFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHZhcmNoYXIp CispKTsKKworIyB0YWIzOiBzaW1wbGUgMToxIHJlcGxpY2F0aW9uIHdpdGggd2VpcmQgY29s dW1uIG5hbWVzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgVEFCTEUgdGFiMyAoImEnIiBpbnQgUFJJTUFSWSBLRVksICJCIiB2YXJjaGFy LCAiYyciIGludCkKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjMgKCJhJyIgaW50IFBSSU1BUlkgS0VZLCAi YyciIGludCkKKykpOworCisjIHRlc3RfcGFydDogcGFydGl0aW9uZWQgdGFibGVzLCB3aXRo IHBhcnRpdGlvbmluZyAoaW5jbHVkaW5nIG11bHRpLWxldmVsCisjIHBhcnRpdGlvbmluZywg YW5kIGZld2VyIGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIpCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0IChh IGludCBQUklNQVJZIEtFWSwgYiB0ZXh0LCBjIHRpbWVzdGFtcHR6KSBQQVJUSVRJT04gQlkg TElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8xXzEgUEFSVElUSU9OIE9GIHRl c3RfcGFydCBGT1IgVkFMVUVTIElOICgxLDIsMyk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFy dF8yXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICg0LDUsNikgUEFS VElUSU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8yIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnRfMl8xIEZPUiBWQUxVRVMgSU4gKDQsNSk7CispKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJM RSB0ZXN0X3BhcnQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQpIFBBUlRJVElPTiBCWSBM SVNUIChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzFfMSBQQVJUSVRJT04gT0YgdGVz dF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDEsMiwzKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0 XzJfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDQsNSw2KSBQQVJU SVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzIgUEFSVElU SU9OIE9GIHRlc3RfcGFydF8yXzEgRk9SIFZBTFVFUyBJTiAoNCw1KTsKKykpOworCisjIHRh YjQ6IHRhYmxlIHdpdGggdXNlci1kZWZpbmVkIGVudW0gdHlwZXMKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRlc3RfdHlwIEFT IEVOVU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChhIElOVCBQUklN QVJZIEtFWSwgYiB0ZXN0X3R5cCwgYyBpbnQsIGQgdGV4dCk7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRlc3Rf dHlwIEFTIEVOVU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChhIElO VCBQUklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwgZCB0ZXh0KTsKKykpOworCisKKyMgVEVTVDog Y3JlYXRlIHB1YmxpY2F0aW9uIGFuZCBzdWJzY3JpcHRpb24gZm9yIHNvbWUgb2YgdGhlIHRh YmxlcyB3aXRoCisjIGNvbHVtbiBsaXN0cworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEKKwkgICBGT1IgVEFC TEUgdGFiMSAoYSwgIkIiKSwgdGFiMyAoImEnIiwgImMnIiksIHRlc3RfcGFydCAoYSwgYiks IHRhYjQgKGEsIGIsIGQpCisJICBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 ICd0cnVlJyk7CispKTsKKworIyBjaGVjayB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJhdHRy cyB2YWx1ZXMgZm9yIHRoZSBwdWJsaWNhdGlvbiBpbiB0aGUKKyMgcGdfcHVibGljYXRpb25f cmVsIGNhdGFsb2cgKG9yZGVyIGJ5IHJlbG5hbWUsIHRvIGdldCBzdGFibGUgb3JkZXJpbmcp CitteSAkcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJU0VMRUNUIHJlbG5hbWUsIHByYXR0cnMKKwlGUk9NIHBnX3B1YmxpY2F0aW9uX3Jl bCBwYiBKT0lOIHBnX2NsYXNzIHBjIE9OKHBiLnBycmVsaWQgPSBwYy5vaWQpCisJT1JERVIg QlkgcmVsbmFtZQorKSk7CisKK2lzKCRyZXN1bHQsIHFxKHRhYjF8MSAyCit0YWIzfDEgMwor dGFiNHwxIDIgNAordGVzdF9wYXJ0fDEgMiksICdwdWJsaWNhdGlvbiByZWxhdGlvbiB1cGRh dGVkJyk7CisKKyMgY3JlYXRlIHN1YnNjcmlwdGlvbiBmb3IgdGhlIHB1YmxpY2F0aW9uLCB3 YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViMQorKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCisjIFRFU1Q6IGluc2VydCBk YXRhIGludG8gdGhlIHRhYmxlcywgYW5kIHNlZSB3ZSBnb3QgcmVwbGljYXRpb24gb2YganVz dAorIyB0aGUgZmlsdGVyZWQgY29sdW1ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiMSBWQUxVRVMgKDEsIDIsIDMpOwor CUlOU0VSVCBJTlRPIHRhYjEgVkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIzIFZB TFVFUyAoMSwgMiwgMyk7CisJSU5TRVJUIElOVE8gdGFiMyBWQUxVRVMgKDQsIDUsIDYpOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlO U0VSVCBJTlRPIHRhYjQgVkFMVUVTICgxLCAncmVkJywgMywgJ29oIG15Jyk7CisJSU5TRVJU IElOVE8gdGFiNCBWQUxVRVMgKDIsICdibHVlJywgNCwgJ2hlbGxvJyk7CispKTsKKworIyBy ZXBsaWNhdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZQorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAo MSwgJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJyk7CisJSU5TRVJUIElOVE8gdGVzdF9w YXJ0IFZBTFVFUyAoMiwgJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJyk7CisJSU5TRVJU IElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoNCwgJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAw Jyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoNSwgJ2JjZCcsICcyMDIxLTA3 LTAzIDExOjEyOjEzJyk7CispKTsKKworIyB3YWl0IGZvciBjYXRjaHVwIGJlZm9yZSBjaGVj a2luZyB0aGUgc3Vic2NyaWJlcgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdzdWIxJyk7CisKKyMgdGFiMTogb25seSAoYSxiKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAq IEZST00gdGFiMSIpOworaXMoJHJlc3VsdCwgcXEoMXwyfAorNHw1fCksICdpbnNlcnQgb24g Y29sdW1uIHRhYjEuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRhYjM6IG9ubHkgKGEs YykgaXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjMiKTsKK2lzKCRyZXN1bHQsIHFx KDF8MworNHw2KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMy5iIGlzIG5vdCByZXBsaWNhdGVk Jyk7CisKKyMgdGFiNDogb25seSAoYSxiLGQpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJP TSB0YWI0Iik7CitpcygkcmVzdWx0LCBxcSgxfHJlZHxvaCBteQorMnxibHVlfGhlbGxvKSwg J2luc2VydCBvbiBjb2x1bW4gdGFiNC5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgdGVz dF9wYXJ0OiAoYSxiKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0Iik7 CitpcygkcmVzdWx0LCBxcSgxfGFiYworMnxiY2QKKzR8YWJjCis1fGJjZCksICdpbnNlcnQg b24gY29sdW1uIHRlc3RfcGFydC5jIGNvbHVtbnMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKwor IyBURVNUOiBkbyBzb21lIHVwZGF0ZWQgb24gc29tZSBvZiB0aGUgdGFibGVzLCBib3RoIG9u IGNvbHVtbnMgaW5jbHVkZWQKKyMgaW4gdGhlIGNvbHVtbiBsaXN0IGFuZCBvdGhlcgorCisj IHRhYjE6IHVwZGF0ZSBvZiByZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiMSBTRVQgIkIiID0gMiAqICJC IiB3aGVyZSBhID0gMSkpOworCisjIHRhYjE6IHVwZGF0ZSBvZiBub24tcmVwbGljYXRlZCBj b2x1bW4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBE QVRFIHRhYjEgU0VUIGMgPSAyKmMgd2hlcmUgYSA9IDQpKTsKKworIyB0YWIzOiB1cGRhdGUg b2Ygbm9uLXJlcGxpY2F0ZWQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJcXEoVVBEQVRFIHRhYjMgU0VUICJCIiA9ICJCIiB8fCAnIHVwZGF0ZWQnIHdoZXJl ICJhJyIgPSA0KSk7CisKKyMgdGFiMzogdXBkYXRlIG9mIHJlcGxpY2F0ZWQgY29sdW1uCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWIz IFNFVCAiYyciID0gMiAqICJjJyIgd2hlcmUgImEnIiA9IDEpKTsKKworIyB0YWI0Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWI0IFNF VCBiID0gJ2JsdWUnLCBjID0gYyAqIDIsIGQgPSBkIHx8ICcgdXBkYXRlZCcgd2hlcmUgYSA9 IDEpKTsKKworIyB0YWI0Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCXFxKFVQREFURSB0YWI0IFNFVCBiID0gJ3JlZCcsIGMgPSBjICogMiwgZCA9IGQgfHwg JyB1cGRhdGVkJyB3aGVyZSBhID0gMikpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00gdGFiMSBPUkRFUiBCWSBhKSk7 CitpcygkcmVzdWx0LAorcXEoMXw0fAorNHw1fCksICdvbmx5IHVwZGF0ZSBvbiBjb2x1bW4g dGFiMS5iIGlzIHJlcGxpY2F0ZWQnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00gdGFiMyBPUkRFUiBC WSAiYSciKSk7CitpcygkcmVzdWx0LAorcXEoMXw2Cis0fDYpLCAnb25seSB1cGRhdGUgb24g Y29sdW1uIHRhYjMuYyBpcyByZXBsaWNhdGVkJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjQg T1JERVIgQlkgYSkpOworCitpcygkcmVzdWx0LCBxcSgxfGJsdWV8b2ggbXkgdXBkYXRlZAor MnxyZWR8aGVsbG8gdXBkYXRlZCksICd1cGRhdGUgb24gY29sdW1uIHRhYjQuYyBpcyBub3Qg cmVwbGljYXRlZCcpOworCisKKyMgVEVTVDogYWRkIHRhYmxlIHdpdGggYSBjb2x1bW4gbGlz dCwgaW5zZXJ0IGRhdGEsIHJlcGxpY2F0ZQorCisjIGluc2VydCBzb21lIGRhdGEgYmVmb3Jl IGFkZGluZyBpdCB0byB0aGUgcHVibGljYXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjIgVkFMVUVTICgxLCAnYWJj JywgMyk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgdGFiMiAoYSwgYikiKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlND UklQVElPTiBzdWIxIFJFRlJFU0ggUFVCTElDQVRJT04iKTsKKword2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjIgVkFMVUVTICgyLCAn ZGVmJywgNik7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUICogRlJPTSB0YWIyIE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQs IHFxKDF8YWJjCisyfGRlZiksICdpbnNlcnQgb24gY29sdW1uIHRhYjIuYyBpcyBub3QgcmVw bGljYXRlZCcpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlVUERBVEUgdGFiMiBTRVQgYyA9IDUgd2hlcmUgYSA9IDE7CisJVVBEQVRFIHRhYjIg U0VUIGIgPSAneHl6JyB3aGVyZSBhID0gMjsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjIgT1JERVIgQlkg YSIpOworaXMoJHJlc3VsdCwgcXEoMXxhYmMKKzJ8eHl6KSwgJ3VwZGF0ZSBvbiBjb2x1bW4g dGFiMi5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKworIyBURVNUOiBhZGQgYSB0YWJsZSB0 byB0d28gcHVibGljYXRpb25zIHdpdGggZGlmZmVyZW50IGNvbHVtbiBsaXN0cywgYW5kCisj IGNyZWF0ZSBhIHNpbmdsZSBzdWJzY3JpcHRpb24gcmVwbGljYXRpbmcgYm90aCBwdWJsaWNh dGlvbnMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNS RUFURSBUQUJMRSB0YWI1IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGlu dCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHRhYjUgKGEsIGIpOwor CUNSRUFURSBQVUJMSUNBVElPTiBwdWIzIEZPUiBUQUJMRSB0YWI1IChhLCBkKTsKKykpOwor Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRBQkxFIHRhYjUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgZCBpbnQpOworKSk7CisK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBT VUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViMiwgcHViMworKSk7CisKK3dh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworIyBURVNUOiBpbnNlcnQg ZGF0YSBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgY29sdW1ucyAodW5pb24gb2YgdGhlIGNvbHVt bnMgbGlzdHMpCisjIHdlcmUgcmVwbGljYXRlZAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRhYjUgVkFMVUVTICgxLCAxMSwgMTExLCAx MTExKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRhYjUgVkFMVUVTICgyLCAyMiwgMjIyLCAyMjIyKSIpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNSBPUkRFUiBCWSBh IiksCisgICBxcSgxfDExfDExMTEKKzJ8MjJ8MjIyMiksCisgICAnb3ZlcmxhcHBpbmcgcHVi bGljYXRpb25zIHdpdGggb3ZlcmxhcHBpbmcgY29sdW1uIGxpc3RzJyk7CisKKyMgYW5kIGZp bmFsbHksIHNldCB0aGUgY29sdW1uIGZpbHRlciB0byBBTEwgZm9yIG9uZSBvZiB0aGUgcHVi bGljYXRpb25zLAorIyB3aGljaCBtZWFucyByZXBsaWNhdGluZyBhbGwgY29sdW1ucyAocmVt b3ZpbmcgdGhlIGNvbHVtbiBmaWx0ZXIpLCBidXQKKyMgZmlyc3QgYWRkIHRoZSBtaXNzaW5n IGNvbHVtbiB0byB0aGUgdGFibGUgb24gc3Vic2NyaWJlcgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgUFVCTElDQVRJT04gcHViMyBBTFRF UiBUQUJMRSB0YWI1IFNFVCBDT0xVTU5TIEFMTDsKKykpOworCiskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEg UkVGUkVTSCBQVUJMSUNBVElPTjsKKwlBTFRFUiBUQUJMRSB0YWI1IEFERCBDT0xVTU4gYyBJ TlQ7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJl cik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0YWI1IFZBTFVFUyAoMywgMzMsIDMzMywgMzMzMykiKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIp LAorICAgcXEoMXwxMXwxMTExfAorMnwyMnwyMjIyfAorM3wzM3wzMzMzfDMzMyksCisgICAn b3ZlcmxhcHBpbmcgcHVibGljYXRpb25zIHdpdGggb3ZlcmxhcHBpbmcgY29sdW1uIGxpc3Rz Jyk7CisKKyMgVEVTVDogY3JlYXRlIGEgdGFibGUgd2l0aCBhIGNvbHVtbiBmaWx0ZXIsIHRo ZW4gY2hhbmdlIHRoZSByZXBsaWNhCisjIGlkZW50aXR5IGJ5IHJlcGxhY2luZyBhIHByaW1h cnkga2V5IChidXQgdXNlIGEgZGlmZmVyZW50IGNvbHVtbiBpbgorIyB0aGUgY29sdW1uIGZp bHRlcikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNS RUFURSBUQUJMRSB0YWI2IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGlu dCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjQgRk9SIFRBQkxFIHRhYjYgKGEsIGIpOwor KSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGFiNiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBp bnQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViNAorKSk7 CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5U TyB0YWI2IFZBTFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CisJVVBEQVRFIHRhYjYgU0VUIGIg PSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQgV0hFUkUgYSA9IDE7CispKTsKKworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjYgT1JE RVIgQlkgYSIpLAorICAgIjF8NDR8fCIsICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBvcmlnaW5h bCBwcmltYXJ5IGtleScpOworCisjIG5vdyByZWRlZmluZSB0aGUgY29uc3RyYWludCAtIG1v dmUgdGhlIHByaW1hcnkga2V5IHRvIGEgZGlmZmVyZW50IGNvbHVtbgorIyAod2hpY2ggaXMg c3RpbGwgY292ZXJlZCBieSB0aGUgY29sdW1uIGxpc3QsIHRob3VnaCkKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNiBE Uk9QIENPTlNUUkFJTlQgdGFiNl9wa2V5OworCUFMVEVSIFRBQkxFIHRhYjYgQUREIFBSSU1B UlkgS0VZIChiKTsKKykpOworCisjIHdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgb24g dGhlIHN1YnNjcmliZXIKKyMgWFhYIFdoYXQgd291bGQgaGFwcGVuIGlmIHRoaXMgaGFwcGVu cyBiZWZvcmUgdGhlIHB1Ymxpc2hlciBBTFRFUj8gT3IKKyMgaW50ZXJsZWF2ZWQsIHNvbWVo b3c/IEJ1dCB0aGF0IHNlZW1zIHVucmVsYXRlZCB0byBjb2x1bW4gbGlzdHMuCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFi NiBEUk9QIENPTlNUUkFJTlQgdGFiNl9wa2V5OworCUFMVEVSIFRBQkxFIHRhYjYgQUREIFBS SU1BUlkgS0VZIChiKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBQVUJMSUNB VElPTgorKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmli ZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJ TlNFUlQgSU5UTyB0YWI2IFZBTFVFUyAoMiwgNTUsIDY2NiwgODg4OCk7CisJVVBEQVRFIHRh YjYgU0VUIGIgPSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQgV0hFUkUgYSA9IDI7Cisp KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lz KCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9N IHRhYjYgT1JERVIgQlkgYSIpLAorICAgcXEoMXw0NHx8CisyfDExMHx8KSwKKyAgICdyZXBs aWNhdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBwcmltYXJ5IGtleScpOworCisKKyMgVEVTVDog Y3JlYXRlIGEgdGFibGUgd2l0aCBhIGNvbHVtbiBmaWx0ZXIsIHRoZW4gY2hhbmdlIHRoZSBy ZXBsaWNhCisjIGlkZW50aXR5IGJ5IHJlcGxhY2luZyBhIHByaW1hcnkga2V5IHdpdGggYSBr ZXkgb24gbXVsdGlwbGUgY29sdW1ucworIyAoYWxsIG9mIHRoZW0gY292ZXJlZCBieSB0aGUg Y29sdW1uIGZpbHRlcikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0YWI3IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMg aW50LCBkIGludCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjUgRk9SIFRBQkxFIHRhYjcg KGEsIGIpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiNyAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBj IGludCwgZCBpbnQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04g cHViNQorKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmli ZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJ TlNFUlQgSU5UTyB0YWI3IFZBTFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CisJVVBEQVRFIHRh YjcgU0VUIGIgPSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQgV0hFUkUgYSA9IDE7Cisp KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lz KCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9N IHRhYjcgT1JERVIgQlkgYSIpLAorICAgIjF8NDR8fCIsICdyZXBsaWNhdGlvbiB3aXRoIHRo ZSBvcmlnaW5hbCBwcmltYXJ5IGtleScpOworCisjIG5vdyByZWRlZmluZSB0aGUgY29uc3Ry YWludCAtIG1vdmUgdGhlIHByaW1hcnkga2V5IHRvIGEgZGlmZmVyZW50IGNvbHVtbgorIyAo d2hpY2ggaXMgbm90IGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNyBEUk9Q IENPTlNUUkFJTlQgdGFiN19wa2V5OworCUFMVEVSIFRBQkxFIHRhYjcgQUREIFBSSU1BUlkg S0VZIChhLCBiKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWI3IFZBTFVFUyAoMiwgNTUsIDY2NiwgODg4OCk7 CisJVVBEQVRFIHRhYjcgU0VUIGIgPSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQgV0hF UkUgYSA9IDI7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJT RUxFQ1QgKiBGUk9NIHRhYjcgT1JERVIgQlkgYSIpLAorICAgcXEoMXw0NHx8CisyfDExMHx8 KSwKKyAgICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBwcmltYXJ5IGtleScpOwor CisjIG5vdyBzd2l0Y2ggdGhlIHByaW1hcnkga2V5IGFnYWluIHRvIGFub3RoZXIgY29sdW1u cyBub3QgY292ZXJlZCBieSB0aGUKKyMgY29sdW1uIGZpbHRlciwgYnV0IGFsc28gZ2VuZXJh dGUgd3JpdGVzIGJldHdlZW4gdGhlIGRyb3AgYW5kIGNyZWF0aW9uCisjIG9mIHRoZSBuZXcg Y29uc3RyYWludAorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlBTFRFUiBUQUJMRSB0YWI3IERST1AgQ09OU1RSQUlOVCB0YWI3X3BrZXk7CisJSU5T RVJUIElOVE8gdGFiNyBWQUxVRVMgKDMsIDMzLCA5OTksIDc3NzcpOworCS0tIHVwZGF0ZS9k ZWxldGUgaXMgbm90IGFsbG93ZWQgZm9yIHRhYmxlcyB3aXRob3V0IFJJCisJQUxURVIgVEFC TEUgdGFiNyBBREQgUFJJTUFSWSBLRVkgKGIsIGEpOworCVVQREFURSB0YWI3IFNFVCBiID0g YiAqIDIsIGMgPSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAzOworCURFTEVURSBGUk9N IHRhYjcgV0hFUkUgYSA9IDE7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjcgT1JERVIgQlkgYSIpLAorICAgcXEoMnwxMTB8fAor M3w2Nnx8KSwKKyAgICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBwcmltYXJ5IGtl eScpOworCisKKyMgVEVTVDogcGFydGl0aW9uZWQgdGFibGVzICh3aXRoIHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gZmFsc2UpCisjIGFuZCByZXBsaWNhIGlkZW50aXR5LiBUaGUg KGxlYWYpIHBhcnRpdGlvbnMgbWF5IGhhdmUgZGlmZmVyZW50IFJJLCBzbworIyB3ZSBuZWVk IHRvIGNoZWNrIHRoZSBwYXJ0aXRpb24gUkkgKHdpdGggcmVzcGVjdCB0byB0aGUgY29sdW1u IGZpbHRlcikKKyMgd2hpbGUgYXR0YWNoaW5nIHRoZSBwYXJ0aXRpb24uCisKKyMgRmlyc3Qs IGxldCdzIGNyZWF0ZSBhIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggdHdvIHBhcnRpdGlvbnMs IGVhY2ggd2l0aAorIyBhIGRpZmZlcmVudCBSSSwgYnV0IGEgY29sdW1uIGZpbHRlciBub3Qg Y292ZXJpbmcgYWxsIHRob3NlIFJJLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2EgKGEgaW50LCBiIGlu dCwgYyBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0 X3BhcnRfYV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElOICgxKTsK KwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2FfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRl c3RfcGFydF9hXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYV8yIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElOICgyKTsKKwlBTFRFUiBUQUJMRSB0 ZXN0X3BhcnRfYV8yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9w YXJ0X2FfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzJfcGtl eTsKKykpOworCisjIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyICh3aXRo IHRoZSBvcHBvc2l0ZSBjb2x1bW4gb3JkZXIpCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9hIChiIGludCwg YSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3Bh cnRfYV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElOICgxKTsKKwlB TFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2FfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3Rf cGFydF9hXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYV8yIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElOICgyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3BhcnRfYV8yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0 X2FfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzJfcGtleTsK KykpOworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHJlcGxpY2F0aW5nIGp1c3QgdGhlIGNv bHVtbiAiYSIsIHdoaWNoIGlzIG5vdCBlbm91Z2gKKyMgZm9yIHRoZSBzZWNvbmQgcGFydGl0 aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgUFVCTElDQVRJT04gcHViNiBGT1IgVEFCTEUgdGVzdF9wYXJ0X2EgKGIsIGEpIFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CisJQUxURVIgUFVCTElDQVRJ T04gcHViNiBBREQgVEFCTEUgdGVzdF9wYXJ0X2FfMSAoYSk7CisJQUxURVIgUFVCTElDQVRJ T04gcHViNiBBREQgVEFCTEUgdGVzdF9wYXJ0X2FfMiAoYik7CispKTsKKworIyBhZGQgdGhl IHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMgdG8gY29t cGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlB TFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViNgorKSk7CisKK3dh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnRfYSBWQUxVRVMgKDEsIDMpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9hIFZBTFVF UyAoMiwgNCk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJT RUxFQ1QgYSwgYiBGUk9NIHRlc3RfcGFydF9hIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8 MworMnw0KSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRp dGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKworIyBUaGlzIHRpbWUgc3RhcnQg d2l0aCBhIGNvbHVtbiBmaWx0ZXIgY292ZXJpbmcgUkkgZm9yIGFsbCBwYXJ0aXRpb25zLCBi dXQKKyMgdGhlbiB1cGRhdGUgdGhlIGNvbHVtbiBmaWx0ZXIgdG8gbm90IGNvdmVyIGNvbHVt biAiYiIgKG5lZWRlZCBieSB0aGUKKyMgc2Vjb25kIHBhcnRpdGlvbikKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF9iIChhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFU RSBUQUJMRSB0ZXN0X3BhcnRfYl8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYiBGT1IgVkFM VUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzEgQUREIFBSSU1BUlkg S0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8xIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggdGVzdF9wYXJ0X2JfMV9wa2V5OworCisJQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF9iXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDIsNCk7 CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFM VEVSIFRBQkxFIHRlc3RfcGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0X3BhcnRfYl8yX3BrZXk7CispKTsKKworIyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0aGUg c3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYiAoYSBpbnQsIGIgaW50KSBQQVJUSVRJT04g QlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMSBQQVJUSVRJT04g T0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3BhcnRfYl8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0 X2JfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9iXzFfcGtleTsK KworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRf YiBGT1IgVkFMVUVTIElOICgyLDQpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzIgQURE IFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8yIFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2JfMl9wa2V5OworKSk7CisKKyMgY3Jl YXRlIGEgcHVibGljYXRpb24gcmVwbGljYXRpbmcgYm90aCBjb2x1bW5zLCB3aGljaCBpcyBz dWZmaWNpZW50IGZvcgorIyBib3RoIHBhcnRpdGlvbnMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI3IEZPUiBU QUJMRSB0ZXN0X3BhcnRfYiAoYSwgYikgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNj cmlwdGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNF VCBQVUJMSUNBVElPTiBwdWI3CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9iIFZBTFVFUyAoMSwgMSk7CisJ SU5TRVJUIElOVE8gdGVzdF9wYXJ0X2IgVkFMVUVTICgyLCAyKTsKKykpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0X2Ig T1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXwxCisyfDIpLAorICAgJ3BhcnRpdGlvbnMgd2l0 aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVudGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3Rs eScpOworCisKKyMgVEVTVDogVGhpcyB0aW1lIHN0YXJ0IHdpdGggYSBjb2x1bW4gZmlsdGVy IGNvdmVyaW5nIFJJIGZvciBhbGwgcGFydGl0aW9ucywKKyMgYnV0IHRoZW4gdXBkYXRlIFJJ IGZvciBvbmUgb2YgdGhlIHBhcnRpdGlvbnMgdG8gbm90IGJlIGNvdmVyZWQgYnkgdGhlCisj IGNvbHVtbiBmaWx0ZXIgYW55bW9yZS4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jIChhIGludCwgYiBp bnQsIGMgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVz dF9wYXJ0X2NfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2MgRk9SIFZBTFVFUyBJTiAoMSwz KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJ QUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHRlc3RfcGFydF9jXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18yIFBB UlRJVElPTiBPRiB0ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgyLDQpOworCUFMVEVSIFRB QkxFIHRlc3RfcGFydF9jXzIgQUREIFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0 ZXN0X3BhcnRfY18yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2Nf Ml9wa2V5OworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUg VEFCTEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBM SVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18xIFBBUlRJVElPTiBPRiB0 ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFy dF9jXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18x IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMV9wa2V5OworCisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9jIEZP UiBWQUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBBREQgUFJJ TUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18yX3BrZXk7CispKTsKKworIyBjcmVhdGUg YSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBkYXRhIHRocm91Z2ggcGFydGl0aW9uIHJvb3Qs IHdpdGggYSBjb2x1bW4KKyMgZmlsdGVyIG9uIHRoZSByb290LCBhbmQgdGhlbiBhZGQgdGhl IHBhcnRpdGlvbnMgb25lIGJ5IG9uZSB3aXRoIHNlcGFyYXRlCisjIGNvbHVtbiBmaWx0ZXJz IChidXQgdGhvc2UgYXJlIG5vdCBhcHBsaWVkKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9SIFRBQkxF IHRlc3RfcGFydF9jIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2Up OworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9jXzEgKGEs Yyk7CisJQUxURVIgUFVCTElDQVRJT04gcHViOCBBREQgVEFCTEUgdGVzdF9wYXJ0X2NfMiAo YSxiKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNjcmlwdGlv biwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgU1VCU0NSSVBUSU9OIHN1YjE7CisJQ1JFQVRF IFNVQlNDUklQVElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVC TElDQVRJT04gcHViODsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ3N1YjEnKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICgxLCAzLCA1KTsKKwlJTlNF UlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDIsIDQsIDYpOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYyBP UkRFUiBCWSBhLCBiIiksCisgICBxcSgxfHw1CisyfDR8KSwKKyAgICdwYXJ0aXRpb25zIHdp dGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0 bHknKTsKKworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG5vdCByZXBsaWNhdGluZyBkYXRh IHRocm91Z2ggcGFydGl0aW9uIHJvb3QsIHdpdGhvdXQKKyMgYSBjb2x1bW4gZmlsdGVyIG9u IHRoZSByb290LCBhbmQgdGhlbiBhZGQgdGhlIHBhcnRpdGlvbnMgb25lIGJ5IG9uZSB3aXRo CisjIHNlcGFyYXRlIGNvbHVtbiBmaWx0ZXJzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBVQkxJQ0FUSU9OIHB1Yjg7CisJQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjggRk9SIFRBQkxFIHRlc3RfcGFydF9jIFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjggQURE IFRBQkxFIHRlc3RfcGFydF9jXzEgKGEpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjggQURE IFRBQkxFIHRlc3RfcGFydF9jXzIgKGEsYik7CispKTsKKworIyBhZGQgdGhlIHB1YmxpY2F0 aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJT Q1JJUFRJT04gc3ViMSBSRUZSRVNIIFBVQkxJQ0FUSU9OOworCVRSVU5DQVRFIHRlc3RfcGFy dF9jOworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmli ZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlU UlVOQ0FURSB0ZXN0X3BhcnRfYzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMg KDEsIDMsIDUpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9jIFZBTFVFUyAoMiwgNCwgNik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisK K2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBG Uk9NIHRlc3RfcGFydF9jIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8fAorMnw0fCksCisg ICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlkZW50aXRpZXMgbm90IHJl cGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKworIyBURVNUOiBTdGFydCB3aXRoIGEgc2luZ2xl IHBhcnRpdGlvbiwgd2l0aCBSSSBjb21wYXRpYmxlIHdpdGggdGhlIGNvbHVtbgorIyBmaWx0 ZXIsIGFuZCB0aGVuIGF0dGFjaCBhIHBhcnRpdGlvbiB3aXRoIGluY29tcGF0aWJsZSBSSS4K KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRBQkxFIHRlc3RfcGFydF9kIChhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChh KTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Bh cnRfZCBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzEg QUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8xIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2RfMV9wa2V5OworKSk7CisKKyMg ZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIgKGluIGZhY3QsIGNyZWF0ZSBi b3RoIHBhcnRpdGlvbnMgcmlnaHQKKyMgYXdheSwgbm8gbmVlZCB0byBkZWxheSB0aGF0KQor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBU QUJMRSB0ZXN0X3BhcnRfZCAoYSBpbnQsIGIgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7 CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2RfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0 X2QgRk9SIFZBTFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8xIEFE RCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMSBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9kXzFfcGtleTsKKworCUNSRUFURSBU QUJMRSB0ZXN0X3BhcnRfZF8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfZCBGT1IgVkFMVUVT IElOICgyLDQpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzIgQUREIFBSSU1BUlkgS0VZ IChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8yIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdF9wYXJ0X2RfMl9wa2V5OworKSk7CisKKyMgY3JlYXRlIGEgcHVibGlj YXRpb24gcmVwbGljYXRpbmcgYm90aCBjb2x1bW5zLCB3aGljaCBpcyBzdWZmaWNpZW50IGZv cgorIyBib3RoIHBhcnRpdGlvbnMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI5IEZPUiBUQUJMRSB0ZXN0X3Bh cnRfZCAoYSkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKykp OworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNjcmlwdGlvbiwgd2FpdCBm b3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBw dWI5CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJl cik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlO U0VSVCBJTlRPIHRlc3RfcGFydF9kIFZBTFVFUyAoMSwgMSk7CispKTsKKworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9kIE9S REVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8KSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVy ZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKwor IyBURVNUOiBXaXRoIGEgdGFibGUgaW5jbHVkZWQgaW4gbXVsdGlwbGUgcHVibGljYXRpb25z LCB3ZSBzaG91bGQgdXNlIGEKKyMgdW5pb24gb2YgdGhlIGNvbHVtbiBmaWx0ZXJzLiBTbyB3 aXRoIGNvbHVtbiBmaWx0ZXJzIChhLGIpIGFuZCAoYSxjKSB3ZQorIyBzaG91bGQgcmVwbGlj YXRlIChhLGIsYykuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8xIChhIGludCBQUklNQVJZIEtFWSwgYiBp bnQsIGMgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX21peF8xIEZPUiBUQUJMRSB0 ZXN0X21peF8xIChhLCBiKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX21peF8yIEZPUiBU QUJMRSB0ZXN0X21peF8xIChhLCBjKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzEgKGEgaW50 IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUFMVEVSIFNVQlNDUklQVElPTiBzdWIx IFNFVCBQVUJMSUNBVElPTiBwdWJfbWl4XzEsIHB1Yl9taXhfMjsKKykpOworCit3YWl0X2Zv cl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9taXhf MSBWQUxVRVMgKDEsIDIsIDMpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X21peF8xIiksCisgICBxcSgxfDJ8MyksCisg ICAnYSBtaXggb2YgcHVibGljYXRpb25zIHNob3VsZCB1c2UgYSB1bmlvbiBvZiBjb2x1bW4g ZmlsdGVyJyk7CisKKworIyBURVNUOiBXaXRoIGEgdGFibGUgaW5jbHVkZWQgaW4gbXVsdGlw bGUgcHVibGljYXRpb25zLCB3ZSBzaG91bGQgdXNlIGEKKyMgdW5pb24gb2YgdGhlIGNvbHVt biBmaWx0ZXJzLiBJZiBhbnkgb2YgdGhlIHB1YmxpY2F0aW9ucyBpcyBGT1IgQUxMCisjIFRB QkxFUywgd2Ugc2hvdWxkIHJlcGxpY2F0ZSBhbGwgY29sdW1ucy4KKworIyBkcm9wIHVubmVj ZXNzYXJ5IHRhYmxlcywgc28gYXMgbm90IHRvIGludGVyZmVyZSB3aXRoIHRoZSBGT1IgQUxM IFRBQkxFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ RFJPUCBUQUJMRSB0YWIxLCB0YWIyLCB0YWIzLCB0YWI0LCB0YWI1LCB0YWI2LCB0YWI3LCB0 ZXN0X21peF8xLAorCQkJICAgdGVzdF9wYXJ0LCB0ZXN0X3BhcnRfYSwgdGVzdF9wYXJ0X2Is IHRlc3RfcGFydF9jLCB0ZXN0X3BhcnRfZDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9taXhfMiAoYSBp bnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1 Yl9taXhfMyBGT1IgVEFCTEUgdGVzdF9taXhfMiAoYSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9taXhfNCBGT1IgQUxMIFRBQkxFUzsKKykpOworCiskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzIg KGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUFMVEVSIFNVQlNDUklQVElP TiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJfbWl4XzMsIHB1Yl9taXhfNDsKKwlBTFRFUiBT VUJTQ1JJUFRJT04gc3ViMSBSRUZSRVNIIFBVQkxJQ0FUSU9OOworKSk7CisKK3dhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X21peF8y IFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfbWl4XzIiKSwKKyAgIHFxKDF8MnwzKSwKKyAg ICdhIG1peCBvZiBwdWJsaWNhdGlvbnMgc2hvdWxkIHVzZSBhIHVuaW9uIG9mIGNvbHVtbiBm aWx0ZXInKTsKKworCisjIFRFU1Q6IFdpdGggYSB0YWJsZSBpbmNsdWRlZCBpbiBtdWx0aXBs ZSBwdWJsaWNhdGlvbnMsIHdlIHNob3VsZCB1c2UgYQorIyB1bmlvbiBvZiB0aGUgY29sdW1u IGZpbHRlcnMuIElmIGFueSBvZiB0aGUgcHVibGljYXRpb25zIGlzIEZPUiBBTEwKKyMgVEFC TEVTIElOIFNDSEVNQSwgd2Ugc2hvdWxkIHJlcGxpY2F0ZSBhbGwgY29sdW1ucy4KKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxF IHRlc3RfbWl4XzMgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUNSRUFU RSBQVUJMSUNBVElPTiBwdWJfbWl4XzUgRk9SIFRBQkxFIHRlc3RfbWl4XzMgKGEsIGIpOwor CUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzYgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1B IHB1YmxpYzsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzMgKGEgaW50IFBSSU1BUlkgS0VZLCBi IGludCwgYyBpbnQpOworCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElP TiBwdWJfbWl4XzUsIHB1Yl9taXhfNjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25f c3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9taXhfMyBWQUxVRVMgKDEsIDIs IDMpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScp OworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNU ICogRlJPTSB0ZXN0X21peF8zIiksCisgICBxcSgxfDJ8MyksCisgICAnYSBtaXggb2YgcHVi bGljYXRpb25zIHNob3VsZCB1c2UgYSB1bmlvbiBvZiBjb2x1bW4gZmlsdGVyJyk7CisKKwor IyBURVNUOiBDaGVjayBoYW5kbGluZyBvZiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCAt IGlmIGEgcGFydGl0aW9uIGlzCisjIHB1Ymxpc2hlZCB0aHJvdWdoIHBhcnRpdGlvbiByb290 LCB3ZSBzaG91bGQgb25seSBhcHBseSB0aGUgY29sdW1uIGZpbHRlcgorIyBkZWZpbmVkIGZv ciB0aGUgd2hvbGUgdGFibGUgKG5vdCB0aGUgcGFydGl0aW9ucykgLSBib3RoIGR1cmluZyB0 aGUgaW5pdGlhbAorIyBzeW5jIGFuZCB3aGVuIHJlcGxpY2F0aW5nIGNoYW5nZXMuIFRoaXMg aXMgd2hhdCB3ZSBkbyBmb3Igcm93IGZpbHRlcnMuCisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3QgKGEgaW50 IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJ Q1JFQVRFIFRBQkxFIHRlc3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9SIFZB TFVFUyBGUk9NICgxKSBUTyAoMTApOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMiBQQVJU SVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CisKKwlD UkVBVEUgUFVCTElDQVRJT04gcHViX3Jvb3RfdHJ1ZSBGT1IgVEFCTEUgdGVzdF9yb290IChh KSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7CisKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9yb290IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KSBQQVJUSVRJ T04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMSBQQVJUSVRJT04g T0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKwlDUkVBVEUgVEFC TEUgdGVzdF9yb290XzIgUEFSVElUSU9OIE9GIHRlc3Rfcm9vdCBGT1IgVkFMVUVTIEZST00g KDEwKSBUTyAoMjApOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04g cHViX3Jvb3RfdHJ1ZTsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9k ZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMSwgMiwgMyk7CisJSU5T RVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMTAsIDIwLCAzMCk7CispKTsKKworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3Rfcm9vdCBP UkRFUiBCWSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzEwfHwpLAorICAgJ3B1YmxpY2F0aW9u IHZpYSBwYXJ0aXRpb24gcm9vdCBhcHBsaWVzIGNvbHVtbiBmaWx0ZXInKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c3RvcCgnZmFzdCcpOworJG5vZGVfcHVibGlzaGVyLT5zdG9wKCdmYXN0 Jyk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi4zNC4xCgo= --------------89JTRge4tdnFc2l9tHTU5zx3--