From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#11935: XINT etc. should be functions Date: Mon, 23 Jul 2012 19:20:07 -0700 Organization: UCLA Computer Science Department Message-ID: <500E0657.4050604@cs.ucla.edu> References: <500039B7.8050106@cs.ucla.edu> <5002C895.4080400@cs.ucla.edu> <500499C7.20902@cs.ucla.edu> <83txx79jgx.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030501010209060903070607" X-Trace: dough.gmane.org 1343096511 31586 80.91.229.3 (24 Jul 2012 02:21:51 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 24 Jul 2012 02:21:51 +0000 (UTC) To: 11935@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 24 04:21:49 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1StUkq-000718-NS for geb-bug-gnu-emacs@m.gmane.org; Tue, 24 Jul 2012 04:21:45 +0200 Original-Received: from localhost ([::1]:37684 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StUkp-00012Q-Vd for geb-bug-gnu-emacs@m.gmane.org; Mon, 23 Jul 2012 22:21:44 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:41994) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StUkf-000129-QV for bug-gnu-emacs@gnu.org; Mon, 23 Jul 2012 22:21:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1StUkX-0004JD-U3 for bug-gnu-emacs@gnu.org; Mon, 23 Jul 2012 22:21:33 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53004) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StUkX-0004J5-Ob for bug-gnu-emacs@gnu.org; Mon, 23 Jul 2012 22:21:25 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1StUqw-00089n-1z for bug-gnu-emacs@gnu.org; Mon, 23 Jul 2012 22:28:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 Jul 2012 02:28:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11935 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 11935-submit@debbugs.gnu.org id=B11935.134309682431109 (code B ref 11935); Tue, 24 Jul 2012 02:28:01 +0000 Original-Received: (at 11935) by debbugs.gnu.org; 24 Jul 2012 02:27:04 +0000 Original-Received: from localhost ([127.0.0.1]:34317 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1StUpu-000855-Rs for submit@debbugs.gnu.org; Mon, 23 Jul 2012 22:27:04 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:40121) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1StUpk-00084H-TB for 11935@debbugs.gnu.org; Mon, 23 Jul 2012 22:26:57 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 12ED1A60002 for <11935@debbugs.gnu.org>; Mon, 23 Jul 2012 19:20:11 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2O4h1fd-R8uK for <11935@debbugs.gnu.org>; Mon, 23 Jul 2012 19:20:06 -0700 (PDT) Original-Received: from [192.168.1.4] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 6AF4039E8007 for <11935@debbugs.gnu.org>; Mon, 23 Jul 2012 19:20:06 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120714 Thunderbird/14.0 In-Reply-To: <83txx79jgx.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:62338 Archived-At: This is a multi-part message in MIME format. --------------030501010209060903070607 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 07/16/2012 08:04 PM, Eli Zaretskii wrote: > we need a facility for doing this > only with a few functions that affect performance. It turns out that when compiling with -O0, always_inline functions are often slower than macros, as the inlined code also contains unnecessary instructions to copy arguments and results. So instead of using always_inline, it's better to do this performance-critical inlining by hand. I did that (patch relative to trunk bzr 109195 attached), inlining enough so that CPU performance improved by 8.7% compared to the current trunk, when compiled with gcc -O0. (This is the same benchmark as before, on x86-64 with GCC 4.7.1.) The performance win is because I inlined a bit more cleverly than the current code does. Like the earlier version, this patch should improve performance slightly in the default-optimization case too, since this patch is identical to the earlier one when default optimization is used. In short, it should take only a relatively small amount of hand-inlining to address the -O0 performance issue. --------------030501010209060903070607 Content-Type: text/plain; charset=UTF-8; name="inline-diff.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="inline-diff.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEyLTA3LTE3 IDA3OjMwOjI1ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMi0wNy0yNCAwMjowMDozMyArMDAw MApAQCAtMSwzICsxLDkgQEAKKzIwMTItMDctMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNz LnVjbGEuZWR1PgorCisJVXNlIGZ1bmN0aW9ucywgbm90IG1hY3JvcywgZm9yIFhJTlQgZXRj LiAoQnVnIzExOTM1KS4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DRkxBR1MpOiBSZW1vdmUg LVdiYWQtZnVuY3Rpb24tY2FzdCwKKwlhcyBpdCBnZW5lcmF0ZXMgYm9ndXMgd2FybmluZ3Mg YWJvdXQgcmVhc29uYWJsZSBjYXN0cyBvZiBjYWxscy4KKwogMjAxMi0wNy0xNyAgRG1pdHJ5 IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgogCiAJRml4IHRvb2xraXQgY29uZmln dXJhdGlvbiByZXBvcnQuCgo9PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0g Y29uZmlndXJlLmFjCTIwMTItMDctMTcgMDc6MzA6MjUgKzAwMDAKKysrIGNvbmZpZ3VyZS5h YwkyMDEyLTA3LTE3IDE2OjI3OjIwICswMDAwCkBAIC02NzUsNiArNjc1LDcgQEAKICAgbnc9 IiRudyAtV2lubGluZSIgICAgICAgICAgICAgICAgICMgT0sgdG8gaWdub3JlICdpbmxpbmUn CiAgIG53PSIkbncgLVdzeW5jLW5hbmQiICAgICAgICAgICAgICAjIGlycmVsZXZhbnQgaGVy ZSwgYW5kIHByb3Zva2VzIE9iakMgd2FybmluZwogICBudz0iJG53IC1XdW5zYWZlLWxvb3At b3B0aW1pemF0aW9ucyIgIyBPSyB0byBzdXBwcmVzcyB1bnNhZmUgb3B0aW1pemF0aW9ucwor ICBudz0iJG53IC1XYmFkLWZ1bmN0aW9uLWNhc3QiICAgICAgIyBUaGVzZSBjYXN0cyBhcmUg bm8gd29yc2UgdGhhbiBvdGhlcnMuCiAKICAgIyBFbWFjcyBkb2Vzbid0IGNhcmUgYWJvdXQg c2hhZG93aW5nOyBzZWUKICAgIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1s L2VtYWNzLWRpZmZzLzIwMTEtMTEvbXNnMDAyNjUuaHRtbD4uCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL0NoYW5nZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAxMi0wNy0yMyAxNjo1Nzoy MCArMDAwMAorKysgc3JjL0NoYW5nZUxvZwkyMDEyLTA3LTI0IDAyOjAwOjMzICswMDAwCkBA IC0xLDMgKzEsMTMyIEBACisyMDEyLTA3LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51 Y2xhLmVkdT4KKworCVVzZSBmdW5jdGlvbnMsIG5vdCBtYWNyb3MsIGZvciBYSU5UIGV0Yy4g KEJ1ZyMxMTkzNSkuCisJSW4gbGlzcC5oLCBwcmVmZXIgZnVuY3Rpb25zIHRvIGZ1bmN0aW9u LWxpa2UgbWFjcm9zLCBhbmQKKwljb25zdGFudHMgdG8gb2JqZWN0LWxpa2UgbWFjcm9zLCB3 aGVuIGVpdGhlciB3aWxsIGRvLiAgVGhpczoKKwkgLiBtYWtlcyB0aGUgY29kZSBlYXNpZXIg dG8gZGVidWcsIGFzIHRoZSBzeW1ib2xzIGFyZSB2aXNpYmxlIHRvIEdEQi4KKwkgLiBzaW1w bGlmaWVzIHVzZSwgYXMgdGhlcmUncyBubyBtb3JlIG5lZWQgdG8gd29ycnkgYWJvdXQKKwkg ICBhcmd1bWVudHMnIHNpZGUgZWZmZWN0cyBiZWluZyBldmFsdWF0ZWQgbXVsdGlwbGUgdGlt ZXMuCisJIC4gc2hyaW5rcyB0aGUgc2l6ZSBvZiBFbWFjcydzIHRleHQgc2VnbWVudCBieSAw LjUlCisJICAgb24gbXkgcGxhdGZvcm0gKHg4Ni02NCwgR0NDIDQuNy4xKS4KKwkqIGJ1ZmZl ci5jIChRb3ZlcmxhcCk6CisJKiBkYXRhLmMgKFFzdWJycCk6CisJKiBmbnMuYyAoUWhhc2hf dGFibGVfcCk6CisJTm93IGV4dGVybiwgc28gbGlzcC5oIGNhbiB1c2UgdGhlc2Ugc3ltYm9s cy4KKwkqIGRpc3BleHRlcm4uaDogSW5jbHVkZSBjaGFyYWN0ZXIuaCwgZm9yIE1BWF9DSEFS IGV0Yy4KKwkoR0xZUEgsIEdMWVBIX0NIQVIsIEdMWVBIX0ZBQ0UsIFNFVF9HTFlQSF9DSEFS LCBTRVRfR0xZUEhfRkFDRSkKKwkoU0VUX0dMWVBILCBHTFlQSF9DT0RFX0NIQVIsIEdMWVBI X0NPREVfRkFDRSkKKwkoU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERSwgR0xZUEhfTU9ERV9M SU5FX0ZBQ0UsIEdMWVBIX0NIQVJfVkFMSURfUCkKKwkoR0xZUEhfQ09ERV9QKTogTW92ZSBo ZXJlIGZyb20gbGlzcC5oLgorCShHTFlQSF9DSEFSLCBHTFlQSF9GQUNFLCBHTFlQSF9DT0RF X0NIQVIsIEdMWVBIX0NPREVfRkFDRSkKKwkoR0xZUEhfQ0hBUl9WQUxJRF9QLCBHTFlQSF9D T0RFX1ApOiBOb3cgZnVuY3Rpb25zLCBub3QgbWFjcm9zLgorCShHTFlQSF9NT0RFX0xJTkVf RkFDRSk6IE5vdyBlbnVtcywgbm90IG1hY3Jvcy4KKwkqIGV2YWwuYyAoRmF1dG9sb2FkKTog Q2FzdCBYVU5UQUcgb3V0cHV0IHRvIGludHB0cl90LCBzaW5jZQorCVhVTlRBRyBub3cgcmV0 dXJucyB2b2lkICouCisJKiBsaXNwLmggKFhMSSwgWElMLCBDSEVDS19UWVBFLCBDSEVDS19M SVNUX0NPTlMsIENIRUNLX05VTUJFUikKKwkoQ0hFQ0tfU1lNQk9MLCBDT05TUCwgRVEsIEZM T0FUUCwgSU5URUdFUlAsIExJU1BfSU5UX1RBR19QLCBNQVJLRVJQKQorCShNSVNDUCwgTklM UCwgU0VUX1NZTUJPTF9WQUwsIFNZTUJPTF9DT05TVEFOVF9QLCBTWU1CT0xfVkFMLCBTWU1C T0xQKQorCShWRUNUT1JMSUtFUCwgWENBUiwgWENEUiwgWENPTlMsIFhIQVNILCBYUE5UUiwg WFNZTUJPTCk6CisJSWYgY29tcGlsaW5nIHZpYSBHQ0Mgd2l0aG91dCBvcHRpbWl6YXRpb24s IGlubGluZSB0aGVzZSBmdW5jdGlvbnMKKwltYW51YWxseSwgYnkgZGVmaW5pbmcgbWFjcm9z IGluIGFkZGl0aW9uIHRvIGlubGluZSBmdW5jdGlvbnMuCisJVG8gZGlzYWJsZSB0aGlzLCBj b21waWxlIHdpdGggLURJTkxJTklORz0wLgorCShtYWtlX251bWJlciwgWEZBU1RJTlQsIFhJ TlQsIFhUWVBFLCBYVU5UQUcpOiBMaWtld2lzZSwgYnV0CisJaGFuZC1vcHRpbWl6ZSBvbmx5 IGluIHRoZSBVU0VfTFNCX1RBRyBjYXNlLCBhcyBHTlVpc2ggaG9zdHMgZG8gdGhhdC4KKwko Q0hFQ0tfQ09OU19MSVNULCBMSVNQX0lOVF9UQUdfUCwgWExJLCBYSUwsIFhIQVNILCBYVFlQ RSkKKwkoWElOVCwgWEZBU1RJTlQsIFhVSU5ULCBtYWtlX251bWJlciwgWFBOVFIsIFhVTlRB RywgRVEsIFhDT05TLCBYVkVDVE9SKQorCShYU1RSSU5HLCBYU1lNQk9MLCBYRkxPQVQsIFhQ Uk9DRVNTLCBYV0lORE9XLCBYVEVSTUlOQUwsIFhTVUJSKQorCShYQlVGRkVSLCBYQ0hBUl9U QUJMRSwgWFNVQl9DSEFSX1RBQkxFLCBYQk9PTF9WRUNUT1IsIENIRUNLX1RZUEUpCisJKENI RUNLX1NUUklOR19PUl9CVUZGRVIsIFhDQVIsIFhDRFIsIFhTRVRDQVIsIFhTRVRDRFIsIENB UiwgQ0RSKQorCShDQVJfU0FGRSwgQ0RSX1NBRkUsIFNUUklOR19NVUxUSUJZVEUsIFNUUklO R19JTlRFUlZBTFMpCisJKFNUUklOR19TRVRfSU5URVJWQUxTLCBTREFUQSwgU1NEQVRBLCBT UkVGLCBTU0VULCBTQ0hBUlMpCisJKFNUUklOR19CWVRFUywgU0JZVEVTLCBTVFJJTkdfU0VU X0NIQVJTLCBBU0laRSwgQVNFVCkKKwkoQ0hBUl9UQUJMRV9FWFRSQV9TTE9UUywgQ0hBUl9U QUJMRV9SRUZfQVNDSUksIENIQVJfVEFCTEVfUkVGKQorCShDSEFSX1RBQkxFX1RSQU5TTEFU RSwgQ0hBUl9UQUJMRV9TRVQsIFNZTUJPTF9WQUwsIFNZTUJPTF9BTElBUykKKwkoU1lNQk9M X0JMViwgU1lNQk9MX0ZXRCwgU0VUX1NZTUJPTF9WQUwsIFNFVF9TWU1CT0xfQUxJQVMpCisJ KFNFVF9TWU1CT0xfQkxWLCBTRVRfU1lNQk9MX0ZXRCwgU1lNQk9MX05BTUUsIFNZTUJPTF9J TlRFUk5FRF9QKQorCShTWU1CT0xfSU5URVJORURfSU5fSU5JVElBTF9PQkFSUkFZX1AsIFNZ TUJPTF9DT05TVEFOVF9QKQorCShYSEFTSF9UQUJMRSwgSEFTSF9UQUJMRV9QLCBDSEVDS19I QVNIX1RBQkxFLCBIQVNIX1RBQkxFX1NJWkUpCisJKFhNSVNDLCBYTUlTQ0FOWSwgWE1BUktF UiwgWE9WRVJMQVksIFhTQVZFX1ZBTFVFLCBYU0VUTUlTQ1RZUEUpCisJKEJMVl9GT1VORCwg U0VUX0JMVl9GT1VORCwgQkxWX1ZBTFVFLCBTRVRfQkxWX1ZBTFVFLCBYRldEVFlQRSkKKwko WElOVEZXRCwgWEJPT0xGV0QsIFhPQkpGV0QsIFhCVUZGRVJfT0JKRldELCBYS0JPQVJEX09C SkZXRCkKKwkoWEZMT0FUX0RBVEEsIFhGTE9BVF9JTklULCBOSUxQLCBOVU1CRVJQLCBOQVRO VU1QKQorCShSQU5HRURfSU5URUdFUlAsIENPTlNQLCBGTE9BVFAsIE1JU0NQLCBTVFJJTkdQ LCBTWU1CT0xQKQorCShJTlRFR0VSUCwgVkVDVE9STElLRVAsIFZFQ1RPUlAsIE9WRVJMQVlQ KQorCShNQVJLRVJQLCBTQVZFX1ZBTFVFUCwgSU5URldEUCwgQk9PTEZXRFAsIE9CSkZXRFAp CisJKEJVRkZFUl9PQkpGV0RQLCBLQk9BUkRfT0JKRldEUCkKKwkoUFNFVURPVkVDVE9SUCwg V0lORE9XX0NPTkZJR1VSQVRJT05QLCBQUk9DRVNTUCwgV0lORE9XUCkKKwkoVEVSTUlOQUxQ LCBTVUJSUCwgQ09NUElMRURQLCBCVUZGRVJQLCBDSEFSX1RBQkxFX1ApCisJKFNVQl9DSEFS X1RBQkxFX1AsIEJPT0xfVkVDVE9SX1AsIEZSQU1FUCwgSU1BR0VQLCBBUlJBWVApCisJKENI RUNLX0xJU1QsIENIRUNLX0xJU1RfQ09OUywgQ0hFQ0tfTElTVF9FTkQsIENIRUNLX1NUUklO RykKKwkoQ0hFQ0tfU1RSSU5HX0NBUiwgQ0hFQ0tfQ09OUywgQ0hFQ0tfU1lNQk9MLCBDSEVD S19DSEFSX1RBQkxFKQorCShDSEVDS19WRUNUT1IsIENIRUNLX1ZFQ1RPUl9PUl9TVFJJTkcs IENIRUNLX0FSUkFZKQorCShDSEVDS19WRUNUT1JfT1JfQ0hBUl9UQUJMRSwgQ0hFQ0tfQlVG RkVSLCBDSEVDS19XSU5ET1cpCisJKENIRUNLX1dJTkRPV19DT05GSUdVUkFUSU9OLCBDSEVD S19QUk9DRVNTLCBDSEVDS19TVUJSKQorCShDSEVDS19OVU1CRVIsIENIRUNLX05BVE5VTSwg Q0hFQ0tfTUFSS0VSLCBYRkxPQVRJTlQpCisJKENIRUNLX0ZMT0FULCBDSEVDS19OVU1CRVJf T1JfRkxPQVQsIENIRUNLX09WRVJMQVkpCisJKENIRUNLX05VTUJFUl9DQVIsIENIRUNLX05V TUJFUl9DRFIsIENIRUNLX05BVE5VTV9DQVIpCisJKENIRUNLX05BVE5VTV9DRFIsIEZVTkNU SU9OUCwgU1BFQ1BETF9JTkRFWCwgTE9BREhJU1RfQVRUQUNIKQorCShJU19ESVJFQ1RPUllf U0VQLCBJU19ERVZJQ0VfU0VQLCBJU19BTllfU0VQKToKKwlOb3cgc3RhdGljIGlubGluZSBm dW5jdGlvbnMuCisJKFBTRVVET1ZFQ1RPUl9TSVpFX1RZUEVQKSBOZXcgc3RhdGljIGlubGlu ZSBmdW5jdGlvbiwgcmVwbGFjaW5nIC4uLgorCShQU0VVRE9WRUNUT1JfVFlQRVApOiBSZW1v dmUgbWFjcm8uICBBbGwgdXNlcyBjaGFuZ2VkIHRvIHRoZSBuZXcgQVBJLgorCShjaGVja19j b25zX2xpc3QpIFshR0NfQ0hFQ0tfQ09OU19MSVNUXTogTmV3IGVtcHR5IGZ1bmN0aW9uLgor CShFTUFDU19JTlQsIEVNQUNTX1VJTlQpOiBOb3cgdHlwZWRlZnMsIG5vdCBtYWNyb3MuCisJ KFZBTEJJVFMsIElOVFRZUEVCSVRTLCBGSVhOVU1fQklUUywgTElTUF9JTlRfVEFHKQorCShQ U0VVRE9WRUNUT1JfU0laRV9CSVRTLCBQU0VVRE9WRUNUT1JfU0laRV9NQVNLLCBQVkVDX1RZ UEVfTUFTSykKKwkoQk9PTF9WRUNUT1JfQklUU19QRVJfQ0hBUiwgQ0hBUl9UQUJMRV9TVEFO REFSRF9TTE9UUykKKwkoQ0hBUlRBQl9TSVpFX0JJVFNfMCwgQ0hBUlRBQl9TSVpFX0JJVFNf MSkKKwkoQ0hBUlRBQl9TSVpFX0JJVFNfMiwgQ0hBUlRBQl9TSVpFX0JJVFNfMywgREVGQVVM VF9IQVNIX1NJWkUpCisJKENPTVBJTEVEX0FSR0xJU1QsIENPTVBJTEVEX0JZVEVDT0RFLCBD T01QSUxFRF9DT05TVEFOVFMpCisJKENPTVBJTEVEX1NUQUNLX0RFUFRILCBDT01QSUxFRF9E T0NfU1RSSU5HLCBDT01QSUxFRF9JTlRFUkFDVElWRSkKKwkoQ0hBUl9BTFQsIENIQVJfU1VQ RVIsIENIQVJfSFlQRVIsIENIQVJfU0hJRlQsIENIQVJfQ1RMLCBDSEFSX01FVEEpCisJKENI QVJfTU9ESUZJRVJfTUFTSywgTUFOWSwgVU5FVkFMTEVELCBGTE9BVF9UT19TVFJJTkdfQlVG U0laRSk6CisJKERJUkVDVE9SWV9TRVAsIE1BWF9BTExPQ0EpOgorCU5vdyBjb25zdGFudHMs IG5vdCBtYWNyb3MuCisJKExJU1BfSU5UMV9UQUcsIExJU1BfU1RSSU5HX1RBRywgTElTUF9N QUtFX1JWQUxVRSwgVFlQRU1BU0spOgorCVJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwko REFUQV9TRUdfQklUUyk6IERlZmF1bHQgdG8gMCwgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBy ZXN0IG9mIHRoZSBjb2RlLgorCShWQUxNQVNLKTogRGVmaW5lIGluIG9uZSBwbGFjZSByYXRo ZXIgdGhhbiBpbiB0d28sIG1lcmdpbmcgdGhlCisJVVNFX0xTQl9UQUcgcGFydHM7IHRoaXMg aXMgc2ltcGxlci4KKwkoTU9TVF9QT1NJVElWRV9GSVhOVU0sIE1PU1RfTkVHQVRJVkVfRklY TlVNLCBtYXgsIG1pbikKKwkoc3RydWN0IExpc3BfU3RyaW5nLCBVTlNJR05FRF9DTVAsIEFT Q0lJX0NIQVJfUCk6CisJTW92ZSB1cCwgdG8gYXZvaWQgdXNlIGJlZm9yZSBkZWZpbml0aW9u LgorCUFsc28gaW5jbHVkZSAiZ2xvYmFscy5oIiBlYXJsaWVyLCBmb3IgdGhlIHNhbWUgcmVh c29uLgorCShtYWtlX25hdG51bSwgeHRhZyk6IE5ldyBmdW5jdGlvbnMuCisJKFhVTlRBRyk6 IE5vdyByZXR1cm5zIHZvaWQgKiwgbm90IGludHB0cl90LCBhcyB0aGlzIG1lYW5zIGZld2Vy IGNhc3RzLgorCSh1bmlvbiBMaXNwX0Z3ZCwgQk9PTEZXRFAsIEJPT0xfVkVDVE9SX1AsIEJV RkZFUl9PQkpGV0RQLCBCVUZGRVJQKQorCShDSEFSX1RBQkxFX1AsIENIQVJfVEFCTEVfUkVG X0FTQ0lJLCBDT05TUCwgRkxPQVRQLCBJTlRFR0VSUCwgSU5URldEUCkKKwkoS0JPQVJEX09C SkZXRFAsIE1BUktFUlAsIE1JU0NQLCBOSUxQLCBPQkpGV0RQLCBPVkVSTEFZUCwgUFJPQ0VT U1ApCisJKFBTRVVET1ZFQ1RPUlAsIFNBVkVfVkFMVUVQLCBTVFJJTkdQLCBTVUJfQ0hBUl9U QUJMRV9QLCBTVUJSUCwgU1lNQk9MUCkKKwkoVkVDVE9STElLRVAsIFdJTkRPV1AsIFFvdmVy bGF5cCwgY2hhcl90YWJsZV9yZWYsIGNoYXJfdGFibGVfc2V0KQorCShjaGFyX3RhYmxlX3Ry YW5zbGF0ZSwgUWFycmF5cCwgUWJ1ZmZlcnAsIFFidWZmZXJfb3Jfc3RyaW5nX3ApCisJKFFj aGFyX3RhYmxlX3AsIFFjb25zcCwgUWZsb2F0cCwgUWludGVnZXJwLCBRbGFtYmRhLCBRbGlz dHAsIFFtYXJrZXJwKQorCShRbmlsLCBRbnVtYmVycCwgUXN1YnJwLCBRc3RyaW5ncCwgUXN5 bWJvbHAsIFF2ZWN0b3JwKQorCShRdmVjdG9yX29yX2NoYXJfdGFibGVfcCwgUXdob2xlbnVt cCwgRmZib3VuZHAsIHdyb25nX3R5cGVfYXJndW1lbnQpCisJKGluaXRpYWxpemVkLCBRaGFz aF90YWJsZV9wLCBleHRyYWN0X2Zsb2F0LCBRcHJvY2Vzc3AsIFF3aW5kb3dwKQorCShRd2lu ZG93X2NvbmZpZ3VyYXRpb25fcCwgUWltYWdlKTogTmV3IGZvcndhcmQgZGVjbGFyYXRpb25z LgorCShYU0VUKTogU2ltcGxpZnkgYnkgcmV3cml0aW5nIGluIHRlcm1zIG9mIHh0YWcuCisJ KFhTRVRGQVNUSU5UKTogU2ltcGxpZnkgYnkgcmV3cml0aW5nIGluIHRlcm1zIG9mIG1ha2Vf bmF0bnVtLgorCShTVFJJTkdfQ09QWUlOKTogUmVtb3ZlOyB1bnVzZWQuCisJKEdMWVBILCBH TFlQSF9DSEFSLCBHTFlQSF9GQUNFLCBTRVRfR0xZUEhfQ0hBUiwgU0VUX0dMWVBIX0ZBQ0Up CisJKFNFVF9HTFlQSCwgR0xZUEhfQ09ERV9DSEFSLCBHTFlQSF9DT0RFX0ZBQ0UpCisJKFNF VF9HTFlQSF9GUk9NX0dMWVBIX0NPREUsIEdMWVBIX01PREVfTElORV9GQUNFLCBHTFlQSF9D SEFSX1ZBTElEX1ApCisJKEdMWVBIX0NPREVfUCk6IE1vdmUgdG8gZGlzcGV4dGVybi5oLCB0 byBhdm9pZCBkZWZpbmUtYmVmb3JlLXVzZS4KKwkoVFlQRV9SQU5HRURfSU5URUdFUlApOiBT aW1wbGlmeS4KKwkoUFNFVURPVkVDVE9SX1NJWkVfVFlQRVApOiBSZW5hbWUgZnJvbSBQU0VV RE9WRUNUT1JQX1RZUEVQIGFuZAorCWNoYW5nZSB0aGUgZmlyc3QgYXJnIHRvIGJlIGEgc2l6 ZSByYXRoZXIgdGhhbiBhIHBvaW50ZXIsCisJdG8gbWFrZSBpdCB1c2FibGUgYXMgYSBmdW5j dGlvbi4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKFFzdWJycCwgUWhhc2hfdGFibGVfcCwgUW92 ZXJsYXlwKTogTmV3IGV4dGVybiBkZWNscy4KKwkoc2V0bG9jYWxlLCBmaXh1cF9sb2NhbGUs IHN5bmNocm9uaXplX3N5c3RlbV9tZXNzYWdlc19sb2NhbGUpCisJKHN5bmNocm9uaXplX3N5 c3RlbV90aW1lX2xvY2FsZSkgWyFIQVZFX1NFVExPQ0FMRV06CisJTm93IGVtcHR5IGZ1bmN0 aW9ucywgbm90IG1hY3Jvcy4KKwkqIG1lbS1saW1pdHMuaCAoRVhDRUVEU19MSVNQX1BUUikg WyFkZWZpbmVkIERBVEFfU0VHX0JJVFNdOgorCVJlbW92ZSwgYXMgREFUQV9TRUdfQklUUyBp cyBhbHdheXMgZGVmaW5lZCBub3csIGlmIG9ubHkgdG8gemVyby4KKwkqIHdpbmRvdy5jIChR d2luZG93X2NvbmZpZ3VyYXRpb25fcCk6CisJTm93IGV4dGVybiwgc28gd2luZG93LmggY2Fu IHVzZSBpdC4KKwkqIHdpbmRvdy5oIChRd2luZG93cCk6IE1vdmUgZGVjbCBiYWNrIHRvIGxp c3AuaC4KKwkoQ0hFQ0tfTElWRV9XSU5ET1cpOiBNb3ZlIGhlcmUgZnJvbSBsaXNwLmgsIHNv IHdpbmRvdy5oIGludGVybmFscworCW5lZWQgbm90IGJlIG1vdmVkIHRvIGxpc3AuaC4gIE5v dyBhIGZ1bmN0aW9uLCBub3QgYSBtYWNyby4KKwogMjAxMi0wNy0yMyAgRWxpIFphcmV0c2tp aSAgPGVsaXpAZ251Lm9yZz4KIAogCSogcHJpbnQuYyAocHJpbnRfb2JqZWN0KTogRG9uJ3Qg Y3Jhc2ggd2hlbiBhIGZyYW1lJ3MgbmFtZSBpcyBuaWwKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvYWxsb2MuYycKLS0tIHNyYy9hbGxvYy5jCTIwMTItMDctMjMgMTE6MTU6NDMgKzAwMDAK KysrIHNyYy9hbGxvYy5jCTIwMTItMDctMjMgMjE6NTg6MTAgKzAwMDAKQEAgLTMwNzQsMTIg KzMwNzQsMTIgQEAKICAgICsgVkVDVE9SX0JMT0NLX0JZVEVTIC0gVkJMT0NLX0JZVEVTX01J TikKIAogLyogTnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkgdmVjdG9yLWJsb2NrLWFsbG9jYXRl ZCBvYmplY3QuICBUaGlzIGlzIHRoZSBvbmx5Ci0gICBwbGFjZSB3aGVyZSB3ZSBhY3R1YWxs eSB1c2UgdGhlIGBuYnl0ZXMnIGZpZWxkIG9mIHRoZSB2ZWN0b3ItaGVhZGVyLgotICAgSS5l LiB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoZSBgbmJ5dGVzJyBmaWVsZCBieSBjb21wdXRpbmcg aXQgYmFzZWQgb24gdGhlCisgICBwbGFjZSB3aGVyZSB3ZSBhY3R1YWxseSB1c2UgdGhlICdz aXplJyBmaWVsZCBvZiB0aGUgdmVjdG9yLWhlYWRlci4KKyAgIEkuZS4gd2UgY291bGQgZ2V0 IHJpZCBvZiB0aGUgJ3NpemUnIGZpZWxkIGJ5IGNvbXB1dGluZyBpdCBiYXNlZCBvbiB0aGUK ICAgIHZlY3Rvci10eXBlLiAgKi8KIAogI2RlZmluZSBQU0VVRE9WRUNUT1JfTkJZVEVTKHZl Y3RvcikgXAotICAoUFNFVURPVkVDVE9SX1RZUEVQICgmdmVjdG9yLT5oZWFkZXIsIFBWRUNf RlJFRSkJXAorICAoUFNFVURPVkVDVE9SX1NJWkVfVFlQRVAgKHZlY3Rvci0+aGVhZGVyLnNp emUsIFBWRUNfRlJFRSkJXAogICAgPyB2ZWN0b3ItPmhlYWRlci5zaXplICYgUFNFVURPVkVD VE9SX1NJWkVfTUFTSwlcCiAgICA6IHZlY3Rvci0+aGVhZGVyLm5leHQubmJ5dGVzKQogCkBA IC0zMTcxLDcgKzMxNzEsOCBAQAogCSAgICAgIC8qIEFsbCBub24tYm9vbCBwc2V1ZG92ZWN0 b3JzIGFyZSBzbWFsbCBlbm91Z2ggdG8gYmUgYWxsb2NhdGVkCiAJCSBmcm9tIHZlY3RvciBi bG9ja3MuICBUaGlzIGNvZGUgc2hvdWxkIGJlIHJlZGVzaWduZWQgaWYgc29tZQogCQkgcHNl dWRvdmVjdG9yIHR5cGUgZ3Jvd3MgYmV5b25kIFZCTE9DS19CWVRFU19NQVguICAqLwotCSAg ICAgIGVhc3NlcnQgKFBTRVVET1ZFQ1RPUl9UWVBFUCAoJnZlY3Rvci0+aGVhZGVyLCBQVkVD X0JPT0xfVkVDVE9SKSk7CisJICAgICAgZWFzc2VydCAoUFNFVURPVkVDVE9SX1NJWkVfVFlQ RVAgKHZlY3Rvci0+aGVhZGVyLnNpemUsCisJCQkJCQlQVkVDX0JPT0xfVkVDVE9SKSk7CiAK IAkgICAgICB0b3RhbF92ZWN0b3Jfc2xvdHMKIAkJKz0gKGJvb2xfaGVhZGVyX3NpemUKQEAg LTQzOTIsNyArNDM5Myw3IEBACiAgICAgICB3aGlsZSAoVkVDVE9SX0lOX0JMT0NLICh2ZWN0 b3IsIGJsb2NrKQogCSAgICAgJiYgdmVjdG9yIDw9IChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikg cCkKIAl7Ci0JICBpZiAoUFNFVURPVkVDVE9SX1RZUEVQICgmdmVjdG9yLT5oZWFkZXIsIFBW RUNfRlJFRSkpCisJICBpZiAoUFNFVURPVkVDVE9SX1NJWkVfVFlQRVAgKHZlY3Rvci0+aGVh ZGVyLnNpemUsIFBWRUNfRlJFRSkpCiAJICAgIHZlY3RvciA9IEFEVkFOQ0UgKHZlY3Rvciwg KHZlY3Rvci0+aGVhZGVyLnNpemUKIAkJCQkgICAgICAgJiBQU0VVRE9WRUNUT1JfU0laRV9N QVNLKSk7CiAJICBlbHNlIGlmICh2ZWN0b3IgPT0gcCkKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvYnVmZmVyLmMnCi0tLSBzcmMvYnVmZmVyLmMJMjAxMi0wNy0yMyAxMToxNTo0MyArMDAw MAorKysgc3JjL2J1ZmZlci5jCTIwMTItMDctMjMgMjE6NTA6MzYgKzAwMDAKQEAgLTEzOSw3 ICsxMzksNyBAQAogCiBzdGF0aWMgTGlzcF9PYmplY3QgUWdldF9maWxlX2J1ZmZlcjsKIAot c3RhdGljIExpc3BfT2JqZWN0IFFvdmVybGF5cDsKK0xpc3BfT2JqZWN0IFFvdmVybGF5cDsK IAogTGlzcF9PYmplY3QgUXByaW9yaXR5LCBRYmVmb3JlX3N0cmluZywgUWFmdGVyX3N0cmlu ZzsKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9kYXRhLmMnCi0tLSBzcmMvZGF0YS5jCTIw MTItMDctMTkgMjI6MzU6NTggKzAwMDAKKysrIHNyYy9kYXRhLmMJMjAxMi0wNy0yMyAyMTo1 MDozNiArMDAwMApAQCAtOTEsNyArOTEsOCBAQAogc3RhdGljIExpc3BfT2JqZWN0IFFjb21w aWxlZF9mdW5jdGlvbiwgUWZyYW1lOwogTGlzcF9PYmplY3QgUWJ1ZmZlcjsKIHN0YXRpYyBM aXNwX09iamVjdCBRY2hhcl90YWJsZSwgUWJvb2xfdmVjdG9yLCBRaGFzaF90YWJsZTsKLXN0 YXRpYyBMaXNwX09iamVjdCBRc3VicnAsIFFtYW55LCBRdW5ldmFsbGVkOworTGlzcF9PYmpl Y3QgUXN1YnJwOworc3RhdGljIExpc3BfT2JqZWN0IFFtYW55LCBRdW5ldmFsbGVkOwogTGlz cF9PYmplY3QgUWZvbnRfc3BlYywgUWZvbnRfZW50aXR5LCBRZm9udF9vYmplY3Q7CiBzdGF0 aWMgTGlzcF9PYmplY3QgUWRlZnVuOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Rpc3Bl eHRlcm4uaCcKLS0tIHNyYy9kaXNwZXh0ZXJuLmgJMjAxMi0wNy0xMyAwMzo1MDo1OCArMDAw MAorKysgc3JjL2Rpc3BleHRlcm4uaAkyMDEyLTA3LTEzIDAzOjUyOjUzICswMDAwCkBAIC0y Miw2ICsyMiw4IEBACiAjaWZuZGVmIERJU1BFWFRFUk5fSF9JTkNMVURFRAogI2RlZmluZSBE SVNQRVhURVJOX0hfSU5DTFVERUQKIAorI2luY2x1ZGUgImNoYXJhY3Rlci5oIgorCiAjaWZk ZWYgSEFWRV9YX1dJTkRPV1MKIAogI2luY2x1ZGUgPFgxMS9YbGliLmg+CkBAIC0yNjUsNiAr MjY3LDU1IEBACiAJCQkJR2x5cGhzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIFRoZSBn bHlwaCBkYXRhdHlwZSwgdXNlZCB0byByZXByZXNlbnQgY2hhcmFjdGVycyBvbiB0aGUgZGlz cGxheS4KKyAgIEl0IGNvbnNpc3RzIG9mIGEgY2hhciBjb2RlIGFuZCBhIGZhY2UgaWQuICAq LworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCBjaDsKKyAgaW50IGZhY2VfaWQ7Cit9IEdM WVBIOworCisvKiBSZXR1cm4gYSBnbHlwaCdzIGNoYXJhY3RlciBjb2RlLiAgKi8KK3N0YXRp YyBpbmxpbmUgaW50IEdMWVBIX0NIQVIgKEdMWVBIIGdseXBoKSB7IHJldHVybiBnbHlwaC5j aDsgfQorCisvKiBSZXR1cm4gYSBnbHlwaCdzIGZhY2UgSUQuICAqLworc3RhdGljIGlubGlu ZSBpbnQgR0xZUEhfRkFDRSAoR0xZUEggZ2x5cGgpIHsgcmV0dXJuIGdseXBoLmZhY2VfaWQ7 IH0KKworI2RlZmluZSBTRVRfR0xZUEhfQ0hBUihnbHlwaCwgY2hhcikgKChnbHlwaCkuY2gg PSAoY2hhcikpCisjZGVmaW5lIFNFVF9HTFlQSF9GQUNFKGdseXBoLCBmYWNlKSAoKGdseXBo KS5mYWNlX2lkID0gKGZhY2UpKQorI2RlZmluZSBTRVRfR0xZUEgoZ2x5cGgsIGNoYXIsIGZh Y2UpIFwKKyAgKChnbHlwaCkuY2ggPSAoY2hhciksIChnbHlwaCkuZmFjZV9pZCA9IChmYWNl KSkKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdmFsaWQgb25seSBpZiBHTFlQSF9DT0RFX1Ag KGdjKS4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitHTFlQSF9DT0RFX0NIQVIgKExpc3Bf T2JqZWN0IGdjKQoreworICByZXR1cm4gKENPTlNQIChnYykKKwkgID8gWElOVCAoWENBUiAo Z2MpKQorCSAgOiBYSU5UIChnYykgJiBNQVhfQ0hBUik7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50CitHTFlQSF9DT0RFX0ZBQ0UgKExpc3BfT2JqZWN0IGdjKQoreworICByZXR1cm4gQ09O U1AgKGdjKSA/IFhJTlQgKFhDRFIgKGdjKSkgOiBYSU5UIChnYykgPj4gQ0hBUkFDVEVSQklU UzsKK30KKworI2RlZmluZSBTRVRfR0xZUEhfRlJPTV9HTFlQSF9DT0RFKGdseXBoLCBnYykJ CQkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgaWYgKENPTlNQ IChnYykpCQkJCQkJCVwKKwlTRVRfR0xZUEggKGdseXBoLCBYSU5UIChYQ0FSIChnYykpLCBY SU5UIChYQ0RSIChnYykpKTsJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwlTRVRfR0xZUEgg KGdseXBoLCAoWElOVCAoZ2MpICYgKCgxIDw8IENIQVJBQ1RFUkJJVFMpLTEpKSwJXAorCQkg ICAoWElOVCAoZ2MpID4+IENIQVJBQ1RFUkJJVFMpKTsJCQlcCisgICAgfQkJCQkJCQkJCVwK KyAgd2hpbGUgKDApCisKKy8qIFRoZSBJRCBvZiB0aGUgbW9kZSBsaW5lIGhpZ2hsaWdodGlu ZyBmYWNlLiAgKi8KK2VudW0geyBHTFlQSF9NT0RFX0xJTkVfRkFDRSA9IDEgfTsKKwogLyog RW51bWVyYXRpb24gb2YgZ2x5cGggdHlwZXMuICBHbHlwaCBzdHJ1Y3R1cmVzIGNvbnRhaW4g YSB0eXBlIGZpZWxkCiAgICBjb250YWluaW5nIG9uZSBvZiB0aGUgZW51bWVyYXRvcnMgZGVm aW5lZCBoZXJlLiAgKi8KIApAQCAtMTc2Myw2ICsxODE0LDMwIEBACiAKICNlbmRpZiAvKiBu b3QgSEFWRV9XSU5ET1dfU1lTVEVNICovCiAKKy8qIFJldHVybiAxIGlmIEcgY29udGFpbnMg YSB2YWxpZCBjaGFyYWN0ZXIgY29kZS4gICovCitzdGF0aWMgaW5saW5lIGludAorR0xZUEhf Q0hBUl9WQUxJRF9QIChHTFlQSCBnKQoreworICByZXR1cm4gQ0hBUl9WQUxJRF9QIChHTFlQ SF9DSEFSIChnKSk7Cit9CisKKy8qIFRoZSBnbHlwaCBjb2RlIGZyb20gYSBkaXNwbGF5IHZl Y3RvciBtYXkgZWl0aGVyIGJlIGFuIGludGVnZXIgd2hpY2gKKyAgIGVuY29kZXMgYSBjaGFy IGNvZGUgaW4gdGhlIGxvd2VyIENIQVJBQ1RFUkJJVFMgYml0cyBhbmQgYSAodmVyeSBzbWFs bCkKKyAgIGZhY2UtaWQgaW4gdGhlIHVwcGVyIGJpdHMsIG9yIGl0IG1heSBiZSBhIGNvbnMg KENIQVIgLiBGQUNFLUlEKS4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitHTFlQSF9DT0RF X1AgKExpc3BfT2JqZWN0IGdjKQoreworICByZXR1cm4gKENPTlNQIChnYykKKwkgID8gKENI QVJBQ1RFUlAgKFhDQVIgKGdjKSkKKwkgICAgICYmIFJBTkdFRF9JTlRFR0VSUCAoMCwgWENE UiAoZ2MpLCBNQVhfRkFDRV9JRCkpCisJICA6IChSQU5HRURfSU5URUdFUlAKKwkgICAgICgw LCBnYywKKwkgICAgICAoTUFYX0ZBQ0VfSUQgPCBUWVBFX01BWElNVU0gKEVNQUNTX0lOVCkg Pj4gQ0hBUkFDVEVSQklUUworCSAgICAgICA/ICgoRU1BQ1NfSU5UKSBNQVhfRkFDRV9JRCA8 PCBDSEFSQUNURVJCSVRTKSB8IE1BWF9DSEFSCisJICAgICAgIDogVFlQRV9NQVhJTVVNIChF TUFDU19JTlQpKSkpKTsKK30KKwogLyogTm9uLXplcm8gbWVhbnMgZmFjZSBhdHRyaWJ1dGVz IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICByZWRpc3BsYXkuICBVc2Vk IGluIHJlZGlzcGxheV9pbnRlcm5hbC4gICovCiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMv ZXZhbC5jJwotLS0gc3JjL2V2YWwuYwkyMDEyLTA3LTIwIDA1OjI4OjAwICswMDAwCisrKyBz cmMvZXZhbC5jCTIwMTItMDctMjMgMjE6NTA6MzYgKzAwMDAKQEAgLTE5MTksNyArMTkxOSw3 IEBACiAgICAgICAgYW5kIGFzc3VtZWQgdGhlIGRvY3N0cmluZyB3aWxsIGJlIHByb3ZpZGVk IGJ5IFNuYXJmLWRvY3VtZW50YXRpb24sIHNvIGl0CiAgICAgICAgcGFzc2VkIHVzIDAgaW5z dGVhZC4gIEJ1dCB0aGF0IGxlYWRzIHRvIGFjY2lkZW50YWwgc2hhcmluZyBpbiBwdXJlY29w eSdzCiAgICAgICAgaGFzaC1jb25zaW5nLCBzbyB3ZSB1c2UgYSAoaG9wZWZ1bGx5KSB1bmlx dWUgaW50ZWdlciBpbnN0ZWFkLiAgKi8KLSAgICBkb2NzdHJpbmcgPSBtYWtlX251bWJlciAo WFVOVEFHIChmdW5jdGlvbiwgTGlzcF9TeW1ib2wpKTsKKyAgICBkb2NzdHJpbmcgPSBtYWtl X251bWJlciAoKGludHB0cl90KSBYVU5UQUcgKGZ1bmN0aW9uLCBMaXNwX1N5bWJvbCkpOwog ICByZXR1cm4gRmZzZXQgKGZ1bmN0aW9uLAogCQlGcHVyZWNvcHkgKGxpc3Q1IChRYXV0b2xv YWQsIGZpbGUsIGRvY3N0cmluZywKIAkJCQkgIGludGVyYWN0aXZlLCB0eXBlKSkpOwoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy9mbnMuYycKLS0tIHNyYy9mbnMuYwkyMDEyLTA3LTIwIDA3 OjI5OjA0ICswMDAwCisrKyBzcmMvZm5zLmMJMjAxMi0wNy0yMyAyMTo1MDozNiArMDAwMApA QCAtMzM1NCw3ICszMzU0LDggQEAKIAogLyogVmFyaW91cyBzeW1ib2xzLiAgKi8KIAotc3Rh dGljIExpc3BfT2JqZWN0IFFoYXNoX3RhYmxlX3AsIFFrZXksIFF2YWx1ZTsKK0xpc3BfT2Jq ZWN0IFFoYXNoX3RhYmxlX3A7CitzdGF0aWMgTGlzcF9PYmplY3QgUWtleSwgUXZhbHVlOwog TGlzcF9PYmplY3QgUWVxLCBRZXFsLCBRZXF1YWw7CiBMaXNwX09iamVjdCBRQ3Rlc3QsIFFD c2l6ZSwgUUNyZWhhc2hfc2l6ZSwgUUNyZWhhc2hfdGhyZXNob2xkLCBRQ3dlYWtuZXNzOwog c3RhdGljIExpc3BfT2JqZWN0IFFoYXNoX3RhYmxlX3Rlc3QsIFFrZXlfb3JfdmFsdWUsIFFr ZXlfYW5kX3ZhbHVlOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9saXNwLmgnCi0tLSBzcmMv bGlzcC5oCTIwMTItMDctMjMgMTE6MTU6NDMgKzAwMDAKKysrIHNyYy9saXNwLmgJMjAxMi0w Ny0yNCAwMTo1NzoxOCArMDAwMApAQCAtMzIsMTAgKzMyLDEwIEBACiAKICNpZmRlZiBHQ19D SEVDS19DT05TX0xJU1QKIGV4dGVybiB2b2lkIGNoZWNrX2NvbnNfbGlzdCAodm9pZCk7Ci0j ZGVmaW5lIENIRUNLX0NPTlNfTElTVCgpIGNoZWNrX2NvbnNfbGlzdCAoKQogI2Vsc2UKLSNk ZWZpbmUgQ0hFQ0tfQ09OU19MSVNUKCkgKCh2b2lkKSAwKQorc3RhdGljIGlubGluZSB2b2lk IGNoZWNrX2NvbnNfbGlzdCAodm9pZCkgeyB9CiAjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9p ZCBDSEVDS19DT05TX0xJU1QgKHZvaWQpIHsgY2hlY2tfY29uc19saXN0ICgpOyB9CiAKIC8q IFRlbXBvcmFyaWx5IGRpc2FibGUgd2lkZXItdGhhbi1wb2ludGVyIGludGVnZXJzIHVudGls IHRoZXkncmUgdGVzdGVkIG1vcmUuCiAgICBCdWlsZCB3aXRoIENGTEFHUz0nLURXSURFX0VN QUNTX0lOVCcgdG8gdHJ5IHRoZW0gb3V0LiAgKi8KQEAgLTQ1LDIyICs0NSwyNCBAQAogICAg RU1BQ1NfSU5UX01BWCAtIG1heGltdW0gdmFsdWUgb2YgRU1BQ1NfSU5UOyBjYW4gYmUgdXNl ZCBpbiAjaWYKICAgIHBJIC0gcHJpbnRmIGxlbmd0aCBtb2RpZmllciBmb3IgRU1BQ1NfSU5U CiAgICBFTUFDU19VSU5UIC0gdW5zaWduZWQgdmFyaWFudCBvZiBFTUFDU19JTlQgKi8KLSNp Zm5kZWYgRU1BQ1NfSU5UCisjaWZuZGVmIEVNQUNTX0lOVF9NQVgKICMgaWYgTE9OR19NQVgg PCBMTE9OR19NQVggJiYgZGVmaW5lZCBXSURFX0VNQUNTX0lOVAotIyAgZGVmaW5lIEVNQUNT X0lOVCBsb25nIGxvbmcKK3R5cGVkZWYgbG9uZyBsb25nIGludCBFTUFDU19JTlQ7Cit0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgRU1BQ1NfVUlOVDsKICMgIGRlZmluZSBFTUFD U19JTlRfTUFYIExMT05HX01BWAogIyAgZGVmaW5lIHBJICJsbCIKICMgZWxpZiBJTlRfTUFY IDwgTE9OR19NQVgKLSMgIGRlZmluZSBFTUFDU19JTlQgbG9uZwordHlwZWRlZiBsb25nIGlu dCBFTUFDU19JTlQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IEVNQUNTX1VJTlQ7CiAj ICBkZWZpbmUgRU1BQ1NfSU5UX01BWCBMT05HX01BWAogIyAgZGVmaW5lIHBJICJsIgogIyBl bHNlCi0jICBkZWZpbmUgRU1BQ1NfSU5UIGludAordHlwZWRlZiBpbnQgRU1BQ1NfSU5UOwor dHlwZWRlZiB1bnNpZ25lZCBpbnQgRU1BQ1NfVUlOVDsKICMgIGRlZmluZSBFTUFDU19JTlRf TUFYIElOVF9NQVgKICMgIGRlZmluZSBwSSAiIgogIyBlbmRpZgogI2VuZGlmCi0jZGVmaW5l IEVNQUNTX1VJTlQgdW5zaWduZWQgRU1BQ1NfSU5UCiAKIC8qIE51bWJlciBvZiBiaXRzIGlu IHNvbWUgbWFjaGluZSBpbnRlZ2VyIHR5cGVzLiAgKi8KIGVudW0KQEAgLTE1Myw4ICsxNTUs MTAgQEAKICAgIHZhcmlhYmxlIFZBUiBvZiB0eXBlIFRZUEUgd2l0aCB0aGUgYWRkZWQgcmVx dWlyZW1lbnQgdGhhdCBpdCBiZQogICAgVFlQRUJJVFMtYWxpZ25lZC4gICovCiAKKy8qIE51 bWJlciBvZiBiaXRzIGluIGEgTGlzcF9PYmVjdCB0YWcuICBUaGlzIGNhbiBiZSB1c2VkIGlu ICNpZi4gICovCiAjZGVmaW5lIEdDVFlQRUJJVFMgMwotI2RlZmluZSBWQUxCSVRTIChCSVRT X1BFUl9FTUFDU19JTlQgLSBHQ1RZUEVCSVRTKQorCitlbnVtIHsgVkFMQklUUyA9IEJJVFNf UEVSX0VNQUNTX0lOVCAtIEdDVFlQRUJJVFMgfTsKIAogLyogVGhlIG1heGltdW0gdmFsdWUg dGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgRU1BQ1NfSU5ULCBhc3N1bWluZyBhbGwKICAgIGJp dHMgb3RoZXIgdGhhbiB0aGUgdHlwZSBiaXRzIGNvbnRyaWJ1dGUgdG8gYSBub25uZWdhdGl2 ZSBzaWduZWQgdmFsdWUuCkBAIC0yMTAsMjAgKzIxNCw3MiBAQAogI2VuZGlmCiAKIAorLyog V2hlbiBjb21waWxpbmcgdmlhIEdDQyB3aXRob3V0IG9wdGltaXphdGlvbiwgaW5saW5lIGEg ZmV3IGZ1bmN0aW9ucworICAgbWFudWFsbHksIGFzIEVtYWNzIGlzIHRvbyBzbG93IG90aGVy d2lzZS4gIFRoZXJlJ3Mgbm8gbmVlZCB0bworICAgaW5saW5lIGV2ZXJ5dGhpbmcsIGp1c3Qg dGhlIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGNhdXNlIGEgc2VyaW91cworICAgcGVyZm9ybWFu Y2UgcHJvYmxlbSB3aGVuIGRlYnVnZ2luZy4gIFRvIGRpc2FibGUgdGhpcyBoYW5kLW9wdGlt aXphdGlvbiwKKyAgIGNvbXBpbGUgd2l0aCAtRElOTElOSU5HPTAuCisKKyAgIENvbW1lbnRh cnkgZm9yIHRoZXNlIG1hY3JvcyBjYW4gYmUgZm91bmQgbmVhciB0aGVpciBjb3JyZXNwb25k aW5nCisgICBmdW5jdGlvbnMsIGJlbG93LiAgKi8KKyNpZiAoZGVmaW5lZCBfX05PX0lOTElO RV9fIFwKKyAgICAgJiYgISBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhIGRlZmluZWQgX19P UFRJTUlaRV9TSVpFX18gXAorICAgICAmJiAhIChkZWZpbmVkIElOTElOSU5HICYmICEgSU5M SU5JTkcpKQorIyBpZiBDSEVDS19MSVNQX09CSkVDVF9UWVBFCisjICBkZWZpbmUgWExJKG8p IChvKS5pCisjICBkZWZpbmUgWElMKGkpIChMaXNwX09iamVjdCkgeyBpIH0KKyMgZWxzZQor IyAgZGVmaW5lIFhMSShvKSAobykKKyMgIGRlZmluZSBYSUwoaSkgKGkpCisjIGVuZGlmCisj IGRlZmluZSBDSEVDS19UWVBFKG9rLCBReHh4cCwgeCkgXAorICAgICgodm9pZCkgKChvaykg fHwgd3JvbmdfdHlwZV9hcmd1bWVudCAoUXh4eHAsIHgpKSkKKyMgZGVmaW5lIENIRUNLX0xJ U1RfQ09OUyh4LCB5KSBDSEVDS19UWVBFIChDT05TUCAoeCksIFFsaXN0cCwgeSkKKyMgZGVm aW5lIENIRUNLX05VTUJFUih4KSBDSEVDS19UWVBFIChJTlRFR0VSUCAoeCksIFFpbnRlZ2Vy cCwgeCkKKyMgZGVmaW5lIENIRUNLX1NZTUJPTCh4KSBDSEVDS19UWVBFIChTWU1CT0xQICh4 KSwgUXN5bWJvbHAsIHgpCisjIGRlZmluZSBDT05TUCh4KSAoWFRZUEUgKHgpID09IExpc3Bf Q29ucykKKyMgZGVmaW5lIEVRKGEsIGIpIChYSEFTSCAoYSkgPT0gWEhBU0ggKGIpKQorIyBk ZWZpbmUgRkxPQVRQKHgpIChYVFlQRSAoeCkgPT0gTGlzcF9GbG9hdCkKKyMgZGVmaW5lIElO VEVHRVJQKHgpIExJU1BfSU5UX1RBR19QIChYVFlQRSAoeCkpCisjIGRlZmluZSBMSVNQX0lO VF9UQUdfUCh4KSAoKCh4KSAmIH5MaXNwX0ludDEpID09IDApCisjIGRlZmluZSBNQVJLRVJQ KHgpIChNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfTWFya2VyKQor IyBkZWZpbmUgTUlTQ1AoeCkgKFhUWVBFICh4KSA9PSBMaXNwX01pc2MpCisjIGRlZmluZSBO SUxQKHgpIEVRICh4LCBRbmlsKQorIyBkZWZpbmUgU0VUX1NZTUJPTF9WQUwoc3ltLCB2KSBc CisgICAgKGVhc3NlcnQgKChzeW0pLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpLCAo c3ltKS0+dmFsLnZhbHVlID0gKHYpKQorIyBkZWZpbmUgU1lNQk9MX0NPTlNUQU5UX1Aoc3lt KSAoWFNZTUJPTCAoc3ltKS0+Y29uc3RhbnQpCisjIGRlZmluZSBTWU1CT0xfVkFMKHN5bSkJ CQkJCQlcCisgICAgKGVhc3NlcnQgKChzeW0pLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5W QUwpLCAoc3ltKS0+dmFsLnZhbHVlKQorIyBkZWZpbmUgU1lNQk9MUCh4KSAoWFRZUEUgKHgp ID09IExpc3BfU3ltYm9sKQorIyBkZWZpbmUgVkVDVE9STElLRVAoeCkgKFhUWVBFICh4KSA9 PSBMaXNwX1ZlY3Rvcmxpa2UpCisjIGRlZmluZSBYQ0FSKGMpIFhDQVJfQVNfTFZBTFVFIChj KQorIyBkZWZpbmUgWENEUihjKSBYQ0RSX0FTX0xWQUxVRSAoYykKKyMgZGVmaW5lIFhDT05T KGEpIFwKKyAgICAoZWFzc2VydCAoQ09OU1AgKGEpKSwgKHN0cnVjdCBMaXNwX0NvbnMgKikg WFVOVEFHIChhLCBMaXNwX0NvbnMpKQorIyBkZWZpbmUgWEhBU0gobykgWExJIChvKQorIyBk ZWZpbmUgWFBOVFIoYSkgKCh2b2lkICopIChpbnRwdHJfdCkgKChYTEkgKGEpICYgVkFMTUFT SykgfCBEQVRBX1NFR19CSVRTKSkKKyMgZGVmaW5lIFhTWU1CT0woYSkgXAorICAgIChlYXNz ZXJ0IChTWU1CT0xQIChhKSksIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKikgWFVOVEFHIChhLCBM aXNwX1N5bWJvbCkpCisjIGlmIFVTRV9MU0JfVEFHCisjICBkZWZpbmUgbWFrZV9udW1iZXIo bikgWElMICgoRU1BQ1NfSU5UKSAobikgPDwgSU5UVFlQRUJJVFMpCisjICBkZWZpbmUgWEZB U1RJTlQoYSkgWElOVCAoYSkKKyMgIGRlZmluZSBYSU5UKGEpIChYTEkgKGEpID4+IElOVFRZ UEVCSVRTKQorIyAgZGVmaW5lIFhUWVBFKGEpICgoZW51bSBMaXNwX1R5cGUpIChYTEkgKGEp ICYgflZBTE1BU0spKQorIyAgZGVmaW5lIFhVTlRBRyhhLCB0eXBlKSAoKHZvaWQgKikgKFhM SSAoYSkgLSAodHlwZSkpKQorIyBlbmRpZgorI2VuZGlmCisKKwogLyogRGVmaW5lIHRoZSBm dW5kYW1lbnRhbCBMaXNwIGRhdGEgc3RydWN0dXJlcy4gICovCiAKIC8qIFRoaXMgaXMgdGhl IHNldCBvZiBMaXNwIGRhdGEgdHlwZXMuICAqLwogCiAvKiBMaXNwIGludGVnZXJzIHVzZSAy IHRhZ3MsIHRvIGdpdmUgdGhlbSBvbmUgZXh0cmEgYml0LCB0aHVzCiAgICBleHRlbmRpbmcg dGhlaXIgcmFuZ2UgZnJvbSwgZS5nLiwgLTJeMjguLjJeMjgtMSB0byAtMl4yOS4uMl4yOS0x LiAgKi8KLSNkZWZpbmUgSU5UVFlQRUJJVFMgKEdDVFlQRUJJVFMgLSAxKQotI2RlZmluZSBG SVhOVU1fQklUUyAoVkFMQklUUyArIDEpCitlbnVtIHsgSU5UVFlQRUJJVFMgPSBHQ1RZUEVC SVRTIC0gMSB9OworZW51bSB7IEZJWE5VTV9CSVRTID0gVkFMQklUUyArIDEgfTsKICNkZWZp bmUgSU5UTUFTSyAoRU1BQ1NfSU5UX01BWCA+PiAoSU5UVFlQRUJJVFMgLSAxKSkKLSNkZWZp bmUgTElTUF9JTlRfVEFHIExpc3BfSW50MAogI2RlZmluZSBjYXNlX0xpc3BfSW50IGNhc2Ug TGlzcF9JbnQwOiBjYXNlIExpc3BfSW50MQotI2RlZmluZSBMSVNQX0lOVDFfVEFHIChVU0Vf TFNCX1RBRyA/IDEgPDwgSU5UVFlQRUJJVFMgOiAxKQotI2RlZmluZSBMSVNQX1NUUklOR19U QUcgKDUgLSBMSVNQX0lOVDFfVEFHKQotI2RlZmluZSBMSVNQX0lOVF9UQUdfUCh4KSAoKCh4 KSAmIH5MSVNQX0lOVDFfVEFHKSA9PSAwKQogCiAvKiBTdG9sZW4gZnJvbSBHREIuICBUaGUg b25seSBrbm93biBjb21waWxlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydAogICAgZW51bXMgaW4g Yml0ZmllbGRzIGlzIE1TVkMuICAqLwpAQCAtMjM4LDcgKzI5NCw3IEBACiAgIHsKICAgICAv KiBJbnRlZ2VyLiAgWElOVCAob2JqKSBpcyB0aGUgaW50ZWdlciB2YWx1ZS4gICovCiAgICAg TGlzcF9JbnQwID0gMCwKLSAgICBMaXNwX0ludDEgPSBMSVNQX0lOVDFfVEFHLAorICAgIExp c3BfSW50MSA9IFVTRV9MU0JfVEFHID8gNCA6IDEsCiAKICAgICAvKiBTeW1ib2wuICBYU1lN Qk9MIChvYmplY3QpIHBvaW50cyB0byBhIHN0cnVjdCBMaXNwX1N5bWJvbC4gICovCiAgICAg TGlzcF9TeW1ib2wgPSAyLApAQCAtMjQ5LDcgKzMwNSw3IEBACiAKICAgICAvKiBTdHJpbmcu ICBYU1RSSU5HIChvYmplY3QpIHBvaW50cyB0byBhIHN0cnVjdCBMaXNwX1N0cmluZy4KICAg ICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIGFuZCBpdHMgY29udGVudHMsIGFyZSBz dG9yZWQgdGhlcmVpbi4gICovCi0gICAgTGlzcF9TdHJpbmcgPSBMSVNQX1NUUklOR19UQUcs CisgICAgTGlzcF9TdHJpbmcgPSBVU0VfTFNCX1RBRyA/IDEgOiA0LAogCiAgICAgLyogVmVj dG9yIG9mIExpc3Agb2JqZWN0cywgb3Igc29tZXRoaW5nIHJlc2VtYmxpbmcgaXQuCiAgICAg ICAgWFZFQ1RPUiAob2JqZWN0KSBwb2ludHMgdG8gYSBzdHJ1Y3QgTGlzcF9WZWN0b3IsIHdo aWNoIGNvbnRhaW5zCkBAIC0yNjMsNiArMzE5LDExIEBACiAgICAgTGlzcF9GbG9hdCA9IDcs CiAgIH07CiAKKy8qIEFuIG9sZGVyIG5hbWUgZm9yIExpc3BfSW50MC4gICovCitlbnVtIHsg TElTUF9JTlRfVEFHID0gTGlzcF9JbnQwIH07CisKK3N0YXRpYyBpbmxpbmUgaW50IChMSVNQ X0lOVF9UQUdfUCkgKGludCB4KSB7IHJldHVybiAoeCAmIH5MaXNwX0ludDEpID09IDA7IH0K KwogLyogVGhpcyBpcyB0aGUgc2V0IG9mIGRhdGEgdHlwZXMgdGhhdCBzaGFyZSBhIGNvbW1v biBzdHJ1Y3R1cmUuCiAgICBUaGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgaXMg YSB0eXBlIGNvZGUgZnJvbSB0aGlzIHNldC4KICAgIFRoZSBlbnVtIHZhbHVlcyBhcmUgYXJi aXRyYXJ5LCBidXQgd2UnbGwgdXNlIGxhcmdlIG51bWJlcnMgdG8gbWFrZSBpdApAQCAtMjk3 LDIwICszNTgsMTUgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgeyBFTUFDU19JTlQgaTsgfSBMaXNw X09iamVjdDsKIAotI2RlZmluZSBYTEkobykgKG8pLmkKK3N0YXRpYyBpbmxpbmUgRU1BQ1Nf SU5UIChYTEkpIChMaXNwX09iamVjdCBvKSB7IHJldHVybiBvLmk7IH0KKwogc3RhdGljIGlu bGluZSBMaXNwX09iamVjdAotWElMIChFTUFDU19JTlQgaSkKKyhYSUwpIChFTUFDU19JTlQg aSkKIHsKICAgTGlzcF9PYmplY3QgbyA9IHsgaSB9OwogICByZXR1cm4gbzsKIH0KIAotc3Rh dGljIGlubGluZSBMaXNwX09iamVjdAotTElTUF9NQUtFX1JWQUxVRSAoTGlzcF9PYmplY3Qg bykKLXsKLSAgICByZXR1cm4gbzsKLX0KLQogI2RlZmluZSBMSVNQX0lOSVRJQUxMWV9aRVJP IHswfQogCiAjZWxzZSAvKiBDSEVDS19MSVNQX09CSkVDVF9UWVBFICovCkBAIC0zMTgsOSAr Mzc0LDggQEAKIC8qIElmIGEgc3RydWN0IHR5cGUgaXMgbm90IHdhbnRlZCwgZGVmaW5lIExp c3BfT2JqZWN0IGFzIGp1c3QgYSBudW1iZXIuICAqLwogCiB0eXBlZGVmIEVNQUNTX0lOVCBM aXNwX09iamVjdDsKLSNkZWZpbmUgWExJKG8pIChvKQotI2RlZmluZSBYSUwoaSkgKGkpCi0j ZGVmaW5lIExJU1BfTUFLRV9SVkFMVUUobykgKDArKG8pKQorc3RhdGljIGlubGluZSBFTUFD U19JTlQgKFhMSSkgKExpc3BfT2JqZWN0IG8pIHsgcmV0dXJuIG87IH0KK3N0YXRpYyBpbmxp bmUgTGlzcF9PYmplY3QgKFhJTCkgKEVNQUNTX0lOVCBpKSB7IHJldHVybiBpOyB9CiAjZGVm aW5lIExJU1BfSU5JVElBTExZX1pFUk8gMAogI2VuZGlmIC8qIENIRUNLX0xJU1BfT0JKRUNU X1RZUEUgKi8KIApAQCAtMzY4LDg5ICs0MjMsMTE5IEBACiAgICBvbmx5IHRoZSBudW1iZXIg b2YgTGlzcF9PYmplY3QgZmllbGRzICh0aGF0IG5lZWQgdG8gYmUgdHJhY2VkIGJ5IHRoZSBH QykuCiAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3 aGljaCBwbGFjZXMgZXh0cmEKICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVu ZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KLSNkZWZpbmUgUFNFVURPVkVDVE9SX1NJWkVfQklU UyAxNgotI2RlZmluZSBQU0VVRE9WRUNUT1JfU0laRV9NQVNLICgoMSA8PCBQU0VVRE9WRUNU T1JfU0laRV9CSVRTKSAtIDEpCi0jZGVmaW5lIFBWRUNfVFlQRV9NQVNLICgweDBmZmYgPDwg UFNFVURPVkVDVE9SX1NJWkVfQklUUykKK2VudW0KKyAgeworICAgIFBTRVVET1ZFQ1RPUl9T SVpFX0JJVFMgPSAxNiwKKyAgICBQU0VVRE9WRUNUT1JfU0laRV9NQVNLID0gKDEgPDwgUFNF VURPVkVDVE9SX1NJWkVfQklUUykgLSAxLAorICAgIFBWRUNfVFlQRV9NQVNLID0gMHhmZmYg PDwgUFNFVURPVkVDVE9SX1NJWkVfQklUUworICB9OwogCiAvKiBOdW1iZXIgb2YgYml0cyB0 byBwdXQgaW4gZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9u CiAgICBvZiBib29sIHZlY3RvcnMuICBUaGlzIHNob3VsZCBub3QgdmFyeSBhY3Jvc3MgaW1w bGVtZW50YXRpb25zLiAgKi8KLSNkZWZpbmUgQk9PTF9WRUNUT1JfQklUU19QRVJfQ0hBUiA4 Ci0MCi0vKiBUaGVzZSBtYWNyb3MgZXh0cmFjdCB2YXJpb3VzIHNvcnRzIG9mIHZhbHVlcyBm cm9tIGEgTGlzcF9PYmplY3QuCitlbnVtIHsgQk9PTF9WRUNUT1JfQklUU19QRVJfQ0hBUiA9 IDggfTsKKwwKKy8qIERBVEFfU0VHX0JJVFMgZm9yY2VzIGV4dHJhIGJpdHMgdG8gYmUgb3In ZCBpbiB3aXRoIGFueSBwb2ludGVycworICAgd2hpY2ggd2VyZSBzdG9yZWQgaW4gYSBMaXNw X09iamVjdCAqLworI2lmbmRlZiBEQVRBX1NFR19CSVRTCisjIGRlZmluZSBEQVRBX1NFR19C SVRTIDAKKyNlbmRpZgorDAorLyogVGhlc2UgZnVuY3Rpb25zIGV4dHJhY3QgdmFyaW91cyBz b3J0cyBvZiB2YWx1ZXMgZnJvbSBhIExpc3BfT2JqZWN0LgogIEZvciBleGFtcGxlLCBpZiB0 ZW0gaXMgYSBMaXNwX09iamVjdCB3aG9zZSB0eXBlIGlzIExpc3BfQ29ucywKICBYQ09OUyAo dGVtKSBpcyB0aGUgc3RydWN0IExpc3BfQ29ucyAqIHBvaW50aW5nIHRvIHRoZSBtZW1vcnkg Zm9yIHRoYXQgY29ucy4gICovCiAKIC8qIFJldHVybiBhIHBlcmZlY3QgaGFzaCBvZiB0aGUg TGlzcF9PYmplY3QgcmVwcmVzZW50YXRpb24uICAqLwotI2RlZmluZSBYSEFTSChhKSBYTEkg KGEpCi0KLSNpZiBVU0VfTFNCX1RBRwotCi0jZGVmaW5lIFRZUEVNQVNLICgoMSA8PCBHQ1RZ UEVCSVRTKSAtIDEpCi0jZGVmaW5lIFhUWVBFKGEpICgoZW51bSBMaXNwX1R5cGUpIChYTEkg KGEpICYgVFlQRU1BU0spKQotI2RlZmluZSBYSU5UKGEpIChYTEkgKGEpID4+IElOVFRZUEVC SVRTKQotI2RlZmluZSBYVUlOVChhKSAoKEVNQUNTX1VJTlQpIFhMSSAoYSkgPj4gSU5UVFlQ RUJJVFMpCi0jZGVmaW5lIG1ha2VfbnVtYmVyKE4pIFhJTCAoKEVNQUNTX0lOVCkgKE4pIDw8 IElOVFRZUEVCSVRTKQotI2RlZmluZSBYU0VUKHZhciwgdHlwZSwgcHRyKQkJCQkJCSAgIFwK LSAgKGVhc3NlcnQgKFhUWVBFIChYSUwgKChpbnRwdHJfdCkgKHB0cikpKSA9PSAwKSwgLyog Q2hlY2sgYWxpZ25tZW50LiAgKi8gIFwKLSAgICh2YXIpID0gWElMICgodHlwZSkgfCAoaW50 cHRyX3QpIChwdHIpKSkKLQotI2RlZmluZSBYUE5UUihhKSAoKGludHB0cl90KSAoWExJIChh KSAmIH5UWVBFTUFTSykpCi0jZGVmaW5lIFhVTlRBRyhhLCB0eXBlKSAoKGludHB0cl90KSAo WExJIChhKSAtICh0eXBlKSkpCi0KLSNlbHNlICAvKiBub3QgVVNFX0xTQl9UQUcgKi8KLQot I2RlZmluZSBWQUxNQVNLIFZBTF9NQVgKLQotI2RlZmluZSBYVFlQRShhKSAoKGVudW0gTGlz cF9UeXBlKSAoKEVNQUNTX1VJTlQpIFhMSSAoYSkgPj4gVkFMQklUUykpCi0KLS8qIEZvciBp bnRlZ2VycyBrbm93biB0byBiZSBwb3NpdGl2ZSwgWEZBU1RJTlQgcHJvdmlkZXMgZmFzdCBy ZXRyaWV2YWwKLSAgIGFuZCBYU0VURkFTVElOVCBwcm92aWRlcyBmYXN0IHN0b3JhZ2UuICBU aGlzIHRha2VzIGFkdmFudGFnZSBvZiB0aGUKLSAgIGZhY3QgdGhhdCBMaXNwIGludGVnZXJz IGhhdmUgemVyby1iaXRzIGluIHRoZWlyIHRhZ3MuICAqLwotI2RlZmluZSBYRkFTVElOVChh KSAoWExJIChhKSArIDApCi0jZGVmaW5lIFhTRVRGQVNUSU5UKGEsIGIpICgoYSkgPSBYSUwg KGIpKQotCi0vKiBFeHRyYWN0IHRoZSB2YWx1ZSBvZiBhIExpc3BfT2JqZWN0IGFzIGEgKHVu KXNpZ25lZCBpbnRlZ2VyLiAgKi8KLQotI2RlZmluZSBYSU5UKGEpIChYTEkgKGEpIDw8IElO VFRZUEVCSVRTID4+IElOVFRZUEVCSVRTKQotI2RlZmluZSBYVUlOVChhKSAoKEVNQUNTX1VJ TlQpIChYTEkgKGEpICYgSU5UTUFTSykpCi0jZGVmaW5lIG1ha2VfbnVtYmVyKE4pIFhJTCAo KEVNQUNTX0lOVCkgKE4pICYgSU5UTUFTSykKLQotI2RlZmluZSBYU0VUKHZhciwgdHlwZSwg cHRyKQkJCQkgICAgICBcCi0gICgodmFyKSA9IFhJTCAoKEVNQUNTX0lOVCkgKChFTUFDU19V SU5UKSAodHlwZSkgPDwgVkFMQklUUykgIFwKLQkJKyAoKGludHB0cl90KSAocHRyKSAmIFZB TE1BU0spKSkKLQotI2lmZGVmIERBVEFfU0VHX0JJVFMKLS8qIERBVEFfU0VHX0JJVFMgZm9y Y2VzIGV4dHJhIGJpdHMgdG8gYmUgb3InZCBpbiB3aXRoIGFueSBwb2ludGVycwotICAgd2hp Y2ggd2VyZSBzdG9yZWQgaW4gYSBMaXNwX09iamVjdCAqLwotI2RlZmluZSBYUE5UUihhKSAo KHVpbnRwdHJfdCkgKChYTEkgKGEpICYgVkFMTUFTSykpIHwgREFUQV9TRUdfQklUUykpCi0j ZWxzZQotI2RlZmluZSBYUE5UUihhKSAoKHVpbnRwdHJfdCkgKFhMSSAoYSkgJiBWQUxNQVNL KSkKLSNlbmRpZgotCi0jZW5kaWYgLyogbm90IFVTRV9MU0JfVEFHICovCi0KLS8qIEZvciBp bnRlZ2VycyBrbm93biB0byBiZSBwb3NpdGl2ZSwgWEZBU1RJTlQgc29tZXRpbWVzIHByb3Zp ZGVzCi0gICBmYXN0ZXIgcmV0cmlldmFsIGFuZCBYU0VURkFTVElOVCBwcm92aWRlcyBmYXN0 ZXIgc3RvcmFnZS4KLSAgIElmIG5vdCwgZmFsbGJhY2sgb24gdGhlIG5vbi1hY2NlbGVyYXRl ZCBwYXRoLiAgKi8KLSNpZm5kZWYgWEZBU1RJTlQKLSMgZGVmaW5lIFhGQVNUSU5UKGEpIChY SU5UIChhKSkKLSMgZGVmaW5lIFhTRVRGQVNUSU5UKGEsIGIpIChYU0VUSU5UIChhLCBiKSkK LSNlbmRpZgotCi0vKiBFeHRyYWN0IHRoZSBwb2ludGVyIHZhbHVlIG9mIHRoZSBMaXNwIG9i amVjdCBBLCB1bmRlciB0aGUKLSAgIGFzc3VtcHRpb24gdGhhdCBBJ3MgdHlwZSBpcyBUWVBF LiAgVGhpcyBpcyBhIGZhbGxiYWNrCi0gICBpbXBsZW1lbnRhdGlvbiBpZiBub3RoaW5nIGZh c3RlciBpcyBhdmFpbGFibGUuICAqLwotI2lmbmRlZiBYVU5UQUcKLSMgZGVmaW5lIFhVTlRB RyhhLCB0eXBlKSBYUE5UUiAoYSkKLSNlbmRpZgotCi0jZGVmaW5lIEVRKHgsIHkpIChYSEFT SCAoeCkgPT0gWEhBU0ggKHkpKQorc3RhdGljIGlubGluZSBFTUFDU19JTlQgKFhIQVNIKSAo TGlzcF9PYmplY3QgbykgeyByZXR1cm4gWExJIChvKTsgfQorCisjZGVmaW5lIFZBTE1BU0sg KFVTRV9MU0JfVEFHID8gLSAoMSA8PCBHQ1RZUEVCSVRTKSA6IFZBTF9NQVgpCiAKIC8qIExh cmdlc3QgYW5kIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgZml4bnVtIHZhbHVlcy4gIFRoZXNl IGFyZSB0aGUgQwogICAgdmFsdWVzLiAgKi8KICNkZWZpbmUgTU9TVF9QT1NJVElWRV9GSVhO VU0gKEVNQUNTX0lOVF9NQVggPj4gSU5UVFlQRUJJVFMpCiAjZGVmaW5lIE1PU1RfTkVHQVRJ VkVfRklYTlVNICgtMSAtIE1PU1RfUE9TSVRJVkVfRklYTlVNKQogCitzdGF0aWMgaW5saW5l IGVudW0gTGlzcF9UeXBlCisoWFRZUEUpIChMaXNwX09iamVjdCBhKQoreworICBFTUFDU19V SU5UIGkgPSBYTEkgKGEpOworICByZXR1cm4gVVNFX0xTQl9UQUcgPyBpICYgflZBTE1BU0sg OiBpID4+IFZBTEJJVFM7Cit9CisKKy8qIEV4dHJhY3QgdGhlIHZhbHVlIG9mIGEgTGlzcF9P YmplY3QgYXMgYSBzaWduZWQgaW50ZWdlci4gICovCitzdGF0aWMgaW5saW5lIEVNQUNTX0lO VAorKFhJTlQpIChMaXNwX09iamVjdCBhKQoreworICBFTUFDU19JTlQgaSA9IFhMSSAoYSk7 CisgIHJldHVybiAoVVNFX0xTQl9UQUcgPyBpIDogaSA8PCBJTlRUWVBFQklUUykgPj4gSU5U VFlQRUJJVFM7Cit9CisKKy8qIExpa2UgWElOVCAoQSksIGJ1dCBtYXkgYmUgZmFzdGVyLiAg QSBtdXN0IGJlIG5vbm5lZ2F0aXZlLiAgVGhpcyB0YWtlcworICAgYWR2YW50YWdlIG9mIHRo ZSBmYWN0IHRoYXQgTGlzcCBpbnRlZ2VycyBoYXZlIHplcm8tYml0cyBpbiB0aGVpciB0YWdz LiAgKi8KK3N0YXRpYyBpbmxpbmUgRU1BQ1NfSU5UCisoWEZBU1RJTlQpIChMaXNwX09iamVj dCBhKQoreworICBFTUFDU19JTlQgbiA9IFVTRV9MU0JfVEFHID8gWElOVCAoYSkgOiBYTEkg KGEpID4+IElOVFRZUEVCSVRTOworICBlYXNzZXJ0ICgwIDw9IG4pOworICByZXR1cm4gbjsK K30KKworLyogRXh0cmFjdCB0aGUgdmFsdWUgb2YgYSBMaXNwX09iamVjdCBhcyBhbiB1bnNp Z25lZCBpbnRlZ2VyLiAgKi8KK3N0YXRpYyBpbmxpbmUgRU1BQ1NfVUlOVAorWFVJTlQgKExp c3BfT2JqZWN0IGEpCit7CisgIEVNQUNTX1VJTlQgaSA9IFhMSSAoYSk7CisgIHJldHVybiBV U0VfTFNCX1RBRyA/IGkgPj4gSU5UVFlQRUJJVFMgOiBpICYgSU5UTUFTSzsKK30KKworc3Rh dGljIGlubGluZSBMaXNwX09iamVjdAorKG1ha2VfbnVtYmVyKSAoRU1BQ1NfSU5UIG4pCit7 CisgIHJldHVybiBYSUwgKFVTRV9MU0JfVEFHID8gbiA8PCBJTlRUWVBFQklUUyA6IG4gJiBJ TlRNQVNLKTsKK30KKworLyogTGlrZSBtYWtlX251bWJlciAoTiksIGJ1dCBtYXkgYmUgZmFz dGVyLiAgTiBtdXN0IGJlIGluIG5vbm5lZ2F0aXZlIHJhbmdlLiAgKi8KK3N0YXRpYyBpbmxp bmUgTGlzcF9PYmplY3QKK21ha2VfbmF0bnVtIChFTUFDU19JTlQgbikKK3sKKyAgZWFzc2Vy dCAoMCA8PSBuICYmIG4gPD0gTU9TVF9QT1NJVElWRV9GSVhOVU0pOworICByZXR1cm4gVVNF X0xTQl9UQUcgPyBtYWtlX251bWJlciAobikgOiBYSUwgKG4pOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgKgorKFhQTlRSKSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgaW50cHRyX3QgaSA9 IChYTEkgKGEpICYgVkFMTUFTSykgfCBEQVRBX1NFR19CSVRTOworICByZXR1cm4gKHZvaWQg KikgaTsKK30KKworLyogRXh0cmFjdCB0aGUgcG9pbnRlciB2YWx1ZSBvZiB0aGUgTGlzcCBv YmplY3QgQSwgdW5kZXIgdGhlCisgICBhc3N1bXB0aW9uIHRoYXQgQSdzIHR5cGUgaXMgVFlQ RS4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorKFhVTlRBRykgKExpc3BfT2JqZWN0IGEs IGludCB0eXBlKQoreworICBpZiAoVVNFX0xTQl9UQUcpCisgICAgeworICAgICAgaW50cHRy X3QgaSA9IFhMSSAoYSkgLSB0eXBlOworICAgICAgcmV0dXJuICh2b2lkICopIGk7CisgICAg fQorICByZXR1cm4gWFBOVFIgKGEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorKEVRKSAo TGlzcF9PYmplY3QgYSwgTGlzcF9PYmplY3QgYikKK3sKKyAgcmV0dXJuIFhIQVNIIChhKSA9 PSBYSEFTSCAoYik7Cit9CisKKy8qIFRoZSB1YmlxdWl0b3VzIG1pbiBhbmQgbWF4IG1hY3Jv cy4gICovCisKKyNpZmRlZiBtYXgKKyN1bmRlZiBtYXgKKyN1bmRlZiBtaW4KKyNlbmRpZgor I2RlZmluZSBtaW4oYSwgYikJKChhKSA8IChiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgbWF4 KGEsIGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisKIC8qIFZhbHVlIGlzIG5vbi16ZXJv IGlmIEkgZG9lc24ndCBmaXQgaW50byBhIExpc3AgZml4bnVtLiAgSXQgaXMKICAgIHdyaXR0 ZW4gdGhpcyB3YXkgc28gdGhhdCBpdCBhbHNvIHdvcmtzIGlmIEkgaXMgb2YgdW5zaWduZWQK ICAgIHR5cGUgb3IgaWYgSSBpcyBhIE5hTi4gICovCkBAIC00NjMsNjQgKzU0OCwxODEgQEAK IHsKICAgcmV0dXJuIG51bSA8IGxvd2VyID8gbG93ZXIgOiBudW0gPD0gdXBwZXIgPyBudW0g OiB1cHBlcjsKIH0KKwwKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zLiAgKi8KKworLyogRGVm aW5lZCBpbiB0aGlzIGZpbGUuICAqLwordW5pb24gTGlzcF9Gd2Q7CitzdGF0aWMgaW50IEJP T0xGV0RQICh1bmlvbiBMaXNwX0Z3ZCAqKTsKK3N0YXRpYyBpbnQgQk9PTF9WRUNUT1JfUCAo TGlzcF9PYmplY3QpOworc3RhdGljIGludCBCVUZGRVJfT0JKRldEUCAodW5pb24gTGlzcF9G d2QgKik7CitzdGF0aWMgaW50IEJVRkZFUlAgKExpc3BfT2JqZWN0KTsKK3N0YXRpYyBpbnQg Q0hBUl9UQUJMRV9QIChMaXNwX09iamVjdCk7CitzdGF0aWMgTGlzcF9PYmplY3QgQ0hBUl9U QUJMRV9SRUZfQVNDSUkgKExpc3BfT2JqZWN0LCBwdHJkaWZmX3QpOworc3RhdGljIGludCAo Q09OU1ApIChMaXNwX09iamVjdCk7CitzdGF0aWMgaW50IChGTE9BVFApIChMaXNwX09iamVj dCk7CitzdGF0aWMgaW50IChJTlRFR0VSUCkgKExpc3BfT2JqZWN0KTsKK3N0YXRpYyBpbnQg SU5URldEUCAodW5pb24gTGlzcF9Gd2QgKik7CitzdGF0aWMgaW50IEtCT0FSRF9PQkpGV0RQ ICh1bmlvbiBMaXNwX0Z3ZCAqKTsKK3N0YXRpYyBpbnQgKE1BUktFUlApIChMaXNwX09iamVj dCk7CitzdGF0aWMgaW50IChNSVNDUCkgKExpc3BfT2JqZWN0KTsKK3N0YXRpYyBpbnQgKE5J TFApIChMaXNwX09iamVjdCk7CitzdGF0aWMgaW50IE9CSkZXRFAgKHVuaW9uIExpc3BfRndk ICopOworc3RhdGljIGludCBPVkVSTEFZUCAoTGlzcF9PYmplY3QpOworc3RhdGljIGludCBQ Uk9DRVNTUCAoTGlzcF9PYmplY3QpOworc3RhdGljIGludCBQU0VVRE9WRUNUT1JQIChMaXNw X09iamVjdCwgaW50KTsKK3N0YXRpYyBpbnQgU0FWRV9WQUxVRVAgKExpc3BfT2JqZWN0KTsK K3N0YXRpYyBpbnQgU1RSSU5HUCAoTGlzcF9PYmplY3QpOworc3RhdGljIGludCBTVUJfQ0hB Ul9UQUJMRV9QIChMaXNwX09iamVjdCk7CitzdGF0aWMgaW50IFNVQlJQIChMaXNwX09iamVj dCk7CitzdGF0aWMgaW50IChTWU1CT0xQKSAoTGlzcF9PYmplY3QpOworc3RhdGljIGludCAo VkVDVE9STElLRVApIChMaXNwX09iamVjdCk7CitzdGF0aWMgaW50IFdJTkRPV1AgKExpc3Bf T2JqZWN0KTsKKworLyogRGVmaW5lZCBpbiBidWZmZXIuYy4gICovCitleHRlcm4gTGlzcF9P YmplY3QgUW92ZXJsYXlwOworCisvKiBEZWZpbmVkIGluIGNoYXJ0YWIuYy4gICovCitleHRl cm4gTGlzcF9PYmplY3QgY2hhcl90YWJsZV9yZWYgKExpc3BfT2JqZWN0LCBpbnQpOworZXh0 ZXJuIExpc3BfT2JqZWN0IGNoYXJfdGFibGVfc2V0IChMaXNwX09iamVjdCwgaW50LCBMaXNw X09iamVjdCk7CitleHRlcm4gaW50IGNoYXJfdGFibGVfdHJhbnNsYXRlIChMaXNwX09iamVj dCwgaW50KTsKKworLyogRGVmaW5lZCBpbiBkYXRhLmMuICAqLworZXh0ZXJuIExpc3BfT2Jq ZWN0IFFhcnJheXAsIFFidWZmZXJwLCBRYnVmZmVyX29yX3N0cmluZ19wLCBRY2hhcl90YWJs ZV9wOworZXh0ZXJuIExpc3BfT2JqZWN0IFFjb25zcCwgUWZsb2F0cCwgUWludGVnZXJwLCBR bGFtYmRhLCBRbGlzdHAsIFFtYXJrZXJwLCBRbmlsOworZXh0ZXJuIExpc3BfT2JqZWN0IFFu dW1iZXJwLCBRc3VicnAsIFFzdHJpbmdwLCBRc3ltYm9scCwgUXZlY3RvcnA7CitleHRlcm4g TGlzcF9PYmplY3QgUXZlY3Rvcl9vcl9jaGFyX3RhYmxlX3AsIFF3aG9sZW51bXA7CitleHRl cm4gTGlzcF9PYmplY3QgRmZib3VuZHAgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBfTm9yZXR1 cm4gTGlzcF9PYmplY3Qgd3JvbmdfdHlwZV9hcmd1bWVudCAoTGlzcF9PYmplY3QsIExpc3Bf T2JqZWN0KTsKKworLyogRGVmaW5lZCBpbiBlbWFjcy5jLiAgKi8KK2V4dGVybiBpbnQgaW5p dGlhbGl6ZWQ7CisKKy8qIERlZmluZWQgaW4gZm5zLmMgICovCitleHRlcm4gTGlzcF9PYmpl Y3QgUWhhc2hfdGFibGVfcDsKKworLyogRGVmaW5lZCBpbiBmbG9hdGZucy5jLiAgKi8KK2V4 dGVybiBkb3VibGUgZXh0cmFjdF9mbG9hdCAoTGlzcF9PYmplY3QpOworCisvKiBEZWZpbmVk IGluIHByb2Nlc3MuYy4gICovCitleHRlcm4gTGlzcF9PYmplY3QgUXByb2Nlc3NwOworCisv KiBEZWZpbmVkIGluIHdpbmRvdy5jLiAgKi8KK2V4dGVybiBMaXNwX09iamVjdCBRd2luZG93 cCwgUXdpbmRvd19jb25maWd1cmF0aW9uX3A7CisKKy8qIERlZmluZWQgaW4geGRpc3AuYy4g ICovCitleHRlcm4gTGlzcF9PYmplY3QgUWltYWdlOworDAogCiAvKiBFeHRyYWN0IGEgdmFs dWUgb3IgYWRkcmVzcyBmcm9tIGEgTGlzcF9PYmplY3QuICAqLwogCi0jZGVmaW5lIFhDT05T KGEpICAgKGVhc3NlcnQgKENPTlNQIChhKSksIFwKLQkJICAgIChzdHJ1Y3QgTGlzcF9Db25z ICopIFhVTlRBRyAoYSwgTGlzcF9Db25zKSkKLSNkZWZpbmUgWFZFQ1RPUihhKSAoZWFzc2Vy dCAoVkVDVE9STElLRVAgKGEpKSwgXAotCQkgICAgKHN0cnVjdCBMaXNwX1ZlY3RvciAqKSBY VU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVmaW5lIFhTVFJJTkcoYSkgKGVhc3Nl cnQgKFNUUklOR1AgKGEpKSwgXAotCQkgICAgKHN0cnVjdCBMaXNwX1N0cmluZyAqKSBYVU5U QUcgKGEsIExpc3BfU3RyaW5nKSkKLSNkZWZpbmUgWFNZTUJPTChhKSAoZWFzc2VydCAoU1lN Qk9MUCAoYSkpLCBcCi0JCSAgICAoc3RydWN0IExpc3BfU3ltYm9sICopIFhVTlRBRyAoYSwg TGlzcF9TeW1ib2wpKQotI2RlZmluZSBYRkxPQVQoYSkgIChlYXNzZXJ0IChGTE9BVFAgKGEp KSwgXAotCQkgICAgKHN0cnVjdCBMaXNwX0Zsb2F0ICopIFhVTlRBRyAoYSwgTGlzcF9GbG9h dCkpCi0KLS8qIE1pc2MgdHlwZXMuICAqLwotCi0jZGVmaW5lIFhNSVNDKGEpCSgodW5pb24g TGlzcF9NaXNjICopIFhVTlRBRyAoYSwgTGlzcF9NaXNjKSkKLSNkZWZpbmUgWE1JU0NBTlko YSkJKGVhc3NlcnQgKE1JU0NQIChhKSksICYoWE1JU0MgKGEpLT51X2FueSkpCi0jZGVmaW5l IFhNSVNDVFlQRShhKSAgIChYTUlTQ0FOWSAoYSktPnR5cGUpCi0jZGVmaW5lIFhNQVJLRVIo YSkJKGVhc3NlcnQgKE1BUktFUlAgKGEpKSwgJihYTUlTQyAoYSktPnVfbWFya2VyKSkKLSNk ZWZpbmUgWE9WRVJMQVkoYSkJKGVhc3NlcnQgKE9WRVJMQVlQIChhKSksICYoWE1JU0MgKGEp LT51X292ZXJsYXkpKQotI2RlZmluZSBYU0FWRV9WQUxVRShhKQkoZWFzc2VydCAoU0FWRV9W QUxVRVAgKGEpKSwgJihYTUlTQyAoYSktPnVfc2F2ZV92YWx1ZSkpCi0KLS8qIEZvcndhcmRp bmcgb2JqZWN0IHR5cGVzLiAgKi8KLQotI2RlZmluZSBYRldEVFlQRShhKSAgICAgKGEtPnVf aW50ZndkLnR5cGUpCi0jZGVmaW5lIFhJTlRGV0QoYSkJKGVhc3NlcnQgKElOVEZXRFAgKGEp KSwgJigoYSktPnVfaW50ZndkKSkKLSNkZWZpbmUgWEJPT0xGV0QoYSkJKGVhc3NlcnQgKEJP T0xGV0RQIChhKSksICYoKGEpLT51X2Jvb2xmd2QpKQotI2RlZmluZSBYT0JKRldEKGEpCShl YXNzZXJ0IChPQkpGV0RQIChhKSksICYoKGEpLT51X29iamZ3ZCkpCi0jZGVmaW5lIFhCVUZG RVJfT0JKRldEKGEpIFwKLSAgKGVhc3NlcnQgKEJVRkZFUl9PQkpGV0RQIChhKSksICYoKGEp LT51X2J1ZmZlcl9vYmpmd2QpKQotI2RlZmluZSBYS0JPQVJEX09CSkZXRChhKSBcCi0gIChl YXNzZXJ0IChLQk9BUkRfT0JKRldEUCAoYSkpLCAmKChhKS0+dV9rYm9hcmRfb2JqZndkKSkK K3N0YXRpYyBpbmxpbmUgc3RydWN0IExpc3BfQ29ucyAqCisoWENPTlMpIChMaXNwX09iamVj dCBhKQoreworICBlYXNzZXJ0IChDT05TUCAoYSkpOworICByZXR1cm4gWFVOVEFHIChhLCBM aXNwX0NvbnMpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBMaXNwX1ZlY3RvciAqCitY VkVDVE9SIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChWRUNUT1JMSUtFUCAoYSkp OworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitzdGF0aWMg aW5saW5lIHN0cnVjdCBMaXNwX1N0cmluZyAqCitYU1RSSU5HIChMaXNwX09iamVjdCBhKQor eworICBlYXNzZXJ0IChTVFJJTkdQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3Bf U3RyaW5nKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgTGlzcF9TeW1ib2wgKgorKFhT WU1CT0wpIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChTWU1CT0xQIChhKSk7Cisg IHJldHVybiBYVU5UQUcgKGEsIExpc3BfU3ltYm9sKTsKK30KKworc3RhdGljIGlubGluZSBz dHJ1Y3QgTGlzcF9GbG9hdCAqCitYRkxPQVQgKExpc3BfT2JqZWN0IGEpCit7CisgIGVhc3Nl cnQgKEZMT0FUUCAoYSkpOworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX0Zsb2F0KTsKK30K IAogLyogUHNldWRvdmVjdG9yIHR5cGVzLiAgKi8KIAotI2RlZmluZSBYUFJPQ0VTUyhhKSAo ZWFzc2VydCAoUFJPQ0VTU1AgKGEpKSwgXAotCQkgICAgIChzdHJ1Y3QgTGlzcF9Qcm9jZXNz ICopIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKSkKLSNkZWZpbmUgWFdJTkRPVyhhKSAo ZWFzc2VydCAoV0lORE9XUCAoYSkpLCBcCi0JCSAgICAoc3RydWN0IHdpbmRvdyAqKSBYVU5U QUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVmaW5lIFhURVJNSU5BTChhKSAoZWFzc2Vy dCAoVEVSTUlOQUxQIChhKSksIFwKLQkJICAgICAgKHN0cnVjdCB0ZXJtaW5hbCAqKSBYVU5U QUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVmaW5lIFhTVUJSKGEpIChlYXNzZXJ0IChT VUJSUCAoYSkpLCBcCi0JCSAgKHN0cnVjdCBMaXNwX1N1YnIgKikgWFVOVEFHIChhLCBMaXNw X1ZlY3Rvcmxpa2UpKQotI2RlZmluZSBYQlVGRkVSKGEpIChlYXNzZXJ0IChCVUZGRVJQIChh KSksIFwKLQkJICAgIChzdHJ1Y3QgYnVmZmVyICopIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3Js aWtlKSkKLSNkZWZpbmUgWENIQVJfVEFCTEUoYSkgKGVhc3NlcnQgKENIQVJfVEFCTEVfUCAo YSkpLCBcCi0JCQkoc3RydWN0IExpc3BfQ2hhcl9UYWJsZSAqKSBYVU5UQUcgKGEsIExpc3Bf VmVjdG9ybGlrZSkpCi0jZGVmaW5lIFhTVUJfQ0hBUl9UQUJMRShhKSAoZWFzc2VydCAoU1VC X0NIQVJfVEFCTEVfUCAoYSkpLCBcCi0JCQkgICAgKChzdHJ1Y3QgTGlzcF9TdWJfQ2hhcl9U YWJsZSAqKSBcCi0JCQkgICAgIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKSkpCi0jZGVm aW5lIFhCT09MX1ZFQ1RPUihhKSAoZWFzc2VydCAoQk9PTF9WRUNUT1JfUCAoYSkpLCBcCi0J CQkgKChzdHJ1Y3QgTGlzcF9Cb29sX1ZlY3RvciAqKSBcCi0JCQkgIFhVTlRBRyAoYSwgTGlz cF9WZWN0b3JsaWtlKSkpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBMaXNwX1Byb2Nlc3MgKgor WFBST0NFU1MgKExpc3BfT2JqZWN0IGEpCit7CisgIGVhc3NlcnQgKFBST0NFU1NQIChhKSk7 CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IHdpbmRvdyAqCitYV0lORE9XIChMaXNwX09iamVjdCBhKQoreworICBl YXNzZXJ0IChXSU5ET1dQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9y bGlrZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlcm1pbmFsICoKK1hURVJNSU5B TCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3Js aWtlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgTGlzcF9TdWJyICoKK1hTVUJSIChM aXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChTVUJSUCAoYSkpOworICByZXR1cm4gWFVO VEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBi dWZmZXIgKgorWEJVRkZFUiAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoQlVGRkVS UCAoYSkpOworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBMaXNwX0NoYXJfVGFibGUgKgorWENIQVJfVEFCTEUgKExp c3BfT2JqZWN0IGEpCit7CisgIGVhc3NlcnQgKENIQVJfVEFCTEVfUCAoYSkpOworICByZXR1 cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBMaXNwX1N1Yl9DaGFyX1RhYmxlICoKK1hTVUJfQ0hBUl9UQUJMRSAoTGlzcF9PYmpl Y3QgYSkKK3sKKyAgZWFzc2VydCAoU1VCX0NIQVJfVEFCTEVfUCAoYSkpOworICByZXR1cm4g WFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj dCBMaXNwX0Jvb2xfVmVjdG9yICoKK1hCT09MX1ZFQ1RPUiAoTGlzcF9PYmplY3QgYSkKK3sK KyAgZWFzc2VydCAoQk9PTF9WRUNUT1JfUCAoYSkpOworICByZXR1cm4gWFVOVEFHIChhLCBM aXNwX1ZlY3Rvcmxpa2UpOworfQogCiAvKiBDb25zdHJ1Y3QgYSBMaXNwX09iamVjdCBmcm9t IGEgdmFsdWUgb3IgYWRkcmVzcy4gICovCiAKK3N0YXRpYyBpbmxpbmUgTGlzcF9PYmplY3QK K3h0YWcgKGVudW0gTGlzcF9UeXBlIHR5cGUsIHZvaWQgKnB0cikKK3sKKyAgRU1BQ1NfVUlO VCB1dHlwZSA9IHR5cGU7CisgIEVNQUNTX0lOVCB0eXBlYml0cyA9IFVTRV9MU0JfVEFHID8g dHlwZSA6IHV0eXBlIDw8IFZBTEJJVFM7CisgIExpc3BfT2JqZWN0IGEgPSBYSUwgKHR5cGVi aXRzIHwgKGludHB0cl90KSBwdHIpOworICBlYXNzZXJ0IChYVU5UQUcgKGEsIHR5cGUpID09 IHB0cik7ICAvKiBDaGVjayBhbGlnbm1lbnQuICAqLworICByZXR1cm4gYTsKK30KKworI2Rl ZmluZSBYU0VUKHZhciwgdHlwZSwgcHRyKSAoKHZhcikgPSB4dGFnICh0eXBlLCBwdHIpKQog I2RlZmluZSBYU0VUSU5UKGEsIGIpIChhKSA9IG1ha2VfbnVtYmVyIChiKQorI2RlZmluZSBY U0VURkFTVElOVChhLCBiKSAoKGEpID0gbWFrZV9uYXRudW0gKGIpKQogI2RlZmluZSBYU0VU Q09OUyhhLCBiKSBYU0VUIChhLCBMaXNwX0NvbnMsIGIpCiAjZGVmaW5lIFhTRVRWRUNUT1Io YSwgYikgWFNFVCAoYSwgTGlzcF9WZWN0b3JsaWtlLCBiKQogI2RlZmluZSBYU0VUU1RSSU5H KGEsIGIpIFhTRVQgKGEsIExpc3BfU3RyaW5nLCBiKQpAQCAtNTY4LDQ4ICs3NzAsMjUgQEAK ICNkZWZpbmUgWFNFVEJPT0xfVkVDVE9SKGEsIGIpIChYU0VUUFNFVURPVkVDVE9SIChhLCBi LCBQVkVDX0JPT0xfVkVDVE9SKSkKICNkZWZpbmUgWFNFVFNVQl9DSEFSX1RBQkxFKGEsIGIp IChYU0VUUFNFVURPVkVDVE9SIChhLCBiLCBQVkVDX1NVQl9DSEFSX1RBQkxFKSkKIAotLyog Q29udmVuaWVuY2UgbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggTGlzcCBhcnJheXMuICAqLwot Ci0jZGVmaW5lIEFSRUYoQVJSQVksIElEWCkJWFZFQ1RPUiAoKEFSUkFZKSktPmNvbnRlbnRz W0lEWF0KLSNkZWZpbmUgQVNJWkUoQVJSQVkpCQlYVkVDVE9SICgoQVJSQVkpKS0+aGVhZGVy LnNpemUKLS8qIFRoZSBJRFg9PUlEWCB0cmllcyB0byBkZXRlY3Qgd2hlbiB0aGUgbWFjcm8g YXJndW1lbnQgaXMgc2lkZS1lZmZlY3RpbmcuICAqLwotI2RlZmluZSBBU0VUKEFSUkFZLCBJ RFgsIFZBTCkJXAotICAoZWFzc2VydCAoKElEWCkgPT0gKElEWCkpLAkJCQlcCi0gICBlYXNz ZXJ0ICgoSURYKSA+PSAwICYmIChJRFgpIDwgQVNJWkUgKEFSUkFZKSksCVwKLSAgIEFSRUYg KChBUlJBWSksIChJRFgpKSA9IChWQUwpKQotCi0vKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9y IGRlYWxpbmcgd2l0aCBMaXNwIHN0cmluZ3MuICAqLwotCi0jZGVmaW5lIFNEQVRBKHN0cmlu ZykJCShYU1RSSU5HIChzdHJpbmcpLT5kYXRhICsgMCkKLSNkZWZpbmUgU1JFRihzdHJpbmcs IGluZGV4KQkoU0RBVEEgKHN0cmluZylbaW5kZXhdICsgMCkKLSNkZWZpbmUgU1NFVChzdHJp bmcsIGluZGV4LCBuZXcpIChTREFUQSAoc3RyaW5nKVtpbmRleF0gPSAobmV3KSkKLSNkZWZp bmUgU0NIQVJTKHN0cmluZykJCShYU1RSSU5HIChzdHJpbmcpLT5zaXplICsgMCkKLSNkZWZp bmUgU0JZVEVTKHN0cmluZykJCShTVFJJTkdfQllURVMgKFhTVFJJTkcgKHN0cmluZykpICsg MCkKLQotLyogQXZvaWQgImRpZmZlciBpbiBzaWduIiB3YXJuaW5ncy4gICovCi0jZGVmaW5l IFNTREFUQSh4KSAgKChjaGFyICopIFNEQVRBICh4KSkKLQotI2RlZmluZSBTVFJJTkdfU0VU X0NIQVJTKHN0cmluZywgbmV3c2l6ZSkgXAotICAgIChYU1RSSU5HIChzdHJpbmcpLT5zaXpl ID0gKG5ld3NpemUpKQotCi0jZGVmaW5lIFNUUklOR19DT1BZSU4oc3RyaW5nLCBpbmRleCwg bmV3LCBjb3VudCkgXAotICAgIG1lbWNweSAoU0RBVEEgKHN0cmluZykgKyBpbmRleCwgbmV3 LCBjb3VudCkKLQogLyogVHlwZSBjaGVja2luZy4gICovCiAKLSNkZWZpbmUgQ0hFQ0tfVFlQ RShvaywgUXh4eHAsIHgpIFwKLSAgZG8geyBpZiAoIShvaykpIHdyb25nX3R5cGVfYXJndW1l bnQgKFF4eHhwLCAoeCkpOyB9IHdoaWxlICgwKQotCi0KK3N0YXRpYyBpbmxpbmUgdm9pZAor KENIRUNLX1RZUEUpIChpbnQgb2ssIExpc3BfT2JqZWN0IFF4eHhwLCBMaXNwX09iamVjdCB4 KQoreworICBpZiAoIW9rKQorICAgIHdyb25nX3R5cGVfYXJndW1lbnQgKFF4eHhwLCB4KTsK K30KIAwKIC8qIFNlZSB0aGUgbWFjcm9zIGluIGludGVydmFscy5oLiAgKi8KIAogdHlwZWRl ZiBzdHJ1Y3QgaW50ZXJ2YWwgKklOVEVSVkFMOwogCiAvKiBDb21wbGFpbiBpZiBvYmplY3Qg aXMgbm90IHN0cmluZyBvciBidWZmZXIgdHlwZSAqLwotI2RlZmluZSBDSEVDS19TVFJJTkdf T1JfQlVGRkVSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoU1RSSU5HUCAoeCkgfHwgQlVGRkVSUCAo eCksIFFidWZmZXJfb3Jfc3RyaW5nX3AsIHgpCi0KK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0hF Q0tfU1RSSU5HX09SX0JVRkZFUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAo U1RSSU5HUCAoeCkgfHwgQlVGRkVSUCAoeCksIFFidWZmZXJfb3Jfc3RyaW5nX3AsIHgpOwor fQogDAogLyogSW4gYSBjb25zLCB0aGUgbWFya2JpdCBvZiB0aGUgY2FyIGlzIHRoZSBnYyBt YXJrIGJpdCAqLwogCkBAIC02NTAsNTQgKzgyOSw2OCBAQAogI2VuZGlmCiAKIC8qIFVzZSB0 aGVzZSBmcm9tIG5vcm1hbCBjb2RlLiAgKi8KLSNkZWZpbmUgWENBUihjKQlMSVNQX01BS0Vf UlZBTFVFIChYQ0FSX0FTX0xWQUxVRSAoYykpCi0jZGVmaW5lIFhDRFIoYykgTElTUF9NQUtF X1JWQUxVRSAoWENEUl9BU19MVkFMVUUgKGMpKQorc3RhdGljIGlubGluZSBMaXNwX09iamVj dCAoWENBUikgKExpc3BfT2JqZWN0IGMpIHsgcmV0dXJuIFhDQVJfQVNfTFZBTFVFIChjKTsg fQorc3RhdGljIGlubGluZSBMaXNwX09iamVjdCAoWENEUikgKExpc3BfT2JqZWN0IGMpIHsg cmV0dXJuIFhDRFJfQVNfTFZBTFVFIChjKTsgfQogCiAvKiBVc2UgdGhlc2UgdG8gc2V0IHRo ZSBmaWVsZHMgb2YgYSBjb25zIGNlbGwuCiAKICAgIE5vdGUgdGhhdCBib3RoIGFyZ3VtZW50 cyBtYXkgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0LCBzbyAnbicKLSAgIHNob3VsZCBub3Qg YmUgcmVhZCBhZnRlciAnYycgaXMgZmlyc3QgbW9kaWZpZWQuICBBbHNvLCBuZWl0aGVyCi0g ICBhcmd1bWVudCBzaG91bGQgYmUgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlOyBzaWRlIGVm ZmVjdHMgYXJlCi0gICBlc3BlY2lhbGx5IGNvbW1vbiBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50 LiAgKi8KLSNkZWZpbmUgWFNFVENBUihjLG4pIChYQ0FSX0FTX0xWQUxVRSAoYykgPSAobikp Ci0jZGVmaW5lIFhTRVRDRFIoYyxuKSAoWENEUl9BU19MVkFMVUUgKGMpID0gKG4pKQotCi0v KiBUYWtlIHRoZSBjYXIgb3IgY2RyIG9mIHNvbWV0aGluZyB3aG9zZSB0eXBlIGlzIG5vdCBr bm93bi4gICovCi0jZGVmaW5lIENBUihjKQkJCQkJXAotIChDT05TUCAoKGMpKSA/IFhDQVIg KChjKSkJCQlcCi0gIDogTklMUCAoKGMpKSA/IFFuaWwJCQkJXAotICA6IHdyb25nX3R5cGVf YXJndW1lbnQgKFFsaXN0cCwgKGMpKSkKLQotI2RlZmluZSBDRFIoYykJCQkJCVwKLSAoQ09O U1AgKChjKSkgPyBYQ0RSICgoYykpCQkJXAotICA6IE5JTFAgKChjKSkgPyBRbmlsCQkJCVwK LSAgOiB3cm9uZ190eXBlX2FyZ3VtZW50IChRbGlzdHAsIChjKSkpCi0KLS8qIFRha2UgdGhl IGNhciBvciBjZHIgb2Ygc29tZXRoaW5nIHdob3NlIHR5cGUgaXMgbm90IGtub3duLiAgKi8K LSNkZWZpbmUgQ0FSX1NBRkUoYykJCQkJXAotICAoQ09OU1AgKChjKSkgPyBYQ0FSICgoYykp IDogUW5pbCkKLQotI2RlZmluZSBDRFJfU0FGRShjKQkJCQlcCi0gIChDT05TUCAoKGMpKSA/ IFhDRFIgKChjKSkgOiBRbmlsKQorICAgc2hvdWxkIG5vdCBiZSByZWFkIGFmdGVyICdjJyBp cyBmaXJzdCBtb2RpZmllZC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1hTRVRDQVIgKExp c3BfT2JqZWN0IGMsIExpc3BfT2JqZWN0IG4pCit7CisgIFhDQVJfQVNfTFZBTFVFIChjKSA9 IG47Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK1hTRVRDRFIgKExpc3BfT2JqZWN0IGMsIExp c3BfT2JqZWN0IG4pCit7CisgIFhDRFJfQVNfTFZBTFVFIChjKSA9IG47Cit9CisKKy8qIFRh a2UgdGhlIGNhciBvciBjZHIgb2Ygc29tZXRoaW5nIHdob3NlIHR5cGUgaXMgbm90IGtub3du LiAgKi8KK3N0YXRpYyBpbmxpbmUgTGlzcF9PYmplY3QKK0NBUiAoTGlzcF9PYmplY3QgYykK K3sKKyAgcmV0dXJuIChDT05TUCAoYykgPyBYQ0FSIChjKQorCSAgOiBOSUxQIChjKSA/IFFu aWwKKwkgIDogd3JvbmdfdHlwZV9hcmd1bWVudCAoUWxpc3RwLCBjKSk7Cit9CitzdGF0aWMg aW5saW5lIExpc3BfT2JqZWN0CitDRFIgKExpc3BfT2JqZWN0IGMpCit7CisgIHJldHVybiAo Q09OU1AgKGMpID8gWENEUiAoYykKKwkgIDogTklMUCAoYykgPyBRbmlsCisJICA6IHdyb25n X3R5cGVfYXJndW1lbnQgKFFsaXN0cCwgYykpOworfQorCisvKiBUYWtlIHRoZSBjYXIgb3Ig Y2RyIG9mIHNvbWV0aGluZyB3aG9zZSB0eXBlIGlzIG5vdCBrbm93bi4gICovCitzdGF0aWMg aW5saW5lIExpc3BfT2JqZWN0CitDQVJfU0FGRSAoTGlzcF9PYmplY3QgYykKK3sKKyAgcmV0 dXJuIENPTlNQIChjKSA/IFhDQVIgKGMpIDogUW5pbDsKK30KK3N0YXRpYyBpbmxpbmUgTGlz cF9PYmplY3QKK0NEUl9TQUZFIChMaXNwX09iamVjdCBjKQoreworICByZXR1cm4gQ09OU1Ag KGMpID8gWENEUiAoYykgOiBRbmlsOworfQorCisvKiBJbiBhIHN0cmluZyBvciB2ZWN0b3Is IHRoZSBzaWduIGJpdCBvZiB0aGUgYHNpemUnIGlzIHRoZSBnYyBtYXJrIGJpdC4gICovCisK K3N0cnVjdCBMaXNwX1N0cmluZworICB7CisgICAgcHRyZGlmZl90IHNpemU7CisgICAgcHRy ZGlmZl90IHNpemVfYnl0ZTsKKyAgICBJTlRFUlZBTCBpbnRlcnZhbHM7CQkvKiBUZXh0IHBy b3BlcnRpZXMgaW4gdGhpcyBzdHJpbmcuICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7 CisgIH07CiAKIC8qIE5vbnplcm8gaWYgU1RSIGlzIGEgbXVsdGlieXRlIHN0cmluZy4gICov Ci0jZGVmaW5lIFNUUklOR19NVUxUSUJZVEUoU1RSKSAgXAotICAoWFNUUklORyAoU1RSKS0+ c2l6ZV9ieXRlID49IDApCi0KLS8qIFJldHVybiB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIFNU Ui4gICovCi0KLSNpZmRlZiBHQ19DSEVDS19TVFJJTkdfQllURVMKLQotc3RydWN0IExpc3Bf U3RyaW5nOwotZXh0ZXJuIHB0cmRpZmZfdCBzdHJpbmdfYnl0ZXMgKHN0cnVjdCBMaXNwX1N0 cmluZyAqKTsKLSNkZWZpbmUgU1RSSU5HX0JZVEVTKFMpIHN0cmluZ19ieXRlcyAoKFMpKQot Ci0jZWxzZSAvKiBub3QgR0NfQ0hFQ0tfU1RSSU5HX0JZVEVTICovCi0KLSNkZWZpbmUgU1RS SU5HX0JZVEVTKFNUUikgIFwKLSAgKChTVFIpLT5zaXplX2J5dGUgPCAwID8gKFNUUiktPnNp emUgOiAoU1RSKS0+c2l6ZV9ieXRlKQotCi0jZW5kaWYgLyogbm90IEdDX0NIRUNLX1NUUklO R19CWVRFUyAqLworc3RhdGljIGlubGluZSBpbnQKK1NUUklOR19NVUxUSUJZVEUgKExpc3Bf T2JqZWN0IHN0cikKK3sKKyAgcmV0dXJuIDAgPD0gWFNUUklORyAoc3RyKS0+c2l6ZV9ieXRl OworfQogCiAvKiBBbiB1cHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEg TGlzcCBzdHJpbmcsIG5vdAogICAgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuICBU aGlzIGEgdGlnaHQgZW5vdWdoIGJvdW5kIHRvCkBAIC03MjcsMjUgKzkyMCw3MiBAQAogICAg IGVsc2UgWFNUUklORyAoU1RSKS0+c2l6ZV9ieXRlID0gWFNUUklORyAoU1RSKS0+c2l6ZTsg fSB3aGlsZSAoMCkKIAogLyogR2V0IHRleHQgcHJvcGVydGllcy4gICovCi0jZGVmaW5lIFNU UklOR19JTlRFUlZBTFMoU1RSKSAgKFhTVFJJTkcgKFNUUiktPmludGVydmFscyArIDApCitz dGF0aWMgaW5saW5lIElOVEVSVkFMCitTVFJJTkdfSU5URVJWQUxTIChMaXNwX09iamVjdCBz dHIpCit7CisgIHJldHVybiBYU1RSSU5HIChzdHIpLT5pbnRlcnZhbHM7Cit9CiAKIC8qIFNl dCB0ZXh0IHByb3BlcnRpZXMuICAqLwotI2RlZmluZSBTVFJJTkdfU0VUX0lOVEVSVkFMUyhT VFIsIElOVCkgKFhTVFJJTkcgKFNUUiktPmludGVydmFscyA9IChJTlQpKQotCi0vKiBJbiBh IHN0cmluZyBvciB2ZWN0b3IsIHRoZSBzaWduIGJpdCBvZiB0aGUgYHNpemUnIGlzIHRoZSBn YyBtYXJrIGJpdC4gICovCi0KLXN0cnVjdCBMaXNwX1N0cmluZwotICB7Ci0gICAgcHRyZGlm Zl90IHNpemU7Ci0gICAgcHRyZGlmZl90IHNpemVfYnl0ZTsKLSAgICBJTlRFUlZBTCBpbnRl cnZhbHM7CQkvKiBUZXh0IHByb3BlcnRpZXMgaW4gdGhpcyBzdHJpbmcuICAqLwotICAgIHVu c2lnbmVkIGNoYXIgKmRhdGE7Ci0gIH07CitzdGF0aWMgaW5saW5lIHZvaWQKK1NUUklOR19T RVRfSU5URVJWQUxTIChMaXNwX09iamVjdCBzdHIsIElOVEVSVkFMIGludGVydmFscykKK3sK KyAgWFNUUklORyAoc3RyKS0+aW50ZXJ2YWxzID0gaW50ZXJ2YWxzOworfQorCisvKiBDb252 ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBMaXNwIHN0cmluZ3MuICAqLwor CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKgorU0RBVEEgKExpc3BfT2JqZWN0IHN0 cmluZykKK3sKKyAgcmV0dXJuIFhTVFJJTkcgKHN0cmluZyktPmRhdGE7Cit9CitzdGF0aWMg aW5saW5lIGNoYXIgKgorU1NEQVRBIChMaXNwX09iamVjdCBzdHJpbmcpCit7CisgIC8qIEF2 b2lkICJkaWZmZXIgaW4gc2lnbiIgd2FybmluZ3MuICAqLworICByZXR1cm4gKGNoYXIgKikg U0RBVEEgKHN0cmluZyk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKK1NSRUYg KExpc3BfT2JqZWN0IHN0cmluZywgcHRyZGlmZl90IGluZGV4KQoreworICByZXR1cm4gU0RB VEEgKHN0cmluZylbaW5kZXhdOworfQorc3RhdGljIGlubGluZSB2b2lkCitTU0VUIChMaXNw X09iamVjdCBzdHJpbmcsIHB0cmRpZmZfdCBpbmRleCwgdW5zaWduZWQgY2hhciBuZXcpCit7 CisgIFNEQVRBIChzdHJpbmcpW2luZGV4XSA9IG5ldzsKK30KK3N0YXRpYyBpbmxpbmUgcHRy ZGlmZl90CitTQ0hBUlMgKExpc3BfT2JqZWN0IHN0cmluZykKK3sKKyAgcmV0dXJuIFhTVFJJ TkcgKHN0cmluZyktPnNpemU7Cit9CitzdGF0aWMgaW5saW5lIHB0cmRpZmZfdAorU1RSSU5H X0JZVEVTIChzdHJ1Y3QgTGlzcF9TdHJpbmcgKnMpCit7CisjaWZkZWYgR0NfQ0hFQ0tfU1RS SU5HX0JZVEVTCisgIGV4dGVybiBwdHJkaWZmX3Qgc3RyaW5nX2J5dGVzIChzdHJ1Y3QgTGlz cF9TdHJpbmcgKik7CisgIHJldHVybiBzdHJpbmdfYnl0ZXMgKHMpOworI2Vsc2UKKyAgcmV0 dXJuIHMtPnNpemVfYnl0ZSA8IDAgPyBzLT5zaXplIDogcy0+c2l6ZV9ieXRlOworI2VuZGlm Cit9CitzdGF0aWMgaW5saW5lIHB0cmRpZmZfdAorU0JZVEVTIChMaXNwX09iamVjdCBzdHJp bmcpCit7CisgIHJldHVybiBTVFJJTkdfQllURVMgKFhTVFJJTkcgKHN0cmluZykpOworfQor c3RhdGljIGlubGluZSB2b2lkCitTVFJJTkdfU0VUX0NIQVJTIChMaXNwX09iamVjdCBzdHJp bmcsIHB0cmRpZmZfdCBuZXdzaXplKQoreworICBYU1RSSU5HIChzdHJpbmcpLT5zaXplID0g bmV3c2l6ZTsKK30KIAogLyogSGVhZGVyIG9mIHZlY3Rvci1saWtlIG9iamVjdHMuICBUaGlz IGRvY3VtZW50cyB0aGUgbGF5b3V0IGNvbnN0cmFpbnRzIG9uCiAgICB2ZWN0b3JzIGFuZCBw c2V1ZG92ZWN0b3JzIG90aGVyIHRoYW4gc3RydWN0IExpc3BfU3Vici4gIEl0IGFsc28gcHJl dmVudHMKLSAgIGNvbXBpbGVycyBmcm9tIGJlaW5nIGZvb2xlZCBieSBFbWFjcydzIHR5cGUg cHVubmluZzogdGhlIFhTRVRQU0VVRE9WRUNUT1IKLSAgIGFuZCBQU0VVRE9WRUNUT1JQIG1h Y3JvcyBjYXN0IHRoZWlyIHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAq LAorICAgY29tcGlsZXJzIGZyb20gYmVpbmcgZm9vbGVkIGJ5IEVtYWNzJ3MgdHlwZSBwdW5u aW5nOiBYU0VUUFNFVURPVkVDVE9SCisgICBhbmQgUFNFVURPVkVDVE9SUCBjYXN0IHRoZWly IHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAqLAogICAgYmVjYXVzZSB3 aGVuIHR3byBzdWNoIHBvaW50ZXJzIHBvdGVudGlhbGx5IGFsaWFzLCBhIGNvbXBpbGVyIHdv bid0CiAgICBpbmNvcnJlY3RseSByZW9yZGVyIGxvYWRzIGFuZCBzdG9yZXMgdG8gdGhlaXIg c2l6ZSBmaWVsZHMuICBTZWUKICAgIDxodHRwOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdy ZXBvcnQuY2dpP2J1Zz04NTQ2Pi4gICovCkBAIC03OTYsNiArMTAzNiwyMyBAQAogICAgIExp c3BfT2JqZWN0IGNvbnRlbnRzWzFdOwogICB9OwogCisvKiBDb252ZW5pZW5jZXMgZm9yIGRl YWxpbmcgd2l0aCBMaXNwIGFycmF5cy4gICovCisKKy8qIEEgbWFjcm8gYmVjYXVzZSBpdCBp cyBhbHNvIHVzZWQgYXMgYW4gbHZhbHVlLiAgRklYTUU6IFVzZSBBU0VUIGluc3RlYWQuICAq LworI2RlZmluZSBBUkVGKEFSUkFZLCBJRFgpCVhWRUNUT1IgKChBUlJBWSkpLT5jb250ZW50 c1tJRFhdCisKK3N0YXRpYyBpbmxpbmUgcHRyZGlmZl90CitBU0laRSAoTGlzcF9PYmplY3Qg YXJyYXkpCit7CisgIHJldHVybiBYVkVDVE9SIChhcnJheSktPmhlYWRlci5zaXplOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK0FTRVQgKExpc3BfT2JqZWN0IGFycmF5LCBwdHJkaWZm X3QgaWR4LCBMaXNwX09iamVjdCB2YWwpCit7CisgIFhWRUNUT1IgKGFycmF5KS0+Y29udGVu dHNbaWR4XSA9IHZhbDsKK30KKwogLyogSWYgYSBzdHJ1Y3QgaXMgbWFkZSB0byBsb29rIGxp a2UgYSB2ZWN0b3IsIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgbGVuZ3RoCiAgICBvZiB0aGUg c2hvcnRlc3QgdmVjdG9yIHRoYXQgd291bGQgaG9sZCB0aGF0IHN0cnVjdC4gICovCiAjZGVm aW5lIFZFQ1NJWkUodHlwZSkgKChzaXplb2YgKHR5cGUpCQkJCQkgIFwKQEAgLTgxMCw1MyAr MTA2Nyw2IEBACiAgICgob2Zmc2V0b2YgKHR5cGUsIG5vbmxpc3BmaWVsZCkgLSBvZmZzZXRv ZiAoc3RydWN0IExpc3BfVmVjdG9yLCBjb250ZW50c1swXSkpIFwKICAgIC8gc2l6ZW9mIChM aXNwX09iamVjdCkpCiAKLS8qIEEgY2hhci10YWJsZSBpcyBhIGtpbmQgb2YgdmVjdG9ybGlr ZSwgd2l0aCBjb250ZW50cyBhcmUgbGlrZSBhCi0gICB2ZWN0b3IgYnV0IHdpdGggYSBmZXcg b3RoZXIgc2xvdHMuICBGb3Igc29tZSBwdXJwb3NlcywgaXQgbWFrZXMKLSAgIHNlbnNlIHRv IGhhbmRsZSBhIGNoYXItdGFibGUgd2l0aCB0eXBlIHN0cnVjdCBMaXNwX1ZlY3Rvci4gIEFu Ci0gICBlbGVtZW50IG9mIGEgY2hhciB0YWJsZSBjYW4gYmUgYW55IExpc3Agb2JqZWN0cywg YnV0IGlmIGl0IGlzIGEgc3ViCi0gICBjaGFyLXRhYmxlLCB3ZSB0cmVhdCBpdCBhIHRhYmxl IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gb2YgYQotICAgc3BlY2lmaWMgcmFuZ2Ugb2Yg Y2hhcmFjdGVycy4gIEEgc3ViIGNoYXItdGFibGUgaGFzIHRoZSBzYW1lCi0gICBzdHJ1Y3R1 cmUgYXMgYSB2ZWN0b3IuICBBIHN1YiBjaGFyIHRhYmxlIGFwcGVhcnMgb25seSBpbiBhbiBl bGVtZW50Ci0gICBvZiBhIGNoYXItdGFibGUsIGFuZCB0aGVyZSdzIG5vIHdheSB0byBhY2Nl c3MgaXQgZGlyZWN0bHkgZnJvbQotICAgRW1hY3MgTGlzcCBwcm9ncmFtLiAgKi8KLQotLyog VGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNsb3RzIHRoYXQgZXZlcnkgY2hhciB0YWJsZSBtdXN0 IGhhdmUuICBUaGlzCi0gICBjb3VudHMgdGhlIG9yZGluYXJ5IHNsb3RzIGFuZCB0aGUgdG9w LCBkZWZhbHQsIHBhcmVudCwgYW5kIHB1cnBvc2UKLSAgIHNsb3RzLiAgKi8KLSNkZWZpbmUg Q0hBUl9UQUJMRV9TVEFOREFSRF9TTE9UUyAoVkVDU0laRSAoc3RydWN0IExpc3BfQ2hhcl9U YWJsZSkgLSAxKQotCi0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiAiZXh0cmEiIHNsb3RzIGlu IHRoZSBjaGFyIHRhYmxlIENULiAgKi8KLQotI2RlZmluZSBDSEFSX1RBQkxFX0VYVFJBX1NM T1RTKENUKQlcCi0gICgoKENUKS0+aGVhZGVyLnNpemUgJiBQU0VVRE9WRUNUT1JfU0laRV9N QVNLKSAtIENIQVJfVEFCTEVfU1RBTkRBUkRfU0xPVFMpCi0KLSNpZmRlZiBfX0dOVUNfXwot Ci0jZGVmaW5lIENIQVJfVEFCTEVfUkVGX0FTQ0lJKENULCBJRFgpCQkJCQlcCi0gICh7c3Ry dWN0IExpc3BfQ2hhcl9UYWJsZSAqX3RibCA9IE5VTEw7CQkJCVwKLSAgICBMaXNwX09iamVj dCBfdmFsOwkJCQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgX3RibCA9IF90Ymwg PyBYQ0hBUl9UQUJMRSAoX3RibC0+cGFyZW50KSA6IFhDSEFSX1RBQkxFIChDVCk7CVwKLSAg ICAgIF92YWwgPSAoISBTVUJfQ0hBUl9UQUJMRV9QIChfdGJsLT5hc2NpaSkgPyBfdGJsLT5h c2NpaQkJXAotCSAgICAgIDogWFNVQl9DSEFSX1RBQkxFIChfdGJsLT5hc2NpaSktPmNvbnRl bnRzW0lEWF0pOwkJXAotICAgICAgaWYgKE5JTFAgKF92YWwpKQkJCQkJCQlcCi0JX3ZhbCA9 IF90YmwtPmRlZmFsdDsJCQkJCQlcCi0gICAgfSB3aGlsZSAoTklMUCAoX3ZhbCkgJiYgISBO SUxQIChfdGJsLT5wYXJlbnQpKTsJCQlcCi0gICAgX3ZhbDsgfSkKLQotI2Vsc2UgIC8qIG5v dCBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIENIQVJfVEFCTEVfUkVGX0FTQ0lJKENULCBJRFgp CQkJCQkgIFwKLSAgKCEgTklMUCAoWENIQVJfVEFCTEUgKENUKS0+YXNjaWkpCQkJCQkgIFwK LSAgID8gKCEgU1VCX0NIQVJfVEFCTEVfUCAoWENIQVJfVEFCTEUgKENUKS0+YXNjaWkpCQkJ ICBcCi0gICAgICA/IFhDSEFSX1RBQkxFIChDVCktPmFzY2lpCQkJCQkJICBcCi0gICAgICA6 ICEgTklMUCAoWFNVQl9DSEFSX1RBQkxFIChYQ0hBUl9UQUJMRSAoQ1QpLT5hc2NpaSktPmNv bnRlbnRzW0lEWF0pIFwKLSAgICAgID8gWFNVQl9DSEFSX1RBQkxFIChYQ0hBUl9UQUJMRSAo Q1QpLT5hc2NpaSktPmNvbnRlbnRzW0lEWF0JICBcCi0gICAgICA6IGNoYXJfdGFibGVfcmVm ICgoQ1QpLCAoSURYKSkpCQkJCQkgIFwKLSAgIDogIGNoYXJfdGFibGVfcmVmICgoQ1QpLCAo SURYKSkpCi0KLSNlbmRpZgkvKiBub3QgX19HTlVDX18gKi8KLQogLyogQ29tcHV0ZSBBIE9Q IEIsIHVzaW5nIHRoZSB1bnNpZ25lZCBjb21wYXJpc29uIG9wZXJhdG9yIE9QLiAgQSBhbmQg QgogICAgc2hvdWxkIGJlIGludGVnZXIgZXhwcmVzc2lvbnMuICBUaGlzIGlzIG5vdCB0aGUg c2FtZSBhcwogICAgbWF0aGVtYXRpY2FsIGNvbXBhcmlzb247IGZvciBleGFtcGxlLCBVTlNJ R05FRF9DTVAgKDAsIDwsIC0xKQpAQCAtODcwLDMxICsxMDgwLDIzIEBACiAvKiBOb256ZXJv IGlmZiBDIGlzIGFuIEFTQ0lJIGNoYXJhY3Rlci4gICovCiAjZGVmaW5lIEFTQ0lJX0NIQVJf UChjKSBVTlNJR05FRF9DTVAgKGMsIDwsIDB4ODApCiAKLS8qIEFsbW9zdCBlcXVpdmFsZW50 IHRvIEZhcmVmIChDVCwgSURYKSB3aXRoIG9wdGltaXphdGlvbiBmb3IgQVNDSUkKLSAgIGNo YXJhY3RlcnMuICBEbyBub3QgY2hlY2sgdmFsaWRpdHkgb2YgQ1QuICAqLwotI2RlZmluZSBD SEFSX1RBQkxFX1JFRihDVCwgSURYKQkJCQkJXAotICAoQVNDSUlfQ0hBUl9QIChJRFgpID8g Q0hBUl9UQUJMRV9SRUZfQVNDSUkgKChDVCksIChJRFgpKQlcCi0gICA6IGNoYXJfdGFibGVf cmVmICgoQ1QpLCAoSURYKSkpCi0KLS8qIEFsbW9zdCBlcXVpdmFsZW50IHRvIEZhcmVmIChD VCwgSURYKS4gIEhvd2V2ZXIsIGlmIHRoZSByZXN1bHQgaXMKLSAgIG5vdCBhIGNoYXJhY3Rl ciwgcmV0dXJuIElEWC4KLQotICAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIGRvIG5vdCBjaGVj ayB2YWxpZGl0eSBvZiBDVAotICAgYW5kIGRvIG5vdCBmb2xsb3cgcGFyZW50LiAgKi8KLSNk ZWZpbmUgQ0hBUl9UQUJMRV9UUkFOU0xBVEUoQ1QsIElEWCkJXAotICBjaGFyX3RhYmxlX3Ry YW5zbGF0ZSAoQ1QsIElEWCkKLQotLyogRXF1aXZhbGVudCB0byBGYXNldCAoQ1QsIElEWCwg VkFMKSB3aXRoIG9wdGltaXphdGlvbiBmb3IgQVNDSUkgYW5kCi0gICA4LWJpdCBFdXJvcGVh biBjaGFyYWN0ZXJzLiAgRG8gbm90IGNoZWNrIHZhbGlkaXR5IG9mIENULiAgKi8KLSNkZWZp bmUgQ0hBUl9UQUJMRV9TRVQoQ1QsIElEWCwgVkFMKQkJCQkJXAotICAoQVNDSUlfQ0hBUl9Q IChJRFgpICYmIFNVQl9DSEFSX1RBQkxFX1AgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKQlc Ci0gICA/IFhTVUJfQ0hBUl9UQUJMRSAoWENIQVJfVEFCTEUgKENUKS0+YXNjaWkpLT5jb250 ZW50c1tJRFhdID0gVkFMCVwKLSAgIDogY2hhcl90YWJsZV9zZXQgKENULCBJRFgsIFZBTCkp Ci0KLSNkZWZpbmUgQ0hBUlRBQl9TSVpFX0JJVFNfMCA2Ci0jZGVmaW5lIENIQVJUQUJfU0la RV9CSVRTXzEgNAotI2RlZmluZSBDSEFSVEFCX1NJWkVfQklUU18yIDUKLSNkZWZpbmUgQ0hB UlRBQl9TSVpFX0JJVFNfMyA3CisvKiBBIGNoYXItdGFibGUgaXMgYSBraW5kIG9mIHZlY3Rv cmxpa2UsIHdpdGggY29udGVudHMgYXJlIGxpa2UgYQorICAgdmVjdG9yIGJ1dCB3aXRoIGEg ZmV3IG90aGVyIHNsb3RzLiAgRm9yIHNvbWUgcHVycG9zZXMsIGl0IG1ha2VzCisgICBzZW5z ZSB0byBoYW5kbGUgYSBjaGFyLXRhYmxlIHdpdGggdHlwZSBzdHJ1Y3QgTGlzcF9WZWN0b3Iu ICBBbgorICAgZWxlbWVudCBvZiBhIGNoYXIgdGFibGUgY2FuIGJlIGFueSBMaXNwIG9iamVj dHMsIGJ1dCBpZiBpdCBpcyBhIHN1YgorICAgY2hhci10YWJsZSwgd2UgdHJlYXQgaXQgYSB0 YWJsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIGEKKyAgIHNwZWNpZmljIHJhbmdl IG9mIGNoYXJhY3RlcnMuICBBIHN1YiBjaGFyLXRhYmxlIGhhcyB0aGUgc2FtZQorICAgc3Ry dWN0dXJlIGFzIGEgdmVjdG9yLiAgQSBzdWIgY2hhciB0YWJsZSBhcHBlYXJzIG9ubHkgaW4g YW4gZWxlbWVudAorICAgb2YgYSBjaGFyLXRhYmxlLCBhbmQgdGhlcmUncyBubyB3YXkgdG8g YWNjZXNzIGl0IGRpcmVjdGx5IGZyb20KKyAgIEVtYWNzIExpc3AgcHJvZ3JhbS4gICovCisK K2VudW0KKyAgeworICAgIENIQVJUQUJfU0laRV9CSVRTXzAgPSA2LAorICAgIENIQVJUQUJf U0laRV9CSVRTXzEgPSA0LAorICAgIENIQVJUQUJfU0laRV9CSVRTXzIgPSA1LAorICAgIENI QVJUQUJfU0laRV9CSVRTXzMgPSA3CisgIH07CiAKIGV4dGVybiBjb25zdCBpbnQgY2hhcnRh Yl9zaXplWzRdOwogCkBAIC05NTEsNiArMTE1Myw3MCBAQAogICAgIExpc3BfT2JqZWN0IGNv bnRlbnRzWzFdOwogICB9OwogCisvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygc2xvdHMgdGhh dCBldmVyeSBjaGFyIHRhYmxlIG11c3QgaGF2ZS4gIFRoaXMKKyAgIGNvdW50cyB0aGUgb3Jk aW5hcnkgc2xvdHMgYW5kIHRoZSB0b3AsIGRlZmFsdCwgcGFyZW50LCBhbmQgcHVycG9zZQor ICAgc2xvdHMuICAqLworZW51bSB7IENIQVJfVEFCTEVfU1RBTkRBUkRfU0xPVFMgPSBWRUNT SVpFIChzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlKSAtIDEgfTsKKworLyogUmV0dXJuIHRoZSBu dW1iZXIgb2YgImV4dHJhIiBzbG90cyBpbiB0aGUgY2hhciB0YWJsZSBDVC4gICovCisKK3N0 YXRpYyBpbmxpbmUgaW50CitDSEFSX1RBQkxFX0VYVFJBX1NMT1RTIChzdHJ1Y3QgTGlzcF9D aGFyX1RhYmxlICpjdCkKK3sKKyAgcmV0dXJuICgoY3QtPmhlYWRlci5zaXplICYgUFNFVURP VkVDVE9SX1NJWkVfTUFTSykKKwkgIC0gQ0hBUl9UQUJMRV9TVEFOREFSRF9TTE9UUyk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgTGlzcF9PYmplY3QKK0NIQVJfVEFCTEVfUkVGX0FTQ0lJIChM aXNwX09iamVjdCBjdCwgcHRyZGlmZl90IGlkeCkKK3sKKyAgc3RydWN0IExpc3BfQ2hhcl9U YWJsZSAqdGJsID0gTlVMTDsKKyAgTGlzcF9PYmplY3QgdmFsOworICBkbworICAgIHsKKyAg ICAgIHRibCA9IHRibCA/IFhDSEFSX1RBQkxFICh0YmwtPnBhcmVudCkgOiBYQ0hBUl9UQUJM RSAoY3QpOworICAgICAgdmFsID0gKCEgU1VCX0NIQVJfVEFCTEVfUCAodGJsLT5hc2NpaSkg PyB0YmwtPmFzY2lpCisJICAgICA6IFhTVUJfQ0hBUl9UQUJMRSAodGJsLT5hc2NpaSktPmNv bnRlbnRzW2lkeF0pOworICAgICAgaWYgKE5JTFAgKHZhbCkpCisJdmFsID0gdGJsLT5kZWZh bHQ7CisgICAgfQorICB3aGlsZSAoTklMUCAodmFsKSAmJiAhIE5JTFAgKHRibC0+cGFyZW50 KSk7CisKKyAgcmV0dXJuIHZhbDsKK30KKworLyogQWxtb3N0IGVxdWl2YWxlbnQgdG8gRmFy ZWYgKENULCBJRFgpIHdpdGggb3B0aW1pemF0aW9uIGZvciBBU0NJSQorICAgY2hhcmFjdGVy cy4gIERvIG5vdCBjaGVjayB2YWxpZGl0eSBvZiBDVC4gICovCitzdGF0aWMgaW5saW5lIExp c3BfT2JqZWN0CitDSEFSX1RBQkxFX1JFRiAoTGlzcF9PYmplY3QgY3QsIGludCBpZHgpCit7 CisgIHJldHVybiAoQVNDSUlfQ0hBUl9QIChpZHgpCisJICA/IENIQVJfVEFCTEVfUkVGX0FT Q0lJIChjdCwgaWR4KQorCSAgOiBjaGFyX3RhYmxlX3JlZiAoY3QsIGlkeCkpOworfQorCisv KiBBbG1vc3QgZXF1aXZhbGVudCB0byBGYXJlZiAoQ1QsIElEWCkuICBIb3dldmVyLCBpZiB0 aGUgcmVzdWx0IGlzCisgICBub3QgYSBjaGFyYWN0ZXIsIHJldHVybiBJRFguCisKKyAgIEZv ciB0aGVzZSBjaGFyYWN0ZXJzLCBkbyBub3QgY2hlY2sgdmFsaWRpdHkgb2YgQ1QKKyAgIGFu ZCBkbyBub3QgZm9sbG93IHBhcmVudC4gICovCitzdGF0aWMgaW5saW5lIGludAorQ0hBUl9U QUJMRV9UUkFOU0xBVEUgKExpc3BfT2JqZWN0IGN0LCBpbnQgaWR4KQoreworICByZXR1cm4g Y2hhcl90YWJsZV90cmFuc2xhdGUgKGN0LCBpZHgpOworfQorCisvKiBFcXVpdmFsZW50IHRv IEZhc2V0IChDVCwgSURYLCBWQUwpIHdpdGggb3B0aW1pemF0aW9uIGZvciBBU0NJSSBhbmQK KyAgIDgtYml0IEV1cm9wZWFuIGNoYXJhY3RlcnMuICBEbyBub3QgY2hlY2sgdmFsaWRpdHkg b2YgQ1QuICAqLworc3RhdGljIGlubGluZSB2b2lkCitDSEFSX1RBQkxFX1NFVCAoTGlzcF9P YmplY3QgY3QsIGludCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgaWYgKEFTQ0lJX0NI QVJfUCAoaWR4KSAmJiBTVUJfQ0hBUl9UQUJMRV9QIChYQ0hBUl9UQUJMRSAoY3QpLT5hc2Np aSkpCisgICAgWFNVQl9DSEFSX1RBQkxFIChYQ0hBUl9UQUJMRSAoY3QpLT5hc2NpaSktPmNv bnRlbnRzW2lkeF0gPSB2YWw7CisgIGVsc2UKKyAgICBjaGFyX3RhYmxlX3NldCAoY3QsIGlk eCwgdmFsKTsKK30KKwogLyogQSBib29sdmVjdG9yIGlzIGEga2luZCBvZiB2ZWN0b3JsaWtl LCB3aXRoIGNvbnRlbnRzIGFyZSBsaWtlIGEgc3RyaW5nLiAgKi8KIHN0cnVjdCBMaXNwX0Jv b2xfVmVjdG9yCiAgIHsKQEAgLTEwNjUsNDEgKzEzMzEsODYgQEAKIAogLyogVmFsdWUgaXMg bmFtZSBvZiBzeW1ib2wuICAqLwogCi0jZGVmaW5lIFNZTUJPTF9WQUwoc3ltKSAgIFwKLSAg KGVhc3NlcnQgKChzeW0pLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpLCAgKHN5bSkt PnZhbC52YWx1ZSkKLSNkZWZpbmUgU1lNQk9MX0FMSUFTKHN5bSkgXAotICAoZWFzc2VydCAo KHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9WQVJBTElBUyksICAoc3ltKS0+dmFsLmFsaWFz KQotI2RlZmluZSBTWU1CT0xfQkxWKHN5bSkgICBcCi0gIChlYXNzZXJ0ICgoc3ltKS0+cmVk aXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCksIChzeW0pLT52YWwuYmx2KQotI2RlZmluZSBT WU1CT0xfRldEKHN5bSkgICBcCi0gIChlYXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lN Qk9MX0ZPUldBUkRFRCksIChzeW0pLT52YWwuZndkKQotI2RlZmluZSBTRVRfU1lNQk9MX1ZB TChzeW0sIHYpICAgICBcCi0gIChlYXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9M X1BMQUlOVkFMKSwgIChzeW0pLT52YWwudmFsdWUgPSAodikpCi0jZGVmaW5lIFNFVF9TWU1C T0xfQUxJQVMoc3ltLCB2KSAgIFwKLSAgKGVhc3NlcnQgKChzeW0pLT5yZWRpcmVjdCA9PSBT WU1CT0xfVkFSQUxJQVMpLCAgKHN5bSktPnZhbC5hbGlhcyA9ICh2KSkKLSNkZWZpbmUgU0VU X1NZTUJPTF9CTFYoc3ltLCB2KSAgICAgXAotICAoZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0 ID09IFNZTUJPTF9MT0NBTElaRUQpLCAoc3ltKS0+dmFsLmJsdiA9ICh2KSkKLSNkZWZpbmUg U0VUX1NZTUJPTF9GV0Qoc3ltLCB2KSBcCi0gIChlYXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3Qg PT0gU1lNQk9MX0ZPUldBUkRFRCksIChzeW0pLT52YWwuZndkID0gKHYpKQorc3RhdGljIGlu bGluZSBMaXNwX09iamVjdAorKFNZTUJPTF9WQUwpIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5 bSkKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpOwor ICByZXR1cm4gc3ltLT52YWwudmFsdWU7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBMaXNw X1N5bWJvbCAqCitTWU1CT0xfQUxJQVMgKHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltKQorewor ICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9WQVJBTElBUyk7CisgIHJldHVy biBzeW0tPnZhbC5hbGlhczsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IExpc3BfQnVmZmVy X0xvY2FsX1ZhbHVlICoKK1NZTUJPTF9CTFYgKHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltKQor eworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9MT0NBTElaRUQpOworICBy ZXR1cm4gc3ltLT52YWwuYmx2OworfQorc3RhdGljIGlubGluZSB1bmlvbiBMaXNwX0Z3ZCAq CitTWU1CT0xfRldEIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSkKK3sKKyAgZWFzc2VydCAo c3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfRk9SV0FSREVEKTsKKyAgcmV0dXJuIHN5bS0+dmFs LmZ3ZDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZAorKFNFVF9TWU1CT0xfVkFMKSAoc3RydWN0 IExpc3BfU3ltYm9sICpzeW0sIExpc3BfT2JqZWN0IHYpCit7CisgIGVhc3NlcnQgKHN5bS0+ cmVkaXJlY3QgPT0gU1lNQk9MX1BMQUlOVkFMKTsKKyAgc3ltLT52YWwudmFsdWUgPSB2Owor fQorc3RhdGljIGlubGluZSB2b2lkCitTRVRfU1lNQk9MX0FMSUFTIChzdHJ1Y3QgTGlzcF9T eW1ib2wgKnN5bSwgc3RydWN0IExpc3BfU3ltYm9sICp2KQoreworICBlYXNzZXJ0IChzeW0t PnJlZGlyZWN0ID09IFNZTUJPTF9WQVJBTElBUyk7CisgIHN5bS0+dmFsLmFsaWFzID0gdjsK K30KK3N0YXRpYyBpbmxpbmUgdm9pZAorU0VUX1NZTUJPTF9CTFYgKHN0cnVjdCBMaXNwX1N5 bWJvbCAqc3ltLCBzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9jYWxfVmFsdWUgKnYpCit7CisgIGVh c3NlcnQgKHN5bS0+cmVkaXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCk7CisgIHN5bS0+dmFs LmJsdiA9IHY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK1NFVF9TWU1CT0xfRldEIChzdHJ1 Y3QgTGlzcF9TeW1ib2wgKnN5bSwgdW5pb24gTGlzcF9Gd2QgKnYpCit7CisgIGVhc3NlcnQg KHN5bS0+cmVkaXJlY3QgPT0gU1lNQk9MX0ZPUldBUkRFRCk7CisgIHN5bS0+dmFsLmZ3ZCA9 IHY7Cit9CiAKLSNkZWZpbmUgU1lNQk9MX05BTUUoc3ltKSAgXAotICAgICBMSVNQX01BS0Vf UlZBTFVFIChYU1lNQk9MIChzeW0pLT54bmFtZSkKK3N0YXRpYyBpbmxpbmUgTGlzcF9PYmpl Y3QKK1NZTUJPTF9OQU1FIChMaXNwX09iamVjdCBzeW0pCit7CisgIHJldHVybiBYU1lNQk9M IChzeW0pLT54bmFtZTsKK30KIAogLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgU1lNIGlzIGFu IGludGVybmVkIHN5bWJvbC4gICovCiAKLSNkZWZpbmUgU1lNQk9MX0lOVEVSTkVEX1Aoc3lt KSAgXAotICAgICAoWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQgIT0gU1lNQk9MX1VOSU5URVJO RUQpCitzdGF0aWMgaW5saW5lIGludAorU1lNQk9MX0lOVEVSTkVEX1AgKExpc3BfT2JqZWN0 IHN5bSkKK3sKKyAgcmV0dXJuIFhTWU1CT0wgKHN5bSktPmludGVybmVkICE9IFNZTUJPTF9V TklOVEVSTkVEOworfQogCiAvKiBWYWx1ZSBpcyBub24temVybyBpZiBTWU0gaXMgaW50ZXJu ZWQgaW4gaW5pdGlhbF9vYmFycmF5LiAgKi8KIAotI2RlZmluZSBTWU1CT0xfSU5URVJORURf SU5fSU5JVElBTF9PQkFSUkFZX1Aoc3ltKSBcCi0gICAgIChYU1lNQk9MIChzeW0pLT5pbnRl cm5lZCA9PSBTWU1CT0xfSU5URVJORURfSU5fSU5JVElBTF9PQkFSUkFZKQorc3RhdGljIGlu bGluZSBpbnQKK1NZTUJPTF9JTlRFUk5FRF9JTl9JTklUSUFMX09CQVJSQVlfUCAoTGlzcF9P YmplY3Qgc3ltKQoreworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQgPT0gU1lN Qk9MX0lOVEVSTkVEX0lOX0lOSVRJQUxfT0JBUlJBWTsKK30KIAogLyogVmFsdWUgaXMgbm9u LXplcm8gaWYgc3ltYm9sIGlzIGNvbnNpZGVyZWQgYSBjb25zdGFudCwgaS5lLiBpdHMKICAg IHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkICh0aGVyZSBpcyBhbiBleGNlcHRpb24gZm9yIGtl eXdvcmQgc3ltYm9scywKICAgIHdob3NlIHZhbHVlIGNhbiBiZSBzZXQgdG8gdGhlIGtleXdv cmQgc3ltYm9sIGl0c2VsZikuICAqLwogCi0jZGVmaW5lIFNZTUJPTF9DT05TVEFOVF9QKHN5 bSkgICBYU1lNQk9MIChzeW0pLT5jb25zdGFudAorc3RhdGljIGlubGluZSBpbnQKKyhTWU1C T0xfQ09OU1RBTlRfUCkgKExpc3BfT2JqZWN0IHN5bSkKK3sKKyAgcmV0dXJuIFhTWU1CT0wg KHN5bSktPmNvbnN0YW50OworfQogCiAjZGVmaW5lIERFRlNZTShzeW0sIG5hbWUpCVwKICAg ZG8geyAoc3ltKSA9IGludGVybl9jX3N0cmluZyAoKG5hbWUpKTsgc3RhdGljcHJvICgmKHN5 bSkpOyB9IHdoaWxlICgwKQpAQCAtMTE4MSwxNiArMTQ5MiwyNSBAQAogfTsKIAogCi0jZGVm aW5lIFhIQVNIX1RBQkxFKE9CSikgXAotICAgICAoKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUg KikgWFVOVEFHIChPQkosIExpc3BfVmVjdG9ybGlrZSkpCitzdGF0aWMgaW5saW5lIHN0cnVj dCBMaXNwX0hhc2hfVGFibGUgKgorWEhBU0hfVEFCTEUgKExpc3BfT2JqZWN0IGEpCit7Cisg IHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7Cit9CiAKICNkZWZpbmUgWFNF VF9IQVNIX1RBQkxFKFZBUiwgUFRSKSBcCiAgICAgIChYU0VUUFNFVURPVkVDVE9SIChWQVIs IFBUUiwgUFZFQ19IQVNIX1RBQkxFKSkKIAotI2RlZmluZSBIQVNIX1RBQkxFX1AoT0JKKSAg UFNFVURPVkVDVE9SUCAoT0JKLCBQVkVDX0hBU0hfVEFCTEUpCi0KLSNkZWZpbmUgQ0hFQ0tf SEFTSF9UQUJMRSh4KSBcCi0gIENIRUNLX1RZUEUgKEhBU0hfVEFCTEVfUCAoeCksIFFoYXNo X3RhYmxlX3AsIHgpCitzdGF0aWMgaW5saW5lIGludAorSEFTSF9UQUJMRV9QIChMaXNwX09i amVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19IQVNIX1RBQkxF KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0hFQ0tfSEFTSF9UQUJMRSAoTGlzcF9PYmpl Y3QgeCkKK3sKKyAgcmV0dXJuIENIRUNLX1RZUEUgKEhBU0hfVEFCTEVfUCAoeCksIFFoYXNo X3RhYmxlX3AsIHgpOworfQogCiAvKiBWYWx1ZSBpcyB0aGUga2V5IHBhcnQgb2YgZW50cnkg SURYIGluIGhhc2ggdGFibGUgSC4gICovCiAKQEAgLTEyMTUsMTIgKzE1MzUsMTQgQEAKICNk ZWZpbmUgSEFTSF9JTkRFWChILCBJRFgpICBBUkVGICgoSCktPmluZGV4LCAoSURYKSkKIAog LyogVmFsdWUgaXMgdGhlIHNpemUgb2YgaGFzaCB0YWJsZSBILiAgKi8KLQotI2RlZmluZSBI QVNIX1RBQkxFX1NJWkUoSCkgQVNJWkUgKChIKS0+bmV4dCkKK3N0YXRpYyBpbmxpbmUgcHRy ZGlmZl90CitIQVNIX1RBQkxFX1NJWkUgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpCit7 CisgIHJldHVybiBBU0laRSAoaC0+bmV4dCk7Cit9CiAKIC8qIERlZmF1bHQgc2l6ZSBmb3Ig aGFzaCB0YWJsZXMgaWYgbm90IHNwZWNpZmllZC4gICovCi0KLSNkZWZpbmUgREVGQVVMVF9I QVNIX1NJWkUgNjUKK2VudW0geyBERUZBVUxUX0hBU0hfU0laRSA9IDY1IH07CiAKIC8qIERl ZmF1bHQgdGhyZXNob2xkIHNwZWNpZnlpbmcgd2hlbiB0byByZXNpemUgYSBoYXNoIHRhYmxl LiAgVGhlCiAgICB2YWx1ZSBnaXZlcyB0aGUgcmF0aW8gb2YgY3VycmVudCBlbnRyaWVzIGlu IHRoZSBoYXNoIHRhYmxlIGFuZCB0aGUKQEAgLTEzMzAsNiArMTY1Miw0MyBAQAogICAgIHN0 cnVjdCBMaXNwX1NhdmVfVmFsdWUgdV9zYXZlX3ZhbHVlOwogICB9OwogCitzdGF0aWMgaW5s aW5lIHVuaW9uIExpc3BfTWlzYyAqCitYTUlTQyAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0 dXJuIFhVTlRBRyAoYSwgTGlzcF9NaXNjKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg TGlzcF9NaXNjX0FueSAqCitYTUlTQ0FOWSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2Vy dCAoTUlTQ1AgKGEpKTsKKyAgcmV0dXJuICYgWE1JU0MgKGEpLT51X2FueTsKK30KKworLyog QSBtYWNybyBiZWNhdXNlIGl0IGlzIGFsc28gdXNlZCBhcyBhbiBsdmFsdWUuICBGSVhNRTog Y2xlYW4gdGhpcyB1cC4gICovCisjZGVmaW5lIFhNSVNDVFlQRShhKSAgIChYTUlTQ0FOWSAo YSktPnR5cGUpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IExpc3BfTWFya2VyICoKK1hNQVJL RVIgKExpc3BfT2JqZWN0IGEpCit7CisgIGVhc3NlcnQgKE1BUktFUlAgKGEpKTsKKyAgcmV0 dXJuICYgWE1JU0MgKGEpLT51X21hcmtlcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg TGlzcF9PdmVybGF5ICoKK1hPVkVSTEFZIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0 IChPVkVSTEFZUCAoYSkpOworICByZXR1cm4gJiBYTUlTQyAoYSktPnVfb3ZlcmxheTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgTGlzcF9TYXZlX1ZhbHVlICoKK1hTQVZFX1ZBTFVF IChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChTQVZFX1ZBTFVFUCAoYSkpOworICBy ZXR1cm4gJiBYTUlTQyAoYSktPnVfc2F2ZV92YWx1ZTsKK30KKwwKIC8qIEZvcndhcmRpbmcg cG9pbnRlciB0byBhbiBpbnQgdmFyaWFibGUuCiAgICBUaGlzIGlzIGFsbG93ZWQgb25seSBp biB0aGUgdmFsdWUgY2VsbCBvZiBhIHN5bWJvbCwKICAgIGFuZCBpdCBtZWFucyB0aGF0IHRo ZSBzeW1ib2wncyB2YWx1ZSByZWFsbHkgbGl2ZXMgaW4gdGhlCkBAIC0xNDE5LDEzICsxNzc4 LDI5IEBACiAgICAgTGlzcF9PYmplY3QgdmFsY2VsbDsKICAgfTsKIAotI2RlZmluZSBCTFZf Rk9VTkQoYmx2KSBcCi0gIChlYXNzZXJ0ICgoYmx2KS0+Zm91bmQgPT0gIUVRICgoYmx2KS0+ ZGVmY2VsbCwgKGJsdiktPnZhbGNlbGwpKSwgKGJsdiktPmZvdW5kKQotI2RlZmluZSBTRVRf QkxWX0ZPVU5EKGJsdiwgdikgXAotICAoZWFzc2VydCAoKHYpID09ICFFUSAoKGJsdiktPmRl ZmNlbGwsIChibHYpLT52YWxjZWxsKSksIChibHYpLT5mb3VuZCA9ICh2KSkKK3N0YXRpYyBp bmxpbmUgaW50CitCTFZfRk9VTkQgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAq Ymx2KQoreworICBlYXNzZXJ0IChibHYtPmZvdW5kID09ICFFUSAoYmx2LT5kZWZjZWxsLCBi bHYtPnZhbGNlbGwpKTsKKyAgcmV0dXJuIGJsdi0+Zm91bmQ7Cit9CitzdGF0aWMgaW5saW5l IHZvaWQKK1NFVF9CTFZfRk9VTkQgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAq Ymx2LCBpbnQgdikKK3sKKyAgZWFzc2VydCAodiA9PSAhRVEgKGJsdi0+ZGVmY2VsbCwgYmx2 LT52YWxjZWxsKSk7CisgIGJsdi0+Zm91bmQgPSB2OworfQogCi0jZGVmaW5lIEJMVl9WQUxV RShibHYpIChYQ0RSICgoYmx2KS0+dmFsY2VsbCkpCi0jZGVmaW5lIFNFVF9CTFZfVkFMVUUo Ymx2LCB2KSAoWFNFVENEUiAoKGJsdiktPnZhbGNlbGwsIHYpKQorc3RhdGljIGlubGluZSBM aXNwX09iamVjdAorQkxWX1ZBTFVFIChzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9jYWxfVmFsdWUg KmJsdikKK3sKKyAgcmV0dXJuIFhDRFIgKGJsdi0+dmFsY2VsbCk7Cit9CitzdGF0aWMgaW5s aW5lIHZvaWQKK1NFVF9CTFZfVkFMVUUgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1 ZSAqYmx2LCBMaXNwX09iamVjdCB2KQoreworICBYU0VUQ0RSIChibHYtPnZhbGNlbGwsIHYp OworfQogCiAvKiBMaWtlIExpc3BfT2JqZndkIGV4Y2VwdCB0aGF0IHZhbHVlIGxpdmVzIGlu IGEgc2xvdCBpbiB0aGUKICAgIGN1cnJlbnQga2JvYXJkLiAgKi8KQEAgLTE0NDMsNiArMTgx OCw0NyBAQAogICAgIHN0cnVjdCBMaXNwX0J1ZmZlcl9PYmpmd2QgdV9idWZmZXJfb2JqZndk OwogICAgIHN0cnVjdCBMaXNwX0tib2FyZF9PYmpmd2QgdV9rYm9hcmRfb2JqZndkOwogICB9 OworCitzdGF0aWMgaW5saW5lIGVudW0gTGlzcF9Gd2RfVHlwZQorWEZXRFRZUEUgKHVuaW9u IExpc3BfRndkICphKQoreworICByZXR1cm4gYS0+dV9pbnRmd2QudHlwZTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgTGlzcF9JbnRmd2QgKgorWElOVEZXRCAodW5pb24gTGlzcF9G d2QgKmEpCit7CisgIGVhc3NlcnQgKElOVEZXRFAgKGEpKTsKKyAgcmV0dXJuICZhLT51X2lu dGZ3ZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgTGlzcF9Cb29sZndkICoKK1hCT09M RldEICh1bmlvbiBMaXNwX0Z3ZCAqYSkKK3sKKyAgZWFzc2VydCAoQk9PTEZXRFAgKGEpKTsK KyAgcmV0dXJuICZhLT51X2Jvb2xmd2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IExp c3BfT2JqZndkICoKK1hPQkpGV0QgKHVuaW9uIExpc3BfRndkICphKQoreworICBlYXNzZXJ0 IChPQkpGV0RQIChhKSk7CisgIHJldHVybiAmYS0+dV9vYmpmd2Q7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IExpc3BfQnVmZmVyX09iamZ3ZCAqCitYQlVGRkVSX09CSkZXRCAodW5p b24gTGlzcF9Gd2QgKmEpCit7CisgIGVhc3NlcnQgKEJVRkZFUl9PQkpGV0RQIChhKSk7Cisg IHJldHVybiAmYS0+dV9idWZmZXJfb2JqZndkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj dCBMaXNwX0tib2FyZF9PYmpmd2QgKgorWEtCT0FSRF9PQkpGV0QgKHVuaW9uIExpc3BfRndk ICphKQoreworICBlYXNzZXJ0IChLQk9BUkRfT0JKRldEUCAoYSkpOworICByZXR1cm4gJmEt PnVfa2JvYXJkX29iamZ3ZDsKK30KIAwKIC8qIExpc3AgZmxvYXRpbmcgcG9pbnQgdHlwZS4g ICovCiBzdHJ1Y3QgTGlzcF9GbG9hdApAQCAtMTQ1OCwxMyArMTg3NCwyNCBAQAogICAgIH0g dTsKICAgfTsKIAorc3RhdGljIGlubGluZSBkb3VibGUKK1hGTE9BVF9EQVRBIChMaXNwX09i amVjdCBmKQorewogI2lmZGVmIEhJREVfTElTUF9JTVBMRU1FTlRBVElPTgotI2RlZmluZSBY RkxPQVRfREFUQShmKQkoMCA/IFhGTE9BVCAoZiktPnUuZGF0YV8gOiBYRkxPQVQgKGYpLT51 LmRhdGFfKQorICByZXR1cm4gWEZMT0FUIChmKS0+dS5kYXRhXzsKICNlbHNlCi0jZGVmaW5l IFhGTE9BVF9EQVRBKGYpCSgwID8gWEZMT0FUIChmKS0+dS5kYXRhIDogIFhGTE9BVCAoZikt PnUuZGF0YSkKKyAgcmV0dXJuIFhGTE9BVCAoZiktPnUuZGF0YTsKKyNlbmRpZgorfQorCisj aWZuZGVmIEhJREVfTElTUF9JTVBMRU1FTlRBVElPTgogLyogVGhpcyBzaG91bGQgYmUgdXNl ZCBvbmx5IGluIGFsbG9jLmMsIHdoaWNoIGFsd2F5cyBkaXNhYmxlcwogICAgSElERV9MSVNQ X0lNUExFTUVOVEFUSU9OLiAgKi8KLSNkZWZpbmUgWEZMT0FUX0lOSVQoZixuKSAoWEZMT0FU IChmKS0+dS5kYXRhID0gKG4pKQorc3RhdGljIGlubGluZSB2b2lkCitYRkxPQVRfSU5JVCAo TGlzcF9PYmplY3QgZiwgZG91YmxlIG4pCit7CisgIFhGTE9BVCAoZiktPnUuZGF0YSA9IG47 Cit9CiAjZW5kaWYKIAogLyogQSBjaGFyYWN0ZXIsIGRlY2xhcmVkIHdpdGggdGhlIGZvbGxv d2luZyB0eXBlZGVmLCBpcyBhIG1lbWJlcgpAQCAtMTQ3NSw5MSArMTkwMiwzNiBAQAogI2Vu ZGlmCiAKIC8qIE1lYW5pbmdzIG9mIHNsb3RzIGluIGEgTGlzcF9Db21waWxlZDogICovCi0K LSNkZWZpbmUgQ09NUElMRURfQVJHTElTVCAwCi0jZGVmaW5lIENPTVBJTEVEX0JZVEVDT0RF IDEKLSNkZWZpbmUgQ09NUElMRURfQ09OU1RBTlRTIDIKLSNkZWZpbmUgQ09NUElMRURfU1RB Q0tfREVQVEggMwotI2RlZmluZSBDT01QSUxFRF9ET0NfU1RSSU5HIDQKLSNkZWZpbmUgQ09N UElMRURfSU5URVJBQ1RJVkUgNQorZW51bQorICB7CisgICAgQ09NUElMRURfQVJHTElTVCwK KyAgICBDT01QSUxFRF9CWVRFQ09ERSwKKyAgICBDT01QSUxFRF9DT05TVEFOVFMsCisgICAg Q09NUElMRURfU1RBQ0tfREVQVEgsCisgICAgQ09NUElMRURfRE9DX1NUUklORywKKyAgICBD T01QSUxFRF9JTlRFUkFDVElWRQorICB9OwogCiAvKiBGbGFnIGJpdHMgaW4gYSBjaGFyYWN0 ZXIuICBUaGVzZSBhbHNvIGdldCB1c2VkIGluIHRlcm1ob29rcy5oLgogICAgUmljaGFyZCBT dGFsbG1hbiA8cm1zQGdudS5haS5taXQuZWR1PiB0aGlua3MgdGhhdCBNVUxFCiAgICAoTVVs dGktTGluZ3VhbCBFbWFjcykgbWlnaHQgbmVlZCAyMiBiaXRzIGZvciB0aGUgY2hhcmFjdGVy IHZhbHVlCiAgICBpdHNlbGYsIHNvIHdlIHByb2JhYmx5IHNob3VsZG4ndCB1c2UgYW55IGJp dHMgbG93ZXIgdGhhbiAweDA0MDAwMDAuICAqLwotI2RlZmluZSBDSEFSX0FMVCAgICgweDA0 MDAwMDApCi0jZGVmaW5lIENIQVJfU1VQRVIgKDB4MDgwMDAwMCkKLSNkZWZpbmUgQ0hBUl9I WVBFUiAoMHgxMDAwMDAwKQotI2RlZmluZSBDSEFSX1NISUZUICgweDIwMDAwMDApCi0jZGVm aW5lIENIQVJfQ1RMICAgKDB4NDAwMDAwMCkKLSNkZWZpbmUgQ0hBUl9NRVRBICAoMHg4MDAw MDAwKQotCi0jZGVmaW5lIENIQVJfTU9ESUZJRVJfTUFTSyBcCi0gIChDSEFSX0FMVCB8IENI QVJfU1VQRVIgfCBDSEFSX0hZUEVSICB8IENIQVJfU0hJRlQgfCBDSEFSX0NUTCB8IENIQVJf TUVUQSkKLQorZW51bQorICB7CisgICAgQ0hBUl9BTFQgICA9IDB4MDQwMDAwMCwKKyAgICBD SEFSX1NVUEVSID0gMHgwODAwMDAwLAorICAgIENIQVJfSFlQRVIgPSAweDEwMDAwMDAsCisg ICAgQ0hBUl9TSElGVCA9IDB4MjAwMDAwMCwKKyAgICBDSEFSX0NUTCAgID0gMHg0MDAwMDAw LAorICAgIENIQVJfTUVUQSAgPSAweDgwMDAwMDAsCisgICAgQ0hBUl9NT0RJRklFUl9NQVNL ID0KKyAgICAgIENIQVJfQUxUIHwgQ0hBUl9TVVBFUiB8IENIQVJfSFlQRVIgIHwgQ0hBUl9T SElGVCB8IENIQVJfQ1RMIHwgQ0hBUl9NRVRBCisgIH07CiAKIC8qIEFjdHVhbGx5LCB0aGUg Y3VycmVudCBFbWFjcyB1c2VzIDIyIGJpdHMgZm9yIHRoZSBjaGFyYWN0ZXIgdmFsdWUKICAg IGl0c2VsZi4gICovCi0jZGVmaW5lIENIQVJBQ1RFUkJJVFMgMjIKLQotDAotLyogVGhlIGds eXBoIGRhdGF0eXBlLCB1c2VkIHRvIHJlcHJlc2VudCBjaGFyYWN0ZXJzIG9uIHRoZSBkaXNw bGF5LgotICAgSXQgY29uc2lzdHMgb2YgYSBjaGFyIGNvZGUgYW5kIGEgZmFjZSBpZC4gICov Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGNoOwotICBpbnQgZmFjZV9pZDsKLX0gR0xZ UEg7Ci0KLS8qIFJldHVybiBhIGdseXBoJ3MgY2hhcmFjdGVyIGNvZGUuICAqLwotI2RlZmlu ZSBHTFlQSF9DSEFSKGdseXBoKSAoKGdseXBoKS5jaCkKLQotLyogUmV0dXJuIGEgZ2x5cGgn cyBmYWNlIElELiAgKi8KLSNkZWZpbmUgR0xZUEhfRkFDRShnbHlwaCkgKChnbHlwaCkuZmFj ZV9pZCkKLQotI2RlZmluZSBTRVRfR0xZUEhfQ0hBUihnbHlwaCwgY2hhcikgKChnbHlwaCku Y2ggPSAoY2hhcikpCi0jZGVmaW5lIFNFVF9HTFlQSF9GQUNFKGdseXBoLCBmYWNlKSAoKGds eXBoKS5mYWNlX2lkID0gKGZhY2UpKQotI2RlZmluZSBTRVRfR0xZUEgoZ2x5cGgsIGNoYXIs IGZhY2UpICgoZ2x5cGgpLmNoID0gKGNoYXIpLCAoZ2x5cGgpLmZhY2VfaWQgPSAoZmFjZSkp Ci0KLS8qIFJldHVybiAxIGlmIEdMWVBIIGNvbnRhaW5zIHZhbGlkIGNoYXJhY3RlciBjb2Rl LiAgKi8KLSNkZWZpbmUgR0xZUEhfQ0hBUl9WQUxJRF9QKGdseXBoKSBDSEFSX1ZBTElEX1Ag KEdMWVBIX0NIQVIgKGdseXBoKSkKLQotCi0vKiBHbHlwaCBDb2RlIGZyb20gYSBkaXNwbGF5 IHZlY3RvciBtYXkgZWl0aGVyIGJlIGFuIGludGVnZXIgd2hpY2gKLSAgIGVuY29kZXMgYSBj aGFyIGNvZGUgaW4gdGhlIGxvd2VyIENIQVJBQ1RFUkJJVFMgYml0cyBhbmQgYSAodmVyeSBz bWFsbCkKLSAgIGZhY2UtaWQgaW4gdGhlIHVwcGVyIGJpdHMsIG9yIGl0IG1heSBiZSBhIGNv bnMgKENIQVIgLiBGQUNFLUlEKS4gICovCi0KLSNkZWZpbmUgR0xZUEhfQ09ERV9QKGdjKQkJ CQkJCVwKLSAgKENPTlNQIChnYykJCQkJCQkJCVwKLSAgID8gKENIQVJBQ1RFUlAgKFhDQVIg KGdjKSkJCQkJCQlcCi0gICAgICAmJiBSQU5HRURfSU5URUdFUlAgKDAsIFhDRFIgKGdjKSwg TUFYX0ZBQ0VfSUQpKQkJCVwKLSAgIDogKFJBTkdFRF9JTlRFR0VSUAkJCQkJCQlcCi0gICAg ICAoMCwgZ2MsCQkJCQkJCQlcCi0gICAgICAgKE1BWF9GQUNFX0lEIDwgVFlQRV9NQVhJTVVN IChFTUFDU19JTlQpID4+IENIQVJBQ1RFUkJJVFMJCVwKLQk/ICgoRU1BQ1NfSU5UKSBNQVhf RkFDRV9JRCA8PCBDSEFSQUNURVJCSVRTKSB8IE1BWF9DSEFSCQlcCi0JOiBUWVBFX01BWElN VU0gKEVNQUNTX0lOVCkpKSkpCi0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIG9ubHkg aWYgR0xZUEhfQ09ERV9QIChnYykuICAqLwotCi0jZGVmaW5lIEdMWVBIX0NPREVfQ0hBUihn YykgXAotICAoQ09OU1AgKGdjKSA/IFhJTlQgKFhDQVIgKGdjKSkgOiBYSU5UIChnYykgJiAo KDEgPDwgQ0hBUkFDVEVSQklUUykgLSAxKSkKLQotI2RlZmluZSBHTFlQSF9DT0RFX0ZBQ0Uo Z2MpIFwKLSAgKENPTlNQIChnYykgPyBYSU5UIChYQ0RSIChnYykpIDogWElOVCAoZ2MpID4+ IENIQVJBQ1RFUkJJVFMpCi0KLSNkZWZpbmUgU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERShn bHlwaCwgZ2MpCQkJCVwKLSAgZG8JCQkJCQkJCQlcCi0gICAgewkJCQkJCQkJCVwKLSAgICAg IGlmIChDT05TUCAoZ2MpKQkJCQkJCQlcCi0JU0VUX0dMWVBIIChnbHlwaCwgWElOVCAoWENB UiAoZ2MpKSwgWElOVCAoWENEUiAoZ2MpKSk7CQlcCi0gICAgICBlbHNlCQkJCQkJCQlcCi0J U0VUX0dMWVBIIChnbHlwaCwgKFhJTlQgKGdjKSAmICgoMSA8PCBDSEFSQUNURVJCSVRTKS0x KSksCVwKLQkJICAgKFhJTlQgKGdjKSA+PiBDSEFSQUNURVJCSVRTKSk7CQkJXAotICAgIH0J CQkJCQkJCQlcCi0gIHdoaWxlICgwKQotCi0vKiBUaGUgSUQgb2YgdGhlIG1vZGUgbGluZSBo aWdobGlnaHRpbmcgZmFjZS4gICovCi0jZGVmaW5lIEdMWVBIX01PREVfTElORV9GQUNFIDEK K2VudW0geyBDSEFSQUNURVJCSVRTID0gMjIgfTsKKwogDAogLyogU3RydWN0dXJlIHRvIGhv bGQgbW91c2UgaGlnaGxpZ2h0IGRhdGEuICBUaGlzIGlzIGhlcmUgYmVjYXVzZSBvdGhlcgog ICAgaGVhZGVyIGZpbGVzIG5lZWQgaXQgZm9yIGRlZmluaW5nIHN0cnVjdCB4X291dHB1dCBl dGMuICAqLwpAQCAtMTU5OCwxNDAgKzE5NzAsMzA4IEBACiAMCiAvKiBEYXRhIHR5cGUgY2hl Y2tpbmcgKi8KIAotI2RlZmluZSBOSUxQKHgpICBFUSAoeCwgUW5pbCkKLQotI2RlZmluZSBO VU1CRVJQKHgpIChJTlRFR0VSUCAoeCkgfHwgRkxPQVRQICh4KSkKLSNkZWZpbmUgTkFUTlVN UCh4KSAoSU5URUdFUlAgKHgpICYmIFhJTlQgKHgpID49IDApCi0KLSNkZWZpbmUgUkFOR0VE X0lOVEVHRVJQKGxvLCB4LCBoaSkgXAotICAoSU5URUdFUlAgKHgpICYmIChsbykgPD0gWElO VCAoeCkgJiYgWElOVCAoeCkgPD0gKGhpKSkKK3N0YXRpYyBpbmxpbmUgaW50CisoTklMUCkg KExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBFUSAoeCwgUW5pbCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50CitOVU1CRVJQIChMaXNwX09iamVjdCB4KQoreworICByZXR1cm4gSU5U RUdFUlAgKHgpIHx8IEZMT0FUUCAoeCk7Cit9CitzdGF0aWMgaW5saW5lIGludAorTkFUTlVN UCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIElOVEVHRVJQICh4KSAmJiAwIDw9IFhJ TlQgKHgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorUkFOR0VEX0lOVEVHRVJQIChpbnRt YXhfdCBsbywgTGlzcF9PYmplY3QgeCwgaW50bWF4X3QgaGkpCit7CisgIHJldHVybiBJTlRF R0VSUCAoeCkgJiYgbG8gPD0gWElOVCAoeCkgJiYgWElOVCAoeCkgPD0gaGk7Cit9CisKICNk ZWZpbmUgVFlQRV9SQU5HRURfSU5URUdFUlAodHlwZSwgeCkgXAotICAoVFlQRV9TSUdORUQg KHR5cGUpCQkJCQkJCVwKLSAgID8gUkFOR0VEX0lOVEVHRVJQIChUWVBFX01JTklNVU0gKHR5 cGUpLCB4LCBUWVBFX01BWElNVU0gKHR5cGUpKQlcCi0gICA6IFJBTkdFRF9JTlRFR0VSUCAo MCwgeCwgVFlQRV9NQVhJTVVNICh0eXBlKSkpCi0KLSNkZWZpbmUgSU5URUdFUlAoeCkgKExJ U1BfSU5UX1RBR19QIChYVFlQRSAoKHgpKSkpCi0jZGVmaW5lIFNZTUJPTFAoeCkgKFhUWVBF ICgoeCkpID09IExpc3BfU3ltYm9sKQotI2RlZmluZSBNSVNDUCh4KSAoWFRZUEUgKCh4KSkg PT0gTGlzcF9NaXNjKQotI2RlZmluZSBWRUNUT1JMSUtFUCh4KSAoWFRZUEUgKCh4KSkgPT0g TGlzcF9WZWN0b3JsaWtlKQotI2RlZmluZSBTVFJJTkdQKHgpIChYVFlQRSAoKHgpKSA9PSBM aXNwX1N0cmluZykKLSNkZWZpbmUgQ09OU1AoeCkgKFhUWVBFICgoeCkpID09IExpc3BfQ29u cykKLQotI2RlZmluZSBGTE9BVFAoeCkgKFhUWVBFICgoeCkpID09IExpc3BfRmxvYXQpCi0j ZGVmaW5lIFZFQ1RPUlAoeCkgKFZFQ1RPUkxJS0VQICh4KSAmJiAhKEFTSVpFICh4KSAmIFBT RVVET1ZFQ1RPUl9GTEFHKSkKLSNkZWZpbmUgT1ZFUkxBWVAoeCkgKE1JU0NQICh4KSAmJiBY TUlTQ1RZUEUgKHgpID09IExpc3BfTWlzY19PdmVybGF5KQotI2RlZmluZSBNQVJLRVJQKHgp IChNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfTWFya2VyKQotI2Rl ZmluZSBTQVZFX1ZBTFVFUCh4KSAoTUlTQ1AgKHgpICYmIFhNSVNDVFlQRSAoeCkgPT0gTGlz cF9NaXNjX1NhdmVfVmFsdWUpCi0KLSNkZWZpbmUgSU5URldEUCh4KSAoWEZXRFRZUEUgKHgp ID09IExpc3BfRndkX0ludCkKLSNkZWZpbmUgQk9PTEZXRFAoeCkgKFhGV0RUWVBFICh4KSA9 PSBMaXNwX0Z3ZF9Cb29sKQotI2RlZmluZSBPQkpGV0RQKHgpIChYRldEVFlQRSAoeCkgPT0g TGlzcF9Gd2RfT2JqKQotI2RlZmluZSBCVUZGRVJfT0JKRldEUCh4KSAoWEZXRFRZUEUgKHgp ID09IExpc3BfRndkX0J1ZmZlcl9PYmopCi0jZGVmaW5lIEtCT0FSRF9PQkpGV0RQKHgpIChY RldEVFlQRSAoeCkgPT0gTGlzcF9Gd2RfS2JvYXJkX09iaikKLQotLyogVHJ1ZSBpZiBvYmpl Y3QgWCBpcyBhIHBzZXVkb3ZlY3RvciB3aG9zZSBjb2RlIGlzIENPREUuICBUaGUgY2FzdCB0 byBzdHJ1Y3QKLSAgIHZlY3Rvcmxpa2VfaGVhZGVyICogYXZvaWRzIGFsaWFzaW5nIGlzc3Vl cy4gICovCi0jZGVmaW5lIFBTRVVET1ZFQ1RPUlAoeCwgY29kZSkJCQkJCVwKLSAgVFlQRURf UFNFVURPVkVDVE9SUCAoeCwgdmVjdG9ybGlrZV9oZWFkZXIsIGNvZGUpCi0KLSNkZWZpbmUg UFNFVURPVkVDVE9SX1RZUEVQKHYsIGNvZGUpCQkJCQlcCi0gICgoKHYpLT5zaXplICYgKFBT RVVET1ZFQ1RPUl9GTEFHIHwgUFZFQ19UWVBFX01BU0spKQkJCVwKLSAgID09IChQU0VVRE9W RUNUT1JfRkxBRyB8ICgoY29kZSkgPDwgUFNFVURPVkVDVE9SX1NJWkVfQklUUykpKQotCi0v KiBUcnVlIGlmIG9iamVjdCBYLCB3aXRoIGludGVybmFsIHR5cGUgc3RydWN0IFQgKiwgaXMg YSBwc2V1ZG92ZWN0b3Igd2hvc2UKLSAgIGNvZGUgaXMgQ09ERS4gICovCi0jZGVmaW5lIFRZ UEVEX1BTRVVET1ZFQ1RPUlAoeCwgdCwgY29kZSkJCQkJXAotICAoVkVDVE9STElLRVAgKHgp CQkJCQkJXAotICAgJiYgUFNFVURPVkVDVE9SX1RZUEVQICgoc3RydWN0IHQgKikgWFVOVEFH ICh4LCBMaXNwX1ZlY3Rvcmxpa2UpLCBjb2RlKSkKKyAgKElOVEVHRVJQICh4KQkJCSAgICAg IFwKKyAgICYmIChUWVBFX1NJR05FRCAodHlwZSkgPyBUWVBFX01JTklNVU0gKHR5cGUpIDw9 IFhJTlQgKHgpIDogMCA8PSBYSU5UICh4KSkgXAorICAgJiYgWElOVCAoeCkgPD0gVFlQRV9N QVhJTVVNICh0eXBlKSkKKworc3RhdGljIGlubGluZSBpbnQgKENPTlNQKSAoTGlzcF9PYmpl Y3QgeCkgeyByZXR1cm4gWFRZUEUgKHgpID09IExpc3BfQ29uczsgfQorc3RhdGljIGlubGlu ZSBpbnQgKEZMT0FUUCkgKExpc3BfT2JqZWN0IHgpIHsgcmV0dXJuIFhUWVBFICh4KSA9PSBM aXNwX0Zsb2F0OyB9CitzdGF0aWMgaW5saW5lIGludCAoTUlTQ1ApIChMaXNwX09iamVjdCB4 KSB7IHJldHVybiBYVFlQRSAoeCkgPT0gTGlzcF9NaXNjOyB9CitzdGF0aWMgaW5saW5lIGlu dCBTVFJJTkdQIChMaXNwX09iamVjdCB4KSB7IHJldHVybiBYVFlQRSAoeCkgPT0gTGlzcF9T dHJpbmc7IH0KK3N0YXRpYyBpbmxpbmUgaW50CisoU1lNQk9MUCkgKExpc3BfT2JqZWN0IHgp Cit7CisgIHJldHVybiBYVFlQRSAoeCkgPT0gTGlzcF9TeW1ib2w7Cit9CitzdGF0aWMgaW5s aW5lIGludAorKElOVEVHRVJQKSAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIExJU1Bf SU5UX1RBR19QIChYVFlQRSAoeCkpOworfQorc3RhdGljIGlubGluZSBpbnQKKyhWRUNUT1JM SUtFUCkgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBYVFlQRSAoeCkgPT0gTGlzcF9W ZWN0b3JsaWtlOworfQorc3RhdGljIGlubGluZSBpbnQKK1ZFQ1RPUlAgKExpc3BfT2JqZWN0 IHgpCit7CisgIHJldHVybiBWRUNUT1JMSUtFUCAoeCkgJiYgISAoQVNJWkUgKHgpICYgUFNF VURPVkVDVE9SX0ZMQUcpOworfQorc3RhdGljIGlubGluZSBpbnQKK09WRVJMQVlQIChMaXNw X09iamVjdCB4KQoreworICByZXR1cm4gTUlTQ1AgKHgpICYmIFhNSVNDVFlQRSAoeCkgPT0g TGlzcF9NaXNjX092ZXJsYXk7Cit9CitzdGF0aWMgaW5saW5lIGludAorKE1BUktFUlApIChM aXNwX09iamVjdCB4KQoreworICByZXR1cm4gTUlTQ1AgKHgpICYmIFhNSVNDVFlQRSAoeCkg PT0gTGlzcF9NaXNjX01hcmtlcjsKK30KK3N0YXRpYyBpbmxpbmUgaW50CitTQVZFX1ZBTFVF UCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIE1JU0NQICh4KSAmJiBYTUlTQ1RZUEUg KHgpID09IExpc3BfTWlzY19TYXZlX1ZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIGludAor SU5URldEUCAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIHJldHVybiBYRldEVFlQRSAoYSkg PT0gTGlzcF9Gd2RfSW50OworfQorc3RhdGljIGlubGluZSBpbnQKK0JPT0xGV0RQICh1bmlv biBMaXNwX0Z3ZCAqYSkKK3sKKyAgcmV0dXJuIFhGV0RUWVBFIChhKSA9PSBMaXNwX0Z3ZF9C b29sOworfQorc3RhdGljIGlubGluZSBpbnQKK09CSkZXRFAgKHVuaW9uIExpc3BfRndkICph KQoreworICByZXR1cm4gWEZXRFRZUEUgKGEpID09IExpc3BfRndkX09iajsKK30KK3N0YXRp YyBpbmxpbmUgaW50CitCVUZGRVJfT0JKRldEUCAodW5pb24gTGlzcF9Gd2QgKmEpCit7Cisg IHJldHVybiBYRldEVFlQRSAoYSkgPT0gTGlzcF9Gd2RfQnVmZmVyX09iajsKK30KK3N0YXRp YyBpbmxpbmUgaW50CitLQk9BUkRfT0JKRldEUCAodW5pb24gTGlzcF9Gd2QgKmEpCit7Cisg IHJldHVybiBYRldEVFlQRSAoYSkgPT0gTGlzcF9Gd2RfS2JvYXJkX09iajsKK30KKworLyog VHJ1ZSBpZiB0aGUgc2l6ZSBmaWVsZCBTSVpFIG9mIGEgcHNldWRvdmVjdG9yIGlzIHRoYXQg b2YgYQorICAgcHNldWRvdmVjdG9yIHdob3NlIGNvZGUgaXMgQ09ERS4gICovCitzdGF0aWMg aW5saW5lIGludAorUFNFVURPVkVDVE9SX1NJWkVfVFlQRVAgKHB0cmRpZmZfdCBzaXplLCBp bnQgY29kZSkKK3sKKyAgcmV0dXJuICgoc2l6ZSAmIChQU0VVRE9WRUNUT1JfRkxBRyB8IFBW RUNfVFlQRV9NQVNLKSkKKwkgID09IChQU0VVRE9WRUNUT1JfRkxBRyB8IChjb2RlIDw8IFBT RVVET1ZFQ1RPUl9TSVpFX0JJVFMpKSk7Cit9CisKKy8qIFRydWUgaWYgQSBpcyBhIHBzZXVk b3ZlY3RvciB3aG9zZSBjb2RlIGlzIENPREUuICAqLworc3RhdGljIGlubGluZSBpbnQKK1BT RVVET1ZFQ1RPUlAgKExpc3BfT2JqZWN0IGEsIGludCBjb2RlKQoreworICBpZiAoISBWRUNU T1JMSUtFUCAoYSkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBD b252ZXJ0aW5nIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAqIGF2b2lkcyBhbGlhc2lu ZyBpc3N1ZXMuICAqLworICAgICAgc3RydWN0IHZlY3Rvcmxpa2VfaGVhZGVyICpoID0gWFVO VEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworICAgICAgcmV0dXJuIFBTRVVET1ZFQ1RPUl9T SVpFX1RZUEVQIChoLT5zaXplLCBjb2RlKTsKKyAgICB9Cit9CisKIAogLyogVGVzdCBmb3Ig c3BlY2lmaWMgcHNldWRvdmVjdG9yIHR5cGVzLiAgKi8KLSNkZWZpbmUgV0lORE9XX0NPTkZJ R1VSQVRJT05QKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfV0lORE9XX0NPTkZJR1VSQVRJ T04pCi0jZGVmaW5lIFBST0NFU1NQKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfUFJPQ0VT UykKLSNkZWZpbmUgV0lORE9XUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1dJTkRPVykK LSNkZWZpbmUgVEVSTUlOQUxQKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfVEVSTUlOQUwp CisKK3N0YXRpYyBpbmxpbmUgaW50CitXSU5ET1dfQ09ORklHVVJBVElPTlAgKExpc3BfT2Jq ZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX1dJTkRPV19DT05G SUdVUkFUSU9OKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK1BST0NFU1NQIChMaXNwX09i amVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19QUk9DRVNTKTsK K30KKworc3RhdGljIGlubGluZSBpbnQKK1dJTkRPV1AgKExpc3BfT2JqZWN0IGEpCit7Cisg IHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX1dJTkRPVyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50CitURVJNSU5BTFAgKExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VV RE9WRUNUT1JQIChhLCBQVkVDX1RFUk1JTkFMKTsKK30KKwogLyogU1VCUlAgaXMgc3BlY2lh bCBzaW5jZSBMaXNwX1N1YnIgbGFja3Mgc3RydWN0IHZlY3Rvcmxpa2VfaGVhZGVyLiAgKi8K LSNkZWZpbmUgU1VCUlAoeCkgVFlQRURfUFNFVURPVkVDVE9SUCAoeCwgTGlzcF9TdWJyLCBQ VkVDX1NVQlIpCi0jZGVmaW5lIENPTVBJTEVEUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVD X0NPTVBJTEVEKQotI2RlZmluZSBCVUZGRVJQKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNf QlVGRkVSKQotI2RlZmluZSBDSEFSX1RBQkxFX1AoeCkgUFNFVURPVkVDVE9SUCAoeCwgUFZF Q19DSEFSX1RBQkxFKQotI2RlZmluZSBTVUJfQ0hBUl9UQUJMRV9QKHgpIFBTRVVET1ZFQ1RP UlAgKHgsIFBWRUNfU1VCX0NIQVJfVEFCTEUpCi0jZGVmaW5lIEJPT0xfVkVDVE9SX1AoeCkg UFNFVURPVkVDVE9SUCAoeCwgUFZFQ19CT09MX1ZFQ1RPUikKLSNkZWZpbmUgRlJBTUVQKHgp IFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfRlJBTUUpCitzdGF0aWMgaW5saW5lIGludAorU1VC UlAgKExpc3BfT2JqZWN0IGEpCit7CisgIGlmICghIFZFQ1RPUkxJS0VQIChhKSkKKyAgICBy ZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHN0cnVjdCBMaXNwX1N1YnIgKmggPSBY VU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7CisgICAgICByZXR1cm4gUFNFVURPVkVDVE9S X1NJWkVfVFlQRVAgKGgtPnNpemUsIFBWRUNfU1VCUik7CisgICAgfQorfQorCitzdGF0aWMg aW5saW5lIGludAorQ09NUElMRURQIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNF VURPVkVDVE9SUCAoYSwgUFZFQ19DT01QSUxFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 CitCVUZGRVJQIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAo YSwgUFZFQ19CVUZGRVIpOworfQorCitzdGF0aWMgaW5saW5lIGludAorQ0hBUl9UQUJMRV9Q IChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19D SEFSX1RBQkxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK1NVQl9DSEFSX1RBQkxFX1Ag KExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX1NV Ql9DSEFSX1RBQkxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0JPT0xfVkVDVE9SX1Ag KExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX0JP T0xfVkVDVE9SKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0ZSQU1FUCAoTGlzcF9PYmpl Y3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfRlJBTUUpOworfQog CiAvKiBUZXN0IGZvciBpbWFnZSAoaW1hZ2UgLiBzcGVjKSAgKi8KLSNkZWZpbmUgSU1BR0VQ KHgpIChDT05TUCAoeCkgJiYgRVEgKFhDQVIgKHgpLCBRaW1hZ2UpKQorc3RhdGljIGlubGlu ZSBpbnQKK0lNQUdFUCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIENPTlNQICh4KSAm JiBFUSAoWENBUiAoeCksIFFpbWFnZSk7Cit9CiAKIC8qIEFycmF5IHR5cGVzLiAgKi8KLQot I2RlZmluZSBBUlJBWVAoeCkgXAotICAoVkVDVE9SUCAoeCkgfHwgU1RSSU5HUCAoeCkgfHwg Q0hBUl9UQUJMRV9QICh4KSB8fCBCT09MX1ZFQ1RPUl9QICh4KSkKK3N0YXRpYyBpbmxpbmUg aW50CitBUlJBWVAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBWRUNUT1JQICh4KSB8 fCBTVFJJTkdQICh4KSB8fCBDSEFSX1RBQkxFX1AgKHgpIHx8IEJPT0xfVkVDVE9SX1AgKHgp OworfQogDAotI2RlZmluZSBDSEVDS19MSVNUKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQ09OU1Ag KHgpIHx8IE5JTFAgKHgpLCBRbGlzdHAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTElTVF9DT05T KHgsIHkpIFwKLSAgQ0hFQ0tfVFlQRSAoQ09OU1AgKHgpLCBRbGlzdHAsIHkpCi0KLSNkZWZp bmUgQ0hFQ0tfTElTVF9FTkQoeCwgeSkgXAotICBDSEVDS19UWVBFIChOSUxQICh4KSwgUWxp c3RwLCB5KQotCi0jZGVmaW5lIENIRUNLX1NUUklORyh4KSBcCi0gIENIRUNLX1RZUEUgKFNU UklOR1AgKHgpLCBRc3RyaW5ncCwgeCkKLQotI2RlZmluZSBDSEVDS19TVFJJTkdfQ0FSKHgp IFwKLSAgQ0hFQ0tfVFlQRSAoU1RSSU5HUCAoWENBUiAoeCkpLCBRc3RyaW5ncCwgWENBUiAo eCkpCi0KLSNkZWZpbmUgQ0hFQ0tfQ09OUyh4KSBcCi0gIENIRUNLX1RZUEUgKENPTlNQICh4 KSwgUWNvbnNwLCB4KQotCi0jZGVmaW5lIENIRUNLX1NZTUJPTCh4KSBcCi0gIENIRUNLX1RZ UEUgKFNZTUJPTFAgKHgpLCBRc3ltYm9scCwgeCkKLQotI2RlZmluZSBDSEVDS19DSEFSX1RB QkxFKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQ0hBUl9UQUJMRV9QICh4KSwgUWNoYXJfdGFibGVf cCwgeCkKLQotI2RlZmluZSBDSEVDS19WRUNUT1IoeCkgXAotICBDSEVDS19UWVBFIChWRUNU T1JQICh4KSwgUXZlY3RvcnAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfVkVDVE9SX09SX1NUUklO Ryh4KSBcCi0gIENIRUNLX1RZUEUgKFZFQ1RPUlAgKHgpIHx8IFNUUklOR1AgKHgpLCBRYXJy YXlwLCB4KQotCi0jZGVmaW5lIENIRUNLX0FSUkFZKHgsIFF4eHhwKSBcCi0gIENIRUNLX1RZ UEUgKEFSUkFZUCAoeCksIFF4eHhwLCB4KQotCi0jZGVmaW5lIENIRUNLX1ZFQ1RPUl9PUl9D SEFSX1RBQkxFKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoVkVDVE9SUCAoeCkgfHwgQ0hBUl9UQUJM RV9QICh4KSwgUXZlY3Rvcl9vcl9jaGFyX3RhYmxlX3AsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tf QlVGRkVSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQlVGRkVSUCAoeCksIFFidWZmZXJwLCB4KQot Ci0jZGVmaW5lIENIRUNLX1dJTkRPVyh4KSBcCi0gIENIRUNLX1RZUEUgKFdJTkRPV1AgKHgp LCBRd2luZG93cCwgeCkKLQotI2RlZmluZSBDSEVDS19XSU5ET1dfQ09ORklHVVJBVElPTih4 KSBcCi0gIENIRUNLX1RZUEUgKFdJTkRPV19DT05GSUdVUkFUSU9OUCAoeCksIFF3aW5kb3df Y29uZmlndXJhdGlvbl9wLCB4KQotCi0vKiBUaGlzIG1hY3JvIHJlamVjdHMgd2luZG93cyBv biB0aGUgaW50ZXJpb3Igb2YgdGhlIHdpbmRvdyB0cmVlIGFzCi0gICAiZGVhZCIsIHdoaWNo IGlzIHdoYXQgd2Ugd2FudDsgdGhpcyBpcyBhbiBhcmd1bWVudC1jaGVja2luZyBtYWNybywg YW5kCi0gICB0aGUgdXNlciBzaG91bGQgbmV2ZXIgZ2V0IGFjY2VzcyB0byBpbnRlcmlvciB3 aW5kb3dzLgotCi0gICBBIHdpbmRvdyBvZiBhbnkgc29ydCwgbGVhZiBvciBpbnRlcmlvciwg aXMgZGVhZCBpZiB0aGUgYnVmZmVyLAotICAgdmNoaWxkLCBhbmQgaGNoaWxkIG1lbWJlcnMg YXJlIGFsbCBuaWwuICAqLwotCi0jZGVmaW5lIENIRUNLX0xJVkVfV0lORE9XKHgpIFwKLSAg Q0hFQ0tfVFlQRSAoV0lORE9XUCAoeCkgJiYgIU5JTFAgKFhXSU5ET1cgKHgpLT5idWZmZXIp LCBRd2luZG93X2xpdmVfcCwgeCkKLQotI2RlZmluZSBDSEVDS19QUk9DRVNTKHgpIFwKLSAg Q0hFQ0tfVFlQRSAoUFJPQ0VTU1AgKHgpLCBRcHJvY2Vzc3AsIHgpCi0KLSNkZWZpbmUgQ0hF Q0tfU1VCUih4KSBcCi0gIENIRUNLX1RZUEUgKFNVQlJQICh4KSwgUXN1YnJwLCB4KQotCi0j ZGVmaW5lIENIRUNLX05VTUJFUih4KSBcCi0gIENIRUNLX1RZUEUgKElOVEVHRVJQICh4KSwg UWludGVnZXJwLCB4KQotCi0jZGVmaW5lIENIRUNLX05BVE5VTSh4KSBcCi0gIENIRUNLX1RZ UEUgKE5BVE5VTVAgKHgpLCBRd2hvbGVudW1wLCB4KQorc3RhdGljIGlubGluZSB2b2lkCitD SEVDS19MSVNUIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChDT05TUCAoeCkg fHwgTklMUCAoeCksIFFsaXN0cCwgeCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKKyhDSEVD S19MSVNUX0NPTlMpIChMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCB5KQoreworICBDSEVD S19UWVBFIChDT05TUCAoeCksIFFsaXN0cCwgeSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQK K0NIRUNLX0xJU1RfRU5EIChMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCB5KQoreworICBD SEVDS19UWVBFIChOSUxQICh4KSwgUWxpc3RwLCB5KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9p ZAorQ0hFQ0tfU1RSSU5HIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChTVFJJ TkdQICh4KSwgUXN0cmluZ3AsIHgpOworfQorc3RhdGljIGlubGluZSB2b2lkCitDSEVDS19T VFJJTkdfQ0FSIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChTVFJJTkdQIChY Q0FSICh4KSksIFFzdHJpbmdwLCBYQ0FSICh4KSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQK K0NIRUNLX0NPTlMgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKENPTlNQICh4 KSwgUWNvbnNwLCB4KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZAorKENIRUNLX1NZTUJPTCkg KExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFNZTUJPTFAgKHgpLCBRc3ltYm9s cCwgeCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX0NIQVJfVEFCTEUgKExpc3Bf T2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKENIQVJfVEFCTEVfUCAoeCksIFFjaGFyX3Rh YmxlX3AsIHgpOworfQorc3RhdGljIGlubGluZSB2b2lkCitDSEVDS19WRUNUT1IgKExpc3Bf T2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFZFQ1RPUlAgKHgpLCBRdmVjdG9ycCwgeCk7 Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX1ZFQ1RPUl9PUl9TVFJJTkcgKExpc3Bf T2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFZFQ1RPUlAgKHgpIHx8IFNUUklOR1AgKHgp LCBRYXJyYXlwLCB4KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0hFQ0tfQVJSQVkgKExp c3BfT2JqZWN0IHgsIExpc3BfT2JqZWN0IFF4eHhwKQoreworICBDSEVDS19UWVBFIChBUlJB WVAgKHgpLCBReHh4cCwgeCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX1ZFQ1RP Ul9PUl9DSEFSX1RBQkxFIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChWRUNU T1JQICh4KSB8fCBDSEFSX1RBQkxFX1AgKHgpLCBRdmVjdG9yX29yX2NoYXJfdGFibGVfcCwg eCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX0JVRkZFUiAoTGlzcF9PYmplY3Qg eCkKK3sKKyAgQ0hFQ0tfVFlQRSAoQlVGRkVSUCAoeCksIFFidWZmZXJwLCB4KTsKK30KK3N0 YXRpYyBpbmxpbmUgdm9pZAorQ0hFQ0tfV0lORE9XIChMaXNwX09iamVjdCB4KQoreworICBD SEVDS19UWVBFIChXSU5ET1dQICh4KSwgUXdpbmRvd3AsIHgpOworfQorc3RhdGljIGlubGlu ZSB2b2lkCitDSEVDS19XSU5ET1dfQ09ORklHVVJBVElPTiAoTGlzcF9PYmplY3QgeCkKK3sK KyAgQ0hFQ0tfVFlQRSAoV0lORE9XX0NPTkZJR1VSQVRJT05QICh4KSwgUXdpbmRvd19jb25m aWd1cmF0aW9uX3AsIHgpOworfQorc3RhdGljIGlubGluZSB2b2lkCitDSEVDS19QUk9DRVNT IChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChQUk9DRVNTUCAoeCksIFFwcm9j ZXNzcCwgeCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX1NVQlIgKExpc3BfT2Jq ZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFNVQlJQICh4KSwgUXN1YnJwLCB4KTsKK30KK3N0 YXRpYyBpbmxpbmUgdm9pZAorKENIRUNLX05VTUJFUikgKExpc3BfT2JqZWN0IHgpCit7Cisg IENIRUNLX1RZUEUgKElOVEVHRVJQICh4KSwgUWludGVnZXJwLCB4KTsKK30KK3N0YXRpYyBp bmxpbmUgdm9pZAorQ0hFQ0tfTkFUTlVNIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19U WVBFIChOQVROVU1QICh4KSwgUXdob2xlbnVtcCwgeCk7Cit9CiAKICNkZWZpbmUgQ0hFQ0tf UkFOR0VEX0lOVEVHRVIoeCwgbG8sIGhpKQkJCQkJXAogICBkbyB7CQkJCQkJCQkJXApAQCAt MTc1Miw1NyArMjI5Miw3NiBAQAogICAgICAgQ0hFQ0tfUkFOR0VEX0lOVEVHRVIgKHgsIDAs IFRZUEVfTUFYSU1VTSAodHlwZSkpOwkJCVwKICAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBD SEVDS19NQVJLRVIoeCkgXAotICBDSEVDS19UWVBFIChNQVJLRVJQICh4KSwgUW1hcmtlcnAs IHgpCitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX01BUktFUiAoTGlzcF9PYmplY3QgeCkK K3sKKyAgQ0hFQ0tfVFlQRSAoTUFSS0VSUCAoeCksIFFtYXJrZXJwLCB4KTsKK30KIAogI2Rl ZmluZSBDSEVDS19OVU1CRVJfQ09FUkNFX01BUktFUih4KSBcCiAgIGRvIHsgaWYgKE1BUktF UlAgKCh4KSkpIFhTRVRGQVNUSU5UICh4LCBtYXJrZXJfcG9zaXRpb24gKHgpKTsgXAogICAg IGVsc2UgQ0hFQ0tfVFlQRSAoSU5URUdFUlAgKHgpLCBRaW50ZWdlcl9vcl9tYXJrZXJfcCwg eCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgWEZMT0FUSU5UKG4pIGV4dHJhY3RfZmxvYXQo KG4pKQotCi0jZGVmaW5lIENIRUNLX0ZMT0FUKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoRkxPQVRQ ICh4KSwgUWZsb2F0cCwgeCkKLQotI2RlZmluZSBDSEVDS19OVU1CRVJfT1JfRkxPQVQoeCkg XAotICBDSEVDS19UWVBFIChGTE9BVFAgKHgpIHx8IElOVEVHRVJQICh4KSwgUW51bWJlcnAs IHgpCitzdGF0aWMgaW5saW5lIGRvdWJsZQorWEZMT0FUSU5UIChMaXNwX09iamVjdCBuKQor eworICByZXR1cm4gZXh0cmFjdF9mbG9hdCAobik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorQ0hFQ0tfRkxPQVQgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKEZMT0FU UCAoeCksIFFmbG9hdHAsIHgpOworfQorc3RhdGljIGlubGluZSB2b2lkCitDSEVDS19OVU1C RVJfT1JfRkxPQVQgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKEZMT0FUUCAo eCkgfHwgSU5URUdFUlAgKHgpLCBRbnVtYmVycCwgeCk7Cit9CiAKICNkZWZpbmUgQ0hFQ0tf TlVNQkVSX09SX0ZMT0FUX0NPRVJDRV9NQVJLRVIoeCkgXAogICBkbyB7IGlmIChNQVJLRVJQ ICh4KSkgWFNFVEZBU1RJTlQgKHgsIG1hcmtlcl9wb3NpdGlvbiAoeCkpOyBcCiAgICAgZWxz ZSBDSEVDS19UWVBFIChJTlRFR0VSUCAoeCkgfHwgRkxPQVRQICh4KSwgUW51bWJlcl9vcl9t YXJrZXJfcCwgeCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ0hFQ0tfT1ZFUkxBWSh4KSBc Ci0gIENIRUNLX1RZUEUgKE9WRVJMQVlQICh4KSwgUW92ZXJsYXlwLCB4KQorc3RhdGljIGlu bGluZSB2b2lkCitDSEVDS19PVkVSTEFZIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19U WVBFIChPVkVSTEFZUCAoeCksIFFvdmVybGF5cCwgeCk7Cit9CiAKIC8qIFNpbmNlIHdlIGNh bid0IGFzc2lnbiBkaXJlY3RseSB0byB0aGUgQ0FSIG9yIENEUiBmaWVsZHMgb2YgYSBjb25z CiAgICBjZWxsLCB1c2UgdGhlc2Ugd2hlbiBjaGVja2luZyB0aGF0IHRob3NlIGZpZWxkcyBj b250YWluIG51bWJlcnMuICAqLwotI2RlZmluZSBDSEVDS19OVU1CRVJfQ0FSKHgpIFwKLSAg ZG8gewkJCQkJXAotICAgIExpc3BfT2JqZWN0IHRtcCA9IFhDQVIgKHgpOwkJXAotICAgIENI RUNLX05VTUJFUiAodG1wKTsJCQlcCi0gICAgWFNFVENBUiAoKHgpLCB0bXApOwkJCVwKLSAg fSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19OVU1CRVJfQ0RSKHgpIFwKLSAgZG8gewkJ CQkJXAotICAgIExpc3BfT2JqZWN0IHRtcCA9IFhDRFIgKHgpOwkJXAotICAgIENIRUNLX05V TUJFUiAodG1wKTsJCQlcCi0gICAgWFNFVENEUiAoKHgpLCB0bXApOwkJCVwKLSAgfSB3aGls ZSAoMCkKLQotI2RlZmluZSBDSEVDS19OQVROVU1fQ0FSKHgpIFwKLSAgZG8gewkJCQkJXAot ICAgIExpc3BfT2JqZWN0IHRtcCA9IFhDQVIgKHgpOwkJXAotICAgIENIRUNLX05BVE5VTSAo dG1wKTsJCQlcCi0gICAgWFNFVENBUiAoKHgpLCB0bXApOwkJCVwKLSAgfSB3aGlsZSAoMCkK LQotI2RlZmluZSBDSEVDS19OQVROVU1fQ0RSKHgpIFwKLSAgZG8gewkJCQkJXAotICAgIExp c3BfT2JqZWN0IHRtcCA9IFhDRFIgKHgpOwkJXAotICAgIENIRUNLX05BVE5VTSAodG1wKTsJ CQlcCi0gICAgWFNFVENEUiAoKHgpLCB0bXApOwkJCVwKLSAgfSB3aGlsZSAoMCkKK3N0YXRp YyBpbmxpbmUgdm9pZAorQ0hFQ0tfTlVNQkVSX0NBUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAg TGlzcF9PYmplY3QgdG1wID0gWENBUiAoeCk7CisgIENIRUNLX05VTUJFUiAodG1wKTsKKyAg WFNFVENBUiAoeCwgdG1wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitDSEVDS19OVU1C RVJfQ0RSIChMaXNwX09iamVjdCB4KQoreworICBMaXNwX09iamVjdCB0bXAgPSBYQ0RSICh4 KTsKKyAgQ0hFQ0tfTlVNQkVSICh0bXApOworICBYU0VUQ0RSICh4LCB0bXApOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX05BVE5VTV9DQVIgKExpc3BfT2JqZWN0IHgpCit7 CisgIExpc3BfT2JqZWN0IHRtcCA9IFhDQVIgKHgpOworICBDSEVDS19OQVROVU0gKHRtcCk7 CisgIFhTRVRDQVIgKHgsIHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0hFQ0tf TkFUTlVNX0NEUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0gWENE UiAoeCk7CisgIENIRUNLX05BVE5VTSAodG1wKTsKKyAgWFNFVENEUiAoeCwgdG1wKTsKK30K IAwKIC8qIERlZmluZSBhIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBjYWxsaW5nIGZyb20gTGlz cC4KICBgbG5hbWUnIHNob3VsZCBiZSB0aGUgbmFtZSB0byBnaXZlIHRoZSBmdW5jdGlvbiBp biBMaXNwLApAQCAtMTg2OSwxOCArMjQyOCwyMCBAQAogCQkJIExpc3BfT2JqZWN0LCBMaXNw X09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KQogCiAvKiBOb24temVybyBpZiBP QkogaXMgYSBMaXNwIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgRlVOQ1RJT05QKE9CSikJCQkJ CVwKLSAgICAgKChDT05TUCAoT0JKKSAmJiBFUSAoWENBUiAoT0JKKSwgUWxhbWJkYSkpCQlc Ci0gICAgICB8fCAoU1lNQk9MUCAoT0JKKSAmJiAhTklMUCAoRmZib3VuZHAgKE9CSikpKQlc Ci0gICAgICB8fCBDT01QSUxFRFAgKE9CSikJCQkJXAotICAgICAgfHwgU1VCUlAgKE9CSikp CitzdGF0aWMgaW5saW5lIGludAorRlVOQ1RJT05QIChMaXNwX09iamVjdCBvYmopCit7Cisg IHJldHVybiAoKENPTlNQIChvYmopICYmIEVRIChYQ0FSIChvYmopLCBRbGFtYmRhKSkKKwkg IHx8IChTWU1CT0xQIChvYmopICYmICFOSUxQIChGZmJvdW5kcCAob2JqKSkpCisJICB8fCBD T01QSUxFRFAgKG9iaikKKwkgIHx8IFNVQlJQIChvYmopKTsKK30KIAogLyogZGVmc3ViciAo U25hbWUpOwogICAgaXMgaG93IHdlIGRlZmluZSB0aGUgc3ltYm9sIGZvciBmdW5jdGlvbiBg bmFtZScgYXQgc3RhcnQtdXAgdGltZS4gICovCiBleHRlcm4gdm9pZCBkZWZzdWJyIChzdHJ1 Y3QgTGlzcF9TdWJyICopOwogCi0jZGVmaW5lIE1BTlkgLTIKLSNkZWZpbmUgVU5FVkFMTEVE IC0xCitlbnVtIHsgTUFOWSA9IC0yLCBVTkVWQUxMRUQgPSAtMSB9OwogCiBleHRlcm4gdm9p ZCBkZWZ2YXJfbGlzcCAoc3RydWN0IExpc3BfT2JqZndkICosIGNvbnN0IGNoYXIgKiwgTGlz cF9PYmplY3QgKik7CiBleHRlcm4gdm9pZCBkZWZ2YXJfbGlzcF9ub3BybyAoc3RydWN0IExp c3BfT2JqZndkICosIGNvbnN0IGNoYXIgKiwgTGlzcF9PYmplY3QgKik7CkBAIC0xOTczLDcg KzI1MzQsMTEgQEAKIGV4dGVybiBzdHJ1Y3Qgc3BlY2JpbmRpbmcgKnNwZWNwZGxfcHRyOwog ZXh0ZXJuIHB0cmRpZmZfdCBzcGVjcGRsX3NpemU7CiAKLSNkZWZpbmUgU1BFQ1BETF9JTkRF WCgpCShzcGVjcGRsX3B0ciAtIHNwZWNwZGwpCitzdGF0aWMgaW5saW5lIHB0cmRpZmZfdAor U1BFQ1BETF9JTkRFWCAodm9pZCkKK3sKKyAgcmV0dXJuIHNwZWNwZGxfcHRyIC0gc3BlY3Bk bDsKK30KIAogLyogRXZlcnl0aGluZyBuZWVkZWQgdG8gZGVzY3JpYmUgYW4gYWN0aXZlIGNv bmRpdGlvbiBjYXNlLiAgKi8KIHN0cnVjdCBoYW5kbGVyCkBAIC0yMjgzLDYgKzI4NDgsOCBA QAogI2RlZmluZSBFWEZVTihmbm5hbWUsIG1heGFyZ3MpIFwKICAgZXh0ZXJuIExpc3BfT2Jq ZWN0IGZubmFtZSBERUZVTl9BUkdTXyAjIyBtYXhhcmdzCiAKKyNpbmNsdWRlICJnbG9iYWxz LmgiCisKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBwcm90b3R5cGVzLiAgKi8KIHN0 cnVjdCB3aW5kb3c7CiBzdHJ1Y3QgZnJhbWU7CkBAIC0yMzE3LDYgKzI4ODQsNyBAQAogZXh0 ZXJuIExpc3BfT2JqZWN0IFFpbnRlZ2VyLCBRaW50ZXJ2YWwsIFFzeW1ib2wsIFFzdHJpbmc7 CiBleHRlcm4gTGlzcF9PYmplY3QgUW1pc2MsIFF2ZWN0b3IsIFFmbG9hdCwgUWNvbnMsIFFi dWZmZXI7CiAKK2V4dGVybiBMaXNwX09iamVjdCBRc3VicnA7CiBleHRlcm4gTGlzcF9PYmpl Y3QgUWZvbnRfc3BlYywgUWZvbnRfZW50aXR5LCBRZm9udF9vYmplY3Q7CiAKIEVYRlVOIChG Ynl0ZW9yZGVyLCAwKSBBVFRSSUJVVEVfQ09OU1Q7CkBAIC0yNDExLDYgKzI5NzksNyBAQAog ZXh0ZXJuIExpc3BfT2JqZWN0IFFjdXJzb3JfaW5fZWNob19hcmVhOwogZXh0ZXJuIExpc3Bf T2JqZWN0IFFzdHJpbmdfbGVzc3A7CiBleHRlcm4gTGlzcF9PYmplY3QgUUNzaXplLCBRQ3Rl c3QsIFFDd2Vha25lc3MsIFFlcXVhbCwgUWVxLCBRZXFsOworZXh0ZXJuIExpc3BfT2JqZWN0 IFFoYXNoX3RhYmxlX3A7CiBFTUFDU19VSU5UIGhhc2hfc3RyaW5nIChjaGFyIGNvbnN0ICos IHB0cmRpZmZfdCk7CiBFTUFDU19VSU5UIHN4aGFzaCAoTGlzcF9PYmplY3QsIGludCk7CiBM aXNwX09iamVjdCBtYWtlX2hhc2hfdGFibGUgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwg TGlzcF9PYmplY3QsCkBAIC0yNzA2LDcgKzMyNzUsNyBAQAogCQkJCSBMaXNwX09iamVjdCk7 CiBleHRlcm4gTGlzcF9PYmplY3QgaW50ZXJuYWxfd2l0aF9vdXRwdXRfdG9fdGVtcF9idWZm ZXIKICAgICAgICAgKGNvbnN0IGNoYXIgKiwgTGlzcF9PYmplY3QgKCopIChMaXNwX09iamVj dCksIExpc3BfT2JqZWN0KTsKLSNkZWZpbmUgRkxPQVRfVE9fU1RSSU5HX0JVRlNJWkUgMzUw CitlbnVtIHsgRkxPQVRfVE9fU1RSSU5HX0JVRlNJWkUgPSAzNTAgfTsKIGV4dGVybiBpbnQg ZmxvYXRfdG9fc3RyaW5nIChjaGFyICosIGRvdWJsZSk7CiBleHRlcm4gdm9pZCBzeW1zX29m X3ByaW50ICh2b2lkKTsKIApAQCAtMjcyOSwxMCArMzI5OCwxMiBAQAogZXh0ZXJuIExpc3Bf T2JqZWN0IGludGVybl8xIChjb25zdCBjaGFyICosIHB0cmRpZmZfdCk7CiBleHRlcm4gTGlz cF9PYmplY3QgaW50ZXJuX2Nfc3RyaW5nXzEgKGNvbnN0IGNoYXIgKiwgcHRyZGlmZl90KTsK IGV4dGVybiBMaXNwX09iamVjdCBvYmxvb2t1cCAoTGlzcF9PYmplY3QsIGNvbnN0IGNoYXIg KiwgcHRyZGlmZl90LCBwdHJkaWZmX3QpOwotI2RlZmluZSBMT0FESElTVF9BVFRBQ0goeCkg XAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmIChpbml0aWFsaXplZCkgVmN1cnJlbnRfbG9h ZF9saXN0ID0gRmNvbnMgKHgsIFZjdXJyZW50X2xvYWRfbGlzdCk7IFwKLSAgfSB3aGlsZSAo MCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorTE9BREhJU1RfQVRUQUNIIChMaXNwX09iamVjdCB4 KQoreworICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgVmN1cnJlbnRfbG9hZF9saXN0ID0gRmNv bnMgKHgsIFZjdXJyZW50X2xvYWRfbGlzdCk7Cit9CiBleHRlcm4gaW50IG9wZW5wIChMaXNw X09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LAogICAgICAgICAgICAgICAgICAg TGlzcF9PYmplY3QgKiwgTGlzcF9PYmplY3QpOwogTGlzcF9PYmplY3Qgc3RyaW5nX3RvX251 bWJlciAoY2hhciBjb25zdCAqLCBpbnQsIGludCk7CkBAIC0yODUwLDYgKzM0MjEsNyBAQAog ZXh0ZXJuIExpc3BfT2JqZWN0IFZidWZmZXJfYWxpc3Q7CiBleHRlcm4gTGlzcF9PYmplY3Qg c2V0X2J1ZmZlcl9pZl9saXZlIChMaXNwX09iamVjdCk7CiBleHRlcm4gTGlzcF9PYmplY3Qg b3RoZXJfYnVmZmVyX3NhZmVseSAoTGlzcF9PYmplY3QpOworZXh0ZXJuIExpc3BfT2JqZWN0 IFFvdmVybGF5cDsKIGV4dGVybiBMaXNwX09iamVjdCBRcHJpb3JpdHksIFF3aW5kb3csIFFi ZWZvcmVfc3RyaW5nLCBRYWZ0ZXJfc3RyaW5nOwogZXh0ZXJuIExpc3BfT2JqZWN0IGdldF90 cnVlbmFtZV9idWZmZXIgKExpc3BfT2JqZWN0KTsKIGV4dGVybiB2b2lkIGluaXRfYnVmZmVy X29uY2UgKHZvaWQpOwpAQCAtMzAwNywxMCArMzU3OSwxMCBAQAogdm9pZCBzeW5jaHJvbml6 ZV9zeXN0ZW1fbWVzc2FnZXNfbG9jYWxlICh2b2lkKTsKIHZvaWQgc3luY2hyb25pemVfc3lz dGVtX3RpbWVfbG9jYWxlICh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIHNldGxvY2FsZShjYXRl Z29yeSwgbG9jYWxlKQotI2RlZmluZSBmaXh1cF9sb2NhbGUoKQotI2RlZmluZSBzeW5jaHJv bml6ZV9zeXN0ZW1fbWVzc2FnZXNfbG9jYWxlKCkKLSNkZWZpbmUgc3luY2hyb25pemVfc3lz dGVtX3RpbWVfbG9jYWxlKCkKK3N0YXRpYyBpbmxpbmUgY2hhciAqc2V0bG9jYWxlIChpbnQg Y2F0LCBjaGFyIGNvbnN0ICpsb2NhbGUpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUg dm9pZCBmaXh1cF9sb2NhbGUgKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hy b25pemVfc3lzdGVtX21lc3NhZ2VzX2xvY2FsZSAodm9pZCkge30KK3N0YXRpYyBpbmxpbmUg dm9pZCBzeW5jaHJvbml6ZV9zeXN0ZW1fdGltZV9sb2NhbGUgKHZvaWQpIHt9CiAjZW5kaWYK IHZvaWQgc2h1dF9kb3duX2VtYWNzIChpbnQsIGludCwgTGlzcF9PYmplY3QpOwogLyogTm9u emVybyBtZWFucyBkb24ndCBkbyBpbnRlcmFjdGl2ZSByZWRpc3BsYXkgYW5kIGRvbid0IGNo YW5nZSB0dHkgbW9kZXMuICAqLwpAQCAtMzI3MSwxOSArMzg0MywxOSBAQAogICAgaW4gYWRk aXRpb24gdG8gYSBkZXZpY2Ugc2VwYXJhdG9yLiAgU2V0IHRoZSBwYXRoIHNlcGFyYXRvcgog ICAgdG8gJy8nLCBhbmQgZG9uJ3QgdGVzdCBmb3IgYSBkZXZpY2Ugc2VwYXJhdG9yIGluIElT X0FOWV9TRVAuICAqLwogCi0jZGVmaW5lIERJUkVDVE9SWV9TRVAgJy8nCitlbnVtIHsgRElS RUNUT1JZX1NFUCA9ICcvJyB9OwogI2lmbmRlZiBJU19ESVJFQ1RPUllfU0VQCi0jZGVmaW5l IElTX0RJUkVDVE9SWV9TRVAoX2NfKSAoKF9jXykgPT0gRElSRUNUT1JZX1NFUCkKK3N0YXRp YyBpbmxpbmUgaW50IElTX0RJUkVDVE9SWV9TRVAgKGludCBjKSB7IHJldHVybiBjID09IERJ UkVDVE9SWV9TRVA7IH0KICNlbmRpZgogI2lmbmRlZiBJU19ERVZJQ0VfU0VQCiAjaWZuZGVm IERFVklDRV9TRVAKLSNkZWZpbmUgSVNfREVWSUNFX1NFUChfY18pIDAKK3N0YXRpYyBpbmxp bmUgaW50IElTX0RFVklDRV9TRVAgKGludCBjKSB7IHJldHVybiAwOyB9CiAjZWxzZQotI2Rl ZmluZSBJU19ERVZJQ0VfU0VQKF9jXykgKChfY18pID09IERFVklDRV9TRVApCitzdGF0aWMg aW5saW5lIGludCBJU19ERVZJQ0VfU0VQIChpbnQgYykgeyByZXR1cm4gYyA9PSBERVZJQ0Vf U0VQOyB9CiAjZW5kaWYKICNlbmRpZgogI2lmbmRlZiBJU19BTllfU0VQCi0jZGVmaW5lIElT X0FOWV9TRVAoX2NfKSAoSVNfRElSRUNUT1JZX1NFUCAoX2NfKSkKK3N0YXRpYyBpbmxpbmUg aW50IElTX0FOWV9TRVAgKGludCBjKSB7IHJldHVybiBJU19ESVJFQ1RPUllfU0VQIChjKTsg fQogI2VuZGlmCiAKICNkZWZpbmUgU1dJVENIX0VOVU1fQ0FTVCh4KSAoeCkKQEAgLTMzMDMs MTUgKzM4NzUsNiBAQAogIyBkZWZpbmUgbGludF9hc3N1bWUoY29uZCkgKCh2b2lkKSAoMCAm JiAoY29uZCkpKQogI2VuZGlmCiAKLS8qIFRoZSB1YmlxdWl0b3VzIG1pbiBhbmQgbWF4IG1h Y3Jvcy4gICovCi0KLSNpZmRlZiBtYXgKLSN1bmRlZiBtYXgKLSN1bmRlZiBtaW4KLSNlbmRp ZgotI2RlZmluZSBtaW4oYSwgYikJKChhKSA8IChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUg bWF4KGEsIGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCi0KIC8qIFdlIHVzZWQgdG8gdXNl IGBhYnMnLCBidXQgdGhhdCBjbGFzaGVzIHdpdGggc3lzdGVtIGhlYWRlcnMgb24gc29tZQog ICAgcGxhdGZvcm1zLCBhbmQgdXNpbmcgYSBuYW1lIHJlc2VydmVkIGJ5IFN0YW5kYXJkIEMg aXMgYSBiYWQgaWRlYQogICAgYW55d2F5LiAgKi8KQEAgLTMzNTQsNyArMzkxNyw3IEBACiAv KiBTQUZFX0FMTE9DQSBub3JtYWxseSBhbGxvY2F0ZXMgbWVtb3J5IG9uIHRoZSBzdGFjaywg YnV0IGlmIHNpemUgaXMKICAgIGxhcmdlciB0aGFuIE1BWF9BTExPQ0EsIHVzZSB4bWFsbG9j IHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZSBzdGFjay4gICovCiAKLSNkZWZpbmUgTUFYX0FM TE9DQSAxNioxMDI0CitlbnVtIHsgTUFYX0FMTE9DQSA9IDE2KjEwMjQgfTsKIAogZXh0ZXJu IExpc3BfT2JqZWN0IHNhZmVfYWxsb2NhX3Vud2luZCAoTGlzcF9PYmplY3QpOwogCkBAIC0z NDI0LDggKzM5ODcsNiBAQAogICB9IHdoaWxlICgwKQogCiAKLSNpbmNsdWRlICJnbG9iYWxz LmgiCi0KIC8qIENoZWNrIHdoZXRoZXIgaXQncyB0aW1lIGZvciBHQywgYW5kIHJ1biBpdCBp ZiBzby4gICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAoKPT09IG1vZGlmaWVkIGZpbGUgJ3Ny Yy9tZW0tbGltaXRzLmgnCi0tLSBzcmMvbWVtLWxpbWl0cy5oCTIwMTItMDctMDkgMTY6Mzg6 NDUgKzAwMDAKKysrIHNyYy9tZW0tbGltaXRzLmgJMjAxMi0wNy0xMyAwMzozNzo0MiArMDAw MApAQCAtMzYsOSArMzYsNyBAQAogZXh0ZXJuIGNoYXIgKnN0YXJ0X29mX2RhdGEgKHZvaWQp IEFUVFJJQlVURV9DT05TVDsKICNpZiBVU0VfTFNCX1RBRyB8fCBVSU5UUFRSX01BWCA8PSBW QUxfTUFYCiAjZGVmaW5lIEVYQ0VFRFNfTElTUF9QVFIocHRyKSAwCi0jZWxpZiBkZWZpbmVk IERBVEFfU0VHX0JJVFMKKyNlbHNlCiAjZGVmaW5lIEVYQ0VFRFNfTElTUF9QVFIocHRyKSBc CiAgICgoKHVpbnRwdHJfdCkgKHB0cikgJiB+REFUQV9TRUdfQklUUykgPj4gVkFMQklUUykK LSNlbHNlCi0jZGVmaW5lIEVYQ0VFRFNfTElTUF9QVFIocHRyKSAoKHVpbnRwdHJfdCkgKHB0 cikgPj4gVkFMQklUUykKICNlbmRpZgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93aW5kb3cu YycKLS0tIHNyYy93aW5kb3cuYwkyMDEyLTA3LTIzIDE2OjU3OjIwICswMDAwCisrKyBzcmMv d2luZG93LmMJMjAxMi0wNy0yMyAyMTo1MDozNiArMDAwMApAQCAtNTEsOCArNTEsOCBAQAog I2luY2x1ZGUgIm5zdGVybS5oIgogI2VuZGlmCiAKLUxpc3BfT2JqZWN0IFF3aW5kb3dwLCBR d2luZG93X2xpdmVfcDsKLXN0YXRpYyBMaXNwX09iamVjdCBRd2luZG93X2NvbmZpZ3VyYXRp b25fcCwgUXJlY29yZF93aW5kb3dfYnVmZmVyOworTGlzcF9PYmplY3QgUXdpbmRvd3AsIFF3 aW5kb3dfbGl2ZV9wLCBRd2luZG93X2NvbmZpZ3VyYXRpb25fcDsKK3N0YXRpYyBMaXNwX09i amVjdCBRcmVjb3JkX3dpbmRvd19idWZmZXI7CiBzdGF0aWMgTGlzcF9PYmplY3QgUXdpbmRv d19kZWxldGFibGVfcCwgUWRlbGV0ZV93aW5kb3csIFFkaXNwbGF5X2J1ZmZlcjsKIHN0YXRp YyBMaXNwX09iamVjdCBRcmVwbGFjZV9idWZmZXJfaW5fd2luZG93cywgUWdldF9tcnVfd2lu ZG93Owogc3RhdGljIExpc3BfT2JqZWN0IFF3aW5kb3dfcmVzaXplX3Jvb3Rfd2luZG93LCBR d2luZG93X3Jlc2l6ZV9yb290X3dpbmRvd192ZXJ0aWNhbGx5OwoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy93aW5kb3cuaCcKLS0tIHNyYy93aW5kb3cuaAkyMDEyLTA3LTA1IDE1OjIwOjEy ICswMDAwCisrKyBzcmMvd2luZG93LmgJMjAxMi0wNy0xMyAwMzozNzo0MiArMDAwMApAQCAt ODg1LDcgKzg4NSw3IEBACiAKIC8qIFRoZXNlIHVzZWQgdG8gYmUgaW4gbGlzcC5oLiAgKi8K IAotZXh0ZXJuIExpc3BfT2JqZWN0IFF3aW5kb3dwLCBRd2luZG93X2xpdmVfcDsKK2V4dGVy biBMaXNwX09iamVjdCBRd2luZG93X2xpdmVfcDsKIGV4dGVybiBMaXNwX09iamVjdCBWd2lu ZG93X2xpc3Q7CiAKIGV4dGVybiBpbnQgY29tcGFyZV93aW5kb3dfY29uZmlndXJhdGlvbnMg KExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgaW50KTsKQEAgLTkwMCw0ICs5MDAsMTcgQEAK IGV4dGVybiB2b2lkIHN5bXNfb2Zfd2luZG93ICh2b2lkKTsKIGV4dGVybiB2b2lkIGtleXNf b2Zfd2luZG93ICh2b2lkKTsKIAorLyogQ0hFQ0tfTElWRV9XSU5ET1cgcmVqZWN0cyB3aW5k b3dzIG9uIHRoZSBpbnRlcmlvciBvZiB0aGUgd2luZG93IHRyZWUgYXMKKyAgICJkZWFkIiwg d2hpY2ggaXMgd2hhdCB3ZSB3YW50OyB0aGlzIGlzIGFuIGFyZ3VtZW50LWNoZWNraW5nIGZ1 bmN0aW9uLCBhbmQKKyAgIHRoZSB1c2VyIHNob3VsZCBuZXZlciBnZXQgYWNjZXNzIHRvIGlu dGVyaW9yIHdpbmRvd3MuCisKKyAgIEEgd2luZG93IG9mIGFueSBzb3J0LCBsZWFmIG9yIGlu dGVyaW9yLCBpcyBkZWFkIGlmIHRoZSBidWZmZXIsCisgICB2Y2hpbGQsIGFuZCBoY2hpbGQg bWVtYmVycyBhcmUgYWxsIG5pbC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NIRUNLX0xJ VkVfV0lORE9XIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChXSU5ET1dQICh4 KSAmJiAhTklMUCAoWFdJTkRPVyAoeCktPmJ1ZmZlciksIFF3aW5kb3dfbGl2ZV9wLCB4KTsK K30KKworCiAjZW5kaWYgLyogbm90IFdJTkRPV19IX0lOQ0xVREVEICovCg== --------------030501010209060903070607--