From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 10BB2385AE7D for ; Wed, 22 Jun 2022 04:00:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 10BB2385AE7D Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-604-gKOsx04dPYuz559SK-K-Dw-1; Wed, 22 Jun 2022 00:00:00 -0400 X-MC-Unique: gKOsx04dPYuz559SK-K-Dw-1 Received: by mail-qk1-f200.google.com with SMTP id o10-20020a05620a2a0a00b006a77a64cd23so18604524qkp.21 for ; Tue, 21 Jun 2022 21:00:00 -0700 (PDT) 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=XwhqME95OZ91FWA48AD3Aq+hAq1W06L3D3ecWHIcDSM=; b=kkAdyRe4Lme2FBweE8pAfqxZJv1sFtY2lWyPiQM2Kgajs6szOnkkrEB47mAGvMo51m jLTSkDnsmiQ6C1EO8v8Z5tFy+x1EPen6aIQbGozWLrEeEy0llG01jm1xc83Q7ss031/U 3iJTlYd6J4JjC9yU29S4DdH9xizhtoyP/VAA1HsZyaAMYMPtgp/MoXWTJ1DBcti0cY+A pVoSyoh7a0jqSQI41Xuvia5oWM4bCCllI8wUOCxoTS7vyyP0Sx3MSzYErAB8SURbxDGd qsDrwnZsMrOF2jK1SFXKY552anLWn1HkFyGTKmte15rerF3CiT14bQOOff53Vz3Kqo2G aeEg== X-Gm-Message-State: AJIora/OmpCC/rbwJvsfFBfF5KVEeaQZtloNHxjuEr29xp4kFlImce5L IClfKo7VzgNZWGc2A2Nj/SjKIx1MMcH7zAa94TGjmeit+6Zf4naL8tdEbBItKWXDWSxVRCUNdjp SrjLjsiwtfcUkJfewaA== X-Received: by 2002:ac8:9:0:b0:305:3451:f384 with SMTP id a9-20020ac80009000000b003053451f384mr1339344qtg.409.1655870399669; Tue, 21 Jun 2022 20:59:59 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vxQ8tIKt9Q1neweCy6poTL5RbNtN3u8MWmHv5dSq1UPF4C5X00XKsmtEUPFe6zjMF7vBbXTQ== X-Received: by 2002:ac8:9:0:b0:305:3451:f384 with SMTP id a9-20020ac80009000000b003053451f384mr1339334qtg.409.1655870399148; Tue, 21 Jun 2022 20:59:59 -0700 (PDT) Received: from [192.168.1.100] (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id y17-20020a37f611000000b006a69f6793c5sm14512997qkj.14.2022.06.21.20.59.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jun 2022 20:59:58 -0700 (PDT) Message-ID: <32f7c45f-c70a-1b60-391a-9f642a4a0f4c@redhat.com> Date: Tue, 21 Jun 2022 23:59:56 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH RFA] ubsan: default to trap on unreachable at -O0 and -Og [PR104642] To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org, richard.guenther@gmail.com, jwakely.gcc@gmail.com References: <20220613195313.3240547-1-jason@redhat.com> <6c78210d-f2a8-3371-5d88-74bdab399706@redhat.com> <98e07b35-6472-aec1-abbb-a4cf49d66a9c@redhat.com> From: Jason Merrill In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------IngCIjDKWmka6a3dBoKR6qBF" Content-Language: en-US X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jun 2022 04:00:07 -0000 This is a multi-part message in MIME format. --------------IngCIjDKWmka6a3dBoKR6qBF Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 6/21/22 07:17, Jakub Jelinek wrote: > On Mon, Jun 20, 2022 at 04:30:51PM -0400, Jason Merrill wrote: > I'd still prefer to see a separate -funreachable-traps. > The thing is that -fsanitize{,-recover,-trap}= are global options, not per > function (and only tweaked by no_sanitize attribute), while something > that needs to depend on the per-function -O0/-Og setting is necessarily per > function. The *.awk changes I understand make -fsanitize= kind of per > function but -fsanitize-{recover,trap}= remain global, that is going to be a > nightmare especially with LTO which saves/restores the per function flags > and for the global ones merges them across TUs. > By separating sanitizers (which would remain global with no_sanitize > overrides) from -funreachable-traps which would be Optimization option > (with default set if unset in default_options_optimization or so) > saved/restored upon function changes that issue is gone. Done. >> --- a/gcc/tree.h >> +++ b/gcc/tree.h >> @@ -5858,6 +5858,11 @@ builtin_decl_implicit (enum built_in_function fncode) >> return builtin_info[uns_fncode].decl; >> } >> >> +/* For BUILTIN_UNREACHABLE, use one of these instead of one of the above. */ >> +extern tree builtin_decl_unreachable (); >> +extern gcall *gimple_build_builtin_unreachable (location_t); >> +extern tree build_builtin_unreachable (location_t); > > I think we generally try to declare functions in the header with same > basename as the source file in which they are defined. > So, the question is if builtin_decl_unreachable and build_builtin_unreachable > shouldn't be defined in tree.cc and declared in tree.h and > gimple_build_builtin_unreachable in gimple.cc and declared in gimple.h, > using a helper defined in ubsan.cc and declared in ubsan.h (your current > unreachable_1). Done. >> + >> /* Set explicit builtin function nodes and whether it is an implicit >> function. */ >> >> --- a/gcc/builtins.cc >> +++ b/gcc/builtins.cc >> --- a/gcc/cgraphunit.cc >> +++ b/gcc/cgraphunit.cc >> --- a/gcc/cp/constexpr.cc >> +++ b/gcc/cp/constexpr.cc >> --- a/gcc/cp/cp-gimplify.cc >> +++ b/gcc/cp/cp-gimplify.cc >> --- a/gcc/gimple-fold.cc >> +++ b/gcc/gimple-fold.cc >> --- a/gcc/ipa-fnsummary.cc >> +++ b/gcc/ipa-fnsummary.cc >> --- a/gcc/ipa-prop.cc >> +++ b/gcc/ipa-prop.cc >> --- a/gcc/ipa.cc >> +++ b/gcc/ipa.cc > > The above changes LGTM. >> if (dump_enabled_p ()) >> { >> diff --git a/gcc/opts.cc b/gcc/opts.cc >> index 959d48d173f..d92699a1bc9 100644 >> --- a/gcc/opts.cc >> +++ b/gcc/opts.cc >> @@ -1122,6 +1122,17 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, >> opts->x_flag_no_inline = 1; >> } >> >> + /* At -O0 or -Og, turn __builtin_unreachable into a trap. */ >> + if (!opts_set->x_flag_sanitize) >> + { >> + if (!opts->x_optimize || opts->x_optimize_debug) >> + opts->x_flag_sanitize = SANITIZE_UNREACHABLE|SANITIZE_RETURN; >> + >> + /* Change this without regard to optimization level so we don't need to >> + deal with it in optc-save-gen.awk. */ >> + opts->x_flag_sanitize_trap = SANITIZE_UNREACHABLE|SANITIZE_RETURN; >> + } >> + >> /* Pipelining of outer loops is only possible when general pipelining >> capabilities are requested. */ >> if (!opts->x_flag_sel_sched_pipelining) > > See above. > >> --- a/gcc/sanopt.cc >> +++ b/gcc/sanopt.cc >> @@ -942,7 +942,15 @@ public: >> {} >> >> /* opt_pass methods: */ >> - virtual bool gate (function *) { return flag_sanitize; } >> + virtual bool gate (function *) >> + { >> + /* SANITIZE_RETURN is handled in the front-end. When trapping, >> + SANITIZE_UNREACHABLE is handled by builtin_decl_unreachable. */ >> + unsigned int mask = SANITIZE_RETURN; > > There are other sanitizers purely handled in the FEs, guess as a follow-up > we should look at which of them don't really need any sanopt handling. > >> + if (flag_sanitize_trap & SANITIZE_UNREACHABLE) >> + mask |= SANITIZE_UNREACHABLE; >> + return flag_sanitize & ~mask; >> + } >> --- a/gcc/tree-cfg.cc >> +++ b/gcc/tree-cfg.cc >> --- a/gcc/tree-ssa-loop-ivcanon.cc >> +++ b/gcc/tree-ssa-loop-ivcanon.cc >> --- a/gcc/tree-ssa-sccvn.cc >> +++ b/gcc/tree-ssa-sccvn.cc >> --- a/gcc/tree.cc >> +++ b/gcc/tree.cc > > LGTM. > >> --- a/gcc/ubsan.cc >> +++ b/gcc/ubsan.cc >> @@ -638,27 +638,84 @@ ubsan_create_data (const char *name, int loccnt, const location_t *ploc, ...) >> return var; >> } >> >> -/* Instrument the __builtin_unreachable call. We just call the libubsan >> - routine instead. */ >> +/* The built-in decl to use to mark code points believed to be unreachable. >> + Typically __builtin_unreachable, but __builtin_trap if >> + -fsanitize=unreachable -fsanitize-trap=unreachable. If only >> + -fsanitize=unreachable, we rely on sanopt to replace any calls with the >> + appropriate ubsan function. When building a call directly, use >> + {gimple_},build_builtin_unreachable instead. */ >> + >> +tree >> +builtin_decl_unreachable () >> +{ >> + enum built_in_function fncode = BUILT_IN_UNREACHABLE; >> + >> + if (sanitize_flags_p (SANITIZE_UNREACHABLE)) >> + { >> + if (flag_sanitize_trap & SANITIZE_UNREACHABLE) >> + fncode = BUILT_IN_TRAP; >> + /* Otherwise we want __builtin_unreachable () later folded into >> + __ubsan_handle_builtin_unreachable with extra args. */ >> + } > > I'd add the flag_unreachable_traps stuff here as else > >> +/* Shared between *build_builtin_unreachable. */ >> + >> +static void >> +unreachable_1 (tree &fn, tree &data, location_t loc) > > Besides the potential moving, I think the coding guidelines don't recommend > using references that way. But even if it is used, wouldn't it be better > to return fn instead of void and just set data (either using reference > or taking address of data)? Done. --------------IngCIjDKWmka6a3dBoKR6qBF Content-Type: text/x-patch; charset=UTF-8; name="0001-ubsan-default-to-trap-on-unreachable-at-O0-and-Og-PR.patch" Content-Disposition: attachment; filename*0="0001-ubsan-default-to-trap-on-unreachable-at-O0-and-Og-PR.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1ZWVmN2Y3MWVlOGFjZDQ5MjllMWM0YjEyMWM0ZjhjNTgyNTFhNTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYXNvbiBNZXJyaWxsIDxqYXNvbkByZWRoYXQuY29tPgpEYXRl OiBGcmksIDEwIEp1biAyMDIyIDE2OjM1OjIxIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gdWJzYW46 IGRlZmF1bHQgdG8gdHJhcCBvbiB1bnJlYWNoYWJsZSBhdCAtTzAgYW5kIC1PZwogW1BSMTA0NjQy XQpUbzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcKCldoZW4gbm90IG9wdGltaXppbmcsIHdlIGNh bid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHVucmVhY2hhYmlsaXR5IGluCnRlcm1zIG9mIGNv ZGUgcGVyZm9ybWFuY2UsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgaW1wcm92ZSBkZWJ1Z2dpbmcgYnkg dHVybmluZwpfX2J1aWx0aW5fdW5yZWFjaGFibGUgaW50byBhIHRyYXAuICBJIHRoaW5rIGl0IGFs c28gbWFrZXMgc2Vuc2UgdG8gZG8gdGhpcwp3aGVuIHdlJ3JlIGV4cGxpY2l0bHkgb3B0aW1pemlu ZyBmb3IgdGhlIGRlYnVnZ2luZyBleHBlcmllbmNlLgoKSW4gdGhlIFBSIHJpY2hpIHN1Z2dlc3Rl ZCBpbnRyb2R1Y2luZyBhbiAtZnVucmVhY2hhYmxlLXRyYXBzIGZsYWcgZm9yIHRoaXMuClRoaXMg ZnVuY3Rpb25hbGl0eSBpcyBhbHJlYWR5IGltcGxlbWVudGVkIGFzIC1mc2FuaXRpemU9dW5yZWFj aGFibGUKLWZzYW5pdGl6ZS10cmFwPXVucmVhY2hhYmxlLCBhbmQgd2Ugd2FudCB0byBzaGFyZSB0 aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBpdApkb2VzIHNlZW0gdXNlZnVsIHRvIGhhdmUgYSBzZXBh cmF0ZSBmbGFnIHRoYXQgaXNuJ3QgYWZmZWN0ZWQgYnkgdGhlIHZhcmlvdXMKc2FuaXRpemF0aW9u IGNvbnRyb2xzLgoKSmFrdWIgb2JzZXJ2ZWQgdGhhdCB0aGlzIHdvdWxkIHNsb3cgZG93biAtTzAg YnkgZGVmYXVsdCBmcm9tIHJ1bm5pbmcgdGhlCnNhbm9wdCBwYXNzLCBzbyB0aGlzIHJldmlzaW9u IGF2b2lkcyB0aGUgbmVlZCBmb3Igc2Fub3B0IGJ5IHJld3JpdGluZyBjYWxscwppbnRyb2R1Y2Vk IGJ5IHRoZSBjb21waWxlciBpbW1lZGlhdGVseSwgYW5kIGNhbGxzIHdyaXR0ZW4gYnkgdGhlIHVz ZXIgYXQKZm9sZCB0aW1lLiAgTWFueSBvZiB0aGUgY2FsbHMgaW50cm9kdWNlZCBieSB0aGUgY29t cGlsZXIgYXJlIGFsc28gcmV3cml0dGVuCmltbWVkaWF0ZWx5IHRvIHVic2FuIGNhbGxzIHdoZW4g bm90IHRyYXBwaW5nLCB3aGljaCBmaXhlcyB1YnNhbi04Yi5DOwpwcmV2aW91c2x5IHRoZSBjYWxs IHRvIGYoKSB3YXMgb3B0aW1pemVkIGF3YXkgYmVmb3JlIHNhbm9wdC4gIEJ1dCB0aGlzIGVhcmx5 CnJld3JpdGluZyBpc24ndCBwcmFjdGljYWwgZm9yIHVzZXMgb2YgX19idWlsdGluX3VucmVhY2hh YmxlIGluCmRldmlydHVhbGl6YXRpb24gYW5kIHN1Y2gsIHNvIHNhbm9wdCByZXdyaXRpbmcgaXMg c3RpbGwgZG9uZSBmb3IKbm9uLXRyYXBwaW5nIHNhbml0aXplLgoKSW4gdGhpcyBwYXRjaCAtZnNh bml0aXplPXVucmVhY2hhYmxlIG92ZXJyaWRlcyAtZnVucmVhY2hhYmxlLXRyYXBzOyB3ZSBjb3Vs ZAphbHNvIGNob29zZSB0byBnbyB0aGUgb3RoZXIgd2F5LgoKCVBSIGMrKy8xMDQ2NDIKCmdjYy9D aGFuZ2VMb2c6CgoJKiBjb21tb24ub3B0OiBBZGQgLWZ1bnJlYWNoYWJsZS10cmFwcy4KCSogZG9j L2ludm9rZS50ZXhpICgtZnVucmVhY2hhYmxlLXRyYXBzKTogRG9jdW1lbnQgaXQuCgkqIG9wdHMu Y2MgKGZpbmlzaF9vcHRpb25zKTogRW5hYmxlIGF0IC1PMCBvciAtT2cuCgkqIHRyZWUuY2MgKGJ1 aWxkX2NvbW1vbl9idWlsdGluX25vZGVzKTogQWRkIF9fYnVpbHRpbl90cmFwLgoJKGJ1aWx0aW5f ZGVjbF91bnJlYWNoYWJsZSwgYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSk6IE5ldy4KCSogdHJl ZS5oOiBEZWNsYXJlIHRoZW0uCgkqIHVic2FuLmNjIChzYW5pdGl6ZV91bnJlYWNoYWJsZV9mbik6 IEZhY3RvciBvdXQuCgkodWJzYW5faW5zdHJ1bWVudF91bnJlYWNoYWJsZSk6IFVzZQoJZ2ltcGxl X2J1aWxkX2J1aWx0aW5fdW5yZWFjaGFibGUuCgkqIHVic2FuLmggKHNhbml0aXplX3VucmVhY2hh YmxlX2ZuKTogRGVjbGFyZS4KCSogZ2ltcGxlLmNjIChnaW1wbGVfYnVpbGRfYnVpbHRpbl91bnJl YWNoYWJsZSk6IE5ldy4KCSogZ2ltcGxlLmg6IERlY2xhcmUgaXQuCgkqIGJ1aWx0aW5zLmNjIChl eHBhbmRfYnVpbHRpbl91bnJlYWNoYWJsZSk6IEFkZCBhc3NlcnQuCgkoZm9sZF9idWlsdGluXzAp OiBDYWxsIGJ1aWxkX2J1aWx0aW5fdW5yZWFjaGFibGUuCgkqIHNhbm9wdC5jYzogRG9uJ3QgcnVu IGZvciBqdXN0IFNBTklUSVpFX1JFVFVSTgoJb3IgU0FOSVRJWkVfVU5SRUFDSEFCTEUgd2hlbiB0 cmFwcGluZy4KCSogY2dyYXBodW5pdC5jYyAod2Fsa19wb2x5bW9ycGhpY19jYWxsX3RhcmdldHMp OiBVc2UgbmV3Cgl1bnJlYWNoYWJsZSBmdW5jdGlvbnMuCgkqIGdpbXBsZS1mb2xkLmNjIChnaW1w bGVfZm9sZF9jYWxsKQoJKGdpbXBsZV9nZXRfdmlydF9tZXRob2RfZm9yX3Z0YWJsZSkKCSogaXBh LWZuc3VtbWFyeS5jYyAocmVkaXJlY3RfdG9fdW5yZWFjaGFibGUpCgkqIGlwYS1wcm9wLmNjIChp cGFfbWFrZV9lZGdlX2RpcmVjdF90b190YXJnZXQpCgkoaXBhX2ltcG9zc2libGVfZGV2aXJ0X3Rh cmdldCkKCSogaXBhLmNjICh3YWxrX3BvbHltb3JwaGljX2NhbGxfdGFyZ2V0cykKCSogdHJlZS1j ZmcuY2MgKHBhc3Nfd2Fybl9mdW5jdGlvbl9yZXR1cm46OmV4ZWN1dGUpCgkoZXhlY3V0ZV9maXh1 cF9jZmcpCgkqIHRyZWUtc3NhLWxvb3AtaXZjYW5vbi5jYyAocmVtb3ZlX2V4aXRzX2FuZF91bmRl ZmluZWRfc3RtdHMpCgkodW5sb29wX2xvb3BzKQoJKiB0cmVlLXNzYS1zY2N2bi5jYyAoZWxpbWlu YXRlX2RvbV93YWxrZXI6OmVsaW1pbmF0ZV9zdG10KToKCUxpa2V3aXNlLgoKZ2NjL2NwL0NoYW5n ZUxvZzoKCgkqIGNvbnN0ZXhwci5jYyAoY3h4X2V2YWxfYnVpbHRpbl9mdW5jdGlvbl9jYWxsKTog SGFuZGxlCgl1bnJlYWNoYWJsZS90cmFwIGVhcmxpZXIuCgkqIGNwLWdpbXBsaWZ5LmNjIChjcF9t YXliZV9pbnN0cnVtZW50X3JldHVybik6IFVzZQoJYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZS4K CmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZysrLmRnL3Vic2FuL3JldHVybi04YS5DOiBO ZXcgdGVzdC4KCSogZysrLmRnL3Vic2FuL3JldHVybi04Yi5DOiBOZXcgdGVzdC4KCSogZysrLmRn L3Vic2FuL3JldHVybi04ZC5DOiBOZXcgdGVzdC4KCSogZysrLmRnL3Vic2FuL3JldHVybi04ZS5D OiBOZXcgdGVzdC4KLS0tCiBnY2MvZG9jL2ludm9rZS50ZXhpICAgICAgICAgICAgICAgICAgICB8 IDE0ICsrKysrKysrCiBnY2MvY29tbW9uLm9wdCAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0 ICsrKwogZ2NjL2dpbXBsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBnY2Mv dHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKwogZ2NjL3Vic2FuLmgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBnY2MvYnVpbHRpbnMuY2MgICAgICAg ICAgICAgICAgICAgICAgICB8ICA5ICsrKysrCiBnY2MvY2dyYXBodW5pdC5jYyAgICAgICAgICAg ICAgICAgICAgICB8ICAzICstCiBnY2MvY3AvY29uc3RleHByLmNjICAgICAgICAgICAgICAgICAg ICB8IDI5ICsrKysrKysrKy0tLS0tLS0KIGdjYy9jcC9jcC1naW1wbGlmeS5jYyAgICAgICAgICAg ICAgICAgIHwgIDcgKystLQogZ2NjL2dpbXBsZS1mb2xkLmNjICAgICAgICAgICAgICAgICAgICAg fCAgNyArKy0tCiBnY2MvZ2ltcGxlLmNjICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzICsr KysrKysKIGdjYy9pcGEtZm5zdW1tYXJ5LmNjICAgICAgICAgICAgICAgICAgIHwgIDQgKy0tCiBn Y2MvaXBhLXByb3AuY2MgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICstLQogZ2NjL2lwYS5j YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMyArLQogZ2NjL29wdHMuY2MgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysKIGdjYy9zYW5vcHQuY2MgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMTAgKysrKystCiBnY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9yZXR1 cm4tOGEuQyB8IDE2ICsrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vcmV0dXJu LThiLkMgfCAxNyArKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZysrLmRnL3Vic2FuL3JldHVybi04 ZC5DIHwgMTYgKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9yZXR1cm4tOGUu QyB8IDE3ICsrKysrKysrKwogZ2NjL3RyZWUtY2ZnLmNjICAgICAgICAgICAgICAgICAgICAgICAg fCAgNyArKy0tCiBnY2MvdHJlZS1zc2EtbG9vcC1pdmNhbm9uLmNjICAgICAgICAgICB8ICA3ICsr LS0KIGdjYy90cmVlLXNzYS1zY2N2bi5jYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGdjYy90 cmVlLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysr KysrCiBnY2MvdWJzYW4uY2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQ4ICsrKysrKysr KysrKysrKysrLS0tLS0tLS0tCiAyNSBmaWxlcyBjaGFuZ2VkLCAyMzMgaW5zZXJ0aW9ucygrKSwg NTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv dWJzYW4vcmV0dXJuLThhLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5k Zy91YnNhbi9yZXR1cm4tOGIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL3Vic2FuL3JldHVybi04ZC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvdWJzYW4vcmV0dXJuLThlLkMKCmRpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhp IGIvZ2NjL2RvYy9pbnZva2UudGV4aQppbmRleCA4MWQxM2Y0ZTc4ZS4uZTA3N2VhYTc3M2MgMTAw NjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQpA QCAtMTI5MzksNiArMTI5MzksMjAgQEAgYWxzbyBhdCBAb3B0aW9uey1PMH0gaWYgQG9wdGlvbnst ZnNlY3Rpb24tYW5jaG9yc30gaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuCiBBZGRpdGlvbmFsbHkg QG9wdGlvbnstZm5vLXRvcGxldmVsLXJlb3JkZXJ9IGltcGxpZXMKIEBvcHRpb257LWZuby1zZWN0 aW9uLWFuY2hvcnN9LgogCitAaXRlbSAtZnVucmVhY2hhYmxlLXRyYXBzCitAb3BpbmRleCBmdW5y ZWFjaGFibGUtdHJhcHMKK1dpdGggdGhpcyBvcHRpb24sIHRoZSBjb21waWxlciB0dXJucyBjYWxs cyB0bworQGNvZGV7X19idWlsdGluX3VucmVhY2hhYmxlfSBpbnRvIHRyYXBzLCBpbnN0ZWFkIG9m IHVzaW5nIHRoZW0gZm9yCitvcHRpbWl6YXRpb24uICBUaGlzIGFsc28gYWZmZWN0cyBhbnkgc3Vj aCBjYWxscyBpbXBsaWNpdGx5IGdlbmVyYXRlZAorYnkgdGhlIGNvbXBpbGVyLgorCitUaGlzIG9w dGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIEBvcHRpb257LWZzYW5pdGl6ZT11bnJlYWNoYWJs ZQorLWZzYW5pdGl6ZS10cmFwPXVucmVhY2hhYmxlfSwgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUg dmFsdWVzIG9mIHRob3NlCitvcHRpb25zLiAgSWYgQG9wdGlvbnstZnNhbml0aXplPXVucmVhY2hh YmxlfSBpcyBlbmFibGVkLCB0aGF0IG9wdGlvbgordGFrZXMgcHJpb3JpdHkgb3ZlciB0aGlzIG9u ZS4KKworVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IEBvcHRpb257LU8wfSBh bmQgQG9wdGlvbnstT2d9LgorCiBAaXRlbSAtZndlYgogQG9waW5kZXggZndlYgogQ29uc3RydWN0 cyB3ZWJzIGFzIGNvbW1vbmx5IHVzZWQgZm9yIHJlZ2lzdGVyIGFsbG9jYXRpb24gcHVycG9zZXMg YW5kIGFzc2lnbgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi5vcHQgYi9nY2MvY29tbW9uLm9wdApp bmRleCAzMjkxN2FhZmNhZS4uZGE1ZDIzZDFkZTggMTAwNjQ0Ci0tLSBhL2djYy9jb21tb24ub3B0 CisrKyBiL2djYy9jb21tb24ub3B0CkBAIC0zMDE3LDYgKzMwMTcsMTAgQEAgZnVuaXQtYXQtYS10 aW1lCiBDb21tb24gVmFyKGZsYWdfdW5pdF9hdF9hX3RpbWUpIEluaXQoMSkKIENvbXBpbGUgd2hv bGUgY29tcGlsYXRpb24gdW5pdCBhdCBhIHRpbWUuCiAKK2Z1bnJlYWNoYWJsZS10cmFwcworQ29t bW9uIFZhcihmbGFnX3VucmVhY2hhYmxlX3RyYXBzKSBPcHRpbWl6YXRpb24KK1RyYXAgb24gX19i dWlsdGluX3VucmVhY2hhYmxlIGluc3RlYWQgb2YgdXNpbmcgaXQgZm9yIG9wdGltaXphdGlvbi4K KwogZnVucm9sbC1sb29wcwogQ29tbW9uIFZhcihmbGFnX3Vucm9sbF9sb29wcykgT3B0aW1pemF0 aW9uIEVuYWJsZWRCeShmdW5yb2xsLWFsbC1sb29wcykKIFBlcmZvcm0gbG9vcCB1bnJvbGxpbmcg d2hlbiBpdGVyYXRpb24gY291bnQgaXMga25vd24uCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLmgg Yi9nY2MvZ2ltcGxlLmgKaW5kZXggODcwNjI5Y2Q1NjIuLjFkMTVmZjk4YWMyIDEwMDY0NAotLS0g YS9nY2MvZ2ltcGxlLmgKKysrIGIvZ2NjL2dpbXBsZS5oCkBAIC0xNjM4LDYgKzE2MzgsNyBAQCBl eHRlcm4gdm9pZCBtYXliZV9yZW1vdmVfdW51c2VkX2NhbGxfYXJncyAoc3RydWN0IGZ1bmN0aW9u ICosIGdpbXBsZSAqKTsKIGV4dGVybiBib29sIGdpbXBsZV9pbmV4cGVuc2l2ZV9jYWxsX3AgKGdj YWxsICopOwogZXh0ZXJuIGJvb2wgc3RtdF9jYW5fdGVybWluYXRlX2JiX3AgKGdpbXBsZSAqKTsK IGV4dGVybiBsb2NhdGlvbl90IGdpbXBsZV9vcl9leHByX25vbmFydGlmaWNpYWxfbG9jYXRpb24g KGdpbXBsZSAqLCB0cmVlKTsKK2djYWxsICpnaW1wbGVfYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJs ZSAobG9jYXRpb25fdCk7CiAKIC8qIFJldHVybiB0aGUgZGlzcG9zaXRpb24gZm9yIGEgd2Fybmlu ZyAob3IgYWxsIHdhcm5pbmdzIGJ5IGRlZmF1bHQpCiAgICBmb3IgYSBzdGF0ZW1lbnQuICAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUuaCBiL2djYy90cmVlLmgKaW5kZXggNTA3ZWEyNTJiOTUuLjZm NmFkNWEzYTVmIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5oCisrKyBiL2djYy90cmVlLmgKQEAgLTU4 NTgsNiArNTg1OCwxMSBAQCBidWlsdGluX2RlY2xfaW1wbGljaXQgKGVudW0gYnVpbHRfaW5fZnVu Y3Rpb24gZm5jb2RlKQogICByZXR1cm4gYnVpbHRpbl9pbmZvW3Vuc19mbmNvZGVdLmRlY2w7CiB9 CiAKKy8qIEZvciBCVUlMVElOX1VOUkVBQ0hBQkxFLCB1c2Ugb25lIG9mIHRoZXNlIG9yCisgICBn aW1wbGVfYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgYWJv dmUuICAqLworZXh0ZXJuIHRyZWUgYnVpbHRpbl9kZWNsX3VucmVhY2hhYmxlICgpOworZXh0ZXJu IHRyZWUgYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSAobG9jYXRpb25fdCk7CisKIC8qIFNldCBl eHBsaWNpdCBidWlsdGluIGZ1bmN0aW9uIG5vZGVzIGFuZCB3aGV0aGVyIGl0IGlzIGFuIGltcGxp Y2l0CiAgICBmdW5jdGlvbi4gICovCiAKZGlmZiAtLWdpdCBhL2djYy91YnNhbi5oIGIvZ2NjL3Vi c2FuLmgKaW5kZXggMTdjNTI1NGMxN2UuLjcxYTQwYTM5OWU0IDEwMDY0NAotLS0gYS9nY2MvdWJz YW4uaAorKysgYi9nY2MvdWJzYW4uaApAQCAtNjUsNSArNjUsNiBAQCBleHRlcm4gdHJlZSB1YnNh bl9idWlsZF9vdmVyZmxvd19idWlsdGluICh0cmVlX2NvZGUsIGxvY2F0aW9uX3QsIHRyZWUsIHRy ZWUsCiAJCQkJCSAgdHJlZSwgdHJlZSAqKTsKIGV4dGVybiB0cmVlIHVic2FuX2luc3RydW1lbnRf ZmxvYXRfY2FzdCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CiBleHRlcm4gdHJlZSB1YnNhbl9n ZXRfc291cmNlX2xvY2F0aW9uX3R5cGUgKHZvaWQpOworZXh0ZXJuIHRyZWUgc2FuaXRpemVfdW5y ZWFjaGFibGVfZm4gKHRyZWUgKmRhdGEsIGxvY2F0aW9uX3QgbG9jKTsKIAogI2VuZGlmICAvKiBH Q0NfVUJTQU5fSCAgKi8KZGlmZiAtLWdpdCBhL2djYy9idWlsdGlucy5jYyBiL2djYy9idWlsdGlu cy5jYwppbmRleCA5NzFiMThjMzc0NS4uZTY4MTZkNWM4NjUgMTAwNjQ0Ci0tLSBhL2djYy9idWls dGlucy5jYworKysgYi9nY2MvYnVpbHRpbnMuY2MKQEAgLTUxODQsNiArNTE4NCw5IEBAIGV4cGFu ZF9idWlsdGluX3RyYXAgKHZvaWQpCiBzdGF0aWMgdm9pZAogZXhwYW5kX2J1aWx0aW5fdW5yZWFj aGFibGUgKHZvaWQpCiB7CisgIC8qIFVzZSBnaW1wbGVfYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJs ZSBvciBidWlsdGluX2RlY2xfdW5yZWFjaGFibGUKKyAgICAgdG8gYXZvaWQgdGhpcy4gICovCisg IGdjY19jaGVja2luZ19hc3NlcnQgKCFzYW5pdGl6ZV9mbGFnc19wIChTQU5JVElaRV9VTlJFQUNI QUJMRSkpOwogICBlbWl0X2JhcnJpZXIgKCk7CiB9CiAKQEAgLTkyNjEsNiArOTI2NCwxMiBAQCBm b2xkX2J1aWx0aW5fMCAobG9jYXRpb25fdCBsb2MsIHRyZWUgZm5kZWNsKQogICAgIGNhc2UgQlVJ TFRfSU5fQ0xBU1NJRllfVFlQRToKICAgICAgIHJldHVybiBmb2xkX2J1aWx0aW5fY2xhc3NpZnlf dHlwZSAoTlVMTF9UUkVFKTsKIAorICAgIGNhc2UgQlVJTFRfSU5fVU5SRUFDSEFCTEU6CisgICAg ICAvKiBSZXdyaXRlIGFueSBleHBsaWNpdCBjYWxscyB0byBfX2J1aWx0aW5fdW5yZWFjaGFibGUu ICAqLworICAgICAgaWYgKHNhbml0aXplX2ZsYWdzX3AgKFNBTklUSVpFX1VOUkVBQ0hBQkxFKSkK KwlyZXR1cm4gYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSAobG9jKTsKKyAgICAgIGJyZWFrOwor CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy9jZ3Jh cGh1bml0LmNjIGIvZ2NjL2NncmFwaHVuaXQuY2MKaW5kZXggZTc3YmY5N2JlYTMuLjgzNmU3NTlj ZGYxIDEwMDY0NAotLS0gYS9nY2MvY2dyYXBodW5pdC5jYworKysgYi9nY2MvY2dyYXBodW5pdC5j YwpAQCAtMTAzMyw4ICsxMDMzLDcgQEAgd2Fsa19wb2x5bW9ycGhpY19jYWxsX3RhcmdldHMgKGhh c2hfc2V0PHZvaWQgKj4gKnJlYWNoYWJsZV9jYWxsX3RhcmdldHMsCiAJICBpZiAodGFyZ2V0cy5s ZW5ndGggKCkgPT0gMSkKIAkgICAgdGFyZ2V0ID0gdGFyZ2V0c1swXTsKIAkgIGVsc2UKLQkgICAg dGFyZ2V0ID0gY2dyYXBoX25vZGU6OmNyZWF0ZQotCQkJKGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAo QlVJTFRfSU5fVU5SRUFDSEFCTEUpKTsKKwkgICAgdGFyZ2V0ID0gY2dyYXBoX25vZGU6OmNyZWF0 ZSAoYnVpbHRpbl9kZWNsX3VucmVhY2hhYmxlICgpKTsKIAogCSAgaWYgKHN5bXRhYi0+ZHVtcF9m aWxlKQogCSAgICB7CmRpZmYgLS1naXQgYS9nY2MvY3AvY29uc3RleHByLmNjIGIvZ2NjL2NwL2Nv bnN0ZXhwci5jYwppbmRleCBmZDdmOGMwZmI4OC4uMGRjOTRkOTQ0NWQgMTAwNjQ0Ci0tLSBhL2dj Yy9jcC9jb25zdGV4cHIuY2MKKysrIGIvZ2NjL2NwL2NvbnN0ZXhwci5jYwpAQCAtMTQzOCw2ICsx NDM4LDIwIEBAIGN4eF9ldmFsX2J1aWx0aW5fZnVuY3Rpb25fY2FsbCAoY29uc3QgY29uc3RleHBy X2N0eCAqY3R4LCB0cmVlIHQsIHRyZWUgZnVuLAogCS8qIFRoZXNlIGJ1aWx0aW5zIHNoYWxsIGJl IGlnbm9yZWQgZHVyaW5nIGNvbnN0YW50IGV4cHJlc3Npb24KIAkgICBldmFsdWF0aW9uLiAgKi8K IAlyZXR1cm4gdm9pZF9ub2RlOworICAgICAgY2FzZSBCVUlMVF9JTl9VTlJFQUNIQUJMRToKKyAg ICAgIGNhc2UgQlVJTFRfSU5fVFJBUDoKKwlpZiAoISpub25fY29uc3RhbnRfcCAmJiAhY3R4LT5x dWlldCkKKwkgIHsKKwkgICAgLyogRG8gbm90IGFsbG93X19idWlsdGluX3VucmVhY2hhYmxlIGlu IGNvbnN0ZXhwciBmdW5jdGlvbi4KKwkgICAgICAgVGhlIF9fYnVpbHRpbl91bnJlYWNoYWJsZSBj YWxsIHdpdGggQlVJTFRJTlNfTE9DQVRJT04KKwkgICAgICAgY29tZXMgZnJvbSBjcF9tYXliZV9p bnN0cnVtZW50X3JldHVybi4gICovCisJICAgIGlmIChFWFBSX0xPQ0FUSU9OICh0KSA9PSBCVUlM VElOU19MT0NBVElPTikKKwkgICAgICBlcnJvciAoIiU8Y29uc3RleHByJT4gY2FsbCBmbG93cyBv ZmYgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24iKTsKKwkgICAgZWxzZQorCSAgICAgIGVycm9yICgi JXErRSBpcyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uIiwgdCk7CisJICB9CisJKm5vbl9jb25z dGFudF9wID0gdHJ1ZTsKKwlyZXR1cm4gdDsKICAgICAgIGRlZmF1bHQ6CiAJYnJlYWs7CiAgICAg ICB9CkBAIC0xNTMxLDE4ICsxNTQ1LDkgQEAgY3h4X2V2YWxfYnVpbHRpbl9mdW5jdGlvbl9jYWxs IChjb25zdCBjb25zdGV4cHJfY3R4ICpjdHgsIHRyZWUgdCwgdHJlZSBmdW4sCiAgICAgewogICAg ICAgaWYgKCEqbm9uX2NvbnN0YW50X3AgJiYgIWN0eC0+cXVpZXQpCiAJewotCSAgLyogRG8gbm90 IGFsbG93X19idWlsdGluX3VucmVhY2hhYmxlIGluIGNvbnN0ZXhwciBmdW5jdGlvbi4KLQkgICAg IFRoZSBfX2J1aWx0aW5fdW5yZWFjaGFibGUgY2FsbCB3aXRoIEJVSUxUSU5TX0xPQ0FUSU9OCi0J ICAgICBjb21lcyBmcm9tIGNwX21heWJlX2luc3RydW1lbnRfcmV0dXJuLiAgKi8KLQkgIGlmIChm bmRlY2xfYnVpbHRfaW5fcCAoZnVuLCBCVUlMVF9JTl9VTlJFQUNIQUJMRSkKLQkgICAgICAmJiBF WFBSX0xPQ0FUSU9OICh0KSA9PSBCVUlMVElOU19MT0NBVElPTikKLQkgICAgZXJyb3IgKCIlPGNv bnN0ZXhwciU+IGNhbGwgZmxvd3Mgb2ZmIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIik7Ci0JICBl bHNlCi0JICAgIHsKLQkgICAgICBuZXdfY2FsbCA9IGJ1aWxkX2NhbGxfYXJyYXlfbG9jIChFWFBS X0xPQ0FUSU9OICh0KSwgVFJFRV9UWVBFICh0KSwKLQkJCQkJICAgICAgIENBTExfRVhQUl9GTiAo dCksIG5hcmdzLCBhcmdzKTsKLQkgICAgICBlcnJvciAoIiVxK0UgaXMgbm90IGEgY29uc3RhbnQg ZXhwcmVzc2lvbiIsIG5ld19jYWxsKTsKLQkgICAgfQorCSAgbmV3X2NhbGwgPSBidWlsZF9jYWxs X2FycmF5X2xvYyAoRVhQUl9MT0NBVElPTiAodCksIFRSRUVfVFlQRSAodCksCisJCQkJCSAgIENB TExfRVhQUl9GTiAodCksIG5hcmdzLCBhcmdzKTsKKwkgIGVycm9yICgiJXErRSBpcyBub3QgYSBj b25zdGFudCBleHByZXNzaW9uIiwgbmV3X2NhbGwpOwogCX0KICAgICAgICpub25fY29uc3RhbnRf cCA9IHRydWU7CiAgICAgICByZXR1cm4gdDsKZGlmZiAtLWdpdCBhL2djYy9jcC9jcC1naW1wbGlm eS5jYyBiL2djYy9jcC9jcC1naW1wbGlmeS5jYwppbmRleCA2Zjg0ZDE1N2M5OC4uYzA1YmU4MzMz NTcgMTAwNjQ0Ci0tLSBhL2djYy9jcC9jcC1naW1wbGlmeS5jYworKysgYi9nY2MvY3AvY3AtZ2lt cGxpZnkuY2MKQEAgLTE4MTQsNyArMTgxNCw3IEBAIGNwX21heWJlX2luc3RydW1lbnRfcmV0dXJu ICh0cmVlIGZuZGVjbCkKIAkgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQsIHdoaWxlIHRoZSBfX2J1 aWx0aW5fdW5yZWFjaGFibGUgKCkgYmVsb3cKIAkgaWYgcmV0dXJuIHNhbml0aXphdGlvbiBpcyBk aXNhYmxlZCB3aWxsIGp1c3QgcmVzdWx0IGluIGhhcmQgdG8KIAkgdW5kZXJzdGFuZCBydW50aW1l IGVycm9yIHdpdGhvdXQgbG9jYXRpb24uICAqLwotICAgICAgJiYgKCFvcHRpbWl6ZQorICAgICAg JiYgKCghb3B0aW1pemUgJiYgIWZsYWdfdW5yZWFjaGFibGVfdHJhcHMpCiAJICB8fCBzYW5pdGl6 ZV9mbGFnc19wIChTQU5JVElaRV9VTlJFQUNIQUJMRSwgZm5kZWNsKSkpCiAgICAgcmV0dXJuOwog CkBAIC0xODY0LDEwICsxODY0LDcgQEAgY3BfbWF5YmVfaW5zdHJ1bWVudF9yZXR1cm4gKHRyZWUg Zm5kZWNsKQogICBpZiAoc2FuaXRpemVfZmxhZ3NfcCAoU0FOSVRJWkVfUkVUVVJOLCBmbmRlY2wp KQogICAgIHQgPSB1YnNhbl9pbnN0cnVtZW50X3JldHVybiAobG9jKTsKICAgZWxzZQotICAgIHsK LSAgICAgIHRyZWUgZm5kZWNsID0gYnVpbHRpbl9kZWNsX2V4cGxpY2l0IChCVUlMVF9JTl9VTlJF QUNIQUJMRSk7Ci0gICAgICB0ID0gYnVpbGRfY2FsbF9leHByX2xvYyAoQlVJTFRJTlNfTE9DQVRJ T04sIGZuZGVjbCwgMCk7Ci0gICAgfQorICAgIHQgPSBidWlsZF9idWlsdGluX3VucmVhY2hhYmxl IChCVUlMVElOU19MT0NBVElPTik7CiAKICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0ICh0LCBw KTsKIH0KZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtZm9sZC5jYyBiL2djYy9naW1wbGUtZm9sZC5j YwppbmRleCBmNjFiYzg3ZGE2My4uYTE3MDQ3ODRiYzkgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUt Zm9sZC5jYworKysgYi9nY2MvZ2ltcGxlLWZvbGQuY2MKQEAgLTU1MTAsOSArNTUxMCw4IEBAIGdp bXBsZV9mb2xkX2NhbGwgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGJvb2wgaW5wbGFjZSkK IAkJfQogCSAgICAgIGVsc2UKIAkJewotCQkgIHRyZWUgZm5kZWNsID0gYnVpbHRpbl9kZWNsX2lt cGxpY2l0IChCVUlMVF9JTl9VTlJFQUNIQUJMRSk7Ci0JCSAgZ2ltcGxlICpuZXdfc3RtdCA9IGdp bXBsZV9idWlsZF9jYWxsIChmbmRlY2wsIDApOwotCQkgIGdpbXBsZV9zZXRfbG9jYXRpb24gKG5l d19zdG10LCBnaW1wbGVfbG9jYXRpb24gKHN0bXQpKTsKKwkJICBsb2NhdGlvbl90IGxvYyA9IGdp bXBsZV9sb2NhdGlvbiAoc3RtdCk7CisJCSAgZ2ltcGxlICpuZXdfc3RtdCA9IGdpbXBsZV9idWls ZF9idWlsdGluX3VucmVhY2hhYmxlIChsb2MpOwogCQkgIC8qIElmIHRoZSBjYWxsIGhhZCBhIFNT QSBuYW1lIGFzIGxocyBtb3JwaCB0aGF0IGludG8KIAkJICAgICBhbiB1bmluaXRpYWxpemVkIHZh bHVlLiAgKi8KIAkJICBpZiAobGhzICYmIFRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSkKQEAg LTgzOTYsNyArODM5NSw3IEBAIGdpbXBsZV9nZXRfdmlydF9tZXRob2RfZm9yX3Z0YWJsZSAoSE9T VF9XSURFX0lOVCB0b2tlbiwKICAgaWYgKCFmbgogICAgICAgfHwgKFRSRUVfQ09ERSAoZm4pICE9 IEFERFJfRVhQUiAmJiBUUkVFX0NPREUgKGZuKSAhPSBGREVTQ19FWFBSKQogICAgICAgfHwgVFJF RV9DT0RFIChUUkVFX09QRVJBTkQgKGZuLCAwKSkgIT0gRlVOQ1RJT05fREVDTCkKLSAgICBmbiA9 IGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fVU5SRUFDSEFCTEUpOworICAgIGZuID0g YnVpbHRpbl9kZWNsX3VucmVhY2hhYmxlICgpOwogICBlbHNlCiAgICAgewogICAgICAgZm4gPSBU UkVFX09QRVJBTkQgKGZuLCAwKTsKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUuY2MgYi9nY2MvZ2lt cGxlLmNjCmluZGV4IGI3MGFiNGQyNTIzLi45YjE1NjM5OWJhMSAxMDA2NDQKLS0tIGEvZ2NjL2dp bXBsZS5jYworKysgYi9nY2MvZ2ltcGxlLmNjCkBAIC00NCw2ICs0NCw3IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAic3RyaW5n cG9vbC5oIgogI2luY2x1ZGUgImF0dHJpYnMuaCIKICNpbmNsdWRlICJhc2FuLmgiCisjaW5jbHVk ZSAidWJzYW4uaCIKICNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNsdWRlICJhdHRyLWZuc3Bl Yy5oIgogI2luY2x1ZGUgImlwYS1tb2RyZWYtdHJlZS5oIgpAQCAtNDIxLDYgKzQyMiwxOCBAQCBn aW1wbGVfYnVpbGRfY2FsbF9mcm9tX3RyZWUgKHRyZWUgdCwgdHJlZSBmbnB0cnR5cGUpCiAgIHJl dHVybiBjYWxsOwogfQogCisvKiBCdWlsZCBhIGdjYWxsIHRvIF9fYnVpbHRpbl91bnJlYWNoYWJs ZSBhcyByZXdyaXR0ZW4gYnkKKyAgIC1mc2FuaXRpemU9dW5yZWFjaGFibGUuICAqLworCitnY2Fs bCAqCitnaW1wbGVfYnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSAobG9jYXRpb25fdCBsb2MpCit7 CisgIHRyZWUgZGF0YSA9IE5VTExfVFJFRTsKKyAgdHJlZSBmbiA9IHNhbml0aXplX3VucmVhY2hh YmxlX2ZuICgmZGF0YSwgbG9jKTsKKyAgZ2NhbGwgKmcgPSBnaW1wbGVfYnVpbGRfY2FsbCAoZm4s IGRhdGEgIT0gTlVMTF9UUkVFLCBkYXRhKTsKKyAgZ2ltcGxlX3NldF9sb2NhdGlvbiAoZywgbG9j KTsKKyAgcmV0dXJuIGc7Cit9CiAKIC8qIEJ1aWxkIGEgR0lNUExFX0FTU0lHTiBzdGF0ZW1lbnQu CiAKZGlmZiAtLWdpdCBhL2djYy9pcGEtZm5zdW1tYXJ5LmNjIGIvZ2NjL2lwYS1mbnN1bW1hcnku Y2MKaW5kZXggYjEyZTdhMTEyNGQuLmM5NTY0NDUxZjI2IDEwMDY0NAotLS0gYS9nY2MvaXBhLWZu c3VtbWFyeS5jYworKysgYi9nY2MvaXBhLWZuc3VtbWFyeS5jYwpAQCAtMjUwLDggKzI1MCw4IEBA IHN0YXRpYyBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKgogcmVkaXJlY3RfdG9fdW5yZWFjaGFibGUgKHN0 cnVjdCBjZ3JhcGhfZWRnZSAqZSkKIHsKICAgc3RydWN0IGNncmFwaF9ub2RlICpjYWxsZWUgPSAh ZS0+aW5saW5lX2ZhaWxlZCA/IGUtPmNhbGxlZSA6IE5VTEw7Ci0gIHN0cnVjdCBjZ3JhcGhfbm9k ZSAqdGFyZ2V0ID0gY2dyYXBoX25vZGU6OmdldF9jcmVhdGUKLQkJICAgICAgKGJ1aWx0aW5fZGVj bF9pbXBsaWNpdCAoQlVJTFRfSU5fVU5SRUFDSEFCTEUpKTsKKyAgc3RydWN0IGNncmFwaF9ub2Rl ICp0YXJnZXQKKyAgICA9IGNncmFwaF9ub2RlOjpnZXRfY3JlYXRlIChidWlsdGluX2RlY2xfdW5y ZWFjaGFibGUgKCkpOwogCiAgIGlmIChlLT5zcGVjdWxhdGl2ZSkKICAgICBlID0gY2dyYXBoX2Vk Z2U6OnJlc29sdmVfc3BlY3VsYXRpb24gKGUsIHRhcmdldC0+ZGVjbCk7CmRpZmYgLS1naXQgYS9n Y2MvaXBhLXByb3AuY2MgYi9nY2MvaXBhLXByb3AuY2MKaW5kZXggYzAzNzY2OGU3ZDguLmUxZmM0 ODE0MjNiIDEwMDY0NAotLS0gYS9nY2MvaXBhLXByb3AuY2MKKysrIGIvZ2NjL2lwYS1wcm9wLmNj CkBAIC0zNDEwLDcgKzM0MTAsNyBAQCBpcGFfbWFrZV9lZGdlX2RpcmVjdF90b190YXJnZXQgKHN0 cnVjdCBjZ3JhcGhfZWRnZSAqaWUsIHRyZWUgdGFyZ2V0LAogCQkJICAgICAgIGllLT5jYWxsZXIt PmR1bXBfbmFtZSAoKSk7CiAJICAgIH0KIAotCSAgdGFyZ2V0ID0gYnVpbHRpbl9kZWNsX2ltcGxp Y2l0IChCVUlMVF9JTl9VTlJFQUNIQUJMRSk7CisJICB0YXJnZXQgPSBidWlsdGluX2RlY2xfdW5y ZWFjaGFibGUgKCk7CiAJICBjYWxsZWUgPSBjZ3JhcGhfbm9kZTo6Z2V0X2NyZWF0ZSAodGFyZ2V0 KTsKIAkgIHVucmVhY2hhYmxlID0gdHJ1ZTsKIAl9CkBAIC0zODIxLDcgKzM4MjEsNyBAQCBpcGFf aW1wb3NzaWJsZV9kZXZpcnRfdGFyZ2V0IChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmllLCB0cmVlIHRh cmdldCkKIAkJICJObyBkZXZpcnR1YWxpemF0aW9uIHRhcmdldCBpbiAlc1xuIiwKIAkJIGllLT5j YWxsZXItPmR1bXBfbmFtZSAoKSk7CiAgICAgfQotICB0cmVlIG5ld190YXJnZXQgPSBidWlsdGlu X2RlY2xfaW1wbGljaXQgKEJVSUxUX0lOX1VOUkVBQ0hBQkxFKTsKKyAgdHJlZSBuZXdfdGFyZ2V0 ID0gYnVpbHRpbl9kZWNsX3VucmVhY2hhYmxlICgpOwogICBjZ3JhcGhfbm9kZTo6Z2V0X2NyZWF0 ZSAobmV3X3RhcmdldCk7CiAgIHJldHVybiBuZXdfdGFyZ2V0OwogfQpkaWZmIC0tZ2l0IGEvZ2Nj L2lwYS5jYyBiL2djYy9pcGEuY2MKaW5kZXggZjUzZjE1ZjVmMGEuLjRkNTcyOWY4MzcwIDEwMDY0 NAotLS0gYS9nY2MvaXBhLmNjCisrKyBiL2djYy9pcGEuY2MKQEAgLTIzMiw4ICsyMzIsNyBAQCB3 YWxrX3BvbHltb3JwaGljX2NhbGxfdGFyZ2V0cyAoaGFzaF9zZXQ8dm9pZCAqPiAqcmVhY2hhYmxl X2NhbGxfdGFyZ2V0cywKIAkgIGlmICh0YXJnZXRzLmxlbmd0aCAoKSA9PSAxKQogCSAgICB0YXJn ZXQgPSB0YXJnZXRzWzBdOwogCSAgZWxzZQotCSAgICB0YXJnZXQgPSBjZ3JhcGhfbm9kZTo6Z2V0 X2NyZWF0ZQotCQkgICAgICAgKGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fVU5SRUFD SEFCTEUpKTsKKwkgICAgdGFyZ2V0ID0gY2dyYXBoX25vZGU6OmdldF9jcmVhdGUgKGJ1aWx0aW5f ZGVjbF91bnJlYWNoYWJsZSAoKSk7CiAKIAkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKIAkgICAg ewpkaWZmIC0tZ2l0IGEvZ2NjL29wdHMuY2MgYi9nY2Mvb3B0cy5jYwppbmRleCA5NTlkNDhkMTcz Zi4uOTk4Mjk3NGM4YjUgMTAwNjQ0Ci0tLSBhL2djYy9vcHRzLmNjCisrKyBiL2djYy9vcHRzLmNj CkBAIC0xMTIyLDYgKzExMjIsMTAgQEAgZmluaXNoX29wdGlvbnMgKHN0cnVjdCBnY2Nfb3B0aW9u cyAqb3B0cywgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwKICAgICAgIG9wdHMtPnhfZmxh Z19ub19pbmxpbmUgPSAxOwogICAgIH0KIAorICAvKiBBdCAtTzAgb3IgLU9nLCB0dXJuIF9fYnVp bHRpbl91bnJlYWNoYWJsZSBpbnRvIGEgdHJhcC4gICovCisgIGlmICghb3B0cy0+eF9vcHRpbWl6 ZSB8fCBvcHRzLT54X29wdGltaXplX2RlYnVnKQorICAgIFNFVF9PUFRJT05fSUZfVU5TRVQgKG9w dHMsIG9wdHNfc2V0LCBmbGFnX3VucmVhY2hhYmxlX3RyYXBzLCB0cnVlKTsKKwogICAvKiBQaXBl bGluaW5nIG9mIG91dGVyIGxvb3BzIGlzIG9ubHkgcG9zc2libGUgd2hlbiBnZW5lcmFsIHBpcGVs aW5pbmcKICAgICAgY2FwYWJpbGl0aWVzIGFyZSByZXF1ZXN0ZWQuICAqLwogICBpZiAoIW9wdHMt PnhfZmxhZ19zZWxfc2NoZWRfcGlwZWxpbmluZykKZGlmZiAtLWdpdCBhL2djYy9zYW5vcHQuY2Mg Yi9nY2Mvc2Fub3B0LmNjCmluZGV4IGMzMTg3NjMxMTUzLi4yYjA1NTUzYmFlYiAxMDA2NDQKLS0t IGEvZ2NjL3Nhbm9wdC5jYworKysgYi9nY2Mvc2Fub3B0LmNjCkBAIC05NDIsNyArOTQyLDE1IEBA IHB1YmxpYzoKICAge30KIAogICAvKiBvcHRfcGFzcyBtZXRob2RzOiAqLwotICB2aXJ0dWFsIGJv b2wgZ2F0ZSAoZnVuY3Rpb24gKikgeyByZXR1cm4gZmxhZ19zYW5pdGl6ZTsgfQorICB2aXJ0dWFs IGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKikKKyAgeworICAgIC8qIFNBTklUSVpFX1JFVFVSTiBpcyBo YW5kbGVkIGluIHRoZSBmcm9udC1lbmQuICBXaGVuIHRyYXBwaW5nLAorICAgICAgIFNBTklUSVpF X1VOUkVBQ0hBQkxFIGlzIGhhbmRsZWQgYnkgYnVpbHRpbl9kZWNsX3VucmVhY2hhYmxlLiAgKi8K KyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IFNBTklUSVpFX1JFVFVSTjsKKyAgICBpZiAoZmxhZ19z YW5pdGl6ZV90cmFwICYgU0FOSVRJWkVfVU5SRUFDSEFCTEUpCisgICAgICBtYXNrIHw9IFNBTklU SVpFX1VOUkVBQ0hBQkxFOworICAgIHJldHVybiBmbGFnX3Nhbml0aXplICYgfm1hc2s7CisgIH0K ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24gKik7CiAKIH07IC8vIGNs YXNzIHBhc3Nfc2Fub3B0CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy91YnNhbi9y ZXR1cm4tOGEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vic2FuL3JldHVybi04YS5DCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NGYxYzdiNTMyNgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vic2FuL3JldHVybi04YS5DCkBAIC0wLDAg KzEsMTYgQEAKKy8vIFBSIGMrKy8xMDQ2NDIKKworLy8gQXQgLU8wIGFuZCAtT2cgd2UgZGVmYXVs dCB0byAtZnVucmVhY2hhYmxlLXRyYXBzCisvLyBzbyB0aGUgYmVsb3cgc2hvdWxkIGFib3J0IGF0 IHJ1bnRpbWUuCisKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctc2hvdWxkZmFpbCB7ICotKi0q IH0gfQorLy8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PMCIgfQorCitib29sIGI7CisKK2lu dCBmKCkgeworICBpZiAoYikgcmV0dXJuIDQyOworfQkJCS8vIHsgZGctd2FybmluZyAiLVdyZXR1 cm4tdHlwZSIgfQorCitpbnQgbWFpbigpIHsgZigpOyB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2crKy5kZy91YnNhbi9yZXR1cm4tOGIuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vic2Fu L3JldHVybi04Yi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZGFl YTYwZjgwOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vic2FuL3Jl dHVybi04Yi5DCkBAIC0wLDAgKzEsMTcgQEAKKy8vIFBSIGMrKy8xMDQ2NDIKKworLy8gV2l0aCAt ZnNhbml0aXplPXVucmVhY2hhYmxlIHdlIHNob3VsZG4ndCBvcHRpbWl6ZSBhd2F5IHRoZSBjYWxs IHRvIGYuCisKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctc2hvdWxkZmFpbCB7ICotKi0qIH0g fQorLy8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PIC1mc2FuaXRpemU9dW5yZWFjaGFibGUi IH0KKworYm9vbCBiOworCitpbnQgZigpIHsKKyAgaWYgKGIpIHJldHVybiA0MjsKKyAgX19idWls dGluX3VucmVhY2hhYmxlICgpOworICByZXR1cm4gMjQ7Cit9CisKK2ludCBtYWluKCkgeyBmKCk7 IH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vic2FuL3JldHVybi04ZC5DIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vcmV0dXJuLThkLkMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdlYWRlZDAzNWFlCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vcmV0dXJuLThkLkMKQEAgLTAsMCArMSwxNiBAQAorLy8g UFIgYysrLzEwNDY0MgorCisvLyBBdCAtTzAgYW5kIC1PZyB3ZSBkZWZhdWx0IHRvIC1mdW5yZWFj aGFibGUtdHJhcHMKKy8vIHNvIHRoZSBiZWxvdyBzaG91bGQgYWJvcnQgYXQgcnVudGltZS4KKwor Ly8geyBkZy1kbyBydW4gfQorLy8geyBkZy1zaG91bGRmYWlsIHsgKi0qLSogfSB9CisvLyB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9nIiB9CisKK2Jvb2wgYjsKKworaW50IGYoKSB7CisgIGlm IChiKSByZXR1cm4gNDI7Cit9CQkJLy8geyBkZy13YXJuaW5nICItV3JldHVybi10eXBlIiB9CisK K2ludCBtYWluKCkgeyBmKCk7IH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3Vi c2FuL3JldHVybi04ZS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vcmV0dXJuLThlLkMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiYTQwMmIzNWYyCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdWJzYW4vcmV0dXJuLThlLkMKQEAg LTAsMCArMSwxNyBAQAorLy8gUFIgYysrLzEwNDY0MgorCisvLyBBdCAtTzAgYW5kIC1PZyB3ZSBk ZWZhdWx0IHRvIC1mdW5yZWFjaGFibGUtdHJhcHMKKy8vIHNvIHRoZSBiZWxvdyBzaG91bGQgYWJv cnQgYXQgcnVudGltZS4KKworLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1zaG91bGRmYWlsIHsg Ki0qLSogfSB9CisvLyB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8yIiB9CisKK2Jvb2wgYjsK KworX19hdHRyaWJ1dGVfXyAoKG9wdGltaXplICgiT2ciKSkpCitpbnQgZigpIHsKKyAgaWYgKGIp IHJldHVybiA0MjsKK30JCQkvLyB7IGRnLXdhcm5pbmcgIi1XcmV0dXJuLXR5cGUiIH0KKworaW50 IG1haW4oKSB7IGYoKTsgfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY2ZnLmNjIGIvZ2NjL3RyZWUt Y2ZnLmNjCmluZGV4IGM2N2MyNzhkYWQwLi43MzRmZGRkYmY5NyAxMDA2NDQKLS0tIGEvZ2NjL3Ry ZWUtY2ZnLmNjCisrKyBiL2djYy90cmVlLWNmZy5jYwpAQCAtOTUwMyw5ICs5NTAzLDggQEAgcGFz c193YXJuX2Z1bmN0aW9uX3JldHVybjo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikKIAkgICAgIHdp dGggX19idWlsdGluX3VucmVhY2hhYmxlICgpIGNhbGwuICAqLwogCSAgaWYgKG9wdGltaXplICYm IGdpbXBsZV9jb2RlIChsYXN0KSA9PSBHSU1QTEVfUkVUVVJOKQogCSAgICB7Ci0JICAgICAgdHJl ZSBmbmRlY2wgPSBidWlsdGluX2RlY2xfaW1wbGljaXQgKEJVSUxUX0lOX1VOUkVBQ0hBQkxFKTsK LQkgICAgICBnaW1wbGUgKm5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGwgKGZuZGVjbCwgMCk7 Ci0JICAgICAgZ2ltcGxlX3NldF9sb2NhdGlvbiAobmV3X3N0bXQsIGdpbXBsZV9sb2NhdGlvbiAo bGFzdCkpOworCSAgICAgIGxvY2F0aW9uX3QgbG9jID0gZ2ltcGxlX2xvY2F0aW9uIChsYXN0KTsK KwkgICAgICBnaW1wbGUgKm5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2J1aWx0aW5fdW5yZWFjaGFi bGUgKGxvYyk7CiAJICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpID0gZ3NpX2Zvcl9zdG10 IChsYXN0KTsKIAkgICAgICBnc2lfcmVwbGFjZSAoJmdzaSwgbmV3X3N0bXQsIHRydWUpOwogCSAg ICAgIHJlbW92ZV9lZGdlIChlKTsKQEAgLTk4MzQsNyArOTgzMyw3IEBAIGV4ZWN1dGVfZml4dXBf Y2ZnICh2b2lkKQogCSAgICB7CiAJICAgICAgaWYgKHN0bXQgJiYgaXNfZ2ltcGxlX2NhbGwgKHN0 bXQpKQogCQlnaW1wbGVfY2FsbF9zZXRfY3RybF9hbHRlcmluZyAoc3RtdCwgZmFsc2UpOwotCSAg ICAgIHRyZWUgZm5kZWNsID0gYnVpbHRpbl9kZWNsX2ltcGxpY2l0IChCVUlMVF9JTl9VTlJFQUNI QUJMRSk7CisJICAgICAgdHJlZSBmbmRlY2wgPSBidWlsdGluX2RlY2xfdW5yZWFjaGFibGUgKCk7 CiAJICAgICAgc3RtdCA9IGdpbXBsZV9idWlsZF9jYWxsIChmbmRlY2wsIDApOwogCSAgICAgIGdp bXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9sYXN0X2JiIChiYik7CiAJICAgICAgZ3NpX2lu c2VydF9hZnRlciAoJmdzaSwgc3RtdCwgR1NJX05FV19TVE1UKTsKZGlmZiAtLWdpdCBhL2djYy90 cmVlLXNzYS1sb29wLWl2Y2Fub24uY2MgYi9nY2MvdHJlZS1zc2EtbG9vcC1pdmNhbm9uLmNjCmlu ZGV4IDJlZTAwYTNmODQzLi42YTM4Yjc3YWI3YSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWxv b3AtaXZjYW5vbi5jYworKysgYi9nY2MvdHJlZS1zc2EtbG9vcC1pdmNhbm9uLmNjCkBAIC01MDUs OSArNTA1LDggQEAgcmVtb3ZlX2V4aXRzX2FuZF91bmRlZmluZWRfc3RtdHMgKGNsYXNzIGxvb3Ag Kmxvb3AsIHVuc2lnbmVkIGludCBucGVlbGVkKQogCSAgJiYgd2k6Omx0dV9wIChlbHQtPmJvdW5k LCBucGVlbGVkKSkKIAl7CiAJICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfZm9yX3N0 bXQgKGVsdC0+c3RtdCk7Ci0JICBnY2FsbCAqc3RtdCA9IGdpbXBsZV9idWlsZF9jYWxsCi0JICAg ICAgKGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fVU5SRUFDSEFCTEUpLCAwKTsKLQkg IGdpbXBsZV9zZXRfbG9jYXRpb24gKHN0bXQsIGdpbXBsZV9sb2NhdGlvbiAoZWx0LT5zdG10KSk7 CisJICBsb2NhdGlvbl90IGxvYyA9IGdpbXBsZV9sb2NhdGlvbiAoZWx0LT5zdG10KTsKKwkgIGdj YWxsICpzdG10ID0gZ2ltcGxlX2J1aWxkX2J1aWx0aW5fdW5yZWFjaGFibGUgKGxvYyk7CiAJICBn c2lfaW5zZXJ0X2JlZm9yZSAoJmdzaSwgc3RtdCwgR1NJX05FV19TVE1UKTsKIAkgIHNwbGl0X2Js b2NrIChnaW1wbGVfYmIgKHN0bXQpLCBzdG10KTsKIAkgIGNoYW5nZWQgPSB0cnVlOwpAQCAtNjQx LDcgKzY0MCw3IEBAIHVubG9vcF9sb29wcyAoYml0bWFwIGxvb3BfY2xvc2VkX3NzYV9pbnZhbGlk YXRlZCwKIAogICAgICAgLyogQ3JlYXRlIG5ldyBiYXNpYyBibG9jayBmb3IgdGhlIGxhdGNoIGVk Z2UgZGVzdGluYXRpb24gYW5kIHdpcmUKIAkgaXQgaW4uICAqLwotICAgICAgc3RtdCA9IGdpbXBs ZV9idWlsZF9jYWxsIChidWlsdGluX2RlY2xfaW1wbGljaXQgKEJVSUxUX0lOX1VOUkVBQ0hBQkxF KSwgMCk7CisgICAgICBzdG10ID0gZ2ltcGxlX2J1aWxkX2J1aWx0aW5fdW5yZWFjaGFibGUgKGxv Y3VzKTsKICAgICAgIGxhdGNoX2VkZ2UgPSBtYWtlX2VkZ2UgKGxhdGNoLCBjcmVhdGVfYmFzaWNf YmxvY2sgKE5VTEwsIE5VTEwsIGxhdGNoKSwgZmxhZ3MpOwogICAgICAgbGF0Y2hfZWRnZS0+cHJv YmFiaWxpdHkgPSBwcm9maWxlX3Byb2JhYmlsaXR5OjpuZXZlciAoKTsKICAgICAgIGxhdGNoX2Vk Z2UtPmZsYWdzIHw9IGZsYWdzOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLXNjY3ZuLmNjIGIv Z2NjL3RyZWUtc3NhLXNjY3ZuLmNjCmluZGV4IGVkNjg1NTdmMGIyLi43NzZkY2NiYmY1YSAxMDA2 NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXNjY3ZuLmNjCisrKyBiL2djYy90cmVlLXNzYS1zY2N2bi5j YwpAQCAtNjgwNyw3ICs2ODA3LDcgQEAgZWxpbWluYXRlX2RvbV93YWxrZXI6OmVsaW1pbmF0ZV9z dG10IChiYXNpY19ibG9jayBiLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpKQogCSAgICAgIGlm ICh0YXJnZXRzLmxlbmd0aCAoKSA9PSAxKQogCQlmbiA9IHRhcmdldHNbMF0tPmRlY2w7CiAJICAg ICAgZWxzZQotCQlmbiA9IGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoQlVJTFRfSU5fVU5SRUFDSEFC TEUpOworCQlmbiA9IGJ1aWx0aW5fZGVjbF91bnJlYWNoYWJsZSAoKTsKIAkgICAgICBpZiAoZHVt cF9lbmFibGVkX3AgKCkpCiAJCXsKIAkJICBkdW1wX3ByaW50Zl9sb2MgKE1TR19PUFRJTUlaRURf TE9DQVRJT05TLCBzdG10LApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuY2MgYi9nY2MvdHJlZS5jYwpp bmRleCAyYmZiNjc0ODljNi4uODQwMDBkZDhiNjkgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmNjCisr KyBiL2djYy90cmVlLmNjCkBAIC03MSw2ICs3MSw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiZ2ltcGxlLXJhbmdlLmgiCiAj aW5jbHVkZSAiZ29tcC1jb25zdGFudHMuaCIKICNpbmNsdWRlICJkZnAuaCIKKyNpbmNsdWRlICJh c2FuLmgiCisjaW5jbHVkZSAidWJzYW4uaCIKIAogLyogVHJlZSBjb2RlIGNsYXNzZXMuICAqLwog CkBAIC05NjQ5LDYgKzk2NTEsNyBAQCBidWlsZF9jb21tb25fYnVpbHRpbl9ub2RlcyAodm9pZCkK ICAgICB9CiAKICAgaWYgKCFidWlsdGluX2RlY2xfZXhwbGljaXRfcCAoQlVJTFRfSU5fVU5SRUFD SEFCTEUpCisgICAgICB8fCAhYnVpbHRpbl9kZWNsX2V4cGxpY2l0X3AgKEJVSUxUX0lOX1RSQVAp CiAgICAgICB8fCAhYnVpbHRpbl9kZWNsX2V4cGxpY2l0X3AgKEJVSUxUX0lOX0FCT1JUKSkKICAg ICB7CiAgICAgICBmdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLCB2 b2lkX2xpc3Rfbm9kZSk7CkBAIC05NjYyLDYgKzk2NjUsMTAgQEAgYnVpbGRfY29tbW9uX2J1aWx0 aW5fbm9kZXMgKHZvaWQpCiAJbG9jYWxfZGVmaW5lX2J1aWx0aW4gKCJfX2J1aWx0aW5fYWJvcnQi LCBmdHlwZSwgQlVJTFRfSU5fQUJPUlQsCiAJCQkgICAgICAiYWJvcnQiLAogCQkJICAgICAgRUNG X0xFQUYgfCBFQ0ZfTk9SRVRVUk4gfCBFQ0ZfQ09OU1QgfCBFQ0ZfQ09MRCk7CisgICAgICBpZiAo IWJ1aWx0aW5fZGVjbF9leHBsaWNpdF9wIChCVUlMVF9JTl9UUkFQKSkKKwlsb2NhbF9kZWZpbmVf YnVpbHRpbiAoIl9fYnVpbHRpbl90cmFwIiwgZnR5cGUsIEJVSUxUX0lOX1RSQVAsCisJCQkgICAg ICAiX19idWlsdGluX3RyYXAiLAorCQkJICAgICAgRUNGX05PUkVUVVJOIHwgRUNGX05PVEhST1cg fCBFQ0ZfTEVBRiB8IEVDRl9DT0xEKTsKICAgICB9CiAKICAgaWYgKCFidWlsdGluX2RlY2xfZXhw bGljaXRfcCAoQlVJTFRfSU5fTUVNQ1BZKQpAQCAtMTA3NzksNiArMTA3ODYsMzkgQEAgYnVpbGRf YWxsb2NhX2NhbGxfZXhwciAodHJlZSBzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24sIEhPU1RfV0lE RV9JTlQgbWF4X3NpemUpCiAgICAgfQogfQogCisvKiBUaGUgYnVpbHQtaW4gZGVjbCB0byB1c2Ug dG8gbWFyayBjb2RlIHBvaW50cyBiZWxpZXZlZCB0byBiZSB1bnJlYWNoYWJsZS4KKyAgIFR5cGlj YWxseSBfX2J1aWx0aW5fdW5yZWFjaGFibGUsIGJ1dCBfX2J1aWx0aW5fdHJhcCBpZgorICAgLWZz YW5pdGl6ZT11bnJlYWNoYWJsZSAtZnNhbml0aXplLXRyYXA9dW5yZWFjaGFibGUuICBJZiBvbmx5 CisgICAtZnNhbml0aXplPXVucmVhY2hhYmxlLCB3ZSByZWx5IG9uIHNhbm9wdCB0byByZXBsYWNl IGNhbGxzIHdpdGggdGhlCisgICBhcHByb3ByaWF0ZSB1YnNhbiBmdW5jdGlvbi4gIFdoZW4gYnVp bGRpbmcgYSBjYWxsIGRpcmVjdGx5LCB1c2UKKyAgIHtnaW1wbGVffSxidWlsZF9idWlsdGluX3Vu cmVhY2hhYmxlIGluc3RlYWQuICAqLworCit0cmVlCitidWlsdGluX2RlY2xfdW5yZWFjaGFibGUg KCkKK3sKKyAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBmbmNvZGUgPSBCVUlMVF9JTl9VTlJFQUNI QUJMRTsKKworICBpZiAoc2FuaXRpemVfZmxhZ3NfcCAoU0FOSVRJWkVfVU5SRUFDSEFCTEUpCisg ICAgICA/IChmbGFnX3Nhbml0aXplX3RyYXAgJiBTQU5JVElaRV9VTlJFQUNIQUJMRSkKKyAgICAg IDogZmxhZ191bnJlYWNoYWJsZV90cmFwcykKKyAgICBmbmNvZGUgPSBCVUlMVF9JTl9UUkFQOwor ICAvKiBGb3Igbm9uLXRyYXBwaW5nIHNhbml0aXplLCB3ZSB3aWxsIHJld3JpdGUgX19idWlsdGlu X3VucmVhY2hhYmxlICgpIGxhdGVyLAorICAgICBpbiB0aGUgc2Fub3B0IHBhc3MuICAqLworCisg IHJldHVybiBidWlsdGluX2RlY2xfZXhwbGljaXQgKGZuY29kZSk7Cit9CisKKy8qIEJ1aWxkIGEg Y2FsbCB0byBfX2J1aWx0aW5fdW5yZWFjaGFibGUsIHBvc3NpYmx5IHJld3JpdHRlbiBieQorICAg LWZzYW5pdGl6ZT11bnJlYWNoYWJsZS4gIFVzZSB0aGlzIHJhdGhlciB0aGFuIHRoZSBhYm92ZSB3 aGVuIHByYWN0aWNhbC4gICovCisKK3RyZWUKK2J1aWxkX2J1aWx0aW5fdW5yZWFjaGFibGUgKGxv Y2F0aW9uX3QgbG9jKQoreworICB0cmVlIGRhdGEgPSBOVUxMX1RSRUU7CisgIHRyZWUgZm4gPSBz YW5pdGl6ZV91bnJlYWNoYWJsZV9mbiAoJmRhdGEsIGxvYyk7CisgIHJldHVybiBidWlsZF9jYWxs X2V4cHJfbG9jIChsb2MsIGZuLCBkYXRhICE9IE5VTExfVFJFRSwgZGF0YSk7Cit9CisKIC8qIENy ZWF0ZSBhIG5ldyBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbCBvZiB0eXBlIEVMVFlQRVtTSVpFXSAo b3IgTEVOCiAgICBpZiBTSVpFID09IC0xKSBhbmQgcmV0dXJuIGEgdHJlZSBub2RlIHJlcHJlc2Vu dGluZyBjaGFyKiBwb2ludGVyIHRvCiAgICBpdCBhcyBhbiBBRERSX0VYUFIgKEFSUkFZX1JFRiAo RUxUWVBFLCAuLi4pKS4gIFdoZW4gU1RSIGlzIG5vbm51bGwKZGlmZiAtLWdpdCBhL2djYy91YnNh bi5jYyBiL2djYy91YnNhbi5jYwppbmRleCAzYWEyNWI1MzRiYi4uZjE1MDI2ODcyYTEgMTAwNjQ0 Ci0tLSBhL2djYy91YnNhbi5jYworKysgYi9nY2MvdWJzYW4uY2MKQEAgLTYzOCwyNyArNjM4LDQz IEBAIHVic2FuX2NyZWF0ZV9kYXRhIChjb25zdCBjaGFyICpuYW1lLCBpbnQgbG9jY250LCBjb25z dCBsb2NhdGlvbl90ICpwbG9jLCAuLi4pCiAgIHJldHVybiB2YXI7CiB9CiAKLS8qIEluc3RydW1l bnQgdGhlIF9fYnVpbHRpbl91bnJlYWNoYWJsZSBjYWxsLiAgV2UganVzdCBjYWxsIHRoZSBsaWJ1 YnNhbgotICAgcm91dGluZSBpbnN0ZWFkLiAgKi8KKy8qIFNoYXJlZCBiZXR3ZWVuICpidWlsZF9i dWlsdGluX3VucmVhY2hhYmxlLiAgKi8KKwordHJlZQorc2FuaXRpemVfdW5yZWFjaGFibGVfZm4g KHRyZWUgKmRhdGEsIGxvY2F0aW9uX3QgbG9jKQoreworICB0cmVlIGZuID0gTlVMTF9UUkVFOwor ICBib29sIHNhbiA9IHNhbml0aXplX2ZsYWdzX3AgKFNBTklUSVpFX1VOUkVBQ0hBQkxFKTsKKyAg aWYgKHNhbgorICAgICAgPyAoZmxhZ19zYW5pdGl6ZV90cmFwICYgU0FOSVRJWkVfVU5SRUFDSEFC TEUpCisgICAgICA6IGZsYWdfdW5yZWFjaGFibGVfdHJhcHMpCisgICAgeworICAgICAgZm4gPSBi dWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX1RSQVApOworICAgICAgKmRhdGEgPSBOVUxM X1RSRUU7CisgICAgfQorICBlbHNlIGlmIChzYW4pCisgICAgeworICAgICAgZm4gPSBidWlsdGlu X2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX1VCU0FOX0hBTkRMRV9CVUlMVElOX1VOUkVBQ0hBQkxF KTsKKyAgICAgICpkYXRhID0gdWJzYW5fY3JlYXRlX2RhdGEgKCJfX3Vic2FuX3VucmVhY2hhYmxl X2RhdGEiLCAxLCAmbG9jLAorCQkJCSBOVUxMX1RSRUUsIE5VTExfVFJFRSk7CisgICAgICAqZGF0 YSA9IGJ1aWxkX2ZvbGRfYWRkcl9leHByX2xvYyAobG9jLCAqZGF0YSk7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgZm4gPSBidWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX1VOUkVB Q0hBQkxFKTsKKyAgICAgICpkYXRhID0gTlVMTF9UUkVFOworICAgIH0KKyAgcmV0dXJuIGZuOwor fQorCisvKiBSZXdyaXRlIGEgZ2NhbGwgdG8gX19idWlsdGluX3VucmVhY2hhYmxlIGZvciAtZnNh bml0aXplPXVucmVhY2hhYmxlLiAgQ2FsbGVkCisgICBieSB0aGUgc2Fub3B0IHBhc3MuICAqLwog CiBib29sCiB1YnNhbl9pbnN0cnVtZW50X3VucmVhY2hhYmxlIChnaW1wbGVfc3RtdF9pdGVyYXRv ciAqZ3NpKQogewotICBnaW1wbGUgKmc7CiAgIGxvY2F0aW9uX3QgbG9jID0gZ2ltcGxlX2xvY2F0 aW9uIChnc2lfc3RtdCAoKmdzaSkpOwotCi0gIGlmIChmbGFnX3Nhbml0aXplX3RyYXAgJiBTQU5J VElaRV9VTlJFQUNIQUJMRSkKLSAgICBnID0gZ2ltcGxlX2J1aWxkX2NhbGwgKGJ1aWx0aW5fZGVj bF9leHBsaWNpdCAoQlVJTFRfSU5fVFJBUCksIDApOwotICBlbHNlCi0gICAgewotICAgICAgdHJl ZSBkYXRhID0gdWJzYW5fY3JlYXRlX2RhdGEgKCJfX3Vic2FuX3VucmVhY2hhYmxlX2RhdGEiLCAx LCAmbG9jLAotCQkJCSAgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOwotICAgICAgZGF0YSA9IGJ1 aWxkX2ZvbGRfYWRkcl9leHByX2xvYyAobG9jLCBkYXRhKTsKLSAgICAgIHRyZWUgZm4KLQk9IGJ1 aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fVUJTQU5fSEFORExFX0JVSUxUSU5fVU5SRUFD SEFCTEUpOwotICAgICAgZyA9IGdpbXBsZV9idWlsZF9jYWxsIChmbiwgMSwgZGF0YSk7Ci0gICAg fQotICBnaW1wbGVfc2V0X2xvY2F0aW9uIChnLCBsb2MpOworICBnaW1wbGUgKmcgPSBnaW1wbGVf YnVpbGRfYnVpbHRpbl91bnJlYWNoYWJsZSAobG9jKTsKICAgZ3NpX3JlcGxhY2UgKGdzaSwgZywg ZmFsc2UpOwogICByZXR1cm4gZmFsc2U7CiB9Ci0tIAoyLjI3LjAKCg== --------------IngCIjDKWmka6a3dBoKR6qBF--