From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18970 invoked by alias); 24 Aug 2016 12:07:13 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 18839 invoked by uid 89); 24 Aug 2016 12:07:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=Prathamesh, sk:pratham, prathamesh, U*prathamesh.kulkarni X-HELO: mail-it0-f41.google.com Received: from mail-it0-f41.google.com (HELO mail-it0-f41.google.com) (209.85.214.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 24 Aug 2016 12:07:01 +0000 Received: by mail-it0-f41.google.com with SMTP id x131so204451515ite.0 for ; Wed, 24 Aug 2016 05:07:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Brxswa25+qEYjWnR8WatleckuZAv6Pml1XLv7/KEhiY=; b=aL7GtKzIzNPG43gxoai4PPbiwSoCfMxaM+TzHvws55uozznLZ2NBUNnJb4ewrSJKpk +Rm8Gxg7jyZ0QW+vJU4OLveoAzbvPzMg74CEFB2ZHMMDdNpwdi8MzXEYDsENxkyRxiph 4yTj7z+TFdhoT66sQaqtyiW2fuka9+mqwZqopMTidIN3lj32KFKQ2+kgrPDuzL7SQts5 vAwhpQIQWMImTWgYZyYGudkOXFRD0g8t25LSpUSPOu9mVIlFgIq1kqo9Tk2zwBldOwcg mpUIelUcedEK8SBtX3wEk/UVp56bnvteAIiNthseS9NLRv2nTfVSEp0HOIRNyE0+ERzk uAXw== X-Gm-Message-State: AEkoouufB5IxIuy2ZAcqRMaYEXKISZRELMRmRjYD7Sz9LJYQGSim17rDVGzz1Nw+7VU6gqlNFlEBTBVbAj3ZzLVc X-Received: by 10.107.159.147 with SMTP id i141mr3599487ioe.29.1472040418828; Wed, 24 Aug 2016 05:06:58 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.208.18 with HTTP; Wed, 24 Aug 2016 05:06:57 -0700 (PDT) In-Reply-To: References: <20160809110933.2dpy7qdepugoknp2@virgil.suse.cz> <20160809181309.erlp4yxnc5otdtxm@virgil.suse.cz> <20160811125540.GA36505@kam.mff.cuni.cz> <20160812140347.GC68714@kam.mff.cuni.cz> <20160822133316.7w7ddrwuft7svyj6@virgil.suse.cz> From: Prathamesh Kulkarni Date: Wed, 24 Aug 2016 12:07:00 -0000 Message-ID: Subject: Re: [RFC] ipa bitwise constant propagation To: Prathamesh Kulkarni , Jan Hubicka , Richard Biener , Kugan Vivekanandarajah , gcc Patches Content-Type: multipart/mixed; boundary=001a1140fbc4430425053ad01ec6 X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg01720.txt.bz2 --001a1140fbc4430425053ad01ec6 Content-Type: text/plain; charset=UTF-8 Content-length: 3268 On 22 August 2016 at 19:24, Prathamesh Kulkarni wrote: > On 22 August 2016 at 19:03, Martin Jambor wrote: >> Hi, >> >> On Tue, Aug 16, 2016 at 06:34:48PM +0530, Prathamesh Kulkarni wrote: >>> Thanks, I updated the patch to address these issues (attached). >>> However the patch caused ICE during testing >>> objc.dg/torture/forward-1.m (and few others but with same ICE): >>> >>> Command line options: >>> /home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/bootstrap-build/gcc/xgcc >>> -B/home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/bootstrap-build/gcc/ >>> /home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/gcc/gcc/testsuite/objc.dg/torture/forward-1.m >>> -fno-diagnostics-show-caret -fdiagnostics-color=never -O2 -flto >>> -fuse-linker-plugin -fno-fat-lto-objects -fgnu-runtime >>> -I/home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/gcc/gcc/testsuite/../../libobjc >>> -B/home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/bootstrap-build/x86_64-pc-linux-gnu/./libobjc/.libs >>> -L/home/prathamesh.kulkarni/gnu-toolchain/gcc/bits-prop-5/bootstrap-build/x86_64-pc-linux-gnu/./libobjc/.libs >>> -lobjc -lm -o ./forward-1.exe >>> >>> Backtrace: >>> 0x8c0ed2 ipa_get_param_decl_index_1 >>> ../../gcc/gcc/ipa-prop.c:106 >>> 0x8b7dbb will_be_nonconstant_predicate >>> ../../gcc/gcc/ipa-inline-analysis.c:2110 >>> 0x8b7dbb estimate_function_body_sizes >>> ../../gcc/gcc/ipa-inline-analysis.c:2739 >>> 0x8bae26 compute_inline_parameters(cgraph_node*, bool) >>> ../../gcc/gcc/ipa-inline-analysis.c:3030 >>> 0x8bb309 inline_analyze_function(cgraph_node*) >>> ../../gcc/gcc/ipa-inline-analysis.c:4157 >>> 0x11dc402 ipa_icf::sem_function::merge(ipa_icf::sem_item*) >>> ../../gcc/gcc/ipa-icf.c:1345 >>> 0x11d6334 ipa_icf::sem_item_optimizer::merge_classes(unsigned int) >>> ../../gcc/gcc/ipa-icf.c:3461 >>> 0x11e12c6 ipa_icf::sem_item_optimizer::execute() >>> ../../gcc/gcc/ipa-icf.c:2636 >>> 0x11e34d6 ipa_icf_driver >>> ../../gcc/gcc/ipa-icf.c:3538 >>> 0x11e34d6 ipa_icf::pass_ipa_icf::execute(function*) >>> ../../gcc/gcc/ipa-icf.c:3585 >>> >>> This appears due to following assert in ipa_get_param_decl_index_1(): >>> gcc_checking_assert (!flag_wpa); >>> which was added by Martin's patch introducing ipa_get_type(). >>> Removing the assert works, however I am not sure if that's the correct thing. >>> I would be grateful for suggestions on how to handle this case. >>> >> >> I wrote that the patch was not really tested, I did not think about >> ICF loading bodies and re-running body-analyses at WPO time. >> Nevertheless, after some consideration, I think that just removing the >> assert is fine. After all, the caller must have passed a PARM_DECL if >> it is doing anything sensible at all and that means we have access to >> the function body. > Thanks for the pointers. I will validate the patch after removing assert, > and get back. Hi, The attached version passes bootstrap+test on x86_64-unknown-linux-gnu, ppc64le-linux-gnu, and with c,c++,fortran on armv8l-linux-gnueabihf. Cross-tested on arm*-*-* and aarch64*-*-*. Verified the patch survives lto-bootstrap on x86_64-unknown-linux-gnu. Ok to commit ? Thanks, Prathamesh > > Thanks, > Prathamesh >> >> Thanks, >> >> Martin --001a1140fbc4430425053ad01ec6 Content-Type: text/plain; charset=US-ASCII; name="bits-prop-7.txt" Content-Disposition: attachment; filename="bits-prop-7.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_is8us5pl0 Content-length: 57926 UGF0Y2ggZm9yIHBlcmZvcm1pbmcgaW50ZXJwcm9jZWR1cmFsIGJpdHdpc2Ug Y29uc3RhbnQgcHJvcGFnYXRpb24uCgoyMDE2LTA4LTIzICBQcmF0aGFtZXNo IEt1bGthcm5pICA8cHJhdGhhbWVzaC5rdWxrYXJuaUBsaW5hcm8ub3JnPgoJ ICAgIE1hcnRpbiBKYW1iaG9yICA8bWphbWJvckBzdXNlLmN6PgoKCSogY29t bW9uLm9wdDogTmV3IG9wdGlvbiAtZmlwYS1jcC1iaXQuCgkqIGRvYy9pbnZv a2UudGV4aTogRG9jdW1lbnQgLWZpcGEtY3AtYml0LgoJKiBvcHRzLmMgKGRl ZmF1bHRfb3B0aW9uc190YWJsZSk6IEFkZCBlbnRyeSBmb3IgLWZpcGEtY3At Yml0LgoJKGVuYWJsZV9mZG9fb3B0aW1pemF0aW9ucyk6IENoZWNrIGZvciBm bGFnX2lwYV9jcF9iaXQuCgkqIHRyZWUtc3NhLWNjcC5oOiBOZXcgaGVhZGVy IGZpbGUuCgkqIHRyZWUtc3NhLWNjcC5jOiBJbmNsdWRlIHRyZWUtc3NhLWNj cC5oCgkoYml0X3ZhbHVlX2Jpbm9wXzEpOiBDaGFuZ2UgdG8gYml0X3ZhbHVl X2Jpbm9wXzEgYW5kIGV4cG9ydCBpdC4KCVJlcGxhY2UgYWxsIG9jY3VyZW5j ZXMgb2YgdHJlZSBwYXJhbWV0ZXIgYnkgdHdvIG5ldyBwYXJhbXM6IHNpZ25v cCwgaW50LgoJKGJpdF92YWx1ZV91bm9wXzEpOiBDaGFuZ2UgdG8gYml0X3Zh bHVlX3Vub3AgYW5kIGV4cG9ydCBpdC4KCVJlcGxhY2UgYWxsIG9jY3VyZW5j ZXMgb2YgdHJlZSBwYXJhbWV0ZXIgYnkgdHdvIG5ldyBwYXJhbXM6IHNpZ25v cCwKCWludC4KCShiaXRfdmFsdWVfYmlub3ApOiBDaGFuZ2UgY2FsbCBmcm9t IGJpdF92YWx1ZV9iaW5vcF8xIHRvCgliaXRfdmFsdWVfYmlub3AuCgkoYml0 X3ZhbHVlX2Fzc3VtZV9hbGlnbmVkKTogTGlrZXdpc2UuCgkoYml0X3ZhbHVl X3Vub3ApOiBDaGFuZ2UgY2FsbCBmcm9tIGJpdF92YWx1ZV91bm9wXzEgdG8g Yml0X3ZhbHVlX3Vub3AuCgkoZG9fc3NhX2NjcCk6IFBhc3Mgbm9uemVyb19w IHx8IGZsYWdfaXBhX2NwX2JpdCBpbnN0ZWFkIG9mIG5vbnplcm9fcAoJdG8g Y2NwX2ZpbmFsaXplLgoJKGNjcF9maW5hbGl6ZSk6IFNraXAgcHJvY2Vzc2lu ZyBpZiB2YWwtPm1hc2sgPT0gMC4KCSogaXBhLWNwLmM6IEluY2x1ZGUgdHJl ZS1zc2EtY2NwLmgKCShpcGNwX2JpdHNfbGF0dGljZSk6IE5ldyBjbGFzcy4K CShpcGNwX3BhcmFtX2xhdHRpY2UgKGJpdHNfbGF0dGljZSk6IE5ldyBtZW1i ZXIuCgkocHJpbnRfYWxsX2xhdHRpY2VzKTogQ2FsbCBpcGNwX2JpdHNfbGF0 dGljZTo6cHJpbnQuCgkoc2V0X2FsbF9jb250YWluc192YXJpYWJsZSk6IENh bGwgaXBjcF9iaXRzX2xhdHRpY2U6OnNldF90b19ib3R0b20uIAoJKGluaXRp YWxpemVfbm9kZV9sYXR0aWNlcyk6IExpa2V3aXNlLgoJKHByb3BhZ2F0ZV9i aXRzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbi4KCShw cm9wYWdhdGVfY29uc3RhbnRzX2FjY3Jvc3NfY2FsbCk6IENhbGwKCXByb3Bh Z2F0ZV9iaXRzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbi4KCShpcGNwX3Byb3Bh Z2F0ZV9zdGFnZSk6IFN0b3JlIHBhcmFtZXRlciB0eXBlcyB3aGVuIGluX2x0 b19wIGlzIHRydWUuCgkoaXBjcF9zdG9yZV9iaXRzX3Jlc3VsdHMpOiBOZXcg ZnVuY3Rpb24uCgkoaXBjcF9kcml2ZXIpOiBDYWxsIGlwY3Bfc3RvcmVfYml0 c19yZXN1bHRzLgoJKiBpcGEtcHJvcC5oIChpcGFfYml0cyk6IE5ldyBzdHJ1 Y3QuCgkoaXBhX2p1bXBfZnVuYyk6IEFkZCBuZXcgbWVtYmVyIGJpdHMgb2Yg dHlwZSBpcGFfYml0cy4KCShpcGFfcGFyYW1fZGVzY3JpcHRvcik6IENoYW5n ZSBkZWNsIHRvIGRlY2xfb3JfdHlwZS4KCShpcGFfZ2V0X3BhcmFtKTogQ2hh bmdlIGRlY2wgdG8gZGVjbF9vcl90eXBlIGFuZCBhc3NlcnQgb24KCVBBUk1f REVDTC4KCShpcGFfZ2V0X3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoaXBjcF90 cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5KTogTmV3IG1lbWJlciBiaXRzLgoJKiBp cGEtcHJvcC5jIChpcGFfZ2V0X3BhcmFtX2RlY2xfaW5kZXhfMSk6IHMvZGVj bC9kZWNsX29yX3R5cGUuCgkoaXBhX3BvcHVsYXRlX3BhcmFtX2RlY2xzKTog TGlrZXdpc2UuCgkoaXBhX2R1bXBfcGFyYW0pOiBMaWtld2lzZS4KCShpcGFf cHJpbnRfbm9kZV9qdW1wX2Z1bmN0aW9uc19mb3JfZWRnZSk6IFByZXR0eS1w cmludCBpcGFfYml0cyBqdW1wCglmdW5jdGlvbi4KCShpcGFfc2V0X2pmX3Vu a25vd24pOiBTZXQgaXBhX2JpdHM6Omtub3duIHRvIGZhbHNlLgoJKGlwYV9j b21wdXRlX2p1bXBfZnVuY3Rpb25zX2Zvcl9lZGdlKTogQ29tcHV0ZSBqdW1w IGZ1bmN0aW9uIGZvciBiaXRzCglwcm9wYWdhdGlvbi4KCShpcGFfbm9kZV9w YXJhbXNfdDo6ZHVwbGljYXRlKTogQ29weSBzcmMtPmJpdHMgaW50byBkc3Qt PmJpdHMuCgkoaXBhX3dyaXRlX2p1bXBfZnVuY3Rpb24pOiBBZGQgc3RyZWFt aW5nIGZvciBpcGFfYml0cy4KCShpcGFfcmVhZF9qdW1wX2Z1bmN0aW9uKTog QWRkIHN1cHBvcnQgZm9yIHJlYWRpbmcgc3RyZWFtZWQgaXBhX2JpdHMuCgko d3JpdGVfaXBjcF90cmFuc2Zvcm1hdGlvbl9pbmZvKTogQWRkIHN0cmVhbWlu ZyBmb3IgaXBhX2JpdHMKCXN1bW1hcnkgZm9yIGx0cmFucy4KCShyZWFkX2lw Y3BfdHJhbnNmb21yYXRpb25faW5mbyk6IEFkZCBzdXBwb3J0IGZvciByZWFk aW5nIHN0cmVhbWVkIGlwYV9iaXRzLgoJKGlwY3BfdXBkYXRlX2JpdHMpOiBO ZXcgZnVuY3Rpb24uCgkoaXBjcF90cmFuc2Zvcm1fZnVuY3Rpb24pOiBDYWxs IGlwY3BfdXBkYXRlX2JpdHMuCgp0ZXN0c3VpdGUvCgkqIGdjYy5kZy9pcGEv cHJvcGJpdHMtMS5jOiBOZXcgdGVzdC1jYXNlLgoJKiBnY2MuZGcvaXBhL3By b3BiaXRzLTIuYzogTGlrZXdpc2UuCgkqIGdjYy5kZy9pcGEvcHJvcGJpdHMt My5jOiBMaWtld2lzZS4KCmRpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBi L2djYy9jb21tb24ub3B0CmluZGV4IDhhMjkyZWQuLjhiYWMwYTIgMTAwNjQ0 Ci0tLSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21tb24ub3B0CkBA IC0xNTYxLDYgKzE1NjEsMTAgQEAgZmlwYS1jcC1hbGlnbm1lbnQKIENvbW1v biBSZXBvcnQgVmFyKGZsYWdfaXBhX2NwX2FsaWdubWVudCkgT3B0aW1pemF0 aW9uCiBQZXJmb3JtIGFsaWdubWVudCBkaXNjb3ZlcnkgYW5kIHByb3BhZ2F0 aW9uIHRvIG1ha2UgSW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50IHByb3BhZ2F0 aW9uIHN0cm9uZ2VyLgogCitmaXBhLWNwLWJpdAorQ29tbW9uIFJlcG9ydCBW YXIoZmxhZ19pcGFfY3BfYml0KSBPcHRpbWl6YXRpb24KK1BlcmZvcm0gaW50 ZXJwcm9jZWR1cmFsIGJpdHdpc2UgY29uc3RhbnQgcHJvcGFnYXRpb24uCisK IGZpcGEtcHJvZmlsZQogQ29tbW9uIFJlcG9ydCBWYXIoZmxhZ19pcGFfcHJv ZmlsZSkgSW5pdCgwKSBPcHRpbWl6YXRpb24KIFBlcmZvcm0gaW50ZXJwcm9j ZWR1cmFsIHByb2ZpbGUgcHJvcGFnYXRpb24uCmRpZmYgLS1naXQgYS9nY2Mv ZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQppbmRleCAy MjAwMWY5Li5lYmJmNGVlIDEwMDY0NAotLS0gYS9nY2MvZG9jL2ludm9rZS50 ZXhpCisrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKQEAgLTM1OCw3ICszNTgs NyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30u CiAtZmdjc2Utc20gLWZob2lzdC1hZGphY2VudC1sb2FkcyAtZmlmLWNvbnZl cnNpb24gQGdvbAogLWZpZi1jb252ZXJzaW9uMiAtZmluZGlyZWN0LWlubGlu aW5nIEBnb2wKIC1maW5saW5lLWZ1bmN0aW9ucyAtZmlubGluZS1mdW5jdGlv bnMtY2FsbGVkLW9uY2UgLWZpbmxpbmUtbGltaXQ9QHZhcntufSBAZ29sCi0t ZmlubGluZS1zbWFsbC1mdW5jdGlvbnMgLWZpcGEtY3AgLWZpcGEtY3AtY2xv bmUgLWZpcGEtY3AtYWxpZ25tZW50IEBnb2wKKy1maW5saW5lLXNtYWxsLWZ1 bmN0aW9ucyAtZmlwYS1jcCAtZmlwYS1jcC1jbG9uZSAtZmlwYS1jcC1hbGln bm1lbnQgLWZpcGEtY3AtYml0IEBnb2wKIC1maXBhLXB0YSAtZmlwYS1wcm9m aWxlIC1maXBhLXB1cmUtY29uc3QgLWZpcGEtcmVmZXJlbmNlIC1maXBhLWlj ZiBAZ29sCiAtZmlyYS1hbGdvcml0aG09QHZhcnthbGdvcml0aG19IEBnb2wK IC1maXJhLXJlZ2lvbj1AdmFye3JlZ2lvbn0gLWZpcmEtaG9pc3QtcHJlc3N1 cmUgQGdvbApAQCAtNjM3MCw2ICs2MzcwLDcgQEAgYWxzbyB0dXJucyBvbiB0 aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBmbGFnczoKIC1maW5kaXJlY3Qt aW5saW5pbmcgQGdvbAogLWZpcGEtY3AgQGdvbAogLWZpcGEtY3AtYWxpZ25t ZW50IEBnb2wKKy1maXBhLWNwLWJpdCBAZ29sCiAtZmlwYS1zcmEgQGdvbAog LWZpcGEtaWNmIEBnb2wKIC1maXNvbGF0ZS1lcnJvbmVvdXMtcGF0aHMtZGVy ZWZlcmVuY2UgQGdvbApAQCAtNzM3OCw2ICs3Mzc5LDEyIEBAIHBhcmFtZXRl cnMgdG8gc3VwcG9ydCBiZXR0ZXIgdmVjdG9yaXphdGlvbiBhbmQgc3RyaW5n IG9wZXJhdGlvbnMuCiBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0 IGF0IEBvcHRpb257LU8yfSBhbmQgQG9wdGlvbnstT3N9LiAgSXQKIHJlcXVp cmVzIHRoYXQgQG9wdGlvbnstZmlwYS1jcH0gaXMgZW5hYmxlZC4KIAorQGl0 ZW0gLWZpcGEtY3AtYml0CitAb3BpbmRleCAtZmlwYS1jcC1iaXQKK1doZW4g ZW5hYmxlZCwgcGVyZm9ybSBpcGEgYml0d2lzZSBjb25zdGFudCBwcm9wYWdh dGlvbi4gVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgQG9w dGlvbnstTzJ9LiBJdCByZXF1aXJlcyB0aGF0IEBvcHRpb257LWZpcGEtY3B9 CitpcyBlbmFibGVkLgorCiBAaXRlbSAtZmlwYS1pY2YKIEBvcGluZGV4IGZp cGEtaWNmCiBQZXJmb3JtIElkZW50aWNhbCBDb2RlIEZvbGRpbmcgZm9yIGZ1 bmN0aW9ucyBhbmQgcmVhZC1vbmx5IHZhcmlhYmxlcy4KZGlmZiAtLWdpdCBh L2djYy9pcGEtY3AuYyBiL2djYy9pcGEtY3AuYwppbmRleCA1YjZjYjlhLi43 ZTc0MGY5IDEwMDY0NAotLS0gYS9nY2MvaXBhLWNwLmMKKysrIGIvZ2NjL2lw YS1jcC5jCkBAIC0xMjAsNiArMTIwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJw YXJhbXMuaCIKICNpbmNsdWRlICJpcGEtaW5saW5lLmgiCiAjaW5jbHVkZSAi aXBhLXV0aWxzLmgiCisjaW5jbHVkZSAidHJlZS1zc2EtY2NwLmgiCiAKIHRl bXBsYXRlIDx0eXBlbmFtZSB2YWx0eXBlPiBjbGFzcyBpcGNwX3ZhbHVlOwog CkBAIC0yNjYsNiArMjY3LDYwIEBAIHByaXZhdGU6CiAgIGJvb2wgbWVldF93 aXRoXzEgKHVuc2lnbmVkIG5ld19hbGlnbiwgdW5zaWduZWQgbmV3X21pc2Fs aWduKTsKIH07CiAKKy8qIExhdHRpY2Ugb2Yga25vd24gYml0cywgb25seSBj YXBhYmxlIG9mIGhvbGRpbmcgb25lIHZhbHVlLgorICAgQml0d2lzZSBjb25z dGFudCBwcm9wYWdhdGlvbiBwcm9wYWdhdGVzIHdoaWNoIGJpdHMgb2YgYQor ICAgdmFsdWUgYXJlIGNvbnN0YW50LgorICAgRm9yIGVnOgorICAgaW50IGYo aW50IHgpCisgICB7CisgICAgIHJldHVybiBzb21lX29wICh4KTsKKyAgIH0K KworICAgaW50IGYxKGludCB5KQorICAgeworICAgICBpZiAoY29uZCkKKyAg ICAgIHJldHVybiBmICh5ICYgMHhmZik7CisgICAgIGVsc2UKKyAgICAgIHJl dHVybiBmICh5ICYgMHhmKTsKKyAgIH0KKworICAgSW4gdGhlIGFib3ZlIGNh c2UsIHRoZSBwYXJhbSAneCcgd2lsbCBhbHdheXMgaGF2ZSBhbGwKKyAgIHRo ZSBiaXRzIChleGNlcHQgdGhlIGJpdHMgaW4gbHNiKSBzZXQgdG8gMC4KKyAg IEhlbmNlIHRoZSBtYXNrIG9mICd4JyB3b3VsZCBiZSAweGZmLiBUaGUgbWFz aworICAgcmVmbGVjdHMgdGhhdCB0aGUgYml0cyBpbiBsc2IgYXJlIHVua25v d24uCisgICBUaGUgYWN0dWFsIHByb3BhZ2F0ZWQgdmFsdWUgaXMgZ2l2ZW4g YnkgbV92YWx1ZSAmIH5tX21hc2suICAqLworCitjbGFzcyBpcGNwX2JpdHNf bGF0dGljZQoreworcHVibGljOgorICBib29sIGJvdHRvbV9wICgpIHsgcmV0 dXJuIG1fbGF0dGljZV92YWwgPT0gSVBBX0JJVFNfVkFSWUlORzsgfQorICBi b29sIHRvcF9wICgpIHsgcmV0dXJuIG1fbGF0dGljZV92YWwgPT0gSVBBX0JJ VFNfVU5ERUZJTkVEOyB9CisgIGJvb2wgY29uc3RhbnRfcCAoKSB7IHJldHVy biBtX2xhdHRpY2VfdmFsID09IElQQV9CSVRTX0NPTlNUQU5UOyB9CisgIGJv b2wgc2V0X3RvX2JvdHRvbSAoKTsKKyAgYm9vbCBzZXRfdG9fY29uc3RhbnQg KHdpZGVzdF9pbnQsIHdpZGVzdF9pbnQpOyAKKyAKKyAgd2lkZXN0X2ludCBn ZXRfdmFsdWUgKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICB3aWRlc3RfaW50 IGdldF9tYXNrICgpIHsgcmV0dXJuIG1fbWFzazsgfQorCisgIGJvb2wgbWVl dF93aXRoIChpcGNwX2JpdHNfbGF0dGljZSYgb3RoZXIsIHVuc2lnbmVkLCBz aWdub3AsCisJCSAgZW51bSB0cmVlX2NvZGUsIHRyZWUpOworCisgIGJvb2wg bWVldF93aXRoICh3aWRlc3RfaW50LCB3aWRlc3RfaW50LCB1bnNpZ25lZCk7 CisKKyAgdm9pZCBwcmludCAoRklMRSAqKTsKKworcHJpdmF0ZToKKyAgZW51 bSB7IElQQV9CSVRTX1VOREVGSU5FRCwgSVBBX0JJVFNfQ09OU1RBTlQsIElQ QV9CSVRTX1ZBUllJTkcgfSBtX2xhdHRpY2VfdmFsOworCisgIC8qIFNpbWls YXIgdG8gY2NwX2xhdHRpY2VfdCwgbWFzayByZXByZXNlbnRzIHdoaWNoIGJp dHMgb2YgdmFsdWUgYXJlIGNvbnN0YW50LgorICAgICBJZiBhIGJpdCBpbiBt YXNrIGlzIHNldCB0byAwLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBp bgorICAgICB2YWx1ZSBpcyBrbm93biB0byBiZSBjb25zdGFudC4gICovCisg IHdpZGVzdF9pbnQgbV92YWx1ZSwgbV9tYXNrOworCisgIGJvb2wgbWVldF93 aXRoXzEgKHdpZGVzdF9pbnQsIHdpZGVzdF9pbnQsIHVuc2lnbmVkKTsgCisg IHZvaWQgZ2V0X3ZhbHVlX2FuZF9tYXNrICh0cmVlLCB3aWRlc3RfaW50ICos IHdpZGVzdF9pbnQgKik7Cit9OyAKKwogLyogU3RydWN0dXJlIGNvbnRhaW5p bmcgbGF0dGljZXMgZm9yIGEgcGFyYW1ldGVyIGl0c2VsZiBhbmQgZm9yIHBp ZWNlcyBvZgogICAgYWdncmVnYXRlcyB0aGF0IGFyZSBwYXNzZWQgaW4gdGhl IHBhcmFtZXRlciBvciBieSBhIHJlZmVyZW5jZSBpbiBhIHBhcmFtZXRlcgog ICAgcGx1cyBzb21lIG90aGVyIHVzZWZ1bCBmbGFncy4gICovCkBAIC0yODEs NiArMzM2LDggQEAgcHVibGljOgogICBpcGNwX2FnZ19sYXR0aWNlICphZ2dz OwogICAvKiBMYXR0aWNlIGRlc2NyaWJpbmcga25vd24gYWxpZ25tZW50LiAg Ki8KICAgaXBjcF9hbGlnbm1lbnRfbGF0dGljZSBhbGlnbm1lbnQ7CisgIC8q IExhdHRpY2UgZGVzY3JpYmluZyBrbm93biBiaXRzLiAgKi8KKyAgaXBjcF9i aXRzX2xhdHRpY2UgYml0c19sYXR0aWNlOwogICAvKiBOdW1iZXIgb2YgYWdn cmVnYXRlIGxhdHRpY2VzICovCiAgIGludCBhZ2dzX2NvdW50OwogICAvKiBU cnVlIGlmIGFnZ3JlZ2F0ZSBkYXRhIHdlcmUgcGFzc2VkIGJ5IHJlZmVyZW5j ZSAoYXMgb3Bwb3NlZCB0byBieQpAQCAtNDU4LDYgKzUxNSwyMSBAQCBpcGNw X2FsaWdubWVudF9sYXR0aWNlOjpwcmludCAoRklMRSAqIGYpCiAgICAgZnBy aW50ZiAoZiwgIiAgICAgICAgIEFsaWdubWVudCAldSwgbWlzYWxpZ25tZW50 ICV1XG4iLCBhbGlnbiwgbWlzYWxpZ24pOwogfQogCit2b2lkCitpcGNwX2Jp dHNfbGF0dGljZTo6cHJpbnQgKEZJTEUgKmYpCit7CisgIGlmICh0b3BfcCAo KSkKKyAgICBmcHJpbnRmIChmLCAiICAgICAgICAgQml0cyB1bmtub3duIChU T1ApXG4iKTsKKyAgZWxzZSBpZiAoYm90dG9tX3AgKCkpCisgICAgZnByaW50 ZiAoZiwgIiAgICAgICAgIEJpdHMgdW51c2FibGUgKEJPVFRPTSlcbiIpOwor ICBlbHNlCisgICAgeworICAgICAgZnByaW50ZiAoZiwgIiAgICAgICAgIEJp dHM6IHZhbHVlID0gIik7IHByaW50X2hleCAoZ2V0X3ZhbHVlICgpLCBmKTsK KyAgICAgIGZwcmludGYgKGYsICIsIG1hc2sgPSAiKTsgcHJpbnRfaGV4IChn ZXRfbWFzayAoKSwgZik7CisgICAgICBmcHJpbnRmIChmLCAiXG4iKTsKKyAg ICB9Cit9CisKIC8qIFByaW50IGFsbCBpcGNwX2xhdHRpY2VzIG9mIGFsbCBm dW5jdGlvbnMgdG8gRi4gICovCiAKIHN0YXRpYyB2b2lkCkBAIC00ODQsNiAr NTU2LDcgQEAgcHJpbnRfYWxsX2xhdHRpY2VzIChGSUxFICogZiwgYm9vbCBk dW1wX3NvdXJjZXMsIGJvb2wgZHVtcF9iZW5lZml0cykKIAkgIGZwcmludGYg KGYsICIgICAgICAgICBjdHhzOiAiKTsKIAkgIHBsYXRzLT5jdHhsYXQucHJp bnQgKGYsIGR1bXBfc291cmNlcywgZHVtcF9iZW5lZml0cyk7CiAJICBwbGF0 cy0+YWxpZ25tZW50LnByaW50IChmKTsKKwkgIHBsYXRzLT5iaXRzX2xhdHRp Y2UucHJpbnQgKGYpOwogCSAgaWYgKHBsYXRzLT52aXJ0X2NhbGwpCiAJICAg IGZwcmludGYgKGYsICIgICAgICAgIHZpcnRfY2FsbCBmbGFnIHNldFxuIik7 CiAKQEAgLTkxMSw2ICs5ODQsMTUxIEBAIGlwY3BfYWxpZ25tZW50X2xhdHRp Y2U6Om1lZXRfd2l0aCAoY29uc3QgaXBjcF9hbGlnbm1lbnRfbGF0dGljZSAm b3RoZXIsCiAgIHJldHVybiBtZWV0X3dpdGhfMSAob3RoZXIuYWxpZ24sIGFk anVzdGVkX21pc2FsaWduKTsKIH0KIAorLyogU2V0IGxhdHRpY2UgdmFsdWUg dG8gYm90dG9tLCBpZiBpdCBhbHJlYWR5IGlzbid0IHRoZSBjYXNlLiAgKi8K KworYm9vbAoraXBjcF9iaXRzX2xhdHRpY2U6OnNldF90b19ib3R0b20gKCkK K3sKKyAgaWYgKGJvdHRvbV9wICgpKQorICAgIHJldHVybiBmYWxzZTsKKyAg bV9sYXR0aWNlX3ZhbCA9IElQQV9CSVRTX1ZBUllJTkc7CisgIG1fdmFsdWUg PSAwOworICBtX21hc2sgPSAtMTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8q IFNldCB0byBjb25zdGFudCBpZiBpdCBpc24ndCBhbHJlYWR5LiBPbmx5IG1l YW50IHRvIGJlIGNhbGxlZAorICAgd2hlbiBzd2l0Y2hpbmcgc3RhdGUgZnJv bSBUT1AuICAqLworCitib29sCitpcGNwX2JpdHNfbGF0dGljZTo6c2V0X3Rv X2NvbnN0YW50ICh3aWRlc3RfaW50IHZhbHVlLCB3aWRlc3RfaW50IG1hc2sp Cit7CisgIGdjY19hc3NlcnQgKHRvcF9wICgpKTsKKyAgbV9sYXR0aWNlX3Zh bCA9IElQQV9CSVRTX0NPTlNUQU5UOworICBtX3ZhbHVlID0gdmFsdWU7Cisg IG1fbWFzayA9IG1hc2s7CisgIHJldHVybiB0cnVlOworfQorCisvKiBDb252 ZXJ0IG9wZXJhbmQgdG8gdmFsdWUsIG1hc2sgZm9ybS4gICovCisKK3ZvaWQK K2lwY3BfYml0c19sYXR0aWNlOjpnZXRfdmFsdWVfYW5kX21hc2sgKHRyZWUg b3BlcmFuZCwgd2lkZXN0X2ludCAqdmFsdWVwLCB3aWRlc3RfaW50ICptYXNr cCkKK3sKKyAgd2lkZV9pbnQgZ2V0X25vbnplcm9fYml0cyAoY29uc3RfdHJl ZSk7CisKKyAgaWYgKFRSRUVfQ09ERSAob3BlcmFuZCkgPT0gSU5URUdFUl9D U1QpCisgICAgeworICAgICAgKnZhbHVlcCA9IHdpOjp0b193aWRlc3QgKG9w ZXJhbmQpOyAKKyAgICAgICptYXNrcCA9IDA7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgKnZhbHVlcCA9IDA7CisgICAgICAqbWFza3AgPSAtMTsK KyAgICB9Cit9CisKKy8qIE1lZXQgb3BlcmF0aW9uLCBzaW1pbGFyIHRvIGNj cF9sYXR0aWNlX21lZXQsIHdlIHhvciB2YWx1ZXMKKyAgIGlmIHRoaXMtPnZh bHVlLCB2YWx1ZSBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgYXQgc2FtZSBiaXQg cG9zaXRpb25zLCB3ZSB3YW50CisgICB0byBkcm9wIHRoYXQgYml0IHRvIHZh cnlpbmcuIFJldHVybiB0cnVlIGlmIG1hc2sgaXMgY2hhbmdlZC4KKyAgIFRo aXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBsYXR0aWNlIHZhbHVlIGlz IGluIENPTlNUQU5UIHN0YXRlICAqLworCitib29sCitpcGNwX2JpdHNfbGF0 dGljZTo6bWVldF93aXRoXzEgKHdpZGVzdF9pbnQgdmFsdWUsIHdpZGVzdF9p bnQgbWFzaywKKwkJCQl1bnNpZ25lZCBwcmVjaXNpb24pCit7CisgIGdjY19h c3NlcnQgKGNvbnN0YW50X3AgKCkpOworICAKKyAgd2lkZXN0X2ludCBvbGRf bWFzayA9IG1fbWFzazsgCisgIG1fbWFzayA9IChtX21hc2sgfCBtYXNrKSB8 IChtX3ZhbHVlIF4gdmFsdWUpOworCisgIGlmICh3aTo6c2V4dCAobV9tYXNr LCBwcmVjaXNpb24pID09IC0xKQorICAgIHJldHVybiBzZXRfdG9fYm90dG9t ICgpOworCisgIHJldHVybiBtX21hc2sgIT0gb2xkX21hc2s7Cit9CisKKy8q IE1lZXQgdGhlIGJpdHMgbGF0dGljZSB3aXRoIG9wZXJhbmQKKyAgIGRlc2Ny aWJlZCBieSA8dmFsdWUsIG1hc2ssIHNnbiwgcHJlY2lzaW9uLiAgKi8KKwor Ym9vbAoraXBjcF9iaXRzX2xhdHRpY2U6Om1lZXRfd2l0aCAod2lkZXN0X2lu dCB2YWx1ZSwgd2lkZXN0X2ludCBtYXNrLAorCQkJICAgICAgdW5zaWduZWQg cHJlY2lzaW9uKQoreworICBpZiAoYm90dG9tX3AgKCkpCisgICAgcmV0dXJu IGZhbHNlOworCisgIGlmICh0b3BfcCAoKSkKKyAgICB7CisgICAgICBpZiAo d2k6OnNleHQgKG1hc2ssIHByZWNpc2lvbikgPT0gLTEpCisJcmV0dXJuIHNl dF90b19ib3R0b20gKCk7CisgICAgICByZXR1cm4gc2V0X3RvX2NvbnN0YW50 ICh2YWx1ZSwgbWFzayk7IAorICAgIH0KKworICByZXR1cm4gbWVldF93aXRo XzEgKHZhbHVlLCBtYXNrLCBwcmVjaXNpb24pOworfQorCisvKiBNZWV0IGJp dHMgbGF0dGljZSB3aXRoIHRoZSByZXN1bHQgb2YgYml0X3ZhbHVlX2Jpbm9w IChvdGhlciwgb3BlcmFuZCkKKyAgIGlmIGNvZGUgaXMgYmluYXJ5IG9wZXJh dGlvbiBvciBiaXRfdmFsdWVfdW5vcCAob3RoZXIpIGlmIGNvZGUgaXMgdW5h cnkgb3AuCisgICBJbiB0aGUgY2FzZSB3aGVuIGNvZGUgaXMgbm9wX2V4cHIs IG5vIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQuICovCisKK2Jvb2wKK2lwY3Bf Yml0c19sYXR0aWNlOjptZWV0X3dpdGggKGlwY3BfYml0c19sYXR0aWNlJiBv dGhlciwgdW5zaWduZWQgcHJlY2lzaW9uLAorCQkJICAgICAgc2lnbm9wIHNn biwgZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSBvcGVyYW5kKQoreworICBp ZiAob3RoZXIuYm90dG9tX3AgKCkpCisgICAgcmV0dXJuIHNldF90b19ib3R0 b20gKCk7CisKKyAgaWYgKGJvdHRvbV9wICgpIHx8IG90aGVyLnRvcF9wICgp KQorICAgIHJldHVybiBmYWxzZTsKKworICB3aWRlc3RfaW50IGFkanVzdGVk X3ZhbHVlLCBhZGp1c3RlZF9tYXNrOworCisgIGlmIChUUkVFX0NPREVfQ0xB U1MgKGNvZGUpID09IHRjY19iaW5hcnkpCisgICAgeworICAgICAgdHJlZSB0 eXBlID0gVFJFRV9UWVBFIChvcGVyYW5kKTsKKyAgICAgIGdjY19hc3NlcnQg KElOVEVHUkFMX1RZUEVfUCAodHlwZSkpOworICAgICAgd2lkZXN0X2ludCBv X3ZhbHVlLCBvX21hc2s7CisgICAgICBnZXRfdmFsdWVfYW5kX21hc2sgKG9w ZXJhbmQsICZvX3ZhbHVlLCAmb19tYXNrKTsKKworICAgICAgYml0X3ZhbHVl X2Jpbm9wIChjb2RlLCBzZ24sIHByZWNpc2lvbiwgJmFkanVzdGVkX3ZhbHVl LCAmYWRqdXN0ZWRfbWFzaywKKwkJICAgICAgIHNnbiwgcHJlY2lzaW9uLCBv dGhlci5nZXRfdmFsdWUgKCksIG90aGVyLmdldF9tYXNrICgpLAorCQkgICAg ICAgVFlQRV9TSUdOICh0eXBlKSwgVFlQRV9QUkVDSVNJT04gKHR5cGUpLCBv X3ZhbHVlLCBvX21hc2spOworCisgICAgICBpZiAod2k6OnNleHQgKGFkanVz dGVkX21hc2ssIHByZWNpc2lvbikgPT0gLTEpCisJcmV0dXJuIHNldF90b19i b3R0b20gKCk7CisgICAgfQorCisgIGVsc2UgaWYgKFRSRUVfQ09ERV9DTEFT UyAoY29kZSkgPT0gdGNjX3VuYXJ5KQorICAgIHsKKyAgICAgIGJpdF92YWx1 ZV91bm9wIChjb2RlLCBzZ24sIHByZWNpc2lvbiwgJmFkanVzdGVkX3ZhbHVl LAorCQkgICAgICAmYWRqdXN0ZWRfbWFzaywgc2duLCBwcmVjaXNpb24sIG90 aGVyLmdldF92YWx1ZSAoKSwKKwkJICAgICAgb3RoZXIuZ2V0X21hc2sgKCkp OworCisgICAgICBpZiAod2k6OnNleHQgKGFkanVzdGVkX21hc2ssIHByZWNp c2lvbikgPT0gLTEpCisJcmV0dXJuIHNldF90b19ib3R0b20gKCk7CisgICAg fQorCisgIGVsc2UgaWYgKGNvZGUgPT0gTk9QX0VYUFIpCisgICAgeworICAg ICAgYWRqdXN0ZWRfdmFsdWUgPSBvdGhlci5tX3ZhbHVlOworICAgICAgYWRq dXN0ZWRfbWFzayA9IG90aGVyLm1fbWFzazsKKyAgICB9CisKKyAgZWxzZQor ICAgIHJldHVybiBzZXRfdG9fYm90dG9tICgpOworCisgIGlmICh0b3BfcCAo KSkKKyAgICB7CisgICAgICBpZiAod2k6OnNleHQgKGFkanVzdGVkX21hc2ss IHByZWNpc2lvbikgPT0gLTEpCisJcmV0dXJuIHNldF90b19ib3R0b20gKCk7 CisgICAgICByZXR1cm4gc2V0X3RvX2NvbnN0YW50IChhZGp1c3RlZF92YWx1 ZSwgYWRqdXN0ZWRfbWFzayk7IAorICAgIH0KKyAgZWxzZQorICAgIHJldHVy biBtZWV0X3dpdGhfMSAoYWRqdXN0ZWRfdmFsdWUsIGFkanVzdGVkX21hc2ss IHByZWNpc2lvbik7Cit9CisKIC8qIE1hcmsgYm90IGFnZ3JlZ2F0ZSBhbmQg c2NhbGFyIGxhdHRpY2VzIGFzIGNvbnRhaW5pbmcgYW4gdW5rbm93biB2YXJp YWJsZSwKICAgIHJldHVybiB0cnVlIGlzIGFueSBvZiB0aGVtIGhhcyBub3Qg YmVlbiBtYXJrZWQgYXMgc3VjaCBzbyBmYXIuICAqLwogCkBAIC05MjIsNiAr MTE0MCw3IEBAIHNldF9hbGxfY29udGFpbnNfdmFyaWFibGUgKHN0cnVjdCBp cGNwX3BhcmFtX2xhdHRpY2VzICpwbGF0cykKICAgcmV0IHw9IHBsYXRzLT5j dHhsYXQuc2V0X2NvbnRhaW5zX3ZhcmlhYmxlICgpOwogICByZXQgfD0gc2V0 X2FnZ19sYXRzX2NvbnRhaW5fdmFyaWFibGUgKHBsYXRzKTsKICAgcmV0IHw9 IHBsYXRzLT5hbGlnbm1lbnQuc2V0X3RvX2JvdHRvbSAoKTsKKyAgcmV0IHw9 IHBsYXRzLT5iaXRzX2xhdHRpY2Uuc2V0X3RvX2JvdHRvbSAoKTsKICAgcmV0 dXJuIHJldDsKIH0KIApAQCAtMTAwMyw2ICsxMjIyLDcgQEAgaW5pdGlhbGl6 ZV9ub2RlX2xhdHRpY2VzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAJ ICAgICAgcGxhdHMtPmN0eGxhdC5zZXRfdG9fYm90dG9tICgpOwogCSAgICAg IHNldF9hZ2dfbGF0c190b19ib3R0b20gKHBsYXRzKTsKIAkgICAgICBwbGF0 cy0+YWxpZ25tZW50LnNldF90b19ib3R0b20gKCk7CisJICAgICAgcGxhdHMt PmJpdHNfbGF0dGljZS5zZXRfdG9fYm90dG9tICgpOwogCSAgICB9CiAJICBl bHNlCiAJICAgIHNldF9hbGxfY29udGFpbnNfdmFyaWFibGUgKHBsYXRzKTsK QEAgLTE2MjEsNiArMTg0MSw3OCBAQCBwcm9wYWdhdGVfYWxpZ25tZW50X2Fj Y3Jvc3NfanVtcF9mdW5jdGlvbiAoY2dyYXBoX2VkZ2UgKmNzLAogICAgIH0K IH0KIAorLyogUHJvcGFnYXRlIGJpdHMgYWNyb3NzIGpmdW5jIHRoYXQgaXMg YXNzb2NpYXRlZCB3aXRoCisgICBlZGdlIGNzIGFuZCB1cGRhdGUgZGVzdF9s YXR0aWNlIGFjY29yZGluZ2x5LiAgKi8KKworYm9vbAorcHJvcGFnYXRlX2Jp dHNfYWNjcm9zc19qdW1wX2Z1bmN0aW9uIChjZ3JhcGhfZWRnZSAqY3MsIGlu dCBpZHgsIGlwYV9qdW1wX2Z1bmMgKmpmdW5jLAorCQkJCSAgICAgIGlwY3Bf Yml0c19sYXR0aWNlICpkZXN0X2xhdHRpY2UpCit7CisgIGlmIChkZXN0X2xh dHRpY2UtPmJvdHRvbV9wICgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBl bnVtIGF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHk7CisgIGNncmFwaF9ub2Rl ICpjYWxsZWUgPSBjcy0+Y2FsbGVlLT5mdW5jdGlvbl9zeW1ib2wgKCZhdmFp bGFiaWxpdHkpOworICBzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICpjYWxsZWVf aW5mbyA9IElQQV9OT0RFX1JFRiAoY2FsbGVlKTsKKyAgdHJlZSBwYXJtX3R5 cGUgPSBpcGFfZ2V0X3R5cGUgKGNhbGxlZV9pbmZvLCBpZHgpOworCisgIC8q IEZvciBLJlIgQyBwcm9ncmFtcywgaXBhX2dldF90eXBlKCkgY291bGQgcmV0 dXJuIE5VTExfVFJFRS4KKyAgICAgQXZvaWQgdGhlIHRyYW5zZm9ybSBmb3Ig dGhlc2UgY2FzZXMuICAqLworICBpZiAoIXBhcm1fdHlwZSkKKyAgICB7Cisg ICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJ TFMpKQorCWZwcmludGYgKGR1bXBfZmlsZSwgIlNldHRpbmcgZGVzdF9sYXR0 aWNlIHRvIGJvdHRvbSwgYmVjYXVzZSIKKwkJCSAgICAicGFyYW0gJWkgdHlw ZSBpcyBOVUxMIGZvciAlc1xuIiwgaWR4LAorCQkJICAgIGNzLT5jYWxsZWUt Pm5hbWUgKCkpOworCisgICAgICByZXR1cm4gZGVzdF9sYXR0aWNlLT5zZXRf dG9fYm90dG9tICgpOworICAgIH0KKworICB1bnNpZ25lZCBwcmVjaXNpb24g PSBUWVBFX1BSRUNJU0lPTiAocGFybV90eXBlKTsKKyAgc2lnbm9wIHNnbiA9 IFRZUEVfU0lHTiAocGFybV90eXBlKTsKKworICBpZiAoamZ1bmMtPnR5cGUg PT0gSVBBX0pGX1BBU1NfVEhST1VHSCkKKyAgICB7CisgICAgICBzdHJ1Y3Qg aXBhX25vZGVfcGFyYW1zICpjYWxsZXJfaW5mbyA9IElQQV9OT0RFX1JFRiAo Y3MtPmNhbGxlcik7CisgICAgICBlbnVtIHRyZWVfY29kZSBjb2RlID0gaXBh X2dldF9qZl9wYXNzX3Rocm91Z2hfb3BlcmF0aW9uIChqZnVuYyk7CisgICAg ICB0cmVlIG9wZXJhbmQgPSBOVUxMX1RSRUU7CisKKyAgICAgIGlmIChjb2Rl ICE9IE5PUF9FWFBSKQorCW9wZXJhbmQgPSBpcGFfZ2V0X2pmX3Bhc3NfdGhy b3VnaF9vcGVyYW5kIChqZnVuYyk7CisKKyAgICAgIGludCBzcmNfaWR4ID0g aXBhX2dldF9qZl9wYXNzX3Rocm91Z2hfZm9ybWFsX2lkIChqZnVuYyk7Cisg ICAgICBzdHJ1Y3QgaXBjcF9wYXJhbV9sYXR0aWNlcyAqc3JjX2xhdHMKKwk9 IGlwYV9nZXRfcGFybV9sYXR0aWNlcyAoY2FsbGVyX2luZm8sIHNyY19pZHgp OworCisgICAgICAvKiBUcnkgdG8gcHJvcGFnYXRlIGJpdHMgaWYgc3JjX2xh dHRpY2UgaXMgYm90dG9tLCBidXQgamZ1bmMgaXMga25vd24uCisJIGZvciBl ZyBjb25zaWRlcjoKKwkgaW50IGYoaW50IHgpCisJIHsKKwkgICBnICh4ICYg MHhmZik7CisJIH0KKwkgQXNzdW1lIGxhdHRpY2UgZm9yIHggaXMgYm90dG9t LCBob3dldmVyIHdlIGNhbiBzdGlsbCBwcm9wYWdhdGUKKwkgcmVzdWx0IG9m IHggJiAweGZmID09IDB4ZmYsIHdoaWNoIGdldHMgY29tcHV0ZWQgZHVyaW5n IGNjcDEgcGFzcworCSBhbmQgd2Ugc3RvcmUgaXQgaW4ganVtcCBmdW5jdGlv biBkdXJpbmcgYW5hbHlzaXMgc3RhZ2UuICAqLworCisgICAgICBpZiAoc3Jj X2xhdHMtPmJpdHNfbGF0dGljZS5ib3R0b21fcCAoKQorCSAgJiYgamZ1bmMt PmJpdHMua25vd24pCisJcmV0dXJuIGRlc3RfbGF0dGljZS0+bWVldF93aXRo IChqZnVuYy0+Yml0cy52YWx1ZSwgamZ1bmMtPmJpdHMubWFzaywKKwkJCQkJ cHJlY2lzaW9uKTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gZGVzdF9sYXR0aWNl LT5tZWV0X3dpdGggKHNyY19sYXRzLT5iaXRzX2xhdHRpY2UsIHByZWNpc2lv biwgc2duLAorCQkJCQljb2RlLCBvcGVyYW5kKTsKKyAgICB9CisKKyAgZWxz ZSBpZiAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0FOQ0VTVE9SKQorICAgIHJl dHVybiBkZXN0X2xhdHRpY2UtPnNldF90b19ib3R0b20gKCk7CisKKyAgZWxz ZSBpZiAoamZ1bmMtPmJpdHMua25vd24pIAorICAgIHJldHVybiBkZXN0X2xh dHRpY2UtPm1lZXRfd2l0aCAoamZ1bmMtPmJpdHMudmFsdWUsIGpmdW5jLT5i aXRzLm1hc2ssIHByZWNpc2lvbik7CisgIAorICBlbHNlCisgICAgcmV0dXJu IGRlc3RfbGF0dGljZS0+c2V0X3RvX2JvdHRvbSAoKTsKK30KKwogLyogSWYg REVTVF9QTEFUUyBhbHJlYWR5IGhhcyBhZ2dyZWdhdGUgaXRlbXMsIGNoZWNr IHRoYXQgYWdnc19ieV9yZWYgbWF0Y2hlcwogICAgTkVXX0FHR1NfQllfUkVG IGFuZCBpZiBub3QsIG1hcmsgYWxsIGFnZ3MgYXMgYm90dG9tcyBhbmQgcmV0 dXJuIHRydWUgKGluIGFsbAogICAgb3RoZXIgY2FzZXMsIHJldHVybiBmYWxz ZSkuICBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGl0ZW1zLCBzZXQKQEAg LTE5NjgsNiArMjI2MCw4IEBAIHByb3BhZ2F0ZV9jb25zdGFudHNfYWNjcm9z c19jYWxsIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNzKQogCQkJCQkJCSAgJmRl c3RfcGxhdHMtPmN0eGxhdCk7CiAJICByZXQgfD0gcHJvcGFnYXRlX2FsaWdu bWVudF9hY2Nyb3NzX2p1bXBfZnVuY3Rpb24gKGNzLCBqdW1wX2Z1bmMsCiAJ CQkJCQkJICZkZXN0X3BsYXRzLT5hbGlnbm1lbnQpOworCSAgcmV0IHw9IHBy b3BhZ2F0ZV9iaXRzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY3MsIGksIGp1 bXBfZnVuYywKKwkJCQkJCSAgICAgICAmZGVzdF9wbGF0cy0+Yml0c19sYXR0 aWNlKTsKIAkgIHJldCB8PSBwcm9wYWdhdGVfYWdnc19hY2Nyb3NzX2p1bXBf ZnVuY3Rpb24gKGNzLCBqdW1wX2Z1bmMsCiAJCQkJCQkgICAgICAgZGVzdF9w bGF0cyk7CiAJfQpAQCAtMjkzNiw2ICszMjMwLDE5IEBAIGlwY3BfcHJvcGFn YXRlX3N0YWdlIChzdHJ1Y3QgaXBhX3RvcG9faW5mbyAqdG9wbykKICAgewog ICAgIHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8gPSBJUEFfTk9ERV9S RUYgKG5vZGUpOwogCisgICAgLyogSW4gTFRPIHdlIGRvIG5vdCBoYXZlIFBB Uk1fREVDTHMgYnV0IHdlIHdvdWxkIHN0aWxsIGxpa2UgdG8gYmUgYWJsZSB0 bworICAgICAgIGxvb2sgYXQgdHlwZXMgb2YgcGFyYW1ldGVycy4gICovCisg ICAgaWYgKGluX2x0b19wKQorICAgICAgeworCXRyZWUgdCA9IFRZUEVfQVJH X1RZUEVTIChUUkVFX1RZUEUgKG5vZGUtPmRlY2wpKTsKKwlmb3IgKGludCBr ID0gMDsgayA8IGlwYV9nZXRfcGFyYW1fY291bnQgKGluZm8pICYmIHQ7IGsr KykKKwkgIHsKKwkgICAgZ2NjX2Fzc2VydCAodCAhPSB2b2lkX2xpc3Rfbm9k ZSk7CisJICAgIGluZm8tPmRlc2NyaXB0b3JzW2tdLmRlY2xfb3JfdHlwZSA9 IFRSRUVfVkFMVUUgKHQpOworCSAgICB0ID0gdCA/IFRSRUVfQ0hBSU4gKHQp IDogTlVMTDsKKwkgIH0KKyAgICAgIH0KKwogICAgIGRldGVybWluZV92ZXJz aW9uYWJpbGl0eSAobm9kZSwgaW5mbyk7CiAgICAgaWYgKG5vZGUtPmhhc19n aW1wbGVfYm9keV9wICgpKQogICAgICAgewpAQCAtNDU5Miw2ICs0ODk5LDgx IEBAIGlwY3Bfc3RvcmVfYWxpZ25tZW50X3Jlc3VsdHMgKHZvaWQpCiAgIH0K IH0KIAorLyogTG9vayB1cCBhbGwgdGhlIGJpdHMgaW5mb3JtYXRpb24gdGhh dCB3ZSBoYXZlIGRpc2NvdmVyZWQgYW5kIGNvcHkgaXQgb3ZlcgorICAgdG8g dGhlIHRyYW5zZm9ybWF0aW9uIHN1bW1hcnkuICAqLworCitzdGF0aWMgdm9p ZAoraXBjcF9zdG9yZV9iaXRzX3Jlc3VsdHMgKHZvaWQpCit7CisgIGNncmFw aF9ub2RlICpub2RlOworCisgIEZPUl9FQUNIX0ZVTkNUSU9OX1dJVEhfR0lN UExFX0JPRFkgKG5vZGUpCisgICAgeworICAgICAgaXBhX25vZGVfcGFyYW1z ICppbmZvID0gSVBBX05PREVfUkVGIChub2RlKTsKKyAgICAgIGJvb2wgZHVt cGVkX3N0aCA9IGZhbHNlOworICAgICAgYm9vbCBmb3VuZF91c2VmdWxfcmVz dWx0ID0gZmFsc2U7CisKKyAgICAgIGlmICghb3B0X2Zvcl9mbiAobm9kZS0+ ZGVjbCwgZmxhZ19pcGFfY3BfYml0KSkKKwl7CisJICBpZiAoZHVtcF9maWxl KQorCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJOb3QgY29uc2lkZXJpbmcg JXMgZm9yIGlwYSBiaXR3aXNlIHByb3BhZ2F0aW9uICIKKwkJCQkiOyAtZmlw YS1jcC1iaXQ6IGRpc2FibGVkLlxuIiwKKwkJCQlub2RlLT5uYW1lICgpKTsK KwkgIGNvbnRpbnVlOworCX0KKworICAgICAgaWYgKGluZm8tPmlwY3Bfb3Jp Z19ub2RlKQorCWluZm8gPSBJUEFfTk9ERV9SRUYgKGluZm8tPmlwY3Bfb3Jp Z19ub2RlKTsKKworICAgICAgdW5zaWduZWQgY291bnQgPSBpcGFfZ2V0X3Bh cmFtX2NvdW50IChpbmZvKTsKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBjb3VudDsgaSsrKQorCXsKKwkgIGlwY3BfcGFyYW1fbGF0dGljZXMg KnBsYXRzID0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChpbmZvLCBpKTsKKwkg IGlmIChwbGF0cy0+Yml0c19sYXR0aWNlLmNvbnN0YW50X3AgKCkpCisJICAg IHsKKwkgICAgICBmb3VuZF91c2VmdWxfcmVzdWx0ID0gdHJ1ZTsKKwkgICAg ICBicmVhazsKKwkgICAgfQorCX0KKworICAgIGlmICghZm91bmRfdXNlZnVs X3Jlc3VsdCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgaXBjcF9ncm93X3Ry YW5zZm9ybWF0aW9uc19pZl9uZWNlc3NhcnkgKCk7CisgICAgaXBjcF90cmFu c2Zvcm1hdGlvbl9zdW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3RyYW5zZm9ybWF0 aW9uX3N1bW1hcnkgKG5vZGUpOworICAgIHZlY19zYWZlX3Jlc2VydmVfZXhh Y3QgKHRzLT5iaXRzLCBjb3VudCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgIHsKKwlpcGNwX3BhcmFtX2xh dHRpY2VzICpwbGF0cyA9IGlwYV9nZXRfcGFybV9sYXR0aWNlcyAoaW5mbywg aSk7CisJaXBhX2JpdHMgYml0c19qZnVuYzsJCQkgCisKKwlpZiAocGxhdHMt PmJpdHNfbGF0dGljZS5jb25zdGFudF9wICgpKQorCSAgeworCSAgICBiaXRz X2pmdW5jLmtub3duID0gdHJ1ZTsKKwkgICAgYml0c19qZnVuYy52YWx1ZSA9 IHBsYXRzLT5iaXRzX2xhdHRpY2UuZ2V0X3ZhbHVlICgpOworCSAgICBiaXRz X2pmdW5jLm1hc2sgPSBwbGF0cy0+Yml0c19sYXR0aWNlLmdldF9tYXNrICgp OworCSAgfQorCWVsc2UKKwkgIGJpdHNfamZ1bmMua25vd24gPSBmYWxzZTsK KworCXRzLT5iaXRzLT5xdWlja19wdXNoIChiaXRzX2pmdW5jKTsKKwlpZiAo IWR1bXBfZmlsZSB8fCAhYml0c19qZnVuYy5rbm93bikKKwkgIGNvbnRpbnVl OworCWlmICghZHVtcGVkX3N0aCkKKwkgIHsKKwkgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiUHJvcGFnYXRlZCBiaXRzIGluZm8gZm9yIGZ1bmN0aW9uICVz LyVpOlxuIiwKKwkJCQlub2RlLT5uYW1lICgpLCBub2RlLT5vcmRlcik7CisJ ICAgIGR1bXBlZF9zdGggPSB0cnVlOworCSAgfQorCWZwcmludGYgKGR1bXBf ZmlsZSwgIiBwYXJhbSAlaTogdmFsdWUgPSAiLCBpKTsKKwlwcmludF9oZXgg KGJpdHNfamZ1bmMudmFsdWUsIGR1bXBfZmlsZSk7CisJZnByaW50ZiAoZHVt cF9maWxlLCAiLCBtYXNrID0gIik7CisJcHJpbnRfaGV4IChiaXRzX2pmdW5j Lm1hc2ssIGR1bXBfZmlsZSk7CisJZnByaW50ZiAoZHVtcF9maWxlLCAiXG4i KTsKKyAgICAgIH0KKyAgICB9Cit9CiAvKiBUaGUgSVBDUCBkcml2ZXIuICAq LwogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC00NjI1LDYgKzUwMDcsOCBA QCBpcGNwX2RyaXZlciAodm9pZCkKICAgaXBjcF9kZWNpc2lvbl9zdGFnZSAo JnRvcG8pOwogICAvKiBTdG9yZSByZXN1bHRzIG9mIGFsaWdubWVudCBwcm9w YWdhdGlvbi4gKi8KICAgaXBjcF9zdG9yZV9hbGlnbm1lbnRfcmVzdWx0cyAo KTsKKyAgLyogU3RvcmUgcmVzdWx0cyBvZiBiaXRzIHByb3BhZ2F0aW9uLiAg Ki8KKyAgaXBjcF9zdG9yZV9iaXRzX3Jlc3VsdHMgKCk7CiAKICAgLyogRnJl ZSBhbGwgSVBDUCBzdHJ1Y3R1cmVzLiAgKi8KICAgZnJlZV90b3BvcmRlcl9p bmZvICgmdG9wbyk7CmRpZmYgLS1naXQgYS9nY2MvaXBhLXByb3AuYyBiL2dj Yy9pcGEtcHJvcC5jCmluZGV4IDQzODU2MTQuLjE2Mjk3ODEgMTAwNjQ0Ci0t LSBhL2djYy9pcGEtcHJvcC5jCisrKyBiL2djYy9pcGEtcHJvcC5jCkBAIC0x MDUsNyArMTA1LDcgQEAgaXBhX2dldF9wYXJhbV9kZWNsX2luZGV4XzEgKHZl YzxpcGFfcGFyYW1fZGVzY3JpcHRvcj4gZGVzY3JpcHRvcnMsIHRyZWUgcHRy ZWUpCiAKICAgY291bnQgPSBkZXNjcmlwdG9ycy5sZW5ndGggKCk7CiAgIGZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIGlmIChkZXNjcmlwdG9y c1tpXS5kZWNsID09IHB0cmVlKQorICAgIGlmIChkZXNjcmlwdG9yc1tpXS5k ZWNsX29yX3R5cGUgPT0gcHRyZWUpCiAgICAgICByZXR1cm4gaTsKIAogICBy ZXR1cm4gLTE7CkBAIC0xMzgsNyArMTM4LDcgQEAgaXBhX3BvcHVsYXRlX3Bh cmFtX2RlY2xzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAgIHBhcmFt X251bSA9IDA7CiAgIGZvciAocGFybSA9IGZuYXJnczsgcGFybTsgcGFybSA9 IERFQ0xfQ0hBSU4gKHBhcm0pKQogICAgIHsKLSAgICAgIGRlc2NyaXB0b3Jz W3BhcmFtX251bV0uZGVjbCA9IHBhcm07CisgICAgICBkZXNjcmlwdG9yc1tw YXJhbV9udW1dLmRlY2xfb3JfdHlwZSA9IHBhcm07CiAgICAgICBkZXNjcmlw dG9yc1twYXJhbV9udW1dLm1vdmVfY29zdCA9IGVzdGltYXRlX21vdmVfY29z dCAoVFJFRV9UWVBFIChwYXJtKSwKIAkJCQkJCQkgICAgIHRydWUpOwogICAg ICAgcGFyYW1fbnVtKys7CkBAIC0xNjgsMTAgKzE2OCwxMCBAQCB2b2lkCiBp cGFfZHVtcF9wYXJhbSAoRklMRSAqZmlsZSwgc3RydWN0IGlwYV9ub2RlX3Bh cmFtcyAqaW5mbywgaW50IGkpCiB7CiAgIGZwcmludGYgKGZpbGUsICJwYXJh bSAjJWkiLCBpKTsKLSAgaWYgKGluZm8tPmRlc2NyaXB0b3JzW2ldLmRlY2wp CisgIGlmIChpbmZvLT5kZXNjcmlwdG9yc1tpXS5kZWNsX29yX3R5cGUpCiAg ICAgewogICAgICAgZnByaW50ZiAoZmlsZSwgIiAiKTsKLSAgICAgIHByaW50 X2dlbmVyaWNfZXhwciAoZmlsZSwgaW5mby0+ZGVzY3JpcHRvcnNbaV0uZGVj bCwgMCk7CisgICAgICBwcmludF9nZW5lcmljX2V4cHIgKGZpbGUsIGluZm8t PmRlc2NyaXB0b3JzW2ldLmRlY2xfb3JfdHlwZSwgMCk7CiAgICAgfQogfQog CkBAIC0zMDIsNiArMzAyLDE1IEBAIGlwYV9wcmludF9ub2RlX2p1bXBfZnVu Y3Rpb25zX2Zvcl9lZGdlIChGSUxFICpmLCBzdHJ1Y3QgY2dyYXBoX2VkZ2Ug KmNzKQogCX0KICAgICAgIGVsc2UKIAlmcHJpbnRmIChmLCAiICAgICAgICAg VW5rbm93biBhbGlnbm1lbnRcbiIpOworCisgICAgICBpZiAoanVtcF9mdW5j LT5iaXRzLmtub3duKQorCXsKKwkgIGZwcmludGYgKGYsICIgICAgICAgICB2 YWx1ZTogIik7IHByaW50X2hleCAoanVtcF9mdW5jLT5iaXRzLnZhbHVlLCBm KTsKKwkgIGZwcmludGYgKGYsICIsIG1hc2s6ICIpOyBwcmludF9oZXggKGp1 bXBfZnVuYy0+Yml0cy5tYXNrLCBmKTsKKwkgIGZwcmludGYgKGYsICJcbiIp OworCX0KKyAgICAgIGVsc2UKKwlmcHJpbnRmIChmLCAiICAgICAgICAgVW5r bm93biBiaXRzXG4iKTsKICAgICB9CiB9CiAKQEAgLTM4MSw2ICszOTAsNyBA QCBpcGFfc2V0X2pmX3Vua25vd24gKHN0cnVjdCBpcGFfanVtcF9mdW5jICpq ZnVuYykKIHsKICAgamZ1bmMtPnR5cGUgPSBJUEFfSkZfVU5LTk9XTjsKICAg amZ1bmMtPmFsaWdubWVudC5rbm93biA9IGZhbHNlOworICBqZnVuYy0+Yml0 cy5rbm93biA9IGZhbHNlOwogfQogCiAvKiBTZXQgSkZVTkMgdG8gYmUgYSBj b3B5IG9mIGFub3RoZXIgam1wICh0byBiZSB1c2VkIGJ5IGp1bXAgZnVuY3Rp b24KQEAgLTE2NzQsNiArMTY4NCwyNiBAQCBpcGFfY29tcHV0ZV9qdW1wX2Z1 bmN0aW9uc19mb3JfZWRnZSAoc3RydWN0IGlwYV9mdW5jX2JvZHlfaW5mbyAq ZmJpLAogICAgICAgZWxzZQogCWdjY19hc3NlcnQgKCFqZnVuYy0+YWxpZ25t ZW50Lmtub3duKTsKIAorICAgICAgaWYgKElOVEVHUkFMX1RZUEVfUCAoVFJF RV9UWVBFIChhcmcpKQorCSAgJiYgKFRSRUVfQ09ERSAoYXJnKSA9PSBTU0Ff TkFNRSB8fCBUUkVFX0NPREUgKGFyZykgPT0gSU5URUdFUl9DU1QpKQorCXsK KwkgIGpmdW5jLT5iaXRzLmtub3duID0gdHJ1ZTsKKwkgIAorCSAgaWYgKFRS RUVfQ09ERSAoYXJnKSA9PSBTU0FfTkFNRSkKKwkgICAgeworCSAgICAgIGpm dW5jLT5iaXRzLnZhbHVlID0gMDsKKwkgICAgICBqZnVuYy0+Yml0cy5tYXNr ID0gd2lkZXN0X2ludDo6ZnJvbSAoZ2V0X25vbnplcm9fYml0cyAoYXJnKSwK KwkJCQkJCSAgIFRZUEVfU0lHTiAoVFJFRV9UWVBFIChhcmcpKSk7CisJICAg IH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGpmdW5jLT5iaXRzLnZhbHVl ID0gd2k6OnRvX3dpZGVzdCAoYXJnKTsKKwkgICAgICBqZnVuYy0+Yml0cy5t YXNrID0gMDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlnY2NfYXNzZXJ0 ICghamZ1bmMtPmJpdHMua25vd24pOworCiAgICAgICBpZiAoaXNfZ2ltcGxl X2lwX2ludmFyaWFudCAoYXJnKQogCSAgfHwgKFRSRUVfQ09ERSAoYXJnKSA9 PSBWQVJfREVDTAogCSAgICAgICYmIGlzX2dsb2JhbF92YXIgKGFyZykKQEAg LTM2OTAsNiArMzcyMCwxOCBAQCBpcGFfbm9kZV9wYXJhbXNfdDo6ZHVwbGlj YXRlKGNncmFwaF9ub2RlICpzcmMsIGNncmFwaF9ub2RlICpkc3QsCiAgICAg ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjX2FsaWdubWVudHMtPmxl bmd0aCAoKTsgKytpKQogCWRzdF9hbGlnbm1lbnRzLT5xdWlja19wdXNoICgo KnNyY19hbGlnbm1lbnRzKVtpXSk7CiAgICAgfQorCisgIGlmIChzcmNfdHJh bnMgJiYgdmVjX3NhZmVfbGVuZ3RoIChzcmNfdHJhbnMtPmJpdHMpID4gMCkK KyAgICB7CisgICAgICBpcGNwX2dyb3dfdHJhbnNmb3JtYXRpb25zX2lmX25l Y2Vzc2FyeSAoKTsKKyAgICAgIHNyY190cmFucyA9IGlwY3BfZ2V0X3RyYW5z Zm9ybWF0aW9uX3N1bW1hcnkgKHNyYyk7CisgICAgICBjb25zdCB2ZWM8aXBh X2JpdHMsIHZhX2djPiAqc3JjX2JpdHMgPSBzcmNfdHJhbnMtPmJpdHM7Cisg ICAgICB2ZWM8aXBhX2JpdHMsIHZhX2djPiAqJmRzdF9iaXRzCisJPSBpcGNw X2dldF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5IChkc3QpLT5iaXRzOworICAg ICAgdmVjX3NhZmVfcmVzZXJ2ZV9leGFjdCAoZHN0X2JpdHMsIHNyY19iaXRz LT5sZW5ndGggKCkpOworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IHNyY19iaXRzLT5sZW5ndGggKCk7ICsraSkKKwlkc3RfYml0cy0+cXVpY2tf cHVzaCAoKCpzcmNfYml0cylbaV0pOworICAgIH0KIH0KIAogLyogUmVnaXN0 ZXIgb3VyIGNncmFwaCBob29rcyBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSB0 aGVyZS4gICovCkBAIC00NjA5LDYgKzQ2NTEsMTUgQEAgaXBhX3dyaXRlX2p1 bXBfZnVuY3Rpb24gKHN0cnVjdCBvdXRwdXRfYmxvY2sgKm9iLAogICAgICAg c3RyZWFtZXJfd3JpdGVfdWh3aSAob2IsIGp1bXBfZnVuYy0+YWxpZ25tZW50 LmFsaWduKTsKICAgICAgIHN0cmVhbWVyX3dyaXRlX3Vod2kgKG9iLCBqdW1w X2Z1bmMtPmFsaWdubWVudC5taXNhbGlnbik7CiAgICAgfQorCisgIGJwID0g Yml0cGFja19jcmVhdGUgKG9iLT5tYWluX3N0cmVhbSk7CisgIGJwX3BhY2tf dmFsdWUgKCZicCwganVtcF9mdW5jLT5iaXRzLmtub3duLCAxKTsKKyAgc3Ry ZWFtZXJfd3JpdGVfYml0cGFjayAoJmJwKTsKKyAgaWYgKGp1bXBfZnVuYy0+ Yml0cy5rbm93bikKKyAgICB7CisgICAgICBzdHJlYW1lcl93cml0ZV93aWRl c3RfaW50IChvYiwganVtcF9mdW5jLT5iaXRzLnZhbHVlKTsKKyAgICAgIHN0 cmVhbWVyX3dyaXRlX3dpZGVzdF9pbnQgKG9iLCBqdW1wX2Z1bmMtPmJpdHMu bWFzayk7CisgICAgfSAgIAogfQogCiAvKiBSZWFkIGluIGp1bXAgZnVuY3Rp b24gSlVNUF9GVU5DIGZyb20gSUIuICAqLwpAQCAtNDY4NSw2ICs0NzM2LDE3 IEBAIGlwYV9yZWFkX2p1bXBfZnVuY3Rpb24gKHN0cnVjdCBsdG9faW5wdXRf YmxvY2sgKmliLAogICAgIH0KICAgZWxzZQogICAgIGp1bXBfZnVuYy0+YWxp Z25tZW50Lmtub3duID0gZmFsc2U7CisKKyAgYnAgPSBzdHJlYW1lcl9yZWFk X2JpdHBhY2sgKGliKTsKKyAgYm9vbCBiaXRzX2tub3duID0gYnBfdW5wYWNr X3ZhbHVlICgmYnAsIDEpOworICBpZiAoYml0c19rbm93bikKKyAgICB7Cisg ICAgICBqdW1wX2Z1bmMtPmJpdHMua25vd24gPSB0cnVlOworICAgICAganVt cF9mdW5jLT5iaXRzLnZhbHVlID0gc3RyZWFtZXJfcmVhZF93aWRlc3RfaW50 IChpYik7CisgICAgICBqdW1wX2Z1bmMtPmJpdHMubWFzayA9IHN0cmVhbWVy X3JlYWRfd2lkZXN0X2ludCAoaWIpOworICAgIH0KKyAgZWxzZQorICAgIGp1 bXBfZnVuYy0+Yml0cy5rbm93biA9IGZhbHNlOwogfQogCiAvKiBTdHJlYW0g b3V0IHBhcnRzIG9mIGNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8gY29ycmVz cG9uZGluZyB0byBDUyB0aGF0IGFyZQpAQCAtNTA1MCw2ICs1MTEyLDI4IEBA IHdyaXRlX2lwY3BfdHJhbnNmb3JtYXRpb25faW5mbyAob3V0cHV0X2Jsb2Nr ICpvYiwgY2dyYXBoX25vZGUgKm5vZGUpCiAgICAgfQogICBlbHNlCiAgICAg c3RyZWFtZXJfd3JpdGVfdWh3aSAob2IsIDApOworCisgIHRzID0gaXBjcF9n ZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAobm9kZSk7CisgIGlmICh0cyAm JiB2ZWNfc2FmZV9sZW5ndGggKHRzLT5iaXRzKSA+IDApCisgICAgeworICAg ICAgY291bnQgPSB0cy0+Yml0cy0+bGVuZ3RoICgpOworICAgICAgc3RyZWFt ZXJfd3JpdGVfdWh3aSAob2IsIGNvdW50KTsKKworICAgICAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisJeworCSAgY29uc3QgaXBh X2JpdHMmIGJpdHNfamZ1bmMgPSAoKnRzLT5iaXRzKVtpXTsKKwkgIHN0cnVj dCBiaXRwYWNrX2QgYnAgPSBiaXRwYWNrX2NyZWF0ZSAob2ItPm1haW5fc3Ry ZWFtKTsKKwkgIGJwX3BhY2tfdmFsdWUgKCZicCwgYml0c19qZnVuYy5rbm93 biwgMSk7CisJICBzdHJlYW1lcl93cml0ZV9iaXRwYWNrICgmYnApOworCSAg aWYgKGJpdHNfamZ1bmMua25vd24pCisJICAgIHsKKwkgICAgICBzdHJlYW1l cl93cml0ZV93aWRlc3RfaW50IChvYiwgYml0c19qZnVuYy52YWx1ZSk7CisJ ICAgICAgc3RyZWFtZXJfd3JpdGVfd2lkZXN0X2ludCAob2IsIGJpdHNfamZ1 bmMubWFzayk7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgc3Ry ZWFtZXJfd3JpdGVfdWh3aSAob2IsIDApOwogfQogCiAvKiBTdHJlYW0gaW4g dGhlIGFnZ3JlZ2F0ZSB2YWx1ZSByZXBsYWNlbWVudCBjaGFpbiBmb3IgTk9E RSBmcm9tIElCLiAgKi8KQEAgLTUxMDIsNiArNTE4NiwyNiBAQCByZWFkX2lw Y3BfdHJhbnNmb3JtYXRpb25faW5mbyAobHRvX2lucHV0X2Jsb2NrICppYiwg Y2dyYXBoX25vZGUgKm5vZGUsCiAJICAgIH0KIAl9CiAgICAgfQorCisgIGNv dW50ID0gc3RyZWFtZXJfcmVhZF91aHdpIChpYik7CisgIGlmIChjb3VudCA+ IDApCisgICAgeworICAgICAgaXBjcF9ncm93X3RyYW5zZm9ybWF0aW9uc19p Zl9uZWNlc3NhcnkgKCk7CisgICAgICBpcGNwX3RyYW5zZm9ybWF0aW9uX3N1 bW1hcnkgKnRzID0gaXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAo bm9kZSk7CisgICAgICB2ZWNfc2FmZV9ncm93X2NsZWFyZWQgKHRzLT5iaXRz LCBjb3VudCk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr KQorCXsKKwkgIGlwYV9iaXRzJiBiaXRzX2pmdW5jID0gKCp0cy0+Yml0cylb aV07CisJICBzdHJ1Y3QgYml0cGFja19kIGJwID0gc3RyZWFtZXJfcmVhZF9i aXRwYWNrIChpYik7CisJICBiaXRzX2pmdW5jLmtub3duID0gYnBfdW5wYWNr X3ZhbHVlICgmYnAsIDEpOworCSAgaWYgKGJpdHNfamZ1bmMua25vd24pCisJ ICAgIHsKKwkgICAgICBiaXRzX2pmdW5jLnZhbHVlID0gc3RyZWFtZXJfcmVh ZF93aWRlc3RfaW50IChpYik7CisJICAgICAgYml0c19qZnVuYy5tYXNrID0g c3RyZWFtZXJfcmVhZF93aWRlc3RfaW50IChpYik7CisJICAgIH0KKwl9Cisg ICAgfQogfQogCiAvKiBXcml0ZSBhbGwgYWdncmVnYXRlIHJlcGxhY2VtZW50 IGZvciBub2RlcyBpbiBzZXQuICAqLwpAQCAtNTQwNCw2ICs1NTA4LDU2IEBA IGlwY3BfdXBkYXRlX2FsaWdubWVudHMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAq bm9kZSkKICAgICB9CiB9CiAKKy8qIFVwZGF0ZSBiaXRzIGluZm8gb2YgZm9y bWFsIHBhcmFtZXRlcnMgYXMgZGVzY3JpYmVkIGluCisgICBpcGNwX3RyYW5z Zm9ybWF0aW9uX3N1bW1hcnkuICAqLworCitzdGF0aWMgdm9pZAoraXBjcF91 cGRhdGVfYml0cyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICB0 cmVlIHBhcm0gPSBERUNMX0FSR1VNRU5UUyAobm9kZS0+ZGVjbCk7CisgIHRy ZWUgbmV4dF9wYXJtID0gcGFybTsKKyAgaXBjcF90cmFuc2Zvcm1hdGlvbl9z dW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkg KG5vZGUpOworCisgIGlmICghdHMgfHwgdmVjX3NhZmVfbGVuZ3RoICh0cy0+ Yml0cykgPT0gMCkKKyAgICByZXR1cm47CisKKyAgdmVjPGlwYV9iaXRzLCB2 YV9nYz4gJmJpdHMgPSAqdHMtPmJpdHM7CisgIHVuc2lnbmVkIGNvdW50ID0g Yml0cy5sZW5ndGggKCk7CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IGNvdW50OyArK2ksIHBhcm0gPSBuZXh0X3Bhcm0pCisgICAgeworICAgICAg aWYgKG5vZGUtPmNsb25lLmNvbWJpbmVkX2FyZ3NfdG9fc2tpcAorCSAgJiYg Yml0bWFwX2JpdF9wIChub2RlLT5jbG9uZS5jb21iaW5lZF9hcmdzX3RvX3Nr aXAsIGkpKQorCWNvbnRpbnVlOworCisgICAgICBnY2NfY2hlY2tpbmdfYXNz ZXJ0IChwYXJtKTsKKyAgICAgIG5leHRfcGFybSA9IERFQ0xfQ0hBSU4gKHBh cm0pOworCisgICAgICBpZiAoIWJpdHNbaV0ua25vd24KKwkgIHx8ICFJTlRF R1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAocGFybSkpCisJICB8fCAhaXNfZ2lt cGxlX3JlZyAocGFybSkpCisJY29udGludWU7ICAgICAgIAorCisgICAgICB0 cmVlIGRkZWYgPSBzc2FfZGVmYXVsdF9kZWYgKERFQ0xfU1RSVUNUX0ZVTkNU SU9OIChub2RlLT5kZWNsKSwgcGFybSk7CisgICAgICBpZiAoIWRkZWYpCisJ Y29udGludWU7CisKKyAgICAgIGlmIChkdW1wX2ZpbGUpCisJeworCSAgZnBy aW50ZiAoZHVtcF9maWxlLCAiQWRqdXN0aW5nIG1hc2sgZm9yIHBhcmFtICV1 IHRvICIsIGkpOyAKKwkgIHByaW50X2hleCAoYml0c1tpXS5tYXNrLCBkdW1w X2ZpbGUpOworCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKKwl9CisK KyAgICAgIHVuc2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJU0lPTiAoVFJFRV9U WVBFIChkZGVmKSk7CisgICAgICBzaWdub3Agc2duID0gVFlQRV9TSUdOIChU UkVFX1RZUEUgKGRkZWYpKTsKKworICAgICAgd2lkZV9pbnQgbm9uemVyb19i aXRzID0gd2lkZV9pbnQ6OmZyb20gKGJpdHNbaV0ubWFzaywgcHJlYywgVU5T SUdORUQpCisJCQkgICAgICB8IHdpZGVfaW50Ojpmcm9tIChiaXRzW2ldLnZh bHVlLCBwcmVjLCBzZ24pOworICAgICAgc2V0X25vbnplcm9fYml0cyAoZGRl Ziwgbm9uemVyb19iaXRzKTsKKyAgICB9Cit9CisKIC8qIElQQ1AgdHJhbnNm b3JtYXRpb24gcGhhc2UgZG9pbmcgcHJvcGFnYXRpb24gb2YgYWdncmVnYXRl IHZhbHVlcy4gICovCiAKIHVuc2lnbmVkIGludApAQCAtNTQyMyw2ICs1NTc3 LDcgQEAgaXBjcF90cmFuc2Zvcm1fZnVuY3Rpb24gKHN0cnVjdCBjZ3JhcGhf bm9kZSAqbm9kZSkKIAkgICAgIG5vZGUtPm5hbWUgKCksIG5vZGUtPm9yZGVy KTsKIAogICBpcGNwX3VwZGF0ZV9hbGlnbm1lbnRzIChub2RlKTsKKyAgaXBj cF91cGRhdGVfYml0cyAobm9kZSk7CiAgIGFnZ3ZhbCA9IGlwYV9nZXRfYWdn X3JlcGxhY2VtZW50c19mb3Jfbm9kZSAobm9kZSk7CiAgIGlmICghYWdndmFs KQogICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9nY2MvaXBhLXByb3Au aCBiL2djYy9pcGEtcHJvcC5oCmluZGV4IGUzMmQwNzguLmU1YTU2ZGEgMTAw NjQ0Ci0tLSBhL2djYy9pcGEtcHJvcC5oCisrKyBiL2djYy9pcGEtcHJvcC5o CkBAIC0xNTQsNiArMTU0LDE5IEBAIHN0cnVjdCBHVFkoKCkpIGlwYV9hbGln bm1lbnQKICAgdW5zaWduZWQgbWlzYWxpZ247CiB9OwogCisvKiBJbmZvcm1h dGlvbiBhYm91dCB6ZXJvL25vbi16ZXJvIGJpdHMuICAqLworc3RydWN0IEdU WSgoKSkgaXBhX2JpdHMKK3sKKyAgLyogVGhlIHByb3BhZ2F0ZWQgdmFsdWUu ICAqLworICB3aWRlc3RfaW50IHZhbHVlOworICAvKiBNYXNrIGNvcnJlc3Bv bmRpbmcgdG8gdGhlIHZhbHVlLgorICAgICBTaW1pbGFyIHRvIGNjcF9sYXR0 aWNlX3QsIGlmIHh0aCBiaXQgb2YgbWFzayBpcyAwLAorICAgICBpbXBsaWVz IHh0aCBiaXQgb2YgdmFsdWUgaXMgY29uc3RhbnQuICAqLworICB3aWRlc3Rf aW50IG1hc2s7CisgIC8qIFRydWUgaWYganVtcCBmdW5jdGlvbiBpcyBrbm93 bi4gICovCisgIGJvb2wga25vd247Cit9OworCiAvKiBBIGp1bXAgZnVuY3Rp b24gZm9yIGEgY2FsbHNpdGUgcmVwcmVzZW50cyB0aGUgdmFsdWVzIHBhc3Nl ZCBhcyBhY3R1YWwKICAgIGFyZ3VtZW50cyBvZiB0aGUgY2FsbHNpdGUuIFNl ZSBlbnVtIGp1bXBfZnVuY190eXBlIGZvciB0aGUgdmFyaW91cwogICAgdHlw ZXMgb2YganVtcCBmdW5jdGlvbnMgc3VwcG9ydGVkLiAgKi8KQEAgLTE2Niw2 ICsxNzksOSBAQCBzdHJ1Y3QgR1RZICgoKSkgaXBhX2p1bXBfZnVuYwogICAv KiBJbmZvcm1hdGlvbiBhYm91dCBhbGlnbm1lbnQgb2YgcG9pbnRlcnMuICov CiAgIHN0cnVjdCBpcGFfYWxpZ25tZW50IGFsaWdubWVudDsKIAorICAvKiBJ bmZvcm1hdGlvbiBhYm91dCB6ZXJvL25vbi16ZXJvIGJpdHMuICAqLworICBz dHJ1Y3QgaXBhX2JpdHMgYml0czsKKwogICBlbnVtIGp1bXBfZnVuY190eXBl IHR5cGU7CiAgIC8qIFJlcHJlc2VudHMgYSB2YWx1ZSBvZiBhIGp1bXAgZnVu Y3Rpb24uICBwYXNzX3Rocm91Z2ggaXMgdXNlZCBvbmx5IGluIGp1bXAKICAg ICAgZnVuY3Rpb24gY29udGV4dC4gIGNvbnN0YW50IHJlcHJlc2VudHMgdGhl IGFjdHVhbCBjb25zdGFudCBpbiBjb25zdGFudCBqdW1wCkBAIC0yODMsOCAr Mjk5LDExIEBAIGlwYV9nZXRfamZfYW5jZXN0b3JfdHlwZV9wcmVzZXJ2ZWQg KHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKIAogc3RydWN0IGlwYV9w YXJhbV9kZXNjcmlwdG9yCiB7Ci0gIC8qIFBBUkFNX0RFQ0wgb2YgdGhpcyBw YXJhbWV0ZXIuICAqLwotICB0cmVlIGRlY2w7CisgIC8qIEluIGFuYWx5c2lz IGFuZCBtb2RpZmljYXRpb24gcGhhc2UsIHRoaXMgaXMgdGhlIFBBUkFNX0RF Q0wgb2YgdGhpcworICAgICBwYXJhbWV0ZXIsIGluIElQQSBMVE8gcGhhc2Us IHRoaXMgaXMgdGhlIHR5cGUgb2YgdGhlIHRoZSBkZXNjcmliZWQKKyAgICAg cGFyYW1ldGVyIG9yIE5VTEwgaWYgbm90IGtub3duLiAgRG8gbm90IHJlYWQg dGhpcyBmaWVsZCBkaXJlY3RseSBidXQKKyAgICAgdGhyb3VnaCBpcGFfZ2V0 X3BhcmFtIGFuZCBpcGFfZ2V0X3R5cGUgYXMgYXBwcm9wcmlhdGUuICAqLwor ICB0cmVlIGRlY2xfb3JfdHlwZTsKICAgLyogSWYgYWxsIHVzZXMgb2YgdGhl IHBhcmFtZXRlciBhcmUgZGVzY3JpYmVkIGJ5IGlwYS1wcm9wIHN0cnVjdHVy ZXMsIHRoaXMKICAgICAgc2F5cyBob3cgbWFueSB0aGVyZSBhcmUuICBJZiBh bnkgdXNlIGNvdWxkIG5vdCBiZSBkZXNjcmliZWQgYnkgbWVhbnMgb2YKICAg ICAgaXBhLXByb3Agc3RydWN0dXJlcywgdGhpcyBpcyBJUEFfVU5ERVNDUklC RURfVVNFLiAgKi8KQEAgLTQwMiwxMyArNDIxLDMxIEBAIGlwYV9nZXRfcGFy YW1fY291bnQgKHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8pCiAKIC8q IFJldHVybiB0aGUgZGVjbGFyYXRpb24gb2YgSXRoIGZvcm1hbCBwYXJhbWV0 ZXIgb2YgdGhlIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcKICAgIHRvIElORk8u ICBOb3RlIHRoZXJlIGlzIG5vIHNldHRlciBmdW5jdGlvbiBhcyB0aGlzIGFy cmF5IGlzIGJ1aWx0IGp1c3Qgb25jZQotICAgdXNpbmcgaXBhX2luaXRpYWxp emVfbm9kZV9wYXJhbXMuICovCisgICB1c2luZyBpcGFfaW5pdGlhbGl6ZV9u b2RlX3BhcmFtcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxs ZWQgaW4KKyAgIFdQQS4gICovCiAKIHN0YXRpYyBpbmxpbmUgdHJlZQogaXBh X2dldF9wYXJhbSAoc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqaW5mbywgaW50 IGkpCiB7CiAgIGdjY19jaGVja2luZ19hc3NlcnQgKCFmbGFnX3dwYSk7Ci0g IHJldHVybiBpbmZvLT5kZXNjcmlwdG9yc1tpXS5kZWNsOworICB0cmVlIHQg PSBpbmZvLT5kZXNjcmlwdG9yc1tpXS5kZWNsX29yX3R5cGU7CisgIGdjY19j aGVja2luZ19hc3NlcnQgKFRSRUVfQ09ERSAodCkgPT0gUEFSTV9ERUNMKTsK KyAgcmV0dXJuIHQ7Cit9CisKKy8qIFJldHVybiB0aGUgdHlwZSBvZiBJdGgg Zm9ybWFsIHBhcmFtZXRlciBvZiB0aGUgZnVuY3Rpb24gY29ycmVzcG9uZGlu ZworICAgdG8gSU5GTyBpZiBpdCBpcyBrbm93biBvciBOVUxMIGlmIG5vdC4g ICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQoraXBhX2dldF90eXBlIChzdHJ1 Y3QgaXBhX25vZGVfcGFyYW1zICppbmZvLCBpbnQgaSkKK3sKKyAgdHJlZSB0 ID0gaW5mby0+ZGVzY3JpcHRvcnNbaV0uZGVjbF9vcl90eXBlOworICBpZiAo IXQpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmIChUWVBFX1AgKHQpKQorICAg IHJldHVybiB0OworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChUUkVFX0NPREUg KHQpID09IFBBUk1fREVDTCk7CisgIHJldHVybiBUUkVFX1RZUEUgKHQpOwog fQogCiAvKiBSZXR1cm4gdGhlIG1vdmUgY29zdCBvZiBJdGggZm9ybWFsIHBh cmFtZXRlciBvZiB0aGUgZnVuY3Rpb24gY29ycmVzcG9uZGluZwpAQCAtNDgy LDYgKzUxOSw4IEBAIHN0cnVjdCBHVFkoKCkpIGlwY3BfdHJhbnNmb3JtYXRp b25fc3VtbWFyeQogICBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlICphZ2df dmFsdWVzOwogICAvKiBBbGlnbm1lbnQgaW5mb3JtYXRpb24gZm9yIHBvaW50 ZXJzLiAgKi8KICAgdmVjPGlwYV9hbGlnbm1lbnQsIHZhX2djPiAqYWxpZ25t ZW50czsKKyAgLyogS25vd24gYml0cyBpbmZvcm1hdGlvbi4gICovCisgIHZl YzxpcGFfYml0cywgdmFfZ2M+ICpiaXRzOwogfTsKIAogdm9pZCBpcGFfc2V0 X25vZGVfYWdnX3ZhbHVlX2NoYWluIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5v ZGUsCmRpZmYgLS1naXQgYS9nY2Mvb3B0cy5jIGIvZ2NjL29wdHMuYwppbmRl eCA0MDUzZmIxLi5jZGU5YTdiIDEwMDY0NAotLS0gYS9nY2Mvb3B0cy5jCisr KyBiL2djYy9vcHRzLmMKQEAgLTUwNSw2ICs1MDUsNyBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGRlZmF1bHRfb3B0aW9ucyBkZWZhdWx0X29wdGlvbnNfdGFi bGVbXSA9CiAgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2Z0cmVlX3N3 aXRjaF9jb252ZXJzaW9uLCBOVUxMLCAxIH0sCiAgICAgeyBPUFRfTEVWRUxT XzJfUExVUywgT1BUX2ZpcGFfY3AsIE5VTEwsIDEgfSwKICAgICB7IE9QVF9M RVZFTFNfMl9QTFVTLCBPUFRfZmlwYV9jcF9hbGlnbm1lbnQsIE5VTEwsIDEg fSwKKyAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmlwYV9jcF9iaXQs IE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmRl dmlydHVhbGl6ZSwgTlVMTCwgMSB9LAogICAgIHsgT1BUX0xFVkVMU18yX1BM VVMsIE9QVF9mZGV2aXJ0dWFsaXplX3NwZWN1bGF0aXZlbHksIE5VTEwsIDEg fSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmlwYV9zcmEsIE5V TEwsIDEgfSwKQEAgLTE0MjIsNiArMTQyMyw5IEBAIGVuYWJsZV9mZG9fb3B0 aW1pemF0aW9ucyAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLAogICBpZiAo IW9wdHNfc2V0LT54X2ZsYWdfaXBhX2NwX2FsaWdubWVudAogICAgICAgJiYg dmFsdWUgJiYgb3B0cy0+eF9mbGFnX2lwYV9jcCkKICAgICBvcHRzLT54X2Zs YWdfaXBhX2NwX2FsaWdubWVudCA9IHZhbHVlOworICBpZiAoIW9wdHNfc2V0 LT54X2ZsYWdfaXBhX2NwX2JpdAorICAgICAgJiYgdmFsdWUgJiYgb3B0cy0+ eF9mbGFnX2lwYV9jcCkKKyAgICBvcHRzLT54X2ZsYWdfaXBhX2NwX2JpdCA9 IHZhbHVlOwogICBpZiAoIW9wdHNfc2V0LT54X2ZsYWdfcHJlZGljdGl2ZV9j b21tb25pbmcpCiAgICAgb3B0cy0+eF9mbGFnX3ByZWRpY3RpdmVfY29tbW9u aW5nID0gdmFsdWU7CiAgIGlmICghb3B0c19zZXQtPnhfZmxhZ191bnN3aXRj aF9sb29wcykKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lw YS9wcm9wYml0cy0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJv cGJpdHMtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjhlYzM3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9pcGEvcHJvcGJpdHMtMS5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5v LWVhcmx5LWlubGluaW5nIC1mZHVtcC1pcGEtY3AiIH0gKi8KKworX19hdHRy aWJ1dGVfXygobm9pbmxpbmUpKSAKK3N0YXRpYyBpbnQgZihpbnQgeCkKK3sK KyAgaW50IHNvbWVfb3AoaW50KTsKKyAgcmV0dXJuIHNvbWVfb3AgKHgpOwor fQorCitpbnQgbWFpbih2b2lkKQoreworICBpbnQgYSA9IGYoMSk7CisgIGlu dCBiID0gZigyKTsKKyAgaW50IGMgPSBmKDQpOworICByZXR1cm4gYSArIGIg KyBjOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiQWRq dXN0aW5nIG1hc2sgZm9yIHBhcmFtIDAgdG8gMHg3IiAiY3AiIH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BiaXRz LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYml0cy0yLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5NjBmMAot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9w cm9wYml0cy0yLmMKQEAgLTAsMCArMSw0MSBAQAorLyogeCdzIG1hc2sgc2hv dWxkIGJlIG1lZXQoMHhjLCAweDMpID09IDB4ZiAgKi8KKworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tZWFy bHktaW5saW5pbmcgLWZkdW1wLWlwYS1jcCIgfSAqLworCitleHRlcm4gaW50 IHBhc3NfdGVzdCAoKTsKK2V4dGVybiBpbnQgZmFpbF90ZXN0ICgpOworCitf X2F0dHJpYnV0ZV9fKChub2lubGluZSkpCitzdGF0aWMgaW50IGYxKGludCB4 KQoreworICBpZiAoKHggJiB+MHhmKSA9PSAwKQorICAgIHJldHVybiBwYXNz X3Rlc3QgKCk7CisgIGVsc2UKKyAgICByZXR1cm4gZmFpbF90ZXN0ICgpOwor fQorCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCitzdGF0aWMgaW50IGYy KGludCB5KQoreworICByZXR1cm4gZjEoeSAmIDB4MDMpOworfQorCitfX2F0 dHJpYnV0ZV9fKChub2lubGluZSkpCitzdGF0aWMgaW50IGYzKGludCB6KQor eworICByZXR1cm4gZjEoeiAmIDB4Yyk7Cit9CisKK2V4dGVybiBpbnQgYTsK K2V4dGVybiBpbnQgYjsKKworaW50IG1haW4odm9pZCkKK3sKKyAgaW50IGsg PSBmMihhKTsgCisgIGludCBsID0gZjMoYik7CisgIHJldHVybiBrICsgbDsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkFkanVzdGlu ZyBtYXNrIGZvciBwYXJhbSAwIHRvIDB4ZiIgImNwIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWR1bXAtdHJlZS1ub3QgImZhaWxfdGVzdCIgIm9w dGltaXplZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9pcGEvcHJvcGJpdHMtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv aXBhL3Byb3BiaXRzLTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40NDc0NGNkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvaXBhL3Byb3BiaXRzLTMuYwpAQCAtMCwwICsxLDIyIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TzIgLWZuby1lYXJseS1pbmxpbmluZyAtZmR1bXAtaXBhLWNwIiB9ICovCisK K19fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKK3N0YXRpYyBpbnQgZihpbnQg eCkKK3sKKyAgZXh0ZXJuIGludCBsaW1pdDsKKyAgZXh0ZXJuIGludCBmMihp bnQpOworCisgIGlmICh4ID09IGxpbWl0KQorICAgIHJldHVybiB4OworICBp bnQgayA9IGYoeCArIDEpOworICByZXR1cm4gZjIgKGspOyAKK30KKworaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgayA9IGYo YXJnYyAmIDB4ZmYpOyAKKyAgcmV0dXJuIGs7Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLWlwYS1kdW1wLW5vdCAiQWRqdXN0aW5nIG1hc2sgZm9yIiAi Y3AiIH0gfSAqLyAgCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtY2NwLmMg Yi9nY2MvdHJlZS1zc2EtY2NwLmMKaW5kZXggNWQ1Mzg2ZS4uZDg4MTQzYiAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWNjcC5jCisrKyBiL2djYy90cmVl LXNzYS1jY3AuYwpAQCAtMTQyLDcgKzE0Miw3IEBAIGFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVk ZSAiY2ZnbG9vcC5oIgogI2luY2x1ZGUgInN0b3ItbGF5b3V0LmgiCiAjaW5j bHVkZSAib3B0YWJzLXF1ZXJ5LmgiCi0KKyNpbmNsdWRlICJ0cmVlLXNzYS1j Y3AuaCIKIAogLyogUG9zc2libGUgbGF0dGljZSB2YWx1ZXMuICAqLwogdHlw ZWRlZiBlbnVtCkBAIC01MzYsOSArNTM2LDkgQEAgc2V0X2xhdHRpY2VfdmFs dWUgKHRyZWUgdmFyLCBjY3BfcHJvcF92YWx1ZV90ICpuZXdfdmFsKQogCiBz dGF0aWMgY2NwX3Byb3BfdmFsdWVfdCBnZXRfdmFsdWVfZm9yX2V4cHIgKHRy ZWUsIGJvb2wpOwogc3RhdGljIGNjcF9wcm9wX3ZhbHVlX3QgYml0X3ZhbHVl X2Jpbm9wIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSk7Ci1z dGF0aWMgdm9pZCBiaXRfdmFsdWVfYmlub3BfMSAoZW51bSB0cmVlX2NvZGUs IHRyZWUsIHdpZGVzdF9pbnQgKiwgd2lkZXN0X2ludCAqLAotCQkJICAgICAg IHRyZWUsIGNvbnN0IHdpZGVzdF9pbnQgJiwgY29uc3Qgd2lkZXN0X2ludCAm LAotCQkJICAgICAgIHRyZWUsIGNvbnN0IHdpZGVzdF9pbnQgJiwgY29uc3Qg d2lkZXN0X2ludCAmKTsKK3ZvaWQgYml0X3ZhbHVlX2Jpbm9wIChlbnVtIHRy ZWVfY29kZSwgc2lnbm9wLCBpbnQsIHdpZGVzdF9pbnQgKiwgd2lkZXN0X2lu dCAqLAorCQkgICAgICBzaWdub3AsIGludCwgY29uc3Qgd2lkZXN0X2ludCAm LCBjb25zdCB3aWRlc3RfaW50ICYsCisJCSAgICAgIHNpZ25vcCwgaW50LCBj b25zdCB3aWRlc3RfaW50ICYsIGNvbnN0IHdpZGVzdF9pbnQgJik7CiAKIC8q IFJldHVybiBhIHdpZGVzdF9pbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYml0 d2lzZSBzaW1wbGlmaWNhdGlvbnMKICAgIGZyb20gVkFMLiAgKi8KQEAgLTg5 NCw3ICs4OTQsNyBAQCBkb19kYmdfY250ICh2b2lkKQogICAgUmV0dXJuIFRS VUUgd2hlbiBzb21ldGhpbmcgd2FzIG9wdGltaXplZC4gICovCiAKIHN0YXRp YyBib29sCi1jY3BfZmluYWxpemUgKGJvb2wgbm9uemVyb19wKQorY2NwX2Zp bmFsaXplIChib29sIG5vbnplcm9fcCkgCiB7CiAgIGJvb2wgc29tZXRoaW5n X2NoYW5nZWQ7CiAgIHVuc2lnbmVkIGk7CkBAIC05MjAsNyArOTIwLDggQEAg Y2NwX2ZpbmFsaXplIChib29sIG5vbnplcm9fcCkKIAogICAgICAgdmFsID0g Z2V0X3ZhbHVlIChuYW1lKTsKICAgICAgIGlmICh2YWwtPmxhdHRpY2VfdmFs ICE9IENPTlNUQU5UCi0JICB8fCBUUkVFX0NPREUgKHZhbC0+dmFsdWUpICE9 IElOVEVHRVJfQ1NUKQorCSAgfHwgVFJFRV9DT0RFICh2YWwtPnZhbHVlKSAh PSBJTlRFR0VSX0NTVAorCSAgfHwgdmFsLT5tYXNrID09IDApCiAJY29udGlu dWU7CiAKICAgICAgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChu YW1lKSkpCkBAIC0xMjI0LDEwICsxMjI1LDExIEBAIGNjcF9mb2xkIChnaW1w bGUgKnN0bXQpCiAgICBSVkFMIGFuZCBSTUFTSyByZXByZXNlbnRpbmcgYSB2 YWx1ZSBvZiB0eXBlIFJUWVBFIGFuZCBzZXQKICAgIHRoZSB2YWx1ZSwgbWFz ayBwYWlyICpWQUwgYW5kICpNQVNLIHRvIHRoZSByZXN1bHQuICAqLwogCi1z dGF0aWMgdm9pZAotYml0X3ZhbHVlX3Vub3BfMSAoZW51bSB0cmVlX2NvZGUg Y29kZSwgdHJlZSB0eXBlLAotCQkgIHdpZGVzdF9pbnQgKnZhbCwgd2lkZXN0 X2ludCAqbWFzaywKLQkJICB0cmVlIHJ0eXBlLCBjb25zdCB3aWRlc3RfaW50 ICZydmFsLCBjb25zdCB3aWRlc3RfaW50ICZybWFzaykKK3ZvaWQKK2JpdF92 YWx1ZV91bm9wIChlbnVtIHRyZWVfY29kZSBjb2RlLCBzaWdub3AgdHlwZV9z Z24sIGludCB0eXBlX3ByZWNpc2lvbiwgCisJCXdpZGVzdF9pbnQgKnZhbCwg d2lkZXN0X2ludCAqbWFzaywKKwkJc2lnbm9wIHJ0eXBlX3NnbiwgaW50IHJ0 eXBlX3ByZWNpc2lvbiwKKwkJY29uc3Qgd2lkZXN0X2ludCAmcnZhbCwgY29u c3Qgd2lkZXN0X2ludCAmcm1hc2spCiB7CiAgIHN3aXRjaCAoY29kZSkKICAg ICB7CkBAIC0xMjQwLDI1ICsxMjQyLDIzIEBAIGJpdF92YWx1ZV91bm9wXzEg KGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwKICAgICAgIHsKIAl3 aWRlc3RfaW50IHRlbXYsIHRlbW07CiAJLyogUmV0dXJuIH5ydmFsICsgMS4g ICovCi0JYml0X3ZhbHVlX3Vub3BfMSAoQklUX05PVF9FWFBSLCB0eXBlLCAm dGVtdiwgJnRlbW0sIHR5cGUsIHJ2YWwsIHJtYXNrKTsKLQliaXRfdmFsdWVf Ymlub3BfMSAoUExVU19FWFBSLCB0eXBlLCB2YWwsIG1hc2ssCi0JCQkgICB0 eXBlLCB0ZW12LCB0ZW1tLCB0eXBlLCAxLCAwKTsKKwliaXRfdmFsdWVfdW5v cCAoQklUX05PVF9FWFBSLCB0eXBlX3NnbiwgdHlwZV9wcmVjaXNpb24sICZ0 ZW12LCAmdGVtbSwKKwkJCXR5cGVfc2duLCB0eXBlX3ByZWNpc2lvbiwgcnZh bCwgcm1hc2spOworCWJpdF92YWx1ZV9iaW5vcCAoUExVU19FWFBSLCB0eXBl X3NnbiwgdHlwZV9wcmVjaXNpb24sIHZhbCwgbWFzaywKKwkJCSB0eXBlX3Nn biwgdHlwZV9wcmVjaXNpb24sIHRlbXYsIHRlbW0sCisJCQkgdHlwZV9zZ24s IHR5cGVfcHJlY2lzaW9uLCAxLCAwKTsKIAlicmVhazsKICAgICAgIH0KIAog ICAgIENBU0VfQ09OVkVSVDoKICAgICAgIHsKLQlzaWdub3Agc2duOwotCiAJ LyogRmlyc3QgZXh0ZW5kIG1hc2sgYW5kIHZhbHVlIGFjY29yZGluZyB0byB0 aGUgb3JpZ2luYWwgdHlwZS4gICovCi0Jc2duID0gVFlQRV9TSUdOIChydHlw ZSk7Ci0JKm1hc2sgPSB3aTo6ZXh0IChybWFzaywgVFlQRV9QUkVDSVNJT04g KHJ0eXBlKSwgc2duKTsKLQkqdmFsID0gd2k6OmV4dCAocnZhbCwgVFlQRV9Q UkVDSVNJT04gKHJ0eXBlKSwgc2duKTsKKwkqbWFzayA9IHdpOjpleHQgKHJt YXNrLCBydHlwZV9wcmVjaXNpb24sIHJ0eXBlX3Nnbik7CisJKnZhbCA9IHdp OjpleHQgKHJ2YWwsIHJ0eXBlX3ByZWNpc2lvbiwgcnR5cGVfc2duKTsKIAog CS8qIFRoZW4gZXh0ZW5kIG1hc2sgYW5kIHZhbHVlIGFjY29yZGluZyB0byB0 aGUgdGFyZ2V0IHR5cGUuICAqLwotCXNnbiA9IFRZUEVfU0lHTiAodHlwZSk7 Ci0JKm1hc2sgPSB3aTo6ZXh0ICgqbWFzaywgVFlQRV9QUkVDSVNJT04gKHR5 cGUpLCBzZ24pOwotCSp2YWwgPSB3aTo6ZXh0ICgqdmFsLCBUWVBFX1BSRUNJ U0lPTiAodHlwZSksIHNnbik7CisJKm1hc2sgPSB3aTo6ZXh0ICgqbWFzaywg dHlwZV9wcmVjaXNpb24sIHR5cGVfc2duKTsKKwkqdmFsID0gd2k6OmV4dCAo KnZhbCwgdHlwZV9wcmVjaXNpb24sIHR5cGVfc2duKTsKIAlicmVhazsKICAg ICAgIH0KIApAQCAtMTI3MiwxNSArMTI3MiwxNCBAQCBiaXRfdmFsdWVfdW5v cF8xIChlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUsCiAgICBSMVZB TCwgUjFNQVNLIGFuZCBSMlZBTCwgUjJNQVNLIHJlcHJlc2VudGluZyBhIHZh bHVlcyBvZiB0eXBlIFIxVFlQRQogICAgYW5kIFIyVFlQRSBhbmQgc2V0IHRo ZSB2YWx1ZSwgbWFzayBwYWlyICpWQUwgYW5kICpNQVNLIHRvIHRoZSByZXN1 bHQuICAqLwogCi1zdGF0aWMgdm9pZAotYml0X3ZhbHVlX2Jpbm9wXzEgKGVu dW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwKLQkJICAgd2lkZXN0X2lu dCAqdmFsLCB3aWRlc3RfaW50ICptYXNrLAotCQkgICB0cmVlIHIxdHlwZSwg Y29uc3Qgd2lkZXN0X2ludCAmcjF2YWwsCi0JCSAgIGNvbnN0IHdpZGVzdF9p bnQgJnIxbWFzaywgdHJlZSByMnR5cGUsCi0JCSAgIGNvbnN0IHdpZGVzdF9p bnQgJnIydmFsLCBjb25zdCB3aWRlc3RfaW50ICZyMm1hc2spCit2b2lkCiti aXRfdmFsdWVfYmlub3AgKGVudW0gdHJlZV9jb2RlIGNvZGUsIHNpZ25vcCBz Z24sIGludCB3aWR0aCwgCisJCSB3aWRlc3RfaW50ICp2YWwsIHdpZGVzdF9p bnQgKm1hc2ssCisJCSBzaWdub3AgcjF0eXBlX3NnbiwgaW50IHIxdHlwZV9w cmVjaXNpb24sCisJCSBjb25zdCB3aWRlc3RfaW50ICZyMXZhbCwgY29uc3Qg d2lkZXN0X2ludCAmcjFtYXNrLAorCQkgc2lnbm9wIHIydHlwZV9zZ24sIGlu dCByMnR5cGVfcHJlY2lzaW9uLAorCQkgY29uc3Qgd2lkZXN0X2ludCAmcjJ2 YWwsIGNvbnN0IHdpZGVzdF9pbnQgJnIybWFzaykKIHsKLSAgc2lnbm9wIHNn biA9IFRZUEVfU0lHTiAodHlwZSk7Ci0gIGludCB3aWR0aCA9IFRZUEVfUFJF Q0lTSU9OICh0eXBlKTsKICAgYm9vbCBzd2FwX3AgPSBmYWxzZTsKIAogICAv KiBBc3N1bWUgd2UnbGwgZ2V0IGEgY29uc3RhbnQgcmVzdWx0LiAgVXNlIGFu IGluaXRpYWwgbm9uIHZhcnlpbmcKQEAgLTE0MDYsMTEgKzE0MDUsMTEgQEAg Yml0X3ZhbHVlX2Jpbm9wXzEgKGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUg dHlwZSwKICAgICBjYXNlIE1JTlVTX0VYUFI6CiAgICAgICB7CiAJd2lkZXN0 X2ludCB0ZW12LCB0ZW1tOwotCWJpdF92YWx1ZV91bm9wXzEgKE5FR0FURV9F WFBSLCByMnR5cGUsICZ0ZW12LCAmdGVtbSwKLQkJCSAgcjJ0eXBlLCByMnZh bCwgcjJtYXNrKTsKLQliaXRfdmFsdWVfYmlub3BfMSAoUExVU19FWFBSLCB0 eXBlLCB2YWwsIG1hc2ssCi0JCQkgICByMXR5cGUsIHIxdmFsLCByMW1hc2ss Ci0JCQkgICByMnR5cGUsIHRlbXYsIHRlbW0pOworCWJpdF92YWx1ZV91bm9w IChORUdBVEVfRVhQUiwgcjJ0eXBlX3NnbiwgcjJ0eXBlX3ByZWNpc2lvbiwg JnRlbXYsICZ0ZW1tLAorCQkJICByMnR5cGVfc2duLCByMnR5cGVfcHJlY2lz aW9uLCByMnZhbCwgcjJtYXNrKTsKKwliaXRfdmFsdWVfYmlub3AgKFBMVVNf RVhQUiwgc2duLCB3aWR0aCwgdmFsLCBtYXNrLAorCQkJIHIxdHlwZV9zZ24s IHIxdHlwZV9wcmVjaXNpb24sIHIxdmFsLCByMW1hc2ssCisJCQkgcjJ0eXBl X3NnbiwgcjJ0eXBlX3ByZWNpc2lvbiwgdGVtdiwgdGVtbSk7CiAJYnJlYWs7 CiAgICAgICB9CiAKQEAgLTE0NzIsNyArMTQ3MSw3IEBAIGJpdF92YWx1ZV9i aW5vcF8xIChlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUsCiAJICBi cmVhazsKIAogCS8qIEZvciBjb21wYXJpc29ucyB0aGUgc2lnbmVkbmVzcyBp cyBpbiB0aGUgY29tcGFyaXNvbiBvcGVyYW5kcy4gICovCi0Jc2duID0gVFlQ RV9TSUdOIChyMXR5cGUpOworCXNnbiA9IHIxdHlwZV9zZ247CiAKIAkvKiBJ ZiB3ZSBrbm93IHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgd2Uga25vdyB0 aGUgdmFsdWVzCiAJICAgdmFsdWUgcmFuZ2VzIGJ5IG1lYW5zIG9mIHRyZWF0 aW5nIHZhcnlpbmcgYml0cyBhcyB6ZXJvCkBAIC0xNTI1LDggKzE1MjQsOSBA QCBiaXRfdmFsdWVfdW5vcCAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0 eXBlLCB0cmVlIHJocykKICAgZ2NjX2Fzc2VydCAoKHJ2YWwubGF0dGljZV92 YWwgPT0gQ09OU1RBTlQKIAkgICAgICAgJiYgVFJFRV9DT0RFIChydmFsLnZh bHVlKSA9PSBJTlRFR0VSX0NTVCkKIAkgICAgICB8fCB3aTo6c2V4dCAocnZh bC5tYXNrLCBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChyaHMpKSkgPT0g LTEpOwotICBiaXRfdmFsdWVfdW5vcF8xIChjb2RlLCB0eXBlLCAmdmFsdWUs ICZtYXNrLAotCQkgICAgVFJFRV9UWVBFIChyaHMpLCB2YWx1ZV90b193aWRl X2ludCAocnZhbCksIHJ2YWwubWFzayk7CisgIGJpdF92YWx1ZV91bm9wIChj b2RlLCBUWVBFX1NJR04gKHR5cGUpLCBUWVBFX1BSRUNJU0lPTiAodHlwZSks ICZ2YWx1ZSwgJm1hc2ssCisJCSAgVFlQRV9TSUdOIChUUkVFX1RZUEUgKHJo cykpLCBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChyaHMpKSwKKwkJICB2 YWx1ZV90b193aWRlX2ludCAocnZhbCksIHJ2YWwubWFzayk7CiAgIGlmICh3 aTo6c2V4dCAobWFzaywgVFlQRV9QUkVDSVNJT04gKHR5cGUpKSAhPSAtMSkK ICAgICB7CiAgICAgICB2YWwubGF0dGljZV92YWwgPSBDT05TVEFOVDsKQEAg LTE1NzEsOSArMTU3MSwxMiBAQCBiaXRfdmFsdWVfYmlub3AgKGVudW0gdHJl ZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwgdHJlZSByaHMxLCB0cmVlIHJoczIp CiAJICAgICAgICYmIFRSRUVfQ09ERSAocjJ2YWwudmFsdWUpID09IElOVEVH RVJfQ1NUKQogCSAgICAgIHx8IHdpOjpzZXh0IChyMnZhbC5tYXNrLAogCQkJ ICAgVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAocmhzMikpKSA9PSAtMSk7 Ci0gIGJpdF92YWx1ZV9iaW5vcF8xIChjb2RlLCB0eXBlLCAmdmFsdWUsICZt YXNrLAotCQkgICAgIFRSRUVfVFlQRSAocmhzMSksIHZhbHVlX3RvX3dpZGVf aW50IChyMXZhbCksIHIxdmFsLm1hc2ssCi0JCSAgICAgVFJFRV9UWVBFIChy aHMyKSwgdmFsdWVfdG9fd2lkZV9pbnQgKHIydmFsKSwgcjJ2YWwubWFzayk7 CisgIGJpdF92YWx1ZV9iaW5vcCAoY29kZSwgVFlQRV9TSUdOICh0eXBlKSwg VFlQRV9QUkVDSVNJT04gKHR5cGUpLCAmdmFsdWUsICZtYXNrLAorCQkgICBU WVBFX1NJR04gKFRSRUVfVFlQRSAocmhzMSkpLCBUWVBFX1BSRUNJU0lPTiAo VFJFRV9UWVBFIChyaHMxKSksCisJCSAgIHZhbHVlX3RvX3dpZGVfaW50IChy MXZhbCksIHIxdmFsLm1hc2ssCisJCSAgIFRZUEVfU0lHTiAoVFJFRV9UWVBF IChyaHMyKSksIFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKHJoczIpKSwK KwkJICAgdmFsdWVfdG9fd2lkZV9pbnQgKHIydmFsKSwgcjJ2YWwubWFzayk7 CisKICAgaWYgKHdpOjpzZXh0IChtYXNrLCBUWVBFX1BSRUNJU0lPTiAodHlw ZSkpICE9IC0xKQogICAgIHsKICAgICAgIHZhbC5sYXR0aWNlX3ZhbCA9IENP TlNUQU5UOwpAQCAtMTY3Miw5ICsxNjc1LDEwIEBAIGJpdF92YWx1ZV9hc3N1 bWVfYWxpZ25lZCAoZ2ltcGxlICpzdG10LCB0cmVlIGF0dHIsIGNjcF9wcm9w X3ZhbHVlX3QgcHRydmFsLAogCiAgIGFsaWduID0gYnVpbGRfaW50X2NzdF90 eXBlICh0eXBlLCAtYWxpZ25pKTsKICAgYWxpZ252YWwgPSBnZXRfdmFsdWVf Zm9yX2V4cHIgKGFsaWduLCB0cnVlKTsKLSAgYml0X3ZhbHVlX2Jpbm9wXzEg KEJJVF9BTkRfRVhQUiwgdHlwZSwgJnZhbHVlLCAmbWFzaywKLQkJICAgICB0 eXBlLCB2YWx1ZV90b193aWRlX2ludCAocHRydmFsKSwgcHRydmFsLm1hc2ss Ci0JCSAgICAgdHlwZSwgdmFsdWVfdG9fd2lkZV9pbnQgKGFsaWdudmFsKSwg YWxpZ252YWwubWFzayk7CisgIGJpdF92YWx1ZV9iaW5vcCAoQklUX0FORF9F WFBSLCBUWVBFX1NJR04gKHR5cGUpLCBUWVBFX1BSRUNJU0lPTiAodHlwZSks ICZ2YWx1ZSwgJm1hc2ssCisJCSAgIFRZUEVfU0lHTiAodHlwZSksIFRZUEVf UFJFQ0lTSU9OICh0eXBlKSwgdmFsdWVfdG9fd2lkZV9pbnQgKHB0cnZhbCks IHB0cnZhbC5tYXNrLAorCQkgICBUWVBFX1NJR04gKHR5cGUpLCBUWVBFX1BS RUNJU0lPTiAodHlwZSksIHZhbHVlX3RvX3dpZGVfaW50IChhbGlnbnZhbCks IGFsaWdudmFsLm1hc2spOworCiAgIGlmICh3aTo6c2V4dCAobWFzaywgVFlQ RV9QUkVDSVNJT04gKHR5cGUpKSAhPSAtMSkKICAgICB7CiAgICAgICB2YWwu bGF0dGljZV92YWwgPSBDT05TVEFOVDsKQEAgLTI0MDksNyArMjQxMyw3IEBA IGRvX3NzYV9jY3AgKGJvb2wgbm9uemVyb19wKQogCiAgIGNjcF9pbml0aWFs aXplICgpOwogICBzc2FfcHJvcGFnYXRlIChjY3BfdmlzaXRfc3RtdCwgY2Nw X3Zpc2l0X3BoaV9ub2RlKTsKLSAgaWYgKGNjcF9maW5hbGl6ZSAobm9uemVy b19wKSkKKyAgaWYgKGNjcF9maW5hbGl6ZSAobm9uemVyb19wIHx8IGZsYWdf aXBhX2NwX2JpdCkpCiAgICAgewogICAgICAgdG9kbyA9IChUT0RPX2NsZWFu dXBfY2ZnIHwgVE9ET191cGRhdGVfc3NhKTsKIApkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtc3NhLWNjcC5oIGIvZ2NjL3RyZWUtc3NhLWNjcC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzgzYzUKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdHJlZS1zc2EtY2NwLmgKQEAgLTAsMCArMSwyOSBA QAorLyogQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dD QyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0Zy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCisKK0dDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisK K1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBUUkVFX1NTQV9DQ1Bf SAorI2RlZmluZSBUUkVFX1NTQV9DQ1BfSAorCit2b2lkIGJpdF92YWx1ZV9i aW5vcCAoZW51bSB0cmVlX2NvZGUsIHNpZ25vcCwgaW50LCB3aWRlc3RfaW50 ICosIHdpZGVzdF9pbnQgKiwKKwkJICAgICAgc2lnbm9wLCBpbnQsIGNvbnN0 IHdpZGVzdF9pbnQgJiwgY29uc3Qgd2lkZXN0X2ludCAmLAorCQkgICAgICBz aWdub3AsIGludCwgY29uc3Qgd2lkZXN0X2ludCAmLCBjb25zdCB3aWRlc3Rf aW50ICYpOworCit2b2lkIGJpdF92YWx1ZV91bm9wIChlbnVtIHRyZWVfY29k ZSwgc2lnbm9wLCBpbnQsIHdpZGVzdF9pbnQgKiwgd2lkZXN0X2ludCAqLAor CQkgICAgIHNpZ25vcCwgaW50LCBjb25zdCB3aWRlc3RfaW50ICYsIGNvbnN0 IHdpZGVzdF9pbnQgJik7CisKKyNlbmRpZgo= --001a1140fbc4430425053ad01ec6--