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#12632: file permissions checking mishandled when setuid Date: Sat, 13 Oct 2012 23:16:44 -0700 Organization: UCLA Computer Science Department Message-ID: <507A58CC.10209@cs.ucla.edu> References: <5078CAB6.7020509@cs.ucla.edu> <83fw5i7s4p.fsf@gnu.org> <83a9vq7oqh.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040101050002060507040305" X-Trace: ger.gmane.org 1350195504 27284 80.91.229.3 (14 Oct 2012 06:18:24 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 14 Oct 2012 06:18:24 +0000 (UTC) Cc: 12632@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Oct 14 08:18:30 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 1TNHWn-0007oz-N1 for geb-bug-gnu-emacs@m.gmane.org; Sun, 14 Oct 2012 08:18:22 +0200 Original-Received: from localhost ([::1]:49841 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNHWg-0000Uj-Am for geb-bug-gnu-emacs@m.gmane.org; Sun, 14 Oct 2012 02:18:14 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:34505) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNHWZ-0000Ue-RA for bug-gnu-emacs@gnu.org; Sun, 14 Oct 2012 02:18:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TNHWV-0003Fv-Li for bug-gnu-emacs@gnu.org; Sun, 14 Oct 2012 02:18:07 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:32898) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNHWV-0003Fr-Hd for bug-gnu-emacs@gnu.org; Sun, 14 Oct 2012 02:18:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TNHXS-0000vK-Hi for bug-gnu-emacs@gnu.org; Sun, 14 Oct 2012 02:19: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: Sun, 14 Oct 2012 06:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12632 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 12632-submit@debbugs.gnu.org id=B12632.13501954923490 (code B ref 12632); Sun, 14 Oct 2012 06:19:02 +0000 Original-Received: (at 12632) by debbugs.gnu.org; 14 Oct 2012 06:18:12 +0000 Original-Received: from localhost ([127.0.0.1]:43148 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TNHWb-0000uC-CO for submit@debbugs.gnu.org; Sun, 14 Oct 2012 02:18:12 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:44432) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TNHWS-0000tc-MR for 12632@debbugs.gnu.org; Sun, 14 Oct 2012 02:18:07 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 1E16BA60017; Sat, 13 Oct 2012 23:16:55 -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 T1AUy+fhjmYA; Sat, 13 Oct 2012 23:16:51 -0700 (PDT) Original-Received: from [192.168.1.3] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 52A4AA60001; Sat, 13 Oct 2012 23:16:51 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 In-Reply-To: <83a9vq7oqh.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:65578 Archived-At: This is a multi-part message in MIME format. --------------040101050002060507040305 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/13/2012 12:23 AM, Eli Zaretskii wrote: > The FIXMEs are OK, but I see no reason for them to come _instead_ of > comments which explain why 'access' is used instead of 'stat'. OK, I left those comments alone in the attached revision of the patch. > How will the new code work if 'dir' is nil? 'dir' can't be nil there. But this is a separate issue, so I've omitted that change from the revised patch. > Also, what about lread.c:openp, around line 1555: doesn't it want > 'euidaccess' as well, rather than 'stat'? Sure, we can do that. Done in the revised patch. > I don't understand why is it a good idea to use 'euidaccess' in > check_existing. Isn't the fact of the mere existence of a file > independent of user's access rights? No, because you cannot even stat a file that's in a directory that you can't search. Using 'access' rather than 'euidaccess' might let a setuid Emacs search directories that it shouldn't be able to search, or vice versa. --------------040101050002060507040305 Content-Type: text/plain; charset=UTF-8; name="euidaccess.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="euidaccess.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEyLTEwLTEx IDExOjI5OjQ3ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMi0xMC0xNCAwNjowMzo1MCArMDAw MApAQCAtMSwzICsxLDEyIEBACisyMDEyLTEwLTE0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KKworCVVzZSBldWlkYWNjZXNzLCBub3QgYWNjZXNzLCB3aGVuIGNoZWNr aW5nIGZpbGUgcGVybWlzc2lvbnMgKEJ1ZyMxMjYzMikuCisJKiBjb25maWd1cmUuYWMgKGV1 aWRhY2Nlc3MpOiBSZW1vdmUgY2hlY2s7IGdudWxpYiBkb2VzIHRoaXMgZm9yIHVzIG5vdy4K KwkqIGxpYi9ldWlkYWNjZXNzLmMsIGxpYi9nZXRncm91cHMuYywgbGliL2dyb3VwLW1lbWJl ci5jOgorCSogbGliL3Jvb3QtdWlkLmgsIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgsIG00L2V1 aWRhY2Nlc3MubTQ6CisJKiBtNC9nZXRncm91cHMubTQsIG00L2dyb3VwLW1lbWJlci5tNDog TmV3IGZpbGVzLCBmcm9tIGdudWxpYi4KKwkqIGxpYi9nbnVsaWIubWssIG00L2dudWxpYi1j b21wLm00OiBSZWdlbmVyYXRlLgorCiAyMDEyLTEwLTExICBLZW5pY2hpIEhhbmRhICA8aGFu ZGFAZ251Lm9yZz4KIAogCSogLmJ6cmlnbm9yZTogQWRkIHNldmVyYWwgZmlsZXMgdW5kZXIg YWRtaW4vY2hhcnNldHMuCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwot LS0gYWRtaW4vQ2hhbmdlTG9nCTIwMTItMTAtMTEgMTE6Mjk6NDcgKzAwMDAKKysrIGFkbWlu L0NoYW5nZUxvZwkyMDEyLTEwLTE0IDA2OjAzOjUwICswMDAwCkBAIC0xLDMgKzEsOSBAQAor MjAxMi0xMC0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVc2Ug ZXVpZGFjY2Vzcywgbm90IGFjY2Vzcywgd2hlbiBjaGVja2luZyBmaWxlIHBlcm1pc3Npb25z IChCdWcjMTI2MzIpLgorCSogbWVyZ2UtZ251bGliIChHTlVMSUJfTU9EVUxFUyk6IEFkZCBl dWlkYWNjZXNzLgorCShHTlVMSUJfVE9PTF9GTEFHUyk6IEF2b2lkIG1hbGxvYy1wb3NpeC4K KwogMjAxMi0xMC0xMSAgS2VuaWNoaSBIYW5kYSAgPGhhbmRhQGdudS5vcmc+CiAKIAkqIGNo YXJzZXRzL21hcGNvbnY6IEFkanVzdGVkIGZvciB0aGUgY2hhbmdlIG9mIG1hcGZpbGVzLyou Z3ogdG8KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9tZXJnZS1nbnVsaWInCi0tLSBhZG1p bi9tZXJnZS1nbnVsaWIJMjAxMi0wOS0yNyAwMTowNjoyMyArMDAwMAorKysgYWRtaW4vbWVy Z2UtZ251bGliCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTI4LDcgKzI4LDcgQEAK IEdOVUxJQl9NT0RVTEVTPScKICAgYWxsb2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZQogICBj YXJlYWRsaW5rYXQgY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNyeXB0 by9zaGE1MTIKLSAgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2luZm8K KyAgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXVpZGFjY2VzcyBleGVjaW5m bwogICBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2Zk YXkKICAgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdAogICBtYW55d2Fy bmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHJlYWRsaW5rCkBAIC00MCw3 ICs0MCw3IEBACiAKIEdOVUxJQl9UT09MX0ZMQUdTPScKICAgLS1hdm9pZD1lcnJubyAtLWF2 b2lkPWZjbnRsIC0tYXZvaWQ9ZmNudGwtaCAtLWF2b2lkPWZzdGF0Ci0gIC0tYXZvaWQ9bXN2 Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdworICAtLWF2b2lkPW1hbGxvYy1wb3NpeCAt LWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cKICAgLS1hdm9pZD1yYWlz ZSAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVz CiAgIC0tYXZvaWQ9dGhyZWFkbGliCiAgIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0t aW1wb3J0IC0tbm8tY2hhbmdlbG9nIC0tbm8tdmMtZmlsZXMKCj09PSBtb2RpZmllZCBmaWxl ICdjb25maWd1cmUuYWMnCi0tLSBjb25maWd1cmUuYWMJMjAxMi0xMC0wOCAxNjowOTowMCAr MDAwMAorKysgY29uZmlndXJlLmFjCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTI4 NzIsNyArMjg3Miw3IEBACiBBQ19DSEVDS19GVU5DUyhnZXRob3N0bmFtZSBcCiBjbG9zZWRp ciBnZXRydXNhZ2UgZ2V0X2N1cnJlbnRfZGlyX25hbWUgXAogbHJhbmQ0OCBzZXRzaWQgXAot ZnBhdGhjb25mIHNlbGVjdCBldWlkYWNjZXNzIGdldHBhZ2VzaXplIHNldGxvY2FsZSBcCitm cGF0aGNvbmYgc2VsZWN0IGdldHBhZ2VzaXplIHNldGxvY2FsZSBcCiB1dGltZXMgZ2V0cmxp bWl0IHNldHJsaW1pdCBzZXRwZ2lkIGdldGN3ZCBzaHV0ZG93biBnZXRhZGRyaW5mbyBcCiBf X2ZwZW5kaW5nIHN0cnNpZ25hbCBzZXRpdGltZXIgXAogc2VuZHRvIHJlY3Zmcm9tIGdldHNv Y2tuYW1lIGdldHBlZXJuYW1lIGdldGlmYWRkcnMgZnJlZWlmYWRkcnMgXAoKPT09IGFkZGVk IGZpbGUgJ2xpYi9ldWlkYWNjZXNzLmMnCi0tLSBsaWIvZXVpZGFjY2Vzcy5jCTE5NzAtMDEt MDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9ldWlkYWNjZXNzLmMJMjAxMi0xMC0xMiAyMzoy ODozMSArMDAwMApAQCAtMCwwICsxLDIyMSBAQAorLyogZXVpZGFjY2VzcyAtLSBjaGVjayBp ZiBlZmZlY3RpdmUgdXNlciBpZCBjYW4gYWNjZXNzIGZpbGUKKworICAgQ29weXJpZ2h0IChD KSAxOTkwLTE5OTEsIDE5OTUsIDE5OTgsIDIwMDAsIDIwMDMtMjAwNiwgMjAwOC0yMDEyIEZy ZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkg RGF2aWQgTWFjS2VuemllIGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKyAgIEFkYXB0ZWQgZm9y IEdOVSBDIGxpYnJhcnkgYnkgUm9sYW5kIE1jR3JhdGguICAqLworCisjaWZuZGVmIF9MSUJD CisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgor I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk ZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJyb290LXVpZC5oIgorCisjaWYgSEFWRV9MSUJH RU5fSAorIyBpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8u aD4KKyNpZm5kZWYgX19zZXRfZXJybm8KKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJy bm8gPSAodmFsKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEVBQ0NFUyAmJiAhZGVmaW5lZCBF QUNDRVNTCisjIGRlZmluZSBFQUNDRVNTIEVBQ0NFUworI2VuZGlmCisKKyNpZm5kZWYgRl9P SworIyBkZWZpbmUgRl9PSyAwCisjIGRlZmluZSBYX09LIDEKKyMgZGVmaW5lIFdfT0sgMgor IyBkZWZpbmUgUl9PSyA0CisjZW5kaWYKKworCisjaWZkZWYgX0xJQkMKKworIyBkZWZpbmUg YWNjZXNzIF9fYWNjZXNzCisjIGRlZmluZSBnZXR1aWQgX19nZXR1aWQKKyMgZGVmaW5lIGdl dGdpZCBfX2dldGdpZAorIyBkZWZpbmUgZ2V0ZXVpZCBfX2dldGV1aWQKKyMgZGVmaW5lIGdl dGVnaWQgX19nZXRlZ2lkCisjIGRlZmluZSBncm91cF9tZW1iZXIgX19ncm91cF9tZW1iZXIK KyMgZGVmaW5lIGV1aWRhY2Nlc3MgX19ldWlkYWNjZXNzCisjIHVuZGVmIHN0YXQKKyMgZGVm aW5lIHN0YXQgc3RhdDY0CisKKyNlbmRpZgorCisvKiBSZXR1cm4gMCBpZiB0aGUgdXNlciBo YXMgcGVybWlzc2lvbiBvZiB0eXBlIE1PREUgb24gRklMRTsKKyAgIG90aGVyd2lzZSwgcmV0 dXJuIC0xIGFuZCBzZXQgJ2Vycm5vJy4KKyAgIExpa2UgYWNjZXNzLCBleGNlcHQgdGhhdCBp dCB1c2VzIHRoZSBlZmZlY3RpdmUgdXNlciBhbmQgZ3JvdXAKKyAgIGlkJ3MgaW5zdGVhZCBv ZiB0aGUgcmVhbCBvbmVzLCBhbmQgaXQgZG9lcyBub3QgYWx3YXlzIGNoZWNrIGZvciByZWFk LW9ubHkKKyAgIGZpbGUgc3lzdGVtLCB0ZXh0IGJ1c3ksIGV0Yy4gICovCisKK2ludAorZXVp ZGFjY2VzcyAoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpCit7CisjaWYgSEFWRV9GQUND RVNTQVQgICAgICAgICAgICAgICAgICAgLyogZ2xpYmMsIEFJWCA3LCBTb2xhcmlzIDExLCBD eWd3aW4gMS43ICovCisgIHJldHVybiBmYWNjZXNzYXQgKEFUX0ZEQ1dELCBmaWxlLCBtb2Rl LCBBVF9FQUNDRVNTKTsKKyNlbGlmIGRlZmluZWQgRUZGX09OTFlfT0sgICAgICAgICAgICAg ICAvKiBJUklYLCBPU0YvMSwgSW50ZXJpeCAqLworICByZXR1cm4gYWNjZXNzIChmaWxlLCBt b2RlIHwgRUZGX09OTFlfT0spOworI2VsaWYgZGVmaW5lZCBBQ0NfU0VMRiAgICAgICAgICAg ICAgICAgIC8qIEFJWCAqLworICByZXR1cm4gYWNjZXNzeCAoZmlsZSwgbW9kZSwgQUNDX1NF TEYpOworI2VsaWYgSEFWRV9FQUNDRVNTICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWVC U0QgKi8KKyAgcmV0dXJuIGVhY2Nlc3MgKGZpbGUsIG1vZGUpOworI2Vsc2UgICAgICAgLyog TWFjIE9TIFgsIE5ldEJTRCwgT3BlbkJTRCwgSFAtVVgsIFNvbGFyaXMsIEN5Z3dpbiwgbWlu Z3csIEJlT1MgKi8KKworICB1aWRfdCB1aWQgPSBnZXR1aWQgKCk7CisgIGdpZF90IGdpZCA9 IGdldGdpZCAoKTsKKyAgdWlkX3QgZXVpZCA9IGdldGV1aWQgKCk7CisgIGdpZF90IGVnaWQg PSBnZXRlZ2lkICgpOworICBzdHJ1Y3Qgc3RhdCBzdGF0czsKKworIyBpZiBIQVZFX0RFQ0xf U0VUUkVHSUQgJiYgUFJFRkVSX05PTlJFRU5UUkFOVF9FVUlEQUNDRVNTCisKKyAgLyogRGVm aW5lIFBSRUZFUl9OT05SRUVOVFJBTlRfRVVJREFDQ0VTUyBpZiB5b3UgcHJlZmVyIGV1aWRh Y2Nlc3MgdG8KKyAgICAgcmV0dXJuIHRoZSBjb3JyZWN0IHJlc3VsdCBldmVuIGlmIHRoaXMg d291bGQgbWFrZSBpdAorICAgICBub25yZWVudHJhbnQuICBEZWZpbmUgdGhpcyBvbmx5IGlm IHlvdXIgZW50aXJlIGFwcGxpY2F0aW9uIGlzCisgICAgIHNhZmUgZXZlbiBpZiB0aGUgdWlk IG9yIGdpZCBtaWdodCB0ZW1wb3JhcmlseSBjaGFuZ2UuICBJZiB5b3VyCisgICAgIGFwcGxp Y2F0aW9uIHVzZXMgc2lnbmFsIGhhbmRsZXJzIG9yIHRocmVhZHMgaXQgaXMgcHJvYmFibHkg bm90CisgICAgIHNhZmUuICAqLworCisgIGlmIChtb2RlID09IEZfT0spCisgICAgcmV0dXJu IHN0YXQgKGZpbGUsICZzdGF0cyk7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgcmVzdWx0 OworICAgICAgaW50IHNhdmVkX2Vycm5vOworCisgICAgICBpZiAodWlkICE9IGV1aWQpCisg ICAgICAgIHNldHJldWlkIChldWlkLCB1aWQpOworICAgICAgaWYgKGdpZCAhPSBlZ2lkKQor ICAgICAgICBzZXRyZWdpZCAoZWdpZCwgZ2lkKTsKKworICAgICAgcmVzdWx0ID0gYWNjZXNz IChmaWxlLCBtb2RlKTsKKyAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisKKyAgICAgIC8q IFJlc3RvcmUgdGhlbS4gICovCisgICAgICBpZiAodWlkICE9IGV1aWQpCisgICAgICAgIHNl dHJldWlkICh1aWQsIGV1aWQpOworICAgICAgaWYgKGdpZCAhPSBlZ2lkKQorICAgICAgICBz ZXRyZWdpZCAoZ2lkLCBlZ2lkKTsKKworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAg ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisjIGVsc2UKKworICAvKiBUaGUgZm9sbG93 aW5nIGNvZGUgYXNzdW1lcyB0aGUgdHJhZGl0aW9uYWwgVW5peCBtb2RlbCwgYW5kIGlzIG5v dAorICAgICBjb3JyZWN0IG9uIHN5c3RlbXMgdGhhdCBoYXZlIEFDTHMgb3IgdGhlIGxpa2Uu ICBIb3dldmVyLCBpdCdzCisgICAgIGJldHRlciB0aGFuIG5vdGhpbmcsIGFuZCBpdCBpcyBy ZWVudHJhbnQuICAqLworCisgIHVuc2lnbmVkIGludCBncmFudGVkOworICBpZiAodWlkID09 IGV1aWQgJiYgZ2lkID09IGVnaWQpCisgICAgLyogSWYgd2UgYXJlIG5vdCBzZXQtdWlkIG9y IHNldC1naWQsIGFjY2VzcyBkb2VzIHRoZSBzYW1lLiAgKi8KKyAgICByZXR1cm4gYWNjZXNz IChmaWxlLCBtb2RlKTsKKworICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzKSAhPSAwKQorICAg IHJldHVybiAtMTsKKworICAvKiBUaGUgc3VwZXItdXNlciBjYW4gcmVhZCBhbmQgd3JpdGUg YW55IGZpbGUsIGFuZCBleGVjdXRlIGFueSBmaWxlCisgICAgIHRoYXQgYW55b25lIGNhbiBl eGVjdXRlLiAgKi8KKyAgaWYgKGV1aWQgPT0gUk9PVF9VSUQKKyAgICAgICYmICgobW9kZSAm IFhfT0spID09IDAKKyAgICAgICAgICB8fCAoc3RhdHMuc3RfbW9kZSAmIChTX0lYVVNSIHwg U19JWEdSUCB8IFNfSVhPVEgpKSkpCisgICAgcmV0dXJuIDA7CisKKyAgLyogQ29udmVydCB0 aGUgbW9kZSB0byB0cmFkaXRpb25hbCBmb3JtLCBjbGVhcmluZyBhbnkgYm9ndXMgYml0cy4g ICovCisgIGlmIChSX09LID09IDQgJiYgV19PSyA9PSAyICYmIFhfT0sgPT0gMSAmJiBGX09L ID09IDApCisgICAgbW9kZSAmPSA3OworICBlbHNlCisgICAgbW9kZSA9ICgobW9kZSAmIFJf T0sgPyA0IDogMCkKKyAgICAgICAgICAgICsgKG1vZGUgJiBXX09LID8gMiA6IDApCisgICAg ICAgICAgICArIChtb2RlICYgWF9PSyA/IDEgOiAwKSk7CisKKyAgaWYgKG1vZGUgPT0gMCkK KyAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogVGhlIGZpbGUgZXhpc3RzLiAg Ki8KKworICAvKiBDb252ZXJ0IHRoZSBmaWxlJ3MgcGVybWlzc2lvbiBiaXRzIHRvIHRyYWRp dGlvbmFsIGZvcm0uICAqLworICBpZiAoU19JUlVTUiA9PSAoNCA8PCA2KSAmJiBTX0lXVVNS ID09ICgyIDw8IDYpICYmIFNfSVhVU1IgPT0gKDEgPDwgNikKKyAgICAgICYmIFNfSVJHUlAg PT0gKDQgPDwgMykgJiYgU19JV0dSUCA9PSAoMiA8PCAzKSAmJiBTX0lYR1JQID09ICgxIDw8 IDMpCisgICAgICAmJiBTX0lST1RIID09ICg0IDw8IDApICYmIFNfSVdPVEggPT0gKDIgPDwg MCkgJiYgU19JWE9USCA9PSAoMSA8PCAwKSkKKyAgICBncmFudGVkID0gc3RhdHMuc3RfbW9k ZTsKKyAgZWxzZQorICAgIGdyYW50ZWQgPSAoKHN0YXRzLnN0X21vZGUgJiBTX0lSVVNSID8g NCA8PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBTX0lXVVNS ID8gMiA8PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBTX0lY VVNSID8gMSA8PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBT X0lSR1JQID8gNCA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUg JiBTX0lXR1JQID8gMiA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21v ZGUgJiBTX0lYR1JQID8gMSA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0 X21vZGUgJiBTX0lST1RIID8gNCA8PCAwIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRz LnN0X21vZGUgJiBTX0lXT1RIID8gMiA8PCAwIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0 YXRzLnN0X21vZGUgJiBTX0lYT1RIID8gMSA8PCAwIDogMCkpOworCisgIGlmIChldWlkID09 IHN0YXRzLnN0X3VpZCkKKyAgICBncmFudGVkID4+PSA2OworICBlbHNlIGlmIChlZ2lkID09 IHN0YXRzLnN0X2dpZCB8fCBncm91cF9tZW1iZXIgKHN0YXRzLnN0X2dpZCkpCisgICAgZ3Jh bnRlZCA+Pj0gMzsKKworICBpZiAoKG1vZGUgJiB+Z3JhbnRlZCkgPT0gMCkKKyAgICByZXR1 cm4gMDsKKyAgX19zZXRfZXJybm8gKEVBQ0NFU1MpOworICByZXR1cm4gLTE7CisKKyMgZW5k aWYKKyNlbmRpZgorfQorI3VuZGVmIGV1aWRhY2Nlc3MKKyNpZmRlZiB3ZWFrX2FsaWFzCit3 ZWFrX2FsaWFzIChfX2V1aWRhY2Nlc3MsIGV1aWRhY2Nlc3MpCisjZW5kaWYKKwwKKyNpZmRl ZiBURVNUCisjIGluY2x1ZGUgPGVycm9yLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGlu Y2x1ZGUgPHN0ZGxpYi5oPgorCitjaGFyICpwcm9ncmFtX25hbWU7CisKK2ludAorbWFpbiAo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBjaGFyICpmaWxlOworICBpbnQgbW9kZTsK KyAgaW50IGVycjsKKworICBwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworICBpZiAoYXJnYyA8 IDMpCisgICAgYWJvcnQgKCk7CisgIGZpbGUgPSBhcmd2WzFdOworICBtb2RlID0gYXRvaSAo YXJndlsyXSk7CisKKyAgZXJyID0gZXVpZGFjY2VzcyAoZmlsZSwgbW9kZSk7CisgIHByaW50 ZiAoIiVkXG4iLCBlcnIpOworICBpZiAoZXJyICE9IDApCisgICAgZXJyb3IgKDAsIGVycm5v LCAiJXMiLCBmaWxlKTsKKyAgZXhpdCAoMCk7Cit9CisjZW5kaWYKCj09PSBhZGRlZCBmaWxl ICdsaWIvZ2V0Z3JvdXBzLmMnCi0tLSBsaWIvZ2V0Z3JvdXBzLmMJMTk3MC0wMS0wMSAwMDow MDowMCArMDAwMAorKysgbGliL2dldGdyb3Vwcy5jCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAw MDAKQEAgLTAsMCArMSwxMTYgQEAKKy8qIHByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2Ug dG8gZ2V0Z3JvdXBzIGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgYWxsb3cgTj09MAorCisgICBD b3B5cmlnaHQgKEMpIDE5OTYsIDE5OTksIDIwMDMsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5 ZXJpbmcgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8dW5pc3RkLmg+ CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PHN0ZGludC5oPgorCisjaWYgIUhBVkVfR0VUR1JPVVBTCisKKy8qIFByb3ZpZGUgYSBzdHVi IHRoYXQgZmFpbHMgd2l0aCBFTk9TWVMsIHNpbmNlIHRoZXJlIGlzIG5vIGdyb3VwCisgICBp bmZvcm1hdGlvbiBhdmFpbGFibGUgb24gbWluZ3cuICAqLworaW50CitnZXRncm91cHMgKGlu dCBuIF9HTF9VTlVTRUQsIEdFVEdST1VQU19UICpncm91cHMgX0dMX1VOVVNFRCkKK3sKKyAg ZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAtMTsKK30KKworI2Vsc2UgLyogSEFWRV9HRVRH Uk9VUFMgKi8KKworIyB1bmRlZiBnZXRncm91cHMKKyMgaWZuZGVmIEdFVEdST1VQU19aRVJP X0JVRworIyAgZGVmaW5lIEdFVEdST1VQU19aRVJPX0JVRyAwCisjIGVuZGlmCisKKy8qIE9u IGF0IGxlYXN0IFVsdHJpeCA0LjMgYW5kIE5leHRTdGVwIDMuMiwgZ2V0Z3JvdXBzICgwLCBO VUxMKSBhbHdheXMKKyAgIGZhaWxzLiAgT24gb3RoZXIgc3lzdGVtcywgaXQgcmV0dXJucyB0 aGUgbnVtYmVyIG9mIHN1cHBsZW1lbnRhbAorICAgZ3JvdXBzIGZvciB0aGUgcHJvY2Vzcy4g IFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0IHNwZWNpYWwgY2FzZQorICAgYW5kIGxldHMg dGhlIHN5c3RlbS1wcm92aWRlZCBmdW5jdGlvbiBoYW5kbGUgYWxsIG90aGVycy4gIEhvd2V2 ZXIsCisgICBpdCBjYW4gZmFpbCB3aXRoIEVOT01FTSBpZiBtZW1vcnkgaXMgdGlnaHQuICBJ dCBpcyB1bnNwZWNpZmllZAorICAgd2hldGhlciB0aGUgZWZmZWN0aXZlIGdyb3VwIGlkIGlz IGluY2x1ZGVkIGluIHRoZSBsaXN0LiAgKi8KKworaW50CitycGxfZ2V0Z3JvdXBzIChpbnQg biwgZ2lkX3QgKmdyb3VwKQoreworICBpbnQgbl9ncm91cHM7CisgIEdFVEdST1VQU19UICpn YnVmOworICBpbnQgc2F2ZWRfZXJybm87CisKKyAgaWYgKG4gPCAwKQorICAgIHsKKyAgICAg IGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobiAh PSAwIHx8ICFHRVRHUk9VUFNfWkVST19CVUcpCisgICAgeworICAgICAgaW50IHJlc3VsdDsK KyAgICAgIGlmIChzaXplb2YgKmdyb3VwID09IHNpemVvZiAqZ2J1ZikKKyAgICAgICAgcmV0 dXJuIGdldGdyb3VwcyAobiwgKEdFVEdST1VQU19UICopIGdyb3VwKTsKKworICAgICAgaWYg KFNJWkVfTUFYIC8gc2l6ZW9mICpnYnVmIDw9IG4pCisgICAgICAgIHsKKyAgICAgICAgICBl cnJubyA9IEVOT01FTTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAg IGdidWYgPSBtYWxsb2MgKG4gKiBzaXplb2YgKmdidWYpOworICAgICAgaWYgKCFnYnVmKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgICByZXN1bHQgPSBnZXRncm91cHMgKG4sIGdidWYp OworICAgICAgaWYgKDAgPD0gcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgbiA9IHJl c3VsdDsKKyAgICAgICAgICB3aGlsZSAobi0tKQorICAgICAgICAgICAgZ3JvdXBbbl0gPSBn YnVmW25dOworICAgICAgICB9CisgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAg ZnJlZSAoZ2J1Zik7CisgICAgICBlcnJubyA9PSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVy biByZXN1bHQ7CisgICAgfQorCisgIG4gPSAyMDsKKyAgd2hpbGUgKDEpCisgICAgeworICAg ICAgLyogTm8gbmVlZCB0byB3b3JyeSBhYm91dCBhZGRyZXNzIGFyaXRobWV0aWMgb3ZlcmZs b3cgaGVyZSwKKyAgICAgICAgIHNpbmNlIHRoZSBhbmNpZW50IHN5c3RlbXMgdGhhdCB3ZSdy ZSBydW5uaW5nIG9uIGhhdmUgbG93CisgICAgICAgICBsaW1pdHMgb24gdGhlIG51bWJlciBv ZiBzZWNvbmRhcnkgZ3JvdXBzLiAgKi8KKyAgICAgIGdidWYgPSBtYWxsb2MgKG4gKiBzaXpl b2YgKmdidWYpOworICAgICAgaWYgKCFnYnVmKQorICAgICAgICByZXR1cm4gLTE7CisgICAg ICBuX2dyb3VwcyA9IGdldGdyb3VwcyAobiwgZ2J1Zik7CisgICAgICBpZiAobl9ncm91cHMg PT0gLTEgPyBlcnJubyAhPSBFSU5WQUwgOiBuX2dyb3VwcyA8IG4pCisgICAgICAgIGJyZWFr OworICAgICAgZnJlZSAoZ2J1Zik7CisgICAgICBuICo9IDI7CisgICAgfQorCisgIHNhdmVk X2Vycm5vID0gZXJybm87CisgIGZyZWUgKGdidWYpOworICBlcnJubyA9IHNhdmVkX2Vycm5v OworCisgIHJldHVybiBuX2dyb3VwczsKK30KKworI2VuZGlmIC8qIEhBVkVfR0VUR1JPVVBT ICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnbGliL2dudWxpYi5taycKLS0tIGxpYi9nbnVsaWIu bWsJMjAxMi0xMC0wNCAwNzoxNTo0MiArMDAwMAorKysgbGliL2dudWxpYi5tawkyMDEyLTEw LTEyIDIzOjI4OjMxICswMDAwCkBAIC0yMSw3ICsyMSw3IEBACiAjIHRoZSBzYW1lIGRpc3Ry aWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAjCiAjIEdlbmVy YXRlZCBieSBnbnVsaWItdG9vbC4KLSMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWlt cG9ydCAtLWRpcj0uIC0tbGliPWxpYmdudSAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9 bTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1h dXggLS1hdm9pZD1lcnJubyAtLWF2b2lkPWZjbnRsIC0tYXZvaWQ9ZmNudGwtaCAtLWF2b2lk PWZzdGF0IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lk PXJhaXNlIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNf dHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAtLWNv bmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wg LS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmth dCBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEyNTYgY3J5cHRvL3NoYTUxMiBk dG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVjaW5mbyBmaWxlbW9kZSBnZXRs b2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGlu dHByb3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRo cmVhZF9zaWdtYXNrIHJlYWRsaW5rIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFy ZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBz eXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVj LXN1YiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1p bXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNl PW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQt YXV4IC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY250bCAtLWF2b2lkPWZjbnRsLWggLS1hdm9p ZD1mc3RhdCAtLWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9p ZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNp Z3Byb2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVzIC0tYXZvaWQ9dGhyZWFkbGliIC0tbWFrZWZp bGUtbmFtZT1nbnVsaWIubWsgLS1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0 b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYWxsb2NhLW9wdCBjLWN0eXBl IGMtc3RyY2FzZSBjYXJlYWRsaW5rYXQgY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8v c2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24g ZXVpZGFjY2VzcyBleGVjaW5mbyBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0 dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3Rh dCBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHJlYWRsaW5r IHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0 aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1l IHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1dGltZW5zIHdhcm5pbmdz CiAKIAogTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCkBAIC0xNTAsNiAr MTUwLDE1IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZHVwMgogCisjIyBiZWdpbiBn bnVsaWIgbW9kdWxlIGV1aWRhY2Nlc3MKKworCitFWFRSQV9ESVNUICs9IGV1aWRhY2Nlc3Mu YworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGV1aWRhY2Nlc3MuYworCisjIyBlbmQg ICBnbnVsaWIgbW9kdWxlIGV1aWRhY2Nlc3MKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBl eGVjaW5mbwogCiBCVUlMVF9TT1VSQ0VTICs9ICQoRVhFQ0lORk9fSCkKQEAgLTE4Myw2ICsx OTIsMTcgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBmaWxlbW9kZQogCisjIyBiZWdp biBnbnVsaWIgbW9kdWxlIGdldGdyb3VwcworCitpZiBnbF9HTlVMSUJfRU5BQkxFRF9nZXRn cm91cHMKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0gZ2V0Z3JvdXBzLmMKKworRVhUUkFfbGli Z251X2FfU09VUkNFUyArPSBnZXRncm91cHMuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxl IGdldGdyb3VwcworCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldGxvYWRhdmcKIAogCkBA IC0yNDIsNiArMjYyLDE3IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0dGltZW9m ZGF5CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ3JvdXAtbWVtYmVyCisKK2lmIGdsX0dO VUxJQl9FTkFCTEVEX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxCisKK2VuZGlm CitFWFRSQV9ESVNUICs9IGdyb3VwLW1lbWJlci5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJD RVMgKz0gZ3JvdXAtbWVtYmVyLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBncm91cC1t ZW1iZXIKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBpZ25vcmUtdmFsdWUKIAogCkBAIC0z NTQsNiArMzg1LDEzIEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcmVhZGxpbmsKIAor IyMgYmVnaW4gZ251bGliIG1vZHVsZSByb290LXVpZAorCisKK0VYVFJBX0RJU1QgKz0gcm9v dC11aWQuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHJvb3QtdWlkCisKICMjIGJlZ2lu IGdudWxpYiBtb2R1bGUgc2lnbmFsLWgKIAogQlVJTFRfU09VUkNFUyArPSBzaWduYWwuaApA QCAtMTMxMiw2ICsxMzUwLDE1IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmVyaWZ5 CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jLW92ZXJzaXplZAorCitpZiBnbF9H TlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYworCitlbmRp ZgorRVhUUkFfRElTVCArPSB4YWxsb2Mtb3ZlcnNpemVkLmgKKworIyMgZW5kICAgZ251bGli IG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkCisKIAogbW9zdGx5Y2xlYW4tbG9jYWw6IG1vc3Rs eWNsZWFuLWdlbmVyaWMKIAlAZm9yIGRpciBpbiAnJyAkKE1PU1RMWUNMRUFORElSUyk7IGRv IFwKCj09PSBhZGRlZCBmaWxlICdsaWIvZ3JvdXAtbWVtYmVyLmMnCi0tLSBsaWIvZ3JvdXAt bWVtYmVyLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2dyb3VwLW1lbWJl ci5jCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTAsMCArMSwxMTkgQEAKKy8qIGdy b3VwLW1lbWJlci5jIC0tIGRldGVybWluZSB3aGV0aGVyIGdyb3VwIGlkIGlzIGluIGNhbGxp bmcgdXNlcidzIGdyb3VwIGxpc3QKKworICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk3LTE5 OTgsIDIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBT cGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN0 ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisK KyNpbmNsdWRlICJ4YWxsb2Mtb3ZlcnNpemVkLmgiCisKKy8qIE1vc3QgcHJvY2Vzc2VzIGhh dmUgbm8gbW9yZSB0aGFuIHRoaXMgbWFueSBncm91cHMsIGFuZCBmb3IgdGhlc2UKKyAgIHBy b2Nlc3NlcyB3ZSBjYW4gYXZvaWQgdXNpbmcgbWFsbG9jLiAgKi8KK2VudW0geyBHUk9VUEJV Rl9TSVpFID0gMTAwIH07CisKK3N0cnVjdCBncm91cF9pbmZvCisgIHsKKyAgICBnaWRfdCAq Z3JvdXA7CisgICAgZ2lkX3QgZ3JvdXBidWZbR1JPVVBCVUZfU0laRV07CisgIH07CisKK3N0 YXRpYyB2b2lkCitmcmVlX2dyb3VwX2luZm8gKHN0cnVjdCBncm91cF9pbmZvIGNvbnN0ICpn KQoreworICBpZiAoZy0+Z3JvdXAgIT0gZy0+Z3JvdXBidWYpCisgICAgZnJlZSAoZy0+Z3Jv dXApOworfQorCitzdGF0aWMgaW50CitnZXRfZ3JvdXBfaW5mbyAoc3RydWN0IGdyb3VwX2lu Zm8gKmdpKQoreworICBpbnQgbl9ncm91cHMgPSBnZXRncm91cHMgKEdST1VQQlVGX1NJWkUs IGdpLT5ncm91cGJ1Zik7CisgIGdpLT5ncm91cCA9IGdpLT5ncm91cGJ1ZjsKKworICBpZiAo bl9ncm91cHMgPCAwKQorICAgIHsKKyAgICAgIGludCBuX2dyb3VwX3Nsb3RzID0gZ2V0Z3Jv dXBzICgwLCBOVUxMKTsKKyAgICAgIGlmICgwIDw9IG5fZ3JvdXBfc2xvdHMKKyAgICAgICAg ICAmJiAhIHhhbGxvY19vdmVyc2l6ZWQgKG5fZ3JvdXBfc2xvdHMsIHNpemVvZiAqZ2ktPmdy b3VwKSkKKyAgICAgICAgeworICAgICAgICAgIGdpLT5ncm91cCA9IG1hbGxvYyAobl9ncm91 cF9zbG90cyAqIHNpemVvZiAqZ2ktPmdyb3VwKTsKKyAgICAgICAgICBpZiAoZ2ktPmdyb3Vw KQorICAgICAgICAgICAgbl9ncm91cHMgPSBnZXRncm91cHMgKG5fZ3JvdXBfc2xvdHMsIGdp LT5ncm91cCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogSW4gY2FzZSBvZiBlcnJvciwg dGhlIHVzZXIgbG9zZXMuICAqLworICByZXR1cm4gbl9ncm91cHM7Cit9CisKKy8qIFJldHVy biBub24temVybyBpZiBHSUQgaXMgb25lIHRoYXQgd2UgaGF2ZSBpbiBvdXIgZ3JvdXBzIGxp c3QuCisgICBOb3RlIHRoYXQgdGhlIGdyb3VwcyBsaXN0IGlzIG5vdCBndWFyYW50ZWVkIHRv IGNvbnRhaW4gdGhlIGN1cnJlbnQKKyAgIG9yIGVmZmVjdGl2ZSBncm91cCBJRCwgc28gdGhl eSBzaG91bGQgZ2VuZXJhbGx5IGJlIGNoZWNrZWQKKyAgIHNlcGFyYXRlbHkuICAqLworCitp bnQKK2dyb3VwX21lbWJlciAoZ2lkX3QgZ2lkKQoreworICBpbnQgaTsKKyAgaW50IGZvdW5k OworICBzdHJ1Y3QgZ3JvdXBfaW5mbyBnaTsKKyAgaW50IG5fZ3JvdXBzID0gZ2V0X2dyb3Vw X2luZm8gKCZnaSk7CisKKyAgLyogU2VhcmNoIHRocm91Z2ggdGhlIGxpc3QgbG9va2luZyBm b3IgR0lELiAqLworICBmb3VuZCA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBuX2dyb3Vwczsg aSsrKQorICAgIHsKKyAgICAgIGlmIChnaWQgPT0gZ2kuZ3JvdXBbaV0pCisgICAgICAgIHsK KyAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9CisKKyAgZnJlZV9ncm91cF9pbmZvICgmZ2kpOworCisgIHJldHVybiBmb3VuZDsKK30K KworI2lmZGVmIFRFU1QKKworY2hhciAqcHJvZ3JhbV9uYW1lOworCitpbnQKK21haW4gKGlu dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0g YXJndlswXTsKKworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAg IGdpZF90IGdpZDsKKworICAgICAgZ2lkID0gYXRvaSAoYXJndltpXSk7CisgICAgICBwcmlu dGYgKCIlZDogJXNcbiIsIGdpZCwgZ3JvdXBfbWVtYmVyIChnaWQpID8gInllcyIgOiAibm8i KTsKKyAgICB9CisgIGV4aXQgKDApOworfQorCisjZW5kaWYgLyogVEVTVCAqLwoKPT09IGFk ZGVkIGZpbGUgJ2xpYi9yb290LXVpZC5oJwotLS0gbGliL3Jvb3QtdWlkLmgJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMAorKysgbGliL3Jvb3QtdWlkLmgJMjAxMi0xMC0xMiAyMzoyODoz MSArMDAwMApAQCAtMCwwICsxLDMwIEBACisvKiBUaGUgdXNlciBJRCB0aGF0IGFsd2F5cyBo YXMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyBpbiB0aGUgUE9TSVggc2Vuc2UuCisKKyAgIENv cHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK KyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisjaWZuZGVmIFJPT1RfVUlEX0hf CisjZGVmaW5lIFJPT1RfVUlEX0hfCisKKy8qIFRoZSB1c2VyIElEIHRoYXQgYWx3YXlzIGhh cyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIGluIHRoZSBQT1NJWCBzZW5zZS4gICovCisjaWZk ZWYgX19UQU5ERU0KKyMgZGVmaW5lIFJPT1RfVUlEIDY1NTM1CisjZWxzZQorIyBkZWZpbmUg Uk9PVF9VSUQgMAorI2VuZGlmCisKKyNlbmRpZgoKPT09IGFkZGVkIGZpbGUgJ2xpYi94YWxs b2Mtb3ZlcnNpemVkLmgnCi0tLSBsaWIveGFsbG9jLW92ZXJzaXplZC5oCTE5NzAtMDEtMDEg MDA6MDA6MDAgKzAwMDAKKysrIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgJMjAxMi0xMC0xMiAy MzoyODozMSArMDAwMApAQCAtMCwwICsxLDM4IEBACisvKiB4YWxsb2Mtb3ZlcnNpemVkLmgg LS0gbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBjaGVja2luZworCisgICBDb3B5cmlnaHQgKEMp IDE5OTAtMjAwMCwgMjAwMy0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgWEFMTE9DX09WRVJTSVpFRF9IXwor IyBkZWZpbmUgWEFMTE9DX09WRVJTSVpFRF9IXworCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgor CisvKiBSZXR1cm4gMSBpZiBhbiBhcnJheSBvZiBOIG9iamVjdHMsIGVhY2ggb2Ygc2l6ZSBT LCBjYW5ub3QgZXhpc3QgZHVlCisgICB0byBzaXplIGFyaXRobWV0aWMgb3ZlcmZsb3cuICBT IG11c3QgYmUgcG9zaXRpdmUgYW5kIE4gbXVzdCBiZQorICAgbm9ubmVnYXRpdmUuICBUaGlz IGlzIGEgbWFjcm8sIG5vdCBhIGZ1bmN0aW9uLCBzbyB0aGF0IGl0CisgICB3b3JrcyBjb3Jy ZWN0bHkgZXZlbiB3aGVuIFNJWkVfTUFYIDwgTi4KKworICAgQnkgZ251bGliIGNvbnZlbnRp b24sIFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cgaW4gc2l6ZQorICAgY2FsY3VsYXRp b25zLCBzbyB0aGUgY29uc2VydmF0aXZlIGRpdmlkZW5kIHRvIHVzZSBoZXJlIGlzCisgICBT SVpFX01BWCAtIDEsIHNpbmNlIFNJWkVfTUFYIG1pZ2h0IHJlcHJlc2VudCBhbiBvdmVyZmxv d2VkIHZhbHVlLgorICAgSG93ZXZlciwgbWFsbG9jIChTSVpFX01BWCkgZmFpbHMgb24gYWxs IGtub3duIGhvc3RzIHdoZXJlCisgICBzaXplb2YgKHB0cmRpZmZfdCkgPD0gc2l6ZW9mIChz aXplX3QpLCBzbyBkbyBub3QgYm90aGVyIHRvIHRlc3QgZm9yCisgICBleGFjdGx5LVNJWkVf TUFYIGFsbG9jYXRpb25zIG9uIHN1Y2ggaG9zdHM7IHRoaXMgYXZvaWRzIGEgdGVzdCBhbmQK KyAgIGJyYW5jaCB3aGVuIFMgaXMga25vd24gdG8gYmUgMS4gICovCisjIGRlZmluZSB4YWxs b2Nfb3ZlcnNpemVkKG4sIHMpIFwKKyAgICAoKHNpemVfdCkgKHNpemVvZiAocHRyZGlmZl90 KSA8PSBzaXplb2YgKHNpemVfdCkgPyAtMSA6IC0yKSAvIChzKSA8IChuKSkKKworI2VuZGlm IC8qICFYQUxMT0NfT1ZFUlNJWkVEX0hfICovCgo9PT0gYWRkZWQgZmlsZSAnbTQvZXVpZGFj Y2Vzcy5tNCcKLS0tIG00L2V1aWRhY2Nlc3MubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAw MAorKysgbTQvZXVpZGFjY2Vzcy5tNAkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0w LDAgKzEsNTIgQEAKKyMgZXVpZGFjY2Vzcy5tNCBzZXJpYWwgMTQKK2RubCBDb3B5cmlnaHQg KEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlz IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgor ZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1 dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMg dGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19OT05SRUVO VFJBTlRfRVVJREFDQ0VTU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfRVVJREFDQ0VT U10pCisgIEFDX0RFRklORShbUFJFRkVSX05PTlJFRU5UUkFOVF9FVUlEQUNDRVNTXSwgWzFd LAorICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgcHJlZmVyIGV1aWRhY2Nlc3MgdG8gcmV0dXJu IHRoZSBjb3JyZWN0IHJlc3VsdAorICAgICBldmVuIGlmIHRoaXMgd291bGQgbWFrZSBpdCBu b25yZWVudHJhbnQuICBEZWZpbmUgdGhpcyBvbmx5IGlmIHlvdXIKKyAgICAgZW50aXJlIGFw cGxpY2F0aW9uIGlzIHNhZmUgZXZlbiBpZiB0aGUgdWlkIG9yIGdpZCBtaWdodCB0ZW1wb3Jh cmlseQorICAgICBjaGFuZ2UuICBJZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgc2lnbmFsIGhh bmRsZXJzIG9yIHRocmVhZHMgaXQKKyAgICAgaXMgcHJvYmFibHkgbm90IHNhZmUuXSkKK10p CisKK0FDX0RFRlVOKFtnbF9GVU5DX0VVSURBQ0NFU1NdLAorWworICBBQ19SRVFVSVJFKFtn bF9VTklTVERfSF9ERUZBVUxUU10pCisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDx1bmlzdGQu aD4gdG8gZGVjbGFyZSBldWlkYWNjZXNzKCkuCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNU RU1fRVhURU5TSU9OU10pCisKKyAgQUNfQ0hFQ0tfRlVOQ1MoW2V1aWRhY2Nlc3NdKQorICBp ZiB0ZXN0ICRhY19jdl9mdW5jX2V1aWRhY2Nlc3MgPSBubzsgdGhlbgorICAgIEhBVkVfRVVJ REFDQ0VTUz0wCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2V1aWRhY2Nl c3MuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfRVVJREFDQ0VTU10sIFsKKyAgZG5sIFByZWZl ciBQT1NJWCBmYWNjZXNzYXQgb3ZlciBub24tc3RhbmRhcmQgZXVpZGFjY2Vzcy4KKyAgQUNf Q0hFQ0tfRlVOQ1NfT05DRShbZmFjY2Vzc2F0XSkKKyAgZG5sIFRyeSB2YXJpb3VzIG90aGVy IG5vbi1zdGFuZGFyZCBmYWxsYmFja3MuCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbbGli Z2VuLmhdKQorICBBQ19DSEVDS19ERUNMU19PTkNFKFtzZXRyZWdpZF0pCisgIEFDX1JFUVVJ UkUoW0FDX0ZVTkNfR0VUR1JPVVBTXSkKKworICAjIFNvbGFyaXMgOSBhbmQgMTAgbmVlZCAt bGdlbiB0byBnZXQgdGhlIGVhY2Nlc3MgZnVuY3Rpb24uCisgICMgU2F2ZSBhbmQgcmVzdG9y ZSBMSUJTIHNvIC1sZ2VuIGlzbid0IGFkZGVkIHRvIGl0LiAgT3RoZXJ3aXNlLCAqYWxsKgor ICAjIHByb2dyYW1zIGluIHRoZSBwYWNrYWdlIHdvdWxkIGVuZCB1cCBsaW5rZWQgd2l0aCB0 aGF0IHBvdGVudGlhbGx5LXNoYXJlZAorICAjIGxpYnJhcnksIGluZHVjaW5nIHVubmVjZXNz YXJ5IHJ1bi10aW1lIG92ZXJoZWFkLgorICBMSUJfRUFDQ0VTUz0KKyAgQUNfU1VCU1QoW0xJ Ql9FQUNDRVNTXSkKKyAgZ2xfc2F2ZWRfbGlicz0kTElCUworICAgIEFDX1NFQVJDSF9MSUJT KFtlYWNjZXNzXSwgW2dlbl0sCisgICAgICAgICAgICAgICAgICAgW3Rlc3QgIiRhY19jdl9z ZWFyY2hfZWFjY2VzcyIgPSAibm9uZSByZXF1aXJlZCIgfHwKKyAgICAgICAgICAgICAgICAg ICAgTElCX0VBQ0NFU1M9JGFjX2N2X3NlYXJjaF9lYWNjZXNzXSkKKyAgICBBQ19DSEVDS19G VU5DUyhbZWFjY2Vzc10pCisgIExJQlM9JGdsX3NhdmVkX2xpYnMKK10pCgo9PT0gYWRkZWQg ZmlsZSAnbTQvZ2V0Z3JvdXBzLm00JwotLS0gbTQvZ2V0Z3JvdXBzLm00CTE5NzAtMDEtMDEg MDA6MDA6MDAgKzAwMDAKKysrIG00L2dldGdyb3Vwcy5tNAkyMDEyLTEwLTEyIDIzOjI4OjMx ICswMDAwCkBAIC0wLDAgKzEsMTA3IEBACisjIHNlcmlhbCAxOAorCitkbmwgRnJvbSBKaW0g TWV5ZXJpbmcuCitkbmwgQSB3cmFwcGVyIGFyb3VuZCBBQ19GVU5DX0dFVEdST1VQUy4KKwor IyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5NywgMTk5OS0yMDA0LCAyMDA4LTIwMTIgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3 YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBw ZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0 aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZl ZC4KKworbTRfdmVyc2lvbl9wcmVyZXEoWzIuNzBdLCBbXSAsWworCisjIFRoaXMgaXMgdGFr ZW4gZnJvbSB0aGUgZm9sbG93aW5nIEF1dG9jb25mIHBhdGNoOgorIyBodHRwOi8vZ2l0LnNh dmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWF1dG9jb25mLmdpdDthPWNvbW1pdGRpZmY7aD03 ZmJiNTUzNzI3ZWQ3ZTBlNjg5YTE3NTk0YjU4NTU5ZWNmM2VhNmU5CitBQ19ERUZVTihbQUNf RlVOQ19HRVRHUk9VUFNdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX0dFVEdST1VQU10p ZG5sCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfU0laRV9UXSlkbmwKKyAgQUNfUkVRVUlSRShb QUNfQ0FOT05JQ0FMX0hPU1RdKWRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQ0hFQ0tf RlVOQyhbZ2V0Z3JvdXBzXSkKKworICAjIElmIHdlIGRvbid0IHlldCBoYXZlIGdldGdyb3Vw cywgc2VlIGlmIGl0J3MgaW4gLWxic2QuCisgICMgVGhpcyBpcyByZXBvcnRlZCB0byBiZSBu ZWNlc3Nhcnkgb24gYW4gSVRPUyAzMDAwV1MgcnVubmluZyBTRUlVWCAzLjEuCisgIGFjX3Nh dmVfTElCUz0kTElCUworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGdyb3VwcyA9IG5vOyB0 aGVuCisgICAgQUNfQ0hFQ0tfTElCKGJzZCwgZ2V0Z3JvdXBzLCBbR0VUR1JPVVBTX0xJQj0t bGJzZF0pCisgIGZpCisKKyAgIyBSdW4gdGhlIHByb2dyYW0gdG8gdGVzdCB0aGUgZnVuY3Rp b25hbGl0eSBvZiB0aGUgc3lzdGVtLXN1cHBsaWVkCisgICMgZ2V0Z3JvdXBzIGZ1bmN0aW9u IG9ubHkgaWYgdGhlcmUgaXMgc3VjaCBhIGZ1bmN0aW9uLgorICBpZiB0ZXN0ICRhY19jdl9m dW5jX2dldGdyb3VwcyA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29y a2luZyBnZXRncm91cHNdLCBbYWNfY3ZfZnVuY19nZXRncm91cHNfd29ya3NdLAorICAgICAg W0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAg ICAgW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorICAgICAgICAgICAgW1svKiBPbiBVbHRyaXgg NC4zLCBnZXRncm91cHMgKDAsIDApIGFsd2F5cyBmYWlscy4gICovCisgICAgICAgICAgICAg IHJldHVybiBnZXRncm91cHMgKDAsIDApID09IC0xO11dKQorICAgICAgICAgXSwKKyAgICAg ICAgIFthY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXNdLAorICAgICAgICAgW2FjX2N2 X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vXSwKKyAgICAgICAgIFtjYXNlICIkaG9zdF9vcyIg aW4gIyAoKAorICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0 ZW1zLgorICAgICAgICAgICAgKi1nbnUqKSBhY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz0i Z3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtu b3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICAqKSAgICAgIGFjX2N2X2Z1bmNf Z2V0Z3JvdXBzX3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICBlc2FjCisgICAg ICAgICBdKQorICAgICAgXSkKKyAgZWxzZQorICAgIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dv cmtzPW5vCisgIGZpCisgIGNhc2UgIiRhY19jdl9mdW5jX2dldGdyb3Vwc193b3JrcyIgaW4K KyAgICAqeWVzKQorICAgICAgQUNfREVGSU5FKFtIQVZFX0dFVEdST1VQU10sIFsxXSwKKyAg ICAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIHdvcmtpbmcgYGdldGdy b3VwcycgZnVuY3Rpb24uXSkKKyAgICAgIDs7CisgIGVzYWMKKyAgTElCUz0kYWNfc2F2ZV9M SUJTCitdKSMgQUNfRlVOQ19HRVRHUk9VUFMKKworXSkKKworQUNfREVGVU4oW2dsX0ZVTkNf R0VUR1JPVVBTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9HRVRHUk9VUFNdKQorICBB Q19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX0NB Tk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworCisgIEFDX0ZVTkNfR0VU R1JPVVBTCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzICE9IHllczsgdGhlbgor ICAgIEhBVkVfR0VUR1JPVVBTPTAKKyAgZWxzZQorICAgIGlmIHRlc3QgIiRhY19jdl90eXBl X2dldGdyb3VwcyIgIT0gZ2lkX3QgXAorICAgICAgIHx8IHsgY2FzZSAiJGFjX2N2X2Z1bmNf Z2V0Z3JvdXBzX3dvcmtzIiBpbgorICAgICAgICAgICAgICAqeWVzKSBmYWxzZTs7CisgICAg ICAgICAgICAgICopIHRydWU7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIH07IHRo ZW4KKyAgICAgIFJFUExBQ0VfR0VUR1JPVVBTPTEKKyAgICAgIEFDX0RFRklORShbR0VUR1JP VVBTX1pFUk9fQlVHXSwgWzFdLCBbRGVmaW5lIHRoaXMgdG8gMSBpZgorICAgICAgICBnZXRn cm91cHMoMCxOVUxMKSBkb2VzIG5vdCByZXR1cm4gdGhlIG51bWJlciBvZiBncm91cHMuXSkK KyAgICBlbHNlCisgICAgICBkbmwgRGV0ZWN0IEZyZWVCU0QgYnVnOyBQT1NJWCByZXF1aXJl cyBnZXRncm91cHMoLTEscHRyKSB0byBmYWlsLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3do ZXRoZXIgZ2V0Z3JvdXBzIGhhbmRsZXMgbmVnYXRpdmUgdmFsdWVzXSwKKyAgICAgICAgW2ds X2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzXSwKKyAgICAgICAgW0FDX1JVTl9JRkVMU0UoW0FD X0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisgICAgICAgICAgW1tpbnQg c2l6ZSA9IGdldGdyb3VwcyAoMCwgMCk7CisgICAgICAgICAgICBnaWRfdCAqbGlzdCA9IG1h bGxvYyAoc2l6ZSAqIHNpemVvZiAqbGlzdCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0Z3Jv dXBzICgtMSwgbGlzdCkgIT0gLTE7XV0pXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRn cm91cHNfd29ya3M9eWVzXSwKKyAgICAgICAgICBbZ2xfY3ZfZnVuY19nZXRncm91cHNfd29y a3M9bm9dLAorICAgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAg ICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuCisgICAgICAgICAgICAgKi1n bnUqKSBnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAg ICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0 LgorICAgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9Imd1 ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICAgXSldKQorICAgICAg Y2FzZSAiJGdsX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzIiBpbgorICAgICAgICAqeWVzKSA7 OworICAgICAgICAqKSBSRVBMQUNFX0dFVEdST1VQUz0xIDs7CisgICAgICBlc2FjCisgICAg ZmkKKyAgZmkKKyAgdGVzdCAtbiAiJEdFVEdST1VQU19MSUIiICYmIExJQlM9IiRHRVRHUk9V UFNfTElCICRMSUJTIgorXSkKCj09PSBtb2RpZmllZCBmaWxlICdtNC9nbnVsaWItY29tcC5t NCcKLS0tIG00L2dudWxpYi1jb21wLm00CTIwMTItMDktMjcgMDE6MDY6MjMgKzAwMDAKKysr IG00L2dudWxpYi1jb21wLm00CTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTUzLDE3 ICs1MywyMCBAQAogICAjIENvZGUgZnJvbSBtb2R1bGUgZHRvdGltZXNwZWM6CiAgICMgQ29k ZSBmcm9tIG1vZHVsZSBkdXAyOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZW52aXJvbjoKKyAg IyBDb2RlIGZyb20gbW9kdWxlIGV1aWRhY2Nlc3M6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBl eGVjaW5mbzoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGV4dGVuc2lvbnM6CiAgIEFDX1JFUVVJ UkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCiAgICMgQ29kZSBmcm9tIG1vZHVsZSBl eHRlcm4taW5saW5lOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZW1vZGU6CisgICMgQ29k ZSBmcm9tIG1vZHVsZSBnZXRncm91cHM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRsb2Fk YXZnOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0LWdudToKICAgIyBDb2RlIGZyb20g bW9kdWxlIGdldG9wdC1wb3NpeDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRleHQtaDoK ICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRpbWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBn ZXR0aW1lb2ZkYXk6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBncm91cC1tZW1iZXI6CiAgICMg Q29kZSBmcm9tIG1vZHVsZSBpZ25vcmUtdmFsdWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBp bmNsdWRlX25leHQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnRwcm9wczoKQEAgLTc5LDYg KzgyLDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHBzZWxlY3Q6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBwdGhyZWFkX3NpZ21hc2s6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGlu azoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHJvb3QtdWlkOgogICAjIENvZGUgZnJvbSBtb2R1 bGUgc2lnbmFsLWg6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybjoK ICAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGw6CkBAIC0xMjAsNiAr MTI0LDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHV0aW1lbnM6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSB2ZXJpZnk6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSB3YXJuaW5nczoKKyAgIyBD b2RlIGZyb20gbW9kdWxlIHhhbGxvYy1vdmVyc2l6ZWQ6CiBdKQogCiAjIFRoaXMgbWFjcm8g c2hvdWxkIGJlIGludm9rZWQgZnJvbSAuL2NvbmZpZ3VyZS5hYywgaW4gdGhlIHNlY3Rpb24K QEAgLTE1NCw2ICsxNTksMTIgQEAKICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2R1 cDJdKQogICBnbF9FTlZJUk9OCiAgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtlbnZp cm9uXSkKKyAgZ2xfRlVOQ19FVUlEQUNDRVNTCisgIGlmIHRlc3QgJEhBVkVfRVVJREFDQ0VT UyA9IDA7IHRoZW4KKyAgICBBQ19MSUJPQkooW2V1aWRhY2Nlc3NdKQorICAgIGdsX1BSRVJF UV9FVUlEQUNDRVNTCisgIGZpCisgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtldWlk YWNjZXNzXSkKICAgZ2xfRVhFQ0lORk9fSAogICBBQ19SRVFVSVJFKFtnbF9FWFRFUk5fSU5M SU5FXSkKICAgZ2xfRklMRU1PREUKQEAgLTI2OSwxOCArMjgwLDMyIEBACiAgIGdsX1VOSVNU RF9ICiAgIGdsX1VUSU1FTlMKICAgZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFtZT1mYWxzZQor ICBnbF9nbnVsaWJfZW5hYmxlZF9nZXRncm91cHM9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJs ZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzY9ZmFsc2UKKyAgZ2xfZ251bGli X2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDE9ZmFsc2UKICAgZ2xf Z251bGliX2VuYWJsZWRfcGF0aG1heD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9zdGF0 PWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX3N0cnRvbGw9ZmFsc2UKICAgZ2xfZ251bGli X2VuYWJsZWRfc3RydG91bGw9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfdmVyaWZ5PWZh bHNlCisgIGdsX2dudWxpYl9lbmFibGVkXzY4MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRl YWVjPWZhbHNlCiAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9kb3NuYW1lICgpCiAgIHsKICAg ICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9kb3NuYW1lOyB0aGVuCiAgICAgICBnbF9nbnVs aWJfZW5hYmxlZF9kb3NuYW1lPXRydWUKICAgICBmaQogICB9CisgIGZ1bmNfZ2xfZ251bGli X200Y29kZV9nZXRncm91cHMgKCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVk X2dldGdyb3VwczsgdGhlbgorICAgICAgZ2xfRlVOQ19HRVRHUk9VUFMKKyAgICAgIGlmIHRl c3QgJEhBVkVfR0VUR1JPVVBTID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0dFVEdST1VQUyA9IDE7 IHRoZW4KKyAgICAgICAgQUNfTElCT0JKKFtnZXRncm91cHNdKQorICAgICAgZmkKKyAgICAg IGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtnZXRncm91cHNdKQorICAgICAgZ2xfZ251 bGliX2VuYWJsZWRfZ2V0Z3JvdXBzPXRydWUKKyAgICBmaQorICB9CiAgIGZ1bmNfZ2xfZ251 bGliX200Y29kZV9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNiAoKQogICB7CiAg ICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdm MmRiMzY7IHRoZW4KQEAgLTI4OSw2ICszMTQsMjQgQEAKICAgICAgIGdsX2dudWxpYl9lbmFi bGVkX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2PXRydWUKICAgICBmaQogICB9 CisgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThl NWVkMSAoKQorICB7CisgICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5 YWU2NWE4MzZhNjA0MWU4ZTVlZDE7IHRoZW4KKyAgICAgIGdsX0ZVTkNfR1JPVVBfTUVNQkVS CisgICAgICBpZiB0ZXN0ICRIQVZFX0dST1VQX01FTUJFUiA9IDA7IHRoZW4KKyAgICAgICAg QUNfTElCT0JKKFtncm91cC1tZW1iZXJdKQorICAgICAgICBnbF9QUkVSRVFfR1JPVVBfTUVN QkVSCisgICAgICBmaQorICAgICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2dyb3Vw LW1lbWJlcl0pCisgICAgICBnbF9nbnVsaWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgz NmE2MDQxZThlNWVkMT10cnVlCisgICAgICBpZiB0ZXN0ICRIQVZFX0dST1VQX01FTUJFUiA9 IDA7IHRoZW4KKyAgICAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2dldGdyb3VwcworICAg ICAgZmkKKyAgICAgIGlmIHRlc3QgJEhBVkVfR1JPVVBfTUVNQkVSID0gMDsgdGhlbgorICAg ICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNh NGVhZWMKKyAgICAgIGZpCisgICAgZmkKKyAgfQogICBmdW5jX2dsX2dudWxpYl9tNGNvZGVf cGF0aG1heCAoKQogICB7CiAgICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heDsg dGhlbgpAQCAtMzQ3LDYgKzM5MCwxOCBAQAogICAgICAgZ2xfZ251bGliX2VuYWJsZWRfdmVy aWZ5PXRydWUKICAgICBmaQogICB9CisgIGZ1bmNfZ2xfZ251bGliX200Y29kZV82ODJlNjA5 NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYyAoKQorICB7CisgICAgaWYgISAkZ2xfZ251bGli X2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWM7IHRoZW4KKyAgICAg IGdsX2dudWxpYl9lbmFibGVkXzY4MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVjPXRy dWUKKyAgICBmaQorICB9CisgIGlmIHRlc3QgJEhBVkVfRVVJREFDQ0VTUyA9IDA7IHRoZW4K KyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4 ZTVlZDEKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9FVUlEQUNDRVNTID0gMDsgdGhlbgorICAg IGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdGF0CisgIGZpCiAgIGlmIHRlc3QgJFJFUExBQ0Vf R0VUT1BUID0gMTsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9iZTQ1M2NlYzVl ZWNmNTczMWEyNzRmMmRlN2YyZGIzNgogICBmaQpAQCAtMzczLDEyICs0MjgsMTUgQEAKICAg ZmkKICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0dOVUxJQl9FTkFCTEVEX10pCiAgIEFNX0NP TkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9kb3NuYW1lXSwgWyRnbF9nbnVsaWJfZW5h YmxlZF9kb3NuYW1lXSkKKyAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2dl dGdyb3Vwc10sIFskZ2xfZ251bGliX2VuYWJsZWRfZ2V0Z3JvdXBzXSkKICAgQU1fQ09ORElU SU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJk YjM2XSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2Yy ZGIzNl0pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9hOTc4Njg1MGU5 OTlhZTY1YTgzNmE2MDQxZThlNWVkMV0sIFskZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBl OTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDFdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElC X0VOQUJMRURfcGF0aG1heF0sIFskZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heF0pCiAgIEFN X0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9zdGF0XSwgWyRnbF9nbnVsaWJfZW5h YmxlZF9zdGF0XSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX3N0cnRv bGxdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0cnRvbGxdKQogICBBTV9DT05ESVRJT05BTChb Z2xfR05VTElCX0VOQUJMRURfc3RydG91bGxdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0cnRv dWxsXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX3ZlcmlmeV0sIFsk Z2xfZ251bGliX2VuYWJsZWRfdmVyaWZ5XSkKKyAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJ Ql9FTkFCTEVEXzY4MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVjXSwgWyRnbF9nbnVs aWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlY10pCiAgICMgRW5k IG9mIGNvZGUgZnJvbSBtb2R1bGVzCiAgIG00X2lmdmFsKGdsX0xJQlNPVVJDRVNfTElTVCwg WwogICAgIG00X3N5c2NtZChbdGVzdCAhIC1kIF1tNF9kZWZuKFtnbF9MSUJTT1VSQ0VTX0RJ Ul0pWyB8fApAQCAtNTM4LDEyICs1OTYsMTQgQEAKICAgbGliL2R0b2FzdHIuYwogICBsaWIv ZHRvdGltZXNwZWMuYwogICBsaWIvZHVwMi5jCisgIGxpYi9ldWlkYWNjZXNzLmMKICAgbGli L2V4ZWNpbmZvLmMKICAgbGliL2V4ZWNpbmZvLmluLmgKICAgbGliL2ZpbGVtb2RlLmMKICAg bGliL2ZpbGVtb2RlLmgKICAgbGliL2Z0b2FzdHIuYwogICBsaWIvZnRvYXN0ci5oCisgIGxp Yi9nZXRncm91cHMuYwogICBsaWIvZ2V0bG9hZGF2Zy5jCiAgIGxpYi9nZXRvcHQuYwogICBs aWIvZ2V0b3B0LmluLmgKQEAgLTU1Miw2ICs2MTIsNyBAQAogICBsaWIvZ2V0dGV4dC5oCiAg IGxpYi9nZXR0aW1lLmMKICAgbGliL2dldHRpbWVvZmRheS5jCisgIGxpYi9ncm91cC1tZW1i ZXIuYwogICBsaWIvaWdub3JlLXZhbHVlLmgKICAgbGliL2ludHByb3BzLmgKICAgbGliL2lu dHR5cGVzLmluLmgKQEAgLTU2NCw2ICs2MjUsNyBAQAogICBsaWIvcHNlbGVjdC5jCiAgIGxp Yi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIvcmVhZGxpbmsuYworICBsaWIvcm9vdC11aWQu aAogICBsaWIvc2hhMS5jCiAgIGxpYi9zaGExLmgKICAgbGliL3NoYTI1Ni5jCkBAIC02MDUs MjEgKzY2NywyNSBAQAogICBsaWIvdXRpbWVucy5jCiAgIGxpYi91dGltZW5zLmgKICAgbGli L3ZlcmlmeS5oCisgIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgKICAgbTQvMDBnbnVsaWIubTQK ICAgbTQvYWxsb2NhLm00CiAgIG00L2Mtc3RydG9kLm00CiAgIG00L2Nsb2NrX3RpbWUubTQK ICAgbTQvZHVwMi5tNAogICBtNC9lbnZpcm9uLm00CisgIG00L2V1aWRhY2Nlc3MubTQKICAg bTQvZXhlY2luZm8ubTQKICAgbTQvZXh0ZW5zaW9ucy5tNAogICBtNC9leHRlcm4taW5saW5l Lm00CiAgIG00L2ZpbGVtb2RlLm00CisgIG00L2dldGdyb3Vwcy5tNAogICBtNC9nZXRsb2Fk YXZnLm00CiAgIG00L2dldG9wdC5tNAogICBtNC9nZXR0aW1lLm00CiAgIG00L2dldHRpbWVv ZmRheS5tNAogICBtNC9nbnVsaWItY29tbW9uLm00CisgIG00L2dyb3VwLW1lbWJlci5tNAog ICBtNC9pbmNsdWRlX25leHQubTQKICAgbTQvaW50dHlwZXMubTQKICAgbTQvbGFyZ2VmaWxl Lm00Cgo9PT0gYWRkZWQgZmlsZSAnbTQvZ3JvdXAtbWVtYmVyLm00JwotLS0gbTQvZ3JvdXAt bWVtYmVyLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L2dyb3VwLW1lbWJl ci5tNAkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0wLDAgKzEsMjkgQEAKKyMgc2Vy aWFsIDE0CisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEsIDIwMDMtMjAwNywgMjAwOS0y MDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBm cmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVu bGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdp dGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlz IHByZXNlcnZlZC4KKworZG5sIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nCisKK0FDX0RFRlVO KFtnbF9GVU5DX0dST1VQX01FTUJFUl0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9I X0RFRkFVTFRTXSkKKworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHVuaXN0ZC5oPiB0byBkZWNs YXJlIGdyb3VwX21lbWJlcigpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVO U0lPTlNdKQorCisgIGRubCBEbyB0aGlzIHJlcGxhY2VtZW50IGNoZWNrIG1hbnVhbGx5IGJl Y2F1c2UgSSB3YW50IHRoZSBoeXBoZW4KKyAgZG5sIChub3QgdGhlIHVuZGVyc2NvcmUpIGlu IHRoZSBmaWxlbmFtZS4KKyAgQUNfQ0hFQ0tfRlVOQyhbZ3JvdXBfbWVtYmVyXSwgLCBbCisg ICAgSEFWRV9HUk9VUF9NRU1CRVI9MAorICBdKQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9m IGxpYi9ncm91cC1tZW1iZXIuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfR1JPVVBfTUVNQkVS XSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19HRVRHUk9VUFNdKQorXSkKCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxvZwkyMDEyLTEwLTE0 IDAwOjE3OjA3ICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTItMTAtMTQgMDY6MDI6NTIg KzAwMDAKQEAgLTEsMyArMSwyNyBAQAorMjAxMi0xMC0xNCAgUGF1bCBFZ2dlcnQgIDxlZ2dl cnRAY3MudWNsYS5lZHU+CisKKwlVc2UgZXVpZGFjY2Vzcywgbm90IGFjY2Vzcywgd2hlbiBj aGVja2luZyBmaWxlIHBlcm1pc3Npb25zIChCdWcjMTI2MzIpLgorCSogTWFrZWZpbGUuaW4g KExJQl9FQUNDRVNTKTogTmV3IG1hY3JvLgorCShMSUJFUyk6IFVzZSBpdC4KKwkqIGNhbGxw cm9jLmMgKGluaXRfY2FsbHByb2MpOgorCSogY2hhcnNldC5jIChpbml0X2NoYXJzZXQpOgor CSogZmlsZWlvLmMgKGNoZWNrX2V4aXN0aW5nKSBbIURPU19OVF06CisJKGNoZWNrX2V4ZWN1 dGFibGUpIFshRE9TX05UICYmICFIQVZFX0VVSURBQ0NFU1NdOgorCSogbHJlYWQuYyAob3Bl bnAsIGxvYWRfcGF0aF9jaGVjayk6CisJKiBwcm9jZXNzLmMgKGFsbG9jYXRlX3B0eSk6CisJ KiB4cmRiLmMgKGZpbGVfcCk6CisJVXNlIGV1aWRhY2Nlc3MsIG5vdCBhY2Nlc3MuICBVc2Ug c3ltYm9saWMgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ2VycworCWZvciB0aGUgZmxhZ3MsIGFz IHRoZXkncmUgcG9ydGFibGUgbm93LgorCSogZmlsZWlvLmMgKEZmaWxlX3JlYWRhYmxlX3Ap IFshRE9TX05UICYmICFtYWNpbnRvc2hdOgorCVVzZSBldWlkYWNjZXNzLCBub3Qgc3RhdCAr IG9wZW4gKyBjbG9zZS4KKwkoZmlsZV9kaXJlY3RvcnlfcCk6IE5ldyBmdW5jdGlvbiwgd2hp Y2ggdXNlcyAnc3RhdCcgb24gbW9zdCBwbGFjZXMKKwlidXQgJ2FjY2VzcycgKGZvciBlZmZp Y2llbmN5KSBpZiBXSU5ET1dTTlQuCisJKEZmaWxlX2RpcmVjdG9yeV9wKTogVXNlIGl0Lgor CSogbGlzcC5oIChmaWxlX2RpcmVjdG9yeV9wKTogTmV3IGRlY2wuCisJKiBscmVhZC5jIChv cGVucCk6IFdoZW4gb3BlbmluZyBhIGZpbGUsIHVzZSBmc3RhdCByYXRoZXIgdGhhbgorCXN0 YXQsIGFzIHRoYXQgYXZvaWRzIGEgcGVybWlzc2lvbnMgcmFjZS4gIFdoZW4gbm90IG9wZW5p bmcgYSBmaWxlLAorCXVzZSBmaWxlX2RpcmVjdG9yeV9wIHJhdGhlciB0aGFuIHN0YXQuCisK IDIwMTItMTAtMTMgIEphbiBEasOkcnYgIDxqYW4uaC5kQHN3aXBuZXQuc2U+CiAKIAkqIGd0 a3V0aWwuYyAoeGdfc2V0X3dpZGdldF9iZyk6IERpdmlkZSBieSA2NTUzNSAoQnVnIzEyNjEy KS4KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvTWFrZWZpbGUuaW4nCi0tLSBzcmMvTWFrZWZp bGUuaW4JMjAxMi0xMC0wOCAxMjo1MzoxOCArMDAwMAorKysgc3JjL01ha2VmaWxlLmluCTIw MTItMTAtMTMgMDE6NDk6NDEgKzAwMDAKQEAgLTE1MCw2ICsxNTAsNyBAQAogTTE3Tl9GTFRf TElCUyA9IEBNMTdOX0ZMVF9MSUJTQAogCiBMSUJfQ0xPQ0tfR0VUVElNRT1ATElCX0NMT0NL X0dFVFRJTUVACitMSUJfRUFDQ0VTUz1ATElCX0VBQ0NFU1NACiBMSUJfVElNRVJfVElNRT1A TElCX1RJTUVSX1RJTUVACiAKIERCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQApAQCAtMzky LDcgKzM5Myw3IEBACiBMSUJFUyA9ICQoTElCUykgJChXMzJfTElCUykgJChMSUJYX0JBU0Up ICQoTElCSU1BR0UpIFwKICAgICQoTElCWF9PVEhFUikgJChMSUJTT1VORCkgXAogICAgJChS U1ZHX0xJQlMpICQoSU1BR0VNQUdJQ0tfTElCUykgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAot ICAgJChMSUJfVElNRVJfVElNRSkgJChEQlVTX0xJQlMpIFwKKyAgICQoTElCX0VBQ0NFU1Mp ICQoTElCX1RJTUVSX1RJTUUpICQoREJVU19MSUJTKSBcCiAgICAkKExJQl9FWEVDSU5GTykg XAogICAgJChMSUJYTUwyX0xJQlMpICQoTElCR1BNKSAkKExJQlJFU09MVikgJChMSUJTX1NZ U1RFTSkgXAogICAgJChMSUJTX1RFUk1DQVApICQoR0VUTE9BREFWR19MSUJTKSAkKFNFVFRJ TkdTX0xJQlMpICQoTElCU0VMSU5VWF9MSUJTKSBcCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L2NhbGxwcm9jLmMnCi0tLSBzcmMvY2FsbHByb2MuYwkyMDEyLTA5LTIzIDIyOjI1OjIyICsw MDAwCisrKyBzcmMvY2FsbHByb2MuYwkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0x NTk3LDEzICsxNTk3LDEzIEBACiAjZW5kaWYKICAgICB7CiAgICAgICB0ZW1wZGlyID0gRmRp cmVjdG9yeV9maWxlX25hbWUgKFZleGVjX2RpcmVjdG9yeSk7Ci0gICAgICBpZiAoYWNjZXNz IChTU0RBVEEgKHRlbXBkaXIpLCAwKSA8IDApCisgICAgICBpZiAoZXVpZGFjY2VzcyAoU1NE QVRBICh0ZW1wZGlyKSwgRl9PSykgPCAwKQogCWRpcl93YXJuaW5nICgiV2FybmluZzogYXJj aC1kZXBlbmRlbnQgZGF0YSBkaXIgKCVzKSBkb2VzIG5vdCBleGlzdC5cbiIsCiAJCSAgICAg VmV4ZWNfZGlyZWN0b3J5KTsKICAgICB9CiAKICAgdGVtcGRpciA9IEZkaXJlY3RvcnlfZmls ZV9uYW1lIChWZGF0YV9kaXJlY3RvcnkpOwotICBpZiAoYWNjZXNzIChTU0RBVEEgKHRlbXBk aXIpLCAwKSA8IDApCisgIGlmIChldWlkYWNjZXNzIChTU0RBVEEgKHRlbXBkaXIpLCBGX09L KSA8IDApCiAgICAgZGlyX3dhcm5pbmcgKCJXYXJuaW5nOiBhcmNoLWluZGVwZW5kZW50IGRh dGEgZGlyICglcykgZG9lcyBub3QgZXhpc3QuXG4iLAogCQkgVmRhdGFfZGlyZWN0b3J5KTsK IAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyc2V0LmMnCi0tLSBzcmMvY2hhcnNldC5j CTIwMTItMTAtMDEgMDY6MzY6NTQgKzAwMDAKKysrIHNyYy9jaGFyc2V0LmMJMjAxMi0xMC0x MiAyMzoyODozMSArMDAwMApAQCAtMjI5Myw3ICsyMjkzLDcgQEAKIHsKICAgTGlzcF9PYmpl Y3QgdGVtcGRpcjsKICAgdGVtcGRpciA9IEZleHBhbmRfZmlsZV9uYW1lIChidWlsZF9zdHJp bmcgKCJjaGFyc2V0cyIpLCBWZGF0YV9kaXJlY3RvcnkpOwotICBpZiAoYWNjZXNzIChTU0RB VEEgKHRlbXBkaXIpLCAwKSA8IDApCisgIGlmIChldWlkYWNjZXNzIChTU0RBVEEgKHRlbXBk aXIpLCBGX09LKSAhPSAwKQogICAgIHsKICAgICAgIC8qIFRoaXMgdXNlZCB0byBiZSBub24t ZmF0YWwgKGRpcl93YXJuaW5nKSwgYnV0IGl0IHNob3VsZCBub3QKICAgICAgICAgIGhhcHBl biwgYW5kIGlmIGl0IGRvZXMgc29vbmVyIG9yIGxhdGVyIGl0IHdpbGwgY2F1c2Ugc29tZQoK PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9maWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEy LTEwLTEzIDA4OjU1OjI2ICswMDAwCisrKyBzcmMvZmlsZWlvLmMJMjAxMi0xMC0xNCAwNjow Mjo1MiArMDAwMApAQCAtMjQyOCwxMCArMjQyOCwxMSBAQAogICAvKiBUaGUgZnVsbCBlbXVs YXRpb24gb2YgUG9zaXggJ3N0YXQnIGlzIHRvbyBleHBlbnNpdmUgb24KICAgICAgRE9TL1dp bmRvd3MsIHdoZW4gYWxsIHdlIHdhbnQgdG8ga25vdyBpcyB3aGV0aGVyIHRoZSBmaWxlIGV4 aXN0cy4KICAgICAgU28gd2UgdXNlICdhY2Nlc3MnIGluc3RlYWQsIHdoaWNoIGlzIG11Y2gg bW9yZSBsaWdodHdlaWdodC4gICovCisgIC8qIEZJWE1FOiBhbiBldWlkYWNjZXNzIGltcGxl bWVudGF0aW9uIHNob3VsZCBiZSBhZGRlZCB0byB0aGUKKyAgICAgRE9TL1dpbmRvd3MgcG9y dHMgYW5kIHRoaXMgI2lmZGVmIGJyYW5jaCBzaG91bGQgYmUgcmVtb3ZlZC4gICovCiAgIHJl dHVybiAoYWNjZXNzIChmaWxlbmFtZSwgRl9PSykgPj0gMCk7CiAjZWxzZQotICBzdHJ1Y3Qg c3RhdCBzdDsKLSAgcmV0dXJuIChzdGF0IChmaWxlbmFtZSwgJnN0KSA+PSAwKTsKKyAgcmV0 dXJuIGV1aWRhY2Nlc3MgKGZpbGVuYW1lLCBGX09LKSA9PSAwOwogI2VuZGlmCiB9CiAKQEAg LTI0NDEsMTkgKzI0NDIsMTQgQEAKIGNoZWNrX2V4ZWN1dGFibGUgKGNoYXIgKmZpbGVuYW1l KQogewogI2lmZGVmIERPU19OVAorICAvKiBGSVhNRTogYW4gZXVpZGFjY2VzcyBpbXBsZW1l bnRhdGlvbiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlCisgICAgIERPUy9XaW5kb3dzIHBvcnRz IGFuZCB0aGlzICNpZmRlZiBicmFuY2ggc2hvdWxkIGJlIHJlbW92ZWQuICAqLwogICBzdHJ1 Y3Qgc3RhdCBzdDsKICAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmc3QpIDwgMCkKICAgICByZXR1 cm4gMDsKICAgcmV0dXJuICgoc3Quc3RfbW9kZSAmIFNfSUVYRUMpICE9IDApOwogI2Vsc2Ug Lyogbm90IERPU19OVCAqLwotI2lmZGVmIEhBVkVfRVVJREFDQ0VTUwotICByZXR1cm4gKGV1 aWRhY2Nlc3MgKGZpbGVuYW1lLCAxKSA+PSAwKTsKLSNlbHNlCi0gIC8qIEFjY2VzcyBpc24n dCBxdWl0ZSByaWdodCBiZWNhdXNlIGl0IHVzZXMgdGhlIHJlYWwgdWlkCi0gICAgIGFuZCB3 ZSByZWFsbHkgd2FudCB0byB0ZXN0IHdpdGggdGhlIGVmZmVjdGl2ZSB1aWQuCi0gICAgIEJ1 dCBVbml4IGRvZXNuJ3QgZ2l2ZSB1cyBhIHJpZ2h0IHdheSB0byBkbyBpdC4gICovCi0gIHJl dHVybiAoYWNjZXNzIChmaWxlbmFtZSwgMSkgPj0gMCk7Ci0jZW5kaWYKKyAgcmV0dXJuIGV1 aWRhY2Nlc3MgKGZpbGVuYW1lLCBYX09LKSA9PSAwOwogI2VuZGlmIC8qIG5vdCBET1NfTlQg Ki8KIH0KIApAQCAtMjQ2MywxMyArMjQ1OSwxNCBAQAogY2hlY2tfd3JpdGFibGUgKGNvbnN0 IGNoYXIgKmZpbGVuYW1lKQogewogI2lmZGVmIE1TRE9TCisgIC8qIEZJWE1FOiBhbiBldWlk YWNjZXNzIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBhZGRlZCB0byB0aGUKKyAgICAgRE9T L1dpbmRvd3MgcG9ydHMgYW5kIHRoaXMgI2lmZGVmIGJyYW5jaCBzaG91bGQgYmUgcmVtb3Zl ZC4gICovCiAgIHN0cnVjdCBzdGF0IHN0OwogICBpZiAoc3RhdCAoZmlsZW5hbWUsICZzdCkg PCAwKQogICAgIHJldHVybiAwOwogICByZXR1cm4gKHN0LnN0X21vZGUgJiBTX0lXUklURSB8 fCBTX0lTRElSIChzdC5zdF9tb2RlKSk7CiAjZWxzZSAvKiBub3QgTVNET1MgKi8KLSNpZmRl ZiBIQVZFX0VVSURBQ0NFU1MKLSAgYm9vbCByZXMgPSAoZXVpZGFjY2VzcyAoZmlsZW5hbWUs IDIpID49IDApOworICBib29sIHJlcyA9IGV1aWRhY2Nlc3MgKGZpbGVuYW1lLCBXX09LKSA9 PSAwOwogI2lmZGVmIENZR1dJTgogICAvKiBldWlkYWNjZXNzIG1heSBoYXZlIHJldHVybmVk IGZhaWx1cmUgYmVjYXVzZSBDeWd3aW4gY291bGRuJ3QKICAgICAgZGV0ZXJtaW5lIHRoZSBm aWxlJ3MgVUlEIG9yIEdJRDsgaWYgc28sIHdlIHJldHVybiBzdWNjZXNzLiAqLwpAQCAtMjQ4 MiwxNCArMjQ3OSw2IEBACiAgICAgfQogI2VuZGlmIC8qIENZR1dJTiAqLwogICByZXR1cm4g cmVzOwotI2Vsc2UgLyogbm90IEhBVkVfRVVJREFDQ0VTUyAqLwotICAvKiBBY2Nlc3MgaXNu J3QgcXVpdGUgcmlnaHQgYmVjYXVzZSBpdCB1c2VzIHRoZSByZWFsIHVpZAotICAgICBhbmQg d2UgcmVhbGx5IHdhbnQgdG8gdGVzdCB3aXRoIHRoZSBlZmZlY3RpdmUgdWlkLgotICAgICBC dXQgVW5peCBkb2Vzbid0IGdpdmUgdXMgYSByaWdodCB3YXkgdG8gZG8gaXQuCi0gICAgIE9w ZW5pbmcgd2l0aCBPX1dST05MWSBjb3VsZCB3b3JrIGZvciBhbiBvcmRpbmFyeSBmaWxlLAot ICAgICBidXQgd291bGQgbG9zZSBmb3IgZGlyZWN0b3JpZXMuICAqLwotICByZXR1cm4gKGFj Y2VzcyAoZmlsZW5hbWUsIDIpID49IDApOwotI2VuZGlmIC8qIG5vdCBIQVZFX0VVSURBQ0NF U1MgKi8KICNlbmRpZiAvKiBub3QgTVNET1MgKi8KIH0KIApAQCAtMjU0Niw5ICsyNTM1LDYg QEAKIHsKICAgTGlzcF9PYmplY3QgYWJzbmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsK LSAgaW50IGRlc2M7Ci0gIGludCBmbGFnczsKLSAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKIAog ICBDSEVDS19TVFJJTkcgKGZpbGVuYW1lKTsKICAgYWJzbmFtZSA9IEZleHBhbmRfZmlsZV9u YW1lIChmaWxlbmFtZSwgUW5pbCk7CkBAIC0yNTYyLDI4ICsyNTQ4LDEzIEBACiAgIGFic25h bWUgPSBFTkNPREVfRklMRSAoYWJzbmFtZSk7CiAKICNpZiBkZWZpbmVkIChET1NfTlQpIHx8 IGRlZmluZWQgKG1hY2ludG9zaCkKLSAgLyogVW5kZXIgTVMtRE9TLCBXaW5kb3dzLCBhbmQg TWFjaW50b3NoLCBvcGVuIGRvZXMgbm90IHdvcmsgZm9yCi0gICAgIGRpcmVjdG9yaWVzLiAg Ki8KKyAgLyogRklYTUU6IGFuIGV1aWRhY2Nlc3MgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJl IGFkZGVkIHRvIHRoZQorICAgICBET1MvV2luZG93cyBwb3J0cyBhbmQgdGhpcyAjaWZkZWYg YnJhbmNoIHNob3VsZCBiZSByZW1vdmVkLiAgKi8KICAgaWYgKGFjY2VzcyAoU0RBVEEgKGFi c25hbWUpLCAwKSA9PSAwKQogICAgIHJldHVybiBRdDsKICAgcmV0dXJuIFFuaWw7CiAjZWxz ZSAvKiBub3QgRE9TX05UIGFuZCBub3QgbWFjaW50b3NoICovCi0gIGZsYWdzID0gT19SRE9O TFk7Ci0jaWZkZWYgT19OT05CTE9DSwotICAvKiBPcGVuaW5nIGEgZmlmbyB3aXRob3V0IE9f Tk9OQkxPQ0sgY2FuIHdhaXQuCi0gICAgIFdlIGRvbid0IHdhbnQgdG8gd2FpdC4gIEJ1dCB3 ZSBkb24ndCB3YW50IHRvIG1lc3Mgd3RoIE9fTk9OQkxPQ0sKLSAgICAgZXhjZXB0IGluIHRo ZSBjYXNlIG9mIGEgZmlmbywgb24gYSBzeXN0ZW0gd2hpY2ggaGFuZGxlcyBpdC4gICovCi0g IGRlc2MgPSBzdGF0IChTU0RBVEEgKGFic25hbWUpLCAmc3RhdGJ1Zik7Ci0gIGlmIChkZXNj IDwgMCkKLSAgICByZXR1cm4gUW5pbDsKLSAgaWYgKFNfSVNGSUZPIChzdGF0YnVmLnN0X21v ZGUpKQotICAgIGZsYWdzIHw9IE9fTk9OQkxPQ0s7Ci0jZW5kaWYKLSAgZGVzYyA9IGVtYWNz X29wZW4gKFNTREFUQSAoYWJzbmFtZSksIGZsYWdzLCAwKTsKLSAgaWYgKGRlc2MgPCAwKQot ICAgIHJldHVybiBRbmlsOwotICBlbWFjc19jbG9zZSAoZGVzYyk7Ci0gIHJldHVybiBRdDsK KyAgcmV0dXJuIGV1aWRhY2Nlc3MgKFNTREFUQSAoYWJzbmFtZSksIFJfT0spID09IDAgPyBR dCA6IFFuaWw7CiAjZW5kaWYgLyogbm90IERPU19OVCBhbmQgbm90IG1hY2ludG9zaCAqLwog fQogCkBAIC0yNzAyLDggKzI2NzMsNyBAQAogU2VlIGBmaWxlLXN5bWxpbmstcCcgdG8gZGlz dGluZ3Vpc2ggc3ltbGlua3MuICAqLykKICAgKExpc3BfT2JqZWN0IGZpbGVuYW1lKQogewot ICByZWdpc3RlciBMaXNwX09iamVjdCBhYnNuYW1lOwotICBzdHJ1Y3Qgc3RhdCBzdDsKKyAg TGlzcF9PYmplY3QgYWJzbmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsKIAogICBhYnNu YW1lID0gZXhwYW5kX2FuZF9kaXJfdG9fZmlsZSAoZmlsZW5hbWUsIEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBkaXJlY3RvcnkpKTsKQEAgLTI3MTYsOSArMjY4NiwyMCBAQAogCiAgIGFic25h bWUgPSBFTkNPREVfRklMRSAoYWJzbmFtZSk7CiAKLSAgaWYgKHN0YXQgKFNTREFUQSAoYWJz bmFtZSksICZzdCkgPCAwKQotICAgIHJldHVybiBRbmlsOwotICByZXR1cm4gU19JU0RJUiAo c3Quc3RfbW9kZSkgPyBRdCA6IFFuaWw7CisgIHJldHVybiBmaWxlX2RpcmVjdG9yeV9wIChT U0RBVEEgKGFic25hbWUpKSA/IFF0IDogUW5pbDsKK30KKworLyogUmV0dXJuIHRydWUgaWYg RklMRSBpcyBhIGRpcmVjdG9yeSBvciBhIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnkuICAqLwor Ym9vbAorZmlsZV9kaXJlY3RvcnlfcCAoY2hhciBjb25zdCAqZmlsZSkKK3sKKyNpZmRlZiBX SU5ET1dTTlQKKyAgLyogJ2FjY2VzcycgaXMgY2hlYXBlciB0aGFuICdzdGF0Jy4gICovCisg IHJldHVybiBhY2Nlc3MgKGZpbGUsIERfT0spID09IDA7CisjZWxzZQorICBzdHJ1Y3Qgc3Rh dCBzdDsKKyAgcmV0dXJuIHN0YXQgKGZpbGUsICZzdCkgPT0gMCAmJiBTX0lTRElSIChzdC5z dF9tb2RlKTsKKyNlbmRpZgogfQogCiBERUZVTiAoImZpbGUtYWNjZXNzaWJsZS1kaXJlY3Rv cnktcCIsIEZmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AsCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL2xpc3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMi0xMC0xMiAxNToxOTo1NCArMDAw MAorKysgc3JjL2xpc3AuaAkyMDEyLTEwLTE0IDA2OjAwOjQwICswMDAwCkBAIC0zMTc5LDYg KzMxNzksNyBAQAogZXh0ZXJuIExpc3BfT2JqZWN0IHJlc3RvcmVfcG9pbnRfdW53aW5kIChM aXNwX09iamVjdCk7CiBleHRlcm4gX05vcmV0dXJuIHZvaWQgcmVwb3J0X2ZpbGVfZXJyb3Ig KGNvbnN0IGNoYXIgKiwgTGlzcF9PYmplY3QpOwogZXh0ZXJuIHZvaWQgaW50ZXJuYWxfZGVs ZXRlX2ZpbGUgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBib29sIGZpbGVfZGlyZWN0b3J5X3Ag KGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBzeW1zX29mX2ZpbGVpbyAodm9pZCk7CiBl eHRlcm4gTGlzcF9PYmplY3QgbWFrZV90ZW1wX25hbWUgKExpc3BfT2JqZWN0LCBib29sKTsK IGV4dGVybiBMaXNwX09iamVjdCBRZGVsZXRlX2ZpbGU7Cgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2xyZWFkLmMnCi0tLSBzcmMvbHJlYWQuYwkyMDEyLTEwLTEyIDE1OjE5OjU0ICswMDAw CisrKyBzcmMvbHJlYWQuYwkyMDEyLTEwLTE0IDA2OjAwOjQwICswMDAwCkBAIC0xNDA0LDcg KzE0MDQsNyBAQAogSWYgU1VGRklYRVMgaXMgbm9uLW5pbCwgaXQgc2hvdWxkIGJlIGEgbGlz dCBvZiBzdWZmaXhlcyB0byBhcHBlbmQgdG8KIGZpbGUgbmFtZSB3aGVuIHNlYXJjaGluZy4K IElmIG5vbi1uaWwsIFBSRURJQ0FURSBpcyB1c2VkIGluc3RlYWQgb2YgYGZpbGUtcmVhZGFi bGUtcCcuCi1QUkVESUNBVEUgY2FuIGFsc28gYmUgYW4gaW50ZWdlciB0byBwYXNzIHRvIHRo ZSBhY2Nlc3MoMikgZnVuY3Rpb24sCitQUkVESUNBVEUgY2FuIGFsc28gYmUgYW4gaW50ZWdl ciB0byBwYXNzIHRvIHRoZSBldWlkYWNjZXNzKDIpIGZ1bmN0aW9uLAogaW4gd2hpY2ggY2Fz ZSBmaWxlLW5hbWUtaGFuZGxlcnMgYXJlIGlnbm9yZWQuCiBUaGlzIGZ1bmN0aW9uIHdpbGwg bm9ybWFsbHkgc2tpcCBkaXJlY3Rvcmllcywgc28gaWYgeW91IHdhbnQgaXQgdG8gZmluZAog ZGlyZWN0b3JpZXMsIG1ha2Ugc3VyZSB0aGUgUFJFRElDQVRFIGZ1bmN0aW9uIHJldHVybnMg YGRpci1vaycgZm9yIHRoZW0uICAqLykKQEAgLTE0NDIsNyArMTQ0Miw2IEBACiBpbnQKIG9w ZW5wIChMaXNwX09iamVjdCBwYXRoLCBMaXNwX09iamVjdCBzdHIsIExpc3BfT2JqZWN0IHN1 ZmZpeGVzLCBMaXNwX09iamVjdCAqc3RvcmVwdHIsIExpc3BfT2JqZWN0IHByZWRpY2F0ZSkK IHsKLSAgaW50IGZkOwogICBwdHJkaWZmX3QgZm5fc2l6ZSA9IDEwMDsKICAgY2hhciBidWZb MTAwXTsKICAgY2hhciAqZm4gPSBidWY7CkBAIC0xNDk3LDcgKzE0OTYsNiBAQAogCXsKIAkg IHB0cmRpZmZfdCBmbmxlbiwgbHN1ZmZpeCA9IFNCWVRFUyAoWENBUiAodGFpbCkpOwogCSAg TGlzcF9PYmplY3QgaGFuZGxlcjsKLQkgIGJvb2wgZXhpc3RzOwogCiAJICAvKiBDb25jYXRl bmF0ZSBwYXRoIGVsZW1lbnQvc3BlY2lmaWVkIG5hbWUgd2l0aCB0aGUgc3VmZml4LgogCSAg ICAgSWYgdGhlIGRpcmVjdG9yeSBzdGFydHMgd2l0aCAvOiwgcmVtb3ZlIHRoYXQuICAqLwpA QCAtMTUyMSw2ICsxNTE5LDcgQEAKIAkgIGhhbmRsZXIgPSBGZmluZF9maWxlX25hbWVfaGFu ZGxlciAoc3RyaW5nLCBRZmlsZV9leGlzdHNfcCk7CiAJICBpZiAoKCFOSUxQIChoYW5kbGVy KSB8fCAhTklMUCAocHJlZGljYXRlKSkgJiYgIU5BVE5VTVAgKHByZWRpY2F0ZSkpCiAgICAg ICAgICAgICB7CisJICAgICAgYm9vbCBleGlzdHM7CiAJICAgICAgaWYgKE5JTFAgKHByZWRp Y2F0ZSkpCiAJCWV4aXN0cyA9ICFOSUxQIChGZmlsZV9yZWFkYWJsZV9wIChzdHJpbmcpKTsK IAkgICAgICBlbHNlCkBAIC0xNTQyLDM3ICsxNTQxLDM4IEBACiAJICAgIH0KIAkgIGVsc2UK IAkgICAgewotI2lmbmRlZiBXSU5ET1dTTlQKLQkgICAgICBzdHJ1Y3Qgc3RhdCBzdDsKLSNl bmRpZgorCSAgICAgIGludCBmZDsKIAkgICAgICBjb25zdCBjaGFyICpwZm47CiAKIAkgICAg ICBlbmNvZGVkX2ZuID0gRU5DT0RFX0ZJTEUgKHN0cmluZyk7CiAJICAgICAgcGZuID0gU1NE QVRBIChlbmNvZGVkX2ZuKTsKLSNpZmRlZiBXSU5ET1dTTlQKLQkgICAgICBleGlzdHMgPSBh Y2Nlc3MgKHBmbiwgRl9PSykgPT0gMCAmJiBhY2Nlc3MgKHBmbiwgRF9PSykgPCAwOwotI2Vs c2UKLQkgICAgICBleGlzdHMgPSAoc3RhdCAocGZuLCAmc3QpID09IDAgJiYgISBTX0lTRElS IChzdC5zdF9tb2RlKSk7Ci0jZW5kaWYKLQkgICAgICBpZiAoZXhpc3RzKQorCisJICAgICAg LyogQ2hlY2sgdGhhdCB3ZSBjYW4gYWNjZXNzIG9yIG9wZW4gaXQuICAqLworCSAgICAgIGlm IChOQVROVU1QIChwcmVkaWNhdGUpKQorCQlmZCA9ICgoKFhGQVNUSU5UIChwcmVkaWNhdGUp ICYgfklOVF9NQVgpID09IDAKKwkJICAgICAgICYmIGV1aWRhY2Nlc3MgKHBmbiwgWEZBU1RJ TlQgKHByZWRpY2F0ZSkpID09IDAKKwkJICAgICAgICYmICEgZmlsZV9kaXJlY3RvcnlfcCAo cGZuKSkKKwkJICAgICAgPyAxIDogLTEpOworCSAgICAgIGVsc2UKIAkJewotCQkgIC8qIENo ZWNrIHRoYXQgd2UgY2FuIGFjY2VzcyBvciBvcGVuIGl0LiAgKi8KLQkJICBpZiAoTkFUTlVN UCAocHJlZGljYXRlKSkKLQkJICAgIGZkID0gKCgoWEZBU1RJTlQgKHByZWRpY2F0ZSkgJiB+ SU5UX01BWCkgPT0gMAotCQkJICAgJiYgYWNjZXNzIChwZm4sIFhGQVNUSU5UIChwcmVkaWNh dGUpKSA9PSAwKQotCQkJICA/IDEgOiAtMSk7Ci0JCSAgZWxzZQotCQkgICAgZmQgPSBlbWFj c19vcGVuIChwZm4sIE9fUkRPTkxZLCAwKTsKLQotCQkgIGlmIChmZCA+PSAwKQorCQkgIHN0 cnVjdCBzdGF0IHN0OworCQkgIGZkID0gZW1hY3Nfb3BlbiAocGZuLCBPX1JET05MWSwgMCk7 CisJCSAgaWYgKDAgPD0gZmQKKwkJICAgICAgJiYgKGZzdGF0IChmZCwgJnN0KSAhPSAwIHx8 IFNfSVNESVIgKHN0LnN0X21vZGUpKSkKIAkJICAgIHsKLQkJICAgICAgLyogV2Ugc3VjY2Vl ZGVkOyByZXR1cm4gdGhpcyBkZXNjcmlwdG9yIGFuZCBmaWxlbmFtZS4gICovCi0JCSAgICAg IGlmIChzdG9yZXB0cikKLQkJCSpzdG9yZXB0ciA9IHN0cmluZzsKLQkJICAgICAgVU5HQ1BS TzsKLQkJICAgICAgcmV0dXJuIGZkOworCQkgICAgICBlbWFjc19jbG9zZSAoZmQpOworCQkg ICAgICBmZCA9IC0xOwogCQkgICAgfQogCQl9CisKKwkgICAgICBpZiAoZmQgPj0gMCkKKwkJ eworCQkgIC8qIFdlIHN1Y2NlZWRlZDsgcmV0dXJuIHRoaXMgZGVzY3JpcHRvciBhbmQgZmls ZW5hbWUuICAqLworCQkgIGlmIChzdG9yZXB0cikKKwkJICAgICpzdG9yZXB0ciA9IHN0cmlu ZzsKKwkJICBVTkdDUFJPOworCQkgIHJldHVybiBmZDsKKwkJfQogCSAgICB9CiAJfQogICAg ICAgaWYgKGFic29sdXRlKQpAQCAtNDA4OCw3ICs0MDg4LDcgQEAKICAgICAgIGlmIChTVFJJ TkdQIChkaXJmaWxlKSkKICAgICAgICAgewogICAgICAgICAgIGRpcmZpbGUgPSBGZGlyZWN0 b3J5X2ZpbGVfbmFtZSAoZGlyZmlsZSk7Ci0gICAgICAgICAgaWYgKGFjY2VzcyAoU1NEQVRB IChkaXJmaWxlKSwgMCkgPCAwKQorICAgICAgICAgIGlmIChldWlkYWNjZXNzIChTU0RBVEEg KGRpcmZpbGUpLCBGX09LKSAhPSAwKQogICAgICAgICAgICAgZGlyX3dhcm5pbmcgKCJXYXJu aW5nOiBMaXNwIGRpcmVjdG9yeSBgJXMnIGRvZXMgbm90IGV4aXN0LlxuIiwKICAgICAgICAg ICAgICAgICAgICAgICAgICBYQ0FSIChwYXRoX3RhaWwpKTsKICAgICAgICAgfQoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9wcm9jZXNzLmMnCi0tLSBzcmMvcHJvY2Vzcy5jCTIwMTItMTAt MTMgMDA6NTI6MDEgKzAwMDAKKysrIHNyYy9wcm9jZXNzLmMJMjAxMi0xMC0xMyAwMDo1NToy MCArMDAwMApAQCAtNjYzLDcgKzY2Myw3IEBACiAjZWxzZQogCSAgICBzcHJpbnRmIChwdHlf bmFtZSwgIi9kZXYvdHR5JWMleCIsIGMsIGkpOwogI2VuZGlmIC8qIG5vIFBUWV9UVFlfTkFN RV9TUFJJTlRGICovCi0JICAgIGlmIChhY2Nlc3MgKHB0eV9uYW1lLCA2KSAhPSAwKQorCSAg ICBpZiAoZXVpZGFjY2VzcyAocHR5X25hbWUsIFJfT0sgfCBXX09LKSAhPSAwKQogCSAgICAg IHsKIAkJZW1hY3NfY2xvc2UgKGZkKTsKICMgaWZuZGVmIF9fc2dpCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL3hyZGIuYycKLS0tIHNyYy94cmRiLmMJMjAxMi0wOS0xNSAwNzowNjo1NiAr MDAwMAorKysgc3JjL3hyZGIuYwkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0yNjgs NyArMjY4LDcgQEAKIHsKICAgc3RydWN0IHN0YXQgc3RhdHVzOwogCi0gIHJldHVybiAoYWNj ZXNzIChmaWxlbmFtZSwgNCkgPT0gMCAgICAgICAgICAgICAvKiBleGlzdHMgYW5kIGlzIHJl YWRhYmxlICovCisgIHJldHVybiAoZXVpZGFjY2VzcyAoZmlsZW5hbWUsIFJfT0spID09IDAg ICAgICAvKiBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovCiAJICAmJiBzdGF0IChmaWxlbmFt ZSwgJnN0YXR1cykgPT0gMAkvKiBnZXQgdGhlIHN0YXR1cyAqLwogCSAgJiYgKFNfSVNESVIg KHN0YXR1cy5zdF9tb2RlKSkgPT0gMCk7CS8qIG5vdCBhIGRpcmVjdG9yeSAqLwogfQoK --------------040101050002060507040305--