From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 115387 invoked by alias); 6 Oct 2017 02:16:58 -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 113761 invoked by uid 89); 6 Oct 2017 02:16:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=firefox X-HELO: mail-wr0-f174.google.com Received: from mail-wr0-f174.google.com (HELO mail-wr0-f174.google.com) (209.85.128.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Oct 2017 02:16:54 +0000 Received: by mail-wr0-f174.google.com with SMTP id o44so10305070wrf.11 for ; Thu, 05 Oct 2017 19:16:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=vQoWqbDZDzmeKsZBE5kbKUiXLf/PKrKHhg87FmldbuM=; b=ZtNJ4ujY6kbSh6Z/66lz2Ay4BOxKLimMiapPK3em+Wt0zr6s/fXJ9XMDmH4xqb0J5f +hK2KRJR45WOUIY8MprJs2bebi2/brmD52lCGSP8HihwL9uKAn8J9ScU6qgn1L2G0/Uo hlG/kpJIZQemQuz3WC7eerwlyBfG/xATnR9Mu9bXc6zjwsBqvYK1WNcx6hBSNeet8iH9 MJhAD+NVFPdIn6edXADJv/guhdz9+zzRNdCy8qdGXRMCrUEXFscOHYTPBjWaKYVtKwFD ul7HBMVN41AZA53EoIE35L5LNz0V1iM2OyOnL8YpRn/+q+VYozMQO82wrxCqJD6cNkkX Nkyg== X-Gm-Message-State: AMCzsaX0FLt2Mw3xEGh0jzYQi0WUZJiW5N905UMzJLw96oR/YQ1UMYNA zSw2B07pwsUMVvU7DyEx+nKZujFHokm1kc6DoO63RA== X-Google-Smtp-Source: AOwi7QBDZm2SWtIzjWX5sFiz7b2D7xi/spn1Jg5zJNpFkU3+eAN71TnWTobJ4ucAC7j/6l+ztYfmGD1PeusiXyTozY4= X-Received: by 10.223.151.221 with SMTP id t29mr465347wrb.34.1507256209718; Thu, 05 Oct 2017 19:16:49 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.128.207 with HTTP; Thu, 5 Oct 2017 19:16:48 -0700 (PDT) In-Reply-To: <20170929192803.GA92290@kam.mff.cuni.cz> References: <20170519133212.GB36419@kam.mff.cuni.cz> <20170926002423.GB22198@kam.mff.cuni.cz> <20170929192803.GA92290@kam.mff.cuni.cz> From: Prathamesh Kulkarni Date: Fri, 06 Oct 2017 02:16:00 -0000 Message-ID: Subject: Re: [RFC] propagate malloc attribute in ipa-pure-const pass To: Jan Hubicka Cc: gcc Patches , Richard Biener Content-Type: multipart/mixed; boundary="94eb2c1b4244f77406055ad76e4e" X-IsSubscribed: yes X-SW-Source: 2017-10/txt/msg00313.txt.bz2 --94eb2c1b4244f77406055ad76e4e Content-Type: text/plain; charset="UTF-8" Content-length: 2708 On 29 September 2017 at 12:28, Jan Hubicka wrote: >> > I wonder what happens here when, say, ipa-icf redirect the call to eqivaelnt >> > function and removes the callee? Perhaps we realy want to have set of call >> > sites rahter than nodes stored from analysis to execution. Call sites have >> > unique stmts and uids, so it will be possible to map them back and forth. >> IIUC, call site is represented using cgraph_edge ? > > Yes, there is call_stmt pointer when gimple is read and uid in WPA mode which > are unique. There is call_summary class which lets you to associate info with > a call site. While it is not most memory effecient to store one bit of information > this way, i guess it may be easiest to use it in anticipation of it becoming > more useful in foreseeable future. We have some bits in call edge itself that > may be shuffled to the summary as well. > >> So change return_callees_map to be the mapping from node to subset of >> it's call-sites where >> node returns the value of one of it's callees: >> static hash_map< cgraph_node *, vec *> *return_callees_map; ? > > This should work too, though storing direct pointers to edges is something we > probably want to avoid to keep memory representation of edges in bounds. > > I would go with call_summary - everything else seems like bit of premature > optimization. If we will decide to optimize it later, we may invent a variant > of summary datatype for that. Hi Honza, Thanks for the detailed suggestions, I have updated the patch accordingly. I have following questions on call_summary: 1] I added field bool is_return_callee in ipa_call_summary to track whether the caller possibly returns value returned by callee, which gets rid of return_callees_map. I assume ipa_call_summary_t::remove() and ipa_call_summary_t::duplicate() will already take care of handling late insertion/removal of cgraph nodes ? I just initialized is_return_callee to false in ipa_call_summary::reset and that seems to work. I am not sure though if I have handled it correctly. Could you please check that ? 2] ipa_inline() called ipa_free_fn_summary, which made ipa_call_summaries unavailable during ipa-pure-const pass. I removed call to ipa_free_fn_summary from ipa_inline, and moved it to ipa_pure_const::execute(). Is that OK ? Patch passes bootstrap+test and lto bootstrap+test on x86_64-unknown-linux-gnu. Verfiied SPEC2k6 compiles and runs without miscompares with LTO enabled on aarch64-linux-gnu. Cross-tested on arm*-*-* and aarch64*-*-*. I will additionally test the patch by building chromium or firefox. Would it be OK to commit if it passes above validations ? Thanks, Prathamesh > > Thanks, > Honza --94eb2c1b4244f77406055ad76e4e Content-Type: text/plain; charset="US-ASCII"; name="malloc-prop-0_18.txt" Content-Disposition: attachment; filename="malloc-prop-0_18.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j8f9ewi90 Content-length: 28365 MjAxNy0xMC0wNSAgUHJhdGhhbWVzaCBLdWxrYXJuaSAgPHByYXRoYW1lc2gu a3Vsa2FybmlAbGluYXJvLm9yZz4KCgkqIGNncmFwaC5oIChzZXRfbWFsbG9j X2ZsYWcpOiBEZWNsYXJlLgoJKiBjZ3JhcGguYyAoc2V0X21hbGxvY19mbGFn XzEpOiBOZXcgZnVuY3Rpb24uCgkoc2V0X21hbGxvY19mbGFnKTogTGlrZXdp c2UuCgkqIGlwYS1mbnN1bW1hcnkuaCAoaXBhX2NhbGxfc3VtbWFyeSk6IEFk ZCBuZXcgZmllbGQgaXNfcmV0dXJuX2NhbGxlZS4KCSogaXBhLWZuc3VtbWFy eS5jIChpcGFfY2FsbF9zdW1tYXJ5OjpyZXNldCk6IFNldCBpc19yZXR1cm5f Y2FsbGVlIHRvCglmYWxzZS4KCShyZWFkX2lwYV9jYWxsX3N1bW1hcnkpOiBB ZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBpc19yZXR1cm5fY2FsbGVlLgoJKHdy aXRlX2lwYV9jYWxsX3N1bW1hcnkpOiBTdHJlYW0gaXNfcmV0dXJuX2NhbGxl ZS4KCSogaXBhLWlubGluZS5jIChpcGFfaW5saW5lKTogUmVtb3ZlIGNhbGwg dG8gaXBhX2ZyZWVfZm5fc3VtbWFyeS4KCSogaXBhLXB1cmUtY29uc3QuYzog QWRkIGhlYWRlcnMgc3NhLmgsIGFsbG9jLXBvb2wuaCwgc3ltYm9sLXN1bW1h cnkuaCwKCWlwYS1wcm9wLmgsIGlwYS1mbnN1bW1hcnkuaC4KCShtYWxsb2Nf c3RhdGVfZSk6IERlZmluZS4KCShtYWxsb2Nfc3RhdGVfbmFtZXMpOiBEZWZp bmUuCgkoZnVuY3Rfc3RhdGVfZCk6IEFkZCBmaWVsZCBtYWxsb2Nfc3RhdGUu CgkodmFyeWluZ19zdGF0ZSk6IFNldCBtYWxsb2Nfc3RhdGUgdG8gU1RBVEVf TUFMTE9DX0JPVFRPTS4KCShjaGVja19yZXR2YWxfdXNlcyk6IE5ldyBmdW5j dGlvbi4KCShtYWxsb2NfY2FuZGlkYXRlX3ApOiBMaWtld2lzZS4KCShhbmFs eXplX2Z1bmN0aW9uKTogQWRkIHN1cHBvcnQgZm9yIG1hbGxvYyBhdHRyaWJ1 dGUuCgkocHVyZV9jb25zdF93cml0ZV9zdW1tYXJ5KTogU3RyZWFtIG1hbGxv Y19zdGF0ZS4KCShwdXJlX2NvbnN0X3JlYWRfc3VtbWFyeSk6IEFkZCBzdXBw b3J0IGZvciByZWFkaW5nIG1hbGxvY19zdGF0ZS4KCShkdW1wX21hbGxvY19s YXR0aWNlKTogTmV3IGZ1bmN0aW9uLgoJKHByb3BhZ2F0ZV9tYWxsb2MpOiBO ZXcgZnVuY3Rpb24uCgkoaXBhX3B1cmVfY29uc3Q6OmV4ZWN1dGUpOiBDYWxs IHByb3BhZ2F0ZV9tYWxsb2MgYW5kCglpcGFfZnJlZV9mbl9zdW1tYXJ5LgoJ KHBhc3NfbG9jYWxfcHVyZV9jb25zdDo6ZXhlY3V0ZSk6IEFkZCBzdXBwb3J0 IGZvciBtYWxsb2MgYXR0cmlidXRlLgoJKiBzc2EtaXRlcmF0b3JzLmggKFJF VFVSTl9GUk9NX0lNTV9VU0VfU1RNVCk6IE5ldyBtYWNyby4KCnRlc3RzdWl0 ZS8KCSogZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTEuYzogTmV3IHRlc3QtY2Fz ZS4KCSogZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTIuYzogTGlrZXdpc2UuCgkq IGdjYy5kZy9pcGEvcHJvcG1hbGxvYy0zLmM6IExpa2V3aXNlLgoKZGlmZiAt LWdpdCBhL2djYy9jZ3JhcGguYyBiL2djYy9jZ3JhcGguYwppbmRleCAzZDBj ZWZiZDQ2Yi4uMGFhZDkwZDU5ZWEgMTAwNjQ0Ci0tLSBhL2djYy9jZ3JhcGgu YworKysgYi9nY2MvY2dyYXBoLmMKQEAgLTI1MzAsNiArMjUzMCw1MyBAQCBj Z3JhcGhfbm9kZTo6c2V0X25vdGhyb3dfZmxhZyAoYm9vbCBub3Rocm93KQog ICByZXR1cm4gY2hhbmdlZDsKIH0KIAorLyogV29ya2VyIHRvIHNldCBtYWxs b2MgZmxhZy4gICovCitzdGF0aWMgdm9pZAorc2V0X21hbGxvY19mbGFnXzEg KGNncmFwaF9ub2RlICpub2RlLCBib29sIG1hbGxvY19wLCBib29sICpjaGFu Z2VkKQoreworICBpZiAobWFsbG9jX3AgJiYgIURFQ0xfSVNfTUFMTE9DIChu b2RlLT5kZWNsKSkKKyAgICB7CisgICAgICBERUNMX0lTX01BTExPQyAobm9k ZS0+ZGVjbCkgPSB0cnVlOworICAgICAgKmNoYW5nZWQgPSB0cnVlOworICAg IH0KKworICBpcGFfcmVmICpyZWY7CisgIEZPUl9FQUNIX0FMSUFTIChub2Rl LCByZWYpCisgICAgeworICAgICAgY2dyYXBoX25vZGUgKmFsaWFzID0gZHlu X2Nhc3Q8Y2dyYXBoX25vZGUgKj4gKHJlZi0+cmVmZXJyaW5nKTsKKyAgICAg IGlmICghbWFsbG9jX3AgfHwgYWxpYXMtPmdldF9hdmFpbGFiaWxpdHkgKCkg PiBBVkFJTF9JTlRFUlBPU0FCTEUpCisJc2V0X21hbGxvY19mbGFnXzEgKGFs aWFzLCBtYWxsb2NfcCwgY2hhbmdlZCk7CisgICAgfQorCisgIGZvciAoY2dy YXBoX2VkZ2UgKmUgPSBub2RlLT5jYWxsZXJzOyBlOyBlID0gZS0+bmV4dF9j YWxsZXIpCisgICAgaWYgKGUtPmNhbGxlci0+dGh1bmsudGh1bmtfcAorCSYm ICghbWFsbG9jX3AgfHwgZS0+Y2FsbGVyLT5nZXRfYXZhaWxhYmlsaXR5ICgp ID4gQVZBSUxfSU5URVJQT1NBQkxFKSkKKyAgICAgIHNldF9tYWxsb2NfZmxh Z18xIChlLT5jYWxsZXIsIG1hbGxvY19wLCBjaGFuZ2VkKTsKK30KKworLyog U2V0IERFQ0xfSVNfTUFMTE9DIG9uIE5PREUncyBkZWNsIGFuZCBvbiBOT0RF J3MgYWxpYXNlcyBpZiBhbnkuICAqLworCitib29sCitjZ3JhcGhfbm9kZTo6 c2V0X21hbGxvY19mbGFnIChib29sIG1hbGxvY19wKQoreworICBib29sIGNo YW5nZWQgPSBmYWxzZTsKKworICBpZiAoIW1hbGxvY19wIHx8IGdldF9hdmFp bGFiaWxpdHkgKCkgPiBBVkFJTF9JTlRFUlBPU0FCTEUpCisgICAgc2V0X21h bGxvY19mbGFnXzEgKHRoaXMsIG1hbGxvY19wLCAmY2hhbmdlZCk7CisgIGVs c2UKKyAgICB7CisgICAgICBpcGFfcmVmICpyZWY7CisKKyAgICAgIEZPUl9F QUNIX0FMSUFTICh0aGlzLCByZWYpCisJeworCSAgY2dyYXBoX25vZGUgKmFs aWFzID0gZHluX2Nhc3Q8Y2dyYXBoX25vZGUgKj4gKHJlZi0+cmVmZXJyaW5n KTsKKwkgIGlmICghbWFsbG9jX3AgfHwgYWxpYXMtPmdldF9hdmFpbGFiaWxp dHkgKCkgPiBBVkFJTF9JTlRFUlBPU0FCTEUpCisJICAgIHNldF9tYWxsb2Nf ZmxhZ18xIChhbGlhcywgbWFsbG9jX3AsICZjaGFuZ2VkKTsKKwl9CisgICAg fQorICByZXR1cm4gY2hhbmdlZDsKK30KKwogLyogV29ya2VyIHRvIHNldF9j b25zdF9mbGFnLiAgKi8KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2dj Yy9jZ3JhcGguaCBiL2djYy9jZ3JhcGguaAppbmRleCAxNzU4ZThiMDhjMS4u ODQ4MjRlOWY4MTQgMTAwNjQ0Ci0tLSBhL2djYy9jZ3JhcGguaAorKysgYi9n Y2MvY2dyYXBoLmgKQEAgLTExNTEsNiArMTE1MSwxMCBAQCBwdWJsaWM6CiAg ICAgIGlmIGFueSB0byBOT1RIUk9XLiAgKi8KICAgYm9vbCBzZXRfbm90aHJv d19mbGFnIChib29sIG5vdGhyb3cpOwogCisgIC8qIFNFVCBERUNMX0lTX01B TExPQyBvbiBjZ3JhcGhfbm9kZSdzIGRlY2wgYW5kIG9uIGFsaWFzZXMgb2Yg dGhlIG5vZGUKKyAgICAgaWYgYW55LiAgKi8KKyAgYm9vbCBzZXRfbWFsbG9j X2ZsYWcgKGJvb2wgbWFsbG9jX3ApOworCiAgIC8qIElmIFNFVF9DT05TVCBp cyB0cnVlLCBtYXJrIGZ1bmN0aW9uLCBhbGlhc2VzIGFuZCB0aHVua3MgdG8g YmUgRUNGX0NPTlNULgogICAgIElmIFNFVF9DT05TVCBpZiBmYWxzZSwgY2xl YXIgdGhlIGZsYWcuCiAKZGlmZiAtLWdpdCBhL2djYy9pcGEtZm5zdW1tYXJ5 LmMgYi9nY2MvaXBhLWZuc3VtbWFyeS5jCmluZGV4IDA3NmNjZDQwYmQ3Li4w NTUzNDVjMmNkZiAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1mbnN1bW1hcnkuYwor KysgYi9nY2MvaXBhLWZuc3VtbWFyeS5jCkBAIC01NDIsNiArNTQyLDcgQEAg dm9pZAogaXBhX2NhbGxfc3VtbWFyeTo6cmVzZXQgKCkKIHsKICAgY2FsbF9z dG10X3NpemUgPSBjYWxsX3N0bXRfdGltZSA9IDA7CisgIGlzX3JldHVybl9j YWxsZWUgPSBmYWxzZTsKICAgaWYgKHByZWRpY2F0ZSkKICAgICBlZGdlX3By ZWRpY2F0ZV9wb29sLnJlbW92ZSAocHJlZGljYXRlKTsKICAgcHJlZGljYXRl ID0gTlVMTDsKQEAgLTMyMDQsNiArMzIwNSwxMCBAQCByZWFkX2lwYV9jYWxs X3N1bW1hcnkgKHN0cnVjdCBsdG9faW5wdXRfYmxvY2sgKmliLCBzdHJ1Y3Qg Y2dyYXBoX2VkZ2UgKmUpCiAgIGVzLT5jYWxsX3N0bXRfc2l6ZSA9IHN0cmVh bWVyX3JlYWRfdWh3aSAoaWIpOwogICBlcy0+Y2FsbF9zdG10X3RpbWUgPSBz dHJlYW1lcl9yZWFkX3Vod2kgKGliKTsKICAgZXMtPmxvb3BfZGVwdGggPSBz dHJlYW1lcl9yZWFkX3Vod2kgKGliKTsKKworICBiaXRwYWNrX2QgYnAgPSBz dHJlYW1lcl9yZWFkX2JpdHBhY2sgKGliKTsKKyAgZXMtPmlzX3JldHVybl9j YWxsZWUgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CisKICAgcC5zdHJl YW1faW4gKGliKTsKICAgZWRnZV9zZXRfcHJlZGljYXRlIChlLCAmcCk7CiAg IGxlbmd0aCA9IHN0cmVhbWVyX3JlYWRfdWh3aSAoaWIpOwpAQCAtMzM2MCw2 ICszMzY1LDExIEBAIHdyaXRlX2lwYV9jYWxsX3N1bW1hcnkgKHN0cnVjdCBv dXRwdXRfYmxvY2sgKm9iLCBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmUpCiAgIHN0 cmVhbWVyX3dyaXRlX3Vod2kgKG9iLCBlcy0+Y2FsbF9zdG10X3NpemUpOwog ICBzdHJlYW1lcl93cml0ZV91aHdpIChvYiwgZXMtPmNhbGxfc3RtdF90aW1l KTsKICAgc3RyZWFtZXJfd3JpdGVfdWh3aSAob2IsIGVzLT5sb29wX2RlcHRo KTsKKworICBiaXRwYWNrX2QgYnAgPSBiaXRwYWNrX2NyZWF0ZSAob2ItPm1h aW5fc3RyZWFtKTsKKyAgYnBfcGFja192YWx1ZSAoJmJwLCBlcy0+aXNfcmV0 dXJuX2NhbGxlZSwgMSk7CisgIHN0cmVhbWVyX3dyaXRlX2JpdHBhY2sgKCZi cCk7CisKICAgaWYgKGVzLT5wcmVkaWNhdGUpCiAgICAgZXMtPnByZWRpY2F0 ZS0+c3RyZWFtX291dCAob2IpOwogICBlbHNlCmRpZmYgLS1naXQgYS9nY2Mv aXBhLWZuc3VtbWFyeS5oIGIvZ2NjL2lwYS1mbnN1bW1hcnkuaAppbmRleCBm NTBkNjgwNmU2MS4uNjEzYTJiNmY2MjUgMTAwNjQ0Ci0tLSBhL2djYy9pcGEt Zm5zdW1tYXJ5LmgKKysrIGIvZ2NjL2lwYS1mbnN1bW1hcnkuaApAQCAtMTk3 LDcgKzE5Nyw5IEBAIHN0cnVjdCBpcGFfY2FsbF9zdW1tYXJ5CiAgIGludCBj YWxsX3N0bXRfdGltZTsKICAgLyogRGVwdGggb2YgbG9vcCBuZXN0LCAwIG1l YW5zIG5vIG5lc3RpbmcuICAqLwogICB1bnNpZ25lZCBpbnQgbG9vcF9kZXB0 aDsKLSAgCisgIC8qIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjYWxsZXIgcmV0 dXJucyB0aGUgdmFsdWUgb2YgaXQncyBjYWxsZWUuICAqLworICBib29sIGlz X3JldHVybl9jYWxsZWU7CisKICAgLyogS2VlcCBhbGwgZmllbGQgZW1wdHkg c28gc3VtbWFyeSBkdW1waW5nIHdvcmtzIGR1cmluZyBpdHMgY29tcHV0YXRp b24uCiAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICAqLwog ICBpcGFfY2FsbF9zdW1tYXJ5ICgpCmRpZmYgLS1naXQgYS9nY2MvaXBhLWlu bGluZS5jIGIvZ2NjL2lwYS1pbmxpbmUuYwppbmRleCBkZDQ2Y2I2MTM2Mi4u YjhlNjVlMmZhN2UgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtaW5saW5lLmMKKysr IGIvZ2NjL2lwYS1pbmxpbmUuYwpAQCAtMjUyNiw5ICsyNTI2LDYgQEAgaXBh X2lubGluZSAodm9pZCkKIAogICBpZiAoZHVtcF9maWxlKQogICAgIGlwYV9k dW1wX2ZuX3N1bW1hcmllcyAoZHVtcF9maWxlKTsKLSAgLyogSW4gV1BBIHdl IHVzZSBpbmxpbmUgc3VtbWFyaWVzIGZvciBwYXJ0aXRpb25pbmcgcHJvY2Vz cy4gICovCi0gIGlmICghZmxhZ193cGEpCi0gICAgaXBhX2ZyZWVfZm5fc3Vt bWFyeSAoKTsKICAgcmV0dXJuIHJlbW92ZV9mdW5jdGlvbnMgPyBUT0RPX3Jl bW92ZV9mdW5jdGlvbnMgOiAwOwogfQogCmRpZmYgLS1naXQgYS9nY2MvaXBh LXB1cmUtY29uc3QuYyBiL2djYy9pcGEtcHVyZS1jb25zdC5jCmluZGV4IGRh YzhmMGQ1ZjIxLi5hY2ExZjg2YmY1YiAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1w dXJlLWNvbnN0LmMKKysrIGIvZ2NjL2lwYS1wdXJlLWNvbnN0LmMKQEAgLTU2 LDYgKzU2LDExIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1zY2FsYXItZXZv bHV0aW9uLmgiCiAjaW5jbHVkZSAiaW50bC5oIgogI2luY2x1ZGUgIm9wdHMu aCIKKyNpbmNsdWRlICJzc2EuaCIKKyNpbmNsdWRlICJhbGxvYy1wb29sLmgi CisjaW5jbHVkZSAic3ltYm9sLXN1bW1hcnkuaCIKKyNpbmNsdWRlICJpcGEt cHJvcC5oIgorI2luY2x1ZGUgImlwYS1mbnN1bW1hcnkuaCIKIAogLyogTGF0 dGljZSB2YWx1ZXMgZm9yIGNvbnN0IGFuZCBwdXJlIGZ1bmN0aW9ucy4gIEV2 ZXJ5dGhpbmcgc3RhcnRzIG91dAogICAgYmVpbmcgY29uc3QsIHRoZW4gbWF5 IGRyb3AgdG8gcHVyZSBhbmQgdGhlbiBuZWl0aGVyIGRlcGVuZGluZyBvbgpA QCAtNjksNiArNzQsMTUgQEAgZW51bSBwdXJlX2NvbnN0X3N0YXRlX2UKIAog Y29uc3QgY2hhciAqcHVyZV9jb25zdF9uYW1lc1szXSA9IHsiY29uc3QiLCAi cHVyZSIsICJuZWl0aGVyIn07CiAKK2VudW0gbWFsbG9jX3N0YXRlX2UKK3sK KyAgU1RBVEVfTUFMTE9DX1RPUCwKKyAgU1RBVEVfTUFMTE9DLAorICBTVEFU RV9NQUxMT0NfQk9UVE9NCit9OworCitjb25zdCBjaGFyICptYWxsb2Nfc3Rh dGVfbmFtZXNbXSA9IHsibWFsbG9jX3RvcCIsICJtYWxsb2MiLCAibWFsbG9j X2JvdHRvbSJ9OworCiAvKiBIb2xkZXIgZm9yIHRoZSBjb25zdF9zdGF0ZS4g IFRoZXJlIGlzIG9uZSBvZiB0aGVzZSBwZXIgZnVuY3Rpb24KICAgIGRlY2wu ICAqLwogc3RydWN0IGZ1bmN0X3N0YXRlX2QKQEAgLTkyLDExICsxMDYsMTMg QEAgc3RydWN0IGZ1bmN0X3N0YXRlX2QKICAgLyogSWYgZnVuY3Rpb24gY2Fu IGNhbGwgZnJlZSwgbXVubWFwIG9yIG90aGVyd2lzZSBtYWtlIHByZXZpb3Vz bHkKICAgICAgbm9uLXRyYXBwaW5nIG1lbW9yeSBhY2Nlc3NlcyB0cmFwcGlu Zy4gICovCiAgIGJvb2wgY2FuX2ZyZWU7CisKKyAgZW51bSBtYWxsb2Nfc3Rh dGVfZSBtYWxsb2Nfc3RhdGU7CiB9OwogCiAvKiBTdGF0ZSB1c2VkIHdoZW4g d2Uga25vdyBub3RoaW5nIGFib3V0IGZ1bmN0aW9uLiAgKi8KIHN0YXRpYyBz dHJ1Y3QgZnVuY3Rfc3RhdGVfZCB2YXJ5aW5nX3N0YXRlCi0gICA9IHsgSVBB X05FSVRIRVIsIElQQV9ORUlUSEVSLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVl IH07CisgICA9IHsgSVBBX05FSVRIRVIsIElQQV9ORUlUSEVSLCB0cnVlLCB0 cnVlLCB0cnVlLCB0cnVlLCBTVEFURV9NQUxMT0NfQk9UVE9NIH07CiAKIAog dHlwZWRlZiBzdHJ1Y3QgZnVuY3Rfc3RhdGVfZCAqIGZ1bmN0X3N0YXRlOwpA QCAtODEyLDYgKzgyOCwxNDkgQEAgY2hlY2tfc3RtdCAoZ2ltcGxlX3N0bXRf aXRlcmF0b3IgKmdzaXAsIGZ1bmN0X3N0YXRlIGxvY2FsLCBib29sIGlwYSkK ICAgICB9CiB9CiAKKy8qIENoZWNrIHRoYXQgUkVUVkFMIGlzIHVzZWQgb25s eSBpbiBTVE1UIGFuZCBpbiBjb21wYXJpc29ucyBhZ2FpbnN0IDAuCisgICBS RVRWQUwgaXMgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBhbmQgU1RN VCBpcyByZXR1cm4gc3RtdC4gICovCisKK3N0YXRpYyBib29sCitjaGVja19y ZXR2YWxfdXNlcyAodHJlZSByZXR2YWwsIGdpbXBsZSAqc3RtdCkKK3sKKyAg aW1tX3VzZV9pdGVyYXRvciB1c2VfaXRlcjsKKyAgZ2ltcGxlICp1c2Vfc3Rt dDsKKworICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgKHVzZV9zdG10LCB1c2Vf aXRlciwgcmV0dmFsKQorICAgIGlmIChnY29uZCAqY29uZCA9IGR5bl9jYXN0 PGdjb25kICo+ICh1c2Vfc3RtdCkpCisgICAgICB7CisJdHJlZSBvcDIgPSBn aW1wbGVfY29uZF9yaHMgKGNvbmQpOworCWlmICghaW50ZWdlcl96ZXJvcCAo b3AyKSkKKwkgIFJFVFVSTl9GUk9NX0lNTV9VU0VfU1RNVCAodXNlX2l0ZXIs IGZhbHNlKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChnYXNzaWduICpnYSA9 IGR5bl9jYXN0PGdhc3NpZ24gKj4gKHVzZV9zdG10KSkKKyAgICAgIHsKKwll bnVtIHRyZWVfY29kZSBjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAo Z2EpOworCWlmIChUUkVFX0NPREVfQ0xBU1MgKGNvZGUpICE9IHRjY19jb21w YXJpc29uKQorCSAgUkVUVVJOX0ZST01fSU1NX1VTRV9TVE1UICh1c2VfaXRl ciwgZmFsc2UpOworCWlmICghaW50ZWdlcl96ZXJvcCAoZ2ltcGxlX2Fzc2ln bl9yaHMyIChnYSkpKQorCSAgUkVUVVJOX0ZST01fSU1NX1VTRV9TVE1UICh1 c2VfaXRlciwgZmFsc2UpOworICAgICAgfQorICAgIGVsc2UgaWYgKGlzX2dp bXBsZV9kZWJ1ZyAodXNlX3N0bXQpKQorICAgICAgOworICAgIGVsc2UgaWYg KHVzZV9zdG10ICE9IHN0bXQpCisgICAgICBSRVRVUk5fRlJPTV9JTU1fVVNF X1NUTVQgKHVzZV9pdGVyLCBmYWxzZSk7CisKKyAgcmV0dXJuIHRydWU7Cit9 CisKKy8qIG1hbGxvY19jYW5kaWRhdGVfcCgpIGNoZWNrcyBpZiBGVU4gY2Fu IHBvc3NpYmx5IGJlIGFubm90YXRlZCB3aXRoIG1hbGxvYworICAgYXR0cmli dXRlLiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBkb2VzIGEgdmVyeSBjb25z ZXJ2YXRpdmUgYW5hbHlzaXMuCisgICBGVU4gaXMgY29uc2lkZXJlZCB0byBi ZSBhIGNhbmRpZGF0ZSBpZgorICAgMSkgSXQgcmV0dXJucyBhIHZhbHVlIG9m IHBvaW50ZXIgdHlwZS4KKyAgIDIpIFNTQV9OQU1FX0RFRl9TVE1UIChyZXR1 cm5fdmFsdWUpIGlzIGVpdGhlciBhIGZ1bmN0aW9uIGNhbGwgb3IKKyAgICAg IGEgcGhpLCBhbmQgZWxlbWVudCBvZiBwaGkgaXMgZWl0aGVyIE5VTEwgb3IK KyAgICAgIFNTQV9OQU1FX0RFRl9TVE1UKGVsZW1lbnQpIGlzIGZ1bmN0aW9u IGNhbGwuCisgICAzKSBUaGUgcmV0dXJuLXZhbHVlIGhhcyBpbW1lZGlhdGUg dXNlcyBvbmx5IHdpdGhpbiBjb21wYXJpc29ucyAoZ2NvbmQgb3IgZ2Fzc2ln bikKKyAgICAgIGFuZCByZXR1cm5fc3RtdCAoYW5kIGxpa2V3aXNlIGEgcGhp IGFyZyBoYXMgaW1tZWRpYXRlIHVzZSBvbmx5IHdpdGhpbiBjb21wYXJpc29u CisgICAgICBvciB0aGUgcGhpIHN0bXQpLiAgKi8KKworc3RhdGljIGJvb2wK K21hbGxvY19jYW5kaWRhdGVfcCAoZnVuY3Rpb24gKmZ1biwgYm9vbCBpcGEp Cit7CisgIGJhc2ljX2Jsb2NrIGV4aXRfYmxvY2sgPSBFWElUX0JMT0NLX1BU Ul9GT1JfRk4gKGZ1bik7CisgIGVkZ2UgZTsKKyAgZWRnZV9pdGVyYXRvciBl aTsKKyAgY2dyYXBoX25vZGUgKm5vZGUgPSBjZ3JhcGhfbm9kZTo6Z2V0X2Ny ZWF0ZSAoZnVuLT5kZWNsKTsKKworI2RlZmluZSBEVU1QX0FORF9SRVRVUk4o cmVhc29uKSAgXAoreyAgXAorICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2Zs YWdzICYgVERGX0RFVEFJTFMpKSAgXAorICAgIGZwcmludGYgKGR1bXBfZmls ZSwgIiVzIiwgKHJlYXNvbikpOyAgXAorICByZXR1cm4gZmFsc2U7ICBcCit9 CisKKyAgaWYgKEVER0VfQ09VTlQgKGV4aXRfYmxvY2stPnByZWRzKSA9PSAw KQorICAgIHJldHVybiBmYWxzZTsKKworICBGT1JfRUFDSF9FREdFIChlLCBl aSwgZXhpdF9ibG9jay0+cHJlZHMpCisgICAgeworICAgICAgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgZ3NpID0gZ3NpX2xhc3RfYmIgKGUtPnNyYyk7CisgICAg ICBncmV0dXJuICpyZXRfc3RtdCA9IGR5bl9jYXN0PGdyZXR1cm4gKj4gKGdz aV9zdG10IChnc2kpKTsKKworICAgICAgaWYgKCFyZXRfc3RtdCkKKwlyZXR1 cm4gZmFsc2U7CisKKyAgICAgIHRyZWUgcmV0dmFsID0gZ2ltcGxlX3JldHVy bl9yZXR2YWwgKHJldF9zdG10KTsKKyAgICAgIGlmICghcmV0dmFsKQorCURV TVBfQU5EX1JFVFVSTigiTm8gcmV0dXJuIHZhbHVlLiIpCisKKyAgICAgIGlm IChUUkVFX0NPREUgKHJldHZhbCkgIT0gU1NBX05BTUUKKwkgIHx8IFRSRUVf Q09ERSAoVFJFRV9UWVBFIChyZXR2YWwpKSAhPSBQT0lOVEVSX1RZUEUpCisJ RFVNUF9BTkRfUkVUVVJOKCJSZXR1cm4gdmFsdWUgaXMgbm90IFNTQV9OQU1F IG9yIG5vdCBhIHBvaW50ZXIgdHlwZS4iKQorCisgICAgICBpZiAoIWNoZWNr X3JldHZhbF91c2VzIChyZXR2YWwsIHJldF9zdG10KSkKKwlEVU1QX0FORF9S RVRVUk4oIlJldHVybiB2YWx1ZSBoYXMgdXNlcyBvdXRzaWRlIHJldHVybiBz dG10IgorCQkJIiBhbmQgY29tcGFyaXNvbnMgYWdhaW5zdCAwLiIpCisKKyAg ICAgIGdpbXBsZSAqZGVmID0gU1NBX05BTUVfREVGX1NUTVQgKHJldHZhbCk7 CisgICAgICBpZiAoZ2NhbGwgKmNhbGxfc3RtdCA9IGR5bl9jYXN0PGdjYWxs ICo+IChkZWYpKQorCXsKKwkgIHRyZWUgY2FsbGVlX2RlY2wgPSBnaW1wbGVf Y2FsbF9mbmRlY2wgKGNhbGxfc3RtdCk7CisJICBpZiAoIWNhbGxlZV9kZWNs KQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIGlmICghaXBhICYmICFERUNM X0lTX01BTExPQyAoY2FsbGVlX2RlY2wpKQorCSAgICBEVU1QX0FORF9SRVRV Uk4oImNhbGxlZV9kZWNsIGRvZXMgbm90IGhhdmUgbWFsbG9jIGF0dHJpYnV0 ZSBmb3IiCisJCQkgICAgIiBub24taXBhIG1vZGUuIikKKworCSAgY2dyYXBo X2VkZ2UgKmNzID0gbm9kZS0+Z2V0X2VkZ2UgKGNhbGxfc3RtdCk7CisJICBp ZiAoY3MpCisJICAgIHsKKwkgICAgICBpcGFfY2FsbF9zdW1tYXJ5ICplcyA9 IGlwYV9jYWxsX3N1bW1hcmllcy0+Z2V0IChjcyk7CisJICAgICAgZ2NjX2Fz c2VydCAoZXMpOworCSAgICAgIGVzLT5pc19yZXR1cm5fY2FsbGVlID0gdHJ1 ZTsKKwkgICAgfQorCX0KKworICAgICAgZWxzZSBpZiAoZ3BoaSAqcGhpID0g ZHluX2Nhc3Q8Z3BoaSAqPiAoZGVmKSkKKwlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgKytpKQorCSAgewor CSAgICB0cmVlIGFyZyA9IGdpbXBsZV9waGlfYXJnX2RlZiAocGhpLCBpKTsK KwkgICAgaWYgKFRSRUVfQ09ERSAoYXJnKSAhPSBTU0FfTkFNRSkKKwkgICAg ICBEVU1QX0FORF9SRVRVUk4oInBoaSBhcmcgaXMgbm90IFNTQV9OQU1FLiIp CisJICAgIGlmICghKGFyZyA9PSBudWxsX3BvaW50ZXJfbm9kZSB8fCBjaGVj a19yZXR2YWxfdXNlcyAoYXJnLCBwaGkpKSkKKwkgICAgICBEVU1QX0FORF9S RVRVUk4oInBoaSBhcmcgaGFzIHVzZXMgb3V0c2lkZSBwaGkiCisJCQkgICAg ICAiIGFuZCBjb21wYXJpc29ucyBhZ2FpbnN0IDAuIikKKworCSAgICBnaW1w bGUgKmFyZ19kZWYgPSBTU0FfTkFNRV9ERUZfU1RNVCAoYXJnKTsKKwkgICAg Z2NhbGwgKmNhbGxfc3RtdCA9IGR5bl9jYXN0PGdjYWxsICo+IChhcmdfZGVm KTsKKwkgICAgaWYgKCFjYWxsX3N0bXQpCisJICAgICAgcmV0dXJuIGZhbHNl OworCSAgICB0cmVlIGNhbGxlZV9kZWNsID0gZ2ltcGxlX2NhbGxfZm5kZWNs IChjYWxsX3N0bXQpOworCSAgICBpZiAoIWNhbGxlZV9kZWNsKQorCSAgICAg IHJldHVybiBmYWxzZTsKKwkgICAgaWYgKCFpcGEgJiYgIURFQ0xfSVNfTUFM TE9DIChjYWxsZWVfZGVjbCkpCisJICAgICAgRFVNUF9BTkRfUkVUVVJOKCJj YWxsZWVfZGVjbCBkb2VzIG5vdCBoYXZlIG1hbGxvYyBhdHRyaWJ1dGUgZm9y IgorCQkJICAgICAgIiBub24taXBhIG1vZGUuIikKKworCSAgICBjZ3JhcGhf ZWRnZSAqY3MgPSBub2RlLT5nZXRfZWRnZSAoY2FsbF9zdG10KTsKKwkgICAg aWYgKGNzKQorCSAgICAgIHsKKwkJaXBhX2NhbGxfc3VtbWFyeSAqZXMgPSBp cGFfY2FsbF9zdW1tYXJpZXMtPmdldCAoY3MpOworCQlnY2NfYXNzZXJ0IChl cyk7CisJCWVzLT5pc19yZXR1cm5fY2FsbGVlID0gdHJ1ZTsKKwkgICAgICB9 CisJICB9CisKKyAgICAgIGVsc2UKKwlEVU1QX0FORF9SRVRVUk4oImRlZl9z dG10IG9mIHJldHVybiB2YWx1ZSBpcyBub3QgYSBjYWxsIG9yIHBoaS1zdG10 LiIpCisgICAgfQorCisgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3Mg JiBUREZfREVUQUlMUykpCisgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG5G b3VuZCAlcyB0byBiZSBjYW5kaWRhdGUgZm9yIG1hbGxvYyBhdHRyaWJ1dGVc biIsCisJICAgICBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZnVu LT5kZWNsKSkpOworICByZXR1cm4gdHJ1ZTsKKworI3VuZGVmIERVTVBfQU5E X1JFVFVSTgorfQorCiAKIC8qIFRoaXMgaXMgdGhlIG1haW4gcm91dGluZSBm b3IgZmluZGluZyB0aGUgcmVmZXJlbmNlIHBhdHRlcm5zIGZvcgogICAgZ2xv YmFsIHZhcmlhYmxlcyB3aXRoaW4gYSBmdW5jdGlvbiBGTi4gICovCkBAIC05 MjEsNiArMTA4MCwxNCBAQCBlbmQ6CiAgIGlmIChUUkVFX05PVEhST1cgKGRl Y2wpKQogICAgIGwtPmNhbl90aHJvdyA9IGZhbHNlOwogCisgIGwtPm1hbGxv Y19zdGF0ZSA9IFNUQVRFX01BTExPQ19CT1RUT007CisgIGlmIChERUNMX0lT X01BTExPQyAoZGVjbCkpCisgICAgbC0+bWFsbG9jX3N0YXRlID0gU1RBVEVf TUFMTE9DOworICBlbHNlIGlmIChpcGEgJiYgbWFsbG9jX2NhbmRpZGF0ZV9w IChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCksIHRydWUpKQorICAgIGwt Pm1hbGxvY19zdGF0ZSA9IFNUQVRFX01BTExPQ19UT1A7CisgIGVsc2UgaWYg KG1hbGxvY19jYW5kaWRhdGVfcCAoREVDTF9TVFJVQ1RfRlVOQ1RJT04gKGRl Y2wpLCBmYWxzZSkpCisgICAgbC0+bWFsbG9jX3N0YXRlID0gU1RBVEVfTUFM TE9DOworCiAgIHBvcF9jZnVuICgpOwogICBpZiAoZHVtcF9maWxlKQogICAg IHsKQEAgLTkzNCw2ICsxMTAxLDggQEAgZW5kOgogICAgICAgICBmcHJpbnRm IChkdW1wX2ZpbGUsICJGdW5jdGlvbiBpcyBsb2NhbGx5IHB1cmUuXG4iKTsK ICAgICAgIGlmIChsLT5jYW5fZnJlZSkKIAlmcHJpbnRmIChkdW1wX2ZpbGUs ICJGdW5jdGlvbiBjYW4gbG9jYWxseSBmcmVlLlxuIik7CisgICAgICBpZiAo bC0+bWFsbG9jX3N0YXRlID09IFNUQVRFX01BTExPQykKKwlmcHJpbnRmIChk dW1wX2ZpbGUsICJGdW5jdGlvbiBpcyBsb2NhbGx5IG1hbGxvYy5cbiIpOwog ICAgIH0KICAgcmV0dXJuIGw7CiB9CkBAIC0xMDY3LDYgKzEyMzYsNyBAQCBw dXJlX2NvbnN0X3dyaXRlX3N1bW1hcnkgKHZvaWQpCiAJICBicF9wYWNrX3Zh bHVlICgmYnAsIGZzLT5sb29waW5nLCAxKTsKIAkgIGJwX3BhY2tfdmFsdWUg KCZicCwgZnMtPmNhbl90aHJvdywgMSk7CiAJICBicF9wYWNrX3ZhbHVlICgm YnAsIGZzLT5jYW5fZnJlZSwgMSk7CisJICBicF9wYWNrX3ZhbHVlICgmYnAs IGZzLT5tYWxsb2Nfc3RhdGUsIDIpOwogCSAgc3RyZWFtZXJfd3JpdGVfYml0 cGFjayAoJmJwKTsKIAl9CiAgICAgfQpAQCAtMTEyNyw2ICsxMjk3LDkgQEAg cHVyZV9jb25zdF9yZWFkX3N1bW1hcnkgKHZvaWQpCiAJICAgICAgZnMtPmxv b3BpbmcgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CiAJICAgICAgZnMt PmNhbl90aHJvdyA9IGJwX3VucGFja192YWx1ZSAoJmJwLCAxKTsKIAkgICAg ICBmcy0+Y2FuX2ZyZWUgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CisJ ICAgICAgZnMtPm1hbGxvY19zdGF0ZQorCQkJPSAoZW51bSBtYWxsb2Nfc3Rh dGVfZSkgYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDIpOworCiAJICAgICAgaWYg KGR1bXBfZmlsZSkKIAkJewogCQkgIGludCBmbGFncyA9IGZsYWdzX2Zyb21f ZGVjbF9vcl90eXBlIChub2RlLT5kZWNsKTsKQEAgLTExNDksNiArMTMyMiw4 IEBAIHB1cmVfY29uc3RfcmVhZF9zdW1tYXJ5ICh2b2lkKQogCQkgICAgZnBy aW50ZiAoZHVtcF9maWxlLCIgIGZ1bmN0aW9uIGlzIGxvY2FsbHkgdGhyb3dp bmdcbiIpOwogCQkgIGlmIChmcy0+Y2FuX2ZyZWUpCiAJCSAgICBmcHJpbnRm IChkdW1wX2ZpbGUsIiAgZnVuY3Rpb24gY2FuIGxvY2FsbHkgZnJlZVxuIik7 CisJCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4gbWFsbG9jIHN0YXRlOiAl c1xuIiwKKwkJCSAgIG1hbGxvY19zdGF0ZV9uYW1lc1tmcy0+bWFsbG9jX3N0 YXRlXSk7CiAJCX0KIAkgICAgfQogCkBAIC0xNjU5LDYgKzE4MzQsMTI3IEBA IHByb3BhZ2F0ZV9ub3Rocm93ICh2b2lkKQogICBmcmVlIChvcmRlcik7CiB9 CiAKKy8qIERlYnVnZ2luZyBmdW5jdGlvbiB0byBkdW1wIHN0YXRlIG9mIG1h bGxvYyBsYXR0aWNlLiAgKi8KKworREVCVUdfRlVOQ1RJT04KK3N0YXRpYyB2 b2lkCitkdW1wX21hbGxvY19sYXR0aWNlIChGSUxFICpkdW1wX2ZpbGUsIGNv bnN0IGNoYXIgKnMpCit7CisgIGlmICghZHVtcF9maWxlKQorICAgIHJldHVy bjsKKworICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcblxuTUFMTE9DIExBVFRJ Q0UgJXM6XG4iLCBzKTsKKyAgY2dyYXBoX25vZGUgKm5vZGU7CisgIEZPUl9F QUNIX0ZVTkNUSU9OIChub2RlKQorICAgIHsKKyAgICAgIGZ1bmN0X3N0YXRl IGZzID0gZ2V0X2Z1bmN0aW9uX3N0YXRlIChub2RlKTsKKyAgICAgIG1hbGxv Y19zdGF0ZV9lIHN0YXRlID0gZnMtPm1hbGxvY19zdGF0ZTsKKyAgICAgIGZw cmludGYgKGR1bXBfZmlsZSwgIiVzOiAlc1xuIiwgbm9kZS0+bmFtZSAoKSwg bWFsbG9jX3N0YXRlX25hbWVzW3N0YXRlXSk7CisgICAgfQorfQorCisvKiBQ cm9wYWdhdGUgbWFsbG9jIGF0dHJpYnV0ZSBhY3Jvc3MgdGhlIGNhbGxncmFw aC4gICovCisKK3N0YXRpYyB2b2lkCitwcm9wYWdhdGVfbWFsbG9jICh2b2lk KQoreworICBjZ3JhcGhfbm9kZSAqbm9kZTsKKyAgRk9SX0VBQ0hfRlVOQ1RJ T04gKG5vZGUpCisgICAgeworICAgICAgaWYgKERFQ0xfSVNfTUFMTE9DIChu b2RlLT5kZWNsKSkKKwlpZiAoIWhhc19mdW5jdGlvbl9zdGF0ZSAobm9kZSkp CisJICB7CisJICAgIGZ1bmN0X3N0YXRlIGwgPSBYQ05FVyAoc3RydWN0IGZ1 bmN0X3N0YXRlX2QpOworCSAgICAqbCA9IHZhcnlpbmdfc3RhdGU7CisJICAg IGwtPm1hbGxvY19zdGF0ZSA9IFNUQVRFX01BTExPQzsKKwkgICAgc2V0X2Z1 bmN0aW9uX3N0YXRlIChub2RlLCBsKTsKKwkgIH0KKyAgICB9CisKKyAgZHVt cF9tYWxsb2NfbGF0dGljZSAoZHVtcF9maWxlLCAiSW5pdGlhbCIpOworICBz dHJ1Y3QgY2dyYXBoX25vZGUgKipvcmRlcgorICAgID0gWE5FV1ZFQyAoc3Ry dWN0IGNncmFwaF9ub2RlICosIHN5bXRhYi0+Y2dyYXBoX2NvdW50KTsKKyAg aW50IG9yZGVyX3BvcyA9IGlwYV9yZXZlcnNlX3Bvc3RvcmRlciAob3JkZXIp OworICBib29sIGNoYW5nZWQgPSB0cnVlOworCisgIHdoaWxlIChjaGFuZ2Vk KQorICAgIHsKKyAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgIC8qIFdh bGsgaW4gcG9zdG9yZGVyLiAgKi8KKyAgICAgIGZvciAoaW50IGkgPSBvcmRl cl9wb3MgLSAxOyBpID49IDA7IC0taSkKKwl7CisJICBjZ3JhcGhfbm9kZSAq bm9kZSA9IG9yZGVyW2ldOworCSAgaWYgKG5vZGUtPmFsaWFzCisJICAgICAg fHwgIW5vZGUtPmRlZmluaXRpb24KKwkgICAgICB8fCAhaGFzX2Z1bmN0aW9u X3N0YXRlIChub2RlKSkKKwkgICAgY29udGludWU7CisKKwkgIGZ1bmN0X3N0 YXRlIGwgPSBnZXRfZnVuY3Rpb25fc3RhdGUgKG5vZGUpOworCisJICAvKiBG SVhNRTogYWRkIHN1cHBvcnQgZm9yIGluZGlyZWN0LWNhbGxzLiAgKi8KKwkg IGlmIChub2RlLT5pbmRpcmVjdF9jYWxscykKKwkgICAgeworCSAgICAgIGwt Pm1hbGxvY19zdGF0ZSA9IFNUQVRFX01BTExPQ19CT1RUT007CisJICAgICAg Y29udGludWU7CisJICAgIH0KKworCSAgaWYgKG5vZGUtPmdldF9hdmFpbGFi aWxpdHkgKCkgPD0gQVZBSUxfSU5URVJQT1NBQkxFKQorCSAgICB7CisJICAg ICAgbC0+bWFsbG9jX3N0YXRlID0gU1RBVEVfTUFMTE9DX0JPVFRPTTsKKwkg ICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBpZiAobC0+bWFsbG9jX3N0 YXRlID09IFNUQVRFX01BTExPQ19CT1RUT00pCisJICAgIGNvbnRpbnVlOwor CisJICB2ZWM8Y2dyYXBoX25vZGUgKj4gY2FsbGVlcyA9IHZOVUxMOworCSAg Zm9yIChjZ3JhcGhfZWRnZSAqY3MgPSBub2RlLT5jYWxsZWVzOyBjczsgY3Mg PSBjcy0+bmV4dF9jYWxsZWUpCisJICAgIHsKKwkgICAgICBpcGFfY2FsbF9z dW1tYXJ5ICplcyA9IGlwYV9jYWxsX3N1bW1hcmllcy0+Z2V0IChjcyk7CisJ ICAgICAgaWYgKGVzICYmIGVzLT5pc19yZXR1cm5fY2FsbGVlKQorCQljYWxs ZWVzLnNhZmVfcHVzaCAoY3MtPmNhbGxlZSk7CisJICAgIH0KKworCSAgbWFs bG9jX3N0YXRlX2UgbmV3X3N0YXRlID0gbC0+bWFsbG9jX3N0YXRlOworCSAg Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbGxlZXMubGVuZ3RoICgpOyBq KyspCisJICAgIHsKKwkgICAgICBjZ3JhcGhfbm9kZSAqY2FsbGVlID0gY2Fs bGVlc1tqXTsKKwkgICAgICBpZiAoIWhhc19mdW5jdGlvbl9zdGF0ZSAoY2Fs bGVlKSkKKwkJeworCQkgIG5ld19zdGF0ZSA9IFNUQVRFX01BTExPQ19CT1RU T007CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBtYWxsb2Nfc3RhdGVfZSBj YWxsZWVfc3RhdGUgPSBnZXRfZnVuY3Rpb25fc3RhdGUgKGNhbGxlZSktPm1h bGxvY19zdGF0ZTsKKwkgICAgICBpZiAobmV3X3N0YXRlIDwgY2FsbGVlX3N0 YXRlKQorCQluZXdfc3RhdGUgPSBjYWxsZWVfc3RhdGU7CisJICAgIH0KKwkg IGlmIChuZXdfc3RhdGUgIT0gbC0+bWFsbG9jX3N0YXRlKQorCSAgICB7CisJ ICAgICAgY2hhbmdlZCA9IHRydWU7CisJICAgICAgbC0+bWFsbG9jX3N0YXRl ID0gbmV3X3N0YXRlOworCSAgICB9CisJfQorICAgIH0KKworICBGT1JfRUFD SF9ERUZJTkVEX0ZVTkNUSU9OIChub2RlKQorICAgIGlmIChoYXNfZnVuY3Rp b25fc3RhdGUgKG5vZGUpKQorICAgICAgeworCWZ1bmN0X3N0YXRlIGwgPSBn ZXRfZnVuY3Rpb25fc3RhdGUgKG5vZGUpOworCWlmICghbm9kZS0+YWxpYXMK KwkgICAgJiYgbC0+bWFsbG9jX3N0YXRlID09IFNUQVRFX01BTExPQworCSAg ICAmJiAhbm9kZS0+Z2xvYmFsLmlubGluZWRfdG8pCisJICB7CisJICAgIGlm IChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJ ICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiRnVuY3Rpb24gJXMgZm91bmQg dG8gYmUgbWFsbG9jXG4iLAorCQkgICAgICAgbm9kZS0+bmFtZSAoKSk7CisJ ICAgIG5vZGUtPnNldF9tYWxsb2NfZmxhZyAodHJ1ZSk7CisJICB9CisgICAg ICB9CisKKyAgZHVtcF9tYWxsb2NfbGF0dGljZSAoZHVtcF9maWxlLCAiYWZ0 ZXIgcHJvcGFnYXRpb24iKTsKKyAgaXBhX2ZyZWVfcG9zdG9yZGVyX2luZm8g KCk7CisgIGZyZWUgKG9yZGVyKTsKK30KIAogLyogUHJvZHVjZSB0aGUgZ2xv YmFsIGluZm9ybWF0aW9uIGJ5IHByZWZvcm1pbmcgYSB0cmFuc2l0aXZlIGNs b3N1cmUKICAgIG9uIHRoZSBsb2NhbCBpbmZvcm1hdGlvbiB0aGF0IHdhcyBw cm9kdWNlZCBieSBnZW5lcmF0ZV9zdW1tYXJ5LiAgKi8KQEAgLTE2NzcsNiAr MTk3Myw3IEBAIGV4ZWN1dGUgKGZ1bmN0aW9uICopCiAgIC8qIE5vdGhyb3cg bWFrZXMgbW9yZSBmdW5jdGlvbiB0byBub3QgbGVhZCB0byByZXR1cm4gYW5k IGltcHJvdmUKICAgICAgbGF0ZXIgYW5hbHlzaXMuICAqLwogICBwcm9wYWdh dGVfbm90aHJvdyAoKTsKKyAgcHJvcGFnYXRlX21hbGxvYyAoKTsKICAgcmVt b3ZlX3AgPSBwcm9wYWdhdGVfcHVyZV9jb25zdCAoKTsKIAogICAvKiBDbGVh bnVwLiAqLwpAQCAtMTY4NCw2ICsxOTgxLDEwIEBAIGV4ZWN1dGUgKGZ1bmN0 aW9uICopCiAgICAgaWYgKGhhc19mdW5jdGlvbl9zdGF0ZSAobm9kZSkpCiAg ICAgICBmcmVlIChnZXRfZnVuY3Rpb25fc3RhdGUgKG5vZGUpKTsKICAgZnVu Y3Rfc3RhdGVfdmVjLnJlbGVhc2UgKCk7CisKKyAgLyogSW4gV1BBIHdlIHVz ZSBpbmxpbmUgc3VtbWFyaWVzIGZvciBwYXJ0aXRpb25pbmcgcHJvY2Vzcy4g ICovCisgIGlmICghZmxhZ193cGEpCisgICAgaXBhX2ZyZWVfZm5fc3VtbWFy eSAoKTsKICAgcmV0dXJuIHJlbW92ZV9wID8gVE9ET19yZW1vdmVfZnVuY3Rp b25zIDogMDsKIH0KIApAQCAtMTg3Nyw2ICsyMTc4LDE3IEBAIHBhc3NfbG9j YWxfcHVyZV9jb25zdDo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikKIAlmcHJp bnRmIChkdW1wX2ZpbGUsICJGdW5jdGlvbiBmb3VuZCB0byBiZSBub3Rocm93 OiAlc1xuIiwKIAkJIGN1cnJlbnRfZnVuY3Rpb25fbmFtZSAoKSk7CiAgICAg fQorCisgIGlmIChsLT5tYWxsb2Nfc3RhdGUgPT0gU1RBVEVfTUFMTE9DCisg ICAgICAmJiAhREVDTF9JU19NQUxMT0MgKGN1cnJlbnRfZnVuY3Rpb25fZGVj bCkpCisgICAgeworICAgICAgbm9kZS0+c2V0X21hbGxvY19mbGFnICh0cnVl KTsKKyAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgaWYgKGR1bXBfZmls ZSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJGdW5jdGlvbiBmb3VuZCB0byBi ZSBtYWxsb2M6ICVzXG4iLAorCQkgbm9kZS0+bmFtZSAoKSk7CisgICAgfQor CiAgIGZyZWUgKGwpOwogICBpZiAoY2hhbmdlZCkKICAgICByZXR1cm4gZXhl Y3V0ZV9maXh1cF9jZmcgKCk7CmRpZmYgLS1naXQgYS9nY2Mvc3NhLWl0ZXJh dG9ycy5oIGIvZ2NjL3NzYS1pdGVyYXRvcnMuaAppbmRleCBjOGFhNzdiZDRm My4uNzQwY2JmMTNjYjIgMTAwNjQ0Ci0tLSBhL2djYy9zc2EtaXRlcmF0b3Jz LmgKKysrIGIvZ2NjL3NzYS1pdGVyYXRvcnMuaApAQCAtOTMsNiArOTMsMTIg QEAgc3RydWN0IGltbV91c2VfaXRlcmF0b3IKICAgICAgYnJlYWs7CQkJCQkJ CVwKICAgIH0KIAorLyogU2ltaWxhcmx5IGZvciByZXR1cm4uICAqLworI2Rl ZmluZSBSRVRVUk5fRlJPTV9JTU1fVVNFX1NUTVQoSVRFUiwgVkFMKQkJCVwK KyAgewkJCQkJCQkJXAorICAgIGVuZF9pbW1fdXNlX3N0bXRfdHJhdmVyc2Ug KCYoSVRFUikpOwkJCVwKKyAgICByZXR1cm4gKFZBTCk7CQkJCQkJXAorICB9 CiAKIC8qIFVzZSB0aGlzIGl0ZXJhdG9yIGluIGNvbWJpbmF0aW9uIHdpdGgg Rk9SX0VBQ0hfSU1NX1VTRV9TVE1UIHRvCiAgICBnZXQgYWNjZXNzIHRvIGVh Y2ggb2NjdXJyZW5jZSBvZiBzc2F2YXIgb24gdGhlIHN0bXQgcmV0dXJuZWQg YnkKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9w bWFsbG9jLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFs bG9jLTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uOWE5NWY4MTcwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9pcGEvcHJvcG1hbGxvYy0xLmMKQEAgLTAsMCArMSwyMSBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mZHVtcC1pcGEtcHVyZS1jb25zdC1kZXRhaWxzIiB9ICovCisKK19f YXR0cmlidXRlX18oKG5vaW5saW5lLCBub19pY2YsIHVzZWQpKQorc3RhdGlj IHZvaWQgKmYoX19TSVpFX1RZUEVfXyBuKQoreworICB2b2lkICpwID0gX19i dWlsdGluX21hbGxvYyAobik7CisgIGlmIChwID09IDApCisgICAgX19idWls dGluX2Fib3J0ICgpOworICByZXR1cm4gcDsKK30KKworX19hdHRyaWJ1dGVf Xygobm9pbmxpbmUsIG5vX2ljZiwgdXNlZCkpCitzdGF0aWMgdm9pZCAqYmFy KF9fU0laRV9UWVBFX18gbikKK3sKKyAgdm9pZCAqcCA9IGYgKG4pOworICBy ZXR1cm4gcDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAg IkZ1bmN0aW9uIGYgZm91bmQgdG8gYmUgbWFsbG9jIiAicHVyZS1jb25zdCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rp b24gYmFyIGZvdW5kIHRvIGJlIG1hbGxvYyIgInB1cmUtY29uc3QiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3Bt YWxsb2MtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxs b2MtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li45NWIyZmQ3NGE3YQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTIuYwpAQCAtMCwwICsxLDIzIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TzIgLWZkdW1wLWlwYS1wdXJlLWNvbnN0LWRldGFpbHMiIH0gKi8KKworX19h dHRyaWJ1dGVfXygobm9pbmxpbmUsIHVzZWQsIG5vX2ljZikpCitzdGF0aWMg dm9pZCAqZm9vIChfX1NJWkVfVFlQRV9fIG4pCit7CisgIHJldHVybiBfX2J1 aWx0aW5fbWFsbG9jIChuICogMTApOworfQorCitfX2F0dHJpYnV0ZV9fKChu b2lubGluZSwgdXNlZCwgbm9faWNmKSkKK3N0YXRpYyB2b2lkICpiYXIoX19T SVpFX1RZUEVfXyBuLCBpbnQgY29uZCkKK3sKKyAgdm9pZCAqcDsKKyAgaWYg KGNvbmQpCisgICAgcCA9IGZvbyAobik7CisgIGVsc2UKKyAgICBwID0gX19i dWlsdGluX21hbGxvYyAobik7CisKKyAgcmV0dXJuIHA7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJGdW5jdGlvbiBmb28gZm91bmQg dG8gYmUgbWFsbG9jIiAicHVyZS1jb25zdCIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24gYmFyIGZvdW5kIHRvIGJl IG1hbGxvYyIgInB1cmUtY29uc3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzU1OGRkZDA3ZAotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9w bWFsbG9jLTMuYwpAQCAtMCwwICsxLDI0IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLWlwYS1wdXJl LWNvbnN0LWRldGFpbHMiIH0gKi8KKworc3RhdGljIHZvaWQgKmZvbyhfX1NJ WkVfVFlQRV9fLCBpbnQpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub19p Y2YsIHVzZWQpKTsKKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIHVzZWQs IG5vX2ljZikpCitzdGF0aWMgdm9pZCAqYmFyKF9fU0laRV9UWVBFX18gbiwg aW50IG0pCit7CisgIHJldHVybiBmb28gKG4sIG0pOworfQorCitzdGF0aWMg dm9pZCAqZm9vKF9fU0laRV9UWVBFX18gbiwgaW50IG0pCit7CisgIHZvaWQg KnA7CisgIGlmIChtID4gMCkKKyAgICBwID0gYmFyIChuLCAtLW0pOworICBl bHNlCisgICAgcCA9IF9fYnVpbHRpbl9tYWxsb2MgKG4pOworCisgIHJldHVy biBwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVu Y3Rpb24gZm9vIGZvdW5kIHRvIGJlIG1hbGxvYyIgInB1cmUtY29uc3QiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkZ1bmN0aW9u IGJhciBmb3VuZCB0byBiZSBtYWxsb2MiICJwdXJlLWNvbnN0IiB9IH0gKi8K --94eb2c1b4244f77406055ad76e4e--